From ea29b08aeb54227e6628f655ccfdb96fe4d8c378 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Mon, 10 Aug 2009 12:23:31 -0600 Subject: [PATCH] Imported Upstream version 3.2.2 --- AUTHORS | 4 + INSTALL | 9 +- Makefile.am | 10 +- Makefile.common | 114 +- Makefile.common.spu | 46 + Makefile.gen.gen | 70 + Makefile.in | 583 +- Makefile.par.gen | 77 + Makefile.swig | 117 + Makefile.swig.gen.t | 258 + NEWS | 21 +- README | 103 +- README.hacking | 155 +- aclocal.m4 | 6703 +- bootstrap | 8 +- config.guess | 34 +- config.h.in | 185 +- config.sub | 46 +- config/Makefile.am | 37 +- config/Makefile.in | 566 +- config/acx_cblas.m4 | 227 + config/acx_pthread.m4 | 147 +- config/ax_boost_base.m4 | 334 + config/ax_boost_date_time.m4 | 34 + config/ax_boost_filesystem.m4 | 45 + config/ax_boost_iostreams.m4 | 39 + config/ax_boost_program_options.m4 | 35 + config/ax_boost_python.m4 | 92 + config/ax_boost_regex.m4 | 35 + config/ax_boost_serialization.m4 | 38 + config/ax_boost_signals.m4 | 35 + config/ax_boost_system.m4 | 40 + config/ax_boost_test_exec_monitor.m4 | 35 + config/ax_boost_thread.m4 | 72 + config/ax_boost_unit_test_framework.m4 | 36 + config/ax_boost_wserialization.m4 | 46 + config/gr_boost.m4 | 111 - config/gr_check_memalign.m4 | 42 + config/gr_doxygen.m4 | 19 +- config/gr_fortran.m4 | 3 +- config/gr_gcell.m4 | 36 + config/gr_lib64.m4 | 85 + config/gr_omnithread.m4 | 9 +- config/gr_python.m4 | 173 +- config/gr_qwt.m4 | 152 + config/gr_qwtplot3d.m4 | 151 + config/gr_scripting.m4 | 2 +- config/gr_set_md_cpu.m4 | 34 +- config/gr_standalone.m4 | 116 + config/gr_subversion.m4 | 36 + config/gr_x86_64.m4 | 39 - config/grc_build.m4 | 281 +- config/grc_docs.m4 | 33 + config/grc_gcell.m4 | 80 + config/grc_gnuradio_core.m4 | 84 +- config/grc_gnuradio_examples.m4 | 73 +- config/grc_gr_atsc.m4 | 39 + config/grc_gr_audio_alsa.m4 | 31 +- config/grc_gr_audio_jack.m4 | 28 +- config/grc_gr_audio_oss.m4 | 43 +- config/grc_gr_audio_osx.m4 | 39 +- config/grc_gr_audio_portaudio.m4 | 30 +- config/grc_gr_audio_windows.m4 | 39 +- config/grc_gr_comedi.m4 | 46 + config/grc_gr_cvsd_vocoder.m4 | 38 + config/grc_gr_gcell.m4 | 38 + config/grc_gr_gpio.m4 | 38 + config/grc_gr_gsm_fr_vocoder.m4 | 22 +- config/grc_gr_msdd6000.m4 | 37 + config/grc_gr_pager.m4 | 36 + config/grc_gr_qtgui.m4 | 103 + config/grc_gr_radar_mono.m4 | 45 + config/grc_gr_radio_astronomy.m4 | 20 +- config/grc_gr_sounder.m4 | 44 + config/grc_gr_trellis.m4 | 24 +- config/grc_gr_usrp.m4 | 29 +- config/grc_gr_usrp2.m4 | 38 + config/grc_gr_utils.m4 | 36 + config/grc_gr_video_sdl.m4 | 32 +- config/grc_gr_wxgui.m4 | 33 +- config/grc_grc.m4 | 62 + config/grc_gruel.m4 | 56 + config/grc_mblock.m4 | 59 + config/grc_omnithread.m4 | 46 + config/grc_pmt.m4 | 55 + config/grc_usrp.m4 | 77 +- config/grc_usrp2.m4 | 82 + config/lf_cc.m4 | 1 - config/lf_cxx.m4 | 54 - config/lf_warnings.m4 | 47 +- config/libtool.m4 | 7373 ++ config/ltoptions.m4 | 368 + config/ltsugar.m4 | 123 + config/ltversion.m4 | 23 + config/lt~obsolete.m4 | 92 + config/pkg.m4 | 259 +- config/sdl.m4 | 9 +- config/usrp_fusb_tech.m4 | 89 +- config/usrp_libusb.m4 | 87 +- config/usrp_sdcc.m4 | 2 +- configure | 63269 ++++++++++------ configure-cell-cross | 73 + configure.ac | 245 +- depcomp | 93 +- docs/ChangeLog | 24 + docs/Makefile.am | 23 + docs/Makefile.in | 1029 + docs/doxygen/Doxyfile.in | 1590 + docs/doxygen/Makefile.am | 51 + docs/doxygen/Makefile.in | 1092 + docs/doxygen/other/Makefile.am | 32 + docs/doxygen/other/Makefile.in | 882 + docs/doxygen/other/doxypy.py | 414 + docs/doxygen/other/group_defs.dox | 77 + .../doxygen}/other/omnithread.html | 0 .../doc => docs/doxygen}/other/omnithread.pdf | Bin .../doc => docs/doxygen}/other/omnithread.ps | 0 .../doxygen}/other/shared_ptr_docstub.h | 0 .../doxygen}/other/tv-channel-frequencies | 0 .../doxygen}/other/vector_docstub.h | 0 .../xml => docs/doxygen/xml-swig}/Makefile.am | 0 docs/doxygen/xml-swig/Makefile.in | 740 + .../doc/xml => docs/doxygen/xml-swig}/README | 0 .../doxygen/xml-swig}/doxy2swig.py | 0 .../xml => docs/doxygen/xml-swig}/swig.xsl | 0 gcell/Makefile.am | 28 + gcell/Makefile.in | 1070 + gcell/apps/Makefile.am | 51 + gcell/apps/Makefile.in | 1245 + gcell/apps/benchmark_dma.cc | 273 + gcell/apps/benchmark_nop.cc | 163 + gcell/apps/benchmark_roundtrip.cc | 240 + gcell/apps/spu/Makefile.am | 34 + gcell/apps/spu/Makefile.in | 1014 + gcell/apps/spu/benchmark_procs.c | 72 + gcell/apps/test_all.cc | 39 + gcell/gcell.pc.in | 12 + gcell/gcell_spu.pc.in | 11 + gcell/ibm/Makefile.am | 98 + gcell/ibm/Makefile.in | 948 + gcell/ibm/README | 10 + gcell/ibm/sync/ppu_source/atomic.h | 112 + gcell/ibm/sync/ppu_source/atomic_add.h | 62 + gcell/ibm/sync/ppu_source/atomic_add_return.h | 66 + gcell/ibm/sync/ppu_source/atomic_dec.h | 60 + .../ibm/sync/ppu_source/atomic_dec_and_test.h | 63 + .../sync/ppu_source/atomic_dec_if_positive.h | 76 + gcell/ibm/sync/ppu_source/atomic_dec_return.h | 68 + gcell/ibm/sync/ppu_source/atomic_inc.h | 59 + gcell/ibm/sync/ppu_source/atomic_inc_return.h | 66 + gcell/ibm/sync/ppu_source/atomic_read.h | 62 + gcell/ibm/sync/ppu_source/atomic_set.h | 66 + gcell/ibm/sync/ppu_source/atomic_sub.h | 61 + .../ibm/sync/ppu_source/atomic_sub_and_test.h | 63 + gcell/ibm/sync/ppu_source/atomic_sub_return.h | 65 + gcell/ibm/sync/ppu_source/complete.h | 61 + gcell/ibm/sync/ppu_source/complete_all.h | 70 + gcell/ibm/sync/ppu_source/completion.h | 50 + gcell/ibm/sync/ppu_source/cond.h | 65 + gcell/ibm/sync/ppu_source/cond_broadcast.h | 70 + gcell/ibm/sync/ppu_source/cond_init.h | 66 + gcell/ibm/sync/ppu_source/cond_signal.h | 74 + gcell/ibm/sync/ppu_source/cond_wait.h | 96 + gcell/ibm/sync/ppu_source/init_completion.h | 63 + gcell/ibm/sync/ppu_source/libsync.h | 114 + gcell/ibm/sync/ppu_source/mutex.h | 46 + gcell/ibm/sync/ppu_source/mutex_init.h | 67 + gcell/ibm/sync/ppu_source/mutex_lock.h | 78 + gcell/ibm/sync/ppu_source/mutex_trylock.h | 81 + gcell/ibm/sync/ppu_source/mutex_unlock.h | 64 + gcell/ibm/sync/ppu_source/pdt_libsync.xml | 184 + .../sync/ppu_source/pdt_libsync_config.xml | 61 + gcell/ibm/sync/ppu_source/sync_utils.h | 73 + gcell/ibm/sync/ppu_source/trace_libsync.h | 117 + .../ibm/sync/ppu_source/wait_for_completion.h | 75 + gcell/ibm/sync/spu_source/atomic.h | 101 + gcell/ibm/sync/spu_source/atomic_add.h | 62 + gcell/ibm/sync/spu_source/atomic_add_return.h | 69 + gcell/ibm/sync/spu_source/atomic_dec.h | 61 + .../ibm/sync/spu_source/atomic_dec_and_test.h | 64 + .../sync/spu_source/atomic_dec_if_positive.h | 86 + gcell/ibm/sync/spu_source/atomic_dec_return.h | 70 + gcell/ibm/sync/spu_source/atomic_inc.h | 61 + gcell/ibm/sync/spu_source/atomic_inc_return.h | 70 + gcell/ibm/sync/spu_source/atomic_read.h | 78 + gcell/ibm/sync/spu_source/atomic_set.h | 68 + gcell/ibm/sync/spu_source/atomic_sub.h | 64 + .../ibm/sync/spu_source/atomic_sub_and_test.h | 66 + gcell/ibm/sync/spu_source/atomic_sub_return.h | 69 + gcell/ibm/sync/spu_source/complete.h | 67 + gcell/ibm/sync/spu_source/complete_all.h | 74 + gcell/ibm/sync/spu_source/completion.h | 68 + gcell/ibm/sync/spu_source/cond.h | 69 + gcell/ibm/sync/spu_source/cond_broadcast.h | 73 + gcell/ibm/sync/spu_source/cond_init.h | 127 + gcell/ibm/sync/spu_source/cond_signal.h | 88 + gcell/ibm/sync/spu_source/cond_wait.h | 103 + gcell/ibm/sync/spu_source/init_completion.h | 82 + gcell/ibm/sync/spu_source/libsync.h | 116 + gcell/ibm/sync/spu_source/mutex.h | 178 + gcell/ibm/sync/spu_source/mutex_init.h | 64 + gcell/ibm/sync/spu_source/mutex_lock.h | 66 + gcell/ibm/sync/spu_source/mutex_trylock.h | 70 + gcell/ibm/sync/spu_source/mutex_unlock.h | 59 + gcell/ibm/sync/spu_source/read_lock.h | 66 + gcell/ibm/sync/spu_source/read_trylock.h | 71 + gcell/ibm/sync/spu_source/read_unlock.h | 88 + gcell/ibm/sync/spu_source/rwlock_init.h | 60 + gcell/ibm/sync/spu_source/sync_irq.h | 76 + gcell/ibm/sync/spu_source/sync_utils.h | 103 + gcell/ibm/sync/spu_source/trace_libsync.h | 117 + .../ibm/sync/spu_source/wait_for_completion.h | 82 + gcell/ibm/sync/spu_source/write_lock.h | 67 + gcell/ibm/sync/spu_source/write_trylock.h | 72 + gcell/ibm/sync/spu_source/write_unlock.h | 69 + gcell/include/Makefile.am | 24 + gcell/include/Makefile.in | 1029 + gcell/include/gcell/Makefile.am | 42 + gcell/include/gcell/Makefile.in | 1079 + gcell/include/gcell/compiler.h | 45 + gcell/include/gcell/gc_aligned_alloc.h | 52 + gcell/include/gcell/gc_atomic.h | 29 + gcell/include/gcell/gc_cdefs.h | 34 + gcell/include/gcell/gc_declare_proc.h | 64 + gcell/include/gcell/gc_jd_queue.h | 52 + gcell/include/gcell/gc_jd_queue_data.h | 52 + gcell/include/gcell/gc_jd_stack.h | 70 + gcell/include/gcell/gc_job_desc.h | 214 + gcell/include/gcell/gc_job_desc_private.h | 39 + gcell/include/gcell/gc_job_manager.h | 287 + gcell/include/gcell/gc_logging.h | 166 + gcell/include/gcell/gc_mbox.h | 53 + gcell/include/gcell/gc_spu_args.h | 60 + gcell/include/gcell/gc_types.h | 63 + gcell/include/gcell/gcp_fft_1d_r2.h | 64 + gcell/include/gcell/memory_barrier.h | 64 + gcell/include/gcell/spu/Makefile.am | 30 + gcell/include/gcell/spu/Makefile.in | 954 + gcell/include/gcell/spu/fft_1d.h | 103 + gcell/include/gcell/spu/fft_1d_r2.h | 529 + gcell/include/gcell/spu/gc_delay.h | 27 + gcell/include/gcell/spu/gc_jd_queue.h | 59 + gcell/include/gcell/spu/gc_random.h | 32 + gcell/include/gcell/spu/gc_spu_macs.h | 380 + gcell/include/gcell/spu/libfft.h | 113 + gcell/lib/Makefile.am | 50 + gcell/lib/Makefile.in | 1127 + gcell/lib/general/Makefile.am | 23 + gcell/lib/general/Makefile.in | 871 + gcell/lib/general/spu/fft_1d_r2.c | 35 + gcell/lib/general/spu/memset.S | 185 + gcell/lib/general/spu/qa_memset.c | 201 + gcell/lib/runtime/Makefile.am | 66 + gcell/lib/runtime/Makefile.in | 1095 + gcell/lib/runtime/gc_aligned_alloc.cc | 55 + gcell/lib/runtime/gc_client_thread_info.h | 81 + gcell/lib/runtime/gc_jd_queue.c | 78 + gcell/lib/runtime/gc_jd_stack.c | 168 + gcell/lib/runtime/gc_job_manager.cc | 186 + gcell/lib/runtime/gc_job_manager_impl.cc | 1403 + gcell/lib/runtime/gc_job_manager_impl.h | 274 + gcell/lib/runtime/gc_proc_def_utils.cc | 123 + gcell/lib/runtime/gc_proc_def_utils.h | 42 + gcell/lib/runtime/gcell-embedspu-libtool | 40 + gcell/lib/runtime/qa_gcell_runtime.cc | 43 + gcell/lib/runtime/qa_gcell_runtime.h | 35 + gcell/lib/runtime/qa_jd_queue.cc | 78 + gcell/lib/runtime/qa_jd_queue.h | 42 + gcell/lib/runtime/qa_jd_stack.cc | 67 + gcell/lib/runtime/qa_jd_stack.h | 42 + gcell/lib/runtime/qa_job_manager.cc | 790 + gcell/lib/runtime/qa_job_manager.h | 89 + gcell/lib/runtime/spu/gc_delay.c | 58 + gcell/lib/runtime/spu/gc_logging.c | 77 + gcell/lib/runtime/spu/gc_main.c | 731 + gcell/lib/runtime/spu/gc_random.c | 44 + gcell/lib/runtime/spu/gc_spu_config.h | 39 + gcell/lib/runtime/spu/gc_spu_jd_queue.c | 123 + gcell/lib/runtime/spu/gcell_runtime_qa.c | 105 + gcell/lib/runtime/spu/spu_buffers.c | 35 + gcell/lib/runtime/spu/spu_buffers.h | 32 + gcell/lib/spu/Makefile.am | 138 + gcell/lib/spu/Makefile.in | 1427 + gcell/lib/wrapper/Makefile.am | 74 + gcell/lib/wrapper/Makefile.in | 1034 + gcell/lib/wrapper/gcp_fft_1d_r2.cc | 119 + gcell/lib/wrapper/qa_gcell_general.cc | 83 + gcell/lib/wrapper/qa_gcell_general.h | 40 + gcell/lib/wrapper/qa_gcell_wrapper.cc | 41 + gcell/lib/wrapper/qa_gcell_wrapper.h | 35 + gcell/lib/wrapper/qa_gcp_fft_1d_r2.h | 48 + gcell/lib/wrapper/spu/gcs_fft_1d_r2.c | 94 + gnuradio-core/ChangeLog | 1899 - gnuradio-core/Makefile.am | 9 +- gnuradio-core/Makefile.in | 608 +- gnuradio-core/THANKS | 7 - gnuradio-core/doc/Doxyfile.in | 1247 - gnuradio-core/doc/Makefile.am | 71 - gnuradio-core/doc/Makefile.in | 756 - gnuradio-core/doc/other/Makefile.am | 31 - gnuradio-core/doc/other/Makefile.in | 564 - gnuradio-core/doc/other/group_defs.dox | 31 - gnuradio-core/doc/xml/Makefile.in | 483 - gnuradio-core/gnuradio-core.pc.in | 6 +- gnuradio-core/src/Makefile.in | 563 +- .../src/gen_interpolator_taps/Makefile.in | 569 +- gnuradio-core/src/lib/Makefile.am | 17 +- gnuradio-core/src/lib/Makefile.in | 641 +- gnuradio-core/src/lib/bug_work_around_6.cc | 2 +- .../3dnow_float_dotprod_really_simple.S | 8 +- .../lib/filter/3dnow_float_dotprod_simple.S | 8 +- gnuradio-core/src/lib/filter/Makefile.am | 105 +- gnuradio-core/src/lib/filter/Makefile.in | 1182 +- .../src/lib/filter/ccomplex_dotprod_3dnow.S | 8 +- .../src/lib/filter/ccomplex_dotprod_3dnow64.S | 8 +- .../lib/filter/ccomplex_dotprod_3dnowext.S | 8 +- .../lib/filter/ccomplex_dotprod_3dnowext64.S | 8 +- .../src/lib/filter/ccomplex_dotprod_sse.S | 8 +- .../src/lib/filter/ccomplex_dotprod_sse64.S | 8 +- .../src/lib/filter/complex_dotprod_3dnow.S | 8 +- .../src/lib/filter/complex_dotprod_3dnow64.S | 8 +- .../src/lib/filter/complex_dotprod_3dnowext.S | 8 +- .../lib/filter/complex_dotprod_3dnowext64.S | 8 +- .../src/lib/filter/complex_dotprod_sse.S | 16 +- .../src/lib/filter/complex_dotprod_sse64.S | 16 +- gnuradio-core/src/lib/filter/cpuid_x86.S | 4 + gnuradio-core/src/lib/filter/cpuid_x86_64.S | 4 + .../src/lib/filter/dotprod_fff_altivec.c | 162 + .../src/lib/filter/dotprod_fff_altivec.h | 49 + .../src/lib/filter/fcomplex_dotprod_3dnow.S | 8 +- .../src/lib/filter/fcomplex_dotprod_3dnow64.S | 8 +- .../src/lib/filter/fcomplex_dotprod_sse.S | 16 +- .../src/lib/filter/fcomplex_dotprod_sse64.S | 16 +- gnuradio-core/src/lib/filter/filter.i | 6 +- .../src/lib/filter/float_dotprod_3dnow.S | 8 +- .../src/lib/filter/float_dotprod_3dnow64.S | 8 +- .../src/lib/filter/float_dotprod_sse.S | 16 +- .../src/lib/filter/float_dotprod_sse64.S | 16 +- .../lib/filter/generate_gr_fir_sysconfig.py | 8 +- .../generate_gr_fir_sysconfig_generic.py | 6 +- .../src/lib/filter/generate_gr_fir_util.py | 6 +- .../src/lib/filter/gr_adaptive_fir_ccf.cc | 2 +- .../src/lib/filter/gr_adaptive_fir_ccf.h | 7 +- .../src/lib/filter/gr_adaptive_fir_ccf.i | 2 +- gnuradio-core/src/lib/filter/gr_altivec.c | 38 + gnuradio-core/src/lib/filter/gr_altivec.h | 75 + .../src/lib/filter/gr_cma_equalizer_cc.h | 2 +- .../src/lib/filter/gr_cma_equalizer_cc.i | 6 +- gnuradio-core/src/lib/filter/gr_cpu.cc | 107 - gnuradio-core/src/lib/filter/gr_cpu.h | 7 +- .../src/lib/filter/gr_cpu_powerpc.cc | 59 + gnuradio-core/src/lib/filter/gr_cpu_x86.cc | 113 + .../src/lib/filter/gr_fft_filter_ccc.cc | 4 + .../src/lib/filter/gr_fft_filter_ccc.h | 2 +- .../src/lib/filter/gr_fft_filter_fff.cc | 5 + .../src/lib/filter/gr_fft_filter_fff.h | 2 +- .../src/lib/filter/gr_filter_delay_fc.h | 2 +- .../src/lib/filter/gr_fir_ccc_simd.cc | 5 +- .../src/lib/filter/gr_fir_ccc_simd.h | 1 + .../src/lib/filter/gr_fir_ccf_simd.cc | 5 +- .../src/lib/filter/gr_fir_ccf_simd.h | 1 + gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h | 2 + .../src/lib/filter/gr_fir_fcc_simd.h | 1 + gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h | 2 + .../src/lib/filter/gr_fir_fff_altivec.cc | 84 + .../src/lib/filter/gr_fir_fff_altivec.h | 45 + .../src/lib/filter/gr_fir_fff_simd.h | 1 + .../src/lib/filter/gr_fir_filter_XXX.h.t | 2 +- .../src/lib/filter/gr_fir_filter_ccc.h | 2 +- .../src/lib/filter/gr_fir_filter_ccf.h | 2 +- .../src/lib/filter/gr_fir_filter_fcc.h | 2 +- .../src/lib/filter/gr_fir_filter_fff.h | 2 +- .../src/lib/filter/gr_fir_filter_fsf.h | 2 +- .../src/lib/filter/gr_fir_filter_scc.h | 2 +- .../src/lib/filter/gr_fir_fsf_simd.h | 1 + gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h | 2 + .../src/lib/filter/gr_fir_scc_simd.h | 2 +- .../lib/filter/gr_fir_sysconfig_powerpc.cc | 340 + .../src/lib/filter/gr_fir_sysconfig_powerpc.h | 46 + .../lib/filter/gr_fractional_interpolator.cc | 97 - .../lib/filter/gr_fractional_interpolator.h | 62 - .../filter/gr_fractional_interpolator_cc.cc | 93 + .../filter/gr_fractional_interpolator_cc.h | 67 + .../filter/gr_fractional_interpolator_cc.i | 37 + .../filter/gr_fractional_interpolator_ff.cc | 93 + .../filter/gr_fractional_interpolator_ff.h | 67 + .../filter/gr_fractional_interpolator_ff.i | 37 + .../gr_freq_xlating_fir_filter_XXX.cc.t | 1 + .../filter/gr_freq_xlating_fir_filter_XXX.h.t | 2 +- .../filter/gr_freq_xlating_fir_filter_ccc.cc | 1 + .../filter/gr_freq_xlating_fir_filter_ccc.h | 2 +- .../filter/gr_freq_xlating_fir_filter_ccf.cc | 1 + .../filter/gr_freq_xlating_fir_filter_ccf.h | 2 +- .../filter/gr_freq_xlating_fir_filter_fcc.cc | 1 + .../filter/gr_freq_xlating_fir_filter_fcc.h | 2 +- .../filter/gr_freq_xlating_fir_filter_fcf.cc | 1 + .../filter/gr_freq_xlating_fir_filter_fcf.h | 2 +- .../filter/gr_freq_xlating_fir_filter_scc.cc | 1 + .../filter/gr_freq_xlating_fir_filter_scc.h | 2 +- .../filter/gr_freq_xlating_fir_filter_scf.cc | 1 + .../filter/gr_freq_xlating_fir_filter_scf.h | 2 +- gnuradio-core/src/lib/filter/gr_goertzel_fc.h | 2 +- gnuradio-core/src/lib/filter/gr_hilbert_fc.h | 2 +- .../src/lib/filter/gr_iir_filter_ffd.cc | 6 - .../src/lib/filter/gr_iir_filter_ffd.h | 7 +- .../lib/filter/gr_interp_fir_filter_XXX.h.t | 2 +- .../src/lib/filter/gr_interp_fir_filter_ccc.h | 2 +- .../src/lib/filter/gr_interp_fir_filter_ccf.h | 2 +- .../src/lib/filter/gr_interp_fir_filter_fcc.h | 2 +- .../src/lib/filter/gr_interp_fir_filter_fff.h | 2 +- .../src/lib/filter/gr_interp_fir_filter_fsf.h | 2 +- .../src/lib/filter/gr_interp_fir_filter_scc.h | 2 +- .../filter/gr_rational_resampler_base_XXX.h.t | 2 +- .../filter/gr_rational_resampler_base_ccc.h | 2 +- .../filter/gr_rational_resampler_base_ccf.h | 2 +- .../filter/gr_rational_resampler_base_fcc.h | 2 +- .../filter/gr_rational_resampler_base_fff.h | 2 +- .../filter/gr_rational_resampler_base_fsf.h | 2 +- .../filter/gr_rational_resampler_base_scc.h | 2 +- gnuradio-core/src/lib/filter/gr_rotator.h | 21 +- .../src/lib/filter/gr_single_pole_avg.h | 110 - .../filter/gr_single_pole_avg_filter_ff.cc | 81 - .../lib/filter/gr_single_pole_avg_filter_ff.h | 76 - .../lib/filter/gr_single_pole_avg_filter_ff.i | 34 - .../lib/filter/gr_single_pole_iir_filter_cc.h | 2 +- .../lib/filter/gr_single_pole_iir_filter_ff.h | 2 +- .../src/lib/filter/gr_single_pole_rec.h | 110 - .../filter/gr_single_pole_rec_filter_ff.cc | 81 - .../lib/filter/gr_single_pole_rec_filter_ff.h | 76 - .../lib/filter/gr_single_pole_rec_filter_ff.i | 34 - .../src/lib/filter/gr_single_zero_avg.h | 110 - .../filter/gr_single_zero_avg_filter_ff.cc | 81 - .../lib/filter/gr_single_zero_avg_filter_ff.h | 76 - .../lib/filter/gr_single_zero_avg_filter_ff.i | 34 - .../src/lib/filter/gr_single_zero_rec.h | 110 - .../filter/gr_single_zero_rec_filter_ff.cc | 81 - .../lib/filter/gr_single_zero_rec_filter_ff.h | 76 - .../lib/filter/gr_single_zero_rec_filter_ff.i | 34 - gnuradio-core/src/lib/filter/gr_vec_types.h | 54 + gnuradio-core/src/lib/filter/gri_goertzel.h | 4 +- gnuradio-core/src/lib/filter/gri_iir.h | 58 +- .../lib/filter/gri_mmse_fir_interpolator.h | 1 + .../lib/filter/gri_mmse_fir_interpolator_cc.h | 7 +- .../src/lib/filter/qa_dotprod_powerpc.cc | 32 + gnuradio-core/src/lib/filter/qa_filter.cc | 8 +- gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc | 7 +- gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc | 5 +- gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc | 7 +- gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc | 5 +- gnuradio-core/src/lib/filter/qa_gr_fir_scc.cc | 6 +- gnuradio-core/src/lib/filter/qa_gr_rotator.cc | 70 + gnuradio-core/src/lib/filter/qa_gr_rotator.h | 39 + .../filter/qa_gri_mmse_fir_interpolator_cc.cc | 118 + .../filter/qa_gri_mmse_fir_interpolator_cc.h | 42 + .../src/lib/filter/short_dotprod_mmx.S | 4 + .../src/lib/filter/short_dotprod_mmx64.S | 4 + .../src/lib/filter/stamp-sources-generate | 0 .../src/lib/filter/sysconfig_powerpc.cc | 38 + gnuradio-core/src/lib/g72x/Makefile.in | 573 +- gnuradio-core/src/lib/general/Makefile.am | 217 +- gnuradio-core/src/lib/general/Makefile.gen | 234 - gnuradio-core/src/lib/general/Makefile.in | 1274 +- gnuradio-core/src/lib/general/general.i | 76 +- .../src/lib/general/general_generated.i | 156 - gnuradio-core/src/lib/general/generate_all.py | 33 - .../src/lib/general/generate_common.py | 93 - gnuradio-core/src/lib/general/gr_add_XX.cc.t | 62 - gnuradio-core/src/lib/general/gr_add_XX.h.t | 54 - gnuradio-core/src/lib/general/gr_add_XX.i.t | 33 - gnuradio-core/src/lib/general/gr_add_cc.cc | 62 - gnuradio-core/src/lib/general/gr_add_cc.h | 54 - gnuradio-core/src/lib/general/gr_add_cc.i | 33 - .../src/lib/general/gr_add_const_XX.h.t | 55 - .../src/lib/general/gr_add_const_cc.h | 55 - .../src/lib/general/gr_add_const_ff.h | 55 - .../src/lib/general/gr_add_const_ii.h | 55 - .../src/lib/general/gr_add_const_sf.h | 55 - .../src/lib/general/gr_add_const_ss.h | 55 - .../src/lib/general/gr_add_const_vXX.h.t | 55 - .../src/lib/general/gr_add_const_vcc.h | 55 - .../src/lib/general/gr_add_const_vff.h | 55 - .../src/lib/general/gr_add_const_vii.h | 55 - .../src/lib/general/gr_add_const_vss.h | 55 - gnuradio-core/src/lib/general/gr_add_ff.cc | 62 - gnuradio-core/src/lib/general/gr_add_ff.h | 54 - gnuradio-core/src/lib/general/gr_add_ff.i | 33 - gnuradio-core/src/lib/general/gr_add_ii.cc | 62 - gnuradio-core/src/lib/general/gr_add_ii.h | 54 - gnuradio-core/src/lib/general/gr_add_ii.i | 33 - gnuradio-core/src/lib/general/gr_add_ss.cc | 62 - gnuradio-core/src/lib/general/gr_add_ss.h | 54 - gnuradio-core/src/lib/general/gr_add_ss.i | 33 - gnuradio-core/src/lib/general/gr_add_vXX.cc.t | 65 - gnuradio-core/src/lib/general/gr_add_vXX.h.t | 54 - gnuradio-core/src/lib/general/gr_add_vXX.i.t | 33 - gnuradio-core/src/lib/general/gr_add_vcc.cc | 65 - gnuradio-core/src/lib/general/gr_add_vcc.h | 54 - gnuradio-core/src/lib/general/gr_add_vcc.i | 33 - gnuradio-core/src/lib/general/gr_add_vff.cc | 65 - gnuradio-core/src/lib/general/gr_add_vff.h | 54 - gnuradio-core/src/lib/general/gr_add_vff.i | 33 - gnuradio-core/src/lib/general/gr_add_vii.cc | 65 - gnuradio-core/src/lib/general/gr_add_vii.h | 54 - gnuradio-core/src/lib/general/gr_add_vii.i | 33 - gnuradio-core/src/lib/general/gr_add_vss.cc | 65 - gnuradio-core/src/lib/general/gr_add_vss.h | 54 - gnuradio-core/src/lib/general/gr_add_vss.i | 33 - gnuradio-core/src/lib/general/gr_agc2_cc.h | 1 + gnuradio-core/src/lib/general/gr_agc2_ff.h | 1 + gnuradio-core/src/lib/general/gr_agc_cc.h | 1 + gnuradio-core/src/lib/general/gr_agc_ff.h | 1 + .../general/gr_align_on_samplenumbers_ss.cc | 5 +- .../general/gr_align_on_samplenumbers_ss.h | 12 +- .../src/lib/general/gr_bin_statistics_f.cc | 174 + .../src/lib/general/gr_bin_statistics_f.h | 99 + .../src/lib/general/gr_bin_statistics_f.i | 42 + .../src/lib/general/gr_binary_slicer_fb.h | 2 +- .../src/lib/general/gr_bytes_to_syms.h | 2 +- .../src/lib/general/gr_char_to_float.h | 2 +- .../src/lib/general/gr_check_counting_s.h | 2 +- .../src/lib/general/gr_check_lfsr_32k_s.h | 2 +- .../lib/general/gr_chunks_to_symbols_XX.cc.t | 73 - .../lib/general/gr_chunks_to_symbols_XX.h.t | 72 - .../lib/general/gr_chunks_to_symbols_bc.cc | 73 - .../src/lib/general/gr_chunks_to_symbols_bc.h | 72 - .../lib/general/gr_chunks_to_symbols_bf.cc | 73 - .../src/lib/general/gr_chunks_to_symbols_bf.h | 72 - .../lib/general/gr_chunks_to_symbols_ic.cc | 73 - .../src/lib/general/gr_chunks_to_symbols_ic.h | 72 - .../lib/general/gr_chunks_to_symbols_if.cc | 73 - .../src/lib/general/gr_chunks_to_symbols_if.h | 72 - .../lib/general/gr_chunks_to_symbols_sc.cc | 73 - .../src/lib/general/gr_chunks_to_symbols_sc.h | 72 - .../lib/general/gr_chunks_to_symbols_sf.cc | 73 - .../src/lib/general/gr_chunks_to_symbols_sf.h | 72 - .../src/lib/general/gr_circular_file.cc | 2 + .../lib/general/gr_clock_recovery_mm_cc.cc | 108 +- .../src/lib/general/gr_clock_recovery_mm_cc.h | 14 +- .../lib/general/gr_clock_recovery_mm_ff.cc | 11 +- .../src/lib/general/gr_clock_recovery_mm_ff.h | 7 +- .../general/gr_complex_to_interleaved_short.h | 2 +- .../src/lib/general/gr_complex_to_xxx.cc | 9 +- .../src/lib/general/gr_complex_to_xxx.h | 12 +- .../src/lib/general/gr_conjugate_cc.cc | 27 +- .../src/lib/general/gr_conjugate_cc.h | 2 +- .../general/gr_constellation_decoder_cb.cc | 1 + .../lib/general/gr_constellation_decoder_cb.h | 6 +- .../general/gr_correlate_access_code_bb.cc | 11 +- .../lib/general/gr_correlate_access_code_bb.h | 2 +- .../src/lib/general/gr_costas_loop_cc.cc | 89 +- .../src/lib/general/gr_costas_loop_cc.h | 66 + .../src/lib/general/gr_costas_loop_cc.i | 7 + gnuradio-core/src/lib/general/gr_cpfsk_bc.cc | 78 + gnuradio-core/src/lib/general/gr_cpfsk_bc.h | 63 + gnuradio-core/src/lib/general/gr_cpfsk_bc.i | 34 + gnuradio-core/src/lib/general/gr_crc32.h | 1 + .../src/lib/general/gr_ctcss_squelch_ff.h | 2 +- .../src/lib/general/gr_dd_mpsk_sync_cc.cc | 1 + .../src/lib/general/gr_dd_mpsk_sync_cc.h | 1 + .../src/lib/general/gr_decode_ccsds_27_fb.cc | 86 + .../src/lib/general/gr_decode_ccsds_27_fb.h | 77 + .../src/lib/general/gr_decode_ccsds_27_fb.i | 31 + .../src/lib/general/gr_deinterleave.h | 2 +- gnuradio-core/src/lib/general/gr_delay.cc | 64 + gnuradio-core/src/lib/general/gr_delay.h | 54 + gnuradio-core/src/lib/general/gr_delay.i | 35 + .../src/lib/general/gr_descrambler_bb.cc | 56 + .../src/lib/general/gr_descrambler_bb.h | 59 + .../src/lib/general/gr_descrambler_bb.i | 31 + .../src/lib/general/gr_diff_decoder_bb.h | 2 +- .../src/lib/general/gr_diff_encoder_bb.h | 2 +- .../src/lib/general/gr_diff_phasor_cc.h | 4 + .../src/lib/general/gr_divide_XX.cc.t | 71 - .../src/lib/general/gr_divide_XX.h.t | 54 - .../src/lib/general/gr_divide_XX.i.t | 33 - gnuradio-core/src/lib/general/gr_divide_cc.cc | 71 - gnuradio-core/src/lib/general/gr_divide_cc.h | 54 - gnuradio-core/src/lib/general/gr_divide_cc.i | 33 - gnuradio-core/src/lib/general/gr_divide_ff.cc | 71 - gnuradio-core/src/lib/general/gr_divide_ff.h | 54 - gnuradio-core/src/lib/general/gr_divide_ff.i | 33 - gnuradio-core/src/lib/general/gr_divide_ii.cc | 71 - gnuradio-core/src/lib/general/gr_divide_ii.h | 54 - gnuradio-core/src/lib/general/gr_divide_ii.i | 33 - gnuradio-core/src/lib/general/gr_divide_ss.cc | 71 - gnuradio-core/src/lib/general/gr_divide_ss.h | 54 - gnuradio-core/src/lib/general/gr_divide_ss.i | 33 - gnuradio-core/src/lib/general/gr_dpll_bb.cc | 84 + gnuradio-core/src/lib/general/gr_dpll_bb.h | 57 + gnuradio-core/src/lib/general/gr_dpll_bb.i | 31 + .../src/lib/general/gr_encode_ccsds_27_bb.cc | 62 + .../src/lib/general/gr_encode_ccsds_27_bb.h | 63 + .../src/lib/general/gr_encode_ccsds_27_bb.i | 31 + .../lib/general/gr_fake_channel_coder_pp.cc | 1 + .../lib/general/gr_fake_channel_coder_pp.h | 4 +- .../src/lib/general/gr_fast_atan2f.cc | 1 + .../src/lib/general/gr_feedforward_agc_cc.h | 1 + gnuradio-core/src/lib/general/gr_feval.cc | 50 +- gnuradio-core/src/lib/general/gr_feval.h | 72 +- gnuradio-core/src/lib/general/gr_feval.i | 148 +- gnuradio-core/src/lib/general/gr_fft_vcc.cc | 62 +- gnuradio-core/src/lib/general/gr_fft_vcc.h | 28 +- gnuradio-core/src/lib/general/gr_fft_vcc.i | 8 +- .../src/lib/general/gr_fft_vcc_fftw.cc | 104 + .../src/lib/general/gr_fft_vcc_fftw.h | 57 + gnuradio-core/src/lib/general/gr_fft_vfc.cc | 2 + gnuradio-core/src/lib/general/gr_fft_vfc.h | 2 +- gnuradio-core/src/lib/general/gr_firdes.cc | 280 +- gnuradio-core/src/lib/general/gr_firdes.h | 152 +- gnuradio-core/src/lib/general/gr_firdes.i | 191 +- .../src/lib/general/gr_float_to_char.h | 2 +- .../src/lib/general/gr_float_to_complex.cc | 17 +- .../src/lib/general/gr_float_to_complex.h | 12 +- .../src/lib/general/gr_float_to_complex.i | 6 +- .../src/lib/general/gr_float_to_short.h | 2 +- .../src/lib/general/gr_float_to_uchar.h | 2 +- gnuradio-core/src/lib/general/gr_fmdet_cf.cc | 91 + gnuradio-core/src/lib/general/gr_fmdet_cf.h | 58 + gnuradio-core/src/lib/general/gr_fmdet_cf.i | 31 + .../src/lib/general/gr_framer_sink_1.cc | 35 +- .../src/lib/general/gr_framer_sink_1.h | 13 +- .../lib/general/gr_frequency_modulator_fc.h | 2 +- gnuradio-core/src/lib/general/gr_fxpt.h | 1 + gnuradio-core/src/lib/general/gr_fxpt_nco.h | 3 +- gnuradio-core/src/lib/general/gr_fxpt_vco.h | 1 + .../src/lib/general/gr_glfsr_source_b.cc | 84 + .../src/lib/general/gr_glfsr_source_b.h | 65 + .../src/lib/general/gr_glfsr_source_b.i | 37 + .../src/lib/general/gr_glfsr_source_f.cc | 84 + .../src/lib/general/gr_glfsr_source_f.h | 65 + .../src/lib/general/gr_glfsr_source_f.i | 37 + gnuradio-core/src/lib/general/gr_head.cc | 1 + gnuradio-core/src/lib/general/gr_head.h | 2 +- gnuradio-core/src/lib/general/gr_interleave.h | 2 +- .../general/gr_interleaved_short_to_complex.h | 2 +- gnuradio-core/src/lib/general/gr_iqcomp_cc.cc | 62 + gnuradio-core/src/lib/general/gr_iqcomp_cc.h | 54 + gnuradio-core/src/lib/general/gr_iqcomp_cc.i | 36 + .../src/lib/general/gr_keep_one_in_n.cc | 1 + .../src/lib/general/gr_keep_one_in_n.h | 2 +- .../src/lib/general/gr_kludge_copy.cc | 2 +- .../src/lib/general/gr_kludge_copy.h | 2 +- .../src/lib/general/gr_lfsr_32k_source_s.h | 2 +- gnuradio-core/src/lib/general/gr_lms_dfe_cc.h | 2 +- gnuradio-core/src/lib/general/gr_lms_dfe_ff.h | 2 +- gnuradio-core/src/lib/general/gr_log2_const.h | 22 +- gnuradio-core/src/lib/general/gr_map_bb.cc | 4 +- gnuradio-core/src/lib/general/gr_map_bb.h | 2 +- gnuradio-core/src/lib/general/gr_math.h | 163 +- .../src/lib/general/gr_mpsk_receiver_cc.cc | 324 + .../src/lib/general/gr_mpsk_receiver_cc.h | 315 + .../src/lib/general/gr_mpsk_receiver_cc.i | 59 + .../src/lib/general/gr_multiply_XX.cc.t | 62 - .../src/lib/general/gr_multiply_XX.h.t | 54 - .../src/lib/general/gr_multiply_XX.i.t | 33 - .../src/lib/general/gr_multiply_cc.cc | 62 - .../src/lib/general/gr_multiply_cc.h | 54 - .../src/lib/general/gr_multiply_cc.i | 33 - .../src/lib/general/gr_multiply_const_XX.h.t | 55 - .../src/lib/general/gr_multiply_const_cc.h | 55 - .../src/lib/general/gr_multiply_const_ff.h | 55 - .../src/lib/general/gr_multiply_const_ii.h | 55 - .../src/lib/general/gr_multiply_const_ss.h | 55 - .../src/lib/general/gr_multiply_const_vXX.h.t | 55 - .../src/lib/general/gr_multiply_const_vcc.h | 55 - .../src/lib/general/gr_multiply_const_vff.h | 55 - .../src/lib/general/gr_multiply_const_vii.h | 55 - .../src/lib/general/gr_multiply_const_vss.h | 55 - .../src/lib/general/gr_multiply_ff.cc | 62 - .../src/lib/general/gr_multiply_ff.h | 54 - .../src/lib/general/gr_multiply_ff.i | 33 - .../src/lib/general/gr_multiply_ii.cc | 62 - .../src/lib/general/gr_multiply_ii.h | 54 - .../src/lib/general/gr_multiply_ii.i | 33 - .../src/lib/general/gr_multiply_ss.cc | 62 - .../src/lib/general/gr_multiply_ss.h | 54 - .../src/lib/general/gr_multiply_ss.i | 33 - .../src/lib/general/gr_multiply_vXX.cc.t | 65 - .../src/lib/general/gr_multiply_vXX.h.t | 54 - .../src/lib/general/gr_multiply_vXX.i.t | 33 - .../src/lib/general/gr_multiply_vcc.cc | 65 - .../src/lib/general/gr_multiply_vcc.h | 54 - .../src/lib/general/gr_multiply_vcc.i | 33 - .../src/lib/general/gr_multiply_vff.cc | 65 - .../src/lib/general/gr_multiply_vff.h | 54 - .../src/lib/general/gr_multiply_vff.i | 33 - .../src/lib/general/gr_multiply_vii.cc | 65 - .../src/lib/general/gr_multiply_vii.h | 54 - .../src/lib/general/gr_multiply_vii.i | 33 - .../src/lib/general/gr_multiply_vss.cc | 65 - .../src/lib/general/gr_multiply_vss.h | 54 - .../src/lib/general/gr_multiply_vss.i | 33 - gnuradio-core/src/lib/general/gr_mute_XX.h.t | 55 - gnuradio-core/src/lib/general/gr_mute_cc.h | 55 - gnuradio-core/src/lib/general/gr_mute_ff.h | 55 - gnuradio-core/src/lib/general/gr_mute_ii.h | 55 - gnuradio-core/src/lib/general/gr_mute_ss.h | 55 - gnuradio-core/src/lib/general/gr_nco.h | 1 + gnuradio-core/src/lib/general/gr_nlog10_ff.h | 2 +- .../src/lib/general/gr_noise_source_X.h.t | 63 - .../src/lib/general/gr_noise_source_c.h | 63 - .../src/lib/general/gr_noise_source_f.h | 63 - .../src/lib/general/gr_noise_source_i.h | 63 - .../src/lib/general/gr_noise_source_s.h | 63 - gnuradio-core/src/lib/general/gr_nop.h | 2 +- gnuradio-core/src/lib/general/gr_null_sink.h | 2 +- .../src/lib/general/gr_null_source.cc | 1 + .../src/lib/general/gr_null_source.h | 2 +- .../lib/general/gr_ofdm_cyclic_prefixer.cc | 68 + .../src/lib/general/gr_ofdm_cyclic_prefixer.h | 58 + .../src/lib/general/gr_ofdm_cyclic_prefixer.i | 34 + .../src/lib/general/gr_ofdm_demapper_vcb.cc | 41 + .../src/lib/general/gr_ofdm_demapper_vcb.h | 56 + .../src/lib/general/gr_ofdm_demapper_vcb.i | 36 + .../lib/general/gr_ofdm_frame_acquisition.cc | 208 + .../lib/general/gr_ofdm_frame_acquisition.h | 116 + .../lib/general/gr_ofdm_frame_acquisition.i | 49 + .../src/lib/general/gr_ofdm_frame_sink.cc | 405 + .../src/lib/general/gr_ofdm_frame_sink.h | 126 + .../src/lib/general/gr_ofdm_frame_sink.i | 41 + .../lib/general/gr_ofdm_insert_preamble.cc | 187 + .../src/lib/general/gr_ofdm_insert_preamble.h | 104 + .../src/lib/general/gr_ofdm_insert_preamble.i | 35 + .../src/lib/general/gr_ofdm_mapper_bcv.cc | 241 + .../src/lib/general/gr_ofdm_mapper_bcv.h | 87 + .../src/lib/general/gr_ofdm_mapper_bcv.i | 46 + .../src/lib/general/gr_ofdm_sampler.cc | 132 + .../src/lib/general/gr_ofdm_sampler.h | 67 + .../src/lib/general/gr_ofdm_sampler.i | 35 + .../lib/general/gr_pa_2x2_phase_combiner.h | 2 +- .../lib/general/gr_packed_to_unpacked_XX.h.t | 84 - .../lib/general/gr_packed_to_unpacked_bb.h | 84 - .../lib/general/gr_packed_to_unpacked_ii.h | 84 - .../lib/general/gr_packed_to_unpacked_ss.h | 84 - .../src/lib/general/gr_packet_sink.cc | 1 + .../src/lib/general/gr_packet_sink.h | 2 +- .../src/lib/general/gr_peak_detector2_fb.cc | 107 + .../src/lib/general/gr_peak_detector2_fb.h | 108 + .../src/lib/general/gr_peak_detector2_fb.i | 45 + .../src/lib/general/gr_phase_modulator_fc.h | 2 +- .../lib/general/gr_pll_carriertracking_cc.cc | 4 +- .../lib/general/gr_pll_carriertracking_cc.h | 2 +- .../src/lib/general/gr_pll_freqdet_cf.cc | 3 +- .../src/lib/general/gr_pll_freqdet_cf.h | 2 +- .../src/lib/general/gr_pll_refout_cc.cc | 3 +- .../src/lib/general/gr_pll_refout_cc.h | 2 +- .../src/lib/general/gr_pn_correlator_cc.cc | 77 + .../src/lib/general/gr_pn_correlator_cc.h | 61 + .../src/lib/general/gr_pn_correlator_cc.i | 32 + gnuradio-core/src/lib/general/gr_prefix.cc | 2 +- gnuradio-core/src/lib/general/gr_prefs.h | 1 + .../src/lib/general/gr_probe_avg_mag_sqrd_c.h | 2 +- .../lib/general/gr_probe_avg_mag_sqrd_cf.cc | 86 + .../lib/general/gr_probe_avg_mag_sqrd_cf.h | 76 + .../lib/general/gr_probe_avg_mag_sqrd_cf.i | 36 + .../src/lib/general/gr_probe_avg_mag_sqrd_f.h | 2 +- .../src/lib/general/gr_probe_density_b.cc | 68 + .../src/lib/general/gr_probe_density_b.h | 72 + .../src/lib/general/gr_probe_density_b.i | 36 + .../src/lib/general/gr_probe_mpsk_snr_c.cc | 85 + .../src/lib/general/gr_probe_mpsk_snr_c.h | 82 + .../src/lib/general/gr_probe_mpsk_snr_c.i | 39 + .../src/lib/general/gr_probe_signal_f.h | 2 +- .../src/lib/general/gr_pwr_squelch_cc.h | 2 +- .../src/lib/general/gr_pwr_squelch_cc.i | 6 +- .../src/lib/general/gr_pwr_squelch_ff.h | 2 +- .../src/lib/general/gr_pwr_squelch_ff.i | 6 +- .../src/lib/general/gr_quadrature_demod_cf.h | 2 +- gnuradio-core/src/lib/general/gr_rail_ff.cc | 62 + gnuradio-core/src/lib/general/gr_rail_ff.h | 56 + gnuradio-core/src/lib/general/gr_rail_ff.i | 30 + gnuradio-core/src/lib/general/gr_random.h | 1 + .../src/lib/general/gr_regenerate_bb.cc | 90 + .../src/lib/general/gr_regenerate_bb.h | 75 + .../src/lib/general/gr_regenerate_bb.i | 38 + gnuradio-core/src/lib/general/gr_remez.h | 1 + gnuradio-core/src/lib/general/gr_repeat.cc | 69 + gnuradio-core/src/lib/general/gr_repeat.h | 56 + gnuradio-core/src/lib/general/gr_repeat.i | 11 + gnuradio-core/src/lib/general/gr_rms_cf.h | 1 + gnuradio-core/src/lib/general/gr_rms_ff.h | 1 + .../src/lib/general/gr_scrambler_bb.cc | 56 + .../src/lib/general/gr_scrambler_bb.h | 59 + .../src/lib/general/gr_scrambler_bb.i | 31 + .../src/lib/general/gr_short_to_float.h | 2 +- .../src/lib/general/gr_sig_source_X.cc.t | 149 - .../src/lib/general/gr_sig_source_X.h.t | 81 - .../src/lib/general/gr_sig_source_c.cc | 149 - .../src/lib/general/gr_sig_source_c.h | 81 - .../src/lib/general/gr_sig_source_f.cc | 149 - .../src/lib/general/gr_sig_source_f.h | 81 - .../src/lib/general/gr_sig_source_i.cc | 149 - .../src/lib/general/gr_sig_source_i.h | 81 - .../src/lib/general/gr_sig_source_s.cc | 149 - .../src/lib/general/gr_sig_source_s.h | 81 - .../src/lib/general/gr_sig_source_waveform.h | 29 - .../src/lib/general/gr_simple_correlator.cc | 2 + .../src/lib/general/gr_simple_correlator.h | 2 +- .../src/lib/general/gr_simple_framer.cc | 1 + .../src/lib/general/gr_simple_framer.h | 2 +- .../src/lib/general/gr_simple_framer_sync.h | 6 +- .../src/lib/general/gr_simple_squelch_cc.h | 1 + gnuradio-core/src/lib/general/gr_skiphead.cc | 77 +- gnuradio-core/src/lib/general/gr_skiphead.h | 28 +- gnuradio-core/src/lib/general/gr_skiphead.i | 14 +- gnuradio-core/src/lib/general/gr_squash_ff.cc | 93 + gnuradio-core/src/lib/general/gr_squash_ff.h | 67 + gnuradio-core/src/lib/general/gr_squash_ff.i | 34 + .../src/lib/general/gr_stream_mux.cc | 124 + gnuradio-core/src/lib/general/gr_stream_mux.h | 92 + gnuradio-core/src/lib/general/gr_stream_mux.i | 42 + .../src/lib/general/gr_stream_to_streams.cc | 1 + .../src/lib/general/gr_stream_to_streams.h | 2 +- .../src/lib/general/gr_stream_to_vector.cc | 1 + .../src/lib/general/gr_stream_to_vector.h | 2 +- .../src/lib/general/gr_streams_to_stream.cc | 1 + .../src/lib/general/gr_streams_to_stream.h | 2 +- .../src/lib/general/gr_streams_to_vector.cc | 1 + .../src/lib/general/gr_streams_to_vector.h | 2 +- .../src/lib/general/gr_stretch_ff.cc | 74 + gnuradio-core/src/lib/general/gr_stretch_ff.h | 59 + gnuradio-core/src/lib/general/gr_stretch_ff.i | 31 + gnuradio-core/src/lib/general/gr_sub_XX.cc.t | 70 - gnuradio-core/src/lib/general/gr_sub_XX.h.t | 54 - gnuradio-core/src/lib/general/gr_sub_XX.i.t | 33 - gnuradio-core/src/lib/general/gr_sub_cc.cc | 70 - gnuradio-core/src/lib/general/gr_sub_cc.h | 54 - gnuradio-core/src/lib/general/gr_sub_cc.i | 33 - gnuradio-core/src/lib/general/gr_sub_ff.cc | 70 - gnuradio-core/src/lib/general/gr_sub_ff.h | 54 - gnuradio-core/src/lib/general/gr_sub_ff.i | 33 - gnuradio-core/src/lib/general/gr_sub_ii.cc | 70 - gnuradio-core/src/lib/general/gr_sub_ii.h | 54 - gnuradio-core/src/lib/general/gr_sub_ii.i | 33 - gnuradio-core/src/lib/general/gr_sub_ss.cc | 70 - gnuradio-core/src/lib/general/gr_sub_ss.h | 54 - gnuradio-core/src/lib/general/gr_sub_ss.i | 33 - gnuradio-core/src/lib/general/gr_sync_block.h | 65 - .../src/lib/general/gr_sync_decimator.h | 68 - .../src/lib/general/gr_sync_interpolator.cc | 70 - .../src/lib/general/gr_sync_interpolator.h | 68 - gnuradio-core/src/lib/general/gr_test.cc | 7 +- gnuradio-core/src/lib/general/gr_test.h | 7 +- .../src/lib/general/gr_threshold_ff.h | 4 +- gnuradio-core/src/lib/general/gr_throttle.cc | 10 +- gnuradio-core/src/lib/general/gr_throttle.h | 7 +- .../src/lib/general/gr_uchar_to_float.h | 2 +- .../src/lib/general/gr_unpack_k_bits_bb.h | 3 +- .../lib/general/gr_unpacked_to_packed_XX.h.t | 81 - .../lib/general/gr_unpacked_to_packed_bb.h | 81 - .../lib/general/gr_unpacked_to_packed_ii.h | 81 - .../lib/general/gr_unpacked_to_packed_ss.h | 81 - gnuradio-core/src/lib/general/gr_vco.h | 1 + gnuradio-core/src/lib/general/gr_vco_f.h | 10 +- .../src/lib/general/gr_vector_sink_X.cc.t | 63 - .../src/lib/general/gr_vector_sink_X.h.t | 55 - .../src/lib/general/gr_vector_sink_X.i.t | 37 - .../src/lib/general/gr_vector_sink_b.cc | 63 - .../src/lib/general/gr_vector_sink_b.h | 55 - .../src/lib/general/gr_vector_sink_b.i | 37 - .../src/lib/general/gr_vector_sink_c.cc | 63 - .../src/lib/general/gr_vector_sink_c.h | 55 - .../src/lib/general/gr_vector_sink_c.i | 37 - .../src/lib/general/gr_vector_sink_f.cc | 63 - .../src/lib/general/gr_vector_sink_f.h | 55 - .../src/lib/general/gr_vector_sink_f.i | 37 - .../src/lib/general/gr_vector_sink_i.cc | 63 - .../src/lib/general/gr_vector_sink_i.h | 55 - .../src/lib/general/gr_vector_sink_i.i | 37 - .../src/lib/general/gr_vector_sink_s.cc | 63 - .../src/lib/general/gr_vector_sink_s.h | 55 - .../src/lib/general/gr_vector_sink_s.i | 37 - .../src/lib/general/gr_vector_source_X.cc.t | 85 - .../src/lib/general/gr_vector_source_X.h.t | 57 - .../src/lib/general/gr_vector_source_X.i.t | 33 - .../src/lib/general/gr_vector_source_b.cc | 85 - .../src/lib/general/gr_vector_source_b.h | 57 - .../src/lib/general/gr_vector_source_b.i | 33 - .../src/lib/general/gr_vector_source_c.cc | 85 - .../src/lib/general/gr_vector_source_c.h | 57 - .../src/lib/general/gr_vector_source_c.i | 33 - .../src/lib/general/gr_vector_source_f.cc | 85 - .../src/lib/general/gr_vector_source_f.h | 57 - .../src/lib/general/gr_vector_source_f.i | 33 - .../src/lib/general/gr_vector_source_i.cc | 85 - .../src/lib/general/gr_vector_source_i.h | 57 - .../src/lib/general/gr_vector_source_i.i | 33 - .../src/lib/general/gr_vector_source_s.cc | 85 - .../src/lib/general/gr_vector_source_s.h | 57 - .../src/lib/general/gr_vector_source_s.i | 33 - .../src/lib/general/gr_vector_to_stream.cc | 1 + .../src/lib/general/gr_vector_to_stream.h | 2 +- .../src/lib/general/gr_vector_to_streams.cc | 1 + .../src/lib/general/gr_vector_to_streams.h | 2 +- .../src/lib/general/gr_wavelet_ff.cc | 107 + gnuradio-core/src/lib/general/gr_wavelet_ff.h | 70 + gnuradio-core/src/lib/general/gr_wavelet_ff.i | 31 + gnuradio-core/src/lib/general/gr_wvps_ff.cc | 98 + gnuradio-core/src/lib/general/gr_wvps_ff.h | 57 + gnuradio-core/src/lib/general/gr_wvps_ff.i | 29 + gnuradio-core/src/lib/general/gri_agc2_cc.h | 1 - gnuradio-core/src/lib/general/gri_agc2_ff.h | 6 +- gnuradio-core/src/lib/general/gri_agc_ff.h | 1 - gnuradio-core/src/lib/general/gri_fft.cc | 36 +- gnuradio-core/src/lib/general/gri_fft.h | 20 +- gnuradio-core/src/lib/general/gri_glfsr.cc | 67 + gnuradio-core/src/lib/general/gri_glfsr.h | 55 + gnuradio-core/src/lib/general/gri_lfsr.h | 143 + .../src/lib/general/gri_lfsr_15_1_0.h | 1 + gnuradio-core/src/lib/general/gri_lfsr_32k.h | 1 + gnuradio-core/src/lib/general/malloc16.c | 1 + gnuradio-core/src/lib/general/qa_general.cc | 4 + gnuradio-core/src/lib/general/qa_gr_firdes.cc | 274 + gnuradio-core/src/lib/general/qa_gr_firdes.h | 6 + gnuradio-core/src/lib/general/qa_gr_math.cc | 105 + gnuradio-core/src/lib/general/qa_gr_math.h | 42 + gnuradio-core/src/lib/general/qa_gri_lfsr.cc | 141 + gnuradio-core/src/lib/general/qa_gri_lfsr.h | 42 + gnuradio-core/src/lib/general/random.h | 12 +- gnuradio-core/src/lib/gengen/Makefile.am | 159 + gnuradio-core/src/lib/gengen/Makefile.gen | 318 + gnuradio-core/src/lib/gengen/Makefile.in | 1727 + gnuradio-core/src/lib/gengen/generate_all.py | 33 + .../src/lib/gengen/generate_common.py | 102 + gnuradio-core/src/lib/gengen/gengen.i | 33 + .../src/lib/gengen/gengen_generated.i | 212 + gnuradio-core/src/lib/gengen/gr_add_XX.cc.t | 63 + gnuradio-core/src/lib/gengen/gr_add_XX.h.t | 56 + gnuradio-core/src/lib/gengen/gr_add_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_add_cc.cc | 63 + gnuradio-core/src/lib/gengen/gr_add_cc.h | 56 + gnuradio-core/src/lib/gengen/gr_add_cc.i | 33 + .../{general => gengen}/gr_add_const_XX.cc.t | 0 .../src/lib/gengen/gr_add_const_XX.h.t | 55 + .../{general => gengen}/gr_add_const_XX.i.t | 0 .../{general => gengen}/gr_add_const_cc.cc | 0 .../src/lib/gengen/gr_add_const_cc.h | 55 + .../lib/{general => gengen}/gr_add_const_cc.i | 0 .../{general => gengen}/gr_add_const_ff.cc | 0 .../src/lib/gengen/gr_add_const_ff.h | 55 + .../lib/{general => gengen}/gr_add_const_ff.i | 0 .../{general => gengen}/gr_add_const_ii.cc | 0 .../src/lib/gengen/gr_add_const_ii.h | 55 + .../lib/{general => gengen}/gr_add_const_ii.i | 0 .../{general => gengen}/gr_add_const_sf.cc | 0 .../src/lib/gengen/gr_add_const_sf.h | 55 + .../lib/{general => gengen}/gr_add_const_sf.i | 0 .../{general => gengen}/gr_add_const_ss.cc | 0 .../src/lib/gengen/gr_add_const_ss.h | 55 + .../lib/{general => gengen}/gr_add_const_ss.i | 0 .../{general => gengen}/gr_add_const_vXX.cc.t | 0 .../src/lib/gengen/gr_add_const_vXX.h.t | 55 + .../{general => gengen}/gr_add_const_vXX.i.t | 0 .../{general => gengen}/gr_add_const_vcc.cc | 0 .../src/lib/gengen/gr_add_const_vcc.h | 55 + .../{general => gengen}/gr_add_const_vcc.i | 0 .../{general => gengen}/gr_add_const_vff.cc | 0 .../src/lib/gengen/gr_add_const_vff.h | 55 + .../{general => gengen}/gr_add_const_vff.i | 0 .../{general => gengen}/gr_add_const_vii.cc | 0 .../src/lib/gengen/gr_add_const_vii.h | 55 + .../{general => gengen}/gr_add_const_vii.i | 0 .../{general => gengen}/gr_add_const_vss.cc | 0 .../src/lib/gengen/gr_add_const_vss.h | 55 + .../{general => gengen}/gr_add_const_vss.i | 0 gnuradio-core/src/lib/gengen/gr_add_ff.cc | 63 + gnuradio-core/src/lib/gengen/gr_add_ff.h | 56 + gnuradio-core/src/lib/gengen/gr_add_ff.i | 33 + gnuradio-core/src/lib/gengen/gr_add_ii.cc | 63 + gnuradio-core/src/lib/gengen/gr_add_ii.h | 56 + gnuradio-core/src/lib/gengen/gr_add_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_add_ss.cc | 63 + gnuradio-core/src/lib/gengen/gr_add_ss.h | 56 + gnuradio-core/src/lib/gengen/gr_add_ss.i | 33 + gnuradio-core/src/lib/gengen/gr_and_XX.cc.t | 62 + gnuradio-core/src/lib/gengen/gr_and_XX.h.t | 54 + gnuradio-core/src/lib/gengen/gr_and_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_and_bb.cc | 62 + gnuradio-core/src/lib/gengen/gr_and_bb.h | 54 + gnuradio-core/src/lib/gengen/gr_and_bb.i | 33 + .../src/lib/gengen/gr_and_const_XX.cc.t | 72 + .../src/lib/gengen/gr_and_const_XX.h.t | 57 + .../src/lib/gengen/gr_and_const_XX.i.t | 37 + .../src/lib/gengen/gr_and_const_bb.cc | 72 + .../src/lib/gengen/gr_and_const_bb.h | 57 + .../src/lib/gengen/gr_and_const_bb.i | 37 + .../src/lib/gengen/gr_and_const_ii.cc | 72 + .../src/lib/gengen/gr_and_const_ii.h | 57 + .../src/lib/gengen/gr_and_const_ii.i | 37 + .../src/lib/gengen/gr_and_const_ss.cc | 72 + .../src/lib/gengen/gr_and_const_ss.h | 57 + .../src/lib/gengen/gr_and_const_ss.i | 37 + gnuradio-core/src/lib/gengen/gr_and_ii.cc | 62 + gnuradio-core/src/lib/gengen/gr_and_ii.h | 54 + gnuradio-core/src/lib/gengen/gr_and_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_and_ss.cc | 62 + gnuradio-core/src/lib/gengen/gr_and_ss.h | 54 + gnuradio-core/src/lib/gengen/gr_and_ss.i | 33 + .../src/lib/gengen/gr_argmax_XX.cc.t | 79 + gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t | 51 + gnuradio-core/src/lib/gengen/gr_argmax_XX.i.t | 34 + gnuradio-core/src/lib/gengen/gr_argmax_fs.cc | 79 + gnuradio-core/src/lib/gengen/gr_argmax_fs.h | 51 + gnuradio-core/src/lib/gengen/gr_argmax_fs.i | 34 + gnuradio-core/src/lib/gengen/gr_argmax_is.cc | 79 + gnuradio-core/src/lib/gengen/gr_argmax_is.h | 51 + gnuradio-core/src/lib/gengen/gr_argmax_is.i | 34 + gnuradio-core/src/lib/gengen/gr_argmax_ss.cc | 79 + gnuradio-core/src/lib/gengen/gr_argmax_ss.h | 51 + gnuradio-core/src/lib/gengen/gr_argmax_ss.i | 34 + .../lib/gengen/gr_chunks_to_symbols_XX.cc.t | 74 + .../lib/gengen/gr_chunks_to_symbols_XX.h.t | 72 + .../gr_chunks_to_symbols_XX.i.t | 0 .../src/lib/gengen/gr_chunks_to_symbols_bc.cc | 74 + .../src/lib/gengen/gr_chunks_to_symbols_bc.h | 72 + .../gr_chunks_to_symbols_bc.i | 0 .../src/lib/gengen/gr_chunks_to_symbols_bf.cc | 74 + .../src/lib/gengen/gr_chunks_to_symbols_bf.h | 72 + .../gr_chunks_to_symbols_bf.i | 0 .../src/lib/gengen/gr_chunks_to_symbols_ic.cc | 74 + .../src/lib/gengen/gr_chunks_to_symbols_ic.h | 72 + .../gr_chunks_to_symbols_ic.i | 0 .../src/lib/gengen/gr_chunks_to_symbols_if.cc | 74 + .../src/lib/gengen/gr_chunks_to_symbols_if.h | 72 + .../gr_chunks_to_symbols_if.i | 0 .../src/lib/gengen/gr_chunks_to_symbols_sc.cc | 74 + .../src/lib/gengen/gr_chunks_to_symbols_sc.h | 72 + .../gr_chunks_to_symbols_sc.i | 0 .../src/lib/gengen/gr_chunks_to_symbols_sf.cc | 74 + .../src/lib/gengen/gr_chunks_to_symbols_sf.h | 72 + .../gr_chunks_to_symbols_sf.i | 0 .../src/lib/gengen/gr_divide_XX.cc.t | 72 + gnuradio-core/src/lib/gengen/gr_divide_XX.h.t | 56 + gnuradio-core/src/lib/gengen/gr_divide_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_divide_cc.cc | 72 + gnuradio-core/src/lib/gengen/gr_divide_cc.h | 56 + gnuradio-core/src/lib/gengen/gr_divide_cc.i | 33 + gnuradio-core/src/lib/gengen/gr_divide_ff.cc | 72 + gnuradio-core/src/lib/gengen/gr_divide_ff.h | 56 + gnuradio-core/src/lib/gengen/gr_divide_ff.i | 33 + gnuradio-core/src/lib/gengen/gr_divide_ii.cc | 72 + gnuradio-core/src/lib/gengen/gr_divide_ii.h | 56 + gnuradio-core/src/lib/gengen/gr_divide_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_divide_ss.cc | 72 + gnuradio-core/src/lib/gengen/gr_divide_ss.h | 56 + gnuradio-core/src/lib/gengen/gr_divide_ss.i | 33 + .../lib/{general => gengen}/gr_endianness.h | 0 .../lib/{general => gengen}/gr_endianness.i | 0 .../src/lib/gengen/gr_integrate_XX.cc.t | 67 + .../src/lib/gengen/gr_integrate_XX.h.t | 60 + .../src/lib/gengen/gr_integrate_XX.i.t | 33 + .../src/lib/gengen/gr_integrate_cc.cc | 67 + .../src/lib/gengen/gr_integrate_cc.h | 60 + .../src/lib/gengen/gr_integrate_cc.i | 33 + .../src/lib/gengen/gr_integrate_ff.cc | 67 + .../src/lib/gengen/gr_integrate_ff.h | 60 + .../src/lib/gengen/gr_integrate_ff.i | 33 + .../src/lib/gengen/gr_integrate_ii.cc | 67 + .../src/lib/gengen/gr_integrate_ii.h | 60 + .../src/lib/gengen/gr_integrate_ii.i | 33 + .../src/lib/gengen/gr_integrate_ss.cc | 67 + .../src/lib/gengen/gr_integrate_ss.h | 60 + .../src/lib/gengen/gr_integrate_ss.i | 33 + gnuradio-core/src/lib/gengen/gr_max_XX.cc.t | 71 + gnuradio-core/src/lib/gengen/gr_max_XX.h.t | 51 + gnuradio-core/src/lib/gengen/gr_max_XX.i.t | 34 + gnuradio-core/src/lib/gengen/gr_max_ff.cc | 71 + gnuradio-core/src/lib/gengen/gr_max_ff.h | 51 + gnuradio-core/src/lib/gengen/gr_max_ff.i | 34 + gnuradio-core/src/lib/gengen/gr_max_ii.cc | 71 + gnuradio-core/src/lib/gengen/gr_max_ii.h | 51 + gnuradio-core/src/lib/gengen/gr_max_ii.i | 34 + gnuradio-core/src/lib/gengen/gr_max_ss.cc | 71 + gnuradio-core/src/lib/gengen/gr_max_ss.h | 51 + gnuradio-core/src/lib/gengen/gr_max_ss.i | 34 + .../src/lib/gengen/gr_moving_average_XX.cc.t | 93 + .../src/lib/gengen/gr_moving_average_XX.h.t | 71 + .../src/lib/gengen/gr_moving_average_XX.i.t | 38 + .../src/lib/gengen/gr_moving_average_cc.cc | 93 + .../src/lib/gengen/gr_moving_average_cc.h | 71 + .../src/lib/gengen/gr_moving_average_cc.i | 38 + .../src/lib/gengen/gr_moving_average_ff.cc | 93 + .../src/lib/gengen/gr_moving_average_ff.h | 71 + .../src/lib/gengen/gr_moving_average_ff.i | 38 + .../src/lib/gengen/gr_moving_average_ii.cc | 93 + .../src/lib/gengen/gr_moving_average_ii.h | 71 + .../src/lib/gengen/gr_moving_average_ii.i | 38 + .../src/lib/gengen/gr_moving_average_ss.cc | 93 + .../src/lib/gengen/gr_moving_average_ss.h | 71 + .../src/lib/gengen/gr_moving_average_ss.i | 38 + .../src/lib/gengen/gr_multiply_XX.cc.t | 63 + .../src/lib/gengen/gr_multiply_XX.h.t | 56 + .../src/lib/gengen/gr_multiply_XX.i.t | 33 + .../src/lib/gengen/gr_multiply_cc.cc | 63 + gnuradio-core/src/lib/gengen/gr_multiply_cc.h | 56 + gnuradio-core/src/lib/gengen/gr_multiply_cc.i | 33 + .../gr_multiply_const_XX.cc.t | 0 .../src/lib/gengen/gr_multiply_const_XX.h.t | 55 + .../gr_multiply_const_XX.i.t | 0 .../gr_multiply_const_cc.cc | 0 .../src/lib/gengen/gr_multiply_const_cc.h | 55 + .../gr_multiply_const_cc.i | 0 .../gr_multiply_const_ff.cc | 0 .../src/lib/gengen/gr_multiply_const_ff.h | 55 + .../gr_multiply_const_ff.i | 0 .../gr_multiply_const_ii.cc | 0 .../src/lib/gengen/gr_multiply_const_ii.h | 55 + .../gr_multiply_const_ii.i | 0 .../gr_multiply_const_ss.cc | 0 .../src/lib/gengen/gr_multiply_const_ss.h | 55 + .../gr_multiply_const_ss.i | 0 .../gr_multiply_const_vXX.cc.t | 0 .../src/lib/gengen/gr_multiply_const_vXX.h.t | 55 + .../gr_multiply_const_vXX.i.t | 0 .../gr_multiply_const_vcc.cc | 0 .../src/lib/gengen/gr_multiply_const_vcc.h | 55 + .../gr_multiply_const_vcc.i | 0 .../gr_multiply_const_vff.cc | 0 .../src/lib/gengen/gr_multiply_const_vff.h | 55 + .../gr_multiply_const_vff.i | 0 .../gr_multiply_const_vii.cc | 0 .../src/lib/gengen/gr_multiply_const_vii.h | 55 + .../gr_multiply_const_vii.i | 0 .../gr_multiply_const_vss.cc | 0 .../src/lib/gengen/gr_multiply_const_vss.h | 55 + .../gr_multiply_const_vss.i | 0 .../src/lib/gengen/gr_multiply_ff.cc | 63 + gnuradio-core/src/lib/gengen/gr_multiply_ff.h | 56 + gnuradio-core/src/lib/gengen/gr_multiply_ff.i | 33 + .../src/lib/gengen/gr_multiply_ii.cc | 63 + gnuradio-core/src/lib/gengen/gr_multiply_ii.h | 56 + gnuradio-core/src/lib/gengen/gr_multiply_ii.i | 33 + .../src/lib/gengen/gr_multiply_ss.cc | 63 + gnuradio-core/src/lib/gengen/gr_multiply_ss.h | 56 + gnuradio-core/src/lib/gengen/gr_multiply_ss.i | 33 + .../lib/{general => gengen}/gr_mute_XX.cc.t | 0 gnuradio-core/src/lib/gengen/gr_mute_XX.h.t | 55 + .../lib/{general => gengen}/gr_mute_XX.i.t | 0 .../src/lib/{general => gengen}/gr_mute_cc.cc | 0 gnuradio-core/src/lib/gengen/gr_mute_cc.h | 55 + .../src/lib/{general => gengen}/gr_mute_cc.i | 0 .../src/lib/{general => gengen}/gr_mute_ff.cc | 0 gnuradio-core/src/lib/gengen/gr_mute_ff.h | 55 + .../src/lib/{general => gengen}/gr_mute_ff.i | 0 .../src/lib/{general => gengen}/gr_mute_ii.cc | 0 gnuradio-core/src/lib/gengen/gr_mute_ii.h | 55 + .../src/lib/{general => gengen}/gr_mute_ii.i | 0 .../src/lib/{general => gengen}/gr_mute_ss.cc | 0 gnuradio-core/src/lib/gengen/gr_mute_ss.h | 55 + .../src/lib/{general => gengen}/gr_mute_ss.i | 0 .../gr_noise_source_X.cc.t | 0 .../src/lib/gengen/gr_noise_source_X.h.t | 63 + .../{general => gengen}/gr_noise_source_X.i.t | 0 .../{general => gengen}/gr_noise_source_c.cc | 0 .../src/lib/gengen/gr_noise_source_c.h | 63 + .../{general => gengen}/gr_noise_source_c.i | 0 .../{general => gengen}/gr_noise_source_f.cc | 0 .../src/lib/gengen/gr_noise_source_f.h | 63 + .../{general => gengen}/gr_noise_source_f.i | 0 .../{general => gengen}/gr_noise_source_i.cc | 0 .../src/lib/gengen/gr_noise_source_i.h | 63 + .../{general => gengen}/gr_noise_source_i.i | 0 .../{general => gengen}/gr_noise_source_s.cc | 0 .../src/lib/gengen/gr_noise_source_s.h | 63 + .../{general => gengen}/gr_noise_source_s.i | 0 .../lib/{general => gengen}/gr_noise_type.h | 0 gnuradio-core/src/lib/gengen/gr_not_XX.cc.t | 58 + gnuradio-core/src/lib/gengen/gr_not_XX.h.t | 54 + gnuradio-core/src/lib/gengen/gr_not_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_not_bb.cc | 58 + gnuradio-core/src/lib/gengen/gr_not_bb.h | 54 + gnuradio-core/src/lib/gengen/gr_not_bb.i | 33 + gnuradio-core/src/lib/gengen/gr_not_ii.cc | 58 + gnuradio-core/src/lib/gengen/gr_not_ii.h | 54 + gnuradio-core/src/lib/gengen/gr_not_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_not_ss.cc | 58 + gnuradio-core/src/lib/gengen/gr_not_ss.h | 54 + gnuradio-core/src/lib/gengen/gr_not_ss.i | 33 + gnuradio-core/src/lib/gengen/gr_or_XX.cc.t | 62 + gnuradio-core/src/lib/gengen/gr_or_XX.h.t | 54 + gnuradio-core/src/lib/gengen/gr_or_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_or_bb.cc | 62 + gnuradio-core/src/lib/gengen/gr_or_bb.h | 54 + gnuradio-core/src/lib/gengen/gr_or_bb.i | 33 + gnuradio-core/src/lib/gengen/gr_or_ii.cc | 62 + gnuradio-core/src/lib/gengen/gr_or_ii.h | 54 + gnuradio-core/src/lib/gengen/gr_or_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_or_ss.cc | 62 + gnuradio-core/src/lib/gengen/gr_or_ss.h | 54 + gnuradio-core/src/lib/gengen/gr_or_ss.i | 33 + .../gr_packed_to_unpacked_XX.cc.t | 0 .../lib/gengen/gr_packed_to_unpacked_XX.h.t | 84 + .../gr_packed_to_unpacked_XX.i.t | 0 .../gr_packed_to_unpacked_bb.cc | 0 .../src/lib/gengen/gr_packed_to_unpacked_bb.h | 84 + .../gr_packed_to_unpacked_bb.i | 0 .../gr_packed_to_unpacked_ii.cc | 0 .../src/lib/gengen/gr_packed_to_unpacked_ii.h | 84 + .../gr_packed_to_unpacked_ii.i | 0 .../gr_packed_to_unpacked_ss.cc | 0 .../src/lib/gengen/gr_packed_to_unpacked_ss.h | 84 + .../gr_packed_to_unpacked_ss.i | 0 .../src/lib/gengen/gr_peak_detector_XX.cc.t | 111 + .../src/lib/gengen/gr_peak_detector_XX.h.t | 125 + .../src/lib/gengen/gr_peak_detector_XX.i.t | 49 + .../src/lib/gengen/gr_peak_detector_fb.cc | 111 + .../src/lib/gengen/gr_peak_detector_fb.h | 125 + .../src/lib/gengen/gr_peak_detector_fb.i | 49 + .../src/lib/gengen/gr_peak_detector_ib.cc | 111 + .../src/lib/gengen/gr_peak_detector_ib.h | 125 + .../src/lib/gengen/gr_peak_detector_ib.i | 49 + .../src/lib/gengen/gr_peak_detector_sb.cc | 111 + .../src/lib/gengen/gr_peak_detector_sb.h | 125 + .../src/lib/gengen/gr_peak_detector_sb.i | 49 + .../src/lib/gengen/gr_sample_and_hold_XX.cc.t | 62 + .../src/lib/gengen/gr_sample_and_hold_XX.h.t | 57 + .../src/lib/gengen/gr_sample_and_hold_XX.i.t | 33 + .../src/lib/gengen/gr_sample_and_hold_bb.cc | 62 + .../src/lib/gengen/gr_sample_and_hold_bb.h | 57 + .../src/lib/gengen/gr_sample_and_hold_bb.i | 33 + .../src/lib/gengen/gr_sample_and_hold_ff.cc | 62 + .../src/lib/gengen/gr_sample_and_hold_ff.h | 57 + .../src/lib/gengen/gr_sample_and_hold_ff.i | 33 + .../src/lib/gengen/gr_sample_and_hold_ii.cc | 62 + .../src/lib/gengen/gr_sample_and_hold_ii.h | 57 + .../src/lib/gengen/gr_sample_and_hold_ii.i | 33 + .../src/lib/gengen/gr_sample_and_hold_ss.cc | 62 + .../src/lib/gengen/gr_sample_and_hold_ss.h | 57 + .../src/lib/gengen/gr_sample_and_hold_ss.i | 33 + .../src/lib/gengen/gr_sig_source_X.cc.t | 242 + .../src/lib/gengen/gr_sig_source_X.h.t | 81 + .../{general => gengen}/gr_sig_source_X.i.t | 0 .../src/lib/gengen/gr_sig_source_c.cc | 242 + .../src/lib/gengen/gr_sig_source_c.h | 81 + .../lib/{general => gengen}/gr_sig_source_c.i | 0 .../src/lib/gengen/gr_sig_source_f.cc | 242 + .../src/lib/gengen/gr_sig_source_f.h | 81 + .../lib/{general => gengen}/gr_sig_source_f.i | 0 .../src/lib/gengen/gr_sig_source_i.cc | 242 + .../src/lib/gengen/gr_sig_source_i.h | 81 + .../lib/{general => gengen}/gr_sig_source_i.i | 0 .../src/lib/gengen/gr_sig_source_s.cc | 242 + .../src/lib/gengen/gr_sig_source_s.h | 81 + .../lib/{general => gengen}/gr_sig_source_s.i | 0 .../src/lib/gengen/gr_sig_source_waveform.h | 29 + gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t | 71 + gnuradio-core/src/lib/gengen/gr_sub_XX.h.t | 56 + gnuradio-core/src/lib/gengen/gr_sub_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_sub_cc.cc | 71 + gnuradio-core/src/lib/gengen/gr_sub_cc.h | 56 + gnuradio-core/src/lib/gengen/gr_sub_cc.i | 33 + gnuradio-core/src/lib/gengen/gr_sub_ff.cc | 71 + gnuradio-core/src/lib/gengen/gr_sub_ff.h | 56 + gnuradio-core/src/lib/gengen/gr_sub_ff.i | 33 + gnuradio-core/src/lib/gengen/gr_sub_ii.cc | 71 + gnuradio-core/src/lib/gengen/gr_sub_ii.h | 56 + gnuradio-core/src/lib/gengen/gr_sub_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_sub_ss.cc | 71 + gnuradio-core/src/lib/gengen/gr_sub_ss.h | 56 + gnuradio-core/src/lib/gengen/gr_sub_ss.i | 33 + .../gr_unpacked_to_packed_XX.cc.t | 0 .../lib/gengen/gr_unpacked_to_packed_XX.h.t | 81 + .../gr_unpacked_to_packed_XX.i.t | 0 .../gr_unpacked_to_packed_bb.cc | 0 .../src/lib/gengen/gr_unpacked_to_packed_bb.h | 81 + .../gr_unpacked_to_packed_bb.i | 0 .../gr_unpacked_to_packed_ii.cc | 0 .../src/lib/gengen/gr_unpacked_to_packed_ii.h | 81 + .../gr_unpacked_to_packed_ii.i | 0 .../gr_unpacked_to_packed_ss.cc | 0 .../src/lib/gengen/gr_unpacked_to_packed_ss.h | 81 + .../gr_unpacked_to_packed_ss.i | 0 .../src/lib/gengen/gr_vector_sink_X.cc.t | 64 + .../src/lib/gengen/gr_vector_sink_X.h.t | 57 + .../src/lib/gengen/gr_vector_sink_X.i.t | 38 + .../src/lib/gengen/gr_vector_sink_b.cc | 64 + .../src/lib/gengen/gr_vector_sink_b.h | 57 + .../src/lib/gengen/gr_vector_sink_b.i | 38 + .../src/lib/gengen/gr_vector_sink_c.cc | 64 + .../src/lib/gengen/gr_vector_sink_c.h | 57 + .../src/lib/gengen/gr_vector_sink_c.i | 38 + .../src/lib/gengen/gr_vector_sink_f.cc | 64 + .../src/lib/gengen/gr_vector_sink_f.h | 57 + .../src/lib/gengen/gr_vector_sink_f.i | 38 + .../src/lib/gengen/gr_vector_sink_i.cc | 64 + .../src/lib/gengen/gr_vector_sink_i.h | 57 + .../src/lib/gengen/gr_vector_sink_i.i | 38 + .../src/lib/gengen/gr_vector_sink_s.cc | 64 + .../src/lib/gengen/gr_vector_sink_s.h | 57 + .../src/lib/gengen/gr_vector_sink_s.i | 38 + .../src/lib/gengen/gr_vector_source_X.cc.t | 89 + .../src/lib/gengen/gr_vector_source_X.h.t | 59 + .../src/lib/gengen/gr_vector_source_X.i.t | 36 + .../src/lib/gengen/gr_vector_source_b.cc | 89 + .../src/lib/gengen/gr_vector_source_b.h | 59 + .../src/lib/gengen/gr_vector_source_b.i | 36 + .../src/lib/gengen/gr_vector_source_c.cc | 89 + .../src/lib/gengen/gr_vector_source_c.h | 59 + .../src/lib/gengen/gr_vector_source_c.i | 36 + .../src/lib/gengen/gr_vector_source_f.cc | 89 + .../src/lib/gengen/gr_vector_source_f.h | 59 + .../src/lib/gengen/gr_vector_source_f.i | 36 + .../src/lib/gengen/gr_vector_source_i.cc | 89 + .../src/lib/gengen/gr_vector_source_i.h | 59 + .../src/lib/gengen/gr_vector_source_i.i | 36 + .../src/lib/gengen/gr_vector_source_s.cc | 89 + .../src/lib/gengen/gr_vector_source_s.h | 59 + .../src/lib/gengen/gr_vector_source_s.i | 36 + gnuradio-core/src/lib/gengen/gr_xor_XX.cc.t | 62 + gnuradio-core/src/lib/gengen/gr_xor_XX.h.t | 54 + gnuradio-core/src/lib/gengen/gr_xor_XX.i.t | 33 + gnuradio-core/src/lib/gengen/gr_xor_bb.cc | 62 + gnuradio-core/src/lib/gengen/gr_xor_bb.h | 54 + gnuradio-core/src/lib/gengen/gr_xor_bb.i | 33 + gnuradio-core/src/lib/gengen/gr_xor_ii.cc | 62 + gnuradio-core/src/lib/gengen/gr_xor_ii.h | 54 + gnuradio-core/src/lib/gengen/gr_xor_ii.i | 33 + gnuradio-core/src/lib/gengen/gr_xor_ss.cc | 62 + gnuradio-core/src/lib/gengen/gr_xor_ss.h | 54 + gnuradio-core/src/lib/gengen/gr_xor_ss.i | 33 + .../src/lib/gengen/stamp-sources-generate | 0 gnuradio-core/src/lib/hier/Makefile.am | 37 + gnuradio-core/src/lib/hier/Makefile.in | 1044 + .../src/lib/hier/gr_channel_model.cc | 101 + gnuradio-core/src/lib/hier/gr_channel_model.h | 73 + gnuradio-core/src/lib/hier/gr_channel_model.i | 45 + gnuradio-core/src/lib/hier/hier.i | 31 + gnuradio-core/src/lib/io/Makefile.am | 33 +- gnuradio-core/src/lib/io/Makefile.in | 626 +- .../src/lib/io/gr_file_descriptor_sink.cc | 1 + .../src/lib/io/gr_file_descriptor_sink.h | 2 +- .../src/lib/io/gr_file_descriptor_source.cc | 2 + .../src/lib/io/gr_file_descriptor_source.h | 2 +- gnuradio-core/src/lib/io/gr_file_sink.cc | 90 +- gnuradio-core/src/lib/io/gr_file_sink.h | 26 +- gnuradio-core/src/lib/io/gr_file_sink.i | 2 +- gnuradio-core/src/lib/io/gr_file_sink_base.cc | 119 + gnuradio-core/src/lib/io/gr_file_sink_base.h | 67 + gnuradio-core/src/lib/io/gr_file_sink_base.i | 46 + gnuradio-core/src/lib/io/gr_file_source.cc | 1 + gnuradio-core/src/lib/io/gr_file_source.h | 2 +- gnuradio-core/src/lib/io/gr_histo_sink.i | 39 + gnuradio-core/src/lib/io/gr_histo_sink_f.cc | 169 + gnuradio-core/src/lib/io/gr_histo_sink_f.h | 70 + gnuradio-core/src/lib/io/gr_message_sink.cc | 1 + gnuradio-core/src/lib/io/gr_message_sink.h | 2 +- gnuradio-core/src/lib/io/gr_message_source.cc | 1 + gnuradio-core/src/lib/io/gr_message_source.h | 2 +- gnuradio-core/src/lib/io/gr_oscope_guts.cc | 170 +- gnuradio-core/src/lib/io/gr_oscope_guts.h | 16 +- gnuradio-core/src/lib/io/gr_oscope_sink.i | 8 +- gnuradio-core/src/lib/io/gr_oscope_sink_f.cc | 10 +- gnuradio-core/src/lib/io/gr_oscope_sink_f.h | 7 +- gnuradio-core/src/lib/io/gr_oscope_sink_x.cc | 18 + gnuradio-core/src/lib/io/gr_oscope_sink_x.h | 5 +- gnuradio-core/src/lib/io/gr_trigger_mode.h | 11 +- gnuradio-core/src/lib/io/gr_udp_sink.cc | 198 + gnuradio-core/src/lib/io/gr_udp_sink.h | 131 + gnuradio-core/src/lib/io/gr_udp_sink.i | 46 + gnuradio-core/src/lib/io/gr_udp_source.cc | 237 + gnuradio-core/src/lib/io/gr_udp_source.h | 120 + gnuradio-core/src/lib/io/gr_udp_source.i | 42 + gnuradio-core/src/lib/io/gr_wavfile_sink.cc | 278 + gnuradio-core/src/lib/io/gr_wavfile_sink.h | 137 + gnuradio-core/src/lib/io/gr_wavfile_sink.i | 47 + gnuradio-core/src/lib/io/gr_wavfile_source.cc | 172 + gnuradio-core/src/lib/io/gr_wavfile_source.h | 93 + gnuradio-core/src/lib/io/gr_wavfile_source.i | 42 + gnuradio-core/src/lib/io/gri_logger.cc | 1 + gnuradio-core/src/lib/io/gri_logger.h | 2 +- gnuradio-core/src/lib/io/gri_wavfile.cc | 312 + gnuradio-core/src/lib/io/gri_wavfile.h | 100 + gnuradio-core/src/lib/io/i2c_bbio.h | 1 + gnuradio-core/src/lib/io/i2c_bbio_pp.h | 1 + gnuradio-core/src/lib/io/i2c_bitbang.h | 1 + gnuradio-core/src/lib/io/io.i | 17 +- gnuradio-core/src/lib/io/microtune_4702.cc | 2 +- gnuradio-core/src/lib/io/microtune_4702.h | 1 + .../src/lib/io/microtune_4702_eval_board.h | 1 + gnuradio-core/src/lib/io/microtune_4937.h | 1 + .../src/lib/io/microtune_4937_eval_board.h | 1 + gnuradio-core/src/lib/io/microtune_xxxx.h | 1 + .../src/lib/io/microtune_xxxx_eval_board.h | 1 + gnuradio-core/src/lib/io/ppio.h | 1 + gnuradio-core/src/lib/io/ppio_ppdev.cc | 184 +- gnuradio-core/src/lib/io/ppio_ppdev.h | 1 + gnuradio-core/src/lib/io/sdr_1000.h | 1 + gnuradio-core/src/lib/missing/Makefile.am | 11 +- gnuradio-core/src/lib/missing/Makefile.in | 586 +- .../src/lib/missing/bug_work_around_8.cc | 2 +- .../src/lib/missing/posix_memalign.cc | 114 + .../src/lib/missing/posix_memalign.h | 42 + gnuradio-core/src/lib/omnithread/Makefile.am | 67 - gnuradio-core/src/lib/omnithread/Makefile.in | 738 - gnuradio-core/src/lib/omnithread/mach.cc | 714 - gnuradio-core/src/lib/omnithread/nt.cc | 969 - gnuradio-core/src/lib/omnithread/omnithread.h | 622 - .../src/lib/omnithread/ot_pthread_nt.h | 186 - gnuradio-core/src/lib/omnithread/posix.cc | 972 - gnuradio-core/src/lib/omnithread/solaris.cc | 615 - gnuradio-core/src/lib/omnithread/vxWorks.cc | 1160 - .../src/lib/reed-solomon/Makefile.am | 4 +- .../src/lib/reed-solomon/Makefile.in | 614 +- .../src/lib/reed-solomon/decode_rs.c | 1 + .../src/lib/reed-solomon/encode_rs.c | 1 + gnuradio-core/src/lib/reed-solomon/exercise.c | 1 + gnuradio-core/src/lib/runtime/Makefile.am | 55 +- gnuradio-core/src/lib/runtime/Makefile.in | 687 +- .../src/lib/runtime/gr_basic_block.cc | 60 + .../src/lib/runtime/gr_basic_block.h | 117 + .../src/lib/runtime/gr_basic_block.i | 52 + gnuradio-core/src/lib/runtime/gr_block.cc | 33 +- gnuradio-core/src/lib/runtime/gr_block.h | 79 +- gnuradio-core/src/lib/runtime/gr_block.i | 16 +- .../src/lib/runtime/gr_block_detail.h | 33 +- .../src/lib/runtime/gr_block_executor.cc | 329 + .../src/lib/runtime/gr_block_executor.h | 69 + gnuradio-core/src/lib/runtime/gr_buffer.cc | 31 +- gnuradio-core/src/lib/runtime/gr_buffer.h | 82 +- gnuradio-core/src/lib/runtime/gr_buffer.i | 8 +- gnuradio-core/src/lib/runtime/gr_complex.h | 2 +- .../src/lib/runtime/gr_dispatcher.cc | 1 + gnuradio-core/src/lib/runtime/gr_dispatcher.h | 1 + .../src/lib/runtime/gr_error_handler.cc | 1 + .../src/lib/runtime/gr_error_handler.h | 1 + .../src/lib/runtime/gr_flat_flowgraph.cc | 291 + .../src/lib/runtime/gr_flat_flowgraph.h | 67 + gnuradio-core/src/lib/runtime/gr_flowgraph.cc | 473 + gnuradio-core/src/lib/runtime/gr_flowgraph.h | 190 + .../src/lib/runtime/gr_hier_block2.cc | 115 + .../src/lib/runtime/gr_hier_block2.h | 156 + .../src/lib/runtime/gr_hier_block2.i | 60 + .../src/lib/runtime/gr_hier_block2_detail.cc | 498 + .../src/lib/runtime/gr_hier_block2_detail.h | 68 + .../src/lib/runtime/gr_io_signature.cc | 80 +- .../src/lib/runtime/gr_io_signature.h | 99 +- .../src/lib/runtime/gr_io_signature.i | 42 +- .../src/lib/runtime/gr_local_sighandler.cc | 1 + .../src/lib/runtime/gr_local_sighandler.h | 4 + gnuradio-core/src/lib/runtime/gr_message.cc | 1 + gnuradio-core/src/lib/runtime/gr_message.h | 3 +- .../src/lib/runtime/gr_msg_handler.h | 1 + gnuradio-core/src/lib/runtime/gr_msg_queue.h | 3 +- gnuradio-core/src/lib/runtime/gr_msg_queue.i | 6 +- .../src/lib/runtime/gr_preferences.cc | 1 + gnuradio-core/src/lib/runtime/gr_realtime.cc | 43 +- gnuradio-core/src/lib/runtime/gr_realtime.h | 13 +- gnuradio-core/src/lib/runtime/gr_realtime.i | 42 +- gnuradio-core/src/lib/runtime/gr_runtime.h | 44 - .../src/lib/runtime/gr_runtime_types.h | 55 + gnuradio-core/src/lib/runtime/gr_scheduler.cc | 33 + gnuradio-core/src/lib/runtime/gr_scheduler.h | 64 + .../src/lib/runtime/gr_scheduler_sts.cc | 87 + .../src/lib/runtime/gr_scheduler_sts.h | 62 + .../src/lib/runtime/gr_scheduler_tpb.cc | 95 + .../src/lib/runtime/gr_scheduler_tpb.h | 60 + .../src/lib/runtime/gr_select_handler.h | 1 + .../runtime/gr_single_threaded_scheduler.cc | 22 +- .../runtime/gr_single_threaded_scheduler.h | 4 +- .../runtime/gr_single_threaded_scheduler.i | 5 +- .../src/lib/runtime/gr_sptr_magic.cc | 81 + gnuradio-core/src/lib/runtime/gr_sptr_magic.h | 51 + .../src/lib/runtime/gr_swig_block_magic.i | 45 - .../lib/{general => runtime}/gr_sync_block.cc | 0 gnuradio-core/src/lib/runtime/gr_sync_block.h | 65 + .../lib/{general => runtime}/gr_sync_block.i | 0 .../{general => runtime}/gr_sync_decimator.cc | 0 .../src/lib/runtime/gr_sync_decimator.h | 68 + .../{general => runtime}/gr_sync_decimator.i | 0 .../src/lib/runtime/gr_sync_interpolator.cc | 70 + .../src/lib/runtime/gr_sync_interpolator.h | 68 + .../gr_sync_interpolator.i | 0 gnuradio-core/src/lib/runtime/gr_timer.h | 1 + gnuradio-core/src/lib/runtime/gr_top_block.cc | 97 + gnuradio-core/src/lib/runtime/gr_top_block.h | 110 + gnuradio-core/src/lib/runtime/gr_top_block.i | 66 + .../src/lib/runtime/gr_top_block_impl.cc | 180 + .../src/lib/runtime/gr_top_block_impl.h | 80 + .../src/lib/runtime/gr_tpb_detail.cc | 67 + gnuradio-core/src/lib/runtime/gr_tpb_detail.h | 81 + .../src/lib/runtime/gr_tpb_thread_body.cc | 79 + .../src/lib/runtime/gr_tpb_thread_body.h | 45 + gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc | 1 + gnuradio-core/src/lib/runtime/gr_vmcircbuf.h | 1 + .../runtime/gr_vmcircbuf_createfilemapping.h | 1 + .../lib/runtime/gr_vmcircbuf_mmap_shm_open.h | 1 + .../lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc | 1 - .../lib/runtime/gr_vmcircbuf_mmap_tmpfile.h | 1 + .../src/lib/runtime/gr_vmcircbuf_sysv_shm.h | 1 + gnuradio-core/src/lib/runtime/qa_gr_block.cc | 9 +- gnuradio-core/src/lib/runtime/qa_gr_buffer.cc | 14 +- .../src/lib/runtime/qa_gr_flowgraph.cc | 245 + .../src/lib/runtime/qa_gr_flowgraph.h | 75 + .../src/lib/runtime/qa_gr_hier_block2.cc | 57 + .../src/lib/runtime/qa_gr_hier_block2.h | 42 + .../lib/runtime/qa_gr_hier_block2_derived.cc | 87 + .../lib/runtime/qa_gr_hier_block2_derived.h | 41 + .../src/lib/runtime/qa_gr_io_signature.cc | 13 +- .../src/lib/runtime/qa_gr_io_signature.h | 1 - .../src/lib/runtime/qa_gr_top_block.cc | 121 + .../src/lib/runtime/qa_gr_top_block.h | 51 + gnuradio-core/src/lib/runtime/qa_runtime.cc | 10 +- gnuradio-core/src/lib/runtime/runtime.i | 13 +- gnuradio-core/src/lib/swig/Makefile.am | 147 +- gnuradio-core/src/lib/swig/Makefile.in | 2133 +- gnuradio-core/src/lib/swig/Makefile.swig.gen | 1554 + gnuradio-core/src/lib/swig/gnuradio.i | 37 +- .../lib/swig/gnuradio_swig_bug_workaround.h | 45 + .../src/lib/swig/gnuradio_swig_py_filter.i | 30 + .../src/lib/swig/gnuradio_swig_py_general.i | 30 + .../src/lib/swig/gnuradio_swig_py_gengen.i | 30 + .../src/lib/swig/gnuradio_swig_py_hier.i | 30 + .../src/lib/swig/gnuradio_swig_py_io.i | 30 + .../src/lib/swig/gnuradio_swig_py_runtime.i | 32 + .../src/lib/swig/gnuradio_swig_python.py | 28 + .../swig/{shared_ptr.i => gr_shared_ptr.i} | 0 .../src/lib/swig/gr_swig_block_magic.i | 39 + gnuradio-core/src/lib/viterbi/Makefile.am | 42 + gnuradio-core/src/lib/viterbi/Makefile.in | 1050 + gnuradio-core/src/lib/viterbi/decode.cc | 88 + gnuradio-core/src/lib/viterbi/encode.cc | 54 + gnuradio-core/src/lib/viterbi/metrics.c | 123 + gnuradio-core/src/lib/viterbi/tab.c | 57 + gnuradio-core/src/lib/viterbi/viterbi.c | 355 + gnuradio-core/src/lib/viterbi/viterbi.h | 49 + gnuradio-core/src/python/Makefile.in | 563 +- gnuradio-core/src/python/bin/Makefile.am | 6 +- gnuradio-core/src/python/bin/Makefile.in | 555 +- gnuradio-core/src/python/build_utils.py | 65 +- gnuradio-core/src/python/gnuradio/Makefile.am | 7 +- gnuradio-core/src/python/gnuradio/Makefile.in | 579 +- gnuradio-core/src/python/gnuradio/audio.py | 2 +- .../src/python/gnuradio/blks/Makefile.am | 35 - .../src/python/gnuradio/blks/Makefile.in | 607 - .../src/python/gnuradio/blks/__init__.py | 37 - .../src/python/gnuradio/blks2/Makefile.am | 30 + .../src/python/gnuradio/blks2/Makefile.in | 920 + .../src/python/gnuradio/blks2/__init__.py | 37 + .../src/python/gnuradio/blks2impl/Makefile.am | 63 + .../src/python/gnuradio/blks2impl/Makefile.in | 953 + .../{blksimpl => blks2impl}/__init__.py | 0 .../src/python/gnuradio/blks2impl/am_demod.py | 76 + .../gnuradio/blks2impl/channel_model.py | 26 + .../src/python/gnuradio/blks2impl/cpm.py | 249 + .../src/python/gnuradio/blks2impl/d8psk.py | 363 + .../src/python/gnuradio/blks2impl/dbpsk.py | 363 + .../src/python/gnuradio/blks2impl/dqpsk.py | 363 + .../python/gnuradio/blks2impl/filterbank.py | 169 + .../src/python/gnuradio/blks2impl/fm_demod.py | 111 + .../src/python/gnuradio/blks2impl/fm_emph.py | 151 + .../src/python/gnuradio/blks2impl/gmsk.py | 292 + .../python/gnuradio/blks2impl/logpwrfft.py | 153 + .../src/python/gnuradio/blks2impl/nbfm_rx.py | 88 + .../src/python/gnuradio/blks2impl/nbfm_tx.py | 92 + .../src/python/gnuradio/blks2impl/ofdm.py | 299 + .../gnuradio/blks2impl/ofdm_receiver.py | 133 + .../gnuradio/blks2impl/ofdm_sync_fixed.py | 50 + .../python/gnuradio/blks2impl/ofdm_sync_ml.py | 165 + .../python/gnuradio/blks2impl/ofdm_sync_pn.py | 123 + .../gnuradio/blks2impl/ofdm_sync_pnac.py | 125 + .../src/python/gnuradio/blks2impl/pkt.py | 164 + .../src/python/gnuradio/blks2impl/psk.py | 94 + .../src/python/gnuradio/blks2impl/qam.py | 113 + .../src/python/gnuradio/blks2impl/qam16.py | 208 + .../src/python/gnuradio/blks2impl/qam256.py | 209 + .../src/python/gnuradio/blks2impl/qam64.py | 208 + .../src/python/gnuradio/blks2impl/qam8.py | 209 + .../gnuradio/blks2impl/rational_resampler.py | 131 + .../gnuradio/blks2impl/standard_squelch.py | 76 + .../blks2impl/stream_to_vector_decimator.py | 94 + .../src/python/gnuradio/blks2impl/wfm_rcv.py | 69 + .../gnuradio/blks2impl/wfm_rcv_fmdet.py | 191 + .../python/gnuradio/blks2impl/wfm_rcv_pll.py | 193 + .../src/python/gnuradio/blks2impl/wfm_tx.py | 79 + .../src/python/gnuradio/blksimpl/Makefile.am | 51 - .../src/python/gnuradio/blksimpl/Makefile.in | 623 - .../src/python/gnuradio/blksimpl/am_demod.py | 75 - .../src/python/gnuradio/blksimpl/dbpsk.py | 381 - .../src/python/gnuradio/blksimpl/dqpsk.py | 374 - .../python/gnuradio/blksimpl/filterbank.py | 160 - .../src/python/gnuradio/blksimpl/fm_demod.py | 122 - .../src/python/gnuradio/blksimpl/fm_emph.py | 145 - .../src/python/gnuradio/blksimpl/gmsk.py | 289 - .../src/python/gnuradio/blksimpl/nbfm_rx.py | 87 - .../src/python/gnuradio/blksimpl/nbfm_tx.py | 95 - .../src/python/gnuradio/blksimpl/pkt.py | 156 - .../src/python/gnuradio/blksimpl/psk.py | 67 - .../gnuradio/blksimpl/rational_resampler.py | 137 - .../gnuradio/blksimpl/standard_squelch.py | 73 - .../src/python/gnuradio/blksimpl/wfm_rcv.py | 72 - .../python/gnuradio/blksimpl/wfm_rcv_pll.py | 206 - .../src/python/gnuradio/blksimpl/wfm_tx.py | 79 - .../src/python/gnuradio/eng_option.py | 6 +- .../src/python/gnuradio/gr/Makefile.am | 41 +- .../src/python/gnuradio/gr/Makefile.in | 598 +- .../src/python/gnuradio/gr/__init__.py | 34 +- .../python/gnuradio/gr/basic_flow_graph.py | 270 - .../python/gnuradio/gr/benchmark_filters.py | 26 +- .../src/python/gnuradio/gr/flow_graph.py | 234 - .../src/python/gnuradio/gr/hier_block.py | 132 - .../src/python/gnuradio/gr/hier_block2.py | 113 + gnuradio-core/src/python/gnuradio/gr/prefs.py | 11 +- .../src/python/gnuradio/gr/pubsub.py | 153 + .../python/gnuradio/gr/qa_add_and_friends.py | 24 +- .../gnuradio/gr/qa_add_v_and_friends.py | 54 +- .../src/python/gnuradio/gr/qa_agc.py | 72 +- .../src/python/gnuradio/gr/qa_argmax.py | 77 + .../python/gnuradio/gr/qa_basic_flow_graph.py | 190 - .../python/gnuradio/gr/qa_bin_statistics.py | 230 + .../src/python/gnuradio/gr/qa_classify.py | 182 + .../python/gnuradio/gr/qa_cma_equalizer.py | 28 +- .../python/gnuradio/gr/qa_complex_to_xxx.py | 70 +- .../gr/qa_constellation_decoder_cb.py | 12 +- .../gnuradio/gr/qa_correlate_access_code.py | 14 +- .../src/python/gnuradio/gr/qa_delay.py | 65 + .../src/python/gnuradio/gr/qa_diff_encoder.py | 18 +- .../python/gnuradio/gr/qa_diff_phasor_cc.py | 12 +- .../src/python/gnuradio/gr/qa_ecc_ccsds_27.py | 50 + .../src/python/gnuradio/gr/qa_feval.py | 20 +- .../src/python/gnuradio/gr/qa_fft.py | 158 + .../src/python/gnuradio/gr/qa_fft_filter.py | 69 +- .../python/gnuradio/gr/qa_filter_delay_fc.py | 42 +- .../src/python/gnuradio/gr/qa_flow_graph.py | 356 - .../gnuradio/gr/qa_fractional_interpolator.py | 39 + .../gnuradio/gr/qa_frequency_modulator.py | 12 +- .../src/python/gnuradio/gr/qa_fsk_stuff.py | 18 +- .../src/python/gnuradio/gr/qa_glfsr_source.py | 94 + .../src/python/gnuradio/gr/qa_goertzel.py | 14 +- .../src/python/gnuradio/gr/qa_head.py | 12 +- .../src/python/gnuradio/gr/qa_hier_block2.py | 369 + .../src/python/gnuradio/gr/qa_hilbert.py | 16 +- .../src/python/gnuradio/gr/qa_iir.py | 84 +- .../src/python/gnuradio/gr/qa_interleave.py | 30 +- .../gnuradio/gr/qa_interp_fir_filter.py | 12 +- .../src/python/gnuradio/gr/qa_kludge_copy.py | 30 +- .../python/gnuradio/gr/qa_kludged_imports.py | 4 +- .../src/python/gnuradio/gr/qa_max.py | 70 + .../src/python/gnuradio/gr/qa_message.py | 13 +- .../src/python/gnuradio/gr/qa_mute.py | 24 +- .../src/python/gnuradio/gr/qa_nlog10.py | 10 +- .../src/python/gnuradio/gr/qa_noise.py | 4 +- .../gnuradio/gr/qa_ofdm_insert_preamble.py | 179 + .../gnuradio/gr/qa_packed_to_unpacked.py | 120 +- .../python/gnuradio/gr/qa_pipe_fittings.py | 36 +- .../gnuradio/gr/qa_pll_carriertracking.py | 158 + .../src/python/gnuradio/gr/qa_pll_freqdet.py | 161 + .../src/python/gnuradio/gr/qa_pll_refout.py | 158 + .../python/gnuradio/gr/qa_pn_correlator_cc.py | 50 + .../gnuradio/gr/qa_rational_resampler.py | 100 +- .../src/python/gnuradio/gr/qa_repeat.py | 48 + .../src/python/gnuradio/gr/qa_scrambler.py | 44 + .../src/python/gnuradio/gr/qa_sig_source.py | 110 +- .../python/gnuradio/gr/qa_single_pole_iir.py | 18 +- .../gnuradio/gr/qa_single_pole_iir_cc.py | 18 +- .../src/python/gnuradio/gr/qa_skiphead.py | 102 + .../python/gnuradio/gr/qa_unpack_k_bits.py | 12 +- .../gnuradio/gr/qa_vector_sink_source.py | 65 + .../python/gnuradio/gr/test_16bit_1chunk.wav | Bin 0 -> 52 bytes .../src/python/gnuradio/gr/top_block.py | 159 + .../src/python/gnuradio/gru/Makefile.am | 7 +- .../src/python/gnuradio/gru/Makefile.in | 545 +- .../src/python/gnuradio/gruimpl/Makefile.am | 8 +- .../src/python/gnuradio/gruimpl/Makefile.in | 543 +- .../src/python/gnuradio/gruimpl/crc.py | 6 +- .../src/python/gnuradio/gruimpl/daemon.py | 102 + .../src/python/gnuradio/gruimpl/freqz.py | 18 +- .../python/gnuradio/gruimpl/gnuplot_freqz.py | 6 +- .../python/gnuradio/gruimpl/msgq_runner.py | 82 + .../src/python/gnuradio/ofdm_packet_utils.py | 453 + .../src/python/gnuradio/packet_utils.py | 55 +- .../src/python/gnuradio/vocoder/Makefile.am | 26 + .../src/python/gnuradio/vocoder/Makefile.in | 917 + .../src/python/gnuradio/vocoder/__init__.py | 1 + gnuradio-core/src/tests/Makefile.am | 23 +- gnuradio-core/src/tests/Makefile.in | 666 +- gnuradio-core/src/tests/benchmark_dotprod | 46 + ...rk_dotprod.cc => benchmark_dotprod_fff.cc} | 0 gnuradio-core/src/tests/benchmark_nco.cc | 1 + gnuradio-core/src/tests/benchmark_vco.cc | 1 + gnuradio-core/src/tests/test_buffers.py | 4 +- gnuradio-core/src/utils/Makefile.am | 2 + gnuradio-core/src/utils/Makefile.in | 531 +- gnuradio-core/src/utils/cic_comp_taps.m | 45 + gnuradio-core/src/utils/read_cshort_binary.m | 46 + gnuradio-examples/ChangeLog | 385 - gnuradio-examples/Makefile.am | 4 +- gnuradio-examples/Makefile.in | 569 +- gnuradio-examples/c++/Makefile.am | 23 + gnuradio-examples/c++/Makefile.in | 874 + gnuradio-examples/python/Makefile.am | 19 +- gnuradio-examples/python/Makefile.in | 603 +- gnuradio-examples/python/apps/Makefile.in | 448 +- .../python/apps/hf_explorer/Makefile.am | 13 +- .../python/apps/hf_explorer/Makefile.in | 620 +- .../python/apps/hf_explorer/hfx2.py | 71 +- .../python/apps/hf_radio/Makefile.am | 17 +- .../python/apps/hf_radio/Makefile.in | 622 +- .../python/apps/hf_radio/README.TXT | 7 + .../python/apps/hf_radio/input.py | 2 +- gnuradio-examples/python/audio/Makefile.am | 15 +- gnuradio-examples/python/audio/Makefile.in | 587 +- gnuradio-examples/python/audio/audio_copy.py | 8 +- gnuradio-examples/python/audio/audio_fft.py | 17 +- gnuradio-examples/python/audio/audio_play.py | 8 +- .../python/audio/audio_to_file.py | 8 +- .../python/audio/dial_squelch.py | 89 - gnuradio-examples/python/audio/dial_tone.py | 8 +- .../python/audio/dial_tone_daemon.py | 57 + .../python/audio/dial_tone_wav.py | 61 + gnuradio-examples/python/audio/dialtone_v.py | 71 - gnuradio-examples/python/audio/mono_tone.py | 8 +- gnuradio-examples/python/audio/multi_tone.py | 8 +- gnuradio-examples/python/audio/noise.py | 55 + .../python/audio/spectrum_inversion.py | 26 +- .../python/audio/test_resampler.py | 12 +- .../python/channel-coding/Makefile.am | 41 - .../python/channel-coding/Makefile.in | 657 - .../channel-coding/fsm_files/Makefile.am | 37 - .../channel-coding/fsm_files/Makefile.in | 496 - .../python/channel-coding/fsm_files/rep5.fsm | 7 - .../channel-coding/fsm_files/simple.fsm | 13 - .../python/channel-coding/fsm_utils.py | 144 - .../python/channel-coding/test_sccc_hard.py | 101 - .../python/channel-coding/test_sccc_soft.py | 108 - .../python/channel-coding/test_sccc_turbo.py | 143 - .../python/channel-coding/test_tcm.py | 118 - .../python/channel-coding/test_tcm1.py | 121 - .../python/channel-coding/test_tcm2.py | 116 - .../channel-coding/test_tcm_combined.py | 100 - .../channel-coding/test_tcm_parallel.py | 106 - .../channel-coding/test_turbo_equalization.py | 141 - .../test_turbo_equalization1.py | 147 - .../test_turbo_equalization2.py | 147 - .../test_viterbi_equalization.py | 94 - .../test_viterbi_equalization1.py | 103 - .../python/digital-bert/Makefile.am | 33 + .../python/digital-bert/Makefile.in | 937 + gnuradio-examples/python/digital-bert/README | 63 + .../python/digital-bert/benchmark_rx.py | 170 + .../python/digital-bert/benchmark_tx.py | 111 + .../python/digital-bert/receive_path.py | 118 + .../python/digital-bert/transmit_path.py | 61 + gnuradio-examples/python/digital/Makefile.am | 31 +- gnuradio-examples/python/digital/Makefile.in | 637 +- gnuradio-examples/python/digital/README | 7 + .../python/digital/benchmark_loopback.py | 168 + .../python/digital/benchmark_qt_loopback.py | 464 + .../python/digital/benchmark_qt_rx.py | 443 + .../python/digital/benchmark_rx.py | 24 +- .../python/digital/benchmark_tx.py | 46 +- .../python/digital/gen_whitener.py | 10 +- .../python/digital/generic_usrp.py | 239 + .../python/digital/pick_bitrate.py | 32 +- .../python/digital/qt_digital_window.py | 257 + .../python/digital/qt_digital_window.ui | 633 + .../python/digital/qt_rx_window.py | 172 + .../python/digital/qt_rx_window.ui | 461 + .../python/digital/receive_path.py | 166 +- .../python/digital/run_length.py | 83 + gnuradio-examples/python/digital/rx_voice.py | 41 +- .../python/digital/transmit_path.py | 160 +- gnuradio-examples/python/digital/tunnel.py | 77 +- gnuradio-examples/python/digital/tx_voice.py | 44 +- .../python/digital/usrp_options.py | 123 + .../python/digital/usrp_receive_path.py | 86 + .../python/digital/usrp_transmit_path.py | 90 + .../python/digital_voice/Makefile.am | 11 +- .../python/digital_voice/Makefile.in | 583 +- .../python/digital_voice/cvsd_test.py | 63 + .../python/digital_voice/encdec.py | 12 +- gnuradio-examples/python/mp-sched/Makefile.am | 32 + gnuradio-examples/python/mp-sched/Makefile.in | 936 + gnuradio-examples/python/mp-sched/README | 2 + .../python/mp-sched/plot_flops.py | 98 + .../python/mp-sched/run_synthetic.py | 101 + .../python/mp-sched/synthetic.py | 118 + .../python/mp-sched/wfm_rcv_pll_to_wav.py | 127 + .../python/multi-antenna/Makefile.am | 8 +- .../python/multi-antenna/Makefile.in | 580 +- .../python/multi-antenna/multi_fft.py | 28 +- .../python/multi-antenna/multi_file.py | 20 +- .../python/multi-antenna/multi_scope.py | 25 +- .../python/multi_usrp/Makefile.am | 13 +- .../python/multi_usrp/Makefile.in | 620 +- gnuradio-examples/python/multi_usrp/README | 8 +- .../python/multi_usrp/multi_usrp_oscope.py | 4 +- .../python/multi_usrp/multi_usrp_rx_cfile.py | 12 +- gnuradio-examples/python/network/Makefile.am | 32 + gnuradio-examples/python/network/Makefile.in | 908 + .../python/network/audio_sink.py | 59 + .../python/network/audio_source.py | 61 + .../python/network/dial_tone_sink.py | 59 + .../python/network/dial_tone_source.py | 70 + .../python/network/vector_sink.py | 57 + .../python/network/vector_source.py | 60 + .../python/networking/Makefile.am | 23 - .../python/networking/Makefile.in | 483 - .../python/networking/measurement_slave.py | 241 - gnuradio-examples/python/ofdm/Makefile.am | 42 + gnuradio-examples/python/ofdm/Makefile.in | 945 + .../python/ofdm/benchmark_ofdm.py | 187 + .../python/ofdm/benchmark_ofdm_rx.py | 212 + .../python/ofdm/benchmark_ofdm_tx.py | 219 + gnuradio-examples/python/ofdm/fftshift.py | 44 + .../python/{digital => ofdm}/fusb_options.py | 0 .../python/ofdm/ofdm_mod_demod_test.py | 179 + gnuradio-examples/python/ofdm/ofdm_sync.m | 28 + gnuradio-examples/python/ofdm/ofdm_sync_pn.m | 21 + gnuradio-examples/python/ofdm/pick_bitrate.py | 143 + gnuradio-examples/python/ofdm/plot_ofdm.m | 74 + gnuradio-examples/python/ofdm/receive_path.py | 105 + .../python/ofdm/transmit_path.py | 93 + gnuradio-examples/python/ofdm/tunnel.py | 435 + gnuradio-examples/python/usrp/Makefile.am | 59 +- gnuradio-examples/python/usrp/Makefile.in | 631 +- gnuradio-examples/python/usrp/am_rcv.py | 115 - gnuradio-examples/python/usrp/ayfabtu.py | 169 - .../python/usrp/benchmark_usb.py | 106 - gnuradio-examples/python/usrp/flexrf_debug.py | 169 - .../python/usrp/flexrf_siggen.py | 148 - gnuradio-examples/python/usrp/fm_tx4.py | 86 +- .../python/usrp/fm_tx_2_daughterboards.py | 63 +- gnuradio-examples/python/usrp/max_power.py | 20 +- gnuradio-examples/python/usrp/siggen_min2.py | 62 - .../python/usrp/test_counting.py | 53 - .../python/usrp/test_dft_analysis.py | 14 +- .../python/usrp/test_dft_synth.py | 27 +- .../usrp/test_digital_loopback_counting.py | 65 - .../python/usrp/test_digital_loopback_lfsr.py | 62 - .../python/usrp/tvrx_am_rcv_gui.py | 154 - .../python/usrp/usrp_am_mw_rcv.py | 329 + .../python/usrp/usrp_benchmark_usb.py | 106 + gnuradio-examples/python/usrp/usrp_fft.py | 251 - gnuradio-examples/python/usrp/usrp_fft_old.py | 110 - .../python/usrp/usrp_nbfm_ptt.py | 70 +- .../python/usrp/usrp_nbfm_rcv.py | 73 +- gnuradio-examples/python/usrp/usrp_oscope.py | 252 - .../python/usrp/usrp_rx_cfile.py | 107 - .../python/usrp/usrp_rx_nogui.py | 186 - gnuradio-examples/python/usrp/usrp_siggen.py | 180 - .../python/usrp/usrp_spectrum_sense.py | 261 + .../python/usrp/usrp_test_loop_lfsr.py | 62 + gnuradio-examples/python/usrp/usrp_tv_rcv.py | 33 +- .../python/usrp/usrp_tv_rcv_nogui.py | 26 +- gnuradio-examples/python/usrp/usrp_wfm_rcv.py | 53 +- .../python/usrp/usrp_wfm_rcv2_nogui.py | 55 +- .../python/usrp/usrp_wfm_rcv_fmdet.py | 351 + .../python/usrp/usrp_wfm_rcv_nogui.py | 35 +- .../python/usrp/usrp_wfm_rcv_pll.py | 88 +- .../python/usrp/usrp_wfm_rcv_sca.py | 399 + .../python/usrp/usrp_wxapt_rcv.py | 44 +- gnuradio-examples/python/usrp/wfm_rcv_file.py | 99 - gnuradio-examples/python/usrp2/Makefile.am | 32 + gnuradio-examples/python/usrp2/Makefile.in | 936 + .../python/usrp2/qt_wfm_interface.py | 99 + .../python/usrp2/qt_wfm_interface.ui | 253 + .../python/usrp2/usrp2_wfm_qt.py | 352 + .../python/usrp2/usrp2_wfm_rcv.py | 285 + gr-audio-alsa/AUTHORS | 2 - gr-audio-alsa/ChangeLog | 88 - gr-audio-alsa/Makefile.am | 11 +- gr-audio-alsa/Makefile.in | 614 +- gr-audio-alsa/gr-audio-alsa.pc.in | 11 + gr-audio-alsa/src/Makefile.am | 90 +- gr-audio-alsa/src/Makefile.in | 1060 +- gr-audio-alsa/src/Makefile.swig.gen | 259 + gr-audio-alsa/src/audio_alsa.i | 9 +- gr-audio-alsa/src/audio_alsa_sink.cc | 3 +- gr-audio-alsa/src/audio_alsa_sink.h | 4 +- gr-audio-alsa/src/audio_alsa_source.cc | 3 +- gr-audio-alsa/src/audio_alsa_source.h | 4 +- gr-audio-alsa/src/qa_alsa.py | 6 +- gr-audio-jack/AUTHORS | 1 - gr-audio-jack/ChangeLog | 42 - gr-audio-jack/Makefile.am | 7 +- gr-audio-jack/Makefile.in | 600 +- gr-audio-jack/src/Makefile.am | 88 +- gr-audio-jack/src/Makefile.in | 1044 +- gr-audio-jack/src/Makefile.swig.gen | 259 + gr-audio-jack/src/audio_jack.i | 9 +- gr-audio-jack/src/audio_jack_sink.h | 4 +- gr-audio-jack/src/audio_jack_source.h | 4 +- gr-audio-jack/src/qa_jack.py | 4 +- gr-audio-oss/ChangeLog | 91 - gr-audio-oss/Makefile.am | 7 +- gr-audio-oss/Makefile.in | 598 +- gr-audio-oss/src/Makefile.am | 86 +- gr-audio-oss/src/Makefile.in | 1022 +- gr-audio-oss/src/Makefile.swig.gen | 259 + gr-audio-oss/src/audio_oss.i | 9 +- gr-audio-oss/src/qa_oss.py | 6 +- gr-audio-osx/AUTHORS | 1 - gr-audio-osx/ChangeLog | 25 - gr-audio-osx/Makefile.in | 565 +- gr-audio-osx/src/Makefile.am | 91 +- gr-audio-osx/src/Makefile.in | 1043 +- gr-audio-osx/src/Makefile.swig.gen | 259 + gr-audio-osx/src/audio_osx.i | 9 +- gr-audio-osx/src/audio_osx_sink.cc | 19 +- gr-audio-osx/src/audio_osx_source.cc | 104 +- gr-audio-osx/src/circular_buffer.h | 101 +- gr-audio-osx/src/mld_threads.h | 65 +- gr-audio-osx/src/qa_osx.py | 6 +- gr-audio-osx/src/test_audio_loop.py | 6 +- gr-audio-portaudio/AUTHORS | 2 - gr-audio-portaudio/ChangeLog | 31 - gr-audio-portaudio/Makefile.am | 7 +- gr-audio-portaudio/Makefile.in | 600 +- gr-audio-portaudio/src/Makefile.am | 87 +- gr-audio-portaudio/src/Makefile.in | 1051 +- gr-audio-portaudio/src/Makefile.swig.gen | 259 + gr-audio-portaudio/src/audio_portaudio.i | 9 +- .../src/audio_portaudio_sink.cc | 3 +- gr-audio-portaudio/src/audio_portaudio_sink.h | 9 +- .../src/audio_portaudio_source.cc | 3 +- .../src/audio_portaudio_source.h | 9 +- gr-audio-portaudio/src/qa_portaudio.py | 4 +- gr-audio-windows/AUTHORS | 2 - gr-audio-windows/ChangeLog | 42 - gr-audio-windows/Makefile.in | 565 +- gr-audio-windows/src/Makefile.am | 85 +- gr-audio-windows/src/Makefile.in | 1034 +- gr-audio-windows/src/Makefile.swig.gen | 259 + gr-audio-windows/src/audio_windows.i | 9 +- gr-audio-windows/src/qa_audio_windows.py | 6 +- gr-cvsd-vocoder/Makefile.am | 25 + gr-cvsd-vocoder/Makefile.in | 1030 + gr-cvsd-vocoder/src/Makefile.am | 22 + gr-cvsd-vocoder/src/Makefile.in | 896 + gr-cvsd-vocoder/src/lib/Makefile.am | 59 + gr-cvsd-vocoder/src/lib/Makefile.in | 1344 + gr-cvsd-vocoder/src/lib/Makefile.swig.gen | 259 + gr-cvsd-vocoder/src/lib/cvsd_decode_bs.cc | 193 + gr-cvsd-vocoder/src/lib/cvsd_decode_bs.h | 170 + gr-cvsd-vocoder/src/lib/cvsd_encode_sb.cc | 191 + gr-cvsd-vocoder/src/lib/cvsd_encode_sb.h | 173 + gr-cvsd-vocoder/src/lib/cvsd_vocoder.i | 81 + gr-cvsd-vocoder/src/python/Makefile.am | 38 + gr-cvsd-vocoder/src/python/Makefile.in | 1015 + gr-cvsd-vocoder/src/python/cvsd.py | 87 + gr-cvsd-vocoder/src/python/encdec.py | 69 + gr-cvsd-vocoder/src/python/qa_cvsd_vocoder.py | 115 + gr-cvsd-vocoder/src/python/run_tests.in | 10 + gr-gcell/Makefile.am | 24 + gr-gcell/Makefile.in | 1029 + gr-gcell/src/Makefile.am | 94 + gr-gcell/src/Makefile.in | 1595 + gr-gcell/src/Makefile.swig.gen | 259 + gr-gcell/src/examples/Makefile.am | 28 + gr-gcell/src/examples/Makefile.in | 878 + gr-gcell/src/gc_job_manager.i | 75 + gr-gcell/src/gcell.i | 30 + gr-gcell/src/gcell_fft_vcc.cc | 160 + gr-gcell/src/gcell_fft_vcc.h | 64 + gr-gcell/src/gcell_fft_vcc.i | 56 + gr-gcell/src/qa_fft.py | 162 + gr-gcell/src/run_tests.in | 10 + gr-gpio/Makefile.am | 24 + gr-gpio/Makefile.in | 1030 + gr-gpio/src/Makefile.am | 22 + gr-gpio/src/Makefile.in | 896 + gr-gpio/src/fpga/Makefile.am | 23 + gr-gpio/src/fpga/Makefile.in | 896 + gr-gpio/src/fpga/include/Makefile.am | 25 + gr-gpio/src/fpga/include/Makefile.in | 742 + .../include/common_config_2rxhb_2tx_dig.vh | 71 + .../include/common_config_2rxint_2tx_dig.vh | 77 + .../src/fpga/include/common_config_bottom.vh | 133 + gr-gpio/src/fpga/lib/Makefile.am | 31 + gr-gpio/src/fpga/lib/Makefile.in | 905 + gr-gpio/src/fpga/lib/gpio_input.v | 80 + gr-gpio/src/fpga/lib/integ_shifter.v | 68 + gr-gpio/src/fpga/lib/integrator.v | 75 + gr-gpio/src/fpga/lib/io_pins.v | 55 + gr-gpio/src/fpga/lib/rx_chain.v | 121 + gr-gpio/src/fpga/lib/rx_chain_dig.v | 43 + gr-gpio/src/fpga/lib/tx_chain_dig.v | 42 + gr-gpio/src/fpga/rbf/Makefile.am | 34 + gr-gpio/src/fpga/rbf/Makefile.in | 932 + gr-gpio/src/fpga/rbf/std_2rxhb_2tx_dig.rbf | Bin 0 -> 181332 bytes gr-gpio/src/fpga/rbf/std_2rxint_2tx_dig.rbf | Bin 0 -> 158233 bytes gr-gpio/src/fpga/top/Makefile.am | 41 + gr-gpio/src/fpga/top/Makefile.in | 882 + gr-gpio/src/fpga/top/config.vh | 60 + gr-gpio/src/fpga/top/usrp_gpio.csf | 444 + gr-gpio/src/fpga/top/usrp_gpio.esf | 14 + gr-gpio/src/fpga/top/usrp_gpio.psf | 312 + gr-gpio/src/fpga/top/usrp_gpio.qpf | 29 + gr-gpio/src/fpga/top/usrp_gpio.qsf | 412 + gr-gpio/src/fpga/top/usrp_gpio.v | 467 + gr-gpio/src/python/Makefile.am | 37 + gr-gpio/src/python/Makefile.in | 954 + gr-gpio/src/python/__init__.py | 34 + gr-gpio/src/python/gpio.py | 3 + gr-gpio/src/python/gpio_rx_sfile.py | 121 + gr-gpio/src/python/gpio_usrp_fft.py | 333 + gr-gpio/src/python/gpio_usrp_siggen.py | 208 + gr-gsm-fr-vocoder/AUTHORS | 3 - gr-gsm-fr-vocoder/ChangeLog | 45 - gr-gsm-fr-vocoder/Makefile.in | 565 +- gr-gsm-fr-vocoder/src/Makefile.in | 448 +- gr-gsm-fr-vocoder/src/lib/Makefile.am | 94 +- gr-gsm-fr-vocoder/src/lib/Makefile.in | 1004 +- gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen | 259 + gr-gsm-fr-vocoder/src/lib/__init__.py | 20 - gr-gsm-fr-vocoder/src/lib/gsm/Makefile.am | 5 +- gr-gsm-fr-vocoder/src/lib/gsm/Makefile.in | 579 +- gr-gsm-fr-vocoder/src/lib/gsm/code.c | 1 + gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c | 1 + gr-gsm-fr-vocoder/src/lib/gsm_fr_decode_ps.h | 1 + gr-gsm-fr-vocoder/src/lib/gsm_fr_encode_sp.h | 2 +- gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i | 8 +- gr-gsm-fr-vocoder/src/python/Makefile.in | 550 +- gr-gsm-fr-vocoder/src/python/encdec.py | 14 +- .../src/python/qa_gsm_full_rate.py | 6 +- gr-pager/Makefile.am | 24 + gr-pager/Makefile.in | 1030 + gr-pager/README | 85 + gr-pager/src/Makefile.am | 95 + gr-pager/src/Makefile.in | 1547 + gr-pager/src/Makefile.swig.gen | 259 + gr-pager/src/__init__.py | 26 + gr-pager/src/flex_demod.py | 64 + gr-pager/src/pager_flex_deinterleave.cc | 94 + gr-pager/src/pager_flex_deinterleave.h | 54 + gr-pager/src/pager_flex_frame.cc | 38 + gr-pager/src/pager_flex_frame.h | 46 + gr-pager/src/pager_flex_frame.i | 37 + gr-pager/src/pager_flex_parse.cc | 240 + gr-pager/src/pager_flex_parse.h | 72 + gr-pager/src/pager_flex_sync.cc | 340 + gr-pager/src/pager_flex_sync.h | 100 + gr-pager/src/pager_slicer_fb.cc | 84 + gr-pager/src/pager_slicer_fb.h | 56 + gr-pager/src/pager_swig.i | 89 + gr-pager/src/pager_utils.py | 60 + gr-pager/src/pageri_bch3221.cc | 36 + gr-pager/src/pageri_bch3221.h | 31 + gr-pager/src/pageri_flex_modes.cc | 57 + gr-pager/src/pageri_flex_modes.h | 74 + gr-pager/src/pageri_util.cc | 46 + gr-pager/src/pageri_util.h | 30 + gr-pager/src/qa_pager.py | 35 + gr-pager/src/run_tests.in | 10 + gr-pager/src/usrp_flex.py | 172 + gr-pager/src/usrp_flex_all.py | 109 + gr-pager/src/usrp_flex_band.py | 110 + gr-qtgui/Makefile.am | 25 + gr-qtgui/Makefile.in | 1030 + gr-qtgui/src/Makefile.am | 22 + gr-qtgui/src/Makefile.in | 896 + gr-qtgui/src/lib/ConstellationDisplayPlot.cc | 184 + gr-qtgui/src/lib/ConstellationDisplayPlot.h | 55 + .../src/lib/ConstellationDisplayPlot_moc.cc | 74 + gr-qtgui/src/lib/FrequencyDisplayPlot.cc | 420 + gr-qtgui/src/lib/FrequencyDisplayPlot.h | 91 + gr-qtgui/src/lib/FrequencyDisplayPlot_moc.cc | 77 + gr-qtgui/src/lib/Makefile.am | 125 + gr-qtgui/src/lib/Makefile.in | 1465 + gr-qtgui/src/lib/Makefile.swig.gen | 259 + gr-qtgui/src/lib/SpectrumGUIClass.cc | 458 + gr-qtgui/src/lib/SpectrumGUIClass.h | 108 + gr-qtgui/src/lib/TimeDomainDisplayPlot.cc | 197 + gr-qtgui/src/lib/TimeDomainDisplayPlot.h | 57 + gr-qtgui/src/lib/TimeDomainDisplayPlot_moc.cc | 74 + gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc | 361 + gr-qtgui/src/lib/Waterfall3DDisplayPlot.h | 191 + .../src/lib/Waterfall3DDisplayPlot_moc.cc | 93 + gr-qtgui/src/lib/WaterfallDisplayPlot.cc | 494 + gr-qtgui/src/lib/WaterfallDisplayPlot.h | 78 + gr-qtgui/src/lib/WaterfallDisplayPlot_moc.cc | 91 + gr-qtgui/src/lib/highResTimeFunctions.h | 190 + gr-qtgui/src/lib/plot_waterfall.cc | 325 + gr-qtgui/src/lib/plot_waterfall.h | 54 + gr-qtgui/src/lib/qtgui.h | 70 + gr-qtgui/src/lib/qtgui.i | 120 + gr-qtgui/src/lib/qtgui_sink_c.cc | 335 + gr-qtgui/src/lib/qtgui_sink_c.h | 121 + gr-qtgui/src/lib/qtgui_sink_f.cc | 319 + gr-qtgui/src/lib/qtgui_sink_f.h | 119 + gr-qtgui/src/lib/spectrumUpdateEvents.cc | 183 + gr-qtgui/src/lib/spectrumUpdateEvents.h | 83 + gr-qtgui/src/lib/spectrumdisplayform.cc | 908 + gr-qtgui/src/lib/spectrumdisplayform.h | 111 + gr-qtgui/src/lib/spectrumdisplayform.ui | 998 + gr-qtgui/src/lib/spectrumdisplayform_moc.cc | 164 + gr-qtgui/src/lib/spectrumdisplayform_ui.h | 363 + gr-qtgui/src/lib/waterfallGlobalData.cc | 258 + gr-qtgui/src/lib/waterfallGlobalData.h | 78 + gr-qtgui/src/python/Makefile.am | 38 + gr-qtgui/src/python/Makefile.in | 929 + gr-qtgui/src/python/__init__.py | 0 gr-qtgui/src/python/pyqt_example.py | 144 + gr-qtgui/src/python/pyqt_example_f.py | 143 + gr-qtgui/src/python/qt_digital.py | 274 + gr-qtgui/src/python/qt_digital_window.py | 117 + gr-qtgui/src/python/qt_digital_window.ui | 313 + gr-qtgui/src/python/usrp2_display.py | 275 + gr-qtgui/src/python/usrp_display.py | 299 + gr-radar-mono/Makefile.am | 25 + gr-radar-mono/Makefile.in | 1031 + gr-radar-mono/README | 67 + gr-radar-mono/doc/Makefile.am | 24 + gr-radar-mono/doc/Makefile.in | 873 + gr-radar-mono/doc/registers.ods | Bin 0 -> 14438 bytes gr-radar-mono/src/Makefile.am | 24 + gr-radar-mono/src/Makefile.in | 1030 + gr-radar-mono/src/fpga/Makefile.am | 24 + gr-radar-mono/src/fpga/Makefile.in | 1030 + gr-radar-mono/src/fpga/lib/Makefile.am | 34 + gr-radar-mono/src/fpga/lib/Makefile.in | 883 + gr-radar-mono/src/fpga/lib/cordic_nco.v | 54 + gr-radar-mono/src/fpga/lib/dac_interface.v | 60 + gr-radar-mono/src/fpga/lib/fifo32_2k.v | 161 + gr-radar-mono/src/fpga/lib/radar.v | 81 + gr-radar-mono/src/fpga/lib/radar_config.vh | 41 + gr-radar-mono/src/fpga/lib/radar_control.v | 166 + gr-radar-mono/src/fpga/lib/radar_rx.v | 109 + gr-radar-mono/src/fpga/lib/radar_tx.v | 59 + gr-radar-mono/src/fpga/models/Makefile.am | 25 + gr-radar-mono/src/fpga/models/Makefile.in | 875 + gr-radar-mono/src/fpga/models/fifo_1clk.v | 88 + gr-radar-mono/src/fpga/tb/Makefile.am | 30 + gr-radar-mono/src/fpga/tb/Makefile.in | 879 + gr-radar-mono/src/fpga/tb/radar_tb.sav | 42 + gr-radar-mono/src/fpga/tb/radar_tb.sh | 7 + gr-radar-mono/src/fpga/tb/radar_tb.v | 215 + gr-radar-mono/src/fpga/tb/radar_tb_wave.sh | 2 + gr-radar-mono/src/fpga/top/Makefile.am | 48 + gr-radar-mono/src/fpga/top/Makefile.in | 938 + .../src/fpga/top/usrp_radar_mono.csf | 444 + .../src/fpga/top/usrp_radar_mono.esf | 14 + .../src/fpga/top/usrp_radar_mono.psf | 312 + .../src/fpga/top/usrp_radar_mono.qpf | 29 + .../src/fpga/top/usrp_radar_mono.qsf | 402 + .../src/fpga/top/usrp_radar_mono.rbf | Bin 0 -> 122609 bytes gr-radar-mono/src/fpga/top/usrp_radar_mono.v | 213 + gr-radar-mono/src/lib/Makefile.am | 22 + gr-radar-mono/src/lib/Makefile.in | 872 + gr-radar-mono/src/python/Makefile.am | 30 + gr-radar-mono/src/python/Makefile.in | 948 + gr-radar-mono/src/python/radar_mono.py | 330 + gr-radar-mono/src/python/run_tests.in | 10 + gr-radar-mono/src/python/usrp_radar_mono.py | 96 + gr-radio-astronomy/AUTHORS | 2 - gr-radio-astronomy/ChangeLog | 30 - gr-radio-astronomy/Makefile.in | 565 +- gr-radio-astronomy/src/Makefile.in | 448 +- gr-radio-astronomy/src/lib/Makefile.am | 77 +- gr-radio-astronomy/src/lib/Makefile.in | 936 +- gr-radio-astronomy/src/lib/Makefile.swig.gen | 259 + gr-radio-astronomy/src/lib/ra.i | 30 +- gr-radio-astronomy/src/python/Makefile.am | 13 +- gr-radio-astronomy/src/python/Makefile.in | 602 +- .../src/python/local_calibrator.py | 24 +- gr-radio-astronomy/src/python/qa_ra.py | 4 +- gr-radio-astronomy/src/python/ra_fftsink.py | 119 +- .../src/python/ra_stripchartsink.py | 37 +- .../src/python/ra_waterfallsink.py | 646 + .../src/python/usrp_psr_receiver.py | 96 +- .../src/python/usrp_ra_receiver.py | 1909 +- gr-sounder/Makefile.am | 24 + gr-sounder/Makefile.in | 1030 + gr-sounder/README | 91 + gr-sounder/doc/Makefile.am | 23 + gr-sounder/doc/Makefile.in | 872 + gr-sounder/src/Makefile.am | 24 + gr-sounder/src/Makefile.in | 1030 + gr-sounder/src/fpga/Makefile.am | 24 + gr-sounder/src/fpga/Makefile.in | 1030 + gr-sounder/src/fpga/lib/Makefile.am | 30 + gr-sounder/src/fpga/lib/Makefile.in | 880 + gr-sounder/src/fpga/lib/dac_interface.v | 60 + gr-sounder/src/fpga/lib/dacpll.v | 291 + gr-sounder/src/fpga/lib/sounder.v | 90 + gr-sounder/src/fpga/lib/sounder_ctrl.v | 97 + gr-sounder/src/fpga/lib/sounder_rx.v | 83 + gr-sounder/src/fpga/lib/sounder_tx.v | 44 + gr-sounder/src/fpga/tb/Makefile.am | 30 + gr-sounder/src/fpga/tb/Makefile.in | 879 + gr-sounder/src/fpga/tb/sounder_tb.sav | 57 + gr-sounder/src/fpga/tb/sounder_tb.sh | 6 + gr-sounder/src/fpga/tb/sounder_tb.v | 238 + gr-sounder/src/fpga/tb/sounder_tb_wave.sh | 2 + gr-sounder/src/fpga/top/Makefile.am | 48 + gr-sounder/src/fpga/top/Makefile.in | 938 + gr-sounder/src/fpga/top/config.vh | 22 + gr-sounder/src/fpga/top/usrp_sounder.csf | 444 + gr-sounder/src/fpga/top/usrp_sounder.esf | 14 + gr-sounder/src/fpga/top/usrp_sounder.psf | 312 + gr-sounder/src/fpga/top/usrp_sounder.qpf | 29 + gr-sounder/src/fpga/top/usrp_sounder.rbf | Bin 0 -> 113716 bytes gr-sounder/src/fpga/top/usrp_sounder.v | 198 + gr-sounder/src/lib/Makefile.am | 22 + gr-sounder/src/lib/Makefile.in | 872 + gr-sounder/src/python/Makefile.am | 39 + gr-sounder/src/python/Makefile.in | 956 + gr-sounder/src/python/qa_nothing.py | 0 gr-sounder/src/python/run_tests.in | 10 + gr-sounder/src/python/sounder.py | 271 + gr-sounder/src/python/sounder_loopback.sh | 4 + gr-sounder/src/python/usrp_sounder.py | 112 + gr-trellis/AUTHORS | 1 - gr-trellis/ChangeLog | 24 - gr-trellis/Makefile.in | 565 +- gr-trellis/doc/Makefile.am | 26 +- gr-trellis/doc/Makefile.in | 588 +- gr-trellis/doc/test_tcm.py | 14 +- gr-trellis/doc/test_tcm.py.xml | 14 +- gr-trellis/doc/test_viterbi_equalization1.py | 16 +- .../doc/test_viterbi_equalization1.py.xml | 16 +- gr-trellis/src/Makefile.am | 2 +- gr-trellis/src/Makefile.in | 450 +- gr-trellis/src/examples/Makefile.am | 45 + gr-trellis/src/examples/Makefile.in | 1105 + .../src/examples}/README | 0 gr-trellis/src/examples/fsm_files/Makefile.am | 40 + gr-trellis/src/examples/fsm_files/Makefile.in | 920 + .../src/examples}/fsm_files/awgn1o2_128.fsm | 0 .../src/examples}/fsm_files/awgn1o2_16.fsm | 0 .../src/examples}/fsm_files/awgn1o2_4.fsm | 0 .../src/examples}/fsm_files/awgn1o2_8.fsm | 0 .../src/examples}/fsm_files/awgn2o3_16.fsm | 0 .../src/examples}/fsm_files/awgn2o3_4.fsm | 0 .../src/examples}/fsm_files/awgn2o3_4_msb.fsm | 0 .../examples}/fsm_files/awgn2o3_4_msbG.fsm | 0 .../src/examples}/fsm_files/awgn2o3_8.fsm | 0 .../src/examples}/fsm_files/awgn2o4_4.fsm | 0 .../src/examples}/fsm_files/disconnected.fsm | 0 .../src/examples}/fsm_files/rep3.fsm | 0 gr-trellis/src/examples/fsm_files/rep5.fsm | 7 + gr-trellis/src/examples/fsm_files/simple.fsm | 13 + gr-trellis/src/examples/fsm_utils.py | 234 + gr-trellis/src/examples/test_sccc_hard.py | 101 + gr-trellis/src/examples/test_sccc_soft.py | 108 + gr-trellis/src/examples/test_sccc_turbo.py | 143 + gr-trellis/src/examples/test_tcm.py | 118 + gr-trellis/src/examples/test_tcm1.py | 121 + gr-trellis/src/examples/test_tcm2.py | 116 + gr-trellis/src/examples/test_tcm_combined.py | 100 + gr-trellis/src/examples/test_tcm_parallel.py | 106 + .../src/examples/test_turbo_equalization.py | 143 + .../src/examples/test_turbo_equalization1.py | 147 + .../src/examples/test_turbo_equalization2.py | 147 + .../src/examples/test_viterbi_equalization.py | 94 + .../examples/test_viterbi_equalization1.py | 103 + gr-trellis/src/lib/Makefile.am | 157 +- gr-trellis/src/lib/Makefile.gen | 45 +- gr-trellis/src/lib/Makefile.in | 1513 +- gr-trellis/src/lib/Makefile.swig.gen | 259 + gr-trellis/src/lib/fsm.cc | 225 +- gr-trellis/src/lib/fsm.h | 14 +- gr-trellis/src/lib/fsm.i | 14 +- gr-trellis/src/lib/generate_all.py | 32 + gr-trellis/src/lib/generate_trellis.py | 117 + gr-trellis/src/lib/interleaver.cc | 35 +- gr-trellis/src/lib/interleaver.h | 3 +- gr-trellis/src/lib/interleaver.i | 3 +- gr-trellis/src/lib/quicksort_index.cc | 76 +- gr-trellis/src/lib/quicksort_index.h | 10 +- gr-trellis/src/lib/stamp-sources-generate | 0 gr-trellis/src/lib/trellis.i | 29 +- gr-trellis/src/lib/trellis_calc_metric.cc | 68 +- gr-trellis/src/lib/trellis_calc_metric.h | 6 +- gr-trellis/src/lib/trellis_encoder_XX.cc.t | 76 + gr-trellis/src/lib/trellis_encoder_XX.h.t | 57 + gr-trellis/src/lib/trellis_encoder_XX.i.t | 36 + gr-trellis/src/lib/trellis_encoder_bb.cc | 4 +- gr-trellis/src/lib/trellis_encoder_bb.h | 4 +- gr-trellis/src/lib/trellis_encoder_bi.cc | 4 +- gr-trellis/src/lib/trellis_encoder_bi.h | 4 +- gr-trellis/src/lib/trellis_encoder_bs.cc | 4 +- gr-trellis/src/lib/trellis_encoder_bs.h | 4 +- gr-trellis/src/lib/trellis_encoder_ii.cc | 4 +- gr-trellis/src/lib/trellis_encoder_ii.h | 4 +- gr-trellis/src/lib/trellis_encoder_si.cc | 4 +- gr-trellis/src/lib/trellis_encoder_si.h | 4 +- gr-trellis/src/lib/trellis_encoder_ss.cc | 4 +- gr-trellis/src/lib/trellis_encoder_ss.h | 4 +- gr-trellis/src/lib/trellis_generated.i | 30 +- gr-trellis/src/lib/trellis_metrics_X.cc.t | 97 + gr-trellis/src/lib/trellis_metrics_X.h.t | 65 + gr-trellis/src/lib/trellis_metrics_X.i.t | 40 + gr-trellis/src/lib/trellis_metrics_c.cc | 18 +- gr-trellis/src/lib/trellis_metrics_c.h | 4 +- gr-trellis/src/lib/trellis_metrics_c.i | 1 + gr-trellis/src/lib/trellis_metrics_f.cc | 18 +- gr-trellis/src/lib/trellis_metrics_f.h | 4 +- gr-trellis/src/lib/trellis_metrics_f.i | 1 + gr-trellis/src/lib/trellis_metrics_i.cc | 18 +- gr-trellis/src/lib/trellis_metrics_i.h | 4 +- gr-trellis/src/lib/trellis_metrics_i.i | 1 + gr-trellis/src/lib/trellis_metrics_s.cc | 18 +- gr-trellis/src/lib/trellis_metrics_s.h | 4 +- gr-trellis/src/lib/trellis_metrics_s.i | 1 + gr-trellis/src/lib/trellis_permutation.cc | 1 + gr-trellis/src/lib/trellis_permutation.h | 4 +- gr-trellis/src/lib/trellis_siso_combined_f.cc | 10 +- gr-trellis/src/lib/trellis_siso_combined_f.h | 5 +- gr-trellis/src/lib/trellis_siso_f.cc | 10 +- gr-trellis/src/lib/trellis_siso_f.h | 4 +- gr-trellis/src/lib/trellis_viterbi_X.cc.t | 170 + gr-trellis/src/lib/trellis_viterbi_X.h.t | 81 + gr-trellis/src/lib/trellis_viterbi_X.i.t | 49 + gr-trellis/src/lib/trellis_viterbi_b.cc | 18 +- gr-trellis/src/lib/trellis_viterbi_b.h | 3 + .../src/lib/trellis_viterbi_combined_XX.cc.t | 190 + .../src/lib/trellis_viterbi_combined_XX.h.t | 97 + .../src/lib/trellis_viterbi_combined_XX.i.t | 59 + .../src/lib/trellis_viterbi_combined_b.cc | 183 - .../src/lib/trellis_viterbi_combined_b.h | 93 - .../src/lib/trellis_viterbi_combined_b.i | 58 - .../src/lib/trellis_viterbi_combined_cb.cc | 190 + .../src/lib/trellis_viterbi_combined_cb.h | 97 + .../src/lib/trellis_viterbi_combined_cb.i | 59 + .../src/lib/trellis_viterbi_combined_ci.cc | 190 + .../src/lib/trellis_viterbi_combined_ci.h | 97 + .../src/lib/trellis_viterbi_combined_ci.i | 59 + .../src/lib/trellis_viterbi_combined_cs.cc | 190 + .../src/lib/trellis_viterbi_combined_cs.h | 97 + .../src/lib/trellis_viterbi_combined_cs.i | 59 + .../src/lib/trellis_viterbi_combined_fb.cc | 190 + .../src/lib/trellis_viterbi_combined_fb.h | 97 + .../src/lib/trellis_viterbi_combined_fb.i | 59 + .../src/lib/trellis_viterbi_combined_fi.cc | 190 + .../src/lib/trellis_viterbi_combined_fi.h | 97 + .../src/lib/trellis_viterbi_combined_fi.i | 59 + .../src/lib/trellis_viterbi_combined_fs.cc | 190 + .../src/lib/trellis_viterbi_combined_fs.h | 97 + .../src/lib/trellis_viterbi_combined_fs.i | 59 + .../src/lib/trellis_viterbi_combined_i.cc | 183 - .../src/lib/trellis_viterbi_combined_i.h | 93 - .../src/lib/trellis_viterbi_combined_i.i | 58 - .../src/lib/trellis_viterbi_combined_ib.cc | 190 + .../src/lib/trellis_viterbi_combined_ib.h | 97 + .../src/lib/trellis_viterbi_combined_ib.i | 59 + .../src/lib/trellis_viterbi_combined_ii.cc | 190 + .../src/lib/trellis_viterbi_combined_ii.h | 97 + .../src/lib/trellis_viterbi_combined_ii.i | 59 + .../src/lib/trellis_viterbi_combined_is.cc | 190 + .../src/lib/trellis_viterbi_combined_is.h | 97 + .../src/lib/trellis_viterbi_combined_is.i | 59 + .../src/lib/trellis_viterbi_combined_s.cc | 183 - .../src/lib/trellis_viterbi_combined_s.h | 93 - .../src/lib/trellis_viterbi_combined_s.i | 58 - .../src/lib/trellis_viterbi_combined_sb.cc | 190 + .../src/lib/trellis_viterbi_combined_sb.h | 97 + .../src/lib/trellis_viterbi_combined_sb.i | 59 + .../src/lib/trellis_viterbi_combined_si.cc | 190 + .../src/lib/trellis_viterbi_combined_si.h | 97 + .../src/lib/trellis_viterbi_combined_si.i | 59 + .../src/lib/trellis_viterbi_combined_ss.cc | 190 + .../src/lib/trellis_viterbi_combined_ss.h | 97 + .../src/lib/trellis_viterbi_combined_ss.i | 59 + gr-trellis/src/lib/trellis_viterbi_i.cc | 18 +- gr-trellis/src/lib/trellis_viterbi_i.h | 3 + gr-trellis/src/lib/trellis_viterbi_s.cc | 18 +- gr-trellis/src/lib/trellis_viterbi_s.h | 3 + gr-trellis/src/python/Makefile.am | 4 +- gr-trellis/src/python/Makefile.in | 552 +- gr-trellis/src/python/qa_trellis.py | 4 +- gr-usrp/AUTHORS | 1 - gr-usrp/ChangeLog | 374 - gr-usrp/Makefile.am | 10 +- gr-usrp/Makefile.in | 613 +- gr-usrp/apps/Makefile.am | 53 + gr-usrp/apps/Makefile.in | 1020 + gr-usrp/apps/usrp_rx_cfile.cc | 245 + gr-usrp/apps/usrp_rx_cfile.h | 62 + gr-usrp/apps/usrp_siggen.cc | 225 + gr-usrp/apps/usrp_siggen.h | 53 + gr-usrp/gnuradio-usrp.pc.in | 11 + gr-usrp/src/Makefile.am | 180 +- gr-usrp/src/Makefile.in | 1125 +- gr-usrp/src/Makefile.swig.gen | 259 + gr-usrp/src/__init__.py | 28 + gr-usrp/src/db_base.py | 234 - gr-usrp/src/db_basic.py | 252 - gr-usrp/src/db_dbs_rx.py | 345 - gr-usrp/src/db_flexrf.py | 680 - gr-usrp/src/db_flexrf_mimo.py | 286 - gr-usrp/src/db_instantiator.py | 31 - gr-usrp/src/db_tv_rx.py | 198 - gr-usrp/src/flexrf_debug_gui.py | 176 - gr-usrp/src/qa_usrp.py | 6 +- gr-usrp/src/run_tests.in | 4 +- gr-usrp/src/tx_debug_gui.py | 187 - gr-usrp/src/usrp.py | 474 - gr-usrp/src/usrp1.i | 657 - gr-usrp/src/usrp1_sink_base.cc | 359 - gr-usrp/src/usrp1_sink_base.h | 359 - gr-usrp/src/usrp1_sink_c.cc | 106 - gr-usrp/src/usrp1_sink_c.h | 87 - gr-usrp/src/usrp1_sink_s.cc | 106 - gr-usrp/src/usrp1_sink_s.h | 86 - gr-usrp/src/usrp1_source_base.cc | 425 - gr-usrp/src/usrp1_source_base.h | 455 - gr-usrp/src/usrp1_source_c.cc | 131 - gr-usrp/src/usrp1_source_c.h | 93 - gr-usrp/src/usrp1_source_s.cc | 131 - gr-usrp/src/usrp1_source_s.h | 94 - gr-usrp/src/usrp_base.cc | 322 + gr-usrp/src/usrp_base.h | 452 + gr-usrp/src/usrp_base.i | 84 + gr-usrp/src/usrp_multi.py | 233 - gr-usrp/src/usrp_sink_base.cc | 248 + gr-usrp/src/usrp_sink_base.h | 152 + gr-usrp/src/usrp_sink_base.i | 55 + gr-usrp/src/usrp_sink_c.cc | 106 + gr-usrp/src/usrp_sink_c.h | 89 + gr-usrp/src/usrp_sink_c.i | 47 + gr-usrp/src/usrp_sink_s.cc | 106 + gr-usrp/src/usrp_sink_s.h | 88 + gr-usrp/src/usrp_sink_s.i | 47 + gr-usrp/src/usrp_source_base.cc | 301 + gr-usrp/src/usrp_source_base.h | 220 + gr-usrp/src/usrp_source_base.i | 64 + gr-usrp/src/usrp_source_c.cc | 131 + gr-usrp/src/usrp_source_c.h | 97 + gr-usrp/src/usrp_source_c.i | 48 + gr-usrp/src/usrp_source_s.cc | 131 + gr-usrp/src/usrp_source_s.h | 96 + gr-usrp/src/usrp_source_s.i | 48 + gr-usrp/src/usrp_standard.i | 36 + gr-usrp/src/usrp_swig.i | 143 + gr-usrp2/Makefile.am | 27 + gr-usrp2/Makefile.in | 1065 + gr-usrp2/gnuradio-usrp2.pc.in | 11 + gr-usrp2/src/Makefile.am | 113 + gr-usrp2/src/Makefile.in | 1507 + gr-usrp2/src/Makefile.swig.gen | 259 + gr-usrp2/src/qa_usrp2.py | 40 + gr-usrp2/src/run_tests.in | 17 + gr-usrp2/src/rx_16sc_handler.cc | 32 + gr-usrp2/src/rx_16sc_handler.h | 63 + gr-usrp2/src/rx_32fc_handler.cc | 32 + gr-usrp2/src/rx_32fc_handler.h | 64 + gr-usrp2/src/usrp2.i | 345 + gr-usrp2/src/usrp2_base.cc | 112 + gr-usrp2/src/usrp2_base.h | 109 + gr-usrp2/src/usrp2_sink_16sc.cc | 73 + gr-usrp2/src/usrp2_sink_16sc.h | 60 + gr-usrp2/src/usrp2_sink_32fc.cc | 73 + gr-usrp2/src/usrp2_sink_32fc.h | 60 + gr-usrp2/src/usrp2_sink_base.cc | 151 + gr-usrp2/src/usrp2_sink_base.h | 139 + gr-usrp2/src/usrp2_source_16sc.cc | 69 + gr-usrp2/src/usrp2_source_16sc.h | 58 + gr-usrp2/src/usrp2_source_32fc.cc | 69 + gr-usrp2/src/usrp2_source_32fc.h | 58 + gr-usrp2/src/usrp2_source_base.cc | 179 + gr-usrp2/src/usrp2_source_base.h | 159 + gr-utils/Makefile.am | 22 + gr-utils/Makefile.in | 896 + gr-utils/src/Makefile.am | 22 + gr-utils/src/Makefile.in | 896 + gr-utils/src/lib/Makefile.am | 20 + gr-utils/src/lib/Makefile.in | 737 + gr-utils/src/python/Makefile.am | 58 + gr-utils/src/python/Makefile.in | 970 + gr-utils/src/python/README.plot | 40 + gr-utils/src/python/gr_plot_char.py | 58 + gr-utils/src/python/gr_plot_const.py | 243 + gr-utils/src/python/gr_plot_fft.py | 252 + gr-utils/src/python/gr_plot_fft_c.py | 44 + gr-utils/src/python/gr_plot_fft_f.py | 44 + gr-utils/src/python/gr_plot_float.py | 58 + gr-utils/src/python/gr_plot_int.py | 58 + gr-utils/src/python/gr_plot_iq.py | 180 + gr-utils/src/python/gr_plot_psd.py | 281 + gr-utils/src/python/gr_plot_psd_c.py | 47 + gr-utils/src/python/gr_plot_psd_f.py | 47 + gr-utils/src/python/gr_plot_short.py | 58 + gr-utils/src/python/lsusrp | 75 + gr-utils/src/python/plot_data.py | 168 + gr-utils/src/python/usrp2_fft.py | 273 + gr-utils/src/python/usrp2_rx_cfile.py | 144 + gr-utils/src/python/usrp2_siggen.py | 389 + gr-utils/src/python/usrp2_siggen_gui.py | 275 + gr-utils/src/python/usrp_fft.py | 309 + gr-utils/src/python/usrp_oscope.py | 349 + gr-utils/src/python/usrp_print_db.py | 42 + gr-utils/src/python/usrp_rx_cfile.py | 108 + gr-utils/src/python/usrp_rx_nogui.py | 213 + gr-utils/src/python/usrp_siggen.py | 219 + gr-utils/src/python/usrp_test_counting.py | 53 + gr-utils/src/python/usrp_test_loopback.py | 65 + gr-video-sdl/AUTHORS | 1 - gr-video-sdl/ChangeLog | 25 - gr-video-sdl/Makefile.in | 565 +- gr-video-sdl/src/Makefile.am | 81 +- gr-video-sdl/src/Makefile.in | 987 +- gr-video-sdl/src/Makefile.swig.gen | 259 + gr-video-sdl/src/qa_video_sdl.py | 4 +- gr-video-sdl/src/video_sdl.i | 9 +- gr-video-sdl/src/video_sdl_sink_s.cc | 1 + gr-video-sdl/src/video_sdl_sink_uc.cc | 1 + gr-wxgui/ChangeLog | 171 - gr-wxgui/Makefile.am | 15 +- gr-wxgui/Makefile.in | 635 +- gr-wxgui/README.gl | 29 + gr-wxgui/gr-wxgui.conf | 10 +- gr-wxgui/gr-wxgui.pc.in | 11 + gr-wxgui/src/Makefile.in | 563 +- gr-wxgui/src/python/Makefile.am | 38 +- gr-wxgui/src/python/Makefile.in | 806 +- gr-wxgui/src/python/__init__.py | 2 +- gr-wxgui/src/python/common.py | 142 + gr-wxgui/src/python/const_window.py | 208 + gr-wxgui/src/python/constants.py | 69 + gr-wxgui/src/python/constsink_gl.py | 135 + gr-wxgui/src/python/fft_window.py | 306 + gr-wxgui/src/python/fftsink.py | 488 - gr-wxgui/src/python/fftsink2.py | 41 + gr-wxgui/src/python/fftsink_gl.py | 166 + gr-wxgui/src/python/fftsink_nongl.py | 596 + gr-wxgui/src/python/form.py | 14 +- gr-wxgui/src/python/forms/__init__.py | 103 + gr-wxgui/src/python/forms/converters.py | 153 + gr-wxgui/src/python/forms/forms.py | 641 + gr-wxgui/src/python/gui.py | 135 + gr-wxgui/src/python/histo_window.py | 161 + gr-wxgui/src/python/histosink_gl.py | 110 + gr-wxgui/src/python/number_window.py | 211 + gr-wxgui/src/python/numbersink2.py | 171 + gr-wxgui/src/python/plot.py | 164 +- gr-wxgui/src/python/plotter/Makefile.am | 40 + gr-wxgui/src/python/plotter/Makefile.in | 928 + gr-wxgui/src/python/plotter/__init__.py | 24 + gr-wxgui/src/python/plotter/bar_plotter.py | 144 + .../src/python/plotter/channel_plotter.py | 227 + gr-wxgui/src/python/plotter/common.py | 131 + gr-wxgui/src/python/plotter/gltext.py | 503 + .../src/python/plotter/grid_plotter_base.py | 402 + gr-wxgui/src/python/plotter/plotter_base.py | 172 + .../src/python/plotter/waterfall_plotter.py | 267 + gr-wxgui/src/python/powermate.py | 0 gr-wxgui/src/python/pubsub.py | 153 + gr-wxgui/src/python/scope_window.py | 617 + gr-wxgui/src/python/scopesink.py | 650 - gr-wxgui/src/python/scopesink2.py | 41 + gr-wxgui/src/python/scopesink_gl.py | 206 + gr-wxgui/src/python/scopesink_nongl.py | 651 + gr-wxgui/src/python/slider.py | 0 gr-wxgui/src/python/stdgui.py | 90 - gr-wxgui/src/python/stdgui2.py | 92 + gr-wxgui/src/python/waterfall_window.py | 316 + gr-wxgui/src/python/waterfallsink.py | 475 - gr-wxgui/src/python/waterfallsink2.py | 41 + gr-wxgui/src/python/waterfallsink_gl.py | 168 + gr-wxgui/src/python/waterfallsink_nongl.py | 428 + grc/Makefile.am | 62 + grc/Makefile.in | 1147 + grc/Makefile.inc | 24 + grc/__init__.py | 21 + grc/__init__.py.in | 21 + grc/base/Block.py | 261 + grc/base/Connection.py | 95 + grc/base/Constants.py | 25 + grc/base/Element.py | 67 + grc/base/FlowGraph.py | 227 + grc/base/Makefile.am | 41 + grc/base/Makefile.in | 978 + grc/base/Param.py | 261 + grc/base/ParseXML.py | 102 + grc/base/Platform.py | 176 + grc/base/Port.py | 81 + grc/base/__init__.py | 20 + grc/base/block_tree.dtd | 26 + grc/base/flow_graph.dtd | 36 + grc/base/odict.py | 93 + grc/blocks/Makefile.am | 225 + grc/blocks/Makefile.in | 1130 + grc/blocks/audio_sink.xml | 85 + grc/blocks/audio_source.xml | 85 + grc/blocks/band_pass_filter.xml | 165 + grc/blocks/band_reject_filter.xml | 131 + grc/blocks/blks2_am_demod_cf.xml | 47 + grc/blocks/blks2_analysis_filterbank.xml | 32 + grc/blocks/blks2_dxpsk_demod.xml | 127 + grc/blocks/blks2_dxpsk_mod.xml | 99 + grc/blocks/blks2_error_rate.xml | 69 + grc/blocks/blks2_fm_deemph.xml | 31 + grc/blocks/blks2_fm_demod_cf.xml | 68 + grc/blocks/blks2_fm_preemph.xml | 31 + grc/blocks/blks2_gmsk_demod.xml | 88 + grc/blocks/blks2_gmsk_mod.xml | 67 + grc/blocks/blks2_logpwrfft_x.xml | 90 + grc/blocks/blks2_nbfm_rx.xml | 48 + grc/blocks/blks2_nbfm_tx.xml | 48 + grc/blocks/blks2_ofdm_demod.xml | 122 + grc/blocks/blks2_ofdm_mod.xml | 135 + grc/blocks/blks2_packet_decoder.xml | 75 + grc/blocks/blks2_packet_encoder.xml | 110 + grc/blocks/blks2_qamx_demod.xml | 131 + grc/blocks/blks2_qamx_mod.xml | 103 + grc/blocks/blks2_rational_resampler_xxx.xml | 88 + grc/blocks/blks2_selector.xml | 97 + grc/blocks/blks2_standard_squelch.xml | 32 + .../blks2_stream_to_vector_decimator.xml | 77 + grc/blocks/blks2_synthesis_filterbank.xml | 32 + grc/blocks/blks2_tcp_sink.xml | 89 + grc/blocks/blks2_tcp_source.xml | 89 + grc/blocks/blks2_valve.xml | 72 + grc/blocks/blks2_variable_sink_x.xml | 77 + grc/blocks/blks2_wfm_rcv.xml | 33 + grc/blocks/blks2_wfm_rcv_pll.xml | 37 + grc/blocks/blks2_wfm_tx.xml | 48 + grc/blocks/block_tree.xml | 299 + grc/blocks/const_source_x.xml | 52 + grc/blocks/gr_add_const_vxx.xml | 67 + grc/blocks/gr_add_xx.xml | 63 + grc/blocks/gr_agc2_xx.xml | 65 + grc/blocks/gr_agc_xx.xml | 59 + grc/blocks/gr_and_xx.xml | 48 + grc/blocks/gr_argmax_xx.xml | 61 + grc/blocks/gr_binary_slicer_fb.xml | 20 + grc/blocks/gr_channel_model.xml | 61 + grc/blocks/gr_char_to_float.xml | 20 + grc/blocks/gr_chunks_to_symbols.xml | 68 + grc/blocks/gr_clock_recovery_mm_xx.xml | 64 + grc/blocks/gr_cma_equalizer_cc.xml | 36 + grc/blocks/gr_complex_to_arg.xml | 29 + grc/blocks/gr_complex_to_float.xml | 36 + grc/blocks/gr_complex_to_imag.xml | 29 + .../gr_complex_to_interleaved_short.xml | 20 + grc/blocks/gr_complex_to_mag.xml | 29 + grc/blocks/gr_complex_to_mag_squared.xml | 29 + grc/blocks/gr_complex_to_real.xml | 29 + grc/blocks/gr_conjugate_cc.xml | 20 + grc/blocks/gr_constellation_decoder_cb.xml | 30 + grc/blocks/gr_correlate_access_code_bb.xml | 31 + grc/blocks/gr_costas_loop_cc.xml | 52 + grc/blocks/gr_cpfsk_bc.xml | 37 + grc/blocks/gr_dd_mpsk_sync_cc.xml | 65 + grc/blocks/gr_decode_ccsds_27_fb.xml | 20 + grc/blocks/gr_deinterleave.xml | 67 + grc/blocks/gr_delay.xml | 66 + grc/blocks/gr_descrambler_bb.xml | 38 + grc/blocks/gr_diff_decoder_bb.xml | 25 + grc/blocks/gr_diff_encoder_bb.xml | 25 + grc/blocks/gr_diff_phasor_cc.xml | 20 + grc/blocks/gr_divide_xx.xml | 63 + grc/blocks/gr_dpll_bb.xml | 30 + grc/blocks/gr_encode_ccsds_27_bb.xml | 20 + grc/blocks/gr_feedforward_agc_cc.xml | 32 + grc/blocks/gr_fft_filter_xxx.xml | 52 + grc/blocks/gr_fft_vxx.xml | 81 + grc/blocks/gr_file_sink.xml | 60 + grc/blocks/gr_file_source.xml | 74 + grc/blocks/gr_filter_delay_fc.xml | 31 + grc/blocks/gr_fir_filter_xxx.xml | 80 + grc/blocks/gr_float_to_char.xml | 20 + grc/blocks/gr_float_to_complex.xml | 36 + grc/blocks/gr_float_to_short.xml | 20 + grc/blocks/gr_float_to_uchar.xml | 20 + grc/blocks/gr_fractional_interpolator_xx.xml | 46 + grc/blocks/gr_freq_xlating_fir_filter_xxx.xml | 93 + grc/blocks/gr_frequency_modulator_fc.xml | 25 + grc/blocks/gr_glfsr_source_x.xml | 59 + grc/blocks/gr_goertzel_fc.xml | 35 + grc/blocks/gr_head.xml | 65 + grc/blocks/gr_hilbert_fc.xml | 26 + grc/blocks/gr_iir_filter_ffd.xml | 31 + grc/blocks/gr_integrate_xx.xml | 50 + grc/blocks/gr_interleave.xml | 67 + .../gr_interleaved_short_to_complex.xml | 20 + grc/blocks/gr_interp_fir_filter_xxx.xml | 80 + grc/blocks/gr_iqcomp_cc.xml | 25 + grc/blocks/gr_keep_one_in_n.xml | 67 + grc/blocks/gr_kludge_copy.xml | 59 + grc/blocks/gr_map_bb.xml | 25 + grc/blocks/gr_max_xx.xml | 58 + grc/blocks/gr_moving_average_xx.xml | 68 + grc/blocks/gr_mpsk_receiver_cc.xml | 81 + grc/blocks/gr_mpsk_sync_cc.xml | 69 + grc/blocks/gr_multiply_const_vxx.xml | 67 + grc/blocks/gr_multiply_xx.xml | 63 + grc/blocks/gr_mute_xx.xml | 61 + grc/blocks/gr_nlog10_ff.xml | 42 + grc/blocks/gr_noise_source_x.xml | 77 + grc/blocks/gr_nop.xml | 59 + grc/blocks/gr_not_xx.xml | 48 + grc/blocks/gr_null_sink.xml | 54 + grc/blocks/gr_null_source.xml | 54 + grc/blocks/gr_or_xx.xml | 48 + grc/blocks/gr_packed_to_unpacked_xx.xml | 59 + grc/blocks/gr_peak_detector2_fb.xml | 38 + grc/blocks/gr_peak_detector_xb.xml | 64 + grc/blocks/gr_phase_modulator_fc.xml | 25 + grc/blocks/gr_pll_carriertracking_cc.xml | 40 + grc/blocks/gr_pll_freqdet_cf.xml | 40 + grc/blocks/gr_pll_refout_cc.xml | 40 + grc/blocks/gr_pn_correlator_cc.xml | 35 + grc/blocks/gr_probe_avg_mag_sqrd_x.xml | 60 + grc/blocks/gr_probe_density_b.xml | 37 + grc/blocks/gr_probe_mpsk_snr_c.xml | 55 + grc/blocks/gr_pwr_squelch_xx.xml | 65 + grc/blocks/gr_quadrature_demod_cf.xml | 25 + grc/blocks/gr_rational_resampler_base_xxx.xml | 86 + grc/blocks/gr_repeat.xml | 64 + grc/blocks/gr_rms_xx.xml | 41 + grc/blocks/gr_sample_and_hold_xx.xml | 49 + grc/blocks/gr_scrambler_bb.xml | 38 + grc/blocks/gr_short_to_float.xml | 20 + grc/blocks/gr_sig_source_x.xml | 104 + grc/blocks/gr_simple_correlator.xml | 25 + grc/blocks/gr_simple_framer.xml | 25 + grc/blocks/gr_simple_squelch_cc.xml | 32 + grc/blocks/gr_single_pole_iir_filter_xx.xml | 51 + grc/blocks/gr_skiphead.xml | 65 + grc/blocks/gr_stream_to_streams.xml | 67 + grc/blocks/gr_stream_to_vector.xml | 66 + grc/blocks/gr_streams_to_stream.xml | 67 + grc/blocks/gr_streams_to_vector.xml | 67 + grc/blocks/gr_sub_xx.xml | 63 + grc/blocks/gr_threshold_ff.xml | 40 + grc/blocks/gr_throttle.xml | 65 + grc/blocks/gr_uchar_to_float.xml | 20 + grc/blocks/gr_udp_sink.xml | 85 + grc/blocks/gr_udp_source.xml | 73 + grc/blocks/gr_unpack_k_bits_bb.xml | 25 + grc/blocks/gr_unpacked_to_packed_xx.xml | 59 + grc/blocks/gr_vco_f.xml | 35 + grc/blocks/gr_vector_sink_x.xml | 54 + grc/blocks/gr_vector_source_x.xml | 79 + grc/blocks/gr_vector_to_stream.xml | 66 + grc/blocks/gr_vector_to_streams.xml | 67 + grc/blocks/gr_wavfile_sink.xml | 42 + grc/blocks/gr_wavfile_source.xml | 44 + grc/blocks/gr_xor_xx.xml | 48 + grc/blocks/high_pass_filter.xml | 126 + grc/blocks/import.xml | 26 + grc/blocks/low_pass_filter.xml | 126 + grc/blocks/note.xml | 17 + grc/blocks/notebook.xml | 69 + grc/blocks/options.xml | 148 + grc/blocks/pad_sink.xml | 68 + grc/blocks/pad_source.xml | 68 + grc/blocks/parameter.xml | 92 + grc/blocks/probe_function.xml | 44 + grc/blocks/random_source_x.xml | 75 + grc/blocks/root_raised_cosine_filter.xml | 101 + grc/blocks/trellis_encoder_xx.xml | 74 + grc/blocks/trellis_metrics_x.xml | 85 + grc/blocks/trellis_permutation.xml | 74 + grc/blocks/trellis_siso_combined_f.xml | 112 + grc/blocks/trellis_siso_f.xml | 85 + grc/blocks/trellis_viterbi_combined_xx.xml | 123 + grc/blocks/trellis_viterbi_x.xml | 66 + grc/blocks/usrp2_probe.xml | 33 + grc/blocks/usrp2_sink_xxxx.xml | 95 + grc/blocks/usrp2_source_xxxx.xml | 93 + grc/blocks/usrp_dual_sink_x.xml | 193 + grc/blocks/usrp_dual_source_x.xml | 198 + grc/blocks/usrp_probe.xml | 40 + grc/blocks/usrp_simple_sink_x.xml | 128 + grc/blocks/usrp_simple_source_x.xml | 163 + grc/blocks/variable.xml | 23 + grc/blocks/variable_check_box.xml | 84 + grc/blocks/variable_chooser.xml | 122 + grc/blocks/variable_config.xml | 88 + grc/blocks/variable_slider.xml | 138 + grc/blocks/variable_static_text.xml | 97 + grc/blocks/variable_text_box.xml | 101 + grc/blocks/wxgui_constellationsink2.xml | 126 + grc/blocks/wxgui_fftsink2.xml | 177 + grc/blocks/wxgui_histosink2.xml | 64 + grc/blocks/wxgui_numbersink2.xml | 179 + grc/blocks/wxgui_scopesink2.xml | 134 + grc/blocks/wxgui_waterfallsink2.xml | 134 + grc/blocks/xmlrpc_client.xml | 42 + grc/blocks/xmlrpc_server.xml | 39 + grc/examples/Makefile.am | 55 + grc/examples/Makefile.in | 1021 + grc/examples/audio/dial_tone.grc | 375 + grc/examples/simple/ber_simulation.grc | 564 + grc/examples/simple/dpsk_loopback.grc | 450 + grc/examples/simple/var_sink_taps.grc | 488 + grc/examples/simple/variable_config.grc | 329 + .../trellis/interference_cancellation.grc | 2072 + grc/examples/trellis/readme.txt | 16 + grc/examples/usrp/usrp2_const_wave.grc | 252 + grc/examples/usrp/usrp2_dpsk_mod.grc | 693 + grc/examples/usrp/usrp2_fft.grc | 264 + grc/examples/usrp/usrp_two_tone_loopback.grc | 749 + grc/examples/usrp/usrp_wbfm_receive.grc | 466 + grc/examples/xmlrpc/readme.txt | 18 + grc/examples/xmlrpc/xmlrpc_client.grc | 312 + grc/examples/xmlrpc/xmlrpc_client_script.py | 23 + grc/examples/xmlrpc/xmlrpc_server.grc | 384 + grc/freedesktop/Makefile.am | 55 + grc/freedesktop/Makefile.in | 988 + grc/freedesktop/README | 20 + grc/freedesktop/gnuradio-grc.desktop | 8 + grc/freedesktop/gnuradio-grc.xml | 8 + grc/freedesktop/gnuradio-usrp2_probe.desktop | 7 + grc/freedesktop/gnuradio-usrp_probe.desktop | 7 + grc/freedesktop/grc-icon-128.png | Bin 0 -> 3570 bytes grc/freedesktop/grc-icon-256.png | Bin 0 -> 7843 bytes grc/freedesktop/grc-icon-32.png | Bin 0 -> 1060 bytes grc/freedesktop/grc-icon-48.png | Bin 0 -> 1691 bytes grc/freedesktop/grc-icon-64.png | Bin 0 -> 1893 bytes grc/freedesktop/grc_setup_freedesktop | 58 + grc/freedesktop/grc_setup_freedesktop.in | 58 + grc/grc.conf | 9 + grc/grc.conf.in | 9 + grc/grc_gnuradio/Makefile.am | 50 + grc/grc_gnuradio/Makefile.in | 1035 + grc/grc_gnuradio/README | 14 + grc/grc_gnuradio/__init__.py | 1 + grc/grc_gnuradio/blks2/__init__.py | 28 + grc/grc_gnuradio/blks2/error_rate.py | 137 + grc/grc_gnuradio/blks2/packet.py | 241 + grc/grc_gnuradio/blks2/probe.py | 123 + grc/grc_gnuradio/blks2/selector.py | 128 + grc/grc_gnuradio/blks2/tcp.py | 66 + grc/grc_gnuradio/blks2/variable_sink.py | 64 + grc/grc_gnuradio/usrp/__init__.py | 26 + grc/grc_gnuradio/usrp/common.py | 75 + grc/grc_gnuradio/usrp/dual_usrp.py | 132 + grc/grc_gnuradio/usrp/simple_usrp.py | 113 + grc/grc_gnuradio/wxgui/__init__.py | 22 + grc/grc_gnuradio/wxgui/panel.py | 49 + grc/grc_gnuradio/wxgui/top_block_gui.py | 75 + grc/gui/ActionHandler.py | 408 + grc/gui/Actions.py | 169 + grc/gui/Bars.py | 138 + grc/gui/Block.py | 199 + grc/gui/BlockTreeWindow.py | 168 + grc/gui/Colors.py | 37 + grc/gui/Connection.py | 140 + grc/gui/Constants.py | 83 + grc/gui/Dialogs.py | 105 + grc/gui/DrawingArea.py | 131 + grc/gui/Element.py | 226 + grc/gui/FileDialogs.py | 175 + grc/gui/FlowGraph.py | 493 + grc/gui/MainWindow.py | 324 + grc/gui/Makefile.am | 49 + grc/gui/Makefile.in | 963 + grc/gui/Messages.py | 104 + grc/gui/NotebookPage.py | 188 + grc/gui/Param.py | 103 + grc/gui/ParamsDialog.py | 145 + grc/gui/Platform.py | 48 + grc/gui/Port.py | 190 + grc/gui/Preferences.py | 86 + grc/gui/StateCache.py | 92 + grc/gui/Utils.py | 82 + grc/gui/__init__.py | 1 + grc/python/Block.py | 159 + grc/python/Connection.py | 34 + grc/python/Constants.py | 63 + grc/python/FlowGraph.py | 146 + grc/python/Generator.py | 132 + grc/python/Makefile.am | 44 + grc/python/Makefile.in | 981 + grc/python/Param.py | 404 + grc/python/Platform.py | 81 + grc/python/Port.py | 129 + grc/python/__init__.py | 1 + grc/python/block.dtd | 55 + grc/python/convert_hier.py | 79 + grc/python/default_flow_graph.grc | 43 + grc/python/expr_utils.py | 153 + grc/python/extract_category.py | 61 + grc/python/extract_docs.py | 90 + grc/python/flow_graph.tmpl | 214 + grc/scripts/Makefile.am | 24 + grc/scripts/Makefile.in | 924 + grc/scripts/grc | 54 + grc/scripts/usrp2_probe | 161 + grc/scripts/usrp_probe | 113 + gruel/Makefile.am | 30 + gruel/Makefile.in | 1068 + gruel/README | 30 + gruel/gruel.pc.in | 11 + gruel/src/Makefile.am | 22 + gruel/src/Makefile.in | 896 + gruel/src/include/Makefile.am | 22 + gruel/src/include/Makefile.in | 896 + gruel/src/include/gruel/Makefile.am | 34 + gruel/src/include/gruel/Makefile.in | 964 + gruel/src/include/gruel/inet.h | 68 + gruel/src/include/gruel/inet.h.in | 68 + gruel/src/include/gruel/realtime.h | 95 + gruel/src/include/gruel/sys_pri.h | 41 + gruel/src/include/gruel/thread_body_wrapper.h | 68 + gruel/src/include/gruel/thread_group.h | 44 + gruel/src/lib/Makefile.am | 41 + gruel/src/lib/Makefile.in | 1036 + gruel/src/lib/realtime.cc | 146 + gruel/src/lib/sys_pri.cc | 61 + gruel/src/lib/thread_body_wrapper.cc | 85 + gruel/src/lib/thread_group.cc | 99 + install-sh | 514 +- ltmain.sh | 13225 ++-- mblock/Makefile.am | 31 + mblock/Makefile.in | 1068 + mblock/README | 24 + mblock/doc/Makefile.am | 44 + mblock/doc/Makefile.in | 753 + mblock/mblock.pc.in | 11 + mblock/src/Makefile.am | 22 + mblock/src/Makefile.in | 896 + mblock/src/include/Makefile.am | 24 + mblock/src/include/Makefile.in | 1030 + mblock/src/include/mblock/Makefile.am | 37 + mblock/src/include/mblock/Makefile.in | 960 + mblock/src/include/mblock/class_registry.h | 51 + mblock/src/include/mblock/common.h | 94 + mblock/src/include/mblock/exception.h | 118 + mblock/src/include/mblock/mblock.h | 318 + mblock/src/include/mblock/message.h | 88 + mblock/src/include/mblock/msg_accepter.h | 48 + mblock/src/include/mblock/msg_queue.h | 82 + mblock/src/include/mblock/port.h | 93 + mblock/src/include/mblock/protocol_class.h | 52 + mblock/src/include/mblock/runtime.h | 69 + mblock/src/include/mblock/time.h | 27 + mblock/src/lib/Makefile.am | 132 + mblock/src/lib/Makefile.in | 1193 + mblock/src/lib/README.locking | 4 + mblock/src/lib/benchmark_send.cc | 45 + mblock/src/lib/mb_class_registry.cc | 47 + mblock/src/lib/mb_connection.cc | 126 + mblock/src/lib/mb_connection.h | 78 + mblock/src/lib/mb_endpoint.cc | 49 + mblock/src/lib/mb_endpoint.h | 58 + mblock/src/lib/mb_exception.cc | 106 + mblock/src/lib/mb_gettid.cc | 53 + mblock/src/lib/mb_gettid.h | 26 + mblock/src/lib/mb_mblock.cc | 229 + mblock/src/lib/mb_mblock_impl.cc | 327 + mblock/src/lib/mb_mblock_impl.h | 226 + mblock/src/lib/mb_message.cc | 84 + mblock/src/lib/mb_msg_accepter.cc | 31 + mblock/src/lib/mb_msg_accepter_msgq.cc | 46 + mblock/src/lib/mb_msg_accepter_msgq.h | 39 + mblock/src/lib/mb_msg_accepter_smp.cc | 48 + mblock/src/lib/mb_msg_accepter_smp.h | 42 + mblock/src/lib/mb_msg_queue.cc | 128 + mblock/src/lib/mb_port.cc | 67 + mblock/src/lib/mb_port_simple.cc | 151 + mblock/src/lib/mb_port_simple.h | 72 + mblock/src/lib/mb_protocol_class.cc | 105 + mblock/src/lib/mb_runtime.cc | 39 + mblock/src/lib/mb_runtime_base.cc | 57 + mblock/src/lib/mb_runtime_base.h | 78 + mblock/src/lib/mb_runtime_nop.cc | 84 + mblock/src/lib/mb_runtime_nop.h | 52 + mblock/src/lib/mb_runtime_thread_per_block.cc | 349 + mblock/src/lib/mb_runtime_thread_per_block.h | 84 + mblock/src/lib/mb_timer_queue.cc | 63 + mblock/src/lib/mb_timer_queue.h | 73 + mblock/src/lib/mb_util.cc | 34 + mblock/src/lib/mb_util.h | 35 + mblock/src/lib/mb_worker.cc | 179 + mblock/src/lib/mb_worker.h | 106 + mblock/src/lib/mbi_runtime_lock.h | 61 + mblock/src/lib/qa_bitset.cc | 494 + mblock/src/lib/qa_bitset.mbh | 61 + mblock/src/lib/qa_bitset_mbh.cc | 18 + mblock/src/lib/qa_disconnect.cc | 239 + mblock/src/lib/qa_mblock.cc | 44 + mblock/src/lib/qa_mblock.h | 36 + mblock/src/lib/qa_mblock_prims.cc | 446 + mblock/src/lib/qa_mblock_prims.h | 47 + mblock/src/lib/qa_mblock_send.cc | 475 + mblock/src/lib/qa_mblock_send.h | 43 + mblock/src/lib/qa_mblock_sys.cc | 271 + mblock/src/lib/qa_mblock_sys.h | 45 + mblock/src/lib/qa_timeouts.cc | 290 + mblock/src/lib/qa_timeouts.h | 43 + mblock/src/lib/test_mblock.cc | 37 + mblock/src/scheme/Makefile.am | 21 + mblock/src/scheme/Makefile.in | 895 + mblock/src/scheme/gnuradio/Makefile.am | 23 + mblock/src/scheme/gnuradio/Makefile.in | 739 + mblock/src/scheme/gnuradio/compile-mbh.scm | 231 + missing | 61 +- omnithread/Makefile.am | 70 + omnithread/Makefile.in | 1198 + .../src/lib/omnithread => omnithread}/dir.mk | 0 omnithread/gnuradio-omnithread.pc.in | 11 + omnithread/gnuradio/Makefile.am | 32 + omnithread/gnuradio/Makefile.in | 956 + omnithread/gnuradio/omni_time.h | 89 + omnithread/gnuradio/omnithread.h | 626 + .../gnuradio}/ot_VxThread.h | 0 .../gnuradio}/ot_mach.h | 0 .../gnuradio}/ot_nt.h | 0 .../gnuradio}/ot_posix.h | 0 omnithread/gnuradio/ot_pthread_nt.h | 186 + .../gnuradio}/ot_solaris.h | 0 omnithread/mach.cc | 714 + omnithread/nt.cc | 969 + omnithread/omni_time.cc | 84 + omnithread/posix.cc | 982 + omnithread/solaris.cc | 615 + .../omnithread => omnithread}/threaddata.cc | 0 omnithread/vxWorks.cc | 1160 + pmt/Makefile.am | 30 + pmt/Makefile.in | 1066 + pmt/README | 26 + pmt/doc/Makefile.am | 44 + pmt/doc/Makefile.in | 753 + pmt/pmt.pc.in | 11 + pmt/src/Makefile.am | 22 + pmt/src/Makefile.in | 896 + pmt/src/lib/Makefile.am | 123 + pmt/src/lib/Makefile.in | 1296 + pmt/src/lib/generate_unv.py | 190 + pmt/src/lib/pmt.cc | 1028 + pmt/src/lib/pmt.h | 678 + pmt/src/lib/pmt_int.h | 224 + pmt/src/lib/pmt_io.cc | 138 + pmt/src/lib/pmt_pool.cc | 109 + pmt/src/lib/pmt_pool.h | 67 + pmt/src/lib/pmt_serial_tags.h | 58 + pmt/src/lib/pmt_serialize.cc | 353 + pmt/src/lib/pmt_unv.cc | 1445 + pmt/src/lib/pmt_unv_int.h | 302 + pmt/src/lib/qa_pmt.cc | 40 + pmt/src/lib/qa_pmt.h | 36 + pmt/src/lib/qa_pmt_prims.cc | 415 + pmt/src/lib/qa_pmt_prims.h | 65 + pmt/src/lib/qa_pmt_unv.cc | 447 + pmt/src/lib/qa_pmt_unv.h | 61 + pmt/src/lib/stamp-sources-generate | 0 pmt/src/lib/test_pmt.cc | 37 + pmt/src/lib/unv_qa_template.cc.t | 35 + pmt/src/lib/unv_template.cc.t | 118 + pmt/src/lib/unv_template.h.t | 23 + pmt/src/scheme/Makefile.am | 21 + pmt/src/scheme/Makefile.in | 895 + pmt/src/scheme/gnuradio/Makefile.am | 31 + pmt/src/scheme/gnuradio/Makefile.in | 780 + pmt/src/scheme/gnuradio/gen-serial-tags.scm | 118 + pmt/src/scheme/gnuradio/macros-etc.scm | 50 + pmt/src/scheme/gnuradio/pmt-serial-tags.scm | 75 + pmt/src/scheme/gnuradio/pmt-serialize.scm | 48 + run_tests.sh.in | 134 +- usrp/AUTHORS | 4 - usrp/ChangeLog | 1061 - usrp/Makefile.am | 9 +- usrp/Makefile.in | 466 +- usrp/doc/Doxyfile.in | 6 +- usrp/doc/Makefile.am | 28 +- usrp/doc/Makefile.in | 641 +- usrp/doc/other/Makefile.in | 529 +- usrp/firmware/Makefile.in | 448 +- usrp/firmware/include/Makefile.am | 10 +- usrp/firmware/include/Makefile.in | 431 +- usrp/firmware/include/fpga_regs_common.h | 7 +- usrp/firmware/include/fpga_regs_common.v | 9 +- usrp/firmware/include/fpga_regs_standard.h | 18 +- usrp/firmware/include/fpga_regs_standard.v | 20 +- usrp/firmware/include/fx2regs.h | 4 +- usrp/firmware/include/isr.h | 28 +- usrp/firmware/include/usrp_ids.h | 14 +- usrp/firmware/lib/Makefile.am | 4 +- usrp/firmware/lib/Makefile.in | 407 +- usrp/firmware/src/Makefile.in | 448 +- usrp/firmware/src/common/Makefile.in | 403 +- usrp/firmware/src/usrp2/Makefile.am | 4 +- usrp/firmware/src/usrp2/Makefile.in | 418 +- usrp/fpga/Makefile.extra | 331 +- usrp/fpga/Makefile.in | 778 +- usrp/fpga/inband_lib/chan_fifo_reader.v | 219 + usrp/fpga/inband_lib/channel_demux.v | 78 + usrp/fpga/inband_lib/channel_ram.v | 107 + usrp/fpga/inband_lib/cmd_reader.v | 305 + usrp/fpga/inband_lib/packet_builder.v | 152 + usrp/fpga/inband_lib/register_io.v | 82 + usrp/fpga/inband_lib/rx_buffer_inband.v | 209 + usrp/fpga/inband_lib/tx_buffer_inband.v | 143 + usrp/fpga/inband_lib/tx_packer.v | 119 + usrp/fpga/inband_lib/usb_packet_fifo.v | 112 + usrp/fpga/megacells/fifo_1kx16.bsf | 107 + usrp/fpga/megacells/fifo_1kx16.cmp | 30 + usrp/fpga/megacells/fifo_1kx16.inc | 31 + usrp/fpga/megacells/fifo_1kx16.v | 175 + usrp/fpga/megacells/fifo_1kx16_bb.v | 127 + usrp/fpga/megacells/fifo_1kx16_inst.v | 12 + usrp/fpga/megacells/fifo_4k_18.v | 186 + usrp/fpga/megacells/fifo_4kx16_dc.bsf | 117 + usrp/fpga/megacells/fifo_4kx16_dc.cmp | 31 + usrp/fpga/megacells/fifo_4kx16_dc.inc | 32 + usrp/fpga/megacells/fifo_4kx16_dc.v | 178 + usrp/fpga/megacells/fifo_4kx16_dc_bb.v | 130 + usrp/fpga/megacells/fifo_4kx16_dc_inst.v | 13 + usrp/fpga/models/fifo.v | 3 +- usrp/fpga/models/fifo_4k_18.v | 26 + usrp/fpga/rbf/Makefile.am | 31 +- usrp/fpga/rbf/Makefile.in | 722 +- usrp/fpga/rbf/rev2/Makefile.am | 31 + usrp/fpga/rbf/rev2/Makefile.in | 911 + usrp/fpga/rbf/rev2/inband_1rxhb_1tx.rbf | Bin 0 -> 161180 bytes usrp/fpga/rbf/rev2/inband_2rxhb_2tx.rbf | Bin 0 -> 191849 bytes usrp/fpga/rbf/rev2/std_2rxhb_2tx.rbf | Bin 177079 -> 181588 bytes usrp/fpga/rbf/rev2/std_4rx_0tx.rbf | Bin 174171 -> 183046 bytes usrp/fpga/rbf/rev4/Makefile.am | 31 + usrp/fpga/rbf/rev4/Makefile.in | 911 + usrp/fpga/rbf/rev4/inband_1rxhb_1tx.rbf | Bin 0 -> 161180 bytes usrp/fpga/rbf/rev4/inband_2rxhb_2tx.rbf | Bin 0 -> 191849 bytes usrp/fpga/rbf/rev4/std_2rxhb_2tx.rbf | Bin 177079 -> 181588 bytes usrp/fpga/rbf/rev4/std_4rx_0tx.rbf | Bin 174171 -> 183046 bytes usrp/fpga/sdr_lib/atr_delay.v | 83 + usrp/fpga/sdr_lib/cic_dec_shifter.v | 100 + usrp/fpga/sdr_lib/cic_decim.v | 29 +- usrp/fpga/sdr_lib/cic_int_shifter.v | 30 +- usrp/fpga/sdr_lib/cic_interp.v | 10 +- usrp/fpga/sdr_lib/cordic.v | 2 +- usrp/fpga/sdr_lib/cordic_stage.v | 2 +- usrp/fpga/sdr_lib/hb/coeff_ram.v | 26 - usrp/fpga/sdr_lib/hb/coeff_rom.v | 16 +- usrp/fpga/sdr_lib/master_control.v | 10 +- usrp/fpga/sdr_lib/master_control_multi.v | 2 +- usrp/fpga/sdr_lib/rx_buffer.v | 243 +- usrp/fpga/sdr_lib/rx_chain.v | 3 +- usrp/fpga/sdr_lib/strobe_gen.v | 4 +- usrp/fpga/sdr_lib/tx_buffer.v | 198 +- .../include/common_config_1rxhb_1tx.vh | 61 + .../toplevel/include/common_config_2rx_0tx.vh | 61 + .../include/common_config_2rxhb_0tx.vh | 61 + .../include/common_config_2rxhb_2tx.vh | 61 + .../toplevel/include/common_config_4rx_0tx.vh | 61 + .../toplevel/include/common_config_bottom.vh | 104 + usrp/fpga/toplevel/usrp_inband_usb/config.vh | 53 + .../usrp_inband_usb/usrp_inband_usb.csf | 444 + .../usrp_inband_usb/usrp_inband_usb.esf | 14 + .../usrp_inband_usb/usrp_inband_usb.psf | 312 + .../usrp_inband_usb/usrp_inband_usb.qpf | 29 + .../usrp_inband_usb/usrp_inband_usb.qsf | 423 + .../usrp_inband_usb/usrp_inband_usb.v | 428 + usrp/fpga/toplevel/usrp_multi/config.vh | 62 + usrp/fpga/toplevel/usrp_multi/usrp_multi.qsf | 26 +- usrp/fpga/toplevel/usrp_multi/usrp_multi.v | 2 +- usrp/fpga/toplevel/usrp_multi/usrp_multi.vh | 141 - .../usrp_multi/usrp_multi_config_2rx_0tx.vh | 62 - .../usrp_multi/usrp_multi_config_2rxhb_0tx.vh | 62 - .../usrp_multi/usrp_multi_config_2rxhb_2tx.vh | 62 - .../usrp_multi/usrp_multi_config_4rx_0tx.vh | 62 - usrp/fpga/toplevel/usrp_multi/usrp_std.vh | 29 - usrp/fpga/toplevel/usrp_std/config.vh | 53 + usrp/fpga/toplevel/usrp_std/usrp_std.qsf | 31 +- usrp/fpga/toplevel/usrp_std/usrp_std.v | 33 +- usrp/fpga/toplevel/usrp_std/usrp_std.vh | 119 - .../usrp_std/usrp_std_config_2rxhb_2tx.vh | 61 - .../usrp_std/usrp_std_config_4rx_0tx.vh | 61 - usrp/host/Makefile.am | 3 +- usrp/host/Makefile.in | 450 +- usrp/host/apps/Makefile.am | 17 +- usrp/host/apps/Makefile.in | 621 +- usrp/host/apps/burn-db-eeprom | 12 +- usrp/host/apps/burn-serial-number | 4 +- usrp/host/apps/test_usrp_standard_rx.cc | 10 +- usrp/host/apps/test_usrp_standard_tx.cc | 416 +- usrp/host/apps/usrp_cal_dc_offset.cc | 10 +- usrp/host/apps/usrper.cc | 3 + usrp/host/lib/Makefile.am | 133 +- usrp/host/lib/Makefile.in | 1041 +- usrp/host/lib/README_OSX | 63 - usrp/host/lib/circular_buffer.h | 325 - usrp/host/lib/circular_linked_list.h | 267 - usrp/host/lib/fusb_darwin.cc | 499 - usrp/host/lib/fusb_linux.cc | 686 - usrp/host/lib/fusb_win32.cc | 265 - usrp/host/lib/legacy/Makefile.am | 195 + usrp/host/lib/legacy/Makefile.in | 1380 + usrp/host/lib/legacy/README_OSX | 63 + usrp/host/lib/{ => legacy}/ad9862.h | 0 usrp/host/lib/{ => legacy}/check_data.py | 0 usrp/host/lib/legacy/circular_buffer.h | 317 + usrp/host/lib/legacy/circular_linked_list.h | 284 + usrp/host/lib/{ => legacy}/darwin_libusb.h | 0 usrp/host/lib/legacy/db_base.cc | 252 + usrp/host/lib/legacy/db_base.h | 119 + usrp/host/lib/legacy/db_base.i | 102 + usrp/host/lib/legacy/db_base_impl.h | 33 + usrp/host/lib/legacy/db_basic.cc | 263 + usrp/host/lib/legacy/db_basic.h | 99 + usrp/host/lib/legacy/db_boards.cc | 218 + usrp/host/lib/legacy/db_boards.h | 33 + usrp/host/lib/legacy/db_dbs_rx.cc | 497 + usrp/host/lib/legacy/db_dbs_rx.h | 83 + usrp/host/lib/legacy/db_dtt754.cc | 323 + usrp/host/lib/legacy/db_dtt754.h | 57 + usrp/host/lib/legacy/db_dtt768.cc | 296 + usrp/host/lib/legacy/db_dtt768.h | 57 + usrp/host/lib/legacy/db_flexrf.cc | 1148 + usrp/host/lib/legacy/db_flexrf.h | 355 + usrp/host/lib/legacy/db_flexrf_mimo.cc | 276 + usrp/host/lib/legacy/db_flexrf_mimo.h | 163 + usrp/host/lib/legacy/db_tv_rx.cc | 274 + usrp/host/lib/legacy/db_tv_rx.h | 56 + usrp/host/lib/legacy/db_util.cc | 54 + usrp/host/lib/legacy/db_util.h | 31 + usrp/host/lib/legacy/db_wbx.h | 221 + usrp/host/lib/legacy/db_xcvr2450.cc | 791 + usrp/host/lib/legacy/db_xcvr2450.h | 92 + usrp/host/lib/{ => legacy}/dump_data.py | 0 usrp/host/lib/{ => legacy}/fusb.cc | 0 usrp/host/lib/{ => legacy}/fusb.h | 0 usrp/host/lib/legacy/fusb_darwin.cc | 572 + usrp/host/lib/{ => legacy}/fusb_darwin.h | 0 usrp/host/lib/{ => legacy}/fusb_generic.cc | 0 usrp/host/lib/{ => legacy}/fusb_generic.h | 0 usrp/host/lib/legacy/fusb_linux.cc | 692 + usrp/host/lib/{ => legacy}/fusb_linux.h | 0 usrp/host/lib/{ => legacy}/fusb_ra_wb.cc | 0 usrp/host/lib/{ => legacy}/fusb_ra_wb.h | 0 .../lib/{ => legacy}/fusb_sysconfig_darwin.cc | 0 .../{ => legacy}/fusb_sysconfig_generic.cc | 0 .../lib/{ => legacy}/fusb_sysconfig_linux.cc | 0 .../lib/{ => legacy}/fusb_sysconfig_ra_wb.cc | 0 .../lib/{ => legacy}/fusb_sysconfig_win32.cc | 0 usrp/host/lib/legacy/fusb_win32.cc | 266 + usrp/host/lib/{ => legacy}/fusb_win32.h | 0 usrp/host/lib/{ => legacy}/gen_usrp_dbid.py | 0 usrp/host/lib/{ => legacy}/md5.c | 0 usrp/host/lib/{ => legacy}/md5.h | 0 usrp/host/lib/legacy/mld_threads.h | 275 + usrp/host/lib/{ => legacy}/rate_to_regval.h | 0 usrp/host/lib/legacy/stamp-sources-generate | 0 usrp/host/lib/legacy/std_paths.h.in | 27 + usrp/host/lib/legacy/usrp_basic.cc | 1552 + usrp/host/lib/legacy/usrp_basic.h | 991 + usrp/host/lib/legacy/usrp_bytesex.h | 108 + usrp/host/lib/{ => legacy}/usrp_config.cc | 0 usrp/host/lib/{ => legacy}/usrp_config.h | 0 usrp/host/lib/legacy/usrp_dbid.cc | 102 + usrp/host/lib/legacy/usrp_dbid.dat | 82 + usrp/host/lib/legacy/usrp_dbid.h | 61 + usrp/host/lib/legacy/usrp_dbid.py | 56 + usrp/host/lib/legacy/usrp_local_sighandler.cc | 191 + .../lib/{ => legacy}/usrp_local_sighandler.h | 0 usrp/host/lib/legacy/usrp_prims.cc | 1357 + usrp/host/lib/{ => legacy}/usrp_prims.h | 0 usrp/host/lib/{ => legacy}/usrp_slots.h | 0 usrp/host/lib/legacy/usrp_standard.cc | 1167 + usrp/host/lib/legacy/usrp_standard.h | 452 + usrp/host/lib/legacy/usrp_subdev_spec.h | 50 + usrp/host/lib/legacy/usrp_tune_result.h | 44 + usrp/host/lib/mld_threads.h | 257 - usrp/host/lib/std_paths.h.in | 27 - usrp/host/lib/usrp_basic.cc | 1242 - usrp/host/lib/usrp_basic.h | 776 - usrp/host/lib/usrp_bytesex.h | 74 - usrp/host/lib/usrp_dbid.cc | 96 - usrp/host/lib/usrp_dbid.dat | 74 - usrp/host/lib/usrp_dbid.h | 55 - usrp/host/lib/usrp_dbid.py | 50 - usrp/host/lib/usrp_local_sighandler.cc | 190 - usrp/host/lib/usrp_prims.cc | 1356 - usrp/host/lib/usrp_standard.cc | 831 - usrp/host/lib/usrp_standard.h | 366 - usrp/host/misc/Makefile.am | 2 + usrp/host/misc/Makefile.in | 619 +- usrp/host/misc/getopt.c | 1 + usrp/host/swig/Makefile.am | 84 +- usrp/host/swig/Makefile.in | 932 +- usrp/host/swig/Makefile.swig.gen | 259 + usrp/host/swig/usrp_fpga_regs.py | 2 +- usrp/host/swig/{prims.i => usrp_prims.i} | 0 usrp/usrp.pc.in | 6 +- usrp2/Makefile.am | 23 + usrp2/Makefile.in | 1029 + usrp2/firmware/AUTHORS | 2 + usrp2/firmware/COPYING | 674 + usrp2/firmware/ChangeLog | 22 + usrp2/firmware/INSTALL | 234 + usrp2/firmware/Makefile.am | 34 + usrp2/firmware/Makefile.common | 59 + usrp2/firmware/Makefile.in | 698 + usrp2/firmware/NEWS | 0 usrp2/firmware/README | 5 + usrp2/firmware/aclocal.m4 | 916 + usrp2/firmware/apps/Makefile.am | 76 + usrp2/firmware/apps/Makefile.in | 796 + usrp2/firmware/apps/app_common_v2.c | 670 + usrp2/firmware/apps/app_common_v2.h | 64 + usrp2/firmware/apps/app_passthru_v2.c | 250 + usrp2/firmware/apps/app_passthru_v2.h | 54 + usrp2/firmware/apps/blink_leds.c | 40 + usrp2/firmware/apps/blink_leds2.c | 53 + usrp2/firmware/apps/buf_ram_test.c | 89 + usrp2/firmware/apps/burn_dbsrx_eeprom.c | 106 + usrp2/firmware/apps/burnrev30.c | 162 + usrp2/firmware/apps/burnrev31.c | 162 + usrp2/firmware/apps/burnrev40.c | 162 + usrp2/firmware/apps/can_i_sub.c | 25 + usrp2/firmware/apps/echo.c | 34 + usrp2/firmware/apps/eth_serdes.c | 233 + usrp2/firmware/apps/factory_test.c | 437 + usrp2/firmware/apps/gen_eth_packets.c | 181 + usrp2/firmware/apps/hello.c | 30 + usrp2/firmware/apps/ibs_rx_test.c | 82 + usrp2/firmware/apps/ibs_tx_test.c | 160 + usrp2/firmware/apps/mimo_app_common_v2.c | 581 + usrp2/firmware/apps/mimo_app_common_v2.h | 63 + usrp2/firmware/apps/mimo_tx.c | 362 + usrp2/firmware/apps/mimo_tx_slave.c | 375 + usrp2/firmware/apps/rcv_eth_packets.c | 233 + usrp2/firmware/apps/read_dbids.c | 59 + usrp2/firmware/apps/sd_bounce.c | 153 + usrp2/firmware/apps/sd_gentest.c | 269 + usrp2/firmware/apps/serdes_txrx.c | 367 + usrp2/firmware/apps/set_hw_rev.c | 45 + usrp2/firmware/apps/test1.c | 282 + usrp2/firmware/apps/test_db_spi.c | 35 + usrp2/firmware/apps/test_i2c.c | 108 + usrp2/firmware/apps/test_lsadc.c | 57 + usrp2/firmware/apps/test_lsdac.c | 51 + usrp2/firmware/apps/test_phy_comm.c | 113 + usrp2/firmware/apps/test_ram.c | 105 + usrp2/firmware/apps/test_sd.c | 81 + usrp2/firmware/apps/timer_test.c | 59 + usrp2/firmware/apps/tx_standalone.c | 338 + usrp2/firmware/apps/txrx.c | 346 + usrp2/firmware/bootstrap | 30 + usrp2/firmware/config.guess | 1516 + usrp2/firmware/config.h.in | 76 + usrp2/firmware/config.sub | 1626 + usrp2/firmware/config/Makefile.am | 33 + usrp2/firmware/config/Makefile.in | 400 + usrp2/firmware/config/grc_build.m4 | 287 + usrp2/firmware/config/grc_usrp2_firmware.m4 | 70 + usrp2/firmware/config/grc_usrp2_stub.m4 | 23 + usrp2/firmware/configure | 6739 ++ usrp2/firmware/configure.ac | 162 + usrp2/firmware/configure.gnu | 34 + usrp2/firmware/depcomp | 589 + usrp2/firmware/include/Makefile.am | 27 + usrp2/firmware/include/Makefile.in | 440 + usrp2/firmware/include/usrp2_cdefs.h | 34 + usrp2/firmware/include/usrp2_eth_packet.h | 495 + usrp2/firmware/include/usrp2_fpga_regs.h | 80 + usrp2/firmware/include/usrp2_i2c_addr.h | 82 + usrp2/firmware/include/usrp2_mac_addr.h | 28 + usrp2/firmware/include/usrp2_mimo_config.h | 46 + usrp2/firmware/include/usrp2_types.h | 112 + usrp2/firmware/install-sh | 519 + usrp2/firmware/lib/Makefile.am | 99 + usrp2/firmware/lib/Makefile.in | 607 + usrp2/firmware/lib/_exit.c | 27 + usrp2/firmware/lib/abort.c | 32 + usrp2/firmware/lib/ad9510.c | 42 + usrp2/firmware/lib/ad9510.h | 30 + usrp2/firmware/lib/ad9777.c | 47 + usrp2/firmware/lib/ad9777.h | 31 + usrp2/firmware/lib/ad9777_regs.h | 71 + usrp2/firmware/lib/bool.h | 26 + usrp2/firmware/lib/bsm12.c | 319 + usrp2/firmware/lib/bsm12.h | 83 + usrp2/firmware/lib/buffer_pool.c | 72 + usrp2/firmware/lib/buffer_pool.h | 75 + usrp2/firmware/lib/clocks.c | 243 + usrp2/firmware/lib/clocks.h | 93 + usrp2/firmware/lib/db.h | 104 + usrp2/firmware/lib/db_base.h | 69 + usrp2/firmware/lib/db_basic.c | 161 + usrp2/firmware/lib/db_dbsrx.c | 395 + usrp2/firmware/lib/db_init.c | 426 + usrp2/firmware/lib/db_rfx.c | 590 + usrp2/firmware/lib/db_tvrx.c | 242 + usrp2/firmware/lib/db_xcvr2450.c | 496 + usrp2/firmware/lib/dbsm.c | 296 + usrp2/firmware/lib/dbsm.h | 90 + usrp2/firmware/lib/eeprom.c | 69 + usrp2/firmware/lib/eth_mac.c | 136 + usrp2/firmware/lib/eth_mac.h | 32 + usrp2/firmware/lib/eth_mac_regs.h | 98 + usrp2/firmware/lib/eth_phy.h | 219 + usrp2/firmware/lib/ethernet.c | 340 + usrp2/firmware/lib/ethernet.h | 82 + usrp2/firmware/lib/exit.c | 28 + usrp2/firmware/lib/hal_io.c | 323 + usrp2/firmware/lib/hal_io.h | 169 + usrp2/firmware/lib/hal_uart.c | 77 + usrp2/firmware/lib/hal_uart.h | 68 + usrp2/firmware/lib/i2c.c | 127 + usrp2/firmware/lib/i2c.h | 39 + usrp2/firmware/lib/lsadc.c | 73 + usrp2/firmware/lib/lsadc.h | 45 + usrp2/firmware/lib/lsdac.c | 68 + usrp2/firmware/lib/lsdac.h | 47 + usrp2/firmware/lib/mdelay.c | 73 + usrp2/firmware/lib/mdelay.h | 29 + usrp2/firmware/lib/memcpy_wa.c | 42 + usrp2/firmware/lib/memcpy_wa.h | 32 + usrp2/firmware/lib/memory_map.h | 719 + usrp2/firmware/lib/memset_wa.c | 45 + usrp2/firmware/lib/memset_wa.h | 27 + usrp2/firmware/lib/microblaze.ld | 163 + usrp2/firmware/lib/nonstdio.c | 80 + usrp2/firmware/lib/nonstdio.h | 46 + usrp2/firmware/lib/pic.c | 94 + usrp2/firmware/lib/pic.h | 35 + usrp2/firmware/lib/print_buffer.c | 36 + usrp2/firmware/lib/print_fxpt.c | 83 + usrp2/firmware/lib/print_mac_addr.c | 30 + usrp2/firmware/lib/print_rmon_regs.c | 44 + usrp2/firmware/lib/print_rmon_regs.h | 24 + usrp2/firmware/lib/printf.c | 134 + usrp2/firmware/lib/sd.c | 197 + usrp2/firmware/lib/sd.h | 122 + usrp2/firmware/lib/spi.c | 61 + usrp2/firmware/lib/spi.h | 52 + usrp2/firmware/lib/stdint.h | 34 + usrp2/firmware/lib/stdio.h | 38 + usrp2/firmware/lib/u2_init.c | 130 + usrp2/firmware/lib/u2_init.h | 29 + usrp2/firmware/lib/usrp2_bytesex.h | 66 + usrp2/firmware/lib/wb16550.h | 98 + usrp2/firmware/missing | 367 + usrp2/host/Makefile.am | 29 + usrp2/host/Makefile.in | 1067 + usrp2/host/apps/Makefile.am | 48 + usrp2/host/apps/Makefile.in | 1091 + usrp2/host/apps/find_usrps.cc | 71 + usrp2/host/apps/gen_const.cc | 27 + usrp2/host/apps/gpio.cc | 47 + usrp2/host/apps/rx_streaming_samples.cc | 373 + usrp2/host/apps/test_mimo_tx.cc | 311 + usrp2/host/apps/tx_samples.cc | 265 + usrp2/host/apps/usrp2_burn_mac_addr.cc | 176 + usrp2/host/include/Makefile.am | 23 + usrp2/host/include/Makefile.in | 1029 + usrp2/host/include/usrp2/Makefile.am | 35 + usrp2/host/include/usrp2/Makefile.in | 958 + usrp2/host/include/usrp2/copiers.h | 63 + usrp2/host/include/usrp2/copy_handler.h | 51 + usrp2/host/include/usrp2/data_handler.h | 55 + usrp2/host/include/usrp2/metadata.h | 62 + usrp2/host/include/usrp2/mimo_config.h | 50 + usrp2/host/include/usrp2/rx_nop_handler.h | 130 + usrp2/host/include/usrp2/rx_sample_handler.h | 59 + usrp2/host/include/usrp2/strtod_si.h | 39 + usrp2/host/include/usrp2/tune_result.h | 49 + usrp2/host/include/usrp2/usrp2.h | 600 + usrp2/host/include/usrp2/usrp2_cdefs.h | 34 + usrp2/host/lib/Makefile.am | 67 + usrp2/host/lib/Makefile.in | 1148 + usrp2/host/lib/control.cc | 57 + usrp2/host/lib/control.h | 168 + usrp2/host/lib/copiers.cc | 133 + usrp2/host/lib/copy_handler.cc | 60 + usrp2/host/lib/data_handler.cc | 32 + usrp2/host/lib/eth_buffer.cc | 275 + usrp2/host/lib/eth_buffer.h | 198 + usrp2/host/lib/eth_common.h | 38 + usrp2/host/lib/ethernet.cc | 230 + usrp2/host/lib/ethernet.h | 124 + usrp2/host/lib/find.cc | 182 + usrp2/host/lib/open_usrp2_socket.cc | 130 + usrp2/host/lib/open_usrp2_socket.h | 34 + usrp2/host/lib/pktfilter.cc | 187 + usrp2/host/lib/pktfilter.h | 64 + usrp2/host/lib/ring.cc | 78 + usrp2/host/lib/ring.h | 83 + usrp2/host/lib/rx_nop_handler.cc | 35 + usrp2/host/lib/rx_sample_handler.cc | 27 + usrp2/host/lib/strtod_si.c | 53 + usrp2/host/lib/usrp2.cc | 482 + usrp2/host/lib/usrp2_bytesex.h | 19 + usrp2/host/lib/usrp2_impl.cc | 1453 + usrp2/host/lib/usrp2_impl.h | 198 + usrp2/host/lib/usrp2_socket_opener.cc | 143 + usrp2/host/lib/usrp2_thread.cc | 64 + usrp2/host/lib/usrp2_thread.h | 47 + usrp2/host/usrp2.pc.in | 11 + 3474 files changed, 472337 insertions(+), 111496 deletions(-) create mode 100644 Makefile.common.spu create mode 100644 Makefile.gen.gen create mode 100644 Makefile.par.gen create mode 100644 Makefile.swig create mode 100644 Makefile.swig.gen.t create mode 100644 config/acx_cblas.m4 create mode 100644 config/ax_boost_base.m4 create mode 100644 config/ax_boost_date_time.m4 create mode 100644 config/ax_boost_filesystem.m4 create mode 100644 config/ax_boost_iostreams.m4 create mode 100644 config/ax_boost_program_options.m4 create mode 100644 config/ax_boost_python.m4 create mode 100644 config/ax_boost_regex.m4 create mode 100644 config/ax_boost_serialization.m4 create mode 100644 config/ax_boost_signals.m4 create mode 100644 config/ax_boost_system.m4 create mode 100644 config/ax_boost_test_exec_monitor.m4 create mode 100644 config/ax_boost_thread.m4 create mode 100644 config/ax_boost_unit_test_framework.m4 create mode 100644 config/ax_boost_wserialization.m4 delete mode 100644 config/gr_boost.m4 create mode 100644 config/gr_check_memalign.m4 create mode 100644 config/gr_gcell.m4 create mode 100644 config/gr_lib64.m4 create mode 100644 config/gr_qwt.m4 create mode 100644 config/gr_qwtplot3d.m4 create mode 100644 config/gr_standalone.m4 create mode 100644 config/gr_subversion.m4 delete mode 100644 config/gr_x86_64.m4 create mode 100644 config/grc_docs.m4 create mode 100644 config/grc_gcell.m4 create mode 100644 config/grc_gr_atsc.m4 create mode 100644 config/grc_gr_comedi.m4 create mode 100644 config/grc_gr_cvsd_vocoder.m4 create mode 100644 config/grc_gr_gcell.m4 create mode 100644 config/grc_gr_gpio.m4 create mode 100644 config/grc_gr_msdd6000.m4 create mode 100644 config/grc_gr_pager.m4 create mode 100644 config/grc_gr_qtgui.m4 create mode 100644 config/grc_gr_radar_mono.m4 create mode 100644 config/grc_gr_sounder.m4 create mode 100644 config/grc_gr_usrp2.m4 create mode 100644 config/grc_gr_utils.m4 create mode 100644 config/grc_grc.m4 create mode 100644 config/grc_gruel.m4 create mode 100644 config/grc_mblock.m4 create mode 100644 config/grc_omnithread.m4 create mode 100644 config/grc_pmt.m4 create mode 100644 config/grc_usrp2.m4 create mode 100644 config/libtool.m4 create mode 100644 config/ltoptions.m4 create mode 100644 config/ltsugar.m4 create mode 100644 config/ltversion.m4 create mode 100644 config/lt~obsolete.m4 create mode 100755 configure-cell-cross create mode 100644 docs/ChangeLog create mode 100644 docs/Makefile.am create mode 100644 docs/Makefile.in create mode 100644 docs/doxygen/Doxyfile.in create mode 100644 docs/doxygen/Makefile.am create mode 100644 docs/doxygen/Makefile.in create mode 100644 docs/doxygen/other/Makefile.am create mode 100644 docs/doxygen/other/Makefile.in create mode 100755 docs/doxygen/other/doxypy.py create mode 100644 docs/doxygen/other/group_defs.dox rename {gnuradio-core/doc => docs/doxygen}/other/omnithread.html (100%) rename {gnuradio-core/doc => docs/doxygen}/other/omnithread.pdf (100%) rename {gnuradio-core/doc => docs/doxygen}/other/omnithread.ps (100%) rename {gnuradio-core/doc => docs/doxygen}/other/shared_ptr_docstub.h (100%) rename {gnuradio-core/doc => docs/doxygen}/other/tv-channel-frequencies (100%) rename {gnuradio-core/doc => docs/doxygen}/other/vector_docstub.h (100%) rename {gnuradio-core/doc/xml => docs/doxygen/xml-swig}/Makefile.am (100%) create mode 100644 docs/doxygen/xml-swig/Makefile.in rename {gnuradio-core/doc/xml => docs/doxygen/xml-swig}/README (100%) rename {gnuradio-core/doc/xml => docs/doxygen/xml-swig}/doxy2swig.py (100%) rename {gnuradio-core/doc/xml => docs/doxygen/xml-swig}/swig.xsl (100%) create mode 100644 gcell/Makefile.am create mode 100644 gcell/Makefile.in create mode 100644 gcell/apps/Makefile.am create mode 100644 gcell/apps/Makefile.in create mode 100644 gcell/apps/benchmark_dma.cc create mode 100644 gcell/apps/benchmark_nop.cc create mode 100644 gcell/apps/benchmark_roundtrip.cc create mode 100644 gcell/apps/spu/Makefile.am create mode 100644 gcell/apps/spu/Makefile.in create mode 100644 gcell/apps/spu/benchmark_procs.c create mode 100644 gcell/apps/test_all.cc create mode 100644 gcell/gcell.pc.in create mode 100644 gcell/gcell_spu.pc.in create mode 100644 gcell/ibm/Makefile.am create mode 100644 gcell/ibm/Makefile.in create mode 100644 gcell/ibm/README create mode 100644 gcell/ibm/sync/ppu_source/atomic.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_add.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_add_return.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_dec.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_dec_and_test.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_dec_if_positive.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_dec_return.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_inc.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_inc_return.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_read.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_set.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_sub.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_sub_and_test.h create mode 100644 gcell/ibm/sync/ppu_source/atomic_sub_return.h create mode 100644 gcell/ibm/sync/ppu_source/complete.h create mode 100644 gcell/ibm/sync/ppu_source/complete_all.h create mode 100644 gcell/ibm/sync/ppu_source/completion.h create mode 100644 gcell/ibm/sync/ppu_source/cond.h create mode 100644 gcell/ibm/sync/ppu_source/cond_broadcast.h create mode 100644 gcell/ibm/sync/ppu_source/cond_init.h create mode 100644 gcell/ibm/sync/ppu_source/cond_signal.h create mode 100644 gcell/ibm/sync/ppu_source/cond_wait.h create mode 100644 gcell/ibm/sync/ppu_source/init_completion.h create mode 100644 gcell/ibm/sync/ppu_source/libsync.h create mode 100644 gcell/ibm/sync/ppu_source/mutex.h create mode 100644 gcell/ibm/sync/ppu_source/mutex_init.h create mode 100644 gcell/ibm/sync/ppu_source/mutex_lock.h create mode 100644 gcell/ibm/sync/ppu_source/mutex_trylock.h create mode 100644 gcell/ibm/sync/ppu_source/mutex_unlock.h create mode 100644 gcell/ibm/sync/ppu_source/pdt_libsync.xml create mode 100644 gcell/ibm/sync/ppu_source/pdt_libsync_config.xml create mode 100644 gcell/ibm/sync/ppu_source/sync_utils.h create mode 100644 gcell/ibm/sync/ppu_source/trace_libsync.h create mode 100644 gcell/ibm/sync/ppu_source/wait_for_completion.h create mode 100644 gcell/ibm/sync/spu_source/atomic.h create mode 100644 gcell/ibm/sync/spu_source/atomic_add.h create mode 100644 gcell/ibm/sync/spu_source/atomic_add_return.h create mode 100644 gcell/ibm/sync/spu_source/atomic_dec.h create mode 100644 gcell/ibm/sync/spu_source/atomic_dec_and_test.h create mode 100644 gcell/ibm/sync/spu_source/atomic_dec_if_positive.h create mode 100644 gcell/ibm/sync/spu_source/atomic_dec_return.h create mode 100644 gcell/ibm/sync/spu_source/atomic_inc.h create mode 100644 gcell/ibm/sync/spu_source/atomic_inc_return.h create mode 100644 gcell/ibm/sync/spu_source/atomic_read.h create mode 100644 gcell/ibm/sync/spu_source/atomic_set.h create mode 100644 gcell/ibm/sync/spu_source/atomic_sub.h create mode 100644 gcell/ibm/sync/spu_source/atomic_sub_and_test.h create mode 100644 gcell/ibm/sync/spu_source/atomic_sub_return.h create mode 100644 gcell/ibm/sync/spu_source/complete.h create mode 100644 gcell/ibm/sync/spu_source/complete_all.h create mode 100644 gcell/ibm/sync/spu_source/completion.h create mode 100644 gcell/ibm/sync/spu_source/cond.h create mode 100644 gcell/ibm/sync/spu_source/cond_broadcast.h create mode 100644 gcell/ibm/sync/spu_source/cond_init.h create mode 100644 gcell/ibm/sync/spu_source/cond_signal.h create mode 100644 gcell/ibm/sync/spu_source/cond_wait.h create mode 100644 gcell/ibm/sync/spu_source/init_completion.h create mode 100644 gcell/ibm/sync/spu_source/libsync.h create mode 100644 gcell/ibm/sync/spu_source/mutex.h create mode 100644 gcell/ibm/sync/spu_source/mutex_init.h create mode 100644 gcell/ibm/sync/spu_source/mutex_lock.h create mode 100644 gcell/ibm/sync/spu_source/mutex_trylock.h create mode 100644 gcell/ibm/sync/spu_source/mutex_unlock.h create mode 100644 gcell/ibm/sync/spu_source/read_lock.h create mode 100644 gcell/ibm/sync/spu_source/read_trylock.h create mode 100644 gcell/ibm/sync/spu_source/read_unlock.h create mode 100644 gcell/ibm/sync/spu_source/rwlock_init.h create mode 100644 gcell/ibm/sync/spu_source/sync_irq.h create mode 100644 gcell/ibm/sync/spu_source/sync_utils.h create mode 100644 gcell/ibm/sync/spu_source/trace_libsync.h create mode 100644 gcell/ibm/sync/spu_source/wait_for_completion.h create mode 100644 gcell/ibm/sync/spu_source/write_lock.h create mode 100644 gcell/ibm/sync/spu_source/write_trylock.h create mode 100644 gcell/ibm/sync/spu_source/write_unlock.h create mode 100644 gcell/include/Makefile.am create mode 100644 gcell/include/Makefile.in create mode 100644 gcell/include/gcell/Makefile.am create mode 100644 gcell/include/gcell/Makefile.in create mode 100644 gcell/include/gcell/compiler.h create mode 100644 gcell/include/gcell/gc_aligned_alloc.h create mode 100644 gcell/include/gcell/gc_atomic.h create mode 100644 gcell/include/gcell/gc_cdefs.h create mode 100644 gcell/include/gcell/gc_declare_proc.h create mode 100644 gcell/include/gcell/gc_jd_queue.h create mode 100644 gcell/include/gcell/gc_jd_queue_data.h create mode 100644 gcell/include/gcell/gc_jd_stack.h create mode 100644 gcell/include/gcell/gc_job_desc.h create mode 100644 gcell/include/gcell/gc_job_desc_private.h create mode 100644 gcell/include/gcell/gc_job_manager.h create mode 100644 gcell/include/gcell/gc_logging.h create mode 100644 gcell/include/gcell/gc_mbox.h create mode 100644 gcell/include/gcell/gc_spu_args.h create mode 100644 gcell/include/gcell/gc_types.h create mode 100644 gcell/include/gcell/gcp_fft_1d_r2.h create mode 100644 gcell/include/gcell/memory_barrier.h create mode 100644 gcell/include/gcell/spu/Makefile.am create mode 100644 gcell/include/gcell/spu/Makefile.in create mode 100644 gcell/include/gcell/spu/fft_1d.h create mode 100644 gcell/include/gcell/spu/fft_1d_r2.h create mode 100644 gcell/include/gcell/spu/gc_delay.h create mode 100644 gcell/include/gcell/spu/gc_jd_queue.h create mode 100644 gcell/include/gcell/spu/gc_random.h create mode 100644 gcell/include/gcell/spu/gc_spu_macs.h create mode 100644 gcell/include/gcell/spu/libfft.h create mode 100644 gcell/lib/Makefile.am create mode 100644 gcell/lib/Makefile.in create mode 100644 gcell/lib/general/Makefile.am create mode 100644 gcell/lib/general/Makefile.in create mode 100644 gcell/lib/general/spu/fft_1d_r2.c create mode 100644 gcell/lib/general/spu/memset.S create mode 100644 gcell/lib/general/spu/qa_memset.c create mode 100644 gcell/lib/runtime/Makefile.am create mode 100644 gcell/lib/runtime/Makefile.in create mode 100644 gcell/lib/runtime/gc_aligned_alloc.cc create mode 100644 gcell/lib/runtime/gc_client_thread_info.h create mode 100644 gcell/lib/runtime/gc_jd_queue.c create mode 100644 gcell/lib/runtime/gc_jd_stack.c create mode 100644 gcell/lib/runtime/gc_job_manager.cc create mode 100644 gcell/lib/runtime/gc_job_manager_impl.cc create mode 100644 gcell/lib/runtime/gc_job_manager_impl.h create mode 100644 gcell/lib/runtime/gc_proc_def_utils.cc create mode 100644 gcell/lib/runtime/gc_proc_def_utils.h create mode 100755 gcell/lib/runtime/gcell-embedspu-libtool create mode 100644 gcell/lib/runtime/qa_gcell_runtime.cc create mode 100644 gcell/lib/runtime/qa_gcell_runtime.h create mode 100644 gcell/lib/runtime/qa_jd_queue.cc create mode 100644 gcell/lib/runtime/qa_jd_queue.h create mode 100644 gcell/lib/runtime/qa_jd_stack.cc create mode 100644 gcell/lib/runtime/qa_jd_stack.h create mode 100644 gcell/lib/runtime/qa_job_manager.cc create mode 100644 gcell/lib/runtime/qa_job_manager.h create mode 100644 gcell/lib/runtime/spu/gc_delay.c create mode 100644 gcell/lib/runtime/spu/gc_logging.c create mode 100644 gcell/lib/runtime/spu/gc_main.c create mode 100644 gcell/lib/runtime/spu/gc_random.c create mode 100644 gcell/lib/runtime/spu/gc_spu_config.h create mode 100644 gcell/lib/runtime/spu/gc_spu_jd_queue.c create mode 100644 gcell/lib/runtime/spu/gcell_runtime_qa.c create mode 100644 gcell/lib/runtime/spu/spu_buffers.c create mode 100644 gcell/lib/runtime/spu/spu_buffers.h create mode 100644 gcell/lib/spu/Makefile.am create mode 100644 gcell/lib/spu/Makefile.in create mode 100644 gcell/lib/wrapper/Makefile.am create mode 100644 gcell/lib/wrapper/Makefile.in create mode 100644 gcell/lib/wrapper/gcp_fft_1d_r2.cc create mode 100644 gcell/lib/wrapper/qa_gcell_general.cc create mode 100644 gcell/lib/wrapper/qa_gcell_general.h create mode 100644 gcell/lib/wrapper/qa_gcell_wrapper.cc create mode 100644 gcell/lib/wrapper/qa_gcell_wrapper.h create mode 100644 gcell/lib/wrapper/qa_gcp_fft_1d_r2.h create mode 100644 gcell/lib/wrapper/spu/gcs_fft_1d_r2.c delete mode 100644 gnuradio-core/ChangeLog delete mode 100644 gnuradio-core/THANKS delete mode 100644 gnuradio-core/doc/Doxyfile.in delete mode 100644 gnuradio-core/doc/Makefile.am delete mode 100644 gnuradio-core/doc/Makefile.in delete mode 100644 gnuradio-core/doc/other/Makefile.am delete mode 100644 gnuradio-core/doc/other/Makefile.in delete mode 100644 gnuradio-core/doc/other/group_defs.dox delete mode 100644 gnuradio-core/doc/xml/Makefile.in create mode 100644 gnuradio-core/src/lib/filter/dotprod_fff_altivec.c create mode 100644 gnuradio-core/src/lib/filter/dotprod_fff_altivec.h create mode 100644 gnuradio-core/src/lib/filter/gr_altivec.c create mode 100644 gnuradio-core/src/lib/filter/gr_altivec.h delete mode 100644 gnuradio-core/src/lib/filter/gr_cpu.cc create mode 100644 gnuradio-core/src/lib/filter/gr_cpu_powerpc.cc create mode 100644 gnuradio-core/src/lib/filter/gr_cpu_x86.cc create mode 100644 gnuradio-core/src/lib/filter/gr_fir_fff_altivec.cc create mode 100644 gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h create mode 100644 gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.cc create mode 100644 gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h delete mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator.cc delete mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator.h create mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.cc create mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h create mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.i create mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.cc create mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h create mode 100644 gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.i delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_avg.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.cc delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.i delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_rec.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.cc delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.i delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_avg.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.cc delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.i delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_rec.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.cc delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.h delete mode 100644 gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.i create mode 100644 gnuradio-core/src/lib/filter/gr_vec_types.h create mode 100644 gnuradio-core/src/lib/filter/qa_dotprod_powerpc.cc create mode 100644 gnuradio-core/src/lib/filter/qa_gr_rotator.cc create mode 100644 gnuradio-core/src/lib/filter/qa_gr_rotator.h create mode 100644 gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.cc create mode 100644 gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.h create mode 100644 gnuradio-core/src/lib/filter/stamp-sources-generate create mode 100644 gnuradio-core/src/lib/filter/sysconfig_powerpc.cc delete mode 100644 gnuradio-core/src/lib/general/Makefile.gen delete mode 100644 gnuradio-core/src/lib/general/general_generated.i delete mode 100755 gnuradio-core/src/lib/general/generate_all.py delete mode 100755 gnuradio-core/src/lib/general/generate_common.py delete mode 100644 gnuradio-core/src/lib/general/gr_add_XX.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_add_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_add_XX.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_add_cc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_cc.i delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_sf.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_ss.h delete mode 100755 gnuradio-core/src/lib/general/gr_add_const_vXX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_vcc.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_vff.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_vii.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_const_vss.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_ff.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_ff.i delete mode 100644 gnuradio-core/src/lib/general/gr_add_ii.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_ii.i delete mode 100644 gnuradio-core/src/lib/general/gr_add_ss.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_ss.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_ss.i delete mode 100755 gnuradio-core/src/lib/general/gr_add_vXX.cc.t delete mode 100755 gnuradio-core/src/lib/general/gr_add_vXX.h.t delete mode 100755 gnuradio-core/src/lib/general/gr_add_vXX.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_add_vcc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_vcc.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_vcc.i delete mode 100644 gnuradio-core/src/lib/general/gr_add_vff.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_vff.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_vff.i delete mode 100644 gnuradio-core/src/lib/general/gr_add_vii.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_vii.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_vii.i delete mode 100644 gnuradio-core/src/lib/general/gr_add_vss.cc delete mode 100644 gnuradio-core/src/lib/general/gr_add_vss.h delete mode 100644 gnuradio-core/src/lib/general/gr_add_vss.i create mode 100644 gnuradio-core/src/lib/general/gr_bin_statistics_f.cc create mode 100644 gnuradio-core/src/lib/general/gr_bin_statistics_f.h create mode 100644 gnuradio-core/src/lib/general/gr_bin_statistics_f.i delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.h delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.cc delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.h delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.cc delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.h delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.cc delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.h delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.h delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.cc delete mode 100644 gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.h create mode 100644 gnuradio-core/src/lib/general/gr_cpfsk_bc.cc create mode 100644 gnuradio-core/src/lib/general/gr_cpfsk_bc.h create mode 100644 gnuradio-core/src/lib/general/gr_cpfsk_bc.i create mode 100644 gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.cc create mode 100644 gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h create mode 100644 gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.i create mode 100644 gnuradio-core/src/lib/general/gr_delay.cc create mode 100644 gnuradio-core/src/lib/general/gr_delay.h create mode 100644 gnuradio-core/src/lib/general/gr_delay.i create mode 100644 gnuradio-core/src/lib/general/gr_descrambler_bb.cc create mode 100644 gnuradio-core/src/lib/general/gr_descrambler_bb.h create mode 100644 gnuradio-core/src/lib/general/gr_descrambler_bb.i delete mode 100644 gnuradio-core/src/lib/general/gr_divide_XX.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_divide_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_divide_XX.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_divide_cc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_divide_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_divide_cc.i delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ff.cc delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ff.i delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ii.cc delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ii.i delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ss.cc delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ss.h delete mode 100644 gnuradio-core/src/lib/general/gr_divide_ss.i create mode 100644 gnuradio-core/src/lib/general/gr_dpll_bb.cc create mode 100644 gnuradio-core/src/lib/general/gr_dpll_bb.h create mode 100644 gnuradio-core/src/lib/general/gr_dpll_bb.i create mode 100644 gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.cc create mode 100644 gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h create mode 100644 gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.i create mode 100644 gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc create mode 100644 gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h create mode 100644 gnuradio-core/src/lib/general/gr_fmdet_cf.cc create mode 100644 gnuradio-core/src/lib/general/gr_fmdet_cf.h create mode 100644 gnuradio-core/src/lib/general/gr_fmdet_cf.i create mode 100644 gnuradio-core/src/lib/general/gr_glfsr_source_b.cc create mode 100644 gnuradio-core/src/lib/general/gr_glfsr_source_b.h create mode 100644 gnuradio-core/src/lib/general/gr_glfsr_source_b.i create mode 100644 gnuradio-core/src/lib/general/gr_glfsr_source_f.cc create mode 100644 gnuradio-core/src/lib/general/gr_glfsr_source_f.h create mode 100644 gnuradio-core/src/lib/general/gr_glfsr_source_f.i create mode 100644 gnuradio-core/src/lib/general/gr_iqcomp_cc.cc create mode 100644 gnuradio-core/src/lib/general/gr_iqcomp_cc.h create mode 100644 gnuradio-core/src/lib/general/gr_iqcomp_cc.i create mode 100644 gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc create mode 100644 gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h create mode 100644 gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_XX.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_XX.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_cc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_cc.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_ss.h delete mode 100755 gnuradio-core/src/lib/general/gr_multiply_const_vXX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_vcc.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_vff.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_vii.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_const_vss.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ff.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ff.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ii.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ii.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ss.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ss.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_ss.i delete mode 100755 gnuradio-core/src/lib/general/gr_multiply_vXX.cc.t delete mode 100755 gnuradio-core/src/lib/general/gr_multiply_vXX.h.t delete mode 100755 gnuradio-core/src/lib/general/gr_multiply_vXX.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vcc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vcc.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vcc.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vff.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vff.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vff.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vii.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vii.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vii.i delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vss.cc delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vss.h delete mode 100644 gnuradio-core/src/lib/general/gr_multiply_vss.i delete mode 100644 gnuradio-core/src/lib/general/gr_mute_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_mute_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_mute_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_mute_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_mute_ss.h delete mode 100644 gnuradio-core/src/lib/general/gr_noise_source_X.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_noise_source_c.h delete mode 100644 gnuradio-core/src/lib/general/gr_noise_source_f.h delete mode 100644 gnuradio-core/src/lib/general/gr_noise_source_i.h delete mode 100644 gnuradio-core/src/lib/general/gr_noise_source_s.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.i create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.i create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.i create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.i create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.i create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_sampler.cc create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_sampler.h create mode 100644 gnuradio-core/src/lib/general/gr_ofdm_sampler.i delete mode 100644 gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.h delete mode 100644 gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.h create mode 100644 gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc create mode 100644 gnuradio-core/src/lib/general/gr_peak_detector2_fb.h create mode 100644 gnuradio-core/src/lib/general/gr_peak_detector2_fb.i create mode 100644 gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc create mode 100644 gnuradio-core/src/lib/general/gr_pn_correlator_cc.h create mode 100644 gnuradio-core/src/lib/general/gr_pn_correlator_cc.i create mode 100644 gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.cc create mode 100644 gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h create mode 100644 gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.i create mode 100644 gnuradio-core/src/lib/general/gr_probe_density_b.cc create mode 100644 gnuradio-core/src/lib/general/gr_probe_density_b.h create mode 100644 gnuradio-core/src/lib/general/gr_probe_density_b.i create mode 100644 gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc create mode 100644 gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h create mode 100644 gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i create mode 100644 gnuradio-core/src/lib/general/gr_rail_ff.cc create mode 100644 gnuradio-core/src/lib/general/gr_rail_ff.h create mode 100644 gnuradio-core/src/lib/general/gr_rail_ff.i create mode 100644 gnuradio-core/src/lib/general/gr_regenerate_bb.cc create mode 100644 gnuradio-core/src/lib/general/gr_regenerate_bb.h create mode 100644 gnuradio-core/src/lib/general/gr_regenerate_bb.i create mode 100644 gnuradio-core/src/lib/general/gr_repeat.cc create mode 100644 gnuradio-core/src/lib/general/gr_repeat.h create mode 100644 gnuradio-core/src/lib/general/gr_repeat.i create mode 100644 gnuradio-core/src/lib/general/gr_scrambler_bb.cc create mode 100644 gnuradio-core/src/lib/general/gr_scrambler_bb.h create mode 100644 gnuradio-core/src/lib/general/gr_scrambler_bb.i delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_X.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_X.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_c.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_c.h delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_f.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_f.h delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_i.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_i.h delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_s.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_s.h delete mode 100644 gnuradio-core/src/lib/general/gr_sig_source_waveform.h create mode 100644 gnuradio-core/src/lib/general/gr_squash_ff.cc create mode 100644 gnuradio-core/src/lib/general/gr_squash_ff.h create mode 100644 gnuradio-core/src/lib/general/gr_squash_ff.i create mode 100644 gnuradio-core/src/lib/general/gr_stream_mux.cc create mode 100644 gnuradio-core/src/lib/general/gr_stream_mux.h create mode 100644 gnuradio-core/src/lib/general/gr_stream_mux.i create mode 100644 gnuradio-core/src/lib/general/gr_stretch_ff.cc create mode 100644 gnuradio-core/src/lib/general/gr_stretch_ff.h create mode 100644 gnuradio-core/src/lib/general/gr_stretch_ff.i delete mode 100644 gnuradio-core/src/lib/general/gr_sub_XX.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_sub_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_sub_XX.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_sub_cc.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sub_cc.h delete mode 100644 gnuradio-core/src/lib/general/gr_sub_cc.i delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ff.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ff.h delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ff.i delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ii.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ii.i delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ss.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ss.h delete mode 100644 gnuradio-core/src/lib/general/gr_sub_ss.i delete mode 100644 gnuradio-core/src/lib/general/gr_sync_block.h delete mode 100644 gnuradio-core/src/lib/general/gr_sync_decimator.h delete mode 100644 gnuradio-core/src/lib/general/gr_sync_interpolator.cc delete mode 100644 gnuradio-core/src/lib/general/gr_sync_interpolator.h delete mode 100644 gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.h delete mode 100644 gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.h delete mode 100644 gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_X.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_X.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_X.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_b.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_b.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_b.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_c.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_c.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_c.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_f.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_f.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_f.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_i.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_i.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_i.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_s.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_s.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_sink_s.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_X.cc.t delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_X.h.t delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_X.i.t delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_b.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_b.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_b.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_c.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_c.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_c.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_f.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_f.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_f.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_i.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_i.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_i.i delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_s.cc delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_s.h delete mode 100644 gnuradio-core/src/lib/general/gr_vector_source_s.i create mode 100644 gnuradio-core/src/lib/general/gr_wavelet_ff.cc create mode 100644 gnuradio-core/src/lib/general/gr_wavelet_ff.h create mode 100644 gnuradio-core/src/lib/general/gr_wavelet_ff.i create mode 100644 gnuradio-core/src/lib/general/gr_wvps_ff.cc create mode 100644 gnuradio-core/src/lib/general/gr_wvps_ff.h create mode 100644 gnuradio-core/src/lib/general/gr_wvps_ff.i create mode 100644 gnuradio-core/src/lib/general/gri_glfsr.cc create mode 100644 gnuradio-core/src/lib/general/gri_glfsr.h create mode 100644 gnuradio-core/src/lib/general/gri_lfsr.h create mode 100644 gnuradio-core/src/lib/general/qa_gr_math.cc create mode 100644 gnuradio-core/src/lib/general/qa_gr_math.h create mode 100644 gnuradio-core/src/lib/general/qa_gri_lfsr.cc create mode 100644 gnuradio-core/src/lib/general/qa_gri_lfsr.h create mode 100644 gnuradio-core/src/lib/gengen/Makefile.am create mode 100644 gnuradio-core/src/lib/gengen/Makefile.gen create mode 100644 gnuradio-core/src/lib/gengen/Makefile.in create mode 100755 gnuradio-core/src/lib/gengen/generate_all.py create mode 100755 gnuradio-core/src/lib/gengen/generate_common.py create mode 100644 gnuradio-core/src/lib/gengen/gengen.i create mode 100644 gnuradio-core/src/lib/gengen/gengen_generated.i create mode 100644 gnuradio-core/src/lib/gengen/gr_add_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_add_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_add_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_add_cc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_add_cc.h create mode 100644 gnuradio-core/src/lib/gengen/gr_add_cc.i rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_XX.cc.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_XX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_cc.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_cc.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_cc.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_ff.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_ff.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_ff.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_ii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_ii.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_ii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_sf.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_sf.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_sf.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_ss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_ss.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_ss.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vXX.cc.t (100%) create mode 100755 gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vXX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vcc.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_vcc.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vcc.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vff.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_vff.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vff.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_vii.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_const_vss.h rename gnuradio-core/src/lib/{general => gengen}/gr_add_const_vss.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_add_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_and_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_and_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_and_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_and_bb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_and_bb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_and_bb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_bb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_bb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_bb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_and_const_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_and_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_and_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_and_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_and_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_and_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_and_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_fs.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_fs.h create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_fs.i create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_is.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_is.h create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_is.i create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_argmax_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_XX.i.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.h rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_bc.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.h rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_bf.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.h rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_ic.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.h rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_if.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.h rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_sc.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.h rename gnuradio-core/src/lib/{general => gengen}/gr_chunks_to_symbols_sf.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_cc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_cc.h create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_cc.i create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_divide_ss.i rename gnuradio-core/src/lib/{general => gengen}/gr_endianness.h (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_endianness.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_cc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_cc.h create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_cc.i create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_integrate_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_max_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_max_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_max_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_max_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_cc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_cc.h create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_cc.i create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_moving_average_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_cc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_cc.h create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_cc.i rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_XX.cc.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_XX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_cc.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_cc.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_cc.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_ff.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_ff.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_ff.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_ii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_ii.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_ii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_ss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_ss.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_ss.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vXX.cc.t (100%) create mode 100755 gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vXX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vcc.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vcc.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vff.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_vff.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vff.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_vii.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_const_vss.h rename gnuradio-core/src/lib/{general => gengen}/gr_multiply_const_vss.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_multiply_ss.i rename gnuradio-core/src/lib/{general => gengen}/gr_mute_XX.cc.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_mute_XX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_mute_XX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_mute_cc.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_mute_cc.h rename gnuradio-core/src/lib/{general => gengen}/gr_mute_cc.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_mute_ff.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_mute_ff.h rename gnuradio-core/src/lib/{general => gengen}/gr_mute_ff.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_mute_ii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_mute_ii.h rename gnuradio-core/src/lib/{general => gengen}/gr_mute_ii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_mute_ss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_mute_ss.h rename gnuradio-core/src/lib/{general => gengen}/gr_mute_ss.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_X.cc.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_X.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_c.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_noise_source_c.h rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_c.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_f.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_noise_source_f.h rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_f.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_i.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_noise_source_i.h rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_i.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_s.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_noise_source_s.h rename gnuradio-core/src/lib/{general => gengen}/gr_noise_source_s.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_noise_type.h (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_not_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_not_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_not_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_not_bb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_not_bb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_not_bb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_not_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_not_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_not_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_not_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_not_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_not_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_or_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_or_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_or_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_or_bb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_or_bb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_or_bb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_or_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_or_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_or_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_or_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_or_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_or_ss.i rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_XX.cc.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_XX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_bb.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.h rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_bb.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_ii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.h rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_ii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_ss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.h rename gnuradio-core/src/lib/{general => gengen}/gr_packed_to_unpacked_ss.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_fb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_fb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_fb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_ib.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_ib.h create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_ib.i create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_sb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_sb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_peak_detector_sb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_X.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_sig_source_X.i.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_c.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_c.h rename gnuradio-core/src/lib/{general => gengen}/gr_sig_source_c.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_f.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_f.h rename gnuradio-core/src/lib/{general => gengen}/gr_sig_source_f.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_i.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_i.h rename gnuradio-core/src/lib/{general => gengen}/gr_sig_source_i.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_s.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_s.h rename gnuradio-core/src/lib/{general => gengen}/gr_sig_source_s.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_sig_source_waveform.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_cc.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_cc.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_cc.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ff.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ff.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ff.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_sub_ss.i rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_XX.cc.t (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_XX.i.t (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_bb.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.h rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_bb.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_ii.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.h rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_ii.i (100%) rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_ss.cc (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.h rename gnuradio-core/src/lib/{general => gengen}/gr_unpacked_to_packed_ss.i (100%) create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_X.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_X.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_b.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_b.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_b.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_c.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_c.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_c.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_f.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_f.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_f.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_i.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_i.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_i.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_s.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_s.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_sink_s.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_X.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_X.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_b.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_b.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_b.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_c.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_c.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_c.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_f.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_f.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_f.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_i.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_i.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_i.i create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_s.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_s.h create mode 100644 gnuradio-core/src/lib/gengen/gr_vector_source_s.i create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_XX.cc.t create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_XX.h.t create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_XX.i.t create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_bb.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_bb.h create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_bb.i create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_ii.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_ii.h create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_ii.i create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_ss.cc create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_ss.h create mode 100644 gnuradio-core/src/lib/gengen/gr_xor_ss.i create mode 100644 gnuradio-core/src/lib/gengen/stamp-sources-generate create mode 100644 gnuradio-core/src/lib/hier/Makefile.am create mode 100644 gnuradio-core/src/lib/hier/Makefile.in create mode 100644 gnuradio-core/src/lib/hier/gr_channel_model.cc create mode 100644 gnuradio-core/src/lib/hier/gr_channel_model.h create mode 100644 gnuradio-core/src/lib/hier/gr_channel_model.i create mode 100644 gnuradio-core/src/lib/hier/hier.i create mode 100644 gnuradio-core/src/lib/io/gr_file_sink_base.cc create mode 100644 gnuradio-core/src/lib/io/gr_file_sink_base.h create mode 100644 gnuradio-core/src/lib/io/gr_file_sink_base.i create mode 100644 gnuradio-core/src/lib/io/gr_histo_sink.i create mode 100644 gnuradio-core/src/lib/io/gr_histo_sink_f.cc create mode 100644 gnuradio-core/src/lib/io/gr_histo_sink_f.h create mode 100644 gnuradio-core/src/lib/io/gr_udp_sink.cc create mode 100644 gnuradio-core/src/lib/io/gr_udp_sink.h create mode 100644 gnuradio-core/src/lib/io/gr_udp_sink.i create mode 100644 gnuradio-core/src/lib/io/gr_udp_source.cc create mode 100644 gnuradio-core/src/lib/io/gr_udp_source.h create mode 100644 gnuradio-core/src/lib/io/gr_udp_source.i create mode 100644 gnuradio-core/src/lib/io/gr_wavfile_sink.cc create mode 100644 gnuradio-core/src/lib/io/gr_wavfile_sink.h create mode 100644 gnuradio-core/src/lib/io/gr_wavfile_sink.i create mode 100644 gnuradio-core/src/lib/io/gr_wavfile_source.cc create mode 100644 gnuradio-core/src/lib/io/gr_wavfile_source.h create mode 100644 gnuradio-core/src/lib/io/gr_wavfile_source.i create mode 100644 gnuradio-core/src/lib/io/gri_wavfile.cc create mode 100644 gnuradio-core/src/lib/io/gri_wavfile.h create mode 100644 gnuradio-core/src/lib/missing/posix_memalign.cc create mode 100644 gnuradio-core/src/lib/missing/posix_memalign.h delete mode 100644 gnuradio-core/src/lib/omnithread/Makefile.am delete mode 100644 gnuradio-core/src/lib/omnithread/Makefile.in delete mode 100644 gnuradio-core/src/lib/omnithread/mach.cc delete mode 100644 gnuradio-core/src/lib/omnithread/nt.cc delete mode 100644 gnuradio-core/src/lib/omnithread/omnithread.h delete mode 100644 gnuradio-core/src/lib/omnithread/ot_pthread_nt.h delete mode 100644 gnuradio-core/src/lib/omnithread/posix.cc delete mode 100644 gnuradio-core/src/lib/omnithread/solaris.cc delete mode 100644 gnuradio-core/src/lib/omnithread/vxWorks.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_basic_block.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_basic_block.h create mode 100644 gnuradio-core/src/lib/runtime/gr_basic_block.i create mode 100644 gnuradio-core/src/lib/runtime/gr_block_executor.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_block_executor.h create mode 100644 gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h create mode 100644 gnuradio-core/src/lib/runtime/gr_flowgraph.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_flowgraph.h create mode 100644 gnuradio-core/src/lib/runtime/gr_hier_block2.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_hier_block2.h create mode 100644 gnuradio-core/src/lib/runtime/gr_hier_block2.i create mode 100644 gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h delete mode 100644 gnuradio-core/src/lib/runtime/gr_runtime.h create mode 100644 gnuradio-core/src/lib/runtime/gr_runtime_types.h create mode 100644 gnuradio-core/src/lib/runtime/gr_scheduler.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_scheduler.h create mode 100644 gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_scheduler_sts.h create mode 100644 gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h create mode 100644 gnuradio-core/src/lib/runtime/gr_sptr_magic.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_sptr_magic.h delete mode 100644 gnuradio-core/src/lib/runtime/gr_swig_block_magic.i rename gnuradio-core/src/lib/{general => runtime}/gr_sync_block.cc (100%) create mode 100644 gnuradio-core/src/lib/runtime/gr_sync_block.h rename gnuradio-core/src/lib/{general => runtime}/gr_sync_block.i (100%) rename gnuradio-core/src/lib/{general => runtime}/gr_sync_decimator.cc (100%) create mode 100644 gnuradio-core/src/lib/runtime/gr_sync_decimator.h rename gnuradio-core/src/lib/{general => runtime}/gr_sync_decimator.i (100%) create mode 100644 gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_sync_interpolator.h rename gnuradio-core/src/lib/{general => runtime}/gr_sync_interpolator.i (100%) create mode 100644 gnuradio-core/src/lib/runtime/gr_top_block.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_top_block.h create mode 100644 gnuradio-core/src/lib/runtime/gr_top_block.i create mode 100644 gnuradio-core/src/lib/runtime/gr_top_block_impl.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_top_block_impl.h create mode 100644 gnuradio-core/src/lib/runtime/gr_tpb_detail.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_tpb_detail.h create mode 100644 gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc create mode 100644 gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_flowgraph.cc create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_flowgraph.h create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_hier_block2.cc create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_hier_block2.h create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.cc create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.h create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_top_block.cc create mode 100644 gnuradio-core/src/lib/runtime/qa_gr_top_block.h create mode 100644 gnuradio-core/src/lib/swig/Makefile.swig.gen create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i create mode 100644 gnuradio-core/src/lib/swig/gnuradio_swig_python.py rename gnuradio-core/src/lib/swig/{shared_ptr.i => gr_shared_ptr.i} (100%) create mode 100644 gnuradio-core/src/lib/swig/gr_swig_block_magic.i create mode 100644 gnuradio-core/src/lib/viterbi/Makefile.am create mode 100644 gnuradio-core/src/lib/viterbi/Makefile.in create mode 100644 gnuradio-core/src/lib/viterbi/decode.cc create mode 100644 gnuradio-core/src/lib/viterbi/encode.cc create mode 100644 gnuradio-core/src/lib/viterbi/metrics.c create mode 100644 gnuradio-core/src/lib/viterbi/tab.c create mode 100644 gnuradio-core/src/lib/viterbi/viterbi.c create mode 100644 gnuradio-core/src/lib/viterbi/viterbi.h delete mode 100644 gnuradio-core/src/python/gnuradio/blks/Makefile.am delete mode 100644 gnuradio-core/src/python/gnuradio/blks/Makefile.in delete mode 100644 gnuradio-core/src/python/gnuradio/blks/__init__.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2/Makefile.am create mode 100644 gnuradio-core/src/python/gnuradio/blks2/Makefile.in create mode 100644 gnuradio-core/src/python/gnuradio/blks2/__init__.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/Makefile.in rename gnuradio-core/src/python/gnuradio/{blksimpl => blks2impl}/__init__.py (100%) create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/am_demod.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/channel_model.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/cpm.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/d8psk.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/dbpsk.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/dqpsk.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/filterbank.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/fm_demod.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/fm_emph.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/gmsk.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/logpwrfft.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/nbfm_rx.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/nbfm_tx.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_fixed.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pn.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/pkt.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/psk.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/qam.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/qam16.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/qam256.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/qam64.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/qam8.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/rational_resampler.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/standard_squelch.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/stream_to_vector_decimator.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv.py create mode 100755 gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_fmdet.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_pll.py create mode 100644 gnuradio-core/src/python/gnuradio/blks2impl/wfm_tx.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/Makefile.am delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/Makefile.in delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/am_demod.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/filterbank.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/fm_emph.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/nbfm_rx.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/nbfm_tx.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/pkt.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/psk.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/rational_resampler.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/standard_squelch.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv_pll.py delete mode 100644 gnuradio-core/src/python/gnuradio/blksimpl/wfm_tx.py delete mode 100644 gnuradio-core/src/python/gnuradio/gr/basic_flow_graph.py delete mode 100644 gnuradio-core/src/python/gnuradio/gr/flow_graph.py delete mode 100644 gnuradio-core/src/python/gnuradio/gr/hier_block.py create mode 100644 gnuradio-core/src/python/gnuradio/gr/hier_block2.py create mode 100644 gnuradio-core/src/python/gnuradio/gr/pubsub.py create mode 100644 gnuradio-core/src/python/gnuradio/gr/qa_argmax.py delete mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_basic_flow_graph.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_bin_statistics.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_classify.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_delay.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_ecc_ccsds_27.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_fft.py delete mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_flow_graph.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_fractional_interpolator.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_glfsr_source.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_max.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_ofdm_insert_preamble.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_pll_carriertracking.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_pll_freqdet.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_pll_refout.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_repeat.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_scrambler.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_skiphead.py create mode 100755 gnuradio-core/src/python/gnuradio/gr/qa_vector_sink_source.py create mode 100644 gnuradio-core/src/python/gnuradio/gr/test_16bit_1chunk.wav create mode 100644 gnuradio-core/src/python/gnuradio/gr/top_block.py create mode 100644 gnuradio-core/src/python/gnuradio/gruimpl/daemon.py create mode 100644 gnuradio-core/src/python/gnuradio/gruimpl/msgq_runner.py create mode 100644 gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py create mode 100644 gnuradio-core/src/python/gnuradio/vocoder/Makefile.am create mode 100644 gnuradio-core/src/python/gnuradio/vocoder/Makefile.in create mode 100644 gnuradio-core/src/python/gnuradio/vocoder/__init__.py create mode 100755 gnuradio-core/src/tests/benchmark_dotprod rename gnuradio-core/src/tests/{benchmark_dotprod.cc => benchmark_dotprod_fff.cc} (100%) create mode 100644 gnuradio-core/src/utils/cic_comp_taps.m create mode 100644 gnuradio-core/src/utils/read_cshort_binary.m delete mode 100644 gnuradio-examples/ChangeLog create mode 100644 gnuradio-examples/c++/Makefile.am create mode 100644 gnuradio-examples/c++/Makefile.in delete mode 100755 gnuradio-examples/python/audio/dial_squelch.py create mode 100755 gnuradio-examples/python/audio/dial_tone_daemon.py create mode 100755 gnuradio-examples/python/audio/dial_tone_wav.py delete mode 100755 gnuradio-examples/python/audio/dialtone_v.py create mode 100755 gnuradio-examples/python/audio/noise.py delete mode 100644 gnuradio-examples/python/channel-coding/Makefile.am delete mode 100644 gnuradio-examples/python/channel-coding/Makefile.in delete mode 100644 gnuradio-examples/python/channel-coding/fsm_files/Makefile.am delete mode 100644 gnuradio-examples/python/channel-coding/fsm_files/Makefile.in delete mode 100644 gnuradio-examples/python/channel-coding/fsm_files/rep5.fsm delete mode 100644 gnuradio-examples/python/channel-coding/fsm_files/simple.fsm delete mode 100755 gnuradio-examples/python/channel-coding/fsm_utils.py delete mode 100755 gnuradio-examples/python/channel-coding/test_sccc_hard.py delete mode 100755 gnuradio-examples/python/channel-coding/test_sccc_soft.py delete mode 100755 gnuradio-examples/python/channel-coding/test_sccc_turbo.py delete mode 100755 gnuradio-examples/python/channel-coding/test_tcm.py delete mode 100755 gnuradio-examples/python/channel-coding/test_tcm1.py delete mode 100755 gnuradio-examples/python/channel-coding/test_tcm2.py delete mode 100755 gnuradio-examples/python/channel-coding/test_tcm_combined.py delete mode 100755 gnuradio-examples/python/channel-coding/test_tcm_parallel.py delete mode 100755 gnuradio-examples/python/channel-coding/test_turbo_equalization.py delete mode 100755 gnuradio-examples/python/channel-coding/test_turbo_equalization1.py delete mode 100755 gnuradio-examples/python/channel-coding/test_turbo_equalization2.py delete mode 100755 gnuradio-examples/python/channel-coding/test_viterbi_equalization.py delete mode 100755 gnuradio-examples/python/channel-coding/test_viterbi_equalization1.py create mode 100644 gnuradio-examples/python/digital-bert/Makefile.am create mode 100644 gnuradio-examples/python/digital-bert/Makefile.in create mode 100644 gnuradio-examples/python/digital-bert/README create mode 100755 gnuradio-examples/python/digital-bert/benchmark_rx.py create mode 100755 gnuradio-examples/python/digital-bert/benchmark_tx.py create mode 100644 gnuradio-examples/python/digital-bert/receive_path.py create mode 100644 gnuradio-examples/python/digital-bert/transmit_path.py create mode 100755 gnuradio-examples/python/digital/benchmark_loopback.py create mode 100755 gnuradio-examples/python/digital/benchmark_qt_loopback.py create mode 100755 gnuradio-examples/python/digital/benchmark_qt_rx.py create mode 100644 gnuradio-examples/python/digital/generic_usrp.py create mode 100644 gnuradio-examples/python/digital/qt_digital_window.py create mode 100644 gnuradio-examples/python/digital/qt_digital_window.ui create mode 100644 gnuradio-examples/python/digital/qt_rx_window.py create mode 100644 gnuradio-examples/python/digital/qt_rx_window.ui create mode 100755 gnuradio-examples/python/digital/run_length.py create mode 100644 gnuradio-examples/python/digital/usrp_options.py create mode 100644 gnuradio-examples/python/digital/usrp_receive_path.py create mode 100644 gnuradio-examples/python/digital/usrp_transmit_path.py create mode 100755 gnuradio-examples/python/digital_voice/cvsd_test.py create mode 100644 gnuradio-examples/python/mp-sched/Makefile.am create mode 100644 gnuradio-examples/python/mp-sched/Makefile.in create mode 100644 gnuradio-examples/python/mp-sched/README create mode 100755 gnuradio-examples/python/mp-sched/plot_flops.py create mode 100755 gnuradio-examples/python/mp-sched/run_synthetic.py create mode 100755 gnuradio-examples/python/mp-sched/synthetic.py create mode 100755 gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py create mode 100644 gnuradio-examples/python/network/Makefile.am create mode 100644 gnuradio-examples/python/network/Makefile.in create mode 100755 gnuradio-examples/python/network/audio_sink.py create mode 100755 gnuradio-examples/python/network/audio_source.py create mode 100755 gnuradio-examples/python/network/dial_tone_sink.py create mode 100755 gnuradio-examples/python/network/dial_tone_source.py create mode 100755 gnuradio-examples/python/network/vector_sink.py create mode 100755 gnuradio-examples/python/network/vector_source.py delete mode 100644 gnuradio-examples/python/networking/Makefile.am delete mode 100644 gnuradio-examples/python/networking/Makefile.in delete mode 100755 gnuradio-examples/python/networking/measurement_slave.py create mode 100644 gnuradio-examples/python/ofdm/Makefile.am create mode 100644 gnuradio-examples/python/ofdm/Makefile.in create mode 100755 gnuradio-examples/python/ofdm/benchmark_ofdm.py create mode 100755 gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py create mode 100755 gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py create mode 100755 gnuradio-examples/python/ofdm/fftshift.py rename gnuradio-examples/python/{digital => ofdm}/fusb_options.py (100%) create mode 100755 gnuradio-examples/python/ofdm/ofdm_mod_demod_test.py create mode 100644 gnuradio-examples/python/ofdm/ofdm_sync.m create mode 100644 gnuradio-examples/python/ofdm/ofdm_sync_pn.m create mode 100644 gnuradio-examples/python/ofdm/pick_bitrate.py create mode 100755 gnuradio-examples/python/ofdm/plot_ofdm.m create mode 100644 gnuradio-examples/python/ofdm/receive_path.py create mode 100644 gnuradio-examples/python/ofdm/transmit_path.py create mode 100755 gnuradio-examples/python/ofdm/tunnel.py delete mode 100755 gnuradio-examples/python/usrp/am_rcv.py delete mode 100755 gnuradio-examples/python/usrp/ayfabtu.py delete mode 100755 gnuradio-examples/python/usrp/benchmark_usb.py delete mode 100755 gnuradio-examples/python/usrp/flexrf_debug.py delete mode 100755 gnuradio-examples/python/usrp/flexrf_siggen.py delete mode 100755 gnuradio-examples/python/usrp/siggen_min2.py delete mode 100755 gnuradio-examples/python/usrp/test_counting.py delete mode 100755 gnuradio-examples/python/usrp/test_digital_loopback_counting.py delete mode 100755 gnuradio-examples/python/usrp/test_digital_loopback_lfsr.py delete mode 100755 gnuradio-examples/python/usrp/tvrx_am_rcv_gui.py create mode 100755 gnuradio-examples/python/usrp/usrp_am_mw_rcv.py create mode 100755 gnuradio-examples/python/usrp/usrp_benchmark_usb.py delete mode 100755 gnuradio-examples/python/usrp/usrp_fft.py delete mode 100755 gnuradio-examples/python/usrp/usrp_fft_old.py delete mode 100755 gnuradio-examples/python/usrp/usrp_oscope.py delete mode 100755 gnuradio-examples/python/usrp/usrp_rx_cfile.py delete mode 100755 gnuradio-examples/python/usrp/usrp_rx_nogui.py delete mode 100755 gnuradio-examples/python/usrp/usrp_siggen.py create mode 100755 gnuradio-examples/python/usrp/usrp_spectrum_sense.py create mode 100755 gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py create mode 100755 gnuradio-examples/python/usrp/usrp_wfm_rcv_fmdet.py create mode 100755 gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py delete mode 100755 gnuradio-examples/python/usrp/wfm_rcv_file.py create mode 100644 gnuradio-examples/python/usrp2/Makefile.am create mode 100644 gnuradio-examples/python/usrp2/Makefile.in create mode 100644 gnuradio-examples/python/usrp2/qt_wfm_interface.py create mode 100644 gnuradio-examples/python/usrp2/qt_wfm_interface.ui create mode 100755 gnuradio-examples/python/usrp2/usrp2_wfm_qt.py create mode 100755 gnuradio-examples/python/usrp2/usrp2_wfm_rcv.py delete mode 100644 gr-audio-alsa/AUTHORS delete mode 100644 gr-audio-alsa/ChangeLog create mode 100644 gr-audio-alsa/gr-audio-alsa.pc.in create mode 100644 gr-audio-alsa/src/Makefile.swig.gen delete mode 100644 gr-audio-jack/AUTHORS delete mode 100644 gr-audio-jack/ChangeLog create mode 100644 gr-audio-jack/src/Makefile.swig.gen delete mode 100644 gr-audio-oss/ChangeLog create mode 100644 gr-audio-oss/src/Makefile.swig.gen delete mode 100644 gr-audio-osx/AUTHORS delete mode 100644 gr-audio-osx/ChangeLog create mode 100644 gr-audio-osx/src/Makefile.swig.gen delete mode 100644 gr-audio-portaudio/AUTHORS delete mode 100644 gr-audio-portaudio/ChangeLog create mode 100644 gr-audio-portaudio/src/Makefile.swig.gen delete mode 100644 gr-audio-windows/AUTHORS delete mode 100644 gr-audio-windows/ChangeLog create mode 100644 gr-audio-windows/src/Makefile.swig.gen create mode 100644 gr-cvsd-vocoder/Makefile.am create mode 100644 gr-cvsd-vocoder/Makefile.in create mode 100644 gr-cvsd-vocoder/src/Makefile.am create mode 100644 gr-cvsd-vocoder/src/Makefile.in create mode 100644 gr-cvsd-vocoder/src/lib/Makefile.am create mode 100644 gr-cvsd-vocoder/src/lib/Makefile.in create mode 100644 gr-cvsd-vocoder/src/lib/Makefile.swig.gen create mode 100644 gr-cvsd-vocoder/src/lib/cvsd_decode_bs.cc create mode 100644 gr-cvsd-vocoder/src/lib/cvsd_decode_bs.h create mode 100644 gr-cvsd-vocoder/src/lib/cvsd_encode_sb.cc create mode 100644 gr-cvsd-vocoder/src/lib/cvsd_encode_sb.h create mode 100644 gr-cvsd-vocoder/src/lib/cvsd_vocoder.i create mode 100644 gr-cvsd-vocoder/src/python/Makefile.am create mode 100644 gr-cvsd-vocoder/src/python/Makefile.in create mode 100644 gr-cvsd-vocoder/src/python/cvsd.py create mode 100755 gr-cvsd-vocoder/src/python/encdec.py create mode 100755 gr-cvsd-vocoder/src/python/qa_cvsd_vocoder.py create mode 100644 gr-cvsd-vocoder/src/python/run_tests.in create mode 100644 gr-gcell/Makefile.am create mode 100644 gr-gcell/Makefile.in create mode 100644 gr-gcell/src/Makefile.am create mode 100644 gr-gcell/src/Makefile.in create mode 100644 gr-gcell/src/Makefile.swig.gen create mode 100644 gr-gcell/src/examples/Makefile.am create mode 100644 gr-gcell/src/examples/Makefile.in create mode 100644 gr-gcell/src/gc_job_manager.i create mode 100644 gr-gcell/src/gcell.i create mode 100644 gr-gcell/src/gcell_fft_vcc.cc create mode 100644 gr-gcell/src/gcell_fft_vcc.h create mode 100644 gr-gcell/src/gcell_fft_vcc.i create mode 100755 gr-gcell/src/qa_fft.py create mode 100644 gr-gcell/src/run_tests.in create mode 100644 gr-gpio/Makefile.am create mode 100644 gr-gpio/Makefile.in create mode 100644 gr-gpio/src/Makefile.am create mode 100644 gr-gpio/src/Makefile.in create mode 100644 gr-gpio/src/fpga/Makefile.am create mode 100644 gr-gpio/src/fpga/Makefile.in create mode 100644 gr-gpio/src/fpga/include/Makefile.am create mode 100644 gr-gpio/src/fpga/include/Makefile.in create mode 100644 gr-gpio/src/fpga/include/common_config_2rxhb_2tx_dig.vh create mode 100644 gr-gpio/src/fpga/include/common_config_2rxint_2tx_dig.vh create mode 100644 gr-gpio/src/fpga/include/common_config_bottom.vh create mode 100644 gr-gpio/src/fpga/lib/Makefile.am create mode 100644 gr-gpio/src/fpga/lib/Makefile.in create mode 100644 gr-gpio/src/fpga/lib/gpio_input.v create mode 100644 gr-gpio/src/fpga/lib/integ_shifter.v create mode 100644 gr-gpio/src/fpga/lib/integrator.v create mode 100644 gr-gpio/src/fpga/lib/io_pins.v create mode 100644 gr-gpio/src/fpga/lib/rx_chain.v create mode 100644 gr-gpio/src/fpga/lib/rx_chain_dig.v create mode 100644 gr-gpio/src/fpga/lib/tx_chain_dig.v create mode 100644 gr-gpio/src/fpga/rbf/Makefile.am create mode 100644 gr-gpio/src/fpga/rbf/Makefile.in create mode 100644 gr-gpio/src/fpga/rbf/std_2rxhb_2tx_dig.rbf create mode 100644 gr-gpio/src/fpga/rbf/std_2rxint_2tx_dig.rbf create mode 100644 gr-gpio/src/fpga/top/Makefile.am create mode 100644 gr-gpio/src/fpga/top/Makefile.in create mode 100644 gr-gpio/src/fpga/top/config.vh create mode 100644 gr-gpio/src/fpga/top/usrp_gpio.csf create mode 100644 gr-gpio/src/fpga/top/usrp_gpio.esf create mode 100644 gr-gpio/src/fpga/top/usrp_gpio.psf create mode 100644 gr-gpio/src/fpga/top/usrp_gpio.qpf create mode 100644 gr-gpio/src/fpga/top/usrp_gpio.qsf create mode 100644 gr-gpio/src/fpga/top/usrp_gpio.v create mode 100644 gr-gpio/src/python/Makefile.am create mode 100644 gr-gpio/src/python/Makefile.in create mode 100644 gr-gpio/src/python/__init__.py create mode 100644 gr-gpio/src/python/gpio.py create mode 100755 gr-gpio/src/python/gpio_rx_sfile.py create mode 100755 gr-gpio/src/python/gpio_usrp_fft.py create mode 100755 gr-gpio/src/python/gpio_usrp_siggen.py delete mode 100644 gr-gsm-fr-vocoder/AUTHORS delete mode 100644 gr-gsm-fr-vocoder/ChangeLog create mode 100644 gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen delete mode 100644 gr-gsm-fr-vocoder/src/lib/__init__.py create mode 100644 gr-pager/Makefile.am create mode 100644 gr-pager/Makefile.in create mode 100644 gr-pager/README create mode 100644 gr-pager/src/Makefile.am create mode 100644 gr-pager/src/Makefile.in create mode 100644 gr-pager/src/Makefile.swig.gen create mode 100644 gr-pager/src/__init__.py create mode 100644 gr-pager/src/flex_demod.py create mode 100644 gr-pager/src/pager_flex_deinterleave.cc create mode 100644 gr-pager/src/pager_flex_deinterleave.h create mode 100644 gr-pager/src/pager_flex_frame.cc create mode 100644 gr-pager/src/pager_flex_frame.h create mode 100644 gr-pager/src/pager_flex_frame.i create mode 100644 gr-pager/src/pager_flex_parse.cc create mode 100644 gr-pager/src/pager_flex_parse.h create mode 100644 gr-pager/src/pager_flex_sync.cc create mode 100644 gr-pager/src/pager_flex_sync.h create mode 100644 gr-pager/src/pager_slicer_fb.cc create mode 100644 gr-pager/src/pager_slicer_fb.h create mode 100644 gr-pager/src/pager_swig.i create mode 100644 gr-pager/src/pager_utils.py create mode 100644 gr-pager/src/pageri_bch3221.cc create mode 100644 gr-pager/src/pageri_bch3221.h create mode 100644 gr-pager/src/pageri_flex_modes.cc create mode 100644 gr-pager/src/pageri_flex_modes.h create mode 100644 gr-pager/src/pageri_util.cc create mode 100644 gr-pager/src/pageri_util.h create mode 100755 gr-pager/src/qa_pager.py create mode 100644 gr-pager/src/run_tests.in create mode 100755 gr-pager/src/usrp_flex.py create mode 100755 gr-pager/src/usrp_flex_all.py create mode 100755 gr-pager/src/usrp_flex_band.py create mode 100644 gr-qtgui/Makefile.am create mode 100644 gr-qtgui/Makefile.in create mode 100644 gr-qtgui/src/Makefile.am create mode 100644 gr-qtgui/src/Makefile.in create mode 100644 gr-qtgui/src/lib/ConstellationDisplayPlot.cc create mode 100644 gr-qtgui/src/lib/ConstellationDisplayPlot.h create mode 100644 gr-qtgui/src/lib/ConstellationDisplayPlot_moc.cc create mode 100644 gr-qtgui/src/lib/FrequencyDisplayPlot.cc create mode 100644 gr-qtgui/src/lib/FrequencyDisplayPlot.h create mode 100644 gr-qtgui/src/lib/FrequencyDisplayPlot_moc.cc create mode 100644 gr-qtgui/src/lib/Makefile.am create mode 100644 gr-qtgui/src/lib/Makefile.in create mode 100644 gr-qtgui/src/lib/Makefile.swig.gen create mode 100644 gr-qtgui/src/lib/SpectrumGUIClass.cc create mode 100644 gr-qtgui/src/lib/SpectrumGUIClass.h create mode 100644 gr-qtgui/src/lib/TimeDomainDisplayPlot.cc create mode 100644 gr-qtgui/src/lib/TimeDomainDisplayPlot.h create mode 100644 gr-qtgui/src/lib/TimeDomainDisplayPlot_moc.cc create mode 100644 gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc create mode 100644 gr-qtgui/src/lib/Waterfall3DDisplayPlot.h create mode 100644 gr-qtgui/src/lib/Waterfall3DDisplayPlot_moc.cc create mode 100644 gr-qtgui/src/lib/WaterfallDisplayPlot.cc create mode 100644 gr-qtgui/src/lib/WaterfallDisplayPlot.h create mode 100644 gr-qtgui/src/lib/WaterfallDisplayPlot_moc.cc create mode 100644 gr-qtgui/src/lib/highResTimeFunctions.h create mode 100644 gr-qtgui/src/lib/plot_waterfall.cc create mode 100644 gr-qtgui/src/lib/plot_waterfall.h create mode 100644 gr-qtgui/src/lib/qtgui.h create mode 100644 gr-qtgui/src/lib/qtgui.i create mode 100644 gr-qtgui/src/lib/qtgui_sink_c.cc create mode 100644 gr-qtgui/src/lib/qtgui_sink_c.h create mode 100644 gr-qtgui/src/lib/qtgui_sink_f.cc create mode 100644 gr-qtgui/src/lib/qtgui_sink_f.h create mode 100644 gr-qtgui/src/lib/spectrumUpdateEvents.cc create mode 100644 gr-qtgui/src/lib/spectrumUpdateEvents.h create mode 100644 gr-qtgui/src/lib/spectrumdisplayform.cc create mode 100644 gr-qtgui/src/lib/spectrumdisplayform.h create mode 100644 gr-qtgui/src/lib/spectrumdisplayform.ui create mode 100644 gr-qtgui/src/lib/spectrumdisplayform_moc.cc create mode 100644 gr-qtgui/src/lib/spectrumdisplayform_ui.h create mode 100644 gr-qtgui/src/lib/waterfallGlobalData.cc create mode 100644 gr-qtgui/src/lib/waterfallGlobalData.h create mode 100644 gr-qtgui/src/python/Makefile.am create mode 100644 gr-qtgui/src/python/Makefile.in create mode 100644 gr-qtgui/src/python/__init__.py create mode 100755 gr-qtgui/src/python/pyqt_example.py create mode 100755 gr-qtgui/src/python/pyqt_example_f.py create mode 100755 gr-qtgui/src/python/qt_digital.py create mode 100644 gr-qtgui/src/python/qt_digital_window.py create mode 100644 gr-qtgui/src/python/qt_digital_window.ui create mode 100755 gr-qtgui/src/python/usrp2_display.py create mode 100755 gr-qtgui/src/python/usrp_display.py create mode 100644 gr-radar-mono/Makefile.am create mode 100644 gr-radar-mono/Makefile.in create mode 100644 gr-radar-mono/README create mode 100644 gr-radar-mono/doc/Makefile.am create mode 100644 gr-radar-mono/doc/Makefile.in create mode 100644 gr-radar-mono/doc/registers.ods create mode 100644 gr-radar-mono/src/Makefile.am create mode 100644 gr-radar-mono/src/Makefile.in create mode 100644 gr-radar-mono/src/fpga/Makefile.am create mode 100644 gr-radar-mono/src/fpga/Makefile.in create mode 100644 gr-radar-mono/src/fpga/lib/Makefile.am create mode 100644 gr-radar-mono/src/fpga/lib/Makefile.in create mode 100644 gr-radar-mono/src/fpga/lib/cordic_nco.v create mode 100644 gr-radar-mono/src/fpga/lib/dac_interface.v create mode 100755 gr-radar-mono/src/fpga/lib/fifo32_2k.v create mode 100644 gr-radar-mono/src/fpga/lib/radar.v create mode 100644 gr-radar-mono/src/fpga/lib/radar_config.vh create mode 100644 gr-radar-mono/src/fpga/lib/radar_control.v create mode 100644 gr-radar-mono/src/fpga/lib/radar_rx.v create mode 100644 gr-radar-mono/src/fpga/lib/radar_tx.v create mode 100644 gr-radar-mono/src/fpga/models/Makefile.am create mode 100644 gr-radar-mono/src/fpga/models/Makefile.in create mode 100644 gr-radar-mono/src/fpga/models/fifo_1clk.v create mode 100644 gr-radar-mono/src/fpga/tb/Makefile.am create mode 100644 gr-radar-mono/src/fpga/tb/Makefile.in create mode 100644 gr-radar-mono/src/fpga/tb/radar_tb.sav create mode 100755 gr-radar-mono/src/fpga/tb/radar_tb.sh create mode 100644 gr-radar-mono/src/fpga/tb/radar_tb.v create mode 100755 gr-radar-mono/src/fpga/tb/radar_tb_wave.sh create mode 100644 gr-radar-mono/src/fpga/top/Makefile.am create mode 100644 gr-radar-mono/src/fpga/top/Makefile.in create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.csf create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.esf create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.psf create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.qpf create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.qsf create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.rbf create mode 100644 gr-radar-mono/src/fpga/top/usrp_radar_mono.v create mode 100644 gr-radar-mono/src/lib/Makefile.am create mode 100644 gr-radar-mono/src/lib/Makefile.in create mode 100644 gr-radar-mono/src/python/Makefile.am create mode 100644 gr-radar-mono/src/python/Makefile.in create mode 100644 gr-radar-mono/src/python/radar_mono.py create mode 100644 gr-radar-mono/src/python/run_tests.in create mode 100755 gr-radar-mono/src/python/usrp_radar_mono.py delete mode 100644 gr-radio-astronomy/AUTHORS delete mode 100644 gr-radio-astronomy/ChangeLog create mode 100644 gr-radio-astronomy/src/lib/Makefile.swig.gen create mode 100755 gr-radio-astronomy/src/python/ra_waterfallsink.py create mode 100644 gr-sounder/Makefile.am create mode 100644 gr-sounder/Makefile.in create mode 100644 gr-sounder/README create mode 100644 gr-sounder/doc/Makefile.am create mode 100644 gr-sounder/doc/Makefile.in create mode 100644 gr-sounder/src/Makefile.am create mode 100644 gr-sounder/src/Makefile.in create mode 100644 gr-sounder/src/fpga/Makefile.am create mode 100644 gr-sounder/src/fpga/Makefile.in create mode 100644 gr-sounder/src/fpga/lib/Makefile.am create mode 100644 gr-sounder/src/fpga/lib/Makefile.in create mode 100644 gr-sounder/src/fpga/lib/dac_interface.v create mode 100644 gr-sounder/src/fpga/lib/dacpll.v create mode 100644 gr-sounder/src/fpga/lib/sounder.v create mode 100644 gr-sounder/src/fpga/lib/sounder_ctrl.v create mode 100644 gr-sounder/src/fpga/lib/sounder_rx.v create mode 100644 gr-sounder/src/fpga/lib/sounder_tx.v create mode 100644 gr-sounder/src/fpga/tb/Makefile.am create mode 100644 gr-sounder/src/fpga/tb/Makefile.in create mode 100644 gr-sounder/src/fpga/tb/sounder_tb.sav create mode 100755 gr-sounder/src/fpga/tb/sounder_tb.sh create mode 100644 gr-sounder/src/fpga/tb/sounder_tb.v create mode 100755 gr-sounder/src/fpga/tb/sounder_tb_wave.sh create mode 100644 gr-sounder/src/fpga/top/Makefile.am create mode 100644 gr-sounder/src/fpga/top/Makefile.in create mode 100644 gr-sounder/src/fpga/top/config.vh create mode 100644 gr-sounder/src/fpga/top/usrp_sounder.csf create mode 100644 gr-sounder/src/fpga/top/usrp_sounder.esf create mode 100644 gr-sounder/src/fpga/top/usrp_sounder.psf create mode 100644 gr-sounder/src/fpga/top/usrp_sounder.qpf create mode 100755 gr-sounder/src/fpga/top/usrp_sounder.rbf create mode 100644 gr-sounder/src/fpga/top/usrp_sounder.v create mode 100644 gr-sounder/src/lib/Makefile.am create mode 100644 gr-sounder/src/lib/Makefile.in create mode 100644 gr-sounder/src/python/Makefile.am create mode 100644 gr-sounder/src/python/Makefile.in create mode 100644 gr-sounder/src/python/qa_nothing.py create mode 100644 gr-sounder/src/python/run_tests.in create mode 100644 gr-sounder/src/python/sounder.py create mode 100755 gr-sounder/src/python/sounder_loopback.sh create mode 100755 gr-sounder/src/python/usrp_sounder.py delete mode 100644 gr-trellis/AUTHORS delete mode 100644 gr-trellis/ChangeLog create mode 100644 gr-trellis/src/examples/Makefile.am create mode 100644 gr-trellis/src/examples/Makefile.in rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/README (100%) create mode 100644 gr-trellis/src/examples/fsm_files/Makefile.am create mode 100644 gr-trellis/src/examples/fsm_files/Makefile.in rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn1o2_128.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn1o2_16.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn1o2_4.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn1o2_8.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn2o3_16.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn2o3_4.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn2o3_4_msb.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn2o3_4_msbG.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn2o3_8.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/awgn2o4_4.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/disconnected.fsm (100%) rename {gnuradio-examples/python/channel-coding => gr-trellis/src/examples}/fsm_files/rep3.fsm (100%) create mode 100644 gr-trellis/src/examples/fsm_files/rep5.fsm create mode 100644 gr-trellis/src/examples/fsm_files/simple.fsm create mode 100755 gr-trellis/src/examples/fsm_utils.py create mode 100755 gr-trellis/src/examples/test_sccc_hard.py create mode 100755 gr-trellis/src/examples/test_sccc_soft.py create mode 100755 gr-trellis/src/examples/test_sccc_turbo.py create mode 100755 gr-trellis/src/examples/test_tcm.py create mode 100755 gr-trellis/src/examples/test_tcm1.py create mode 100755 gr-trellis/src/examples/test_tcm2.py create mode 100755 gr-trellis/src/examples/test_tcm_combined.py create mode 100755 gr-trellis/src/examples/test_tcm_parallel.py create mode 100755 gr-trellis/src/examples/test_turbo_equalization.py create mode 100755 gr-trellis/src/examples/test_turbo_equalization1.py create mode 100755 gr-trellis/src/examples/test_turbo_equalization2.py create mode 100755 gr-trellis/src/examples/test_viterbi_equalization.py create mode 100755 gr-trellis/src/examples/test_viterbi_equalization1.py create mode 100644 gr-trellis/src/lib/Makefile.swig.gen create mode 100644 gr-trellis/src/lib/generate_all.py create mode 100644 gr-trellis/src/lib/generate_trellis.py create mode 100644 gr-trellis/src/lib/stamp-sources-generate create mode 100644 gr-trellis/src/lib/trellis_encoder_XX.cc.t create mode 100644 gr-trellis/src/lib/trellis_encoder_XX.h.t create mode 100644 gr-trellis/src/lib/trellis_encoder_XX.i.t create mode 100644 gr-trellis/src/lib/trellis_metrics_X.cc.t create mode 100644 gr-trellis/src/lib/trellis_metrics_X.h.t create mode 100644 gr-trellis/src/lib/trellis_metrics_X.i.t create mode 100644 gr-trellis/src/lib/trellis_viterbi_X.cc.t create mode 100644 gr-trellis/src/lib/trellis_viterbi_X.h.t create mode 100644 gr-trellis/src/lib/trellis_viterbi_X.i.t create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_XX.cc.t create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_XX.h.t create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_XX.i.t delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_b.cc delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_b.h delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_b.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_cb.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_cb.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_cb.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ci.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ci.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ci.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_cs.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_cs.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_cs.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fb.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fb.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fb.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fi.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fi.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fi.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fs.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fs.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_fs.i delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_i.cc delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_i.h delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_i.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ib.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ib.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ib.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ii.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ii.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ii.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_is.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_is.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_is.i delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_s.cc delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_s.h delete mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_s.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_sb.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_sb.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_sb.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_si.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_si.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_si.i create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ss.cc create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ss.h create mode 100644 gr-trellis/src/lib/trellis_viterbi_combined_ss.i delete mode 100644 gr-usrp/AUTHORS delete mode 100644 gr-usrp/ChangeLog create mode 100644 gr-usrp/apps/Makefile.am create mode 100644 gr-usrp/apps/Makefile.in create mode 100644 gr-usrp/apps/usrp_rx_cfile.cc create mode 100644 gr-usrp/apps/usrp_rx_cfile.h create mode 100644 gr-usrp/apps/usrp_siggen.cc create mode 100644 gr-usrp/apps/usrp_siggen.h create mode 100644 gr-usrp/gnuradio-usrp.pc.in create mode 100644 gr-usrp/src/Makefile.swig.gen create mode 100644 gr-usrp/src/__init__.py delete mode 100644 gr-usrp/src/db_base.py delete mode 100644 gr-usrp/src/db_basic.py delete mode 100644 gr-usrp/src/db_dbs_rx.py delete mode 100644 gr-usrp/src/db_flexrf.py delete mode 100644 gr-usrp/src/db_flexrf_mimo.py delete mode 100644 gr-usrp/src/db_instantiator.py delete mode 100644 gr-usrp/src/db_tv_rx.py delete mode 100755 gr-usrp/src/flexrf_debug_gui.py delete mode 100755 gr-usrp/src/tx_debug_gui.py delete mode 100644 gr-usrp/src/usrp.py delete mode 100644 gr-usrp/src/usrp1.i delete mode 100644 gr-usrp/src/usrp1_sink_base.cc delete mode 100644 gr-usrp/src/usrp1_sink_base.h delete mode 100644 gr-usrp/src/usrp1_sink_c.cc delete mode 100644 gr-usrp/src/usrp1_sink_c.h delete mode 100644 gr-usrp/src/usrp1_sink_s.cc delete mode 100644 gr-usrp/src/usrp1_sink_s.h delete mode 100644 gr-usrp/src/usrp1_source_base.cc delete mode 100644 gr-usrp/src/usrp1_source_base.h delete mode 100644 gr-usrp/src/usrp1_source_c.cc delete mode 100644 gr-usrp/src/usrp1_source_c.h delete mode 100644 gr-usrp/src/usrp1_source_s.cc delete mode 100644 gr-usrp/src/usrp1_source_s.h create mode 100644 gr-usrp/src/usrp_base.cc create mode 100644 gr-usrp/src/usrp_base.h create mode 100644 gr-usrp/src/usrp_base.i delete mode 100644 gr-usrp/src/usrp_multi.py create mode 100644 gr-usrp/src/usrp_sink_base.cc create mode 100644 gr-usrp/src/usrp_sink_base.h create mode 100644 gr-usrp/src/usrp_sink_base.i create mode 100644 gr-usrp/src/usrp_sink_c.cc create mode 100644 gr-usrp/src/usrp_sink_c.h create mode 100644 gr-usrp/src/usrp_sink_c.i create mode 100644 gr-usrp/src/usrp_sink_s.cc create mode 100644 gr-usrp/src/usrp_sink_s.h create mode 100644 gr-usrp/src/usrp_sink_s.i create mode 100644 gr-usrp/src/usrp_source_base.cc create mode 100644 gr-usrp/src/usrp_source_base.h create mode 100644 gr-usrp/src/usrp_source_base.i create mode 100644 gr-usrp/src/usrp_source_c.cc create mode 100644 gr-usrp/src/usrp_source_c.h create mode 100644 gr-usrp/src/usrp_source_c.i create mode 100644 gr-usrp/src/usrp_source_s.cc create mode 100644 gr-usrp/src/usrp_source_s.h create mode 100644 gr-usrp/src/usrp_source_s.i create mode 100644 gr-usrp/src/usrp_standard.i create mode 100644 gr-usrp/src/usrp_swig.i create mode 100644 gr-usrp2/Makefile.am create mode 100644 gr-usrp2/Makefile.in create mode 100644 gr-usrp2/gnuradio-usrp2.pc.in create mode 100644 gr-usrp2/src/Makefile.am create mode 100644 gr-usrp2/src/Makefile.in create mode 100644 gr-usrp2/src/Makefile.swig.gen create mode 100755 gr-usrp2/src/qa_usrp2.py create mode 100644 gr-usrp2/src/run_tests.in create mode 100644 gr-usrp2/src/rx_16sc_handler.cc create mode 100644 gr-usrp2/src/rx_16sc_handler.h create mode 100644 gr-usrp2/src/rx_32fc_handler.cc create mode 100644 gr-usrp2/src/rx_32fc_handler.h create mode 100644 gr-usrp2/src/usrp2.i create mode 100644 gr-usrp2/src/usrp2_base.cc create mode 100644 gr-usrp2/src/usrp2_base.h create mode 100644 gr-usrp2/src/usrp2_sink_16sc.cc create mode 100644 gr-usrp2/src/usrp2_sink_16sc.h create mode 100644 gr-usrp2/src/usrp2_sink_32fc.cc create mode 100644 gr-usrp2/src/usrp2_sink_32fc.h create mode 100644 gr-usrp2/src/usrp2_sink_base.cc create mode 100644 gr-usrp2/src/usrp2_sink_base.h create mode 100644 gr-usrp2/src/usrp2_source_16sc.cc create mode 100644 gr-usrp2/src/usrp2_source_16sc.h create mode 100644 gr-usrp2/src/usrp2_source_32fc.cc create mode 100644 gr-usrp2/src/usrp2_source_32fc.h create mode 100644 gr-usrp2/src/usrp2_source_base.cc create mode 100644 gr-usrp2/src/usrp2_source_base.h create mode 100644 gr-utils/Makefile.am create mode 100644 gr-utils/Makefile.in create mode 100644 gr-utils/src/Makefile.am create mode 100644 gr-utils/src/Makefile.in create mode 100644 gr-utils/src/lib/Makefile.am create mode 100644 gr-utils/src/lib/Makefile.in create mode 100644 gr-utils/src/python/Makefile.am create mode 100644 gr-utils/src/python/Makefile.in create mode 100644 gr-utils/src/python/README.plot create mode 100755 gr-utils/src/python/gr_plot_char.py create mode 100755 gr-utils/src/python/gr_plot_const.py create mode 100755 gr-utils/src/python/gr_plot_fft.py create mode 100755 gr-utils/src/python/gr_plot_fft_c.py create mode 100755 gr-utils/src/python/gr_plot_fft_f.py create mode 100755 gr-utils/src/python/gr_plot_float.py create mode 100755 gr-utils/src/python/gr_plot_int.py create mode 100755 gr-utils/src/python/gr_plot_iq.py create mode 100755 gr-utils/src/python/gr_plot_psd.py create mode 100755 gr-utils/src/python/gr_plot_psd_c.py create mode 100755 gr-utils/src/python/gr_plot_psd_f.py create mode 100755 gr-utils/src/python/gr_plot_short.py create mode 100755 gr-utils/src/python/lsusrp create mode 100644 gr-utils/src/python/plot_data.py create mode 100755 gr-utils/src/python/usrp2_fft.py create mode 100755 gr-utils/src/python/usrp2_rx_cfile.py create mode 100755 gr-utils/src/python/usrp2_siggen.py create mode 100755 gr-utils/src/python/usrp2_siggen_gui.py create mode 100755 gr-utils/src/python/usrp_fft.py create mode 100755 gr-utils/src/python/usrp_oscope.py create mode 100755 gr-utils/src/python/usrp_print_db.py create mode 100755 gr-utils/src/python/usrp_rx_cfile.py create mode 100755 gr-utils/src/python/usrp_rx_nogui.py create mode 100755 gr-utils/src/python/usrp_siggen.py create mode 100755 gr-utils/src/python/usrp_test_counting.py create mode 100755 gr-utils/src/python/usrp_test_loopback.py delete mode 100644 gr-video-sdl/AUTHORS delete mode 100644 gr-video-sdl/ChangeLog create mode 100644 gr-video-sdl/src/Makefile.swig.gen delete mode 100644 gr-wxgui/ChangeLog create mode 100644 gr-wxgui/README.gl create mode 100644 gr-wxgui/gr-wxgui.pc.in create mode 100644 gr-wxgui/src/python/common.py create mode 100644 gr-wxgui/src/python/const_window.py create mode 100644 gr-wxgui/src/python/constants.py create mode 100644 gr-wxgui/src/python/constsink_gl.py create mode 100644 gr-wxgui/src/python/fft_window.py delete mode 100755 gr-wxgui/src/python/fftsink.py create mode 100644 gr-wxgui/src/python/fftsink2.py create mode 100644 gr-wxgui/src/python/fftsink_gl.py create mode 100644 gr-wxgui/src/python/fftsink_nongl.py mode change 100755 => 100644 gr-wxgui/src/python/form.py create mode 100644 gr-wxgui/src/python/forms/__init__.py create mode 100644 gr-wxgui/src/python/forms/converters.py create mode 100644 gr-wxgui/src/python/forms/forms.py create mode 100644 gr-wxgui/src/python/gui.py create mode 100644 gr-wxgui/src/python/histo_window.py create mode 100644 gr-wxgui/src/python/histosink_gl.py create mode 100644 gr-wxgui/src/python/number_window.py create mode 100644 gr-wxgui/src/python/numbersink2.py create mode 100644 gr-wxgui/src/python/plotter/Makefile.am create mode 100644 gr-wxgui/src/python/plotter/Makefile.in create mode 100644 gr-wxgui/src/python/plotter/__init__.py create mode 100644 gr-wxgui/src/python/plotter/bar_plotter.py create mode 100644 gr-wxgui/src/python/plotter/channel_plotter.py create mode 100644 gr-wxgui/src/python/plotter/common.py create mode 100644 gr-wxgui/src/python/plotter/gltext.py create mode 100644 gr-wxgui/src/python/plotter/grid_plotter_base.py create mode 100644 gr-wxgui/src/python/plotter/plotter_base.py create mode 100644 gr-wxgui/src/python/plotter/waterfall_plotter.py mode change 100755 => 100644 gr-wxgui/src/python/powermate.py create mode 100644 gr-wxgui/src/python/pubsub.py create mode 100644 gr-wxgui/src/python/scope_window.py delete mode 100755 gr-wxgui/src/python/scopesink.py create mode 100644 gr-wxgui/src/python/scopesink2.py create mode 100644 gr-wxgui/src/python/scopesink_gl.py create mode 100644 gr-wxgui/src/python/scopesink_nongl.py mode change 100755 => 100644 gr-wxgui/src/python/slider.py delete mode 100644 gr-wxgui/src/python/stdgui.py create mode 100644 gr-wxgui/src/python/stdgui2.py create mode 100644 gr-wxgui/src/python/waterfall_window.py delete mode 100755 gr-wxgui/src/python/waterfallsink.py create mode 100644 gr-wxgui/src/python/waterfallsink2.py create mode 100644 gr-wxgui/src/python/waterfallsink_gl.py create mode 100644 gr-wxgui/src/python/waterfallsink_nongl.py create mode 100644 grc/Makefile.am create mode 100644 grc/Makefile.in create mode 100644 grc/Makefile.inc create mode 100644 grc/__init__.py create mode 100644 grc/__init__.py.in create mode 100644 grc/base/Block.py create mode 100644 grc/base/Connection.py create mode 100644 grc/base/Constants.py create mode 100644 grc/base/Element.py create mode 100644 grc/base/FlowGraph.py create mode 100644 grc/base/Makefile.am create mode 100644 grc/base/Makefile.in create mode 100644 grc/base/Param.py create mode 100644 grc/base/ParseXML.py create mode 100644 grc/base/Platform.py create mode 100644 grc/base/Port.py create mode 100644 grc/base/__init__.py create mode 100644 grc/base/block_tree.dtd create mode 100644 grc/base/flow_graph.dtd create mode 100644 grc/base/odict.py create mode 100644 grc/blocks/Makefile.am create mode 100644 grc/blocks/Makefile.in create mode 100644 grc/blocks/audio_sink.xml create mode 100644 grc/blocks/audio_source.xml create mode 100644 grc/blocks/band_pass_filter.xml create mode 100644 grc/blocks/band_reject_filter.xml create mode 100644 grc/blocks/blks2_am_demod_cf.xml create mode 100644 grc/blocks/blks2_analysis_filterbank.xml create mode 100644 grc/blocks/blks2_dxpsk_demod.xml create mode 100644 grc/blocks/blks2_dxpsk_mod.xml create mode 100644 grc/blocks/blks2_error_rate.xml create mode 100644 grc/blocks/blks2_fm_deemph.xml create mode 100644 grc/blocks/blks2_fm_demod_cf.xml create mode 100644 grc/blocks/blks2_fm_preemph.xml create mode 100644 grc/blocks/blks2_gmsk_demod.xml create mode 100644 grc/blocks/blks2_gmsk_mod.xml create mode 100644 grc/blocks/blks2_logpwrfft_x.xml create mode 100644 grc/blocks/blks2_nbfm_rx.xml create mode 100644 grc/blocks/blks2_nbfm_tx.xml create mode 100644 grc/blocks/blks2_ofdm_demod.xml create mode 100644 grc/blocks/blks2_ofdm_mod.xml create mode 100644 grc/blocks/blks2_packet_decoder.xml create mode 100644 grc/blocks/blks2_packet_encoder.xml create mode 100644 grc/blocks/blks2_qamx_demod.xml create mode 100644 grc/blocks/blks2_qamx_mod.xml create mode 100644 grc/blocks/blks2_rational_resampler_xxx.xml create mode 100644 grc/blocks/blks2_selector.xml create mode 100644 grc/blocks/blks2_standard_squelch.xml create mode 100644 grc/blocks/blks2_stream_to_vector_decimator.xml create mode 100644 grc/blocks/blks2_synthesis_filterbank.xml create mode 100644 grc/blocks/blks2_tcp_sink.xml create mode 100644 grc/blocks/blks2_tcp_source.xml create mode 100644 grc/blocks/blks2_valve.xml create mode 100644 grc/blocks/blks2_variable_sink_x.xml create mode 100644 grc/blocks/blks2_wfm_rcv.xml create mode 100644 grc/blocks/blks2_wfm_rcv_pll.xml create mode 100644 grc/blocks/blks2_wfm_tx.xml create mode 100644 grc/blocks/block_tree.xml create mode 100644 grc/blocks/const_source_x.xml create mode 100644 grc/blocks/gr_add_const_vxx.xml create mode 100644 grc/blocks/gr_add_xx.xml create mode 100644 grc/blocks/gr_agc2_xx.xml create mode 100644 grc/blocks/gr_agc_xx.xml create mode 100644 grc/blocks/gr_and_xx.xml create mode 100644 grc/blocks/gr_argmax_xx.xml create mode 100644 grc/blocks/gr_binary_slicer_fb.xml create mode 100644 grc/blocks/gr_channel_model.xml create mode 100644 grc/blocks/gr_char_to_float.xml create mode 100644 grc/blocks/gr_chunks_to_symbols.xml create mode 100644 grc/blocks/gr_clock_recovery_mm_xx.xml create mode 100644 grc/blocks/gr_cma_equalizer_cc.xml create mode 100644 grc/blocks/gr_complex_to_arg.xml create mode 100644 grc/blocks/gr_complex_to_float.xml create mode 100644 grc/blocks/gr_complex_to_imag.xml create mode 100644 grc/blocks/gr_complex_to_interleaved_short.xml create mode 100644 grc/blocks/gr_complex_to_mag.xml create mode 100644 grc/blocks/gr_complex_to_mag_squared.xml create mode 100644 grc/blocks/gr_complex_to_real.xml create mode 100644 grc/blocks/gr_conjugate_cc.xml create mode 100644 grc/blocks/gr_constellation_decoder_cb.xml create mode 100644 grc/blocks/gr_correlate_access_code_bb.xml create mode 100644 grc/blocks/gr_costas_loop_cc.xml create mode 100644 grc/blocks/gr_cpfsk_bc.xml create mode 100644 grc/blocks/gr_dd_mpsk_sync_cc.xml create mode 100644 grc/blocks/gr_decode_ccsds_27_fb.xml create mode 100644 grc/blocks/gr_deinterleave.xml create mode 100644 grc/blocks/gr_delay.xml create mode 100644 grc/blocks/gr_descrambler_bb.xml create mode 100644 grc/blocks/gr_diff_decoder_bb.xml create mode 100644 grc/blocks/gr_diff_encoder_bb.xml create mode 100644 grc/blocks/gr_diff_phasor_cc.xml create mode 100644 grc/blocks/gr_divide_xx.xml create mode 100644 grc/blocks/gr_dpll_bb.xml create mode 100644 grc/blocks/gr_encode_ccsds_27_bb.xml create mode 100644 grc/blocks/gr_feedforward_agc_cc.xml create mode 100644 grc/blocks/gr_fft_filter_xxx.xml create mode 100644 grc/blocks/gr_fft_vxx.xml create mode 100644 grc/blocks/gr_file_sink.xml create mode 100644 grc/blocks/gr_file_source.xml create mode 100644 grc/blocks/gr_filter_delay_fc.xml create mode 100644 grc/blocks/gr_fir_filter_xxx.xml create mode 100644 grc/blocks/gr_float_to_char.xml create mode 100644 grc/blocks/gr_float_to_complex.xml create mode 100644 grc/blocks/gr_float_to_short.xml create mode 100644 grc/blocks/gr_float_to_uchar.xml create mode 100644 grc/blocks/gr_fractional_interpolator_xx.xml create mode 100644 grc/blocks/gr_freq_xlating_fir_filter_xxx.xml create mode 100644 grc/blocks/gr_frequency_modulator_fc.xml create mode 100644 grc/blocks/gr_glfsr_source_x.xml create mode 100644 grc/blocks/gr_goertzel_fc.xml create mode 100644 grc/blocks/gr_head.xml create mode 100644 grc/blocks/gr_hilbert_fc.xml create mode 100644 grc/blocks/gr_iir_filter_ffd.xml create mode 100644 grc/blocks/gr_integrate_xx.xml create mode 100644 grc/blocks/gr_interleave.xml create mode 100644 grc/blocks/gr_interleaved_short_to_complex.xml create mode 100644 grc/blocks/gr_interp_fir_filter_xxx.xml create mode 100644 grc/blocks/gr_iqcomp_cc.xml create mode 100644 grc/blocks/gr_keep_one_in_n.xml create mode 100644 grc/blocks/gr_kludge_copy.xml create mode 100644 grc/blocks/gr_map_bb.xml create mode 100644 grc/blocks/gr_max_xx.xml create mode 100644 grc/blocks/gr_moving_average_xx.xml create mode 100644 grc/blocks/gr_mpsk_receiver_cc.xml create mode 100644 grc/blocks/gr_mpsk_sync_cc.xml create mode 100644 grc/blocks/gr_multiply_const_vxx.xml create mode 100644 grc/blocks/gr_multiply_xx.xml create mode 100644 grc/blocks/gr_mute_xx.xml create mode 100644 grc/blocks/gr_nlog10_ff.xml create mode 100644 grc/blocks/gr_noise_source_x.xml create mode 100644 grc/blocks/gr_nop.xml create mode 100644 grc/blocks/gr_not_xx.xml create mode 100644 grc/blocks/gr_null_sink.xml create mode 100644 grc/blocks/gr_null_source.xml create mode 100644 grc/blocks/gr_or_xx.xml create mode 100644 grc/blocks/gr_packed_to_unpacked_xx.xml create mode 100644 grc/blocks/gr_peak_detector2_fb.xml create mode 100644 grc/blocks/gr_peak_detector_xb.xml create mode 100644 grc/blocks/gr_phase_modulator_fc.xml create mode 100644 grc/blocks/gr_pll_carriertracking_cc.xml create mode 100644 grc/blocks/gr_pll_freqdet_cf.xml create mode 100644 grc/blocks/gr_pll_refout_cc.xml create mode 100644 grc/blocks/gr_pn_correlator_cc.xml create mode 100644 grc/blocks/gr_probe_avg_mag_sqrd_x.xml create mode 100644 grc/blocks/gr_probe_density_b.xml create mode 100644 grc/blocks/gr_probe_mpsk_snr_c.xml create mode 100644 grc/blocks/gr_pwr_squelch_xx.xml create mode 100644 grc/blocks/gr_quadrature_demod_cf.xml create mode 100644 grc/blocks/gr_rational_resampler_base_xxx.xml create mode 100644 grc/blocks/gr_repeat.xml create mode 100644 grc/blocks/gr_rms_xx.xml create mode 100644 grc/blocks/gr_sample_and_hold_xx.xml create mode 100644 grc/blocks/gr_scrambler_bb.xml create mode 100644 grc/blocks/gr_short_to_float.xml create mode 100644 grc/blocks/gr_sig_source_x.xml create mode 100644 grc/blocks/gr_simple_correlator.xml create mode 100644 grc/blocks/gr_simple_framer.xml create mode 100644 grc/blocks/gr_simple_squelch_cc.xml create mode 100644 grc/blocks/gr_single_pole_iir_filter_xx.xml create mode 100644 grc/blocks/gr_skiphead.xml create mode 100644 grc/blocks/gr_stream_to_streams.xml create mode 100644 grc/blocks/gr_stream_to_vector.xml create mode 100644 grc/blocks/gr_streams_to_stream.xml create mode 100644 grc/blocks/gr_streams_to_vector.xml create mode 100644 grc/blocks/gr_sub_xx.xml create mode 100644 grc/blocks/gr_threshold_ff.xml create mode 100644 grc/blocks/gr_throttle.xml create mode 100644 grc/blocks/gr_uchar_to_float.xml create mode 100644 grc/blocks/gr_udp_sink.xml create mode 100644 grc/blocks/gr_udp_source.xml create mode 100644 grc/blocks/gr_unpack_k_bits_bb.xml create mode 100644 grc/blocks/gr_unpacked_to_packed_xx.xml create mode 100644 grc/blocks/gr_vco_f.xml create mode 100644 grc/blocks/gr_vector_sink_x.xml create mode 100644 grc/blocks/gr_vector_source_x.xml create mode 100644 grc/blocks/gr_vector_to_stream.xml create mode 100644 grc/blocks/gr_vector_to_streams.xml create mode 100644 grc/blocks/gr_wavfile_sink.xml create mode 100644 grc/blocks/gr_wavfile_source.xml create mode 100644 grc/blocks/gr_xor_xx.xml create mode 100644 grc/blocks/high_pass_filter.xml create mode 100644 grc/blocks/import.xml create mode 100644 grc/blocks/low_pass_filter.xml create mode 100644 grc/blocks/note.xml create mode 100644 grc/blocks/notebook.xml create mode 100644 grc/blocks/options.xml create mode 100644 grc/blocks/pad_sink.xml create mode 100644 grc/blocks/pad_source.xml create mode 100644 grc/blocks/parameter.xml create mode 100644 grc/blocks/probe_function.xml create mode 100644 grc/blocks/random_source_x.xml create mode 100644 grc/blocks/root_raised_cosine_filter.xml create mode 100644 grc/blocks/trellis_encoder_xx.xml create mode 100644 grc/blocks/trellis_metrics_x.xml create mode 100644 grc/blocks/trellis_permutation.xml create mode 100644 grc/blocks/trellis_siso_combined_f.xml create mode 100644 grc/blocks/trellis_siso_f.xml create mode 100644 grc/blocks/trellis_viterbi_combined_xx.xml create mode 100644 grc/blocks/trellis_viterbi_x.xml create mode 100644 grc/blocks/usrp2_probe.xml create mode 100644 grc/blocks/usrp2_sink_xxxx.xml create mode 100644 grc/blocks/usrp2_source_xxxx.xml create mode 100644 grc/blocks/usrp_dual_sink_x.xml create mode 100644 grc/blocks/usrp_dual_source_x.xml create mode 100644 grc/blocks/usrp_probe.xml create mode 100644 grc/blocks/usrp_simple_sink_x.xml create mode 100644 grc/blocks/usrp_simple_source_x.xml create mode 100644 grc/blocks/variable.xml create mode 100644 grc/blocks/variable_check_box.xml create mode 100644 grc/blocks/variable_chooser.xml create mode 100644 grc/blocks/variable_config.xml create mode 100644 grc/blocks/variable_slider.xml create mode 100644 grc/blocks/variable_static_text.xml create mode 100644 grc/blocks/variable_text_box.xml create mode 100644 grc/blocks/wxgui_constellationsink2.xml create mode 100644 grc/blocks/wxgui_fftsink2.xml create mode 100644 grc/blocks/wxgui_histosink2.xml create mode 100644 grc/blocks/wxgui_numbersink2.xml create mode 100644 grc/blocks/wxgui_scopesink2.xml create mode 100644 grc/blocks/wxgui_waterfallsink2.xml create mode 100644 grc/blocks/xmlrpc_client.xml create mode 100644 grc/blocks/xmlrpc_server.xml create mode 100644 grc/examples/Makefile.am create mode 100644 grc/examples/Makefile.in create mode 100644 grc/examples/audio/dial_tone.grc create mode 100644 grc/examples/simple/ber_simulation.grc create mode 100644 grc/examples/simple/dpsk_loopback.grc create mode 100644 grc/examples/simple/var_sink_taps.grc create mode 100644 grc/examples/simple/variable_config.grc create mode 100644 grc/examples/trellis/interference_cancellation.grc create mode 100644 grc/examples/trellis/readme.txt create mode 100644 grc/examples/usrp/usrp2_const_wave.grc create mode 100644 grc/examples/usrp/usrp2_dpsk_mod.grc create mode 100644 grc/examples/usrp/usrp2_fft.grc create mode 100644 grc/examples/usrp/usrp_two_tone_loopback.grc create mode 100644 grc/examples/usrp/usrp_wbfm_receive.grc create mode 100644 grc/examples/xmlrpc/readme.txt create mode 100644 grc/examples/xmlrpc/xmlrpc_client.grc create mode 100644 grc/examples/xmlrpc/xmlrpc_client_script.py create mode 100644 grc/examples/xmlrpc/xmlrpc_server.grc create mode 100644 grc/freedesktop/Makefile.am create mode 100644 grc/freedesktop/Makefile.in create mode 100644 grc/freedesktop/README create mode 100644 grc/freedesktop/gnuradio-grc.desktop create mode 100644 grc/freedesktop/gnuradio-grc.xml create mode 100644 grc/freedesktop/gnuradio-usrp2_probe.desktop create mode 100644 grc/freedesktop/gnuradio-usrp_probe.desktop create mode 100644 grc/freedesktop/grc-icon-128.png create mode 100644 grc/freedesktop/grc-icon-256.png create mode 100644 grc/freedesktop/grc-icon-32.png create mode 100644 grc/freedesktop/grc-icon-48.png create mode 100644 grc/freedesktop/grc-icon-64.png create mode 100644 grc/freedesktop/grc_setup_freedesktop create mode 100644 grc/freedesktop/grc_setup_freedesktop.in create mode 100644 grc/grc.conf create mode 100644 grc/grc.conf.in create mode 100644 grc/grc_gnuradio/Makefile.am create mode 100644 grc/grc_gnuradio/Makefile.in create mode 100644 grc/grc_gnuradio/README create mode 100644 grc/grc_gnuradio/__init__.py create mode 100644 grc/grc_gnuradio/blks2/__init__.py create mode 100644 grc/grc_gnuradio/blks2/error_rate.py create mode 100644 grc/grc_gnuradio/blks2/packet.py create mode 100644 grc/grc_gnuradio/blks2/probe.py create mode 100644 grc/grc_gnuradio/blks2/selector.py create mode 100644 grc/grc_gnuradio/blks2/tcp.py create mode 100644 grc/grc_gnuradio/blks2/variable_sink.py create mode 100644 grc/grc_gnuradio/usrp/__init__.py create mode 100644 grc/grc_gnuradio/usrp/common.py create mode 100644 grc/grc_gnuradio/usrp/dual_usrp.py create mode 100644 grc/grc_gnuradio/usrp/simple_usrp.py create mode 100644 grc/grc_gnuradio/wxgui/__init__.py create mode 100644 grc/grc_gnuradio/wxgui/panel.py create mode 100644 grc/grc_gnuradio/wxgui/top_block_gui.py create mode 100644 grc/gui/ActionHandler.py create mode 100644 grc/gui/Actions.py create mode 100644 grc/gui/Bars.py create mode 100644 grc/gui/Block.py create mode 100644 grc/gui/BlockTreeWindow.py create mode 100644 grc/gui/Colors.py create mode 100644 grc/gui/Connection.py create mode 100644 grc/gui/Constants.py create mode 100644 grc/gui/Dialogs.py create mode 100644 grc/gui/DrawingArea.py create mode 100644 grc/gui/Element.py create mode 100644 grc/gui/FileDialogs.py create mode 100644 grc/gui/FlowGraph.py create mode 100644 grc/gui/MainWindow.py create mode 100644 grc/gui/Makefile.am create mode 100644 grc/gui/Makefile.in create mode 100644 grc/gui/Messages.py create mode 100644 grc/gui/NotebookPage.py create mode 100644 grc/gui/Param.py create mode 100644 grc/gui/ParamsDialog.py create mode 100644 grc/gui/Platform.py create mode 100644 grc/gui/Port.py create mode 100644 grc/gui/Preferences.py create mode 100644 grc/gui/StateCache.py create mode 100644 grc/gui/Utils.py create mode 100644 grc/gui/__init__.py create mode 100644 grc/python/Block.py create mode 100644 grc/python/Connection.py create mode 100644 grc/python/Constants.py create mode 100644 grc/python/FlowGraph.py create mode 100644 grc/python/Generator.py create mode 100644 grc/python/Makefile.am create mode 100644 grc/python/Makefile.in create mode 100644 grc/python/Param.py create mode 100644 grc/python/Platform.py create mode 100644 grc/python/Port.py create mode 100644 grc/python/__init__.py create mode 100644 grc/python/block.dtd create mode 100644 grc/python/convert_hier.py create mode 100644 grc/python/default_flow_graph.grc create mode 100644 grc/python/expr_utils.py create mode 100644 grc/python/extract_category.py create mode 100644 grc/python/extract_docs.py create mode 100644 grc/python/flow_graph.tmpl create mode 100644 grc/scripts/Makefile.am create mode 100644 grc/scripts/Makefile.in create mode 100755 grc/scripts/grc create mode 100755 grc/scripts/usrp2_probe create mode 100755 grc/scripts/usrp_probe create mode 100644 gruel/Makefile.am create mode 100644 gruel/Makefile.in create mode 100644 gruel/README create mode 100644 gruel/gruel.pc.in create mode 100644 gruel/src/Makefile.am create mode 100644 gruel/src/Makefile.in create mode 100644 gruel/src/include/Makefile.am create mode 100644 gruel/src/include/Makefile.in create mode 100644 gruel/src/include/gruel/Makefile.am create mode 100644 gruel/src/include/gruel/Makefile.in create mode 100644 gruel/src/include/gruel/inet.h create mode 100644 gruel/src/include/gruel/inet.h.in create mode 100644 gruel/src/include/gruel/realtime.h create mode 100644 gruel/src/include/gruel/sys_pri.h create mode 100644 gruel/src/include/gruel/thread_body_wrapper.h create mode 100644 gruel/src/include/gruel/thread_group.h create mode 100644 gruel/src/lib/Makefile.am create mode 100644 gruel/src/lib/Makefile.in create mode 100644 gruel/src/lib/realtime.cc create mode 100644 gruel/src/lib/sys_pri.cc create mode 100644 gruel/src/lib/thread_body_wrapper.cc create mode 100644 gruel/src/lib/thread_group.cc mode change 100644 => 100755 ltmain.sh create mode 100644 mblock/Makefile.am create mode 100644 mblock/Makefile.in create mode 100644 mblock/README create mode 100644 mblock/doc/Makefile.am create mode 100644 mblock/doc/Makefile.in create mode 100644 mblock/mblock.pc.in create mode 100644 mblock/src/Makefile.am create mode 100644 mblock/src/Makefile.in create mode 100644 mblock/src/include/Makefile.am create mode 100644 mblock/src/include/Makefile.in create mode 100644 mblock/src/include/mblock/Makefile.am create mode 100644 mblock/src/include/mblock/Makefile.in create mode 100644 mblock/src/include/mblock/class_registry.h create mode 100644 mblock/src/include/mblock/common.h create mode 100644 mblock/src/include/mblock/exception.h create mode 100644 mblock/src/include/mblock/mblock.h create mode 100644 mblock/src/include/mblock/message.h create mode 100644 mblock/src/include/mblock/msg_accepter.h create mode 100644 mblock/src/include/mblock/msg_queue.h create mode 100644 mblock/src/include/mblock/port.h create mode 100644 mblock/src/include/mblock/protocol_class.h create mode 100644 mblock/src/include/mblock/runtime.h create mode 100644 mblock/src/include/mblock/time.h create mode 100644 mblock/src/lib/Makefile.am create mode 100644 mblock/src/lib/Makefile.in create mode 100644 mblock/src/lib/README.locking create mode 100644 mblock/src/lib/benchmark_send.cc create mode 100644 mblock/src/lib/mb_class_registry.cc create mode 100644 mblock/src/lib/mb_connection.cc create mode 100644 mblock/src/lib/mb_connection.h create mode 100644 mblock/src/lib/mb_endpoint.cc create mode 100644 mblock/src/lib/mb_endpoint.h create mode 100644 mblock/src/lib/mb_exception.cc create mode 100644 mblock/src/lib/mb_gettid.cc create mode 100644 mblock/src/lib/mb_gettid.h create mode 100644 mblock/src/lib/mb_mblock.cc create mode 100644 mblock/src/lib/mb_mblock_impl.cc create mode 100644 mblock/src/lib/mb_mblock_impl.h create mode 100644 mblock/src/lib/mb_message.cc create mode 100644 mblock/src/lib/mb_msg_accepter.cc create mode 100644 mblock/src/lib/mb_msg_accepter_msgq.cc create mode 100644 mblock/src/lib/mb_msg_accepter_msgq.h create mode 100644 mblock/src/lib/mb_msg_accepter_smp.cc create mode 100644 mblock/src/lib/mb_msg_accepter_smp.h create mode 100644 mblock/src/lib/mb_msg_queue.cc create mode 100644 mblock/src/lib/mb_port.cc create mode 100644 mblock/src/lib/mb_port_simple.cc create mode 100644 mblock/src/lib/mb_port_simple.h create mode 100644 mblock/src/lib/mb_protocol_class.cc create mode 100644 mblock/src/lib/mb_runtime.cc create mode 100644 mblock/src/lib/mb_runtime_base.cc create mode 100644 mblock/src/lib/mb_runtime_base.h create mode 100644 mblock/src/lib/mb_runtime_nop.cc create mode 100644 mblock/src/lib/mb_runtime_nop.h create mode 100644 mblock/src/lib/mb_runtime_thread_per_block.cc create mode 100644 mblock/src/lib/mb_runtime_thread_per_block.h create mode 100644 mblock/src/lib/mb_timer_queue.cc create mode 100644 mblock/src/lib/mb_timer_queue.h create mode 100644 mblock/src/lib/mb_util.cc create mode 100644 mblock/src/lib/mb_util.h create mode 100644 mblock/src/lib/mb_worker.cc create mode 100644 mblock/src/lib/mb_worker.h create mode 100644 mblock/src/lib/mbi_runtime_lock.h create mode 100644 mblock/src/lib/qa_bitset.cc create mode 100644 mblock/src/lib/qa_bitset.mbh create mode 100644 mblock/src/lib/qa_bitset_mbh.cc create mode 100644 mblock/src/lib/qa_disconnect.cc create mode 100644 mblock/src/lib/qa_mblock.cc create mode 100644 mblock/src/lib/qa_mblock.h create mode 100644 mblock/src/lib/qa_mblock_prims.cc create mode 100644 mblock/src/lib/qa_mblock_prims.h create mode 100644 mblock/src/lib/qa_mblock_send.cc create mode 100644 mblock/src/lib/qa_mblock_send.h create mode 100644 mblock/src/lib/qa_mblock_sys.cc create mode 100644 mblock/src/lib/qa_mblock_sys.h create mode 100644 mblock/src/lib/qa_timeouts.cc create mode 100644 mblock/src/lib/qa_timeouts.h create mode 100644 mblock/src/lib/test_mblock.cc create mode 100644 mblock/src/scheme/Makefile.am create mode 100644 mblock/src/scheme/Makefile.in create mode 100644 mblock/src/scheme/gnuradio/Makefile.am create mode 100644 mblock/src/scheme/gnuradio/Makefile.in create mode 100755 mblock/src/scheme/gnuradio/compile-mbh.scm create mode 100644 omnithread/Makefile.am create mode 100644 omnithread/Makefile.in rename {gnuradio-core/src/lib/omnithread => omnithread}/dir.mk (100%) create mode 100644 omnithread/gnuradio-omnithread.pc.in create mode 100644 omnithread/gnuradio/Makefile.am create mode 100644 omnithread/gnuradio/Makefile.in create mode 100644 omnithread/gnuradio/omni_time.h create mode 100644 omnithread/gnuradio/omnithread.h rename {gnuradio-core/src/lib/omnithread => omnithread/gnuradio}/ot_VxThread.h (100%) rename {gnuradio-core/src/lib/omnithread => omnithread/gnuradio}/ot_mach.h (100%) rename {gnuradio-core/src/lib/omnithread => omnithread/gnuradio}/ot_nt.h (100%) rename {gnuradio-core/src/lib/omnithread => omnithread/gnuradio}/ot_posix.h (100%) create mode 100644 omnithread/gnuradio/ot_pthread_nt.h rename {gnuradio-core/src/lib/omnithread => omnithread/gnuradio}/ot_solaris.h (100%) create mode 100644 omnithread/mach.cc create mode 100644 omnithread/nt.cc create mode 100644 omnithread/omni_time.cc create mode 100644 omnithread/posix.cc create mode 100644 omnithread/solaris.cc rename {gnuradio-core/src/lib/omnithread => omnithread}/threaddata.cc (100%) create mode 100644 omnithread/vxWorks.cc create mode 100644 pmt/Makefile.am create mode 100644 pmt/Makefile.in create mode 100644 pmt/README create mode 100644 pmt/doc/Makefile.am create mode 100644 pmt/doc/Makefile.in create mode 100644 pmt/pmt.pc.in create mode 100644 pmt/src/Makefile.am create mode 100644 pmt/src/Makefile.in create mode 100644 pmt/src/lib/Makefile.am create mode 100644 pmt/src/lib/Makefile.in create mode 100755 pmt/src/lib/generate_unv.py create mode 100644 pmt/src/lib/pmt.cc create mode 100644 pmt/src/lib/pmt.h create mode 100644 pmt/src/lib/pmt_int.h create mode 100644 pmt/src/lib/pmt_io.cc create mode 100644 pmt/src/lib/pmt_pool.cc create mode 100644 pmt/src/lib/pmt_pool.h create mode 100644 pmt/src/lib/pmt_serial_tags.h create mode 100644 pmt/src/lib/pmt_serialize.cc create mode 100644 pmt/src/lib/pmt_unv.cc create mode 100644 pmt/src/lib/pmt_unv_int.h create mode 100644 pmt/src/lib/qa_pmt.cc create mode 100644 pmt/src/lib/qa_pmt.h create mode 100644 pmt/src/lib/qa_pmt_prims.cc create mode 100644 pmt/src/lib/qa_pmt_prims.h create mode 100644 pmt/src/lib/qa_pmt_unv.cc create mode 100644 pmt/src/lib/qa_pmt_unv.h create mode 100644 pmt/src/lib/stamp-sources-generate create mode 100644 pmt/src/lib/test_pmt.cc create mode 100644 pmt/src/lib/unv_qa_template.cc.t create mode 100644 pmt/src/lib/unv_template.cc.t create mode 100644 pmt/src/lib/unv_template.h.t create mode 100644 pmt/src/scheme/Makefile.am create mode 100644 pmt/src/scheme/Makefile.in create mode 100644 pmt/src/scheme/gnuradio/Makefile.am create mode 100644 pmt/src/scheme/gnuradio/Makefile.in create mode 100755 pmt/src/scheme/gnuradio/gen-serial-tags.scm create mode 100644 pmt/src/scheme/gnuradio/macros-etc.scm create mode 100644 pmt/src/scheme/gnuradio/pmt-serial-tags.scm create mode 100644 pmt/src/scheme/gnuradio/pmt-serialize.scm delete mode 100644 usrp/AUTHORS delete mode 100644 usrp/ChangeLog create mode 100755 usrp/fpga/inband_lib/chan_fifo_reader.v create mode 100644 usrp/fpga/inband_lib/channel_demux.v create mode 100755 usrp/fpga/inband_lib/channel_ram.v create mode 100755 usrp/fpga/inband_lib/cmd_reader.v create mode 100755 usrp/fpga/inband_lib/packet_builder.v create mode 100755 usrp/fpga/inband_lib/register_io.v create mode 100755 usrp/fpga/inband_lib/rx_buffer_inband.v create mode 100755 usrp/fpga/inband_lib/tx_buffer_inband.v create mode 100644 usrp/fpga/inband_lib/tx_packer.v create mode 100755 usrp/fpga/inband_lib/usb_packet_fifo.v create mode 100755 usrp/fpga/megacells/fifo_1kx16.bsf create mode 100755 usrp/fpga/megacells/fifo_1kx16.cmp create mode 100755 usrp/fpga/megacells/fifo_1kx16.inc create mode 100755 usrp/fpga/megacells/fifo_1kx16.v create mode 100755 usrp/fpga/megacells/fifo_1kx16_bb.v create mode 100755 usrp/fpga/megacells/fifo_1kx16_inst.v create mode 100755 usrp/fpga/megacells/fifo_4k_18.v create mode 100755 usrp/fpga/megacells/fifo_4kx16_dc.bsf create mode 100755 usrp/fpga/megacells/fifo_4kx16_dc.cmp create mode 100755 usrp/fpga/megacells/fifo_4kx16_dc.inc create mode 100755 usrp/fpga/megacells/fifo_4kx16_dc.v create mode 100755 usrp/fpga/megacells/fifo_4kx16_dc_bb.v create mode 100755 usrp/fpga/megacells/fifo_4kx16_dc_inst.v create mode 100644 usrp/fpga/models/fifo_4k_18.v create mode 100644 usrp/fpga/rbf/rev2/Makefile.am create mode 100644 usrp/fpga/rbf/rev2/Makefile.in create mode 100755 usrp/fpga/rbf/rev2/inband_1rxhb_1tx.rbf create mode 100755 usrp/fpga/rbf/rev2/inband_2rxhb_2tx.rbf create mode 100644 usrp/fpga/rbf/rev4/Makefile.am create mode 100644 usrp/fpga/rbf/rev4/Makefile.in create mode 100755 usrp/fpga/rbf/rev4/inband_1rxhb_1tx.rbf create mode 100755 usrp/fpga/rbf/rev4/inband_2rxhb_2tx.rbf create mode 100644 usrp/fpga/sdr_lib/atr_delay.v create mode 100644 usrp/fpga/sdr_lib/cic_dec_shifter.v delete mode 100644 usrp/fpga/sdr_lib/hb/coeff_ram.v create mode 100644 usrp/fpga/toplevel/include/common_config_1rxhb_1tx.vh create mode 100644 usrp/fpga/toplevel/include/common_config_2rx_0tx.vh create mode 100644 usrp/fpga/toplevel/include/common_config_2rxhb_0tx.vh create mode 100644 usrp/fpga/toplevel/include/common_config_2rxhb_2tx.vh create mode 100644 usrp/fpga/toplevel/include/common_config_4rx_0tx.vh create mode 100644 usrp/fpga/toplevel/include/common_config_bottom.vh create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/config.vh create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.csf create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.esf create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.psf create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qpf create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qsf create mode 100644 usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.v create mode 100644 usrp/fpga/toplevel/usrp_multi/config.vh delete mode 100644 usrp/fpga/toplevel/usrp_multi/usrp_multi.vh delete mode 100644 usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh delete mode 100644 usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh delete mode 100644 usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh delete mode 100644 usrp/fpga/toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh delete mode 100644 usrp/fpga/toplevel/usrp_multi/usrp_std.vh create mode 100644 usrp/fpga/toplevel/usrp_std/config.vh delete mode 100644 usrp/fpga/toplevel/usrp_std/usrp_std.vh delete mode 100644 usrp/fpga/toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh delete mode 100644 usrp/fpga/toplevel/usrp_std/usrp_std_config_4rx_0tx.vh delete mode 100644 usrp/host/lib/README_OSX delete mode 100644 usrp/host/lib/circular_buffer.h delete mode 100644 usrp/host/lib/circular_linked_list.h delete mode 100644 usrp/host/lib/fusb_darwin.cc delete mode 100644 usrp/host/lib/fusb_linux.cc delete mode 100644 usrp/host/lib/fusb_win32.cc create mode 100644 usrp/host/lib/legacy/Makefile.am create mode 100644 usrp/host/lib/legacy/Makefile.in create mode 100644 usrp/host/lib/legacy/README_OSX rename usrp/host/lib/{ => legacy}/ad9862.h (100%) rename usrp/host/lib/{ => legacy}/check_data.py (100%) create mode 100644 usrp/host/lib/legacy/circular_buffer.h create mode 100644 usrp/host/lib/legacy/circular_linked_list.h rename usrp/host/lib/{ => legacy}/darwin_libusb.h (100%) create mode 100644 usrp/host/lib/legacy/db_base.cc create mode 100644 usrp/host/lib/legacy/db_base.h create mode 100644 usrp/host/lib/legacy/db_base.i create mode 100644 usrp/host/lib/legacy/db_base_impl.h create mode 100644 usrp/host/lib/legacy/db_basic.cc create mode 100644 usrp/host/lib/legacy/db_basic.h create mode 100644 usrp/host/lib/legacy/db_boards.cc create mode 100644 usrp/host/lib/legacy/db_boards.h create mode 100644 usrp/host/lib/legacy/db_dbs_rx.cc create mode 100644 usrp/host/lib/legacy/db_dbs_rx.h create mode 100644 usrp/host/lib/legacy/db_dtt754.cc create mode 100644 usrp/host/lib/legacy/db_dtt754.h create mode 100644 usrp/host/lib/legacy/db_dtt768.cc create mode 100644 usrp/host/lib/legacy/db_dtt768.h create mode 100644 usrp/host/lib/legacy/db_flexrf.cc create mode 100644 usrp/host/lib/legacy/db_flexrf.h create mode 100644 usrp/host/lib/legacy/db_flexrf_mimo.cc create mode 100644 usrp/host/lib/legacy/db_flexrf_mimo.h create mode 100644 usrp/host/lib/legacy/db_tv_rx.cc create mode 100644 usrp/host/lib/legacy/db_tv_rx.h create mode 100644 usrp/host/lib/legacy/db_util.cc create mode 100644 usrp/host/lib/legacy/db_util.h create mode 100644 usrp/host/lib/legacy/db_wbx.h create mode 100644 usrp/host/lib/legacy/db_xcvr2450.cc create mode 100644 usrp/host/lib/legacy/db_xcvr2450.h rename usrp/host/lib/{ => legacy}/dump_data.py (100%) rename usrp/host/lib/{ => legacy}/fusb.cc (100%) rename usrp/host/lib/{ => legacy}/fusb.h (100%) create mode 100644 usrp/host/lib/legacy/fusb_darwin.cc rename usrp/host/lib/{ => legacy}/fusb_darwin.h (100%) rename usrp/host/lib/{ => legacy}/fusb_generic.cc (100%) rename usrp/host/lib/{ => legacy}/fusb_generic.h (100%) create mode 100644 usrp/host/lib/legacy/fusb_linux.cc rename usrp/host/lib/{ => legacy}/fusb_linux.h (100%) rename usrp/host/lib/{ => legacy}/fusb_ra_wb.cc (100%) rename usrp/host/lib/{ => legacy}/fusb_ra_wb.h (100%) rename usrp/host/lib/{ => legacy}/fusb_sysconfig_darwin.cc (100%) rename usrp/host/lib/{ => legacy}/fusb_sysconfig_generic.cc (100%) rename usrp/host/lib/{ => legacy}/fusb_sysconfig_linux.cc (100%) rename usrp/host/lib/{ => legacy}/fusb_sysconfig_ra_wb.cc (100%) rename usrp/host/lib/{ => legacy}/fusb_sysconfig_win32.cc (100%) create mode 100644 usrp/host/lib/legacy/fusb_win32.cc rename usrp/host/lib/{ => legacy}/fusb_win32.h (100%) rename usrp/host/lib/{ => legacy}/gen_usrp_dbid.py (100%) rename usrp/host/lib/{ => legacy}/md5.c (100%) rename usrp/host/lib/{ => legacy}/md5.h (100%) create mode 100644 usrp/host/lib/legacy/mld_threads.h rename usrp/host/lib/{ => legacy}/rate_to_regval.h (100%) create mode 100644 usrp/host/lib/legacy/stamp-sources-generate create mode 100644 usrp/host/lib/legacy/std_paths.h.in create mode 100644 usrp/host/lib/legacy/usrp_basic.cc create mode 100644 usrp/host/lib/legacy/usrp_basic.h create mode 100644 usrp/host/lib/legacy/usrp_bytesex.h rename usrp/host/lib/{ => legacy}/usrp_config.cc (100%) rename usrp/host/lib/{ => legacy}/usrp_config.h (100%) create mode 100644 usrp/host/lib/legacy/usrp_dbid.cc create mode 100644 usrp/host/lib/legacy/usrp_dbid.dat create mode 100644 usrp/host/lib/legacy/usrp_dbid.h create mode 100644 usrp/host/lib/legacy/usrp_dbid.py create mode 100644 usrp/host/lib/legacy/usrp_local_sighandler.cc rename usrp/host/lib/{ => legacy}/usrp_local_sighandler.h (100%) create mode 100644 usrp/host/lib/legacy/usrp_prims.cc rename usrp/host/lib/{ => legacy}/usrp_prims.h (100%) rename usrp/host/lib/{ => legacy}/usrp_slots.h (100%) create mode 100644 usrp/host/lib/legacy/usrp_standard.cc create mode 100644 usrp/host/lib/legacy/usrp_standard.h create mode 100644 usrp/host/lib/legacy/usrp_subdev_spec.h create mode 100644 usrp/host/lib/legacy/usrp_tune_result.h delete mode 100644 usrp/host/lib/mld_threads.h delete mode 100644 usrp/host/lib/std_paths.h.in delete mode 100644 usrp/host/lib/usrp_basic.cc delete mode 100644 usrp/host/lib/usrp_basic.h delete mode 100644 usrp/host/lib/usrp_bytesex.h delete mode 100644 usrp/host/lib/usrp_dbid.cc delete mode 100644 usrp/host/lib/usrp_dbid.dat delete mode 100644 usrp/host/lib/usrp_dbid.h delete mode 100644 usrp/host/lib/usrp_dbid.py delete mode 100644 usrp/host/lib/usrp_local_sighandler.cc delete mode 100644 usrp/host/lib/usrp_prims.cc delete mode 100644 usrp/host/lib/usrp_standard.cc delete mode 100644 usrp/host/lib/usrp_standard.h create mode 100644 usrp/host/swig/Makefile.swig.gen rename usrp/host/swig/{prims.i => usrp_prims.i} (100%) create mode 100644 usrp2/Makefile.am create mode 100644 usrp2/Makefile.in create mode 100644 usrp2/firmware/AUTHORS create mode 100644 usrp2/firmware/COPYING create mode 100644 usrp2/firmware/ChangeLog create mode 100644 usrp2/firmware/INSTALL create mode 100644 usrp2/firmware/Makefile.am create mode 100644 usrp2/firmware/Makefile.common create mode 100644 usrp2/firmware/Makefile.in create mode 100644 usrp2/firmware/NEWS create mode 100644 usrp2/firmware/README create mode 100644 usrp2/firmware/aclocal.m4 create mode 100644 usrp2/firmware/apps/Makefile.am create mode 100644 usrp2/firmware/apps/Makefile.in create mode 100644 usrp2/firmware/apps/app_common_v2.c create mode 100644 usrp2/firmware/apps/app_common_v2.h create mode 100644 usrp2/firmware/apps/app_passthru_v2.c create mode 100644 usrp2/firmware/apps/app_passthru_v2.h create mode 100644 usrp2/firmware/apps/blink_leds.c create mode 100644 usrp2/firmware/apps/blink_leds2.c create mode 100644 usrp2/firmware/apps/buf_ram_test.c create mode 100644 usrp2/firmware/apps/burn_dbsrx_eeprom.c create mode 100644 usrp2/firmware/apps/burnrev30.c create mode 100644 usrp2/firmware/apps/burnrev31.c create mode 100644 usrp2/firmware/apps/burnrev40.c create mode 100644 usrp2/firmware/apps/can_i_sub.c create mode 100644 usrp2/firmware/apps/echo.c create mode 100644 usrp2/firmware/apps/eth_serdes.c create mode 100644 usrp2/firmware/apps/factory_test.c create mode 100644 usrp2/firmware/apps/gen_eth_packets.c create mode 100644 usrp2/firmware/apps/hello.c create mode 100644 usrp2/firmware/apps/ibs_rx_test.c create mode 100644 usrp2/firmware/apps/ibs_tx_test.c create mode 100644 usrp2/firmware/apps/mimo_app_common_v2.c create mode 100644 usrp2/firmware/apps/mimo_app_common_v2.h create mode 100644 usrp2/firmware/apps/mimo_tx.c create mode 100644 usrp2/firmware/apps/mimo_tx_slave.c create mode 100644 usrp2/firmware/apps/rcv_eth_packets.c create mode 100644 usrp2/firmware/apps/read_dbids.c create mode 100644 usrp2/firmware/apps/sd_bounce.c create mode 100644 usrp2/firmware/apps/sd_gentest.c create mode 100644 usrp2/firmware/apps/serdes_txrx.c create mode 100644 usrp2/firmware/apps/set_hw_rev.c create mode 100644 usrp2/firmware/apps/test1.c create mode 100644 usrp2/firmware/apps/test_db_spi.c create mode 100644 usrp2/firmware/apps/test_i2c.c create mode 100644 usrp2/firmware/apps/test_lsadc.c create mode 100644 usrp2/firmware/apps/test_lsdac.c create mode 100644 usrp2/firmware/apps/test_phy_comm.c create mode 100644 usrp2/firmware/apps/test_ram.c create mode 100644 usrp2/firmware/apps/test_sd.c create mode 100644 usrp2/firmware/apps/timer_test.c create mode 100644 usrp2/firmware/apps/tx_standalone.c create mode 100644 usrp2/firmware/apps/txrx.c create mode 100755 usrp2/firmware/bootstrap create mode 100644 usrp2/firmware/config.guess create mode 100644 usrp2/firmware/config.h.in create mode 100644 usrp2/firmware/config.sub create mode 100644 usrp2/firmware/config/Makefile.am create mode 100644 usrp2/firmware/config/Makefile.in create mode 100644 usrp2/firmware/config/grc_build.m4 create mode 100644 usrp2/firmware/config/grc_usrp2_firmware.m4 create mode 100644 usrp2/firmware/config/grc_usrp2_stub.m4 create mode 100755 usrp2/firmware/configure create mode 100644 usrp2/firmware/configure.ac create mode 100755 usrp2/firmware/configure.gnu create mode 100755 usrp2/firmware/depcomp create mode 100644 usrp2/firmware/include/Makefile.am create mode 100644 usrp2/firmware/include/Makefile.in create mode 100644 usrp2/firmware/include/usrp2_cdefs.h create mode 100644 usrp2/firmware/include/usrp2_eth_packet.h create mode 100644 usrp2/firmware/include/usrp2_fpga_regs.h create mode 100644 usrp2/firmware/include/usrp2_i2c_addr.h create mode 100644 usrp2/firmware/include/usrp2_mac_addr.h create mode 100644 usrp2/firmware/include/usrp2_mimo_config.h create mode 100644 usrp2/firmware/include/usrp2_types.h create mode 100755 usrp2/firmware/install-sh create mode 100644 usrp2/firmware/lib/Makefile.am create mode 100644 usrp2/firmware/lib/Makefile.in create mode 100644 usrp2/firmware/lib/_exit.c create mode 100644 usrp2/firmware/lib/abort.c create mode 100644 usrp2/firmware/lib/ad9510.c create mode 100644 usrp2/firmware/lib/ad9510.h create mode 100644 usrp2/firmware/lib/ad9777.c create mode 100644 usrp2/firmware/lib/ad9777.h create mode 100644 usrp2/firmware/lib/ad9777_regs.h create mode 100644 usrp2/firmware/lib/bool.h create mode 100644 usrp2/firmware/lib/bsm12.c create mode 100644 usrp2/firmware/lib/bsm12.h create mode 100644 usrp2/firmware/lib/buffer_pool.c create mode 100644 usrp2/firmware/lib/buffer_pool.h create mode 100644 usrp2/firmware/lib/clocks.c create mode 100644 usrp2/firmware/lib/clocks.h create mode 100644 usrp2/firmware/lib/db.h create mode 100644 usrp2/firmware/lib/db_base.h create mode 100644 usrp2/firmware/lib/db_basic.c create mode 100644 usrp2/firmware/lib/db_dbsrx.c create mode 100644 usrp2/firmware/lib/db_init.c create mode 100644 usrp2/firmware/lib/db_rfx.c create mode 100644 usrp2/firmware/lib/db_tvrx.c create mode 100644 usrp2/firmware/lib/db_xcvr2450.c create mode 100644 usrp2/firmware/lib/dbsm.c create mode 100644 usrp2/firmware/lib/dbsm.h create mode 100644 usrp2/firmware/lib/eeprom.c create mode 100644 usrp2/firmware/lib/eth_mac.c create mode 100644 usrp2/firmware/lib/eth_mac.h create mode 100644 usrp2/firmware/lib/eth_mac_regs.h create mode 100644 usrp2/firmware/lib/eth_phy.h create mode 100644 usrp2/firmware/lib/ethernet.c create mode 100644 usrp2/firmware/lib/ethernet.h create mode 100644 usrp2/firmware/lib/exit.c create mode 100644 usrp2/firmware/lib/hal_io.c create mode 100644 usrp2/firmware/lib/hal_io.h create mode 100644 usrp2/firmware/lib/hal_uart.c create mode 100644 usrp2/firmware/lib/hal_uart.h create mode 100644 usrp2/firmware/lib/i2c.c create mode 100644 usrp2/firmware/lib/i2c.h create mode 100644 usrp2/firmware/lib/lsadc.c create mode 100644 usrp2/firmware/lib/lsadc.h create mode 100644 usrp2/firmware/lib/lsdac.c create mode 100644 usrp2/firmware/lib/lsdac.h create mode 100644 usrp2/firmware/lib/mdelay.c create mode 100644 usrp2/firmware/lib/mdelay.h create mode 100644 usrp2/firmware/lib/memcpy_wa.c create mode 100644 usrp2/firmware/lib/memcpy_wa.h create mode 100644 usrp2/firmware/lib/memory_map.h create mode 100644 usrp2/firmware/lib/memset_wa.c create mode 100644 usrp2/firmware/lib/memset_wa.h create mode 100644 usrp2/firmware/lib/microblaze.ld create mode 100644 usrp2/firmware/lib/nonstdio.c create mode 100644 usrp2/firmware/lib/nonstdio.h create mode 100644 usrp2/firmware/lib/pic.c create mode 100644 usrp2/firmware/lib/pic.h create mode 100644 usrp2/firmware/lib/print_buffer.c create mode 100644 usrp2/firmware/lib/print_fxpt.c create mode 100644 usrp2/firmware/lib/print_mac_addr.c create mode 100644 usrp2/firmware/lib/print_rmon_regs.c create mode 100644 usrp2/firmware/lib/print_rmon_regs.h create mode 100644 usrp2/firmware/lib/printf.c create mode 100644 usrp2/firmware/lib/sd.c create mode 100644 usrp2/firmware/lib/sd.h create mode 100644 usrp2/firmware/lib/spi.c create mode 100644 usrp2/firmware/lib/spi.h create mode 100644 usrp2/firmware/lib/stdint.h create mode 100644 usrp2/firmware/lib/stdio.h create mode 100644 usrp2/firmware/lib/u2_init.c create mode 100644 usrp2/firmware/lib/u2_init.h create mode 100644 usrp2/firmware/lib/usrp2_bytesex.h create mode 100644 usrp2/firmware/lib/wb16550.h create mode 100755 usrp2/firmware/missing create mode 100644 usrp2/host/Makefile.am create mode 100644 usrp2/host/Makefile.in create mode 100644 usrp2/host/apps/Makefile.am create mode 100644 usrp2/host/apps/Makefile.in create mode 100644 usrp2/host/apps/find_usrps.cc create mode 100644 usrp2/host/apps/gen_const.cc create mode 100644 usrp2/host/apps/gpio.cc create mode 100644 usrp2/host/apps/rx_streaming_samples.cc create mode 100644 usrp2/host/apps/test_mimo_tx.cc create mode 100644 usrp2/host/apps/tx_samples.cc create mode 100644 usrp2/host/apps/usrp2_burn_mac_addr.cc create mode 100644 usrp2/host/include/Makefile.am create mode 100644 usrp2/host/include/Makefile.in create mode 100644 usrp2/host/include/usrp2/Makefile.am create mode 100644 usrp2/host/include/usrp2/Makefile.in create mode 100644 usrp2/host/include/usrp2/copiers.h create mode 100644 usrp2/host/include/usrp2/copy_handler.h create mode 100644 usrp2/host/include/usrp2/data_handler.h create mode 100644 usrp2/host/include/usrp2/metadata.h create mode 100644 usrp2/host/include/usrp2/mimo_config.h create mode 100644 usrp2/host/include/usrp2/rx_nop_handler.h create mode 100644 usrp2/host/include/usrp2/rx_sample_handler.h create mode 100644 usrp2/host/include/usrp2/strtod_si.h create mode 100644 usrp2/host/include/usrp2/tune_result.h create mode 100644 usrp2/host/include/usrp2/usrp2.h create mode 100644 usrp2/host/include/usrp2/usrp2_cdefs.h create mode 100644 usrp2/host/lib/Makefile.am create mode 100644 usrp2/host/lib/Makefile.in create mode 100644 usrp2/host/lib/control.cc create mode 100644 usrp2/host/lib/control.h create mode 100644 usrp2/host/lib/copiers.cc create mode 100644 usrp2/host/lib/copy_handler.cc create mode 100644 usrp2/host/lib/data_handler.cc create mode 100644 usrp2/host/lib/eth_buffer.cc create mode 100644 usrp2/host/lib/eth_buffer.h create mode 100644 usrp2/host/lib/eth_common.h create mode 100644 usrp2/host/lib/ethernet.cc create mode 100644 usrp2/host/lib/ethernet.h create mode 100644 usrp2/host/lib/find.cc create mode 100644 usrp2/host/lib/open_usrp2_socket.cc create mode 100644 usrp2/host/lib/open_usrp2_socket.h create mode 100644 usrp2/host/lib/pktfilter.cc create mode 100644 usrp2/host/lib/pktfilter.h create mode 100644 usrp2/host/lib/ring.cc create mode 100644 usrp2/host/lib/ring.h create mode 100644 usrp2/host/lib/rx_nop_handler.cc create mode 100644 usrp2/host/lib/rx_sample_handler.cc create mode 100644 usrp2/host/lib/strtod_si.c create mode 100644 usrp2/host/lib/usrp2.cc create mode 100644 usrp2/host/lib/usrp2_bytesex.h create mode 100644 usrp2/host/lib/usrp2_impl.cc create mode 100644 usrp2/host/lib/usrp2_impl.h create mode 100644 usrp2/host/lib/usrp2_socket_opener.cc create mode 100644 usrp2/host/lib/usrp2_thread.cc create mode 100644 usrp2/host/lib/usrp2_thread.h create mode 100644 usrp2/host/usrp2.pc.in diff --git a/AUTHORS b/AUTHORS index e0bd7a7d..7338f614 100644 --- a/AUTHORS +++ b/AUTHORS @@ -11,3 +11,7 @@ Andrew Thomas Beck bugfixes Joshua Lackey Original GMSK implementation. Johnathan Corgan Build system, ongoing stuff, release manager Bdale Garbee Debian release packages +Tom Rondeau Mostly digital waveforms and a little bit of trouble +Nate Goergen (UMD Student) +Josh Blum OpenGL versions of graphical sinks, + The GNU Radio Companion (grc) diff --git a/INSTALL b/INSTALL index 54caf7c1..54703e43 100644 --- a/INSTALL +++ b/INSTALL @@ -1,4 +1,4 @@ -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives @@ -7,8 +7,15 @@ unlimited permission to copy, distribute and modify it. Basic Installation ================== +See also the OS specific Build Guide at: + http://gnuradio.org/trac/wiki/BuildGuide + +Please read the README too ;) + + These are generic installation instructions. + The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. diff --git a/Makefile.am b/Makefile.am index bd8ea006..1711f707 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2006 Free Software Foundation, Inc. +# Copyright 2001,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,9 +26,13 @@ include $(top_srcdir)/Makefile.common EXTRA_DIST = \ bootstrap \ configure \ + configure-cell-cross \ config.h.in \ run_tests.sh.in \ - README.hacking + Makefile.swig \ + Makefile.swig.gen.t \ + Makefile.par.gen \ + Makefile.gen.gen SUBDIRS = @build_dirs@ -DIST_SUBDIRS = @build_dirs@ @skipped_dirs@ +DIST_SUBDIRS = @build_dirs@ @skipped_dirs@ @with_dirs@ diff --git a/Makefile.common b/Makefile.common index c2625d26..b3955ac3 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1,6 +1,6 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,52 +20,112 @@ # Boston, MA 02110-1301, USA. # +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + # includes -grincludedir = $(includedir)/gnuradio +grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm + +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES=$(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM=$(RM_PROG) -f + +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; diff --git a/Makefile.common.spu b/Makefile.common.spu new file mode 100644 index 00000000..32681293 --- /dev/null +++ b/Makefile.common.spu @@ -0,0 +1,46 @@ +# -*- Makefile -*- +# +# Copyright 2007,2008 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. +# + +include $(top_srcdir)/Makefile.common + +# We're abusing automake, getting it to generate code for two +# architectures under the same tree. If you've got a better way to do +# this, please let us know + +AR=spu-ar +RANLIB=spu-ranlib +CC=spu-gcc +CCAS = spu-gcc +LD=spu-ld + +C_WARNINGS = \ + -Wall -Wextra -Wstrict-prototypes -Werror-implicit-function-declaration + +# Need to override user stuff even though it gives a warning. +# (Otherwise these contain PPE related info.) + +CPPFLAGS= +LDFLAGS= +CFLAGS= + +AM_CFLAGS = -O3 -g --std=gnu99 -fstrict-aliasing $(C_WARNINGS) + + diff --git a/Makefile.gen.gen b/Makefile.gen.gen new file mode 100644 index 00000000..a6df8b8f --- /dev/null +++ b/Makefile.gen.gen @@ -0,0 +1,70 @@ +# -*- 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. +# + +## ---------------------------------------------------------------- +## Special rule for regenerating the local Makefile.gen +## +## Define the variable 'makefile_gen_gen_command' to be the command +## that creates $(srcdir)/Makefile.gen . The rule below will check to +## make sure that it can create the generated file, and if not exits +## with an error -1. +## + +STAMPS += $(DEPDIR)/Makefile.gen-generate-generate-* + +generate-makefile $(srcdir)/Makefile.gen: +## parallel make protection; can't hurt + @trap 'rm -rf $(DEPDIR)/Makefile.gen-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/Makefile.gen-generate-lock 2>/dev/null; then \ +## This code is being executed by the first process. + rm -f $(DEPDIR)/Makefile.gen-generate-stamp; \ + rm -f $(DEPDIR)/Makefile.gen-generate-tmp; \ + touch $(DEPDIR)/Makefile.gen-generate-tmp; \ +## recreate $(srcdir)/Makefile.gen only if ... + do_recreate=0; \ + if test -f $(srcdir)/Makefile.gen; then \ +## the file exists and can be removed; or ... + if $(RM) $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + else \ +## the file doesn't exist, but can be created (e.g., by touching it). + if touch $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.gen"; \ + $(makefile_gen_gen_command); \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; \ + mv -f $(DEPDIR)/Makefile.gen-generate-tmp $(DEPDIR)/Makefile.gen-generate-stamp; \ + rmdir $(DEPDIR)/Makefile.gen-generate-lock; \ + else \ +## This code is being executed by the follower processes. +## Wait until the first process is done. + while test -d $(DEPDIR)/Makefile.gen-generate-lock; do sleep 1; done; \ +## Succeed if and only if the first process succeeded. + test -f $(DEPDIR)/Makefile.gen-generate-stamp; exit $$?; \ + fi; diff --git a/Makefile.in b/Makefile.in index 660e5e2e..8c104112 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2006 Free Software Foundation, Inc. +# Copyright 2001,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -87,25 +83,35 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ py-compile subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +120,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -133,7 +159,7 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = run_tests.sh @@ -141,10 +167,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -161,10 +190,9 @@ distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -172,9 +200,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -182,6 +217,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -194,73 +231,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -270,49 +300,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -320,15 +390,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -338,16 +551,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -356,73 +587,146 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ ACLOCAL_AMFLAGS = -I config +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = \ bootstrap \ configure \ + configure-cell-cross \ config.h.in \ run_tests.sh.in \ - README.hacking + Makefile.swig \ + Makefile.swig.gen.t \ + Makefile.par.gen \ + Makefile.gen.gen SUBDIRS = @build_dirs@ -DIST_SUBDIRS = @build_dirs@ @skipped_dirs@ +DIST_SUBDIRS = @build_dirs@ @skipped_dirs@ @with_dirs@ all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -464,7 +768,7 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @@ -487,8 +791,7 @@ clean-libtool: -rm -rf .libs _libs distclean-libtool: - -rm -f libtool -uninstall-info-am: + -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -521,8 +824,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -566,8 +868,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -592,8 +894,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -603,13 +905,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -624,24 +925,22 @@ distclean-tags: distdir: $(DISTFILES) $(am__remove_distdir) - mkdir $(distdir) - $(mkdir_p) $(distdir)/. $(distdir)/config $(distdir)/gnuradio-core $(distdir)/gnuradio-core/doc $(distdir)/gnuradio-core/src/lib/general $(distdir)/gnuradio-core/src/python/gnuradio/gr $(distdir)/gr-audio-alsa/src $(distdir)/gr-audio-jack/src $(distdir)/gr-audio-oss/src $(distdir)/gr-audio-osx/src $(distdir)/gr-audio-portaudio/src $(distdir)/gr-audio-windows/src $(distdir)/gr-gsm-fr-vocoder/src/python $(distdir)/gr-radio-astronomy/src/python $(distdir)/gr-trellis/src/python $(distdir)/gr-usrp/src $(distdir)/gr-video-sdl/src $(distdir)/usrp $(distdir)/usrp/doc $(distdir)/usrp/host/lib - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + test -d $(distdir) || mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -655,7 +954,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -663,14 +962,19 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz @@ -680,6 +984,10 @@ dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -706,6 +1014,8 @@ distcheck: dist GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -745,7 +1055,7 @@ distcheck: dist $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ @@ -784,6 +1094,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -815,12 +1126,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -841,25 +1160,37 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-generic clean-libtool clean-recursive \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-recursive distclean-tags distcleancheck distdir \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/Makefile.par.gen b/Makefile.par.gen new file mode 100644 index 00000000..22eb1a08 --- /dev/null +++ b/Makefile.par.gen @@ -0,0 +1,77 @@ +# -*- 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. +# + +STAMPS ?= +EXTRA_DIST ?= +MOSTLYCLEANFILES ?= + +## ---------------------------------------------------------------- +## Special rules for generating sources. Include this file when there +## are multiple targets ('gen_sources') being created using a single +## command. In this case, parallel build protection is required, and +## is provided by this file using a reasonably generic ruleset. For +## more info, see: +## +## http://sources.redhat.com/automake/automake.html#Multiple-Outputs +## +## If a single source is being created, then normal rules can be used; +## using this parallel protection will not hurt, but it also won't help. +## +## Define the variable 'par_gen_command' to be the command that +## creates the sources 'gen_sources' from the dependency files +## 'gen_sources_deps'. +## + +## These STAMPS will be removed upon "make clean", but are otherwise +## not used. + +STAMPS += $(DEPDIR)/stamp-sources-generate* + +## The following STAMP will be included in the archive, to show that +## this these rules have been followed. + +EXTRA_DIST += stamp-sources-generate +MOSTLYCLEANFILES += stamp-sources-generate + +stamp-sources-generate: $(gen_sources_deps) + @rm -f $(DEPDIR)/stamp-sources-generate-tmp + @touch $(DEPDIR)/stamp-sources-generate-tmp + $(par_gen_command) + @mv -f $(DEPDIR)/stamp-sources-generate-tmp $@ + +$(gen_sources): stamp-sources-generate +## Recover from the removal of $@ + @if test -f $@; then :; else \ + trap 'rm -rf $(DEPDIR)/stamp-sources-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/stamp-sources-generate-lock 2>/dev/null; then \ +## This code is being executed by the first process. + rm -f stamp-sources-generate; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-sources-generate; \ + rmdir $(DEPDIR)/stamp-sources-generate-lock; \ + else \ +## This code is being executed by the follower processes. +## Wait until the first process is done. + while test -d $(DEPDIR)/stamp-sources-generate-lock; do sleep 1; done; \ +## Succeed iff the first process succeeded. + test -f stamp-sources-generate; exit $$?; \ + fi; \ + fi; diff --git a/Makefile.swig b/Makefile.swig new file mode 100644 index 00000000..9e14835e --- /dev/null +++ b/Makefile.swig @@ -0,0 +1,117 @@ +# -*- 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. +# + +## This makefile should be included using +## include $(top_srcdir)/Makefile.swig +## in Makefile.am's which require SWIG wrapping / compilation. +## For just installing .i files, this Makefile is not required. + +## swig flags +## -w511 turns off keyword argument warning +## "-outdir $(builddir)" writes all generated output files to +## the local builddir (which should always be '.') +## In some older autotools, $(builddir) is not defined, so +## just use '.' instead. + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -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) + +## standard SWIG LD flags for library creation + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +## standard SWIG library additions for library creation + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +## standard SWIG CXXFLAGS +## This allows for code to be compiled with "-O1" instead of "-g -O2" +## for some systems, avoiding some optimization issues. + +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 +## full path to the file and full filename including extension. This +## Makefile addition will be made only if either it does not exist or +## if the top-level template has been modified. + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t +## recreate $(srcdir)/Makefile.swig.gen only if ... + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ +## the file exists and can be removed; or ... + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ +## the file doesn't exist, but can be created (e.g., by touching it). + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ +## retrieve just the filename, without path or extension + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ +## Replace the @-named strings in the template Makefile for SWIG. + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +swig_built_sources = + +## include the built Makefile.swig.gen, always the one from the +## srcdir; this must be included as the last item, because it depends +## on variables defined above. + +include $(srcdir)/Makefile.swig.gen diff --git a/Makefile.swig.gen.t b/Makefile.swig.gen.t new file mode 100644 index 00000000..c15a8172 --- /dev/null +++ b/Makefile.swig.gen.t @@ -0,0 +1,258 @@ +# -*- 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 @NAME@.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${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/[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_category ?= gnuradio/@NAME@ +@NAME@_pylibdir_category ?= $(@NAME@_pythondir_category) +@NAME@_pythondir = $(pythondir)/$(@NAME@_pythondir_category) +@NAME@_pylibdir = $(pyexecdir)/$(@NAME@_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +@NAME@_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)/@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 . + +@NAME@_swiginclude_HEADERS = \ + @NAME@.i \ + $(@NAME@_swiginclude_headers) + +@NAME@_pylib_LTLIBRARIES = \ + _@NAME@.la + +_@NAME@_la_SOURCES = \ + @NAME@.cc \ + $(@NAME@_la_swig_sources) + +_@NAME@_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(@NAME@_la_swig_libadd) + +_@NAME@_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(@NAME@_la_swig_ldflags) + +_@NAME@_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(@NAME@_la_swig_cxxflags) + +@NAME@_python_PYTHON = \ + @NAME@.py \ + $(@NAME@_python) + +## Entry rule for running SWIG + +@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; + +$(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 + +# 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)/@NAME@.d@am__quote@ diff --git a/NEWS b/NEWS index 5f6eaa6a..8bb9e275 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -18,21 +18,4 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # -changes in gnuradio-3.0rc1 relative to gnuradio-core-2.8 and related tarballs: - -* We moved the source code repository from CVS on savannah.gnu.org to - subversion on gnuradio.org -* The build system was restructured such that there is now a single - top-level configure. See ./configure --help for details. All - top-level components may be required or excluded via configure - options. By default configure includes all components for which the - dependencies are satisifed. -* There is now uniform handling for a variety of digital modulations - and demodulations including gmsk, dbpsk and dqpsk. -* dbpsk and dqpsk now work! dqpsk still has a higher error-rate than - it should. -* gr-radio-astronomy now has very cool code for observing pulsars! -* gr-trellis: new module implementing a variety of forward error -correction techniques. See gnuradio-examples/python/channel-coding -* gnuradio-core, usrp and gr-usrp now build and run under Cygwin. -* Fixed 52 bugs +See http://gnuradio.org for the latest information about this software. diff --git a/README b/README index 610ba69a..6eeb0fe8 100644 --- a/README +++ b/README @@ -1,5 +1,5 @@ # -# Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2001,2002,2003,2004,2005,2006,2007,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -22,11 +22,13 @@ Welcome to GNU Radio! -As of August 3, 2006 we have restructured the GNU Radio build process -and moved the source code repository from CVS to subversion. - Please see http://gnuradio.org/trac for the wiki, bug tracking, -and source code viewer. +and source code viewer. If you've got questions about GNU Radio, please +subscribe to the discuss-gnuradio mailing list and post your questions +there. http://gnuradio.org/trac/wiki/MailingLists +There is also a "Build Guide" in the wiki that contains OS specific +recommendations. See http://gnuradio.org/trac/wiki/BuildGuide + The bleeding edge code can be found in our subversion repository at http://gnuradio.org/svn. To checkout the latest, use this @@ -38,14 +40,6 @@ For information about subversion, please see: http://subversion.tigris.org/ - -GNU Radio is now distributed as one giant blob, instead of N smaller -blobs. We believe that this will reduce some of the build problems -people were seeing. Now you'll always get all of the code, and the -configure step will determine which components can be built on your -system. - - How to Build GNU Radio: (1) Ensure that you've satisfied the external dependencies listed @@ -57,8 +51,8 @@ How to Build GNU Radio: With the exception of SDCC, the following GNU/Linux distributions are known to come with all required dependencies - pre-packaged: Ubuntu 6.06, SuSE 10.0 (the pay version, not the - free download), Fedora Core 5. Other distribution may work too. + pre-packaged: Ubuntu 8.10, SuSE 10.0 (the pay version, not the + free download), Fedora Core 9. Other distribution may work too. We know these three are easy. The required packages may be contained on your installation CD/DVD, or may be loaded over the net. The specifics vary depending on your GNU/Linux @@ -72,7 +66,6 @@ How to Build GNU Radio: See the wiki at http://gnuradio.org/trac/wiki for details. - FIXME: update the wiki; talk about OS/X, NetBSD and MinGW too. (2) do the "usual dance" @@ -114,6 +107,19 @@ install both packages. (Most GNU/Linux systems are like this, but pkgsrc is not and instead uses -devel to indicate a package of a not-yet-released or unstable version.) +For those using pkgsrc, see gnuradio-pkg_chk.conf. Those not using +pkgsrc may also find the list useful. + +(0) GNU make + +It used to be required to have a "reasonable make", meaning GNU make, +BSD make, or perhaps Solaris make. It is now required to use GNU +make. Version 3.81 should certainly work; the intent is not to +require the bleeding edge. + +Note that the examples below are written with "make". They probably +should say "gmake", as GNU make is installed as gmake when it is not +the native make. (1) The "autotools" @@ -148,28 +154,30 @@ floating point version which we use. You should also use either the respectively. [FIXME: GNU/Linux packages of single-precision fftw are typically called ??] -In systems using pkgsrc, install math/fftwf. +In systems using pkgsrc, install math/fftwf, which provides the +single-precision libraries. -(4) Python 2.3 or later http://www.python.org -Python 2.3 or later is now required. If your system splits +(4) Python 2.5 or later http://www.python.org + +Python 2.5 or later is now required. If your system splits python into a bunch of separate packages including python-devel or libpython you'll most likely need those too. -(5) Numeric python library http://numeric.scipy.org +(5) Numpy python library http://numeric.scipy.org Provides a high performance array type for Python. -http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=1351 +http://numpy.scipy.org +http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103 -(6) The Boost C++ Libraries http://www.boost.org +(6) The Boost C++ Libraries (1.35 or later) http://www.boost.org -We use the Smart Pointer library. Most systems already have the boost -libraries available. In the unlikely event that yours doesn't, -download the source and follow the build instructions. They're -different from the normal ./configure && make +We use Smart Pointers, the thread library and a bunch of other boost stuff. +If your system doesn't have boost 1.35 or later, see README.building-boost +for additional info. (7) cppunit 1.9.14 or later. http://cppunit.sourceforge.net @@ -179,8 +187,7 @@ Unit testing framework for C++. (8) Simple Wrapper Interface Generator. http://www.swig.org -These versions are known to work: - 1.3.23, 1.3.24, 1.3.25, 1.3.27, 1.3.28, 1.3.29 +As of repository version 4045, gnuradio requires version 1.3.31 or newer. (9) SDCC: Small Device C Compiler. http://sdcc.sourceforge.net/ @@ -192,45 +199,52 @@ build the firmware for the USRP. If you don't have a USRP, don't worry about it. +(10) Guile 1.6 or 1.8 + +Scheme interpreter. http://www.gnu.org/software/guile/guile.html + + +(11) GNU Scientific Library (gsl) 1.10 or later + +The GNU Radio core library uses some routines from here. + + Optional, but nice to have: -(10) wxPython. Python binding for the wxWidgets GUI framework. Use -version 2.5.2.7 or later. Again, almost all systems have this +(12) wxPython. Python binding for the wxWidgets GUI framework. Use +version 2.8 or later. Again, almost all systems have this available. As a last resort, build it from source (not recommended!) http://www.wxpython.org -(11) xmlto version ? or later. http://cyberelk.net/tim/xmlto/index.html +(13) xmlto version ? or later. http://cyberelk.net/tim/xmlto/index.html Wrapper for XML conversion tools to ease e.g. making html from docbook. +(14) Python Cheetah extensions 2.0.0 or later +(15) Python lxml wrappers 2.0.0 or later +(16) Python gtk wrappers 2.10.0 or later + +The GNU Radio Companion application requires these additional Python libraries +to be installed. ---------------------------------------------------------------- -If you've got doxygen installed and provide the --enable-doxygen -configure option, the build process creates documentation for the -class hierarchy etc. Point your browser at +If you've got doxygen installed, the build process creates +documentation for the class hierarchy etc. Point your browser at gnuradio/gnuradio-core/doc/html/index.html -To run the examples you'll need to set PYTHONPATH. Note that the +To run the examples you may need to set PYTHONPATH. Note that the prefix and python version number in the path needs to match your installed version of python. - $ export PYTHONPATH=/usr/local/lib/python2.4/site-packages + $ export PYTHONPATH=/usr/local/lib/python2.5/site-packages You may want to add this to your shell init file (~/.bash_profile if you use bash). -Note that on Fedora Core 4 and 5 when running on X86_64 machines, -python is shippped with a strange (wrong) configuration that requires -you to add both the lib64 and lib paths to your PYTHONPATH. -E.g., - - $ export PYTHONPATH=/usr/local/lib64/python2.4/site-packages:/usr/local/lib/python2.4/site-packages - -[Don't complain to us, complain to the Fedora Core packagers.] Another handy trick if for example your fftw includes and libs are @@ -247,3 +261,4 @@ happens with pkgsrc and NetBSD. To build, tell configure to use these locations: LDFLAGS="-L/usr/pkg/lib -R/usr/pkg/lib" CPPFLAGS="-I/usr/pkg/include" ./configure --prefix=/usr/gnuradio + diff --git a/README.hacking b/README.hacking index 774a9f69..ff01a0a5 100644 --- a/README.hacking +++ b/README.hacking @@ -1,6 +1,6 @@ # -*- Outline -*- # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,20 +20,27 @@ # Boston, MA 02110-1301, USA. # - Random notes on coding conventions, some explanations about why things aren't done differently, etc, etc, +* Boost 1.35 + +Until boost 1.35 or later is common in distributions, you'll need to +build boost from source yourself. See README.building-boost. + +Also, when running make distcheck you'll need to provide the +DISTCHECK_CONFIGURE_FLAGS. E.g., + + $ make distcheck DISTCHECK_CONFIGURE_FLAGS=--with-boost=/opt/boost_1_36_0 + + * C++ and Python GNU Radio is now a hybrid system. Some parts of the system are built in C++ and some of it in Python. In general, prefer Python to C++. Signal processing primitives are still built in C++ for performance. -It is no longer possible to build user applications entirely in C++. -Essential parts of the runtime system have been moved into Python. - * C++ namespaces @@ -201,3 +208,141 @@ ccache, a compiler cache, can really speed up your builds. See http://ccache.samba.org/ Be sure to create links for gcc and g++ + + +* Standard command line options + +When writing programs that are executable from the command line, +please follow these guidelines for command line argument names (short +and long) and types of the arguments. We list them below using the +Python optparse syntax. In general, the default value should be coded +into the help string using the "... [default=%default]" syntax. + +** Mandatory options by gr_block + +*** USRP source + +Any program using a USRP source (usrp.source_*) shall include: + + add_option("", "--which-usrp", type="intx", default=0, + help="select which USRP to use [default=%default]") + + add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Rx side A or B [default=A]") + +You are free to change the default if it makes sense in your application. + + +*** USRP sink + +Any program using a USRP sink (usrp.sink_*) shall include: + + add_option("", "--which-usrp", type="intx", default=0, + help="select which USRP to use [default=%default]") + + add_option("-T", "--tx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Tx side A or B [default=A]") + +You are free to change the default if it makes sense in your application. + + +*** Audio source + +Any program using an audio source shall include: + + add_option("-I", "--audio-input", type="string", default="", + help="pcm input device name. E.g., hw:0,0 or /dev/dsp") + +The default must be "". This allows an audio module-dependent default +to be specified in the user preferences file. + + +*** Audio sink + + add_option("-O", "--audio-output", type="string", default="", + help="pcm output device name. E.g., hw:0,0 or /dev/dsp") + +The default must be "". This allows an audio module-dependent default +to be specified in the user preferences file. + + +** Standard options names by parameter + +Whenever you want an integer, use the "intx" type. This allows the +user to input decimal, hex or octal numbers. E.g., 10, 012, 0xa. + +Whenever you want a float, use the "eng_float" type. This allows the +user to input numbers with SI suffixes. E.g, 10000, 10k, 10M, 10m, 92.1M + +If your program allows the user to specify values for any of the +following parameters, please use these options to specify them: + + +To specify a frequency (typically an RF center frequency) use: + + add_option("-f", "--freq", type="eng_float", default=, + help="set frequency to FREQ [default=%default]") + + +To specify a decimation factor use: + + add_option("-d", "--decim", type="intx", default=, + help="set decimation rate to DECIM [default=%default]") + + +To specify an interpolation factor use: + + add_option("-i", "--interp", type="intx", default=, + help="set interpolation rate to INTERP [default=%default]") + + +To specify a gain setting use: + + add_option("-g", "--gain", type="eng_float", default=, + help="set gain in dB [default=%default]") + + +If your application specifies both a tx and an rx gain, use: + + add_option("", "--rx-gain", type="eng_float", default=, + help="set receive gain in dB [default=%default]") + + add_option("", "--tx-gain", type="eng_float", default=, + help="set transmit gain in dB [default=%default]") + + +To specify the number of channels of something use: + + add_option("-n", "--nchannels", type="intx", default=1, + help="specify number of channels [default=%default]") + + +To specify an output filename use: + + add_option("-o", "--output-filename", type="string", default=, + help="specify output-filename [default=%default]") + + +To specify a rate use: + + add_option("-r", "--bit-rate", type="eng_float", default=, + help="specify bit-rate [default=%default]") + or + + add_option("-r", "--sample-rate", type="eng_float", default=, + help="specify sample-rate [default=%default]") + + +If your application has a verbose option, use: + + add_option('-v', '--verbose', action="store_true", default=False, + help="verbose output") + + +If your application allows the user to specify the "fast USB" options, use: + + add_option("", "--fusb-block-size", type="intx", default=0, + help="specify fast usb block size [default=%default]") + + add_option("", "--fusb-nblocks", type="intx", default=0, + help="specify number of fast usb blocks [default=%default]") diff --git a/aclocal.m4 b/aclocal.m4 index a72a03cc..394628c1 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.10.2 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,6376 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, +[m4_warning([this file was generated for autoconf 2.63. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL - - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -m4_ifdef([AC_PROVIDE_IFELSE], - [], - [m4_define([AC_PROVIDE_IFELSE], - [m4_ifdef([AC_PROVIDE_$1], - [$2], [$3])])]) - - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX -dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. - AC_PROVIDE_IFELSE([AC_PROG_CXX], - [AC_LIBTOOL_CXX], - [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX - ])]) -dnl And a similar setup for Fortran 77 support - AC_PROVIDE_IFELSE([AC_PROG_F77], - [AC_LIBTOOL_F77], - [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 -])]) - -dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. -dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run -dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. - AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [ifdef([AC_PROG_GCJ], - [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([A][M_PROG_GCJ], - [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([LT_AC_PROG_GCJ], - [define([LT_AC_PROG_GCJ], - defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) -])])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl -AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl -AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.50)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], - [AC_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_LINKER_BOILERPLATE - - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; - ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], - [$2=no - ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $rm conftest* -]) - -if test x"[$]$2" = xyes; then - ifelse([$5], , :, [$5]) -else - ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - ifelse([$4], , :, [$4]) -else - ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# ------------------ -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# --------------------------------------------------------------------- -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ---------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_AC_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_AC_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) -fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_ARG_WITH([tags], - [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], - [include additional configurations @<:@automatic@:>@])], - [tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - AC_MSG_WARN([output file `$ofile' does not exist]) - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) - else - AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in - "") ;; - *) AC_MSG_ERROR([invalid tag name: $tagname]) - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - AC_MSG_ERROR([tag name \"$tagname\" already exists]) - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_LIBTOOL_LANG_CXX_CONFIG - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - AC_LIBTOOL_LANG_F77_CONFIG - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - AC_LIBTOOL_LANG_GCJ_CONFIG - else - tagname="" - fi - ;; - - RC) - AC_LIBTOOL_LANG_RC_CONFIG - ;; - - *) - AC_MSG_ERROR([Unsupported tag name: $tagname]) - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - AC_MSG_ERROR([unable to update list of available tagged configurations.]) - fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], - [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -# set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], - [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], - [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognise shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognise a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], - [AC_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix3*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!). If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, lt_dlinit, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLINCL= - fi - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_CXX -# -------------- -# enable support for C++ libraries -AC_DEFUN([AC_LIBTOOL_CXX], -[AC_REQUIRE([_LT_AC_LANG_CXX]) -])# AC_LIBTOOL_CXX - - -# _LT_AC_LANG_CXX -# --------------- -AC_DEFUN([_LT_AC_LANG_CXX], -[AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) -])# _LT_AC_LANG_CXX - -# _LT_AC_PROG_CXXCPP -# ------------------ -AC_DEFUN([_LT_AC_PROG_CXXCPP], -[ -AC_REQUIRE([AC_PROG_CXX]) -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -fi -])# _LT_AC_PROG_CXXCPP - -# AC_LIBTOOL_F77 -# -------------- -# enable support for Fortran 77 libraries -AC_DEFUN([AC_LIBTOOL_F77], -[AC_REQUIRE([_LT_AC_LANG_F77]) -])# AC_LIBTOOL_F77 - - -# _LT_AC_LANG_F77 -# --------------- -AC_DEFUN([_LT_AC_LANG_F77], -[AC_REQUIRE([AC_PROG_F77]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) -])# _LT_AC_LANG_F77 - - -# AC_LIBTOOL_GCJ -# -------------- -# enable support for GCJ libraries -AC_DEFUN([AC_LIBTOOL_GCJ], -[AC_REQUIRE([_LT_AC_LANG_GCJ]) -])# AC_LIBTOOL_GCJ - - -# _LT_AC_LANG_GCJ -# --------------- -AC_DEFUN([_LT_AC_LANG_GCJ], -[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], - [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], - [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], - [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) -])# _LT_AC_LANG_GCJ - - -# AC_LIBTOOL_RC -# ------------- -# enable support for Windows resource files -AC_DEFUN([AC_LIBTOOL_RC], -[AC_REQUIRE([LT_AC_PROG_RC]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}\n' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF - -# Report which library types will actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_LANG_CXX_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) -AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], -[AC_LANG_PUSH(C++) -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Dependencies to place before and after the object being linked: -_LT_AC_TAGVAR(predep_objects, $1)= -_LT_AC_TAGVAR(postdep_objects, $1)= -_LT_AC_TAGVAR(predeps, $1)= -_LT_AC_TAGVAR(postdeps, $1)= -_LT_AC_TAGVAR(compiler_lib_search_path, $1)= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' -else - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - AC_PROG_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -_LT_AC_TAGVAR(ld_shlibs, $1)=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - freebsd-elf*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - ;; - gnu*) - ;; - hpux9*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - ;; - *) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - interix3*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - m88k*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; -esac -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_AC_TAGVAR(GCC, $1)="$GXX" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_POSTDEP_PREDEP($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -])# AC_LIBTOOL_LANG_CXX_CONFIG - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# 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 of the License, 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 program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -]) -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[[ABCDGIRSTW]]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) - ifelse([$1],[CXX],[ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - newsos6) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then - AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), - [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -ifelse([$1],[CXX],[ - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - _LT_AC_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -],[ - runpath_var= - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)= - _LT_AC_TAGVAR(archive_expsym_cmds, $1)= - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown - _LT_AC_TAGVAR(hardcode_automatic, $1)=no - _LT_AC_TAGVAR(module_cmds, $1)= - _LT_AC_TAGVAR(module_expsym_cmds, $1)= - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_AC_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - _LT_CC_BASENAME([$compiler]) - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix3*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=no - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - # see comment about different semantics on the GNU ld section - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - bsdi[[45]]*) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' - _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_AC_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -AC_DEFUN([LT_AC_PROG_GCJ], -[AC_CHECK_TOOL(GCJ, gcj, no) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS) -]) - -AC_DEFUN([LT_AC_PROG_RC], -[AC_CHECK_TOOL(RC, windres, no) -]) - -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_MSG_RESULT([$SED]) -]) - -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6390,24 +29,41 @@ AC_MSG_RESULT([$SED]) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10.2], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.10.2])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_PROG_AS # ---------- @@ -6418,6 +74,7 @@ test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -6475,14 +132,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6491,8 +148,10 @@ AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6506,15 +165,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 9 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6542,6 +200,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -6607,6 +266,7 @@ AC_CACHE_CHECK([dependency style of $depcc], depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then @@ -6659,61 +319,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -6744,14 +417,14 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 13 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -6768,16 +441,20 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl +[AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -6797,6 +474,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -6832,6 +512,10 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) @@ -6845,16 +529,17 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # @@ -6867,7 +552,7 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -6945,14 +630,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -6968,6 +653,7 @@ AC_SUBST($1)]) # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then @@ -6978,7 +664,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6986,70 +672,33 @@ fi # AM_PROG_MKDIR_P # --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -# -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). -# -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. -# -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) +# Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -7066,7 +715,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -7188,7 +837,13 @@ python2.1 python2.0 python1.6 python1.5]) dnl doesn't work. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], - [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || + [if test "x$prefix" = xNONE + then + py_prefix_arg= + else + py_prefix_arg=",prefix='$prefix'" + fi + am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0$py_prefix_arg)" -n -q install $py_prefix_arg 2>/dev/null || echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) @@ -7205,8 +860,14 @@ python2.1 python2.0 python1.6 python1.5]) dnl doesn't work. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], - [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || - echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`]) + [if test "x$exec_prefix" = xNONE + then + py_exec_prefix_arg=$py_prefix_arg + else + py_exec_prefix_arg=",prefix='$exec_prefix'" + fi + am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0$py_exec_prefix_arg)" -n -q install $py_exec_prefix_arg 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"`]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) @@ -7315,9 +976,21 @@ dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. @@ -7414,25 +1087,35 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([config/acx_cblas.m4]) m4_include([config/acx_pthread.m4]) +m4_include([config/ax_boost_base.m4]) +m4_include([config/ax_boost_date_time.m4]) +m4_include([config/ax_boost_program_options.m4]) +m4_include([config/ax_boost_thread.m4]) m4_include([config/cppunit.m4]) -m4_include([config/gr_boost.m4]) m4_include([config/gr_check_createfilemapping.m4]) +m4_include([config/gr_check_memalign.m4]) m4_include([config/gr_check_shm_open.m4]) m4_include([config/gr_doxygen.m4]) m4_include([config/gr_fortran.m4]) m4_include([config/gr_gprof.m4]) +m4_include([config/gr_lib64.m4]) m4_include([config/gr_libgnuradio_core_extra_ldflags.m4]) m4_include([config/gr_no_undefined.m4]) m4_include([config/gr_omnithread.m4]) m4_include([config/gr_pwin32.m4]) m4_include([config/gr_python.m4]) +m4_include([config/gr_qwt.m4]) +m4_include([config/gr_qwtplot3d.m4]) m4_include([config/gr_scripting.m4]) m4_include([config/gr_set_md_cpu.m4]) +m4_include([config/gr_subversion.m4]) m4_include([config/gr_swig.m4]) m4_include([config/gr_sysv_shm.m4]) -m4_include([config/gr_x86_64.m4]) m4_include([config/grc_build.m4]) +m4_include([config/grc_docs.m4]) +m4_include([config/grc_gcell.m4]) m4_include([config/grc_gnuradio_core.m4]) m4_include([config/grc_gnuradio_examples.m4]) m4_include([config/grc_gr_audio_alsa.m4]) @@ -7441,16 +1124,36 @@ m4_include([config/grc_gr_audio_oss.m4]) m4_include([config/grc_gr_audio_osx.m4]) m4_include([config/grc_gr_audio_portaudio.m4]) m4_include([config/grc_gr_audio_windows.m4]) +m4_include([config/grc_gr_cvsd_vocoder.m4]) +m4_include([config/grc_gr_gcell.m4]) +m4_include([config/grc_gr_gpio.m4]) m4_include([config/grc_gr_gsm_fr_vocoder.m4]) +m4_include([config/grc_gr_pager.m4]) +m4_include([config/grc_gr_qtgui.m4]) +m4_include([config/grc_gr_radar_mono.m4]) m4_include([config/grc_gr_radio_astronomy.m4]) +m4_include([config/grc_gr_sounder.m4]) m4_include([config/grc_gr_trellis.m4]) m4_include([config/grc_gr_usrp.m4]) +m4_include([config/grc_gr_usrp2.m4]) +m4_include([config/grc_gr_utils.m4]) m4_include([config/grc_gr_video_sdl.m4]) m4_include([config/grc_gr_wxgui.m4]) +m4_include([config/grc_grc.m4]) +m4_include([config/grc_gruel.m4]) +m4_include([config/grc_mblock.m4]) +m4_include([config/grc_omnithread.m4]) +m4_include([config/grc_pmt.m4]) m4_include([config/grc_usrp.m4]) +m4_include([config/grc_usrp2.m4]) m4_include([config/lf_cc.m4]) m4_include([config/lf_cxx.m4]) m4_include([config/lf_warnings.m4]) +m4_include([config/libtool.m4]) +m4_include([config/ltoptions.m4]) +m4_include([config/ltsugar.m4]) +m4_include([config/ltversion.m4]) +m4_include([config/lt~obsolete.m4]) m4_include([config/macosx_audiounit.m4]) m4_include([config/mkstemp.m4]) m4_include([config/onceonly.m4]) diff --git a/bootstrap b/bootstrap index 525a6b06..463ff165 100755 --- a/bootstrap +++ b/bootstrap @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2001,2005 Free Software Foundation, Inc. +# Copyright 2001,2005,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,4 +26,8 @@ aclocal -I config autoconf autoheader libtoolize --automake -automake --add-missing +automake --add-missing -Wno-portability -Wno-override -Wnone +#automake --add-missing -Wno-portability + +# Run bootstrap in any subprojects +(cd usrp2/firmware ; ./bootstrap) diff --git a/config.guess b/config.guess index 02ef1910..f32079ab 100755 --- a/config.guess +++ b/config.guess @@ -1,14 +1,14 @@ #! /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 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. -timestamp='2007-07-22' +timestamp='2008-01-23' # 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 -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -56,8 +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 -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." @@ -532,7 +532,7 @@ EOF echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[45]) + *: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 @@ -799,6 +799,9 @@ EOF EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks @@ -833,7 +836,14 @@ EOF echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -954,8 +964,8 @@ EOF x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so @@ -1474,9 +1484,9 @@ This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be diff --git a/config.h.in b/config.h.in index df456fc1..06155052 100644 --- a/config.h.in +++ b/config.h.in @@ -1,16 +1,16 @@ /* config.h.in. Generated from configure.ac by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define as the alignment of malloc if known; otherwise 0. */ +#undef ALIGNED_MALLOC + /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END -/* Define if for loop scoping is broken */ -#undef CXX_HAS_BUGGY_FOR_LOOPS - -/* Define if C++ is missing bool type */ -#undef CXX_HAS_NO_BOOL - /* Define if has std::isnan */ #undef CXX_HAS_STD_ISNAN @@ -24,15 +24,33 @@ */ #undef HAVE_ALLOCA_H +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + /* Define to 1 if you have the header file. */ #undef HAVE_AUDIOTOOLBOX_AUDIOTOOLBOX_H /* Define to 1 if you have the header file. */ #undef HAVE_AUDIOUNIT_AUDIOUNIT_H +/* Define if the Boost headers are available */ +#undef HAVE_BOOST + +/* Define if the boost_date_time library is available */ +#undef HAVE_BOOST_DATE_TIME + +/* Define if the boost_program_options library is available */ +#undef HAVE_BOOST_PROGRAM_OPTIONS + +/* Define if the boost_thread library is available */ +#undef HAVE_BOOST_THREAD + /* Define to 1 if you have the header file. */ #undef HAVE_BYTESWAP_H +/* Define if you have a CBLAS library. */ +#undef HAVE_CBLAS + /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME @@ -46,6 +64,9 @@ */ #undef HAVE_DECL_GETENV +/* Define to 1 if you have the header file. */ +#undef HAVE_DEV_PPBUS_PPI_H + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -91,12 +112,21 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_COMPILER_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_IF_PACKET_H + /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_PPDEV_H +/* Define to 1 if your system has 'log2'. */ +#undef HAVE_LOG2 + /* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H @@ -112,9 +142,21 @@ /* Define to 1 if you have the `nanosleep' function. */ #undef HAVE_NANOSLEEP +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the `posix_memalign' function. */ +#undef HAVE_POSIX_MEMALIGN + /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD +/* Define to 1 if you have the `pthread_setschedparam' function. */ +#undef HAVE_PTHREAD_SETSCHEDPARAM + +/* Define to 1 if you have the `pthread_sigmask' function. */ +#undef HAVE_PTHREAD_SIGMASK + /* Define to 1 if you have the header file. */ #undef HAVE_PYTHON_H @@ -127,6 +169,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SCHED_H +/* Define to 1 if you have the `sched_setaffinity' function. */ +#undef HAVE_SCHED_SETAFFINITY + /* Define to 1 if you have the `sched_setscheduler' function. */ #undef HAVE_SCHED_SETSCHEDULER @@ -139,6 +184,12 @@ /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION +/* Define to 1 if you have the header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if you have the `sigprocmask' function. */ +#undef HAVE_SIGPROCMASK + /* Define to 1 if your system has `sincos'. */ #undef HAVE_SINCOS @@ -193,12 +244,24 @@ /* Define to 1 if you have the `strspn' function. */ #undef HAVE_STRSPN +/* Define to 1 if `cmcred_uid' is member of `struct cmsgcred'. */ +#undef HAVE_STRUCT_CMSGCRED_CMCRED_UID + +/* Define to 1 if `msg_accrights' is member of `struct msghdr'. */ +#undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS + +/* Define to 1 if `msg_control' is member of `struct msghdr'. */ +#undef HAVE_STRUCT_MSGHDR_MSG_CONTROL + /* Define to 1 if the system has the type `struct timespec'. */ #undef HAVE_STRUCT_TIMESPEC /* Define to 1 if the system has the type `struct timezone'. */ #undef HAVE_STRUCT_TIMEZONE +/* Define to 1 if `uid' is member of `struct ucred'. */ +#undef HAVE_STRUCT_UCRED_UID + /* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF @@ -220,15 +283,24 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SHM_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSCALL_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_UN_H + /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H @@ -247,6 +319,12 @@ /* Define to 1 if you have the `usleep' function. */ #undef HAVE_USLEEP +/* Define to 1 if you have the `valloc' function. */ +#undef HAVE_VALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_VEC_TYPES_H + /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF @@ -262,18 +340,13 @@ /* Define to 1 if you have the `__secure_getenv' function. */ #undef HAVE___SECURE_GETENV +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + /* Define if mkdir accepts only one arg */ #undef MKDIR_TAKES_ONE_ARG -/* Define to disable asserts (don't doit!) */ -#undef NDEBUG - -/* Define to 1 to enable NT thread */ -#undef OMNITHREAD_NT - -/* Define to 1 to enable pthread */ -#undef OMNITHREAD_POSIX - /* Name of package */ #undef PACKAGE @@ -292,18 +365,10 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* Define to 1 if the C compiler supports function prototypes. */ -#undef PROTOTYPES - -/* Define to the necessary symbol if this constant uses a non-standard name on +/* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE -/* Define to 1 if the `setvbuf' function takes the buffering type as its - second argument and the buffer pointer as the third, as on System V before - release 3. */ -#undef SETVBUF_REVERSED - /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. @@ -324,18 +389,41 @@ /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN - -/* Define to 1 if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif #endif /* Define to 1 if on MINIX. */ @@ -348,9 +436,6 @@ /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE -/* Define like PROTOTYPES; this can be used by system headers. */ -#undef __PROTOTYPES - /* Define to empty if `const' does not conform to ANSI C. */ #undef const @@ -366,30 +451,6 @@ /* Define to `unsigned int' if does not define. */ #undef size_t -// Workaround for compilers with buggy for-loop scoping -// That's quite a few compilers actually including recent versions of -// Dec Alpha cxx, HP-UX CC and SGI CC. -// The trivial "if" statement provides the correct scoping to the -// for loop - -#ifdef CXX_HAS_BUGGY_FOR_LOOPS -#undef for -#define for if(1) for -#endif - - -// If the C++ compiler we use doesn't have bool, then -// the following is a near-perfect work-around. -// You must make sure your code does not depend on "int" and "bool" -// being two different types, in overloading for instance. - -#ifdef CXX_HAS_NO_BOOL -#define bool int -#define true 1 -#define false 0 -#endif - - #ifndef HAVE_TRUNC #include @@ -407,6 +468,10 @@ inline static double exp10(double x) } #endif +#ifdef HAVE_WINDOWS_H +#define NOMINMAX +#endif + /* Define missing prototypes, implemented in replacement lib */ diff --git a/config.sub b/config.sub index 97a7b086..6759825a 100755 --- a/config.sub +++ b/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 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. -timestamp='2007-06-28' +timestamp='2008-01-16' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -12,7 +12,7 @@ timestamp='2007-06-28' # # 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 -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -72,8 +72,8 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -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." @@ -369,10 +369,14 @@ case $basic_machine in | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-*) ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) @@ -443,6 +447,14 @@ case $basic_machine in basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; c90) basic_machine=c90-cray os=-unicos @@ -668,6 +680,14 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -813,6 +833,14 @@ case $basic_machine in basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; @@ -1021,6 +1049,10 @@ case $basic_machine in basic_machine=tic6x-unknown os=-coff ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; tx39) basic_machine=mipstx39-unknown ;; diff --git a/config/Makefile.am b/config/Makefile.am index 2072a50f..881a64d8 100644 --- a/config/Makefile.am +++ b/config/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2006 Free Software Foundation, Inc. +# Copyright 2001,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,33 +26,63 @@ m4datadir = $(datadir)/aclocal # List your m4 macros here m4macros = \ + acx_cblas.m4 \ acx_pthread.m4 \ + ax_boost_base.m4 \ + ax_boost_date_time.m4 \ + ax_boost_filesystem.m4 \ + ax_boost_iostreams.m4 \ + ax_boost_program_options.m4 \ + ax_boost_python.m4 \ + ax_boost_regex.m4 \ + ax_boost_serialization.m4 \ + ax_boost_signals.m4 \ + ax_boost_system.m4 \ + ax_boost_test_exec_monitor.m4 \ + ax_boost_thread.m4 \ + ax_boost_unit_test_framework.m4 \ + ax_boost_wserialization.m4 \ bnv_have_qt.m4 \ cppunit.m4 \ - gr_boost.m4 \ grc_build.m4 \ + grc_docs.m4 \ + grc_gcell.m4 \ grc_gnuradio_core.m4 \ grc_gnuradio_examples.m4 \ + grc_grc.m4 \ + grc_gr_atsc.m4 \ grc_gr_audio_alsa.m4 \ grc_gr_audio_jack.m4 \ grc_gr_audio_oss.m4 \ grc_gr_audio_osx.m4 \ grc_gr_audio_portaudio.m4 \ grc_gr_audio_windows.m4 \ + grc_gr_comedi.m4 \ + grc_gr_gcell.m4 \ + grc_gr_gpio.m4 \ grc_gr_gsm_fr_vocoder.m4 \ + grc_gr_radar_mono.m4 \ grc_gr_radio_astronomy.m4 \ + grc_gr_sounder.m4 \ grc_gr_trellis.m4 \ grc_gr_usrp.m4 \ grc_gr_video_sdl.m4 \ grc_gr_wxgui.m4 \ + grc_mblock.m4 \ + grc_gruel.m4 \ gr_check_createfilemapping.m4 \ gr_check_mc4020.m4 \ gr_check_shm_open.m4 \ gr_check_usrp.m4 \ + grc_pmt.m4 \ grc_usrp.m4 \ + grc_usrp2.m4 \ + grc_gr_msdd6000.m4 \ gr_doxygen.m4 \ gr_fortran.m4 \ + gr_gcell.m4 \ gr_gprof.m4 \ + gr_lib64.m4 \ gr_libgnuradio_core_extra_ldflags.m4 \ gr_no_undefined.m4 \ gr_omnithread.m4 \ @@ -61,9 +91,10 @@ m4macros = \ gr_require_mc4020.m4 \ gr_scripting.m4 \ gr_set_md_cpu.m4 \ + gr_standalone.m4 \ + gr_subversion.m4 \ gr_swig.m4 \ gr_sysv_shm.m4 \ - gr_x86_64.m4 \ lf_cc.m4 \ lf_cxx.m4 \ lf_warnings.m4 \ diff --git a/config/Makefile.in b/config/Makefile.in index c8af16f3..4ce6f609 100644 --- a/config/Makefile.in +++ b/config/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2006 Free Software Foundation, Inc. +# Copyright 2001,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = config ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -137,10 +163,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -148,9 +173,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -158,6 +190,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -170,73 +204,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -246,49 +273,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -296,15 +363,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -314,16 +524,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -332,96 +560,195 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT # Install m4 macros in this directory m4datadir = $(datadir)/aclocal # List your m4 macros here m4macros = \ + acx_cblas.m4 \ acx_pthread.m4 \ + ax_boost_base.m4 \ + ax_boost_date_time.m4 \ + ax_boost_filesystem.m4 \ + ax_boost_iostreams.m4 \ + ax_boost_program_options.m4 \ + ax_boost_python.m4 \ + ax_boost_regex.m4 \ + ax_boost_serialization.m4 \ + ax_boost_signals.m4 \ + ax_boost_system.m4 \ + ax_boost_test_exec_monitor.m4 \ + ax_boost_thread.m4 \ + ax_boost_unit_test_framework.m4 \ + ax_boost_wserialization.m4 \ bnv_have_qt.m4 \ cppunit.m4 \ - gr_boost.m4 \ grc_build.m4 \ + grc_docs.m4 \ + grc_gcell.m4 \ grc_gnuradio_core.m4 \ grc_gnuradio_examples.m4 \ + grc_grc.m4 \ + grc_gr_atsc.m4 \ grc_gr_audio_alsa.m4 \ grc_gr_audio_jack.m4 \ grc_gr_audio_oss.m4 \ grc_gr_audio_osx.m4 \ grc_gr_audio_portaudio.m4 \ grc_gr_audio_windows.m4 \ + grc_gr_comedi.m4 \ + grc_gr_gcell.m4 \ + grc_gr_gpio.m4 \ grc_gr_gsm_fr_vocoder.m4 \ + grc_gr_radar_mono.m4 \ grc_gr_radio_astronomy.m4 \ + grc_gr_sounder.m4 \ grc_gr_trellis.m4 \ grc_gr_usrp.m4 \ grc_gr_video_sdl.m4 \ grc_gr_wxgui.m4 \ + grc_mblock.m4 \ + grc_gruel.m4 \ gr_check_createfilemapping.m4 \ gr_check_mc4020.m4 \ gr_check_shm_open.m4 \ gr_check_usrp.m4 \ + grc_pmt.m4 \ grc_usrp.m4 \ + grc_usrp2.m4 \ + grc_gr_msdd6000.m4 \ gr_doxygen.m4 \ gr_fortran.m4 \ + gr_gcell.m4 \ gr_gprof.m4 \ + gr_lib64.m4 \ gr_libgnuradio_core_extra_ldflags.m4 \ gr_no_undefined.m4 \ gr_omnithread.m4 \ @@ -430,9 +757,10 @@ m4macros = \ gr_require_mc4020.m4 \ gr_scripting.m4 \ gr_set_md_cpu.m4 \ + gr_standalone.m4 \ + gr_subversion.m4 \ gr_swig.m4 \ gr_sysv_shm.m4 \ - gr_x86_64.m4 \ lf_cc.m4 \ lf_cxx.m4 \ lf_warnings.m4 \ @@ -454,8 +782,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -485,10 +813,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -497,23 +821,21 @@ CTAGS: distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -524,6 +846,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile @@ -543,6 +868,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -558,7 +884,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -572,12 +898,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -596,18 +930,32 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/config/acx_cblas.m4 b/config/acx_cblas.m4 new file mode 100644 index 00000000..38d85982 --- /dev/null +++ b/config/acx_cblas.m4 @@ -0,0 +1,227 @@ +# =========================================================================== +# http://autoconf-archive.cryp.to/acx_blas.html +# =========================================================================== +# +# SYNOPSIS +# +# ACX_CBLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro looks for a library that implements the CBLAS linear-algebra +# interface (see http://www.netlib.org/blas/). On success, it sets the +# CBLAS_LIBS output variable to hold the requisite library linkages. +# +# To link with BLAS, you should link with: +# +# $CBLAS_LIBS $LIBS +# +# Many libraries are searched for, from ATLAS to CXML to ESSL. The user +# may also use --with-blas= in order to use some specific CBLAS +# library . In order to link successfully, however, be aware that you +# will probably need to use the same Fortran compiler (which can be set +# via the F77 env. var.) as was used to compile the BLAS library. +# +# ACTION-IF-FOUND is a list of shell commands to run if a CBLAS library is +# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is +# not found. If ACTION-IF-FOUND is not specified, the default action will +# define HAVE_CBLAS. +# +# This macro requires autoconf 2.50 or later. +# +# LAST MODIFICATION +# +# 2008-04-12 +# +# COPYLEFT +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2008 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 3 of the License, 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 program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Macro Archive. When you make and +# distribute a modified version of the Autoconf Macro, you may extend this +# special exception to the GPL to apply to your modified version as well. + +AC_DEFUN([ACX_CBLAS], [ +AC_PREREQ(2.50) +dnl AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) +AC_REQUIRE([AC_CANONICAL_HOST]) +acx_cblas_ok=no + +AC_ARG_WITH(cblas, + [AC_HELP_STRING([--with-cblas=], [use CBLAS library ])]) +case $with_cblas in + yes | "") ;; + no) acx_cblas_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) CBLAS_LIBS="$with_cblas" ;; + *) CBLAS_LIBS="-l$with_cblas" ;; +esac + + +acx_cblas_save_LIBS="$LIBS" +LIBS="$LIBS $FLIBS" + +# First, check CBLAS_LIBS environment variable +if test $acx_cblas_ok = no; then +if test "x$CBLAS_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$CBLAS_LIBS $LIBS" + AC_MSG_CHECKING([for cblas_sgemm in $CBLAS_LIBS]) + AC_TRY_LINK_FUNC(cblas_sgemm, [acx_cblas_ok=yes], [CBLAS_LIBS=""]) + AC_MSG_RESULT($acx_cblas_ok) + LIBS="$save_LIBS" +fi +fi + +# CBLAS linked to by default? (happens on some supercomputers) +if test $acx_cblas_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS" + AC_CHECK_FUNC(cblas_sgemm, [acx_cblas_ok=yes]) + LIBS="$save_LIBS" +fi + +# CBLAS in ATLAS library? (http://math-atlas.sourceforge.net/) +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(atlas, ATL_xerbla, + [AC_CHECK_LIB(cblas, cblas_dgemm, + [acx_cblas_ok=yes + CBLAS_LIBS="-lcblas -latlas"], + [], [-latlas])], + [], [-latlas]) +fi + +# CBLAS in ATLAS library in /usr/lib64/atlas (if not cross-compiling) +if test $acx_cblas_ok = no && test "$cross_compiling" = no; then + unset ac_cv_lib_atlas_ATL_xerbla + unset ac_cv_lib_cblas_cblas_dgemm + AC_CHECK_LIB(atlas, ATL_xerbla, + [AC_CHECK_LIB(cblas, cblas_dgemm, + [acx_cblas_ok=yes + CBLAS_LIBS="-L/usr/lib64/atlas -lcblas -latlas"], + [], [-L/usr/lib64/atlas -latlas])], + [], [-L/usr/lib64/atlas -latlas]) +fi + +# CBLAS in ATLAS library in /usr/lib/atlas (if not cross-compiling) +if test $acx_cblas_ok = no && test "$cross_compiling" = no; then + unset ac_cv_lib_atlas_ATL_xerbla + unset ac_cv_lib_cblas_cblas_dgemm + AC_CHECK_LIB(atlas, ATL_xerbla, + [AC_CHECK_LIB(cblas, cblas_dgemm, + [acx_cblas_ok=yes + CBLAS_LIBS="-L/usr/lib/atlas -lcblas -latlas"], + [], [-L/usr/lib/atlas -latlas])], + [], [-L/usr/lib/atlas -latlas]) +fi + + +# CBLAS in PhiPACK libraries? (requires generic BLAS lib, too) +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(cblas, cblas_sgemm, + [AC_CHECK_LIB(dgemm, cblas_dgemm, + [AC_CHECK_LIB(sgemm, cblas_sgemm, + [acx_cblas_ok=yes; CBLAS_LIBS="-lsgemm -ldgemm -lblas"], + [], [-lblas])], + [], [-lblas])]) +fi + +# BLAS in Intel MKL library? +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(mkl, cblas_sgemm, [acx_cblas_ok=yes;CBLAS_LIBS="-lmkl"]) +fi + +# CBLAS in Apple vecLib library? +if test $acx_cblas_ok = no; then + save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" + AC_CHECK_FUNC(cblas_sgemm, [acx_cblas_ok=yes;CBLAS_LIBS="-framework vecLib"]) + LIBS="$save_LIBS" +fi + +# CBLAS in Alpha CXML library? +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(cxml, cblas_sgemm, [acx_cblas_ok=yes;CBLAS_LIBS="-lcxml"]) +fi + +# CBLAS in Alpha DXML library? (now called CXML, see above) +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(dxml, cblas_sgemm, [acx_cblas_ok=yes;CBLAS_LIBS="-ldxml"]) +fi + +# CBLAS in Sun Performance library? +if test $acx_cblas_ok = no; then + if test "x$GCC" != xyes; then # only works with Sun CC + AC_CHECK_LIB(sunmath, acosp, + [AC_CHECK_LIB(sunperf, cblas_sgemm, + [CBLAS_LIBS="-xlic_lib=sunperf -lsunmath" + acx_cblas_ok=yes],[],[-lsunmath])]) + fi +fi + +# CBLAS in SCSL library? (SGI/Cray Scientific Library) +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(scs, cblas_sgemm, [acx_cblas_ok=yes; CBLAS_LIBS="-lscs"]) +fi + +# CBLAS in SGIMATH library? +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(complib.sgimath, cblas_sgemm, + [acx_cblas_ok=yes; CBLAS_LIBS="-lcomplib.sgimath"]) +fi + +# CBLAS in IBM ESSL library? (requires generic CBLAS lib, too) +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(cblas, cblas_sgemm, + [AC_CHECK_LIB(essl, cblas_sgemm, + [acx_cblas_ok=yes; CBLAS_LIBS="-lessl -lblas"], + [], [-lblas $FLIBS])]) +fi + +# Generic CBLAS library? +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(cblas, cblas_sgemm, [acx_cblas_ok=yes; CBLAS_LIBS="-lcblas"]) +fi + +# Generic BLAS library? +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(blas, cblas_sgemm, [acx_cblas_ok=yes; CBLAS_LIBS="-lblas"]) +fi + +# GSL generic CBLAS library? +if test $acx_cblas_ok = no; then + AC_CHECK_LIB(gslcblas, cblas_sgemm, [acx_cblas_ok=yes; CBLAS_LIBS="-lgslcblas"]) +fi + +AC_SUBST(CBLAS_LIBS) + +LIBS="$acx_cblas_save_LIBS" + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_cblas_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_CBLAS,1,[Define if you have a CBLAS library.]),[$1]) + : +else + acx_cblas_ok=no + $2 +fi +])dnl ACX_CBLAS diff --git a/config/acx_pthread.m4 b/config/acx_pthread.m4 index d318ab01..eb09f5ac 100644 --- a/config/acx_pthread.m4 +++ b/config/acx_pthread.m4 @@ -1,6 +1,84 @@ -dnl Available from the GNU Autoconf Macro Archive at: -dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html -dnl +# =========================================================================== +# http://autoconf-archive.cryp.to/acx_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# LAST MODIFICATION +# +# 2008-04-12 +# +# COPYLEFT +# +# Copyright (c) 2008 Steven G. Johnson +# +# 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 3 of the License, 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 program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Macro Archive. When you make and +# distribute a modified version of the Autoconf Macro, you may extend this +# special exception to the GPL to apply to your modified version as well. + AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE @@ -37,9 +115,10 @@ fi # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all. +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt" +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: @@ -56,21 +135,23 @@ acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -m # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthread or + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: - acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; esac @@ -87,6 +168,13 @@ for flag in $acx_pthread_flags; do PTHREAD_CFLAGS="$flag" ;; + pthread-config) + AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" @@ -133,43 +221,40 @@ if test "x$acx_pthread_ok" = xyes; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - # Detect AIX lossage: threads are created detached by default - # and the JOINABLE attribute has a nonstandard name (UNDETACHED). - AC_MSG_CHECKING([for joinable pthread attribute]) - AC_TRY_LINK([#include ], - [int attr=PTHREAD_CREATE_JOINABLE;], - ok=PTHREAD_CREATE_JOINABLE, ok=unknown) - if test x"$ok" = xunknown; then - AC_TRY_LINK([#include ], - [int attr=PTHREAD_CREATE_UNDETACHED;], - ok=PTHREAD_CREATE_UNDETACHED, ok=unknown) - fi - if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then - AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok, - [Define to the necessary symbol if this constant - uses a non-standard name on your system.]) - fi - AC_MSG_RESULT(${ok}) - if test x"$ok" = xunknown; then - AC_MSG_WARN([we do not know how to create joinable pthreads]) + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_TRY_LINK([#include ], [int attr=$attr; return attr;], + [attr_name=$attr; break]) + done + AC_MSG_RESULT($attr_name) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with cc_r - AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) + else + PTHREAD_CC=$CC + fi else PTHREAD_CC="$CC" fi diff --git a/config/ax_boost_base.m4 b/config/ax_boost_base.m4 new file mode 100644 index 00000000..e9790227 --- /dev/null +++ b/config/ax_boost_base.m4 @@ -0,0 +1,334 @@ +# =========================================================================== +# http://autoconf-archive.cryp.to/ax_boost_base.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_BASE([MINIMUM-VERSION]) +# +# DESCRIPTION +# +# Test for the Boost C++ libraries of a particular version (or newer) +# +# If no path to the installed boost library is given the macro searchs +# under /usr, /usr/local, /opt and /opt/local and evaluates the +# $BOOST_ROOT environment variable. Further documentation is available at +# . +# +# This macro calls: +# +# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) +# +# And sets: +# +# HAVE_BOOST +# +# LAST MODIFICATION +# +# 2008-04-12 +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_BASE], +[ +AC_REQUIRE([GR_LIB64]) +AC_ARG_WITH([boost], + AS_HELP_STRING([--with-boost@<:@=DIR@:>@], + [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + + +AC_ARG_WITH([boost-libdir], + AS_HELP_STRING([--with-boost-libdir=LIB_DIR], + [Force given directory for boost libraries. Note that this + will overwrite library path detection, so use this parameter + only if default library detection fails and you know exactly + where your boost libraries are located.]), + [ + if test -d $withval + then + ac_boost_lib_path="$withval" + else + AC_MSG_ERROR(--with-boost-libdir expected directory name) + fi + ], + [ac_boost_lib_path=""] +) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boost >= $boost_lib_version_req) + succeeded=no + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + dnl Look first where we think they ought to be, accounting for a possible "64" suffix on lib. + dnl If that directory doesn't exist, fall back to the default behavior + if test -d "$ac_boost_path/lib${gr_libdir_suffix}"; then + BOOST_LDFLAGS="-L$ac_boost_path/lib${gr_libdir_suffix}" + else + BOOST_LDFLAGS="-L$ac_boost_path/lib" + fi + BOOST_CPPFLAGS="-I$ac_boost_path/include" + else + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + dnl Look first where we think they ought to be, accounting for a possible "64" suffix on lib. + dnl If that directory doesn't exist, fall back to the default behavior + if test -d "$ac_boost_path_tmp/lib${gr_libdir_suffix}"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib${gr_libdir_suffix}" + else + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + fi + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi + + dnl overwrite ld flags if we have required special directory with + dnl --with-boost-libdir parameter + if test "$ac_boost_lib_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_lib_path" + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ], + []) + AC_LANG_POP([C++]) + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option + if test "$succeeded" != "yes"; then + _version=0 + + if test "$ac_boost_path" != ""; then + path_list="$ac_boost_path" + else + path_list="/usr /usr/local /opt /opt/local" + fi + for ac_boost_path in $path_list ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's,/include/boost-,,; s,_,.,'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + + if test "$ac_boost_lib_path" = ""; then + dnl Look first where we think they ought to be, accounting for a possible "64" suffix on lib. + dnl If that directory doesn't exist, fall back to the default behavior + if test -d "$best_path/lib${gr_libdir_suffix}"; then + BOOST_LDFLAGS="-L$best_path/lib${gr_libdir_suffix}" + else + BOOST_LDFLAGS="-L$best_path/lib" + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ], + []) + AC_LANG_POP([C++]) + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + + if test "$succeeded" != "yes" ; then + AC_MSG_RESULT([no]) + if test "$_version" = "0" ; then + AC_MSG_ERROR([[we could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). +If you are sure you have boost installed, then check your version number looking in .]]) + else + AC_MSG_ERROR([your boost libraries seem to old (version $_version).]) + fi + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_DEFINE(HAVE_BOOST,1,[Define if the Boost headers are available]) + fi +fi +]) + +dnl +dnl Macros used by the boost items that need libraries. +dnl + +dnl $1 is unit name. E.g., boost_thread +AC_DEFUN([_AX_BOOST_CHECK_LIB],[ + _AX_BOOST_CHECK_LIB_($1,HAVE_[]m4_toupper($1),m4_toupper($1)_LIB) +]) + +dnl $1 is unit name. E.g., boost_thread +dnl $2 is AC_DEFINE name. E.g., HAVE_BOOST_THREAD +dnl $3 is lib var name. E.g., BOOST_THREAD_LIB +AC_DEFUN([_AX_BOOST_CHECK_LIB_],[ + AC_LANG_PUSH([C++]) + AC_DEFINE($2,1,[Define if the $1 library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + + dnl See if we can find a usable library + link_ok="no" + if test "$ax_boost_user_lib" != ""; then + dnl use what the user supplied + for ax_lib in $ax_boost_user_lib $1-${ax_boost_user_lib}; do + AC_CHECK_LIB($ax_lib, exit, + [$3="-l$ax_lib"; AC_SUBST($3) link_ok="yes"; break]) + done + else + dnl Look in BOOSTLIBDIR for possible candidates + head=$BOOSTLIBDIR/lib[]$1 + for f in ${head}*.so* ${head}*.a* ${head}*.dll* ${head}*.dylib; do + dnl echo 1: $f + case $f in + *\**) continue;; + esac + f=`echo $f | sed -e 's,.*/,,' -e 's,^lib,,'` + dnl echo 2: $f + f=`echo $f | sed -e 's,\($1.*\)\.so.*$,\1,' -e 's,\($1.*\)\.a.*$,\1,' -e 's,\($1.*\)\.dll.*$,\1,' -e 's,\($1.*\)\.dylib.*$,\1,'` + dnl echo 3: $f + + ax_lib=$f + AC_CHECK_LIB($ax_lib, exit, + [$3="-l$ax_lib"; AC_SUBST($3) link_ok="yes"; break]) + done + fi + + if test "$link_ok" != "yes"; then + AC_MSG_ERROR([Could not link against lib[$1]!]) + fi + AC_LANG_POP([C++]) +]) + + +dnl $1 is unit name. E.g., boost_thread +AC_DEFUN([_AX_BOOST_WITH],[ + _AX_BOOST_WITH_($1,m4_bpatsubst($1,_,-)) +]) + +dnl $1 is unit name. E.g., boost_thread +dnl $2 is hyphenated unit name. E.g., boost-thread +AC_DEFUN([_AX_BOOST_WITH_],[ + AC_ARG_WITH([$2], + AC_HELP_STRING([--with-$2@<:@=special-lib@:>@], + [Use the m4_substr($1,6) library from boost. It is possible to specify a certain + library to the linker. E.g., --with-$2=$1-gcc41-mt-1_35]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_lib="" + else + want_boost="yes" + ax_boost_user_lib="$withval" + fi + ], + [want_boost="yes"]) +]) + +dnl $1 is unit name. E.g., boost_thread +dnl $2 is AC_LANG_PROGRAM argument 1 +dnl $3 is AC_LANG_PROGRAM argument 2 +dnl $4 is cv variable name. E.g., ax_cv_boost_thread +AC_DEFUN([_AX_BOOST_CHECK_],[ + _AX_BOOST_WITH($1) + if test "$want_boost" = "yes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CXX]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + AC_CACHE_CHECK([whether the boost::m4_substr([$1],6) includes are available], [$4], + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([$2],[$3]),[$4]=yes,[$4]=no) + AC_LANG_POP([C++]) + ]) + if test "$[$4]" = "yes"; then + _AX_BOOST_CHECK_LIB([$1]) + fi + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) + +dnl $1 is unit name. E.g., boost_thread +dnl $2 is AC_LANG_PROGRAM argument 1 +dnl $3 is AC_LANG_PROGRAM argument 2 +AC_DEFUN([_AX_BOOST_CHECK],[ + _AX_BOOST_CHECK_($1,$2,$3,ax_cv_$1) +]) diff --git a/config/ax_boost_date_time.m4 b/config/ax_boost_date_time.m4 new file mode 100644 index 00000000..7b3f0fe3 --- /dev/null +++ b/config/ax_boost_date_time.m4 @@ -0,0 +1,34 @@ +# +# SYNOPSIS +# +# AX_BOOST_DATE_TIME +# +# DESCRIPTION +# +# Test for date_time library from the Boost C++ libraries. +# +# This macro calls: +# +# AC_SUBST(BOOST_DATE_TIME_LIB) +# +# And sets: +# +# HAVE_BOOST_DATE_TIME +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_DATE_TIME], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_date_time], + [@%:@include ], + [using namespace boost::gregorian; date d(2002,Jan,10); return 0;]) +]) diff --git a/config/ax_boost_filesystem.m4 b/config/ax_boost_filesystem.m4 new file mode 100644 index 00000000..bcb3fa44 --- /dev/null +++ b/config/ax_boost_filesystem.m4 @@ -0,0 +1,45 @@ +# +# SYNOPSIS +# +# AX_BOOST_FILESYSTEM +# +# DESCRIPTION +# +# Test for Filesystem library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_FILESYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_FILESYSTEM +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_FILESYSTEM], +[ + AC_REQUIRE([AX_BOOST_BASE]) + + dnl depends on boost_system + AC_REQUIRE([AX_BOOST_SYSTEM]) + axbf_LDFLAGS_SAVED=$LDFLAGS + LDFLAGS="$LDFLAGS $BOOST_SYSTEM_LIB" + + _AX_BOOST_CHECK([boost_filesystem], + [@%:@include ], + [using namespace boost::filesystem; + path my_path( "foo/bar/data.txt" ); + return 0;]) + + LDFLAGS=$axbf_LDFLAGS_SAVED +]) diff --git a/config/ax_boost_iostreams.m4 b/config/ax_boost_iostreams.m4 new file mode 100644 index 00000000..181b1e75 --- /dev/null +++ b/config/ax_boost_iostreams.m4 @@ -0,0 +1,39 @@ +# +# SYNOPSIS +# +# AX_BOOST_IOSTREAMS +# +# DESCRIPTION +# +# Test for IOStreams library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_IOSTREAMS_LIB) +# +# And sets: +# +# HAVE_BOOST_IOSTREAMS +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_IOSTREAMS], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_iostreams], + [@%:@include + @%:@include ], + [std::string input = "Hello World!"; + namespace io = boost::iostreams; + io::filtering_istream in(boost::make_iterator_range(input)); + return 0;]) + +]) diff --git a/config/ax_boost_program_options.m4 b/config/ax_boost_program_options.m4 new file mode 100644 index 00000000..3829373b --- /dev/null +++ b/config/ax_boost_program_options.m4 @@ -0,0 +1,35 @@ +# +# SYNOPSIS +# +# AX_BOOST_PROGRAM_OPTIONS +# +# DESCRIPTION +# +# Test for program options library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_PROGRAM_OPTIONS_LIB) +# +# And sets: +# +# HAVE_BOOST_PROGRAM_OPTIONS +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_PROGRAM_OPTIONS], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_program_options], + [@%:@include ], + [boost::program_options::options_description generic("Generic options"); + return 0;]) +]) diff --git a/config/ax_boost_python.m4 b/config/ax_boost_python.m4 new file mode 100644 index 00000000..3c6c666f --- /dev/null +++ b/config/ax_boost_python.m4 @@ -0,0 +1,92 @@ +# =========================================================================== +# http://autoconf-archive.cryp.to/ax_boost_python.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_PYTHON +# +# DESCRIPTION +# +# This macro checks to see if the Boost.Python library is installed. It +# also attempts to guess the currect library name using several attempts. +# It tries to build the library name using a user supplied name or suffix +# and then just the raw library. +# +# If the library is found, HAVE_BOOST_PYTHON is defined and +# BOOST_PYTHON_LIB is set to the name of the library. +# +# This macro calls AC_SUBST(BOOST_PYTHON_LIB). +# +# In order to ensure that the Python headers are specified on the include +# path, this macro requires AX_PYTHON to be called. +# +# LAST MODIFICATION +# +# 2008-04-12 +# +# COPYLEFT +# +# Copyright (c) 2008 Michael Tindal +# +# 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 of the License, 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 program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Macro Archive. When you make and +# distribute a modified version of the Autoconf Macro, you may extend this +# special exception to the GPL to apply to your modified version as well. + +AC_DEFUN([AX_BOOST_PYTHON], +[AC_REQUIRE([AX_PYTHON])dnl +AC_CACHE_CHECK(whether the Boost::Python library is available, +ac_cv_boost_python, +[AC_LANG_SAVE + AC_LANG_CPLUSPLUS + CPPFLAGS_SAVE=$CPPFLAGS + if test x$PYTHON_INCLUDE_DIR != x; then + CPPFLAGS=-I$PYTHON_INCLUDE_DIR $CPPFLAGS + fi + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ + #include + using namespace boost::python; + BOOST_PYTHON_MODULE(test) { throw "Boost::Python test."; }]], + [[return 0;]]), + ac_cv_boost_python=yes, ac_cv_boost_python=no) + AC_LANG_RESTORE + CPPFLAGS=$CPPFLAGS_SAVE +]) +if test "$ac_cv_boost_python" = "yes"; then + AC_LANG_PUSH([C++]) + AC_DEFINE(HAVE_BOOST_PYTHON,,[define if the Boost::Python library is available]) + ax_python_lib=boost_python + AC_ARG_WITH([boost-python],AS_HELP_STRING([--with-boost-python],[specify the boost python library or suffix to use]), + [if test "x$with_boost_python" != "xno"; then + ax_python_lib=$with_boost_python + ax_boost_python_lib=boost_python-$with_boost_python + fi]) + for ax_lib in $ax_python_lib $ax_boost_python_lib boost_python; do + AC_CHECK_LIB($ax_lib, exit, [BOOST_PYTHON_LIB=$ax_lib break]) + done + AC_SUBST(BOOST_PYTHON_LIB) + AC_LANG_POP([C++]) +fi +])dnl diff --git a/config/ax_boost_regex.m4 b/config/ax_boost_regex.m4 new file mode 100644 index 00000000..32b53136 --- /dev/null +++ b/config/ax_boost_regex.m4 @@ -0,0 +1,35 @@ +# +# SYNOPSIS +# +# AX_BOOST_REGEX +# +# DESCRIPTION +# +# Test for Regex library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_REGEX_LIB) +# +# And sets: +# +# HAVE_BOOST_REGEX +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_REGEX], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_regex], + [@%:@include ], + [boost::regex r(); return 0;]) +]) diff --git a/config/ax_boost_serialization.m4 b/config/ax_boost_serialization.m4 new file mode 100644 index 00000000..78c95007 --- /dev/null +++ b/config/ax_boost_serialization.m4 @@ -0,0 +1,38 @@ +# +# SYNOPSIS +# +# AX_BOOST_SERIALIZATION +# +# DESCRIPTION +# +# Test for Serialization library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_SERIALIZATION_LIB) +# +# And sets: +# +# HAVE_BOOST_SERIALIZATION +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_SERIALIZATION], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_serialization], + [@%:@include + @%:@include + @%:@include ], + [std::ofstream ofs("filename"); + boost::archive::text_oarchive oa(ofs); + return 0;]) +]) diff --git a/config/ax_boost_signals.m4 b/config/ax_boost_signals.m4 new file mode 100644 index 00000000..3c497174 --- /dev/null +++ b/config/ax_boost_signals.m4 @@ -0,0 +1,35 @@ +# +# SYNOPSIS +# +# AX_BOOST_SIGNALS +# +# DESCRIPTION +# +# Test for Signals library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_SIGNALS_LIB) +# +# And sets: +# +# HAVE_BOOST_SIGNALS +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_SIGNALS], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_signals], + [@%:@include ], + [boost::signal sig; return 0;]) +]) diff --git a/config/ax_boost_system.m4 b/config/ax_boost_system.m4 new file mode 100644 index 00000000..cb73f257 --- /dev/null +++ b/config/ax_boost_system.m4 @@ -0,0 +1,40 @@ +# =========================================================================== +# started with this: http://autoconf-archive.cryp.to/ax_boost_system.html, +# virtually nothing left +# =========================================================================== +# +# SYNOPSIS +# +# AX_BOOST_SYSTEM +# +# DESCRIPTION +# +# Test for System library from the Boost C++ libraries. The macro requires +# a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_SYSTEM_LIB) +# +# And sets: +# +# HAVE_BOOST_SYSTEM +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Daniel Casimiro +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_SYSTEM], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_system], + [@%:@include ], + [boost::system::system_category]) +]) diff --git a/config/ax_boost_test_exec_monitor.m4 b/config/ax_boost_test_exec_monitor.m4 new file mode 100644 index 00000000..2c30c0b4 --- /dev/null +++ b/config/ax_boost_test_exec_monitor.m4 @@ -0,0 +1,35 @@ +# +# SYNOPSIS +# +# AX_BOOST_TEST_EXEC_MONITOR +# +# DESCRIPTION +# +# Test for Test_Exec_Monitor library from the Boost C++ libraries. The +# macro requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_TEST_EXEC_MONITOR_LIB) +# +# And sets: +# +# HAVE_BOOST_TEST_EXEC_MONITOR +# +# COPYLEFT +# +# Copyright (c) 2008 Dodji Seketeli +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_TEST_EXEC_MONITOR], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_test_exec_monitor], + [@%:@include ], + [int i=1 ; BOOST_REQUIRE(i==1); ; return 0;]) +]) diff --git a/config/ax_boost_thread.m4 b/config/ax_boost_thread.m4 new file mode 100644 index 00000000..4df23224 --- /dev/null +++ b/config/ax_boost_thread.m4 @@ -0,0 +1,72 @@ +# +# SYNOPSIS +# +# AX_BOOST_THREAD +# +# DESCRIPTION +# +# Test for Thread library from the Boost C++ libraries. +# +# This macro calls: +# +# AC_SUBST(BOOST_THREAD_LIB) +# AC_SUBST(BOOST_CXXFLAGS) +# +# And sets: +# +# HAVE_BOOST_THREAD +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Michael Tindal +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + + +AC_DEFUN([AX_BOOST_THREAD], +[ + AC_REQUIRE([AX_BOOST_BASE]) + AC_REQUIRE([ACX_PTHREAD]) + _AX_BOOST_WITH([boost_thread]) + + if test "$want_boost" = "yes"; then + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + CXXFLAGS_SAVED="$CXXFLAGS" + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS $PTHREAD_LIBS" + CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" + + AC_CACHE_CHECK(whether the boost::thread includes are available, + ax_cv_boost_thread, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include ]], + [[boost::thread_group thrds; + return 0;]]), + ax_cv_boost_thread=yes, ax_cv_boost_thread=no) + AC_LANG_POP([C++]) + ]) + + if test "$ax_cv_boost_thread" = "yes"; then + BOOST_CXXFLAGS="$PTHREAD_CFLAGS" + AC_SUBST(BOOST_CXXFLAGS) + _AX_BOOST_CHECK_LIB([boost_thread]) + if test "$link_ok" = "yes" && test -n "$PTHREAD_LIBS"; then + BOOST_THREAD_LIB="$BOOST_THREAD_LIB $PTHREAD_LIBS" + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + CXXFLAGS="$CXXFLAGS_SAVED" + fi +]) diff --git a/config/ax_boost_unit_test_framework.m4 b/config/ax_boost_unit_test_framework.m4 new file mode 100644 index 00000000..73affccf --- /dev/null +++ b/config/ax_boost_unit_test_framework.m4 @@ -0,0 +1,36 @@ +# +# SYNOPSIS +# +# AX_BOOST_UNIT_TEST_FRAMEWORK +# +# DESCRIPTION +# +# Test for Unit_Test_Framework library from the Boost C++ libraries. The +# macro requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_UNIT_TEST_FRAMEWORK_LIB) +# +# And sets: +# +# HAVE_BOOST_UNIT_TEST_FRAMEWORK +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK], +[ + AC_REQUIRE([AX_BOOST_BASE]) + _AX_BOOST_CHECK([boost_unit_test_framework], + [@%:@include ], + [using boost::unit_test::test_suite; + test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); + return 0;]) +]) diff --git a/config/ax_boost_wserialization.m4 b/config/ax_boost_wserialization.m4 new file mode 100644 index 00000000..f384988c --- /dev/null +++ b/config/ax_boost_wserialization.m4 @@ -0,0 +1,46 @@ +# +# SYNOPSIS +# +# AX_BOOST_WSERIALIZATION +# +# DESCRIPTION +# +# Test for WSerialization library from the Boost C++ libraries. The macro +# requires a preceding call to AX_BOOST_BASE. +# +# This macro calls: +# +# AC_SUBST(BOOST_WSERIALIZATION_LIB) +# +# And sets: +# +# HAVE_BOOST_WSERIALIZATION +# +# COPYLEFT +# +# Copyright (c) 2008 Thomas Porschberg +# Copyright (c) 2008 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_BOOST_WSERIALIZATION], +[ + AC_REQUIRE([AX_BOOST_BASE]) + + dnl depends on BOOST_SERIALIZATION + AC_REQUIRE([AX_BOOST_SERIALIZATION]) + axbws_LDFLAGS_SAVED=$LDFLAGS + LDFLAGS="$LDFLAGS $BOOST_SERIALIZATION_LIB" + + _AX_BOOST_CHECK([boost_wserialization], + [@%:@include + @%:@include + @%:@include ], + [std::ofstream ofs("filename"); + boost::archive::text_oarchive oa(ofs); + return 0;]) + + LDFLAGS=$axbf_LDFLAGS_SAVED +]) diff --git a/config/gr_boost.m4 b/config/gr_boost.m4 deleted file mode 100644 index 0664d36f..00000000 --- a/config/gr_boost.m4 +++ /dev/null @@ -1,111 +0,0 @@ -dnl -dnl Copyright 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 - -dnl This tries to do the "right thing" to locate the boost include files. -dnl If the user explicitly specified --with-boost-include-dir= -dnl we believe them and use it. Otherwise, -dnl -dnl We look for boost/shared_ptr.hpp in the "normal places". That is, -dnl wherever AC_CHECK_HEADER looks. If the boost includes are in /usr/local/include -dnl this step will find them. -dnl -dnl Otherwise, we check to see if the boost stuff was installed in a version-specific -dnl directory under /usr/local/include. These look like: /usr/local/include/boost-1_33_1 -dnl If there's more than one version installed, we select the -dnl lexicographically greatest one. -dnl -dnl If none of these work, we bail. - -AC_DEFUN([GR_REQUIRE_BOOST_INCLUDES], -[ - AC_LANG_PUSH(C++) - gr_boost_include_dir= - AC_ARG_WITH([boost-include-dir], - AC_HELP_STRING([--with-boost-include-dir=], - [path to boost c++ include files]), - [ - # "yes" and "no" are bogus answers - if test x"$with_boost_include_dir" = xyes || - test x"$with_boost_include_dir" = xno; then - gr_boost_include_dir= - else - gr_boost_include_dir=$with_boost_include_dir - fi - ]) - echo "gr_boost_include_dir = $gr_boost_include_dir" - if test x$gr_boost_include_dir != x; then - # - # If the user specified a directory, then we use it - # - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$gr_boost_include_dir" - AC_CHECK_HEADER([boost/shared_ptr.hpp], - [BOOST_CFLAGS="-I$gr_boost_include_dir"], - [AC_MSG_ERROR( - [Failed to locate boost/shared_ptr.hpp. -Try using --with-boost-include-dir=, -E.g., --with-boost-include-dir=/usr/local/include/boost-1_33_1])]) - CPPFLAGS=$OLD_CPPFLAGS - else - # - # Otherwise we check in the default places - # - AC_CHECK_HEADER([boost/shared_ptr.hpp], - [BOOST_CFLAGS=""], - [ # Nope, look for latest version if any in $prefix/include/boost-* - - # Wipe out cached value. KLUDGE: AC should have API for this - unset AS_TR_SH([ac_cv_header_boost/shared_ptr.hpp]) - - boost_last_match(){ - #echo "boost_last_match: [$]*" - pattern="[$]1" - shift - if test "[$]pattern" = "[$]1" - then - LM='' - else - shift `expr [$]# - 1` - LM=[$]1 - fi - #echo "LM(1)='[$]LM'" - } - - pattern="/usr/local/include/boost-*" - boost_last_match "$pattern" $pattern - #echo "LM(2)='$LM'" - - OLD_CPPFLAGS=$CPP_FLAGS - CPPFLAGS="$CPPFLAGS -I$LM" - AC_CHECK_HEADER([boost/shared_ptr.hpp], - [BOOST_CFLAGS="-I$LM"], - [AC_MSG_ERROR( - [Failed to locate boost/shared_ptr.hpp. -Try using --with-boost-include-dir=, -E.g., --with-boost-include-dir=/usr/local/include/boost-1_33_1])]) - CPPFLAGS=$OLD_CPPFLAGS - ]) - - fi - unset boost_last_match LM - AC_LANG_POP - AC_SUBST(BOOST_CFLAGS) -]) diff --git a/config/gr_check_memalign.m4 b/config/gr_check_memalign.m4 new file mode 100644 index 00000000..109516aa --- /dev/null +++ b/config/gr_check_memalign.m4 @@ -0,0 +1,42 @@ +# Copyright 2008 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 3, 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 program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Boston, MA +# 02110-1301, USA. + +AC_DEFUN([GR_CHECK_MEMALIGN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + + # Check for allocing memory alignment functions + # If 'posix_memalign' is available, use it solely. + AC_CHECK_FUNCS([posix_memalign],,[ + # Otherwise, check for valloc and the + # (a-priori known) alignment of 'malloc' + AC_CHECK_FUNCS([valloc]) + aligned_malloc=0 + # 'malloc' is 16-byte aligned on (at least) Darwin 8 and 9 + case "$host_os" in + darwin8*) aligned_malloc=16 ;; + darwin9*) aligned_malloc=16 ;; + *) ;; + esac + if test $aligned_malloc = 0; then + AC_MSG_RESULT([malloc has unknown alignment.]) + else + AC_MSG_RESULT([malloc is $aligned_malloc-byte aligned.]) + fi + AC_DEFINE_UNQUOTED([ALIGNED_MALLOC],[$aligned_malloc],[Define as the alignment of malloc if known; otherwise 0.]) + ]) +]) diff --git a/config/gr_doxygen.m4 b/config/gr_doxygen.m4 index 4670c29d..ca934431 100644 --- a/config/gr_doxygen.m4 +++ b/config/gr_doxygen.m4 @@ -20,12 +20,14 @@ dnl Boston, MA 02110-1301, USA. dnl AC_DEFUN([GR_CHECK_DOXYGEN],[ - AC_ARG_ENABLE(doxygen, [ --enable-doxygen enable documentation generation with doxygen (no)]) - AC_ARG_ENABLE(dot, [ --enable-dot use 'dot' to generate graphs in doxygen (auto)]) - AC_ARG_ENABLE(html-docs, [ --enable-html-docs enable HTML generation with doxygen (yes)], [], [ enable_html_docs=yes]) - AC_ARG_ENABLE(latex-docs, [ --enable-latex-docs enable LaTeX doc generation with doxygen (no)], [], [ enable_latex_docs=no]) + AC_ARG_ENABLE(doxygen, + AC_HELP_STRING([--enable-doxygen], + [enable documentation generation with doxygen (auto)])) + AC_ARG_ENABLE(dot, AC_HELP_STRING([--enable-dot],[use 'dot' to generate graphs in doxygen (auto)])) - if test "x$enable_doxygen" = xyes; then + if test "x$enable_doxygen" = xno; then + enable_doc=no + else AC_PATH_PROG(DOXYGEN, doxygen, , $PATH) if test x$DOXYGEN = x; then if test "x$enable_doxygen" = xyes; then @@ -38,8 +40,6 @@ AC_DEFUN([GR_CHECK_DOXYGEN],[ generate_docs=docs AC_PATH_PROG(DOT, dot, , $PATH) fi - else - enable_doc=no fi AM_CONDITIONAL(DOC, test x$enable_doc = xyes) @@ -53,7 +53,8 @@ AC_DEFUN([GR_CHECK_DOXYGEN],[ enable_dot=yes fi AC_SUBST(enable_dot) - AC_SUBST(enable_html_docs) - AC_SUBST(enable_latex_docs) + AC_SUBST(enable_xml_docs, YES) + AC_SUBST(enable_html_docs, YES) + AC_SUBST(enable_latex_docs, NO) AC_SUBST(generate_docs) ]) diff --git a/config/gr_fortran.m4 b/config/gr_fortran.m4 index abad977d..b5b0470f 100644 --- a/config/gr_fortran.m4 +++ b/config/gr_fortran.m4 @@ -20,7 +20,8 @@ dnl Boston, MA 02110-1301, USA. AC_DEFUN([GR_FORTRAN],[ dnl if you want to generate a different table of interpolator taps, you need fortran. dnl we default to off, since almost no one wants to do this. - AC_ARG_ENABLE(fortran, [ --enable-fortran enable fortran (no)], [], [enable_fortran=no]) + AC_ARG_ENABLE(fortran, AC_HELP_STRING([--enable-fortran],[enable fortran (no)]), + [], [enable_fortran=no]) AM_CONDITIONAL(ENABLE_FORTRAN, test "x$enable_fortran" = xyes) if test "x$enable_fortran" = xyes diff --git a/config/gr_gcell.m4 b/config/gr_gcell.m4 new file mode 100644 index 00000000..0b8b9780 --- /dev/null +++ b/config/gr_gcell.m4 @@ -0,0 +1,36 @@ +# +# Copyright 2008 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. +# + +AC_DEFUN([GR_GCELL],[ + passed=yes + PKG_CHECK_MODULES(GCELL, gcell >= 3.1, [], + [passed=no; AC_MSG_RESULT([gcell not found])]) + PKG_CHECK_MODULES(GCELL_SPU, gcell_spu >= 3.1, [], + [passed=no; AC_MSG_RESULT([gcell_spu not found])]) + + GCELL_EMBEDSPU_LIBTOOL= + if test $passed = yes; then + GCELL_EMBEDSPU_LIBTOOL=`$PKG_CONFIG --variable=gcell_embedspu_libtool gcell 2>/dev/null` + AC_DEFINE(HAVE_GCELL,[1],[Define if you have gcell installed]) + fi + AC_SUBST([GCELL_EMBEDSPU_LIBTOOL]) + + AM_CONDITIONAL([HAVE_GCELL], [test "$passed" = "yes"]) +]) diff --git a/config/gr_lib64.m4 b/config/gr_lib64.m4 new file mode 100644 index 00000000..751f774b --- /dev/null +++ b/config/gr_lib64.m4 @@ -0,0 +1,85 @@ +dnl +dnl Copyright 2005,2008 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 + +dnl GR_LIB64() +dnl +dnl Checks to see if we're on a x86_64 or powerpc64 machine, and if so, determine +dnl if libdir should end in "64" or not. +dnl +dnl Sets gr_libdir_suffix to "" or "64" and calls AC_SUBST(gr_libdir_suffix) +dnl May append "64" to libdir. +dnl +dnl The current heuristic is: +dnl if the host_cpu isn't x86_64 or powerpc64, then "" +dnl if the host_os isn't linux, then "" +dnl if we're cross-compiling, ask the linker, by way of the selected compiler +dnl if we're x86_64 and there's a /lib64 and it's not a symlink, then "64", else "" +dnl else ask the compiler +dnl +AC_DEFUN([GR_LIB64],[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_PROG_CXX]) + + AC_MSG_CHECKING([gr_libdir_suffix]) + gr_libdir_suffix="" + AC_SUBST(gr_libdir_suffix) + + case "$host_os" in + linux*) is_linux=yes ;; + *) is_linux=no ;; + esac + + if test "$is_linux" = no || test "$host_cpu" != "x86_64" && test "$host_cpu" != "powerpc64"; then + gr_libdir_suffix="" + elif test "$cross_compiling" = yes; then + _GR_LIB64_ASK_COMPILER + elif test "$host_cpu" = "x86_64"; then + if test -d /lib64 && test ! -L /lib64; then + gr_libdir_suffix=64 + fi + else + _GR_LIB64_ASK_COMPILER + fi + AC_MSG_RESULT([$gr_libdir_suffix]) + + + AC_MSG_CHECKING([whether to append 64 to libdir]) + t=${libdir##*/lib} + if test "$t" != 64 && test "$gr_libdir_suffix" = "64"; then + libdir=${libdir}64 + AC_MSG_RESULT([yes. Setting libdir to $libdir]) + else + AC_MSG_RESULT([no]) + fi +]) + +dnl If we're using g++, extract the first SEARCH_DIR("...") entry from the linker script +dnl and see if it contains a suffix after the final .../lib part of the path. +dnl (This works because the linker script varies depending on whether we're generating +dnl 32-bit or 64-bit executables) +dnl +AC_DEFUN([_GR_LIB64_ASK_COMPILER],[ + if test "$ac_cv_cxx_compiler_gnu" = "yes"; + then + gr_libdir_suffix=`$CXX -Wl,--verbose 2>/dev/null | sed -n -e '/SEARCH_DIR/{s/;.*$//; s,^.*/,,; s/".*$//; s/^lib//; p}'` + fi +]) + diff --git a/config/gr_omnithread.m4 b/config/gr_omnithread.m4 index b5e40909..054f0782 100644 --- a/config/gr_omnithread.m4 +++ b/config/gr_omnithread.m4 @@ -1,6 +1,6 @@ # Check for Omnithread (pthread/NT) thread support. -*- Autoconf -*- -# Copyright 2003 Free Software Foundation, Inc. +# Copyright 2003,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 @@ -21,8 +21,9 @@ AC_DEFUN([GR_OMNITHREAD], [ # Check first for POSIX ACX_PTHREAD( - [ ot_posix="yes" - AC_DEFINE(OMNITHREAD_POSIX,[1],[Define to 1 to enable pthread]) + [ AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]) + ot_posix="yes" + DEFINES="$DEFINES -DOMNITHREAD_POSIX=1" ],[ # If no POSIX support found, then check for NT threads AC_MSG_CHECKING([for NT threads]) @@ -34,7 +35,7 @@ AC_DEFUN([GR_OMNITHREAD], ], [ ot_nt="yes" - AC_DEFINE(OMNITHREAD_NT,[1],[Define to 1 to enable NT thread]) + DEFINES="$DEFINES -DOMNITHREAD_NT=1" ], [AC_MSG_FAILURE([GNU Radio requires POSIX threads. pthreads not found.])] ) diff --git a/config/gr_python.m4 b/config/gr_python.m4 index 5816b276..7479f053 100644 --- a/config/gr_python.m4 +++ b/config/gr_python.m4 @@ -22,27 +22,43 @@ dnl # PYTHON_DEVEL() # # Checks for Python and tries to get the include path to 'Python.h'. -# It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) output variables. +# It sets the $(PYTHON_CPPFLAGS), $(PYTHON_LDFLAGS) and $(pythondir) output variables, # AC_DEFUN([PYTHON_DEVEL],[ AC_REQUIRE([AM_PATH_PYTHON]) AC_REQUIRE([AC_CANONICAL_HOST]) - # For Fedora Core 5 and 6, see ticket:39 in Trac - if test -f '/etc/redhat-release'; then - if (echo $pyexecdir | grep -q lib64); then - pythondir="$pyexecdir" - fi - fi + AC_ARG_WITH(pythondir, + AC_HELP_STRING([--with-pythondir=DIR], + [python installation directory (cross-compiling) [[default=$prefix/lib/python2.5/site-packages]]]), + [with_pythondir=${withval}],[with_pythondir=${prefix}/lib/python2.5/site-packages]) - # Check for Python include path - AC_MSG_CHECKING([for Python include path]) - if test -z "$PYTHON" ; then - AC_MSG_ERROR([cannot find Python path]) - fi + # if we're cross-compiling, asking the host python about any of + # this is completely useless... + + if test x$cross_compiling != xno + then + pythondir=$with_pythondir + pyexecdir=$with_pythondir + AC_SUBST(PYTHON_CPPFLAGS) + AC_SUBST(PYTHON_LDFLAGS) + else - # ask distutils which include path we should use - python_cmd=' + # For Fedora Core 5 and 6, see ticket:39 in Trac + if test -f '/etc/redhat-release'; then + if (echo $pyexecdir | grep -q lib64); then + pythondir="$pyexecdir" + fi + fi + + # Check for Python include path + AC_MSG_CHECKING([for Python include path]) + if test -z "$PYTHON" ; then + AC_MSG_ERROR([cannot find Python path]) + fi + + # ask distutils which include path we should use + python_cmd=' import distutils.sysconfig import os path = distutils.sysconfig.get_python_inc(plat_specific=False) @@ -50,30 +66,30 @@ if os.sep == "\\": path = path.replace("\\", "/") print path ' - python_path=`$PYTHON -c "$python_cmd"` - AC_MSG_RESULT([$python_path]) - if test -z "$python_path" ; then - AC_MSG_ERROR([cannot find Python include path]) - fi + python_path=`$PYTHON -c "$python_cmd"` + AC_MSG_RESULT([$python_path]) + if test -z "$python_path" ; then + AC_MSG_ERROR([cannot find Python include path]) + fi - AC_SUBST(PYTHON_CPPFLAGS,[-I$python_path]) + AC_SUBST(PYTHON_CPPFLAGS,[-I$python_path]) - # Check for Python headers usability - python_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" - AC_CHECK_HEADERS([Python.h], [], - [AC_MSG_ERROR([cannot find usable Python headers])]) - CPPFLAGS="$python_save_CPPFLAGS" + # Check for Python headers usability + python_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" + AC_CHECK_HEADERS([Python.h], [], + [AC_MSG_ERROR([cannot find usable Python headers])]) + CPPFLAGS="$python_save_CPPFLAGS" - # Only set this on mingw and cygwin hosts, (only implemented - # for mingw host, for crosscompiling you need to trick this) + # Only set this on mingw and cygwin hosts, (only implemented + # for mingw host, for crosscompiling you need to trick this) - PYTHON_LDFLAGS="" - case $host_os in - *mingw* | *cygwin* ) - AC_MSG_CHECKING([for Python LDFLAGS]) + PYTHON_LDFLAGS="" + case $host_os in + *mingw* | *cygwin* ) + AC_MSG_CHECKING([for Python LDFLAGS]) - python_cmd=' + python_cmd=' import distutils.sysconfig import os path = distutils.sysconfig.get_config_var("LIBPL") @@ -82,30 +98,69 @@ if path == None: if os.sep == "\\": path = path.replace("\\", "/") print path -' - python_stdlib_path=`$PYTHON -c "$python_cmd"` - - python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"` - libpython_name="python$PYTHON_VERSION" - - # Standard install of python for win32 has libpython24.a - # instead of libpython2.4.a so we check for the library - # without the dot in the version number. - - python_stdlib_filename=`find $python_stdlib_path -type f -name libpython$python_version_nodot.* -print | sed "1q"` - if test -n "$python_stdlib_filename" ; then - libpython_name="python$python_version_nodot" - fi - - PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name" - AC_MSG_RESULT($PYTHON_LDFLAGS) - # Replace all backslashes in PYTHON Paths with forward slashes - pythondir=`echo $pythondir |sed 's,\\\\,/,g'` - pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'` - pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'` - pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'` - ;; - esac - - AC_SUBST([PYTHON_LDFLAGS]) +' + python_stdlib_path=`$PYTHON -c "$python_cmd"` + + python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"` + libpython_name="python$PYTHON_VERSION" + + # Standard install of python for win32 has libpython24.a + # instead of libpython2.4.a so we check for the library + # without the dot in the version number. + + python_stdlib_filename=`find $python_stdlib_path -type f -name libpython$python_version_nodot.* -print | sed "1q"` + if test -n "$python_stdlib_filename" ; then + libpython_name="python$python_version_nodot" + fi + + PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name" + AC_MSG_RESULT($PYTHON_LDFLAGS) + # Replace all backslashes in PYTHON Paths with forward slashes + pythondir=`echo $pythondir |sed 's,\\\\,/,g'` + pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'` + pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'` + pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'` + ;; + esac + + AC_SUBST(PYTHON_LDFLAGS) + fi +]) + +# PYTHON_CHECK_MODULE +# +# Determines if a particular Python module can be imported +# +# $1 - module name +# $2 - module description +# $3 - action if found +# $4 - action if not found +# $5 - test command + +AC_DEFUN([PYTHON_CHECK_MODULE],[ + AC_MSG_CHECKING([for $2]) + dnl ######################################## + dnl # import and test checking + dnl ######################################## + if test "$5"; then + python_cmd=' +try: + import $1 + assert $5 +except: exit(1)' + dnl ######################################## + dnl # import checking only + dnl ######################################## + else + python_cmd=' +try: import $1 +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + AC_MSG_RESULT([no]) + $4 + else + AC_MSG_RESULT([yes]) + $3 + fi ]) diff --git a/config/gr_qwt.m4 b/config/gr_qwt.m4 new file mode 100644 index 00000000..16ec6381 --- /dev/null +++ b/config/gr_qwt.m4 @@ -0,0 +1,152 @@ +dnl +dnl Copyright 2007,2008 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 + +dnl Configure paths for library qwt. +dnl +dnl GR_QWT([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl +dnl Test for library qwt, set QWT_CFLAGS and QWT_LIBS if found. Assumes +dnl QT_CFLAGS and QT_LIBS have already been correctly set. +dnl + +AC_DEFUN([GR_QWT], +[ + dnl QWT Library Version + QWT_LIBRARY1=-lqwt-qt4 + QWT_LIBRARY2=-lqwt + + dnl Save the environment + AC_LANG_PUSH(C++) + qwt_save_CPPFLAGS="$CPPFLAGS" + qwt_save_LIBS="$LIBS" + libqwt_ok=yes + + dnl QWT Info + dnl Allow user to specify where QWT files are + AC_ARG_WITH([qwt-libdir], + [ --with-qwt-libdir=path Prefix where QWT library is installed (optional)], + [qwt_libdir="$withval"], [qwt_libdir=""]) + + AC_ARG_WITH([qwt-incdir], + [ --with-qwt-incdir=path Prefix where QWT include files are (optional)], + [qwt_incdir="$withval"], [qwt_incdir=""]) + AC_ARG_WITH([qwt-lib], + [ --with-qwt-lib=library QWT library name (optional)], + [qwt_lib="$withval"], [qwt_lib=""]) + + dnl Check for presence of header files + dnl if not user-specified, try the first include dir (Ubuntu), then + dnl try the second include dir (Fedora) + CPPFLAGS="$CPPFLAGS $QTCORE_CFLAGS" + + dnl if not set by user + if test "$qwt_incdir" = "" ; then + dnl check qwt/qwt.h (as in Fedora) + AC_CHECK_HEADER( + [qwt/qwt.h], + [qwt_qwt_h=yes], + [qwt_qwt_h=no] + ) + dnl If it was found, set the flags and move on + if test "$qwt_qwt_h" = "yes" ; then + QWT_CFLAGS="$QWT_CFLAGS -I/usr/include/qwt" + else + dnl otherwise, check qwt-qt4/qwt.h (as in Ubuntu) + AC_CHECK_HEADER( + [qwt-qt4/qwt.h], + [qwt_qt4_qwt_h=yes], + [qwt_qt4_qwt_h=no] + ) + dnl if it was found, set the flags and move on + if test "$qwt_qt4_qwt_h" = "yes" ; then + QWT_CFLAGS="$QWT_CFLAGS -I/usr/include/qwt-qt4" + else + dnl otherwise, qwt.h wasn't found, so set the flag to no + libqwt_ok=no + fi + fi + else + dnl Using the user-specified include directory + QWT_CFLAGS="$QWT_CFLAGS -I$qwt_incdir" + AC_CHECK_HEADER( + [$qwt_incdir/qwt.h], + [], + [libqwt_ok=no]) + fi + + dnl Don't bother going on if we can't find the headers + if test "$libqwt_ok" = "yes" ; then + + dnl Check for QWT library (qwt or qwt-qt4) + + dnl User-defined QWT library path + if test "$qwt_libdir" != "" ; then + QWT_LIBS="-L$qwt_libdir $QWT_LIBS" + fi + + dnl temporarily set these so the AC_CHECK_LIB works + CPPFLAGS="$CPPFLAGS $QWT_CFLAGS" + LIBS="$qwt_save_LIBS $QT_LIBS $QWT_LIBS -lqwt" + + dnl If the user specified a qwt library name, use it here + if test "$qwt_lib" != "" ; then + AC_CHECK_LIB([$qwt_lib], [main], [libqwt_ok=yes], [libqwt_ok=no]) + + else + dnl Check for 'main' in libqwt (Fedora) + AC_CHECK_LIB([qwt], [main], [libqwt_ok=yes], [libqwt_ok=no]) + + dnl If library found properly, set the flag and move on + if test "$libqwt_ok" = "yes" ; then + QWT_LIBS="$QWT_LIBS -lqwt" + else + dnl Otherwise, check for 'main' in libqwt-qt4 (Ubuntu) + LIBS="$qwt_save_LIBS $QT_LIBS $QWT_LIBS -lqwt-qt4" + AC_CHECK_LIB([qwt-qt4], [main], [libqwt_ok=yes], [libqwt_ok=no]) + if test "$libqwt_ok" = "yes" ; then + QWT_LIBS="$QWT_LIBS -lqwt-qt4" + else + AC_MSG_RESULT([Could not link to libqwt.so]) + fi + fi + fi + else + AC_MSG_RESULT([Could not find qwt headers]) + fi + + dnl Restore saved variables + LIBS="$qwt_save_LIBS" + CPPFLAGS="$qwt_save_CPPFLAGS" + AC_LANG_POP + + dnl Execute user actions + if test "x$libqwt_ok" = "xyes" ; then + ifelse([$1], , :, [$1]) + else + QWT_CFLAGS="" + QWT_LIBDIRS="" + ifelse([$2], , :, [$2]) + fi + + dnl Export our variables + AC_SUBST(QWT_CFLAGS) + AC_SUBST(QWT_LIBS) +]) diff --git a/config/gr_qwtplot3d.m4 b/config/gr_qwtplot3d.m4 new file mode 100644 index 00000000..758dfbc3 --- /dev/null +++ b/config/gr_qwtplot3d.m4 @@ -0,0 +1,151 @@ +dnl +dnl Copyright 2008 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 + +dnl Configure paths for library qwtplot3d. +dnl +dnl GR_QWTPLOT3D([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl +dnl Test for library qwtplot3d, set QWTPLOT3D_CFLAGS and QWTPLOT3D_LIBS if found. Assumes +dnl QT_CFLAGS and QT_LIBS have already been correctly set. +dnl + +AC_DEFUN([GR_QWTPLOT3D], +[ + dnl QWTPLOT3D Library Version + + dnl Save the environment + AC_LANG_PUSH(C++) + qwtplot3d_save_CPPFLAGS="$CPPFLAGS" + qwtplot3d_save_LIBS="$LIBS" + libqwtplot3d_ok=yes + + dnl Allow user to specify where QWTPLOT3D files are + AC_ARG_WITH([qwtplot3d-libdir], + [ --with-qwtplot3d-libdir=path Prefix where QWTPLOT3D library is installed (optional)], + [qwtplot3d_libdir="$withval"], [qwtplot3d_libdir=""]) + + AC_ARG_WITH([qwtplot3d-incdir], + [ --with-qwtplot3d-incdir=path Prefix where QWTPLOT3D include files are (optional)], + [qwtplot3d_incdir="$withval"], [qwtplot3d_incdir=""]) + + AC_ARG_WITH([qwtplot3d-lib], + [ --with-qwtplot3d-lib=library QWT Plot3D library name (optional)], + [qwtplot3d_lib="$withval"], [qwtplot3d_lib=""]) + + + dnl Check for presence of header files + dnl if not user-specified, try the first include dir (Ubuntu), then + dnl try the second include dir (Fedora) + CPPFLAGS="$CPPFLAGS $QTCORE_CFLAGS $QTGUI_CFLAGS $QWT_CFLAGS" + + dnl if not set by user + if test "$qwtplot3d_incdir" = "" ; then + dnl check qwtplot3d/qwtplot3d.h (as in Fedora) + AC_CHECK_HEADER( + [qwtplot3d/qwt3d_plot.h], + [qwtplot3d_qwtplot3d_h=yes], + [qwtplot3d_qwtplot3d_h=no] + ) + dnl If it was found, set the flags and move on + if test "$qwtplot3d_qwtplot3d_h" = "yes" ; then + QWTPLOT3D_CFLAGS="$QWTPLOT3D_CFLAGS -I/usr/include/qwtplot3d" + else + dnl otherwise, check qwtplot3d-qt4/qwtplot3d.h (as in Ubuntu) + AC_CHECK_HEADER( + [qwtplot3d-qt4/qwt3d_plot.h], + [qwtplot3d_qt4_qwtplot3d_h=yes], + [qwtplot3d_qt4_qwtplot3d_h=no] + ) + dnl if it was found, set the flags and move on + if test "$qwtplot3d_qt4_qwtplot3d_h" = "yes" ; then + QWTPLOT3D_CFLAGS="$QWTPLOT3D_CFLAGS -I/usr/include/qwtplot3d-qt4" + else + dnl otherwise, qwtplot3d.h wasn't found, so set the flag to no + libqwtplot3d_ok=no + fi + fi + else + dnl Using the user-specified include directory + QWTPLOT3D_CFLAGS="$QWTPLOT3D_CFLAGS -I$qwtplot3d_incdir" + AC_CHECK_HEADER( + [$qwtplot3d_incdir/qwt3d_plot.h], + [], + [libqwtplot3d_ok=no]) + fi + + dnl Don't bother going on if we can't find the headers + if test "$libqwtplot3d_ok" = "yes" ; then + + dnl Check for QWTPLOT3D library (qwtplot3d or qwtplot3d-qt4) + + dnl User-defined QWTPLOT3D library path + if test "$qwtplot3d_libdir" != "" ; then + QWTPLOT3D_LIBS="-L$qwtplot3d_libdir $QWTPLOT3D_LIBS" + fi + + dnl temporarily set these so the AC_CHECK_LIB works + CPPFLAGS="$CPPFLAGS $QWTPLOT3D_CFLAGS" + LIBS="$qwtplot3d_save_LIBS $QT_LIBS $QWTPLOT3D_LIBS -lqwtplot3d-qt4" + + dnl If the user specified a qwtplot3d library name, use it here + if test "$qwtplot3d_lib" != "" ; then + AC_CHECK_LIB([$qwtplot3d_lib], [main], [libqwtplot3d_ok=yes], [libqwtplot3d_ok=no]) + + else + dnl Check for 'main' in libqwtplot3d-qt4 + AC_CHECK_LIB([qwtplot3d-qt4], [main], [libqwtplot3d_ok=yes], [libqwtplot3d_ok=no]) + + dnl If library found properly, set the flag and move on + if test "$libqwtplot3d_ok" = "yes" ; then + QWTPLOT3D_LIBS="$QWTPLOT3D_LIBS -lqwtplot3d-qt4" + else + dnl Otherwise, check for 'main' in libqwtplot3d + LIBS="$qwtplot3d_save_LIBS $QT_LIBS $QWTPLOT3D_LIBS -lqwtplot3d" + AC_CHECK_LIB([qwtplot3d], [main], [libqwtplot3d_ok=yes], [libqwtplot3d_ok=no]) + if test "$libqwtplot3d_ok" = "yes" ; then + QWTPLOT3D_LIBS="$QWTPLOT3D_LIBS -lqwtplot3d" + else + AC_MSG_RESULT([Could not link to libqwtplot3d.so]) + fi + fi + fi + else + AC_MSG_RESULT([Could not find qwtplot3d headers]) + fi + + dnl Restore saved variables + LIBS="$qwtplot3d_save_LIBS" + CPPFLAGS="$qwtplot3d_save_CPPFLAGS" + AC_LANG_POP + + dnl Execute user actions + if test "x$libqwtplot3d_ok" = "xyes" ; then + ifelse([$1], , :, [$1]) + else + QWTPLOT3D_CFLAGS="" + QWTPLOT3D_LIBDIRS="" + ifelse([$2], , :, [$2]) + fi + + dnl Export our variables + AC_SUBST(QWTPLOT3D_CFLAGS) + AC_SUBST(QWTPLOT3D_LIBS) +]) diff --git a/config/gr_scripting.m4 b/config/gr_scripting.m4 index 86870e7c..e030a810 100644 --- a/config/gr_scripting.m4 +++ b/config/gr_scripting.m4 @@ -24,7 +24,7 @@ AC_DEFUN([GR_SCRIPTING],[ AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_LIBTOOL]) - SWIG_PROG(1.3.23) + SWIG_PROG(1.3.31) SWIG_ENABLE_CXX SWIG_PYTHON ]) diff --git a/config/gr_set_md_cpu.m4 b/config/gr_set_md_cpu.m4 index 1ef75a53..56fd83ba 100644 --- a/config/gr_set_md_cpu.m4 +++ b/config/gr_set_md_cpu.m4 @@ -1,5 +1,5 @@ dnl -dnl Copyright 2003 Free Software Foundation, Inc. +dnl Copyright 2003,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -19,25 +19,45 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. dnl +AC_DEFUN([_TRY_ADD_ALTIVEC], +[ + LF_CHECK_CC_FLAG([-mabi=altivec -maltivec]) + LF_CHECK_CXX_FLAG([-mabi=altivec -maltivec]) +]) + AC_DEFUN([GR_SET_MD_CPU],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_WITH(md-cpu, - [ --with-md-cpu=ARCH set machine dependent speedups (auto)], + AC_HELP_STRING([--with-md-cpu=ARCH],[set machine dependent speedups (auto)]), [cf_with_md_cpu="$withval"], [cf_with_md_cpu="$host_cpu"]) - AC_MSG_CHECKING([for machine dependent speedups]) case "$cf_with_md_cpu" in - x86 | i[[3-7]]86) MD_CPU=x86 MD_SUBCPU=x86 ;; - x86_64) MD_CPU=x86 MD_SUBCPU=x86_64 ;; -# sparc) MD_CPU=sparc ;; - *) MD_CPU=generic ;; + x86 | i[[3-7]]86) MD_CPU=x86 MD_SUBCPU=x86 ;; + x86_64) MD_CPU=x86 MD_SUBCPU=x86_64 ;; + powerpc*) MD_CPU=powerpc ;; + *) MD_CPU=generic ;; esac + + AC_ARG_ENABLE(altivec, + AC_HELP_STRING([--enable-altivec],[enable altivec on PowerPC (yes)]), + [ if test $MD_CPU = powerpc; then + case "$enableval" in + (no) MD_CPU=generic ;; + (yes) _TRY_ADD_ALTIVEC ;; + (*) AC_MSG_ERROR([Invalid argument ($enableval) to --enable-altivec]) ;; + esac + fi], + [ if test $MD_CPU = powerpc; then _TRY_ADD_ALTIVEC fi]) + + + AC_MSG_CHECKING([for machine dependent speedups]) AC_MSG_RESULT($MD_CPU) AC_SUBST(MD_CPU) AC_SUBST(MD_SUBCPU) AM_CONDITIONAL(MD_CPU_x86, test "$MD_CPU" = "x86") AM_CONDITIONAL(MD_SUBCPU_x86_64, test "$MD_SUBCPU" = "x86_64") + AM_CONDITIONAL(MD_CPU_powerpc, test "$MD_CPU" = "powerpc") AM_CONDITIONAL(MD_CPU_generic, test "$MD_CPU" = "generic") ]) diff --git a/config/gr_standalone.m4 b/config/gr_standalone.m4 new file mode 100644 index 00000000..370f7fb0 --- /dev/null +++ b/config/gr_standalone.m4 @@ -0,0 +1,116 @@ +dnl +dnl Copyright 2008 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 along +dnl with this program; if not, write to the Free Software Foundation, Inc., +dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +dnl + +dnl +dnl GR_STANDALONE([package],[version]) +dnl +dnl Handles the bulk of the configure.ac work for an out-of-tree build +dnl +dnl N.B., this is an m4_define because if it were an AC_DEFUN it would +dnl get called too late to be useful. + +m4_define([GR_STANDALONE], +[ + AC_INIT([$1],[$2]) + AC_PREREQ(2.57) + AC_CONFIG_SRCDIR([config/gr_standalone.m4]) + AC_CONFIG_AUX_DIR([.]) + AM_CONFIG_HEADER(config.h) + + AC_CANONICAL_BUILD + AC_CANONICAL_HOST + AC_CANONICAL_TARGET + + AM_INIT_AUTOMAKE + + LF_CONFIGURE_CC + LF_CONFIGURE_CXX + GR_LIB64 dnl check for lib64 suffix after choosing compilers + + dnl add ${prefix}/lib${gr_libdir_suffix}/pkgconfig to the head of the PKG_CONFIG_PATH + if test x${PKG_CONFIG_PATH} = x; then + PKG_CONFIG_PATH=${prefix}/lib${gr_libdir_suffix}/pkgconfig + else + PKG_CONFIG_PATH=${prefix}/lib${gr_libdir_suffix}/pkgconfig:${PKG_CONFIG_PATH} + fi + export PKG_CONFIG_PATH + + LF_SET_WARNINGS + GR_SET_GPROF + GR_SET_PROF + AM_PROG_AS + AC_PROG_LN_S + AC_PROG_MAKE_SET + AC_PROG_INSTALL + AC_PATH_PROG([RM_PROG], [rm]) + + AC_LIBTOOL_WIN32_DLL + AC_ENABLE_SHARED dnl do build shared libraries + AC_DISABLE_STATIC dnl don't build static libraries + m4_ifdef([LT_INIT],[LT_INIT],[AC_PROG_LIBTOOL]) + dnl GR_FORTRAN + + GR_NO_UNDEFINED dnl do we need the -no-undefined linker flag + GR_SCRIPTING dnl Locate python, SWIG, etc + + AC_ARG_WITH([python], + AC_HELP_STRING([--with-python], [Should we use python? [[default=yes]]]), + [case "$with_python" in + (no | yes) ;; + (*) AC_MSG_ERROR([Invalid argument ($with_python) to --with-python]) ;; + esac], + [with_python=yes]) + + AM_CONDITIONAL([USE_PYTHON], [test "$with_python" = yes]) + + + dnl Set the c++ compiler that we use for the build system when cross compiling + if test "x$CXX_FOR_BUILD" = x + then + CXX_FOR_BUILD=${CXX} + fi + AC_SUBST(CXX_FOR_BUILD) + + dnl Checks for header files. + AC_HEADER_STDC + + dnl Checks for typedefs, structures, and compiler characteristics. + AC_C_CONST + AC_C_INLINE + AC_TYPE_SIZE_T + AC_HEADER_TIME + AC_C_BIGENDIAN + + dnl Check for Mingw support + GR_PWIN32 + + AC_CHECK_PROG([XMLTO],[xmlto],[yes],[]) + AM_CONDITIONAL([HAS_XMLTO], [test x$XMLTO = xyes]) + + 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. + PKG_CHECK_EXISTS(cppunit, + [PKG_CHECK_MODULES(CPPUNIT, cppunit >= 1.9.14)], + [AM_PATH_CPPUNIT([1.9.14],[], + [AC_MSG_ERROR([GNU Radio requires cppunit. Stop])])]) + + PKG_CHECK_MODULES(GNURADIO_CORE, gnuradio-core >= 3) +]) diff --git a/config/gr_subversion.m4 b/config/gr_subversion.m4 new file mode 100644 index 00000000..849d7a9f --- /dev/null +++ b/config/gr_subversion.m4 @@ -0,0 +1,36 @@ +dnl +dnl Copyright 2007 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 + +# GR_SUBVERSION() +# +# Test for presence of subversion, and create variables for +# current repository version and last changed date. + +AC_DEFUN([GR_SUBVERSION],[ + AC_PATH_PROG([SVN],[svn]) + if test "$SVN" != "" -a -d .svn ; then + SVNVERSION=`$SVN info . | grep '^Revision' | cut -f 2- -d ' '` + SVNDATE=`$SVN info . | grep 'Last Changed Date' | cut -f 4-6 -d ' '` + fi + + AC_SUBST(SVNVERSION) + AC_SUBST(SVNDATE) +]) diff --git a/config/gr_x86_64.m4 b/config/gr_x86_64.m4 deleted file mode 100644 index 3f56c061..00000000 --- a/config/gr_x86_64.m4 +++ /dev/null @@ -1,39 +0,0 @@ -dnl -dnl Copyright 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 - -# GR_X86_64() -# -# Checks to see if we're on a x86_64 machine, and if so, ensure -# that libdir ends in "64" -# -AC_DEFUN([GR_X86_64],[ - AC_REQUIRE([AC_CANONICAL_HOST]) - if test "$host_cpu" = "x86_64"; then - AC_MSG_CHECKING([libdir for lib64 suffix]) - t=${libdir##*/lib} - if test "$t" != 64 && test -d /lib64 && ! test -L /lib64; then - libdir=${libdir}64 - AC_MSG_RESULT([no. Setting libdir to $libdir]) - else - AC_MSG_RESULT([yes]) - fi - fi -]) diff --git a/config/grc_build.m4 b/config/grc_build.m4 index b35071c0..77b59db6 100644 --- a/config/grc_build.m4 +++ b/config/grc_build.m4 @@ -1,4 +1,4 @@ -dnl 2006 Free Software Foundation, Inc. +dnl Copyright 2006,2008,2009 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -17,34 +17,271 @@ 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. -# Create --enable-foo argument for named component, create variables as needed -# $1 is component name -AC_DEFUN([GRC_ENABLE],[ - AC_ARG_ENABLE([$1],[ --enable-$1 Fail build if $1 fails configuration],[], - [[enable_]m4_bpatsubst($1,-,_)=$enable_all_components]) +dnl Create --enable-foo argument for named component, create variables as needed +dnl $1 is component name +AC_DEFUN([GRC_ENABLE], [ + _GRC_ENABLE($1,m4_bpatsubst($1,-,_)) ]) +dnl $2 is the '_'d component name +dnl on exit variable enable_$2 will be set to [yes|no]; +dnl passed will be [yes|no] (same as enable_$2) -# Conditionally build named component. -# $1 is component name -# $2 is executed if configuration passes and build is desired -# Use $passed=no to indicate configuration failure -# Any other value of $passed, including blank, assumes success +AC_DEFUN([_GRC_ENABLE],[ + passed=yes + AC_ARG_ENABLE([$1], + AC_HELP_STRING([--enable-$1], + [Stop if $1 fails configuration]), + [],[ + [enable_]$2=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + ]) +]) +dnl Component specific configuration +dnl The order of the GR_ macros determines the order of compilation +dnl For -any- checks on $enable_all_components +dnl use the following guildlines: +dnl yes : --enable-all-components was specified, so error out if any +dnl components do not pass configuration checks. +dnl no : --disable-all-components was specified, so try to build the +dnl --enable'd components, and error out if any do not pass +dnl configuration checks. +dnl "" : this option was not specified on the command line; try to +dnl build all components that are not --with'd, but don't +dnl error out if any component does not pass configuration checks. +dnl +dnl For each --enable-foo component, if that flag is not specified on +dnl the command line, the related variable $enable_foo will be set to +dnl $enable_all_components . + +dnl Create --with-foo argument for named compoment, create variables as needed +dnl $1 is component name +dnl $2 is what to do on success +dnl $3 is the PKG_CONFIG name; if not given, then $1 +AC_DEFUN([GRC_WITH], [ + if test [x]$3 = x; then + pc_comp_name="$1" + else + pc_comp_name="$3" + fi + _GRC_WITH($1,[$2],${pc_comp_name},m4_bpatsubst($1,-,_)) +]) +dnl $3 is the pkg-config component name +dnl $4 is the '_'d component name +dnl on exit variable passed will be [yes|no|with]: +dnl yes: if --enable-$1 and/or --enable-all-components was specified, +dnl but --with was not; +dnl with: if --with-$1 was specified, and passed checks; +dnl no: all other conditions +AC_DEFUN([_GRC_WITH],[ + AC_ARG_WITH([$1], + AC_HELP_STRING([--with-$1@<:@=PATH@:>@], + [Use package $1 if installed in PATH (if specified) or PKG_CONFIG_PATH (if PATH not specified); stop if $1 not found]), + [if test "x$withval" != "xyes"; then + [with_]$4[_val]=$withval + [with_]$4=yes + fi], + []) + if test x$[with_]$4 = xyes; then + if test x$[enable_]$4 = xyes; then + AC_MSG_ERROR([Component $1: Cannot use both --enable and --with]) + else + _GRC_WITH_PKG_CONFIG_CHECK($1,$3,$4) + ifelse([$2], , :, [$2]) + fi + fi +]) + +dnl Use 'pkgconfig' to check for a package +dnl $1 is the --with component name +dnl $2 is the pkg-config component name, if provided; otherwise use $1 for this +dnl on success, resulting INCLUDES, INCLUDEDIR, LA, and LIBDIRPATH variables +dnl will be set; on failure, will exit with an error. +AC_DEFUN([GRC_WITH_PKG_CONFIG_CHECK], [ + if test [x]$2 = x; then + pc_comp_name="$1" + else + pc_comp_name="$2" + fi + _GRC_WITH_PKG_CONFIG_CHECK($1,${pc_comp_name},m4_bpatsubst($1,-,_)) +]) +dnl $2 is the pkg-config component name +dnl $3 is the '_'d component name +AC_DEFUN([_GRC_WITH_PKG_CONFIG_CHECK],[ + dnl save PKG_CONFIG_PATH, restore at the end + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + + dnl create the PKG_CONFIG_PATH, via this component arg, if provided; + dnl else use the environment PKG_CONFIG_PATH + l_PKG_CONFIG_PATH=$[with_]$3[_val] + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH + + dnl verify that the file exists; if not, no point in continuing + if ! test -r ${l_PKG_CONFIG_PATH}/$2[.pc]; then + AC_MSG_ERROR([Component $1: PKGCONFIG cannot find info for $2, with provided PKG_CONFIG_PATH = @<:@ $l_PKG_CONFIG_PATH @:>@ .]) + fi + fi + + dnl do the check; error out if not found + PKG_CHECK_EXISTS($2, [passed=with; check1=yes], [ + check1=no + dnl pkg-config returned an error; this might be that the .pc + dnl file was not valid, or the Requires: were not met. + dnl If the arg was provided and the input PKG_CONFIG_PATH , then try + dnl again appending the whole PKG_CONFIG_PATH. + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + PKG_CHECK_EXISTS($2, passed=with, passed=no) + fi + fi + if test $passed != with; then + AC_MSG_ERROR([Component $1: PKGCONFIG cannot find info for $2, with PKG_CONFIG_PATH = @<:@ $PKG_CONFIG_PATH @:>@ .]) + fi + dnl pkg-config Requires are now met; save the new PKG_CONFIG_PATH + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + ]) + + dnl if PKG_CHECK_EXISTS returned, then this component's .pc file was + dnl found in the provided 'arg' PKG_CONFIG_PATH; + dnl retrieve various parameters + $3[_INCLUDES]=`$PKG_CONFIG --cflags-only-I $2` + $3[_LA]=`$PKG_CONFIG --libs $2` + $3[_INCLUDEDIR]=`$PKG_CONFIG --variable=includedir $2` + + if test x$check1 = xyes; then + dnl prepend the args PKG_CONFIG_PATH to the saved one, if the + dnl saved version was not empty + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi +]) + +dnl Check the $prefix versus the --with libdirpath for this component +dnl $1 is the prefix +dnl $2 is the --with component name +dnl $3 is the --with component library path +AC_DEFUN([GRC_PREFIX_LDFLAGS],[ + $2[_LIBDIRPATH]=$3 + dnl create LDFLAGS for this --with, if different from the provided $prefix + if test [x]$1[/lib] != [x]$3; then + $2[_LDFLAG]=[-L]$3 + else + $2[_LDFLAG]= + fi +]) + +dnl Check to make sure this dependency is fulfilled for this component +dnl $1 is the component's name +dnl $2 is the component dependency name +dnl On input and exit, $passed will be: +dnl with : if --with passed muster +dnl yes : if --enable passed muster +dnl no : otherwise +dnl If trying --with, will error-out if any dependency was not --with'd +AC_DEFUN([GRC_CHECK_DEPENDENCY],[ +dnl f0=[enable_]m4_bpatsubst($1,-,_) +dnl f1=[$enable_]m4_bpatsubst($1,-,_) +dnl echo +dnl echo "$1 : Checking Dependency $2" +dnl echo "$1 : enable_all_components is '$enable_all_components'" +dnl echo "$1 : $f0 is '$f1'" +dnl echo "$1 : passed is '$passed'" +dnl echo + if test $passed != no; then + if test $passed = yes; then + dnl make sure this dependency was not skipped + if test [x$]m4_bpatsubst($2,-,_)[_skipped] = xyes; then + AC_MSG_RESULT([Component $1 requires $2, which is not being built or specified via pre-installed files.]) + passed=no + fi + else + dnl make sure this dependency was --with'd only; not --enable'd + if test [x$]m4_bpatsubst($2,-,_)[_with] = xno; then + AC_MSG_ERROR([Component $1 requires $2 to be included as --with-$2@<:@=arg@:>@]) + fi + fi + fi +]) + +dnl Check to make sure GUILE is available +dnl $1 is the component name +AC_DEFUN([GRC_CHECK_GUILE],[ + if test x"$GUILE" = x; then + AC_MSG_RESULT([Component $1 requires guile, which was not found.]) + passed=no + fi +]) + +dnl Add the specified "with" list; clear the provided variable +dnl $1 is the component name +dnl $2 is the path list name suffix +dnl $3 is the separator (for paths, ":"; for includes " ") +AC_DEFUN([GRC_ADD_TO_LIST],[ + if test "x${$1[_]$2}" != "x"; then + if test "x$[with_]$2" = "x"; then + [with_]$2="${$1[_]$2}" + else + [with_]$2="${$1[_]$2}"$3"$[with_]$2" + fi + $1[_]$2= + fi +]) + +dnl Conditionally build named component. +dnl $1 is component name +dnl $2 is executed if configuration passes and build is desired AC_DEFUN([GRC_BUILD_CONDITIONAL],[ - if test x$passed = xno; then - skipped_dirs="$skipped_dirs $1" - if test x$[enable_]m4_bpatsubst($1,-,_) = xyes; then - AC_MSG_ERROR([Component $1 has errors, stopping.]) + _GRC_BUILD_CONDITIONAL($1, $2, m4_bpatsubst($1,-,_)) +]) +dnl $3=m4_bpatsubst($1,-,_) +dnl Use $passed=no to indicate configuration failure; +dnl Use $passed=with to indicate the use of pre-installed libraries and headers; +dnl Any other value of $passed, including blank, assumes success; +dnl Defines $3_with=[yes|no] depending on if $passed=with or not (respectively) +dnl Defines $3_skipped=[yes|no] depending on if $passed=no or not (respectively) +AC_DEFUN([_GRC_BUILD_CONDITIONAL],[ + $3[_with]=no + if test $passed = no; then + if test x$[enable_]$3 = xyes; then + AC_MSG_ERROR([Component $1 has errors; stopping.]) else AC_MSG_RESULT([Not building component $1.]) - fi + fi else - if test x$[enable_]m4_bpatsubst($1,-,_) != xno; then - $2 - build_dirs="$build_dirs $1" - AC_MSG_RESULT([Component $1 passed configuration checks, building.]) + if test $passed = with; then + with_dirs="$with_dirs $1" + GRC_ADD_TO_LIST($3, INCLUDES, " ") + GRC_ADD_TO_LIST($3, SWIG_INCLUDES, " ") + GRC_ADD_TO_LIST($3, PYDIRPATH, ":") + GRC_ADD_TO_LIST($3, SWIGDIRPATH, ":") + GRC_ADD_TO_LIST($3, LIBDIRPATH, ":") + AC_MSG_RESULT([Component $1 will be included from a pre-installed library and includes.]) + $3[_with]=yes else - skipped_dirs="$skipped_dirs $1" - AC_MSG_RESULT([Component $1 passed configuration checks, but not building.]) + $3[_LDFLAG]= + if test x$[enable_]$3 != xno; then + ifelse([$2], , :, [$2]) + build_dirs="$build_dirs $1" + AC_MSG_RESULT([Component $1 passed configuration checks; building.]) + else + passed=no + AC_MSG_RESULT([Component $1 passed configuration checks; but not building.]) + fi fi fi + if test $passed = no; then + skipped_dirs="$skipped_dirs $1" + $3[_skipped]=yes + else + $3[_skipped]=no + fi + AC_SUBST($3[_INCLUDES]) + AC_SUBST($3[_LA]) + AC_SUBST($3[_INCLUDEDIR]) + AC_SUBST($3[_LIBDIRPATH]) + AC_SUBST($3[_LDFLAG]) ]) diff --git a/config/grc_docs.m4 b/config/grc_docs.m4 new file mode 100644 index 00000000..86b31ae0 --- /dev/null +++ b/config/grc_docs.m4 @@ -0,0 +1,33 @@ +dnl Copyright 2009 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_DOCS],[ + GRC_ENABLE(docs) + + AC_CONFIG_FILES([ \ + docs/Makefile \ + docs/doxygen/Doxyfile \ + docs/doxygen/Makefile \ + docs/doxygen/other/Makefile \ + docs/doxygen/xml-swig/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(docs) + +]) diff --git a/config/grc_gcell.m4 b/config/grc_gcell.m4 new file mode 100644 index 00000000..ff289d1a --- /dev/null +++ b/config/grc_gcell.m4 @@ -0,0 +1,80 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_GCELL],[ + GRC_ENABLE(gcell) + dnl GRC_WITH(gcell) + + dnl Don't do gcell if omnithread skipped + GRC_CHECK_DEPENDENCY(gcell, omnithread) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't build gcell if host_cpu isn't powerpc + AC_MSG_CHECKING([whether host_cpu is powerpc*]) + case "$host_cpu" in + powerpc*) + AC_MSG_RESULT(yes) + ;; + *) + passed=no + AC_MSG_RESULT(no) + ;; + esac + + dnl Don't build gcell if we can't find spu-gcc. + AC_CHECK_PROG([SPU_GCC_PROG],[spu-gcc],[yes],[no]) + if test $SPU_GCC_PROG = no; then + passed=no + fi + fi + + if test $passed != with; then + dnl how and where to find INCLUDES and LA + gcell_INCLUDES="-I\${abs_top_srcdir}/gcell/include" + gcell_LA="\${abs_top_builddir}/gcell/lib/libgcell.la" + gcell_spu_INCLUDES="-I\${abs_top_srcdir}/gcell/include" + gcell_spu_LA="\${abs_top_builddir}/gcell/lib/spu/libgcell_spu.a" + AC_SUBST(gcell_spu_INCLUDES) + AC_SUBST(gcell_spu_LA) + + fi + + AC_CONFIG_FILES([ \ + gcell/Makefile \ + gcell/gcell.pc \ + gcell/gcell_spu.pc \ + gcell/include/Makefile \ + gcell/include/gcell/Makefile \ + gcell/include/gcell/spu/Makefile \ + gcell/lib/Makefile \ + gcell/lib/spu/Makefile \ + gcell/lib/general/Makefile \ + gcell/lib/wrapper/Makefile \ + gcell/lib/runtime/Makefile \ + gcell/apps/Makefile \ + gcell/apps/spu/Makefile \ + gcell/ibm/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(gcell) +]) diff --git a/config/grc_gnuradio_core.m4 b/config/grc_gnuradio_core.m4 index 90134add..a1724aea 100644 --- a/config/grc_gnuradio_core.m4 +++ b/config/grc_gnuradio_core.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,15 +18,68 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GNURADIO_CORE],[ - GRC_ENABLE([gnuradio-core]) + GRC_ENABLE(gnuradio-core) + + GRC_WITH(gnuradio-core, [ + dnl gnuradio-core has some extra defines if --with specified + gnuradio_core_SWIGDIRPATH="$gnuradio_core_INCLUDEDIR/swig" + gnuradio_core_I="$gnuradio_core_SWIGDIRPATH/gnuradio.i" + gnuradio_core_SWIG_INCLUDES="-I$gnuradio_core_SWIGDIRPATH" + gnuradio_core_PYDIRPATH=$pythondir + ]) + + dnl Don't do gnuradio-core if gruel or omnithread skipped + GRC_CHECK_DEPENDENCY(gnuradio-core, gruel) + GRC_CHECK_DEPENDENCY(gnuradio-core, omnithread) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl look for fast CBLAS for GSL, but don't complain if not found + ACX_CBLAS([],[]) + dnl check for GSL + PKG_CHECK_MODULES(GSL, gsl >= 1.10, + [], dnl FIXME remove -lgslcblas from GSL_LIBS if we found a better CBLAS_LIBS above + [passed=no;AC_MSG_RESULT([gnuradio-core requires package gsl >= 1.10, not found.])]) + fi + + if test $passed != with; then + dnl how and where to find INCLUDES and LA and such + gnuradio_core_INCLUDES="\ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/runtime \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/general \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/general \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/gengen \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/gengen \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/filter \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/filter \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/missing \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/reed-solomon \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/viterbi \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/io \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/g72x \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/swig \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/hier \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/swig \ +\$(FFTW3F_CFLAGS) \ +\$(GSL_CFLAGS)" + gnuradio_core_LA="\${abs_top_builddir}/gnuradio-core/src/lib/libgnuradio-core.la" + dnl gnuradio_core_I="\${abs_top_srcdir}/gnuradio-core/src/lib/swig/gnuradio.i" + gnuradio_core_LIBDIRPATH="\${abs_top_builddir}/gnuradio-core/src/lib:\${abs_top_builddir}/gnuradio-core/src/lib/.libs" + gnuradio_core_SWIGDIRPATH="\${abs_top_builddir}/gnuradio-core/src/lib/swig:\${abs_top_builddir}/gnuradio-core/src/lib/swig/.libs:\${abs_top_srcdir}/gnuradio-core/src/lib/swig" + gnuradio_core_PYDIRPATH="\${abs_top_srcdir}/gnuradio-core/src/python" + fi + + dnl other externally-required gnuradio-core variables + AC_SUBST(gnuradio_core_I) + AC_SUBST(gnuradio_core_SWIGDIRPATH) + AC_SUBST(gnuradio_core_PYDIRPATH) AC_CONFIG_FILES([ \ gnuradio-core/Makefile gnuradio-core/gnuradio-core.pc \ - gnuradio-core/doc/Doxyfile \ - gnuradio-core/doc/Makefile \ - gnuradio-core/doc/other/Makefile \ - gnuradio-core/doc/xml/Makefile \ gnuradio-core/src/Makefile \ gnuradio-core/src/gen_interpolator_taps/Makefile \ gnuradio-core/src/lib/Makefile \ @@ -34,31 +87,30 @@ AC_DEFUN([GRC_GNURADIO_CORE],[ gnuradio-core/src/lib/g72x/Makefile \ gnuradio-core/src/lib/general/Makefile \ gnuradio-core/src/lib/general/gr_prefix.cc \ + gnuradio-core/src/lib/gengen/Makefile \ gnuradio-core/src/lib/io/Makefile \ gnuradio-core/src/lib/missing/Makefile \ - gnuradio-core/src/lib/omnithread/Makefile \ gnuradio-core/src/lib/reed-solomon/Makefile \ + gnuradio-core/src/lib/viterbi/Makefile \ gnuradio-core/src/lib/runtime/Makefile \ + gnuradio-core/src/lib/hier/Makefile \ gnuradio-core/src/lib/swig/Makefile \ gnuradio-core/src/python/Makefile \ gnuradio-core/src/python/bin/Makefile \ gnuradio-core/src/python/gnuradio/Makefile \ - gnuradio-core/src/python/gnuradio/blks/Makefile \ - gnuradio-core/src/python/gnuradio/blksimpl/Makefile \ + gnuradio-core/src/python/gnuradio/blks2/Makefile \ + gnuradio-core/src/python/gnuradio/blks2impl/Makefile \ gnuradio-core/src/python/gnuradio/gr/Makefile \ gnuradio-core/src/python/gnuradio/gr/run_tests \ gnuradio-core/src/python/gnuradio/gru/Makefile \ gnuradio-core/src/python/gnuradio/gruimpl/Makefile \ + gnuradio-core/src/python/gnuradio/vocoder/Makefile \ gnuradio-core/src/tests/Makefile \ gnuradio-core/src/utils/Makefile \ ]) - - passed=yes - 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]) - dnl kludge up initial swig dependency file - AC_CONFIG_COMMANDS([swig_deps], [touch gnuradio-core/src/lib/swig/gnuradio_swig_python.d]) + 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]) ]) ]) diff --git a/config/grc_gnuradio_examples.m4 b/config/grc_gnuradio_examples.m4 index d7e896da..7de55666 100644 --- a/config/grc_gnuradio_examples.m4 +++ b/config/grc_gnuradio_examples.m4 @@ -1,42 +1,47 @@ -# Copyright 2001,2002,2003,2004,2005,2006 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. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_GNURADIO_EXAMPLES],[ - GRC_ENABLE([gnuradio-examples]) + GRC_ENABLE(gnuradio-examples) + + dnl Do not do gnuradio-examples if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gnuradio-examples, gnuradio-core) AC_CONFIG_FILES([ \ gnuradio-examples/Makefile \ - gnuradio-examples/python/Makefile \ - gnuradio-examples/python/apps/hf_explorer/Makefile \ - gnuradio-examples/python/apps/hf_radio/Makefile \ - gnuradio-examples/python/apps/Makefile \ - gnuradio-examples/python/audio/Makefile \ - gnuradio-examples/python/channel-coding/Makefile \ - gnuradio-examples/python/channel-coding/fsm_files/Makefile \ - gnuradio-examples/python/digital/Makefile \ - gnuradio-examples/python/digital_voice/Makefile \ - gnuradio-examples/python/multi-antenna/Makefile \ - gnuradio-examples/python/multi_usrp/Makefile \ - gnuradio-examples/python/networking/Makefile \ - gnuradio-examples/python/usrp/Makefile + gnuradio-examples/c++/Makefile \ + gnuradio-examples/python/Makefile \ + gnuradio-examples/python/apps/hf_explorer/Makefile \ + gnuradio-examples/python/apps/hf_radio/Makefile \ + gnuradio-examples/python/apps/Makefile \ + gnuradio-examples/python/audio/Makefile \ + gnuradio-examples/python/digital/Makefile \ + gnuradio-examples/python/digital_voice/Makefile \ + gnuradio-examples/python/digital-bert/Makefile \ + gnuradio-examples/python/mp-sched/Makefile \ + gnuradio-examples/python/multi-antenna/Makefile \ + gnuradio-examples/python/multi_usrp/Makefile \ + gnuradio-examples/python/network/Makefile \ + gnuradio-examples/python/ofdm/Makefile \ + gnuradio-examples/python/usrp/Makefile \ + gnuradio-examples/python/usrp2/Makefile \ ]) - passed=yes - GRC_BUILD_CONDITIONAL([gnuradio-examples]) + GRC_BUILD_CONDITIONAL(gnuradio-examples) ]) diff --git a/config/grc_gr_atsc.m4 b/config/grc_gr_atsc.m4 new file mode 100644 index 00000000..003d1b7c --- /dev/null +++ b/config/grc_gr_atsc.m4 @@ -0,0 +1,39 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_ATSC],[ + GRC_ENABLE(gr-atsc) + + dnl Don't do gr-atsc if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-atsc, gnuradio-core) + + AC_CONFIG_FILES([\ + gr-atsc/Makefile \ + gr-atsc/doc/Makefile \ + gr-atsc/src/Makefile \ + gr-atsc/src/lib/Makefile \ + gr-atsc/src/python/Makefile \ + gr-atsc/src/python/run_tests \ + ]) + + GRC_BUILD_CONDITIONAL(gr-atsc,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_atsc], [chmod +x gr-atsc/src/python/run_tests]) + ]) +]) diff --git a/config/grc_gr_audio_alsa.m4 b/config/grc_gr_audio_alsa.m4 index dad8c21b..9c653c1c 100644 --- a/config/grc_gr_audio_alsa.m4 +++ b/config/grc_gr_audio_alsa.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,20 +18,29 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_AUDIO_ALSA],[ - GRC_ENABLE([gr-audio-alsa]) + GRC_ENABLE(gr-audio-alsa) + + dnl Don't do gr-audio-alsa if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-audio-alsa, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do gr-audio-alsa if the 'alsa' package is not installed. + PKG_CHECK_MODULES(ALSA, alsa >= 0.9,[], + [passed=no;AC_MSG_RESULT([gr-audio-alsa requires package alsa, not found.])]) + fi AC_CONFIG_FILES([ \ - gr-audio-alsa/Makefile \ - gr-audio-alsa/src/Makefile \ - gr-audio-alsa/src/run_tests \ + gr-audio-alsa/Makefile \ + gr-audio-alsa/gr-audio-alsa.pc \ + gr-audio-alsa/src/Makefile \ + gr-audio-alsa/src/run_tests \ ]) - passed=yes - PKG_CHECK_MODULES(ALSA, alsa >= 0.9,[], - [passed=no;AC_MSG_RESULT([gr-audio-alsa requires package alsa, not found.])]) - - GRC_BUILD_CONDITIONAL([gr-audio-alsa],[ - AC_SUBST(ALSA_LIBS) + 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]) ]) diff --git a/config/grc_gr_audio_jack.m4 b/config/grc_gr_audio_jack.m4 index 025c25e9..cb7bf299 100644 --- a/config/grc_gr_audio_jack.m4 +++ b/config/grc_gr_audio_jack.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,20 +18,28 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_AUDIO_JACK],[ - GRC_ENABLE([gr-audio-jack]) + GRC_ENABLE(gr-audio-jack) + + dnl Don't do gr-audio-jack if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-audio-jack, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do gr-audio-jack if in 'jack' isn't installed + PKG_CHECK_MODULES(JACK, jack >= 0.8, [], + [passed=no;AC_MSG_RESULT([gr-audio-jack requires package jack, not found.])]) + fi AC_CONFIG_FILES([ \ - gr-audio-jack/Makefile \ + gr-audio-jack/Makefile \ gr-audio-jack/src/Makefile \ - gr-audio-jack/src/run_tests \ + gr-audio-jack/src/run_tests \ ]) - passed=yes - PKG_CHECK_MODULES(JACK, jack >= 0.8,[], - [passed=no;AC_MSG_RESULT([gr-audio-jack requires package jack, not found.])]) - - GRC_BUILD_CONDITIONAL([gr-audio-jack],[ - AC_SUBST(JACK_LIBS) + GRC_BUILD_CONDITIONAL(gr-audio-jack,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_jack], [chmod +x gr-audio-jack/src/run_tests]) ]) diff --git a/config/grc_gr_audio_oss.m4 b/config/grc_gr_audio_oss.m4 index c6d260c2..6fd4577a 100644 --- a/config/grc_gr_audio_oss.m4 +++ b/config/grc_gr_audio_oss.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,31 +18,44 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_AUDIO_OSS],[ - GRC_ENABLE([gr-audio-oss]) + GRC_ENABLE(gr-audio-oss) - AC_CONFIG_FILES([ \ - gr-audio-oss/Makefile \ - gr-audio-oss/src/Makefile \ - gr-audio-oss/src/run_tests \ - ]) + dnl Don't do gr-audio-oss if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-audio-oss, gnuradio-core) - passed=yes - case $target in - *-*-netbsd*) + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Make sure the correct library and/or headers are available. + case $host_os in + netbsd*) AC_HAVE_LIBRARY(ossaudio,[], [passed=no;AC_MSG_RESULT([gr-audio-oss requires library ossaudio, not found.])]) - if test x$passed != xno; then + if test $passed != no; then OSS_LIBS=-lossaudio + AC_SUBST(OSS_LIBS) AC_MSG_RESULT([Using OSS library $OSS_LIBS]) fi ;; - *) + darwin*) + dnl OSX / Darwin can't use OSS + passed=no + ;; + *) AC_CHECK_HEADER(sys/soundcard.h,[], [passed=no;AC_MSG_RESULT([gr-audio-oss requires sys/soundcard.h, not found.])]) - esac + esac + fi + + AC_CONFIG_FILES([ \ + gr-audio-oss/Makefile \ + gr-audio-oss/src/Makefile \ + gr-audio-oss/src/run_tests \ + ]) - GRC_BUILD_CONDITIONAL([gr-audio-oss],[ - AC_SUBST(OSS_LIBS) + GRC_BUILD_CONDITIONAL(gr-audio-oss,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_oss], [chmod +x gr-audio-oss/src/run_tests]) ]) diff --git a/config/grc_gr_audio_osx.m4 b/config/grc_gr_audio_osx.m4 index 1d7f453a..95fbc17d 100644 --- a/config/grc_gr_audio_osx.m4 +++ b/config/grc_gr_audio_osx.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,19 +18,36 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_AUDIO_OSX],[ - GRC_ENABLE([gr-audio-osx]) - + GRC_ENABLE(gr-audio-osx) + + dnl Don't do gr-audio-osx if omnithread or gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-audio-osx, omnithread) + GRC_CHECK_DEPENDENCY(gr-audio-osx, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + case "$host_os" in + darwin*) + MACOSX_AUDIOUNIT([], + [passed=no;AC_MSG_RESULT([gr-audio-osx requires AudioUnit, not found.])]) + ;; + *) + AC_MSG_RESULT([gr-audio-osx will build on Mac OS X and Darwin only.]) + passed=no + ;; + esac + fi + AC_CONFIG_FILES([ \ - gr-audio-osx/Makefile \ - gr-audio-osx/src/Makefile \ - gr-audio-osx/src/run_tests \ + gr-audio-osx/Makefile \ + gr-audio-osx/src/Makefile \ + gr-audio-osx/src/run_tests \ ]) - - passed=yes - MACOSX_AUDIOUNIT([], - [passed=no;AC_MSG_RESULT([gr-audio-osx requires AudioUnit, not found.])]) - GRC_BUILD_CONDITIONAL([gr-audio-osx],[ + GRC_BUILD_CONDITIONAL(gr-audio-osx,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_osx], [chmod +x gr-audio-osx/src/run_tests]) ]) diff --git a/config/grc_gr_audio_portaudio.m4 b/config/grc_gr_audio_portaudio.m4 index 31ab07aa..b2f27f2c 100644 --- a/config/grc_gr_audio_portaudio.m4 +++ b/config/grc_gr_audio_portaudio.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,20 +18,28 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_AUDIO_PORTAUDIO],[ - GRC_ENABLE([gr-audio-portaudio]) + GRC_ENABLE(gr-audio-portaudio) + + dnl Don't do gr-audio-portaudio if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-audio-portaudio, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do gr-audio-portaudio if the 'portaudio' library is unavailable. + PKG_CHECK_MODULES(PORTAUDIO, portaudio-2.0 >= 19,[], + [passed=no;AC_MSG_RESULT([gr-audio-portaudio requires package portaudio, not found.])]) + fi AC_CONFIG_FILES([ \ - gr-audio-portaudio/Makefile \ - gr-audio-portaudio/src/Makefile \ - gr-audio-portaudio/src/run_tests \ + gr-audio-portaudio/Makefile \ + gr-audio-portaudio/src/Makefile \ + gr-audio-portaudio/src/run_tests \ ]) - passed=yes - PKG_CHECK_MODULES(PORTAUDIO, portaudio-2.0 >= 19,[], - [passed=no;AC_MSG_RESULT([gr-audio-portaudio requires package portaudio, not found.])]) - - GRC_BUILD_CONDITIONAL([gr-audio-portaudio],[ - AC_SUBST(PORTAUDIO_LIBS) + GRC_BUILD_CONDITIONAL(gr-audio-portaudio,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_portaudio], [chmod +x gr-audio-portaudio/src/run_tests]) ]) diff --git a/config/grc_gr_audio_windows.m4 b/config/grc_gr_audio_windows.m4 index 320c5d31..bb624416 100644 --- a/config/grc_gr_audio_windows.m4 +++ b/config/grc_gr_audio_windows.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,21 +18,38 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_AUDIO_WINDOWS],[ - GRC_ENABLE([gr-audio-windows]) + GRC_ENABLE(gr-audio-windows) + + dnl Don't do gr-audio-windows if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-audio-windows, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + case "$host_os" in + cygwin*|win*|mingw*) + dnl Don't do gr-audio-windows if the 'winmm' library isn't available. + AC_HAVE_LIBRARY(winmm, [], + [passed=no;AC_MSG_RESULT([gr-audio-windows requires library winmm, not found.])]) + ;; + *) + AC_MSG_RESULT([gr-audio-windows will build on a Windows Unix environment only.]) + passed=no + ;; + esac + fi AC_CONFIG_FILES([ \ - gr-audio-windows/Makefile \ - gr-audio-windows/src/Makefile \ - gr-audio-windows/src/run_tests \ + gr-audio-windows/Makefile \ + gr-audio-windows/src/Makefile \ + gr-audio-windows/src/run_tests \ ]) - passed=yes - AC_HAVE_LIBRARY(winmm,[], - [passed=no;AC_MSG_RESULT([gr-audio-windows requires library winmm, not found.])]) - - GRC_BUILD_CONDITIONAL([gr-audio-windows],[ + GRC_BUILD_CONDITIONAL(gr-audio-windows,[ WINAUDIO_LIBS=-lwinmm - AC_SUBST(WINAUDIO_LIBS) + AC_SUBST(WINAUDIO_LIBS) dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_audio_windows], [chmod +x gr-audio-windows/src/run_tests]) ]) diff --git a/config/grc_gr_comedi.m4 b/config/grc_gr_comedi.m4 new file mode 100644 index 00000000..2bdfacbc --- /dev/null +++ b/config/grc_gr_comedi.m4 @@ -0,0 +1,46 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_COMEDI],[ + GRC_ENABLE(gr-comedi) + + dnl Don't do gr-comedi if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-comedi, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do gr-comedi if the 'comedi' library is unavailable. + PKG_CHECK_MODULES(COMEDI, comedilib < 0.8,[], + [passed=no;AC_MSG_RESULT([gr-comedi requires comedilib, not found.])]) + fi + + AC_CONFIG_FILES([ \ + gr-comedi/Makefile \ + gr-comedi/src/Makefile \ + gr-comedi/src/run_tests \ + ]) + + GRC_BUILD_CONDITIONAL(gr-comedi,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_comedi], [chmod +x gr-comedi/src/run_tests]) + ]) +]) diff --git a/config/grc_gr_cvsd_vocoder.m4 b/config/grc_gr_cvsd_vocoder.m4 new file mode 100644 index 00000000..c73a3052 --- /dev/null +++ b/config/grc_gr_cvsd_vocoder.m4 @@ -0,0 +1,38 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_CVSD_VOCODER],[ + GRC_ENABLE(gr-cvsd-vocoder) + + dnl Don't do gr-cvsd-vocoder if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-cvsd-vocoder, gnuradio-core) + + AC_CONFIG_FILES([\ + gr-cvsd-vocoder/Makefile \ + gr-cvsd-vocoder/src/Makefile \ + gr-cvsd-vocoder/src/lib/Makefile \ + gr-cvsd-vocoder/src/python/Makefile \ + gr-cvsd-vocoder/src/python/run_tests \ + ]) + + GRC_BUILD_CONDITIONAL(gr-cvsd-vocoder,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_cvsd], [chmod +x gr-cvsd-vocoder/src/python/run_tests]) + ]) +]) diff --git a/config/grc_gr_gcell.m4 b/config/grc_gr_gcell.m4 new file mode 100644 index 00000000..476de364 --- /dev/null +++ b/config/grc_gr_gcell.m4 @@ -0,0 +1,38 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008,2009 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_GCELL],[ + GRC_ENABLE(gr-gcell) + + dnl Don't do gr-gcell if gcell or gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-gcell, gcell) + GRC_CHECK_DEPENDENCY(gr-gcell, gnuradio-core) + + AC_CONFIG_FILES([ \ + gr-gcell/Makefile \ + gr-gcell/src/Makefile \ + gr-gcell/src/examples/Makefile \ + gr-gcell/src/run_tests \ + ]) + + GRC_BUILD_CONDITIONAL(gr-gcell,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_gcell], [chmod +x gr-gcell/src/run_tests]) + ]) +]) diff --git a/config/grc_gr_gpio.m4 b/config/grc_gr_gpio.m4 new file mode 100644 index 00000000..26c04b95 --- /dev/null +++ b/config/grc_gr_gpio.m4 @@ -0,0 +1,38 @@ +dnl Copyright 2007,2008,2009 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_GPIO],[ + GRC_ENABLE(gr-gpio) + + dnl Don't do gr-gpio if usrp skipped + GRC_CHECK_DEPENDENCY(gr-gpio, usrp) + + AC_CONFIG_FILES([ \ + gr-gpio/Makefile \ + gr-gpio/src/Makefile \ + gr-gpio/src/fpga/Makefile \ + gr-gpio/src/fpga/include/Makefile \ + gr-gpio/src/fpga/top/Makefile \ + gr-gpio/src/fpga/lib/Makefile \ + gr-gpio/src/fpga/rbf/Makefile \ + gr-gpio/src/python/Makefile + ]) + + GRC_BUILD_CONDITIONAL(gr-gpio) +]) diff --git a/config/grc_gr_gsm_fr_vocoder.m4 b/config/grc_gr_gsm_fr_vocoder.m4 index a5ca2819..941cb255 100644 --- a/config/grc_gr_gsm_fr_vocoder.m4 +++ b/config/grc_gr_gsm_fr_vocoder.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,19 +18,21 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_GSM_FR_VOCODER],[ - GRC_ENABLE([gr-gsm-fr-vocoder]) + GRC_ENABLE(gr-gsm-fr-vocoder) + + dnl Don't do gr-gsm-fr-vocoder if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-gsm-fr-vocoder, gnuradio-core) AC_CONFIG_FILES([\ - gr-gsm-fr-vocoder/Makefile \ - gr-gsm-fr-vocoder/src/Makefile \ - gr-gsm-fr-vocoder/src/lib/Makefile \ - gr-gsm-fr-vocoder/src/lib/gsm/Makefile \ - gr-gsm-fr-vocoder/src/python/Makefile \ - gr-gsm-fr-vocoder/src/python/run_tests \ + gr-gsm-fr-vocoder/Makefile \ + gr-gsm-fr-vocoder/src/Makefile \ + gr-gsm-fr-vocoder/src/lib/Makefile \ + gr-gsm-fr-vocoder/src/lib/gsm/Makefile \ + gr-gsm-fr-vocoder/src/python/Makefile \ + gr-gsm-fr-vocoder/src/python/run_tests \ ]) - passed=yes - GRC_BUILD_CONDITIONAL([gr-gsm-fr-vocoder],[ + GRC_BUILD_CONDITIONAL(gr-gsm-fr-vocoder,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_gsm], [chmod +x gr-gsm-fr-vocoder/src/python/run_tests]) ]) diff --git a/config/grc_gr_msdd6000.m4 b/config/grc_gr_msdd6000.m4 new file mode 100644 index 00000000..3f2e17a2 --- /dev/null +++ b/config/grc_gr_msdd6000.m4 @@ -0,0 +1,37 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_MSDD6000],[ + GRC_ENABLE([gr-msdd6000]) + + AC_CONFIG_FILES([\ + gr-msdd6000/Makefile \ + gr-msdd6000/src/Makefile + ]) + + dnl Don't do gr-msdd6000 if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-msdd6000, gnuradio-core) + + AC_CHECK_HEADERS(netinet/in.h arpa/inet.h sys/socket.h netdb.h) + + GRC_BUILD_CONDITIONAL([gr-msdd6000],[ + dnl run_tests is created from run_tests.in. Make it executable. + dnl AC_CONFIG_COMMANDS([run_tests_msdd6000], [chmod +x gr-msdd6000/src/run_tests]) + ]) +]) diff --git a/config/grc_gr_pager.m4 b/config/grc_gr_pager.m4 new file mode 100644 index 00000000..cb417ae2 --- /dev/null +++ b/config/grc_gr_pager.m4 @@ -0,0 +1,36 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_PAGER],[ + GRC_ENABLE(gr-pager) + + dnl Don't do gr-pager if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-pager, gnuradio-core) + + AC_CONFIG_FILES([\ + gr-pager/Makefile \ + gr-pager/src/Makefile \ + gr-pager/src/run_tests + ]) + + GRC_BUILD_CONDITIONAL(gr-pager,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_pager], [chmod +x gr-pager/src/run_tests]) + ]) +]) diff --git a/config/grc_gr_qtgui.m4 b/config/grc_gr_qtgui.m4 new file mode 100644 index 00000000..d9700776 --- /dev/null +++ b/config/grc_gr_qtgui.m4 @@ -0,0 +1,103 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_QTGUI],[ + GRC_ENABLE(gr-qtgui) + + dnl Don't do gr-qtgui if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-qtgui, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + + PYTHON_CHECK_MODULE([PyQt4.QtCore], [PyQt4 for Qt4], \ + [passed=yes], [passed=no], \ + [PyQt4.QtCore.PYQT_VERSION >= 260000]) + + # Enable this if we want to test for PyQwt, too + #PYTHON_CHECK_MODULE([PyQt4.Qwt5], [PyQwt5 for Qt4], \ + # [passed=yes], [passed=no], \ + # [PyQt4.Qwt5.QWT_VERSION >= 327000]) + +# Check for: +# QtOpenGL +# QtGui +# QtCore +# qwt +# qwtplot3d +# qt4 + +# qt4-core, qt4-gui, qwt5-qt4, qwt5-qt4-dev, libqwtplot3d-qt4, libqwtplot3d-qt4-dev, qt4-dev-tools + + if test $passed = yes; then + dnl Check for package qt or qt-mt, set QT_CFLAGS and QT_LIBS + PKG_CHECK_MODULES(QTCORE, QtCore >= 4.2, [], + [passed=no; AC_MSG_RESULT([gr-qtgui requires libQtCore >= 4.2.])]) + PKG_CHECK_MODULES(QTGUI, QtGui >= 4.2, [], + [passed=no; AC_MSG_RESULT([gr-qtgui requires libQtGui >= 4.2.])]) + PKG_CHECK_MODULES(QTOPENGL, QtOpenGL >= 4.2, [], + [passed=no; AC_MSG_RESULT([gr-qtgui requires libQtOpenGL >- 4.2.])]) + + dnl Fetch QWT variables + GR_QWT([], [passed=no]) + + dnl Process QWT Plot3D only if QWT passed + if test "$passed" = "yes"; then + GR_QWTPLOT3D([], [passed=no]) + fi + + dnl Export the include dirs and libraries (note: QTOPENGL_LIBS includes links + dnl to QtCore and QtGui libraries) + QT_INCLUDES="$QWT_CFLAGS $QWTPLOT3D_CFLAGS $QTCORE_CFLAGS $QTGUI_CFLAGS" + QT_LIBS="$QWT_LIBS $QWTPLOT3D_LIBS $QTOPENGL_LIBS" + + dnl Build an includes variable specifically for running qmake by extracting + dnl all includes from the QWT and QWTPLOT3D, without the -I; + dnl qmake appends the -I when processing the project file INCLUDEPATH + for i in $QWT_CFLAGS $QWTPLOT3D_CFLAGS; do + QMAKE_INCLUDES="$QMAKE_INCLUDES ${i##-I}" + done + + QT_MOC_EXEC=`pkg-config --variable=moc_location QtCore` + QT_UIC_EXEC=`pkg-config --variable=uic_location QtCore` + + AC_SUBST(QMAKE_INCLUDES) + AC_SUBST(QT_INCLUDES) + AC_SUBST(QT_LIBS) + AC_SUBST(QT_MOC_EXEC) + AC_SUBST(QT_UIC_EXEC) + fi + + if test "$passed" = "no"; then + AM_CONDITIONAL(BUILD_QT, false) + else + AM_CONDITIONAL(BUILD_QT, true) + fi + + AC_CONFIG_FILES([ \ + gr-qtgui/Makefile \ + gr-qtgui/src/Makefile \ + gr-qtgui/src/lib/Makefile \ + gr-qtgui/src/python/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(gr-qtgui) +]) diff --git a/config/grc_gr_radar_mono.m4 b/config/grc_gr_radar_mono.m4 new file mode 100644 index 00000000..bf8e2dac --- /dev/null +++ b/config/grc_gr_radar_mono.m4 @@ -0,0 +1,45 @@ +dnl Copyright 2007,2008 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_RADAR_MONO],[ + GRC_ENABLE(gr-radar-mono) + + dnl Don't do gr-radar-mono if usrp or gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-radar-mono, usrp) + GRC_CHECK_DEPENDENCY(gr-radar-mono, gnuradio-core) + + AC_CONFIG_FILES([ \ + gr-radar-mono/Makefile \ + gr-radar-mono/doc/Makefile \ + gr-radar-mono/src/Makefile \ + gr-radar-mono/src/fpga/Makefile \ + gr-radar-mono/src/fpga/top/Makefile \ + gr-radar-mono/src/fpga/lib/Makefile \ + gr-radar-mono/src/fpga/models/Makefile \ + gr-radar-mono/src/fpga/tb/Makefile \ + gr-radar-mono/src/lib/Makefile \ + gr-radar-mono/src/python/Makefile \ + gr-radar-mono/src/python/run_tests + ]) + + GRC_BUILD_CONDITIONAL(gr-radar-mono,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_radar_mono], [chmod +x gr-radar-mono/src/python/run_tests]) + ]) +]) diff --git a/config/grc_gr_radio_astronomy.m4 b/config/grc_gr_radio_astronomy.m4 index 724ff8a6..0affe5d7 100644 --- a/config/grc_gr_radio_astronomy.m4 +++ b/config/grc_gr_radio_astronomy.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,18 +18,20 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_RADIO_ASTRONOMY],[ - GRC_ENABLE([gr-radio-astronomy]) + GRC_ENABLE(gr-radio-astronomy) + + dnl Don't do gr-radio-astronomy if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-radio-astronomy, gnuradio-core) AC_CONFIG_FILES([\ - gr-radio-astronomy/Makefile \ - gr-radio-astronomy/src/Makefile \ - gr-radio-astronomy/src/lib/Makefile \ - gr-radio-astronomy/src/python/Makefile \ - gr-radio-astronomy/src/python/run_tests \ + gr-radio-astronomy/Makefile \ + gr-radio-astronomy/src/Makefile \ + gr-radio-astronomy/src/lib/Makefile \ + gr-radio-astronomy/src/python/Makefile \ + gr-radio-astronomy/src/python/run_tests \ ]) - passed=yes - GRC_BUILD_CONDITIONAL([gr-radio-astronomy],[ + GRC_BUILD_CONDITIONAL(gr-radio-astronomy,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_astronomy], [chmod +x gr-radio-astronomy/src/python/run_tests]) ]) diff --git a/config/grc_gr_sounder.m4 b/config/grc_gr_sounder.m4 new file mode 100644 index 00000000..672d13ab --- /dev/null +++ b/config/grc_gr_sounder.m4 @@ -0,0 +1,44 @@ +dnl Copyright 2007,2008 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_SOUNDER],[ + GRC_ENABLE(gr-sounder) + + dnl Don't do gr-sounder if usrp or gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-sounder, usrp) + GRC_CHECK_DEPENDENCY(gr-sounder, gnuradio-core) + + AC_CONFIG_FILES([ \ + gr-sounder/Makefile \ + gr-sounder/doc/Makefile \ + gr-sounder/src/Makefile \ + gr-sounder/src/fpga/Makefile \ + gr-sounder/src/fpga/top/Makefile \ + gr-sounder/src/fpga/lib/Makefile \ + gr-sounder/src/fpga/tb/Makefile \ + gr-sounder/src/lib/Makefile \ + gr-sounder/src/python/Makefile \ + gr-sounder/src/python/run_tests + ]) + + GRC_BUILD_CONDITIONAL(gr-sounder,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_sounder], [chmod +x gr-sounder/src/python/run_tests]) + ]) +]) diff --git a/config/grc_gr_trellis.m4 b/config/grc_gr_trellis.m4 index 752f8593..f6ed4a48 100644 --- a/config/grc_gr_trellis.m4 +++ b/config/grc_gr_trellis.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,19 +18,23 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_TRELLIS],[ - GRC_ENABLE([gr-trellis]) + GRC_ENABLE(gr-trellis) + + dnl Don't do gr-trellis if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-trellis, gnuradio-core) AC_CONFIG_FILES([\ - gr-trellis/Makefile \ - gr-trellis/doc/Makefile \ - gr-trellis/src/Makefile \ - gr-trellis/src/lib/Makefile \ - gr-trellis/src/python/Makefile \ - gr-trellis/src/python/run_tests \ + gr-trellis/Makefile \ + gr-trellis/doc/Makefile \ + gr-trellis/src/Makefile \ + gr-trellis/src/lib/Makefile \ + gr-trellis/src/python/Makefile \ + gr-trellis/src/python/run_tests \ + gr-trellis/src/examples/Makefile \ + gr-trellis/src/examples/fsm_files/Makefile ]) - passed=yes - GRC_BUILD_CONDITIONAL([gr-trellis],[ + GRC_BUILD_CONDITIONAL(gr-trellis,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_gr_trellis], [chmod +x gr-trellis/src/python/run_tests]) ]) diff --git a/config/grc_gr_usrp.m4 b/config/grc_gr_usrp.m4 index c247e5de..1f2cd1ac 100644 --- a/config/grc_gr_usrp.m4 +++ b/config/grc_gr_usrp.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,26 +18,21 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_USRP],[ - GRC_ENABLE([gr-usrp]) + GRC_ENABLE(gr-usrp) + + dnl Don't do gr-usrp if usrp or gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-usrp, usrp) + GRC_CHECK_DEPENDENCY(gr-usrp, gnuradio-core) AC_CONFIG_FILES([ \ - gr-usrp/Makefile \ - gr-usrp/src/Makefile \ - gr-usrp/src/run_tests \ + gr-usrp/Makefile \ + gr-usrp/gnuradio-usrp.pc \ + gr-usrp/src/Makefile \ + gr-usrp/src/run_tests \ + gr-usrp/apps/Makefile \ ]) - passed=yes - # Don't do gr-usrp if usrp skipped - # There *has* to be a better way to check if a value is in a string - for dir in $skipped_dirs - do - if test x$dir = xusrp; then - AC_MSG_RESULT([Component gr-usrp requires usrp, which is not being built.]) - passed=no - fi - done - - GRC_BUILD_CONDITIONAL([gr-usrp],[ + GRC_BUILD_CONDITIONAL(gr-usrp,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_usrp], [chmod +x gr-usrp/src/run_tests]) ]) diff --git a/config/grc_gr_usrp2.m4 b/config/grc_gr_usrp2.m4 new file mode 100644 index 00000000..4cac5ca0 --- /dev/null +++ b/config/grc_gr_usrp2.m4 @@ -0,0 +1,38 @@ +dnl Copyright 2008 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_USRP2],[ + GRC_ENABLE(gr-usrp2) + + dnl Don't do gr-usrp if gnuradio-core or usrp2 skipped + GRC_CHECK_DEPENDENCY(gr-usrp2, usrp2) + GRC_CHECK_DEPENDENCY(gr-usrp2, gnuradio-core) + + AC_CONFIG_FILES([ \ + gr-usrp2/Makefile \ + gr-usrp2/gnuradio-usrp2.pc \ + gr-usrp2/src/Makefile \ + gr-usrp2/src/run_tests \ + ]) + + GRC_BUILD_CONDITIONAL(gr-usrp2,[ + dnl run_tests is created from run_tests.in. Make it executable. + AC_CONFIG_COMMANDS([run_tests_usrp2], [chmod +x gr-usrp2/src/run_tests]) + ]) +]) diff --git a/config/grc_gr_utils.m4 b/config/grc_gr_utils.m4 new file mode 100644 index 00000000..7fe07d85 --- /dev/null +++ b/config/grc_gr_utils.m4 @@ -0,0 +1,36 @@ +# Copyright 2007,2008 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. + +AC_DEFUN([GRC_GR_UTILS],[ + GRC_ENABLE(gr-utils) + + dnl Don't do gr-utils if gnuradio-core, usrp, or gr-wxgui skipped + GRC_CHECK_DEPENDENCY(gr-utils, gnuradio-core) + GRC_CHECK_DEPENDENCY(gr-utils, usrp) + GRC_CHECK_DEPENDENCY(gr-utils, gr-wxgui) + + AC_CONFIG_FILES([ \ + gr-utils/Makefile \ + gr-utils/src/Makefile \ + gr-utils/src/lib/Makefile \ + gr-utils/src/python/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(gr-utils) +]) diff --git a/config/grc_gr_video_sdl.m4 b/config/grc_gr_video_sdl.m4 index 405feb0e..774f7250 100644 --- a/config/grc_gr_video_sdl.m4 +++ b/config/grc_gr_video_sdl.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -20,20 +20,28 @@ dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_VIDEO_SDL],[ GRC_ENABLE([gr-video-sdl]) + dnl Don't do gr-video-sdl if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-video-sdl, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do gr-video-sdl if the SDL library is unavailable. + PKG_CHECK_MODULES(SDL, sdl >= 1.2.0, [], + [SDL_VERSION=1.2.0 + AM_PATH_SDL($SDL_VERSION, [], [ + passed=no;AC_MSG_RESULT([gr-video-sdl requires library sdl, not found or failed test.])])]) + fi + AC_CONFIG_FILES([ \ - gr-video-sdl/Makefile \ - gr-video-sdl/src/Makefile \ - gr-video-sdl/src/run_tests \ + gr-video-sdl/Makefile \ + gr-video-sdl/src/Makefile \ + gr-video-sdl/src/run_tests \ ]) - - passed=yes - SDL_VERSION=1.2.0 - AM_PATH_SDL($SDL_VERSION,[], - [passed=no;AC_MSG_RESULT([gr-video-sdl requires library sdl, not found or failed test.])]) - GRC_BUILD_CONDITIONAL([gr-video-sdl],[ - AC_SUBST(SDL_CFLAGS) - AC_SUBST(SDL_LIBS) + GRC_BUILD_CONDITIONAL(gr-video-sdl,[ dnl run_tests is created from run_tests.in. Make it executable. AC_CONFIG_COMMANDS([run_tests_sdl], [chmod +x gr-video-sdl/src/run_tests]) ]) diff --git a/config/grc_gr_wxgui.m4 b/config/grc_gr_wxgui.m4 index 22f0a90e..c443f7c6 100644 --- a/config/grc_gr_wxgui.m4 +++ b/config/grc_gr_wxgui.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,19 +18,28 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_GR_WXGUI],[ - GRC_ENABLE([gr-wxgui]) + GRC_ENABLE(gr-wxgui) + GRC_WITH(gr-wxgui) + + dnl Don't do gr-wxgui if gnuradio-core skipped + GRC_CHECK_DEPENDENCY(gr-wxgui, gnuradio-core) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + PYTHON_CHECK_MODULE([wx],[Python wxWidgets wrappers >= 2.8],[],[passed=no],[wx.version().split()[[0]] >= "2.8"]) + PYTHON_CHECK_MODULE([numpy],[Numeric Python extensions],[],[passed=no]) + fi AC_CONFIG_FILES([ \ - gr-wxgui/Makefile \ - gr-wxgui/src/Makefile \ - gr-wxgui/src/python/Makefile \ + gr-wxgui/Makefile \ + gr-wxgui/gr-wxgui.pc \ + gr-wxgui/src/Makefile \ + gr-wxgui/src/python/Makefile \ + gr-wxgui/src/python/plotter/Makefile \ ]) - if ${PYTHON} -c 'import wx'; then - passed=yes - else - passed=no - fi - - GRC_BUILD_CONDITIONAL([gr-wxgui]) + GRC_BUILD_CONDITIONAL(gr-wxgui) ]) diff --git a/config/grc_grc.m4 b/config/grc_grc.m4 new file mode 100644 index 00000000..ce23e3c2 --- /dev/null +++ b/config/grc_grc.m4 @@ -0,0 +1,62 @@ +dnl Copyright 2008, 2009 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_GRC],[ + GRC_ENABLE(grc) + + GRC_CHECK_DEPENDENCY(grc, gr-wxgui) + + AC_CHECK_PROG(XDG_UTILS, xdg-mime, true, false) + AM_CONDITIONAL(XDG_UTILS, $XDG_UTILS) + + dnl ######################################## + dnl # test python modules and versions + dnl ######################################## + if test $passed = yes; then + PYTHON_CHECK_MODULE([sys],[Python >= 2.5],[],[passed=no],[sys.version.split()[[0]] >= "2.5"]) + PYTHON_CHECK_MODULE([Cheetah],[Python Cheetah templates >= 2.0.0],[],[passed=no],[Cheetah.Version >= "2.0.0"]) + PYTHON_CHECK_MODULE([lxml.etree],[Python lxml wrappers >= 2.0.0],[],[passed=no],[lxml.etree.LXML_VERSION >= (2, 0, 0, 0)]) + PYTHON_CHECK_MODULE([gtk],[Python gtk wrappers >= 2.10.0],[],[passed=no],[gtk.pygtk_version >= (2, 10, 0)]) + fi + + dnl ######################################## + dnl # platform dependency pythonw + dnl ######################################## + dnl FIXME: move this test to Python config m4 + if test `${PYTHON} -c "import sys; print sys.platform"` = 'darwin'; then + PYTHONW=pythonw + else + PYTHONW=python + fi + AC_SUBST(PYTHONW) + + AC_CONFIG_FILES([ \ + grc/Makefile \ + grc/base/Makefile \ + grc/blocks/Makefile \ + grc/examples/Makefile \ + grc/freedesktop/Makefile \ + grc/grc_gnuradio/Makefile \ + grc/gui/Makefile \ + grc/python/Makefile \ + grc/scripts/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(grc) +]) diff --git a/config/grc_gruel.m4 b/config/grc_gruel.m4 new file mode 100644 index 00000000..73e41be5 --- /dev/null +++ b/config/grc_gruel.m4 @@ -0,0 +1,56 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_GRUEL],[ + GRC_ENABLE(gruel) + GRC_WITH(gruel) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed != with; then + dnl how and where to find INCLUDES and LA and such + gruel_INCLUDES="\ +-I\${abs_top_srcdir}/gruel/src/include \ +-I\${abs_top_builddir}/gruel/src/include" + gruel_LA="\${abs_top_builddir}/gruel/src/lib/libgruel.la" + gruel_LIBDIRPATH="\${abs_top_builddir}/gruel/src/lib:\${abs_top_builddir}/gruel/src/lib/.libs" + fi + + AC_CONFIG_FILES([\ + gruel/Makefile \ + gruel/gruel.pc \ + gruel/src/Makefile \ + gruel/src/include/Makefile \ + gruel/src/include/gruel/Makefile \ + gruel/src/include/gruel/inet.h \ + gruel/src/lib/Makefile \ + ]) + + dnl Allow creating autoconf independent header files for bytesex routines + AC_CHECK_HEADER(arpa/inet.h, [GR_HAVE_ARPA_INET=1],[GR_HAVE_ARPA_INET=0]) + AC_CHECK_HEADER(netinet/in.h, [GR_HAVE_NETINET_IN=1],[GR_HAVE_NETINET_IN=0]) + AC_CHECK_HEADER(byteswap.h, [GR_HAVE_BYTESWAP=1],[GR_HAVE_BYTESWAP=0]) + AC_SUBST(GR_HAVE_ARPA_INET) + AC_SUBST(GR_HAVE_NETINET_IN) + AC_SUBST(GR_HAVE_BYTESWAP) + + GRC_BUILD_CONDITIONAL(gruel,[]) +]) diff --git a/config/grc_mblock.m4 b/config/grc_mblock.m4 new file mode 100644 index 00000000..e3ae1817 --- /dev/null +++ b/config/grc_mblock.m4 @@ -0,0 +1,59 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_MBLOCK],[ + GRC_ENABLE(mblock) + + GRC_WITH(mblock) + + dnl Don't do mblock if omnithread or pmt skipped + GRC_CHECK_DEPENDENCY(mblock, pmt) + GRC_CHECK_DEPENDENCY(mblock, omnithread) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do mblock if guile not available + GRC_CHECK_GUILE(mblock) + fi + if test $passed != with; then + dnl how and where to find INCLUDES and LA + mblock_INCLUDES="-I\${abs_top_srcdir}/mblock/src/include" + mblock_LA="\${abs_top_builddir}/mblock/src/lib/libmblock.la" + fi + + AC_CONFIG_FILES([\ + mblock/Makefile \ + mblock/mblock.pc \ + mblock/doc/Makefile \ + mblock/src/Makefile \ + mblock/src/include/Makefile \ + mblock/src/include/mblock/Makefile \ + mblock/src/lib/Makefile \ + mblock/src/scheme/Makefile \ + mblock/src/scheme/gnuradio/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(mblock,[ + dnl run_tests is created from run_tests.in. Make it executable. + dnl AC_CONFIG_COMMANDS([run_tests_mblock], [chmod +x mblock/src/python/run_tests]) + ]) +]) diff --git a/config/grc_omnithread.m4 b/config/grc_omnithread.m4 new file mode 100644 index 00000000..1bcedebe --- /dev/null +++ b/config/grc_omnithread.m4 @@ -0,0 +1,46 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2007,2008 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_OMNITHREAD],[ + GRC_ENABLE(omnithread) + + GRC_WITH(omnithread, [], gnuradio-omnithread) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed != with; then + dnl how and where to find INCLUDES and LA and such + omnithread_INCLUDES="-I\${abs_top_srcdir}/omnithread" + omnithread_LA="\${abs_top_builddir}/omnithread/libgromnithread.la" + omnithread_LIBDIRPATH="\${abs_top_builddir}/omnithread:\${abs_top_builddir}/omnithread/.libs" + fi + + AC_CONFIG_FILES([ \ + omnithread/Makefile \ + omnithread/gnuradio/Makefile \ + omnithread/gnuradio-omnithread.pc + ]) + + GRC_BUILD_CONDITIONAL(omnithread,[ + dnl run_tests is created from run_tests.in. Make it executable. + dnl AC_CONFIG_COMMANDS([run_tests_omnithread], [chmod +x omnithread/run_tests]) + ]) +]) diff --git a/config/grc_pmt.m4 b/config/grc_pmt.m4 new file mode 100644 index 00000000..8e0a58bc --- /dev/null +++ b/config/grc_pmt.m4 @@ -0,0 +1,55 @@ +dnl Copyright 2001,2002,2003,2004,2005,2006,2008 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_PMT],[ + GRC_ENABLE(pmt) + GRC_WITH(pmt) + + dnl Don't do pmt if omnithread skipped + GRC_CHECK_DEPENDENCY(pmt, omnithread) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Don't do pmt if guile not available + GRC_CHECK_GUILE(pmt) + fi + if test $passed != with; then + dnl how and where to find INCLUDES and LA + pmt_INCLUDES="-I\${abs_top_srcdir}/pmt/src/lib" + pmt_LA="\${abs_top_builddir}/pmt/src/lib/libpmt.la" + fi + + AC_CONFIG_FILES([\ + pmt/Makefile \ + pmt/pmt.pc \ + pmt/doc/Makefile \ + pmt/src/Makefile \ + pmt/src/lib/Makefile \ + pmt/src/scheme/Makefile \ + pmt/src/scheme/gnuradio/Makefile \ + ]) + + GRC_BUILD_CONDITIONAL(pmt,[ + dnl run_tests is created from run_tests.in. Make it executable. + dnl AC_CONFIG_COMMANDS([run_tests_pmt], [chmod +x pmt/src/python/run_tests]) + ]) +]) diff --git a/config/grc_usrp.m4 b/config/grc_usrp.m4 index e19859ce..e1ca92bb 100644 --- a/config/grc_usrp.m4 +++ b/config/grc_usrp.m4 @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -18,7 +18,58 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. AC_DEFUN([GRC_USRP],[ - GRC_ENABLE([usrp]) + GRC_ENABLE(usrp) + + GRC_WITH(usrp) + + dnl Don't do usrp if omnithread skipped + GRC_CHECK_DEPENDENCY(usrp, omnithread) + + dnl Make sure the fast usb technique is set, OS dependent. + dnl This is always performed, since it puts out CLI flags. + USRP_SET_FUSB_TECHNIQUE(${enable_usrp}) + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl gnulib. + dnl FIXME: this needs to fail gracefully and continue, not implemented yet + UTILS_FUNC_MKSTEMP + + dnl These checks don't fail + AC_C_BIGENDIAN + AC_CHECK_HEADERS([byteswap.h linux/compiler.h]) + AC_CHECK_FUNCS([getrusage sched_setscheduler pthread_setschedparam]) + AC_CHECK_FUNCS([sigaction snprintf]) + + dnl Make sure libusb is installed; required for legacy USB + USRP_LIBUSB([],[passed=no;AC_MSG_RESULT([Unable to find dependency libusb.])]) + + dnl Make sure SDCC >= 2.4.0 is available. + USRP_SDCC([2.4.0],[],[passed=no;AC_MSG_RESULT([Unable to find firmware compiler SDCC.])]) + fi + if test $passed != with; then + dnl how and where to find INCLUDES and LA + usrp_INCLUDES="-I\${abs_top_srcdir}/usrp/host/lib/legacy \ + -I\${abs_top_srcdir}/usrp/firmware/include \ + -I\${abs_top_builddir}/usrp/host/lib/legacy" + usrp_LA="\${abs_top_builddir}/usrp/host/lib/legacy/libusrp.la" + fi + + dnl There are 2 pkg-config files (usrp, and usrp-inband); the one + dnl for usrp requires omnithread for Darwin only. Create a variable + dnl for just the usrp.pc.in case. + case "$host_os" in + darwin*) + usrp_darwin_omnithread_pc_requires="gnuradio-omnithread" + ;; + *) dnl (blanks) + usrp_darwin_omnithread_pc_requires="" + ;; + esac + AC_SUBST(usrp_darwin_omnithread_pc_requires) AC_CONFIG_FILES([ \ usrp/Makefile \ @@ -30,7 +81,8 @@ AC_DEFUN([GRC_USRP],[ usrp/host/Makefile \ usrp/host/misc/Makefile \ usrp/host/lib/Makefile \ - usrp/host/lib/std_paths.h \ + usrp/host/lib/legacy/Makefile \ + usrp/host/lib/legacy/std_paths.h \ usrp/host/swig/Makefile \ usrp/host/apps/Makefile \ usrp/firmware/Makefile \ @@ -41,22 +93,9 @@ AC_DEFUN([GRC_USRP],[ usrp/firmware/src/usrp2/Makefile \ usrp/fpga/Makefile \ usrp/fpga/rbf/Makefile \ + usrp/fpga/rbf/rev2/Makefile \ + usrp/fpga/rbf/rev4/Makefile \ ]) - # gnulib. - # FIXME: this needs to fail gracefully and continue, not implemented yet - UTILS_FUNC_MKSTEMP - - # These checks don't fail - AC_C_BIGENDIAN - AC_CHECK_HEADERS([byteswap.h linux/compiler.h]) - AC_CHECK_FUNCS([getrusage sched_setscheduler]) - AC_CHECK_FUNCS([sigaction snprintf]) - - passed=yes - USRP_LIBUSB([],[passed=no;AC_MSG_RESULT([Unable to configure USB dependency.])]) - USRP_SET_FUSB_TECHNIQUE([],[passed=no;AC_MSG_RESULT([Unable to set fast USB technique.])]) - USRP_SDCC([2.4.0],[],[passed=no;AC_MSG_RESULT([Unable to find firmware compiler.])]) - - GRC_BUILD_CONDITIONAL([usrp]) + GRC_BUILD_CONDITIONAL(usrp) ]) diff --git a/config/grc_usrp2.m4 b/config/grc_usrp2.m4 new file mode 100644 index 00000000..f7064c91 --- /dev/null +++ b/config/grc_usrp2.m4 @@ -0,0 +1,82 @@ +dnl Copyright 2008 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_USRP2],[ + GRC_ENABLE(usrp2) + + dnl firmware uses a subsidiary configure.ac + AC_CONFIG_SUBDIRS([usrp2/firmware]) + + dnl Don't do usrp if omnithread or gruel is skipped + GRC_CHECK_DEPENDENCY(usrp2, gruel) + GRC_CHECK_DEPENDENCY(usrp2, omnithread) + + dnl USRP2 host code only works on Linux at the moment + AC_MSG_CHECKING([whether host_os is linux*]) + case "$host_os" in + linux*) + AC_MSG_RESULT([yes]) + ;; + *) + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([USRP2 currently requires Linux host OS, not found]) + passed="no" + ;; + esac + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + dnl Needed for usrp2_socket_opener + AC_CHECK_HEADERS(arpa/inet.h byteswap.h linux/if_packet.h sys/socket.h sys/un.h) + AC_CHECK_MEMBERS([struct msghdr.msg_control, + struct msghdr.msg_accrights, + struct cmsgcred.cmcred_uid, + struct ucred.uid], + [],[], + [#define __USE_GNU 1 + #include + #include + #include ]) + fi + if test $passed != with; then + dnl how and where to find INCLUDES and LA + USRP2_INCLUDES="-I\${abs_top_srcdir}/usrp2/host/include \ + -I\${abs_top_srcdir}/usrp2/firmware/include" + USRP2_LA="\${abs_top_builddir}/usrp2/host/lib/libusrp2.la" + fi + + dnl Include the usrp2 INCLUDES and LA + AC_SUBST(USRP2_INCLUDES) + AC_SUBST(USRP2_LA) + + AC_CONFIG_FILES([ \ + usrp2/Makefile + usrp2/host/Makefile \ + usrp2/host/usrp2.pc \ + usrp2/host/include/Makefile + usrp2/host/include/usrp2/Makefile + usrp2/host/lib/Makefile + usrp2/host/apps/Makefile + ]) + + GRC_BUILD_CONDITIONAL(usrp2) +]) diff --git a/config/lf_cc.m4 b/config/lf_cc.m4 index b9d1c9c0..b75e1a4c 100644 --- a/config/lf_cc.m4 +++ b/config/lf_cc.m4 @@ -36,7 +36,6 @@ AC_DEFUN([LF_CONFIGURE_CC],[ AC_REQUIRE([AC_PROG_CPP])dnl AC_REQUIRE([AC_AIX])dnl AC_REQUIRE([AC_ISC_POSIX])dnl - AC_REQUIRE([AC_MINIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl ]) diff --git a/config/lf_cxx.m4 b/config/lf_cxx.m4 index c581c9b0..dfc6bfbf 100644 --- a/config/lf_cxx.m4 +++ b/config/lf_cxx.m4 @@ -37,11 +37,6 @@ AC_DEFUN([LF_CONFIGURE_CXX],[ # ----------------------------------------------------------------------- # This macro tests the C++ compiler for various portability problem. -# 1. Defines CXX_HAS_NO_BOOL if the compiler does not support the bool -# data type -# 2. Defines CXX_HAS_BUGGY_FOR_LOOPS if the compiler has buggy -# scoping for the for-loop -# 3. Defines USE_ASSERT if the user wants to use assertions # ----------------------------------------------------------------------- @@ -56,32 +51,6 @@ AC_DEFUN([LF_CXX_PORTABILITY],[ AC_LANG_SAVE AC_LANG_CPLUSPLUS - dnl Check whether we have bool - AC_MSG_CHECKING(whether C++ has bool) - AC_TRY_RUN([main() { bool b1=true; bool b2=false; }], - [ AC_MSG_RESULT(yes) ], - [ AC_MSG_RESULT(no) - AC_DEFINE(CXX_HAS_NO_BOOL,[],[Define if C++ is missing bool type]) ], - [ AC_MSG_WARN(Don't cross-compile)] - ) - - dnl Test whether C++ has buggy for-loops - AC_MSG_CHECKING(whether C++ has buggy scoping in for-loops) - AC_TRY_COMPILE([#include ], [ - for (int i=0;i<10;i++) { } - for (int i=0;i<10;i++) { } -], [ AC_MSG_RESULT(no) ], - [ AC_MSG_RESULT(yes) - AC_DEFINE(CXX_HAS_BUGGY_FOR_LOOPS,[],[Define if for loop scoping is broken]) ]) - - dnl Test whether the user wants to enable assertions - AC_MSG_CHECKING(whether user wants assertions) - AC_ARG_ENABLE(assert, - [ --disable-assert don't use cpp.h assert], - [ AC_DEFINE(NDEBUG,[],[Define to disable asserts (don't doit!)]) - AC_MSG_RESULT(no) ], - [ AC_MSG_RESULT(yes) ], - ) dnl Test whether C++ has std::isnan AC_MSG_CHECKING(whether C++ has std::isnan) @@ -96,26 +65,3 @@ AC_DEFUN([LF_CXX_PORTABILITY],[ AC_LANG_RESTORE ]) -AH_BOTTOM([// Workaround for compilers with buggy for-loop scoping -// That's quite a few compilers actually including recent versions of -// Dec Alpha cxx, HP-UX CC and SGI CC. -// The trivial "if" statement provides the correct scoping to the -// for loop - -#ifdef CXX_HAS_BUGGY_FOR_LOOPS -#undef for -#define for if(1) for -#endif -]) - -AH_BOTTOM([// If the C++ compiler we use doesn't have bool, then -// the following is a near-perfect work-around. -// You must make sure your code does not depend on "int" and "bool" -// being two different types, in overloading for instance. - -#ifdef CXX_HAS_NO_BOOL -#define bool int -#define true 1 -#define false 0 -#endif -]) diff --git a/config/lf_warnings.m4 b/config/lf_warnings.m4 index 4e2ca911..d40c77f1 100644 --- a/config/lf_warnings.m4 +++ b/config/lf_warnings.m4 @@ -1,4 +1,5 @@ dnl Copyright (C) 1988 Eleftherios Gkioulekas +dnl Copyright (C) 2009 Free Software Foundation, Inc. dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -21,7 +22,7 @@ dnl distribution terms that you use for the rest of that program. # -------------------------------------------------------------------------- # Check whether the C++ compiler accepts a certain flag -# If it does it adds the flag to CXXFLAGS +# If it does it adds the flag to lf_CXXFLAGS # If it does not then it returns an error to lf_ok # Usage: # LF_CHECK_CXX_FLAG(-flag1 -flag2 -flag3 ...) @@ -34,18 +35,19 @@ AC_DEFUN([LF_CHECK_CXX_FLAG],[ AC_MSG_CHECKING([whether $CXX accepts $i]) if test -z "`${CXX} $i -c conftest.cc 2>&1`" then - CXXFLAGS="${CXXFLAGS} $i" + lf_CXXFLAGS="${lf_CXXFLAGS} $i" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi done rm -f conftest.cc conftest.o + AC_SUBST(lf_CXXFLAGS) ]) # -------------------------------------------------------------------------- # Check whether the C compiler accepts a certain flag -# If it does it adds the flag to CFLAGS +# If it does it adds the flag to lf_CFLAGS # If it does not then it returns an error to lf_ok # Usage: # LF_CHECK_CC_FLAG(-flag1 -flag2 -flag3 ...) @@ -58,18 +60,19 @@ AC_DEFUN([LF_CHECK_CC_FLAG],[ AC_MSG_CHECKING([whether $CC accepts $i]) if test -z "`${CC} $i -c conftest.c 2>&1`" then - CFLAGS="${CFLAGS} $i" + lf_CFLAGS="${lf_CFLAGS} $i" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi done rm -f conftest.c conftest.o + AC_SUBST(lf_CFLAGS) ]) # -------------------------------------------------------------------------- # Check whether the Fortran compiler accepts a certain flag -# If it does it adds the flag to FFLAGS +# If it does it adds the flag to lf_FFLAGS # If it does not then it returns an error to lf_ok # Usage: # LF_CHECK_F77_FLAG(-flag1 -flag2 -flag3 ...) @@ -87,42 +90,32 @@ EOF AC_MSG_CHECKING([whether $F77 accepts $i]) if test -z "`${F77} $i -c conftest.f 2>&1`" then - FFLAGS="${FFLAGS} $i" + lf_FFLAGS="${lf_FFLAGS} $i" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi done rm -f conftest.f conftest.o + AC_SUBST(lf_FFLAGS) ]) # ---------------------------------------------------------------------- -# Provide the configure script with an --with-warnings option that -# turns on warnings. Call this command AFTER you have configured ALL your -# compilers. +# Enable compiler warnings. +# Call this command AFTER you have configured ALL your compilers. # ---------------------------------------------------------------------- AC_DEFUN([LF_SET_WARNINGS],[ - dnl Check for --with-warnings - AC_MSG_CHECKING([whether user wants warnings]) - AC_ARG_WITH(warnings, - [ --with-warnings Turn on warnings], - [ lf_warnings=yes ], [ lf_warnings=no ]) - lf_warnings=yes # hard code for now -eb - AC_MSG_RESULT($lf_warnings) - dnl Warnings for the two main compilers - cc_warning_flags="-Wall" + dnl add -Wextra when you're got time to fix a bunch of them ;-) + cc_warning_flags="-Wall -Werror-implicit-function-declaration" cxx_warning_flags="-Wall -Woverloaded-virtual" - if test $lf_warnings = yes + if test -n "${CC}" then - if test -n "${CC}" - then - LF_CHECK_CC_FLAG($cc_warning_flags) - fi - if test -n "${CXX}" - then - LF_CHECK_CXX_FLAG($cxx_warning_flags) - fi + LF_CHECK_CC_FLAG($cc_warning_flags) + fi + if test -n "${CXX}" + then + LF_CHECK_CXX_FLAG($cxx_warning_flags) fi ]) diff --git a/config/libtool.m4 b/config/libtool.m4 new file mode 100644 index 00000000..2ca1c1f5 --- /dev/null +++ b/config/libtool.m4 @@ -0,0 +1,7373 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) diff --git a/config/ltoptions.m4 b/config/ltoptions.m4 new file mode 100644 index 00000000..34151a3b --- /dev/null +++ b/config/ltoptions.m4 @@ -0,0 +1,368 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/config/ltsugar.m4 b/config/ltsugar.m4 new file mode 100644 index 00000000..9000a057 --- /dev/null +++ b/config/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/config/ltversion.m4 b/config/ltversion.m4 new file mode 100644 index 00000000..b8e154fe --- /dev/null +++ b/config/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/config/lt~obsolete.m4 b/config/lt~obsolete.m4 new file mode 100644 index 00000000..637bb206 --- /dev/null +++ b/config/lt~obsolete.m4 @@ -0,0 +1,92 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/config/pkg.m4 b/config/pkg.m4 index 770f0629..2d4d9610 100644 --- a/config/pkg.m4 +++ b/config/pkg.m4 @@ -1,68 +1,201 @@ -dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) -dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page -dnl also defines GSTUFF_PKG_ERRORS on error -AC_DEFUN([PKG_CHECK_MODULES], [ - succeeded=no - - if test -z "$PKG_CONFIG"; then - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - fi - - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - dnl If PKG_CONFIG_PATH is not already set, add /usr/local/lib/pkgconfig. - dnl If it's set, assume the user knows what they're doing. - dnl This should help avoid failures while looking for fftw3f - if test -z "$PKG_CONFIG_PATH"; then - export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" - fi - - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - AC_MSG_CHECKING(for $2) - - if $PKG_CONFIG --exists "$2" ; then - AC_MSG_RESULT(yes) - succeeded=yes - - AC_MSG_CHECKING($1_CFLAGS) - $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` - AC_MSG_RESULT($$1_CFLAGS) - - AC_MSG_CHECKING($1_LIBS) - $1_LIBS=`$PKG_CONFIG --libs "$2"` - AC_MSG_RESULT($$1_LIBS) - - AC_MSG_CHECKING($1_INCLUDEDIR) - $1_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "$2"` - AC_MSG_RESULT($$1_INCLUDEDIR) - else - $1_CFLAGS="" - $1_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` - ifelse([$4], ,echo $$1_PKG_ERRORS,) +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# Copyright © 2008 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 of the License, 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 program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.18]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# E.g., +# PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +# defines: +# +# GSTUFF_LIBS +# GSTUFF_CFLAGS +# GSTUFF_INCLUDEDIR +# GSTUFF_CPPFLAGS # the -I, -D and -U's out of CFLAGS +# +# see pkg-config man page also defines GSTUFF_PKG_ERRORS on error +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES],[ +AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl + +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_INCLUDEDIR], [includedir for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) + +if test x$cross_compiling = xyes +then + dnl _PKG_CONFIG([$1][_LIBS], [libs-only-l --static], [$2]) + _PKG_CONFIG([$1][_LIBS], [libs --static], [$2]) + dnl prune out any -L/lib or -L/usr/lib since they're pointing to the wrong filesystem root + _pkg_tmp= + for flag in [$]pkg_cv_[$1][_LIBS]; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_[$1][_LIBS]="$_pkg_tmp" +else + _PKG_CONFIG([$1][_LIBS], [libs --static], [$2]) +fi + +_PKG_CONFIG([$1][_INCLUDEDIR], [variable=includedir], [$2]) + + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. - AC_SUBST($1_CFLAGS) - AC_SUBST($1_LIBS) - AC_SUBST($1_INCLUDEDIR) - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi +_PKG_TEXT - if test $succeeded = yes; then - ifelse([$3], , :, [$3]) - else - ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) - fi -]) +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + $1[]_INCLUDEDIR=$pkg_cv_[]$1[]_INCLUDEDIR + $1[]_CPPFLAGS="" + for flag in $$1[]_CFLAGS; do + case $flag in + -I* | -D* | -U*) $1[]_CPPFLAGS="$$1[]_CPPFLAGS $flag" ;; + esac + done + pkg_cv_[]$1[]_CPPFLAGS=$$1[]_CPPFLAGS + AC_SUBST($1[]_CPPFLAGS) + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/config/sdl.m4 b/config/sdl.m4 index ada3a416..20ad7df3 100644 --- a/config/sdl.m4 +++ b/config/sdl.m4 @@ -16,8 +16,9 @@ AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed sdl_prefix="$withval", sdl_prefix="") AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], sdl_exec_prefix="$withval", sdl_exec_prefix="") -AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], - , enable_sdltest=yes) +AC_ARG_ENABLE(sdltest, AC_HELP_STRING([--disable-sdltest], + [Do not try to compile and run a test SDL program]), + [], enable_sdltest=yes) if test x$sdl_exec_prefix != x ; then sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" @@ -33,8 +34,8 @@ AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run fi AC_REQUIRE([AC_CANONICAL_TARGET]) - PATH="$prefix/bin:$prefix/usr/bin:$PATH" - AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) + TMP_PATH="$prefix/bin:$prefix/usr/bin:$PATH" + AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$TMP_PATH]) min_sdl_version=ifelse([$1], ,0.11.0,$1) AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) no_sdl="" diff --git a/config/usrp_fusb_tech.m4 b/config/usrp_fusb_tech.m4 index c4de53b5..db857249 100644 --- a/config/usrp_fusb_tech.m4 +++ b/config/usrp_fusb_tech.m4 @@ -1,5 +1,5 @@ dnl -dnl Copyright 2003 Free Software Foundation, Inc. +dnl Copyright 2003,2008 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -19,45 +19,56 @@ dnl the Free Software Foundation, Inc., 51 Franklin Street, dnl Boston, MA 02110-1301, USA. dnl -AC_DEFUN([USRP_SET_FUSB_TECHNIQUE],[ - AC_ARG_WITH(fusb-tech, - [ --with-fusb-tech=OS set fast usb technique (auto)], - [cf_with_fusb_tech="$withval"], - [cf_with_fusb_tech="$host_os"]) - - - AC_CHECK_HEADER([linux/usbdevice_fs.h], - [x_have_usbdevice_fs_h=yes], - [x_have_usbdevice_fs_h=no]) - - AC_MSG_CHECKING([for fast usb technique to use]) - case "$cf_with_fusb_tech" in - linux*) if test x${x_have_usbdevice_fs_h} = xyes; - then - FUSB_TECH=linux - else - FUSB_TECH=generic - fi ;; +# $1 is $enable_usrp: +# yes : do these tests +# no : do not do these tests +# "" : do these tests - darwin*) FUSB_TECH=darwin ;; - cygwin*|win*|mingw*) FUSB_TECH=win32 ;; - *bsd*) - AC_MSG_CHECKING([for RA/WB]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[struct usb_bulk_ra_wb_opt o; - ioctl(0, USB_SET_BULK_RA, &o);]])], - [FUSB_TECH=ra_wb], - [FUSB_TECH=generic]) ;; - *) FUSB_TECH=generic ;; - esac +AC_DEFUN([USRP_SET_FUSB_TECHNIQUE],[ + AC_ARG_WITH([fusb-tech], + AC_HELP_STRING([--with-fusb-tech=OS], + [Set fast USB technique (default=auto)]), + [cf_with_fusb_tech="$withval"], + [cf_with_fusb_tech="$host_os"]) + if test [x]$1 != xno; then + case "$cf_with_fusb_tech" in + linux*) + AC_CHECK_HEADER([linux/usbdevice_fs.h], + [x_have_usbdevice_fs_h=yes], + [x_have_usbdevice_fs_h=no]) + if test x${x_have_usbdevice_fs_h} = xyes; then + FUSB_TECH=linux + else + FUSB_TECH=generic + fi + ;; + darwin*) + FUSB_TECH=darwin + ;; + cygwin*|win*|mingw*) + FUSB_TECH=win32 + ;; + *bsd*) + AC_MSG_CHECKING([for RA/WB]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[struct usb_bulk_ra_wb_opt o; + ioctl(0, USB_SET_BULK_RA, &o);]])], + [FUSB_TECH=ra_wb], + [FUSB_TECH=generic]) + ;; + *) + FUSB_TECH=generic + ;; + esac - AC_MSG_RESULT($FUSB_TECH) - AC_SUBST(FUSB_TECH) + AC_MSG_CHECKING([for fast usb technique to use]) + AC_MSG_RESULT($FUSB_TECH) + AC_SUBST(FUSB_TECH) + fi - AM_CONDITIONAL(FUSB_TECH_darwin, test $FUSB_TECH = darwin) - AM_CONDITIONAL(FUSB_TECH_win32, test $FUSB_TECH = win32) - AM_CONDITIONAL(FUSB_TECH_generic, test $FUSB_TECH = generic) - AM_CONDITIONAL(FUSB_TECH_linux, test $FUSB_TECH = linux) - AM_CONDITIONAL(FUSB_TECH_ra_wb, test $FUSB_TECH = ra_wb) + AM_CONDITIONAL(FUSB_TECH_darwin, test x$FUSB_TECH = xdarwin) + AM_CONDITIONAL(FUSB_TECH_win32, test x$FUSB_TECH = xwin32) + AM_CONDITIONAL(FUSB_TECH_generic, test x$FUSB_TECH = xgeneric) + AM_CONDITIONAL(FUSB_TECH_linux, test x$FUSB_TECH = xlinux) + AM_CONDITIONAL(FUSB_TECH_ra_wb, test x$FUSB_TECH = xra_wb) ]) - diff --git a/config/usrp_libusb.m4 b/config/usrp_libusb.m4 index ab8305ff..cb3130c8 100644 --- a/config/usrp_libusb.m4 +++ b/config/usrp_libusb.m4 @@ -1,51 +1,48 @@ -# Check for libusb support. -*- Autoconf -*- - -# Copyright 2003 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 3, 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 program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Boston, MA -# 02110-1301, USA. - -AC_DEFUN([USRP_LIBUSB], -[ - AC_LANG_PUSH(C) +dnl Copyright 2003,2008 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([USRP_LIBUSB], [ + libusbok=yes + PKG_CHECK_MODULES(USB, libusb, [], [ + AC_LANG_PUSH(C) + + AC_CHECK_HEADERS([usb.h], [], [libusbok=no; AC_MSG_RESULT([USRP requires libusb. usb.h not found. See http://libusb.sf.net])]) + + save_LIBS="$LIBS" + case "$host_os" in + darwin*) + LIBS="$LIBS -lIOKit" + ;; + *) ;; + esac - libusbok=yes - AC_CHECK_HEADERS([usb.h], - [], - [libusbok=no, - AC_MSG_RESULT([USRP requires libusb. usb.h not found. See http://libusb.sf.net])] - ) + AC_SEARCH_LIBS(usb_bulk_write, [usb], [USB_LIBS="$LIBS"], [libusbok=no; AC_MSG_RESULT([USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net])]) - save_LIBS="$LIBS" - case "$host_os" in - darwin*) LIBS="$LIBS -lIOKit" ;; - *) ;; - esac - AC_SEARCH_LIBS(usb_bulk_write, [usb], - [USB_LIBS="$LIBS"], - [libusbok=no, - AC_MSG_RESULT([USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net])] - ) LIBS="$save_LIBS" - AC_LANG_POP + AC_LANG_POP + ]) - if test $libusbok = yes; then - AC_SUBST(USB_LIBS) - ifelse([$1], , :, [$1]) - else - ifelse([$2], , :, [$2]) - fi + if test x$libusbok = xyes; then + AC_SUBST(USB_LIBS) + ifelse([$1], , :, [$1]) + else + ifelse([$2], , :, [$2]) + fi ]) diff --git a/config/usrp_sdcc.m4 b/config/usrp_sdcc.m4 index 5f558d8a..86f6429e 100644 --- a/config/usrp_sdcc.m4 +++ b/config/usrp_sdcc.m4 @@ -60,7 +60,7 @@ AC_DEFUN([USRP_SDCC], AC_MSG_RESULT([$sdcc_major_version.$sdcc_minor_version.$sdcc_micro_version]) else sdccok=no - AC_MSG_RESULT([USRP requires sdcc >= $sdcc_version_min. sdcc not found. See http://sdcc.sf.net"]) + AC_MSG_RESULT([USRP requires sdcc >= $sdcc_version_min. sdcc not found. See http://sdcc.sf.net]) fi AC_SUBST(XCC) diff --git a/configure b/configure index 7ab9bfe4..2fcc2b06 100755 --- a/configure +++ b/configure @@ -1,9 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. +# Generated by GNU Autoconf 2.63. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## @@ -15,7 +15,7 @@ DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST @@ -37,17 +37,45 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' else - PATH_SEPARATOR=: + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi # Support unset when possible. @@ -63,8 +91,6 @@ fi # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. @@ -87,7 +113,7 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi @@ -100,17 +126,10 @@ PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && @@ -132,7 +151,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -158,7 +177,7 @@ else as_have_required=no fi - if test $as_have_required = yes && (eval ": + if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } @@ -240,7 +259,7 @@ IFS=$as_save_IFS if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST @@ -261,7 +280,7 @@ _ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST @@ -341,10 +360,10 @@ fi if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi @@ -413,9 +432,10 @@ fi test \$exitcode = 0") || { echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. } @@ -451,7 +471,7 @@ test \$exitcode = 0") || { s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems @@ -479,7 +499,6 @@ case `echo -n x` in *) ECHO_N='-n';; esac - if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -492,19 +511,22 @@ if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi @@ -529,10 +551,10 @@ else as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else case $1 in - -*)set "./$1";; + -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi @@ -553,22 +575,22 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} -case X$ECHO in +case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac -echo=${ECHO-echo} +ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! : else # Restart under the correct shell. @@ -578,9 +600,9 @@ fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift - cat </dev/null 2>&1 && unset CDPATH -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else - # maybe with a smaller string... - prev=: + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi fi fi fi fi -fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 - exec 7<&0 &1 # Name of the host. @@ -767,212 +784,549 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -target -target_cpu -target_vendor -target_os -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CPP -GREP -EGREP -CXX -CXXFLAGS -ac_ct_CXX -CXXDEPMODE -am__fastdepCXX_TRUE -am__fastdepCXX_FALSE -CXXCPP -CCAS -CCASFLAGS -LN_S -RM_PROG -ECHO -AR -RANLIB -DLLTOOL -AS -OBJDUMP -F77 -FFLAGS -ac_ct_F77 -LIBTOOL -ENABLE_FORTRAN_TRUE -ENABLE_FORTRAN_FALSE -FLIBS -NO_UNDEFINED -SWIG -PYTHON -PYTHON_VERSION -PYTHON_PREFIX -PYTHON_EXEC_PREFIX -PYTHON_PLATFORM -pythondir -pkgpythondir -pyexecdir -pkgpyexecdir -PYTHON_CPPFLAGS -PYTHON_LDFLAGS -SWIG_PYTHON_LIB -SWIG_PYTHON_OPT -SWIG_PYTHON_CPPFLAGS -XMLTO -HAS_XMLTO_TRUE -HAS_XMLTO_FALSE -PTHREAD_CC -PTHREAD_LIBS -PTHREAD_CFLAGS -OMNITHREAD_POSIX_TRUE -OMNITHREAD_POSIX_FALSE -OMNITHREAD_NT_TRUE -OMNITHREAD_NT_FALSE -CXX_FOR_BUILD -IPC_LIBS -ALLOCA -SHM_OPEN_LIBS -LIBGNURADIO_CORE_EXTRA_LDFLAGS -HAVE_CREATEFILEMAPPING_TRUE -HAVE_CREATEFILEMAPPING_FALSE -LIBOBJS -HAVE_DOT -PKG_CONFIG -FFTW3F_CFLAGS -FFTW3F_LIBS -FFTW3F_INCLUDEDIR -DOXYGEN -DOT -DOC_TRUE -DOC_FALSE -enable_dot -enable_html_docs -enable_latex_docs -generate_docs -MD_CPU -MD_SUBCPU -MD_CPU_x86_TRUE -MD_CPU_x86_FALSE -MD_SUBCPU_x86_64_TRUE -MD_SUBCPU_x86_64_FALSE -MD_CPU_generic_TRUE -MD_CPU_generic_FALSE -CPPUNIT_CONFIG -CPPUNIT_CFLAGS -CPPUNIT_LIBS -CPPUNIT_INCLUDES -BOOST_CFLAGS -DEFINES -USB_LIBS -FUSB_TECH -FUSB_TECH_darwin_TRUE -FUSB_TECH_darwin_FALSE -FUSB_TECH_win32_TRUE -FUSB_TECH_win32_FALSE -FUSB_TECH_generic_TRUE -FUSB_TECH_generic_FALSE -FUSB_TECH_linux_TRUE -FUSB_TECH_linux_FALSE -FUSB_TECH_ra_wb_TRUE -FUSB_TECH_ra_wb_FALSE -XCC -XAS -ALSA_CFLAGS -ALSA_LIBS -ALSA_INCLUDEDIR -JACK_CFLAGS -JACK_LIBS -JACK_INCLUDEDIR -OSS_LIBS -PORTAUDIO_CFLAGS -PORTAUDIO_LIBS -PORTAUDIO_INCLUDEDIR -WINAUDIO_LIBS +enable_option_checking=no +ac_subst_vars='LTLIBOBJS +with_LIBDIRPATH +with_SWIGDIRPATH +with_PYDIRPATH +with_SWIG_INCLUDES +with_INCLUDES +abs_top_builddir +abs_top_srcdir +with_dirs +skipped_dirs +build_dirs +docs_LDFLAG +docs_LIBDIRPATH +docs_INCLUDEDIR +docs_LA +docs_INCLUDES +grc_LDFLAG +grc_LIBDIRPATH +grc_INCLUDEDIR +grc_LA +grc_INCLUDES +PYTHONW +XDG_UTILS_FALSE +XDG_UTILS_TRUE +XDG_UTILS +gnuradio_examples_LDFLAG +gnuradio_examples_LIBDIRPATH +gnuradio_examples_INCLUDEDIR +gnuradio_examples_LA +gnuradio_examples_INCLUDES +gr_utils_LDFLAG +gr_utils_LIBDIRPATH +gr_utils_INCLUDEDIR +gr_utils_LA +gr_utils_INCLUDES +gr_sounder_LDFLAG +gr_sounder_LIBDIRPATH +gr_sounder_INCLUDEDIR +gr_sounder_LA +gr_sounder_INCLUDES +gr_qtgui_LDFLAG +gr_qtgui_LIBDIRPATH +gr_qtgui_INCLUDEDIR +gr_qtgui_LA +gr_qtgui_INCLUDES +BUILD_QT_FALSE +BUILD_QT_TRUE +QT_UIC_EXEC +QT_MOC_EXEC +QT_LIBS +QT_INCLUDES +QMAKE_INCLUDES +QWTPLOT3D_LIBS +QWTPLOT3D_CFLAGS +QWT_LIBS +QWT_CFLAGS +QTOPENGL_CPPFLAGS +QTOPENGL_INCLUDEDIR +QTOPENGL_LIBS +QTOPENGL_CFLAGS +QTGUI_CPPFLAGS +QTGUI_INCLUDEDIR +QTGUI_LIBS +QTGUI_CFLAGS +QTCORE_CPPFLAGS +QTCORE_INCLUDEDIR +QTCORE_LIBS +QTCORE_CFLAGS +gr_wxgui_LDFLAG +gr_wxgui_LIBDIRPATH +gr_wxgui_INCLUDEDIR +gr_wxgui_LA +gr_wxgui_INCLUDES +gr_video_sdl_LDFLAG +gr_video_sdl_LIBDIRPATH +gr_video_sdl_INCLUDEDIR +gr_video_sdl_LA +gr_video_sdl_INCLUDES +SDL_CPPFLAGS SDL_CONFIG -SDL_CFLAGS +SDL_INCLUDEDIR SDL_LIBS -build_dirs -skipped_dirs -LTLIBOBJS' +SDL_CFLAGS +gr_trellis_LDFLAG +gr_trellis_LIBDIRPATH +gr_trellis_INCLUDEDIR +gr_trellis_LA +gr_trellis_INCLUDES +gr_radio_astronomy_LDFLAG +gr_radio_astronomy_LIBDIRPATH +gr_radio_astronomy_INCLUDEDIR +gr_radio_astronomy_LA +gr_radio_astronomy_INCLUDES +gr_radar_mono_LDFLAG +gr_radar_mono_LIBDIRPATH +gr_radar_mono_INCLUDEDIR +gr_radar_mono_LA +gr_radar_mono_INCLUDES +gr_pager_LDFLAG +gr_pager_LIBDIRPATH +gr_pager_INCLUDEDIR +gr_pager_LA +gr_pager_INCLUDES +gr_gsm_fr_vocoder_LDFLAG +gr_gsm_fr_vocoder_LIBDIRPATH +gr_gsm_fr_vocoder_INCLUDEDIR +gr_gsm_fr_vocoder_LA +gr_gsm_fr_vocoder_INCLUDES +gr_gpio_LDFLAG +gr_gpio_LIBDIRPATH +gr_gpio_INCLUDEDIR +gr_gpio_LA +gr_gpio_INCLUDES +gr_cvsd_vocoder_LDFLAG +gr_cvsd_vocoder_LIBDIRPATH +gr_cvsd_vocoder_INCLUDEDIR +gr_cvsd_vocoder_LA +gr_cvsd_vocoder_INCLUDES +gr_audio_windows_LDFLAG +gr_audio_windows_LIBDIRPATH +gr_audio_windows_INCLUDEDIR +gr_audio_windows_LA +gr_audio_windows_INCLUDES +WINAUDIO_LIBS +gr_audio_portaudio_LDFLAG +gr_audio_portaudio_LIBDIRPATH +gr_audio_portaudio_INCLUDEDIR +gr_audio_portaudio_LA +gr_audio_portaudio_INCLUDES +PORTAUDIO_CPPFLAGS +PORTAUDIO_INCLUDEDIR +PORTAUDIO_LIBS +PORTAUDIO_CFLAGS +gr_audio_osx_LDFLAG +gr_audio_osx_LIBDIRPATH +gr_audio_osx_INCLUDEDIR +gr_audio_osx_LA +gr_audio_osx_INCLUDES +gr_audio_oss_LDFLAG +gr_audio_oss_LIBDIRPATH +gr_audio_oss_INCLUDEDIR +gr_audio_oss_LA +gr_audio_oss_INCLUDES +OSS_LIBS +gr_audio_jack_LDFLAG +gr_audio_jack_LIBDIRPATH +gr_audio_jack_INCLUDEDIR +gr_audio_jack_LA +gr_audio_jack_INCLUDES +JACK_CPPFLAGS +JACK_INCLUDEDIR +JACK_LIBS +JACK_CFLAGS +gr_audio_alsa_LDFLAG +gr_audio_alsa_LIBDIRPATH +gr_audio_alsa_INCLUDEDIR +gr_audio_alsa_LA +gr_audio_alsa_INCLUDES +ALSA_CPPFLAGS +ALSA_INCLUDEDIR +ALSA_LIBS +ALSA_CFLAGS +gr_gcell_LDFLAG +gr_gcell_LIBDIRPATH +gr_gcell_INCLUDEDIR +gr_gcell_LA +gr_gcell_INCLUDES +gr_usrp2_LDFLAG +gr_usrp2_LIBDIRPATH +gr_usrp2_INCLUDEDIR +gr_usrp2_LA +gr_usrp2_INCLUDES +gr_usrp_LDFLAG +gr_usrp_LIBDIRPATH +gr_usrp_INCLUDEDIR +gr_usrp_LA +gr_usrp_INCLUDES +usrp2_LDFLAG +usrp2_LIBDIRPATH +usrp2_INCLUDEDIR +usrp2_LA +usrp2_INCLUDES +USRP2_LA +USRP2_INCLUDES +subdirs +usrp_LDFLAG +usrp_LIBDIRPATH +usrp_INCLUDEDIR +usrp_LA +usrp_INCLUDES +usrp_darwin_omnithread_pc_requires +XAS +XCC +USB_CPPFLAGS +USB_INCLUDEDIR +USB_LIBS +USB_CFLAGS +FUSB_TECH_ra_wb_FALSE +FUSB_TECH_ra_wb_TRUE +FUSB_TECH_linux_FALSE +FUSB_TECH_linux_TRUE +FUSB_TECH_generic_FALSE +FUSB_TECH_generic_TRUE +FUSB_TECH_win32_FALSE +FUSB_TECH_win32_TRUE +FUSB_TECH_darwin_FALSE +FUSB_TECH_darwin_TRUE +FUSB_TECH +mblock_LDFLAG +mblock_LIBDIRPATH +mblock_INCLUDEDIR +mblock_LA +mblock_INCLUDES +pmt_LDFLAG +pmt_LIBDIRPATH +pmt_INCLUDEDIR +pmt_LA +pmt_INCLUDES +gnuradio_core_LDFLAG +gnuradio_core_LIBDIRPATH +gnuradio_core_INCLUDEDIR +gnuradio_core_LA +gnuradio_core_INCLUDES +gnuradio_core_PYDIRPATH +gnuradio_core_SWIGDIRPATH +gnuradio_core_I +GSL_CPPFLAGS +GSL_INCLUDEDIR +GSL_LIBS +GSL_CFLAGS +CBLAS_LIBS +gcell_LDFLAG +gcell_LIBDIRPATH +gcell_INCLUDEDIR +gcell_LA +gcell_INCLUDES +gcell_spu_LA +gcell_spu_INCLUDES +SPU_GCC_PROG +omnithread_LDFLAG +omnithread_LIBDIRPATH +omnithread_INCLUDEDIR +omnithread_LA +omnithread_INCLUDES +gruel_LDFLAG +gruel_LIBDIRPATH +gruel_INCLUDEDIR +gruel_LA +gruel_INCLUDES +GR_HAVE_BYTESWAP +GR_HAVE_NETINET_IN +GR_HAVE_ARPA_INET +SVNDATE +SVNVERSION +SVN +BOOST_PROGRAM_OPTIONS_LIB +BOOST_DATE_TIME_LIB +BOOST_THREAD_LIB +BOOST_CXXFLAGS +BOOST_LDFLAGS +BOOST_CPPFLAGS +GUILE +CPPUNIT_INCLUDES +CPPUNIT_CONFIG +CPPUNIT_CPPFLAGS +CPPUNIT_INCLUDEDIR +CPPUNIT_LIBS +CPPUNIT_CFLAGS +MD_CPU_generic_FALSE +MD_CPU_generic_TRUE +MD_CPU_powerpc_FALSE +MD_CPU_powerpc_TRUE +MD_SUBCPU_x86_64_FALSE +MD_SUBCPU_x86_64_TRUE +MD_CPU_x86_FALSE +MD_CPU_x86_TRUE +MD_SUBCPU +MD_CPU +generate_docs +enable_latex_docs +enable_html_docs +enable_xml_docs +enable_dot +DOC_FALSE +DOC_TRUE +DOT +DOXYGEN +FFTW3F_CPPFLAGS +FFTW3F_INCLUDEDIR +FFTW3F_LIBS +FFTW3F_CFLAGS +PKG_CONFIG +HAVE_DOT +LIBOBJS +HAVE_CREATEFILEMAPPING_FALSE +HAVE_CREATEFILEMAPPING_TRUE +LIBGNURADIO_CORE_EXTRA_LDFLAGS +SHM_OPEN_LIBS +ALLOCA +GR_ARCH_BIGENDIAN +IPC_LIBS +CXX_FOR_BUILD +OMNITHREAD_NT_FALSE +OMNITHREAD_NT_TRUE +OMNITHREAD_POSIX_FALSE +OMNITHREAD_POSIX_TRUE +PTHREAD_CFLAGS +PTHREAD_LIBS +PTHREAD_CC +acx_pthread_config +HAS_XMLTO_FALSE +HAS_XMLTO_TRUE +XMLTO +SWIG_PYTHON_CPPFLAGS +SWIG_PYTHON_OPT +SWIG_PYTHON_LIB +PYTHON_LDFLAGS +PYTHON_CPPFLAGS +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +SWIG +NO_UNDEFINED +FLIBS +ac_ct_F77 +FFLAGS +F77 +ENABLE_FORTRAN_FALSE +ENABLE_FORTRAN_TRUE +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +RM_PROG +LN_S +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +lf_CXXFLAGS +lf_CFLAGS +swig_CXXFLAGS +autoconf_default_CXXFLAGS +autoconf_default_CFLAGS +gr_libdir_suffix +CXXCPP +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +DEFINES +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +with_gprof +with_prof +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_fortran +with_pythondir +enable_doxygen +enable_dot +with_md_cpu +enable_altivec +with_cppunit_prefix +with_cppunit_exec_prefix +with_boost +with_boost_libdir +with_boost_thread +with_boost_date_time +with_boost_program_options +enable_all_components +enable_gruel +with_gruel +enable_omnithread +with_omnithread +enable_gcell +enable_gnuradio_core +with_gnuradio_core +with_cblas +enable_pmt +with_pmt +enable_mblock +with_mblock +enable_usrp +with_usrp +with_fusb_tech +enable_usrp2 +enable_gr_usrp +enable_gr_usrp2 +enable_gr_gcell +enable_gr_audio_alsa +enable_gr_audio_jack +enable_gr_audio_oss +enable_gr_audio_osx +enable_gr_audio_portaudio +enable_gr_audio_windows +enable_gr_cvsd_vocoder +enable_gr_gpio +enable_gr_gsm_fr_vocoder +enable_gr_pager +enable_gr_radar_mono +enable_gr_radio_astronomy +enable_gr_trellis +enable_gr_video_sdl +with_sdl_prefix +with_sdl_exec_prefix +enable_sdltest +enable_gr_wxgui +with_gr_wxgui +enable_gr_qtgui +with_qwt_libdir +with_qwt_incdir +with_qwt_lib +with_qwtplot3d_libdir +with_qwtplot3d_incdir +with_qwtplot3d_lib +enable_gr_sounder +enable_gr_utils +enable_gnuradio_examples +enable_grc +enable_docs +' ac_precious_vars='build_alias host_alias target_alias @@ -989,12 +1343,48 @@ CXXCPP CCAS CCASFLAGS F77 -FFLAGS' - +FFLAGS +PKG_CONFIG +FFTW3F_CFLAGS +FFTW3F_LIBS +FFTW3F_INCLUDEDIR +CPPUNIT_CFLAGS +CPPUNIT_LIBS +CPPUNIT_INCLUDEDIR +GSL_CFLAGS +GSL_LIBS +GSL_INCLUDEDIR +USB_CFLAGS +USB_LIBS +USB_INCLUDEDIR +ALSA_CFLAGS +ALSA_LIBS +ALSA_INCLUDEDIR +JACK_CFLAGS +JACK_LIBS +JACK_INCLUDEDIR +PORTAUDIO_CFLAGS +PORTAUDIO_LIBS +PORTAUDIO_INCLUDEDIR +SDL_CFLAGS +SDL_LIBS +SDL_INCLUDEDIR +QTCORE_CFLAGS +QTCORE_LIBS +QTCORE_INCLUDEDIR +QTGUI_CFLAGS +QTGUI_LIBS +QTGUI_INCLUDEDIR +QTOPENGL_CFLAGS +QTOPENGL_LIBS +QTOPENGL_INCLUDEDIR' +ac_subdirs_all='usrp2/firmware' # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -1093,13 +1483,21 @@ do datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; @@ -1112,13 +1510,21 @@ do dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -1309,22 +1715,38 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -1344,7 +1766,7 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; @@ -1353,16 +1775,16 @@ Try \`$0 --help' for more information." >&2 ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -1371,22 +1793,38 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi -# Be sure to have absolute directory names. +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done @@ -1401,7 +1839,7 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -1417,10 +1855,10 @@ test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 + { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } @@ -1428,12 +1866,12 @@ test "X$ac_ls_di" = "X$ac_pwd_ls_di" || if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1460,12 +1898,12 @@ else fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. @@ -1514,9 +1952,9 @@ Configuration: Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -1526,25 +1964,25 @@ for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1566,58 +2004,131 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --disable-assert don't use cpp.h assert --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=no] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-fortran enable fortran (no) - --enable-doxygen enable documentation generation with doxygen (no) + --enable-doxygen enable documentation generation with doxygen (auto) --enable-dot use 'dot' to generate graphs in doxygen (auto) - --enable-html-docs enable HTML generation with doxygen (yes) - --enable-latex-docs enable LaTeX doc generation with doxygen (no) - --enable-all-components Build all components or stop on failed dependencies - - --enable-gnuradio-core Fail build if gnuradio-core fails configuration - --enable-gnuradio-examples Fail build if gnuradio-examples fails configuration - --enable-usrp Fail build if usrp fails configuration - --enable-gr-usrp Fail build if gr-usrp fails configuration - --enable-gr-audio-alsa Fail build if gr-audio-alsa fails configuration - --enable-gr-audio-jack Fail build if gr-audio-jack fails configuration - --enable-gr-audio-oss Fail build if gr-audio-oss fails configuration - --enable-gr-audio-osx Fail build if gr-audio-osx fails configuration - --enable-gr-audio-portaudio Fail build if gr-audio-portaudio fails configuration - --enable-gr-audio-windows Fail build if gr-audio-windows fails configuration - --enable-gr-gsm-fr-vocoder Fail build if gr-gsm-fr-vocoder fails configuration - --enable-gr-radio-astronomy Fail build if gr-radio-astronomy fails configuration - --enable-gr-trellis Fail build if gr-trellis fails configuration - --enable-gr-video-sdl Fail build if gr-video-sdl fails configuration + --enable-altivec enable altivec on PowerPC (yes) + --enable-all-components Build all configurable components (default), or stop on failed dependencies + + --enable-gruel Stop if gruel fails configuration + --enable-omnithread Stop if omnithread fails configuration + --enable-gcell Stop if gcell fails configuration + --enable-gnuradio-core Stop if gnuradio-core fails configuration + --enable-pmt Stop if pmt fails configuration + --enable-mblock Stop if mblock fails configuration + --enable-usrp Stop if usrp fails configuration + --enable-usrp2 Stop if usrp2 fails configuration + --enable-gr-usrp Stop if gr-usrp fails configuration + --enable-gr-usrp2 Stop if gr-usrp2 fails configuration + --enable-gr-gcell Stop if gr-gcell fails configuration + --enable-gr-audio-alsa Stop if gr-audio-alsa fails configuration + --enable-gr-audio-jack Stop if gr-audio-jack fails configuration + --enable-gr-audio-oss Stop if gr-audio-oss fails configuration + --enable-gr-audio-osx Stop if gr-audio-osx fails configuration + --enable-gr-audio-portaudio + Stop if gr-audio-portaudio fails configuration + --enable-gr-audio-windows + Stop if gr-audio-windows fails configuration + --enable-gr-cvsd-vocoder + Stop if gr-cvsd-vocoder fails configuration + --enable-gr-gpio Stop if gr-gpio fails configuration + --enable-gr-gsm-fr-vocoder + Stop if gr-gsm-fr-vocoder fails configuration + --enable-gr-pager Stop if gr-pager fails configuration + --enable-gr-radar-mono Stop if gr-radar-mono fails configuration + --enable-gr-radio-astronomy + Stop if gr-radio-astronomy fails configuration + --enable-gr-trellis Stop if gr-trellis fails configuration + --enable-gr-video-sdl Stop if gr-video-sdl fails configuration --disable-sdltest Do not try to compile and run a test SDL program - --enable-gr-wxgui Fail build if gr-wxgui fails configuration + --enable-gr-wxgui Stop if gr-wxgui fails configuration + --enable-gr-qtgui Stop if gr-qtgui fails configuration + --enable-gr-sounder Stop if gr-sounder fails configuration + --enable-gr-utils Stop if gr-utils fails configuration + --enable-gnuradio-examples + Stop if gnuradio-examples fails configuration + --enable-grc Stop if grc fails configuration + --enable-docs Stop if docs fails configuration Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-warnings Turn on warnings --with-gprof Turn on gprof profiling --with-prof Turn on prof profiling - --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] - --with-tags[=TAGS] include additional configurations [automatic] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pythondir=DIR python installation directory (cross-compiling) + [default=$prefix/lib/python2.5/site-packages] --with-md-cpu=ARCH set machine dependent speedups (auto) --with-cppunit-prefix=PFX Prefix where CppUnit is installed (optional) --with-cppunit-exec-prefix=PFX Exec prefix where CppUnit is installed (optional) - --with-boost-include-dir= - path to boost c++ include files - --with-fusb-tech=OS set fast usb technique (auto) + --with-boost[=DIR] use boost (default is yes) - it is possible to + specify the root directory for boost (optional) + --with-boost-libdir=LIB_DIR + Force given directory for boost libraries. Note that + this will overwrite library path detection, so use + this parameter only if default library detection + fails and you know exactly where your boost + libraries are located. + --with-boost-thread[=special-lib] + Use the thread library from + boost. It is possible to specify a certain library + to the linker. E.g., + --with-boost-thread=boost_thread-gcc41-mt-1_35 + --with-boost-date-time[=special-lib] + Use the date_time library from + boost. It is possible to specify a certain library + to the linker. E.g., + --with-boost-date-time=boost_date_time-gcc41-mt-1_35 + --with-boost-program-options[=special-lib] + Use the program_options library + from boost. It is possible to specify a certain + library to the linker. E.g., + --with-boost-program-options=boost_program_options-gcc41-mt-1_35 + --with-gruel[=PATH] Use package gruel if installed in PATH (if + specified) or PKG_CONFIG_PATH (if PATH not + specified); stop if gruel not found + --with-omnithread[=PATH] + Use package omnithread if installed in PATH (if + specified) or PKG_CONFIG_PATH (if PATH not + specified); stop if omnithread not found + --with-gnuradio-core[=PATH] + Use package gnuradio-core if installed in PATH (if + specified) or PKG_CONFIG_PATH (if PATH not + specified); stop if gnuradio-core not found + --with-cblas= use CBLAS library + --with-pmt[=PATH] Use package pmt if installed in PATH (if specified) + or PKG_CONFIG_PATH (if PATH not specified); stop if + pmt not found + --with-mblock[=PATH] Use package mblock if installed in PATH (if + specified) or PKG_CONFIG_PATH (if PATH not + specified); stop if mblock not found + --with-usrp[=PATH] Use package usrp if installed in PATH (if specified) + or PKG_CONFIG_PATH (if PATH not specified); stop if + usrp not found + --with-fusb-tech=OS Set fast USB technique (default=auto) --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) + --with-gr-wxgui[=PATH] Use package gr-wxgui if installed in PATH (if + specified) or PKG_CONFIG_PATH (if PATH not + specified); stop if gr-wxgui not found + --with-qwt-libdir=path Prefix where QWT library is installed (optional) + --with-qwt-incdir=path Prefix where QWT include files are (optional) + --with-qwt-lib=library QWT library name (optional) + --with-qwtplot3d-libdir=path Prefix where QWTPLOT3D library is installed (optional) + --with-qwtplot3d-incdir=path Prefix where QWTPLOT3D include files are (optional) + --with-qwtplot3d-lib=library QWT Plot3D library name (optional) Some influential environment variables: CC C compiler command @@ -1635,6 +2146,60 @@ Some influential environment variables: CCASFLAGS assembler compiler flags (defaults to CFLAGS) F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags + PKG_CONFIG path to pkg-config utility + FFTW3F_CFLAGS + C compiler flags for FFTW3F, overriding pkg-config + FFTW3F_LIBS linker flags for FFTW3F, overriding pkg-config + FFTW3F_INCLUDEDIR + includedir for FFTW3F, overriding pkg-config + CPPUNIT_CFLAGS + C compiler flags for CPPUNIT, overriding pkg-config + CPPUNIT_LIBS + linker flags for CPPUNIT, overriding pkg-config + CPPUNIT_INCLUDEDIR + includedir for CPPUNIT, overriding pkg-config + GSL_CFLAGS C compiler flags for GSL, overriding pkg-config + GSL_LIBS linker flags for GSL, overriding pkg-config + GSL_INCLUDEDIR + includedir for GSL, overriding pkg-config + USB_CFLAGS C compiler flags for USB, overriding pkg-config + USB_LIBS linker flags for USB, overriding pkg-config + USB_INCLUDEDIR + includedir for USB, overriding pkg-config + ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config + ALSA_LIBS linker flags for ALSA, overriding pkg-config + ALSA_INCLUDEDIR + includedir for ALSA, overriding pkg-config + JACK_CFLAGS C compiler flags for JACK, overriding pkg-config + JACK_LIBS linker flags for JACK, overriding pkg-config + JACK_INCLUDEDIR + includedir for JACK, overriding pkg-config + PORTAUDIO_CFLAGS + C compiler flags for PORTAUDIO, overriding pkg-config + PORTAUDIO_LIBS + linker flags for PORTAUDIO, overriding pkg-config + PORTAUDIO_INCLUDEDIR + includedir for PORTAUDIO, overriding pkg-config + SDL_CFLAGS C compiler flags for SDL, overriding pkg-config + SDL_LIBS linker flags for SDL, overriding pkg-config + SDL_INCLUDEDIR + includedir for SDL, overriding pkg-config + QTCORE_CFLAGS + C compiler flags for QTCORE, overriding pkg-config + QTCORE_LIBS linker flags for QTCORE, overriding pkg-config + QTCORE_INCLUDEDIR + includedir for QTCORE, overriding pkg-config + QTGUI_CFLAGS + C compiler flags for QTGUI, overriding pkg-config + QTGUI_LIBS linker flags for QTGUI, overriding pkg-config + QTGUI_INCLUDEDIR + includedir for QTGUI, overriding pkg-config + QTOPENGL_CFLAGS + C compiler flags for QTOPENGL, overriding pkg-config + QTOPENGL_LIBS + linker flags for QTOPENGL, overriding pkg-config + QTOPENGL_INCLUDEDIR + includedir for QTOPENGL, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1646,15 +2211,17 @@ fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1690,7 +2257,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1700,10 +2267,10 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure -generated by GNU Autoconf 2.61 +generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1714,7 +2281,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was +generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ @@ -1750,7 +2317,7 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -1785,7 +2352,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; @@ -1837,11 +2404,12 @@ _ASBOX case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac @@ -1871,9 +2439,9 @@ _ASBOX do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo @@ -1888,9 +2456,9 @@ _ASBOX do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1906,8 +2474,8 @@ _ASBOX echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -1949,21 +2517,24 @@ _ACEOF # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -shift -for ac_site_file +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do + test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi @@ -1973,16 +2544,16 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1996,29 +2567,38 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2028,10 +2608,12 @@ echo "$as_me: current value: $ac_new_val" >&2;} fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi @@ -2061,6 +2643,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" + + ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then @@ -2078,8 +2662,8 @@ for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi @@ -2094,34 +2678,34 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build @@ -2138,27 +2722,27 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host @@ -2175,27 +2759,27 @@ IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking target system type" >&5 -echo $ECHO_N "checking target system type... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 -echo "$as_me: error: invalid value of canonical target" >&2;} +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 +$as_echo "$as_me: error: invalid value of canonical target" >&2;} { (exit 1); exit 1; }; };; esac target=$ac_cv_target @@ -2218,7 +2802,9 @@ test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- -am__api_version="1.9" + +am__api_version='1.10' + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -2232,11 +2818,12 @@ am__api_version="1.9" # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -2265,17 +2852,29 @@ case $as_dir/ in # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -2288,8 +2887,8 @@ fi INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2299,8 +2898,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file @@ -2323,9 +2922,9 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi @@ -2336,26 +2935,23 @@ then # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! +$as_echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` @@ -2366,51 +2962,66 @@ if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" else - mkdir_p='$(install_sh) -d' + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" fi fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2423,7 +3034,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2434,22 +3045,23 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$AWK" && break done -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh @@ -2466,12 +3078,12 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2484,12 +3096,16 @@ else fi rmdir .tst 2>/dev/null -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } + fi fi # test whether we have cygpath @@ -2504,7 +3120,7 @@ fi # Define the identity of the package. PACKAGE=gnuradio - VERSION=3.0.4 + VERSION=3.2.2 cat >>confdefs.h <<_ACEOF @@ -2532,7 +3148,7 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"$am_aux_dir/install-sh"} +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right @@ -2542,10 +3158,10 @@ if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -2558,7 +3174,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2569,11 +3185,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2582,10 +3198,10 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. @@ -2598,7 +3214,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2609,11 +3225,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -2621,12 +3237,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -2636,7 +3248,7 @@ else fi fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -2651,23 +3263,18 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' +DEFINES="" + +if test -n "${CFLAGS}"; then + user_set_cflags=yes +fi +if test -n "${CXXFLAGS}"; then + user_set_cxxflags=yes +fi - if test "$host_cpu" = "x86_64"; then - { echo "$as_me:$LINENO: checking libdir for lib64 suffix" >&5 -echo $ECHO_N "checking libdir for lib64 suffix... $ECHO_C" >&6; } - t=${libdir##*/lib} - if test "$t" != 64 && test -d /lib64 && ! test -L /lib64; then - libdir=${libdir}64 - { echo "$as_me:$LINENO: result: no. Setting libdir to $libdir" >&5 -echo "${ECHO_T}no. Setting libdir to $libdir" >&6; } - else - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - fi - fi - DEPDIR="${am__leading_dot}deps" +DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" @@ -2679,8 +3286,8 @@ am__doit: .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none @@ -2707,8 +3314,8 @@ if test "$am__include" = "#"; then fi -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. @@ -2720,9 +3327,7 @@ if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi - - -if test "x$enable_dependency_tracking" != xno; then + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2731,7 +3336,6 @@ else fi - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2740,10 +3344,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2756,7 +3360,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2767,11 +3371,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2780,10 +3384,10 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2796,7 +3400,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2807,11 +3411,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -2819,12 +3423,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2837,10 +3437,10 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2853,7 +3453,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2864,11 +3464,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2877,10 +3477,10 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2898,7 +3498,7 @@ do continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2921,11 +3521,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2936,10 +3536,10 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2952,7 +3552,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2963,11 +3563,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2980,10 +3580,10 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2996,7 +3596,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3007,11 +3607,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -3023,12 +3623,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3038,44 +3634,50 @@ fi fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { (exit 1); exit 1; }; }; } # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF @@ -3094,27 +3696,22 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + ac_rmfiles= for ac_file in $ac_files do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done @@ -3125,10 +3722,11 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' @@ -3139,7 +3737,7 @@ for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most @@ -3166,25 +3764,27 @@ else ac_file='' fi -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables +$as_echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } + { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then @@ -3193,49 +3793,53 @@ if test "$cross_compiling" != yes; then *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. +$as_echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { (exit 1); exit 1; }; }; } fi fi fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will @@ -3244,31 +3848,33 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -3291,40 +3897,43 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -3350,20 +3959,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no @@ -3373,15 +3983,19 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes @@ -3408,20 +4022,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" @@ -3446,20 +4061,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag @@ -3485,20 +4101,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -3513,8 +4130,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3530,10 +4147,10 @@ else CFLAGS= fi fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC @@ -3604,20 +4221,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -3633,15 +4251,15 @@ fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac @@ -3653,10 +4271,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3718,6 +4336,7 @@ else depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then @@ -3743,13 +4362,11 @@ else fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -3765,15 +4382,15 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -3805,20 +4422,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. @@ -3842,13 +4460,14 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err @@ -3856,7 +4475,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. @@ -3881,8 +4500,8 @@ fi else ac_cv_prog_CPP=$CPP fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do @@ -3910,20 +4529,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. @@ -3947,13 +4567,14 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err @@ -3961,7 +4582,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. @@ -3977,11 +4598,13 @@ rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { (exit 1); exit 1; }; }; } fi ac_ext=c @@ -3992,42 +4615,37 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else + if test -z "$GREP"; then ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` @@ -4042,74 +4660,60 @@ case `"$ac_path_GREP" --version 2>&1` in rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_GREP_found && break 3 + $ac_path_GREP_found && break 3 + done done done - -done IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } -fi - + fi else ac_cv_path_GREP=$GREP fi - fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + if test -z "$EGREP"; then ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` @@ -4124,152 +4728,31 @@ case `"$ac_path_EGREP" --version 2>&1` in rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_EGREP_found && break 3 + $ac_path_EGREP_found && break 3 + done done done - -done IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } -fi - + fi else ac_cv_path_EGREP=$EGREP fi - fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" - -{ echo "$as_me:$LINENO: checking for AIX" >&5 -echo $ECHO_N "checking for AIX... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef _AIX - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -cat >>confdefs.h <<\_ACEOF -#define _ALL_SOURCE 1 -_ACEOF - -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -rm -f conftest* - - -{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 -echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } -if test "${ac_cv_search_strerror+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char strerror (); -int -main () -{ -return strerror (); - ; - return 0; -} -_ACEOF -for ac_lib in '' cposix; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_strerror=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_strerror+set}" = set; then - break -fi -done -if test "${ac_cv_search_strerror+set}" = set; then - : -else - ac_cv_search_strerror=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 -echo "${ECHO_T}$ac_cv_search_strerror" >&6; } -ac_res=$ac_cv_search_strerror -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -4296,20 +4779,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no @@ -4401,37 +4885,40 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi +rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF @@ -4453,11 +4940,11 @@ fi for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -4475,20 +4962,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" @@ -4496,12 +4984,15 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -4509,18 +5000,19 @@ fi done + + if test "${ac_cv_header_minix_config_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 +$as_echo_n "checking for minix/config.h... " >&6; } if test "${ac_cv_header_minix_config_h+set}" = set; then - { echo "$as_me:$LINENO: checking for minix/config.h" >&5 -echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; } -if test "${ac_cv_header_minix_config_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 -echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +$as_echo "$ac_cv_header_minix_config_h" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking minix/config.h usability" >&5 -echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5 +$as_echo_n "checking minix/config.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -4536,32 +5028,33 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking minix/config.h presence" >&5 -echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5 +$as_echo_n "checking minix/config.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -4575,73 +5068,74 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for minix/config.h" >&5 -echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 +$as_echo_n "checking for minix/config.h... " >&6; } if test "${ac_cv_header_minix_config_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else ac_cv_header_minix_config_h=$ac_header_preproc fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 -echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +$as_echo "$ac_cv_header_minix_config_h" >&6; } fi -if test $ac_cv_header_minix_config_h = yes; then +if test "x$ac_cv_header_minix_config_h" = x""yes; then MINIX=yes else MINIX= fi -if test "$MINIX" = yes; then + if test "$MINIX" = yes; then cat >>confdefs.h <<\_ACEOF #define _POSIX_SOURCE 1 @@ -4657,61 +5151,224 @@ cat >>confdefs.h <<\_ACEOF #define _MINIX 1 _ACEOF -fi + fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_safe_to_define___extensions__=yes else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_safe_to_define___extensions__=no fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + cat >>confdefs.h <<\_ACEOF +#define __EXTENSIONS__ 1 +_ACEOF + cat >>confdefs.h <<\_ACEOF +#define _ALL_SOURCE 1 +_ACEOF - test -n "$CXX" && break - done + cat >>confdefs.h <<\_ACEOF +#define _GNU_SOURCE 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _POSIX_PTHREAD_SEMANTICS 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _TANDEM_SOURCE 1 +_ACEOF + + +{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5 +$as_echo_n "checking for library containing strerror... " >&6; } +if test "${ac_cv_search_strerror+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strerror (); +int +main () +{ +return strerror (); + ; + return 0; +} +_ACEOF +for ac_lib in '' cposix; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_strerror=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_strerror+set}" = set; then + break +fi +done +if test "${ac_cv_search_strerror+set}" = set; then + : +else + ac_cv_search_strerror=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +$as_echo "$ac_cv_search_strerror" >&6; } +ac_res=$ac_cv_search_strerror +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:$LINENO: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done fi if test -z "$CXX"; then ac_ct_CXX=$CXX @@ -4719,10 +5376,10 @@ if test -z "$CXX"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. @@ -4735,7 +5392,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4746,11 +5403,11 @@ fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } + { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -4762,12 +5419,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -4777,43 +5430,47 @@ fi fi fi # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` +$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -4839,20 +5496,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no @@ -4862,15 +5520,19 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes @@ -4897,20 +5559,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" @@ -4935,20 +5598,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag @@ -4974,20 +5638,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 @@ -5002,8 +5667,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then @@ -5027,10 +5692,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -5092,6 +5757,7 @@ else depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then @@ -5117,13 +5783,11 @@ else fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= @@ -5139,11 +5803,11 @@ ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" @@ -5175,20 +5839,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. @@ -5212,13 +5877,14 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err @@ -5226,7 +5892,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. @@ -5251,8 +5917,8 @@ fi else ac_cv_prog_CXXCPP=$CXXCPP fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } +{ $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do @@ -5280,20 +5946,21 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. @@ -5317,13 +5984,14 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err @@ -5331,7 +5999,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. @@ -5347,11 +6015,13 @@ rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +$as_echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { (exit 1); exit 1; }; }; } fi ac_ext=c @@ -5373,135 +6043,9 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - { echo "$as_me:$LINENO: checking whether C++ has bool" >&5 -echo $ECHO_N "checking whether C++ has bool... $ECHO_C" >&6; } - if test "$cross_compiling" = yes; then - { echo "$as_me:$LINENO: WARNING: Don't cross-compile" >&5 -echo "$as_me: WARNING: Don't cross-compile" >&2;} - -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -main() { bool b1=true; bool b2=false; } -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define CXX_HAS_NO_BOOL -_ACEOF - -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - - { echo "$as_me:$LINENO: checking whether C++ has buggy scoping in for-loops" >&5 -echo $ECHO_N "checking whether C++ has buggy scoping in for-loops... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ - - for (int i=0;i<10;i++) { } - for (int i=0;i<10;i++) { } - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define CXX_HAS_BUGGY_FOR_LOOPS -_ACEOF - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - { echo "$as_me:$LINENO: checking whether user wants assertions" >&5 -echo $ECHO_N "checking whether user wants assertions... $ECHO_C" >&6; } - # Check whether --enable-assert was given. -if test "${enable_assert+set}" = set; then - enableval=$enable_assert; -cat >>confdefs.h <<\_ACEOF -#define NDEBUG -_ACEOF - - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -else - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -fi - - { echo "$as_me:$LINENO: checking whether C++ has std::isnan" >&5 -echo $ECHO_N "checking whether C++ has std::isnan... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking whether C++ has std::isnan" >&5 +$as_echo_n "checking whether C++ has std::isnan... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -5525,30 +6069,31 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } cat >>confdefs.h <<\_ACEOF -#define CXX_HAS_STD_ISNAN +#define CXX_HAS_STD_ISNAN /**/ _ACEOF else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -5562,81 +6107,149 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - { echo "$as_me:$LINENO: checking whether user wants warnings" >&5 -echo $ECHO_N "checking whether user wants warnings... $ECHO_C" >&6; } -# Check whether --with-warnings was given. -if test "${with_warnings+set}" = set; then - withval=$with_warnings; lf_warnings=yes -else - lf_warnings=no -fi - lf_warnings=yes # hard code for now -eb - { echo "$as_me:$LINENO: result: $lf_warnings" >&5 -echo "${ECHO_T}$lf_warnings" >&6; } - cc_warning_flags="-Wall" - cxx_warning_flags="-Wall -Woverloaded-virtual" - if test $lf_warnings = yes - then - if test -n "${CC}" - then + { $as_echo "$as_me:$LINENO: checking gr_libdir_suffix" >&5 +$as_echo_n "checking gr_libdir_suffix... " >&6; } + gr_libdir_suffix="" - echo 'void f(){}' > conftest.c - for i in $cc_warning_flags - do - { echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 -echo $ECHO_N "checking whether $CC accepts $i... $ECHO_C" >&6; } - if test -z "`${CC} $i -c conftest.c 2>&1`" - then - CFLAGS="${CFLAGS} $i" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - fi - done - rm -f conftest.c conftest.o - fi - if test -n "${CXX}" - then + case "$host_os" in + linux*) is_linux=yes ;; + *) is_linux=no ;; + esac - echo 'void f(){}' > conftest.cc - for i in $cxx_warning_flags - do - { echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 -echo $ECHO_N "checking whether $CXX accepts $i... $ECHO_C" >&6; } - if test -z "`${CXX} $i -c conftest.cc 2>&1`" - then - CXXFLAGS="${CXXFLAGS} $i" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - fi - done - rm -f conftest.cc conftest.o + if test "$is_linux" = no || test "$host_cpu" != "x86_64" && test "$host_cpu" != "powerpc64"; then + gr_libdir_suffix="" + elif test "$cross_compiling" = yes; then + + if test "$ac_cv_cxx_compiler_gnu" = "yes"; + then + gr_libdir_suffix=`$CXX -Wl,--verbose 2>/dev/null | sed -n -e '/SEARCH_DIR/{s/;.*$//; s,^.*/,,; s/".*$//; s/^lib//; p}'` + fi + elif test "$host_cpu" = "x86_64"; then + if test -d /lib64 && test ! -L /lib64; then + gr_libdir_suffix=64 fi + else + + if test "$ac_cv_cxx_compiler_gnu" = "yes"; + then + gr_libdir_suffix=`$CXX -Wl,--verbose 2>/dev/null | sed -n -e '/SEARCH_DIR/{s/;.*$//; s,^.*/,,; s/".*$//; s/^lib//; p}'` fi + fi + { $as_echo "$as_me:$LINENO: result: $gr_libdir_suffix" >&5 +$as_echo "$gr_libdir_suffix" >&6; } - { echo "$as_me:$LINENO: checking whether user wants gprof" >&5 -echo $ECHO_N "checking whether user wants gprof... $ECHO_C" >&6; } -# Check whether --with-gprof was given. -if test "${with_gprof+set}" = set; then + { $as_echo "$as_me:$LINENO: checking whether to append 64 to libdir" >&5 +$as_echo_n "checking whether to append 64 to libdir... " >&6; } + t=${libdir##*/lib} + if test "$t" != 64 && test "$gr_libdir_suffix" = "64"; then + libdir=${libdir}64 + { $as_echo "$as_me:$LINENO: result: yes. Setting libdir to $libdir" >&5 +$as_echo "yes. Setting libdir to $libdir" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + + +if test "$user_set_cflags" != yes; then + autoconf_default_CFLAGS="$CFLAGS" + CFLAGS="" +fi + + + +if test "$user_set_cxxflags" != yes; then + autoconf_default_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="" + if test "$GXX" = yes; then + case "$host_cpu" in + powerpc*) + swig_CXXFLAGS="-g1 -O2 -Wno-strict-aliasing -Wno-parentheses" + ;; + *) + swig_CXXFLAGS="-g -O1 -Wno-strict-aliasing -Wno-parentheses" + ;; + esac + fi +fi + + + +if test x${PKG_CONFIG_PATH} = x; then + PKG_CONFIG_PATH=${prefix}/lib${gr_libdir_suffix}/pkgconfig +else + PKG_CONFIG_PATH=${prefix}/lib${gr_libdir_suffix}/pkgconfig:${PKG_CONFIG_PATH} +fi +export PKG_CONFIG_PATH + + + cc_warning_flags="-Wall -Werror-implicit-function-declaration" + cxx_warning_flags="-Wall -Woverloaded-virtual" + if test -n "${CC}" + then + + echo 'void f(){}' > conftest.c + for i in $cc_warning_flags + do + { $as_echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 +$as_echo_n "checking whether $CC accepts $i... " >&6; } + if test -z "`${CC} $i -c conftest.c 2>&1`" + then + lf_CFLAGS="${lf_CFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + done + rm -f conftest.c conftest.o + + + fi + if test -n "${CXX}" + then + + echo 'void f(){}' > conftest.cc + for i in $cxx_warning_flags + do + { $as_echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 +$as_echo_n "checking whether $CXX accepts $i... " >&6; } + if test -z "`${CXX} $i -c conftest.cc 2>&1`" + then + lf_CXXFLAGS="${lf_CXXFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + done + rm -f conftest.cc conftest.o + + + fi + + + { $as_echo "$as_me:$LINENO: checking whether user wants gprof" >&5 +$as_echo_n "checking whether user wants gprof... " >&6; } + +# Check whether --with-gprof was given. +if test "${with_gprof+set}" = set; then withval=$with_gprof; else with_gprof=no fi - { echo "$as_me:$LINENO: result: $with_gprof" >&5 -echo "${ECHO_T}$with_gprof" >&6; } + { $as_echo "$as_me:$LINENO: result: $with_gprof" >&5 +$as_echo "$with_gprof" >&6; } cc_profiling_flags="-pg" cxx_profiling_flags="-pg" @@ -5649,20 +6262,21 @@ echo "${ECHO_T}$with_gprof" >&6; } echo 'void f(){}' > conftest.c for i in $cc_profiling_flags do - { echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 -echo $ECHO_N "checking whether $CC accepts $i... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 +$as_echo_n "checking whether $CC accepts $i... " >&6; } if test -z "`${CC} $i -c conftest.c 2>&1`" then - CFLAGS="${CFLAGS} $i" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + lf_CFLAGS="${lf_CFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi done rm -f conftest.c conftest.o + fi if test -n "${CXX}" then @@ -5670,26 +6284,27 @@ echo "${ECHO_T}no" >&6; } echo 'void f(){}' > conftest.cc for i in $cxx_profiling_flags do - { echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 -echo $ECHO_N "checking whether $CXX accepts $i... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 +$as_echo_n "checking whether $CXX accepts $i... " >&6; } if test -z "`${CXX} $i -c conftest.cc 2>&1`" then - CXXFLAGS="${CXXFLAGS} $i" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + lf_CXXFLAGS="${lf_CXXFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi done rm -f conftest.cc conftest.o + fi fi - { echo "$as_me:$LINENO: checking whether user wants prof" >&5 -echo $ECHO_N "checking whether user wants prof... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking whether user wants prof" >&5 +$as_echo_n "checking whether user wants prof... " >&6; } # Check whether --with-prof was given. if test "${with_prof+set}" = set; then @@ -5698,8 +6313,8 @@ else with_prof=no fi - { echo "$as_me:$LINENO: result: $with_prof" >&5 -echo "${ECHO_T}$with_prof" >&6; } + { $as_echo "$as_me:$LINENO: result: $with_prof" >&5 +$as_echo "$with_prof" >&6; } cc_profiling_flags="-p" cxx_profiling_flags="-p" @@ -5712,20 +6327,21 @@ echo "${ECHO_T}$with_prof" >&6; } echo 'void f(){}' > conftest.c for i in $cc_profiling_flags do - { echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 -echo $ECHO_N "checking whether $CC accepts $i... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 +$as_echo_n "checking whether $CC accepts $i... " >&6; } if test -z "`${CC} $i -c conftest.c 2>&1`" then - CFLAGS="${CFLAGS} $i" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + lf_CFLAGS="${lf_CFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi done rm -f conftest.c conftest.o + fi if test -n "${CXX}" then @@ -5733,20 +6349,21 @@ echo "${ECHO_T}no" >&6; } echo 'void f(){}' > conftest.cc for i in $cxx_profiling_flags do - { echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 -echo $ECHO_N "checking whether $CXX accepts $i... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 +$as_echo_n "checking whether $CXX accepts $i... " >&6; } if test -z "`${CXX} $i -c conftest.cc 2>&1`" then - CXXFLAGS="${CXXFLAGS} $i" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + lf_CXXFLAGS="${lf_CXXFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi done rm -f conftest.cc conftest.o + fi fi @@ -5757,22 +6374,131 @@ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +fi + + +{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6; } + { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } fi -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh @@ -5789,12 +6515,12 @@ esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -5811,11 +6537,12 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5844,17 +6571,29 @@ case $as_dir/ in # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -5867,8 +6606,8 @@ fi INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -5878,12 +6617,60 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +# AC_PROG_MKDIR_P +# is a backport of autoconf-2.60's AC_PROG_MKDIR_P. +# Remove this macro when we can assume autoconf >= 2.60. + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + + # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_RM_PROG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else case $RM_PROG in [\\/]* | ?:[\\/]*) @@ -5898,7 +6685,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RM_PROG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5910,931 +6697,756 @@ esac fi RM_PROG=$ac_cv_path_RM_PROG if test -n "$RM_PROG"; then - { echo "$as_me:$LINENO: result: $RM_PROG" >&5 -echo "${ECHO_T}$RM_PROG" >&6; } + { $as_echo "$as_me:$LINENO: result: $RM_PROG" >&5 +$as_echo "$RM_PROG" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi +enable_win32_dll=yes - -# Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=no -fi - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then + $as_echo_n "(cached) " >&6 else - enable_fast_install=yes -fi - - -{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. else - # Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done done +done +IFS=$as_save_IFS fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:$LINENO: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -SED=$lt_cv_path_SED -{ echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6; } +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } else - with_gnu_ld=no + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } + AS="$ac_cv_prog_AS" fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 + break 2 + fi +done +done +IFS=$as_save_IFS + fi fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6; } + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else - lt_cv_ld_reload_flag='-r' + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +done +done +IFS=$as_save_IFS + fi fi -{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6; } -NM="$lt_cv_path_NM" +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 -echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all ;; +esac -beos*) - lt_cv_deplibs_check_method=pass_all - ;; +test -z "$AS" && AS=as -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump'. - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; +test -z "$DLLTOOL" && DLLTOOL=dlltool -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; -interix3*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; +test -z "$OBJDUMP" && OBJDUMP=objdump -netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=no fi -{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Allow CC to be a program name with arguments. -compiler=$CC -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 6462 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; -x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +macro_version='2.2.6' +macro_revision='1.3012' - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -int -main () -{ - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -fi -{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -*-*-cygwin* | *-*-mingw* | *-*-pw32*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_DLLTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done done IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { echo "$as_me:$LINENO: result: $DLLTOOL" >&5 -echo "${ECHO_T}$DLLTOOL" >&6; } + if test -z "$ac_cv_path_SED"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + fi else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + ac_cv_path_SED=$SED fi - fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done done IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 -echo "${ECHO_T}$ac_ct_DLLTOOL" >&6; } + if test -z "$ac_cv_path_FGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + ac_cv_path_FGREP=$FGREP fi - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else - DLLTOOL="$ac_cv_prog_DLLTOOL" + with_gnu_ld=no fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. -set dummy ${ac_tool_prefix}as; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AS+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AS="${ac_tool_prefix}as" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$AS" >&6; } + +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:$LINENO: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld -fi -if test -z "$ac_cv_prog_AS"; then - ac_ct_AS=$AS - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_AS+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AS"; then - ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AS="as" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" fi -done -done -IFS=$as_save_IFS - -fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} fi -ac_ct_AS=$ac_cv_prog_ac_ct_AS -if test -n "$ac_ct_AS"; then - { echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 -echo "${ECHO_T}$ac_ct_AS" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } fi - - if test "x$ac_ct_AS" = x; then - AS="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - AS=$ac_ct_AS - fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" else - AS="$ac_cv_prog_AS" -fi - + # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6843,8 +7455,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6853,28 +7465,32 @@ IFS=$as_save_IFS fi fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { echo "$as_me:$LINENO: result: $OBJDUMP" >&5 -echo "${ECHO_T}$OBJDUMP" >&6; } +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$DUMPBIN" && break + done fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6883,8 +7499,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6893,430 +7509,303 @@ IFS=$as_save_IFS fi fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 -echo "${ECHO_T}$ac_ct_OBJDUMP" >&6; } +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJDUMP=$ac_ct_OBJDUMP + DUMPBIN=$ac_ct_DUMPBIN fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" fi - ;; -esac + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm -need_locks="$enable_libtool_lock" -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + + +{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then + $as_echo_n "(cached) " >&6 else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:7557: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + (eval echo "\"\$as_me:7560: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:7563: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + i=0 + teststring="ABCD" - ac_header_compiler=no -fi + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; - ac_header_preproc=no -fi + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:$LINENO: result: none" >&5 +$as_echo "none" >&6; } fi +max_cmd_len=$lt_cv_sys_max_cmd_len -done -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false fi - done - ac_cv_prog_CXXCPP=$CXXCPP -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : + + + + + + +{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + $as_echo_n "(cached) " >&6 else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + lt_cv_ld_reload_flag='-r' fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -fi -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -7325,8 +7814,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7335,32 +7824,28 @@ IFS=$as_save_IFS fi fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - { echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6; } +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - test -n "$F77" && break - done fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -7369,8 +7854,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7379,596 +7864,257 @@ IFS=$as_save_IFS fi fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6; } +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - - test -n "$ac_ct_F77" && break -done - - if test "x$ac_ct_F77" = x; then - F77="" + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - F77=$ac_ct_F77 + OBJDUMP=$ac_ct_OBJDUMP fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" fi +test -z "$OBJDUMP" && OBJDUMP=objdump -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu -fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + $as_echo_n "(cached) " >&6 else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_prog_f77_g=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +beos*) + lt_cv_deplibs_check_method=pass_all + ;; -# find the maximum length of command line arguments -{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - i=0 - teststring="ABCD" +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac + ;; -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } -else - { echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6; } -fi - +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' +solaris*) + lt_cv_deplibs_check_method=pass_all ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[ABCDGIRSTW]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac ;; -esac -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; esac -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6; } -else - { echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6; } -fi - -{ echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null fi -{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - +{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -# Constants: -rm="rm -f" -# Global variables: -default_ofile=libtool -can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -7981,7 +8127,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7992,11 +8138,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6; } + { $as_echo "$as_me:$LINENO: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi @@ -8005,10 +8151,10 @@ if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. @@ -8021,7 +8167,7 @@ do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8032,11 +8178,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6; } + { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then @@ -8044,12 +8190,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -8058,16 +8200,29 @@ else AR="$ac_cv_prog_AR" fi +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -8076,8 +8231,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8086,28 +8241,28 @@ IFS=$as_save_IFS fi fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -8116,8 +8271,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8126,44 +8281,47 @@ IFS=$as_save_IFS fi fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" + if test "x$ac_ct_STRIP" = x; then + STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - RANLIB=$ac_ct_RANLIB + STRIP=$ac_ct_STRIP fi else - RANLIB="$ac_cv_prog_RANLIB" + STRIP="$ac_cv_prog_STRIP" fi +test -z "$STRIP" && STRIP=: + + + + + + if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -8172,8 +8330,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8182,28 +8340,28 @@ IFS=$as_save_IFS fi fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -8212,8 +8370,8 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8222,58 +8380,39 @@ IFS=$as_save_IFS fi fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_STRIP" = x; then - STRIP=":" + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - STRIP=$ac_ct_STRIP + RANLIB=$ac_ct_RANLIB fi else - STRIP="$ac_cv_prog_STRIP" + RANLIB="$ac_cv_prog_RANLIB" fi +test -z "$RANLIB" && RANLIB=: + + + -old_CC="$CC" -old_CFLAGS="$CFLAGS" -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= @@ -8289,194 +8428,37 @@ if test -n "$RANLIB"; then old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - else - MAGIC_CMD=: - fi -fi - fi - ;; -esac -enable_dlopen=no -enable_win32_dll=yes -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi -test -z "$pic_mode" && pic_mode=default -# Use C for the default configuration in the libtool script -tagname= -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -# Source file extension for C test sources. -ac_ext=c -# Object file extension for compiled C test sources. -objext=o -objext=$objext -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}\n' + + + + + + + + # If no C compiler was specified, use CC. @@ -8489,871 +8471,1005 @@ LTCFLAGS=${LTCFLAGS-"$CFLAGS"} compiler=$CC -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + $as_echo_n "(cached) " >&6 +else +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] -lt_prog_compiler_no_builtin_flag= +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8531: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:8535: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:$LINENO: result: failed" >&5 +$as_echo "failed" >&6; } else - : + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } fi -fi -lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic='-qnocommon' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - esac - ;; - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 8754 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; - *) - lt_prog_compiler_can_build_shared=no - ;; +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; esac fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then +int +main () +{ -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_cc_needs_belf=yes else - lt_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8799: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:8803: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works=yes - fi - fi - $rm conftest* + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + lt_cv_cc_needs_belf=no fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } -if test x"$lt_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works=yes - fi - else - lt_prog_compiler_static_works=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" +{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } +need_locks="$enable_libtool_lock" -if test x"$lt_prog_compiler_static_works" = xyes; then - : + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 else - lt_prog_compiler_static= + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 else - lt_cv_prog_compiler_c_o=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8903: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:8907: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - need_locks=no + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi - runpath_var= - allow_undefined_flag= - enable_shared_with_static_runtimes=no - archive_cmds= - archive_expsym_cmds= - old_archive_From_new_cmds= - old_archive_from_expsyms_cmds= - export_dynamic_flag_spec= - whole_archive_flag_spec= - thread_safe_flag_spec= - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - link_all_deplibs=unknown - hardcode_automatic=no - module_cmds= - module_expsym_cmds= - always_export_symbols=no - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +IFS=$as_save_IFS - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <&2 +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi -EOF - fi - ;; + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs=no - ;; - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi - interix3*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - if test $supports_anon_versioning = yes; then - archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - link_all_deplibs=no - else - ld_shlibs=no - fi - ;; - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds='' - hardcode_direct=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi + cat conftest.err >&5 fi + rm -rf libconftest.dylib* + rm -f conftest.* fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -9374,2989 +9490,2294 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_ld_exported_symbols_list=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + lt_cv_ld_exported_symbols_list=no fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + LDFLAGS="$save_LDFLAGS" - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + + +for ac_header in dlfcn.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +$ac_includes_default -int -main () -{ - - ; - return 0; -} +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + eval "$as_ac_Header=no" fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; +fi - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; +done - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:$LINENO: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; + test -n "$ac_ct_CXX" && break +done - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: +int +main () +{ +#ifndef __GNUC__ + choke me +#endif - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; + ac_compiler_gnu=no +fi - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld='-rpath $libdir' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - ;; +int +main () +{ - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; + CXXFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' +int +main () +{ - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - solaris*) - no_undefined_flag=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs=yes - ;; + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; +int +main () +{ - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cxx_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; +fi - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; +depcc="$CXX" am_compiler_list= - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub - *) - ld_shlibs=no - ;; - esac + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf -{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue else - cat conftest.err 1>&5 + break fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6; } ;; + none) break ;; esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; + done -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; + # Broken: fails on valid input. +continue +fi -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; +rm -f conftest.err conftest.$ac_ext -freebsd1*) - dynamic_linker=no - ;; + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; + # Passes both tests. +ac_preproc_ok=: +break +fi -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; +rm -f conftest.err conftest.$ac_ext -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; + done + ac_cv_prog_CXXCPP=$CXXCPP -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:$LINENO: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; + # Broken: fails on valid input. +continue +fi -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes +rm -f conftest.err conftest.$ac_ext - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; + # Passes both tests. +ac_preproc_ok=: +break +fi -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; +rm -f conftest.err conftest.$ac_ext -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +else + _lt_caught_CXX_error=yes +fi -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; +# Set options -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; + enable_dlopen=no -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported + pic_mode=default fi -{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6; } -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -striplib= -old_striplib= -{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - ;; - *) - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - ;; - esac + enable_fast_install=yes fi -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - darwin*) - # if libdl is installed we need to link against it - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes -fi - ;; +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" - *) - { echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif -#undef shl_load -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_shl_load || defined __stub___shl_load -choke me -#endif -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - { echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif -#undef dlopen -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_dlopen || defined __stub___dlopen -choke me -#endif -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" + +{ $as_echo "$as_me:$LINENO: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then + $as_echo_n "(cached) " >&6 else - { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_dld_link=yes + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_dld_link=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +rmdir .libs 2>/dev/null fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir -fi -fi +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF -fi -fi -fi - ;; - esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif -#include -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif -#ifdef __cplusplus -extern "C" void exit (int); -#endif -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif +# Global variables: +ofile=libtool +can_build_shared=yes -#include +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif +with_gnu_ld="$lt_cv_prog_gnu_ld" -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif +old_CC="$CC" +old_CFLAGS="$CFLAGS" -#ifdef __cplusplus -extern "C" void exit (int); -#endif +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } +_LT_EOF + fi ;; + esac + fi + break fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# Report which library types will actually be built -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler \ - CC \ - LD \ - lt_prog_compiler_wl \ - lt_prog_compiler_pic \ - lt_prog_compiler_static \ - lt_prog_compiler_no_builtin_flag \ - export_dynamic_flag_spec \ - thread_safe_flag_spec \ - whole_archive_flag_spec \ - enable_shared_with_static_runtimes \ - old_archive_cmds \ - old_archive_from_new_cmds \ - predep_objects \ - postdep_objects \ - predeps \ - postdeps \ - compiler_lib_search_path \ - archive_cmds \ - archive_expsym_cmds \ - postinstall_cmds \ - postuninstall_cmds \ - old_archive_from_expsyms_cmds \ - allow_undefined_flag \ - no_undefined_flag \ - export_symbols_cmds \ - hardcode_libdir_flag_spec \ - hardcode_libdir_flag_spec_ld \ - hardcode_libdir_separator \ - hardcode_automatic \ - module_cmds \ - module_expsym_cmds \ - lt_cv_prog_compiler_c_o \ - exclude_expsyms \ - include_expsyms; do - - case $var in - old_archive_cmds | \ - old_archive_from_new_cmds | \ - archive_cmds | \ - archive_expsym_cmds | \ - module_cmds | \ - module_expsym_cmds | \ - old_archive_from_expsyms_cmds | \ - export_symbols_cmds | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} +fi - cat <<__EOF__ >> "$cfgfile" -#! $SHELL +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# 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 of the License, 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 program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. -# A sed program that does not truncate output. -SED=$lt_SED -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# The names of the tagged configurations supported by this script. -available_tags= +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:$LINENO: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 -# ### BEGIN LIBTOOL CONFIG +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared -# Whether or not to build static libraries. -build_old_libs=$enable_static + else + MAGIC_CMD=: + fi +fi -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc + fi + ;; +esac -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes +# Use C for the default configuration in the libtool script -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os +# Source file extension for C test sources. +ac_ext=c -# An echo program that does not interpret backslashes. -echo=$lt_echo +# Object file extension for compiled C test sources. +objext=o +objext=$objext -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" -# A C compiler. -LTCC=$lt_LTCC +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS -# A language-specific compiler. -CC=$lt_compiler -# Is the compiler the GNU C compiler? -with_gcc=$GCC -# An ERE matcher. -EGREP=$lt_EGREP -# The linker used to build libraries. -LD=$lt_LD -# Whether we need hard or soft links. -LN_S=$lt_LN_S -# A BSD-compatible nm program. -NM=$lt_NM +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} -# A symbol stripping program -STRIP=$lt_STRIP +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD +# Allow CC to be a program name with arguments. +compiler=$CC -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* -# Used on cygwin: assembler. -AS="$AS" +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* -# The name of the directory that contains temporary libtool files. -objdir=$objdir -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl +lt_prog_compiler_no_builtin_flag= -# Object file suffix (normally "o"). -objext="$ac_objext" +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' -# Old archive suffix (normally "a"). -libext="$libext" + { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10779: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:10783: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } -# Executable file suffix (normally ""). -exeext="$exeext" +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic -pic_mode=$pic_mode +fi -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o -# Must we lock files when doing compilation? -need_locks=$lt_need_locks -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix -# Do we need a version for libraries? -need_version=$need_version -# Whether dlopen is supported. -dlopen_support=$enable_dlopen + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self +{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; -# Library versioning type. -version_type=$version_type + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; -# Format of library name prefix. -libname_spec=$lt_libname_spec + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps + rdos*) + lt_prog_compiler_static='-non_shared' + ;; -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi -# This is the shared library runtime path variable. -runpath_var=$runpath_var +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } -# This is the shared library path variable. -shlibpath_var=$shlibpath_var -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11118: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:11122: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L +fi -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path" +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms -# ### END LIBTOOL CONFIG -__EOF__ + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11223: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11227: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES fi -EOF - ;; - esac +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -CC="$lt_save_CC" + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11278: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11282: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* -# Check whether --with-tags was given. -if test "${with_tags+set}" = set; then - withval=$with_tags; tagnames="$withval" fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} - else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in - "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } - fi - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac -# Source file extension for C++ test sources. -ac_ext=cpp + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. -# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_EOF + fi + ;; -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; -# Allow CC to be a program name with arguments. -compiler=$CC + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 -if test "$GXX" = yes; then - # Set up default GNU C++ configuration +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi ;; esac - fi - done - IFS="$lt_save_ifs" -else - lt_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= fi else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; -else - GXX=no - with_gnu_ld=no - wlarc= -fi + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no -# PORTME: fill in a description of your system's C++ link characteristics -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break - ;; - esac - done - ;; - esac + fi + done + ;; + esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then # We have reworked collect2 - hardcode_direct_CXX=yes - else + : + else # We have old collect2 - hardcode_direct_CXX=unsupported + hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + shared_flag='-G' else - shared_flag='${wl}-bM:SRE' + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi fi fi - fi - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -12377,46 +11798,57 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || + test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext @@ -12437,3477 +11869,17815 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || + test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; + ;; - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes ;; + esac + ;; - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_CXX='+b $libdir' - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi ;; - esac - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - interix3*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' +fi - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' + else + ld_shlibs=no + fi + ;; - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" + esac + link_all_deplibs=yes + ;; + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' - for p in `eval $output_verbose_link_cmd`; do - case $p in + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; + *) + ld_shlibs=no + ;; + esac - *) ;; # Ignore the rest. + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi - esac - done +{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi +with_gnu_ld=$with_gnu_ld -$rm -f confest.$objext -# PORTME: override above test on systems where it is broken -case $host_os in -interix3*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; -solaris*) - case $cc_basename in - CC*) - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - postdeps_CXX='-lCstd -lCrun' - ;; - esac - ;; -esac -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' + $RM conftest* + { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } ;; esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd* | netbsdelf*-gnu) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + shlibpath_overrides_runpath=yes +fi + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 +$as_echo_n "checking for shl_load... " >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +$as_echo "$ac_cv_func_shl_load" >&6; } +if test "x$ac_cv_func_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 +$as_echo_n "checking for dlopen... " >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +$as_echo "$ac_cv_func_dlopen" >&6; } +if test "x$ac_cv_func_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_svld_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_dld_link=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 14091 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 14187 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16207: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16211: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16306: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:16310: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:16358: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:16362: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + shlibpath_overrides_runpath=yes +fi + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { $as_echo "$as_me:$LINENO: result: $F77" >&5 +$as_echo "$F77" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +$as_echo "$ac_ct_F77" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +$as_echo "$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ $as_echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +$as_echo_n "checking whether $F77 accepts -g... " >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +$as_echo "$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + G77=yes +else + G77= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + + + + + # Check whether --enable-fortran was given. +if test "${enable_fortran+set}" = set; then + enableval=$enable_fortran; +else + enable_fortran=no +fi + + if test "x$enable_fortran" = xyes; then + ENABLE_FORTRAN_TRUE= + ENABLE_FORTRAN_FALSE='#' +else + ENABLE_FORTRAN_TRUE='#' + ENABLE_FORTRAN_FALSE= +fi + + + if test "x$enable_fortran" = xyes + then + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { $as_echo "$as_me:$LINENO: result: $F77" >&5 +$as_echo "$F77" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +$as_echo "$ac_ct_F77" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +$as_echo "$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ $as_echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +$as_echo_n "checking whether $F77 accepts -g... " >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_prog_f77_g=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +$as_echo "$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + G77=yes +else + G77= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_direct_absolute_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +inherit_rpath_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + compiler_F77=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + GCC=$G77 + if test -n "$compiler"; then + { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + GCC_F77="$G77" + LD_F77="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_F77='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_F77='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fPIC' + lt_prog_compiler_static_F77='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='--shared' + lt_prog_compiler_static_F77='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fpic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-qpic' + lt_prog_compiler_static_F77='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + lt_prog_compiler_wl_F77='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + lt_prog_compiler_wl_F77='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_F77='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static_F77='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_F77='-Qoption ld ';; + *) + lt_prog_compiler_wl_F77='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_can_build_shared_F77=no + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +$as_echo "$lt_prog_compiler_pic_F77" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:18361: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:18365: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_F77=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_F77" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" +{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_F77=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_F77=yes + fi + else + lt_cv_prog_compiler_static_works_F77=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_F77" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then + : +else + lt_prog_compiler_static_F77= +fi + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:18460: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:18464: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:18512: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:18516: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag_F77= + always_export_symbols_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + compiler_needs_object_F77=no + enable_shared_with_static_runtimes_F77=no + export_dynamic_flag_spec_F77= + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic_F77=no + hardcode_direct_F77=no + hardcode_direct_absolute_F77=no + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + inherit_rpath_F77=no + link_all_deplibs_F77=unknown + module_cmds_F77= + module_expsym_cmds_F77= + old_archive_from_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + thread_safe_flag_spec_F77= + whole_archive_flag_spec_F77= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='' + ;; + m68k) + archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_F77=no + fi + ;; + + interix[3-9]*) + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec_F77= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_F77=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + archive_cmds_F77='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs_F77=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_F77=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = no; then + runpath_var= + hardcode_libdir_flag_spec_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_direct_absolute_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + file_list_spec_F77='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs_F77=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_F77='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77='$convenience' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='' + ;; + m68k) + archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_F77='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc_F77=no + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='' + link_all_deplibs_F77=yes + allow_undefined_flag_F77="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs_F77=no + fi + + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + hardcode_direct_absolute_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + *) + hardcode_direct_F77=yes + hardcode_direct_absolute_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc_F77='no' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + inherit_rpath_F77=yes + link_all_deplibs_F77=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + hardcode_direct_absolute_F77=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs_F77=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc_F77='no' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + archive_cmds_need_lc_F77='no' + hardcode_libdir_separator_F77=: + ;; + + solaris*) + no_undefined_flag_F77=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_F77='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds_F77='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_F77='${wl}-z,text' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_F77='${wl}-z,text' + allow_undefined_flag_F77='${wl}-z,nodefs' + archive_cmds_need_lc_F77=no + hardcode_shlibpath_var_F77=no + hardcode_libdir_flag_spec_F77='${wl}-R,$libdir' + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec_F77='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +$as_echo "$ld_shlibs_F77" >&6; } +test "$ld_shlibs_F77" = no && can_build_shared=no + +with_gnu_ld_F77=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + pic_flag=$lt_prog_compiler_pic_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +$as_echo "$archive_cmds_need_lc_F77" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\"" + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + shlibpath_overrides_runpath=yes +fi + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || + test -n "$runpath_var_F77" || + test "X$hardcode_automatic_F77" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +{ $as_echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +$as_echo "$hardcode_action_F77" >&6; } + +if test "$hardcode_action_F77" = relink || + test "$inherit_rpath_F77" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to get verbose linking output from $F77" >&5 +$as_echo_n "checking how to get verbose linking output from $F77... " >&6; } +if test "${ac_cv_prog_f77_v+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_f77_v= +# Try some options frequently used verbose output +for ac_verb in -v -verbose --verbose -V -\#\#\#; do + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FFLAGS=$FFLAGS +FFLAGS="$FFLAGS $ac_verb" +eval "set x $ac_link" +shift +$as_echo "$as_me:$LINENO: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | + grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="` +$as_echo "$ac_f77_v_output" >&5 +FFLAGS=$ac_save_FFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_f77_v_output="`echo $ac_f77_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_f77_v_output in + # If we are using xlf then replace all the commas with spaces. + *xlfentry*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_f77_v_output=`echo $ac_f77_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; +esac + + + # look for -l* and *.a constructs in the output + for ac_arg in $ac_f77_v_output; do + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) + ac_cv_prog_f77_v=$ac_verb + break 2 ;; + esac + done +done +if test -z "$ac_cv_prog_f77_v"; then + { $as_echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $F77" >&5 +$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: WARNING: compilation failed" >&5 +$as_echo "$as_me: WARNING: compilation failed" >&2;} +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_f77_v" >&5 +$as_echo "$ac_cv_prog_f77_v" >&6; } +{ $as_echo "$as_me:$LINENO: checking for Fortran 77 libraries of $F77" >&5 +$as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } +if test "${ac_cv_f77_libs+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$FLIBS" != "x"; then + ac_cv_f77_libs="$FLIBS" # Let the user override the test. +else + +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FFLAGS=$FFLAGS +FFLAGS="$FFLAGS $ac_cv_prog_f77_v" +eval "set x $ac_link" +shift +$as_echo "$as_me:$LINENO: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | + grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="` +$as_echo "$ac_f77_v_output" >&5 +FFLAGS=$ac_save_FFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_f77_v_output="`echo $ac_f77_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_f77_v_output in + # If we are using xlf then replace all the commas with spaces. + *xlfentry*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_f77_v_output=`echo $ac_f77_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; +esac + + + +ac_cv_f77_libs= + +# Save positional arguments (if any) +ac_save_positional="$@" + +set X $ac_f77_v_output +while test $# != 1; do + shift + ac_arg=$1 + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then + : +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + + ;; + -bI:*) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then + : +else + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_arg; do + ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + done +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi +fi + + ;; + # Ignore these flags. + -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -LANG:=* | -LIST:* | -LNO:*) + ;; + -lkernel32) + test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + ;; + -[LRuYz]) + # These flags, when seen by themselves, take an argument. + # We remove the space between option and argument and re-iterate + # unless we find an empty arg or a new option (starting with -) + case $2 in + "" | -*);; + *) + ac_arg="$ac_arg$2" + shift; shift + set X $ac_arg "$@" + ;; + esac + ;; + -YP,*) + for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_j" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then + : +else + ac_arg="$ac_arg $ac_j" + ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" +fi + + done + ;; + -[lLR]*) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then + : +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + + ;; + -zallextract*| -zdefaultextract) + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + ;; + # Ignore everything else. + esac +done +# restore positional arguments +set X $ac_save_positional; shift + +# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, +# then we insist that the "run path" must be an absolute path (i.e. it +# must begin with a "/"). +case `(uname -sr) 2>/dev/null` in + "SunOS 5"*) + ac_ld_run_path=`$as_echo "$ac_f77_v_output" | + sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` + test "x$ac_ld_run_path" != x && + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_ld_run_path; do + ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + done +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" +fi + ;; +esac +fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_f77_libs" >&5 +$as_echo "$ac_cv_f77_libs" >&6; } +FLIBS="$ac_cv_f77_libs" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi + + + + + no_undefined="" + case "${host_os}" in + *mingw* | *cygwin*) + + # on MinGW/Cygwin extra LDFLAGS are required + no_undefined="-no-undefined" + ;; + esac + NO_UNDEFINED=$no_undefined + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:$LINENO: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + { { $as_echo "$as_me:$LINENO: error: no suitable Python interpreter found" >&5 +$as_echo "$as_me: error: no suitable Python interpreter found" >&2;} + { (exit 1); exit 1; }; } + else + + + { $as_echo "$as_me:$LINENO: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"` +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:$LINENO: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"` +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:$LINENO: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + py_prefix_arg= + else + py_prefix_arg=",prefix='$prefix'" + fi + am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0$py_prefix_arg)" -n -q install $py_prefix_arg 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:$LINENO: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + py_exec_prefix_arg=$py_prefix_arg + else + py_exec_prefix_arg=",prefix='$exec_prefix'" + fi + am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0$py_exec_prefix_arg)" -n -q install $py_exec_prefix_arg 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + + + + +# Check whether --with-pythondir was given. +if test "${with_pythondir+set}" = set; then + withval=$with_pythondir; with_pythondir=${withval} +else + with_pythondir=${prefix}/lib/python2.5/site-packages +fi + + + # if we're cross-compiling, asking the host python about any of + # this is completely useless... + + if test x$cross_compiling != xno + then + pythondir=$with_pythondir + pyexecdir=$with_pythondir + + + else + + # For Fedora Core 5 and 6, see ticket:39 in Trac + if test -f '/etc/redhat-release'; then + if (echo $pyexecdir | grep -q lib64); then + pythondir="$pyexecdir" + fi + fi + + # Check for Python include path + { $as_echo "$as_me:$LINENO: checking for Python include path" >&5 +$as_echo_n "checking for Python include path... " >&6; } + if test -z "$PYTHON" ; then + { { $as_echo "$as_me:$LINENO: error: cannot find Python path" >&5 +$as_echo "$as_me: error: cannot find Python path" >&2;} + { (exit 1); exit 1; }; } + fi + + # ask distutils which include path we should use + python_cmd=' +import distutils.sysconfig +import os +path = distutils.sysconfig.get_python_inc(plat_specific=False) +if os.sep == "\\": + path = path.replace("\\", "/") +print path +' + python_path=`$PYTHON -c "$python_cmd"` + { $as_echo "$as_me:$LINENO: result: $python_path" >&5 +$as_echo "$python_path" >&6; } + if test -z "$python_path" ; then + { { $as_echo "$as_me:$LINENO: error: cannot find Python include path" >&5 +$as_echo "$as_me: error: cannot find Python include path" >&2;} + { (exit 1); exit 1; }; } + fi + + PYTHON_CPPFLAGS=-I$python_path + + + # Check for Python headers usability + python_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" + +for ac_header in Python.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + { { $as_echo "$as_me:$LINENO: error: cannot find usable Python headers" >&5 +$as_echo "$as_me: error: cannot find usable Python headers" >&2;} + { (exit 1); exit 1; }; } +fi + +done + + CPPFLAGS="$python_save_CPPFLAGS" + + # Only set this on mingw and cygwin hosts, (only implemented + # for mingw host, for crosscompiling you need to trick this) + + PYTHON_LDFLAGS="" + case $host_os in + *mingw* | *cygwin* ) + { $as_echo "$as_me:$LINENO: checking for Python LDFLAGS" >&5 +$as_echo_n "checking for Python LDFLAGS... " >&6; } + + python_cmd=' +import distutils.sysconfig +import os +path = distutils.sysconfig.get_config_var("LIBPL") +if path == None: + path = distutils.sysconfig.PREFIX + "/libs" +if os.sep == "\\": + path = path.replace("\\", "/") +print path +' + python_stdlib_path=`$PYTHON -c "$python_cmd"` + + python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"` + libpython_name="python$PYTHON_VERSION" + + # Standard install of python for win32 has libpython24.a + # instead of libpython2.4.a so we check for the library + # without the dot in the version number. + + python_stdlib_filename=`find $python_stdlib_path -type f -name libpython$python_version_nodot.* -print | sed "1q"` + if test -n "$python_stdlib_filename" ; then + libpython_name="python$python_version_nodot" + fi + + PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name" + { $as_echo "$as_me:$LINENO: result: $PYTHON_LDFLAGS" >&5 +$as_echo "$PYTHON_LDFLAGS" >&6; } + # Replace all backslashes in PYTHON Paths with forward slashes + pythondir=`echo $pythondir |sed 's,\\\\,/,g'` + pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'` + pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'` + pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'` + ;; + esac + + + fi + + + + + + + + + # Extract the first word of "swig", so it can be a program name with args. +set dummy swig; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_SWIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$SWIG"; then + ac_cv_prog_SWIG="$SWIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_SWIG="`which swig`" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +SWIG=$ac_cv_prog_SWIG +if test -n "$SWIG"; then + { $as_echo "$as_me:$LINENO: result: $SWIG" >&5 +$as_echo "$SWIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test -z "$SWIG" ; then + { { $as_echo "$as_me:$LINENO: error: Cannot find 'swig' program. SWIG version >= 1.3.31 required" >&5 +$as_echo "$as_me: error: Cannot find 'swig' program. SWIG version >= 1.3.31 required" >&2;} + { (exit 1); exit 1; }; } + SWIG=false + elif test -n "1.3.31" ; then + { $as_echo "$as_me:$LINENO: checking for SWIG version" >&5 +$as_echo_n "checking for SWIG version... " >&6; } + swig_version=`$SWIG -version 2>&1 | \ + awk '/^SWIG Version [0-9]+\.[0-9]+\.[0-9]+.*$/ { split($3,a,"[^.0-9]"); print a[1] }'` + { $as_echo "$as_me:$LINENO: result: $swig_version" >&5 +$as_echo "$swig_version" >&6; } + if test -n "$swig_version" ; then + swig_version=`echo $swig_version | \ + awk '{ split($1,a,"\."); print a[1]*1000000+a[2]*1000+a[3] }' 2>/dev/null` + swig_required_version=`echo 1.3.31 | \ + awk '{ split($1,a,"\."); print a[1]*1000000+a[2]*1000+a[3] }' 2>/dev/null` + if test $swig_required_version -gt $swig_version ; then + { { $as_echo "$as_me:$LINENO: error: SWIG version >= 1.3.31 required" >&5 +$as_echo "$as_me: error: SWIG version >= 1.3.31 required" >&2;} + { (exit 1); exit 1; }; } + fi + else + { { $as_echo "$as_me:$LINENO: error: cannot determine SWIG version" >&5 +$as_echo "$as_me: error: cannot determine SWIG version" >&2;} + { (exit 1); exit 1; }; } + fi + fi + + + + + if test "$SWIG" != "false" ; then + SWIG="$SWIG -c++" + fi + + + + + if test "$SWIG" != "false" ; then + SWIG_PYTHON_LIB=-lswigpy + + SWIG_PYTHON_OPT=-python + + fi + SWIG_PYTHON_CPPFLAGS=$PYTHON_CPPFLAGS + + + + +# Extract the first word of "xmlto", so it can be a program name with args. +set dummy xmlto; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_XMLTO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$XMLTO"; then + ac_cv_prog_XMLTO="$XMLTO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_XMLTO="yes" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +XMLTO=$ac_cv_prog_XMLTO +if test -n "$XMLTO"; then + { $as_echo "$as_me:$LINENO: result: $XMLTO" >&5 +$as_echo "$XMLTO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x$XMLTO = xyes; then + HAS_XMLTO_TRUE= + HAS_XMLTO_FALSE='#' +else + HAS_XMLTO_TRUE='#' + HAS_XMLTO_FALSE= +fi + + + +{ $as_echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 +$as_echo_n "checking for socket in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_socket+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char socket (); +int +main () +{ +return socket (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_socket_socket=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_socket_socket=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 +$as_echo "$ac_cv_lib_socket_socket" >&6; } +if test "x$ac_cv_lib_socket_socket" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSOCKET 1 +_ACEOF + + LIBS="-lsocket $LIBS" + +fi + + + + # Check first for POSIX + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +acx_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + { $as_echo "$as_me:$LINENO: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 +$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_join (); +int +main () +{ +return pthread_join (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + acx_pthread_ok=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test x"$acx_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case "${host_cpu}-${host_os}" in + *solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" + ;; +esac + +if test x"$acx_pthread_ok" = xno; then +for flag in $acx_pthread_flags; do + + case $flag in + none) + { $as_echo "$as_me:$LINENO: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } + ;; + + -*) + { $as_echo "$as_me:$LINENO: checking whether pthreads work with $flag" >&5 +$as_echo_n "checking whether pthreads work with $flag... " >&6; } + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + # Extract the first word of "pthread-config", so it can be a program name with args. +set dummy pthread-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_acx_pthread_config+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$acx_pthread_config"; then + ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_acx_pthread_config="yes" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" +fi +fi +acx_pthread_config=$ac_cv_prog_acx_pthread_config +if test -n "$acx_pthread_config"; then + { $as_echo "$as_me:$LINENO: result: $acx_pthread_config" >&5 +$as_echo "$acx_pthread_config" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x"$acx_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + { $as_echo "$as_me:$LINENO: checking for the pthreads library -l$flag" >&5 +$as_echo_n "checking for the pthreads library -l$flag... " >&6; } + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +pthread_t th; pthread_join(th, 0); + pthread_attr_init(0); pthread_cleanup_push(0, 0); + pthread_create(0,0,0,0); pthread_cleanup_pop(0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + acx_pthread_ok=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + { $as_echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5 +$as_echo "$acx_pthread_ok" >&6; } + if test "x$acx_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$acx_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + { $as_echo "$as_me:$LINENO: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +int attr=$attr; return attr; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + attr_name=$attr; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + done + { $as_echo "$as_me:$LINENO: result: $attr_name" >&5 +$as_echo "$attr_name" >&6; } + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $attr_name +_ACEOF + + fi + + { $as_echo "$as_me:$LINENO: checking if more special flags are required for pthreads" >&5 +$as_echo_n "checking if more special flags are required for pthreads... " >&6; } + flag=no + case "${host_cpu}-${host_os}" in + *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; + *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; + esac + { $as_echo "$as_me:$LINENO: result: ${flag}" >&5 +$as_echo "${flag}" >&6; } + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: must compile with xlc_r or cc_r + if test x"$GCC" != xyes; then + for ac_prog in xlc_r cc_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$PTHREAD_CC"; then + ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PTHREAD_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CC=$ac_cv_prog_PTHREAD_CC +if test -n "$PTHREAD_CC"; then + { $as_echo "$as_me:$LINENO: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PTHREAD_CC" && break +done +test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" + + else + PTHREAD_CC=$CC + fi +else + PTHREAD_CC="$CC" +fi + + + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_pthread_ok" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_PTHREAD 1 +_ACEOF + + ot_posix="yes" + DEFINES="$DEFINES -DOMNITHREAD_POSIX=1" + + : +else + acx_pthread_ok=no + + # If no POSIX support found, then check for NT threads + { $as_echo "$as_me:$LINENO: checking for NT threads" >&5 +$as_echo_n "checking for NT threads... " >&6; } + + cat >conftest.$ac_ext <<_ACEOF + + #include + #include + int main() { InitializeCriticalSection(NULL); return 0; } + +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + + ot_nt="yes" + DEFINES="$DEFINES -DOMNITHREAD_NT=1" + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: GNU Radio requires POSIX threads. pthreads not found. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: GNU Radio requires POSIX threads. pthreads not found. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test "x$ot_posix" = xyes; then + OMNITHREAD_POSIX_TRUE= + OMNITHREAD_POSIX_FALSE='#' +else + OMNITHREAD_POSIX_TRUE='#' + OMNITHREAD_POSIX_FALSE= +fi + + if test "x$ot_nt" = xyes; then + OMNITHREAD_NT_TRUE= + OMNITHREAD_NT_FALSE='#' +else + OMNITHREAD_NT_TRUE='#' + OMNITHREAD_NT_FALSE= +fi + + + save_LIBS="$LIBS" + { $as_echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5 +$as_echo_n "checking for library containing clock_gettime... " >&6; } +if test "${ac_cv_search_clock_gettime+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_clock_gettime=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_clock_gettime+set}" = set; then + break +fi +done +if test "${ac_cv_search_clock_gettime+set}" = set; then + : +else + ac_cv_search_clock_gettime=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5 +$as_echo "$ac_cv_search_clock_gettime" >&6; } +ac_res=$ac_cv_search_clock_gettime +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + PTHREAD_LIBS="$PTHREAD_LIBS $LIBS" +fi + + + + +for ac_func in clock_gettime gettimeofday nanosleep +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS="$save_LIBS" + + +if test x$CXX_FOR_BUILD = x +then + if test x$cross_compiling = xno; then + CXX_FOR_BUILD=${CXX} + else + CXX_FOR_BUILD=g++ + fi +fi + + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +for ac_header in sys/ipc.h sys/shm.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + save_LIBS="$LIBS" + { $as_echo "$as_me:$LINENO: checking for library containing shmat" >&5 +$as_echo_n "checking for library containing shmat... " >&6; } +if test "${ac_cv_search_shmat+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +for ac_lib in '' cygipc ipc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_shmat=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_shmat+set}" = set; then + break +fi +done +if test "${ac_cv_search_shmat+set}" = set; then + : +else + ac_cv_search_shmat=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_shmat" >&5 +$as_echo "$ac_cv_search_shmat" >&6; } +ac_res=$ac_cv_search_shmat +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + IPC_LIBS="$LIBS" +else + { $as_echo "$as_me:$LINENO: WARNING: SystemV IPC support not found. " >&5 +$as_echo "$as_me: WARNING: SystemV IPC support not found. " >&2;} + +fi + + LIBS="$save_LIBS" + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if test "${ac_cv_header_sys_wait_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_sys_wait_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_sys_wait_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SYS_WAIT_H 1 +_ACEOF + +fi + + + + + + + + +for ac_header in fcntl.h limits.h strings.h time.h sys/ioctl.h sys/time.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + +for ac_header in linux/ppdev.h dev/ppbus/ppi.h sys/mman.h sys/select.h sys/types.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + +for ac_header in sys/resource.h stdint.h sched.h signal.h sys/syscall.h malloc.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in netinet/in.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in windows.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in vec_types.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if test "${ac_cv_c_const+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const /**/ +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_inline=$ac_kw +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +{ $as_echo "$as_me:$LINENO: checking for size_t" >&5 +$as_echo_n "checking for size_t... " >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_size_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((size_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +$as_echo "$ac_cv_type_size_t" >&6; } +if test "x$ac_cv_type_size_t" = x""yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if test "${ac_cv_header_time+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_time=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_time=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\_ACEOF +#define TIME_WITH_SYS_TIME 1 +_ACEOF + +fi + + + { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + # Check for potential -arch flags. It is not universal unless + # there are some -arch flags. Note that *ppc* also matches + # ppc64. This check is also rather less than ideal. + case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( + *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; + esac +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + GR_ARCH_BIGENDIAN=1;; #( + no) + GR_ARCH_BIGENDIAN=0 ;; #( + universal) + +cat >>confdefs.h <<\_ACEOF +#define AC_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + ;; #( + *) + { { $as_echo "$as_me:$LINENO: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +$as_echo "$as_me: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; + esac + + +{ $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test "${ac_cv_struct_tm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_struct_tm=time.h +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_struct_tm=sys/time.h +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +#define TM_IN_SYS_TIME 1 +_ACEOF + +fi + + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:$LINENO: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_working_alloca_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_working_alloca_h=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA_H 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_alloca_works=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_alloca_works=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA 1 +_ACEOF + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +cat >>confdefs.h <<\_ACEOF +#define C_ALLOCA 1 +_ACEOF + + +{ $as_echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + return find_stack_direction () < 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_stack_direction=1 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_stack_direction=-1 +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } + +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + + + # Check for allocing memory alignment functions + # If 'posix_memalign' is available, use it solely. + +for ac_func in posix_memalign +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + + # Otherwise, check for valloc and the + # (a-priori known) alignment of 'malloc' + +for ac_func in valloc +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + aligned_malloc=0 + # 'malloc' is 16-byte aligned on (at least) Darwin 8 and 9 + case "$host_os" in + darwin8*) aligned_malloc=16 ;; + darwin9*) aligned_malloc=16 ;; + *) ;; + esac + if test $aligned_malloc = 0; then + { $as_echo "$as_me:$LINENO: result: malloc has unknown alignment." >&5 +$as_echo "malloc has unknown alignment." >&6; } + else + { $as_echo "$as_me:$LINENO: result: malloc is $aligned_malloc-byte aligned." >&5 +$as_echo "malloc is $aligned_malloc-byte aligned." >&6; } + fi + +cat >>confdefs.h <<_ACEOF +#define ALIGNED_MALLOC $aligned_malloc +_ACEOF + + +fi +done + + +if test "${ac_cv_func_setvbuf_reversed+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_func_setvbuf_reversed=no +fi + + + +for ac_func in vprintf +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +{ $as_echo "$as_me:$LINENO: checking for _doprnt" >&5 +$as_echo_n "checking for _doprnt... " >&6; } +if test "${ac_cv_func__doprnt+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _doprnt to an innocuous variant, in case declares _doprnt. + For example, HP-UX 11i declares gettimeofday. */ +#define _doprnt innocuous__doprnt + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef _doprnt + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _doprnt (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub__doprnt || defined __stub____doprnt +choke me +#endif + +int +main () +{ +return _doprnt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func__doprnt=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func__doprnt=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 +$as_echo "$ac_cv_func__doprnt" >&6; } +if test "x$ac_cv_func__doprnt" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DOPRNT 1 +_ACEOF + +fi + +fi +done + + + + + + + + + + +for ac_func in mmap select socket strcspn strerror strspn getpagesize sysconf +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + +for ac_func in snprintf gettimeofday nanosleep sched_setscheduler +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + +for ac_func in modf sqrt sigaction sigprocmask pthread_sigmask +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +for ac_func in sched_setaffinity +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +{ $as_echo "$as_me:$LINENO: checking for sincos in -lm" >&5 +$as_echo_n "checking for sincos in -lm... " >&6; } +if test "${ac_cv_lib_m_sincos+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sincos (); +int +main () +{ +return sincos (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_sincos=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_sincos=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_sincos" >&5 +$as_echo "$ac_cv_lib_m_sincos" >&6; } +if test "x$ac_cv_lib_m_sincos" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINCOS 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for sincosf in -lm" >&5 +$as_echo_n "checking for sincosf in -lm... " >&6; } +if test "${ac_cv_lib_m_sincosf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sincosf (); +int +main () +{ +return sincosf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_sincosf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_sincosf=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_sincosf" >&5 +$as_echo "$ac_cv_lib_m_sincosf" >&6; } +if test "x$ac_cv_lib_m_sincosf" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINCOSF 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for sinf in -lm" >&5 +$as_echo_n "checking for sinf in -lm... " >&6; } +if test "${ac_cv_lib_m_sinf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sinf (); +int +main () +{ +return sinf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_sinf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_sinf=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinf" >&5 +$as_echo "$ac_cv_lib_m_sinf" >&6; } +if test "x$ac_cv_lib_m_sinf" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINF 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for cosf in -lm" >&5 +$as_echo_n "checking for cosf in -lm... " >&6; } +if test "${ac_cv_lib_m_cosf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cosf (); +int +main () +{ +return cosf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_cosf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_cosf=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_cosf" >&5 +$as_echo "$ac_cv_lib_m_cosf" >&6; } +if test "x$ac_cv_lib_m_cosf" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COSF 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for trunc in -lm" >&5 +$as_echo_n "checking for trunc in -lm... " >&6; } +if test "${ac_cv_lib_m_trunc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char trunc (); +int +main () +{ +return trunc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_trunc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_trunc=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_trunc" >&5 +$as_echo "$ac_cv_lib_m_trunc" >&6; } +if test "x$ac_cv_lib_m_trunc" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TRUNC 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for exp10 in -lm" >&5 +$as_echo_n "checking for exp10 in -lm... " >&6; } +if test "${ac_cv_lib_m_exp10+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exp10 (); +int +main () +{ +return exp10 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_exp10=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_exp10=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_exp10" >&5 +$as_echo "$ac_cv_lib_m_exp10" >&6; } +if test "x$ac_cv_lib_m_exp10" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_EXP10 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for log2 in -lm" >&5 +$as_echo_n "checking for log2 in -lm... " >&6; } +if test "${ac_cv_lib_m_log2+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char log2 (); +int +main () +{ +return log2 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_m_log2=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_m_log2=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_log2" >&5 +$as_echo "$ac_cv_lib_m_log2" >&6; } +if test "x$ac_cv_lib_m_log2" = x""yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOG2 1 +_ACEOF + +fi + +#AC_FUNC_MKTIME + + + + + + SHM_OPEN_LIBS="" + save_LIBS="$LIBS" + { $as_echo "$as_me:$LINENO: checking for library containing shm_open" >&5 +$as_echo_n "checking for library containing shm_open... " >&6; } +if test "${ac_cv_search_shm_open+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shm_open (); +int +main () +{ +return shm_open (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_shm_open=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_shm_open+set}" = set; then + break +fi +done +if test "${ac_cv_search_shm_open+set}" = set; then + : +else + ac_cv_search_shm_open=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_shm_open" >&5 +$as_echo "$ac_cv_search_shm_open" >&6; } +ac_res=$ac_cv_search_shm_open +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + SHM_OPEN_LIBS="$LIBS" +fi + + +for ac_func in shm_open +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS="$save_LIBS" + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + +# on Mingw32 extra LDFLAGS are required to ease global variable linking +LIBGNURADIO_CORE_EXTRA_LDFLAGS="" + +{ $as_echo "$as_me:$LINENO: checking whether $LD accepts --enable-runtime-pseudo-reloc" >&5 +$as_echo_n "checking whether $LD accepts --enable-runtime-pseudo-reloc... " >&6; } +if ${LD} --enable-runtime-pseudo-reloc --version >/dev/null 2>&1 +then + # libtool requires the quotes + LIBGNURADIO_CORE_EXTRA_LDFLAGS="\"-Wl,--enable-runtime-pseudo-reloc\"" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + + { $as_echo "$as_me:$LINENO: checking for CreateFileMapping function" >&5 +$as_echo_n "checking for CreateFileMapping function... " >&6; } + cat >conftest.$ac_ext <<_ACEOF + +#include +int main (int argc, char **argv) +{ + HANDLE handle; + int size; + char seg_name[1024]; + handle = CreateFileMapping( + INVALID_HANDLE_VALUE, // use paging file + NULL, // default security + PAGE_READWRITE, // read/write access + 0, // max. object size + size, // buffer size + seg_name); // name of mapping object + return 0; +} + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + HAVE_CREATEFILEMAPPING=yes + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CREATEFILEMAPPING 1 +_ACEOF + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + HAVE_CREATEFILEMAPPING=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + { $as_echo "$as_me:$LINENO: result: $HAVE_CREATEFILEMAPPING" >&5 +$as_echo "$HAVE_CREATEFILEMAPPING" >&6; } + if test x$HAVE_CREATEFILEMAPPING = xyes; then + HAVE_CREATEFILEMAPPING_TRUE= + HAVE_CREATEFILEMAPPING_FALSE='#' +else + HAVE_CREATEFILEMAPPING_TRUE='#' + HAVE_CREATEFILEMAPPING_FALSE= +fi + + + + + + + + +for ac_header in sys/types.h fcntl.h io.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in windows.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in winioctl.h winbase.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_WINDOWS_H + #include + #endif + + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + + + +for ac_func in getopt usleep gettimeofday nanosleep rand srand random srandom sleep sigaction +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:$LINENO: checking for struct timezone" >&5 +$as_echo_n "checking for struct timezone... " >&6; } +if test "${ac_cv_type_struct_timezone+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_struct_timezone=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + # include + #endif + #if TIME_WITH_SYS_TIME + # include + # include + #else + # if HAVE_SYS_TIME_H + # include + # else + # include + # endif + #endif + + +int +main () +{ +if (sizeof (struct timezone)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + # include + #endif + #if TIME_WITH_SYS_TIME + # include + # include + #else + # if HAVE_SYS_TIME_H + # include + # else + # include + # endif + #endif + + +int +main () +{ +if (sizeof ((struct timezone))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_struct_timezone=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_timezone" >&5 +$as_echo "$ac_cv_type_struct_timezone" >&6; } +if test "x$ac_cv_type_struct_timezone" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TIMEZONE 1 +_ACEOF + + +fi +{ $as_echo "$as_me:$LINENO: checking for struct timespec" >&5 +$as_echo_n "checking for struct timespec... " >&6; } +if test "${ac_cv_type_struct_timespec+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_struct_timespec=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + # include + #endif + #if TIME_WITH_SYS_TIME + # include + # include + #else + # if HAVE_SYS_TIME_H + # include + # else + # include + # endif + #endif + + +int +main () +{ +if (sizeof (struct timespec)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + # include + #endif + #if TIME_WITH_SYS_TIME + # include + # include + #else + # if HAVE_SYS_TIME_H + # include + # else + # include + # endif + #endif + + +int +main () +{ +if (sizeof ((struct timespec))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_struct_timespec=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_timespec" >&5 +$as_echo "$ac_cv_type_struct_timespec" >&6; } +if test "x$ac_cv_type_struct_timespec" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TIMESPEC 1 +_ACEOF + + +fi +{ $as_echo "$as_me:$LINENO: checking for ssize_t" >&5 +$as_echo_n "checking for ssize_t... " >&6; } +if test "${ac_cv_type_ssize_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_ssize_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + # include + #endif + #if TIME_WITH_SYS_TIME + # include + # include + #else + # if HAVE_SYS_TIME_H + # include + # else + # include + # endif + #endif -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then +int +main () +{ +if (sizeof (ssize_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + # include + #endif + #if TIME_WITH_SYS_TIME + # include + # include + #else + # if HAVE_SYS_TIME_H + # include + # else + # include + # endif + #endif + -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +int +main () +{ +if (sizeof ((ssize_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13636: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:13640: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_ssize_t=yes fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5 +$as_echo "$ac_cv_type_ssize_t" >&6; } +if test "x$ac_cv_type_ssize_t" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_SSIZE_T 1 +_ACEOF + + +fi + + + + + +for ac_func in getopt usleep gettimeofday +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - lt_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_CXX=yes - fi - else - lt_prog_compiler_static_works_CXX=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" + case " $LIBOBJS " in + *" $ac_func.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" + ;; +esac + +fi +done + + + + +{ $as_echo "$as_me:$LINENO: checking for Sleep" >&5 +$as_echo_n "checking for Sleep... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + #include + #include + +int +main () +{ + Sleep(0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } +cat >>confdefs.h <<\_ACEOF +#define HAVE_SSLEEP 1 +_ACEOF -if test x"$lt_prog_compiler_static_works_CXX" = xyes; then - : + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } else - lt_prog_compiler_static_CXX= + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: checking whether mkdir accepts only one arg" >&5 +$as_echo_n "checking whether mkdir accepts only one arg... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + #include +int +main () +{ - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13740: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:13744: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* + mkdir("") -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +cat >>confdefs.h <<\_ACEOF +#define MKDIR_TAKES_ONE_ARG /**/ +_ACEOF -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - ;; - linux* | k*bsd*-gnu) - link_all_deplibs_CXX=no - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no +fi -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH +# Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_HAVE_DOT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_DOT"; then + ac_cv_prog_HAVE_DOT="$HAVE_DOT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_HAVE_DOT="YES" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; +done +done +IFS=$as_save_IFS -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; + test -z "$ac_cv_prog_HAVE_DOT" && ac_cv_prog_HAVE_DOT="NO" +fi +fi +HAVE_DOT=$ac_cv_prog_HAVE_DOT +if test -n "$HAVE_DOT"; then + { $as_echo "$as_me:$LINENO: result: $HAVE_DOT" >&5 +$as_echo "$HAVE_DOT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' +done +done +IFS=$as_save_IFS + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -freebsd1*) - dynamic_linker=no ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.18 + { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" +fi + + + +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for FFTW3F" >&5 +$as_echo_n "checking for FFTW3F... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$FFTW3F_CFLAGS"; then + pkg_cv_FFTW3F_CFLAGS="$FFTW3F_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fftw3f >= 3.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "fftw3f >= 3.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_FFTW3F_CFLAGS=`$PKG_CONFIG --cflags "fftw3f >= 3.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$FFTW3F_LIBS"; then + pkg_cv_FFTW3F_LIBS="$FFTW3F_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fftw3f >= 3.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "fftw3f >= 3.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_FFTW3F_LIBS=`$PKG_CONFIG --libs --static "fftw3f >= 3.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_FFTW3F_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_FFTW3F_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$FFTW3F_LIBS"; then + pkg_cv_FFTW3F_LIBS="$FFTW3F_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fftw3f >= 3.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "fftw3f >= 3.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_FFTW3F_LIBS=`$PKG_CONFIG --libs --static "fftw3f >= 3.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi + +if test -n "$PKG_CONFIG"; then + if test -n "$FFTW3F_INCLUDEDIR"; then + pkg_cv_FFTW3F_INCLUDEDIR="$FFTW3F_INCLUDEDIR" else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"fftw3f >= 3.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "fftw3f >= 3.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_FFTW3F_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "fftw3f >= 3.0" 2>/dev/null` +else + pkg_failed=yes +fi fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; +else + pkg_failed=untried +fi -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes +if test $pkg_failed = yes; then - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FFTW3F_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fftw3f >= 3.0"` + else + FFTW3F_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fftw3f >= 3.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$FFTW3F_PKG_ERRORS" >&5 - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; + { { $as_echo "$as_me:$LINENO: error: Package requirements (fftw3f >= 3.0) were not met: -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; +$FFTW3F_PKG_ERRORS -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +Alternatively, you may set the environment variables FFTW3F_CFLAGS +and FFTW3F_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&5 +$as_echo "$as_me: error: Package requirements (fftw3f >= 3.0) were not met: -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; +$FFTW3F_PKG_ERRORS -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; +Alternatively, you may set the environment variables FFTW3F_CFLAGS +and FFTW3F_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables FFTW3F_CFLAGS +and FFTW3F_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; +Alternatively, you may set the environment variables FFTW3F_CFLAGS +and FFTW3F_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + FFTW3F_CFLAGS=$pkg_cv_FFTW3F_CFLAGS + FFTW3F_LIBS=$pkg_cv_FFTW3F_LIBS + FFTW3F_INCLUDEDIR=$pkg_cv_FFTW3F_INCLUDEDIR -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; + FFTW3F_CPPFLAGS="" + for flag in $FFTW3F_CFLAGS; do + case $flag in + -I* | -D* | -U*) FFTW3F_CPPFLAGS="$FFTW3F_CPPFLAGS $flag" ;; + esac + done + pkg_cv_FFTW3F_CPPFLAGS=$FFTW3F_CPPFLAGS -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + + + + # Check whether --enable-doxygen was given. +if test "${enable_doxygen+set}" = set; then + enableval=$enable_doxygen; +fi + + # Check whether --enable-dot was given. +if test "${enable_dot+set}" = set; then + enableval=$enable_dot; +fi + -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no + if test "x$enable_doxygen" = xno; then + enable_doc=no else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac + # Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOXYGEN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi - sys_lib_dlsearch_path_spec='/usr/lib' +done +done +IFS=$as_save_IFS + ;; +esac +fi +DOXYGEN=$ac_cv_path_DOXYGEN +if test -n "$DOXYGEN"; then + { $as_echo "$as_me:$LINENO: result: $DOXYGEN" >&5 +$as_echo "$DOXYGEN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH + + if test x$DOXYGEN = x; then + if test "x$enable_doxygen" = xyes; then + { { $as_echo "$as_me:$LINENO: error: could not find doxygen" >&5 +$as_echo "$as_me: error: could not find doxygen" >&2;} + { (exit 1); exit 1; }; } + fi + enable_doc=no + generate_docs= + else + enable_doc=yes + generate_docs=docs + # Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DOT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DOT="$DOT" # Let the user override the test with a path. ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -*) - dynamic_linker=no ;; esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi +DOT=$ac_cv_path_DOT +if test -n "$DOT"; then + { $as_echo "$as_me:$LINENO: result: $DOT" >&5 +$as_echo "$DOT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - # We can hardcode non-existant directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate + fi fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6; } -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless + if test x$enable_doc = xyes; then + DOC_TRUE= + DOC_FALSE='#' +else + DOC_TRUE='#' + DOC_FALSE= fi -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST + if test x$DOT = x; then + if test "x$enable_dot" = xyes; then + { { $as_echo "$as_me:$LINENO: error: could not find dot" >&5 +$as_echo "$as_me: error: could not find dot" >&2;} + { (exit 1); exit 1; }; } + fi + enable_dot=no + else + enable_dot=yes fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; + enable_xml_docs=YES + + enable_html_docs=YES + + enable_latex_docs=NO + + + + + + +# Check whether --with-md-cpu was given. +if test "${with_md_cpu+set}" = set; then + withval=$with_md_cpu; cf_with_md_cpu="$withval" +else + cf_with_md_cpu="$host_cpu" +fi + + + case "$cf_with_md_cpu" in + x86 | i[3-7]86) MD_CPU=x86 MD_SUBCPU=x86 ;; + x86_64) MD_CPU=x86 MD_SUBCPU=x86_64 ;; + powerpc*) MD_CPU=powerpc ;; + *) MD_CPU=generic ;; esac -cfgfile="$ofile" + # Check whether --enable-altivec was given. +if test "${enable_altivec+set}" = set; then + enableval=$enable_altivec; if test $MD_CPU = powerpc; then + case "$enableval" in + (no) MD_CPU=generic ;; + (yes) - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname + echo 'void f(){}' > conftest.c + for i in -mabi=altivec -maltivec + do + { $as_echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 +$as_echo_n "checking whether $CC accepts $i... " >&6; } + if test -z "`${CC} $i -c conftest.c 2>&1`" + then + lf_CFLAGS="${lf_CFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + done + rm -f conftest.c conftest.o -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared + echo 'void f(){}' > conftest.cc + for i in -mabi=altivec -maltivec + do + { $as_echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 +$as_echo_n "checking whether $CXX accepts $i... " >&6; } + if test -z "`${CXX} $i -c conftest.cc 2>&1`" + then + lf_CXXFLAGS="${lf_CXXFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + done + rm -f conftest.cc conftest.o -# Whether or not to build static libraries. -build_old_libs=$enable_static -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX + ;; + (*) { { $as_echo "$as_me:$LINENO: error: Invalid argument ($enableval) to --enable-altivec" >&5 +$as_echo "$as_me: error: Invalid argument ($enableval) to --enable-altivec" >&2;} + { (exit 1); exit 1; }; } ;; + esac + fi +else + if test $MD_CPU = powerpc; then -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + echo 'void f(){}' > conftest.c + for i in -mabi=altivec -maltivec + do + { $as_echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5 +$as_echo_n "checking whether $CC accepts $i... " >&6; } + if test -z "`${CC} $i -c conftest.c 2>&1`" + then + lf_CFLAGS="${lf_CFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + done + rm -f conftest.c conftest.o -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os + echo 'void f(){}' > conftest.cc + for i in -mabi=altivec -maltivec + do + { $as_echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5 +$as_echo_n "checking whether $CXX accepts $i... " >&6; } + if test -z "`${CXX} $i -c conftest.cc 2>&1`" + then + lf_CXXFLAGS="${lf_CXXFLAGS} $i" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + done + rm -f conftest.cc conftest.o -# An echo program that does not interpret backslashes. -echo=$lt_echo -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS + fi +fi -# A C compiler. -LTCC=$lt_LTCC -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS -# A language-specific compiler. -CC=$lt_compiler_CXX + { $as_echo "$as_me:$LINENO: checking for machine dependent speedups" >&5 +$as_echo_n "checking for machine dependent speedups... " >&6; } + { $as_echo "$as_me:$LINENO: result: $MD_CPU" >&5 +$as_echo "$MD_CPU" >&6; } -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX -# An ERE matcher. -EGREP=$lt_EGREP -# The linker used to build libraries. -LD=$lt_LD_CXX + if test "$MD_CPU" = "x86"; then + MD_CPU_x86_TRUE= + MD_CPU_x86_FALSE='#' +else + MD_CPU_x86_TRUE='#' + MD_CPU_x86_FALSE= +fi -# Whether we need hard or soft links. -LN_S=$lt_LN_S + if test "$MD_SUBCPU" = "x86_64"; then + MD_SUBCPU_x86_64_TRUE= + MD_SUBCPU_x86_64_FALSE='#' +else + MD_SUBCPU_x86_64_TRUE='#' + MD_SUBCPU_x86_64_FALSE= +fi -# A BSD-compatible nm program. -NM=$lt_NM + if test "$MD_CPU" = "powerpc"; then + MD_CPU_powerpc_TRUE= + MD_CPU_powerpc_FALSE='#' +else + MD_CPU_powerpc_TRUE='#' + MD_CPU_powerpc_FALSE= +fi + + if test "$MD_CPU" = "generic"; then + MD_CPU_generic_TRUE= + MD_CPU_generic_FALSE='#' +else + MD_CPU_generic_TRUE='#' + MD_CPU_generic_FALSE= +fi -# A symbol stripping program -STRIP=$lt_STRIP -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" +if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cppunit\"") >&5 + ($PKG_CONFIG --exists --print-errors "cppunit") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" -# Used on cygwin: assembler. -AS="$AS" -# The name of the directory that contains temporary libtool files. -objdir=$objdir +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for CPPUNIT" >&5 +$as_echo_n "checking for CPPUNIT... " >&6; } -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds +if test -n "$PKG_CONFIG"; then + if test -n "$CPPUNIT_CFLAGS"; then + pkg_cv_CPPUNIT_CFLAGS="$CPPUNIT_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cppunit >= 1.9.14\"") >&5 + ($PKG_CONFIG --exists --print-errors "cppunit >= 1.9.14") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_CPPUNIT_CFLAGS=`$PKG_CONFIG --cflags "cppunit >= 1.9.14" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$CPPUNIT_LIBS"; then + pkg_cv_CPPUNIT_LIBS="$CPPUNIT_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cppunit >= 1.9.14\"") >&5 + ($PKG_CONFIG --exists --print-errors "cppunit >= 1.9.14") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_CPPUNIT_LIBS=`$PKG_CONFIG --libs --static "cppunit >= 1.9.14" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_CPPUNIT_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_CPPUNIT_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$CPPUNIT_LIBS"; then + pkg_cv_CPPUNIT_LIBS="$CPPUNIT_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cppunit >= 1.9.14\"") >&5 + ($PKG_CONFIG --exists --print-errors "cppunit >= 1.9.14") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_CPPUNIT_LIBS=`$PKG_CONFIG --libs --static "cppunit >= 1.9.14" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi -# Object file suffix (normally "o"). -objext="$ac_objext" +if test -n "$PKG_CONFIG"; then + if test -n "$CPPUNIT_INCLUDEDIR"; then + pkg_cv_CPPUNIT_INCLUDEDIR="$CPPUNIT_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"cppunit >= 1.9.14\"") >&5 + ($PKG_CONFIG --exists --print-errors "cppunit >= 1.9.14") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_CPPUNIT_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "cppunit >= 1.9.14" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi -# Old archive suffix (normally "a"). -libext="$libext" -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' -# Executable file suffix (normally ""). -exeext="$exeext" -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode +if test $pkg_failed = yes; then -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + CPPUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "cppunit >= 1.9.14"` + else + CPPUNIT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "cppunit >= 1.9.14"` + fi + # Put the nasty error message in config.log where it belongs + echo "$CPPUNIT_PKG_ERRORS" >&5 -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + { { $as_echo "$as_me:$LINENO: error: Package requirements (cppunit >= 1.9.14) were not met: -# Must we lock files when doing compilation? -need_locks=$lt_need_locks +$CPPUNIT_PKG_ERRORS -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. -# Do we need a version for libraries? -need_version=$need_version +Alternatively, you may set the environment variables CPPUNIT_CFLAGS +and CPPUNIT_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&5 +$as_echo "$as_me: error: Package requirements (cppunit >= 1.9.14) were not met: -# Whether dlopen is supported. -dlopen_support=$enable_dlopen +$CPPUNIT_PKG_ERRORS -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static +Alternatively, you may set the environment variables CPPUNIT_CFLAGS +and CPPUNIT_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables CPPUNIT_CFLAGS +and CPPUNIT_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX +Alternatively, you may set the environment variables CPPUNIT_CFLAGS +and CPPUNIT_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX +To get pkg-config, see . +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + CPPUNIT_CFLAGS=$pkg_cv_CPPUNIT_CFLAGS + CPPUNIT_LIBS=$pkg_cv_CPPUNIT_LIBS + CPPUNIT_INCLUDEDIR=$pkg_cv_CPPUNIT_INCLUDEDIR -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + CPPUNIT_CPPFLAGS="" + for flag in $CPPUNIT_CFLAGS; do + case $flag in + -I* | -D* | -U*) CPPUNIT_CPPFLAGS="$CPPUNIT_CPPFLAGS $flag" ;; + esac + done + pkg_cv_CPPUNIT_CPPFLAGS=$CPPUNIT_CPPFLAGS -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi +else -# Library versioning type. -version_type=$version_type -# Format of library name prefix. -libname_spec=$lt_libname_spec -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec +# Check whether --with-cppunit-prefix was given. +if test "${with_cppunit_prefix+set}" = set; then + withval=$with_cppunit_prefix; cppunit_config_prefix="$withval" +else + cppunit_config_prefix="" +fi -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds +# Check whether --with-cppunit-exec-prefix was given. +if test "${with_cppunit_exec_prefix+set}" = set; then + withval=$with_cppunit_exec_prefix; cppunit_config_exec_prefix="$withval" +else + cppunit_config_exec_prefix="" +fi -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + if test x$cppunit_config_exec_prefix != x ; then + cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix" + if test x${CPPUNIT_CONFIG+set} != xset ; then + CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config + fi + fi + if test x$cppunit_config_prefix != x ; then + cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix" + if test x${CPPUNIT_CONFIG+set} != xset ; then + CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config + fi + fi -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds + # Extract the first word of "cppunit-config", so it can be a program name with args. +set dummy cppunit-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CPPUNIT_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $CPPUNIT_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPPUNIT_CONFIG="$CPPUNIT_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CPPUNIT_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX + test -z "$ac_cv_path_CPPUNIT_CONFIG" && ac_cv_path_CPPUNIT_CONFIG="no" + ;; +esac +fi +CPPUNIT_CONFIG=$ac_cv_path_CPPUNIT_CONFIG +if test -n "$CPPUNIT_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $CPPUNIT_CONFIG" >&5 +$as_echo "$CPPUNIT_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX + cppunit_version_min=1.9.14 -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX + { $as_echo "$as_me:$LINENO: checking for Cppunit - version >= $cppunit_version_min" >&5 +$as_echo_n "checking for Cppunit - version >= $cppunit_version_min... " >&6; } + no_cppunit="" + if test "$CPPUNIT_CONFIG" = "no" ; then + no_cppunit=yes + else + CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags` + CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs` + cppunit_version=`$CPPUNIT_CONFIG --version` -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX + cppunit_major_version=`echo $cppunit_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + cppunit_minor_version=`echo $cppunit_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + cppunit_micro_version=`echo $cppunit_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX + cppunit_major_min=`echo $cppunit_version_min | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + cppunit_minor_min=`echo $cppunit_version_min | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + cppunit_micro_min=`echo $cppunit_version_min | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + cppunit_version_proper=`expr \ + $cppunit_major_version \> $cppunit_major_min \| \ + $cppunit_major_version \= $cppunit_major_min \& \ + $cppunit_minor_version \> $cppunit_minor_min \| \ + $cppunit_major_version \= $cppunit_major_min \& \ + $cppunit_minor_version \= $cppunit_minor_min \& \ + $cppunit_micro_version \>= $cppunit_micro_min ` -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method + if test "$cppunit_version_proper" = "1" ; then + { $as_echo "$as_me:$LINENO: result: $cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version" >&5 +$as_echo "$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + no_cppunit=yes + fi + fi -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd + if test "x$no_cppunit" = x ; then + : + else + CPPUNIT_CFLAGS="" + CPPUNIT_LIBS="" + { { $as_echo "$as_me:$LINENO: error: GNU Radio requires cppunit. Stop" >&5 +$as_echo "$as_me: error: GNU Radio requires cppunit. Stop" >&2;} + { (exit 1); exit 1; }; } + fi -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval +fi -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe +CPPUNIT_INCLUDES=$CPPUNIT_CFLAGS -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address +# Extract the first word of "guile", so it can be a program name with args. +set dummy guile; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_GUILE+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $GUILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_GUILE="$GUILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GUILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -# This is the shared library runtime path variable. -runpath_var=$runpath_var + ;; +esac +fi +GUILE=$ac_cv_path_GUILE +if test -n "$GUILE"; then + { $as_echo "$as_me:$LINENO: result: $GUILE" >&5 +$as_echo "$GUILE" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -# This is the shared library path variable. -shlibpath_var=$shlibpath_var -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX +# Check whether --with-boost was given. +if test "${with_boost+set}" = set; then + withval=$with_boost; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX +else + want_boost="yes" +fi -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX +# Check whether --with-boost-libdir was given. +if test "${with_boost_libdir+set}" = set; then + withval=$with_boost_libdir; + if test -d $withval + then + ac_boost_lib_path="$withval" + else + { { $as_echo "$as_me:$LINENO: error: --with-boost-libdir expected directory name" >&5 +$as_echo "$as_me: error: --with-boost-libdir expected directory name" >&2;} + { (exit 1); exit 1; }; } + fi -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" +else + ac_boost_lib_path="" -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX +fi -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=1.35 + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + { $as_echo "$as_me:$LINENO: checking for boost >= $boost_lib_version_req" >&5 +$as_echo_n "checking for boost >= $boost_lib_version_req... " >&6; } + succeeded=no + + if test "$ac_boost_path" != ""; then + if test -d "$ac_boost_path/lib${gr_libdir_suffix}"; then + BOOST_LDFLAGS="-L$ac_boost_path/lib${gr_libdir_suffix}" + else + BOOST_LDFLAGS="-L$ac_boost_path/lib" + fi + BOOST_CPPFLAGS="-I$ac_boost_path/include" + else + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + if test -d "$ac_boost_path_tmp/lib${gr_libdir_suffix}"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib${gr_libdir_suffix}" + else + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + fi + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + break; + fi + done + fi -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_CXX" + if test "$ac_boost_lib_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_lib_path" + fi -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX + #include -# ### END LIBTOOL TAG CONFIG: $tagname +int +main () +{ -__EOF__ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + succeeded=yes + found_system=yes else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -ac_ext=c +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + + if test "$succeeded" != "yes"; then + _version=0 + + if test "$ac_boost_path" != ""; then + path_list="$ac_boost_path" else - tagname="" + path_list="/usr /usr/local /opt /opt/local" fi - ;; + for ac_boost_path in $path_list ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's,/include/boost-,,; s,_,.,'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu + if test "$ac_boost_lib_path" = ""; then + if test -d "$best_path/lib${gr_libdir_suffix}"; then + BOOST_LDFLAGS="-L$best_path/lib${gr_libdir_suffix}" + else + BOOST_LDFLAGS="-L$best_path/lib" + fi + fi + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -# Source file extension for f77 test sources. -ac_ext=f + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext + #include -# Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" +int +main () +{ -# Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif -# ltmain only uses $CC for tagged configurations so make sure $CC is set. + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + succeeded=yes + found_system=yes -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} -# Allow CC to be a program name with arguments. -compiler=$CC +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* + if test "$succeeded" != "yes" ; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + if test "$_version" = "0" ; then + { { $as_echo "$as_me:$LINENO: error: we could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). +If you are sure you have boost installed, then check your version number looking in ." >&5 +$as_echo "$as_me: error: we could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). +If you are sure you have boost installed, then check your version number looking in ." >&2;} + { (exit 1); exit 1; }; } + else + { { $as_echo "$as_me:$LINENO: error: your boost libraries seem to old (version $_version)." >&5 +$as_echo "$as_me: error: your boost libraries seem to old (version $_version)." >&2;} + { (exit 1); exit 1; }; } + fi + else -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +cat >>confdefs.h <<\_ACEOF +#define HAVE_BOOST 1 +_ACEOF -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } + fi +fi -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } -GCC_F77="$G77" -LD_F77="$LD" -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; +# Check whether --with-boost-thread was given. +if test "${with_boost_thread+set}" = set; then + withval=$with_boost_thread; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_lib="" + else + want_boost="yes" + ax_boost_user_lib="$withval" + fi - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; +else + want_boost="yes" +fi - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; + if test "$want_boost" = "yes"; then - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + CXXFLAGS_SAVED="$CXXFLAGS" + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS $PTHREAD_LIBS" + CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" + + { $as_echo "$as_me:$LINENO: checking whether the boost::thread includes are available" >&5 +$as_echo_n "checking whether the boost::thread includes are available... " >&6; } +if test "${ax_cv_boost_thread+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +boost::thread_group thrds; + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ax_cv_boost_thread=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ax_cv_boost_thread=no +fi - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; +fi +{ $as_echo "$as_me:$LINENO: result: $ax_cv_boost_thread" >&5 +$as_echo "$ax_cv_boost_thread" >&6; } - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; + if test "$ax_cv_boost_thread" = "yes"; then + BOOST_CXXFLAGS="$PTHREAD_CFLAGS" - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - esac - ;; - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; +cat >>confdefs.h <<\_ACEOF +#define HAVE_BOOST_THREAD 1 +_ACEOF - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; + link_ok="no" + if test "$ax_boost_user_lib" != ""; then + for ax_lib in $ax_boost_user_lib boost_thread-${ax_boost_user_lib}; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; + eval "$as_ac_Lib=no" +fi - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + BOOST_THREAD_LIB="-l$ax_lib"; link_ok="yes"; break +fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } + done + else + head=$BOOSTLIBDIR/libboost_thread + for f in ${head}*.so* ${head}*.a* ${head}*.dll* ${head}*.dylib; do + case $f in + *\**) continue;; + esac + f=`echo $f | sed -e 's,.*/,,' -e 's,^lib,,'` + f=`echo $f | sed -e 's,\(boost_thread.*\)\.so.*$,\1,' -e 's,\(boost_thread.*\)\.a.*$,\1,' -e 's,\(boost_thread.*\)\.dll.*$,\1,' -e 's,\(boost_thread.*\)\.dylib.*$,\1,'` -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then + ax_lib=$f + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15301: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:15305: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + eval "$as_ac_Lib=no" fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi - +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + BOOST_THREAD_LIB="-l$ax_lib"; link_ok="yes"; break fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_F77=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_F77=yes - fi - else - lt_prog_compiler_static_works_F77=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" + done + fi -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } + if test "$link_ok" != "yes"; then + { { $as_echo "$as_me:$LINENO: error: Could not link against libboost_thread!" >&5 +$as_echo "$as_me: error: Could not link against libboost_thread!" >&2;} + { (exit 1); exit 1; }; } + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test x"$lt_prog_compiler_static_works_F77" = xyes; then - : -else - lt_prog_compiler_static_F77= -fi -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + if test "$link_ok" = "yes" && test -n "$PTHREAD_LIBS"; then + BOOST_THREAD_LIB="$BOOST_THREAD_LIB $PTHREAD_LIBS" + fi + fi - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15405: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:15409: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + CXXFLAGS="$CXXFLAGS_SAVED" + fi -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } +CXXFLAGS="$CXXFLAGS $BOOST_CXXFLAGS" CFLAGS="$CFLAGS $BOOST_CXXFLAGS" -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi + + + + + +# Check whether --with-boost-date-time was given. +if test "${with_boost_date_time+set}" = set; then + withval=$with_boost_date_time; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_lib="" + else + want_boost="yes" + ax_boost_user_lib="$withval" + fi + else - need_locks=no + want_boost="yes" fi -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + if test "$want_boost" = "yes"; then - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + { $as_echo "$as_me:$LINENO: checking whether the boost::date_time includes are available" >&5 +$as_echo_n "checking whether the boost::date_time includes are available... " >&6; } +if test "${ax_cv_boost_date_time+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +using namespace boost::gregorian; date d(2002,Jan,10); return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ax_cv_boost_date_time=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -EOF - fi - ;; + ax_cv_boost_date_time=no +fi - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; +fi +{ $as_echo "$as_me:$LINENO: result: $ax_cv_boost_date_time" >&5 +$as_echo "$ax_cv_boost_date_time" >&6; } + if test "$ax_cv_boost_date_time" = "yes"; then - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_F77=no - fi - ;; + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - interix3*) - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +cat >>confdefs.h <<\_ACEOF +#define HAVE_BOOST_DATE_TIME 1 +_ACEOF - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - link_all_deplibs_F77=no - else - ld_shlibs_F77=no - fi - ;; + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; + link_ok="no" + if test "$ax_boost_user_lib" != ""; then + for ax_lib in $ax_boost_user_lib boost_date_time-${ax_boost_user_lib}; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. + eval "$as_ac_Lib=no" +fi -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + BOOST_DATE_TIME_LIB="-l$ax_lib"; link_ok="yes"; break +fi - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_F77=no - cat <<_LT_EOF 1>&2 + done + else + head=$BOOSTLIBDIR/libboost_date_time + for f in ${head}*.so* ${head}*.a* ${head}*.dll* ${head}*.dylib; do + case $f in + *\**) continue;; + esac + f=`echo $f | sed -e 's,.*/,,' -e 's,^lib,,'` + f=`echo $f | sed -e 's,\(boost_date_time.*\)\.so.*$,\1,' -e 's,\(boost_date_time.*\)\.a.*$,\1,' -e 's,\(boost_date_time.*\)\.dll.*$,\1,' -e 's,\(boost_date_time.*\)\.dylib.*$,\1,'` -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. + ax_lib=$f + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; + eval "$as_ac_Lib=no" +fi - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + BOOST_DATE_TIME_LIB="-l$ax_lib"; link_ok="yes"; break +fi - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= + done fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + if test "$link_ok" != "yes"; then + { { $as_echo "$as_me:$LINENO: error: Could not link against libboost_date_time!" >&5 +$as_echo "$as_me: error: Could not link against libboost_date_time!" >&2;} + { (exit 1); exit 1; }; } + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + fi - aix_use_runtimelinking=no + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_F77=yes - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - end + + + +# Check whether --with-boost-program-options was given. +if test "${with_boost_program_options+set}" = set; then + withval=$with_boost_program_options; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_lib="" + else + want_boost="yes" + ax_boost_user_lib="$withval" + fi + +else + want_boost="yes" +fi + + + + if test "$want_boost" = "yes"; then + + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + { $as_echo "$as_me:$LINENO: checking whether the boost::program_options includes are available" >&5 +$as_echo_n "checking whether the boost::program_options includes are available... " >&6; } +if test "${ax_cv_boost_program_options+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +boost::program_options::options_description generic("Generic options"); + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi + } && test -s conftest.$ac_objext; then + ax_cv_boost_program_options=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 + ax_cv_boost_program_options=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + fi +{ $as_echo "$as_me:$LINENO: result: $ax_cv_boost_program_options" >&5 +$as_echo "$ax_cv_boost_program_options" >&6; } + if test "$ax_cv_boost_program_options" = "yes"; then -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - end + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BOOST_PROGRAM_OPTIONS 1 +_ACEOF + + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` + + link_ok="no" + if test "$ax_boost_user_lib" != ""; then + for ax_lib in $ax_boost_user_lib boost_program_options-${ax_boost_user_lib}; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" @@ -15915,2516 +29685,3055 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + eval "$as_ac_Lib=no" fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77='$convenience' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; link_ok="yes"; break +fi - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + done else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; + head=$BOOSTLIBDIR/libboost_program_options + for f in ${head}*.so* ${head}*.a* ${head}*.dll* ${head}*.dylib; do + case $f in + *\**) continue;; + esac + f=`echo $f | sed -e 's,.*/,,' -e 's,^lib,,'` + f=`echo $f | sed -e 's,\(boost_program_options.*\)\.so.*$,\1,' -e 's,\(boost_program_options.*\)\.a.*$,\1,' -e 's,\(boost_program_options.*\)\.dll.*$,\1,' -e 's,\(boost_program_options.*\)\.dylib.*$,\1,'` - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; + ax_lib=$f + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - freebsd1*) - ld_shlibs_F77=no - ;; + eval "$as_ac_Lib=no" +fi - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; link_ok="yes"; break +fi - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; + done + fi - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; + if test "$link_ok" != "yes"; then + { { $as_echo "$as_me:$LINENO: error: Could not link against libboost_program_options!" >&5 +$as_echo "$as_me: error: Could not link against libboost_program_options!" >&2;} + { (exit 1); exit 1; }; } + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: + fi + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - fi - ;; - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - *) - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; + # Extract the first word of "svn", so it can be a program name with args. +set dummy svn; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SVN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $SVN in + [\\/]* | ?:[\\/]*) + ac_cv_path_SVN="$SVN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SVN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; + ;; +esac +fi +SVN=$ac_cv_path_SVN +if test -n "$SVN"; then + { $as_echo "$as_me:$LINENO: result: $SVN" >&5 +$as_echo "$SVN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - openbsd*) - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - ;; + if test "$SVN" != "" -a -d .svn ; then + SVNVERSION=`$SVN info . | grep '^Revision' | cut -f 2- -d ' '` + SVNDATE=`$SVN info . | grep 'Last Changed Date' | cut -f 4-6 -d ' '` + fi - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs_F77=yes - ;; - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; +# Check whether --enable-all-components was given. +if test "${enable_all_components+set}" = set; then + enableval=$enable_all_components; +fi - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; +build_dirs="config" - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - no_undefined_flag_F77='${wl}-z,text' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; + passed=yes + # Check whether --enable-gruel was given. +if test "${enable_gruel+set}" = set; then + enableval=$enable_gruel; +else - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_F77='${wl}-z,text' - allow_undefined_flag_F77='${wl}-z,nodefs' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var='LD_RUN_PATH' + enable_gruel=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; +fi - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi -{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6; } -test "$ld_shlibs_F77" = no && can_build_shared=no -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes + if test x = x; then + pc_comp_name="gruel" + else + pc_comp_name="" + fi - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +# Check whether --with-gruel was given. +if test "${with_gruel+set}" = set; then + withval=$with_gruel; if test "x$withval" != "xyes"; then + with_gruel_val=$withval + with_gruel=yes + fi +fi + + if test x$with_gruel = xyes; then + if test x$enable_gruel = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gruel: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component gruel: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else + + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + + l_PKG_CONFIG_PATH=$with_gruel_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH + + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component gruel: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component gruel: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi + + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - pic_flag=$lt_prog_compiler_pic_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes +else + + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with +else + passed=no +fi + fi fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } - ;; - esac - fi - ;; + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component gruel: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component gruel: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + +fi + + gruel_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + gruel_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + gruel_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` + + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi + + : + fi + fi + + + + if test $passed != with; then + gruel_INCLUDES="\ +-I\${abs_top_srcdir}/gruel/src/include \ +-I\${abs_top_builddir}/gruel/src/include" + gruel_LA="\${abs_top_builddir}/gruel/src/lib/libgruel.la" + gruel_LIBDIRPATH="\${abs_top_builddir}/gruel/src/lib:\${abs_top_builddir}/gruel/src/lib/.libs" + fi + + ac_config_files="$ac_config_files gruel/Makefile gruel/gruel.pc gruel/src/Makefile gruel/src/include/Makefile gruel/src/include/gruel/Makefile gruel/src/include/gruel/inet.h gruel/src/lib/Makefile" + + + if test "${ac_cv_header_arpa_inet_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for arpa/inet.h" >&5 +$as_echo_n "checking for arpa/inet.h... " >&6; } +if test "${ac_cv_header_arpa_inet_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_arpa_inet_h" >&5 +$as_echo "$ac_cv_header_arpa_inet_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking arpa/inet.h usability" >&5 +$as_echo_n "checking arpa/inet.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking arpa/inet.h presence" >&5 +$as_echo_n "checking arpa/inet.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for arpa/inet.h" >&5 +$as_echo_n "checking for arpa/inet.h... " >&6; } +if test "${ac_cv_header_arpa_inet_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_arpa_inet_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_arpa_inet_h" >&5 +$as_echo "$ac_cv_header_arpa_inet_h" >&6; } + +fi +if test "x$ac_cv_header_arpa_inet_h" = x""yes; then + GR_HAVE_ARPA_INET=1 +else + GR_HAVE_ARPA_INET=0 +fi + + + if test "${ac_cv_header_netinet_in_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for netinet/in.h" >&5 +$as_echo_n "checking for netinet/in.h... " >&6; } +if test "${ac_cv_header_netinet_in_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_h" >&5 +$as_echo "$ac_cv_header_netinet_in_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking netinet/in.h usability" >&5 +$as_echo_n "checking netinet/in.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown + ac_header_compiler=no +fi -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking netinet/in.h presence" >&5 +$as_echo_n "checking netinet/in.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; + ac_header_preproc=no +fi -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&2;} -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for netinet/in.h" >&5 +$as_echo_n "checking for netinet/in.h... " >&6; } +if test "${ac_cv_header_netinet_in_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_netinet_in_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_h" >&5 +$as_echo "$ac_cv_header_netinet_in_h" >&6; } -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no +fi +if test "x$ac_cv_header_netinet_in_h" = x""yes; then + GR_HAVE_NETINET_IN=1 +else + GR_HAVE_NETINET_IN=0 +fi - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; + if test "${ac_cv_header_byteswap_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for byteswap.h" >&5 +$as_echo_n "checking for byteswap.h... " >&6; } +if test "${ac_cv_header_byteswap_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_byteswap_h" >&5 +$as_echo "$ac_cv_header_byteswap_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking byteswap.h usability" >&5 +$as_echo_n "checking byteswap.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; + ac_header_compiler=no +fi -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking byteswap.h presence" >&5 +$as_echo_n "checking byteswap.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -freebsd1*) - dynamic_linker=no - ;; + ac_header_preproc=no +fi -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: byteswap.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: byteswap.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: byteswap.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: byteswap.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: byteswap.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: byteswap.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: byteswap.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: byteswap.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: byteswap.h: in the future, the compiler will take precedence" >&2;} + ;; - esac - ;; +esac +{ $as_echo "$as_me:$LINENO: checking for byteswap.h" >&5 +$as_echo_n "checking for byteswap.h... " >&6; } +if test "${ac_cv_header_byteswap_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_byteswap_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_byteswap_h" >&5 +$as_echo "$ac_cv_header_byteswap_h" >&6; } -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; +fi +if test "x$ac_cv_header_byteswap_h" = x""yes; then + GR_HAVE_BYTESWAP=1 +else + GR_HAVE_BYTESWAP=0 +fi -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + + + + + + + + gruel_with=no + if test $passed = no; then + if test x$enable_gruel = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gruel has errors; stopping." >&5 +$as_echo "$as_me: error: Component gruel has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gruel." >&5 +$as_echo "Not building component gruel." >&6; } + fi else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + if test $passed = with; then + with_dirs="$with_dirs gruel" + + if test "x${gruel_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gruel_INCLUDES}" + else + with_INCLUDES="${gruel_INCLUDES}"" ""$with_INCLUDES" + fi + gruel_INCLUDES= fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux + if test "x${gruel_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gruel_SWIG_INCLUDES}" else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; + with_SWIG_INCLUDES="${gruel_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gruel_SWIG_INCLUDES= + fi -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + if test "x${gruel_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gruel_PYDIRPATH}" + else + with_PYDIRPATH="${gruel_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gruel_PYDIRPATH= + fi - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; + if test "x${gruel_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gruel_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gruel_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gruel_SWIGDIRPATH= + fi + + + if test "x${gruel_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gruel_LIBDIRPATH}" + else + with_LIBDIRPATH="${gruel_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gruel_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gruel will be included from a pre-installed library and includes." >&5 +$as_echo "Component gruel will be included from a pre-installed library and includes." >&6; } + gruel_with=yes + else + gruel_LDFLAG= + if test x$enable_gruel != xno; then + : + build_dirs="$build_dirs gruel" + { $as_echo "$as_me:$LINENO: result: Component gruel passed configuration checks; building." >&5 +$as_echo "Component gruel passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gruel passed configuration checks; but not building." >&5 +$as_echo "Component gruel passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gruel" + gruel_skipped=yes + else + gruel_skipped=no + fi + -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; + passed=yes + # Check whether --enable-omnithread was given. +if test "${enable_omnithread+set}" = set; then + enableval=$enable_omnithread; +else -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; + enable_omnithread=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; +fi -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + + if test xgnuradio-omnithread = x; then + pc_comp_name="omnithread" + else + pc_comp_name="gnuradio-omnithread" + fi + + +# Check whether --with-omnithread was given. +if test "${with_omnithread+set}" = set; then + withval=$with_omnithread; if test "x$withval" != "xyes"; then + with_omnithread_val=$withval + with_omnithread=yes + fi fi -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then + if test x$with_omnithread = xyes; then + if test x$enable_omnithread = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component omnithread: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component omnithread: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else - # We can hardcode non-existant directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + + l_PKG_CONFIG_PATH=$with_omnithread_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH + + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component omnithread: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component omnithread: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi + + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported + + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with +else + passed=no fi -{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6; } + fi + fi + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component omnithread: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component omnithread: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless fi + omnithread_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + omnithread_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + omnithread_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac + : + fi + fi -cfgfile="$ofile" - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + if test $passed != with; then + omnithread_INCLUDES="-I\${abs_top_srcdir}/omnithread" + omnithread_LA="\${abs_top_builddir}/omnithread/libgromnithread.la" + omnithread_LIBDIRPATH="\${abs_top_builddir}/omnithread:\${abs_top_builddir}/omnithread/.libs" + fi -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL + ac_config_files="$ac_config_files omnithread/Makefile omnithread/gnuradio/Makefile omnithread/gnuradio-omnithread.pc" -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared -# Whether or not to build static libraries. -build_old_libs=$enable_static -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + omnithread_with=no + if test $passed = no; then + if test x$enable_omnithread = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component omnithread has errors; stopping." >&5 +$as_echo "$as_me: error: Component omnithread has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component omnithread." >&5 +$as_echo "Not building component omnithread." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs omnithread" -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install + if test "x${omnithread_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${omnithread_INCLUDES}" + else + with_INCLUDES="${omnithread_INCLUDES}"" ""$with_INCLUDES" + fi + omnithread_INCLUDES= + fi -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os + if test "x${omnithread_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${omnithread_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${omnithread_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + omnithread_SWIG_INCLUDES= + fi + + + if test "x${omnithread_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${omnithread_PYDIRPATH}" + else + with_PYDIRPATH="${omnithread_PYDIRPATH}"":""$with_PYDIRPATH" + fi + omnithread_PYDIRPATH= + fi + + + if test "x${omnithread_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${omnithread_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${omnithread_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + omnithread_SWIGDIRPATH= + fi + + + if test "x${omnithread_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${omnithread_LIBDIRPATH}" + else + with_LIBDIRPATH="${omnithread_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + omnithread_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component omnithread will be included from a pre-installed library and includes." >&5 +$as_echo "Component omnithread will be included from a pre-installed library and includes." >&6; } + omnithread_with=yes + else + omnithread_LDFLAG= + if test x$enable_omnithread != xno; then + + build_dirs="$build_dirs omnithread" + { $as_echo "$as_me:$LINENO: result: Component omnithread passed configuration checks; building." >&5 +$as_echo "Component omnithread passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component omnithread passed configuration checks; but not building." >&5 +$as_echo "Component omnithread passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs omnithread" + omnithread_skipped=yes + else + omnithread_skipped=no + fi + + + + + + + + + + + passed=yes + # Check whether --enable-gcell was given. +if test "${enable_gcell+set}" = set; then + enableval=$enable_gcell; +else + + enable_gcell=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + +fi + -# An echo program that does not interpret backslashes. -echo=$lt_echo -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS -# A C compiler. -LTCC=$lt_LTCC -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gcell requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gcell requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gcell requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component gcell requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# A language-specific compiler. -CC=$lt_compiler_F77 -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 + if test $passed = yes; then + { $as_echo "$as_me:$LINENO: checking whether host_cpu is powerpc*" >&5 +$as_echo_n "checking whether host_cpu is powerpc*... " >&6; } + case "$host_cpu" in + powerpc*) + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + ;; + *) + passed=no + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac -# An ERE matcher. -EGREP=$lt_EGREP + # Extract the first word of "spu-gcc", so it can be a program name with args. +set dummy spu-gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_SPU_GCC_PROG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$SPU_GCC_PROG"; then + ac_cv_prog_SPU_GCC_PROG="$SPU_GCC_PROG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_SPU_GCC_PROG="yes" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS -# The linker used to build libraries. -LD=$lt_LD_F77 + test -z "$ac_cv_prog_SPU_GCC_PROG" && ac_cv_prog_SPU_GCC_PROG="no" +fi +fi +SPU_GCC_PROG=$ac_cv_prog_SPU_GCC_PROG +if test -n "$SPU_GCC_PROG"; then + { $as_echo "$as_me:$LINENO: result: $SPU_GCC_PROG" >&5 +$as_echo "$SPU_GCC_PROG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi -# Whether we need hard or soft links. -LN_S=$lt_LN_S -# A BSD-compatible nm program. -NM=$lt_NM + if test $SPU_GCC_PROG = no; then + passed=no + fi + fi -# A symbol stripping program -STRIP=$lt_STRIP + if test $passed != with; then + gcell_INCLUDES="-I\${abs_top_srcdir}/gcell/include" + gcell_LA="\${abs_top_builddir}/gcell/lib/libgcell.la" + gcell_spu_INCLUDES="-I\${abs_top_srcdir}/gcell/include" + gcell_spu_LA="\${abs_top_builddir}/gcell/lib/spu/libgcell_spu.a" -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" + fi -# Used on cygwin: assembler. -AS="$AS" + ac_config_files="$ac_config_files gcell/Makefile gcell/gcell.pc gcell/gcell_spu.pc gcell/include/Makefile gcell/include/gcell/Makefile gcell/include/gcell/spu/Makefile gcell/lib/Makefile gcell/lib/spu/Makefile gcell/lib/general/Makefile gcell/lib/wrapper/Makefile gcell/lib/runtime/Makefile gcell/apps/Makefile gcell/apps/spu/Makefile gcell/ibm/Makefile" -# The name of the directory that contains temporary libtool files. -objdir=$objdir -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 -# Object file suffix (normally "o"). -objext="$ac_objext" + gcell_with=no + if test $passed = no; then + if test x$enable_gcell = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gcell has errors; stopping." >&5 +$as_echo "$as_me: error: Component gcell has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gcell." >&5 +$as_echo "Not building component gcell." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gcell" -# Old archive suffix (normally "a"). -libext="$libext" + if test "x${gcell_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gcell_INCLUDES}" + else + with_INCLUDES="${gcell_INCLUDES}"" ""$with_INCLUDES" + fi + gcell_INCLUDES= + fi -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' -# Executable file suffix (normally ""). -exeext="$exeext" + if test "x${gcell_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gcell_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gcell_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gcell_SWIG_INCLUDES= + fi -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len + if test "x${gcell_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gcell_PYDIRPATH}" + else + with_PYDIRPATH="${gcell_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gcell_PYDIRPATH= + fi -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 -# Must we lock files when doing compilation? -need_locks=$lt_need_locks + if test "x${gcell_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gcell_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gcell_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gcell_SWIGDIRPATH= + fi -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix -# Do we need a version for libraries? -need_version=$need_version + if test "x${gcell_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gcell_LIBDIRPATH}" + else + with_LIBDIRPATH="${gcell_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gcell_LIBDIRPATH= + fi -# Whether dlopen is supported. -dlopen_support=$enable_dlopen + { $as_echo "$as_me:$LINENO: result: Component gcell will be included from a pre-installed library and includes." >&5 +$as_echo "Component gcell will be included from a pre-installed library and includes." >&6; } + gcell_with=yes + else + gcell_LDFLAG= + if test x$enable_gcell != xno; then + : + build_dirs="$build_dirs gcell" + { $as_echo "$as_me:$LINENO: result: Component gcell passed configuration checks; building." >&5 +$as_echo "Component gcell passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gcell passed configuration checks; but not building." >&5 +$as_echo "Component gcell passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gcell" + gcell_skipped=yes + else + gcell_skipped=no + fi -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 -# Library versioning type. -version_type=$version_type -# Format of library name prefix. -libname_spec=$lt_libname_spec -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec + passed=yes + # Check whether --enable-gnuradio-core was given. +if test "${enable_gnuradio_core+set}" = set; then + enableval=$enable_gnuradio_core; +else -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds + enable_gnuradio_core=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 +fi -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 + if test x = x; then + pc_comp_name="gnuradio-core" + else + pc_comp_name="" + fi -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 +# Check whether --with-gnuradio-core was given. +if test "${with_gnuradio_core+set}" = set; then + withval=$with_gnuradio_core; if test "x$withval" != "xyes"; then + with_gnuradio_core_val=$withval + with_gnuradio_core=yes + fi +fi -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 + if test x$with_gnuradio_core = xyes; then + if test x$enable_gnuradio_core = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-core: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component gnuradio-core: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method + l_PKG_CONFIG_PATH=$with_gnuradio_core_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-core: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component gnuradio-core: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes +else -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with +else + passed=no +fi + fi + fi + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-core: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component gnuradio-core: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds +fi -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval + gnuradio_core_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + gnuradio_core_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + gnuradio_core_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + gnuradio_core_SWIGDIRPATH="$gnuradio_core_INCLUDEDIR/swig" + gnuradio_core_I="$gnuradio_core_SWIGDIRPATH/gnuradio.i" + gnuradio_core_SWIG_INCLUDES="-I$gnuradio_core_SWIGDIRPATH" + gnuradio_core_PYDIRPATH=$pythondir -# This is the shared library runtime path variable. -runpath_var=$runpath_var + fi + fi -# This is the shared library path variable. -shlibpath_var=$shlibpath_var -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs + if test $passed != no; then + if test $passed = yes; then + if test x$gruel_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gnuradio-core requires gruel, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gnuradio-core requires gruel, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gruel_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-core requires gruel to be included as --with-gruel[=arg]" >&5 +$as_echo "$as_me: error: Component gnuradio-core requires gruel to be included as --with-gruel[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gnuradio-core requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gnuradio-core requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-core requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component gnuradio-core requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 + if test $passed = yes; then -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 +acx_cblas_ok=no -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 +# Check whether --with-cblas was given. +if test "${with_cblas+set}" = set; then + withval=$with_cblas; +fi -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +case $with_cblas in + yes | "") ;; + no) acx_cblas_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) CBLAS_LIBS="$with_cblas" ;; + *) CBLAS_LIBS="-l$with_cblas" ;; +esac -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_F77" +acx_cblas_save_LIBS="$LIBS" +LIBS="$LIBS $FLIBS" -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 +# First, check CBLAS_LIBS environment variable +if test $acx_cblas_ok = no; then +if test "x$CBLAS_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$CBLAS_LIBS $LIBS" + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in $CBLAS_LIBS" >&5 +$as_echo_n "checking for cblas_sgemm in $CBLAS_LIBS... " >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + acx_cblas_ok=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CBLAS_LIBS="" +fi -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: $acx_cblas_ok" >&5 +$as_echo "$acx_cblas_ok" >&6; } + LIBS="$save_LIBS" +fi +fi -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 +# CBLAS linked to by default? (happens on some supercomputers) +if test $acx_cblas_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS" + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm" >&5 +$as_echo_n "checking for cblas_sgemm... " >&6; } +if test "${ac_cv_func_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define cblas_sgemm to an innocuous variant, in case declares cblas_sgemm. + For example, HP-UX 11i declares gettimeofday. */ +#define cblas_sgemm innocuous_cblas_sgemm -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char cblas_sgemm (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ -# ### END LIBTOOL TAG CONFIG: $tagname +#ifdef __STDC__ +# include +#else +# include +#endif -__EOF__ +#undef cblas_sgemm +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_cblas_sgemm || defined __stub___cblas_sgemm +choke me +#endif +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_cblas_sgemm=yes else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_cv_func_cblas_sgemm=no +fi -CC="$lt_save_CC" +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_cblas_sgemm" >&5 +$as_echo "$ac_cv_func_cblas_sgemm" >&6; } +if test "x$ac_cv_func_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes +fi - else - tagname="" - fi - ;; + LIBS="$save_LIBS" +fi - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then +# CBLAS in ATLAS library? (http://math-atlas.sourceforge.net/) +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for ATL_xerbla in -latlas" >&5 +$as_echo_n "checking for ATL_xerbla in -latlas... " >&6; } +if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-latlas -latlas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ATL_xerbla (); +int +main () +{ +return ATL_xerbla (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_atlas_ATL_xerbla=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Source file extension for Java test sources. -ac_ext=java + ac_cv_lib_atlas_ATL_xerbla=no +fi -# Object file extension for compiled Java test sources. -objext=o -objext_GCJ=$objext +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 +$as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; } +if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_dgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas -latlas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}\n" +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_dgemm (); +int +main () +{ +return cblas_dgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cblas_cblas_dgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' + ac_cv_lib_cblas_cblas_dgemm=no +fi -# ltmain only uses $CC for tagged configurations so make sure $CC is set. +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then + acx_cblas_ok=yes + CBLAS_LIBS="-lcblas -latlas" +fi -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} +fi -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} +fi -# Allow CC to be a program name with arguments. -compiler=$CC +# CBLAS in ATLAS library in /usr/lib64/atlas (if not cross-compiling) +if test $acx_cblas_ok = no && test "$cross_compiling" = no; then + unset ac_cv_lib_atlas_ATL_xerbla + unset ac_cv_lib_cblas_cblas_dgemm + { $as_echo "$as_me:$LINENO: checking for ATL_xerbla in -latlas" >&5 +$as_echo_n "checking for ATL_xerbla in -latlas... " >&6; } +if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-latlas -L/usr/lib64/atlas -latlas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ATL_xerbla (); +int +main () +{ +return ATL_xerbla (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_atlas_ATL_xerbla=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* + ac_cv_lib_atlas_ATL_xerbla=no +fi -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 +$as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; } +if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_dgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas -L/usr/lib64/atlas -latlas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_dgemm (); +int +main () +{ +return cblas_dgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cblas_cblas_dgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -compiler_GCJ=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + ac_cv_lib_cblas_cblas_dgemm=no +fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then + acx_cblas_ok=yes + CBLAS_LIBS="-L/usr/lib64/atlas -lcblas -latlas" +fi -# GCJ did not exist at the time GCC didn't implicitly link libc in. -archive_cmds_need_lc_GCJ=no +fi -old_archive_cmds_GCJ=$old_archive_cmds +fi +# CBLAS in ATLAS library in /usr/lib/atlas (if not cross-compiling) +if test $acx_cblas_ok = no && test "$cross_compiling" = no; then + unset ac_cv_lib_atlas_ATL_xerbla + unset ac_cv_lib_cblas_cblas_dgemm + { $as_echo "$as_me:$LINENO: checking for ATL_xerbla in -latlas" >&5 +$as_echo_n "checking for ATL_xerbla in -latlas... " >&6; } +if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-latlas -L/usr/lib/atlas -latlas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -lt_prog_compiler_no_builtin_flag_GCJ= +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ATL_xerbla (); +int +main () +{ +return ATL_xerbla (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_atlas_ATL_xerbla=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + ac_cv_lib_atlas_ATL_xerbla=no +fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 +$as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; } +if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_dgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas -L/usr/lib/atlas -latlas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_dgemm (); +int +main () +{ +return cblas_dgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cblas_cblas_dgemm=yes else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17592: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:17596: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_cblas_cblas_dgemm=no fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" -else - : +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi - +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then + acx_cblas_ok=yes + CBLAS_LIBS="-L/usr/lib/atlas -lcblas -latlas" fi -lt_prog_compiler_wl_GCJ= -lt_prog_compiler_pic_GCJ= -lt_prog_compiler_static_GCJ= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_static_GCJ='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; +fi - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' - ;; +fi - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; +# CBLAS in PhiPACK libraries? (requires generic BLAS lib, too) +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_sgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_GCJ='-fno-common' - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cblas_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - interix3*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; + ac_cv_lib_cblas_cblas_sgemm=no +fi - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_GCJ=no - enable_shared=no - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_sgemm" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_dgemm in -ldgemm" >&5 +$as_echo_n "checking for cblas_dgemm in -ldgemm... " >&6; } +if test "${ac_cv_lib_dgemm_cblas_dgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldgemm -lblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_GCJ=-Kconform_pic - fi - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_dgemm (); +int +main () +{ +return cblas_dgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dgemm_cblas_dgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - ;; + ac_cv_lib_dgemm_cblas_dgemm=no +fi - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_GCJ='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - else - lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_GCJ='-qnocommon' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - esac - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dgemm_cblas_dgemm" >&5 +$as_echo "$ac_cv_lib_dgemm_cblas_dgemm" >&6; } +if test "x$ac_cv_lib_dgemm_cblas_dgemm" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lsgemm" >&5 +$as_echo_n "checking for cblas_sgemm in -lsgemm... " >&6; } +if test "${ac_cv_lib_sgemm_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsgemm -lblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_sgemm_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' - ;; + ac_cv_lib_sgemm_cblas_sgemm=no +fi - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_GCJ='-non_shared' - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_sgemm_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_sgemm_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_sgemm_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lsgemm -ldgemm -lblas" +fi - newsos6) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; +fi - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-fpic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - esac - ;; +fi - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; +fi - solaris*) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_GCJ='-Qoption ld ';; - *) - lt_prog_compiler_wl_GCJ='-Wl,';; - esac - ;; +# BLAS in Intel MKL library? +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lmkl" >&5 +$as_echo_n "checking for cblas_sgemm in -lmkl... " >&6; } +if test "${ac_cv_lib_mkl_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmkl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - sunos4*) - lt_prog_compiler_wl_GCJ='-Qoption ld ' - lt_prog_compiler_pic_GCJ='-PIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_mkl_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; + ac_cv_lib_mkl_cblas_sgemm=no +fi - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_GCJ='-Kconform_pic' - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mkl_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_mkl_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_mkl_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes;CBLAS_LIBS="-lmkl" +fi - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; +fi - unicos*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_can_build_shared_GCJ=no - ;; +# CBLAS in Apple vecLib library? +if test $acx_cblas_ok = no; then + save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm" >&5 +$as_echo_n "checking for cblas_sgemm... " >&6; } +if test "${ac_cv_func_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define cblas_sgemm to an innocuous variant, in case declares cblas_sgemm. + For example, HP-UX 11i declares gettimeofday. */ +#define cblas_sgemm innocuous_cblas_sgemm - uts4*) - lt_prog_compiler_pic_GCJ='-pic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char cblas_sgemm (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ - *) - lt_prog_compiler_can_build_shared_GCJ=no - ;; - esac - fi +#ifdef __STDC__ +# include +#else +# include +#endif -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } +#undef cblas_sgemm -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_GCJ"; then +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_cblas_sgemm || defined __stub___cblas_sgemm +choke me +#endif -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_cblas_sgemm=yes else - lt_prog_compiler_pic_works_GCJ=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_GCJ" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17860: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:17864: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_GCJ=yes - fi - fi - $rm conftest* + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_func_cblas_sgemm=no fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } -if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then - case $lt_prog_compiler_pic_GCJ in - "" | " "*) ;; - *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; - esac -else - lt_prog_compiler_pic_GCJ= - lt_prog_compiler_can_build_shared_GCJ=no +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_cblas_sgemm" >&5 +$as_echo "$ac_cv_func_cblas_sgemm" >&6; } +if test "x$ac_cv_func_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes;CBLAS_LIBS="-framework vecLib" fi + LIBS="$save_LIBS" fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_GCJ= - ;; - *) - lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" - ;; -esac -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# CBLAS in Alpha CXML library? +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lcxml" >&5 +$as_echo_n "checking for cblas_sgemm in -lcxml... " >&6; } +if test "${ac_cv_lib_cxml_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 else - lt_prog_compiler_static_works_GCJ=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_GCJ=yes - fi - else - lt_prog_compiler_static_works_GCJ=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcxml $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cxml_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_cxml_cblas_sgemm=no fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } -if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then - : -else - lt_prog_compiler_static_GCJ= +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cxml_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_cxml_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_cxml_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes;CBLAS_LIBS="-lcxml" fi +fi -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# CBLAS in Alpha DXML library? (now called CXML, see above) +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -ldxml" >&5 +$as_echo_n "checking for cblas_sgemm in -ldxml... " >&6; } +if test "${ac_cv_lib_dxml_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 else - lt_cv_prog_compiler_c_o_GCJ=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldxml $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17964: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:17968: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_GCJ=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dxml_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_dxml_cblas_sgemm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dxml_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_dxml_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_dxml_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes;CBLAS_LIBS="-ldxml" fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } +fi -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi +# CBLAS in Sun Performance library? +if test $acx_cblas_ok = no; then + if test "x$GCC" != xyes; then # only works with Sun CC + { $as_echo "$as_me:$LINENO: checking for acosp in -lsunmath" >&5 +$as_echo_n "checking for acosp in -lsunmath... " >&6; } +if test "${ac_cv_lib_sunmath_acosp+set}" = set; then + $as_echo_n "(cached) " >&6 else - need_locks=no + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsunmath $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acosp (); +int +main () +{ +return acosp (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_sunmath_acosp=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_sunmath_acosp=no fi -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_sunmath_acosp" >&5 +$as_echo "$ac_cv_lib_sunmath_acosp" >&6; } +if test "x$ac_cv_lib_sunmath_acosp" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lsunperf" >&5 +$as_echo_n "checking for cblas_sgemm in -lsunperf... " >&6; } +if test "${ac_cv_lib_sunperf_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsunperf -lsunmath $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - runpath_var= - allow_undefined_flag_GCJ= - enable_shared_with_static_runtimes_GCJ=no - archive_cmds_GCJ= - archive_expsym_cmds_GCJ= - old_archive_From_new_cmds_GCJ= - old_archive_from_expsyms_cmds_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - thread_safe_flag_spec_GCJ= - hardcode_libdir_flag_spec_GCJ= - hardcode_libdir_flag_spec_ld_GCJ= - hardcode_libdir_separator_GCJ= - hardcode_direct_GCJ=no - hardcode_minus_L_GCJ=no - hardcode_shlibpath_var_GCJ=unsupported - link_all_deplibs_GCJ=unknown - hardcode_automatic_GCJ=no - module_cmds_GCJ= - module_expsym_cmds_GCJ= - always_export_symbols_GCJ=no - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_GCJ= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_sunperf_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac + ac_cv_lib_sunperf_cblas_sgemm=no +fi - ld_shlibs_GCJ=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_sunperf_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_sunperf_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_sunperf_cblas_sgemm" = x""yes; then + CBLAS_LIBS="-xlic_lib=sunperf -lsunmath" + acx_cblas_ok=yes +fi - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_GCJ= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac +fi - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_GCJ=no - cat <&2 + fi +fi -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. +# CBLAS in SCSL library? (SGI/Cray Scientific Library) +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lscs" >&5 +$as_echo_n "checking for cblas_sgemm in -lscs... " >&6; } +if test "${ac_cv_lib_scs_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lscs $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -EOF - fi - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_scs_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_GCJ=no - ;; + ac_cv_lib_scs_cblas_sgemm=no +fi - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_GCJ=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_scs_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_scs_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_scs_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lscs" +fi - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_GCJ='-L$libdir' - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=no - enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_GCJ=no - fi - ;; +fi - interix3*) - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; +# CBLAS in SGIMATH library? +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lcomplib.sgimath" >&5 +$as_echo_n "checking for cblas_sgemm in -lcomplib.sgimath... " >&6; } +if test "${ac_cv_lib_complib_sgimath_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcomplib.sgimath $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_complib_sgimath_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - link_all_deplibs_GCJ=no - else - ld_shlibs_GCJ=no - fi - ;; + ac_cv_lib_complib_sgimath_cblas_sgemm=no +fi - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_complib_sgimath_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_complib_sgimath_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_complib_sgimath_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lcomplib.sgimath" +fi - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_GCJ=no - cat <&2 +fi -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. +# CBLAS in IBM ESSL library? (requires generic CBLAS lib, too) +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_sgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cblas_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_GCJ=no - cat <<_LT_EOF 1>&2 + ac_cv_lib_cblas_cblas_sgemm=no +fi -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_sgemm" = x""yes; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lessl" >&5 +$as_echo_n "checking for cblas_sgemm in -lessl... " >&6; } +if test "${ac_cv_lib_essl_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lessl -lblas $FLIBS $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - ;; +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_essl_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - sunos4*) - archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; + ac_cv_lib_essl_cblas_sgemm=no +fi - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_essl_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_essl_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_essl_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lessl -lblas" +fi - if test "$ld_shlibs_GCJ" = no; then - runpath_var= - hardcode_libdir_flag_spec_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=yes - archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_GCJ=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_GCJ=unsupported - fi - ;; +fi - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no +fi - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac +# Generic CBLAS library? +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_sgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); +int +main () +{ +return cblas_sgemm (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_cblas_cblas_sgemm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + ac_cv_lib_cblas_cblas_sgemm=no +fi - archive_cmds_GCJ='' - hardcode_direct_GCJ=yes - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cblas_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lcblas" +fi - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_GCJ=yes - else - # We have old collect2 - hardcode_direct_GCJ=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_GCJ=yes - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_libdir_separator_GCJ= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi +fi - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_GCJ=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_GCJ='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF +# Generic BLAS library? +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lblas" >&5 +$as_echo_n "checking for cblas_sgemm in -lblas... " >&6; } +if test "${ac_cv_lib_blas_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); int main () { - +return cblas_sgemm (); ; return 0; } @@ -18435,55 +32744,69 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_blas_cblas_sgemm=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + ac_cv_lib_blas_cblas_sgemm=no fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_blas_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_blas_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_blas_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lblas" +fi - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_GCJ="-z nodefs" - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF +fi + +# GSL generic CBLAS library? +if test $acx_cblas_ok = no; then + { $as_echo "$as_me:$LINENO: checking for cblas_sgemm in -lgslcblas" >&5 +$as_echo_n "checking for cblas_sgemm in -lgslcblas... " >&6; } +if test "${ac_cv_lib_gslcblas_cblas_sgemm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgslcblas $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_sgemm (); int main () { - +return cblas_sgemm (); ; return 0; } @@ -18494,2305 +32817,2758 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_gslcblas_cblas_sgemm=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + ac_cv_lib_gslcblas_cblas_sgemm=no fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_gslcblas_cblas_sgemm" >&5 +$as_echo "$ac_cv_lib_gslcblas_cblas_sgemm" >&6; } +if test "x$ac_cv_lib_gslcblas_cblas_sgemm" = x""yes; then + acx_cblas_ok=yes; CBLAS_LIBS="-lgslcblas" +fi - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_GCJ=' ${wl}-bernotok' - allow_undefined_flag_GCJ=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_GCJ='$convenience' - archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; +fi - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_GCJ=no - ;; - bsdi[45]*) - export_dynamic_flag_spec_GCJ=-rdynamic - ;; - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_GCJ=' ' - allow_undefined_flag_GCJ=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_GCJ='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_GCJ=yes - ;; +LIBS="$acx_cblas_save_LIBS" + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$acx_cblas_ok" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CBLAS 1 +_ACEOF + + : +else + acx_cblas_ok=no - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_GCJ=no - hardcode_direct_GCJ=no - hardcode_automatic_GCJ=yes - hardcode_shlibpath_var_GCJ=unsupported - whole_archive_flag_spec_GCJ='' - link_all_deplibs_GCJ=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' +fi + + + + +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for GSL" >&5 +$as_echo_n "checking for GSL... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GSL_CFLAGS"; then + pkg_cv_GSL_CFLAGS="$GSL_CFLAGS" else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_GCJ=no - ;; - esac + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gsl >= 1.10\"") >&5 + ($PKG_CONFIG --exists --print-errors "gsl >= 1.10") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GSL_CFLAGS=`$PKG_CONFIG --cflags "gsl >= 1.10" 2>/dev/null` +else + pkg_failed=yes +fi fi - ;; +else + pkg_failed=untried +fi - dgux*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$GSL_LIBS"; then + pkg_cv_GSL_LIBS="$GSL_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gsl >= 1.10\"") >&5 + ($PKG_CONFIG --exists --print-errors "gsl >= 1.10") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GSL_LIBS=`$PKG_CONFIG --libs --static "gsl >= 1.10" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_GSL_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_GSL_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$GSL_LIBS"; then + pkg_cv_GSL_LIBS="$GSL_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gsl >= 1.10\"") >&5 + ($PKG_CONFIG --exists --print-errors "gsl >= 1.10") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GSL_LIBS=`$PKG_CONFIG --libs --static "gsl >= 1.10" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi - freebsd1*) - ld_shlibs_GCJ=no - ;; +if test -n "$PKG_CONFIG"; then + if test -n "$GSL_INCLUDEDIR"; then + pkg_cv_GSL_INCLUDEDIR="$GSL_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gsl >= 1.10\"") >&5 + ($PKG_CONFIG --exists --print-errors "gsl >= 1.10") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_GSL_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "gsl >= 1.10" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - hpux9*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes +if test $pkg_failed = yes; then - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - ;; +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gsl >= 1.10"` + else + GSL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gsl >= 1.10"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GSL_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no;{ $as_echo "$as_me:$LINENO: result: gnuradio-core requires package gsl >= 1.10, not found." >&5 +$as_echo "gnuradio-core requires package gsl >= 1.10, not found." >&6; } +elif test $pkg_failed = untried; then + passed=no;{ $as_echo "$as_me:$LINENO: result: gnuradio-core requires package gsl >= 1.10, not found." >&5 +$as_echo "gnuradio-core requires package gsl >= 1.10, not found." >&6; } +else + GSL_CFLAGS=$pkg_cv_GSL_CFLAGS + GSL_LIBS=$pkg_cv_GSL_LIBS + GSL_INCLUDEDIR=$pkg_cv_GSL_INCLUDEDIR + + GSL_CPPFLAGS="" + for flag in $GSL_CFLAGS; do + case $flag in + -I* | -D* | -U*) GSL_CPPFLAGS="$GSL_CPPFLAGS $flag" ;; + esac + done + pkg_cv_GSL_CPPFLAGS=$GSL_CPPFLAGS - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + fi - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - fi - ;; + if test $passed != with; then + gnuradio_core_INCLUDES="\ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/runtime \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/general \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/general \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/gengen \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/gengen \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/filter \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/filter \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/missing \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/reed-solomon \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/viterbi \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/io \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/g72x \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/swig \ +-I\${abs_top_srcdir}/gnuradio-core/src/lib/hier \ +-I\${abs_top_builddir}/gnuradio-core/src/lib/swig \ +\$(FFTW3F_CFLAGS) \ +\$(GSL_CFLAGS)" + gnuradio_core_LA="\${abs_top_builddir}/gnuradio-core/src/lib/libgnuradio-core.la" + gnuradio_core_LIBDIRPATH="\${abs_top_builddir}/gnuradio-core/src/lib:\${abs_top_builddir}/gnuradio-core/src/lib/.libs" + gnuradio_core_SWIGDIRPATH="\${abs_top_builddir}/gnuradio-core/src/lib/swig:\${abs_top_builddir}/gnuradio-core/src/lib/swig/.libs:\${abs_top_srcdir}/gnuradio-core/src/lib/swig" + gnuradio_core_PYDIRPATH="\${abs_top_srcdir}/gnuradio-core/src/python" + fi - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - ;; - *) - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - ;; - esac - fi - ;; - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - link_all_deplibs_GCJ=yes - ;; - netbsd* | netbsdelf*-gnu) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; + ac_config_files="$ac_config_files gnuradio-core/Makefile gnuradio-core/gnuradio-core.pc gnuradio-core/src/Makefile gnuradio-core/src/gen_interpolator_taps/Makefile gnuradio-core/src/lib/Makefile gnuradio-core/src/lib/filter/Makefile gnuradio-core/src/lib/g72x/Makefile gnuradio-core/src/lib/general/Makefile gnuradio-core/src/lib/general/gr_prefix.cc gnuradio-core/src/lib/gengen/Makefile gnuradio-core/src/lib/io/Makefile gnuradio-core/src/lib/missing/Makefile gnuradio-core/src/lib/reed-solomon/Makefile gnuradio-core/src/lib/viterbi/Makefile gnuradio-core/src/lib/runtime/Makefile gnuradio-core/src/lib/hier/Makefile gnuradio-core/src/lib/swig/Makefile gnuradio-core/src/python/Makefile gnuradio-core/src/python/bin/Makefile gnuradio-core/src/python/gnuradio/Makefile gnuradio-core/src/python/gnuradio/blks2/Makefile gnuradio-core/src/python/gnuradio/blks2impl/Makefile gnuradio-core/src/python/gnuradio/gr/Makefile gnuradio-core/src/python/gnuradio/gr/run_tests gnuradio-core/src/python/gnuradio/gru/Makefile gnuradio-core/src/python/gnuradio/gruimpl/Makefile gnuradio-core/src/python/gnuradio/vocoder/Makefile gnuradio-core/src/tests/Makefile gnuradio-core/src/utils/Makefile" - newsos6) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_shlibpath_var_GCJ=no - ;; - openbsd*) - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - os2*) - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - allow_undefined_flag_GCJ=unsupported - archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - ;; + gnuradio_core_with=no + if test $passed = no; then + if test x$enable_gnuradio_core = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-core has errors; stopping." >&5 +$as_echo "$as_me: error: Component gnuradio-core has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gnuradio-core." >&5 +$as_echo "Not building component gnuradio-core." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gnuradio-core" - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' + if test "x${gnuradio_core_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gnuradio_core_INCLUDES}" + else + with_INCLUDES="${gnuradio_core_INCLUDES}"" ""$with_INCLUDES" + fi + gnuradio_core_INCLUDES= + fi - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_GCJ='-rpath $libdir' - fi - hardcode_libdir_separator_GCJ=: - ;; - solaris*) - no_undefined_flag_GCJ=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_shlibpath_var_GCJ=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs_GCJ=yes - ;; + if test "x${gnuradio_core_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gnuradio_core_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gnuradio_core_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gnuradio_core_SWIG_INCLUDES= + fi - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - sysv4) - case $host_vendor in - sni) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_GCJ='$CC -r -o $output$reload_objs' - hardcode_direct_GCJ=no - ;; - motorola) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_GCJ=no - ;; + if test "x${gnuradio_core_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gnuradio_core_PYDIRPATH}" + else + with_PYDIRPATH="${gnuradio_core_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gnuradio_core_PYDIRPATH= + fi - sysv4.3*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - export_dynamic_flag_spec_GCJ='-Bexport' - ;; - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_GCJ=yes - fi - ;; + if test "x${gnuradio_core_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gnuradio_core_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gnuradio_core_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gnuradio_core_SWIGDIRPATH= + fi - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) - no_undefined_flag_GCJ='${wl}-z,text' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; + if test "x${gnuradio_core_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gnuradio_core_LIBDIRPATH}" + else + with_LIBDIRPATH="${gnuradio_core_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gnuradio_core_LIBDIRPATH= + fi - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_GCJ='${wl}-z,text' - allow_undefined_flag_GCJ='${wl}-z,nodefs' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-Bexport' - runpath_var='LD_RUN_PATH' + { $as_echo "$as_me:$LINENO: result: Component gnuradio-core will be included from a pre-installed library and includes." >&5 +$as_echo "Component gnuradio-core will be included from a pre-installed library and includes." >&6; } + gnuradio_core_with=yes + else + gnuradio_core_LDFLAG= + if test x$enable_gnuradio_core != xno; then + ac_config_commands="$ac_config_commands run_tests_core" + + + build_dirs="$build_dirs gnuradio-core" + { $as_echo "$as_me:$LINENO: result: Component gnuradio-core passed configuration checks; building." >&5 +$as_echo "Component gnuradio-core passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gnuradio-core passed configuration checks; but not building." >&5 +$as_echo "Component gnuradio-core passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gnuradio-core" + gnuradio_core_skipped=yes + else + gnuradio_core_skipped=no + fi - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - uts4*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - *) - ld_shlibs_GCJ=no - ;; - esac - fi -{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } -test "$ld_shlibs_GCJ" = no && can_build_shared=no -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_GCJ" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_GCJ=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_GCJ in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_GCJ - pic_flag=$lt_prog_compiler_pic_GCJ - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ - allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_GCJ=no - else - archive_cmds_need_lc_GCJ=yes - fi - allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } - ;; - esac - fi - ;; -esac -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi + + + + passed=yes + # Check whether --enable-pmt was given. +if test "${enable_pmt+set}" = set; then + enableval=$enable_pmt; else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + + enable_pmt=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -need_lib_prefix=unknown -hardcode_into_libs=no -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + if test x = x; then + pc_comp_name="pmt" else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' + pc_comp_name="" fi - shlibpath_var=LIBPATH - fi - ;; -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; +# Check whether --with-pmt was given. +if test "${with_pmt+set}" = set; then + withval=$with_pmt; if test "x$withval" != "xyes"; then + with_pmt_val=$withval + with_pmt=yes + fi +fi -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; + if test x$with_pmt = xyes; then + if test x$enable_pmt = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component pmt: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component pmt: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes + l_PKG_CONFIG_PATH=$with_pmt_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component pmt: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component pmt: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes +else -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with +else + passed=no +fi + fi + fi + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component pmt: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component pmt: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; +fi -freebsd1*) - dynamic_linker=no - ;; + pmt_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + pmt_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + pmt_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - freebsd*) # from 4.6 on - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; + : + fi + fi -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + + + + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component pmt requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component pmt requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component pmt requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component pmt requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; -interix3*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; + if test $passed = yes; then -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; + if test x"$GUILE" = x; then + { $as_echo "$as_me:$LINENO: result: Component pmt requires guile, which was not found." >&5 +$as_echo "Component pmt requires guile, which was not found." >&6; } + passed=no + fi -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes + fi + if test $passed != with; then + pmt_INCLUDES="-I\${abs_top_srcdir}/pmt/src/lib" + pmt_LA="\${abs_top_builddir}/pmt/src/lib/libpmt.la" + fi - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi + ac_config_files="$ac_config_files pmt/Makefile pmt/pmt.pc pmt/doc/Makefile pmt/src/Makefile pmt/src/lib/Makefile pmt/src/scheme/Makefile pmt/src/scheme/gnuradio/Makefile" - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; -netbsdelf*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='NetBSD ld.elf_so' - ;; -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; + pmt_with=no + if test $passed = no; then + if test x$enable_pmt = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component pmt has errors; stopping." >&5 +$as_echo "$as_me: error: Component pmt has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component pmt." >&5 +$as_echo "Not building component pmt." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs pmt" -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; + if test "x${pmt_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${pmt_INCLUDES}" + else + with_INCLUDES="${pmt_INCLUDES}"" ""$with_INCLUDES" + fi + pmt_INCLUDES= + fi -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; + if test "x${pmt_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${pmt_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${pmt_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + pmt_SWIG_INCLUDES= + fi -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; + if test "x${pmt_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${pmt_PYDIRPATH}" + else + with_PYDIRPATH="${pmt_PYDIRPATH}"":""$with_PYDIRPATH" + fi + pmt_PYDIRPATH= + fi + + + if test "x${pmt_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${pmt_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${pmt_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + pmt_SWIGDIRPATH= + fi + + + if test "x${pmt_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${pmt_LIBDIRPATH}" + else + with_LIBDIRPATH="${pmt_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + pmt_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component pmt will be included from a pre-installed library and includes." >&5 +$as_echo "Component pmt will be included from a pre-installed library and includes." >&6; } + pmt_with=yes + else + pmt_LDFLAG= + if test x$enable_pmt != xno; then + + build_dirs="$build_dirs pmt" + { $as_echo "$as_me:$LINENO: result: Component pmt passed configuration checks; building." >&5 +$as_echo "Component pmt passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component pmt passed configuration checks; but not building." >&5 +$as_echo "Component pmt passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs pmt" + pmt_skipped=yes + else + pmt_skipped=no + fi + -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_GCJ= -if test -n "$hardcode_libdir_flag_spec_GCJ" || \ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - # We can hardcode non-existant directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && - test "$hardcode_minus_L_GCJ" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_GCJ=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_GCJ=immediate - fi + + passed=yes + # Check whether --enable-mblock was given. +if test "${enable_mblock+set}" = set; then + enableval=$enable_mblock; else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_GCJ=unsupported + + enable_mblock=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6; } -if test "$hardcode_action_GCJ" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless + + + + + if test x = x; then + pc_comp_name="mblock" + else + pc_comp_name="" + fi + + +# Check whether --with-mblock was given. +if test "${with_mblock+set}" = set; then + withval=$with_mblock; if test "x$withval" != "xyes"; then + with_mblock_val=$withval + with_mblock=yes + fi fi + if test x$with_mblock = xyes; then + if test x$enable_mblock = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component mblock: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component mblock: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_GCJ \ - CC_GCJ \ - LD_GCJ \ - lt_prog_compiler_wl_GCJ \ - lt_prog_compiler_pic_GCJ \ - lt_prog_compiler_static_GCJ \ - lt_prog_compiler_no_builtin_flag_GCJ \ - export_dynamic_flag_spec_GCJ \ - thread_safe_flag_spec_GCJ \ - whole_archive_flag_spec_GCJ \ - enable_shared_with_static_runtimes_GCJ \ - old_archive_cmds_GCJ \ - old_archive_from_new_cmds_GCJ \ - predep_objects_GCJ \ - postdep_objects_GCJ \ - predeps_GCJ \ - postdeps_GCJ \ - compiler_lib_search_path_GCJ \ - archive_cmds_GCJ \ - archive_expsym_cmds_GCJ \ - postinstall_cmds_GCJ \ - postuninstall_cmds_GCJ \ - old_archive_from_expsyms_cmds_GCJ \ - allow_undefined_flag_GCJ \ - no_undefined_flag_GCJ \ - export_symbols_cmds_GCJ \ - hardcode_libdir_flag_spec_GCJ \ - hardcode_libdir_flag_spec_ld_GCJ \ - hardcode_libdir_separator_GCJ \ - hardcode_automatic_GCJ \ - module_cmds_GCJ \ - module_expsym_cmds_GCJ \ - lt_cv_prog_compiler_c_o_GCJ \ - exclude_expsyms_GCJ \ - include_expsyms_GCJ; do - - case $var in - old_archive_cmds_GCJ | \ - old_archive_from_new_cmds_GCJ | \ - archive_cmds_GCJ | \ - archive_expsym_cmds_GCJ | \ - module_cmds_GCJ | \ - module_expsym_cmds_GCJ | \ - old_archive_from_expsyms_cmds_GCJ | \ - export_symbols_cmds_GCJ | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac + l_PKG_CONFIG_PATH=$with_mblock_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH -cfgfile="$ofile" + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component mblock: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component mblock: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes +else -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with +else + passed=no +fi + fi + fi + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component mblock: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component mblock: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL +fi -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared + mblock_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + mblock_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + mblock_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` -# Whether or not to build static libraries. -build_old_libs=$enable_static + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_GCJ + : + fi + fi -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os + if test $passed != no; then + if test $passed = yes; then + if test x$pmt_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component mblock requires pmt, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component mblock requires pmt, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$pmt_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component mblock requires pmt to be included as --with-pmt[=arg]" >&5 +$as_echo "$as_me: error: Component mblock requires pmt to be included as --with-pmt[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# An echo program that does not interpret backslashes. -echo=$lt_echo -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component mblock requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component mblock requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component mblock requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component mblock requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# A C compiler. -LTCC=$lt_LTCC -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS + if test $passed = yes; then -# A language-specific compiler. -CC=$lt_compiler_GCJ + if test x"$GUILE" = x; then + { $as_echo "$as_me:$LINENO: result: Component mblock requires guile, which was not found." >&5 +$as_echo "Component mblock requires guile, which was not found." >&6; } + passed=no + fi -# Is the compiler the GNU C compiler? -with_gcc=$GCC_GCJ + fi + if test $passed != with; then + mblock_INCLUDES="-I\${abs_top_srcdir}/mblock/src/include" + mblock_LA="\${abs_top_builddir}/mblock/src/lib/libmblock.la" + fi -# An ERE matcher. -EGREP=$lt_EGREP + ac_config_files="$ac_config_files mblock/Makefile mblock/mblock.pc mblock/doc/Makefile mblock/src/Makefile mblock/src/include/Makefile mblock/src/include/mblock/Makefile mblock/src/lib/Makefile mblock/src/scheme/Makefile mblock/src/scheme/gnuradio/Makefile" -# The linker used to build libraries. -LD=$lt_LD_GCJ -# Whether we need hard or soft links. -LN_S=$lt_LN_S -# A BSD-compatible nm program. -NM=$lt_NM -# A symbol stripping program -STRIP=$lt_STRIP + mblock_with=no + if test $passed = no; then + if test x$enable_mblock = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component mblock has errors; stopping." >&5 +$as_echo "$as_me: error: Component mblock has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component mblock." >&5 +$as_echo "Not building component mblock." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs mblock" -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD + if test "x${mblock_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${mblock_INCLUDES}" + else + with_INCLUDES="${mblock_INCLUDES}"" ""$with_INCLUDES" + fi + mblock_INCLUDES= + fi -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" + if test "x${mblock_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${mblock_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${mblock_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + mblock_SWIG_INCLUDES= + fi -# Used on cygwin: assembler. -AS="$AS" -# The name of the directory that contains temporary libtool files. -objdir=$objdir + if test "x${mblock_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${mblock_PYDIRPATH}" + else + with_PYDIRPATH="${mblock_PYDIRPATH}"":""$with_PYDIRPATH" + fi + mblock_PYDIRPATH= + fi -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_GCJ + if test "x${mblock_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${mblock_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${mblock_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + mblock_SWIGDIRPATH= + fi -# Object file suffix (normally "o"). -objext="$ac_objext" -# Old archive suffix (normally "a"). -libext="$libext" + if test "x${mblock_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${mblock_LIBDIRPATH}" + else + with_LIBDIRPATH="${mblock_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + mblock_LIBDIRPATH= + fi -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' + { $as_echo "$as_me:$LINENO: result: Component mblock will be included from a pre-installed library and includes." >&5 +$as_echo "Component mblock will be included from a pre-installed library and includes." >&6; } + mblock_with=yes + else + mblock_LDFLAG= + if test x$enable_mblock != xno; then + + build_dirs="$build_dirs mblock" + { $as_echo "$as_me:$LINENO: result: Component mblock passed configuration checks; building." >&5 +$as_echo "Component mblock passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component mblock passed configuration checks; but not building." >&5 +$as_echo "Component mblock passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs mblock" + mblock_skipped=yes + else + mblock_skipped=no + fi -# Executable file suffix (normally ""). -exeext="$exeext" -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_GCJ -pic_mode=$pic_mode -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ -# Must we lock files when doing compilation? -need_locks=$lt_need_locks -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix -# Do we need a version for libraries? -need_version=$need_version + { $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5 +$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } +if test "${ac_cv_header_stat_broken+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include -# Whether dlopen is supported. -dlopen_support=$enable_dlopen +#if defined S_ISBLK && defined S_IFDIR +extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; +#endif -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self +#if defined S_ISBLK && defined S_IFCHR +extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; +#endif + +#if defined S_ISLNK && defined S_IFREG +extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; +#endif + +#if defined S_ISSOCK && defined S_IFREG +extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stat_broken=no +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static + ac_cv_header_stat_broken=yes +fi -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_GCJ +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5 +$as_echo "$ac_cv_header_stat_broken" >&6; } +if test $ac_cv_header_stat_broken = yes; then -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ +cat >>confdefs.h <<\_ACEOF +#define STAT_MACROS_BROKEN 1 +_ACEOF -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ +fi -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ -# Library versioning type. -version_type=$version_type +for ac_header in fcntl.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Format of library name prefix. -libname_spec=$lt_libname_spec + ac_header_compiler=no +fi -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_GCJ -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds + ac_header_preproc=no +fi -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_GCJ -archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_GCJ -module_expsym_cmds=$lt_module_expsym_cmds_GCJ +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib +fi -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_GCJ +done -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_GCJ -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_GCJ -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_GCJ -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ +for ac_header in sys/time.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method + ac_header_compiler=no +fi -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_GCJ +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_GCJ + ac_header_preproc=no +fi -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address +fi -# This is the shared library runtime path variable. -runpath_var=$runpath_var +done -# This is the shared library path variable. -shlibpath_var=$shlibpath_var -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_GCJ -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs +for ac_header in unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + ac_header_compiler=no +fi -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_GCJ + ac_header_preproc=no +fi -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_GCJ +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_GCJ + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_GCJ +fi -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +done -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_GCJ" -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_GCJ + { $as_echo "$as_me:$LINENO: checking whether getenv is declared" >&5 +$as_echo_n "checking whether getenv is declared... " >&6; } +if test "${ac_cv_have_decl_getenv+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef getenv + (void) getenv; +#endif -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_GCJ + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getenv=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds + ac_cv_have_decl_getenv=no +fi -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_GCJ +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 +$as_echo "$ac_cv_have_decl_getenv" >&6; } +if test "x$ac_cv_have_decl_getenv" = x""yes; then -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_GCJ +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETENV 1 +_ACEOF -# ### END LIBTOOL TAG CONFIG: $tagname -__EOF__ +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETENV 0 +_ACEOF -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -CC="$lt_save_CC" - else - tagname="" - fi - ;; - RC) + passed=yes + # Check whether --enable-usrp was given. +if test "${enable_usrp+set}" = set; then + enableval=$enable_usrp; +else -# Source file extension for RC test sources. -ac_ext=rc + enable_usrp=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext +fi -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + if test x = x; then + pc_comp_name="usrp" + else + pc_comp_name="" + fi -# Allow CC to be a program name with arguments. -compiler=$CC +# Check whether --with-usrp was given. +if test "${with_usrp+set}" = set; then + withval=$with_usrp; if test "x$withval" != "xyes"; then + with_usrp_val=$withval + with_usrp=yes + fi +fi -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* + if test x$with_usrp = xyes; then + if test x$enable_usrp = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component usrp: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component usrp: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + l_PKG_CONFIG_PATH=$with_usrp_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_RC \ - CC_RC \ - LD_RC \ - lt_prog_compiler_wl_RC \ - lt_prog_compiler_pic_RC \ - lt_prog_compiler_static_RC \ - lt_prog_compiler_no_builtin_flag_RC \ - export_dynamic_flag_spec_RC \ - thread_safe_flag_spec_RC \ - whole_archive_flag_spec_RC \ - enable_shared_with_static_runtimes_RC \ - old_archive_cmds_RC \ - old_archive_from_new_cmds_RC \ - predep_objects_RC \ - postdep_objects_RC \ - predeps_RC \ - postdeps_RC \ - compiler_lib_search_path_RC \ - archive_cmds_RC \ - archive_expsym_cmds_RC \ - postinstall_cmds_RC \ - postuninstall_cmds_RC \ - old_archive_from_expsyms_cmds_RC \ - allow_undefined_flag_RC \ - no_undefined_flag_RC \ - export_symbols_cmds_RC \ - hardcode_libdir_flag_spec_RC \ - hardcode_libdir_flag_spec_ld_RC \ - hardcode_libdir_separator_RC \ - hardcode_automatic_RC \ - module_cmds_RC \ - module_expsym_cmds_RC \ - lt_cv_prog_compiler_c_o_RC \ - exclude_expsyms_RC \ - include_expsyms_RC; do - - case $var in - old_archive_cmds_RC | \ - old_archive_from_new_cmds_RC | \ - archive_cmds_RC | \ - archive_expsym_cmds_RC | \ - module_cmds_RC | \ - module_expsym_cmds_RC | \ - old_archive_from_expsyms_cmds_RC | \ - export_symbols_cmds_RC | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component usrp: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component usrp: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes +else -cfgfile="$ofile" + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with +else + passed=no +fi + fi + fi + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component usrp: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component usrp: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname +fi -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + usrp_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + usrp_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + usrp_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared + : + fi + fi -# Whether or not to build static libraries. -build_old_libs=$enable_static -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component usrp requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component usrp requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component usrp requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component usrp requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os -# An echo program that does not interpret backslashes. -echo=$lt_echo -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS +# Check whether --with-fusb-tech was given. +if test "${with_fusb_tech+set}" = set; then + withval=$with_fusb_tech; cf_with_fusb_tech="$withval" +else + cf_with_fusb_tech="$host_os" +fi + + if test x${enable_usrp} != xno; then + case "$cf_with_fusb_tech" in + linux*) + if test "${ac_cv_header_linux_usbdevice_fs_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for linux/usbdevice_fs.h" >&5 +$as_echo_n "checking for linux/usbdevice_fs.h... " >&6; } +if test "${ac_cv_header_linux_usbdevice_fs_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_linux_usbdevice_fs_h" >&5 +$as_echo "$ac_cv_header_linux_usbdevice_fs_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking linux/usbdevice_fs.h usability" >&5 +$as_echo_n "checking linux/usbdevice_fs.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# A C compiler. -LTCC=$lt_LTCC + ac_header_compiler=no +fi -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -# A language-specific compiler. -CC=$lt_compiler_RC +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking linux/usbdevice_fs.h presence" >&5 +$as_echo_n "checking linux/usbdevice_fs.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Is the compiler the GNU C compiler? -with_gcc=$GCC_RC + ac_header_preproc=no +fi -# An ERE matcher. -EGREP=$lt_EGREP +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -# The linker used to build libraries. -LD=$lt_LD_RC +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: linux/usbdevice_fs.h: in the future, the compiler will take precedence" >&2;} -# Whether we need hard or soft links. -LN_S=$lt_LN_S + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for linux/usbdevice_fs.h" >&5 +$as_echo_n "checking for linux/usbdevice_fs.h... " >&6; } +if test "${ac_cv_header_linux_usbdevice_fs_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_linux_usbdevice_fs_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_linux_usbdevice_fs_h" >&5 +$as_echo "$ac_cv_header_linux_usbdevice_fs_h" >&6; } -# A BSD-compatible nm program. -NM=$lt_NM +fi +if test "x$ac_cv_header_linux_usbdevice_fs_h" = x""yes; then + x_have_usbdevice_fs_h=yes +else + x_have_usbdevice_fs_h=no +fi -# A symbol stripping program -STRIP=$lt_STRIP -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD + if test x${x_have_usbdevice_fs_h} = xyes; then + FUSB_TECH=linux + else + FUSB_TECH=generic + fi + ;; + darwin*) + FUSB_TECH=darwin + ;; + cygwin*|win*|mingw*) + FUSB_TECH=win32 + ;; + *bsd*) + { $as_echo "$as_me:$LINENO: checking for RA/WB" >&5 +$as_echo_n "checking for RA/WB... " >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +struct usb_bulk_ra_wb_opt o; + ioctl(0, USB_SET_BULK_RA, &o); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + FUSB_TECH=ra_wb +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" + FUSB_TECH=generic +fi -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + *) + FUSB_TECH=generic + ;; + esac -# Used on cygwin: assembler. -AS="$AS" + { $as_echo "$as_me:$LINENO: checking for fast usb technique to use" >&5 +$as_echo_n "checking for fast usb technique to use... " >&6; } + { $as_echo "$as_me:$LINENO: result: $FUSB_TECH" >&5 +$as_echo "$FUSB_TECH" >&6; } -# The name of the directory that contains temporary libtool files. -objdir=$objdir + fi -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds + if test x$FUSB_TECH = xdarwin; then + FUSB_TECH_darwin_TRUE= + FUSB_TECH_darwin_FALSE='#' +else + FUSB_TECH_darwin_TRUE='#' + FUSB_TECH_darwin_FALSE= +fi -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC + if test x$FUSB_TECH = xwin32; then + FUSB_TECH_win32_TRUE= + FUSB_TECH_win32_FALSE='#' +else + FUSB_TECH_win32_TRUE='#' + FUSB_TECH_win32_FALSE= +fi -# Object file suffix (normally "o"). -objext="$ac_objext" + if test x$FUSB_TECH = xgeneric; then + FUSB_TECH_generic_TRUE= + FUSB_TECH_generic_FALSE='#' +else + FUSB_TECH_generic_TRUE='#' + FUSB_TECH_generic_FALSE= +fi -# Old archive suffix (normally "a"). -libext="$libext" + if test x$FUSB_TECH = xlinux; then + FUSB_TECH_linux_TRUE= + FUSB_TECH_linux_FALSE='#' +else + FUSB_TECH_linux_TRUE='#' + FUSB_TECH_linux_FALSE= +fi -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' + if test x$FUSB_TECH = xra_wb; then + FUSB_TECH_ra_wb_TRUE= + FUSB_TECH_ra_wb_FALSE='#' +else + FUSB_TECH_ra_wb_TRUE='#' + FUSB_TECH_ra_wb_FALSE= +fi -# Executable file suffix (normally ""). -exeext="$exeext" -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC -pic_mode=$pic_mode -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len + if test $passed = yes; then -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC +for ac_func in mkstemp +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func -# Must we lock files when doing compilation? -need_locks=$lt_need_locks +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix +#ifdef __STDC__ +# include +#else +# include +#endif -# Do we need a version for libraries? -need_version=$need_version +#undef $ac_func -# Whether dlopen is supported. -dlopen_support=$enable_dlopen +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static + eval "$as_ac_var=no" +fi -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC +else + case " $LIBOBJS " in + *" $ac_func.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" + ;; +esac -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC +fi +done -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + if test $ac_cv_func_mkstemp = no; then + utils_cv_func_mkstemp_limitations=yes + else + { $as_echo "$as_me:$LINENO: checking for mkstemp limitations" >&5 +$as_echo_n "checking for mkstemp limitations... " >&6; } +if test "${utils_cv_func_mkstemp_limitations+set}" = set; then + $as_echo_n "(cached) " >&6 +else -# Library versioning type. -version_type=$version_type + if test "$cross_compiling" = yes; then + utils_cv_func_mkstemp_limitations=yes -# Format of library name prefix. -libname_spec=$lt_libname_spec +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec +# include + int main () + { + int i; + for (i = 0; i < 70; i++) + { + char template[] = "conftestXXXXXX"; + int fd = mkstemp (template); + if (fd == -1) + exit (1); + close (fd); + } + exit (0); + } -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + utils_cv_func_mkstemp_limitations=no +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_RC -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds +( exit $ac_status ) +utils_cv_func_mkstemp_limitations=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC +fi +{ $as_echo "$as_me:$LINENO: result: $utils_cv_func_mkstemp_limitations" >&5 +$as_echo "$utils_cv_func_mkstemp_limitations" >&6; } + fi -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib + if test $utils_cv_func_mkstemp_limitations = yes; then + case " $LIBOBJS " in + *" mkstemp.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" + ;; +esac -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_RC + case " $LIBOBJS " in + *" tempname.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS tempname.$ac_objext" + ;; +esac -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_RC -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_RC +cat >>confdefs.h <<\_ACEOF +#define mkstemp rpl_mkstemp +_ACEOF -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_RC -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval + : -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address -# This is the shared library runtime path variable. -runpath_var=$runpath_var -# This is the shared library path variable. -shlibpath_var=$shlibpath_var -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_RC +for ac_header in stdint.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC + ac_header_compiler=no +fi -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_RC +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" + ac_header_preproc=no +fi -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_RC" +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_RC +fi -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC +done -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC -# ### END LIBTOOL TAG CONFIG: $tagname +for ac_func in __secure_getenv gettimeofday lstat +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func -__EOF__ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ +#ifdef __STDC__ +# include +#else +# include +#endif -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi +#undef $ac_func +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -CC="$lt_save_CC" + eval "$as_ac_var=no" +fi - ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF - *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac +fi +done - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } - fi -fi + : -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -# Prevent multiple expansion + # AC_REQUIRE([jm_AC_TYPE_UINTMAX_T]) + { $as_echo "$as_me:$LINENO: checking whether mkdir accepts only one arg" >&5 +$as_echo_n "checking whether mkdir accepts only one arg... " >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + #include +int +main () +{ + mkdir("") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +cat >>confdefs.h <<\_ACEOF +#define MKDIR_TAKES_ONE_ARG /**/ +_ACEOF +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # Check for potential -arch flags. It is not universal unless + # there are some -arch flags. Note that *ppc* also matches + # ppc64. This check is also rather less than ideal. + case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( + *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; + esac +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif - # Check whether --enable-fortran was given. -if test "${enable_fortran+set}" = set; then - enableval=$enable_fortran; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes else - enable_fortran=no + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -if test "x$enable_fortran" = xyes; then - ENABLE_FORTRAN_TRUE= - ENABLE_FORTRAN_FALSE='#' -else - ENABLE_FORTRAN_TRUE='#' - ENABLE_FORTRAN_FALSE= fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include - if test "x$enable_fortran" = xyes - then - ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - { echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6; } + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - test -n "$F77" && break - done + ac_cv_c_bigendian=no fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - test -n "$ac_ct_F77" && break -done - if test "x$ac_ct_F77" = x; then - F77="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - F77=$ac_ct_F77 - fi fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - end +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + cat >>confdefs.h <<\_ACEOF +#define WORDS_BIGENDIAN 1 +_ACEOF +;; #( + no) + ;; #( + universal) + +cat >>confdefs.h <<\_ACEOF +#define AC_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + ;; #( + *) + { { $as_echo "$as_me:$LINENO: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +$as_echo "$as_me: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; + esac + + + +for ac_header in byteswap.h linux/compiler.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -20800,633 +35576,734 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || + test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + +for ac_func in getrusage sched_setscheduler pthread_setschedparam +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func - ac_compiler_gnu=no -fi +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu +#ifdef __STDC__ +# include +#else +# include +#endif -fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main +#undef $ac_func - end +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || + test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_g=yes + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_prog_f77_g=no + eval "$as_ac_var=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + fi +done -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -{ echo "$as_me:$LINENO: checking how to get verbose linking output from $F77" >&5 -echo $ECHO_N "checking how to get verbose linking output from $F77... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_v+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +for ac_func in sigaction snprintf +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF - program main +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func - end +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_v= -# Try some options frequently used verbose output -for ac_verb in -v -verbose --verbose -V -\#\#\#; do - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF - -# Compile and link our simple test program by passing a flag (argument -# 1 to this macro) to the Fortran compiler in order to get -# "verbose" output that we can then parse for the Fortran linker -# flags. -ac_save_FFLAGS=$FFLAGS -FFLAGS="$FFLAGS $ac_verb" -eval "set x $ac_link" -shift -echo "$as_me:$LINENO: $*" >&5 -ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` -echo "$ac_f77_v_output" >&5 -FFLAGS=$ac_save_FFLAGS - -rm -f conftest* - -# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where -# /foo, /bar, and /baz are search directories for the Fortran linker. -# Here, we change these into -L/foo -L/bar -L/baz (and put it first): -ac_f77_v_output="`echo $ac_f77_v_output | - grep 'LPATH is:' | - sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" - -# FIXME: we keep getting bitten by quoted arguments; a more general fix -# that detects unbalanced quotes in FLIBS should be implemented -# and (ugh) tested at some point. -case $ac_f77_v_output in - # If we are using xlf then replace all the commas with spaces. - *xlfentry*) - ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; - - # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted - # $LIBS confuse us, and the libraries appear later in the output anyway). - *mGLOB_options_string*) - ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; - - # Portland Group compiler has singly- or doubly-quoted -cmdline argument - # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. - # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". - *-cmdline\ * | *-ignore\ * | *-def\ *) - ac_f77_v_output=`echo $ac_f77_v_output | sed "\ - s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g - s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g - s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; - - # If we are using Cray Fortran then delete quotes. - *cft90*) - ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; -esac - - - # look for -l* and *.a constructs in the output - for ac_arg in $ac_f77_v_output; do - case $ac_arg in - [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) - ac_cv_prog_f77_v=$ac_verb - break 2 ;; - esac - done -done -if test -z "$ac_cv_prog_f77_v"; then - { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $F77" >&5 -echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - { echo "$as_me:$LINENO: WARNING: compilation failed" >&5 -echo "$as_me: WARNING: compilation failed" >&2;} -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_v" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_v" >&6; } -{ echo "$as_me:$LINENO: checking for Fortran 77 libraries of $F77" >&5 -echo $ECHO_N "checking for Fortran 77 libraries of $F77... $ECHO_C" >&6; } -if test "${ac_cv_f77_libs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "x$FLIBS" != "x"; then - ac_cv_f77_libs="$FLIBS" # Let the user override the test. -else - -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF - -# Compile and link our simple test program by passing a flag (argument -# 1 to this macro) to the Fortran compiler in order to get -# "verbose" output that we can then parse for the Fortran linker -# flags. -ac_save_FFLAGS=$FFLAGS -FFLAGS="$FFLAGS $ac_cv_prog_f77_v" -eval "set x $ac_link" -shift -echo "$as_me:$LINENO: $*" >&5 -ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` -echo "$ac_f77_v_output" >&5 -FFLAGS=$ac_save_FFLAGS - -rm -f conftest* + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where -# /foo, /bar, and /baz are search directories for the Fortran linker. -# Here, we change these into -L/foo -L/bar -L/baz (and put it first): -ac_f77_v_output="`echo $ac_f77_v_output | - grep 'LPATH is:' | - sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" + eval "$as_ac_var=no" +fi -# FIXME: we keep getting bitten by quoted arguments; a more general fix -# that detects unbalanced quotes in FLIBS should be implemented -# and (ugh) tested at some point. -case $ac_f77_v_output in - # If we are using xlf then replace all the commas with spaces. - *xlfentry*) - ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF - # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted - # $LIBS confuse us, and the libraries appear later in the output anyway). - *mGLOB_options_string*) - ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; +fi +done - # Portland Group compiler has singly- or doubly-quoted -cmdline argument - # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. - # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". - *-cmdline\ * | *-ignore\ * | *-def\ *) - ac_f77_v_output=`echo $ac_f77_v_output | sed "\ - s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g - s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g - s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; - # If we are using Cray Fortran then delete quotes. - *cft90*) - ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; -esac + libusbok=yes -ac_cv_f77_libs= -# Save positional arguments (if any) -ac_save_positional="$@" +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for USB" >&5 +$as_echo_n "checking for USB... " >&6; } -set X $ac_f77_v_output -while test $# != 1; do - shift - ac_arg=$1 - case $ac_arg in - [\\/]*.a | ?:[\\/]*.a) - ac_exists=false - for ac_i in $ac_cv_f77_libs; do - if test x"$ac_arg" = x"$ac_i"; then - ac_exists=true - break +if test -n "$PKG_CONFIG"; then + if test -n "$USB_CFLAGS"; then + pkg_cv_USB_CFLAGS="$USB_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libusb\"") >&5 + ($PKG_CONFIG --exists --print-errors "libusb") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_USB_CFLAGS=`$PKG_CONFIG --cflags "libusb" 2>/dev/null` +else + pkg_failed=yes +fi fi - done - - if test x"$ac_exists" = xtrue; then - : else - ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + pkg_failed=untried fi - ;; - -bI:*) - ac_exists=false - for ac_i in $ac_cv_f77_libs; do - if test x"$ac_arg" = x"$ac_i"; then - ac_exists=true - break +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$USB_LIBS"; then + pkg_cv_USB_LIBS="$USB_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libusb\"") >&5 + ($PKG_CONFIG --exists --print-errors "libusb") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_USB_LIBS=`$PKG_CONFIG --libs --static "libusb" 2>/dev/null` +else + pkg_failed=yes +fi fi - done - - if test x"$ac_exists" = xtrue; then - : else - if test "$ac_compiler_gnu" = yes; then - for ac_link_opt in $ac_arg; do - ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_USB_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac done + pkg_cv_USB_LIBS="$_pkg_tmp" else - ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" -fi + if test -n "$PKG_CONFIG"; then + if test -n "$USB_LIBS"; then + pkg_cv_USB_LIBS="$USB_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libusb\"") >&5 + ($PKG_CONFIG --exists --print-errors "libusb") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_USB_LIBS=`$PKG_CONFIG --libs --static "libusb" 2>/dev/null` +else + pkg_failed=yes fi - - ;; - # Ignore these flags. - -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -LANG:=* | -LIST:* | -LNO:*) - ;; - -lkernel32) - test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" - ;; - -[LRuYz]) - # These flags, when seen by themselves, take an argument. - # We remove the space between option and argument and re-iterate - # unless we find an empty arg or a new option (starting with -) - case $2 in - "" | -*);; - *) - ac_arg="$ac_arg$2" - shift; shift - set X $ac_arg "$@" - ;; - esac - ;; - -YP,*) - for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do - ac_exists=false - for ac_i in $ac_cv_f77_libs; do - if test x"$ac_j" = x"$ac_i"; then - ac_exists=true - break fi - done - - if test x"$ac_exists" = xtrue; then - : else - ac_arg="$ac_arg $ac_j" - ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" + pkg_failed=untried +fi fi - done - ;; - -[lLR]*) - ac_exists=false - for ac_i in $ac_cv_f77_libs; do - if test x"$ac_arg" = x"$ac_i"; then - ac_exists=true - break +if test -n "$PKG_CONFIG"; then + if test -n "$USB_INCLUDEDIR"; then + pkg_cv_USB_INCLUDEDIR="$USB_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libusb\"") >&5 + ($PKG_CONFIG --exists --print-errors "libusb") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_USB_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "libusb" 2>/dev/null` +else + pkg_failed=yes +fi fi - done - - if test x"$ac_exists" = xtrue; then - : else - ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + pkg_failed=untried fi - ;; - -zallextract*| -zdefaultextract) - ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" - ;; - # Ignore everything else. - esac -done -# restore positional arguments -set X $ac_save_positional; shift -# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, -# then we insist that the "run path" must be an absolute path (i.e. it -# must begin with a "/"). -case `(uname -sr) 2>/dev/null` in - "SunOS 5"*) - ac_ld_run_path=`echo $ac_f77_v_output | - sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` - test "x$ac_ld_run_path" != x && - if test "$ac_compiler_gnu" = yes; then - for ac_link_opt in $ac_ld_run_path; do - ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" - done -else - ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" -fi - ;; -esac -fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_libs" >&5 -echo "${ECHO_T}$ac_cv_f77_libs" >&6; } -FLIBS="$ac_cv_f77_libs" + if test $_pkg_short_errors_supported = yes; then + USB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libusb"` + else + USB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libusb"` + fi + # Put the nasty error message in config.log where it belongs + echo "$USB_PKG_ERRORS" >&5 + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } -ac_ext=c + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - fi - - - - - no_undefined="" - case "${host_os}" in - *mingw* | *cygwin*) - - # on MinGW/Cygwin extra LDFLAGS are required - no_undefined="-no-undefined" - ;; - esac - NO_UNDEFINED=$no_undefined - - - - # Find any Python interpreter. - if test -z "$PYTHON"; then - for ac_prog in python python2 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5 +for ac_header in usb.h do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_PYTHON+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else - case $PYTHON in - [\\/]* | ?:[\\/]*) - ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - ;; + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; esac -fi -PYTHON=$ac_cv_path_PYTHON -if test -n "$PYTHON"; then - { echo "$as_me:$LINENO: result: $PYTHON" >&5 -echo "${ECHO_T}$PYTHON" >&6; } +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON=":" - - fi - am_display_PYTHON=python - - - if test "$PYTHON" = :; then - { { echo "$as_me:$LINENO: error: no suitable Python interpreter found" >&5 -echo "$as_me: error: no suitable Python interpreter found" >&2;} - { (exit 1); exit 1; }; } - else - + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - { echo "$as_me:$LINENO: checking for $am_display_PYTHON version" >&5 -echo $ECHO_N "checking for $am_display_PYTHON version... $ECHO_C" >&6; } -if test "${am_cv_python_version+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"` + ac_header_compiler=no fi -{ echo "$as_me:$LINENO: result: $am_cv_python_version" >&5 -echo "${ECHO_T}$am_cv_python_version" >&6; } - PYTHON_VERSION=$am_cv_python_version - - - - PYTHON_PREFIX='${prefix}' - - PYTHON_EXEC_PREFIX='${exec_prefix}' - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } - { echo "$as_me:$LINENO: checking for $am_display_PYTHON platform" >&5 -echo $ECHO_N "checking for $am_display_PYTHON platform... $ECHO_C" >&6; } -if test "${am_cv_python_platform+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes else - am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"` -fi -{ echo "$as_me:$LINENO: result: $am_cv_python_platform" >&5 -echo "${ECHO_T}$am_cv_python_platform" >&6; } - PYTHON_PLATFORM=$am_cv_python_platform + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - { echo "$as_me:$LINENO: checking for $am_display_PYTHON script directory" >&5 -echo $ECHO_N "checking for $am_display_PYTHON script directory... $ECHO_C" >&6; } -if test "${am_cv_python_pythondir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 else - am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || - echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + eval "$as_ac_Header=\$ac_header_preproc" fi -{ echo "$as_me:$LINENO: result: $am_cv_python_pythondir" >&5 -echo "${ECHO_T}$am_cv_python_pythondir" >&6; } - pythondir=$am_cv_python_pythondir - - - - pkgpythondir=\${pythondir}/$PACKAGE +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF - { echo "$as_me:$LINENO: checking for $am_display_PYTHON extension module directory" >&5 -echo $ECHO_N "checking for $am_display_PYTHON extension module directory... $ECHO_C" >&6; } -if test "${am_cv_python_pyexecdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || - echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"` + libusbok=no; { $as_echo "$as_me:$LINENO: result: USRP requires libusb. usb.h not found. See http://libusb.sf.net" >&5 +$as_echo "USRP requires libusb. usb.h not found. See http://libusb.sf.net" >&6; } fi -{ echo "$as_me:$LINENO: result: $am_cv_python_pyexecdir" >&5 -echo "${ECHO_T}$am_cv_python_pyexecdir" >&6; } - pyexecdir=$am_cv_python_pyexecdir - +done - pkgpyexecdir=\${pyexecdir}/$PACKAGE + save_LIBS="$LIBS" + case "$host_os" in + darwin*) + LIBS="$LIBS -lIOKit" + ;; + *) ;; + esac + { $as_echo "$as_me:$LINENO: checking for library containing usb_bulk_write" >&5 +$as_echo_n "checking for library containing usb_bulk_write... " >&6; } +if test "${ac_cv_search_usb_bulk_write+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char usb_bulk_write (); +int +main () +{ +return usb_bulk_write (); + ; + return 0; +} +_ACEOF +for ac_lib in '' usb; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_search_usb_bulk_write=$ac_res +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_usb_bulk_write+set}" = set; then + break +fi +done +if test "${ac_cv_search_usb_bulk_write+set}" = set; then + : +else + ac_cv_search_usb_bulk_write=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_usb_bulk_write" >&5 +$as_echo "$ac_cv_search_usb_bulk_write" >&6; } +ac_res=$ac_cv_search_usb_bulk_write +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + USB_LIBS="$LIBS" +else + libusbok=no; { $as_echo "$as_me:$LINENO: result: USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net" >&5 +$as_echo "USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net" >&6; } +fi + LIBS="$save_LIBS" - # For Fedora Core 5 and 6, see ticket:39 in Trac - if test -f '/etc/redhat-release'; then - if (echo $pyexecdir | grep -q lib64); then - pythondir="$pyexecdir" - fi - fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - # Check for Python include path - { echo "$as_me:$LINENO: checking for Python include path" >&5 -echo $ECHO_N "checking for Python include path... $ECHO_C" >&6; } - if test -z "$PYTHON" ; then - { { echo "$as_me:$LINENO: error: cannot find Python path" >&5 -echo "$as_me: error: cannot find Python path" >&2;} - { (exit 1); exit 1; }; } - fi - # ask distutils which include path we should use - python_cmd=' -import distutils.sysconfig -import os -path = distutils.sysconfig.get_python_inc(plat_specific=False) -if os.sep == "\\": - path = path.replace("\\", "/") -print path -' - python_path=`$PYTHON -c "$python_cmd"` - { echo "$as_me:$LINENO: result: $python_path" >&5 -echo "${ECHO_T}$python_path" >&6; } - if test -z "$python_path" ; then - { { echo "$as_me:$LINENO: error: cannot find Python include path" >&5 -echo "$as_me: error: cannot find Python include path" >&2;} - { (exit 1); exit 1; }; } - fi +elif test $pkg_failed = untried; then - PYTHON_CPPFLAGS=-I$python_path + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - # Check for Python headers usability - python_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" -for ac_header in Python.h +for ac_header in usb.h do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -21442,32 +36319,33 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -21476,148 +36354,273 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + libusbok=no; { $as_echo "$as_me:$LINENO: result: USRP requires libusb. usb.h not found. See http://libusb.sf.net" >&5 +$as_echo "USRP requires libusb. usb.h not found. See http://libusb.sf.net" >&6; } +fi + +done + + + save_LIBS="$LIBS" + case "$host_os" in + darwin*) + LIBS="$LIBS -lIOKit" + ;; + *) ;; + esac + + { $as_echo "$as_me:$LINENO: checking for library containing usb_bulk_write" >&5 +$as_echo_n "checking for library containing usb_bulk_write... " >&6; } +if test "${ac_cv_search_usb_bulk_write+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char usb_bulk_write (); +int +main () +{ +return usb_bulk_write (); + ; + return 0; +} +_ACEOF +for ac_lib in '' usb; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext }; then - ac_header_preproc=yes + ac_cv_search_usb_bulk_write=$ac_res else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +fi - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_usb_bulk_write+set}" = set; then + break +fi +done +if test "${ac_cv_search_usb_bulk_write+set}" = set; then + : else - eval "$as_ac_Header=\$ac_header_preproc" + ac_cv_search_usb_bulk_write=no fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - +{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_usb_bulk_write" >&5 +$as_echo "$ac_cv_search_usb_bulk_write" >&6; } +ac_res=$ac_cv_search_usb_bulk_write +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + USB_LIBS="$LIBS" else - { { echo "$as_me:$LINENO: error: cannot find usable Python headers" >&5 -echo "$as_me: error: cannot find usable Python headers" >&2;} - { (exit 1); exit 1; }; } + libusbok=no; { $as_echo "$as_me:$LINENO: result: USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net" >&5 +$as_echo "USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net" >&6; } fi -done - - CPPFLAGS="$python_save_CPPFLAGS" - # Only set this on mingw and cygwin hosts, (only implemented - # for mingw host, for crosscompiling you need to trick this) - - PYTHON_LDFLAGS="" - case $host_os in - *mingw* | *cygwin* ) - { echo "$as_me:$LINENO: checking for Python LDFLAGS" >&5 -echo $ECHO_N "checking for Python LDFLAGS... $ECHO_C" >&6; } - - python_cmd=' -import distutils.sysconfig -import os -path = distutils.sysconfig.get_config_var("LIBPL") -if path == None: - path = distutils.sysconfig.PREFIX + "/libs" -if os.sep == "\\": - path = path.replace("\\", "/") -print path -' - python_stdlib_path=`$PYTHON -c "$python_cmd"` + LIBS="$save_LIBS" - python_version_nodot=`echo $PYTHON_VERSION | sed "s,\.,,"` - libpython_name="python$PYTHON_VERSION" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - # Standard install of python for win32 has libpython24.a - # instead of libpython2.4.a so we check for the library - # without the dot in the version number. - python_stdlib_filename=`find $python_stdlib_path -type f -name libpython$python_version_nodot.* -print | sed "1q"` - if test -n "$python_stdlib_filename" ; then - libpython_name="python$python_version_nodot" - fi +else + USB_CFLAGS=$pkg_cv_USB_CFLAGS + USB_LIBS=$pkg_cv_USB_LIBS + USB_INCLUDEDIR=$pkg_cv_USB_INCLUDEDIR - PYTHON_LDFLAGS="-L$python_stdlib_path -l$libpython_name" - { echo "$as_me:$LINENO: result: $PYTHON_LDFLAGS" >&5 -echo "${ECHO_T}$PYTHON_LDFLAGS" >&6; } - # Replace all backslashes in PYTHON Paths with forward slashes - pythondir=`echo $pythondir |sed 's,\\\\,/,g'` - pkgpythondir=`echo $pkgpythondir |sed 's,\\\\,/,g'` - pyexecdir=`echo $pyexecdir |sed 's,\\\\,/,g'` - pkgpyexecdir=`echo $pkgpyexecdir |sed 's,\\\\,/,g'` - ;; - esac + USB_CPPFLAGS="" + for flag in $USB_CFLAGS; do + case $flag in + -I* | -D* | -U*) USB_CPPFLAGS="$USB_CPPFLAGS $flag" ;; + esac + done + pkg_cv_USB_CPPFLAGS=$USB_CPPFLAGS + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + if test x$libusbok = xyes; then + : + else + passed=no;{ $as_echo "$as_me:$LINENO: result: Unable to find dependency libusb." >&5 +$as_echo "Unable to find dependency libusb." >&6; } + fi + sdccok=yes + # Extract the first word of "sdcc", so it can be a program name with args. +set dummy sdcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_XCC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$XCC"; then + ac_cv_prog_XCC="$XCC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_XCC="sdcc -mmcs51 --no-xinit-opt" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + test -z "$ac_cv_prog_XCC" && ac_cv_prog_XCC="no" +fi +fi +XCC=$ac_cv_prog_XCC +if test -n "$XCC"; then + { $as_echo "$as_me:$LINENO: result: $XCC" >&5 +$as_echo "$XCC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi - # Extract the first word of "swig", so it can be a program name with args. -set dummy swig; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_SWIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Extract the first word of "asx8051", so it can be a program name with args. +set dummy asx8051; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_XAS+set}" = set; then + $as_echo_n "(cached) " >&6 else - if test -n "$SWIG"; then - ac_cv_prog_SWIG="$SWIG" # Let the user override the test. + if test -n "$XAS"; then + ac_cv_prog_XAS="$XAS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -21626,922 +36629,783 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_SWIG="`which swig`" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_XAS="asx8051 -plosgff" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS + test -z "$ac_cv_prog_XAS" && ac_cv_prog_XAS="no" fi fi -SWIG=$ac_cv_prog_SWIG -if test -n "$SWIG"; then - { echo "$as_me:$LINENO: result: $SWIG" >&5 -echo "${ECHO_T}$SWIG" >&6; } +XAS=$ac_cv_prog_XAS +if test -n "$XAS"; then + { $as_echo "$as_me:$LINENO: result: $XAS" >&5 +$as_echo "$XAS" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi - if test -z "$SWIG" ; then - { { echo "$as_me:$LINENO: error: Cannot find 'swig' program. SWIG version >= 1.3.23 required" >&5 -echo "$as_me: error: Cannot find 'swig' program. SWIG version >= 1.3.23 required" >&2;} - { (exit 1); exit 1; }; } - SWIG=false - elif test -n "1.3.23" ; then - { echo "$as_me:$LINENO: checking for SWIG version" >&5 -echo $ECHO_N "checking for SWIG version... $ECHO_C" >&6; } - swig_version=`$SWIG -version 2>&1 | \ - awk '/^SWIG Version [0-9]+\.[0-9]+\.[0-9]+.*$/ { split($3,a,"[^.0-9]"); print a[1] }'` - { echo "$as_me:$LINENO: result: $swig_version" >&5 -echo "${ECHO_T}$swig_version" >&6; } - if test -n "$swig_version" ; then - swig_version=`echo $swig_version | \ - awk '{ split($1,a,"\."); print a[1]*1000000+a[2]*1000+a[3] }' 2>/dev/null` - swig_required_version=`echo 1.3.23 | \ - awk '{ split($1,a,"\."); print a[1]*1000000+a[2]*1000+a[3] }' 2>/dev/null` - if test $swig_required_version -gt $swig_version ; then - { { echo "$as_me:$LINENO: error: SWIG version >= 1.3.23 required" >&5 -echo "$as_me: error: SWIG version >= 1.3.23 required" >&2;} - { (exit 1); exit 1; }; } - fi + + if test "$XCC" = "no" -o "$XAS" = "no" ; then + { $as_echo "$as_me:$LINENO: result: USRP requires sdcc. sdcc not found. See http://sdcc.sf.net" >&5 +$as_echo "USRP requires sdcc. sdcc not found. See http://sdcc.sf.net" >&6; } + sdccok=no + else + sdcc_version_min=2.4.0 + + sdcc_version=`sdcc --version 2>&1 | \ + sed 's/\(SDCC.* \)\([0-9]*\.[0-9]*\.[0-9]*\)\( .*$\)/\2/'` + + { $as_echo "$as_me:$LINENO: checking sdcc_version \"$sdcc_version\"" >&5 +$as_echo_n "checking sdcc_version \"$sdcc_version\"... " >&6; } + + sdcc_major_version=`echo $sdcc_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + sdcc_minor_version=`echo $sdcc_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + sdcc_micro_version=`echo $sdcc_version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + sdcc_major_min=`echo $sdcc_version_min | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + sdcc_minor_min=`echo $sdcc_version_min | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + sdcc_micro_min=`echo $sdcc_version_min | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + + sdcc_version_proper=`expr \ + "$sdcc_major_version" \> "$sdcc_major_min" \| \ + "$sdcc_major_version" \= "$sdcc_major_min" \& \ + "$sdcc_minor_version" \> "$sdcc_minor_min" \| \ + "$sdcc_major_version" \= "$sdcc_major_min" \& \ + "$sdcc_minor_version" \= "$sdcc_minor_min" \& \ + "$sdcc_micro_version" \>= "$sdcc_micro_min" ` + + if test "$sdcc_version_proper" = "1" ; then + { $as_echo "$as_me:$LINENO: result: $sdcc_major_version.$sdcc_minor_version.$sdcc_micro_version" >&5 +$as_echo "$sdcc_major_version.$sdcc_minor_version.$sdcc_micro_version" >&6; } else - { { echo "$as_me:$LINENO: error: cannot determine SWIG version" >&5 -echo "$as_me: error: cannot determine SWIG version" >&2;} - { (exit 1); exit 1; }; } + sdccok=no + { $as_echo "$as_me:$LINENO: result: USRP requires sdcc >= $sdcc_version_min. sdcc not found. See http://sdcc.sf.net" >&5 +$as_echo "USRP requires sdcc >= $sdcc_version_min. sdcc not found. See http://sdcc.sf.net" >&6; } fi + + + + fi + + if test $sdccok = yes; then + : + else + passed=no;{ $as_echo "$as_me:$LINENO: result: Unable to find firmware compiler SDCC." >&5 +$as_echo "Unable to find firmware compiler SDCC." >&6; } fi + fi + if test $passed != with; then + usrp_INCLUDES="-I\${abs_top_srcdir}/usrp/host/lib/legacy \ + -I\${abs_top_srcdir}/usrp/firmware/include \ + -I\${abs_top_builddir}/usrp/host/lib/legacy" + usrp_LA="\${abs_top_builddir}/usrp/host/lib/legacy/libusrp.la" + fi + + case "$host_os" in + darwin*) + usrp_darwin_omnithread_pc_requires="gnuradio-omnithread" + ;; + *) usrp_darwin_omnithread_pc_requires="" + ;; + esac + ac_config_files="$ac_config_files usrp/Makefile usrp/usrp.pc usrp/usrp.iss usrp/doc/Doxyfile usrp/doc/Makefile usrp/doc/other/Makefile usrp/host/Makefile usrp/host/misc/Makefile usrp/host/lib/Makefile usrp/host/lib/legacy/Makefile usrp/host/lib/legacy/std_paths.h usrp/host/swig/Makefile usrp/host/apps/Makefile usrp/firmware/Makefile usrp/firmware/include/Makefile usrp/firmware/lib/Makefile usrp/firmware/src/Makefile usrp/firmware/src/common/Makefile usrp/firmware/src/usrp2/Makefile usrp/fpga/Makefile usrp/fpga/rbf/Makefile usrp/fpga/rbf/rev2/Makefile usrp/fpga/rbf/rev4/Makefile" - if test "$SWIG" != "false" ; then - SWIG="$SWIG -c++" + + + + usrp_with=no + if test $passed = no; then + if test x$enable_usrp = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component usrp has errors; stopping." >&5 +$as_echo "$as_me: error: Component usrp has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component usrp." >&5 +$as_echo "Not building component usrp." >&6; } fi + else + if test $passed = with; then + with_dirs="$with_dirs usrp" + if test "x${usrp_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${usrp_INCLUDES}" + else + with_INCLUDES="${usrp_INCLUDES}"" ""$with_INCLUDES" + fi + usrp_INCLUDES= + fi + if test "x${usrp_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${usrp_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${usrp_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + usrp_SWIG_INCLUDES= + fi - if test "$SWIG" != "false" ; then - SWIG_PYTHON_LIB=-lswigpy - SWIG_PYTHON_OPT=-python + if test "x${usrp_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${usrp_PYDIRPATH}" + else + with_PYDIRPATH="${usrp_PYDIRPATH}"":""$with_PYDIRPATH" + fi + usrp_PYDIRPATH= + fi + + if test "x${usrp_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${usrp_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${usrp_SWIGDIRPATH}"":""$with_SWIGDIRPATH" fi - SWIG_PYTHON_CPPFLAGS=$PYTHON_CPPFLAGS + usrp_SWIGDIRPATH= + fi + + + if test "x${usrp_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${usrp_LIBDIRPATH}" + else + with_LIBDIRPATH="${usrp_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + usrp_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component usrp will be included from a pre-installed library and includes." >&5 +$as_echo "Component usrp will be included from a pre-installed library and includes." >&6; } + usrp_with=yes + else + usrp_LDFLAG= + if test x$enable_usrp != xno; then + : + build_dirs="$build_dirs usrp" + { $as_echo "$as_me:$LINENO: result: Component usrp passed configuration checks; building." >&5 +$as_echo "Component usrp passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component usrp passed configuration checks; but not building." >&5 +$as_echo "Component usrp passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs usrp" + usrp_skipped=yes + else + usrp_skipped=no + fi + + -# Extract the first word of "xmlto", so it can be a program name with args. -set dummy xmlto; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_XMLTO+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$XMLTO"; then - ac_cv_prog_XMLTO="$XMLTO" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_XMLTO="yes" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS -fi -fi -XMLTO=$ac_cv_prog_XMLTO -if test -n "$XMLTO"; then - { echo "$as_me:$LINENO: result: $XMLTO" >&5 -echo "${ECHO_T}$XMLTO" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -if test x$XMLTO = xyes; then - HAS_XMLTO_TRUE= - HAS_XMLTO_FALSE='#' + + + passed=yes + # Check whether --enable-usrp2 was given. +if test "${enable_usrp2+set}" = set; then + enableval=$enable_usrp2; else - HAS_XMLTO_TRUE='#' - HAS_XMLTO_FALSE= + + enable_usrp2=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -{ echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 -echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6; } -if test "${ac_cv_lib_socket_socket+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char socket (); -int -main () -{ -return socket (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_socket_socket=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + subdirs="$subdirs usrp2/firmware" - ac_cv_lib_socket_socket=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 -echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6; } -if test $ac_cv_lib_socket_socket = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSOCKET 1 -_ACEOF - LIBS="-lsocket $LIBS" + if test $passed != no; then + if test $passed = yes; then + if test x$gruel_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component usrp2 requires gruel, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component usrp2 requires gruel, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gruel_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component usrp2 requires gruel to be included as --with-gruel[=arg]" >&5 +$as_echo "$as_me: error: Component usrp2 requires gruel to be included as --with-gruel[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -fi + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component usrp2 requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component usrp2 requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component usrp2 requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component usrp2 requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi - # Check first for POSIX + { $as_echo "$as_me:$LINENO: checking whether host_os is linux*" >&5 +$as_echo_n "checking whether host_os is linux*... " >&6; } + case "$host_os" in + linux*) + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + ;; + *) + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:$LINENO: USRP2 currently requires Linux host OS, not found" >&5 +$as_echo "$as_me: USRP2 currently requires Linux host OS, not found" >&6;} + passed="no" + ;; + esac + if test $passed = yes; then -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -acx_pthread_ok=no -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { echo "$as_me:$LINENO: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -echo $ECHO_N "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF +for ac_header in arpa/inet.h byteswap.h linux/if_packet.h sys/socket.h sys/un.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} +$ac_includes_default +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - acx_pthread_ok=yes + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5 -echo "${ECHO_T}$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" + ac_header_compiler=no fi -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# pthread: Linux, etcetera -# --thread-safe: KAI C++ - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthread or - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { echo "$as_me:$LINENO: checking whether pthreads work without any flags" >&5 -echo $ECHO_N "checking whether pthreads work without any flags... $ECHO_C" >&6; } - ;; - - -*) - { echo "$as_me:$LINENO: checking whether pthreads work with $flag" >&5 -echo $ECHO_N "checking whether pthreads work with $flag... $ECHO_C" >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - *) - { echo "$as_me:$LINENO: checking for the pthreads library -l$flag" >&5 -echo $ECHO_N "checking for the pthreads library -l$flag... $ECHO_C" >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat >conftest.$ac_ext <<_ACEOF +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - acx_pthread_ok=yes + }; then + ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + ac_header_preproc=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } - { echo "$as_me:$LINENO: result: $acx_pthread_ok" >&5 -echo "${ECHO_T}$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done fi -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +done - # Detect AIX lossage: threads are created detached by default - # and the JOINABLE attribute has a nonstandard name (UNDETACHED). - { echo "$as_me:$LINENO: checking for joinable pthread attribute" >&5 -echo $ECHO_N "checking for joinable pthread attribute... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:$LINENO: checking for struct msghdr.msg_control" >&5 +$as_echo_n "checking for struct msghdr.msg_control... " >&6; } +if test "${ac_cv_member_struct_msghdr_msg_control+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#define __USE_GNU 1 + #include + #include + #include + int main () { -int attr=PTHREAD_CREATE_JOINABLE; +static struct msghdr ac_aggr; +if (ac_aggr.msg_control) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ok=PTHREAD_CREATE_JOINABLE + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_msghdr_msg_control=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ok=unknown -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - if test x"$ok" = xunknown; then - cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#define __USE_GNU 1 + #include + #include + #include + int main () { -int attr=PTHREAD_CREATE_UNDETACHED; +static struct msghdr ac_aggr; +if (sizeof ac_aggr.msg_control) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ok=PTHREAD_CREATE_UNDETACHED + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_msghdr_msg_control=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ok=unknown + ac_cv_member_struct_msghdr_msg_control=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - fi - if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<\_ACEOF -#define PTHREAD_CREATE_JOINABLE $ok -_ACEOF - - fi - { echo "$as_me:$LINENO: result: ${ok}" >&5 -echo "${ECHO_T}${ok}" >&6; } - if test x"$ok" = xunknown; then - { echo "$as_me:$LINENO: WARNING: we do not know how to create joinable pthreads" >&5 -echo "$as_me: WARNING: we do not know how to create joinable pthreads" >&2;} - fi - - { echo "$as_me:$LINENO: checking if more special flags are required for pthreads" >&5 -echo $ECHO_N "checking if more special flags are required for pthreads... $ECHO_C" >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { echo "$as_me:$LINENO: result: ${flag}" >&5 -echo "${ECHO_T}${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with cc_r - # Extract the first word of "cc_r", so it can be a program name with args. -set dummy cc_r; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PTHREAD_CC="cc_r" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}" -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { echo "$as_me:$LINENO: result: $PTHREAD_CC" >&5 -echo "${ECHO_T}$PTHREAD_CC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - -else - PTHREAD_CC="$CC" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_msghdr_msg_control" >&5 +$as_echo "$ac_cv_member_struct_msghdr_msg_control" >&6; } +if test "x$ac_cv_member_struct_msghdr_msg_control" = x""yes; then - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - ot_posix="yes" - -cat >>confdefs.h <<\_ACEOF -#define OMNITHREAD_POSIX 1 +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_MSGHDR_MSG_CONTROL 1 _ACEOF - : +fi +{ $as_echo "$as_me:$LINENO: checking for struct msghdr.msg_accrights" >&5 +$as_echo_n "checking for struct msghdr.msg_accrights... " >&6; } +if test "${ac_cv_member_struct_msghdr_msg_accrights+set}" = set; then + $as_echo_n "(cached) " >&6 else - acx_pthread_ok=no - - # If no POSIX support found, then check for NT threads - { echo "$as_me:$LINENO: checking for NT threads" >&5 -echo $ECHO_N "checking for NT threads... $ECHO_C" >&6; } - - cat >conftest.$ac_ext <<_ACEOF - - #include - #include - int main() { InitializeCriticalSection(NULL); return 0; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define __USE_GNU 1 + #include + #include + #include +int +main () +{ +static struct msghdr ac_aggr; +if (ac_aggr.msg_accrights) +return 0; + ; + return 0; +} _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - - ot_nt="yes" - -cat >>confdefs.h <<\_ACEOF -#define OMNITHREAD_NT 1 -_ACEOF - - + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_msghdr_msg_accrights=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - { { echo "$as_me:$LINENO: error: GNU Radio requires POSIX threads. pthreads not found. -See \`config.log' for more details." >&5 -echo "$as_me: error: GNU Radio requires POSIX threads. pthreads not found. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -if test "x$ot_posix" = xyes; then - OMNITHREAD_POSIX_TRUE= - OMNITHREAD_POSIX_FALSE='#' -else - OMNITHREAD_POSIX_TRUE='#' - OMNITHREAD_POSIX_FALSE= -fi - - - -if test "x$ot_nt" = xyes; then - OMNITHREAD_NT_TRUE= - OMNITHREAD_NT_FALSE='#' -else - OMNITHREAD_NT_TRUE='#' - OMNITHREAD_NT_FALSE= -fi - - - save_LIBS="$LIBS" - { echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5 -echo $ECHO_N "checking for library containing clock_gettime... $ECHO_C" >&6; } -if test "${ac_cv_search_clock_gettime+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +#define __USE_GNU 1 + #include + #include + #include -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char clock_gettime (); int main () { -return clock_gettime (); +static struct msghdr ac_aggr; +if (sizeof ac_aggr.msg_accrights) +return 0; ; return 0; } _ACEOF -for ac_lib in '' rt; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_clock_gettime=$ac_res + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_msghdr_msg_accrights=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - + ac_cv_member_struct_msghdr_msg_accrights=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_clock_gettime+set}" = set; then - break -fi -done -if test "${ac_cv_search_clock_gettime+set}" = set; then - : -else - ac_cv_search_clock_gettime=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5 -echo "${ECHO_T}$ac_cv_search_clock_gettime" >&6; } -ac_res=$ac_cv_search_clock_gettime -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - PTHREAD_LIBS="$PTHREAD_LIBS $LIBS" + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_msghdr_msg_accrights" >&5 +$as_echo "$ac_cv_member_struct_msghdr_msg_accrights" >&6; } +if test "x$ac_cv_member_struct_msghdr_msg_accrights" = x""yes; then +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS 1 +_ACEOF +fi +{ $as_echo "$as_me:$LINENO: checking for struct cmsgcred.cmcred_uid" >&5 +$as_echo_n "checking for struct cmsgcred.cmcred_uid... " >&6; } +if test "${ac_cv_member_struct_cmsgcred_cmcred_uid+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define __USE_GNU 1 + #include + #include + #include -for ac_func in clock_gettime gettimeofday nanosleep -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +int +main () +{ +static struct cmsgcred ac_aggr; +if (ac_aggr.cmcred_uid) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_cmsgcred_cmcred_uid=yes else - cat >conftest.$ac_ext <<_ACEOF + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif +#define __USE_GNU 1 + #include + #include + #include int main () { -return $ac_func (); +static struct cmsgcred ac_aggr; +if (sizeof ac_aggr.cmcred_uid) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_cmsgcred_cmcred_uid=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + ac_cv_member_struct_cmsgcred_cmcred_uid=no fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -done - - LIBS="$save_LIBS" -#AC_SUBST(PTHREAD_CFLAGS) -CFLAGS="${CFLAGS} $PTHREAD_CFLAGS" -CXXFLAGS="${CXXFLAGS} $PTHREAD_CFLAGS" - -if test "x$CXX_FOR_BUILD" = x -then - CXX_FOR_BUILD=${CXX} +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_cmsgcred_cmcred_uid" >&5 +$as_echo "$ac_cv_member_struct_cmsgcred_cmcred_uid" >&6; } +if test "x$ac_cv_member_struct_cmsgcred_cmcred_uid" = x""yes; then +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_CMSGCRED_CMCRED_UID 1 +_ACEOF - - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - -for ac_header in sys/ipc.h sys/shm.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +{ $as_echo "$as_me:$LINENO: checking for struct ucred.uid" >&5 +$as_echo_n "checking for struct ucred.uid... " >&6; } +if test "${ac_cv_member_struct_ucred_uid+set}" = set; then + $as_echo_n "(cached) " >&6 else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> +#define __USE_GNU 1 + #include + #include + #include + +int +main () +{ +static struct ucred ac_aggr; +if (ac_aggr.uid) +return 0; + ; + return 0; +} _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -22549,2167 +37413,2399 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + ac_cv_member_struct_ucred_uid=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +#define __USE_GNU 1 + #include + #include + #include + +int +main () +{ +static struct ucred ac_aggr; +if (sizeof ac_aggr.uid) +return 0; + ; + return 0; +} _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || test ! -s conftest.err - }; then - ac_header_preproc=yes + } && test -s conftest.$ac_objext; then + ac_cv_member_struct_ucred_uid=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi + ac_cv_member_struct_ucred_uid=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_ucred_uid" >&5 +$as_echo "$ac_cv_member_struct_ucred_uid" >&6; } +if test "x$ac_cv_member_struct_ucred_uid" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_UCRED_UID 1 +_ACEOF + + +fi + + fi + if test $passed != with; then + USRP2_INCLUDES="-I\${abs_top_srcdir}/usrp2/host/include \ + -I\${abs_top_srcdir}/usrp2/firmware/include" + USRP2_LA="\${abs_top_builddir}/usrp2/host/lib/libusrp2.la" + fi + + + + + ac_config_files="$ac_config_files usrp2/Makefile usrp2/host/Makefile usrp2/host/usrp2.pc usrp2/host/include/Makefile usrp2/host/include/usrp2/Makefile usrp2/host/lib/Makefile usrp2/host/apps/Makefile" + + + + + usrp2_with=no + if test $passed = no; then + if test x$enable_usrp2 = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component usrp2 has errors; stopping." >&5 +$as_echo "$as_me: error: Component usrp2 has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component usrp2." >&5 +$as_echo "Not building component usrp2." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs usrp2" + + if test "x${usrp2_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${usrp2_INCLUDES}" + else + with_INCLUDES="${usrp2_INCLUDES}"" ""$with_INCLUDES" + fi + usrp2_INCLUDES= + fi + + + if test "x${usrp2_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${usrp2_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${usrp2_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + usrp2_SWIG_INCLUDES= + fi + + + if test "x${usrp2_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${usrp2_PYDIRPATH}" + else + with_PYDIRPATH="${usrp2_PYDIRPATH}"":""$with_PYDIRPATH" + fi + usrp2_PYDIRPATH= + fi + + + if test "x${usrp2_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${usrp2_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${usrp2_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + usrp2_SWIGDIRPATH= + fi + + + if test "x${usrp2_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${usrp2_LIBDIRPATH}" + else + with_LIBDIRPATH="${usrp2_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + usrp2_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component usrp2 will be included from a pre-installed library and includes." >&5 +$as_echo "Component usrp2 will be included from a pre-installed library and includes." >&6; } + usrp2_with=yes + else + usrp2_LDFLAG= + if test x$enable_usrp2 != xno; then + : + build_dirs="$build_dirs usrp2" + { $as_echo "$as_me:$LINENO: result: Component usrp2 passed configuration checks; building." >&5 +$as_echo "Component usrp2 passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component usrp2 passed configuration checks; but not building." >&5 +$as_echo "Component usrp2 passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs usrp2" + usrp2_skipped=yes + else + usrp2_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-usrp was given. +if test "${enable_gr_usrp+set}" = set; then + enableval=$enable_gr_usrp; +else + + enable_gr_usrp=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + +fi + + + + + + if test $passed != no; then + if test $passed = yes; then + if test x$usrp_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-usrp requires usrp, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-usrp requires usrp, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-usrp requires usrp to be included as --with-usrp[=arg]" >&5 +$as_echo "$as_me: error: Component gr-usrp requires usrp to be included as --with-usrp[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-usrp requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-usrp requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-usrp requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-usrp requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + ac_config_files="$ac_config_files gr-usrp/Makefile gr-usrp/gnuradio-usrp.pc gr-usrp/src/Makefile gr-usrp/src/run_tests gr-usrp/apps/Makefile" + + + + + gr_usrp_with=no + if test $passed = no; then + if test x$enable_gr_usrp = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-usrp has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-usrp has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-usrp." >&5 +$as_echo "Not building component gr-usrp." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-usrp" + + if test "x${gr_usrp_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_usrp_INCLUDES}" + else + with_INCLUDES="${gr_usrp_INCLUDES}"" ""$with_INCLUDES" + fi + gr_usrp_INCLUDES= + fi + + + if test "x${gr_usrp_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_usrp_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_usrp_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_usrp_SWIG_INCLUDES= + fi + + + if test "x${gr_usrp_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_usrp_PYDIRPATH}" + else + with_PYDIRPATH="${gr_usrp_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_usrp_PYDIRPATH= + fi + + + if test "x${gr_usrp_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_usrp_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_usrp_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_usrp_SWIGDIRPATH= + fi + + + if test "x${gr_usrp_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_usrp_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_usrp_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_usrp_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-usrp will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-usrp will be included from a pre-installed library and includes." >&6; } + gr_usrp_with=yes + else + gr_usrp_LDFLAG= + if test x$enable_gr_usrp != xno; then + ac_config_commands="$ac_config_commands run_tests_usrp" + + + build_dirs="$build_dirs gr-usrp" + { $as_echo "$as_me:$LINENO: result: Component gr-usrp passed configuration checks; building." >&5 +$as_echo "Component gr-usrp passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-usrp passed configuration checks; but not building." >&5 +$as_echo "Component gr-usrp passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-usrp" + gr_usrp_skipped=yes + else + gr_usrp_skipped=no + fi + -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi -done - save_LIBS="$LIBS" - { echo "$as_me:$LINENO: checking for library containing shmat" >&5 -echo $ECHO_N "checking for library containing shmat... $ECHO_C" >&6; } -if test "${ac_cv_search_shmat+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shmat (); -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -for ac_lib in '' cygipc ipc; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_shmat=$ac_res + passed=yes + # Check whether --enable-gr-usrp2 was given. +if test "${enable_gr_usrp2+set}" = set; then + enableval=$enable_gr_usrp2; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + enable_gr_usrp2=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_shmat+set}" = set; then - break -fi -done -if test "${ac_cv_search_shmat+set}" = set; then - : -else - ac_cv_search_shmat=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_shmat" >&5 -echo "${ECHO_T}$ac_cv_search_shmat" >&6; } -ac_res=$ac_cv_search_shmat -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - IPC_LIBS="$LIBS" -else - { echo "$as_me:$LINENO: WARNING: SystemV IPC support not found. " >&5 -echo "$as_me: WARNING: SystemV IPC support not found. " >&2;} -fi - LIBS="$save_LIBS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $passed != no; then + if test $passed = yes; then + if test x$usrp2_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-usrp2 requires usrp2, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-usrp2 requires usrp2, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp2_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-usrp2 requires usrp2 to be included as --with-usrp2[=arg]" >&5 +$as_echo "$as_me: error: Component gr-usrp2 requires usrp2 to be included as --with-usrp2[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-usrp2 requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-usrp2 requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-usrp2 requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-usrp2 requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -int -main () -{ + ac_config_files="$ac_config_files gr-usrp2/Makefile gr-usrp2/gnuradio-usrp2.pc gr-usrp2/src/Makefile gr-usrp2/src/run_tests" - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include + gr_usrp2_with=no + if test $passed = no; then + if test x$enable_gr_usrp2 = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-usrp2 has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-usrp2 has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-usrp2." >&5 +$as_echo "Not building component gr-usrp2." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-usrp2" -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* + if test "x${gr_usrp2_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_usrp2_INCLUDES}" + else + with_INCLUDES="${gr_usrp2_INCLUDES}"" ""$with_INCLUDES" + fi + gr_usrp2_INCLUDES= + fi -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include + if test "x${gr_usrp2_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_usrp2_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_usrp2_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_usrp2_SWIG_INCLUDES= + fi -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi + if test "x${gr_usrp2_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_usrp2_PYDIRPATH}" + else + with_PYDIRPATH="${gr_usrp2_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_usrp2_PYDIRPATH= + fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "x${gr_usrp2_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_usrp2_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_usrp2_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_usrp2_SWIGDIRPATH= + fi + + + if test "x${gr_usrp2_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_usrp2_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_usrp2_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_usrp2_LIBDIRPATH= + fi -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi + { $as_echo "$as_me:$LINENO: result: Component gr-usrp2 will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-usrp2 will be included from a pre-installed library and includes." >&6; } + gr_usrp2_with=yes + else + gr_usrp2_LDFLAG= + if test x$enable_gr_usrp2 != xno; then + ac_config_commands="$ac_config_commands run_tests_usrp2" + + + build_dirs="$build_dirs gr-usrp2" + { $as_echo "$as_me:$LINENO: result: Component gr-usrp2 passed configuration checks; building." >&5 +$as_echo "Component gr-usrp2 passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-usrp2 passed configuration checks; but not building." >&5 +$as_echo "Component gr-usrp2 passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-usrp2" + gr_usrp2_skipped=yes + else + gr_usrp2_skipped=no + fi -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF -fi -{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 -echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_wait_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) -#endif -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif -int -main () -{ - int s; - wait (&s); - s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_sys_wait_h=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_header_sys_wait_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; } -if test $ac_cv_header_sys_wait_h = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_WAIT_H 1 -_ACEOF -fi + passed=yes + # Check whether --enable-gr-gcell was given. +if test "${enable_gr_gcell+set}" = set; then + enableval=$enable_gr_gcell; +else + enable_gr_gcell=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi +fi -for ac_header in fcntl.h limits.h strings.h time.h sys/ioctl.h sys/time.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test $passed != no; then + if test $passed = yes; then + if test x$gcell_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-gcell requires gcell, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-gcell requires gcell, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gcell_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gcell requires gcell to be included as --with-gcell[=arg]" >&5 +$as_echo "$as_me: error: Component gr-gcell requires gcell to be included as --with-gcell[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-gcell requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-gcell requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gcell requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-gcell requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi + ac_config_files="$ac_config_files gr-gcell/Makefile gr-gcell/src/Makefile gr-gcell/src/examples/Makefile gr-gcell/src/run_tests" -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + gr_gcell_with=no + if test $passed = no; then + if test x$enable_gr_gcell = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gcell has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-gcell has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-gcell." >&5 +$as_echo "Not building component gr-gcell." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-gcell" -fi + if test "x${gr_gcell_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_gcell_INCLUDES}" + else + with_INCLUDES="${gr_gcell_INCLUDES}"" ""$with_INCLUDES" + fi + gr_gcell_INCLUDES= + fi -done + if test "x${gr_gcell_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_gcell_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_gcell_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_gcell_SWIG_INCLUDES= + fi + if test "x${gr_gcell_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_gcell_PYDIRPATH}" + else + with_PYDIRPATH="${gr_gcell_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_gcell_PYDIRPATH= + fi -for ac_header in linux/ppdev.h sys/mman.h sys/select.h sys/types.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "x${gr_gcell_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_gcell_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_gcell_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_gcell_SWIGDIRPATH= + fi - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } + if test "x${gr_gcell_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_gcell_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_gcell_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_gcell_LIBDIRPATH= + fi -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:$LINENO: result: Component gr-gcell will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-gcell will be included from a pre-installed library and includes." >&6; } + gr_gcell_with=yes + else + gr_gcell_LDFLAG= + if test x$enable_gr_gcell != xno; then + ac_config_commands="$ac_config_commands run_tests_gcell" + + + build_dirs="$build_dirs gr-gcell" + { $as_echo "$as_me:$LINENO: result: Component gr-gcell passed configuration checks; building." >&5 +$as_echo "Component gr-gcell passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-gcell passed configuration checks; but not building." >&5 +$as_echo "Component gr-gcell passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-gcell" + gr_gcell_skipped=yes + else + gr_gcell_skipped=no + fi - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + + + + + + passed=yes + # Check whether --enable-gr-audio-alsa was given. +if test "${enable_gr_audio_alsa+set}" = set; then + enableval=$enable_gr_audio_alsa; else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + enable_gr_audio_alsa=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi fi -done -for ac_header in sys/resource.h stdint.h sched.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-alsa requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-alsa requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-alsa requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-alsa requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed = yes; then + + + +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for ALSA" >&5 +$as_echo_n "checking for ALSA... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$ALSA_CFLAGS"; then + pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"alsa >= 0.9\"") >&5 + ($PKG_CONFIG --exists --print-errors "alsa >= 0.9") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa >= 0.9" 2>/dev/null` +else + pkg_failed=yes fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + fi else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 + pkg_failed=untried +fi + +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$ALSA_LIBS"; then + pkg_cv_ALSA_LIBS="$ALSA_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"alsa >= 0.9\"") >&5 + ($PKG_CONFIG --exists --print-errors "alsa >= 0.9") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs --static "alsa >= 0.9" 2>/dev/null` else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no + pkg_failed=yes fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_ALSA_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_ALSA_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$ALSA_LIBS"; then + pkg_cv_ALSA_LIBS="$ALSA_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"alsa >= 0.9\"") >&5 + ($PKG_CONFIG --exists --print-errors "alsa >= 0.9") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs --static "alsa >= 0.9" 2>/dev/null` else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi - ac_header_preproc=no +if test -n "$PKG_CONFIG"; then + if test -n "$ALSA_INCLUDEDIR"; then + pkg_cv_ALSA_INCLUDEDIR="$ALSA_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"alsa >= 0.9\"") >&5 + ($PKG_CONFIG --exists --print-errors "alsa >= 0.9") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_ALSA_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "alsa >= 0.9" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - eval "$as_ac_Header=\$ac_header_preproc" + _pkg_short_errors_supported=no fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + if test $_pkg_short_errors_supported = yes; then + ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "alsa >= 0.9"` + else + ALSA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "alsa >= 0.9"` + fi + # Put the nasty error message in config.log where it belongs + echo "$ALSA_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-alsa requires package alsa, not found." >&5 +$as_echo "gr-audio-alsa requires package alsa, not found." >&6; } +elif test $pkg_failed = untried; then + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-alsa requires package alsa, not found." >&5 +$as_echo "gr-audio-alsa requires package alsa, not found." >&6; } +else + ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS + ALSA_LIBS=$pkg_cv_ALSA_LIBS + ALSA_INCLUDEDIR=$pkg_cv_ALSA_INCLUDEDIR + + ALSA_CPPFLAGS="" + for flag in $ALSA_CFLAGS; do + case $flag in + -I* | -D* | -U*) ALSA_CPPFLAGS="$ALSA_CPPFLAGS $flag" ;; + esac + done + pkg_cv_ALSA_CPPFLAGS=$ALSA_CPPFLAGS -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : fi + fi -done + ac_config_files="$ac_config_files gr-audio-alsa/Makefile gr-audio-alsa/gr-audio-alsa.pc gr-audio-alsa/src/Makefile gr-audio-alsa/src/run_tests" -{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif + gr_audio_alsa_with=no + if test $passed = no; then + if test x$enable_gr_audio_alsa = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-alsa has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-audio-alsa has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-audio-alsa." >&5 +$as_echo "Not building component gr-audio-alsa." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-audio-alsa" - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_const=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "x${gr_audio_alsa_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_audio_alsa_INCLUDES}" + else + with_INCLUDES="${gr_audio_alsa_INCLUDES}"" ""$with_INCLUDES" + fi + gr_audio_alsa_INCLUDES= + fi + + + if test "x${gr_audio_alsa_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_audio_alsa_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_audio_alsa_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_audio_alsa_SWIG_INCLUDES= + fi + + + if test "x${gr_audio_alsa_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_audio_alsa_PYDIRPATH}" + else + with_PYDIRPATH="${gr_audio_alsa_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_audio_alsa_PYDIRPATH= + fi + + + if test "x${gr_audio_alsa_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_audio_alsa_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_audio_alsa_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_audio_alsa_SWIGDIRPATH= + fi - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then + if test "x${gr_audio_alsa_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_audio_alsa_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_audio_alsa_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_audio_alsa_LIBDIRPATH= + fi -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF + { $as_echo "$as_me:$LINENO: result: Component gr-audio-alsa will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-audio-alsa will be included from a pre-installed library and includes." >&6; } + gr_audio_alsa_with=yes + else + gr_audio_alsa_LDFLAG= + if test x$enable_gr_audio_alsa != xno; then + ac_config_commands="$ac_config_commands run_tests_alsa" + + + build_dirs="$build_dirs gr-audio-alsa" + { $as_echo "$as_me:$LINENO: result: Component gr-audio-alsa passed configuration checks; building." >&5 +$as_echo "Component gr-audio-alsa passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-audio-alsa passed configuration checks; but not building." >&5 +$as_echo "Component gr-audio-alsa passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-audio-alsa" + gr_audio_alsa_skipped=yes + else + gr_audio_alsa_skipped=no + fi -fi -{ echo "$as_me:$LINENO: checking for inline" >&5 -echo $ECHO_N "checking for inline... $ECHO_C" >&6; } -if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_inline=$ac_kw -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 -echo "${ECHO_T}$ac_cv_c_inline" >&6; } -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac -{ echo "$as_me:$LINENO: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef size_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_size_t=yes + + passed=yes + # Check whether --enable-gr-audio-jack was given. +if test "${enable_gr_audio_jack+set}" = set; then + enableval=$enable_gr_audio_jack; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_size_t=no -fi + enable_gr_audio_jack=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6; } -if test $ac_cv_type_size_t = yes; then - : -else -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF -fi -{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; } -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_time=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_header_time=no -fi + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-jack requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-jack requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-jack requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-jack requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6; } -if test $ac_cv_header_time = yes; then -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF + if test $passed = yes; then -fi -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for JACK" >&5 +$as_echo_n "checking for JACK... " >&6; } - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_CFLAGS"; then + pkg_cv_JACK_CFLAGS="$JACK_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"jack >= 0.8\"") >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.8") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.8" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"jack >= 0.8\"") >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.8") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_bigendian=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs --static "jack >= 0.8" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_JACK_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_JACK_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$JACK_LIBS"; then + pkg_cv_JACK_LIBS="$JACK_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"jack >= 0.8\"") >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.8") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs --static "jack >= 0.8" 2>/dev/null` else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + pkg_failed=yes fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + pkg_failed=untried +fi +fi - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -int -main () -{ - _ascii (); _ebcdic (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +if test -n "$PKG_CONFIG"; then + if test -n "$JACK_INCLUDEDIR"; then + pkg_cv_JACK_INCLUDEDIR="$JACK_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"jack >= 0.8\"") >&5 + ($PKG_CONFIG --exists --print-errors "jack >= 0.8") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_JACK_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "jack >= 0.8" 2>/dev/null` +else + pkg_failed=yes fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi + fi +else + pkg_failed=untried fi + + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "jack >= 0.8"` + else + JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.8"` + fi + # Put the nasty error message in config.log where it belongs + echo "$JACK_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-jack requires package jack, not found." >&5 +$as_echo "gr-audio-jack requires package jack, not found." >&6; } +elif test $pkg_failed = untried; then + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-jack requires package jack, not found." >&5 +$as_echo "gr-audio-jack requires package jack, not found." >&6; } +else + JACK_CFLAGS=$pkg_cv_JACK_CFLAGS + JACK_LIBS=$pkg_cv_JACK_LIBS + JACK_INCLUDEDIR=$pkg_cv_JACK_INCLUDEDIR + + JACK_CPPFLAGS="" + for flag in $JACK_CFLAGS; do + case $flag in + -I* | -D* | -U*) JACK_CPPFLAGS="$JACK_CPPFLAGS $flag" ;; + esac + done + pkg_cv_JACK_CPPFLAGS=$JACK_CPPFLAGS + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ + ac_config_files="$ac_config_files gr-audio-jack/Makefile gr-audio-jack/src/Makefile gr-audio-jack/src/run_tests" - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no + + + gr_audio_jack_with=no + if test $passed = no; then + if test x$enable_gr_audio_jack = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-jack has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-audio-jack has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-audio-jack." >&5 +$as_echo "Not building component gr-audio-jack." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-audio-jack" + + if test "x${gr_audio_jack_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_audio_jack_INCLUDES}" + else + with_INCLUDES="${gr_audio_jack_INCLUDES}"" ""$with_INCLUDES" + fi + gr_audio_jack_INCLUDES= + fi + + + if test "x${gr_audio_jack_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_audio_jack_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_audio_jack_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_audio_jack_SWIG_INCLUDES= + fi + + + if test "x${gr_audio_jack_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_audio_jack_PYDIRPATH}" + else + with_PYDIRPATH="${gr_audio_jack_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_audio_jack_PYDIRPATH= + fi + + + if test "x${gr_audio_jack_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_audio_jack_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_audio_jack_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_audio_jack_SWIGDIRPATH= + fi + + + if test "x${gr_audio_jack_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_audio_jack_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_audio_jack_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_audio_jack_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-audio-jack will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-audio-jack will be included from a pre-installed library and includes." >&6; } + gr_audio_jack_with=yes + else + gr_audio_jack_LDFLAG= + if test x$enable_gr_audio_jack != xno; then + ac_config_commands="$ac_config_commands run_tests_jack" + + + build_dirs="$build_dirs gr-audio-jack" + { $as_echo "$as_me:$LINENO: result: Component gr-audio-jack passed configuration checks; building." >&5 +$as_echo "Component gr-audio-jack passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-audio-jack passed configuration checks; but not building." >&5 +$as_echo "Component gr-audio-jack passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-audio-jack" + gr_audio_jack_skipped=yes + else + gr_audio_jack_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-audio-oss was given. +if test "${enable_gr_audio_oss+set}" = set; then + enableval=$enable_gr_audio_oss; else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -( exit $ac_status ) -ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + enable_gr_audio_oss=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac -{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 -echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; } -if test "${ac_cv_struct_tm+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-oss requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-oss requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-oss requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-oss requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed = yes; then + case $host_os in + netbsd*) + +{ $as_echo "$as_me:$LINENO: checking for main in -lossaudio" >&5 +$as_echo_n "checking for main in -lossaudio... " >&6; } +if test "${ac_cv_lib_ossaudio_main+set}" = set; then + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-lossaudio $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -#include + int main () { -struct tm tm; - int *p = &tm.tm_sec; - return !p; +return main (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_struct_tm=time.h + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_ossaudio_main=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_struct_tm=sys/time.h + ac_cv_lib_ossaudio_main=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 -echo "${ECHO_T}$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -cat >>confdefs.h <<\_ACEOF -#define TM_IN_SYS_TIME 1 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ossaudio_main" >&5 +$as_echo "$ac_cv_lib_ossaudio_main" >&6; } +if test "x$ac_cv_lib_ossaudio_main" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBOSSAUDIO 1 _ACEOF + LIBS="-lossaudio $LIBS" + +else + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-oss requires library ossaudio, not found." >&5 +$as_echo "gr-audio-oss requires library ossaudio, not found." >&6; } fi +ac_cv_lib_ossaudio=ac_cv_lib_ossaudio_main + if test $passed != no; then + OSS_LIBS=-lossaudio -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:$LINENO: result: Using OSS library $OSS_LIBS" >&5 +$as_echo "Using OSS library $OSS_LIBS" >&6; } + fi + ;; + darwin*) + passed=no + ;; + *) + if test "${ac_cv_header_sys_soundcard_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5 +$as_echo_n "checking for sys/soundcard.h... " >&6; } +if test "${ac_cv_header_sys_soundcard_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5 +$as_echo "$ac_cv_header_sys_soundcard_h" >&6; } else - cat >conftest.$ac_ext <<_ACEOF + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking sys/soundcard.h usability" >&5 +$as_echo_n "checking sys/soundcard.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -int -main () -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} +$ac_includes_default +#include _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_working_alloca_h=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA_H 1 -_ACEOF - + ac_header_compiler=no fi -{ echo "$as_me:$LINENO: checking for alloca" >&5 -echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking sys/soundcard.h presence" >&5 +$as_echo_n "checking sys/soundcard.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} +#include _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes + }; then + ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func_alloca_works=no + ac_header_preproc=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -if test $ac_cv_func_alloca_works = yes; then +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&2;} -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA 1 -_ACEOF + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5 +$as_echo_n "checking for sys/soundcard.h... " >&6; } +if test "${ac_cv_header_sys_soundcard_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_sys_soundcard_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5 +$as_echo "$ac_cv_header_sys_soundcard_h" >&6; } +fi +if test "x$ac_cv_header_sys_soundcard_h" = x""yes; then + : else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-oss requires sys/soundcard.h, not found." >&5 +$as_echo "gr-audio-oss requires sys/soundcard.h, not found." >&6; } +fi -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -cat >>confdefs.h <<\_ACEOF -#define C_ALLOCA 1 -_ACEOF + esac + fi + ac_config_files="$ac_config_files gr-audio-oss/Makefile gr-audio-oss/src/Makefile gr-audio-oss/src/run_tests" -{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } -if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then - ac_cv_os_cray=yes + + + gr_audio_oss_with=no + if test $passed = no; then + if test x$enable_gr_audio_oss = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-oss has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-audio-oss has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-audio-oss." >&5 +$as_echo "Not building component gr-audio-oss." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-audio-oss" + + if test "x${gr_audio_oss_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_audio_oss_INCLUDES}" + else + with_INCLUDES="${gr_audio_oss_INCLUDES}"" ""$with_INCLUDES" + fi + gr_audio_oss_INCLUDES= + fi + + + if test "x${gr_audio_oss_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_audio_oss_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_audio_oss_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_audio_oss_SWIG_INCLUDES= + fi + + + if test "x${gr_audio_oss_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_audio_oss_PYDIRPATH}" + else + with_PYDIRPATH="${gr_audio_oss_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_audio_oss_PYDIRPATH= + fi + + + if test "x${gr_audio_oss_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_audio_oss_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_audio_oss_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_audio_oss_SWIGDIRPATH= + fi + + + if test "x${gr_audio_oss_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_audio_oss_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_audio_oss_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_audio_oss_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-audio-oss will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-audio-oss will be included from a pre-installed library and includes." >&6; } + gr_audio_oss_with=yes + else + gr_audio_oss_LDFLAG= + if test x$enable_gr_audio_oss != xno; then + ac_config_commands="$ac_config_commands run_tests_oss" + + + build_dirs="$build_dirs gr-audio-oss" + { $as_echo "$as_me:$LINENO: result: Component gr-audio-oss passed configuration checks; building." >&5 +$as_echo "Component gr-audio-oss passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-audio-oss passed configuration checks; but not building." >&5 +$as_echo "Component gr-audio-oss passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-audio-oss" + gr_audio_oss_skipped=yes + else + gr_audio_oss_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-audio-osx was given. +if test "${enable_gr_audio_osx+set}" = set; then + enableval=$enable_gr_audio_osx; else - ac_cv_os_cray=no + + enable_gr_audio_osx=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -rm -f conftest* + + + + + if test $passed != no; then + if test $passed = yes; then + if test x$omnithread_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-osx requires omnithread, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-osx requires omnithread, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$omnithread_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-osx requires omnithread to be included as --with-omnithread[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-osx requires omnithread to be included as --with-omnithread[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-osx requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-osx requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-osx requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-osx requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed = yes; then + case "$host_os" in + darwin*) + + audiounitok=yes + case "$host_os" in + darwin*);; + *) + audiounitok=no + { $as_echo "$as_me:$LINENO: result: gr-audio-osx requires darwin or MacOS X." >&5 +$as_echo "gr-audio-osx requires darwin or MacOS X." >&6; } + esac + + +for ac_header in AudioUnit/AudioUnit.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 fi -{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -echo "${ECHO_T}$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else - cat >conftest.$ac_ext <<_ACEOF + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} +$ac_includes_default +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - break + ac_header_compiler=no fi - done -fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 -else - cat >conftest.$ac_ext <<_ACEOF +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} - -int -main () -{ - return find_stack_direction () < 0; -} +#include <$ac_header> _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" +if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -( exit $ac_status ) -ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + ac_header_preproc=no fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF - +else + audiounitok=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-osx requires AudioUnit/AudioUnit.h, which is available on MacOS X." >&5 +$as_echo "gr-audio-osx requires AudioUnit/AudioUnit.h, which is available on MacOS X." >&6; } fi -{ echo "$as_me:$LINENO: checking for function prototypes" >&5 -echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6; } -if test "$ac_cv_prog_cc_c89" != no; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -cat >>confdefs.h <<\_ACEOF -#define PROTOTYPES 1 -_ACEOF +done -cat >>confdefs.h <<\_ACEOF -#define __PROTOTYPES 1 -_ACEOF -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } +for ac_header in AudioToolbox/AudioToolbox.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 fi - -{ echo "$as_me:$LINENO: checking whether setvbuf arguments are reversed" >&5 -echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6; } -if test "${ac_cv_func_setvbuf_reversed+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else - ac_cv_func_setvbuf_reversed=no - cat >conftest.$ac_ext <<_ACEOF + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -# ifdef PROTOTYPES - int (setvbuf) (FILE *, int, char *, size_t); -# endif -int -main () -{ -char buf; return setvbuf (stdout, _IOLBF, &buf, 1); - ; - return 0; -} +$ac_includes_default +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - cat >conftest.$ac_ext <<_ACEOF + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -# ifdef PROTOTYPES - int (setvbuf) (FILE *, int, char *, size_t); -# endif -int -main () -{ -char buf; return setvbuf (stdout, &buf, _IOLBF, 1); - ; - return 0; -} +#include <$ac_header> _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" +if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + audiounitok=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-osx requires AudioToolbox/AudioToolbox.h, which is available on MacOS X." >&5 +$as_echo "gr-audio-osx requires AudioToolbox/AudioToolbox.h, which is available on MacOS X." >&6; } +fi + +done + + + if test $audiounitok = yes; then + : + else + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-osx requires AudioUnit, not found." >&5 +$as_echo "gr-audio-osx requires AudioUnit, not found." >&6; } + fi + + ;; + *) + { $as_echo "$as_me:$LINENO: result: gr-audio-osx will build on Mac OS X and Darwin only." >&5 +$as_echo "gr-audio-osx will build on Mac OS X and Darwin only." >&6; } + passed=no + ;; + esac + fi + + ac_config_files="$ac_config_files gr-audio-osx/Makefile gr-audio-osx/src/Makefile gr-audio-osx/src/run_tests" + + + + + gr_audio_osx_with=no + if test $passed = no; then + if test x$enable_gr_audio_osx = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-osx has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-audio-osx has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-audio-osx." >&5 +$as_echo "Not building component gr-audio-osx." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-audio-osx" + + if test "x${gr_audio_osx_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_audio_osx_INCLUDES}" + else + with_INCLUDES="${gr_audio_osx_INCLUDES}"" ""$with_INCLUDES" + fi + gr_audio_osx_INCLUDES= + fi + + + if test "x${gr_audio_osx_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_audio_osx_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_audio_osx_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_audio_osx_SWIG_INCLUDES= + fi + + + if test "x${gr_audio_osx_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_audio_osx_PYDIRPATH}" + else + with_PYDIRPATH="${gr_audio_osx_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_audio_osx_PYDIRPATH= + fi + + + if test "x${gr_audio_osx_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_audio_osx_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_audio_osx_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_audio_osx_SWIGDIRPATH= + fi + + + if test "x${gr_audio_osx_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_audio_osx_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_audio_osx_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_audio_osx_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-audio-osx will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-audio-osx will be included from a pre-installed library and includes." >&6; } + gr_audio_osx_with=yes + else + gr_audio_osx_LDFLAG= + if test x$enable_gr_audio_osx != xno; then + ac_config_commands="$ac_config_commands run_tests_osx" + + + build_dirs="$build_dirs gr-audio-osx" + { $as_echo "$as_me:$LINENO: result: Component gr-audio-osx passed configuration checks; building." >&5 +$as_echo "Component gr-audio-osx passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-audio-osx passed configuration checks; but not building." >&5 +$as_echo "Component gr-audio-osx passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-audio-osx" + gr_audio_osx_skipped=yes + else + gr_audio_osx_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-audio-portaudio was given. +if test "${enable_gr_audio_portaudio+set}" = set; then + enableval=$enable_gr_audio_portaudio; +else + + enable_gr_audio_portaudio=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + +fi + + + + + + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-portaudio requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-portaudio requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-portaudio requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-portaudio requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed = yes; then + + + +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for PORTAUDIO" >&5 +$as_echo_n "checking for PORTAUDIO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$PORTAUDIO_CFLAGS"; then + pkg_cv_PORTAUDIO_CFLAGS="$PORTAUDIO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"portaudio-2.0 >= 19\"") >&5 + ($PKG_CONFIG --exists --print-errors "portaudio-2.0 >= 19") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - # It compiles and links either way, so it must not be declared - # with a prototype and most likely this is a K&R C compiler. - # Try running it. - if test "$cross_compiling" = yes; then - : # Assume setvbuf is not reversed when cross-compiling. + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_PORTAUDIO_CFLAGS=`$PKG_CONFIG --cflags "portaudio-2.0 >= 19" 2>/dev/null` else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -/* This call has the arguments reversed. - A reversed system may check and see that the address of buf - is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ - char buf; - if (setvbuf (stdout, _IOLBF, &buf, 1) != 0) - return 1; - putchar ('\r'); - return 0; /* Non-reversed systems SEGV here. */ - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$PORTAUDIO_LIBS"; then + pkg_cv_PORTAUDIO_LIBS="$PORTAUDIO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"portaudio-2.0 >= 19\"") >&5 + ($PKG_CONFIG --exists --print-errors "portaudio-2.0 >= 19") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_PORTAUDIO_LIBS=`$PKG_CONFIG --libs --static "portaudio-2.0 >= 19" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_PORTAUDIO_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_PORTAUDIO_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$PORTAUDIO_LIBS"; then + pkg_cv_PORTAUDIO_LIBS="$PORTAUDIO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"portaudio-2.0 >= 19\"") >&5 + ($PKG_CONFIG --exists --print-errors "portaudio-2.0 >= 19") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_setvbuf_reversed=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_PORTAUDIO_LIBS=`$PKG_CONFIG --libs --static "portaudio-2.0 >= 19" 2>/dev/null` else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi +if test -n "$PKG_CONFIG"; then + if test -n "$PORTAUDIO_INCLUDEDIR"; then + pkg_cv_PORTAUDIO_INCLUDEDIR="$PORTAUDIO_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"portaudio-2.0 >= 19\"") >&5 + ($PKG_CONFIG --exists --print-errors "portaudio-2.0 >= 19") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_PORTAUDIO_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "portaudio-2.0 >= 19" 2>/dev/null` +else + pkg_failed=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi +else + pkg_failed=untried fi - ac_cv_func_setvbuf_reversed=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -fi +if test $pkg_failed = yes; then -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + PORTAUDIO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "portaudio-2.0 >= 19"` + else + PORTAUDIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "portaudio-2.0 >= 19"` + fi + # Put the nasty error message in config.log where it belongs + echo "$PORTAUDIO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-portaudio requires package portaudio, not found." >&5 +$as_echo "gr-audio-portaudio requires package portaudio, not found." >&6; } +elif test $pkg_failed = untried; then + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-portaudio requires package portaudio, not found." >&5 +$as_echo "gr-audio-portaudio requires package portaudio, not found." >&6; } +else + PORTAUDIO_CFLAGS=$pkg_cv_PORTAUDIO_CFLAGS + PORTAUDIO_LIBS=$pkg_cv_PORTAUDIO_LIBS + PORTAUDIO_INCLUDEDIR=$pkg_cv_PORTAUDIO_INCLUDEDIR + + PORTAUDIO_CPPFLAGS="" + for flag in $PORTAUDIO_CFLAGS; do + case $flag in + -I* | -D* | -U*) PORTAUDIO_CPPFLAGS="$PORTAUDIO_CPPFLAGS $flag" ;; + esac + done + pkg_cv_PORTAUDIO_CPPFLAGS=$PORTAUDIO_CPPFLAGS + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : fi + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_setvbuf_reversed" >&5 -echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6; } -if test $ac_cv_func_setvbuf_reversed = yes; then + ac_config_files="$ac_config_files gr-audio-portaudio/Makefile gr-audio-portaudio/src/Makefile gr-audio-portaudio/src/run_tests" -cat >>confdefs.h <<\_ACEOF -#define SETVBUF_REVERSED 1 -_ACEOF -fi -for ac_func in vprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + gr_audio_portaudio_with=no + if test $passed = no; then + if test x$enable_gr_audio_portaudio = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-portaudio has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-audio-portaudio has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-audio-portaudio." >&5 +$as_echo "Not building component gr-audio-portaudio." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-audio-portaudio" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + if test "x${gr_audio_portaudio_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_audio_portaudio_INCLUDES}" + else + with_INCLUDES="${gr_audio_portaudio_INCLUDES}"" ""$with_INCLUDES" + fi + gr_audio_portaudio_INCLUDES= + fi -#ifdef __STDC__ -# include -#else -# include -#endif -#undef $ac_func + if test "x${gr_audio_portaudio_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_audio_portaudio_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_audio_portaudio_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_audio_portaudio_SWIG_INCLUDES= + fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + if test "x${gr_audio_portaudio_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_audio_portaudio_PYDIRPATH}" + else + with_PYDIRPATH="${gr_audio_portaudio_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_audio_portaudio_PYDIRPATH= + fi + + + if test "x${gr_audio_portaudio_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_audio_portaudio_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_audio_portaudio_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_audio_portaudio_SWIGDIRPATH= + fi + + + if test "x${gr_audio_portaudio_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_audio_portaudio_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_audio_portaudio_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_audio_portaudio_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-audio-portaudio will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-audio-portaudio will be included from a pre-installed library and includes." >&6; } + gr_audio_portaudio_with=yes + else + gr_audio_portaudio_LDFLAG= + if test x$enable_gr_audio_portaudio != xno; then + ac_config_commands="$ac_config_commands run_tests_portaudio" + + + build_dirs="$build_dirs gr-audio-portaudio" + { $as_echo "$as_me:$LINENO: result: Component gr-audio-portaudio passed configuration checks; building." >&5 +$as_echo "Component gr-audio-portaudio passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-audio-portaudio passed configuration checks; but not building." >&5 +$as_echo "Component gr-audio-portaudio passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-audio-portaudio" + gr_audio_portaudio_skipped=yes + else + gr_audio_portaudio_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-audio-windows was given. +if test "${enable_gr_audio_windows+set}" = set; then + enableval=$enable_gr_audio_windows; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi + enable_gr_audio_windows=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -{ echo "$as_me:$LINENO: checking for _doprnt" >&5 -echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; } -if test "${ac_cv_func__doprnt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define _doprnt to an innocuous variant, in case declares _doprnt. - For example, HP-UX 11i declares gettimeofday. */ -#define _doprnt innocuous__doprnt -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _doprnt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif -#undef _doprnt -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char _doprnt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub__doprnt || defined __stub____doprnt -choke me -#endif + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-audio-windows requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-audio-windows requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-windows requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-audio-windows requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed = yes; then + case "$host_os" in + cygwin*|win*|mingw*) + +{ $as_echo "$as_me:$LINENO: checking for main in -lwinmm" >&5 +$as_echo_n "checking for main in -lwinmm... " >&6; } +if test "${ac_cv_lib_winmm_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lwinmm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + int main () { -return _doprnt (); +return main (); ; return 0; } @@ -24720,1559 +39816,1399 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func__doprnt=yes + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_winmm_main=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_func__doprnt=no + ac_cv_lib_winmm_main=no fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 -echo "${ECHO_T}$ac_cv_func__doprnt" >&6; } -if test $ac_cv_func__doprnt = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DOPRNT 1 +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_winmm_main" >&5 +$as_echo "$ac_cv_lib_winmm_main" >&6; } +if test "x$ac_cv_lib_winmm_main" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBWINMM 1 _ACEOF + LIBS="-lwinmm $LIBS" + +else + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-audio-windows requires library winmm, not found." >&5 +$as_echo "gr-audio-windows requires library winmm, not found." >&6; } fi +ac_cv_lib_winmm=ac_cv_lib_winmm_main + + ;; + *) + { $as_echo "$as_me:$LINENO: result: gr-audio-windows will build on a Windows Unix environment only." >&5 +$as_echo "gr-audio-windows will build on a Windows Unix environment only." >&6; } + passed=no + ;; + esac + fi + + ac_config_files="$ac_config_files gr-audio-windows/Makefile gr-audio-windows/src/Makefile gr-audio-windows/src/run_tests" + + + + + gr_audio_windows_with=no + if test $passed = no; then + if test x$enable_gr_audio_windows = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-audio-windows has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-audio-windows has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-audio-windows." >&5 +$as_echo "Not building component gr-audio-windows." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-audio-windows" + + if test "x${gr_audio_windows_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_audio_windows_INCLUDES}" + else + with_INCLUDES="${gr_audio_windows_INCLUDES}"" ""$with_INCLUDES" + fi + gr_audio_windows_INCLUDES= + fi + + + if test "x${gr_audio_windows_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_audio_windows_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_audio_windows_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_audio_windows_SWIG_INCLUDES= + fi + + + if test "x${gr_audio_windows_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_audio_windows_PYDIRPATH}" + else + with_PYDIRPATH="${gr_audio_windows_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_audio_windows_PYDIRPATH= + fi + + + if test "x${gr_audio_windows_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_audio_windows_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_audio_windows_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_audio_windows_SWIGDIRPATH= + fi + + + if test "x${gr_audio_windows_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_audio_windows_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_audio_windows_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_audio_windows_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-audio-windows will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-audio-windows will be included from a pre-installed library and includes." >&6; } + gr_audio_windows_with=yes + else + gr_audio_windows_LDFLAG= + if test x$enable_gr_audio_windows != xno; then + WINAUDIO_LIBS=-lwinmm + + ac_config_commands="$ac_config_commands run_tests_audio_windows" + + + build_dirs="$build_dirs gr-audio-windows" + { $as_echo "$as_me:$LINENO: result: Component gr-audio-windows passed configuration checks; building." >&5 +$as_echo "Component gr-audio-windows passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-audio-windows passed configuration checks; but not building." >&5 +$as_echo "Component gr-audio-windows passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-audio-windows" + gr_audio_windows_skipped=yes + else + gr_audio_windows_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-cvsd-vocoder was given. +if test "${enable_gr_cvsd_vocoder+set}" = set; then + enableval=$enable_gr_cvsd_vocoder; +else + + enable_gr_cvsd_vocoder=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi fi -done + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-cvsd-vocoder requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-cvsd-vocoder requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-cvsd-vocoder requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-cvsd-vocoder requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + ac_config_files="$ac_config_files gr-cvsd-vocoder/Makefile gr-cvsd-vocoder/src/Makefile gr-cvsd-vocoder/src/lib/Makefile gr-cvsd-vocoder/src/python/Makefile gr-cvsd-vocoder/src/python/run_tests" + gr_cvsd_vocoder_with=no + if test $passed = no; then + if test x$enable_gr_cvsd_vocoder = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-cvsd-vocoder has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-cvsd-vocoder has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-cvsd-vocoder." >&5 +$as_echo "Not building component gr-cvsd-vocoder." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-cvsd-vocoder" + + if test "x${gr_cvsd_vocoder_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_cvsd_vocoder_INCLUDES}" + else + with_INCLUDES="${gr_cvsd_vocoder_INCLUDES}"" ""$with_INCLUDES" + fi + gr_cvsd_vocoder_INCLUDES= + fi + -for ac_func in mmap select socket strcspn strerror strspn getpagesize sysconf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "x${gr_cvsd_vocoder_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_cvsd_vocoder_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_cvsd_vocoder_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_cvsd_vocoder_SWIG_INCLUDES= + fi + + + if test "x${gr_cvsd_vocoder_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_cvsd_vocoder_PYDIRPATH}" + else + with_PYDIRPATH="${gr_cvsd_vocoder_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_cvsd_vocoder_PYDIRPATH= + fi + + + if test "x${gr_cvsd_vocoder_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_cvsd_vocoder_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_cvsd_vocoder_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_cvsd_vocoder_SWIGDIRPATH= + fi + + + if test "x${gr_cvsd_vocoder_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_cvsd_vocoder_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_cvsd_vocoder_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_cvsd_vocoder_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-cvsd-vocoder will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-cvsd-vocoder will be included from a pre-installed library and includes." >&6; } + gr_cvsd_vocoder_with=yes + else + gr_cvsd_vocoder_LDFLAG= + if test x$enable_gr_cvsd_vocoder != xno; then + ac_config_commands="$ac_config_commands run_tests_cvsd" + + + build_dirs="$build_dirs gr-cvsd-vocoder" + { $as_echo "$as_me:$LINENO: result: Component gr-cvsd-vocoder passed configuration checks; building." >&5 +$as_echo "Component gr-cvsd-vocoder passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-cvsd-vocoder passed configuration checks; but not building." >&5 +$as_echo "Component gr-cvsd-vocoder passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-cvsd-vocoder" + gr_cvsd_vocoder_skipped=yes + else + gr_cvsd_vocoder_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-gpio was given. +if test "${enable_gr_gpio+set}" = set; then + enableval=$enable_gr_gpio; else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + enable_gr_gpio=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -#ifdef __STDC__ -# include -#else -# include -#endif +fi -#undef $ac_func -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + + + if test $passed != no; then + if test $passed = yes; then + if test x$usrp_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-gpio requires usrp, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-gpio requires usrp, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gpio requires usrp to be included as --with-usrp[=arg]" >&5 +$as_echo "$as_me: error: Component gr-gpio requires usrp to be included as --with-usrp[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + ac_config_files="$ac_config_files gr-gpio/Makefile gr-gpio/src/Makefile gr-gpio/src/fpga/Makefile gr-gpio/src/fpga/include/Makefile gr-gpio/src/fpga/top/Makefile gr-gpio/src/fpga/lib/Makefile gr-gpio/src/fpga/rbf/Makefile gr-gpio/src/python/Makefile" + + + + + gr_gpio_with=no + if test $passed = no; then + if test x$enable_gr_gpio = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gpio has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-gpio has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-gpio." >&5 +$as_echo "Not building component gr-gpio." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-gpio" + + if test "x${gr_gpio_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_gpio_INCLUDES}" + else + with_INCLUDES="${gr_gpio_INCLUDES}"" ""$with_INCLUDES" + fi + gr_gpio_INCLUDES= + fi + + + if test "x${gr_gpio_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_gpio_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_gpio_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_gpio_SWIG_INCLUDES= + fi + + + if test "x${gr_gpio_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_gpio_PYDIRPATH}" + else + with_PYDIRPATH="${gr_gpio_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_gpio_PYDIRPATH= + fi + + + if test "x${gr_gpio_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_gpio_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_gpio_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_gpio_SWIGDIRPATH= + fi + + + if test "x${gr_gpio_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_gpio_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_gpio_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_gpio_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-gpio will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-gpio will be included from a pre-installed library and includes." >&6; } + gr_gpio_with=yes + else + gr_gpio_LDFLAG= + if test x$enable_gr_gpio != xno; then + : + build_dirs="$build_dirs gr-gpio" + { $as_echo "$as_me:$LINENO: result: Component gr-gpio passed configuration checks; building." >&5 +$as_echo "Component gr-gpio passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-gpio passed configuration checks; but not building." >&5 +$as_echo "Component gr-gpio passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-gpio" + gr_gpio_skipped=yes + else + gr_gpio_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-gsm-fr-vocoder was given. +if test "${enable_gr_gsm_fr_vocoder+set}" = set; then + enableval=$enable_gr_gsm_fr_vocoder; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi + enable_gr_gsm_fr_vocoder=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -fi -done + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-gsm-fr-vocoder requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-gsm-fr-vocoder requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gsm-fr-vocoder requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-gsm-fr-vocoder requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -for ac_func in snprintf gettimeofday nanosleep sched_setscheduler -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + ac_config_files="$ac_config_files gr-gsm-fr-vocoder/Makefile gr-gsm-fr-vocoder/src/Makefile gr-gsm-fr-vocoder/src/lib/Makefile gr-gsm-fr-vocoder/src/lib/gsm/Makefile gr-gsm-fr-vocoder/src/python/Makefile gr-gsm-fr-vocoder/src/python/run_tests" -#ifdef __STDC__ -# include -#else -# include -#endif -#undef $ac_func -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + gr_gsm_fr_vocoder_with=no + if test $passed = no; then + if test x$enable_gr_gsm_fr_vocoder = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-gsm-fr-vocoder has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-gsm-fr-vocoder has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-gsm-fr-vocoder." >&5 +$as_echo "Not building component gr-gsm-fr-vocoder." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-gsm-fr-vocoder" - eval "$as_ac_var=no" -fi + if test "x${gr_gsm_fr_vocoder_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_gsm_fr_vocoder_INCLUDES}" + else + with_INCLUDES="${gr_gsm_fr_vocoder_INCLUDES}"" ""$with_INCLUDES" + fi + gr_gsm_fr_vocoder_INCLUDES= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -fi -done + if test "x${gr_gsm_fr_vocoder_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_gsm_fr_vocoder_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_gsm_fr_vocoder_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_gsm_fr_vocoder_SWIG_INCLUDES= + fi + if test "x${gr_gsm_fr_vocoder_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_gsm_fr_vocoder_PYDIRPATH}" + else + with_PYDIRPATH="${gr_gsm_fr_vocoder_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_gsm_fr_vocoder_PYDIRPATH= + fi -for ac_func in modf sqrt -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + if test "x${gr_gsm_fr_vocoder_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_gsm_fr_vocoder_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_gsm_fr_vocoder_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_gsm_fr_vocoder_SWIGDIRPATH= + fi -#ifdef __STDC__ -# include -#else -# include -#endif -#undef $ac_func + if test "x${gr_gsm_fr_vocoder_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_gsm_fr_vocoder_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_gsm_fr_vocoder_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_gsm_fr_vocoder_LIBDIRPATH= + fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + { $as_echo "$as_me:$LINENO: result: Component gr-gsm-fr-vocoder will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-gsm-fr-vocoder will be included from a pre-installed library and includes." >&6; } + gr_gsm_fr_vocoder_with=yes + else + gr_gsm_fr_vocoder_LDFLAG= + if test x$enable_gr_gsm_fr_vocoder != xno; then + ac_config_commands="$ac_config_commands run_tests_gsm" + + + build_dirs="$build_dirs gr-gsm-fr-vocoder" + { $as_echo "$as_me:$LINENO: result: Component gr-gsm-fr-vocoder passed configuration checks; building." >&5 +$as_echo "Component gr-gsm-fr-vocoder passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-gsm-fr-vocoder passed configuration checks; but not building." >&5 +$as_echo "Component gr-gsm-fr-vocoder passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-gsm-fr-vocoder" + gr_gsm_fr_vocoder_skipped=yes + else + gr_gsm_fr_vocoder_skipped=no + fi -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + + + + + + + + + + + passed=yes + # Check whether --enable-gr-pager was given. +if test "${enable_gr_pager+set}" = set; then + enableval=$enable_gr_pager; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi + enable_gr_pager=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -fi -done -{ echo "$as_me:$LINENO: checking for sincos in -lm" >&5 -echo $ECHO_N "checking for sincos in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_sincos+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sincos (); -int -main () -{ -return sincos (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_sincos=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_m_sincos=no -fi + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-pager requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-pager requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-pager requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-pager requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + ac_config_files="$ac_config_files gr-pager/Makefile gr-pager/src/Makefile gr-pager/src/run_tests" + + + + + gr_pager_with=no + if test $passed = no; then + if test x$enable_gr_pager = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-pager has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-pager has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-pager." >&5 +$as_echo "Not building component gr-pager." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-pager" + + if test "x${gr_pager_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_pager_INCLUDES}" + else + with_INCLUDES="${gr_pager_INCLUDES}"" ""$with_INCLUDES" + fi + gr_pager_INCLUDES= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_sincos" >&5 -echo "${ECHO_T}$ac_cv_lib_m_sincos" >&6; } -if test $ac_cv_lib_m_sincos = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SINCOS 1 -_ACEOF + if test "x${gr_pager_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_pager_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_pager_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_pager_SWIG_INCLUDES= + fi -fi -{ echo "$as_me:$LINENO: checking for sincosf in -lm" >&5 -echo $ECHO_N "checking for sincosf in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_sincosf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + if test "x${gr_pager_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_pager_PYDIRPATH}" + else + with_PYDIRPATH="${gr_pager_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_pager_PYDIRPATH= + fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sincosf (); -int -main () -{ -return sincosf (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_sincosf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_m_sincosf=no -fi + if test "x${gr_pager_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_pager_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_pager_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_pager_SWIGDIRPATH= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_sincosf" >&5 -echo "${ECHO_T}$ac_cv_lib_m_sincosf" >&6; } -if test $ac_cv_lib_m_sincosf = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SINCOSF 1 -_ACEOF + if test "x${gr_pager_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_pager_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_pager_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_pager_LIBDIRPATH= + fi -fi + { $as_echo "$as_me:$LINENO: result: Component gr-pager will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-pager will be included from a pre-installed library and includes." >&6; } + gr_pager_with=yes + else + gr_pager_LDFLAG= + if test x$enable_gr_pager != xno; then + ac_config_commands="$ac_config_commands run_tests_pager" + + + build_dirs="$build_dirs gr-pager" + { $as_echo "$as_me:$LINENO: result: Component gr-pager passed configuration checks; building." >&5 +$as_echo "Component gr-pager passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-pager passed configuration checks; but not building." >&5 +$as_echo "Component gr-pager passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-pager" + gr_pager_skipped=yes + else + gr_pager_skipped=no + fi -{ echo "$as_me:$LINENO: checking for sinf in -lm" >&5 -echo $ECHO_N "checking for sinf in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_sinf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sinf (); -int -main () -{ -return sinf (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_sinf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_m_sinf=no -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinf" >&5 -echo "${ECHO_T}$ac_cv_lib_m_sinf" >&6; } -if test $ac_cv_lib_m_sinf = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SINF 1 -_ACEOF -fi -{ echo "$as_me:$LINENO: checking for cosf in -lm" >&5 -echo $ECHO_N "checking for cosf in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_cosf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char cosf (); -int -main () -{ -return cosf (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_cosf=yes + + + + passed=yes + # Check whether --enable-gr-radar-mono was given. +if test "${enable_gr_radar_mono+set}" = set; then + enableval=$enable_gr_radar_mono; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_m_cosf=no -fi + enable_gr_radar_mono=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_cosf" >&5 -echo "${ECHO_T}$ac_cv_lib_m_cosf" >&6; } -if test $ac_cv_lib_m_cosf = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_COSF 1 -_ACEOF -fi -{ echo "$as_me:$LINENO: checking for trunc in -lm" >&5 -echo $ECHO_N "checking for trunc in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_trunc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char trunc (); -int -main () -{ -return trunc (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_trunc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_m_trunc=no -fi + if test $passed != no; then + if test $passed = yes; then + if test x$usrp_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-radar-mono requires usrp, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-radar-mono requires usrp, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-radar-mono requires usrp to be included as --with-usrp[=arg]" >&5 +$as_echo "$as_me: error: Component gr-radar-mono requires usrp to be included as --with-usrp[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-radar-mono requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-radar-mono requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-radar-mono requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-radar-mono requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + ac_config_files="$ac_config_files gr-radar-mono/Makefile gr-radar-mono/doc/Makefile gr-radar-mono/src/Makefile gr-radar-mono/src/fpga/Makefile gr-radar-mono/src/fpga/top/Makefile gr-radar-mono/src/fpga/lib/Makefile gr-radar-mono/src/fpga/models/Makefile gr-radar-mono/src/fpga/tb/Makefile gr-radar-mono/src/lib/Makefile gr-radar-mono/src/python/Makefile gr-radar-mono/src/python/run_tests" + + + + + gr_radar_mono_with=no + if test $passed = no; then + if test x$enable_gr_radar_mono = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-radar-mono has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-radar-mono has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-radar-mono." >&5 +$as_echo "Not building component gr-radar-mono." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-radar-mono" + + if test "x${gr_radar_mono_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_radar_mono_INCLUDES}" + else + with_INCLUDES="${gr_radar_mono_INCLUDES}"" ""$with_INCLUDES" + fi + gr_radar_mono_INCLUDES= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_trunc" >&5 -echo "${ECHO_T}$ac_cv_lib_m_trunc" >&6; } -if test $ac_cv_lib_m_trunc = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TRUNC 1 -_ACEOF + if test "x${gr_radar_mono_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_radar_mono_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_radar_mono_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_radar_mono_SWIG_INCLUDES= + fi -fi -{ echo "$as_me:$LINENO: checking for exp10 in -lm" >&5 -echo $ECHO_N "checking for exp10 in -lm... $ECHO_C" >&6; } -if test "${ac_cv_lib_m_exp10+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + if test "x${gr_radar_mono_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_radar_mono_PYDIRPATH}" + else + with_PYDIRPATH="${gr_radar_mono_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_radar_mono_PYDIRPATH= + fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char exp10 (); -int -main () -{ -return exp10 (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_m_exp10=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_lib_m_exp10=no -fi + if test "x${gr_radar_mono_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_radar_mono_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_radar_mono_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_radar_mono_SWIGDIRPATH= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_exp10" >&5 -echo "${ECHO_T}$ac_cv_lib_m_exp10" >&6; } -if test $ac_cv_lib_m_exp10 = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_EXP10 1 -_ACEOF + if test "x${gr_radar_mono_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_radar_mono_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_radar_mono_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_radar_mono_LIBDIRPATH= + fi -fi + { $as_echo "$as_me:$LINENO: result: Component gr-radar-mono will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-radar-mono will be included from a pre-installed library and includes." >&6; } + gr_radar_mono_with=yes + else + gr_radar_mono_LDFLAG= + if test x$enable_gr_radar_mono != xno; then + ac_config_commands="$ac_config_commands run_tests_radar_mono" + + + build_dirs="$build_dirs gr-radar-mono" + { $as_echo "$as_me:$LINENO: result: Component gr-radar-mono passed configuration checks; building." >&5 +$as_echo "Component gr-radar-mono passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-radar-mono passed configuration checks; but not building." >&5 +$as_echo "Component gr-radar-mono passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-radar-mono" + gr_radar_mono_skipped=yes + else + gr_radar_mono_skipped=no + fi -#AC_FUNC_MKTIME - SHM_OPEN_LIBS="" - save_LIBS="$LIBS" - { echo "$as_me:$LINENO: checking for library containing shm_open" >&5 -echo $ECHO_N "checking for library containing shm_open... $ECHO_C" >&6; } -if test "${ac_cv_search_shm_open+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shm_open (); -int -main () -{ -return shm_open (); - ; - return 0; -} -_ACEOF -for ac_lib in '' rt; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_shm_open=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_shm_open+set}" = set; then - break -fi -done -if test "${ac_cv_search_shm_open+set}" = set; then - : + + passed=yes + # Check whether --enable-gr-radio-astronomy was given. +if test "${enable_gr_radio_astronomy+set}" = set; then + enableval=$enable_gr_radio_astronomy; else - ac_cv_search_shm_open=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_shm_open" >&5 -echo "${ECHO_T}$ac_cv_search_shm_open" >&6; } -ac_res=$ac_cv_search_shm_open -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - SHM_OPEN_LIBS="$LIBS" + + enable_gr_radio_astronomy=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -for ac_func in shm_open -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif -#undef $ac_func + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-radio-astronomy requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-radio-astronomy requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-radio-astronomy requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-radio-astronomy requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_config_files="$ac_config_files gr-radio-astronomy/Makefile gr-radio-astronomy/src/Makefile gr-radio-astronomy/src/lib/Makefile gr-radio-astronomy/src/python/Makefile gr-radio-astronomy/src/python/run_tests" - eval "$as_ac_var=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -fi -done - LIBS="$save_LIBS" + gr_radio_astronomy_with=no + if test $passed = no; then + if test x$enable_gr_radio_astronomy = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-radio-astronomy has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-radio-astronomy has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-radio-astronomy." >&5 +$as_echo "Not building component gr-radio-astronomy." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-radio-astronomy" + if test "x${gr_radio_astronomy_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_radio_astronomy_INCLUDES}" + else + with_INCLUDES="${gr_radio_astronomy_INCLUDES}"" ""$with_INCLUDES" + fi + gr_radio_astronomy_INCLUDES= + fi + if test "x${gr_radio_astronomy_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_radio_astronomy_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_radio_astronomy_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_radio_astronomy_SWIG_INCLUDES= + fi -# on Mingw32 extra LDFLAGS are required to ease global variable linking -LIBGNURADIO_CORE_EXTRA_LDFLAGS="" -{ echo "$as_me:$LINENO: checking whether $LD accepts --enable-runtime-pseudo-reloc" >&5 -echo $ECHO_N "checking whether $LD accepts --enable-runtime-pseudo-reloc... $ECHO_C" >&6; } -if ${LD} --enable-runtime-pseudo-reloc --version >/dev/null 2>&1 -then - # libtool requires the quotes - LIBGNURADIO_CORE_EXTRA_LDFLAGS="\"-Wl,--enable-runtime-pseudo-reloc\"" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi + if test "x${gr_radio_astronomy_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_radio_astronomy_PYDIRPATH}" + else + with_PYDIRPATH="${gr_radio_astronomy_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_radio_astronomy_PYDIRPATH= + fi + if test "x${gr_radio_astronomy_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_radio_astronomy_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_radio_astronomy_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_radio_astronomy_SWIGDIRPATH= + fi + if test "x${gr_radio_astronomy_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_radio_astronomy_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_radio_astronomy_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_radio_astronomy_LIBDIRPATH= + fi - { echo "$as_me:$LINENO: checking for CreateFileMapping function" >&5 -echo $ECHO_N "checking for CreateFileMapping function... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:$LINENO: result: Component gr-radio-astronomy will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-radio-astronomy will be included from a pre-installed library and includes." >&6; } + gr_radio_astronomy_with=yes + else + gr_radio_astronomy_LDFLAG= + if test x$enable_gr_radio_astronomy != xno; then + ac_config_commands="$ac_config_commands run_tests_astronomy" + + + build_dirs="$build_dirs gr-radio-astronomy" + { $as_echo "$as_me:$LINENO: result: Component gr-radio-astronomy passed configuration checks; building." >&5 +$as_echo "Component gr-radio-astronomy passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-radio-astronomy passed configuration checks; but not building." >&5 +$as_echo "Component gr-radio-astronomy passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-radio-astronomy" + gr_radio_astronomy_skipped=yes + else + gr_radio_astronomy_skipped=no + fi -#include -int main (int argc, char **argv) -{ - HANDLE handle; - int size; - char seg_name[1024]; - handle = CreateFileMapping( - INVALID_HANDLE_VALUE, // use paging file - NULL, // default security - PAGE_READWRITE, // read/write access - 0, // max. object size - size, // buffer size - seg_name); // name of mapping object - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - HAVE_CREATEFILEMAPPING=yes -cat >>confdefs.h <<\_ACEOF -#define HAVE_CREATEFILEMAPPING 1 -_ACEOF -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - HAVE_CREATEFILEMAPPING=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { echo "$as_me:$LINENO: result: $HAVE_CREATEFILEMAPPING" >&5 -echo "${ECHO_T}$HAVE_CREATEFILEMAPPING" >&6; } -if test x$HAVE_CREATEFILEMAPPING = xyes; then - HAVE_CREATEFILEMAPPING_TRUE= - HAVE_CREATEFILEMAPPING_FALSE='#' -else - HAVE_CREATEFILEMAPPING_TRUE='#' - HAVE_CREATEFILEMAPPING_FALSE= -fi + passed=yes + # Check whether --enable-gr-trellis was given. +if test "${enable_gr_trellis+set}" = set; then + enableval=$enable_gr_trellis; +else + enable_gr_trellis=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi +fi -for ac_header in sys/types.h fcntl.h io.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no -fi + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-trellis requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-trellis requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-trellis requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-trellis requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_config_files="$ac_config_files gr-trellis/Makefile gr-trellis/doc/Makefile gr-trellis/src/Makefile gr-trellis/src/lib/Makefile gr-trellis/src/python/Makefile gr-trellis/src/python/run_tests gr-trellis/src/examples/Makefile gr-trellis/src/examples/fsm_files/Makefile" - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + gr_trellis_with=no + if test $passed = no; then + if test x$enable_gr_trellis = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-trellis has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-trellis has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-trellis." >&5 +$as_echo "Not building component gr-trellis." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-trellis" -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + if test "x${gr_trellis_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_trellis_INCLUDES}" + else + with_INCLUDES="${gr_trellis_INCLUDES}"" ""$with_INCLUDES" + fi + gr_trellis_INCLUDES= + fi -fi -done + if test "x${gr_trellis_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_trellis_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_trellis_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_trellis_SWIG_INCLUDES= + fi -for ac_header in windows.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "x${gr_trellis_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_trellis_PYDIRPATH}" + else + with_PYDIRPATH="${gr_trellis_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_trellis_PYDIRPATH= + fi - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } + if test "x${gr_trellis_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_trellis_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_trellis_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_trellis_SWIGDIRPATH= + fi -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi + if test "x${gr_trellis_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_trellis_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_trellis_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_trellis_LIBDIRPATH= + fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } + { $as_echo "$as_me:$LINENO: result: Component gr-trellis will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-trellis will be included from a pre-installed library and includes." >&6; } + gr_trellis_with=yes + else + gr_trellis_LDFLAG= + if test x$enable_gr_trellis != xno; then + ac_config_commands="$ac_config_commands run_tests_gr_trellis" + + + build_dirs="$build_dirs gr-trellis" + { $as_echo "$as_me:$LINENO: result: Component gr-trellis passed configuration checks; building." >&5 +$as_echo "Component gr-trellis passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-trellis passed configuration checks; but not building." >&5 +$as_echo "Component gr-trellis passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-trellis" + gr_trellis_skipped=yes + else + gr_trellis_skipped=no + fi -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi -done -for ac_header in winioctl.h winbase.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - #if HAVE_WINDOWS_H - #include - #endif -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" + passed=yes + # Check whether --enable-gr-video-sdl was given. +if test "${enable_gr_video_sdl+set}" = set; then + enableval=$enable_gr_video_sdl; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + enable_gr_video_sdl=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi fi -done + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-video-sdl requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-video-sdl requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-video-sdl requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-video-sdl requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + if test $passed = yes; then +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for SDL" >&5 +$as_echo_n "checking for SDL... " >&6; } +if test -n "$PKG_CONFIG"; then + if test -n "$SDL_CFLAGS"; then + pkg_cv_SDL_CFLAGS="$SDL_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sdl >= 1.2.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "sdl >= 1.2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_SDL_CFLAGS=`$PKG_CONFIG --cflags "sdl >= 1.2.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$SDL_LIBS"; then + pkg_cv_SDL_LIBS="$SDL_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sdl >= 1.2.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "sdl >= 1.2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_SDL_LIBS=`$PKG_CONFIG --libs --static "sdl >= 1.2.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_SDL_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_SDL_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$SDL_LIBS"; then + pkg_cv_SDL_LIBS="$SDL_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sdl >= 1.2.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "sdl >= 1.2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_SDL_LIBS=`$PKG_CONFIG --libs --static "sdl >= 1.2.0" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi -for ac_func in getopt usleep gettimeofday nanosleep rand srand random srandom sleep sigaction -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test -n "$PKG_CONFIG"; then + if test -n "$SDL_INCLUDEDIR"; then + pkg_cv_SDL_INCLUDEDIR="$SDL_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sdl >= 1.2.0\"") >&5 + ($PKG_CONFIG --exists --print-errors "sdl >= 1.2.0") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_SDL_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "sdl >= 1.2.0" 2>/dev/null` else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif -#undef $ac_func -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif +if test $pkg_failed = yes; then -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + SDL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sdl >= 1.2.0"` + else + SDL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sdl >= 1.2.0"` + fi + # Put the nasty error message in config.log where it belongs + echo "$SDL_PKG_ERRORS" >&5 -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SDL_VERSION=1.2.0 + +# Check whether --with-sdl-prefix was given. +if test "${with_sdl_prefix+set}" = set; then + withval=$with_sdl_prefix; sdl_prefix="$withval" +else + sdl_prefix="" fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + +# Check whether --with-sdl-exec-prefix was given. +if test "${with_sdl_exec_prefix+set}" = set; then + withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" +else + sdl_exec_prefix="" fi -done -{ echo "$as_me:$LINENO: checking for struct timezone" >&5 -echo $ECHO_N "checking for struct timezone... $ECHO_C" >&6; } -if test "${ac_cv_type_struct_timezone+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --enable-sdltest was given. +if test "${enable_sdltest+set}" = set; then + enableval=$enable_sdltest; else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + enable_sdltest=yes +fi - #if HAVE_SYS_TYPES_H - # include - #endif - #if TIME_WITH_SYS_TIME - # include - # include - #else - # if HAVE_SYS_TIME_H - # include - # else - # include - # endif - #endif + if test x$sdl_exec_prefix != x ; then + sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_args="$sdl_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi + fi -typedef struct timezone ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_struct_timezone=yes + + TMP_PATH="$prefix/bin:$prefix/usr/bin:$PATH" + # Extract the first word of "sdl-config", so it can be a program name with args. +set dummy sdl-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SDL_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + case $SDL_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $TMP_PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - ac_cv_type_struct_timezone=no + test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" + ;; +esac fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +SDL_CONFIG=$ac_cv_path_SDL_CONFIG +if test -n "$SDL_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 +$as_echo "$SDL_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_timezone" >&5 -echo "${ECHO_T}$ac_cv_type_struct_timezone" >&6; } -if test $ac_cv_type_struct_timezone = yes; then -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TIMEZONE 1 -_ACEOF + min_sdl_version=$SDL_VERSION + { $as_echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 +$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } + no_sdl="" + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` -fi -{ echo "$as_me:$LINENO: checking for struct timespec" >&5 -echo $ECHO_N "checking for struct timespec... $ECHO_C" >&6; } -if test "${ac_cv_type_struct_timespec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + rm -f conf.sdltest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -26281,200 +41217,142 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - #if HAVE_SYS_TYPES_H - # include - #endif - #if TIME_WITH_SYS_TIME - # include - # include - #else - # if HAVE_SYS_TIME_H - # include - # else - # include - # endif - #endif - +#include +#include +#include +#include "SDL.h" -typedef struct timespec ac__type_new_; -int -main () +char* +my_strdup (char *str) { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_struct_timespec=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + char *new_str; - ac_cv_type_struct_timespec=no -fi + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_timespec" >&5 -echo "${ECHO_T}$ac_cv_type_struct_timespec" >&6; } -if test $ac_cv_type_struct_timespec = yes; then + return new_str; +} -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TIMESPEC 1 -_ACEOF +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } -fi -{ echo "$as_me:$LINENO: checking for ssize_t" >&5 -echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; } -if test "${ac_cv_type_ssize_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } - #if HAVE_SYS_TYPES_H - # include - #endif - #if TIME_WITH_SYS_TIME - # include - # include - #else - # if HAVE_SYS_TIME_H - # include - # else - # include - # endif - #endif + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} -typedef ssize_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_ssize_t=yes + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_ssize_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +( exit $ac_status ) +no_sdl=yes fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5 -echo "${ECHO_T}$ac_cv_type_ssize_t" >&6; } -if test $ac_cv_type_ssize_t = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_SSIZE_T 1 -_ACEOF - - +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - - - -for ac_func in getopt usleep gettimeofday -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main int main () { -return $ac_func (); + return 0; ; return 0; } @@ -26485,700 +41363,1311 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-video-sdl requires library sdl, not found or failed test." >&5 +$as_echo "gr-video-sdl requires library sdl, not found or failed test." >&6; } + fi + + + rm -f conf.sdltest + +elif test $pkg_failed = untried; then + SDL_VERSION=1.2.0 + +# Check whether --with-sdl-prefix was given. +if test "${with_sdl_prefix+set}" = set; then + withval=$with_sdl_prefix; sdl_prefix="$withval" +else + sdl_prefix="" fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + +# Check whether --with-sdl-exec-prefix was given. +if test "${with_sdl_exec_prefix+set}" = set; then + withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else - case " $LIBOBJS " in - *" $ac_func.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" - ;; -esac + sdl_exec_prefix="" +fi +# Check whether --enable-sdltest was given. +if test "${enable_sdltest+set}" = set; then + enableval=$enable_sdltest; +else + enable_sdltest=yes fi + + + if test x$sdl_exec_prefix != x ; then + sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_args="$sdl_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi + fi + + + TMP_PATH="$prefix/bin:$prefix/usr/bin:$PATH" + # Extract the first word of "sdl-config", so it can be a program name with args. +set dummy sdl-config; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SDL_CONFIG+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $SDL_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $TMP_PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done +IFS=$as_save_IFS + test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" + ;; +esac +fi +SDL_CONFIG=$ac_cv_path_SDL_CONFIG +if test -n "$SDL_CONFIG"; then + { $as_echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 +$as_echo "$SDL_CONFIG" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + min_sdl_version=$SDL_VERSION + { $as_echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 +$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } + no_sdl="" + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` -{ echo "$as_me:$LINENO: checking for Sleep" >&5 -echo $ECHO_N "checking for Sleep... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF + sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + rm -f conf.sdltest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - #include - #include -int -main () +#include +#include +#include +#include "SDL.h" + +char* +my_strdup (char *str) { - Sleep(0); - ; - return 0; + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } } + + _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext +rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SSLEEP 1 -_ACEOF - - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - +( exit $ac_status ) +no_sdl=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -{ echo "$as_me:$LINENO: checking whether mkdir accepts only one arg" >&5 -echo $ECHO_N "checking whether mkdir accepts only one arg... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include - #include - #include + +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main + int main () { - - mkdir("") - + return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -cat >>confdefs.h <<\_ACEOF -#define MKDIR_TAKES_ONE_ARG -_ACEOF + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl-config script: $SDL_CONFIG" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + + passed=no;{ $as_echo "$as_me:$LINENO: result: gr-video-sdl requires library sdl, not found or failed test." >&5 +$as_echo "gr-video-sdl requires library sdl, not found or failed test." >&6; } + fi + + + rm -f conf.sdltest else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + SDL_CFLAGS=$pkg_cv_SDL_CFLAGS + SDL_LIBS=$pkg_cv_SDL_LIBS + SDL_INCLUDEDIR=$pkg_cv_SDL_INCLUDEDIR + + SDL_CPPFLAGS="" + for flag in $SDL_CFLAGS; do + case $flag in + -I* | -D* | -U*) SDL_CPPFLAGS="$SDL_CPPFLAGS $flag" ;; + esac + done + pkg_cv_SDL_CPPFLAGS=$SDL_CPPFLAGS - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_config_files="$ac_config_files gr-video-sdl/Makefile gr-video-sdl/src/Makefile gr-video-sdl/src/run_tests" + + + + + gr_video_sdl_with=no + if test $passed = no; then + if test x$enable_gr_video_sdl = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-video-sdl has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-video-sdl has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-video-sdl." >&5 +$as_echo "Not building component gr-video-sdl." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-video-sdl" + if test "x${gr_video_sdl_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_video_sdl_INCLUDES}" + else + with_INCLUDES="${gr_video_sdl_INCLUDES}"" ""$with_INCLUDES" + fi + gr_video_sdl_INCLUDES= + fi + if test "x${gr_video_sdl_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_video_sdl_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_video_sdl_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_video_sdl_SWIG_INCLUDES= + fi + if test "x${gr_video_sdl_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_video_sdl_PYDIRPATH}" + else + with_PYDIRPATH="${gr_video_sdl_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_video_sdl_PYDIRPATH= + fi -# Extract the first word of "dot", so it can be a program name with args. -set dummy dot; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_HAVE_DOT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$HAVE_DOT"; then - ac_cv_prog_HAVE_DOT="$HAVE_DOT" # Let the user override the test. + if test "x${gr_video_sdl_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_video_sdl_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_video_sdl_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_video_sdl_SWIGDIRPATH= + fi + + + if test "x${gr_video_sdl_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_video_sdl_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_video_sdl_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_video_sdl_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-video-sdl will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-video-sdl will be included from a pre-installed library and includes." >&6; } + gr_video_sdl_with=yes + else + gr_video_sdl_LDFLAG= + if test x$enable_gr_video_sdl != xno; then + ac_config_commands="$ac_config_commands run_tests_sdl" + + + build_dirs="$build_dirs gr-video-sdl" + { $as_echo "$as_me:$LINENO: result: Component gr-video-sdl passed configuration checks; building." >&5 +$as_echo "Component gr-video-sdl passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-video-sdl passed configuration checks; but not building." >&5 +$as_echo "Component gr-video-sdl passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-video-sdl" + gr_video_sdl_skipped=yes + else + gr_video_sdl_skipped=no + fi + + + + + + + + + + + + passed=yes + # Check whether --enable-gr-wxgui was given. +if test "${enable_gr_wxgui+set}" = set; then + enableval=$enable_gr_wxgui; else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_HAVE_DOT="YES" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - test -z "$ac_cv_prog_HAVE_DOT" && ac_cv_prog_HAVE_DOT="NO" -fi + enable_gr_wxgui=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -HAVE_DOT=$ac_cv_prog_HAVE_DOT -if test -n "$HAVE_DOT"; then - { echo "$as_me:$LINENO: result: $HAVE_DOT" >&5 -echo "${ECHO_T}$HAVE_DOT" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + + + + + if test x = x; then + pc_comp_name="gr-wxgui" + else + pc_comp_name="" + fi + + +# Check whether --with-gr-wxgui was given. +if test "${with_gr_wxgui+set}" = set; then + withval=$with_gr_wxgui; if test "x$withval" != "xyes"; then + with_gr_wxgui_val=$withval + with_gr_wxgui=yes + fi fi + if test x$with_gr_wxgui = xyes; then + if test x$enable_gr_wxgui = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-wxgui: Cannot use both --enable and --with" >&5 +$as_echo "$as_me: error: Component gr-wxgui: Cannot use both --enable and --with" >&2;} + { (exit 1); exit 1; }; } + else + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + l_PKG_CONFIG_PATH=$with_gr_wxgui_val + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH - succeeded=no + if ! test -r ${l_PKG_CONFIG_PATH}/${pc_comp_name}.pc; then + { { $as_echo "$as_me:$LINENO: error: Component gr-wxgui: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component gr-wxgui: PKGCONFIG cannot find info for ${pc_comp_name}, with provided PKG_CONFIG_PATH = [ $l_PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + fi - if test -z "$PKG_CONFIG"; then - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with; check1=yes else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -echo "${ECHO_T}$PKG_CONFIG" >&6; } + check1=no + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\${pc_comp_name}\"") >&5 + ($PKG_CONFIG --exists --print-errors "${pc_comp_name}") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + passed=with else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + passed=no +fi + fi + fi + if test $passed != with; then + { { $as_echo "$as_me:$LINENO: error: Component gr-wxgui: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&5 +$as_echo "$as_me: error: Component gr-wxgui: PKGCONFIG cannot find info for ${pc_comp_name}, with PKG_CONFIG_PATH = [ $PKG_CONFIG_PATH ] ." >&2;} + { (exit 1); exit 1; }; } + fi + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + fi + gr_wxgui_INCLUDES=`$PKG_CONFIG --cflags-only-I ${pc_comp_name}` + gr_wxgui_LA=`$PKG_CONFIG --libs ${pc_comp_name}` + gr_wxgui_INCLUDEDIR=`$PKG_CONFIG --variable=includedir ${pc_comp_name}` - fi + if test x$check1 = xyes; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - if test -z "$PKG_CONFIG_PATH"; then - export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" - fi + : + fi + fi - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { echo "$as_me:$LINENO: checking for fftw3f >= 3.0" >&5 -echo $ECHO_N "checking for fftw3f >= 3.0... $ECHO_C" >&6; } - - if $PKG_CONFIG --exists "fftw3f >= 3.0" ; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - succeeded=yes - - { echo "$as_me:$LINENO: checking FFTW3F_CFLAGS" >&5 -echo $ECHO_N "checking FFTW3F_CFLAGS... $ECHO_C" >&6; } - FFTW3F_CFLAGS=`$PKG_CONFIG --cflags "fftw3f >= 3.0"` - { echo "$as_me:$LINENO: result: $FFTW3F_CFLAGS" >&5 -echo "${ECHO_T}$FFTW3F_CFLAGS" >&6; } - - { echo "$as_me:$LINENO: checking FFTW3F_LIBS" >&5 -echo $ECHO_N "checking FFTW3F_LIBS... $ECHO_C" >&6; } - FFTW3F_LIBS=`$PKG_CONFIG --libs "fftw3f >= 3.0"` - { echo "$as_me:$LINENO: result: $FFTW3F_LIBS" >&5 -echo "${ECHO_T}$FFTW3F_LIBS" >&6; } - - { echo "$as_me:$LINENO: checking FFTW3F_INCLUDEDIR" >&5 -echo $ECHO_N "checking FFTW3F_INCLUDEDIR... $ECHO_C" >&6; } - FFTW3F_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "fftw3f >= 3.0"` - { echo "$as_me:$LINENO: result: $FFTW3F_INCLUDEDIR" >&5 -echo "${ECHO_T}$FFTW3F_INCLUDEDIR" >&6; } + + + + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-wxgui requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-wxgui requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi else - FFTW3F_CFLAGS="" - FFTW3F_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - FFTW3F_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fftw3f >= 3.0"` - echo $FFTW3F_PKG_ERRORS + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-wxgui requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-wxgui requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi fi + fi + + + if test $passed = yes; then + + { $as_echo "$as_me:$LINENO: checking for Python wxWidgets wrappers >= 2.8" >&5 +$as_echo_n "checking for Python wxWidgets wrappers >= 2.8... " >&6; } + if test "wx.version().split()[0] >= "2.8""; then + python_cmd=' +try: + import wx + assert wx.version().split()[0] >= "2.8" +except: exit(1)' + else + python_cmd=' +try: import wx +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + + + { $as_echo "$as_me:$LINENO: checking for Numeric Python extensions" >&5 +$as_echo_n "checking for Numeric Python extensions... " >&6; } + if test ""; then + python_cmd=' +try: + import numpy + assert +except: exit(1)' + else + python_cmd=' +try: import numpy +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + + fi + + ac_config_files="$ac_config_files gr-wxgui/Makefile gr-wxgui/gr-wxgui.pc gr-wxgui/src/Makefile gr-wxgui/src/python/Makefile gr-wxgui/src/python/plotter/Makefile" + + + + + gr_wxgui_with=no + if test $passed = no; then + if test x$enable_gr_wxgui = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-wxgui has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-wxgui has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-wxgui." >&5 +$as_echo "Not building component gr-wxgui." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-wxgui" + + if test "x${gr_wxgui_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_wxgui_INCLUDES}" + else + with_INCLUDES="${gr_wxgui_INCLUDES}"" ""$with_INCLUDES" + fi + gr_wxgui_INCLUDES= + fi + + + if test "x${gr_wxgui_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_wxgui_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_wxgui_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_wxgui_SWIG_INCLUDES= + fi + + + if test "x${gr_wxgui_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_wxgui_PYDIRPATH}" + else + with_PYDIRPATH="${gr_wxgui_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_wxgui_PYDIRPATH= + fi + + + if test "x${gr_wxgui_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_wxgui_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_wxgui_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_wxgui_SWIGDIRPATH= + fi + + + if test "x${gr_wxgui_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_wxgui_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_wxgui_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_wxgui_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component gr-wxgui will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-wxgui will be included from a pre-installed library and includes." >&6; } + gr_wxgui_with=yes + else + gr_wxgui_LDFLAG= + if test x$enable_gr_wxgui != xno; then + : + build_dirs="$build_dirs gr-wxgui" + { $as_echo "$as_me:$LINENO: result: Component gr-wxgui passed configuration checks; building." >&5 +$as_echo "Component gr-wxgui passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-wxgui passed configuration checks; but not building." >&5 +$as_echo "Component gr-wxgui passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-wxgui" + gr_wxgui_skipped=yes + else + gr_wxgui_skipped=no + fi - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi - if test $succeeded = yes; then - : - else - { { echo "$as_me:$LINENO: error: Library requirements (fftw3f >= 3.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 -echo "$as_me: error: Library requirements (fftw3f >= 3.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} - { (exit 1); exit 1; }; } - fi - # Check whether --enable-doxygen was given. -if test "${enable_doxygen+set}" = set; then - enableval=$enable_doxygen; -fi - # Check whether --enable-dot was given. -if test "${enable_dot+set}" = set; then - enableval=$enable_dot; -fi - # Check whether --enable-html-docs was given. -if test "${enable_html_docs+set}" = set; then - enableval=$enable_html_docs; -else - enable_html_docs=yes -fi - # Check whether --enable-latex-docs was given. -if test "${enable_latex_docs+set}" = set; then - enableval=$enable_latex_docs; + passed=yes + # Check whether --enable-gr-qtgui was given. +if test "${enable_gr_qtgui+set}" = set; then + enableval=$enable_gr_qtgui; else - enable_latex_docs=no -fi - - if test "x$enable_doxygen" = xyes; then - # Extract the first word of "doxygen", so it can be a program name with args. -set dummy doxygen; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_DOXYGEN+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $DOXYGEN in - [\\/]* | ?:[\\/]*) - ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS + enable_gr_qtgui=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi - ;; -esac -fi -DOXYGEN=$ac_cv_path_DOXYGEN -if test -n "$DOXYGEN"; then - { echo "$as_me:$LINENO: result: $DOXYGEN" >&5 -echo "${ECHO_T}$DOXYGEN" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } fi - if test x$DOXYGEN = x; then - if test "x$enable_doxygen" = xyes; then - { { echo "$as_me:$LINENO: error: could not find doxygen" >&5 -echo "$as_me: error: could not find doxygen" >&2;} - { (exit 1); exit 1; }; } - fi - enable_doc=no - generate_docs= - else - enable_doc=yes - generate_docs=docs - # Extract the first word of "dot", so it can be a program name with args. -set dummy dot; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_DOT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $DOT in - [\\/]* | ?:[\\/]*) - ac_cv_path_DOT="$DOT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DOT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - ;; -esac -fi -DOT=$ac_cv_path_DOT -if test -n "$DOT"; then - { echo "$as_me:$LINENO: result: $DOT" >&5 -echo "${ECHO_T}$DOT" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-qtgui requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-qtgui requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-qtgui requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-qtgui requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi fi - else - enable_doc=no - fi + fi -if test x$enable_doc = xyes; then - DOC_TRUE= - DOC_FALSE='#' -else - DOC_TRUE='#' - DOC_FALSE= -fi + { $as_echo "$as_me:$LINENO: checking for PyQt4 for Qt4" >&5 +$as_echo_n "checking for PyQt4 for Qt4... " >&6; } + if test "\ + PyQt4.QtCore.PYQT_VERSION >= 260000"; then + python_cmd=' +try: + import PyQt4.QtCore + assert \ + PyQt4.QtCore.PYQT_VERSION >= 260000 +except: exit(1)' + else + python_cmd=' +try: import PyQt4.QtCore +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + \ + passed=yes + fi - if test x$DOT = x; then - if test "x$enable_dot" = xyes; then - { { echo "$as_me:$LINENO: error: could not find dot" >&5 -echo "$as_me: error: could not find dot" >&2;} - { (exit 1); exit 1; }; } - fi - enable_dot=no - else - enable_dot=yes - fi + # Enable this if we want to test for PyQwt, too + #PYTHON_CHECK_MODULE([PyQt4.Qwt5], [PyQwt5 for Qt4], \ + # [passed=yes], [passed=no], \ + # [PyQt4.Qwt5.QWT_VERSION >= 327000]) +# Check for: +# QtOpenGL +# QtGui +# QtCore +# qwt +# qwtplot3d +# qt4 +# qt4-core, qt4-gui, qwt5-qt4, qwt5-qt4-dev, libqwtplot3d-qt4, libqwtplot3d-qt4-dev, qt4-dev-tools + if test $passed = yes; then +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for QTCORE" >&5 +$as_echo_n "checking for QTCORE... " >&6; } -# Check whether --with-md-cpu was given. -if test "${with_md_cpu+set}" = set; then - withval=$with_md_cpu; cf_with_md_cpu="$withval" +if test -n "$PKG_CONFIG"; then + if test -n "$QTCORE_CFLAGS"; then + pkg_cv_QTCORE_CFLAGS="$QTCORE_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTCORE_CFLAGS=`$PKG_CONFIG --cflags "QtCore >= 4.2" 2>/dev/null` else - cf_with_md_cpu="$host_cpu" + pkg_failed=yes fi - - - { echo "$as_me:$LINENO: checking for machine dependent speedups" >&5 -echo $ECHO_N "checking for machine dependent speedups... $ECHO_C" >&6; } - case "$cf_with_md_cpu" in - x86 | i[3-7]86) MD_CPU=x86 MD_SUBCPU=x86 ;; - x86_64) MD_CPU=x86 MD_SUBCPU=x86_64 ;; -# sparc) MD_CPU=sparc ;; - *) MD_CPU=generic ;; - esac - { echo "$as_me:$LINENO: result: $MD_CPU" >&5 -echo "${ECHO_T}$MD_CPU" >&6; } - - - - - -if test "$MD_CPU" = "x86"; then - MD_CPU_x86_TRUE= - MD_CPU_x86_FALSE='#' + fi else - MD_CPU_x86_TRUE='#' - MD_CPU_x86_FALSE= + pkg_failed=untried fi +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$QTCORE_LIBS"; then + pkg_cv_QTCORE_LIBS="$QTCORE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTCORE_LIBS=`$PKG_CONFIG --libs --static "QtCore >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_QTCORE_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_QTCORE_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$QTCORE_LIBS"; then + pkg_cv_QTCORE_LIBS="$QTCORE_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTCORE_LIBS=`$PKG_CONFIG --libs --static "QtCore >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi - -if test "$MD_SUBCPU" = "x86_64"; then - MD_SUBCPU_x86_64_TRUE= - MD_SUBCPU_x86_64_FALSE='#' +if test -n "$PKG_CONFIG"; then + if test -n "$QTCORE_INCLUDEDIR"; then + pkg_cv_QTCORE_INCLUDEDIR="$QTCORE_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtCore >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtCore >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTCORE_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "QtCore >= 4.2" 2>/dev/null` else - MD_SUBCPU_x86_64_TRUE='#' - MD_SUBCPU_x86_64_FALSE= + pkg_failed=yes +fi + fi +else + pkg_failed=untried fi -if test "$MD_CPU" = "generic"; then - MD_CPU_generic_TRUE= - MD_CPU_generic_FALSE='#' + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - MD_CPU_generic_TRUE='#' - MD_CPU_generic_FALSE= + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + QTCORE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "QtCore >= 4.2"` + else + QTCORE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtCore >= 4.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$QTCORE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no; { $as_echo "$as_me:$LINENO: result: gr-qtgui requires libQtCore >= 4.2." >&5 +$as_echo "gr-qtgui requires libQtCore >= 4.2." >&6; } +elif test $pkg_failed = untried; then + passed=no; { $as_echo "$as_me:$LINENO: result: gr-qtgui requires libQtCore >= 4.2." >&5 +$as_echo "gr-qtgui requires libQtCore >= 4.2." >&6; } +else + QTCORE_CFLAGS=$pkg_cv_QTCORE_CFLAGS + QTCORE_LIBS=$pkg_cv_QTCORE_LIBS + QTCORE_INCLUDEDIR=$pkg_cv_QTCORE_INCLUDEDIR + + QTCORE_CPPFLAGS="" + for flag in $QTCORE_CFLAGS; do + case $flag in + -I* | -D* | -U*) QTCORE_CPPFLAGS="$QTCORE_CPPFLAGS $flag" ;; + esac + done + pkg_cv_QTCORE_CPPFLAGS=$QTCORE_CPPFLAGS + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for QTGUI" >&5 +$as_echo_n "checking for QTGUI... " >&6; } -# Check whether --with-cppunit-prefix was given. -if test "${with_cppunit_prefix+set}" = set; then - withval=$with_cppunit_prefix; cppunit_config_prefix="$withval" +if test -n "$PKG_CONFIG"; then + if test -n "$QTGUI_CFLAGS"; then + pkg_cv_QTGUI_CFLAGS="$QTGUI_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtGui >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTGUI_CFLAGS=`$PKG_CONFIG --cflags "QtGui >= 4.2" 2>/dev/null` else - cppunit_config_prefix="" + pkg_failed=yes fi - - -# Check whether --with-cppunit-exec-prefix was given. -if test "${with_cppunit_exec_prefix+set}" = set; then - withval=$with_cppunit_exec_prefix; cppunit_config_exec_prefix="$withval" + fi else - cppunit_config_exec_prefix="" + pkg_failed=untried fi - - if test x$cppunit_config_exec_prefix != x ; then - cppunit_config_args="$cppunit_config_args --exec-prefix=$cppunit_config_exec_prefix" - if test x${CPPUNIT_CONFIG+set} != xset ; then - CPPUNIT_CONFIG=$cppunit_config_exec_prefix/bin/cppunit-config - fi - fi - if test x$cppunit_config_prefix != x ; then - cppunit_config_args="$cppunit_config_args --prefix=$cppunit_config_prefix" - if test x${CPPUNIT_CONFIG+set} != xset ; then - CPPUNIT_CONFIG=$cppunit_config_prefix/bin/cppunit-config - fi - fi - - # Extract the first word of "cppunit-config", so it can be a program name with args. -set dummy cppunit-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_CPPUNIT_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$QTGUI_LIBS"; then + pkg_cv_QTGUI_LIBS="$QTGUI_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtGui >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTGUI_LIBS=`$PKG_CONFIG --libs --static "QtGui >= 4.2" 2>/dev/null` else - case $CPPUNIT_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_CPPUNIT_CONFIG="$CPPUNIT_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CPPUNIT_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_QTGUI_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_QTGUI_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$QTGUI_LIBS"; then + pkg_cv_QTGUI_LIBS="$QTGUI_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtGui >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTGUI_LIBS=`$PKG_CONFIG --libs --static "QtGui >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi - test -z "$ac_cv_path_CPPUNIT_CONFIG" && ac_cv_path_CPPUNIT_CONFIG="no" - ;; -esac +if test -n "$PKG_CONFIG"; then + if test -n "$QTGUI_INCLUDEDIR"; then + pkg_cv_QTGUI_INCLUDEDIR="$QTGUI_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtGui >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtGui >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTGUI_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "QtGui >= 4.2" 2>/dev/null` +else + pkg_failed=yes fi -CPPUNIT_CONFIG=$ac_cv_path_CPPUNIT_CONFIG -if test -n "$CPPUNIT_CONFIG"; then - { echo "$as_me:$LINENO: result: $CPPUNIT_CONFIG" >&5 -echo "${ECHO_T}$CPPUNIT_CONFIG" >&6; } + fi else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + pkg_failed=untried fi - cppunit_version_min=1.9.14 - { echo "$as_me:$LINENO: checking for Cppunit - version >= $cppunit_version_min" >&5 -echo $ECHO_N "checking for Cppunit - version >= $cppunit_version_min... $ECHO_C" >&6; } - no_cppunit="" - if test "$CPPUNIT_CONFIG" = "no" ; then - no_cppunit=yes - else - CPPUNIT_CFLAGS=`$CPPUNIT_CONFIG --cflags` - CPPUNIT_LIBS=`$CPPUNIT_CONFIG --libs` - cppunit_version=`$CPPUNIT_CONFIG --version` - cppunit_major_version=`echo $cppunit_version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - cppunit_minor_version=`echo $cppunit_version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - cppunit_micro_version=`echo $cppunit_version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` +if test $pkg_failed = yes; then - cppunit_major_min=`echo $cppunit_version_min | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - cppunit_minor_min=`echo $cppunit_version_min | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - cppunit_micro_min=`echo $cppunit_version_min | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + QTGUI_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "QtGui >= 4.2"` + else + QTGUI_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtGui >= 4.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$QTGUI_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no; { $as_echo "$as_me:$LINENO: result: gr-qtgui requires libQtGui >= 4.2." >&5 +$as_echo "gr-qtgui requires libQtGui >= 4.2." >&6; } +elif test $pkg_failed = untried; then + passed=no; { $as_echo "$as_me:$LINENO: result: gr-qtgui requires libQtGui >= 4.2." >&5 +$as_echo "gr-qtgui requires libQtGui >= 4.2." >&6; } +else + QTGUI_CFLAGS=$pkg_cv_QTGUI_CFLAGS + QTGUI_LIBS=$pkg_cv_QTGUI_LIBS + QTGUI_INCLUDEDIR=$pkg_cv_QTGUI_INCLUDEDIR + + QTGUI_CPPFLAGS="" + for flag in $QTGUI_CFLAGS; do + case $flag in + -I* | -D* | -U*) QTGUI_CPPFLAGS="$QTGUI_CPPFLAGS $flag" ;; + esac + done + pkg_cv_QTGUI_CPPFLAGS=$QTGUI_CPPFLAGS - cppunit_version_proper=`expr \ - $cppunit_major_version \> $cppunit_major_min \| \ - $cppunit_major_version \= $cppunit_major_min \& \ - $cppunit_minor_version \> $cppunit_minor_min \| \ - $cppunit_major_version \= $cppunit_major_min \& \ - $cppunit_minor_version \= $cppunit_minor_min \& \ - $cppunit_micro_version \>= $cppunit_micro_min ` - if test "$cppunit_version_proper" = "1" ; then - { echo "$as_me:$LINENO: result: $cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version" >&5 -echo "${ECHO_T}$cppunit_major_version.$cppunit_minor_version.$cppunit_micro_version" >&6; } + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + + + +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for QTOPENGL" >&5 +$as_echo_n "checking for QTOPENGL... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$QTOPENGL_CFLAGS"; then + pkg_cv_QTOPENGL_CFLAGS="$QTOPENGL_CFLAGS" else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - no_cppunit=yes + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtOpenGL >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtOpenGL >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTOPENGL_CFLAGS=`$PKG_CONFIG --cflags "QtOpenGL >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi fi - fi +else + pkg_failed=untried +fi - if test "x$no_cppunit" = x ; then - : - else - CPPUNIT_CFLAGS="" - CPPUNIT_LIBS="" - { { echo "$as_me:$LINENO: error: GNU Radio requires cppunit. Stop" >&5 -echo "$as_me: error: GNU Radio requires cppunit. Stop" >&2;} - { (exit 1); exit 1; }; } - fi +if test x$cross_compiling = xyes +then + if test -n "$PKG_CONFIG"; then + if test -n "$QTOPENGL_LIBS"; then + pkg_cv_QTOPENGL_LIBS="$QTOPENGL_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtOpenGL >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtOpenGL >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTOPENGL_LIBS=`$PKG_CONFIG --libs --static "QtOpenGL >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + _pkg_tmp= + for flag in $pkg_cv_QTOPENGL_LIBS; do + case $flag in + (-L/lib* | -L/usr/lib* ) ;; # ignore + (*) _pkg_tmp="$_pkg_tmp $flag" ;; + esac + done + pkg_cv_QTOPENGL_LIBS="$_pkg_tmp" +else + if test -n "$PKG_CONFIG"; then + if test -n "$QTOPENGL_LIBS"; then + pkg_cv_QTOPENGL_LIBS="$QTOPENGL_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtOpenGL >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtOpenGL >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTOPENGL_LIBS=`$PKG_CONFIG --libs --static "QtOpenGL >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +fi + +if test -n "$PKG_CONFIG"; then + if test -n "$QTOPENGL_INCLUDEDIR"; then + pkg_cv_QTOPENGL_INCLUDEDIR="$QTOPENGL_INCLUDEDIR" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"QtOpenGL >= 4.2\"") >&5 + ($PKG_CONFIG --exists --print-errors "QtOpenGL >= 4.2") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_QTOPENGL_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "QtOpenGL >= 4.2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test $pkg_failed = yes; then -CPPUNIT_INCLUDES=$CPPUNIT_CFLAGS +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + QTOPENGL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "QtOpenGL >= 4.2"` + else + QTOPENGL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "QtOpenGL >= 4.2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$QTOPENGL_PKG_ERRORS" >&5 + + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no; { $as_echo "$as_me:$LINENO: result: gr-qtgui requires libQtOpenGL >- 4.2." >&5 +$as_echo "gr-qtgui requires libQtOpenGL >- 4.2." >&6; } +elif test $pkg_failed = untried; then + passed=no; { $as_echo "$as_me:$LINENO: result: gr-qtgui requires libQtOpenGL >- 4.2." >&5 +$as_echo "gr-qtgui requires libQtOpenGL >- 4.2." >&6; } +else + QTOPENGL_CFLAGS=$pkg_cv_QTOPENGL_CFLAGS + QTOPENGL_LIBS=$pkg_cv_QTOPENGL_LIBS + QTOPENGL_INCLUDEDIR=$pkg_cv_QTOPENGL_INCLUDEDIR + + QTOPENGL_CPPFLAGS="" + for flag in $QTOPENGL_CFLAGS; do + case $flag in + -I* | -D* | -U*) QTOPENGL_CPPFLAGS="$QTOPENGL_CPPFLAGS $flag" ;; + esac + done + pkg_cv_QTOPENGL_CPPFLAGS=$QTOPENGL_CPPFLAGS + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi - ac_ext=cpp + QWT_LIBRARY1=-lqwt-qt4 + QWT_LIBRARY2=-lqwt + + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - gr_boost_include_dir= + qwt_save_CPPFLAGS="$CPPFLAGS" + qwt_save_LIBS="$LIBS" + libqwt_ok=yes + + +# Check whether --with-qwt-libdir was given. +if test "${with_qwt_libdir+set}" = set; then + withval=$with_qwt_libdir; qwt_libdir="$withval" +else + qwt_libdir="" +fi + -# Check whether --with-boost-include-dir was given. -if test "${with_boost_include_dir+set}" = set; then - withval=$with_boost_include_dir; - # "yes" and "no" are bogus answers - if test x"$with_boost_include_dir" = xyes || - test x"$with_boost_include_dir" = xno; then - gr_boost_include_dir= - else - gr_boost_include_dir=$with_boost_include_dir - fi +# Check whether --with-qwt-incdir was given. +if test "${with_qwt_incdir+set}" = set; then + withval=$with_qwt_incdir; qwt_incdir="$withval" +else + qwt_incdir="" fi - echo "gr_boost_include_dir = $gr_boost_include_dir" - if test x$gr_boost_include_dir != x; then - # - # If the user specified a directory, then we use it - # - OLD_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$gr_boost_include_dir" - if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - { echo "$as_me:$LINENO: checking for boost/shared_ptr.hpp" >&5 -echo $ECHO_N "checking for boost/shared_ptr.hpp... $ECHO_C" >&6; } -if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +# Check whether --with-qwt-lib was given. +if test "${with_qwt_lib+set}" = set; then + withval=$with_qwt_lib; qwt_lib="$withval" +else + qwt_lib="" +fi + + + CPPFLAGS="$CPPFLAGS $QTCORE_CFLAGS" + + if test "$qwt_incdir" = "" ; then + if test "${ac_cv_header_qwt_qwt_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for qwt/qwt.h" >&5 +$as_echo_n "checking for qwt/qwt.h... " >&6; } +if test "${ac_cv_header_qwt_qwt_h+set}" = set; then + $as_echo_n "(cached) " >&6 fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_boost_shared_ptr_hpp" >&5 -echo "${ECHO_T}$ac_cv_header_boost_shared_ptr_hpp" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwt_qwt_h" >&5 +$as_echo "$ac_cv_header_qwt_qwt_h" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking boost/shared_ptr.hpp usability" >&5 -echo $ECHO_N "checking boost/shared_ptr.hpp usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwt/qwt.h usability" >&5 +$as_echo_n "checking qwt/qwt.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27186,7 +42675,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -27194,134 +42683,129 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking boost/shared_ptr.hpp presence" >&5 -echo $ECHO_N "checking boost/shared_ptr.hpp presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwt/qwt.h presence" >&5 +$as_echo_n "checking qwt/qwt.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: present but cannot be compiled" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt/qwt.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: qwt/qwt.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for boost/shared_ptr.hpp" >&5 -echo $ECHO_N "checking for boost/shared_ptr.hpp... $ECHO_C" >&6; } -if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for qwt/qwt.h" >&5 +$as_echo_n "checking for qwt/qwt.h... " >&6; } +if test "${ac_cv_header_qwt_qwt_h+set}" = set; then + $as_echo_n "(cached) " >&6 else - ac_cv_header_boost_shared_ptr_hpp=$ac_header_preproc + ac_cv_header_qwt_qwt_h=$ac_header_preproc fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_boost_shared_ptr_hpp" >&5 -echo "${ECHO_T}$ac_cv_header_boost_shared_ptr_hpp" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwt_qwt_h" >&5 +$as_echo "$ac_cv_header_qwt_qwt_h" >&6; } fi -if test $ac_cv_header_boost_shared_ptr_hpp = yes; then - BOOST_CFLAGS="-I$gr_boost_include_dir" +if test "x$ac_cv_header_qwt_qwt_h" = x""yes; then + qwt_qwt_h=yes else - { { echo "$as_me:$LINENO: error: Failed to locate boost/shared_ptr.hpp. -Try using --with-boost-include-dir=, -E.g., --with-boost-include-dir=/usr/local/include/boost-1_33_1" >&5 -echo "$as_me: error: Failed to locate boost/shared_ptr.hpp. -Try using --with-boost-include-dir=, -E.g., --with-boost-include-dir=/usr/local/include/boost-1_33_1" >&2;} - { (exit 1); exit 1; }; } + qwt_qwt_h=no + fi - CPPFLAGS=$OLD_CPPFLAGS - else - # - # Otherwise we check in the default places - # - if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - { echo "$as_me:$LINENO: checking for boost/shared_ptr.hpp" >&5 -echo $ECHO_N "checking for boost/shared_ptr.hpp... $ECHO_C" >&6; } -if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "$qwt_qwt_h" = "yes" ; then + QWT_CFLAGS="$QWT_CFLAGS -I/usr/include/qwt" + else + if test "${ac_cv_header_qwt_qt4_qwt_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for qwt-qt4/qwt.h" >&5 +$as_echo_n "checking for qwt-qt4/qwt.h... " >&6; } +if test "${ac_cv_header_qwt_qt4_qwt_h+set}" = set; then + $as_echo_n "(cached) " >&6 fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_boost_shared_ptr_hpp" >&5 -echo "${ECHO_T}$ac_cv_header_boost_shared_ptr_hpp" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwt_qt4_qwt_h" >&5 +$as_echo "$ac_cv_header_qwt_qt4_qwt_h" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking boost/shared_ptr.hpp usability" >&5 -echo $ECHO_N "checking boost/shared_ptr.hpp usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwt-qt4/qwt.h usability" >&5 +$as_echo_n "checking qwt-qt4/qwt.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27329,7 +42813,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -27337,144 +42821,137 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking boost/shared_ptr.hpp presence" >&5 -echo $ECHO_N "checking boost/shared_ptr.hpp presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwt-qt4/qwt.h presence" >&5 +$as_echo_n "checking qwt-qt4/qwt.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: present but cannot be compiled" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwt-qt4/qwt.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: qwt-qt4/qwt.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for boost/shared_ptr.hpp" >&5 -echo $ECHO_N "checking for boost/shared_ptr.hpp... $ECHO_C" >&6; } -if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for qwt-qt4/qwt.h" >&5 +$as_echo_n "checking for qwt-qt4/qwt.h... " >&6; } +if test "${ac_cv_header_qwt_qt4_qwt_h+set}" = set; then + $as_echo_n "(cached) " >&6 else - ac_cv_header_boost_shared_ptr_hpp=$ac_header_preproc + ac_cv_header_qwt_qt4_qwt_h=$ac_header_preproc fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_boost_shared_ptr_hpp" >&5 -echo "${ECHO_T}$ac_cv_header_boost_shared_ptr_hpp" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwt_qt4_qwt_h" >&5 +$as_echo "$ac_cv_header_qwt_qt4_qwt_h" >&6; } fi -if test $ac_cv_header_boost_shared_ptr_hpp = yes; then - BOOST_CFLAGS="" +if test "x$ac_cv_header_qwt_qt4_qwt_h" = x""yes; then + qwt_qt4_qwt_h=yes else - # Nope, look for latest version if any in $prefix/include/boost-* - - # Wipe out cached value. KLUDGE: AC should have API for this - unset ac_cv_header_boost_shared_ptr_hpp + qwt_qt4_qwt_h=no - boost_last_match(){ - #echo "boost_last_match: [$]*" - pattern="$1" - shift - if test "$pattern" = "$1" - then - LM='' - else - shift `expr $# - 1` - LM=$1 - fi - #echo "LM(1)='[$]LM'" - } +fi - pattern="/usr/local/include/boost-*" - boost_last_match "$pattern" $pattern - #echo "LM(2)='$LM'" - OLD_CPPFLAGS=$CPP_FLAGS - CPPFLAGS="$CPPFLAGS -I$LM" - if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - { echo "$as_me:$LINENO: checking for boost/shared_ptr.hpp" >&5 -echo $ECHO_N "checking for boost/shared_ptr.hpp... $ECHO_C" >&6; } -if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "$qwt_qt4_qwt_h" = "yes" ; then + QWT_CFLAGS="$QWT_CFLAGS -I/usr/include/qwt-qt4" + else + libqwt_ok=no + fi + fi + else + QWT_CFLAGS="$QWT_CFLAGS -I$qwt_incdir" + as_ac_Header=`$as_echo "ac_cv_header_$qwt_incdir/qwt.h" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $qwt_incdir/qwt.h" >&5 +$as_echo_n "checking for $qwt_incdir/qwt.h... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_boost_shared_ptr_hpp" >&5 -echo "${ECHO_T}$ac_cv_header_boost_shared_ptr_hpp" >&6; } +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking boost/shared_ptr.hpp usability" >&5 -echo $ECHO_N "checking boost/shared_ptr.hpp usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking $qwt_incdir/qwt.h usability" >&5 +$as_echo_n "checking $qwt_incdir/qwt.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27482,7 +42959,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include +#include <$qwt_incdir/qwt.h> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -27490,316 +42967,427 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking boost/shared_ptr.hpp presence" >&5 -echo $ECHO_N "checking boost/shared_ptr.hpp presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking $qwt_incdir/qwt.h presence" >&5 +$as_echo_n "checking $qwt_incdir/qwt.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include <$qwt_incdir/qwt.h> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: present but cannot be compiled" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: boost/shared_ptr.hpp: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: boost/shared_ptr.hpp: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwt_incdir/qwt.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $qwt_incdir/qwt.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for boost/shared_ptr.hpp" >&5 -echo $ECHO_N "checking for boost/shared_ptr.hpp... $ECHO_C" >&6; } -if test "${ac_cv_header_boost_shared_ptr_hpp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for $qwt_incdir/qwt.h" >&5 +$as_echo_n "checking for $qwt_incdir/qwt.h... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 else - ac_cv_header_boost_shared_ptr_hpp=$ac_header_preproc + eval "$as_ac_Header=\$ac_header_preproc" fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_boost_shared_ptr_hpp" >&5 -echo "${ECHO_T}$ac_cv_header_boost_shared_ptr_hpp" >&6; } +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } fi -if test $ac_cv_header_boost_shared_ptr_hpp = yes; then - BOOST_CFLAGS="-I$LM" +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + : else - { { echo "$as_me:$LINENO: error: Failed to locate boost/shared_ptr.hpp. -Try using --with-boost-include-dir=, -E.g., --with-boost-include-dir=/usr/local/include/boost-1_33_1" >&5 -echo "$as_me: error: Failed to locate boost/shared_ptr.hpp. -Try using --with-boost-include-dir=, -E.g., --with-boost-include-dir=/usr/local/include/boost-1_33_1" >&2;} - { (exit 1); exit 1; }; } + libqwt_ok=no fi - CPPFLAGS=$OLD_CPPFLAGS - -fi - + fi + if test "$libqwt_ok" = "yes" ; then - fi - unset boost_last_match LM - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test "$qwt_libdir" != "" ; then + QWT_LIBS="-L$qwt_libdir $QWT_LIBS" + fi + CPPFLAGS="$CPPFLAGS $QWT_CFLAGS" + LIBS="$qwt_save_LIBS $QT_LIBS $QWT_LIBS -lqwt" + if test "$qwt_lib" != "" ; then + as_ac_Lib=`$as_echo "ac_cv_lib_$qwt_lib''_main" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for main in -l$qwt_lib" >&5 +$as_echo_n "checking for main in -l$qwt_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$qwt_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -DEFINES="" +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# Check whether --enable-all-components was given. -if test "${enable_all_components+set}" = set; then - enableval=$enable_all_components; + eval "$as_ac_Lib=no" fi - -build_dirs="config" - - - # Check whether --enable-gnuradio-core was given. -if test "${enable_gnuradio_core+set}" = set; then - enableval=$enable_gnuradio_core; -else - enable_gnuradio_core=$enable_all_components +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi - - - - ac_config_files="$ac_config_files gnuradio-core/Makefile gnuradio-core/gnuradio-core.pc gnuradio-core/doc/Doxyfile gnuradio-core/doc/Makefile gnuradio-core/doc/other/Makefile gnuradio-core/doc/xml/Makefile gnuradio-core/src/Makefile gnuradio-core/src/gen_interpolator_taps/Makefile gnuradio-core/src/lib/Makefile gnuradio-core/src/lib/filter/Makefile gnuradio-core/src/lib/g72x/Makefile gnuradio-core/src/lib/general/Makefile gnuradio-core/src/lib/general/gr_prefix.cc gnuradio-core/src/lib/io/Makefile gnuradio-core/src/lib/missing/Makefile gnuradio-core/src/lib/omnithread/Makefile gnuradio-core/src/lib/reed-solomon/Makefile gnuradio-core/src/lib/runtime/Makefile gnuradio-core/src/lib/swig/Makefile gnuradio-core/src/python/Makefile gnuradio-core/src/python/bin/Makefile gnuradio-core/src/python/gnuradio/Makefile gnuradio-core/src/python/gnuradio/blks/Makefile gnuradio-core/src/python/gnuradio/blksimpl/Makefile gnuradio-core/src/python/gnuradio/gr/Makefile gnuradio-core/src/python/gnuradio/gr/run_tests gnuradio-core/src/python/gnuradio/gru/Makefile gnuradio-core/src/python/gnuradio/gruimpl/Makefile gnuradio-core/src/tests/Makefile gnuradio-core/src/utils/Makefile" - - - passed=yes - - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gnuradio-core" - if test x$enable_gnuradio_core = xyes; then - { { echo "$as_me:$LINENO: error: Component gnuradio-core has errors, stopping." >&5 -echo "$as_me: error: Component gnuradio-core has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gnuradio-core." >&5 -echo "${ECHO_T}Not building component gnuradio-core." >&6; } - fi - else - if test x$enable_gnuradio_core != xno; then - - ac_config_commands="$ac_config_commands run_tests_core" - - - ac_config_commands="$ac_config_commands swig_deps" - - - build_dirs="$build_dirs gnuradio-core" - { echo "$as_me:$LINENO: result: Component gnuradio-core passed configuration checks, building." >&5 -echo "${ECHO_T}Component gnuradio-core passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gnuradio-core" - { echo "$as_me:$LINENO: result: Component gnuradio-core passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gnuradio-core passed configuration checks, but not building." >&6; } - fi - fi - - - - - # Check whether --enable-gnuradio-examples was given. -if test "${enable_gnuradio_examples+set}" = set; then - enableval=$enable_gnuradio_examples; +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + libqwt_ok=yes else - enable_gnuradio_examples=$enable_all_components + libqwt_ok=no fi - - ac_config_files="$ac_config_files gnuradio-examples/Makefile gnuradio-examples/python/Makefile gnuradio-examples/python/apps/hf_explorer/Makefile gnuradio-examples/python/apps/hf_radio/Makefile gnuradio-examples/python/apps/Makefile gnuradio-examples/python/audio/Makefile gnuradio-examples/python/channel-coding/Makefile gnuradio-examples/python/channel-coding/fsm_files/Makefile gnuradio-examples/python/digital/Makefile gnuradio-examples/python/digital_voice/Makefile gnuradio-examples/python/multi-antenna/Makefile gnuradio-examples/python/multi_usrp/Makefile gnuradio-examples/python/networking/Makefile gnuradio-examples/python/usrp/Makefile" + else + { $as_echo "$as_me:$LINENO: checking for main in -lqwt" >&5 +$as_echo_n "checking for main in -lqwt... " >&6; } +if test "${ac_cv_lib_qwt_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lqwt $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - passed=yes +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_qwt_main=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gnuradio-examples" - if test x$enable_gnuradio_examples = xyes; then - { { echo "$as_me:$LINENO: error: Component gnuradio-examples has errors, stopping." >&5 -echo "$as_me: error: Component gnuradio-examples has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gnuradio-examples." >&5 -echo "${ECHO_T}Not building component gnuradio-examples." >&6; } - fi - else - if test x$enable_gnuradio_examples != xno; then + ac_cv_lib_qwt_main=no +fi - build_dirs="$build_dirs gnuradio-examples" - { echo "$as_me:$LINENO: result: Component gnuradio-examples passed configuration checks, building." >&5 -echo "${ECHO_T}Component gnuradio-examples passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gnuradio-examples" - { echo "$as_me:$LINENO: result: Component gnuradio-examples passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gnuradio-examples passed configuration checks, but not building." >&6; } - fi - fi +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_qwt_main" >&5 +$as_echo "$ac_cv_lib_qwt_main" >&6; } +if test "x$ac_cv_lib_qwt_main" = x""yes; then + libqwt_ok=yes +else + libqwt_ok=no +fi -{ echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5 -echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6; } -if test "${ac_cv_header_stat_broken+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "$libqwt_ok" = "yes" ; then + QWT_LIBS="$QWT_LIBS -lqwt" + else + LIBS="$qwt_save_LIBS $QT_LIBS $QWT_LIBS -lqwt-qt4" + { $as_echo "$as_me:$LINENO: checking for main in -lqwt-qt4" >&5 +$as_echo_n "checking for main in -lqwt-qt4... " >&6; } +if test "${ac_cv_lib_qwt_qt4_main+set}" = set; then + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-lqwt-qt4 $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -#include - -#if defined S_ISBLK && defined S_IFDIR -extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; -#endif - -#if defined S_ISBLK && defined S_IFCHR -extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; -#endif - -#if defined S_ISLNK && defined S_IFREG -extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; -#endif -#if defined S_ISSOCK && defined S_IFREG -extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; -#endif +int +main () +{ +return main (); + ; + return 0; +} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stat_broken=no + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_qwt_qt4_main=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_header_stat_broken=yes + ac_cv_lib_qwt_qt4_main=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_qwt_qt4_main" >&5 +$as_echo "$ac_cv_lib_qwt_qt4_main" >&6; } +if test "x$ac_cv_lib_qwt_qt4_main" = x""yes; then + libqwt_ok=yes +else + libqwt_ok=no fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5 -echo "${ECHO_T}$ac_cv_header_stat_broken" >&6; } -if test $ac_cv_header_stat_broken = yes; then -cat >>confdefs.h <<\_ACEOF -#define STAT_MACROS_BROKEN 1 -_ACEOF + if test "$libqwt_ok" = "yes" ; then + QWT_LIBS="$QWT_LIBS -lqwt-qt4" + else + { $as_echo "$as_me:$LINENO: result: Could not link to libqwt.so" >&5 +$as_echo "Could not link to libqwt.so" >&6; } + fi + fi + fi + else + { $as_echo "$as_me:$LINENO: result: Could not find qwt headers" >&5 +$as_echo "Could not find qwt headers" >&6; } + fi + + LIBS="$qwt_save_LIBS" + CPPFLAGS="$qwt_save_CPPFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test "x$libqwt_ok" = "xyes" ; then + : + else + QWT_CFLAGS="" + QWT_LIBDIRS="" + passed=no + fi + + + + + + if test "$passed" = "yes"; then + + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + qwtplot3d_save_CPPFLAGS="$CPPFLAGS" + qwtplot3d_save_LIBS="$LIBS" + libqwtplot3d_ok=yes + + +# Check whether --with-qwtplot3d-libdir was given. +if test "${with_qwtplot3d_libdir+set}" = set; then + withval=$with_qwtplot3d_libdir; qwtplot3d_libdir="$withval" +else + qwtplot3d_libdir="" fi -for ac_header in fcntl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --with-qwtplot3d-incdir was given. +if test "${with_qwtplot3d_incdir+set}" = set; then + withval=$with_qwtplot3d_incdir; qwtplot3d_incdir="$withval" +else + qwtplot3d_incdir="" +fi + + + +# Check whether --with-qwtplot3d-lib was given. +if test "${with_qwtplot3d_lib+set}" = set; then + withval=$with_qwtplot3d_lib; qwtplot3d_lib="$withval" +else + qwtplot3d_lib="" +fi + + + + CPPFLAGS="$CPPFLAGS $QTCORE_CFLAGS $QTGUI_CFLAGS $QWT_CFLAGS" + + if test "$qwtplot3d_incdir" = "" ; then + if test "${ac_cv_header_qwtplot3d_qwt3d_plot_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for qwtplot3d/qwt3d_plot.h" >&5 +$as_echo_n "checking for qwtplot3d/qwt3d_plot.h... " >&6; } +if test "${ac_cv_header_qwtplot3d_qwt3d_plot_h+set}" = set; then + $as_echo_n "(cached) " >&6 fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwtplot3d_qwt3d_plot_h" >&5 +$as_echo "$ac_cv_header_qwtplot3d_qwt3d_plot_h" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwtplot3d/qwt3d_plot.h usability" >&5 +$as_echo_n "checking qwtplot3d/qwt3d_plot.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27807,7 +43395,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include <$ac_header> +#include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -27815,133 +43403,129 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwtplot3d/qwt3d_plot.h presence" >&5 +$as_echo_n "checking qwtplot3d/qwt3d_plot.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +#include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d/qwt3d_plot.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: qwtplot3d/qwt3d_plot.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for qwtplot3d/qwt3d_plot.h" >&5 +$as_echo_n "checking for qwtplot3d/qwt3d_plot.h... " >&6; } +if test "${ac_cv_header_qwtplot3d_qwt3d_plot_h+set}" = set; then + $as_echo_n "(cached) " >&6 else - eval "$as_ac_Header=\$ac_header_preproc" + ac_cv_header_qwtplot3d_qwt3d_plot_h=$ac_header_preproc fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwtplot3d_qwt3d_plot_h" >&5 +$as_echo "$ac_cv_header_qwtplot3d_qwt3d_plot_h" >&6; } fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +if test "x$ac_cv_header_qwtplot3d_qwt3d_plot_h" = x""yes; then + qwtplot3d_qwtplot3d_h=yes +else + qwtplot3d_qwtplot3d_h=no fi -done - - - -for ac_header in sys/time.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "$qwtplot3d_qwtplot3d_h" = "yes" ; then + QWTPLOT3D_CFLAGS="$QWTPLOT3D_CFLAGS -I/usr/include/qwtplot3d" + else + if test "${ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for qwtplot3d-qt4/qwt3d_plot.h" >&5 +$as_echo_n "checking for qwtplot3d-qt4/qwt3d_plot.h... " >&6; } +if test "${ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h+set}" = set; then + $as_echo_n "(cached) " >&6 fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h" >&5 +$as_echo "$ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwtplot3d-qt4/qwt3d_plot.h usability" >&5 +$as_echo_n "checking qwtplot3d-qt4/qwt3d_plot.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -27949,7 +43533,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include <$ac_header> +#include _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -27957,133 +43541,137 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking qwtplot3d-qt4/qwt3d_plot.h presence" >&5 +$as_echo_n "checking qwtplot3d-qt4/qwt3d_plot.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +#include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: qwtplot3d-qt4/qwt3d_plot.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: qwtplot3d-qt4/qwt3d_plot.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:$LINENO: checking for qwtplot3d-qt4/qwt3d_plot.h" >&5 +$as_echo_n "checking for qwtplot3d-qt4/qwt3d_plot.h... " >&6; } +if test "${ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h+set}" = set; then + $as_echo_n "(cached) " >&6 else - eval "$as_ac_Header=\$ac_header_preproc" + ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h=$ac_header_preproc fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h" >&5 +$as_echo "$ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h" >&6; } fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +if test "x$ac_cv_header_qwtplot3d_qt4_qwt3d_plot_h" = x""yes; then + qwtplot3d_qt4_qwtplot3d_h=yes +else + qwtplot3d_qt4_qwtplot3d_h=no fi -done - - - -for ac_header in unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` + if test "$qwtplot3d_qt4_qwtplot3d_h" = "yes" ; then + QWTPLOT3D_CFLAGS="$QWTPLOT3D_CFLAGS -I/usr/include/qwtplot3d-qt4" + else + libqwtplot3d_ok=no + fi + fi + else + QWTPLOT3D_CFLAGS="$QWTPLOT3D_CFLAGS -I$qwtplot3d_incdir" + as_ac_Header=`$as_echo "ac_cv_header_$qwtplot3d_incdir/qwt3d_plot.h" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } + { $as_echo "$as_me:$LINENO: checking for $qwtplot3d_incdir/qwt3d_plot.h" >&5 +$as_echo_n "checking for $qwtplot3d_incdir/qwt3d_plot.h... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking $qwtplot3d_incdir/qwt3d_plot.h usability" >&5 +$as_echo_n "checking $qwtplot3d_incdir/qwt3d_plot.h usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF @@ -28091,7 +43679,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default -#include <$ac_header> +#include <$qwtplot3d_incdir/qwt3d_plot.h> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" @@ -28099,251 +43687,221 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } # Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking $qwtplot3d_incdir/qwt3d_plot.h presence" >&5 +$as_echo_n "checking $qwtplot3d_incdir/qwt3d_plot.h presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +#include <$qwtplot3d_incdir/qwt3d_plot.h> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } # So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $qwtplot3d_incdir/qwt3d_plot.h: in the future, the compiler will take precedence" >&2;} ;; esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +{ $as_echo "$as_me:$LINENO: checking for $qwtplot3d_incdir/qwt3d_plot.h" >&5 +$as_echo_n "checking for $qwtplot3d_incdir/qwt3d_plot.h... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + : +else + libqwtplot3d_ok=no fi -done + fi + + if test "$libqwtplot3d_ok" = "yes" ; then - { echo "$as_me:$LINENO: checking whether getenv is declared" >&5 -echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; } -if test "${ac_cv_have_decl_getenv+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "$qwtplot3d_libdir" != "" ; then + QWTPLOT3D_LIBS="-L$qwtplot3d_libdir $QWTPLOT3D_LIBS" + fi + + CPPFLAGS="$CPPFLAGS $QWTPLOT3D_CFLAGS" + LIBS="$qwtplot3d_save_LIBS $QT_LIBS $QWTPLOT3D_LIBS -lqwtplot3d-qt4" + + if test "$qwtplot3d_lib" != "" ; then + as_ac_Lib=`$as_echo "ac_cv_lib_$qwtplot3d_lib''_main" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for main in -l$qwtplot3d_lib" >&5 +$as_echo_n "checking for main in -l$qwtplot3d_lib... " >&6; } +if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$qwtplot3d_lib $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default + + int main () { -#ifndef getenv - (void) getenv; -#endif - +return main (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_have_decl_getenv=yes + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_Lib=yes" else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_have_decl_getenv=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval "$as_ac_Lib=no" fi -{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 -echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; } -if test $ac_cv_have_decl_getenv = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 0 -_ACEOF - +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi - - - - - - # Check whether --enable-usrp was given. -if test "${enable_usrp+set}" = set; then - enableval=$enable_usrp; +ac_res=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Lib'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + libqwtplot3d_ok=yes else - enable_usrp=$enable_all_components + libqwtplot3d_ok=no fi + else + { $as_echo "$as_me:$LINENO: checking for main in -lqwtplot3d-qt4" >&5 +$as_echo_n "checking for main in -lqwtplot3d-qt4... " >&6; } +if test "${ac_cv_lib_qwtplot3d_qt4_main+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lqwtplot3d-qt4 $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ - ac_config_files="$ac_config_files usrp/Makefile usrp/usrp.pc usrp/usrp.iss usrp/doc/Doxyfile usrp/doc/Makefile usrp/doc/other/Makefile usrp/host/Makefile usrp/host/misc/Makefile usrp/host/lib/Makefile usrp/host/lib/std_paths.h usrp/host/swig/Makefile usrp/host/apps/Makefile usrp/firmware/Makefile usrp/firmware/include/Makefile usrp/firmware/lib/Makefile usrp/firmware/src/Makefile usrp/firmware/src/common/Makefile usrp/firmware/src/usrp2/Makefile usrp/fpga/Makefile usrp/fpga/rbf/Makefile" - - - # gnulib. - # FIXME: this needs to fail gracefully and continue, not implemented yet - -for ac_func in mkstemp -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif int main () { -return $ac_func (); +return main (); ; return 0; } @@ -28354,155 +43912,275 @@ case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_qwtplot3d_qt4_main=yes else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" + ac_cv_lib_qwtplot3d_qt4_main=no fi +rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_qwtplot3d_qt4_main" >&5 +$as_echo "$ac_cv_lib_qwtplot3d_qt4_main" >&6; } +if test "x$ac_cv_lib_qwtplot3d_qt4_main" = x""yes; then + libqwtplot3d_ok=yes else - case " $LIBOBJS " in - *" $ac_func.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" - ;; -esac - + libqwtplot3d_ok=no fi -done - - if test $ac_cv_func_mkstemp = no; then - utils_cv_func_mkstemp_limitations=yes - else - { echo "$as_me:$LINENO: checking for mkstemp limitations" >&5 -echo $ECHO_N "checking for mkstemp limitations... $ECHO_C" >&6; } -if test "${utils_cv_func_mkstemp_limitations+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - if test "$cross_compiling" = yes; then - utils_cv_func_mkstemp_limitations=yes + if test "$libqwtplot3d_ok" = "yes" ; then + QWTPLOT3D_LIBS="$QWTPLOT3D_LIBS -lqwtplot3d-qt4" + else + LIBS="$qwtplot3d_save_LIBS $QT_LIBS $QWTPLOT3D_LIBS -lqwtplot3d" + { $as_echo "$as_me:$LINENO: checking for main in -lqwtplot3d" >&5 +$as_echo_n "checking for main in -lqwtplot3d... " >&6; } +if test "${ac_cv_lib_qwtplot3d_main+set}" = set; then + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-lqwtplot3d $LIBS" +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -# include - int main () - { - int i; - for (i = 0; i < 70; i++) - { - char template[] = "conftestXXXXXX"; - int fd = mkstemp (template); - if (fd == -1) - exit (1); - close (fd); - } - exit (0); - } +int +main () +{ +return main (); + ; + return 0; +} _ACEOF -rm -f conftest$ac_exeext +rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - utils_cv_func_mkstemp_limitations=no + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_qwtplot3d_main=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -( exit $ac_status ) -utils_cv_func_mkstemp_limitations=yes + ac_cv_lib_qwtplot3d_main=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_qwtplot3d_main" >&5 +$as_echo "$ac_cv_lib_qwtplot3d_main" >&6; } +if test "x$ac_cv_lib_qwtplot3d_main" = x""yes; then + libqwtplot3d_ok=yes +else + libqwtplot3d_ok=no fi + if test "$libqwtplot3d_ok" = "yes" ; then + QWTPLOT3D_LIBS="$QWTPLOT3D_LIBS -lqwtplot3d" + else + { $as_echo "$as_me:$LINENO: result: Could not link to libqwtplot3d.so" >&5 +$as_echo "Could not link to libqwtplot3d.so" >&6; } + fi + fi + fi + else + { $as_echo "$as_me:$LINENO: result: Could not find qwtplot3d headers" >&5 +$as_echo "Could not find qwtplot3d headers" >&6; } + fi + + LIBS="$qwtplot3d_save_LIBS" + CPPFLAGS="$qwtplot3d_save_CPPFLAGS" + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test "x$libqwtplot3d_ok" = "xyes" ; then + : + else + QWTPLOT3D_CFLAGS="" + QWTPLOT3D_LIBDIRS="" + passed=no + fi + + + + + fi + + QT_INCLUDES="$QWT_CFLAGS $QWTPLOT3D_CFLAGS $QTCORE_CFLAGS $QTGUI_CFLAGS" + QT_LIBS="$QWT_LIBS $QWTPLOT3D_LIBS $QTOPENGL_LIBS" + + for i in $QWT_CFLAGS $QWTPLOT3D_CFLAGS; do + QMAKE_INCLUDES="$QMAKE_INCLUDES ${i##-I}" + done + + QT_MOC_EXEC=`pkg-config --variable=moc_location QtCore` + QT_UIC_EXEC=`pkg-config --variable=uic_location QtCore` + + + + fi + + if test "$passed" = "no"; then + if false; then + BUILD_QT_TRUE= + BUILD_QT_FALSE='#' +else + BUILD_QT_TRUE='#' + BUILD_QT_FALSE= fi -{ echo "$as_me:$LINENO: result: $utils_cv_func_mkstemp_limitations" >&5 -echo "${ECHO_T}$utils_cv_func_mkstemp_limitations" >&6; } - fi - if test $utils_cv_func_mkstemp_limitations = yes; then - case " $LIBOBJS " in - *" mkstemp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" - ;; -esac + else + if true; then + BUILD_QT_TRUE= + BUILD_QT_FALSE='#' +else + BUILD_QT_TRUE='#' + BUILD_QT_FALSE= +fi - case " $LIBOBJS " in - *" tempname.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS tempname.$ac_objext" - ;; -esac + fi + ac_config_files="$ac_config_files gr-qtgui/Makefile gr-qtgui/src/Makefile gr-qtgui/src/lib/Makefile gr-qtgui/src/python/Makefile" -cat >>confdefs.h <<\_ACEOF -#define mkstemp rpl_mkstemp -_ACEOF + gr_qtgui_with=no + if test $passed = no; then + if test x$enable_gr_qtgui = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-qtgui has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-qtgui has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-qtgui." >&5 +$as_echo "Not building component gr-qtgui." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-qtgui" + if test "x${gr_qtgui_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_qtgui_INCLUDES}" + else + with_INCLUDES="${gr_qtgui_INCLUDES}"" ""$with_INCLUDES" + fi + gr_qtgui_INCLUDES= + fi + if test "x${gr_qtgui_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_qtgui_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_qtgui_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_qtgui_SWIG_INCLUDES= + fi - : + if test "x${gr_qtgui_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_qtgui_PYDIRPATH}" + else + with_PYDIRPATH="${gr_qtgui_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_qtgui_PYDIRPATH= + fi + if test "x${gr_qtgui_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_qtgui_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_qtgui_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_qtgui_SWIGDIRPATH= + fi + if test "x${gr_qtgui_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_qtgui_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_qtgui_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_qtgui_LIBDIRPATH= + fi + { $as_echo "$as_me:$LINENO: result: Component gr-qtgui will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-qtgui will be included from a pre-installed library and includes." >&6; } + gr_qtgui_with=yes + else + gr_qtgui_LDFLAG= + if test x$enable_gr_qtgui != xno; then + : + build_dirs="$build_dirs gr-qtgui" + { $as_echo "$as_me:$LINENO: result: Component gr-qtgui passed configuration checks; building." >&5 +$as_echo "Component gr-qtgui passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-qtgui passed configuration checks; but not building." >&5 +$as_echo "Component gr-qtgui passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-qtgui" + gr_qtgui_skipped=yes + else + gr_qtgui_skipped=no + fi @@ -28510,4635 +44188,4246 @@ _ACEOF -for ac_header in stdint.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + + + + + passed=yes + # Check whether --enable-gr-sounder was given. +if test "${enable_gr_sounder+set}" = set; then + enableval=$enable_gr_sounder; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no + enable_gr_sounder=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + if test $passed != no; then + if test $passed = yes; then + if test x$usrp_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-sounder requires usrp, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-sounder requires usrp, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-sounder requires usrp to be included as --with-usrp[=arg]" >&5 +$as_echo "$as_me: error: Component gr-sounder requires usrp to be included as --with-usrp[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-sounder requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-sounder requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-sounder requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-sounder requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + ac_config_files="$ac_config_files gr-sounder/Makefile gr-sounder/doc/Makefile gr-sounder/src/Makefile gr-sounder/src/fpga/Makefile gr-sounder/src/fpga/top/Makefile gr-sounder/src/fpga/lib/Makefile gr-sounder/src/fpga/tb/Makefile gr-sounder/src/lib/Makefile gr-sounder/src/python/Makefile gr-sounder/src/python/run_tests" + - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi + gr_sounder_with=no + if test $passed = no; then + if test x$enable_gr_sounder = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-sounder has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-sounder has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-sounder." >&5 +$as_echo "Not building component gr-sounder." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-sounder" -done + if test "x${gr_sounder_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_sounder_INCLUDES}" + else + with_INCLUDES="${gr_sounder_INCLUDES}"" ""$with_INCLUDES" + fi + gr_sounder_INCLUDES= + fi + if test "x${gr_sounder_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_sounder_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_sounder_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_sounder_SWIG_INCLUDES= + fi -for ac_func in __secure_getenv gettimeofday lstat -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + if test "x${gr_sounder_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_sounder_PYDIRPATH}" + else + with_PYDIRPATH="${gr_sounder_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_sounder_PYDIRPATH= + fi -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif + if test "x${gr_sounder_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_sounder_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_sounder_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_sounder_SWIGDIRPATH= + fi -#undef $ac_func -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + if test "x${gr_sounder_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_sounder_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_sounder_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_sounder_LIBDIRPATH= + fi -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:$LINENO: result: Component gr-sounder will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-sounder will be included from a pre-installed library and includes." >&6; } + gr_sounder_with=yes + else + gr_sounder_LDFLAG= + if test x$enable_gr_sounder != xno; then + ac_config_commands="$ac_config_commands run_tests_sounder" + + + build_dirs="$build_dirs gr-sounder" + { $as_echo "$as_me:$LINENO: result: Component gr-sounder passed configuration checks; building." >&5 +$as_echo "Component gr-sounder passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-sounder passed configuration checks; but not building." >&5 +$as_echo "Component gr-sounder passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-sounder" + gr_sounder_skipped=yes + else + gr_sounder_skipped=no + fi - eval "$as_ac_var=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -fi -done - : - # AC_REQUIRE([jm_AC_TYPE_UINTMAX_T]) + passed=yes + # Check whether --enable-gr-utils was given. +if test "${enable_gr_utils+set}" = set; then + enableval=$enable_gr_utils; +else - { echo "$as_me:$LINENO: checking whether mkdir accepts only one arg" >&5 -echo $ECHO_N "checking whether mkdir accepts only one arg... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - #include - #include -int -main () -{ + enable_gr_utils=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi - mkdir("") +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -cat >>confdefs.h <<\_ACEOF -#define MKDIR_TAKES_ONE_ARG -_ACEOF -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-utils requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-utils requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-utils requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gr-utils requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi + if test $passed != no; then + if test $passed = yes; then + if test x$usrp_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-utils requires usrp, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-utils requires usrp, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-utils requires usrp to be included as --with-usrp[=arg]" >&5 +$as_echo "$as_me: error: Component gr-utils requires usrp to be included as --with-usrp[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi - # These checks don't fail - { echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include + if test $passed != no; then + if test $passed = yes; then + if test x$gr_wxgui_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gr-utils requires gr-wxgui, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gr-utils requires gr-wxgui, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gr_wxgui_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gr-utils requires gr-wxgui to be included as --with-gr-wxgui[=arg]" >&5 +$as_echo "$as_me: error: Component gr-utils requires gr-wxgui to be included as --with-gr-wxgui[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include + ac_config_files="$ac_config_files gr-utils/Makefile gr-utils/src/Makefile gr-utils/src/lib/Makefile gr-utils/src/python/Makefile" -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_bigendian=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + gr_utils_with=no + if test $passed = no; then + if test x$enable_gr_utils = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gr-utils has errors; stopping." >&5 +$as_echo "$as_me: error: Component gr-utils has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gr-utils." >&5 +$as_echo "Not building component gr-utils." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gr-utils" + + if test "x${gr_utils_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gr_utils_INCLUDES}" + else + with_INCLUDES="${gr_utils_INCLUDES}"" ""$with_INCLUDES" + fi + gr_utils_INCLUDES= + fi + + + if test "x${gr_utils_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gr_utils_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gr_utils_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gr_utils_SWIG_INCLUDES= + fi + + + if test "x${gr_utils_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gr_utils_PYDIRPATH}" + else + with_PYDIRPATH="${gr_utils_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gr_utils_PYDIRPATH= + fi - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -int -main () -{ - _ascii (); _ebcdic (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes -fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "x${gr_utils_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gr_utils_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gr_utils_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gr_utils_SWIGDIRPATH= + fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ + if test "x${gr_utils_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gr_utils_LIBDIRPATH}" + else + with_LIBDIRPATH="${gr_utils_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gr_utils_LIBDIRPATH= + fi - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; + { $as_echo "$as_me:$LINENO: result: Component gr-utils will be included from a pre-installed library and includes." >&5 +$as_echo "Component gr-utils will be included from a pre-installed library and includes." >&6; } + gr_utils_with=yes + else + gr_utils_LDFLAG= + if test x$enable_gr_utils != xno; then + : + build_dirs="$build_dirs gr-utils" + { $as_echo "$as_me:$LINENO: result: Component gr-utils passed configuration checks; building." >&5 +$as_echo "Component gr-utils passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gr-utils passed configuration checks; but not building." >&5 +$as_echo "Component gr-utils passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gr-utils" + gr_utils_skipped=yes + else + gr_utils_skipped=no + fi - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -( exit $ac_status ) -ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac -for ac_header in byteswap.h linux/compiler.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + + passed=yes + # Check whether --enable-gnuradio-examples was given. +if test "${enable_gnuradio_examples+set}" = set; then + enableval=$enable_gnuradio_examples; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no + enable_gnuradio_examples=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + if test $passed != no; then + if test $passed = yes; then + if test x$gnuradio_core_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component gnuradio-examples requires gnuradio-core, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component gnuradio-examples requires gnuradio-core, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gnuradio_core_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-examples requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&5 +$as_echo "$as_me: error: Component gnuradio-examples requires gnuradio-core to be included as --with-gnuradio-core[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + ac_config_files="$ac_config_files gnuradio-examples/Makefile gnuradio-examples/c++/Makefile gnuradio-examples/python/Makefile gnuradio-examples/python/apps/hf_explorer/Makefile gnuradio-examples/python/apps/hf_radio/Makefile gnuradio-examples/python/apps/Makefile gnuradio-examples/python/audio/Makefile gnuradio-examples/python/digital/Makefile gnuradio-examples/python/digital_voice/Makefile gnuradio-examples/python/digital-bert/Makefile gnuradio-examples/python/mp-sched/Makefile gnuradio-examples/python/multi-antenna/Makefile gnuradio-examples/python/multi_usrp/Makefile gnuradio-examples/python/network/Makefile gnuradio-examples/python/ofdm/Makefile gnuradio-examples/python/usrp/Makefile gnuradio-examples/python/usrp2/Makefile" -fi -done + gnuradio_examples_with=no + if test $passed = no; then + if test x$enable_gnuradio_examples = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component gnuradio-examples has errors; stopping." >&5 +$as_echo "$as_me: error: Component gnuradio-examples has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component gnuradio-examples." >&5 +$as_echo "Not building component gnuradio-examples." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs gnuradio-examples" -for ac_func in getrusage sched_setscheduler -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + if test "x${gnuradio_examples_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${gnuradio_examples_INCLUDES}" + else + with_INCLUDES="${gnuradio_examples_INCLUDES}"" ""$with_INCLUDES" + fi + gnuradio_examples_INCLUDES= + fi -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif + if test "x${gnuradio_examples_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${gnuradio_examples_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${gnuradio_examples_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + gnuradio_examples_SWIG_INCLUDES= + fi -#undef $ac_func -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + if test "x${gnuradio_examples_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${gnuradio_examples_PYDIRPATH}" + else + with_PYDIRPATH="${gnuradio_examples_PYDIRPATH}"":""$with_PYDIRPATH" + fi + gnuradio_examples_PYDIRPATH= + fi + + + if test "x${gnuradio_examples_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${gnuradio_examples_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${gnuradio_examples_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + gnuradio_examples_SWIGDIRPATH= + fi -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi + if test "x${gnuradio_examples_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${gnuradio_examples_LIBDIRPATH}" + else + with_LIBDIRPATH="${gnuradio_examples_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + gnuradio_examples_LIBDIRPATH= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + { $as_echo "$as_me:$LINENO: result: Component gnuradio-examples will be included from a pre-installed library and includes." >&5 +$as_echo "Component gnuradio-examples will be included from a pre-installed library and includes." >&6; } + gnuradio_examples_with=yes + else + gnuradio_examples_LDFLAG= + if test x$enable_gnuradio_examples != xno; then + : + build_dirs="$build_dirs gnuradio-examples" + { $as_echo "$as_me:$LINENO: result: Component gnuradio-examples passed configuration checks; building." >&5 +$as_echo "Component gnuradio-examples passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component gnuradio-examples passed configuration checks; but not building." >&5 +$as_echo "Component gnuradio-examples passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs gnuradio-examples" + gnuradio_examples_skipped=yes + else + gnuradio_examples_skipped=no + fi -fi -done -for ac_func in sigaction snprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ -#ifdef __STDC__ -# include -#else -# include -#endif -#undef $ac_func -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + + passed=yes + # Check whether --enable-grc was given. +if test "${enable_grc+set}" = set; then + enableval=$enable_grc; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi + enable_grc=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF -fi -done - passed=yes - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $passed != no; then + if test $passed = yes; then + if test x$gr_wxgui_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component grc requires gr-wxgui, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component grc requires gr-wxgui, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$gr_wxgui_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component grc requires gr-wxgui to be included as --with-gr-wxgui[=arg]" >&5 +$as_echo "$as_me: error: Component grc requires gr-wxgui to be included as --with-gr-wxgui[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi - libusbok=yes -for ac_header in usb.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + # Extract the first word of "xdg-mime", so it can be a program name with args. +set dummy xdg-mime; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_XDG_UTILS+set}" = set; then + $as_echo_n "(cached) " >&6 else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes + if test -n "$XDG_UTILS"; then + ac_cv_prog_XDG_UTILS="$XDG_UTILS" # Let the user override the test. else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_XDG_UTILS="true" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS - ac_header_compiler=no + test -z "$ac_cv_prog_XDG_UTILS" && ac_cv_prog_XDG_UTILS="false" +fi +fi +XDG_UTILS=$ac_cv_prog_XDG_UTILS +if test -n "$XDG_UTILS"; then + { $as_echo "$as_me:$LINENO: result: $XDG_UTILS" >&5 +$as_echo "$XDG_UTILS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes + if $XDG_UTILS; then + XDG_UTILS_TRUE= + XDG_UTILS_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no + XDG_UTILS_TRUE='#' + XDG_UTILS_FALSE= fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + if test $passed = yes; then - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + { $as_echo "$as_me:$LINENO: checking for Python >= 2.5" >&5 +$as_echo_n "checking for Python >= 2.5... " >&6; } + if test "sys.version.split()[0] >= "2.5""; then + python_cmd=' +try: + import sys + assert sys.version.split()[0] >= "2.5" +except: exit(1)' + else + python_cmd=' +try: import sys +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + + + { $as_echo "$as_me:$LINENO: checking for Python Cheetah templates >= 2.0.0" >&5 +$as_echo_n "checking for Python Cheetah templates >= 2.0.0... " >&6; } + if test "Cheetah.Version >= "2.0.0""; then + python_cmd=' +try: + import Cheetah + assert Cheetah.Version >= "2.0.0" +except: exit(1)' + else + python_cmd=' +try: import Cheetah +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + + + { $as_echo "$as_me:$LINENO: checking for Python lxml wrappers >= 2.0.0" >&5 +$as_echo_n "checking for Python lxml wrappers >= 2.0.0... " >&6; } + if test "lxml.etree.LXML_VERSION >= (2, 0, 0, 0)"; then + python_cmd=' +try: + import lxml.etree + assert lxml.etree.LXML_VERSION >= (2, 0, 0, 0) +except: exit(1)' + else + python_cmd=' +try: import lxml.etree +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + + + { $as_echo "$as_me:$LINENO: checking for Python gtk wrappers >= 2.10.0" >&5 +$as_echo_n "checking for Python gtk wrappers >= 2.10.0... " >&6; } + if test "gtk.pygtk_version >= (2, 10, 0)"; then + python_cmd=' +try: + import gtk + assert gtk.pygtk_version >= (2, 10, 0) +except: exit(1)' + else + python_cmd=' +try: import gtk +except: exit(1)' + fi + if ! $PYTHON -c "$python_cmd" 2> /dev/null; then + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + passed=no + else + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + + fi + + fi + + if test `${PYTHON} -c "import sys; print sys.platform"` = 'darwin'; then + PYTHONW=pythonw + else + PYTHONW=python + fi -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -else - libusbok=no, - { echo "$as_me:$LINENO: result: USRP requires libusb. usb.h not found. See http://libusb.sf.net" >&5 -echo "${ECHO_T}USRP requires libusb. usb.h not found. See http://libusb.sf.net" >&6; } + ac_config_files="$ac_config_files grc/Makefile grc/base/Makefile grc/blocks/Makefile grc/examples/Makefile grc/freedesktop/Makefile grc/grc_gnuradio/Makefile grc/gui/Makefile grc/python/Makefile grc/scripts/Makefile" -fi -done - save_LIBS="$LIBS" - case "$host_os" in - darwin*) LIBS="$LIBS -lIOKit" ;; - *) ;; - esac - { echo "$as_me:$LINENO: checking for library containing usb_bulk_write" >&5 -echo $ECHO_N "checking for library containing usb_bulk_write... $ECHO_C" >&6; } -if test "${ac_cv_search_usb_bulk_write+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + grc_with=no + if test $passed = no; then + if test x$enable_grc = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component grc has errors; stopping." >&5 +$as_echo "$as_me: error: Component grc has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component grc." >&5 +$as_echo "Not building component grc." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs grc" -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char usb_bulk_write (); -int -main () -{ -return usb_bulk_write (); - ; - return 0; -} -_ACEOF -for ac_lib in '' usb; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_usb_bulk_write=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "x${grc_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${grc_INCLUDES}" + else + with_INCLUDES="${grc_INCLUDES}"" ""$with_INCLUDES" + fi + grc_INCLUDES= + fi -fi + if test "x${grc_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${grc_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${grc_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + grc_SWIG_INCLUDES= + fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_usb_bulk_write+set}" = set; then - break -fi -done -if test "${ac_cv_search_usb_bulk_write+set}" = set; then - : -else - ac_cv_search_usb_bulk_write=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_usb_bulk_write" >&5 -echo "${ECHO_T}$ac_cv_search_usb_bulk_write" >&6; } -ac_res=$ac_cv_search_usb_bulk_write -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - USB_LIBS="$LIBS" -else - libusbok=no, - { echo "$as_me:$LINENO: result: USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net" >&5 -echo "${ECHO_T}USRP requires libusb. usb_bulk_write not found. See http://libusb.sf.net" >&6; } -fi + if test "x${grc_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${grc_PYDIRPATH}" + else + with_PYDIRPATH="${grc_PYDIRPATH}"":""$with_PYDIRPATH" + fi + grc_PYDIRPATH= + fi - LIBS="$save_LIBS" - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test "x${grc_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${grc_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${grc_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + grc_SWIGDIRPATH= + fi - if test $libusbok = yes; then + if test "x${grc_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${grc_LIBDIRPATH}" + else + with_LIBDIRPATH="${grc_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + grc_LIBDIRPATH= + fi - : + { $as_echo "$as_me:$LINENO: result: Component grc will be included from a pre-installed library and includes." >&5 +$as_echo "Component grc will be included from a pre-installed library and includes." >&6; } + grc_with=yes else - passed=no;{ echo "$as_me:$LINENO: result: Unable to configure USB dependency." >&5 -echo "${ECHO_T}Unable to configure USB dependency." >&6; } + grc_LDFLAG= + if test x$enable_grc != xno; then + : + build_dirs="$build_dirs grc" + { $as_echo "$as_me:$LINENO: result: Component grc passed configuration checks; building." >&5 +$as_echo "Component grc passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component grc passed configuration checks; but not building." >&5 +$as_echo "Component grc passed configuration checks; but not building." >&6; } + fi fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs grc" + grc_skipped=yes + else + grc_skipped=no + fi -# Check whether --with-fusb-tech was given. -if test "${with_fusb_tech+set}" = set; then - withval=$with_fusb_tech; cf_with_fusb_tech="$withval" -else - cf_with_fusb_tech="$host_os" -fi - if test "${ac_cv_header_linux_usbdevice_fs_h+set}" = set; then - { echo "$as_me:$LINENO: checking for linux/usbdevice_fs.h" >&5 -echo $ECHO_N "checking for linux/usbdevice_fs.h... $ECHO_C" >&6; } -if test "${ac_cv_header_linux_usbdevice_fs_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_usbdevice_fs_h" >&5 -echo "${ECHO_T}$ac_cv_header_linux_usbdevice_fs_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking linux/usbdevice_fs.h usability" >&5 -echo $ECHO_N "checking linux/usbdevice_fs.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } -# Is the header present? -{ echo "$as_me:$LINENO: checking linux/usbdevice_fs.h presence" >&5 -echo $ECHO_N "checking linux/usbdevice_fs.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes + + + passed=yes + # Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then + enableval=$enable_docs; else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no + enable_docs=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/usbdevice_fs.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: linux/usbdevice_fs.h: in the future, the compiler will take precedence" >&2;} - ;; -esac -{ echo "$as_me:$LINENO: checking for linux/usbdevice_fs.h" >&5 -echo $ECHO_N "checking for linux/usbdevice_fs.h... $ECHO_C" >&6; } -if test "${ac_cv_header_linux_usbdevice_fs_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_linux_usbdevice_fs_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_usbdevice_fs_h" >&5 -echo "${ECHO_T}$ac_cv_header_linux_usbdevice_fs_h" >&6; } -fi -if test $ac_cv_header_linux_usbdevice_fs_h = yes; then - x_have_usbdevice_fs_h=yes -else - x_have_usbdevice_fs_h=no -fi + ac_config_files="$ac_config_files docs/Makefile docs/doxygen/Doxyfile docs/doxygen/Makefile docs/doxygen/other/Makefile docs/doxygen/xml-swig/Makefile" - { echo "$as_me:$LINENO: checking for fast usb technique to use" >&5 -echo $ECHO_N "checking for fast usb technique to use... $ECHO_C" >&6; } - case "$cf_with_fusb_tech" in - linux*) if test x${x_have_usbdevice_fs_h} = xyes; - then - FUSB_TECH=linux - else - FUSB_TECH=generic - fi ;; - - darwin*) FUSB_TECH=darwin ;; - cygwin*|win*|mingw*) FUSB_TECH=win32 ;; - *bsd*) - { echo "$as_me:$LINENO: checking for RA/WB" >&5 -echo $ECHO_N "checking for RA/WB... $ECHO_C" >&6; } - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -struct usb_bulk_ra_wb_opt o; - ioctl(0, USB_SET_BULK_RA, &o); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - FUSB_TECH=ra_wb -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - FUSB_TECH=generic -fi + docs_with=no + if test $passed = no; then + if test x$enable_docs = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component docs has errors; stopping." >&5 +$as_echo "$as_me: error: Component docs has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component docs." >&5 +$as_echo "Not building component docs." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs docs" + + if test "x${docs_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${docs_INCLUDES}" + else + with_INCLUDES="${docs_INCLUDES}"" ""$with_INCLUDES" + fi + docs_INCLUDES= + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; - *) FUSB_TECH=generic ;; - esac - { echo "$as_me:$LINENO: result: $FUSB_TECH" >&5 -echo "${ECHO_T}$FUSB_TECH" >&6; } + if test "x${docs_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${docs_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${docs_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + docs_SWIG_INCLUDES= + fi + if test "x${docs_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${docs_PYDIRPATH}" + else + with_PYDIRPATH="${docs_PYDIRPATH}"":""$with_PYDIRPATH" + fi + docs_PYDIRPATH= + fi -if test $FUSB_TECH = darwin; then - FUSB_TECH_darwin_TRUE= - FUSB_TECH_darwin_FALSE='#' -else - FUSB_TECH_darwin_TRUE='#' - FUSB_TECH_darwin_FALSE= -fi + if test "x${docs_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${docs_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${docs_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + docs_SWIGDIRPATH= + fi + if test "x${docs_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${docs_LIBDIRPATH}" + else + with_LIBDIRPATH="${docs_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + docs_LIBDIRPATH= + fi -if test $FUSB_TECH = win32; then - FUSB_TECH_win32_TRUE= - FUSB_TECH_win32_FALSE='#' -else - FUSB_TECH_win32_TRUE='#' - FUSB_TECH_win32_FALSE= -fi + { $as_echo "$as_me:$LINENO: result: Component docs will be included from a pre-installed library and includes." >&5 +$as_echo "Component docs will be included from a pre-installed library and includes." >&6; } + docs_with=yes + else + docs_LDFLAG= + if test x$enable_docs != xno; then + : + build_dirs="$build_dirs docs" + { $as_echo "$as_me:$LINENO: result: Component docs passed configuration checks; building." >&5 +$as_echo "Component docs passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component docs passed configuration checks; but not building." >&5 +$as_echo "Component docs passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs docs" + docs_skipped=yes + else + docs_skipped=no + fi -if test $FUSB_TECH = generic; then - FUSB_TECH_generic_TRUE= - FUSB_TECH_generic_FALSE='#' -else - FUSB_TECH_generic_TRUE='#' - FUSB_TECH_generic_FALSE= -fi -if test $FUSB_TECH = linux; then - FUSB_TECH_linux_TRUE= - FUSB_TECH_linux_FALSE='#' -else - FUSB_TECH_linux_TRUE='#' - FUSB_TECH_linux_FALSE= -fi -if test $FUSB_TECH = ra_wb; then - FUSB_TECH_ra_wb_TRUE= - FUSB_TECH_ra_wb_FALSE='#' -else - FUSB_TECH_ra_wb_TRUE='#' - FUSB_TECH_ra_wb_FALSE= -fi +# Each component is now either to be built, was skipped, will be +# included from pre-installed libraries and includes, or failed +# dependencies. +build_dirs=$build_dirs +skipped_dirs=$skipped_dirs +with_dirs=$with_dirs - sdccok=yes - # Extract the first word of "sdcc", so it can be a program name with args. -set dummy sdcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_XCC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$XCC"; then - ac_cv_prog_XCC="$XCC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_XCC="sdcc -mmcs51 --no-xinit-opt" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - test -z "$ac_cv_prog_XCC" && ac_cv_prog_XCC="no" -fi -fi -XCC=$ac_cv_prog_XCC -if test -n "$XCC"; then - { echo "$as_me:$LINENO: result: $XCC" >&5 -echo "${ECHO_T}$XCC" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi +# fix for older autotools that don't define these by default - # Extract the first word of "asx8051", so it can be a program name with args. -set dummy asx8051; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_XAS+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$XAS"; then - ac_cv_prog_XAS="$XAS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_XAS="asx8051 -plosgff" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - test -z "$ac_cv_prog_XAS" && ac_cv_prog_XAS="no" -fi -fi -XAS=$ac_cv_prog_XAS -if test -n "$XAS"; then - { echo "$as_me:$LINENO: result: $XAS" >&5 -echo "${ECHO_T}$XAS" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi +# 'with' variables - the pre-installed libraries, includes, and paths +# - must always come last in the lists, so they require special +# treatment. - if test "$XCC" = "no" -o "$XAS" = "no" ; then - { echo "$as_me:$LINENO: result: USRP requires sdcc. sdcc not found. See http://sdcc.sf.net" >&5 -echo "${ECHO_T}USRP requires sdcc. sdcc not found. See http://sdcc.sf.net" >&6; } - sdccok=no - else - sdcc_version_min=2.4.0 - sdcc_version=`sdcc --version 2>&1 | \ - sed 's/\(SDCC.* \)\([0-9]*\.[0-9]*\.[0-9]*\)\( .*$\)/\2/'` - { echo "$as_me:$LINENO: checking sdcc_version \"$sdcc_version\"" >&5 -echo $ECHO_N "checking sdcc_version \"$sdcc_version\"... $ECHO_C" >&6; } - sdcc_major_version=`echo $sdcc_version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - sdcc_minor_version=`echo $sdcc_version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - sdcc_micro_version=`echo $sdcc_version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` - sdcc_major_min=`echo $sdcc_version_min | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - sdcc_minor_min=`echo $sdcc_version_min | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - sdcc_micro_min=`echo $sdcc_version_min | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` +# Local files tweaked by AC +ac_config_files="$ac_config_files Makefile run_tests.sh config/Makefile" - sdcc_version_proper=`expr \ - "$sdcc_major_version" \> "$sdcc_major_min" \| \ - "$sdcc_major_version" \= "$sdcc_major_min" \& \ - "$sdcc_minor_version" \> "$sdcc_minor_min" \| \ - "$sdcc_major_version" \= "$sdcc_major_min" \& \ - "$sdcc_minor_version" \= "$sdcc_minor_min" \& \ - "$sdcc_micro_version" \>= "$sdcc_micro_min" ` - if test "$sdcc_version_proper" = "1" ; then - { echo "$as_me:$LINENO: result: $sdcc_major_version.$sdcc_minor_version.$sdcc_micro_version" >&5 -echo "${ECHO_T}$sdcc_major_version.$sdcc_minor_version.$sdcc_micro_version" >&6; } - else - sdccok=no - { echo "$as_me:$LINENO: result: USRP requires sdcc >= $sdcc_version_min. sdcc not found. See http://sdcc.sf.net\"" >&5 -echo "${ECHO_T}USRP requires sdcc >= $sdcc_version_min. sdcc not found. See http://sdcc.sf.net\"" >&6; } - fi +ac_config_commands="$ac_config_commands run_tests_build" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. - fi +_ACEOF - if test $sdccok = yes; then - : - else - passed=no;{ echo "$as_me:$LINENO: result: Unable to find firmware compiler." >&5 -echo "${ECHO_T}Unable to find firmware compiler." >&6; } - fi +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - if test x$passed = xno; then - skipped_dirs="$skipped_dirs usrp" - if test x$enable_usrp = xyes; then - { { echo "$as_me:$LINENO: error: Component usrp has errors, stopping." >&5 -echo "$as_me: error: Component usrp has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component usrp." >&5 -echo "${ECHO_T}Not building component usrp." >&6; } - fi - else - if test x$enable_usrp != xno; then +DEFS=-DHAVE_CONFIG_H - build_dirs="$build_dirs usrp" - { echo "$as_me:$LINENO: result: Component usrp passed configuration checks, building." >&5 -echo "${ECHO_T}Component usrp passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs usrp" - { echo "$as_me:$LINENO: result: Component usrp passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component usrp passed configuration checks, but not building." >&6; } - fi - fi +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs +LTLIBOBJS=$ac_ltlibobjs +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_FORTRAN_TRUE}" && test -z "${ENABLE_FORTRAN_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_FORTRAN\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"ENABLE_FORTRAN\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAS_XMLTO_TRUE}" && test -z "${HAS_XMLTO_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAS_XMLTO\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAS_XMLTO\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${OMNITHREAD_POSIX_TRUE}" && test -z "${OMNITHREAD_POSIX_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"OMNITHREAD_POSIX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"OMNITHREAD_POSIX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${OMNITHREAD_NT_TRUE}" && test -z "${OMNITHREAD_NT_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"OMNITHREAD_NT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"OMNITHREAD_NT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi - # Check whether --enable-gr-usrp was given. -if test "${enable_gr_usrp+set}" = set; then - enableval=$enable_gr_usrp; -else - enable_gr_usrp=$enable_all_components +if test -z "${HAVE_CREATEFILEMAPPING_TRUE}" && test -z "${HAVE_CREATEFILEMAPPING_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_CREATEFILEMAPPING\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"HAVE_CREATEFILEMAPPING\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${DOC_TRUE}" && test -z "${DOC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${MD_CPU_x86_TRUE}" && test -z "${MD_CPU_x86_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"MD_CPU_x86\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"MD_CPU_x86\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${MD_SUBCPU_x86_64_TRUE}" && test -z "${MD_SUBCPU_x86_64_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"MD_SUBCPU_x86_64\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"MD_SUBCPU_x86_64\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${MD_CPU_powerpc_TRUE}" && test -z "${MD_CPU_powerpc_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"MD_CPU_powerpc\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"MD_CPU_powerpc\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${MD_CPU_generic_TRUE}" && test -z "${MD_CPU_generic_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"MD_CPU_generic\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"MD_CPU_generic\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${FUSB_TECH_darwin_TRUE}" && test -z "${FUSB_TECH_darwin_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_darwin\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"FUSB_TECH_darwin\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${FUSB_TECH_win32_TRUE}" && test -z "${FUSB_TECH_win32_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_win32\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"FUSB_TECH_win32\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${FUSB_TECH_generic_TRUE}" && test -z "${FUSB_TECH_generic_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_generic\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"FUSB_TECH_generic\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${FUSB_TECH_linux_TRUE}" && test -z "${FUSB_TECH_linux_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_linux\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"FUSB_TECH_linux\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${FUSB_TECH_ra_wb_TRUE}" && test -z "${FUSB_TECH_ra_wb_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_ra_wb\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"FUSB_TECH_ra_wb\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } fi +if test -z "${BUILD_QT_TRUE}" && test -z "${BUILD_QT_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_QT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"BUILD_QT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${BUILD_QT_TRUE}" && test -z "${BUILD_QT_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_QT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"BUILD_QT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${XDG_UTILS_TRUE}" && test -z "${XDG_UTILS_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"XDG_UTILS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"XDG_UTILS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. - ac_config_files="$ac_config_files gr-usrp/Makefile gr-usrp/src/Makefile gr-usrp/src/run_tests" +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## - passed=yes - # Don't do gr-usrp if usrp skipped - # There *has* to be a better way to check if a value is in a string - for dir in $skipped_dirs - do - if test x$dir = xusrp; then - { echo "$as_me:$LINENO: result: Component gr-usrp requires usrp, which is not being built." >&5 -echo "${ECHO_T}Component gr-usrp requires usrp, which is not being built." >&6; } - passed=no - fi - done +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac +fi - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-usrp" - if test x$enable_gr_usrp = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-usrp has errors, stopping." >&5 -echo "$as_me: error: Component gr-usrp has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-usrp." >&5 -echo "${ECHO_T}Not building component gr-usrp." >&6; } - fi - else - if test x$enable_gr_usrp != xno; then - ac_config_commands="$ac_config_commands run_tests_usrp" - build_dirs="$build_dirs gr-usrp" - { echo "$as_me:$LINENO: result: Component gr-usrp passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-usrp passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-usrp" - { echo "$as_me:$LINENO: result: Component gr-usrp passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-usrp passed configuration checks, but not building." >&6; } - fi - fi +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi - # Check whether --enable-gr-audio-alsa was given. -if test "${enable_gr_audio_alsa+set}" = set; then - enableval=$enable_gr_audio_alsa; +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset else - enable_gr_audio_alsa=$enable_all_components + as_unset=false fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" - ac_config_files="$ac_config_files gr-audio-alsa/Makefile gr-audio-alsa/src/Makefile gr-audio-alsa/src/run_tests" - - - passed=yes - - succeeded=no - - if test -z "$PKG_CONFIG"; then - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS - test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" - ;; + ;; esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -echo "${ECHO_T}$PKG_CONFIG" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } fi +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' - fi - - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - if test -z "$PKG_CONFIG_PATH"; then - export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" - fi - - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { echo "$as_me:$LINENO: checking for alsa >= 0.9" >&5 -echo $ECHO_N "checking for alsa >= 0.9... $ECHO_C" >&6; } - - if $PKG_CONFIG --exists "alsa >= 0.9" ; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - succeeded=yes - - { echo "$as_me:$LINENO: checking ALSA_CFLAGS" >&5 -echo $ECHO_N "checking ALSA_CFLAGS... $ECHO_C" >&6; } - ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa >= 0.9"` - { echo "$as_me:$LINENO: result: $ALSA_CFLAGS" >&5 -echo "${ECHO_T}$ALSA_CFLAGS" >&6; } - - { echo "$as_me:$LINENO: checking ALSA_LIBS" >&5 -echo $ECHO_N "checking ALSA_LIBS... $ECHO_C" >&6; } - ALSA_LIBS=`$PKG_CONFIG --libs "alsa >= 0.9"` - { echo "$as_me:$LINENO: result: $ALSA_LIBS" >&5 -echo "${ECHO_T}$ALSA_LIBS" >&6; } - - { echo "$as_me:$LINENO: checking ALSA_INCLUDEDIR" >&5 -echo $ECHO_N "checking ALSA_INCLUDEDIR... $ECHO_C" >&6; } - ALSA_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "alsa >= 0.9"` - { echo "$as_me:$LINENO: result: $ALSA_INCLUDEDIR" >&5 -echo "${ECHO_T}$ALSA_INCLUDEDIR" >&6; } - else - ALSA_CFLAGS="" - ALSA_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - ALSA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "alsa >= 0.9"` - - fi - - - - - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi - - if test $succeeded = yes; then - : - else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-alsa requires package alsa, not found." >&5 -echo "${ECHO_T}gr-audio-alsa requires package alsa, not found." >&6; } - fi - - - - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-audio-alsa" - if test x$enable_gr_audio_alsa = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-audio-alsa has errors, stopping." >&5 -echo "$as_me: error: Component gr-audio-alsa has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-audio-alsa." >&5 -echo "${ECHO_T}Not building component gr-audio-alsa." >&6; } - fi - else - if test x$enable_gr_audio_alsa != xno; then - - - ac_config_commands="$ac_config_commands run_tests_alsa" - +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE - build_dirs="$build_dirs gr-audio-alsa" - { echo "$as_me:$LINENO: result: Component gr-audio-alsa passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-audio-alsa passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-audio-alsa" - { echo "$as_me:$LINENO: result: Component gr-audio-alsa passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-audio-alsa passed configuration checks, but not building." >&6; } - fi - fi +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - # Check whether --enable-gr-audio-jack was given. -if test "${enable_gr_audio_jack+set}" = set; then - enableval=$enable_gr_audio_jack; -else - enable_gr_audio_jack=$enable_all_components -fi +# CDPATH. +$as_unset CDPATH - ac_config_files="$ac_config_files gr-audio-jack/Makefile gr-audio-jack/src/Makefile gr-audio-jack/src/run_tests" + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } - passed=yes + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} - succeeded=no - if test -z "$PKG_CONFIG"; then - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS + as_dirname=false +fi - test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" - ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -echo "${ECHO_T}$PKG_CONFIG" >&6; } +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + as_expr=false fi - +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - if test -z "$PKG_CONFIG_PATH"; then - export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" - fi +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { echo "$as_me:$LINENO: checking for jack >= 0.8" >&5 -echo $ECHO_N "checking for jack >= 0.8... $ECHO_C" >&6; } - - if $PKG_CONFIG --exists "jack >= 0.8" ; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - succeeded=yes - - { echo "$as_me:$LINENO: checking JACK_CFLAGS" >&5 -echo $ECHO_N "checking JACK_CFLAGS... $ECHO_C" >&6; } - JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.8"` - { echo "$as_me:$LINENO: result: $JACK_CFLAGS" >&5 -echo "${ECHO_T}$JACK_CFLAGS" >&6; } - - { echo "$as_me:$LINENO: checking JACK_LIBS" >&5 -echo $ECHO_N "checking JACK_LIBS... $ECHO_C" >&6; } - JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.8"` - { echo "$as_me:$LINENO: result: $JACK_LIBS" >&5 -echo "${ECHO_T}$JACK_LIBS" >&6; } - - { echo "$as_me:$LINENO: checking JACK_INCLUDEDIR" >&5 -echo $ECHO_N "checking JACK_INCLUDEDIR... $ECHO_C" >&6; } - JACK_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "jack >= 0.8"` - { echo "$as_me:$LINENO: result: $JACK_INCLUDEDIR" >&5 -echo "${ECHO_T}$JACK_INCLUDEDIR" >&6; } - else - JACK_CFLAGS="" - JACK_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - JACK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "jack >= 0.8"` +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x - fi +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +exec 6>&1 - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was - if test $succeeded = yes; then - : - else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-jack requires package jack, not found." >&5 -echo "${ECHO_T}gr-audio-jack requires package jack, not found." >&6; } - fi + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" +_ACEOF - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-audio-jack" - if test x$enable_gr_audio_jack = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-audio-jack has errors, stopping." >&5 -echo "$as_me: error: Component gr-audio-jack has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-audio-jack." >&5 -echo "${ECHO_T}Not building component gr-audio-jack." >&6; } - fi - else - if test x$enable_gr_audio_jack != xno; then +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac - ac_config_commands="$ac_config_commands run_tests_jack" +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" - build_dirs="$build_dirs gr-audio-jack" - { echo "$as_me:$LINENO: result: Component gr-audio-jack passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-audio-jack passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-audio-jack" - { echo "$as_me:$LINENO: result: Component gr-audio-jack passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-audio-jack passed configuration checks, but not building." >&6; } - fi - fi +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. +Usage: $0 [OPTION]... [FILE]... + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE - # Check whether --enable-gr-audio-oss was given. -if test "${enable_gr_audio_oss+set}" = set; then - enableval=$enable_gr_audio_oss; -else - enable_gr_audio_oss=$enable_all_components -fi +Configuration files: +$config_files +Configuration headers: +$config_headers +Configuration commands: +$config_commands - ac_config_files="$ac_config_files gr-audio-oss/Makefile gr-audio-oss/src/Makefile gr-audio-oss/src/run_tests" +Report bugs to ." +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - passed=yes - case $target in - *-*-netbsd*) +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." -{ echo "$as_me:$LINENO: checking for main in -lossaudio" >&5 -echo $ECHO_N "checking for main in -lossaudio... $ECHO_C" >&6; } -if test "${ac_cv_lib_ossaudio_main+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lossaudio $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_ossaudio_main=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; - ac_cv_lib_ossaudio_main=no -fi + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_ossaudio_main" >&5 -echo "${ECHO_T}$ac_cv_lib_ossaudio_main" >&6; } -if test $ac_cv_lib_ossaudio_main = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBOSSAUDIO 1 -_ACEOF + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; - LIBS="-lossaudio $LIBS" + esac + shift +done -else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-oss requires library ossaudio, not found." >&5 -echo "${ECHO_T}gr-audio-oss requires library ossaudio, not found." >&6; } -fi -ac_cv_lib_ossaudio=ac_cv_lib_ossaudio_main +ac_configure_extra_args= - if test x$passed != xno; then - OSS_LIBS=-lossaudio - { echo "$as_me:$LINENO: result: Using OSS library $OSS_LIBS" >&5 -echo "${ECHO_T}Using OSS library $OSS_LIBS" >&6; } - fi - ;; - *) - if test "${ac_cv_header_sys_soundcard_h+set}" = set; then - { echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5 -echo $ECHO_N "checking for sys/soundcard.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_soundcard_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking sys/soundcard.h usability" >&5 -echo $ECHO_N "checking sys/soundcard.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_compiler=no +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking sys/soundcard.h presence" >&5 -echo $ECHO_N "checking sys/soundcard.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: sys/soundcard.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: sys/soundcard.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: sys/soundcard.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: sys/soundcard.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&2;} +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +LD_F77='`$ECHO "X$LD_F77" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_F77='`$ECHO "X$old_archive_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_F77='`$ECHO "X$compiler_F77" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_F77='`$ECHO "X$GCC_F77" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_F77='`$ECHO "X$lt_prog_compiler_no_builtin_flag_F77" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_F77='`$ECHO "X$lt_prog_compiler_wl_F77" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_F77='`$ECHO "X$lt_prog_compiler_pic_F77" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_F77='`$ECHO "X$lt_prog_compiler_static_F77" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_F77='`$ECHO "X$lt_cv_prog_compiler_c_o_F77" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_F77='`$ECHO "X$archive_cmds_need_lc_F77" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_F77='`$ECHO "X$enable_shared_with_static_runtimes_F77" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_F77='`$ECHO "X$export_dynamic_flag_spec_F77" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_F77='`$ECHO "X$whole_archive_flag_spec_F77" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_F77='`$ECHO "X$compiler_needs_object_F77" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_F77='`$ECHO "X$old_archive_from_new_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_F77='`$ECHO "X$old_archive_from_expsyms_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_F77='`$ECHO "X$archive_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_F77='`$ECHO "X$archive_expsym_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_F77='`$ECHO "X$module_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_F77='`$ECHO "X$module_expsym_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_F77='`$ECHO "X$with_gnu_ld_F77" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_F77='`$ECHO "X$allow_undefined_flag_F77" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_F77='`$ECHO "X$no_undefined_flag_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_F77='`$ECHO "X$hardcode_libdir_flag_spec_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_F77='`$ECHO "X$hardcode_libdir_flag_spec_ld_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_F77='`$ECHO "X$hardcode_libdir_separator_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_F77='`$ECHO "X$hardcode_direct_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_F77='`$ECHO "X$hardcode_direct_absolute_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_F77='`$ECHO "X$hardcode_minus_L_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_F77='`$ECHO "X$hardcode_shlibpath_var_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_F77='`$ECHO "X$hardcode_automatic_F77" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_F77='`$ECHO "X$inherit_rpath_F77" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_F77='`$ECHO "X$link_all_deplibs_F77" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_F77='`$ECHO "X$fix_srcfile_path_F77" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_F77='`$ECHO "X$always_export_symbols_F77" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_F77='`$ECHO "X$export_symbols_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_F77='`$ECHO "X$exclude_expsyms_F77" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_F77='`$ECHO "X$include_expsyms_F77" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_F77='`$ECHO "X$prelink_cmds_F77" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_F77='`$ECHO "X$file_list_spec_F77" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_F77='`$ECHO "X$hardcode_action_F77" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_F77='`$ECHO "X$compiler_lib_search_dirs_F77" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_F77='`$ECHO "X$predep_objects_F77" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_F77='`$ECHO "X$postdep_objects_F77" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_F77='`$ECHO "X$predeps_F77" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_F77='`$ECHO "X$postdeps_F77" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_F77='`$ECHO "X$compiler_lib_search_path_F77" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +LD_F77 \ +compiler_CXX \ +compiler_F77 \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_no_builtin_flag_F77 \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_wl_F77 \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_pic_F77 \ +lt_prog_compiler_static_CXX \ +lt_prog_compiler_static_F77 \ +lt_cv_prog_compiler_c_o_CXX \ +lt_cv_prog_compiler_c_o_F77 \ +export_dynamic_flag_spec_CXX \ +export_dynamic_flag_spec_F77 \ +whole_archive_flag_spec_CXX \ +whole_archive_flag_spec_F77 \ +compiler_needs_object_CXX \ +compiler_needs_object_F77 \ +with_gnu_ld_CXX \ +with_gnu_ld_F77 \ +allow_undefined_flag_CXX \ +allow_undefined_flag_F77 \ +no_undefined_flag_CXX \ +no_undefined_flag_F77 \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_F77 \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_flag_spec_ld_F77 \ +hardcode_libdir_separator_CXX \ +hardcode_libdir_separator_F77 \ +fix_srcfile_path_CXX \ +fix_srcfile_path_F77 \ +exclude_expsyms_CXX \ +exclude_expsyms_F77 \ +include_expsyms_CXX \ +include_expsyms_F77 \ +file_list_spec_CXX \ +file_list_spec_F77 \ +compiler_lib_search_dirs_CXX \ +compiler_lib_search_dirs_F77 \ +predep_objects_CXX \ +predep_objects_F77 \ +postdep_objects_CXX \ +postdep_objects_F77 \ +predeps_CXX \ +predeps_F77 \ +postdeps_CXX \ +postdeps_F77 \ +compiler_lib_search_path_CXX \ +compiler_lib_search_path_F77; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done - ;; +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_cmds_F77 \ +old_archive_from_new_cmds_CXX \ +old_archive_from_new_cmds_F77 \ +old_archive_from_expsyms_cmds_CXX \ +old_archive_from_expsyms_cmds_F77 \ +archive_cmds_CXX \ +archive_cmds_F77 \ +archive_expsym_cmds_CXX \ +archive_expsym_cmds_F77 \ +module_cmds_CXX \ +module_cmds_F77 \ +module_expsym_cmds_CXX \ +module_expsym_cmds_F77 \ +export_symbols_cmds_CXX \ +export_symbols_cmds_F77 \ +prelink_cmds_CXX \ +prelink_cmds_F77; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; esac -{ echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5 -echo $ECHO_N "checking for sys/soundcard.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_soundcard_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_sys_soundcard_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6; } -fi -if test $ac_cv_header_sys_soundcard_h = yes; then - : -else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-oss requires sys/soundcard.h, not found." >&5 -echo "${ECHO_T}gr-audio-oss requires sys/soundcard.h, not found." >&6; } +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST fi - esac + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-audio-oss" - if test x$enable_gr_audio_oss = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-audio-oss has errors, stopping." >&5 -echo "$as_me: error: Component gr-audio-oss has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-audio-oss." >&5 -echo "${ECHO_T}Not building component gr-audio-oss." >&6; } - fi - else - if test x$enable_gr_audio_oss != xno; then - ac_config_commands="$ac_config_commands run_tests_oss" - build_dirs="$build_dirs gr-audio-oss" - { echo "$as_me:$LINENO: result: Component gr-audio-oss passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-audio-oss passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-audio-oss" - { echo "$as_me:$LINENO: result: Component gr-audio-oss passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-audio-oss passed configuration checks, but not building." >&6; } - fi - fi +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "gruel/Makefile") CONFIG_FILES="$CONFIG_FILES gruel/Makefile" ;; + "gruel/gruel.pc") CONFIG_FILES="$CONFIG_FILES gruel/gruel.pc" ;; + "gruel/src/Makefile") CONFIG_FILES="$CONFIG_FILES gruel/src/Makefile" ;; + "gruel/src/include/Makefile") CONFIG_FILES="$CONFIG_FILES gruel/src/include/Makefile" ;; + "gruel/src/include/gruel/Makefile") CONFIG_FILES="$CONFIG_FILES gruel/src/include/gruel/Makefile" ;; + "gruel/src/include/gruel/inet.h") CONFIG_FILES="$CONFIG_FILES gruel/src/include/gruel/inet.h" ;; + "gruel/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gruel/src/lib/Makefile" ;; + "omnithread/Makefile") CONFIG_FILES="$CONFIG_FILES omnithread/Makefile" ;; + "omnithread/gnuradio/Makefile") CONFIG_FILES="$CONFIG_FILES omnithread/gnuradio/Makefile" ;; + "omnithread/gnuradio-omnithread.pc") CONFIG_FILES="$CONFIG_FILES omnithread/gnuradio-omnithread.pc" ;; + "gcell/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/Makefile" ;; + "gcell/gcell.pc") CONFIG_FILES="$CONFIG_FILES gcell/gcell.pc" ;; + "gcell/gcell_spu.pc") CONFIG_FILES="$CONFIG_FILES gcell/gcell_spu.pc" ;; + "gcell/include/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/include/Makefile" ;; + "gcell/include/gcell/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/include/gcell/Makefile" ;; + "gcell/include/gcell/spu/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/include/gcell/spu/Makefile" ;; + "gcell/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/lib/Makefile" ;; + "gcell/lib/spu/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/lib/spu/Makefile" ;; + "gcell/lib/general/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/lib/general/Makefile" ;; + "gcell/lib/wrapper/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/lib/wrapper/Makefile" ;; + "gcell/lib/runtime/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/lib/runtime/Makefile" ;; + "gcell/apps/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/apps/Makefile" ;; + "gcell/apps/spu/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/apps/spu/Makefile" ;; + "gcell/ibm/Makefile") CONFIG_FILES="$CONFIG_FILES gcell/ibm/Makefile" ;; + "gnuradio-core/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/Makefile" ;; + "gnuradio-core/gnuradio-core.pc") CONFIG_FILES="$CONFIG_FILES gnuradio-core/gnuradio-core.pc" ;; + "gnuradio-core/src/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/Makefile" ;; + "gnuradio-core/src/gen_interpolator_taps/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/gen_interpolator_taps/Makefile" ;; + "gnuradio-core/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/Makefile" ;; + "gnuradio-core/src/lib/filter/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/filter/Makefile" ;; + "gnuradio-core/src/lib/g72x/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/g72x/Makefile" ;; + "gnuradio-core/src/lib/general/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/general/Makefile" ;; + "gnuradio-core/src/lib/general/gr_prefix.cc") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/general/gr_prefix.cc" ;; + "gnuradio-core/src/lib/gengen/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/gengen/Makefile" ;; + "gnuradio-core/src/lib/io/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/io/Makefile" ;; + "gnuradio-core/src/lib/missing/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/missing/Makefile" ;; + "gnuradio-core/src/lib/reed-solomon/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/reed-solomon/Makefile" ;; + "gnuradio-core/src/lib/viterbi/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/viterbi/Makefile" ;; + "gnuradio-core/src/lib/runtime/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/runtime/Makefile" ;; + "gnuradio-core/src/lib/hier/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/hier/Makefile" ;; + "gnuradio-core/src/lib/swig/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/swig/Makefile" ;; + "gnuradio-core/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/Makefile" ;; + "gnuradio-core/src/python/bin/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/bin/Makefile" ;; + "gnuradio-core/src/python/gnuradio/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/Makefile" ;; + "gnuradio-core/src/python/gnuradio/blks2/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/blks2/Makefile" ;; + "gnuradio-core/src/python/gnuradio/blks2impl/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/blks2impl/Makefile" ;; + "gnuradio-core/src/python/gnuradio/gr/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gr/Makefile" ;; + "gnuradio-core/src/python/gnuradio/gr/run_tests") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gr/run_tests" ;; + "gnuradio-core/src/python/gnuradio/gru/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gru/Makefile" ;; + "gnuradio-core/src/python/gnuradio/gruimpl/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gruimpl/Makefile" ;; + "gnuradio-core/src/python/gnuradio/vocoder/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/vocoder/Makefile" ;; + "gnuradio-core/src/tests/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/tests/Makefile" ;; + "gnuradio-core/src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/utils/Makefile" ;; + "run_tests_core") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_core" ;; + "pmt/Makefile") CONFIG_FILES="$CONFIG_FILES pmt/Makefile" ;; + "pmt/pmt.pc") CONFIG_FILES="$CONFIG_FILES pmt/pmt.pc" ;; + "pmt/doc/Makefile") CONFIG_FILES="$CONFIG_FILES pmt/doc/Makefile" ;; + "pmt/src/Makefile") CONFIG_FILES="$CONFIG_FILES pmt/src/Makefile" ;; + "pmt/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES pmt/src/lib/Makefile" ;; + "pmt/src/scheme/Makefile") CONFIG_FILES="$CONFIG_FILES pmt/src/scheme/Makefile" ;; + "pmt/src/scheme/gnuradio/Makefile") CONFIG_FILES="$CONFIG_FILES pmt/src/scheme/gnuradio/Makefile" ;; + "mblock/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/Makefile" ;; + "mblock/mblock.pc") CONFIG_FILES="$CONFIG_FILES mblock/mblock.pc" ;; + "mblock/doc/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/doc/Makefile" ;; + "mblock/src/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/src/Makefile" ;; + "mblock/src/include/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/src/include/Makefile" ;; + "mblock/src/include/mblock/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/src/include/mblock/Makefile" ;; + "mblock/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/src/lib/Makefile" ;; + "mblock/src/scheme/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/src/scheme/Makefile" ;; + "mblock/src/scheme/gnuradio/Makefile") CONFIG_FILES="$CONFIG_FILES mblock/src/scheme/gnuradio/Makefile" ;; + "usrp/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/Makefile" ;; + "usrp/usrp.pc") CONFIG_FILES="$CONFIG_FILES usrp/usrp.pc" ;; + "usrp/usrp.iss") CONFIG_FILES="$CONFIG_FILES usrp/usrp.iss" ;; + "usrp/doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES usrp/doc/Doxyfile" ;; + "usrp/doc/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/doc/Makefile" ;; + "usrp/doc/other/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/doc/other/Makefile" ;; + "usrp/host/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/Makefile" ;; + "usrp/host/misc/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/misc/Makefile" ;; + "usrp/host/lib/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/lib/Makefile" ;; + "usrp/host/lib/legacy/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/lib/legacy/Makefile" ;; + "usrp/host/lib/legacy/std_paths.h") CONFIG_FILES="$CONFIG_FILES usrp/host/lib/legacy/std_paths.h" ;; + "usrp/host/swig/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/swig/Makefile" ;; + "usrp/host/apps/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/apps/Makefile" ;; + "usrp/firmware/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/Makefile" ;; + "usrp/firmware/include/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/include/Makefile" ;; + "usrp/firmware/lib/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/lib/Makefile" ;; + "usrp/firmware/src/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/src/Makefile" ;; + "usrp/firmware/src/common/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/src/common/Makefile" ;; + "usrp/firmware/src/usrp2/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/src/usrp2/Makefile" ;; + "usrp/fpga/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/fpga/Makefile" ;; + "usrp/fpga/rbf/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/fpga/rbf/Makefile" ;; + "usrp/fpga/rbf/rev2/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/fpga/rbf/rev2/Makefile" ;; + "usrp/fpga/rbf/rev4/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/fpga/rbf/rev4/Makefile" ;; + "usrp2/Makefile") CONFIG_FILES="$CONFIG_FILES usrp2/Makefile" ;; + "usrp2/host/Makefile") CONFIG_FILES="$CONFIG_FILES usrp2/host/Makefile" ;; + "usrp2/host/usrp2.pc") CONFIG_FILES="$CONFIG_FILES usrp2/host/usrp2.pc" ;; + "usrp2/host/include/Makefile") CONFIG_FILES="$CONFIG_FILES usrp2/host/include/Makefile" ;; + "usrp2/host/include/usrp2/Makefile") CONFIG_FILES="$CONFIG_FILES usrp2/host/include/usrp2/Makefile" ;; + "usrp2/host/lib/Makefile") CONFIG_FILES="$CONFIG_FILES usrp2/host/lib/Makefile" ;; + "usrp2/host/apps/Makefile") CONFIG_FILES="$CONFIG_FILES usrp2/host/apps/Makefile" ;; + "gr-usrp/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp/Makefile" ;; + "gr-usrp/gnuradio-usrp.pc") CONFIG_FILES="$CONFIG_FILES gr-usrp/gnuradio-usrp.pc" ;; + "gr-usrp/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp/src/Makefile" ;; + "gr-usrp/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-usrp/src/run_tests" ;; + "gr-usrp/apps/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp/apps/Makefile" ;; + "run_tests_usrp") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_usrp" ;; + "gr-usrp2/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp2/Makefile" ;; + "gr-usrp2/gnuradio-usrp2.pc") CONFIG_FILES="$CONFIG_FILES gr-usrp2/gnuradio-usrp2.pc" ;; + "gr-usrp2/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp2/src/Makefile" ;; + "gr-usrp2/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-usrp2/src/run_tests" ;; + "run_tests_usrp2") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_usrp2" ;; + "gr-gcell/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gcell/Makefile" ;; + "gr-gcell/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gcell/src/Makefile" ;; + "gr-gcell/src/examples/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gcell/src/examples/Makefile" ;; + "gr-gcell/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-gcell/src/run_tests" ;; + "run_tests_gcell") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_gcell" ;; + "gr-audio-alsa/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/Makefile" ;; + "gr-audio-alsa/gr-audio-alsa.pc") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/gr-audio-alsa.pc" ;; + "gr-audio-alsa/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/src/Makefile" ;; + "gr-audio-alsa/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/src/run_tests" ;; + "run_tests_alsa") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_alsa" ;; + "gr-audio-jack/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-jack/Makefile" ;; + "gr-audio-jack/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-jack/src/Makefile" ;; + "gr-audio-jack/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-jack/src/run_tests" ;; + "run_tests_jack") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_jack" ;; + "gr-audio-oss/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-oss/Makefile" ;; + "gr-audio-oss/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-oss/src/Makefile" ;; + "gr-audio-oss/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-oss/src/run_tests" ;; + "run_tests_oss") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_oss" ;; + "gr-audio-osx/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-osx/Makefile" ;; + "gr-audio-osx/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-osx/src/Makefile" ;; + "gr-audio-osx/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-osx/src/run_tests" ;; + "run_tests_osx") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_osx" ;; + "gr-audio-portaudio/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-portaudio/Makefile" ;; + "gr-audio-portaudio/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-portaudio/src/Makefile" ;; + "gr-audio-portaudio/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-portaudio/src/run_tests" ;; + "run_tests_portaudio") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_portaudio" ;; + "gr-audio-windows/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-windows/Makefile" ;; + "gr-audio-windows/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-windows/src/Makefile" ;; + "gr-audio-windows/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-windows/src/run_tests" ;; + "run_tests_audio_windows") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_audio_windows" ;; + "gr-cvsd-vocoder/Makefile") CONFIG_FILES="$CONFIG_FILES gr-cvsd-vocoder/Makefile" ;; + "gr-cvsd-vocoder/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-cvsd-vocoder/src/Makefile" ;; + "gr-cvsd-vocoder/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-cvsd-vocoder/src/lib/Makefile" ;; + "gr-cvsd-vocoder/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-cvsd-vocoder/src/python/Makefile" ;; + "gr-cvsd-vocoder/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-cvsd-vocoder/src/python/run_tests" ;; + "run_tests_cvsd") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_cvsd" ;; + "gr-gpio/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/Makefile" ;; + "gr-gpio/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/Makefile" ;; + "gr-gpio/src/fpga/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/fpga/Makefile" ;; + "gr-gpio/src/fpga/include/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/fpga/include/Makefile" ;; + "gr-gpio/src/fpga/top/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/fpga/top/Makefile" ;; + "gr-gpio/src/fpga/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/fpga/lib/Makefile" ;; + "gr-gpio/src/fpga/rbf/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/fpga/rbf/Makefile" ;; + "gr-gpio/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gpio/src/python/Makefile" ;; + "gr-gsm-fr-vocoder/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/Makefile" ;; + "gr-gsm-fr-vocoder/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/Makefile" ;; + "gr-gsm-fr-vocoder/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/lib/Makefile" ;; + "gr-gsm-fr-vocoder/src/lib/gsm/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/lib/gsm/Makefile" ;; + "gr-gsm-fr-vocoder/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/python/Makefile" ;; + "gr-gsm-fr-vocoder/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/python/run_tests" ;; + "run_tests_gsm") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_gsm" ;; + "gr-pager/Makefile") CONFIG_FILES="$CONFIG_FILES gr-pager/Makefile" ;; + "gr-pager/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-pager/src/Makefile" ;; + "gr-pager/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-pager/src/run_tests" ;; + "run_tests_pager") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_pager" ;; + "gr-radar-mono/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/Makefile" ;; + "gr-radar-mono/doc/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/doc/Makefile" ;; + "gr-radar-mono/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/Makefile" ;; + "gr-radar-mono/src/fpga/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/fpga/Makefile" ;; + "gr-radar-mono/src/fpga/top/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/fpga/top/Makefile" ;; + "gr-radar-mono/src/fpga/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/fpga/lib/Makefile" ;; + "gr-radar-mono/src/fpga/models/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/fpga/models/Makefile" ;; + "gr-radar-mono/src/fpga/tb/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/fpga/tb/Makefile" ;; + "gr-radar-mono/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/lib/Makefile" ;; + "gr-radar-mono/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/python/Makefile" ;; + "gr-radar-mono/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-radar-mono/src/python/run_tests" ;; + "run_tests_radar_mono") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_radar_mono" ;; + "gr-radio-astronomy/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/Makefile" ;; + "gr-radio-astronomy/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/Makefile" ;; + "gr-radio-astronomy/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/lib/Makefile" ;; + "gr-radio-astronomy/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/python/Makefile" ;; + "gr-radio-astronomy/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/python/run_tests" ;; + "run_tests_astronomy") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_astronomy" ;; + "gr-trellis/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/Makefile" ;; + "gr-trellis/doc/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/doc/Makefile" ;; + "gr-trellis/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/Makefile" ;; + "gr-trellis/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/lib/Makefile" ;; + "gr-trellis/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/python/Makefile" ;; + "gr-trellis/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/python/run_tests" ;; + "gr-trellis/src/examples/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/examples/Makefile" ;; + "gr-trellis/src/examples/fsm_files/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/examples/fsm_files/Makefile" ;; + "run_tests_gr_trellis") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_gr_trellis" ;; + "gr-video-sdl/Makefile") CONFIG_FILES="$CONFIG_FILES gr-video-sdl/Makefile" ;; + "gr-video-sdl/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-video-sdl/src/Makefile" ;; + "gr-video-sdl/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-video-sdl/src/run_tests" ;; + "run_tests_sdl") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_sdl" ;; + "gr-wxgui/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/Makefile" ;; + "gr-wxgui/gr-wxgui.pc") CONFIG_FILES="$CONFIG_FILES gr-wxgui/gr-wxgui.pc" ;; + "gr-wxgui/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/src/Makefile" ;; + "gr-wxgui/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/src/python/Makefile" ;; + "gr-wxgui/src/python/plotter/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/src/python/plotter/Makefile" ;; + "gr-qtgui/Makefile") CONFIG_FILES="$CONFIG_FILES gr-qtgui/Makefile" ;; + "gr-qtgui/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-qtgui/src/Makefile" ;; + "gr-qtgui/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-qtgui/src/lib/Makefile" ;; + "gr-qtgui/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-qtgui/src/python/Makefile" ;; + "gr-sounder/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/Makefile" ;; + "gr-sounder/doc/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/doc/Makefile" ;; + "gr-sounder/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/Makefile" ;; + "gr-sounder/src/fpga/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/fpga/Makefile" ;; + "gr-sounder/src/fpga/top/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/fpga/top/Makefile" ;; + "gr-sounder/src/fpga/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/fpga/lib/Makefile" ;; + "gr-sounder/src/fpga/tb/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/fpga/tb/Makefile" ;; + "gr-sounder/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/lib/Makefile" ;; + "gr-sounder/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/python/Makefile" ;; + "gr-sounder/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-sounder/src/python/run_tests" ;; + "run_tests_sounder") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_sounder" ;; + "gr-utils/Makefile") CONFIG_FILES="$CONFIG_FILES gr-utils/Makefile" ;; + "gr-utils/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-utils/src/Makefile" ;; + "gr-utils/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-utils/src/lib/Makefile" ;; + "gr-utils/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-utils/src/python/Makefile" ;; + "gnuradio-examples/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/Makefile" ;; + "gnuradio-examples/c++/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/c++/Makefile" ;; + "gnuradio-examples/python/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/Makefile" ;; + "gnuradio-examples/python/apps/hf_explorer/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/apps/hf_explorer/Makefile" ;; + "gnuradio-examples/python/apps/hf_radio/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/apps/hf_radio/Makefile" ;; + "gnuradio-examples/python/apps/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/apps/Makefile" ;; + "gnuradio-examples/python/audio/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/audio/Makefile" ;; + "gnuradio-examples/python/digital/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/digital/Makefile" ;; + "gnuradio-examples/python/digital_voice/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/digital_voice/Makefile" ;; + "gnuradio-examples/python/digital-bert/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/digital-bert/Makefile" ;; + "gnuradio-examples/python/mp-sched/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/mp-sched/Makefile" ;; + "gnuradio-examples/python/multi-antenna/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/multi-antenna/Makefile" ;; + "gnuradio-examples/python/multi_usrp/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/multi_usrp/Makefile" ;; + "gnuradio-examples/python/network/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/network/Makefile" ;; + "gnuradio-examples/python/ofdm/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/ofdm/Makefile" ;; + "gnuradio-examples/python/usrp/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/usrp/Makefile" ;; + "gnuradio-examples/python/usrp2/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/usrp2/Makefile" ;; + "grc/Makefile") CONFIG_FILES="$CONFIG_FILES grc/Makefile" ;; + "grc/base/Makefile") CONFIG_FILES="$CONFIG_FILES grc/base/Makefile" ;; + "grc/blocks/Makefile") CONFIG_FILES="$CONFIG_FILES grc/blocks/Makefile" ;; + "grc/examples/Makefile") CONFIG_FILES="$CONFIG_FILES grc/examples/Makefile" ;; + "grc/freedesktop/Makefile") CONFIG_FILES="$CONFIG_FILES grc/freedesktop/Makefile" ;; + "grc/grc_gnuradio/Makefile") CONFIG_FILES="$CONFIG_FILES grc/grc_gnuradio/Makefile" ;; + "grc/gui/Makefile") CONFIG_FILES="$CONFIG_FILES grc/gui/Makefile" ;; + "grc/python/Makefile") CONFIG_FILES="$CONFIG_FILES grc/python/Makefile" ;; + "grc/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES grc/scripts/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "docs/doxygen/Doxyfile") CONFIG_FILES="$CONFIG_FILES docs/doxygen/Doxyfile" ;; + "docs/doxygen/Makefile") CONFIG_FILES="$CONFIG_FILES docs/doxygen/Makefile" ;; + "docs/doxygen/other/Makefile") CONFIG_FILES="$CONFIG_FILES docs/doxygen/other/Makefile" ;; + "docs/doxygen/xml-swig/Makefile") CONFIG_FILES="$CONFIG_FILES docs/doxygen/xml-swig/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "run_tests.sh") CONFIG_FILES="$CONFIG_FILES run_tests.sh" ;; + "config/Makefile") CONFIG_FILES="$CONFIG_FILES config/Makefile" ;; + "run_tests_build") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_build" ;; + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done - # Check whether --enable-gr-audio-osx was given. -if test "${enable_gr_audio_osx+set}" = set; then - enableval=$enable_gr_audio_osx; -else - enable_gr_audio_osx=$enable_all_components +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} - ac_config_files="$ac_config_files gr-audio-osx/Makefile gr-audio-osx/src/Makefile gr-audio-osx/src/run_tests" - - - passed=yes - - audiounitok=yes - case "$host_os" in - darwin*);; - *) - audiounitok=no - { echo "$as_me:$LINENO: result: gr-audio-osx requires darwin or MacOS X." >&5 -echo "${ECHO_T}gr-audio-osx requires darwin or MacOS X." >&6; } - esac +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then -for ac_header in AudioUnit/AudioUnit.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no + ac_cs_awk_cr=$ac_cr fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> +echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -else - audiounitok=no;{ echo "$as_me:$LINENO: result: gr-audio-osx requires AudioUnit/AudioUnit.h, which is available on MacOS X." >&5 -echo "${ECHO_T}gr-audio-osx requires AudioUnit/AudioUnit.h, which is available on MacOS X." >&6; } -fi +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + print line +} -for ac_header in AudioToolbox/AudioToolbox.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } _ACEOF -else - audiounitok=no;{ echo "$as_me:$LINENO: result: gr-audio-osx requires AudioToolbox/AudioToolbox.h, which is available on MacOS X." >&5 -echo "${ECHO_T}gr-audio-osx requires AudioToolbox/AudioToolbox.h, which is available on MacOS X." >&6; } +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' fi -done - - - if test $audiounitok = yes; then - : - else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-osx requires AudioUnit, not found." >&5 -echo "${ECHO_T}gr-audio-osx requires AudioUnit, not found." >&6; } - fi +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-audio-osx" - if test x$enable_gr_audio_osx = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-audio-osx has errors, stopping." >&5 -echo "$as_me: error: Component gr-audio-osx has errors, stopping." >&2;} +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-audio-osx." >&5 -echo "${ECHO_T}Not building component gr-audio-osx." >&6; } - fi - else - if test x$enable_gr_audio_osx != xno; then + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done - ac_config_commands="$ac_config_commands run_tests_osx" +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" - build_dirs="$build_dirs gr-audio-osx" - { echo "$as_me:$LINENO: result: Component gr-audio-osx passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-audio-osx passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-audio-osx" - { echo "$as_me:$LINENO: result: Component gr-audio-osx passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-audio-osx passed configuration checks, but not building." >&6; } - fi - fi +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac - # Check whether --enable-gr-audio-portaudio was given. -if test "${enable_gr_audio_portaudio+set}" = set; then - enableval=$enable_gr_audio_portaudio; -else - enable_gr_audio_portaudio=$enable_all_components -fi + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix - ac_config_files="$ac_config_files gr-audio-portaudio/Makefile gr-audio-portaudio/src/Makefile gr-audio-portaudio/src/run_tests" +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - passed=yes + case $ac_mode in + :F) + # + # CONFIG_FILE + # - succeeded=no + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF - if test -z "$PKG_CONFIG"; then - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= - test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" - ;; +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 -echo "${ECHO_T}$PKG_CONFIG" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - fi - - if test "$PKG_CONFIG" = "no" ; then - echo "*** The pkg-config script could not be found. Make sure it is" - echo "*** in your path, or set the PKG_CONFIG environment variable" - echo "*** to the full path to pkg-config." - echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." - else - if test -z "$PKG_CONFIG_PATH"; then - export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" - fi - - PKG_CONFIG_MIN_VERSION=0.9.0 - if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - { echo "$as_me:$LINENO: checking for portaudio-2.0 >= 19" >&5 -echo $ECHO_N "checking for portaudio-2.0 >= 19... $ECHO_C" >&6; } - - if $PKG_CONFIG --exists "portaudio-2.0 >= 19" ; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - succeeded=yes - - { echo "$as_me:$LINENO: checking PORTAUDIO_CFLAGS" >&5 -echo $ECHO_N "checking PORTAUDIO_CFLAGS... $ECHO_C" >&6; } - PORTAUDIO_CFLAGS=`$PKG_CONFIG --cflags "portaudio-2.0 >= 19"` - { echo "$as_me:$LINENO: result: $PORTAUDIO_CFLAGS" >&5 -echo "${ECHO_T}$PORTAUDIO_CFLAGS" >&6; } - - { echo "$as_me:$LINENO: checking PORTAUDIO_LIBS" >&5 -echo $ECHO_N "checking PORTAUDIO_LIBS... $ECHO_C" >&6; } - PORTAUDIO_LIBS=`$PKG_CONFIG --libs "portaudio-2.0 >= 19"` - { echo "$as_me:$LINENO: result: $PORTAUDIO_LIBS" >&5 -echo "${ECHO_T}$PORTAUDIO_LIBS" >&6; } - - { echo "$as_me:$LINENO: checking PORTAUDIO_INCLUDEDIR" >&5 -echo $ECHO_N "checking PORTAUDIO_INCLUDEDIR... $ECHO_C" >&6; } - PORTAUDIO_INCLUDEDIR=`$PKG_CONFIG --variable=includedir "portaudio-2.0 >= 19"` - { echo "$as_me:$LINENO: result: $PORTAUDIO_INCLUDEDIR" >&5 -echo "${ECHO_T}$PORTAUDIO_INCLUDEDIR" >&6; } - else - PORTAUDIO_CFLAGS="" - PORTAUDIO_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. - PORTAUDIO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "portaudio-2.0 >= 19"` - - fi - - +_ACEOF +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} - if test $succeeded = yes; then - : + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-portaudio requires package portaudio, not found." >&5 -echo "${ECHO_T}gr-audio-portaudio requires package portaudio, not found." >&6; } + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-audio-portaudio" - if test x$enable_gr_audio_portaudio = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-audio-portaudio has errors, stopping." >&5 -echo "$as_me: error: Component gr-audio-portaudio has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-audio-portaudio." >&5 -echo "${ECHO_T}Not building component gr-audio-portaudio." >&6; } - fi + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` else - if test x$enable_gr_audio_portaudio != xno; then - - - ac_config_commands="$ac_config_commands run_tests_portaudio" - - - build_dirs="$build_dirs gr-audio-portaudio" - { echo "$as_me:$LINENO: result: Component gr-audio-portaudio passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-audio-portaudio passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-audio-portaudio" - { echo "$as_me:$LINENO: result: Component gr-audio-portaudio passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-audio-portaudio passed configuration checks, but not building." >&6; } - fi + continue fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL - # Check whether --enable-gr-audio-windows was given. -if test "${enable_gr_audio_windows+set}" = set; then - enableval=$enable_gr_audio_windows; -else - enable_gr_audio_windows=$enable_all_components -fi - - +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - ac_config_files="$ac_config_files gr-audio-windows/Makefile gr-audio-windows/src/Makefile gr-audio-windows/src/run_tests" +# The names of the tagged configurations supported by this script. +available_tags="CXX F77 " - passed=yes +# ### BEGIN LIBTOOL CONFIG -{ echo "$as_me:$LINENO: checking for main in -lwinmm" >&5 -echo $ECHO_N "checking for main in -lwinmm... $ECHO_C" >&6; } -if test "${ac_cv_lib_winmm_main+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lwinmm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +# Assembler program. +AS=$AS +# DLL creation program. +DLLTOOL=$DLLTOOL -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_winmm_main=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# Object dumper program. +OBJDUMP=$OBJDUMP - ac_cv_lib_winmm_main=no -fi +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_winmm_main" >&5 -echo "${ECHO_T}$ac_cv_lib_winmm_main" >&6; } -if test $ac_cv_lib_winmm_main = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBWINMM 1 -_ACEOF +# Whether or not to build static libraries. +build_old_libs=$enable_static - LIBS="-lwinmm $LIBS" +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision -else - passed=no;{ echo "$as_me:$LINENO: result: gr-audio-windows requires library winmm, not found." >&5 -echo "${ECHO_T}gr-audio-windows requires library winmm, not found." >&6; } -fi -ac_cv_lib_winmm=ac_cv_lib_winmm_main +# What type of objects to build. +pic_mode=$pic_mode +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-audio-windows" - if test x$enable_gr_audio_windows = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-audio-windows has errors, stopping." >&5 -echo "$as_me: error: Component gr-audio-windows has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-audio-windows." >&5 -echo "${ECHO_T}Not building component gr-audio-windows." >&6; } - fi - else - if test x$enable_gr_audio_windows != xno; then +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os - WINAUDIO_LIBS=-lwinmm +# A sed program that does not truncate output. +SED=$lt_SED - ac_config_commands="$ac_config_commands run_tests_audio_windows" +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" +# A grep program that handles long lines. +GREP=$lt_GREP - build_dirs="$build_dirs gr-audio-windows" - { echo "$as_me:$LINENO: result: Component gr-audio-windows passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-audio-windows passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-audio-windows" - { echo "$as_me:$LINENO: result: Component gr-audio-windows passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-audio-windows passed configuration checks, but not building." >&6; } - fi - fi +# An ERE matcher. +EGREP=$lt_EGREP +# A literal string matcher. +FGREP=$lt_FGREP +# A BSD- or MS-compatible name lister. +NM=$lt_NM +# Whether we need soft or hard links. +LN_S=$lt_LN_S - # Check whether --enable-gr-gsm-fr-vocoder was given. -if test "${enable_gr_gsm_fr_vocoder+set}" = set; then - enableval=$enable_gr_gsm_fr_vocoder; -else - enable_gr_gsm_fr_vocoder=$enable_all_components -fi +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len +# Object file suffix (normally "o"). +objext=$ac_objext +# Executable file suffix (normally ""). +exeext=$exeext - ac_config_files="$ac_config_files gr-gsm-fr-vocoder/Makefile gr-gsm-fr-vocoder/src/Makefile gr-gsm-fr-vocoder/src/lib/Makefile gr-gsm-fr-vocoder/src/lib/gsm/Makefile gr-gsm-fr-vocoder/src/python/Makefile gr-gsm-fr-vocoder/src/python/run_tests" +# whether the shell understands "unset". +lt_unset=$lt_unset +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL - passed=yes +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-gsm-fr-vocoder" - if test x$enable_gr_gsm_fr_vocoder = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-gsm-fr-vocoder has errors, stopping." >&5 -echo "$as_me: error: Component gr-gsm-fr-vocoder has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-gsm-fr-vocoder." >&5 -echo "${ECHO_T}Not building component gr-gsm-fr-vocoder." >&6; } - fi - else - if test x$enable_gr_gsm_fr_vocoder != xno; then +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds - ac_config_commands="$ac_config_commands run_tests_gsm" +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd - build_dirs="$build_dirs gr-gsm-fr-vocoder" - { echo "$as_me:$LINENO: result: Component gr-gsm-fr-vocoder passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-gsm-fr-vocoder passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-gsm-fr-vocoder" - { echo "$as_me:$LINENO: result: Component gr-gsm-fr-vocoder passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-gsm-fr-vocoder passed configuration checks, but not building." >&6; } - fi - fi +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS +# A symbol stripping program. +STRIP=$lt_STRIP +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds +# A C compiler. +LTCC=$lt_CC - # Check whether --enable-gr-radio-astronomy was given. -if test "${enable_gr_radio_astronomy+set}" = set; then - enableval=$enable_gr_radio_astronomy; -else - enable_gr_radio_astronomy=$enable_all_components -fi +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - ac_config_files="$ac_config_files gr-radio-astronomy/Makefile gr-radio-astronomy/src/Makefile gr-radio-astronomy/src/lib/Makefile gr-radio-astronomy/src/python/Makefile gr-radio-astronomy/src/python/run_tests" +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - passed=yes +# The name of the directory that contains temporary libtool files. +objdir=$objdir - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-radio-astronomy" - if test x$enable_gr_radio_astronomy = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-radio-astronomy has errors, stopping." >&5 -echo "$as_me: error: Component gr-radio-astronomy has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-radio-astronomy." >&5 -echo "${ECHO_T}Not building component gr-radio-astronomy." >&6; } - fi - else - if test x$enable_gr_radio_astronomy != xno; then +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL - ac_config_commands="$ac_config_commands run_tests_astronomy" +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD - build_dirs="$build_dirs gr-radio-astronomy" - { echo "$as_me:$LINENO: result: Component gr-radio-astronomy passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-radio-astronomy passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-radio-astronomy" - { echo "$as_me:$LINENO: result: Component gr-radio-astronomy passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-radio-astronomy passed configuration checks, but not building." >&6; } - fi - fi +# Must we lock files when doing compilation? +need_locks=$lt_need_locks +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO - # Check whether --enable-gr-trellis was given. -if test "${enable_gr_trellis+set}" = set; then - enableval=$enable_gr_trellis; -else - enable_gr_trellis=$enable_all_components -fi +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 +# Old archive suffix (normally "a"). +libext=$libext - ac_config_files="$ac_config_files gr-trellis/Makefile gr-trellis/doc/Makefile gr-trellis/src/Makefile gr-trellis/src/lib/Makefile gr-trellis/src/python/Makefile gr-trellis/src/python/run_tests" +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds - passed=yes +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-trellis" - if test x$enable_gr_trellis = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-trellis has errors, stopping." >&5 -echo "$as_me: error: Component gr-trellis has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-trellis." >&5 -echo "${ECHO_T}Not building component gr-trellis." >&6; } - fi - else - if test x$enable_gr_trellis != xno; then +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix - ac_config_commands="$ac_config_commands run_tests_gr_trellis" +# Do we need a version for libraries? +need_version=$need_version +# Library versioning type. +version_type=$version_type - build_dirs="$build_dirs gr-trellis" - { echo "$as_me:$LINENO: result: Component gr-trellis passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-trellis passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-trellis" - { echo "$as_me:$LINENO: result: Component gr-trellis passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-trellis passed configuration checks, but not building." >&6; } - fi - fi +# Shared library runtime path variable. +runpath_var=$runpath_var +# Shared library path variable. +shlibpath_var=$shlibpath_var +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath +# Format of library name prefix. +libname_spec=$lt_libname_spec - # Check whether --enable-gr-video-sdl was given. -if test "${enable_gr_video_sdl+set}" = set; then - enableval=$enable_gr_video_sdl; -else - enable_gr_video_sdl=$enable_all_components -fi +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds - ac_config_files="$ac_config_files gr-video-sdl/Makefile gr-video-sdl/src/Makefile gr-video-sdl/src/run_tests" +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds - passed=yes - SDL_VERSION=1.2.0 +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval -# Check whether --with-sdl-prefix was given. -if test "${with_sdl_prefix+set}" = set; then - withval=$with_sdl_prefix; sdl_prefix="$withval" -else - sdl_prefix="" -fi +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec -# Check whether --with-sdl-exec-prefix was given. -if test "${with_sdl_exec_prefix+set}" = set; then - withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" -else - sdl_exec_prefix="" -fi +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec -# Check whether --enable-sdltest was given. -if test "${enable_sdltest+set}" = set; then - enableval=$enable_sdltest; -else - enable_sdltest=yes -fi +# Whether dlopen is supported. +dlopen_support=$enable_dlopen +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self - if test x$sdl_exec_prefix != x ; then - sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" - if test x${SDL_CONFIG+set} != xset ; then - SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config - fi - fi - if test x$sdl_prefix != x ; then - sdl_args="$sdl_args --prefix=$sdl_prefix" - if test x${SDL_CONFIG+set} != xset ; then - SDL_CONFIG=$sdl_prefix/bin/sdl-config - fi - fi +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib - PATH="$prefix/bin:$prefix/usr/bin:$PATH" - # Extract the first word of "sdl-config", so it can be a program name with args. -set dummy sdl-config; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_path_SDL_CONFIG+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $SDL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" - ;; -esac -fi -SDL_CONFIG=$ac_cv_path_SDL_CONFIG -if test -n "$SDL_CONFIG"; then - { echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 -echo "${ECHO_T}$SDL_CONFIG" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi +# The linker used to build libraries. +LD=$lt_LD +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds - min_sdl_version=$SDL_VERSION - { echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 -echo $ECHO_N "checking for SDL - version >= $min_sdl_version... $ECHO_C" >&6; } - no_sdl="" - if test "$SDL_CONFIG" = "no" ; then - no_sdl=yes - else - SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` - SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` +# A language specific compiler. +CC=$lt_compiler - sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` - sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` - sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ - sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` - if test "x$enable_sdltest" = "xyes" ; then - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $SDL_CFLAGS" - LIBS="$LIBS $SDL_LIBS" - rm -f conf.sdltest - if test "$cross_compiling" = yes; then - echo $ac_n "cross compiling; assumed OK... $ac_c" -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic -#include -#include -#include -#include "SDL.h" +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static -char* -my_strdup (char *str) -{ - char *new_str; +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o - if (str) - { - new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); - strcpy (new_str, str); - } - else - new_str = NULL; +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc - return new_str; -} +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes -int main (int argc, char *argv[]) -{ - int major, minor, micro; - char *tmp_version; +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - /* This hangs on some systems (?) - system ("touch conf.sdltest"); - */ - { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = my_strdup("$min_sdl_version"); - if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_sdl_version"); - exit(1); - } +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object - if (($sdl_major_version > major) || - (($sdl_major_version == major) && ($sdl_minor_version > minor)) || - (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) - { - return 0; - } - else - { - printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); - printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); - printf("*** best to upgrade to the required version.\n"); - printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); - printf("*** to point to the correct copy of sdl-config, and remove the file\n"); - printf("*** config.cache before re-running configure\n"); - return 1; - } -} +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds -( exit $ac_status ) -no_sdl=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - if test "x$no_sdl" = x ; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - : - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - if test "$SDL_CONFIG" = "no" ; then - echo "*** The sdl-config script installed by SDL could not be found" - echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" - echo "*** your path, or set the SDL_CONFIG environment variable to the" - echo "*** full path to sdl-config." - else - if test -f conf.sdltest ; then - : - else - echo "*** Could not run SDL test program, checking why..." - CFLAGS="$CFLAGS $SDL_CFLAGS" - LIBS="$LIBS $SDL_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag -#include -#include "SDL.h" +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag -int main(int argc, char *argv[]) -{ return 0; } -#undef main -#define main K_and_R_C_main +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec -int -main () -{ - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - echo "*** The test program compiled, but did not run. This usually means" - echo "*** that the run-time linker is not finding SDL or finding the wrong" - echo "*** version of SDL. If it is not finding SDL, you'll need to set your" - echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" - echo "*** to the installed location Also, make sure you have run ldconfig if that" - echo "*** is required on your system" - echo "***" - echo "*** If you have an old version installed, it is best to remove it, although" - echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - echo "*** The test program failed to compile or link. See the file config.log for the" - echo "*** exact error that occured. This usually means SDL was incorrectly installed" - echo "*** or that you have moved SDL since it was installed. In the latter case, you" - echo "*** may want to edit the sdl-config script: $SDL_CONFIG" -fi +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - fi - fi - SDL_CFLAGS="" - SDL_LIBS="" - passed=no;{ echo "$as_me:$LINENO: result: gr-video-sdl requires library sdl, not found or failed test." >&5 -echo "${ECHO_T}gr-video-sdl requires library sdl, not found or failed test." >&6; } - fi +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute - rm -f conf.sdltest +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-video-sdl" - if test x$enable_gr_video_sdl = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-video-sdl has errors, stopping." >&5 -echo "$as_me: error: Component gr-video-sdl has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-video-sdl." >&5 -echo "${ECHO_T}Not building component gr-video-sdl." >&6; } - fi - else - if test x$enable_gr_video_sdl != xno; then +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols - ac_config_commands="$ac_config_commands run_tests_sdl" +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms - build_dirs="$build_dirs gr-video-sdl" - { echo "$as_me:$LINENO: result: Component gr-video-sdl passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-video-sdl passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-video-sdl" - { echo "$as_me:$LINENO: result: Component gr-video-sdl passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-video-sdl passed configuration checks, but not building." >&6; } - fi - fi +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action - # Check whether --enable-gr-wxgui was given. -if test "${enable_gr_wxgui+set}" = set; then - enableval=$enable_gr_wxgui; -else - enable_gr_wxgui=$enable_all_components +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES fi +_LT_EOF + ;; + esac +ltmain="$ac_aux_dir/ltmain.sh" - ac_config_files="$ac_config_files gr-wxgui/Makefile gr-wxgui/src/Makefile gr-wxgui/src/python/Makefile" + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) - if ${PYTHON} -c 'import wx'; then - passed=yes - else - passed=no - fi + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} - if test x$passed = xno; then - skipped_dirs="$skipped_dirs gr-wxgui" - if test x$enable_gr_wxgui = xyes; then - { { echo "$as_me:$LINENO: error: Component gr-wxgui has errors, stopping." >&5 -echo "$as_me: error: Component gr-wxgui has errors, stopping." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: result: Not building component gr-wxgui." >&5 -echo "${ECHO_T}Not building component gr-wxgui." >&6; } - fi - else - if test x$enable_gr_wxgui != xno; then +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} - build_dirs="$build_dirs gr-wxgui" - { echo "$as_me:$LINENO: result: Component gr-wxgui passed configuration checks, building." >&5 -echo "${ECHO_T}Component gr-wxgui passed configuration checks, building." >&6; } - else - skipped_dirs="$skipped_dirs gr-wxgui" - { echo "$as_me:$LINENO: result: Component gr-wxgui passed configuration checks, but not building." >&5 -echo "${ECHO_T}Component gr-wxgui passed configuration checks, but not building." >&6; } - fi - fi +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} -# Each component is now either to be built, was skipped, or failed dependencies -build_dirs=$build_dirs +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" -skipped_dirs=$skipped_dirs +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} -ac_config_files="$ac_config_files Makefile run_tests.sh config/Makefile" +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} -ac_config_commands="$ac_config_commands run_tests_build" +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} -_ACEOF +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' +_LT_EOF +esac -DEFS=-DHAVE_CONFIG_H +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" -LTLIBOBJS=$ac_ltlibobjs +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} +_LT_EOF + ;; + esac -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${ENABLE_FORTRAN_TRUE}" && test -z "${ENABLE_FORTRAN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ENABLE_FORTRAN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ENABLE_FORTRAN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${HAS_XMLTO_TRUE}" && test -z "${HAS_XMLTO_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"HAS_XMLTO\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"HAS_XMLTO\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${OMNITHREAD_POSIX_TRUE}" && test -z "${OMNITHREAD_POSIX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"OMNITHREAD_POSIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"OMNITHREAD_POSIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${OMNITHREAD_NT_TRUE}" && test -z "${OMNITHREAD_NT_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"OMNITHREAD_NT\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"OMNITHREAD_NT\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${HAVE_CREATEFILEMAPPING_TRUE}" && test -z "${HAVE_CREATEFILEMAPPING_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"HAVE_CREATEFILEMAPPING\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"HAVE_CREATEFILEMAPPING\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${DOC_TRUE}" && test -z "${DOC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DOC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DOC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${MD_CPU_x86_TRUE}" && test -z "${MD_CPU_x86_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MD_CPU_x86\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MD_CPU_x86\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${MD_SUBCPU_x86_64_TRUE}" && test -z "${MD_SUBCPU_x86_64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MD_SUBCPU_x86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MD_SUBCPU_x86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${MD_CPU_generic_TRUE}" && test -z "${MD_CPU_generic_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MD_CPU_generic\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MD_CPU_generic\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${FUSB_TECH_darwin_TRUE}" && test -z "${FUSB_TECH_darwin_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_darwin\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FUSB_TECH_darwin\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${FUSB_TECH_win32_TRUE}" && test -z "${FUSB_TECH_win32_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_win32\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FUSB_TECH_win32\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${FUSB_TECH_generic_TRUE}" && test -z "${FUSB_TECH_generic_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_generic\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FUSB_TECH_generic\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${FUSB_TECH_linux_TRUE}" && test -z "${FUSB_TECH_linux_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_linux\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FUSB_TECH_linux\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${FUSB_TECH_ra_wb_TRUE}" && test -z "${FUSB_TECH_ra_wb_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FUSB_TECH_ra_wb\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FUSB_TECH_ra_wb\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX -fi +# The linker used to build libraries. +LD=$lt_LD_CXX +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX +# A language specific compiler. +CC=$lt_compiler_CXX +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -as_nl=' -' -IFS=" "" $as_nl" +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX -# Find who we are. Look in the path if we contain no directory separator. -case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done -IFS=$as_save_IFS +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } -fi +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -# CDPATH. -$as_unset CDPATH +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir -fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX -exec 6>&1 +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX -# Save the log message, to keep $[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX -_ACEOF +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX -cat >>$CONFIG_STATUS <<_ACEOF -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX -_ACEOF +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX -cat >>$CONFIG_STATUS <<\_ACEOF -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX -Usage: $0 [OPTIONS] [FILE]... +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF -Configuration files: -$config_files -Configuration headers: -$config_headers + cat <<_LT_EOF >> "$ofile" -Configuration commands: -$config_commands +# ### BEGIN LIBTOOL TAG CONFIG: F77 -Report bugs to ." +# The linker used to build libraries. +LD=$lt_LD_F77 -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_F77 -Copyright (C) 2006 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." +# A language specific compiler. +CC=$lt_compiler_F77 -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -_ACEOF +# Is the compiler the GNU compiler? +with_gcc=$GCC_F77 -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 - # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 - *) ac_config_targets="$ac_config_targets $1" - ac_need_defaults=false ;; +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 - esac - shift -done +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 -ac_configure_extra_args= +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL - export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - echo "$ac_log" -} >&5 +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_F77 -_ACEOF +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 -cat >>$CONFIG_STATUS <<\_ACEOF +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "gnuradio-core/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/Makefile" ;; - "gnuradio-core/gnuradio-core.pc") CONFIG_FILES="$CONFIG_FILES gnuradio-core/gnuradio-core.pc" ;; - "gnuradio-core/doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/doc/Doxyfile" ;; - "gnuradio-core/doc/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/doc/Makefile" ;; - "gnuradio-core/doc/other/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/doc/other/Makefile" ;; - "gnuradio-core/doc/xml/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/doc/xml/Makefile" ;; - "gnuradio-core/src/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/Makefile" ;; - "gnuradio-core/src/gen_interpolator_taps/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/gen_interpolator_taps/Makefile" ;; - "gnuradio-core/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/Makefile" ;; - "gnuradio-core/src/lib/filter/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/filter/Makefile" ;; - "gnuradio-core/src/lib/g72x/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/g72x/Makefile" ;; - "gnuradio-core/src/lib/general/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/general/Makefile" ;; - "gnuradio-core/src/lib/general/gr_prefix.cc") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/general/gr_prefix.cc" ;; - "gnuradio-core/src/lib/io/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/io/Makefile" ;; - "gnuradio-core/src/lib/missing/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/missing/Makefile" ;; - "gnuradio-core/src/lib/omnithread/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/omnithread/Makefile" ;; - "gnuradio-core/src/lib/reed-solomon/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/reed-solomon/Makefile" ;; - "gnuradio-core/src/lib/runtime/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/runtime/Makefile" ;; - "gnuradio-core/src/lib/swig/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/lib/swig/Makefile" ;; - "gnuradio-core/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/Makefile" ;; - "gnuradio-core/src/python/bin/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/bin/Makefile" ;; - "gnuradio-core/src/python/gnuradio/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/Makefile" ;; - "gnuradio-core/src/python/gnuradio/blks/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/blks/Makefile" ;; - "gnuradio-core/src/python/gnuradio/blksimpl/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/blksimpl/Makefile" ;; - "gnuradio-core/src/python/gnuradio/gr/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gr/Makefile" ;; - "gnuradio-core/src/python/gnuradio/gr/run_tests") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gr/run_tests" ;; - "gnuradio-core/src/python/gnuradio/gru/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gru/Makefile" ;; - "gnuradio-core/src/python/gnuradio/gruimpl/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/python/gnuradio/gruimpl/Makefile" ;; - "gnuradio-core/src/tests/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/tests/Makefile" ;; - "gnuradio-core/src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-core/src/utils/Makefile" ;; - "run_tests_core") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_core" ;; - "swig_deps") CONFIG_COMMANDS="$CONFIG_COMMANDS swig_deps" ;; - "gnuradio-examples/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/Makefile" ;; - "gnuradio-examples/python/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/Makefile" ;; - "gnuradio-examples/python/apps/hf_explorer/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/apps/hf_explorer/Makefile" ;; - "gnuradio-examples/python/apps/hf_radio/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/apps/hf_radio/Makefile" ;; - "gnuradio-examples/python/apps/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/apps/Makefile" ;; - "gnuradio-examples/python/audio/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/audio/Makefile" ;; - "gnuradio-examples/python/channel-coding/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/channel-coding/Makefile" ;; - "gnuradio-examples/python/channel-coding/fsm_files/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/channel-coding/fsm_files/Makefile" ;; - "gnuradio-examples/python/digital/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/digital/Makefile" ;; - "gnuradio-examples/python/digital_voice/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/digital_voice/Makefile" ;; - "gnuradio-examples/python/multi-antenna/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/multi-antenna/Makefile" ;; - "gnuradio-examples/python/multi_usrp/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/multi_usrp/Makefile" ;; - "gnuradio-examples/python/networking/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/networking/Makefile" ;; - "gnuradio-examples/python/usrp/Makefile") CONFIG_FILES="$CONFIG_FILES gnuradio-examples/python/usrp/Makefile" ;; - "usrp/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/Makefile" ;; - "usrp/usrp.pc") CONFIG_FILES="$CONFIG_FILES usrp/usrp.pc" ;; - "usrp/usrp.iss") CONFIG_FILES="$CONFIG_FILES usrp/usrp.iss" ;; - "usrp/doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES usrp/doc/Doxyfile" ;; - "usrp/doc/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/doc/Makefile" ;; - "usrp/doc/other/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/doc/other/Makefile" ;; - "usrp/host/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/Makefile" ;; - "usrp/host/misc/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/misc/Makefile" ;; - "usrp/host/lib/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/lib/Makefile" ;; - "usrp/host/lib/std_paths.h") CONFIG_FILES="$CONFIG_FILES usrp/host/lib/std_paths.h" ;; - "usrp/host/swig/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/swig/Makefile" ;; - "usrp/host/apps/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/host/apps/Makefile" ;; - "usrp/firmware/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/Makefile" ;; - "usrp/firmware/include/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/include/Makefile" ;; - "usrp/firmware/lib/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/lib/Makefile" ;; - "usrp/firmware/src/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/src/Makefile" ;; - "usrp/firmware/src/common/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/src/common/Makefile" ;; - "usrp/firmware/src/usrp2/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/firmware/src/usrp2/Makefile" ;; - "usrp/fpga/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/fpga/Makefile" ;; - "usrp/fpga/rbf/Makefile") CONFIG_FILES="$CONFIG_FILES usrp/fpga/rbf/Makefile" ;; - "gr-usrp/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp/Makefile" ;; - "gr-usrp/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-usrp/src/Makefile" ;; - "gr-usrp/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-usrp/src/run_tests" ;; - "run_tests_usrp") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_usrp" ;; - "gr-audio-alsa/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/Makefile" ;; - "gr-audio-alsa/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/src/Makefile" ;; - "gr-audio-alsa/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-alsa/src/run_tests" ;; - "run_tests_alsa") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_alsa" ;; - "gr-audio-jack/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-jack/Makefile" ;; - "gr-audio-jack/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-jack/src/Makefile" ;; - "gr-audio-jack/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-jack/src/run_tests" ;; - "run_tests_jack") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_jack" ;; - "gr-audio-oss/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-oss/Makefile" ;; - "gr-audio-oss/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-oss/src/Makefile" ;; - "gr-audio-oss/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-oss/src/run_tests" ;; - "run_tests_oss") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_oss" ;; - "gr-audio-osx/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-osx/Makefile" ;; - "gr-audio-osx/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-osx/src/Makefile" ;; - "gr-audio-osx/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-osx/src/run_tests" ;; - "run_tests_osx") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_osx" ;; - "gr-audio-portaudio/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-portaudio/Makefile" ;; - "gr-audio-portaudio/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-portaudio/src/Makefile" ;; - "gr-audio-portaudio/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-portaudio/src/run_tests" ;; - "run_tests_portaudio") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_portaudio" ;; - "gr-audio-windows/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-windows/Makefile" ;; - "gr-audio-windows/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-audio-windows/src/Makefile" ;; - "gr-audio-windows/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-audio-windows/src/run_tests" ;; - "run_tests_audio_windows") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_audio_windows" ;; - "gr-gsm-fr-vocoder/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/Makefile" ;; - "gr-gsm-fr-vocoder/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/Makefile" ;; - "gr-gsm-fr-vocoder/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/lib/Makefile" ;; - "gr-gsm-fr-vocoder/src/lib/gsm/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/lib/gsm/Makefile" ;; - "gr-gsm-fr-vocoder/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/python/Makefile" ;; - "gr-gsm-fr-vocoder/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-gsm-fr-vocoder/src/python/run_tests" ;; - "run_tests_gsm") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_gsm" ;; - "gr-radio-astronomy/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/Makefile" ;; - "gr-radio-astronomy/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/Makefile" ;; - "gr-radio-astronomy/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/lib/Makefile" ;; - "gr-radio-astronomy/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/python/Makefile" ;; - "gr-radio-astronomy/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-radio-astronomy/src/python/run_tests" ;; - "run_tests_astronomy") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_astronomy" ;; - "gr-trellis/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/Makefile" ;; - "gr-trellis/doc/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/doc/Makefile" ;; - "gr-trellis/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/Makefile" ;; - "gr-trellis/src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/lib/Makefile" ;; - "gr-trellis/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/python/Makefile" ;; - "gr-trellis/src/python/run_tests") CONFIG_FILES="$CONFIG_FILES gr-trellis/src/python/run_tests" ;; - "run_tests_gr_trellis") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_gr_trellis" ;; - "gr-video-sdl/Makefile") CONFIG_FILES="$CONFIG_FILES gr-video-sdl/Makefile" ;; - "gr-video-sdl/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-video-sdl/src/Makefile" ;; - "gr-video-sdl/src/run_tests") CONFIG_FILES="$CONFIG_FILES gr-video-sdl/src/run_tests" ;; - "run_tests_sdl") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_sdl" ;; - "gr-wxgui/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/Makefile" ;; - "gr-wxgui/src/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/src/Makefile" ;; - "gr-wxgui/src/python/Makefile") CONFIG_FILES="$CONFIG_FILES gr-wxgui/src/python/Makefile" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "run_tests.sh") CONFIG_FILES="$CONFIG_FILES run_tests.sh" ;; - "config/Makefile") CONFIG_FILES="$CONFIG_FILES config/Makefile" ;; - "run_tests_build") CONFIG_COMMANDS="$CONFIG_COMMANDS run_tests_build" ;; +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_F77 +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 -# -# Set up the sed scripts for CONFIG_FILES section. -# +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_F77 -_ACEOF +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_F77 +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -target!$target$ac_delim -target_cpu!$target_cpu$ac_delim -target_vendor!$target_vendor$ac_delim -target_os!$target_os$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CPP!$CPP$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXDEPMODE!$CXXDEPMODE$ac_delim -am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim -am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim -CXXCPP!$CXXCPP$ac_delim -CCAS!$CCAS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_F77 -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_F77 -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof -_ACEOF +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_F77 -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -CCASFLAGS!$CCASFLAGS$ac_delim -LN_S!$LN_S$ac_delim -RM_PROG!$RM_PROG$ac_delim -ECHO!$ECHO$ac_delim -AR!$AR$ac_delim -RANLIB!$RANLIB$ac_delim -DLLTOOL!$DLLTOOL$ac_delim -AS!$AS$ac_delim -OBJDUMP!$OBJDUMP$ac_delim -F77!$F77$ac_delim -FFLAGS!$FFLAGS$ac_delim -ac_ct_F77!$ac_ct_F77$ac_delim -LIBTOOL!$LIBTOOL$ac_delim -ENABLE_FORTRAN_TRUE!$ENABLE_FORTRAN_TRUE$ac_delim -ENABLE_FORTRAN_FALSE!$ENABLE_FORTRAN_FALSE$ac_delim -FLIBS!$FLIBS$ac_delim -NO_UNDEFINED!$NO_UNDEFINED$ac_delim -SWIG!$SWIG$ac_delim -PYTHON!$PYTHON$ac_delim -PYTHON_VERSION!$PYTHON_VERSION$ac_delim -PYTHON_PREFIX!$PYTHON_PREFIX$ac_delim -PYTHON_EXEC_PREFIX!$PYTHON_EXEC_PREFIX$ac_delim -PYTHON_PLATFORM!$PYTHON_PLATFORM$ac_delim -pythondir!$pythondir$ac_delim -pkgpythondir!$pkgpythondir$ac_delim -pyexecdir!$pyexecdir$ac_delim -pkgpyexecdir!$pkgpyexecdir$ac_delim -PYTHON_CPPFLAGS!$PYTHON_CPPFLAGS$ac_delim -PYTHON_LDFLAGS!$PYTHON_LDFLAGS$ac_delim -SWIG_PYTHON_LIB!$SWIG_PYTHON_LIB$ac_delim -SWIG_PYTHON_OPT!$SWIG_PYTHON_OPT$ac_delim -SWIG_PYTHON_CPPFLAGS!$SWIG_PYTHON_CPPFLAGS$ac_delim -XMLTO!$XMLTO$ac_delim -HAS_XMLTO_TRUE!$HAS_XMLTO_TRUE$ac_delim -HAS_XMLTO_FALSE!$HAS_XMLTO_FALSE$ac_delim -PTHREAD_CC!$PTHREAD_CC$ac_delim -PTHREAD_LIBS!$PTHREAD_LIBS$ac_delim -PTHREAD_CFLAGS!$PTHREAD_CFLAGS$ac_delim -OMNITHREAD_POSIX_TRUE!$OMNITHREAD_POSIX_TRUE$ac_delim -OMNITHREAD_POSIX_FALSE!$OMNITHREAD_POSIX_FALSE$ac_delim -OMNITHREAD_NT_TRUE!$OMNITHREAD_NT_TRUE$ac_delim -OMNITHREAD_NT_FALSE!$OMNITHREAD_NT_FALSE$ac_delim -CXX_FOR_BUILD!$CXX_FOR_BUILD$ac_delim -IPC_LIBS!$IPC_LIBS$ac_delim -ALLOCA!$ALLOCA$ac_delim -SHM_OPEN_LIBS!$SHM_OPEN_LIBS$ac_delim -LIBGNURADIO_CORE_EXTRA_LDFLAGS!$LIBGNURADIO_CORE_EXTRA_LDFLAGS$ac_delim -HAVE_CREATEFILEMAPPING_TRUE!$HAVE_CREATEFILEMAPPING_TRUE$ac_delim -HAVE_CREATEFILEMAPPING_FALSE!$HAVE_CREATEFILEMAPPING_FALSE$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -HAVE_DOT!$HAVE_DOT$ac_delim -PKG_CONFIG!$PKG_CONFIG$ac_delim -FFTW3F_CFLAGS!$FFTW3F_CFLAGS$ac_delim -FFTW3F_LIBS!$FFTW3F_LIBS$ac_delim -FFTW3F_INCLUDEDIR!$FFTW3F_INCLUDEDIR$ac_delim -DOXYGEN!$DOXYGEN$ac_delim -DOT!$DOT$ac_delim -DOC_TRUE!$DOC_TRUE$ac_delim -DOC_FALSE!$DOC_FALSE$ac_delim -enable_dot!$enable_dot$ac_delim -enable_html_docs!$enable_html_docs$ac_delim -enable_latex_docs!$enable_latex_docs$ac_delim -generate_docs!$generate_docs$ac_delim -MD_CPU!$MD_CPU$ac_delim -MD_SUBCPU!$MD_SUBCPU$ac_delim -MD_CPU_x86_TRUE!$MD_CPU_x86_TRUE$ac_delim -MD_CPU_x86_FALSE!$MD_CPU_x86_FALSE$ac_delim -MD_SUBCPU_x86_64_TRUE!$MD_SUBCPU_x86_64_TRUE$ac_delim -MD_SUBCPU_x86_64_FALSE!$MD_SUBCPU_x86_64_FALSE$ac_delim -MD_CPU_generic_TRUE!$MD_CPU_generic_TRUE$ac_delim -MD_CPU_generic_FALSE!$MD_CPU_generic_FALSE$ac_delim -CPPUNIT_CONFIG!$CPPUNIT_CONFIG$ac_delim -CPPUNIT_CFLAGS!$CPPUNIT_CFLAGS$ac_delim -CPPUNIT_LIBS!$CPPUNIT_LIBS$ac_delim -CPPUNIT_INCLUDES!$CPPUNIT_INCLUDES$ac_delim -BOOST_CFLAGS!$BOOST_CFLAGS$ac_delim -DEFINES!$DEFINES$ac_delim -USB_LIBS!$USB_LIBS$ac_delim -FUSB_TECH!$FUSB_TECH$ac_delim -FUSB_TECH_darwin_TRUE!$FUSB_TECH_darwin_TRUE$ac_delim -FUSB_TECH_darwin_FALSE!$FUSB_TECH_darwin_FALSE$ac_delim -FUSB_TECH_win32_TRUE!$FUSB_TECH_win32_TRUE$ac_delim -FUSB_TECH_win32_FALSE!$FUSB_TECH_win32_FALSE$ac_delim -FUSB_TECH_generic_TRUE!$FUSB_TECH_generic_TRUE$ac_delim -FUSB_TECH_generic_FALSE!$FUSB_TECH_generic_FALSE$ac_delim -FUSB_TECH_linux_TRUE!$FUSB_TECH_linux_TRUE$ac_delim -FUSB_TECH_linux_FALSE!$FUSB_TECH_linux_FALSE$ac_delim -FUSB_TECH_ra_wb_TRUE!$FUSB_TECH_ra_wb_TRUE$ac_delim -FUSB_TECH_ra_wb_FALSE!$FUSB_TECH_ra_wb_FALSE$ac_delim -XCC!$XCC$ac_delim -XAS!$XAS$ac_delim -ALSA_CFLAGS!$ALSA_CFLAGS$ac_delim -ALSA_LIBS!$ALSA_LIBS$ac_delim -ALSA_INCLUDEDIR!$ALSA_INCLUDEDIR$ac_delim -JACK_CFLAGS!$JACK_CFLAGS$ac_delim -JACK_LIBS!$JACK_LIBS$ac_delim -JACK_INCLUDEDIR!$JACK_INCLUDEDIR$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof -_ACEOF +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -OSS_LIBS!$OSS_LIBS$ac_delim -PORTAUDIO_CFLAGS!$PORTAUDIO_CFLAGS$ac_delim -PORTAUDIO_LIBS!$PORTAUDIO_LIBS$ac_delim -PORTAUDIO_INCLUDEDIR!$PORTAUDIO_INCLUDEDIR$ac_delim -WINAUDIO_LIBS!$WINAUDIO_LIBS$ac_delim -SDL_CONFIG!$SDL_CONFIG$ac_delim -SDL_CFLAGS!$SDL_CFLAGS$ac_delim -SDL_LIBS!$SDL_LIBS$ac_delim -build_dirs!$build_dirs$ac_delim -skipped_dirs!$skipped_dirs$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 11; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_F77 -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_F77 -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof -_ACEOF +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_F77 +postdep_objects=$lt_postdep_objects_F77 +predeps=$lt_predeps_F77 +postdeps=$lt_postdeps_F77 -cat >>$CONFIG_STATUS <<\_ACEOF -fi # test -n "$CONFIG_FILES" +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 +# ### END LIBTOOL TAG CONFIG: F77 +_LT_EOF + + ;; + "run_tests_core":C) chmod +x gnuradio-core/src/python/gnuradio/gr/run_tests ;; + "run_tests_usrp":C) chmod +x gr-usrp/src/run_tests ;; + "run_tests_usrp2":C) chmod +x gr-usrp2/src/run_tests ;; + "run_tests_gcell":C) chmod +x gr-gcell/src/run_tests ;; + "run_tests_alsa":C) chmod +x gr-audio-alsa/src/run_tests ;; + "run_tests_jack":C) chmod +x gr-audio-jack/src/run_tests ;; + "run_tests_oss":C) chmod +x gr-audio-oss/src/run_tests ;; + "run_tests_osx":C) chmod +x gr-audio-osx/src/run_tests ;; + "run_tests_portaudio":C) chmod +x gr-audio-portaudio/src/run_tests ;; + "run_tests_audio_windows":C) chmod +x gr-audio-windows/src/run_tests ;; + "run_tests_cvsd":C) chmod +x gr-cvsd-vocoder/src/python/run_tests ;; + "run_tests_gsm":C) chmod +x gr-gsm-fr-vocoder/src/python/run_tests ;; + "run_tests_pager":C) chmod +x gr-pager/src/run_tests ;; + "run_tests_radar_mono":C) chmod +x gr-radar-mono/src/python/run_tests ;; + "run_tests_astronomy":C) chmod +x gr-radio-astronomy/src/python/run_tests ;; + "run_tests_gr_trellis":C) chmod +x gr-trellis/src/python/run_tests ;; + "run_tests_sdl":C) chmod +x gr-video-sdl/src/run_tests ;; + "run_tests_sounder":C) chmod +x gr-sounder/src/python/run_tests ;; + "run_tests_build":C) chmod +x run_tests.sh ;; -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift +done # for ac_tag - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - ac_file_inputs="$ac_file_inputs $ac_f" - done - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - fi +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +# +# CONFIG_SUBDIRS section. +# +if test "$no_recursion" != yes; then + + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. + ac_sub_configure_args= + ac_prev= + eval "set x $ac_configure_args" + shift + for ac_arg + do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case $ac_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + ;; + --disable-option-checking) + ;; + *) + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + ac_sub_configure_args="$ac_sub_configure_args '$ac_arg'" ;; esac - ;; + done + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ac_arg="--prefix=$prefix" + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac + ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" + # Pass --silent + if test "$silent" = yes; then + ac_sub_configure_args="--silent $ac_sub_configure_args" + fi + + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" + + ac_popdir=`pwd` + for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + test -d "$srcdir/$ac_dir" || continue + + ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" + $as_echo "$as_me:$LINENO: $ac_msg" >&5 + $as_echo "$ac_msg" >&6 + { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac @@ -33146,7 +48435,7 @@ echo X"$ac_file" | as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -33155,7 +48444,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -33176,17 +48465,17 @@ echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } - ac_builddir=. + ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -33214,392 +48503,47 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p -' $ac_file_inputs` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac - ;; - :H) - # - # CONFIG_HEADER - # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail + cd "$ac_dir" -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF - if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + # Check for guested configure; otherwise get Cygnus style configure. + if test -f "$ac_srcdir/configure.gnu"; then + ac_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ac_sub_configure=$ac_srcdir/configure + elif test -f "$ac_srcdir/configure.in"; then + # This should be Cygnus configure. + ac_sub_configure=$ac_aux_dir/configure else - rm -f $ac_file - mv "$tmp/config.h" $ac_file + { $as_echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 +$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + ac_sub_configure= fi - else - echo "/* $configure_input */" - cat "$ac_result" - fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $ac_file | $ac_file:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| . 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; + # The recursion is here. + if test -n "$ac_sub_configure"; then + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; + *) # Relative name. + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done - ;; - "run_tests_core":C) chmod +x gnuradio-core/src/python/gnuradio/gr/run_tests ;; - "swig_deps":C) touch gnuradio-core/src/lib/swig/gnuradio_swig_python.d ;; - "run_tests_usrp":C) chmod +x gr-usrp/src/run_tests ;; - "run_tests_alsa":C) chmod +x gr-audio-alsa/src/run_tests ;; - "run_tests_jack":C) chmod +x gr-audio-jack/src/run_tests ;; - "run_tests_oss":C) chmod +x gr-audio-oss/src/run_tests ;; - "run_tests_osx":C) chmod +x gr-audio-osx/src/run_tests ;; - "run_tests_portaudio":C) chmod +x gr-audio-portaudio/src/run_tests ;; - "run_tests_audio_windows":C) chmod +x gr-audio-windows/src/run_tests ;; - "run_tests_gsm":C) chmod +x gr-gsm-fr-vocoder/src/python/run_tests ;; - "run_tests_astronomy":C) chmod +x gr-radio-astronomy/src/python/run_tests ;; - "run_tests_gr_trellis":C) chmod +x gr-trellis/src/python/run_tests ;; - "run_tests_sdl":C) chmod +x gr-video-sdl/src/run_tests ;; - "run_tests_build":C) chmod +x run_tests.sh ;; - - esac -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save + { $as_echo "$as_me:$LINENO: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + # The eval makes quoting arguments work. + eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || + { { $as_echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 +$as_echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} + { (exit 1); exit 1; }; } + fi -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + cd "$ac_popdir" + done +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -33627,3 +48571,16 @@ if test "$skipped_dirs" != ""; then echo These components will not be built. echo fi +if test "$with_dirs" != ""; then + echo "*********************************************************************" + echo The following components will be included from pre-installed + echo libraries and includes: + echo + for dir in $with_dirs + do + echo $dir + done + echo + echo These components will not be built. + echo +fi diff --git a/configure-cell-cross b/configure-cell-cross new file mode 100755 index 00000000..fd03588f --- /dev/null +++ b/configure-cell-cross @@ -0,0 +1,73 @@ +#!/bin/bash + +# +# Before trying to use this script, please follow the instructions at +# http://gnuradio.org/trac/wiki/CrossCompilingForCell +# + +scriptdir=`dirname $0` + +prefix= +for arg in "$@" +do + case $arg in + --prefix=*) + prefix=${arg#--prefix=} + ;; + --help) + $scriptdir/configure --help + exit + ;; + esac +done + +if test x$prefix = x +then + echo "usage: $0 --prefix=PREFIX [configure options...]" 1>&2 + exit 1 +fi + + +arch=ppu +cell_root=/mnt/cell-root +python_version=2.5 +compiler_includes="-isystem ${cell_root}/usr/include" + +# check for 4.3 versions of cross-compilers and use them if we've got them +if which ppu32-gcc43 >/dev/null 2>&1; then + ppu32_gcc=ppu32-gcc43 +else + ppu32_gcc=ppu32-gcc +fi + +if which ppu32-g++43 >/dev/null 2>&1; then + ppu32_gxx=ppu32-g++43 +else + ppu32_gxx=ppu32-g++ +fi + +$scriptdir/configure \ + CC=${ppu32_gcc} \ + CXX=${ppu32_gxx} \ + AR=${arch}-ar \ + NM=${arch}-nm \ + RANLIB=${arch}-ranlib \ + STRIP=${arch}-strip \ + F77=false \ + CPPFLAGS="$compiler_includes" \ + LDFLAGS="-L${cell_root}/lib -L${cell_root}/usr/lib" \ + PYTHON_CPPFLAGS=-I${cell_root}/usr/include/python${python_version} \ + PKG_CONFIG_PATH=${cell_root}/usr/lib/pkgconfig:${cell_root}/usr/local/lib/pkgconfig \ + --host=powerpc64-unknown-linux-gnu \ + --with-pythondir=$prefix/lib/python${python_version}/site-packages \ + --disable-gr-video-sdl \ + --disable-gr-audio-portaudio \ + --disable-gr-audio-jack \ + --disable-usrp2-firmware \ + "$@" + + +# Hack the libtool script so that it doesn't code an --rpath flag into anything + +#sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool +#sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool diff --git a/configure.ac b/configure.ac index 965a5896..6ea0a570 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -dnl Copyright 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc. +dnl Copyright 2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. dnl dnl This file is part of GNU Radio dnl @@ -20,14 +20,81 @@ dnl Boston, MA 02110-1301, USA. AC_INIT AC_PREREQ(2.57) AM_CONFIG_HEADER(config.h) -AC_CANONICAL_HOST -AC_CANONICAL_TARGET([]) -AM_INIT_AUTOMAKE(gnuradio,3.0.4) AC_CONFIG_SRCDIR([gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc]) -GR_X86_64 dnl check for lib64 suffix +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AM_INIT_AUTOMAKE(gnuradio,3.2.2) + +DEFINES="" +AC_SUBST(DEFINES) + +dnl Remember if the user explicity set CFLAGS +if test -n "${CFLAGS}"; then + user_set_cflags=yes +fi +dnl Remember if the user explicity set CXXFLAGS +if test -n "${CXXFLAGS}"; then + user_set_cxxflags=yes +fi + + LF_CONFIGURE_CC LF_CONFIGURE_CXX +GR_LIB64 dnl check for lib64 suffix after choosing compilers + + +dnl The three macros above are known to override CFLAGS if the user +dnl didn't specify them. Though I'm sure somebody thought this was +dnl a good idea, it makes it hard to use other than -g -O2 when compiling +dnl selected files. Thus we "undo" the damage here... +dnl +dnl If the user specified CFLAGS, we use them. +dnl See Makefile.common for the rest of the magic. +if test "$user_set_cflags" != yes; then + autoconf_default_CFLAGS="$CFLAGS" + CFLAGS="" +fi +AC_SUBST(autoconf_default_CFLAGS) + + +dnl The three macros above are known to override CXXFLAGS if the user +dnl didn't specify them. Though I'm sure somebody thought this was +dnl a good idea, it makes it hard to use other than -g -O2 when compiling +dnl selected files. Thus we "undo" the damage here... +dnl +dnl If the user specified CXXFLAGS, we use them. Otherwise when compiling +dnl the output of swig use use -O1 if we're using g++. +dnl See Makefile.common for the rest of the magic. +if test "$user_set_cxxflags" != yes; then + autoconf_default_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="" + if test "$GXX" = yes; then + case "$host_cpu" in + powerpc*) + dnl "-O1" is broken on the PPC for some reason + dnl (at least as of g++ 4.1.1) + swig_CXXFLAGS="-g1 -O2 -Wno-strict-aliasing -Wno-parentheses" + ;; + *) + swig_CXXFLAGS="-g -O1 -Wno-strict-aliasing -Wno-parentheses" + ;; + esac + fi +fi +AC_SUBST(autoconf_default_CXXFLAGS) +AC_SUBST(swig_CXXFLAGS) + +dnl add ${prefix}/lib${gr_libdir_suffix}/pkgconfig to the head of the PKG_CONFIG_PATH +if test x${PKG_CONFIG_PATH} = x; then + PKG_CONFIG_PATH=${prefix}/lib${gr_libdir_suffix}/pkgconfig +else + PKG_CONFIG_PATH=${prefix}/lib${gr_libdir_suffix}/pkgconfig:${PKG_CONFIG_PATH} +fi +export PKG_CONFIG_PATH + LF_SET_WARNINGS GR_SET_GPROF GR_SET_PROF @@ -35,13 +102,25 @@ AM_PROG_AS AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_INSTALL + +# AC_PROG_MKDIR_P +# is a backport of autoconf-2.60's AC_PROG_MKDIR_P. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifdef([AC_PROG_MKDIR_P], [], [ + AC_DEFUN([AC_PROG_MKDIR_P], + [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + MKDIR_P='$(mkdir_p)' + AC_SUBST([MKDIR_P])]) +]) +AC_PROG_MKDIR_P + AC_PATH_PROG([RM_PROG], [rm]) AC_LIBTOOL_WIN32_DLL dnl AC_DISABLE_SHARED dnl don't build shared libraries AC_ENABLE_SHARED dnl do build shared libraries AC_DISABLE_STATIC dnl don't build static libraries -AC_PROG_LIBTOOL +m4_ifdef([LT_INIT],[LT_INIT],[AC_PROG_LIBTOOL]) GR_FORTRAN GR_NO_UNDEFINED dnl do we need the -no-undefined linker flag @@ -53,15 +132,17 @@ AM_CONDITIONAL([HAS_XMLTO], [test x$XMLTO = xyes]) dnl Checks for libraries. AC_CHECK_LIB(socket,socket) -dnl check for threads (mandatory) +dnl check for omnithreads (will soon be removed) GR_OMNITHREAD -#AC_SUBST(PTHREAD_CFLAGS) -CFLAGS="${CFLAGS} $PTHREAD_CFLAGS" -CXXFLAGS="${CXXFLAGS} $PTHREAD_CFLAGS" -if test "x$CXX_FOR_BUILD" = x +dnl Set the c++ compiler that we use for the build system when cross compiling +if test x$CXX_FOR_BUILD = x then - CXX_FOR_BUILD=${CXX} + if test x$cross_compiling = xno; then + CXX_FOR_BUILD=${CXX} + else + CXX_FOR_BUILD=g++ + fi fi AC_SUBST(CXX_FOR_BUILD) @@ -73,24 +154,30 @@ dnl Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h limits.h strings.h time.h sys/ioctl.h sys/time.h unistd.h) -AC_CHECK_HEADERS(linux/ppdev.h sys/mman.h sys/select.h sys/types.h) -AC_CHECK_HEADERS(sys/resource.h stdint.h sched.h) +AC_CHECK_HEADERS(linux/ppdev.h dev/ppbus/ppi.h sys/mman.h sys/select.h sys/types.h) +AC_CHECK_HEADERS(sys/resource.h stdint.h sched.h signal.h sys/syscall.h malloc.h) +AC_CHECK_HEADERS(netinet/in.h) +AC_CHECK_HEADERS(windows.h) +AC_CHECK_HEADERS(vec_types.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_HEADER_TIME -AC_C_BIGENDIAN +AC_C_BIGENDIAN([GR_ARCH_BIGENDIAN=1],[GR_ARCH_BIGENDIAN=0]) +AC_SUBST(GR_ARCH_BIGENDIAN) AC_STRUCT_TM dnl Checks for library functions. AC_FUNC_ALLOCA +GR_CHECK_MEMALIGN AC_FUNC_SETVBUF_REVERSED AC_FUNC_VPRINTF AC_CHECK_FUNCS([mmap select socket strcspn strerror strspn getpagesize sysconf]) AC_CHECK_FUNCS([snprintf gettimeofday nanosleep sched_setscheduler]) -AC_CHECK_FUNCS([modf sqrt]) +AC_CHECK_FUNCS([modf sqrt sigaction sigprocmask pthread_sigmask]) +AC_CHECK_FUNCS([sched_setaffinity]) AC_CHECK_LIB(m, sincos, [AC_DEFINE([HAVE_SINCOS],[1],[Define to 1 if your system has `sincos'.])]) AC_CHECK_LIB(m, sincosf,[AC_DEFINE([HAVE_SINCOSF],[1],[Define to 1 if your system has `sincosf'.])]) @@ -98,6 +185,7 @@ AC_CHECK_LIB(m, sinf, [AC_DEFINE([HAVE_SINF],[1],[Define to 1 if your system has AC_CHECK_LIB(m, cosf, [AC_DEFINE([HAVE_COSF],[1],[Define to 1 if your system has `cosf'.])]) AC_CHECK_LIB(m, trunc, [AC_DEFINE([HAVE_TRUNC],[1],[Define to 1 if your system has `trunc'.])]) AC_CHECK_LIB(m, exp10, [AC_DEFINE([HAVE_EXP10],[1],[Define to 1 if your system has 'exp10'.])]) +AC_CHECK_LIB(m, log2, [AC_DEFINE([HAVE_LOG2],[1],[Define to 1 if your system has 'log2'.])]) #AC_FUNC_MKTIME AH_BOTTOM([ @@ -116,6 +204,10 @@ inline static double exp10(double x) return pow(10.0, x); } #endif + +#ifdef HAVE_WINDOWS_H +#define NOMINMAX +#endif ]) GR_CHECK_SHM_OPEN @@ -138,54 +230,134 @@ GR_SET_MD_CPU dnl Define where to look for cppunit includes and libs dnl sets CPPUNIT_CFLAGS and CPPUNIT_LIBS -AM_PATH_CPPUNIT([1.9.14],[], - [AC_MSG_ERROR([GNU Radio requires cppunit. Stop])]) +dnl Try using pkg-config first, then fall back to cppunit-config. +PKG_CHECK_EXISTS(cppunit, + [PKG_CHECK_MODULES(CPPUNIT, cppunit >= 1.9.14)], + [AM_PATH_CPPUNIT([1.9.14],[], + [AC_MSG_ERROR([GNU Radio requires cppunit. Stop])])]) CPPUNIT_INCLUDES=$CPPUNIT_CFLAGS AC_SUBST(CPPUNIT_INCLUDES) -dnl Define where to find boost includes -dnl defines BOOST_CFLAGS -GR_REQUIRE_BOOST_INCLUDES +dnl see if GUILE is installed +AC_PATH_PROG(GUILE,guile) -DEFINES="" -AC_SUBST(DEFINES) +dnl +dnl We require the boost headers, thread lib and date_time lib. +dnl AX_BOOST_BASE finds the headers and the lib dir (-L) +dnl +dnl calls AC_SUBST(BOOST_CPPFLAGS), AC_SUBST(BOOST_LDFLAGS) and defines HAVE_BOOST +AX_BOOST_BASE([1.35]) + +dnl calls AC_SUBST(BOOST_THREAD_LIB), AC_SUBST(BOOST_CXXFLAGS) and defines HAVE_BOOST_THREAD +AX_BOOST_THREAD +CXXFLAGS="$CXXFLAGS $BOOST_CXXFLAGS" dnl often picks up a -pthread or something similar +CFLAGS="$CFLAGS $BOOST_CXXFLAGS" dnl often picks up a -pthread or something similar + +dnl +dnl all the rest of these call AC_SUBST(BOOST__LIB) and define HAVE_BOOST_ +dnl +AX_BOOST_DATE_TIME +dnl AX_BOOST_FILESYSTEM +dnl AX_BOOST_IOSTREAMS +AX_BOOST_PROGRAM_OPTIONS +dnl AX_BOOST_REGEX +dnl AX_BOOST_SERIALIZATION +dnl AX_BOOST_SIGNALS +dnl AX_BOOST_SYSTEM +dnl AX_BOOST_TEST_EXEC_MONITOR +dnl AX_BOOST_UNIT_TEST_FRAMEWORK +dnl AX_BOOST_WSERIALIZATION + + +dnl If this is being done from a subversion tree, create variables +GR_SUBVERSION dnl Component specific configuration dnl The order of the GR_ macros determines the order of compilation +dnl For -any- checks on $enable_all_components +dnl use the following guidelines: +dnl yes : --enable-all-components was specified, so error out if any +dnl components do not pass configuration checks. +dnl no : --disable-all-components was specified, so try to build the +dnl --enable'd components, and error out if any do not pass +dnl configuration checks. +dnl "" : this option was not specified on the command line; try to +dnl build all components that are not --with'd, but don't +dnl error out if any component does not pass configuration checks. +dnl +dnl For each --enable-foo component, if that flag is not specified on +dnl the command line, the related variable $enable_foo will be set to +dnl $enable_all_components . + AC_ARG_ENABLE( [all-components], - [ --enable-all-components Build all components or stop on failed dependencies] + [ --enable-all-components Build all configurable components (default), or stop on failed dependencies] ) build_dirs="config" +GRC_GRUEL dnl must come first +GRC_OMNITHREAD dnl must come before gnuradio-core and mblock +GRC_GCELL GRC_GNURADIO_CORE -GRC_GNURADIO_EXAMPLES +GRC_PMT +GRC_MBLOCK dnl this must come after GRC_PMT GRC_USRP +GRC_USRP2 GRC_GR_USRP dnl this must come after GRC_USRP +GRC_GR_USRP2 +GRC_GR_GCELL dnl this must come after GRC_GCELL and GRC_GNURADIO_CORE GRC_GR_AUDIO_ALSA GRC_GR_AUDIO_JACK GRC_GR_AUDIO_OSS GRC_GR_AUDIO_OSX GRC_GR_AUDIO_PORTAUDIO GRC_GR_AUDIO_WINDOWS +GRC_GR_CVSD_VOCODER +GRC_GR_GPIO GRC_GR_GSM_FR_VOCODER +GRC_GR_PAGER +GRC_GR_RADAR_MONO GRC_GR_RADIO_ASTRONOMY GRC_GR_TRELLIS 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_GNURADIO_EXAMPLES dnl must come after all GRC_GR_* +GRC_GRC +GRC_DOCS dnl must be last -# Each component is now either to be built, was skipped, or failed dependencies +# Each component is now either to be built, was skipped, will be +# included from pre-installed libraries and includes, or failed +# dependencies. AC_SUBST([build_dirs], [$build_dirs]) AC_SUBST([skipped_dirs], [$skipped_dirs]) - +AC_SUBST([with_dirs], [$with_dirs]) + +# fix for older autotools that don't define these by default +AC_SUBST(abs_top_srcdir) +AC_SUBST(abs_top_builddir) +AC_SUBST(MKDIR_P) + +# 'with' variables - the pre-installed libraries, includes, and paths +# - must always come last in the lists, so they require special +# treatment. +AC_SUBST(with_INCLUDES) +AC_SUBST(with_SWIG_INCLUDES) +AC_SUBST(with_PYDIRPATH) +AC_SUBST(with_SWIGDIRPATH) +AC_SUBST(with_LIBDIRPATH) + +# Local files tweaked by AC AC_CONFIG_FILES([\ Makefile \ - run_tests.sh - config/Makefile + run_tests.sh \ + config/Makefile \ ]) -dnl run_tests.sh is created from run_tests.in.sh. Make it executable. +dnl run_tests.sh is created from run_tests.sh.in . Make it executable. AC_CONFIG_COMMANDS([run_tests_build], [chmod +x run_tests.sh]) AC_OUTPUT @@ -214,3 +386,16 @@ if test "$skipped_dirs" != ""; then echo These components will not be built. echo fi +if test "$with_dirs" != ""; then + echo "*********************************************************************" + echo The following components will be included from pre-installed + echo libraries and includes: + echo + for dir in $with_dirs + do + echo $dir + done + echo + echo These components will not be built. + echo +fi diff --git a/depcomp b/depcomp index 04701da5..e5f9736c 100755 --- a/depcomp +++ b/depcomp @@ -1,9 +1,10 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2005-07-09.11 +scriptversion=2007-03-29.01 -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 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 @@ -91,7 +92,20 @@ gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" stat=$? if test $stat -eq 0; then : else @@ -201,34 +215,39 @@ aix) # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u "$@" -M fi stat=$? - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - if test $stat -eq 0; then : else - rm -f "$tmpdepfile" + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done if test -f "$tmpdepfile"; then - outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile @@ -276,6 +295,46 @@ icc) rm -f "$tmpdepfile" ;; +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. @@ -288,13 +347,13 @@ tru64) if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a - # static library. This mecanism is used in libtool 1.4 series to + # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in in $dir.libs/$base.o.d and + # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is diff --git a/docs/ChangeLog b/docs/ChangeLog new file mode 100644 index 00000000..6f024c4a --- /dev/null +++ b/docs/ChangeLog @@ -0,0 +1,24 @@ +2004-11-29 Eric Blossom + + * exploring-gnuradio/exploring-gnuradio.xml: new. revision 1.1 + +# +# 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. +# diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 00000000..31461cdc --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,23 @@ +# +# 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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = doxygen diff --git a/docs/Makefile.in b/docs/Makefile.in new file mode 100644 index 00000000..7ed027a8 --- /dev/null +++ b/docs/Makefile.in @@ -0,0 +1,1029 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common ChangeLog +subdir = docs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = doxygen +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in new file mode 100644 index 00000000..bf9b0ef4 --- /dev/null +++ b/docs/doxygen/Doxyfile.in @@ -0,0 +1,1590 @@ +# Doxyfile 1.5.7.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "GNU Radio @VERSION@ C++ API" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 4 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= NO + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text " + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @top_srcdir@ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.h \ + *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = @abs_top_builddir@/docs/doxygen/html \ + @abs_top_builddir@/docs/doxygen/xml \ + @abs_top_builddir@/docs/doxygen/xml-swig \ + @abs_top_builddir@/docs/doxygen/other/doxypy.py \ + @abs_top_builddir@/dtools \ + @abs_top_builddir@/gcell/ibm \ + @abs_top_builddir@/gnuradio-core/src/lib/bug_work_around_6.cc \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/assembly.h \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_all.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_fir_XXX.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_fir_filter_XXX.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig_generic.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_fir_util.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_freq_xlating_fir_filter_XXX.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_interp_fir_filter_XXX.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_gr_rational_resampler_base_XXX.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/generate_utils.py \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/gr_altivec.h \ + @abs_top_builddir@/gnuradio-core/src/lib/filter/sse_debug.h \ + @abs_top_builddir@/gnuradio-core/src/lib/gengen/generate_all.py \ + @abs_top_builddir@/gnuradio-core/src/lib/gengen/generate_common.py \ + @abs_top_builddir@/gnuradio-core/src/lib/missing/bug_work_around_8.cc \ + @abs_top_builddir@/gnuradio-core/src/lib/missing/getopt.h \ + @abs_top_builddir@/gnuradio-core/src/lib/runtime/gr_error_handler.cc \ + @abs_top_builddir@/gnuradio-core/src/lib/swig \ + @abs_top_builddir@/gnuradio-core/src/python/bin \ + @abs_top_builddir@/gnuradio-core/src/python/build_utils.py \ + @abs_top_builddir@/gnuradio-core/src/python/build_utils_codes.py \ + @abs_top_builddir@/gnuradio-core/src/python/gnuradio/gr/gr_threading.py \ + @abs_top_builddir@/gnuradio-core/src/python/gnuradio/gr/gr_threading_23.py \ + @abs_top_builddir@/gnuradio-core/src/python/gnuradio/gr/gr_threading_24.py \ + @abs_top_builddir@/gnuradio-core/src/tests \ + @abs_top_builddir@/gnuradio-core/src/utils \ + @abs_top_builddir@/gnuradio-examples/python/apps/hf_radio/output.py \ + @abs_top_builddir@/gnuradio-examples/python/apps/hf_radio/ui.py \ + @abs_top_builddir@/gr-atsc/src/lib/atsc.cc \ + @abs_top_builddir@/gr-atsc/src/lib/atsc.py \ + @abs_top_builddir@/gr-atsc/src/lib/gen_encoder.py \ + @abs_top_builddir@/gr-atsc/src/python \ + @abs_top_builddir@/gr-atsc/src/python \ + @abs_top_builddir@/gr-audio-alsa/src/audio-alsa.py \ + @abs_top_builddir@/gr-audio-oss/src/audio_oss.py \ + @abs_top_builddir@/gr-audio-osx/src/test_audio_loop.py \ + @abs_top_builddir@/gr-cvsd-vocoder/src/lib/cvsd_vocoder.py \ + @abs_top_builddir@/gr-cvsd-vocoder/src/python/encdec.py \ + @abs_top_builddir@/gr-gsm-fr-vocoder/src/lib/gsm \ + @abs_top_builddir@/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.py \ + @abs_top_builddir@/gr-gsm-fr-vocoder/src/python/encdec.py \ + @abs_top_builddir@/gr-howto-write-a-block \ + @abs_top_builddir@/gr-msdd6000/src/msdd.py \ + @abs_top_builddir@/gr-pager/src/pager_swig.py \ + @abs_top_builddir@/gr-qtgui \ + @abs_top_builddir@/gr-radar-mono/src/python/usrp_radar_mono.py \ + @abs_top_builddir@/gr-radio-astronomy/src/lib/ra.py \ + @abs_top_builddir@/gr-radio-astronomy/src/python \ + @abs_top_builddir@/gr-sounder/src/python/usrp_sounder.py \ + @abs_top_builddir@/gr-trellis/doc \ + @abs_top_builddir@/gr-trellis/src/lib/generate_all.py \ + @abs_top_builddir@/gr-trellis/src/lib/generate_trellis.py \ + @abs_top_builddir@/gr-trellis/src/lib/trellis.py \ + @abs_top_builddir@/gr-usrp/src/usrp1.py \ + @abs_top_builddir@/gr-usrp2/src/usrp2.py \ + @abs_top_builddir@/gr-video-sdl/src/video_sdl.py \ + @abs_top_builddir@/gr-wxgui/src/python \ + @abs_top_builddir@/grc \ + @abs_top_builddir@/omnithread/mach.cc \ + @abs_top_builddir@/omnithread/nt.cc \ + @abs_top_builddir@/usrp/doc \ + @abs_top_builddir@/usrp/firmware \ + @abs_top_builddir@/usrp/fpga \ + @abs_top_builddir@/usrp/host/apps \ + @abs_top_builddir@/usrp/host/apps-inband \ + @abs_top_builddir@/usrp/host/lib/inband \ + @abs_top_builddir@/usrp/host/lib/legacy/ad9862.h \ + @abs_top_builddir@/usrp/host/lib/legacy/check_data.py \ + @abs_top_builddir@/usrp/host/lib/legacy/circular_buffer.h \ + @abs_top_builddir@/usrp/host/lib/legacy/circular_linked_list.h \ + @abs_top_builddir@/usrp/host/lib/legacy/db_wbx.h \ + @abs_top_builddir@/usrp/host/lib/legacy/db_wbx.cc \ + @abs_top_builddir@/usrp/host/lib/legacy/dump_data.py \ + @abs_top_builddir@/usrp/host/lib/legacy/gen_usrp_dbid.py \ + @abs_top_builddir@/usrp/host/lib/legacy/usrp_dbid.py \ + @abs_top_builddir@/usrp/host/misc \ + @abs_top_builddir@/usrp/host/swig \ + @abs_top_builddir@/usrp2/firmware \ + @abs_top_builddir@/usrp2/fpga + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = */.deps/* \ + */.libs/* \ + */.svn/* \ + */CVS/* \ + */__init__.py \ + */gr-atsc/src/lib/Gr* \ + */moc_*.cc \ + */omnithread/ot_* \ + */qa_*.cc \ + */qa_*.h \ + */qa_*.py + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = ad9862 \ + numpy \ + usrpm \ + *swig* \ + *Swig* \ + *my_top_block* \ + *my_graph* \ + *app_top_block* \ + *am_rx_graph* \ + *_queue_watcher_thread* \ + *parse* \ + *MyFrame* \ + *MyApp* \ + *PyObject* \ + *wfm_rx_block* \ + *_sptr* \ + *debug* \ + *wfm_rx_sca_block* \ + *tv_rx_block* \ + *wxapt_rx_block* \ + *example_signal* + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = *.py=@top_srcdir@/gnuradio-core/doc/other/doxypy.py + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = @enable_html_docs@ + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = YES + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# Qt Help Project / Namespace. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# Qt Help Project / Virtual Folders. + +QHP_VIRTUAL_FOLDER = doc + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file . + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = YES + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 180 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = @enable_latex_docs@ + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = letter + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = @enable_xml_docs@ + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = @HAVE_DOT@ + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/docs/doxygen/Makefile.am b/docs/doxygen/Makefile.am new file mode 100644 index 00000000..3a67fb6d --- /dev/null +++ b/docs/doxygen/Makefile.am @@ -0,0 +1,51 @@ +# +# Copyright 2001,2005,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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = other xml-swig + +dist_gr_doc_DATA = \ + $(top_srcdir)/README \ + $(top_srcdir)/README.hacking + +all-local: prep @generate_docs@ +doc: docs # alias + +docs: prep html/index.html +html/index.html: + @DOXYGEN@ + +prep: + $(MKDIR_P) html + $(MKDIR_P) xml + +install-data-local: + $(MKDIR_P) $(DESTDIR)$(gr_docdir) + cp -r html $(DESTDIR)$(gr_docdir) + cp -r xml $(DESTDIR)$(gr_docdir) + +uninstall-local: + $(RM) -fr $(DESTDIR)$(gr_docdir)/html + $(RM) -fr $(DESTDIR)$(gr_docdir)/xml + +clean-local: + $(RM) -fr latex html man xml diff --git a/docs/doxygen/Makefile.in b/docs/doxygen/Makefile.in new file mode 100644 index 00000000..aecd35ea --- /dev/null +++ b/docs/doxygen/Makefile.in @@ -0,0 +1,1092 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2001,2005,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_gr_doc_DATA) $(srcdir)/Doxyfile.in \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = docs/doxygen +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = Doxyfile +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(gr_docdir)" +dist_gr_docDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_gr_doc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = other xml-swig +dist_gr_doc_DATA = \ + $(top_srcdir)/README \ + $(top_srcdir)/README.hacking + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/doxygen/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/doxygen/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_gr_docDATA: $(dist_gr_doc_DATA) + @$(NORMAL_INSTALL) + test -z "$(gr_docdir)" || $(MKDIR_P) "$(DESTDIR)$(gr_docdir)" + @list='$(dist_gr_doc_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_gr_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(gr_docdir)/$$f'"; \ + $(dist_gr_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(gr_docdir)/$$f"; \ + done + +uninstall-dist_gr_docDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_gr_doc_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gr_docdir)/$$f'"; \ + rm -f "$(DESTDIR)$(gr_docdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) all-local +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(gr_docdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-data-local install-dist_gr_docDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_gr_docDATA uninstall-local + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist-hook \ + distclean distclean-generic distclean-libtool distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-data-local \ + install-dist_gr_docDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-dist_gr_docDATA uninstall-local + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +all-local: prep @generate_docs@ +doc: docs # alias + +docs: prep html/index.html +html/index.html: + @DOXYGEN@ + +prep: + $(MKDIR_P) html + $(MKDIR_P) xml + +install-data-local: + $(MKDIR_P) $(DESTDIR)$(gr_docdir) + cp -r html $(DESTDIR)$(gr_docdir) + cp -r xml $(DESTDIR)$(gr_docdir) + +uninstall-local: + $(RM) -fr $(DESTDIR)$(gr_docdir)/html + $(RM) -fr $(DESTDIR)$(gr_docdir)/xml + +clean-local: + $(RM) -fr latex html man xml +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/doxygen/other/Makefile.am b/docs/doxygen/other/Makefile.am new file mode 100644 index 00000000..5e05d5d3 --- /dev/null +++ b/docs/doxygen/other/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright 2001,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + doxypy.py \ + group_defs.dox \ + omnithread.html \ + omnithread.pdf \ + omnithread.ps \ + shared_ptr_docstub.h \ + tv-channel-frequencies \ + vector_docstub.h diff --git a/docs/doxygen/other/Makefile.in b/docs/doxygen/other/Makefile.in new file mode 100644 index 00000000..b33e8713 --- /dev/null +++ b/docs/doxygen/other/Makefile.in @@ -0,0 +1,882 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2001,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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = docs/doxygen/other +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + doxypy.py \ + group_defs.dox \ + omnithread.html \ + omnithread.pdf \ + omnithread.ps \ + shared_ptr_docstub.h \ + tv-channel-frequencies \ + vector_docstub.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/doxygen/other/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/doxygen/other/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/doxygen/other/doxypy.py b/docs/doxygen/other/doxypy.py new file mode 100755 index 00000000..82fdb6be --- /dev/null +++ b/docs/doxygen/other/doxypy.py @@ -0,0 +1,414 @@ +#!/usr/bin/env python + +__applicationName__ = "doxypy" +__blurb__ = """ +doxypy is an input filter for Doxygen. It preprocesses python +files so that docstrings of classes and functions are reformatted +into Doxygen-conform documentation blocks. +""" + +__doc__ = __blurb__ + \ +""" +In order to make Doxygen preprocess files through doxypy, simply +add the following lines to your Doxyfile: + FILTER_SOURCE_FILES = YES + INPUT_FILTER = "python /path/to/doxypy.py" +""" + +__version__ = "0.4.1" +__date__ = "5th December 2008" +__website__ = "http://code.foosel.org/doxypy" + +__author__ = ( + "Philippe 'demod' Neumann (doxypy at demod dot org)", + "Gina 'foosel' Haeussge (gina at foosel dot net)" +) + +__licenseName__ = "GPL v2" +__license__ = """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 of the License, 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 program. If not, see . +""" + +import sys +import re + +from optparse import OptionParser, OptionGroup + +class FSM(object): + """Implements a finite state machine. + + Transitions are given as 4-tuples, consisting of an origin state, a target + state, a condition for the transition (given as a reference to a function + which gets called with a given piece of input) and a pointer to a function + to be called upon the execution of the given transition. + """ + + """ + @var transitions holds the transitions + @var current_state holds the current state + @var current_input holds the current input + @var current_transition hold the currently active transition + """ + + def __init__(self, start_state=None, transitions=[]): + self.transitions = transitions + self.current_state = start_state + self.current_input = None + self.current_transition = None + + def setStartState(self, state): + self.current_state = state + + def addTransition(self, from_state, to_state, condition, callback): + self.transitions.append([from_state, to_state, condition, callback]) + + def makeTransition(self, input): + """ Makes a transition based on the given input. + + @param input input to parse by the FSM + """ + for transition in self.transitions: + [from_state, to_state, condition, callback] = transition + if from_state == self.current_state: + match = condition(input) + if match: + self.current_state = to_state + self.current_input = input + self.current_transition = transition + if options.debug: + print >>sys.stderr, "# FSM: executing (%s -> %s) for line '%s'" % (from_state, to_state, input) + callback(match) + return + +class Doxypy(object): + def __init__(self): + string_prefixes = "[uU]?[rR]?" + + self.start_single_comment_re = re.compile("^\s*%s(''')" % string_prefixes) + self.end_single_comment_re = re.compile("(''')\s*$") + + self.start_double_comment_re = re.compile("^\s*%s(\"\"\")" % string_prefixes) + self.end_double_comment_re = re.compile("(\"\"\")\s*$") + + self.single_comment_re = re.compile("^\s*%s(''').*(''')\s*$" % string_prefixes) + self.double_comment_re = re.compile("^\s*%s(\"\"\").*(\"\"\")\s*$" % string_prefixes) + + self.defclass_re = re.compile("^(\s*)(def .+:|class .+:)") + self.empty_re = re.compile("^\s*$") + self.hashline_re = re.compile("^\s*#.*$") + self.importline_re = re.compile("^\s*(import |from .+ import)") + + self.multiline_defclass_start_re = re.compile("^(\s*)(def|class)(\s.*)?$") + self.multiline_defclass_end_re = re.compile(":\s*$") + + ## Transition list format + # ["FROM", "TO", condition, action] + transitions = [ + ### FILEHEAD + + # single line comments + ["FILEHEAD", "FILEHEAD", self.single_comment_re.search, self.appendCommentLine], + ["FILEHEAD", "FILEHEAD", self.double_comment_re.search, self.appendCommentLine], + + # multiline comments + ["FILEHEAD", "FILEHEAD_COMMENT_SINGLE", self.start_single_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD", self.end_single_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD_COMMENT_SINGLE", self.catchall, self.appendCommentLine], + ["FILEHEAD", "FILEHEAD_COMMENT_DOUBLE", self.start_double_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD", self.end_double_comment_re.search, self.appendCommentLine], + ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD_COMMENT_DOUBLE", self.catchall, self.appendCommentLine], + + # other lines + ["FILEHEAD", "FILEHEAD", self.empty_re.search, self.appendFileheadLine], + ["FILEHEAD", "FILEHEAD", self.hashline_re.search, self.appendFileheadLine], + ["FILEHEAD", "FILEHEAD", self.importline_re.search, self.appendFileheadLine], + ["FILEHEAD", "DEFCLASS", self.defclass_re.search, self.resetCommentSearch], + ["FILEHEAD", "DEFCLASS_MULTI", self.multiline_defclass_start_re.search, self.resetCommentSearch], + ["FILEHEAD", "DEFCLASS_BODY", self.catchall, self.appendFileheadLine], + + ### DEFCLASS + + # single line comments + ["DEFCLASS", "DEFCLASS_BODY", self.single_comment_re.search, self.appendCommentLine], + ["DEFCLASS", "DEFCLASS_BODY", self.double_comment_re.search, self.appendCommentLine], + + # multiline comments + ["DEFCLASS", "COMMENT_SINGLE", self.start_single_comment_re.search, self.appendCommentLine], + ["COMMENT_SINGLE", "DEFCLASS_BODY", self.end_single_comment_re.search, self.appendCommentLine], + ["COMMENT_SINGLE", "COMMENT_SINGLE", self.catchall, self.appendCommentLine], + ["DEFCLASS", "COMMENT_DOUBLE", self.start_double_comment_re.search, self.appendCommentLine], + ["COMMENT_DOUBLE", "DEFCLASS_BODY", self.end_double_comment_re.search, self.appendCommentLine], + ["COMMENT_DOUBLE", "COMMENT_DOUBLE", self.catchall, self.appendCommentLine], + + # other lines + ["DEFCLASS", "DEFCLASS", self.empty_re.search, self.appendDefclassLine], + ["DEFCLASS", "DEFCLASS", self.defclass_re.search, self.resetCommentSearch], + ["DEFCLASS", "DEFCLASS_MULTI", self.multiline_defclass_start_re.search, self.resetCommentSearch], + ["DEFCLASS", "DEFCLASS_BODY", self.catchall, self.stopCommentSearch], + + ### DEFCLASS_BODY + + ["DEFCLASS_BODY", "DEFCLASS", self.defclass_re.search, self.startCommentSearch], + ["DEFCLASS_BODY", "DEFCLASS_MULTI", self.multiline_defclass_start_re.search, self.startCommentSearch], + ["DEFCLASS_BODY", "DEFCLASS_BODY", self.catchall, self.appendNormalLine], + + ### DEFCLASS_MULTI + ["DEFCLASS_MULTI", "DEFCLASS", self.multiline_defclass_end_re.search, self.appendDefclassLine], + ["DEFCLASS_MULTI", "DEFCLASS_MULTI", self.catchall, self.appendDefclassLine], + ] + + self.fsm = FSM("FILEHEAD", transitions) + self.outstream = sys.stdout + + self.output = [] + self.comment = [] + self.filehead = [] + self.defclass = [] + self.indent = "" + + def __closeComment(self): + """Appends any open comment block and triggering block to the output.""" + + if options.autobrief: + if len(self.comment) == 1 \ + or (len(self.comment) > 2 and self.comment[1].strip() == ''): + self.comment[0] = self.__docstringSummaryToBrief(self.comment[0]) + + if self.comment: + block = self.makeCommentBlock() + self.output.extend(block) + + if self.defclass: + self.output.extend(self.defclass) + + def __docstringSummaryToBrief(self, line): + """Adds \\brief to the docstrings summary line. + + A \\brief is prepended, provided no other doxygen command is at the + start of the line. + """ + stripped = line.strip() + if stripped and not stripped[0] in ('@', '\\'): + return "\\brief " + line + else: + return line + + def __flushBuffer(self): + """Flushes the current outputbuffer to the outstream.""" + if self.output: + try: + if options.debug: + print >>sys.stderr, "# OUTPUT: ", self.output + print >>self.outstream, "\n".join(self.output) + self.outstream.flush() + except IOError: + # Fix for FS#33. Catches "broken pipe" when doxygen closes + # stdout prematurely upon usage of INPUT_FILTER, INLINE_SOURCES + # and FILTER_SOURCE_FILES. + pass + self.output = [] + + def catchall(self, input): + """The catchall-condition, always returns true.""" + return True + + def resetCommentSearch(self, match): + """Restarts a new comment search for a different triggering line. + + Closes the current commentblock and starts a new comment search. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: resetCommentSearch" + self.__closeComment() + self.startCommentSearch(match) + + def startCommentSearch(self, match): + """Starts a new comment search. + + Saves the triggering line, resets the current comment and saves + the current indentation. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: startCommentSearch" + self.defclass = [self.fsm.current_input] + self.comment = [] + self.indent = match.group(1) + + def stopCommentSearch(self, match): + """Stops a comment search. + + Closes the current commentblock, resets the triggering line and + appends the current line to the output. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: stopCommentSearch" + self.__closeComment() + + self.defclass = [] + self.output.append(self.fsm.current_input) + + def appendFileheadLine(self, match): + """Appends a line in the FILEHEAD state. + + Closes the open comment block, resets it and appends the current line. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: appendFileheadLine" + self.__closeComment() + self.comment = [] + self.output.append(self.fsm.current_input) + + def appendCommentLine(self, match): + """Appends a comment line. + + The comment delimiter is removed from multiline start and ends as + well as singleline comments. + """ + if options.debug: + print >>sys.stderr, "# CALLBACK: appendCommentLine" + (from_state, to_state, condition, callback) = self.fsm.current_transition + + # single line comment + if (from_state == "DEFCLASS" and to_state == "DEFCLASS_BODY") \ + or (from_state == "FILEHEAD" and to_state == "FILEHEAD"): + # remove comment delimiter from begin and end of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):line.rfind(activeCommentDelim)]) + + if (to_state == "DEFCLASS_BODY"): + self.__closeComment() + self.defclass = [] + # multiline start + elif from_state == "DEFCLASS" or from_state == "FILEHEAD": + # remove comment delimiter from begin of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):]) + # multiline end + elif to_state == "DEFCLASS_BODY" or to_state == "FILEHEAD": + # remove comment delimiter from end of the line + activeCommentDelim = match.group(1) + line = self.fsm.current_input + self.comment.append(line[0:line.rfind(activeCommentDelim)]) + if (to_state == "DEFCLASS_BODY"): + self.__closeComment() + self.defclass = [] + # in multiline comment + else: + # just append the comment line + self.comment.append(self.fsm.current_input) + + def appendNormalLine(self, match): + """Appends a line to the output.""" + if options.debug: + print >>sys.stderr, "# CALLBACK: appendNormalLine" + self.output.append(self.fsm.current_input) + + def appendDefclassLine(self, match): + """Appends a line to the triggering block.""" + if options.debug: + print >>sys.stderr, "# CALLBACK: appendDefclassLine" + self.defclass.append(self.fsm.current_input) + + def makeCommentBlock(self): + """Indents the current comment block with respect to the current + indentation level. + + @returns a list of indented comment lines + """ + doxyStart = "##" + commentLines = self.comment + + commentLines = map(lambda x: "%s# %s" % (self.indent, x), commentLines) + l = [self.indent + doxyStart] + l.extend(commentLines) + + return l + + def parse(self, input): + """Parses a python file given as input string and returns the doxygen- + compatible representation. + + @param input the python code to parse + @returns the modified python code + """ + lines = input.split("\n") + + for line in lines: + self.fsm.makeTransition(line) + + if self.fsm.current_state == "DEFCLASS": + self.__closeComment() + + return "\n".join(self.output) + + def parseFile(self, filename): + """Parses a python file given as input string and returns the doxygen- + compatible representation. + + @param input the python code to parse + @returns the modified python code + """ + f = open(filename, 'r') + + for line in f: + self.parseLine(line.rstrip('\r\n')) + if self.fsm.current_state == "DEFCLASS": + self.__closeComment() + self.__flushBuffer() + f.close() + + def parseLine(self, line): + """Parse one line of python and flush the resulting output to the + outstream. + + @param line the python code line to parse + """ + self.fsm.makeTransition(line) + self.__flushBuffer() + +def optParse(): + """Parses commandline options.""" + parser = OptionParser(prog=__applicationName__, version="%prog " + __version__) + + parser.set_usage("%prog [options] filename") + parser.add_option("--autobrief", + action="store_true", dest="autobrief", + help="use the docstring summary line as \\brief description" + ) + parser.add_option("--debug", + action="store_true", dest="debug", + help="enable debug output on stderr" + ) + + ## parse options + global options + (options, filename) = parser.parse_args() + + if not filename: + print >>sys.stderr, "No filename given." + sys.exit(-1) + + return filename[0] + +def main(): + """Starts the parser on the file given by the filename as the first + argument on the commandline. + """ + filename = optParse() + fsm = Doxypy() + fsm.parseFile(filename) + +if __name__ == "__main__": + main() diff --git a/docs/doxygen/other/group_defs.dox b/docs/doxygen/other/group_defs.dox new file mode 100644 index 00000000..6f2e1ac7 --- /dev/null +++ b/docs/doxygen/other/group_defs.dox @@ -0,0 +1,77 @@ +/*! + * \defgroup block GNU Radio C++ Signal Processing Blocks + * \brief All C++ blocks that can be used in GR graphs are listed here or in + * the subcategories below. + * + * Sorry, at this time the Python hierarchical blocks are not included + * in this index. + * @{ + */ + +/*! \defgroup container_blk Top Block and Hierarchical Block Base Classes */ +/*! \defgroup source_blk Signal Sources */ +/*! \defgroup sink_blk Signal Sinks */ +/*! \defgroup filter_blk Filters */ +/*! \defgroup math_blk Mathematics */ +/*! \defgroup modulation_blk Signal Modulation */ +/*! \defgroup demodulation_blk Signal Demodulation */ +/*! \defgroup coding_blk Information Coding and Decoding*/ +/*! \defgroup sync_blk Synchronization */ +/*! \defgroup eq_blk Equalization */ +/*! \defgroup converter_blk Type Conversions */ +/*! \defgroup level_blk Signal Level Control (AGC) */ +/*! \defgroup dft_blk Fourier Transform */ +/*! \defgroup wavelet_blk Wavelet Transform */ +/*! \defgroup ofdm_blk OFDM Blocks */ +/*! \defgroup pager_blk Pager Blocks */ +/*! \defgroup misc_blk Miscellaneous Blocks */ +/*! \defgroup slicedice_blk Slicing and Dicing Streams */ +/*! \defgroup vocoder_blk Voice Encoders and Decoders */ + +/*! + * \defgroup base_blk Base classes for GR Blocks + * \brief All C++ blocks are derived from these base classes + */ + + +/*! @} */ + +/*! \defgroup filter_design Digital Filter Design */ +/*! \defgroup misc Miscellaneous */ +/*! \defgroup internal Implementation Details */ + +/*! + * \defgroup applications Applications + * These are some applications build using gnuradio... + * @{ + */ + +/*! + * \defgroup atsc ATSC + * ATSC Applications... + */ + +/*! + * \defgroup radar Radar + * Radar Applications... + */ + +/*! + * \defgroup pager Pager + * Pager Applications + */ + +/*! @} */ + +/*! \defgroup usrp USRP */ +/*! \defgroup usrp2 USRP2 */ + +/*! + * \defgroup gcell gcell: Cell Broadband Engine SPE Scheduler & RPC Mechanism + * + * For additional information please see the + * gcell wiki page + * and gcell-sdrf-2008.pdf. + */ + +/*! \defgroup hardware Misc Hardware Control */ diff --git a/gnuradio-core/doc/other/omnithread.html b/docs/doxygen/other/omnithread.html similarity index 100% rename from gnuradio-core/doc/other/omnithread.html rename to docs/doxygen/other/omnithread.html diff --git a/gnuradio-core/doc/other/omnithread.pdf b/docs/doxygen/other/omnithread.pdf similarity index 100% rename from gnuradio-core/doc/other/omnithread.pdf rename to docs/doxygen/other/omnithread.pdf diff --git a/gnuradio-core/doc/other/omnithread.ps b/docs/doxygen/other/omnithread.ps similarity index 100% rename from gnuradio-core/doc/other/omnithread.ps rename to docs/doxygen/other/omnithread.ps diff --git a/gnuradio-core/doc/other/shared_ptr_docstub.h b/docs/doxygen/other/shared_ptr_docstub.h similarity index 100% rename from gnuradio-core/doc/other/shared_ptr_docstub.h rename to docs/doxygen/other/shared_ptr_docstub.h diff --git a/gnuradio-core/doc/other/tv-channel-frequencies b/docs/doxygen/other/tv-channel-frequencies similarity index 100% rename from gnuradio-core/doc/other/tv-channel-frequencies rename to docs/doxygen/other/tv-channel-frequencies diff --git a/gnuradio-core/doc/other/vector_docstub.h b/docs/doxygen/other/vector_docstub.h similarity index 100% rename from gnuradio-core/doc/other/vector_docstub.h rename to docs/doxygen/other/vector_docstub.h diff --git a/gnuradio-core/doc/xml/Makefile.am b/docs/doxygen/xml-swig/Makefile.am similarity index 100% rename from gnuradio-core/doc/xml/Makefile.am rename to docs/doxygen/xml-swig/Makefile.am diff --git a/docs/doxygen/xml-swig/Makefile.in b/docs/doxygen/xml-swig/Makefile.in new file mode 100644 index 00000000..13afdf1f --- /dev/null +++ b/docs/doxygen/xml-swig/Makefile.in @@ -0,0 +1,740 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2005 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = docs/doxygen/xml-swig +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +EXTRA_DIST = README doxy2swig.py swig.xsl +CLEANFILES = *.xml combine.xslt compound.xsd index.xsd +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/doxygen/xml-swig/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/doxygen/xml-swig/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/doc/xml/README b/docs/doxygen/xml-swig/README similarity index 100% rename from gnuradio-core/doc/xml/README rename to docs/doxygen/xml-swig/README diff --git a/gnuradio-core/doc/xml/doxy2swig.py b/docs/doxygen/xml-swig/doxy2swig.py similarity index 100% rename from gnuradio-core/doc/xml/doxy2swig.py rename to docs/doxygen/xml-swig/doxy2swig.py diff --git a/gnuradio-core/doc/xml/swig.xsl b/docs/doxygen/xml-swig/swig.xsl similarity index 100% rename from gnuradio-core/doc/xml/swig.xsl rename to docs/doxygen/xml-swig/swig.xsl diff --git a/gcell/Makefile.am b/gcell/Makefile.am new file mode 100644 index 00000000..fe222e5f --- /dev/null +++ b/gcell/Makefile.am @@ -0,0 +1,28 @@ +# +# Copyright 2007,2008 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = include lib apps ibm + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = \ + gcell.pc \ + gcell_spu.pc diff --git a/gcell/Makefile.in b/gcell/Makefile.in new file mode 100644 index 00000000..c50f334b --- /dev/null +++ b/gcell/Makefile.in @@ -0,0 +1,1070 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gcell.pc.in $(srcdir)/gcell_spu.pc.in \ + $(top_srcdir)/Makefile.common +subdir = gcell +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gcell.pc gcell_spu.pc +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = include lib apps ibm +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = \ + gcell.pc \ + gcell_spu.pc + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gcell.pc: $(top_builddir)/config.status $(srcdir)/gcell.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +gcell_spu.pc: $(top_builddir)/config.status $(srcdir)/gcell_spu.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/apps/Makefile.am b/gcell/apps/Makefile.am new file mode 100644 index 00000000..7cf9122a --- /dev/null +++ b/gcell/apps/Makefile.am @@ -0,0 +1,51 @@ +# +# Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = spu . + +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) \ + $(GCELL_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + + +GCELL_QA_LA = $(top_builddir)/gcell/lib/libgcell-qa.la + +TESTS = test_all + + +bin_PROGRAMS = \ + test_all \ + benchmark_dma \ + benchmark_nop \ + benchmark_roundtrip + + +test_all_SOURCES = test_all.cc +test_all_LDADD = $(GCELL_QA_LA) $(GCELL_LA) + +benchmark_dma_SOURCES = benchmark_dma.cc +benchmark_dma_LDADD = spu/benchmark_procs $(GCELL_LA) + +benchmark_nop_SOURCES = benchmark_nop.cc +benchmark_nop_LDADD = spu/benchmark_procs $(GCELL_LA) + +benchmark_roundtrip_SOURCES = benchmark_roundtrip.cc +benchmark_roundtrip_LDADD = spu/benchmark_procs $(GCELL_LA) diff --git a/gcell/apps/Makefile.in b/gcell/apps/Makefile.in new file mode 100644 index 00000000..e4eb19d2 --- /dev/null +++ b/gcell/apps/Makefile.in @@ -0,0 +1,1245 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +TESTS = test_all$(EXEEXT) +bin_PROGRAMS = test_all$(EXEEXT) benchmark_dma$(EXEEXT) \ + benchmark_nop$(EXEEXT) benchmark_roundtrip$(EXEEXT) +subdir = gcell/apps +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_benchmark_dma_OBJECTS = benchmark_dma.$(OBJEXT) +benchmark_dma_OBJECTS = $(am_benchmark_dma_OBJECTS) +am__DEPENDENCIES_1 = +benchmark_dma_DEPENDENCIES = spu/benchmark_procs $(am__DEPENDENCIES_1) +am_benchmark_nop_OBJECTS = benchmark_nop.$(OBJEXT) +benchmark_nop_OBJECTS = $(am_benchmark_nop_OBJECTS) +benchmark_nop_DEPENDENCIES = spu/benchmark_procs $(am__DEPENDENCIES_1) +am_benchmark_roundtrip_OBJECTS = benchmark_roundtrip.$(OBJEXT) +benchmark_roundtrip_OBJECTS = $(am_benchmark_roundtrip_OBJECTS) +benchmark_roundtrip_DEPENDENCIES = spu/benchmark_procs \ + $(am__DEPENDENCIES_1) +am_test_all_OBJECTS = test_all.$(OBJEXT) +test_all_OBJECTS = $(am_test_all_OBJECTS) +test_all_DEPENDENCIES = $(GCELL_QA_LA) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(benchmark_dma_SOURCES) $(benchmark_nop_SOURCES) \ + $(benchmark_roundtrip_SOURCES) $(test_all_SOURCES) +DIST_SOURCES = $(benchmark_dma_SOURCES) $(benchmark_nop_SOURCES) \ + $(benchmark_roundtrip_SOURCES) $(test_all_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = spu . +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) \ + $(GCELL_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + +GCELL_QA_LA = $(top_builddir)/gcell/lib/libgcell-qa.la +test_all_SOURCES = test_all.cc +test_all_LDADD = $(GCELL_QA_LA) $(GCELL_LA) +benchmark_dma_SOURCES = benchmark_dma.cc +benchmark_dma_LDADD = spu/benchmark_procs $(GCELL_LA) +benchmark_nop_SOURCES = benchmark_nop.cc +benchmark_nop_LDADD = spu/benchmark_procs $(GCELL_LA) +benchmark_roundtrip_SOURCES = benchmark_roundtrip.cc +benchmark_roundtrip_LDADD = spu/benchmark_procs $(GCELL_LA) +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/apps/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/apps/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +benchmark_dma$(EXEEXT): $(benchmark_dma_OBJECTS) $(benchmark_dma_DEPENDENCIES) + @rm -f benchmark_dma$(EXEEXT) + $(CXXLINK) $(benchmark_dma_OBJECTS) $(benchmark_dma_LDADD) $(LIBS) +benchmark_nop$(EXEEXT): $(benchmark_nop_OBJECTS) $(benchmark_nop_DEPENDENCIES) + @rm -f benchmark_nop$(EXEEXT) + $(CXXLINK) $(benchmark_nop_OBJECTS) $(benchmark_nop_LDADD) $(LIBS) +benchmark_roundtrip$(EXEEXT): $(benchmark_roundtrip_OBJECTS) $(benchmark_roundtrip_DEPENDENCIES) + @rm -f benchmark_roundtrip$(EXEEXT) + $(CXXLINK) $(benchmark_roundtrip_OBJECTS) $(benchmark_roundtrip_LDADD) $(LIBS) +test_all$(EXEEXT): $(test_all_OBJECTS) $(test_all_DEPENDENCIES) + @rm -f test_all$(EXEEXT) + $(CXXLINK) $(test_all_OBJECTS) $(test_all_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dma.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_nop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_roundtrip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_all.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-recursive +all-am: Makefile $(PROGRAMS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: install-binPROGRAMS + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-TESTS check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags ctags-recursive dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-binPROGRAMS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/apps/benchmark_dma.cc b/gcell/apps/benchmark_dma.cc new file mode 100644 index 00000000..a84defe3 --- /dev/null +++ b/gcell/apps/benchmark_dma.cc @@ -0,0 +1,273 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#if defined(HAVE_CONFIG_H) +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +// handle to embedded SPU executable that contains benchmark routines +// (The name of the variable (benchmark_procs) is the name of the spu executable.) +extern spe_program_handle_t benchmark_procs; + +static gc_proc_id_t gcp_benchmark_udelay = GCP_UNKNOWN_PROC; + +#define BENCHMARK_PUT 0x1 +#define BENCHMARK_GET 0x2 +#define BENCHMARK_GET_PUT (BENCHMARK_PUT|BENCHMARK_GET) + + +#if 0 +static bool +power_of_2_p(unsigned long x) +{ + int nbits = sizeof(x) * 8; + for (int i = 0; i < nbits; i++) + if (x == (1UL << i)) + return true; + + return false; +} +#endif + +static void +init_jd(gc_job_desc *jd, unsigned int usecs, + unsigned char *getbuf, unsigned char *putbuf, size_t buflen, + int getput_mask) +{ + jd->proc_id = gcp_benchmark_udelay; + jd->input.nargs = 1; + jd->input.arg[0].u32 = usecs; + jd->output.nargs = 0; + + switch(getput_mask & BENCHMARK_GET_PUT){ + + case BENCHMARK_GET: + jd->eaa.nargs = 1; + jd->eaa.arg[0].direction = GCJD_DMA_GET; + jd->eaa.arg[0].ea_addr = ptr_to_ea(getbuf); + jd->eaa.arg[0].get_size = buflen; + break; + + case BENCHMARK_PUT: + jd->eaa.nargs = 1; + jd->eaa.arg[0].direction = GCJD_DMA_PUT; + jd->eaa.arg[0].ea_addr = ptr_to_ea(putbuf); + jd->eaa.arg[0].put_size = buflen; + break; + + case BENCHMARK_GET_PUT: + jd->eaa.nargs = 2; + jd->eaa.arg[0].direction = GCJD_DMA_GET; + jd->eaa.arg[0].ea_addr = ptr_to_ea(getbuf); + jd->eaa.arg[0].get_size = buflen; + jd->eaa.arg[1].direction = GCJD_DMA_PUT; + jd->eaa.arg[1].ea_addr = ptr_to_ea(putbuf); + jd->eaa.arg[1].put_size = buflen; + break; + } +} + +static void +run_test(unsigned int nspes, unsigned int usecs, unsigned int dma_size, int getput_mask) +{ + static const int64_t TOTAL_SIZE_DMA = 5LL << 30; + static const int NJDS = 64; + unsigned int njobs = (unsigned int)(TOTAL_SIZE_DMA / dma_size); + //unsigned int njobs = NJDS * 16; + unsigned int nsubmitted = 0; + unsigned int ncompleted = 0; + gc_job_desc *all_jds[NJDS]; + gc_job_desc *jds[2][NJDS]; + unsigned int njds[2]; + unsigned int ci; // current index + bool done[NJDS]; + + static const unsigned int BUFSIZE = (32 << 10) * NJDS; + unsigned char *getbuf = new unsigned char[BUFSIZE]; + boost::scoped_array _getbuf(getbuf); + unsigned char *putbuf = new unsigned char[BUFSIZE]; + boost::scoped_array _putbuf(putbuf); + int gbi = 0; + + // touch all pages to force allocation now + for (unsigned int i = 0; i < BUFSIZE; i += 4096){ + getbuf[i] = 0; + putbuf[i] = 0; + } + + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&benchmark_procs); + opts.nspes = nspes; + //opts.enable_logging = true; + //opts.log2_nlog_entries = 13; + gc_job_manager_sptr mgr = gc_make_job_manager(&opts); + + if ((gcp_benchmark_udelay = mgr->lookup_proc("benchmark_udelay")) == GCP_UNKNOWN_PROC){ + fprintf(stderr, "lookup_proc: failed to find \"benchmark_udelay\"\n"); + return; + } + + // allocate and init all job descriptors + for (int i = 0; i < NJDS; i++){ + if (gbi + dma_size > BUFSIZE) + gbi = 0; + + all_jds[i] = mgr->alloc_job_desc(); + if (all_jds[i] == 0){ + fprintf(stderr, "alloc_job_desc() returned 0\n"); + return; + } + init_jd(all_jds[i], usecs, &getbuf[gbi], &putbuf[gbi], dma_size, getput_mask); + gbi += dma_size; + } + + for (int iter = 0; iter < 1; iter++){ + + omni_time t_start = omni_time::time(); + + nsubmitted = 0; + ncompleted = 0; + + ci = 0; + njds[0] = 0; + njds[1] = 0; + + // submit the first batch + for (int i = 0; i < NJDS; i++){ + if (mgr->submit_job(all_jds[i])){ + jds[ci][njds[ci]++] = all_jds[i]; + nsubmitted++; + } + else { + printf("submit_job(jds[%d]) failed, status = %d\n", + i, all_jds[i]->status); + } + } + + while (ncompleted < njobs){ + njds[ci^1] = 0; + int n = mgr->wait_jobs(njds[ci], jds[ci], done, GC_WAIT_ANY); + // printf("%2d\n", n); + if (n < 0){ + fprintf(stderr, "mgr->wait_jobs failed\n"); + break; + } + for (unsigned int i = 0; i < njds[ci]; i++){ + if (!done[i]){ // remember for next iteration + jds[ci^1][njds[ci^1]++] = jds[ci][i]; + } + else { + ncompleted++; + if (jds[ci][i]->status != JS_OK){ + printf("js_status = %d, job_id = %d, ncompleted = %d\n", + jds[ci][i]->status, jds[ci][i]->sys.job_id, ncompleted); + } + if (nsubmitted < njobs){ // submit another one + if (mgr->submit_job(jds[ci][i])){ + jds[ci^1][njds[ci^1]++] = jds[ci][i]; // remember for next iter + nsubmitted++; + } + else { + printf("submit_job(jds[%d]) failed, status = %d\n", + i, jds[ci][i]->status); + } + } + } + } + ci ^= 1; // toggle current + } + + // stop timing + omni_time t_stop = omni_time::time(); + + double delta = (t_stop - t_start).double_time(); + printf("nspes: %2d udelay: %4d elapsed_time: %7.3f dma_size: %5d dma_throughput: %7.3e\n", + mgr->nspes(), usecs, delta, dma_size, + (double) njobs * dma_size / delta * (getput_mask == BENCHMARK_GET_PUT ? 2.0 : 1.0)); + + } +} + +static void +usage() +{ + fprintf(stderr, "usage: benchmark_dma [-p] [-g] [-n ] [-u ] [-s ]\n"); + fprintf(stderr, " you must specify one or both of -p (put) and -g (get)\n"); +} + + +int +main(int argc, char **argv) +{ + unsigned int nspes = 0; + unsigned int usecs = 0; + unsigned int dma_size = 32 << 10; + int getput_mask = 0; + int ch; + + while ((ch = getopt(argc, argv, "n:u:s:pg")) != EOF){ + switch(ch){ + case 'n': + nspes = strtol(optarg, 0, 0); + break; + + case 'u': + usecs = strtol(optarg, 0, 0); + break; + + case 's': + dma_size = strtol(optarg, 0, 0); + if (dma_size == 0){ + fprintf(stderr, "-s must be > 0\n"); + return 1; + } + break; + + case 'p': + getput_mask |= BENCHMARK_PUT; + break; + + case 'g': + getput_mask |= BENCHMARK_GET; + break; + + case '?': + default: + usage(); + return 1; + } + } + + if (getput_mask == 0){ + usage(); + return 1; + } + + run_test(nspes, usecs, dma_size, getput_mask); + return 0; +} diff --git a/gcell/apps/benchmark_nop.cc b/gcell/apps/benchmark_nop.cc new file mode 100644 index 00000000..dee46c84 --- /dev/null +++ b/gcell/apps/benchmark_nop.cc @@ -0,0 +1,163 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#if defined(HAVE_CONFIG_H) +#include +#endif +#include +#include +#include +#include +#include + +// handle to embedded SPU executable that contains benchmark routines +// (The name of the variable (benchmark_procs) is the name of the spu executable.) +extern spe_program_handle_t benchmark_procs; + +static gc_proc_id_t gcp_benchmark_udelay = GCP_UNKNOWN_PROC; + +static void +init_jd(gc_job_desc *jd, unsigned int usecs) +{ + jd->proc_id = gcp_benchmark_udelay; + jd->input.nargs = 1; + jd->input.arg[0].u32 = usecs; + jd->output.nargs = 0; + jd->eaa.nargs = 0; +} + +static void +run_test(unsigned int nspes, unsigned int usecs, int njobs) +{ + static const int NJDS = 64; + int nsubmitted = 0; + int ncompleted = 0; + gc_job_desc *all_jds[NJDS]; + gc_job_desc *jds[2][NJDS]; + unsigned int njds[2]; + unsigned int ci; // current index + bool done[NJDS]; + + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&benchmark_procs); + opts.nspes = nspes; + opts.gang_schedule = true; + gc_job_manager_sptr mgr = gc_make_job_manager(&opts); + + if ((gcp_benchmark_udelay = mgr->lookup_proc("benchmark_udelay")) == GCP_UNKNOWN_PROC){ + fprintf(stderr, "lookup_proc: failed to find \"benchmark_udelay\"\n"); + return; + } + + // allocate and init all job descriptors + for (int i = 0; i < NJDS; i++){ + all_jds[i] = mgr->alloc_job_desc(); + init_jd(all_jds[i], usecs); + } + + omni_time t_start = omni_time::time(); + + ci = 0; + njds[0] = 0; + njds[1] = 0; + + // submit the first batch + for (int i = 0; i < NJDS; i++){ + if (mgr->submit_job(all_jds[i])){ + jds[ci][njds[ci]++] = all_jds[i]; + nsubmitted++; + } + else { + printf("submit_job(jds[%d]) failed, status = %d\n", + i, all_jds[i]->status); + } + } + + while (ncompleted < njobs){ + njds[ci^1] = 0; + int n = mgr->wait_jobs(njds[ci], jds[ci], done, GC_WAIT_ANY); + // printf("%2d\n", n); + if (n < 0){ + fprintf(stderr, "mgr->wait_jobs failed\n"); + break; + } + for (unsigned int i = 0; i < njds[ci]; i++){ + if (!done[i]){ // remember for next iteration + jds[ci^1][njds[ci^1]++] = jds[ci][i]; + } + else { + ncompleted++; + // printf("ncompleted = %7d\n", ncompleted); + if (nsubmitted < njobs){ // submit another one + if (mgr->submit_job(jds[ci][i])){ + jds[ci^1][njds[ci^1]++] = jds[ci][i]; // remember for next iter + nsubmitted++; + } + else { + printf("submit_job(jds[%d]) failed, status = %d\n", + i, jds[ci][i]->status); + } + } + } + } + ci ^= 1; // toggle current + } + + // stop timing + omni_time t_stop = omni_time::time(); + double delta = (t_stop - t_start).double_time(); + printf("nspes: %2d udelay: %4d elapsed_time: %7.3f njobs: %g speedup: %6.3f\n", + mgr->nspes(), usecs, delta, (double) njobs, + njobs * usecs * 1e-6 / delta); +} + +int +main(int argc, char **argv) +{ + unsigned int nspes = 0; + unsigned int usecs = 0; + int njobs = 500000; + int ch; + + while ((ch = getopt(argc, argv, "n:u:N:")) != EOF){ + switch(ch){ + case 'n': + nspes = strtol(optarg, 0, 0); + break; + + case 'u': + usecs = strtol(optarg, 0, 0); + break; + + case 'N': + njobs = strtol(optarg, 0, 0); + break; + + case '?': + default: + fprintf(stderr, "usage: benchmark_nop [-n ] [-u ] [-N ]\n"); + return 1; + } + } + + run_test(nspes, usecs, njobs); + return 0; +} diff --git a/gcell/apps/benchmark_roundtrip.cc b/gcell/apps/benchmark_roundtrip.cc new file mode 100644 index 00000000..8ba37c96 --- /dev/null +++ b/gcell/apps/benchmark_roundtrip.cc @@ -0,0 +1,240 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#if defined(HAVE_CONFIG_H) +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +// handle to embedded SPU executable that contains benchmark routines +// (The name of the variable (benchmark_procs) is the name of the spu executable.) +extern spe_program_handle_t benchmark_procs; + +static gc_proc_id_t gcp_benchmark_udelay = GCP_UNKNOWN_PROC; + +#define BENCHMARK_PUT 0x1 +#define BENCHMARK_GET 0x2 +#define BENCHMARK_GET_PUT (BENCHMARK_PUT|BENCHMARK_GET) + + +#if 0 +static bool +power_of_2_p(unsigned long x) +{ + int nbits = sizeof(x) * 8; + for (int i = 0; i < nbits; i++) + if (x == (1UL << i)) + return true; + + return false; +} +#endif + +static void +init_jd(gc_job_desc *jd, unsigned int usecs, + unsigned char *getbuf, unsigned char *putbuf, size_t buflen, + int getput_mask) +{ + jd->proc_id = gcp_benchmark_udelay; + jd->input.nargs = 1; + jd->input.arg[0].u32 = usecs; + jd->output.nargs = 0; + + switch(getput_mask & BENCHMARK_GET_PUT){ + + case BENCHMARK_GET: + jd->eaa.nargs = 1; + jd->eaa.arg[0].direction = GCJD_DMA_GET; + jd->eaa.arg[0].ea_addr = ptr_to_ea(getbuf); + jd->eaa.arg[0].get_size = buflen; + break; + + case BENCHMARK_PUT: + jd->eaa.nargs = 1; + jd->eaa.arg[0].direction = GCJD_DMA_PUT; + jd->eaa.arg[0].ea_addr = ptr_to_ea(putbuf); + jd->eaa.arg[0].put_size = buflen; + break; + + case BENCHMARK_GET_PUT: + jd->eaa.nargs = 2; + jd->eaa.arg[0].direction = GCJD_DMA_GET; + jd->eaa.arg[0].ea_addr = ptr_to_ea(getbuf); + jd->eaa.arg[0].get_size = buflen; + jd->eaa.arg[1].direction = GCJD_DMA_PUT; + jd->eaa.arg[1].ea_addr = ptr_to_ea(putbuf); + jd->eaa.arg[1].put_size = buflen; + break; + } +} + +static void +run_test(unsigned int nspes, unsigned int usecs, unsigned int dma_size, + int getput_mask, int njobs_at_once) +{ + int NJDS = njobs_at_once; + gc_job_desc *all_jds[NJDS]; + bool done[NJDS]; + + static const unsigned int BUFSIZE = (32 << 10) * NJDS; + unsigned char *getbuf = new unsigned char[BUFSIZE]; + boost::scoped_array _getbuf(getbuf); + unsigned char *putbuf = new unsigned char[BUFSIZE]; + boost::scoped_array _putbuf(putbuf); + int gbi = 0; + + // touch all pages to force allocation now + for (unsigned int i = 0; i < BUFSIZE; i += 4096){ + getbuf[i] = 0; + putbuf[i] = 0; + } + + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&benchmark_procs); + opts.nspes = nspes; + //opts.enable_logging = true; + //opts.log2_nlog_entries = 13; + gc_job_manager_sptr mgr = gc_make_job_manager(&opts); + + if ((gcp_benchmark_udelay = mgr->lookup_proc("benchmark_udelay")) == GCP_UNKNOWN_PROC){ + fprintf(stderr, "lookup_proc: failed to find \"benchmark_udelay\"\n"); + return; + } + + // allocate and init all job descriptors + for (int i = 0; i < NJDS; i++){ + if (gbi + dma_size > BUFSIZE) + gbi = 0; + + all_jds[i] = mgr->alloc_job_desc(); + if (all_jds[i] == 0){ + fprintf(stderr, "alloc_job_desc() returned 0\n"); + return; + } + init_jd(all_jds[i], usecs, &getbuf[gbi], &putbuf[gbi], dma_size, getput_mask); + gbi += dma_size; + } + + int niter = 100000; + omni_time t_start = omni_time::time(); + + for (int iter = 0; iter < niter; iter++){ + + // submit the jobs + for (int i = 0; i < NJDS; i++){ + if (!mgr->submit_job(all_jds[i])){ + printf("submit_job(jds[%d]) failed, status = %d\n", + i, all_jds[i]->status); + } + } + + int n = mgr->wait_jobs(NJDS, all_jds, done, GC_WAIT_ALL); + if (n < 0){ + fprintf(stderr, "mgr->wait_jobs failed\n"); + break; + } + if (n != NJDS){ + fprintf(stderr, "mgr->wait_jobs returned short count. Expected %d, got %d\n", + NJDS, n); + } + } + + // stop timing + omni_time t_stop = omni_time::time(); + double delta = (t_stop - t_start).double_time(); + printf("nspes: %2d udelay: %4d elapsed_time: %7.3f dma_size: %5d dma_throughput: %7.3e round_trip: %gus\n", + mgr->nspes(), usecs, delta, dma_size, + (double) NJDS * niter * dma_size / delta * (getput_mask == BENCHMARK_GET_PUT ? 2.0 : 1.0), + delta / niter * 1e6); +} + +static void +usage() +{ + fprintf(stderr, "usage: benchmark_dma [-p] [-g] [-n ] [-u ] [-s ] [-N ]\n"); + fprintf(stderr, " you must specify one or both of -p (put) and -g (get)\n"); +} + + +int +main(int argc, char **argv) +{ + unsigned int nspes = 0; + unsigned int usecs = 0; + unsigned int dma_size = 32 << 10; + int njobs_at_once = -1; + int getput_mask = 0; + int ch; + + while ((ch = getopt(argc, argv, "n:u:s:pgN:")) != EOF){ + switch(ch){ + case 'n': + nspes = strtol(optarg, 0, 0); + break; + + case 'u': + usecs = strtol(optarg, 0, 0); + break; + + case 'N': + njobs_at_once = strtol(optarg, 0, 0); + break; + + case 's': + dma_size = strtol(optarg, 0, 0); + if (dma_size == 0){ + fprintf(stderr, "-s must be > 0\n"); + return 1; + } + break; + + case 'p': + getput_mask |= BENCHMARK_PUT; + break; + + case 'g': + getput_mask |= BENCHMARK_GET; + break; + + case '?': + default: + usage(); + return 1; + } + } + + if (njobs_at_once < 0) + njobs_at_once = nspes; + + if (getput_mask == 0){ + usage(); + return 1; + } + + run_test(nspes, usecs, dma_size, getput_mask, njobs_at_once); + return 0; +} diff --git a/gcell/apps/spu/Makefile.am b/gcell/apps/spu/Makefile.am new file mode 100644 index 00000000..c07a2c39 --- /dev/null +++ b/gcell/apps/spu/Makefile.am @@ -0,0 +1,34 @@ +# +# Copyright 2008 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. +# + + +include $(top_srcdir)/Makefile.common.spu + +AM_CPPFLAGS = $(GCELL_SPU_INCLUDES) + +# SPU executables + +noinst_PROGRAMS = \ + benchmark_procs + +benchmark_procs_SOURCES = benchmark_procs.c +benchmark_procs_LDADD = $(GCELL_SPU_LA) +benchmark_procs_DEPENDENCIES = $(GCELL_SPU_LA) + diff --git a/gcell/apps/spu/Makefile.in b/gcell/apps/spu/Makefile.in new file mode 100644 index 00000000..8c5d32c3 --- /dev/null +++ b/gcell/apps/spu/Makefile.in @@ -0,0 +1,1014 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2007,2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.common.spu +noinst_PROGRAMS = benchmark_procs$(EXEEXT) +subdir = gcell/apps/spu +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_benchmark_procs_OBJECTS = benchmark_procs.$(OBJEXT) +benchmark_procs_OBJECTS = $(am_benchmark_procs_OBJECTS) +am__DEPENDENCIES_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(benchmark_procs_SOURCES) +DIST_SOURCES = $(benchmark_procs_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ + +# We're abusing automake, getting it to generate code for two +# architectures under the same tree. If you've got a better way to do +# this, please let us know +AR = spu-ar +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = spu-gcc +CCAS = spu-gcc +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = +CPP = @CPP@ + +# Need to override user stuff even though it gives a warning. +# (Otherwise these contain PPE related info.) +CPPFLAGS = +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = spu-ld +LDFLAGS = +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = spu-ranlib +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = -O3 -g --std=gnu99 -fstrict-aliasing $(C_WARNINGS) +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +C_WARNINGS = \ + -Wall -Wextra -Wstrict-prototypes -Werror-implicit-function-declaration + +AM_CPPFLAGS = $(GCELL_SPU_INCLUDES) +benchmark_procs_SOURCES = benchmark_procs.c +benchmark_procs_LDADD = $(GCELL_SPU_LA) +benchmark_procs_DEPENDENCIES = $(GCELL_SPU_LA) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common.spu $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/apps/spu/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/apps/spu/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +benchmark_procs$(EXEEXT): $(benchmark_procs_OBJECTS) $(benchmark_procs_DEPENDENCIES) + @rm -f benchmark_procs$(EXEEXT) + $(LINK) $(benchmark_procs_OBJECTS) $(benchmark_procs_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_procs.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/apps/spu/benchmark_procs.c b/gcell/apps/spu/benchmark_procs.c new file mode 100644 index 00000000..fbc70334 --- /dev/null +++ b/gcell/apps/spu/benchmark_procs.c @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include +#include +#include + +static void +benchmark_udelay(const gc_job_direct_args_t *input, + gc_job_direct_args_t *output _UNUSED, + const gc_job_ea_args_t *eaa _UNUSED) +{ + gc_udelay(input->arg[0].u32); +} + +GC_DECLARE_PROC(benchmark_udelay, "benchmark_udelay"); + + + +static void +benchmark_put_zeros(const gc_job_direct_args_t *input _UNUSED, + gc_job_direct_args_t *output _UNUSED, + const gc_job_ea_args_t *eaa) +{ + for (unsigned int i = 0; i < eaa->nargs; i++){ + if (eaa->arg[i].direction == GCJD_DMA_PUT) + memset(eaa->arg[i].ls_addr, 0, eaa->arg[i].put_size); + } +} + +GC_DECLARE_PROC(benchmark_put_zeros, "benchmark_put_zeros"); + + +static void +benchmark_copy(const gc_job_direct_args_t *input _UNUSED, + gc_job_direct_args_t *output, + const gc_job_ea_args_t *eaa) +{ + if (eaa->nargs != 2 + || eaa->arg[0].direction != GCJD_DMA_PUT + || eaa->arg[1].direction != GCJD_DMA_GET){ + output->arg[0].s32 = -1; + return; + } + + output->arg[0].s32 = 0; + unsigned n = eaa->arg[0].put_size; + if (eaa->arg[1].get_size < n) + n = eaa->arg[1].get_size; + + memcpy(eaa->arg[0].ls_addr, eaa->arg[1].ls_addr, n); +} + +GC_DECLARE_PROC(benchmark_copy, "benchmark_copy"); diff --git a/gcell/apps/test_all.cc b/gcell/apps/test_all.cc new file mode 100644 index 00000000..9823960c --- /dev/null +++ b/gcell/apps/test_all.cc @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#include + +#include "../lib/runtime/qa_gcell_runtime.h" +#include "../lib/wrapper/qa_gcell_wrapper.h" + +int +main(int argc, char **argv) +{ + + CppUnit::TextTestRunner runner; + + runner.addTest(qa_gcell_runtime::suite()); + runner.addTest(qa_gcell_wrapper::suite()); + + bool was_successful = runner.run("", false); + + return was_successful ? 0 : 1; +} diff --git a/gcell/gcell.pc.in b/gcell/gcell.pc.in new file mode 100644 index 00000000..d88d0fb6 --- /dev/null +++ b/gcell/gcell.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +gcell_embedspu_libtool=@bindir@/gcell-embedspu-libtool + +Name: gcell +Description: The GNU Radio SPE scheduler and RPC mechanism +Requires: gnuradio-omnithread +Version: @VERSION@ +Libs: -L${libdir} -lgcell +Cflags: -I${includedir} @DEFINES@ diff --git a/gcell/gcell_spu.pc.in b/gcell/gcell_spu.pc.in new file mode 100644 index 00000000..b59043b9 --- /dev/null +++ b/gcell/gcell_spu.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@spu +includedir=@includedir@ + +Name: gcell_spu +Description: The GNU Radio SPE scheduler and RPC mechanism (SPU components) +Requires: +Version: @VERSION@ +Libs: -L${libdir} -lgcell_spu +Cflags: -I${includedir} diff --git a/gcell/ibm/Makefile.am b/gcell/ibm/Makefile.am new file mode 100644 index 00000000..8013e6a3 --- /dev/null +++ b/gcell/ibm/Makefile.am @@ -0,0 +1,98 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + ./README \ + ./sync/ppu_source/atomic_add.h \ + ./sync/ppu_source/atomic_add_return.h \ + ./sync/ppu_source/atomic_dec_and_test.h \ + ./sync/ppu_source/atomic_dec.h \ + ./sync/ppu_source/atomic_dec_if_positive.h \ + ./sync/ppu_source/atomic_dec_return.h \ + ./sync/ppu_source/atomic.h \ + ./sync/ppu_source/atomic_inc.h \ + ./sync/ppu_source/atomic_inc_return.h \ + ./sync/ppu_source/atomic_read.h \ + ./sync/ppu_source/atomic_set.h \ + ./sync/ppu_source/atomic_sub_and_test.h \ + ./sync/ppu_source/atomic_sub.h \ + ./sync/ppu_source/atomic_sub_return.h \ + ./sync/ppu_source/complete_all.h \ + ./sync/ppu_source/complete.h \ + ./sync/ppu_source/completion.h \ + ./sync/ppu_source/cond_broadcast.h \ + ./sync/ppu_source/cond.h \ + ./sync/ppu_source/cond_init.h \ + ./sync/ppu_source/cond_signal.h \ + ./sync/ppu_source/cond_wait.h \ + ./sync/ppu_source/init_completion.h \ + ./sync/ppu_source/libsync.h \ + ./sync/ppu_source/mutex.h \ + ./sync/ppu_source/mutex_init.h \ + ./sync/ppu_source/mutex_lock.h \ + ./sync/ppu_source/mutex_trylock.h \ + ./sync/ppu_source/mutex_unlock.h \ + ./sync/ppu_source/pdt_libsync_config.xml \ + ./sync/ppu_source/pdt_libsync.xml \ + ./sync/ppu_source/sync_utils.h \ + ./sync/ppu_source/trace_libsync.h \ + ./sync/ppu_source/wait_for_completion.h \ + ./sync/spu_source/atomic_add.h \ + ./sync/spu_source/atomic_add_return.h \ + ./sync/spu_source/atomic_dec_and_test.h \ + ./sync/spu_source/atomic_dec.h \ + ./sync/spu_source/atomic_dec_if_positive.h \ + ./sync/spu_source/atomic_dec_return.h \ + ./sync/spu_source/atomic.h \ + ./sync/spu_source/atomic_inc.h \ + ./sync/spu_source/atomic_inc_return.h \ + ./sync/spu_source/atomic_read.h \ + ./sync/spu_source/atomic_set.h \ + ./sync/spu_source/atomic_sub_and_test.h \ + ./sync/spu_source/atomic_sub.h \ + ./sync/spu_source/atomic_sub_return.h \ + ./sync/spu_source/complete_all.h \ + ./sync/spu_source/complete.h \ + ./sync/spu_source/completion.h \ + ./sync/spu_source/cond_broadcast.h \ + ./sync/spu_source/cond.h \ + ./sync/spu_source/cond_init.h \ + ./sync/spu_source/cond_signal.h \ + ./sync/spu_source/cond_wait.h \ + ./sync/spu_source/init_completion.h \ + ./sync/spu_source/libsync.h \ + ./sync/spu_source/mutex.h \ + ./sync/spu_source/mutex_init.h \ + ./sync/spu_source/mutex_lock.h \ + ./sync/spu_source/mutex_trylock.h \ + ./sync/spu_source/mutex_unlock.h \ + ./sync/spu_source/read_lock.h \ + ./sync/spu_source/read_trylock.h \ + ./sync/spu_source/read_unlock.h \ + ./sync/spu_source/rwlock_init.h \ + ./sync/spu_source/sync_irq.h \ + ./sync/spu_source/sync_utils.h \ + ./sync/spu_source/trace_libsync.h \ + ./sync/spu_source/wait_for_completion.h \ + ./sync/spu_source/write_lock.h \ + ./sync/spu_source/write_trylock.h \ + ./sync/spu_source/write_unlock.h diff --git a/gcell/ibm/Makefile.in b/gcell/ibm/Makefile.in new file mode 100644 index 00000000..31bcec37 --- /dev/null +++ b/gcell/ibm/Makefile.in @@ -0,0 +1,948 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gcell/ibm +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + ./README \ + ./sync/ppu_source/atomic_add.h \ + ./sync/ppu_source/atomic_add_return.h \ + ./sync/ppu_source/atomic_dec_and_test.h \ + ./sync/ppu_source/atomic_dec.h \ + ./sync/ppu_source/atomic_dec_if_positive.h \ + ./sync/ppu_source/atomic_dec_return.h \ + ./sync/ppu_source/atomic.h \ + ./sync/ppu_source/atomic_inc.h \ + ./sync/ppu_source/atomic_inc_return.h \ + ./sync/ppu_source/atomic_read.h \ + ./sync/ppu_source/atomic_set.h \ + ./sync/ppu_source/atomic_sub_and_test.h \ + ./sync/ppu_source/atomic_sub.h \ + ./sync/ppu_source/atomic_sub_return.h \ + ./sync/ppu_source/complete_all.h \ + ./sync/ppu_source/complete.h \ + ./sync/ppu_source/completion.h \ + ./sync/ppu_source/cond_broadcast.h \ + ./sync/ppu_source/cond.h \ + ./sync/ppu_source/cond_init.h \ + ./sync/ppu_source/cond_signal.h \ + ./sync/ppu_source/cond_wait.h \ + ./sync/ppu_source/init_completion.h \ + ./sync/ppu_source/libsync.h \ + ./sync/ppu_source/mutex.h \ + ./sync/ppu_source/mutex_init.h \ + ./sync/ppu_source/mutex_lock.h \ + ./sync/ppu_source/mutex_trylock.h \ + ./sync/ppu_source/mutex_unlock.h \ + ./sync/ppu_source/pdt_libsync_config.xml \ + ./sync/ppu_source/pdt_libsync.xml \ + ./sync/ppu_source/sync_utils.h \ + ./sync/ppu_source/trace_libsync.h \ + ./sync/ppu_source/wait_for_completion.h \ + ./sync/spu_source/atomic_add.h \ + ./sync/spu_source/atomic_add_return.h \ + ./sync/spu_source/atomic_dec_and_test.h \ + ./sync/spu_source/atomic_dec.h \ + ./sync/spu_source/atomic_dec_if_positive.h \ + ./sync/spu_source/atomic_dec_return.h \ + ./sync/spu_source/atomic.h \ + ./sync/spu_source/atomic_inc.h \ + ./sync/spu_source/atomic_inc_return.h \ + ./sync/spu_source/atomic_read.h \ + ./sync/spu_source/atomic_set.h \ + ./sync/spu_source/atomic_sub_and_test.h \ + ./sync/spu_source/atomic_sub.h \ + ./sync/spu_source/atomic_sub_return.h \ + ./sync/spu_source/complete_all.h \ + ./sync/spu_source/complete.h \ + ./sync/spu_source/completion.h \ + ./sync/spu_source/cond_broadcast.h \ + ./sync/spu_source/cond.h \ + ./sync/spu_source/cond_init.h \ + ./sync/spu_source/cond_signal.h \ + ./sync/spu_source/cond_wait.h \ + ./sync/spu_source/init_completion.h \ + ./sync/spu_source/libsync.h \ + ./sync/spu_source/mutex.h \ + ./sync/spu_source/mutex_init.h \ + ./sync/spu_source/mutex_lock.h \ + ./sync/spu_source/mutex_trylock.h \ + ./sync/spu_source/mutex_unlock.h \ + ./sync/spu_source/read_lock.h \ + ./sync/spu_source/read_trylock.h \ + ./sync/spu_source/read_unlock.h \ + ./sync/spu_source/rwlock_init.h \ + ./sync/spu_source/sync_irq.h \ + ./sync/spu_source/sync_utils.h \ + ./sync/spu_source/trace_libsync.h \ + ./sync/spu_source/wait_for_completion.h \ + ./sync/spu_source/write_lock.h \ + ./sync/spu_source/write_trylock.h \ + ./sync/spu_source/write_unlock.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/ibm/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/ibm/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/ibm/README b/gcell/ibm/README new file mode 100644 index 00000000..9420fcc4 --- /dev/null +++ b/gcell/ibm/README @@ -0,0 +1,10 @@ +This directory and below contains code from IBM licensed under the +"Modified BSD license." It was extracted unmodified from the IBM Cell +SDK 3.0 library source tarball, lib_source.tar, typically found in +/opt/cell/sdk/src/lib_source.tar. + +We've done this because this code doesn't come unpacked in the native +(cell) installation of the SDK 3.0, and thus we can't just add a +-I/path/to/this/stuff in our Makefiles. If this changes, we'll delete +this code from here, and fix our Makefiles. In the meanwhile, this +reduces the probability of build problems. diff --git a/gcell/ibm/sync/ppu_source/atomic.h b/gcell/ibm/sync/ppu_source/atomic.h new file mode 100644 index 00000000..105f7bf3 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic.h @@ -0,0 +1,112 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +/* + * atomic.h - PPE atomic SHM counter operations. + * + * Interfaces patterned after, and hopefully compatible + * with PowerPC64-Linux atomic counter operations. Uses + * 32b values for various counters. + */ +#ifndef _PPU_ATOMIC_H_ +#define _PPU_ATOMIC_H_ + +#include +#include "sync_utils.h" + +typedef unsigned int atomic_t __attribute__ ((aligned (128))); + + +/* atomic_ea_t is a 64bit effective address that points to + * an atomic_t variable + */ +typedef unsigned long long atomic_ea_t; + +/** + * ASSUMPTIONS: + * On the PPE, the size of a reservation granule is 128 bytes + * (a cache-line), so when a programmer puts a reservation on an + * address, that whole cacheline is reserved. Therefore both + * the PPE and SPE can participate in an atomic operation as long as + * lwarx and getllar operate on the same cacheline. + */ + + +/* + * atomically loads and replaces the value v with val. + * Returns the old value at v + */ +static __inline int _atomic_replace(atomic_ea_t v, int val) +{ + int old; + void *p; + + SYNC_ULL_TO_PTR(v, p); + + do { + old = (int)__lwarx(p); + } while (__stwcx(p, (unsigned int)val) == 0); + + return old; +} + + +/* + * atomically loads the value at v, adds val, replaces the + * value at v with the sum. Returns the old value at v + */ +static __inline int _atomic_modify(atomic_ea_t v, int val) +{ + int oldval, newval; + void *p; + + SYNC_ULL_TO_PTR(v, p); + + do { + oldval = (int)__lwarx(p); + newval = oldval + val; + } while (__stwcx(p, (unsigned int)newval) == 0); + + return oldval; +} + + +#endif /* _PPU_ATOMIC_H_ */ + diff --git a/gcell/ibm/sync/ppu_source/atomic_add.h b/gcell/ibm/sync/ppu_source/atomic_add.h new file mode 100644 index 00000000..dd7a5b25 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_add.h @@ -0,0 +1,62 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_ADD_H_ +#define _PPU_ATOMIC_ADD_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_add - atomically add to a counter. + * @v: handle to effective address of counter. + * @a: value to be added. + * + * Atomically add a value to a counter in system memory. + * The only restriction is that @v must be word aligned. + */ +static __inline void _atomic_add(int a, atomic_ea_t v) +{ + _atomic_modify (v, a); +} + + + +#endif /* _PPU_ATOMIC_ADD_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_add_return.h b/gcell/ibm/sync/ppu_source/atomic_add_return.h new file mode 100644 index 00000000..0fe12756 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_add_return.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_ADD_RETURN_H_ +#define _PPU_ATOMIC_ADD_RETURN_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_add_return - atomically add to a counter and return previous value. + * @v: handle to effective address of counter. + * @a: value to be added. + * + * Atomically add a value to a counter in system memory. + * The only restriction is that @v must be word aligned. + * + * This routine implements the "fetch and add" primitive + * that is described in "Book I PowerPC User Instruction + * Set Architecture" + * Returns the previous value from system memory. + */ +static __inline int _atomic_add_return(int a, atomic_ea_t v) +{ + return _atomic_modify (v, a); +} + + +#endif /* _PPU_ATOMIC_ADD_RETURN_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_dec.h b/gcell/ibm/sync/ppu_source/atomic_dec.h new file mode 100644 index 00000000..4f82f04e --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_dec.h @@ -0,0 +1,60 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_DEC_H_ +#define _PPU_ATOMIC_DEC_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_dec - atomically decrement a counter. + * @v: handle to effective address of location to be modified. + * + * Atomically decrement a counter in system memory. The only + * restriction is that @v must be word aligned. + */ +static __inline void _atomic_dec(atomic_ea_t v) +{ + _atomic_modify (v, -1); +} + + +#endif /* _PPU_ATOMIC_DEC_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_dec_and_test.h b/gcell/ibm/sync/ppu_source/atomic_dec_and_test.h new file mode 100644 index 00000000..5093d405 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_dec_and_test.h @@ -0,0 +1,63 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_DEC_AND_TEST_H_ +#define _PPU_ATOMIC_DEC_AND_TEST_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_dec_and_test - atomically decrement and test if previous==0. + * @v: handle to effective address of counter. + * + * Atomically decrement a counter in system memory and test + * if previous==0. The only restriction is that @v must be + * word aligned. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_dec_and_test(atomic_ea_t v) +{ + return (_atomic_modify(v, -1) == 0) ? 1 : 0; +} + + +#endif /* _PPU_ATOMIC_DEC_AND_TEST_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_dec_if_positive.h b/gcell/ibm/sync/ppu_source/atomic_dec_if_positive.h new file mode 100644 index 00000000..c4d113bf --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_dec_if_positive.h @@ -0,0 +1,76 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_DEC_IF_POSITIVE_H_ +#define _PPU_ATOMIC_DEC_IF_POSITIVE_H_ + +#include +#include "sync_utils.h" +#include "atomic.h" + +/* + * atomic_dec_if_positive - atomically decrement if counter is positive. + * + * v: handle to effective address of counter. + * + * Atomically decrement a counter if its value is positive. + * The only restriction is that v must be word aligned. + * + * + * Returns the old value of the counter, minus 1. + */ +static __inline int _atomic_dec_if_positive(atomic_ea_t v) +{ + int ret; + int tmp; + void *p; + + SYNC_ULL_TO_PTR(v, p); + + do { + tmp = (int)__lwarx(p); + ret = tmp - 1; + tmp = (tmp > 0) ? ret : tmp; + } while (__stwcx(p, (unsigned)tmp) == 0); + + return ret; +} + +#endif /* _PPU_ATOMIC_DEC_IF_POSITIVE_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_dec_return.h b/gcell/ibm/sync/ppu_source/atomic_dec_return.h new file mode 100644 index 00000000..cd87893f --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_dec_return.h @@ -0,0 +1,68 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_DEC_RETURN_H_ +#define _PPU_ATOMIC_DEC_RETURN_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_dec_return - atomically decrement a counter and return previous value. + * @v: handle to effective address of counter. + * + * Atomically decrement a counter in system memory and return its + * previous value. The only restriction is that @v must be word + * aligned. + * + * This routine implements the "fetch and decrement" + * primitive that is described in "Book I PowerPC User + * Instruction Set Architecture". + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_dec_return(atomic_ea_t v) +{ + return _atomic_modify (v, -1); +} + + + +#endif /* _PPU_ATOMIC_DEC_RETURN_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_inc.h b/gcell/ibm/sync/ppu_source/atomic_inc.h new file mode 100644 index 00000000..714aecbc --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_inc.h @@ -0,0 +1,59 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_INC_H_ +#define _PPU_ATOMIC_INC_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_inc - atomically increment a counter in system memory. + * @v: handle to effective address of counter. + * + * Atomically increment a counter in system memory. + * The only restriction is that @v must be word aligned. + */ +static __inline void _atomic_inc(atomic_ea_t v) +{ + _atomic_modify (v, 1); +} + +#endif /* _PPU_ATOMIC_INC_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_inc_return.h b/gcell/ibm/sync/ppu_source/atomic_inc_return.h new file mode 100644 index 00000000..95178f50 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_inc_return.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_INC_RETURN_H_ +#define _PPU_ATOMIC_INC_RETURN_H_ + +#include +#include + + +/** + * atomic_inc_return - atomically increment a counter and return previous. + * @v: handle to effective address of counter. + * + * Atomically increment a counter in system memory. + * The only restriction is that @v must be word aligned. + * + * This routine implements the "fetch and increment" + * primitive that is described in "Book I PowerPC User + * Instruction Set Architecture" + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_inc_return(atomic_ea_t v) +{ + return _atomic_modify (v, 1); +} + +#endif /* _PPU_ATOMIC_INC_RETURN_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_read.h b/gcell/ibm/sync/ppu_source/atomic_read.h new file mode 100644 index 00000000..258fd516 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_read.h @@ -0,0 +1,62 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_READ_H_ +#define _PPU_ATOMIC_READ_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/* + * On PowerPC architecture, if v is a word_aligned address, then + * a load of that address is guaranteed to be atomic. An atomic + * read operation is simply a load. + */ +static __inline int _atomic_read(atomic_ea_t v) +{ + volatile int *p; + + SYNC_ULL_TO_PTR(v, p); + + return (*p); +} + + +#endif /* _PPU_ATOMIC_READ_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_set.h b/gcell/ibm/sync/ppu_source/atomic_set.h new file mode 100644 index 00000000..e624af40 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_set.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_SET_H_ +#define _PPU_ATOMIC_SET_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_set - atomically set a counter in system memory. + * @v: this is a 64bit address that points to an atomic_t + * + * Atomically set a counter to a given value. The only + * restriction is that @v must be word aligned. + * + * This routine implements the "fetch and store" + * primitive that is described in "Book I PowerPC User + * Instruction Set Architecture" + * + * Returns the previous value from system memory. + */ +static __inline void _atomic_set(atomic_ea_t v, int val) +{ + _atomic_replace (v, val); +} + + +#endif /* _PPU_ATOMIC_SET_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_sub.h b/gcell/ibm/sync/ppu_source/atomic_sub.h new file mode 100644 index 00000000..b8d35975 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_sub.h @@ -0,0 +1,61 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_SUB_H_ +#define _PPU_ATOMIC_SUB_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_sub - atomically subtract from a counter. + * @v: handle to effective address of counter. + * @a: value to be subtracted. + * + * Atomically subtract a value from a counter in system memory. + * The only restriction is that @v must be word aligned. + */ +static __inline void _atomic_sub(int a, atomic_ea_t v) +{ + _atomic_modify (v, -a); +} + + +#endif /* _PPU_ATOMIC_SUB_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_sub_and_test.h b/gcell/ibm/sync/ppu_source/atomic_sub_and_test.h new file mode 100644 index 00000000..37ba5889 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_sub_and_test.h @@ -0,0 +1,63 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_SUB_AND_TEST_H_ +#define _PPU_ATOMIC_SUB_AND_TEST_H_ + +#include "sync_utils.h" +#include "atomic.h" + +/** + * atomic_sub_and_test - atomically subtract and test if previous==0. + * @v: handle to effective address of counter. + * @a: value to be subtracted. + * + * Atomically subtract a value from a counter in system memory + * and test if previous==0. The only restriction is that @v + * must be word aligned. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_sub_and_test(int a, atomic_ea_t v) +{ + return (_atomic_modify(v, -a) == 0) ? 1 : 0; +} + +#endif /* _PPU_ATOMIC_SUB_AND_TEST_H_ */ diff --git a/gcell/ibm/sync/ppu_source/atomic_sub_return.h b/gcell/ibm/sync/ppu_source/atomic_sub_return.h new file mode 100644 index 00000000..084bfa6b --- /dev/null +++ b/gcell/ibm/sync/ppu_source/atomic_sub_return.h @@ -0,0 +1,65 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_ATOMIC_SUB_RETURN_H_ +#define _PPU_ATOMIC_SUB_RETURN_H_ + +#include +#include + + +/** + * atomic_sub_return - atomically subtract from a counter & return previous. + * @v: handle to effective address of counter. + * @a: value to be subtracted. + * + * Atomically subtract a value from a counter in system memory. + * The only restriction is that @v must be word aligned. + * + * Returns the previous value from system memory. + */ + + +static __inline int _atomic_sub_return(int a, atomic_ea_t v) +{ + return _atomic_modify (v, -a); +} + +#endif /* _PPU_ATOMIC_SUB_RETURN_H_ */ diff --git a/gcell/ibm/sync/ppu_source/complete.h b/gcell/ibm/sync/ppu_source/complete.h new file mode 100644 index 00000000..8633463f --- /dev/null +++ b/gcell/ibm/sync/ppu_source/complete.h @@ -0,0 +1,61 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COMPLETE_H_ +#define _PPU_COMPLETE_H_ + +#include +#include "sync_utils.h" +#include "completion.h" + + +static __inline void _complete (completion_ea_t comp) +{ + unsigned int old; + void *p; + + SYNC_ULL_TO_PTR(comp, p); + + do { + old = __lwarx(p); + } while (__stwcx(p, (unsigned int)1) == 0); +} + +#endif /* _PPU_COMPLETE_H_ */ diff --git a/gcell/ibm/sync/ppu_source/complete_all.h b/gcell/ibm/sync/ppu_source/complete_all.h new file mode 100644 index 00000000..c12eb7f0 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/complete_all.h @@ -0,0 +1,70 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COMPLETE_ALL_H_ +#define _PPU_COMPLETE_ALL_H_ + +#include +#include "sync_utils.h" +#include "completion.h" + +/** + * complete_all - indicate that a completion is true. + * @completion: handle to effective address of completion variable. + * + * Indicate that all are completed is true by storing + * MAX_THREADS_WAITING to the completionition variable. + */ + +static __inline void _complete_all(completion_ea_t comp) +{ + unsigned int old; + unsigned int val = MAX_THREADS_WAITING; + + void *p; + + SYNC_ULL_TO_PTR(comp, p); + + do { + old = __lwarx(p); + } while (__stwcx(p, val) == 0); +} + +#endif /* _PPU_COMPLETE_ALL_H_ */ diff --git a/gcell/ibm/sync/ppu_source/completion.h b/gcell/ibm/sync/ppu_source/completion.h new file mode 100644 index 00000000..b74bdaae --- /dev/null +++ b/gcell/ibm/sync/ppu_source/completion.h @@ -0,0 +1,50 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ + +#ifndef _PPU_COMPLETION_H_ +#define _PPU_COMPLETION_H_ + + +#define MAX_THREADS_WAITING 32000 + +typedef unsigned long long completion_ea_t; + +#endif /* _PPU_COMPLETION_H_ */ diff --git a/gcell/ibm/sync/ppu_source/cond.h b/gcell/ibm/sync/ppu_source/cond.h new file mode 100644 index 00000000..9a38f71a --- /dev/null +++ b/gcell/ibm/sync/ppu_source/cond.h @@ -0,0 +1,65 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COND_VAR_H_ +#define _PPU_COND_VAR_H_ + +#include +#include + + +typedef struct +{ + short num_threads_signal; /* the number of threads that are going to be waken up. + There are 3 values possible for this parameter, 0, 1, + or num_threads_waiting*/ + short num_threads_waiting; /* the number of threads that are waiting to be awaken */ +} condition_variable_t __attribute__ ((aligned (16))); + +typedef unsigned long long cond_ea_t; /* a system memory 64 bit address that points to + * a valid condition_variable_t */ + +typedef union { + unsigned long long ull; + unsigned int ui[2]; +} val64; + + +#endif /* _PPU_COND_VAR_H_ */ diff --git a/gcell/ibm/sync/ppu_source/cond_broadcast.h b/gcell/ibm/sync/ppu_source/cond_broadcast.h new file mode 100644 index 00000000..b93bf7b3 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/cond_broadcast.h @@ -0,0 +1,70 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COND_BROADCAST_H_ +#define _PPU_COND_BROADCAST_H_ + +#include +#include "sync_utils.h" +#include "cond.h" + +/** + * cond_broadcast - indicate that a condition is true. + * @cond: handle to effective address of condition variable. + */ +static __inline void _cond_broadcast (cond_ea_t cond) +{ + unsigned int val; + void *p; + + SYNC_ULL_TO_PTR(cond, p); + + do { + val = __lwarx(p); + + /* Copy the waiting count (low halfword) to + * the signaled count (high halfword) + */ + val = (val & 0xFFFF) | ((val+1) << 16); + + } while (__stwcx(p, val) == 0); +} + +#endif /* _PPU_COND_BROADCAST_H_ */ diff --git a/gcell/ibm/sync/ppu_source/cond_init.h b/gcell/ibm/sync/ppu_source/cond_init.h new file mode 100644 index 00000000..0dfbd634 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/cond_init.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COND_INIT_H_ +#define _PPU_COND_INIT_H_ + +#include "sync_utils.h" +#include "cond.h" + +/** + * cond_init - initialize condition variable. + * @cond: handle to effective address of condition variable. + * + * Only one thread initializes a condition variable. Usually, the + * PPE thread initializes a condidtion variable + * + * Description: Initialize a cond variable to false. + */ +static __inline void _cond_init (cond_ea_t cond) +{ + volatile unsigned int *p; + + SYNC_ULL_TO_PTR(cond, p); + + *p = 0; +} + + +#endif /* _PPU_COND_INIT_H_ */ diff --git a/gcell/ibm/sync/ppu_source/cond_signal.h b/gcell/ibm/sync/ppu_source/cond_signal.h new file mode 100644 index 00000000..dd487482 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/cond_signal.h @@ -0,0 +1,74 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COND_SIGNAL_H_ +#define _PPU_COND_SIGNAL_H_ + +#include +#include "sync_utils.h" +#include "cond.h" + +/* + * _cond_signal: signaling any of the waiting threads to wake up. + */ +static __inline void _cond_signal (cond_ea_t cond) +{ + unsigned int val, waiting, signaled; + void *p; + + SYNC_ULL_TO_PTR(cond, p); + + do { + val = __lwarx(p); + + waiting = val & 0xFFFF; + signaled = val >> 16; + + /* If no other party is waiting. Don't send a signal. + * Otherwise, increment the signaled halfword. + */ + if (waiting == signaled) break; + val = ((val+1) << 16) | waiting; + + } while (__stwcx(p, val) == 0); +} + + +#endif /* _PPU_COND_SIGNAL_H_ */ diff --git a/gcell/ibm/sync/ppu_source/cond_wait.h b/gcell/ibm/sync/ppu_source/cond_wait.h new file mode 100644 index 00000000..ed5fbecb --- /dev/null +++ b/gcell/ibm/sync/ppu_source/cond_wait.h @@ -0,0 +1,96 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_COND_WAIT_H_ +#define _PPU_COND_WAIT_H_ + +#include +#include "sync_utils.h" +#include "mutex_lock.h" +#include "mutex_unlock.h" +#include "cond.h" + +static __inline void _cond_wait (cond_ea_t cond, mutex_ea_t mutex) +{ + int delta, cur_delta; + unsigned int val, cond_val, signaled_cnt; + void *p; + + + SYNC_ULL_TO_PTR(cond, p); + + /* Atomically signal we have entered the condition wait by incrementing + * the waiting count. + */ + do { + val = __lwarx(p); + val = (val & ~0xFFFF) | ((val+1) & 0xFFFF); + } while (__stwcx(p, val) == 0); + + + /* Release the lock + */ + _mutex_unlock (mutex); + + /* Determine the signal count needed for this + * participant to be signaled. + */ + + signaled_cnt = val >> 16; + delta = (int)(val & 0xFFFF) - (int)signaled_cnt; + if (delta < 0) delta = -delta; + + /* Wait until the signaled count reaches the count + * previously determined. + */ + do { + cond_val = __lwarx(p); + + cur_delta = (int)(cond_val >> 16) - signaled_cnt; + if (cur_delta < 0) cur_delta = -cur_delta; + + } while (cur_delta < delta); + + /* Relock the mutex + */ + _mutex_lock (mutex); +} + +#endif /* _PPU_COND_WAIT_H_ */ diff --git a/gcell/ibm/sync/ppu_source/init_completion.h b/gcell/ibm/sync/ppu_source/init_completion.h new file mode 100644 index 00000000..8e708111 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/init_completion.h @@ -0,0 +1,63 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_INIT_COMPLETION_H_ +#define _PPU_INIT_COMPLETION_H_ + +#include "sync_utils.h" +#include "completion.h" + +/** + * completion_init - initialize completion variable. + * @completion: handle to effective address of completion variable. + * + * Description: Initialize a completion variable to 0. + */ +static __inline void _init_completion(completion_ea_t comp) +{ + volatile unsigned int *p; + + SYNC_ULL_TO_PTR(comp, p); + + *p = 0; +} + + +#endif /* _PPU_INIT_COMPLETION_H_ */ diff --git a/gcell/ibm/sync/ppu_source/libsync.h b/gcell/ibm/sync/ppu_source/libsync.h new file mode 100644 index 00000000..bd2e0434 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/libsync.h @@ -0,0 +1,114 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_LIBSYNC_H_ +#define _PPU_LIBSYNC_H_ + +#include "sync_utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned long long atomic_ea_t; + +extern void atomic_set(atomic_ea_t v, int val); +extern void atomic_add(int a, atomic_ea_t v); +extern void atomic_sub(int a, atomic_ea_t v); +extern void atomic_inc(atomic_ea_t v); +extern void atomic_dec(atomic_ea_t v); + +extern int atomic_read(atomic_ea_t v); +extern int atomic_add_return(int a, atomic_ea_t v); +extern int atomic_sub_return(int a, atomic_ea_t v); +extern int atomic_inc_return(atomic_ea_t v); +extern int atomic_dec_return(atomic_ea_t v); +extern int atomic_sub_and_test(int a, atomic_ea_t v); +extern int atomic_dec_and_test(atomic_ea_t v); +extern int atomic_dec_if_positive(atomic_ea_t v); + +typedef unsigned long long mutex_ea_t; +void mutex_init(mutex_ea_t lock); + +void mutex_lock(mutex_ea_t lock); +int mutex_trylock(mutex_ea_t ea); +void mutex_unlock(mutex_ea_t lock); + +typedef struct +{ + int num_threads_signal; /* the number of threads that are going to be waken up. + There are 3 values possible for this parameter, 0, 1, + or num_threads_waiting*/ + int num_threads_waiting; /* the number of threads that are waiting to be awaken */ +} condition_variable_t __attribute__ ((aligned (16))); + +typedef unsigned long long cond_ea_t; /* a system memory 64 bit address that points to + * a valid condition_variable_t */ + +typedef union { + unsigned long long ull; + unsigned int ui[2]; +} val64; + + +void cond_init (cond_ea_t cond); +void cond_signal (cond_ea_t cond); +void cond_broadcast (cond_ea_t cond); +void cond_wait (cond_ea_t cond, mutex_ea_t mutex); + + +#define MAX_THREADS_WAITING 32000 + +typedef unsigned long long completion_ea_t; + +extern void init_completion(completion_ea_t comp); +extern void wait_for_completion(completion_ea_t comp); +/* +extern void wait_for_completion_irq(completion_ea_t comp); +extern void wait_for_completion_irqsave(completion_ea_t comp); +*/ +extern void complete_all(completion_ea_t comp); +extern void complete (completion_ea_t comp); + +#ifdef __cplusplus +} +#endif + +#endif /* _PPU_LIBSYNC_H_ */ diff --git a/gcell/ibm/sync/ppu_source/mutex.h b/gcell/ibm/sync/ppu_source/mutex.h new file mode 100644 index 00000000..364bb224 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/mutex.h @@ -0,0 +1,46 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_MUTEX_H_ +#define _PPU_MUTEX_H_ 1 + +typedef unsigned long long mutex_ea_t; + +#endif /* _PPU_MUTEX_H_ */ diff --git a/gcell/ibm/sync/ppu_source/mutex_init.h b/gcell/ibm/sync/ppu_source/mutex_init.h new file mode 100644 index 00000000..105dc2c5 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/mutex_init.h @@ -0,0 +1,67 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_MUTEX_INIT_H_ +#define _PPU_MUTEX_INIT_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include "trace_libsync.h" + +/***************************************************************************/ +/** + * mutex_init - initialize the mutex by setting the value + * to 0. + * @lock: handle to effective address of lock variable. + * + * Description: Initialize a mutex. + */ +static __inline void _mutex_init(mutex_ea_t lock) +{ + volatile unsigned int *p; + + SYNC_ULL_TO_PTR(lock, p); + + *p = 0; + + TRACE_MUTEX_INIT(lock); +} + +#endif /* _PPU_MUTEX_INIT_H_ */ diff --git a/gcell/ibm/sync/ppu_source/mutex_lock.h b/gcell/ibm/sync/ppu_source/mutex_lock.h new file mode 100644 index 00000000..75240a14 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/mutex_lock.h @@ -0,0 +1,78 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_MUTEX_LOCK_H_ +#define _PPU_MUTEX_LOCK_H_ + +#include +#include "sync_utils.h" +#include "mutex.h" +#include "trace_libsync.h" + +/* function: _mutex_lock + * + * Aquire a lock at a location in system memory by waiting for the + * value to become zero, then atomically storing 1. + */ +static __inline void _mutex_lock (mutex_ea_t lock) +{ + unsigned int done = 0; + void *p; +#ifdef LIBSYNC_TRACE + unsigned int miss = 0; +#endif /* LIBSYNC_TRACE */ + + TRACE_MUTEX_LOCK_ENTRY(interval); + + SYNC_ULL_TO_PTR(lock, p); + + do { + if (__lwarx(p) == 0) done = __stwcx(p, (unsigned int) 1); +#ifdef LIBSYNC_TRACE + /* if we missed the lock, note it.. */ + if (done == 0) miss = 1; +#endif + } while (done == 0); + __isync(); + + TRACE_MUTEX_LOCK_EXIT(interval, lock, miss); +} + +#endif /* _PPU_MUTEX_LOCK_H_ */ diff --git a/gcell/ibm/sync/ppu_source/mutex_trylock.h b/gcell/ibm/sync/ppu_source/mutex_trylock.h new file mode 100644 index 00000000..445196c7 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/mutex_trylock.h @@ -0,0 +1,81 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_MUTEX_TRYLOCK_H_ +#define _PPU_MUTEX_TRYLOCK_H_ + +#include +#include "sync_utils.h" +#include "mutex.h" +#include "trace_libsync.h" + +/** + * mutex_trylock - acquire a lock, or return immediately. + * @lock: handle to effective address of lock variable. + * + * Description: Acquire a lock, or return immediately + * without polling for availability. + * + * Context: The application should not call this interface + * from a tight loop!! Use spin_lock() instead. + * + * Attempt to immediately aquire a lock at a location in system memory, + * and return 1 if the lock was aquired or 0 otherwise. + */ +static __inline int _mutex_trylock (mutex_ea_t lock) +{ + int val; + int ret = 0; + void *p; + + SYNC_ULL_TO_PTR(lock, p); + + do { + val = (int)__lwarx(p); + if (val) break; + } while ((ret = __stwcx(p, (unsigned int)1)) == 0); + __isync(); + + TRACE_MUTEX_TRYLOCK(lock,ret); + + return (ret); +} + +#endif /* _PPU_MUTEX_TRYLOCK_H_ */ diff --git a/gcell/ibm/sync/ppu_source/mutex_unlock.h b/gcell/ibm/sync/ppu_source/mutex_unlock.h new file mode 100644 index 00000000..e5255be0 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/mutex_unlock.h @@ -0,0 +1,64 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_MUTEX_UNLOCK_H_ +#define _PPU_MUTEX_UNLOCK_H_ + +#include "mutex.h" +#include "atomic.h" +#include "trace_libsync.h" + +/* function: _mutex_unlock + * + * Release a lock held at address 'lock' in system memory. + * For the PU, this routine is the same _unlock, and is + * provided here as a simple convenience for programmers + * (to match the interfaces that are supported on the SPU). + * All I need to do is a store since store is an atomic operation by itself + */ +static __inline void _mutex_unlock (mutex_ea_t lock) +{ + _atomic_replace ((atomic_ea_t)lock, 0); + + TRACE_MUTEX_UNLOCK(lock); +} + + +#endif /* _PPU_MUTEX_UNLOCK_H_ */ diff --git a/gcell/ibm/sync/ppu_source/pdt_libsync.xml b/gcell/ibm/sync/ppu_source/pdt_libsync.xml new file mode 100644 index 00000000..d9ea2ce9 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/pdt_libsync.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gcell/ibm/sync/ppu_source/pdt_libsync_config.xml b/gcell/ibm/sync/ppu_source/pdt_libsync_config.xml new file mode 100644 index 00000000..a0b848d8 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/pdt_libsync_config.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gcell/ibm/sync/ppu_source/sync_utils.h b/gcell/ibm/sync/ppu_source/sync_utils.h new file mode 100644 index 00000000..c7120a3c --- /dev/null +++ b/gcell/ibm/sync/ppu_source/sync_utils.h @@ -0,0 +1,73 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _PPU_SYNC_UTILS_H_ +#define _PPU_SYNC_UTILS_H_ 1 + +/* SYNC_ULL_TO_PTR - convert a 64-bit unsigned long long to a void + * pointer. + */ +#ifdef __powerpc64__ + +#define SYNC_ULL_TO_PTR(_ull, _ptr) { \ + union { \ + void *ptr; \ + unsigned long long ull; \ + } _x; \ + \ + _x.ull = _ull; \ + _ptr = _x.ptr; \ +} + +#else + +#define SYNC_ULL_TO_PTR(_ull, _ptr) { \ + union { \ + void *ptr[2]; \ + unsigned long long ull; \ + } _x; \ + \ + _x.ull = _ull; \ + _ptr = _x.ptr[1]; \ +} + +#endif + +#endif /* _PPU_SYNC_UTILS_H_ */ diff --git a/gcell/ibm/sync/ppu_source/trace_libsync.h b/gcell/ibm/sync/ppu_source/trace_libsync.h new file mode 100644 index 00000000..6d6f036e --- /dev/null +++ b/gcell/ibm/sync/ppu_source/trace_libsync.h @@ -0,0 +1,117 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2007 */ +/* International Business Machines Corporation */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef __LIBSYNC_PPU_TRACEHOOKS_H__ +#define __LIBSYNC_PPU_TRACEHOOKS_H__ + +#ifdef LIBSYNC_TRACE + +#include + +/* + * last parameter in the trace_even and trace_interval_entry call is + * the stack level to report the PC in the trace record. so 0 means + * the PC of the current frame, 1 means the PC of the caller, etc. + * there's a dilemma here - these macros are included in the inline + * _mutex calls which get called from the (created during build) + * mutex functions in the mutex .c files. in that case, the level + * should be 1 - we don't want the PC of where in the mutex function + * the trace call is happening, we want the PC of whomever is calling + * the mutex function. + * + * but.. an app can call the inline functions - it can #include the + * appropriate libsync mutex .h files, and call the inlined _mutex + * function in their code. in that case, the appropriate level for the + * trace calls would be 0 - the user would want to know where in their + * code the call to the _mutex function is. + * + * so, we'll assume _LEVEL of 0 which is what the inline funtions need. + * when we build the files for libsync, we'll do a -D_LEVEL=1 + */ +#ifndef _LEVEL +#define _LEVEL 0 +#endif + + +#define TRACE_EVENT_MUTEX_INIT 0x0003 + +#define TRACE_MUTEX_INIT(lock) { \ + trace_payload_t payload; \ + payload.dword[0]=(uint64_t)lock; \ + trace_event(TRACE_EVENT_MUTEX_INIT, 1, &payload, "Event=%d, lock=0x%x",_LEVEL); \ +} + +#define TRACE_EVENT_MUTEX_LOCK 0x0103 + +#define TRACE_MUTEX_LOCK_ENTRY(_INTERVAL) \ +trace_interval_p _INTERVAL = trace_interval_entry(TRACE_EVENT_MUTEX_LOCK, _LEVEL) + +#define TRACE_MUTEX_LOCK_EXIT(_INTERVAL,lock,miss) { \ + trace_payload_t payload; \ + payload.dword[0]=(uint64_t)lock; \ + payload.word[2]=(uint32_t)miss; \ + trace_interval_exit(_INTERVAL, 2, &payload, "Event=%d, lock=0x%x, miss=0x%x"); \ +} + +#define TRACE_EVENT_MUTEX_TRYLOCK 0x0203 + +#define TRACE_MUTEX_TRYLOCK(lock,ret) { \ + trace_payload_t payload; \ + payload.dword[0]=(uint64_t)lock; \ + payload.word[2]=(uint32_t)ret; \ + trace_event(TRACE_EVENT_MUTEX_TRYLOCK, 2, &payload, "Event=%d, lock=0x%x, ret=0x%x", _LEVEL); \ +} + +#define TRACE_EVENT_MUTEX_UNLOCK 0x0303 + +#define TRACE_MUTEX_UNLOCK(lock) { \ + trace_payload_t payload; \ + payload.dword[0]=(uint64_t)lock; \ + trace_event(TRACE_EVENT_MUTEX_UNLOCK, 1, &payload, "Event=%d, lock=0x%x", _LEVEL); \ +} + +#else /* LIBSYNC_TRACE */ + +#define TRACE_MUTEX_INIT(lock) +#define TRACE_MUTEX_LOCK_ENTRY(_INTERVAL) +#define TRACE_MUTEX_LOCK_EXIT(_INTERVAL,lock,miss) +#define TRACE_MUTEX_TRYLOCK(lock,ret_val) +#define TRACE_MUTEX_UNLOCK(lock) + +#endif /* LIBSYNC_TRACE */ + +#endif /* __LIBSYNC_PPU_TRACEHOOKS_H__ */ diff --git a/gcell/ibm/sync/ppu_source/wait_for_completion.h b/gcell/ibm/sync/ppu_source/wait_for_completion.h new file mode 100644 index 00000000..f2b04275 --- /dev/null +++ b/gcell/ibm/sync/ppu_source/wait_for_completion.h @@ -0,0 +1,75 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ + +#ifndef _PPU_WAIT_FOR_COMPLETION_H_ +#define _PPU_WAIT_FOR_COMPLETION_H_ + +#include +#include "sync_utils.h" +#include "completion.h" + + +/** + * completion_wait - wait until a completion is broadcast. + * @comp: handle to effective address of completion variable. + * + * Description: Wait until another processor or device signals + * that a completionition is 'true'. The only restriction here is + * that @comp must be a word aligned address. + * + * Beware: This function hot polls waiting for completion. + */ +static __inline void _wait_for_completion(completion_ea_t comp) +{ + int val; + void *p; + + SYNC_ULL_TO_PTR(comp, p); + + do { + val = (int)__lwarx(p); + if (val != 1) val = (int)__stwcx(p, (unsigned int)0); + } while (val == 0); + __isync(); +} + + +#endif /* _PPU_WAIT_FOR_COMPLETION_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic.h b/gcell/ibm/sync/spu_source/atomic.h new file mode 100644 index 00000000..951c26e3 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic.h @@ -0,0 +1,101 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +/* + * atomic.h - SPU atomic SHM counter operations. + * + * Interfaces patterned after, and hopefully compatible + * with PowerPC64-Linux atomic counter operations. Uses + * 32b values for various counters. + */ +#ifndef _SPU_ATOMIC_H_ +#define _SPU_ATOMIC_H_ + +#include +#include + + +/* atomic_eaddr_t is a 64bit effective address + * that points to an atomic_t variable */ +typedef unsigned long long atomic_ea_t; + +#define DECL_ATOMIC_VARS() \ + char _tmp[256]; \ + char *tmp = (char *) ALIGN(_tmp, 128); \ + volatile s32 *buf = (volatile s32 *) &tmp[0]; \ + u32 size = 128, tagid = 0; \ + s32 ret_val; \ + u32 offset; \ + addr64 ea64 + +/* __atomic_op +* Internal routine to acquire lock line reservation +* then conditionally modify the counter variable +* pointed to by 'v'. The 'replace' flag indicates +* whether or not this is to be an arithmetic R-M-W +* or a simple replace operation. +*/ +#define ATOMIC_OP(__v, __val, __replace, __final_val) \ +{ \ + char __tmp[256]; \ + char *_tmp = (char *) ALIGN(__tmp, 128); \ + volatile s32 *_buf = (volatile s32 *) &_tmp[0]; \ + u32 _size = 128, _tagid = 0; \ + s32 _status, _ret_val; \ + u32 _offset; \ + addr64 _ea64; \ + \ + _ea64.ull = ALIGN128_EA(__v); \ + _offset = OFFSET128_EA_U32(__v); \ + do { \ + MFC_DMA(_buf, _ea64, _size, _tagid, MFC_GETLLAR_CMD); \ + spu_readch (MFC_RdAtomicStat); \ + \ + _ret_val = _buf[_offset]; \ + _buf[_offset] = (__replace) ? __val : _ret_val + __val; \ + MFC_DMA(_buf, _ea64, _size, _tagid, MFC_PUTLLC_CMD); \ + _status = spu_readch(MFC_RdAtomicStat); \ + } while (_status != 0); \ + \ + __final_val = _ret_val; \ +} + +#endif /* _SPU_ATOMIC_H_ */ + diff --git a/gcell/ibm/sync/spu_source/atomic_add.h b/gcell/ibm/sync/spu_source/atomic_add.h new file mode 100644 index 00000000..7606ae05 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_add.h @@ -0,0 +1,62 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_ADD_H_ +#define _SPU_ATOMIC_ADD_H_ + +#include +#include + +/** + * atomic_add - atomically add to a counter. + * @v: handle to effective address of counter. + * @a: value to be added. + * + * Atomically add a value to a counter in system memory. + * The only restriction is that @v must be word aligned. + */ +static __inline void _atomic_add(int a, atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP (v, a, 0, ret_val); +} + + +#endif /* _SPU_ATOMIC_ADD_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_add_return.h b/gcell/ibm/sync/spu_source/atomic_add_return.h new file mode 100644 index 00000000..35f07adf --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_add_return.h @@ -0,0 +1,69 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_ADD_RETURN_H_ +#define _SPU_ATOMIC_ADD_RETURN_H_ + +#include +#include +/** + * atomic_add_return - atomically add to a counter and return previous value. + * @v: handle to effective address of counter. + * @a: value to be added. + * + * Atomically add a value to a counter in system memory. + * The only restriction is that @v must be word aligned. + * + * This routine implements the "fetch and add" primitive + * that is described in "Book I PowerPC User Instruction + * Set Architecture", but uses MFC lock line reservation + * operations instead of lwarx/stwcx. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_add_return(int a, atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP(v, a, 0, ret_val); + return ret_val; +} + + +#endif /* _SPU_ATOMIC_ADD_RETURN_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_dec.h b/gcell/ibm/sync/spu_source/atomic_dec.h new file mode 100644 index 00000000..30ca7c51 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_dec.h @@ -0,0 +1,61 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_DEC_H_ +#define _SPU_ATOMIC_DEC_H_ + +#include +#include + +/** + * atomic_dec - atomically decrement a counter. + * @v: handle to effective address of location to be modified. + * + * Atomically decrement a counter in system memory. The only + * restriction is that @v must be word aligned. + */ +static __inline void _atomic_dec(atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP (v, -1, 0, ret_val); +} + + +#endif /* _SPU_ATOMIC_DEC_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_dec_and_test.h b/gcell/ibm/sync/spu_source/atomic_dec_and_test.h new file mode 100644 index 00000000..b3c82982 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_dec_and_test.h @@ -0,0 +1,64 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_DEC_AND_TEST_H_ +#define _SPU_ATOMIC_DEC_AND_TEST_H_ + +#include +#include + +/** + * atomic_dec_and_test - atomically decrement and test if previous==0. + * @v: handle to effective address of counter. + * + * Atomically decrement a counter in system memory and test + * if previous==0. The only restriction is that @v must be + * word aligned. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_dec_and_test(atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP(v, -1, 0, ret_val); + return (ret_val == 0) ? 1 : 0; +} + +#endif /* _SPU_ATOMIC_DEC_AND_TEST_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_dec_if_positive.h b/gcell/ibm/sync/spu_source/atomic_dec_if_positive.h new file mode 100644 index 00000000..2a01ec30 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_dec_if_positive.h @@ -0,0 +1,86 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_DEC_IF_POSITIVE_H_ +#define _SPU_ATOMIC_DEC_IF_POSITIVE_H_ + +#include +#include + +/** + * atomic_dec_if_positive - atomically decrement if counter is positive. + * @v: handle to effective address of counter. + * + * Atomically decrement a counter if its value is positive. + * The only restriction is that @v must be word aligned. + * +* + * Returns the old value of the counter, minus 1. + */ +static __inline int _atomic_dec_if_positive(atomic_ea_t v) +{ + DECL_ATOMIC_VARS(); + s32 status; + + ea64.ull = ALIGN128_EA(v); + offset = OFFSET128_EA_U32(v); + do { + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + + ret_val = buf[offset] - 1; + if (likely(ret_val >= 0)) { + buf[offset] = ret_val; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); + status = spu_readch(MFC_RdAtomicStat); + } else { + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); + spu_readch(MFC_RdAtomicStat); + status = 0; + break; + } + } while (status != 0); + + return ret_val; +} + + + +#endif /* _SPU_ATOMIC_DEC_IF_POSITIVE_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_dec_return.h b/gcell/ibm/sync/spu_source/atomic_dec_return.h new file mode 100644 index 00000000..45effb68 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_dec_return.h @@ -0,0 +1,70 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_DEC_RETURN_H_ +#define _SPU_ATOMIC_DEC_RETURN_H_ + +#include +#include + +/** + * atomic_dec_return - atomically decrement a counter and return previous value. + * @v: handle to effective address of counter. + * + * Atomically decrement a counter in system memory and return its + * previous value. The only restriction is that @v must be word + * aligned. + * + * This routine implements the "fetch and decrement" + * primitive that is described in "Book I PowerPC User + * Instruction Set Architecture", but uses MFC lock line + * reservation operations instead of lwarx/stwcx. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_dec_return(atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP(v, -1, 0, ret_val); + return ret_val; +} + + +#endif /* _SPU_ATOMIC_DEC_RETURN_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_inc.h b/gcell/ibm/sync/spu_source/atomic_inc.h new file mode 100644 index 00000000..6800efea --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_inc.h @@ -0,0 +1,61 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_INC_H_ +#define _SPU_ATOMIC_INC_H_ + +#include +#include + +/** + * atomic_inc - atomically increment a counter in system memory. + * @v: handle to effective address of counter. + * + * Atomically increment a counter in system memory. + * The only restriction is that @v must be word aligned. + */ +static __inline void _atomic_inc(atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP (v, 1, 0, ret_val); +} + + +#endif /* _SPU_ATOMIC_INC_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_inc_return.h b/gcell/ibm/sync/spu_source/atomic_inc_return.h new file mode 100644 index 00000000..89361a0a --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_inc_return.h @@ -0,0 +1,70 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_INC_RETURN_H_ +#define _SPU_ATOMIC_INC_RETURN_H_ + +#include +#include + + +/** + * atomic_inc_return - atomically increment a counter and return previous. + * @v: handle to effective address of counter. + * + * Atomically increment a counter in system memory. + * The only restriction is that @v must be word aligned. + * + * This routine implements the "fetch and increment" + * primitive that is described in "Book I PowerPC User + * Instruction Set Architecture", but uses MFC lock line + * reservation operations instead of lwarx/stwcx. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_inc_return(atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP(v, 1, 0, ret_val); + return ret_val; +} + + +#endif /* _SPU_ATOMIC_INC_RETURN_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_read.h b/gcell/ibm/sync/spu_source/atomic_read.h new file mode 100644 index 00000000..711a0ad2 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_read.h @@ -0,0 +1,78 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_READ_H_ +#define _SPU_ATOMIC_READ_H_ + +#include +#include + +/** + * atomic_read - read an atomic counter. + * @v: handle to effective address of counter. + * + * Read the current value of an atomic counter. + */ +static __inline int _atomic_read(atomic_ea_t v) +{ + DECL_ATOMIC_VARS(); + + /* reserve a tag for use */ + tagid = mfc_tag_reserve(); + + u32 oldtmask, tagmask = 1 << (tagid & 31); + + ea64.ull = ALIGN128_EA(v); + offset = OFFSET128_EA_U32(v); + + MFC_DMA(buf, ea64, size, tagid & 31, MFC_GET_CMD); + oldtmask = spu_readch(MFC_RdTagMask); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + spu_writech(MFC_WrTagMask, oldtmask); + + mfc_tag_release (tagid); + ret_val = buf[offset]; + return ret_val; +} + + +#endif /* _SPU_ATOMIC_READ_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_set.h b/gcell/ibm/sync/spu_source/atomic_set.h new file mode 100644 index 00000000..261d28a3 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_set.h @@ -0,0 +1,68 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_SET_H_ +#define _SPU_ATOMIC_SET_H_ + +#include +#include + +/** + * atomic_set - atomically set a counter in system memory. + * @v: handle to effective address of counter. + * + * Atomically set a counter to a given value. The only + * restriction is that @v must be word aligned. + * + * This routine implements the "fetch and store" + * primitive that is described in "Book I PowerPC User + * Instruction Set Architecture", but uses MFC lock line + * reservation operations instead of lwarx/stwcx. + * + * Returns the previous value from system memory. + */ +static __inline void _atomic_set(atomic_ea_t v, int val) +{ + int ret_val; + ATOMIC_OP(v, val, 1, ret_val); +} + + +#endif /* _SPU_ATOMIC_SET_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_sub.h b/gcell/ibm/sync/spu_source/atomic_sub.h new file mode 100644 index 00000000..f366e1de --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_sub.h @@ -0,0 +1,64 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_SUB_H_ +#define _SPU_ATOMIC_SUB_H_ + +#include +#include + +/** + * atomic_sub - atomically subtract from a counter. + * @v: handle to effective address of counter. + * @a: value to be subtracted. + * + * Atomically subtract a value from a counter in system memory. + * The only restriction is that @v must be word aligned. + */ +static __inline void _atomic_sub(int a, atomic_ea_t v) +{ + int ret_val; + + ATOMIC_OP (v, -a, 0, ret_val); +} + + + +#endif /* _SPU_ATOMIC_SUB_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_sub_and_test.h b/gcell/ibm/sync/spu_source/atomic_sub_and_test.h new file mode 100644 index 00000000..fe5824a4 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_sub_and_test.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_SUB_AND_TEST_H_ +#define _SPU_ATOMIC_SUB_AND_TEST_H_ + +#include +#include + +/** + * atomic_sub_and_test - atomically subtract and test if previous==0. + * @v: handle to effective address of counter. + * @a: value to be subtracted. + * + * Atomically subtract a value from a counter in system memory + * and test if previous==0. The only restriction is that @v + * must be word aligned. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_sub_and_test(int a, atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP(v, -a, 0, ret_val); + return (ret_val == 0) ? 1 : 0; +} + + +#endif /* _SPU_ATOMIC_SUB_AND_TEST_H_ */ diff --git a/gcell/ibm/sync/spu_source/atomic_sub_return.h b/gcell/ibm/sync/spu_source/atomic_sub_return.h new file mode 100644 index 00000000..5dbed5b8 --- /dev/null +++ b/gcell/ibm/sync/spu_source/atomic_sub_return.h @@ -0,0 +1,69 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_ATOMIC_SUB_RETURN_H_ +#define _SPU_ATOMIC_SUB_RETURN_H_ + +#include +#include + + +/** + * atomic_sub_return - atomically subtract from a counter & return previous. + * @v: handle to effective address of counter. + * @a: value to be subtracted. + * + * Atomically subtract a value from a counter in system memory. + * The only restriction is that @v must be word aligned. + * + * Returns the previous value from system memory. + */ +static __inline int _atomic_sub_return(int a, atomic_ea_t v) +{ + int ret_val; + ATOMIC_OP(v, -a, 0, ret_val); + return ret_val; + //return __atomic_op(v, -a, 0); +} + + + + +#endif /* _SPU_ATOMIC_SUB_RETURN_H_ */ diff --git a/gcell/ibm/sync/spu_source/complete.h b/gcell/ibm/sync/spu_source/complete.h new file mode 100644 index 00000000..6a780865 --- /dev/null +++ b/gcell/ibm/sync/spu_source/complete.h @@ -0,0 +1,67 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COMPLETE_H_ +#define _SPU_COMPLETE_H_ + +#include "sync_utils.h" +#include +#include "completion.h" + +static __inline void _complete(completion_ea_t completion) +{ + DECL_COMPLETION_VARS(); + + ea64.ull = ALIGN128_EA(completion); + offset = OFFSET128_EA_U32(completion); + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + + /* set the completionition variable to exactly one so + * only one thread can be awaken */ + buf[offset] = 1; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLUC_CMD); + spu_readch(MFC_RdAtomicStat); +} + + + + +#endif /* _SPU_COMPLETE_H_ */ diff --git a/gcell/ibm/sync/spu_source/complete_all.h b/gcell/ibm/sync/spu_source/complete_all.h new file mode 100644 index 00000000..5f9c3dcf --- /dev/null +++ b/gcell/ibm/sync/spu_source/complete_all.h @@ -0,0 +1,74 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COMPLETE_ALL_H_ +#define _SPU_COMPLETE_ALL_H_ + +#include "sync_utils.h" +#include +#include "completion.h" + +/** + * completion_broadcast - indicate that a completion is true. + * @completion: handle to effective address of completion variable. + * + * Indicate that a completionition is true by storing '1' to the + * completionition variable. + */ +static __inline void _complete_all(completion_ea_t completion) +{ + DECL_COMPLETION_VARS(); + + ea64.ull = ALIGN128_EA(completion); + offset = OFFSET128_EA_U32(completion); + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + + /* set the completionition variable to the count. So that + * all the threads */ + buf[offset] = MAX_THREADS_WAITING; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLUC_CMD); + spu_readch(MFC_RdAtomicStat); +} + + + + +#endif /* _SPU_COMPLETE_ALL_H_ */ diff --git a/gcell/ibm/sync/spu_source/completion.h b/gcell/ibm/sync/spu_source/completion.h new file mode 100644 index 00000000..4a302d25 --- /dev/null +++ b/gcell/ibm/sync/spu_source/completion.h @@ -0,0 +1,68 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +/* + * cond.h - simple condition wait & broadcast operations. + * + * Interrupt aware versions of the routines are supported. + * Applications should call either '_irq' or '_irqsave' + * forms of the functions when interrupts are enabled. + */ + +#ifndef __SPU_COMPLETION_H__ +#define __SPU_COMPLETION_H__ + +#include "sync_utils.h" + +#define MAX_THREADS_WAITING 32000 +typedef unsigned long long completion_ea_t; + + +#define DECL_COMPLETION_VARS() \ + char _tmp[256]; \ + char *tmp = (char *) ALIGN(_tmp, 128); \ + volatile s32 *buf = (volatile s32 *) &tmp[0]; \ + u32 size = 128, tagid = 0; \ + u32 offset; \ + addr64 ea64 + + + +#endif /* __SPU_COMPLETION_H__ */ diff --git a/gcell/ibm/sync/spu_source/cond.h b/gcell/ibm/sync/spu_source/cond.h new file mode 100644 index 00000000..ceb3285d --- /dev/null +++ b/gcell/ibm/sync/spu_source/cond.h @@ -0,0 +1,69 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COND_VAR_H_ +#define _SPU_COND_VAR_H_ + +#include "sync_utils.h" +typedef struct +{ + int num_threads_signal; /* the number of threads that are going to be waken up. + There are 3 values possible for this parameter, 0, 1, + or num_threads_waiting*/ + int num_threads_waiting; /* the number of threads that are waiting to be awaken */ +} condition_variable_t __attribute__ ((aligned (128))); + +typedef eaddr_t cond_ea_t; /* a system memory 64 bit address that points to + * a valid condition_variable_t */ + + + + +#define DECL_COND_VARS() \ + char _tmp[256]; \ + char *tmp = (char *) ALIGN(_tmp, 128); \ + volatile s32 *buf = (volatile s32 *) &tmp[0]; \ + u32 size = 128, tagid = 0; \ + s32 status, ret_val; \ + u32 offset; \ + addr64 ea64; \ + condition_variable_t cond_var + +#endif /* _SPU_COND_VAR_H_ */ diff --git a/gcell/ibm/sync/spu_source/cond_broadcast.h b/gcell/ibm/sync/spu_source/cond_broadcast.h new file mode 100644 index 00000000..15a1da33 --- /dev/null +++ b/gcell/ibm/sync/spu_source/cond_broadcast.h @@ -0,0 +1,73 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COND_BROADCAST_H_ +#define _SPU_COND_BROADCAST_H_ + +#include "sync_utils.h" +#include "cond.h" +#include + +/** + * cond_broadcast - indicate that a condition is true. + * @cond: handle to effective address of condition variable. + */ +static __inline void _cond_broadcast(cond_ea_t cond) +{ + char _tmp[256]; + char *tmp = (char *) ALIGN(_tmp, 128); + volatile unsigned short *buf = (volatile unsigned short *) &tmp[0]; + unsigned int size = 128, tagid = 0; + u32 offset; + addr64 ea64; + + ea64.ull = ALIGN128_EA(cond); + offset = OFFSET128_EA_U16(cond); + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + + /* set the condition variable to the count. So that + * all the threads */ + buf[offset] = buf[offset + 1]; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLUC_CMD); + spu_readch(MFC_RdAtomicStat); +} + +#endif /* _SPU_COND_BROADCAST_H_ */ diff --git a/gcell/ibm/sync/spu_source/cond_init.h b/gcell/ibm/sync/spu_source/cond_init.h new file mode 100644 index 00000000..7202e535 --- /dev/null +++ b/gcell/ibm/sync/spu_source/cond_init.h @@ -0,0 +1,127 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COND_INIT_H_ +#define _SPU_COND_INIT_H_ + +#include "sync_utils.h" +#include "cond.h" +#include + + +/** + * cond_init - initialize condition variable. + * @cond: handle to effective address of condition variable. + * + * + * Conditional Variable - is a synchronization device that allows + * SPE and PPE threads to suspend execution and relinquish the + * processors until some predicate on shared data is satisfied. + * The basic operations on conditions are: signal the condition + * (when the predicate becomes true), and wait for the condition, + * suspending the thread execution until anoter thread signals the + * condition + * + * A condition variable must always be associated with a mutex, to + * avoid the race condition where a thread prepares to wait on a + * condition variable and another thread signals the condition just + * before the first thread actually waits on it. + * + * cond_init initializes the condition variable cond. + * + * cond_signal restarts one of the threads that are waiting on the + * condition variable cond. If no threads are waiting on cond, nothing + * happens. If several threads are waiting on cond, exactly one + * is restarted, but it is not specified which + * + * cond_broadcast restarts all the threads that are waiting on the + * condition variable cond. Nothing happens if no threads are waiting + * on cond + * + * cond_wait atomically unlocks the mutex and waits for the condition + * variable cond to be signaled. The mutex must be lock locked by + * the calling thread on the entrance to cond_wait. Before returning + * to the calling thread, cond_wait re-acquires mutex. + * + * Only one thread initializes a condition variable. Usually, the + * PPE thread initializes a condidtion variable, however, a cond_init + * function is provided here for completeness + * + * Description: Initialize a cond variable to false. + */ +static __inline void _cond_init(cond_ea_t cond ) +{ + char _tmp[256]; + char *tmp = (char *) ALIGN(_tmp, 128); + volatile unsigned short *buf = (volatile unsigned short *) &tmp[0]; + unsigned int size = 128, tagid; + unsigned int offset; + addr64 ea64; + unsigned int oldtmask; + unsigned int tagmask; + + tagid = mfc_tag_reserve(); + + tagmask = 1 << (tagid & 31); + + ea64.ull = ALIGN128_EA(cond); + offset = OFFSET128_EA_U16(cond); + + MFC_DMA(buf, ea64, size, tagid & 31, MFC_GET_CMD); + oldtmask = spu_readch(MFC_RdTagMask); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + + /* this is still just one word. since buf is of type + * short, we fit both counts into one word. */ + buf[offset] = 0; + buf[offset+1] = 0; + MFC_DMA(buf, ea64, size, (tagid & 31), MFC_PUT_CMD); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + spu_writech(MFC_WrTagMask, oldtmask); + mfc_tag_release (tagid); +} + + + +#endif /* _SPU_COND_INIT_H_ */ diff --git a/gcell/ibm/sync/spu_source/cond_signal.h b/gcell/ibm/sync/spu_source/cond_signal.h new file mode 100644 index 00000000..a035d287 --- /dev/null +++ b/gcell/ibm/sync/spu_source/cond_signal.h @@ -0,0 +1,88 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COND_SIGNAL_H_ +#define _SPU_COND_SIGNAL_H_ +#include +#include "sync_utils.h" +#include "cond.h" +#include "atomic.h" +#include + +/* + * _cond_signal: signalling any of the waiting threads to wake up. + */ +static __inline void _cond_signal(cond_ea_t cond) +{ + char _tmp[256]; + char *tmp = (char *) ALIGN(_tmp, 128); + volatile unsigned short *buf = (volatile unsigned short *) &tmp[0]; + unsigned int size = 128, tagid = 0; + u32 offset; + addr64 ea64; + int status; + + ea64.ull = ALIGN128_EA(cond); + offset = OFFSET128_EA_U16(cond); + + do { + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + (void)spu_readch(MFC_RdAtomicStat); + + /* Check for waiting threads. + */ + if (buf[offset] != buf[offset+1]) { + /* Increment the signaled count to release the next waiting + * thread. + */ + buf[offset]++; + + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); + status = spu_readch(MFC_RdAtomicStat); + } else { + /* Nobody is waiting, do nothing. + */ + status = 0; + } + } while (status); +} + + +#endif /* _SPU_COND_SIGNAL_H_ */ diff --git a/gcell/ibm/sync/spu_source/cond_wait.h b/gcell/ibm/sync/spu_source/cond_wait.h new file mode 100644 index 00000000..cf4b880f --- /dev/null +++ b/gcell/ibm/sync/spu_source/cond_wait.h @@ -0,0 +1,103 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_COND_WAIT_H_ +#define _SPU_COND_WAIT_H_ +#include +#include "sync_irq.h" +#include "sync_utils.h" +#include "mutex_lock.h" +#include "mutex_unlock.h" +#include "cond.h" +#include + +static __inline void _cond_wait (cond_ea_t cond, mutex_ea_t mutex) +{ + char _tmp[256]; + char *tmp = (char *) ALIGN(_tmp, 128); + volatile signed short *buf = (volatile signed short *) &tmp[0]; + unsigned int size = 128, tagid = 0; + int status; + unsigned int offset; + addr64 ea64; + signed short delta, cur_delta, signaled_cnt; + + ea64.ull = ALIGN128_EA(cond); + offset = OFFSET128_EA_U16(cond); + + /* increment the waiting halfword of the condition variable. + */ + do { + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + (void)spu_readch(MFC_RdAtomicStat); + + buf[offset+1]++; + + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); + status = spu_readch(MFC_RdAtomicStat); + } while (status); + + _mutex_unlock(mutex); + + /* keep track of the change in count needed to be signaled. This + * is delta. + */ + signaled_cnt = buf[offset]; + delta = buf[offset+1] - signaled_cnt; + if (delta < 0) delta = -delta; + + while (1) { + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + (void)spu_readch(MFC_RdAtomicStat); + + cur_delta = buf[offset] - signaled_cnt; + if (cur_delta < 0) cur_delta = -cur_delta; + + + if (cur_delta >= delta) { + /* the counts indicate that this thread has been signaled. + */ + break; + } + } + _mutex_lock (mutex); +} + +#endif /* _SPU_COND_WAIT_H_ */ diff --git a/gcell/ibm/sync/spu_source/init_completion.h b/gcell/ibm/sync/spu_source/init_completion.h new file mode 100644 index 00000000..bf93e72a --- /dev/null +++ b/gcell/ibm/sync/spu_source/init_completion.h @@ -0,0 +1,82 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_INIT_COMPLETION_H_ +#define _SPU_INIT_COMPLETION_H_ + +#include "sync_utils.h" +#include +#include "completion.h" + +/** + * completion_init - initialize completion variable. + * @completion: handle to effective address of completion variable. + * + * Description: Initialize a completion variable to false. + */ +static __inline void _init_completion(completion_ea_t completion) +{ + DECL_COMPLETION_VARS(); + u32 oldtmask, tagmask; + + tagid = mfc_tag_reserve(); + tagmask = 1 << (tagid & 31); + + ea64.ull = ALIGN128_EA(completion); + offset = OFFSET128_EA_U32(completion); + + MFC_DMA(buf, ea64, size, tagid & 31, MFC_GET_CMD); + oldtmask = spu_readch(MFC_RdTagMask); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + + buf[offset] = 0; + MFC_DMA(buf, ea64, size, tagid & 31, MFC_PUT_CMD); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + spu_writech(MFC_WrTagMask, oldtmask); + mfc_tag_release(tagid); +} + + + +#endif /* _SPU_INIT_COMPLETION_H_ */ diff --git a/gcell/ibm/sync/spu_source/libsync.h b/gcell/ibm/sync/spu_source/libsync.h new file mode 100644 index 00000000..48cc722b --- /dev/null +++ b/gcell/ibm/sync/spu_source/libsync.h @@ -0,0 +1,116 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_LIB_SYNC_H_ +#define _SPU_LIB_SYNC_H_ +#include "sync_utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned long long atomic_ea_t; + +extern void atomic_set(atomic_ea_t v, int val); +extern void atomic_add(int a, atomic_ea_t v); +extern void atomic_sub(int a, atomic_ea_t v); +extern void atomic_inc(atomic_ea_t v); +extern void atomic_dec(atomic_ea_t v); + +extern int atomic_read(atomic_ea_t v); +extern int atomic_add_return(int a, atomic_ea_t v); +extern int atomic_sub_return(int a, atomic_ea_t v); +extern int atomic_inc_return(atomic_ea_t v); +extern int atomic_dec_return(atomic_ea_t v); +extern int atomic_sub_and_test(int a, atomic_ea_t v); +extern int atomic_dec_and_test(atomic_ea_t v); +extern int atomic_dec_if_positive(atomic_ea_t v); + +typedef unsigned long long mutex_ea_t; + +extern void mutex_init(mutex_ea_t lock); +extern void mutex_lock(mutex_ea_t lock); +extern int mutex_trylock(mutex_ea_t ea); +extern void mutex_unlock(mutex_ea_t lock); + + +typedef struct +{ + int num_threads_signal; /* the number of threads that are going to be waken up. + * There are 3 values possible for this parameter, 0, 1, + * or num_threads_waiting + */ + int num_threads_waiting; /* the number of threads that are waiting to be awaken + */ +} condition_variable_t __attribute__ ((aligned (128))); + +typedef eaddr_t cond_ea_t; /* a system memory 64 bit address that points to + * a valid condition_variable_t + */ + + +extern void cond_init (cond_ea_t cond); +extern void cond_signal (cond_ea_t cond); +extern void cond_broadcast (cond_ea_t cond); +extern void cond_wait (cond_ea_t cond, mutex_ea_t mutex); + +typedef unsigned long long completion_ea_t; + +extern void init_completion(completion_ea_t completion); +extern void wait_for_completion(completion_ea_t completion); +extern void complete(completion_ea_t completion); +extern void complete_all(completion_ea_t completion); + +#ifdef __SPU__ + /* Function only implemented for the SPU + */ + extern void read_lock(eaddr_t ea); + extern void read_unlock(eaddr_t ea); + extern int read_trylock(eaddr_t ea); + extern void write_lock(eaddr_t ea); + extern void write_unlock(eaddr_t ea); + extern int write_trylock(eaddr_t ea); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _SPU_LIB_SYNC_H_ */ diff --git a/gcell/ibm/sync/spu_source/mutex.h b/gcell/ibm/sync/spu_source/mutex.h new file mode 100644 index 00000000..37f2b4d6 --- /dev/null +++ b/gcell/ibm/sync/spu_source/mutex.h @@ -0,0 +1,178 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_MUTEX_H_ +#define _SPU_MUTEX_H_ 1 + +#include "sync_utils.h" +#include "sync_irq.h" +#include + +typedef eaddr_t mutex_ea_t; + +#define DECL_MUTEX_VARS() \ + char _tmp[256]; \ + char *tmp = (char *) ALIGN(_tmp, 128); \ + volatile s32 *buf = (volatile s32 *) &tmp[0]; \ + u32 size = 128, tagid = 0; \ + u32 offset; \ + addr64 ea64 + +/* RAW_TEST_AND_SET + * Macro implementing the test and set primitive. + * + * RAW_TEST_AND_SET(==, 1) used by spin_try_lock() + * RAW_TEST_AND_SET(>=, 1) used by read_try_lock() + * RAW_TEST_AND_SET(==, -1) used by write_try_lock() + */ +#define RAW_TEST_AND_SET(_RELOP_, _val) \ + ea64.ull = ALIGN128_EA(ea); \ + offset = OFFSET128_EA_U32(ea); \ + do { \ + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); \ + spu_readch(MFC_RdAtomicStat); \ + SET_HIT; \ + if (likely(buf[offset] _RELOP_ 0)) { \ + buf[offset] += _val; \ + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); \ + status = spu_readch(MFC_RdAtomicStat); \ + ret_val = 1; \ + } else { \ + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); \ + spu_readch(MFC_RdAtomicStat); \ + status = ret_val = 0; \ + break; \ + } \ + } while (status != 0) + +/* RAW_SPINLOCK + * Macro implementing the spinlock primitive. + * + * RAW_SPINLOCK(==, 1) used by spin_lock() + * RAW_SPINLOCK(>=, 1) used by read_lock() + * RAW_SPINLOCK(==, -1) used by write_lock() + */ + + +#define RAW_SPINLOCK(_RELOP_, _val) \ + ea64.ull = ALIGN128_EA(ea); \ + offset = OFFSET128_EA_U32(ea); \ + do { \ + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); \ + spu_readch(MFC_RdAtomicStat); \ + SET_HIT; \ + status = 1; \ + if (likely(buf[offset] _RELOP_ 0)) { \ + buf[offset] += _val; \ + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); \ + status = spu_readch(MFC_RdAtomicStat); \ + } \ + } while (status != 0); + + +static inline void _lock_init(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + u32 oldtmask, tagmask; + + tagid = mfc_tag_reserve(); + + tagmask = 1 << (tagid & 31); + + /* __lock_init + * Internal routine to initialize a spinlock or + * reader/writer lock. + */ + ea64.ull = ALIGN128_EA(ea); + offset = OFFSET128_EA_U32(ea); + MFC_DMA(buf, ea64, size, tagid & 31, MFC_GET_CMD); + oldtmask = spu_readch(MFC_RdTagMask); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + + buf[offset] = 0; + MFC_DMA(buf, ea64, size, tagid & 31, MFC_PUT_CMD); + spu_writech(MFC_WrTagMask, tagmask); + spu_writech(MFC_WrTagUpdate, MFC_TAG_UPDATE_ANY); + spu_readch(MFC_RdTagStat); + spu_writech(MFC_WrTagMask, oldtmask); + mfc_tag_release(tagid); +} + +static inline void _spin_lock(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status; + + /* _spin_lock + * Internal routine to acquire spinlock. + */ +/* non trace - no hit/miss indicator */ +#define SET_HIT + RAW_SPINLOCK(==, 1); +} + +#ifdef LIBSYNC_TRACE +static inline s32 _spin_lock_trace(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status = 0; +/* trace - need hit/miss indicator */ +#undef SET_HIT +#define SET_HIT if (status == 0) hit = buf[offset] + s32 hit; + + hit = 0; + /* _spin_lock_trace for trace + * Internal routine to acquire spinlock. + */ + RAW_SPINLOCK(==, 1); + + return hit; + +#undef SET_HIT +#define SET_HIT +} + +#endif /* LIBSYNC_TRACE */ + + +#endif /* SPU_MUTEX_H */ diff --git a/gcell/ibm/sync/spu_source/mutex_init.h b/gcell/ibm/sync/spu_source/mutex_init.h new file mode 100644 index 00000000..9bddb145 --- /dev/null +++ b/gcell/ibm/sync/spu_source/mutex_init.h @@ -0,0 +1,64 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_MUTEX_INIT_H_ +#define _SPU_MUTEX_INIT_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include "trace_libsync.h" + +/***************************************************************************/ +/** + * mutex_init - initialize the mutex by setting the value + * to 0. + * @lock: handle to effective address of lock variable. + * + * Description: Initialize a mutex. + */ +static __inline void _mutex_init(mutex_ea_t lock) +{ + _lock_init(lock); + + TRACE_MUTEX_INIT(lock); +} + + +#endif /* _SPU_MUTEX_INIT_H_ */ diff --git a/gcell/ibm/sync/spu_source/mutex_lock.h b/gcell/ibm/sync/spu_source/mutex_lock.h new file mode 100644 index 00000000..63bdbc36 --- /dev/null +++ b/gcell/ibm/sync/spu_source/mutex_lock.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_MUTEX_LOCK_H_ +#define _SPU_MUTEX_LOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include "trace_libsync.h" + +static __inline void _mutex_lock(mutex_ea_t ea) +{ + +#ifdef LIBSYNC_TRACE + s32 miss = 0; + + TRACE_MUTEX_LOCK_ENTRY(interval); + miss = _spin_lock_trace(ea); + TRACE_MUTEX_LOCK_EXIT(interval, ea, miss); + +#else /* LIBSYNC_TRACE */ + + _spin_lock(ea); + +#endif /* LIBSYNC_TRACE */ + +} + +#endif /* _SPU_MUTEX_LOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/mutex_trylock.h b/gcell/ibm/sync/spu_source/mutex_trylock.h new file mode 100644 index 00000000..3c8df466 --- /dev/null +++ b/gcell/ibm/sync/spu_source/mutex_trylock.h @@ -0,0 +1,70 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_MUTEX_TRYLOCK_H_ +#define _SPU_MUTEX_TRYLOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include "trace_libsync.h" + +/** + * mutex_trylock - acquire a lock, or return immediately. + * @ea: handle to effective address of lock variable. + * + * Description: Acquire a lock, or return immediately + * without polling for availability. + * + * Context: The application should not call this interface + * from a tight loop!! Use spin_lock() instead. + */ +static __inline int _mutex_trylock(mutex_ea_t ea) +{ + DECL_MUTEX_VARS(); + s32 status, ret_val; + + RAW_TEST_AND_SET(==, 1); + + TRACE_MUTEX_TRYLOCK(ea, ret_val); + + return ret_val; +} + +#endif /* _SPU_MUTEX_TRYLOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/mutex_unlock.h b/gcell/ibm/sync/spu_source/mutex_unlock.h new file mode 100644 index 00000000..87d6bbae --- /dev/null +++ b/gcell/ibm/sync/spu_source/mutex_unlock.h @@ -0,0 +1,59 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_MUTEX_UNLOCK_H_ +#define _SPU_MUTEX_UNLOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include "atomic.h" +#include "trace_libsync.h" + +static __inline void _mutex_unlock(mutex_ea_t ea) +{ + int ret_val; + + ATOMIC_OP((atomic_ea_t)ea, 0, 1, ret_val); + + TRACE_MUTEX_UNLOCK(ea); +} + + +#endif /* _SPU_MUTEX_UNLOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/read_lock.h b/gcell/ibm/sync/spu_source/read_lock.h new file mode 100644 index 00000000..0e1d9718 --- /dev/null +++ b/gcell/ibm/sync/spu_source/read_lock.h @@ -0,0 +1,66 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_READ_LOCK_H_ +#define _SPU_READ_LOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" + +/** + * read_lock - acquire reader lock, or spin until available. + * @ea: handle to effective address of lock variable. + * + * Description: Acquire a non-exclusive reader lock, or spin + * until available. The only restriction here is that @ea + * must be word aligned. + * + * Context: This routine should not be called if SPU + * asynchronous interrupts are enabled. + */ +static __inline void _read_lock(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status; + + RAW_SPINLOCK(>=, 1); +} + +#endif /* _SPU_READ_LOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/read_trylock.h b/gcell/ibm/sync/spu_source/read_trylock.h new file mode 100644 index 00000000..d0327835 --- /dev/null +++ b/gcell/ibm/sync/spu_source/read_trylock.h @@ -0,0 +1,71 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_READ_TRYLOCK_H_ +#define _SPU_READ_TRYLOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" + +/** + * read_trylock - acquire a reader lock, or return immediately. + * @ea: handle to effective address of lock variable. + * + * Acquire a non-exclusive reader lock, or return + * immediately. The only restriction here is that + * @ea must be word aligned. + * + * Returns 1 on success, or 0 on failure. + * + * Context: The application should not call this interface + * from a tight loop!! Use read_lock() instead. + */ +static __inline int _read_trylock(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status, ret_val; + + RAW_TEST_AND_SET(>=, 1); + + return ret_val; +} + + +#endif /* _SPU_READ_TRYLOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/read_unlock.h b/gcell/ibm/sync/spu_source/read_unlock.h new file mode 100644 index 00000000..f011550e --- /dev/null +++ b/gcell/ibm/sync/spu_source/read_unlock.h @@ -0,0 +1,88 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_READ_UNLOCK_H_ +#define _SPU_READ_UNLOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include + + +/** + * read_unlock - release reader lock. + * @ea: handle to effective address of lock variable. + * + * Description: Release a reader lock. The only restriction + * here is that @ea must be word aligned. + * + * Context: This routine should be used when interrupts + * do not need to be re-enabled --either because interrupts + * are not being used, or because the application will take + * steps to re-enable them later. + */ +static __inline void _read_unlock(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status; + + /* _read_unlock + * + * Reader locks must use PUTLLC when releasing, instead of + * the more traditional PUTLLUC because of the non-exclusive + * nature of the lock. The reason for this is that other + * readers may have incremented the counter, and we don't + * want to corrupt it by blindly issuing PUTLLUC!! + */ + ea64.ull = ALIGN128_EA(ea); + offset = OFFSET128_EA_U32(ea); + do { + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + + buf[offset] -= 1; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); + status = spu_readch(MFC_RdAtomicStat); + } while (status != 0); + +} + + +#endif /* _SPU_READ_UNLOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/rwlock_init.h b/gcell/ibm/sync/spu_source/rwlock_init.h new file mode 100644 index 00000000..6b05533b --- /dev/null +++ b/gcell/ibm/sync/spu_source/rwlock_init.h @@ -0,0 +1,60 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_RWLOCK_INIT_H_ +#define _SPU_RWLOCK_INIT_H_ + +#include "sync_utils.h" +#include "mutex.h" + +/** + * rwlock_init - initialize a reader/writer lock. + * @ea: handle to effective address of lock variable. + * + * Description: Initialize a reader/writer lock. + */ +static __inline void _rwlock_init(eaddr_t rwlock) +{ + _lock_init(rwlock); +} + + + +#endif /* _SPU_RWLOCK_INIT_H_ */ diff --git a/gcell/ibm/sync/spu_source/sync_irq.h b/gcell/ibm/sync/spu_source/sync_irq.h new file mode 100644 index 00000000..feae65e5 --- /dev/null +++ b/gcell/ibm/sync/spu_source/sync_irq.h @@ -0,0 +1,76 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +/* + * irq.h - SPU interrupt management facilities. + * + * These utilities help an "interrupt aware" library to manage + * state of SPU interrupts. + */ + +#ifndef __SPU_IRQ_H__ +#define __SPU_IRQ_H__ + +#include +#include "sync_utils.h" + +static inline u32 irq_mask(u32 newmask) +{ + u32 old, tmp = 0; + + /* irq_mask + * Set the interrupt mask to the newmask value, + * and return its previous setting. Will + * detect and discard potential phantom + * events. + */ + + old = spu_readch(SPU_RdEventMask); + spu_writech(SPU_WrEventMask, tmp); + if (spu_readchcnt(SPU_RdEventStat)) { + tmp = spu_readch(SPU_RdEventStat); + spu_writech(SPU_WrEventAck, tmp); + } + spu_writech(SPU_WrEventMask, newmask); + + return old; +} + +#endif /* __SPU_IRQ_H__ */ diff --git a/gcell/ibm/sync/spu_source/sync_utils.h b/gcell/ibm/sync/spu_source/sync_utils.h new file mode 100644 index 00000000..516b41f7 --- /dev/null +++ b/gcell/ibm/sync/spu_source/sync_utils.h @@ -0,0 +1,103 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +/* + * sync_utils.h - SPU sync-library internal utilities. + * + * These utilities are used internally by the SPU sync library. + */ +#ifndef __SPU_SYNC_UTILS_H__ +#define __SPU_SYNC_UTILS_H__ + +#include + +typedef unsigned int u32; +typedef signed int s32; +typedef unsigned long long u64; +typedef unsigned long long eaddr_t; + + +typedef union { + u64 ull; + u32 ui[2]; +} addr64; + +#ifndef likely +#define likely(_c) \ + __builtin_expect((_c), 1) +#define unlikely(_c) \ + __builtin_expect((_c), 0) +#endif + +#define ALLOCA(_nbytes, _size) \ + alloca((_nbytes) + (_size)-1) + +#define ALIGN(_ptr, _size) \ + ((((u32) _ptr) + (_size)-1) & ~((_size)-1)) + +#define ALIGN128_EA(_ull) \ + ((_ull) & ~(127ULL)) +/* +#define OFFSET128_EA(_ull, _type) \ + (((_ull) & 127ULL) / sizeof(_type)) + */ + +#define OFFSET128_EA_U32(_ull) \ + (((_ull) & 127ULL) >> 2) + +#define OFFSET128_EA_U16(_ull) \ + (((_ull) & 127ULL) >> 1) + +#define MFC_DMA(_ls, _ea, _sz, _tg, _cmd) \ + spu_mfcdma64(_ls, _ea.ui[0], _ea.ui[1], _sz, _tg, _cmd) + +#define MFC_SYNC() { \ + u32 _tagid = 0; \ + spu_writech(mfc_tag_id, _tagid); \ + spu_writech(mfc_cmd_queue, MFC_SYNC_CMD); \ +} + +#define MFC_EIEIO() { \ + u32 _tagid = 0; \ + spu_writech(mfc_tag_id, _tagid); \ + spu_writech(mfc_cmd_queue, MFC_EIEIO_CMD); \ +} + +#endif /* __SPU_SYNC_UTILS_H__ */ diff --git a/gcell/ibm/sync/spu_source/trace_libsync.h b/gcell/ibm/sync/spu_source/trace_libsync.h new file mode 100644 index 00000000..47887c9d --- /dev/null +++ b/gcell/ibm/sync/spu_source/trace_libsync.h @@ -0,0 +1,117 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2007 */ +/* International Business Machines Corporation */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef __LIBSYNC_SPU_TRACEHOOKS_H__ +#define __LIBSYNC_SPU_TRACEHOOKS_H__ + +#ifdef LIBSYNC_TRACE + +#include + +/* + * last parameter in the trace_even and trace_interval_entry call is + * the stack level to report the PC in the trace record. so 0 means + * the PC of the current frame, 1 means the PC of the caller, etc. + * there's a dilemma here - these macros are included in the inline + * _mutex calls which get called from the (created during build) + * mutex functions in the mutex .c files. in that case, the level + * should be 1 - we don't want the PC of where in the mutex function + * the trace call is happening, we want the PC of whomever is calling + * the mutex function. + * + * but.. an app can call the inline functions - it can #include the + * appropriate libsync mutex .h files, and call the inlined _mutex + * function in their code. in that case, the appropriate level for the + * trace calls would be 0 - the user would want to know where in their + * code the call to the _mutex function is. + * + * so, we'll assume _LEVEL of 0 which is what the inline funtions need. + * when we build the files for libsync, we'll do a -D_LEVEL=1 + */ +#ifndef _LEVEL +#define _LEVEL 0 +#endif + + +#define TRACE_EVENT_MUTEX_INIT 0x0403 + +#define TRACE_MUTEX_INIT(lock) { \ + trace_payload_t payload; \ + payload.dword[0]=(unsigned long)lock; \ + trace_event(TRACE_EVENT_MUTEX_INIT, 1, &payload, "Event=%d, lock=0x%x", _LEVEL); \ +} + +#define TRACE_EVENT_MUTEX_LOCK 0x0503 + +#define TRACE_MUTEX_LOCK_ENTRY(_INTERVAL) \ +trace_interval_p _INTERVAL = trace_interval_entry(TRACE_EVENT_MUTEX_LOCK, _LEVEL) + +#define TRACE_MUTEX_LOCK_EXIT(_INTERVAL,lock,miss) { \ + trace_payload_t payload; \ + payload.dword[0]=(unsigned long)lock; \ + payload.word[2]=(unsigned int)miss; \ + trace_interval_exit(_INTERVAL, 2, &payload, "Event=%d, lock=0x%x, miss=0x%x"); \ +} + +#define TRACE_EVENT_MUTEX_TRYLOCK 0x0603 + +#define TRACE_MUTEX_TRYLOCK(lock,ret_val) { \ + trace_payload_t payload; \ + payload.dword[0]=(unsigned long)lock; \ + payload.word[2]=(unsigned int)ret_val; \ + trace_event(TRACE_EVENT_MUTEX_TRYLOCK, 2, &payload, "Event=%d, lock=0x%x, ret_val=0x%x", _LEVEL); \ +} + +#define TRACE_EVENT_MUTEX_UNLOCK 0x0703 + +#define TRACE_MUTEX_UNLOCK(lock) { \ + trace_payload_t payload; \ + payload.dword[0]=(unsigned long)lock; \ + trace_event(TRACE_EVENT_MUTEX_UNLOCK, 1, &payload, "Event=%d, lock=0x%x", _LEVEL); \ +} + +#else /* LIBSYNC_TRACE */ + +#define TRACE_MUTEX_INIT(lock) +#define TRACE_MUTEX_LOCK_ENTRY(_INTERVAL) +#define TRACE_MUTEX_LOCK_EXIT(_INTERVAL,lock,miss) +#define TRACE_MUTEX_TRYLOCK(lock,ret_val) +#define TRACE_MUTEX_UNLOCK(lock) + +#endif /* LIBSYNC_TRACE */ + +#endif /* __LIBSYNC_SPU_TRACEHOOKS_H__ */ diff --git a/gcell/ibm/sync/spu_source/wait_for_completion.h b/gcell/ibm/sync/spu_source/wait_for_completion.h new file mode 100644 index 00000000..ea7bdbe6 --- /dev/null +++ b/gcell/ibm/sync/spu_source/wait_for_completion.h @@ -0,0 +1,82 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_WAIT_FOR_COMPLETION_H_ +#define _SPU_WAIT_FOR_COMPLETION_H_ + +#include "sync_utils.h" +#include +#include "sync_irq.h" +#include "completion.h" + +/* _wait_for_completion + * Internal routine to wait for completion to + * become true (!0). When completion is false, + * uses lock line reservation lost event to + * sleep until the variable has been changed. + */ +static __inline void _wait_for_completion(completion_ea_t completion) +{ + DECL_COMPLETION_VARS(); + s32 status; + + status = 1; + + ea64.ull = ALIGN128_EA(completion); + offset = OFFSET128_EA_U32(completion); + do { + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + /* if the completion variable has been set elsewhere + * (a signal or broadcast function has been called + * then we get out of the loop, and reset the variable */ + if (likely(buf[offset] != 0)) { + /* decrement the variable */ + buf[offset]--; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLC_CMD); + spu_readch(MFC_RdAtomicStat); + status = 0; + } + } while (status != 0); +} + + + +#endif /* _SPU_WAIT_FOR_COMPLETION_H_ */ diff --git a/gcell/ibm/sync/spu_source/write_lock.h b/gcell/ibm/sync/spu_source/write_lock.h new file mode 100644 index 00000000..7af5175f --- /dev/null +++ b/gcell/ibm/sync/spu_source/write_lock.h @@ -0,0 +1,67 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_WRITE_LOCK_H_ +#define _SPU_WRITE_LOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" + +/** + * write_lock - acquire writer lock, or spin until available. + * @ea: handle to effective address of lock variable. + * + * Description: Acquire an exclusive writer lock, + * or spin until available. The only restriction + * here is that @ea must be word aligned. + * + * Context: This routine should not be called if SPU + * asynchronous interrupts are enabled. + */ +static __inline void _write_lock(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status; + + RAW_SPINLOCK(==, -1); +} + + +#endif /* _SPU_WRITE_LOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/write_trylock.h b/gcell/ibm/sync/spu_source/write_trylock.h new file mode 100644 index 00000000..b3799b37 --- /dev/null +++ b/gcell/ibm/sync/spu_source/write_trylock.h @@ -0,0 +1,72 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_WRITE_TRYLOCK_H_ +#define _SPU_WRITE_TRYLOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" + +/** + * write_trylock - acquire a writer lock, or return immediately. + * @ea: handle to effective address of lock variable. + * + * Try to acquire an exclusive writer lock, or return + * immediately. The only restriction here is that @ea + * must be word aligned. + * + * Returns 1 on success, or 0 on failure. + * + * Caution: + * The application should not call this interface from a tight + * loop!! Use write_lock() instead. + */ +static __inline int _write_trylock(eaddr_t ea) +{ + DECL_MUTEX_VARS(); + s32 status, ret_val; + + RAW_TEST_AND_SET(==, -1); + + return ret_val; +} + + +#endif /* _SPU_WRITE_TRYLOCK_H_ */ diff --git a/gcell/ibm/sync/spu_source/write_unlock.h b/gcell/ibm/sync/spu_source/write_unlock.h new file mode 100644 index 00000000..25b24e18 --- /dev/null +++ b/gcell/ibm/sync/spu_source/write_unlock.h @@ -0,0 +1,69 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _SPU_WRITE_UNLOCK_H_ +#define _SPU_WRITE_UNLOCK_H_ + +#include "sync_utils.h" +#include "mutex.h" +#include + +/** + * write_unlock - release writer lock. + * @rwlock: handle to effective address of lock variable. + * + * Release a single writer lock. + */ +static __inline void _write_unlock(eaddr_t rwlock) +{ + DECL_MUTEX_VARS(); + + ea64.ull = ALIGN128_EA(rwlock); + offset = OFFSET128_EA_U32(rwlock); + MFC_DMA(buf, ea64, size, tagid, MFC_GETLLAR_CMD); + spu_readch(MFC_RdAtomicStat); + + buf[offset] = 0; + MFC_DMA(buf, ea64, size, tagid, MFC_PUTLLUC_CMD); + spu_readch(MFC_RdAtomicStat); +} + + +#endif /* _SPU_WRITE_UNLOCK_H_ */ diff --git a/gcell/include/Makefile.am b/gcell/include/Makefile.am new file mode 100644 index 00000000..c96c6f0a --- /dev/null +++ b/gcell/include/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = gcell + diff --git a/gcell/include/Makefile.in b/gcell/include/Makefile.in new file mode 100644 index 00000000..47a091c9 --- /dev/null +++ b/gcell/include/Makefile.in @@ -0,0 +1,1029 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gcell/include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = gcell +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/include/gcell/Makefile.am b/gcell/include/gcell/Makefile.am new file mode 100644 index 00000000..03255e51 --- /dev/null +++ b/gcell/include/gcell/Makefile.am @@ -0,0 +1,42 @@ +# +# Copyright 2007,2008 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = spu + +gcellinclude_HEADERS = \ + compiler.h \ + gc_aligned_alloc.h \ + gc_atomic.h \ + gc_cdefs.h \ + gc_declare_proc.h \ + gc_job_manager.h \ + gc_jd_queue_data.h \ + gc_jd_queue.h \ + gc_jd_stack.h \ + gc_job_desc.h \ + gc_job_desc_private.h \ + gc_logging.h \ + gc_mbox.h \ + gc_spu_args.h \ + gc_types.h \ + gcp_fft_1d_r2.h \ + memory_barrier.h diff --git a/gcell/include/gcell/Makefile.in b/gcell/include/gcell/Makefile.in new file mode 100644 index 00000000..01ee6600 --- /dev/null +++ b/gcell/include/gcell/Makefile.in @@ -0,0 +1,1079 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(gcellinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gcell/include/gcell +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(gcellincludedir)" +gcellincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(gcellinclude_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = spu +gcellinclude_HEADERS = \ + compiler.h \ + gc_aligned_alloc.h \ + gc_atomic.h \ + gc_cdefs.h \ + gc_declare_proc.h \ + gc_job_manager.h \ + gc_jd_queue_data.h \ + gc_jd_queue.h \ + gc_jd_stack.h \ + gc_job_desc.h \ + gc_job_desc_private.h \ + gc_logging.h \ + gc_mbox.h \ + gc_spu_args.h \ + gc_types.h \ + gcp_fft_1d_r2.h \ + memory_barrier.h + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/include/gcell/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/include/gcell/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-gcellincludeHEADERS: $(gcellinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gcellincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gcellincludedir)" + @list='$(gcellinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gcellincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gcellincludedir)/$$f'"; \ + $(gcellincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gcellincludedir)/$$f"; \ + done + +uninstall-gcellincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gcellinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gcellincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gcellincludedir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(gcellincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-gcellincludeHEADERS + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-gcellincludeHEADERS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-gcellincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-gcellincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/include/gcell/compiler.h b/gcell/include/gcell/compiler.h new file mode 100644 index 00000000..d1adcd12 --- /dev/null +++ b/gcell/include/gcell/compiler.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_COMPILER_H +#define INCLUDED_GCELL_COMPILER_H + +/*! + * \brief Compiler specific hackery. These are for GCC. + */ + +#define _AL8 __attribute__((aligned (8))) +#define _AL16 __attribute__((aligned (16))) +#define _AL128 __attribute__((aligned (128))) + +#define _UNUSED __attribute__((unused)) + +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) +#endif + + +#endif /* INCLUDED_GCELL_COMPILER_H */ diff --git a/gcell/include/gcell/gc_aligned_alloc.h b/gcell/include/gcell/gc_aligned_alloc.h new file mode 100644 index 00000000..bdc21c27 --- /dev/null +++ b/gcell/include/gcell/gc_aligned_alloc.h @@ -0,0 +1,52 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GC_ALIGNED_ALLOC_H +#define INCLUDED_GC_ALIGNED_ALLOC_H + +#include + +/*! + * \brief Return pointer to chunk of storage of size size bytes. + * The allocation will be aligned to an \p alignment boundary. + * + * \param size is the number of bytes to allocate + * \param alignment is the minimum storage alignment in bytes; must be a power of 2. + * + * Throws if can't allocate memory. The storage should be freed + * with "free" when done. The memory is initialized to zero. + */ +void * +gc_aligned_alloc(size_t size, size_t alignment = 128); + +/*! + * \brief Return boost::shared_ptr to chunk of storage of size size bytes. + * The allocation will be aligned to an \p alignment boundary. + * + * \param size is the number of bytes to allocate + * \param alignment is the minimum storage alignment in bytes; must be a power of 2. + * + * Throws if can't allocate memory. The storage should be freed + * with "free" when done. The memory is initialized to zero. + */ +boost::shared_ptr +gc_aligned_alloc_sptr(size_t size, size_t alignment = 128); + +#endif /* INCLUDED_GC_ALIGNED_ALLOC_H */ diff --git a/gcell/include/gcell/gc_atomic.h b/gcell/include/gcell/gc_atomic.h new file mode 100644 index 00000000..51d38af4 --- /dev/null +++ b/gcell/include/gcell/gc_atomic.h @@ -0,0 +1,29 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_ATOMIC_H +#define INCLUDED_GCELL_GC_ATOMIC_H + +#include + +typedef uint32_t gc_atomic_t; + + +#endif /* INCLUDED_GCELL_GC_ATOMIC_H */ diff --git a/gcell/include/gcell/gc_cdefs.h b/gcell/include/gcell/gc_cdefs.h new file mode 100644 index 00000000..0c5fc4ad --- /dev/null +++ b/gcell/include/gcell/gc_cdefs.h @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_CDEFS_H +#define INCLUDED_GCELL_GC_CDEFS_H + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __GC_BEGIN_DECLS extern "C" { +# define __GC_END_DECLS } +#else +# define __GC_BEGIN_DECLS +# define __GC_END_DECLS +#endif + +#endif /* INCLUDED_GCELL_GC_CDEFS_H */ diff --git a/gcell/include/gcell/gc_declare_proc.h b/gcell/include/gcell/gc_declare_proc.h new file mode 100644 index 00000000..ba77e0fb --- /dev/null +++ b/gcell/include/gcell/gc_declare_proc.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GCELL_GC_DECLARE_PROC_H +#define INCLUDED_GCELL_GC_DECLARE_PROC_H + +#include +#include + +/* + * This is C, not C++ code... + * + * ...and is used by both PPE and SPE code + */ +__GC_BEGIN_DECLS + +#define GC_PROC_DEF_SECTION ".gcell.proc_def" + +typedef struct gc_proc_def { +#if defined(__SPU__) + gc_spu_proc_t proc; +#else + uint32_t proc; +#endif + char name[28]; +} _AL16 gc_proc_def_t; + + +#if defined(__SPU__) +/*! + * \brief Tell gcell about a SPU procedure + * + * \param _proc_ pointer to function (gc_spu_proc_t) + * \param _name_ the name of the procedure ("quoted string") + * + * This macro registers the given procedure with the gcell runtime. + * From the PPE, use gc_job_manager::lookup_proc to map \p _name_ to a gc_proc_id_t + */ +#define GC_DECLARE_PROC(_proc_, _name_) \ +static struct gc_proc_def \ + _GCPD_ ## _proc_ __attribute__((section(GC_PROC_DEF_SECTION), used)) = \ + { _proc_, _name_ } +#endif + +__GC_END_DECLS + +#endif /* INCLUDED_GCELL_GC_DECLARE_PROC_H */ diff --git a/gcell/include/gcell/gc_jd_queue.h b/gcell/include/gcell/gc_jd_queue.h new file mode 100644 index 00000000..50777a39 --- /dev/null +++ b/gcell/include/gcell/gc_jd_queue.h @@ -0,0 +1,52 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_JD_QUEUE_H +#define INCLUDED_GCELL_GC_JD_QUEUE_H + +#include + +__GC_BEGIN_DECLS + +/*! + * \brief Initialize the queue to empty. + */ +void +gc_jd_queue_init(gc_jd_queue_t *q); + + +/*! + * \brief Add \p item to the tail of \p q. + */ +void +gc_jd_queue_enqueue(gc_jd_queue_t *q, gc_job_desc_t *item); + + +/*! + * \brief Remove and return item at head of queue, or 0 if queue is empty + */ +gc_job_desc_t * +gc_jd_queue_dequeue(gc_jd_queue_t *q); + +__GC_END_DECLS + + +#endif /* INCLUDED_GCELL_GC_JD_QUEUE_H */ diff --git a/gcell/include/gcell/gc_jd_queue_data.h b/gcell/include/gcell/gc_jd_queue_data.h new file mode 100644 index 00000000..819b3712 --- /dev/null +++ b/gcell/include/gcell/gc_jd_queue_data.h @@ -0,0 +1,52 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_GCELL_GC_JD_QUEUE_DATA_H +#define INCLUDED_GCELL_GC_JD_QUEUE_DATA_H + +#include +#include + +__GC_BEGIN_DECLS + +/*! + * \brief (Lock free someday...) queue for job descriptors + * + * This is the main data structure shared between PPEs and SPEs. + * It is used to enqueue work for SPEs. SPEs or PPEs may enqueue + * work. SPE's dequeue from here. + * + * FIXME make it lock free ;) For now, use a spin lock. + * + * (Fills a single cache line) + */ +typedef struct gc_jd_queue +{ + gc_eaddr_t head _AL16; + gc_eaddr_t tail _AL16; + uint32_t mutex _AL16; // libsync mutex (spin lock) +} _AL128 gc_jd_queue_t; + +__GC_END_DECLS + +#endif /* INCLUDED_GCELL_GC_JD_QUEUE_DATA_H */ + + diff --git a/gcell/include/gcell/gc_jd_stack.h b/gcell/include/gcell/gc_jd_stack.h new file mode 100644 index 00000000..9eab4e40 --- /dev/null +++ b/gcell/include/gcell/gc_jd_stack.h @@ -0,0 +1,70 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_JD_STACK_H +#define INCLUDED_GCELL_GC_JD_STACK_H + +#include +#include + +__GC_BEGIN_DECLS + +/*! + * \brief Lock free stack for job descriptors (used for free list) + * + * This is aligned to a cache line, and fills the cache line, + * to avoid inadvertently losing reservations created with + * the load-and-reserve instructions. + */ + +typedef struct gc_jd_stack +{ + gc_eaddr_t top; + + // pad out to a full cache line + uint8_t _pad[128 - sizeof(gc_eaddr_t)]; +} _AL128 gc_jd_stack_t; + + +/*! + * \brief Initialize the stack to empty. + */ +void +gc_jd_stack_init(gc_jd_stack_t *stack); + + +/*! + * \brief Add \p item to the top of \p stack. + */ +void +gc_jd_stack_push(gc_jd_stack_t *stack, gc_job_desc_t *item); + + +/*! + * \brief pop and return top item on stack, or 0 if stack is empty + */ +gc_job_desc_t * +gc_jd_stack_pop(gc_jd_stack_t *stack); + +__GC_END_DECLS + + +#endif /* INCLUDED_GCELL_GC_JD_STACK_H */ diff --git a/gcell/include/gcell/gc_job_desc.h b/gcell/include/gcell/gc_job_desc.h new file mode 100644 index 00000000..7dc9d182 --- /dev/null +++ b/gcell/include/gcell/gc_job_desc.h @@ -0,0 +1,214 @@ +/* -*- c -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_GCELL_GC_JOB_DESC_H +#define INCLUDED_GCELL_GC_JOB_DESC_H + +/*! + * This file contains the structures that are used to describe how to + * call "jobs" that execute on the SPEs. A "job" is a task, or piece of + * work that you want to run on an SPE. + * + * There is code running in the SPE that knows how to interpret + * these job descriptions. Thus, in most cases, the overhead + * of invoking these is very low. + * + * The whole "job idea" is SPE centric. At first pass, + * the PPE will be constructing jobs and enqueing them. + * However, there is nothing in the implementation that + * prohibits SPEs from creating their own jobs in the + * future. Also, there is nothing prohibiting SPE-to-SPE + * DMA's. + * + * SPE's dequeue and "pull" jobs to themselves, do the work, then + * notify the entity that submitted the job. + */ + +#include +#include + +/* + * This is C, not C++ code... + * + * ...and is used by both PPE and SPE code + */ +__GC_BEGIN_DECLS + + +//! opaque ID that specifies which code to invoke on the SPE +typedef uint32_t gc_proc_id_t; +#define GCP_UNKNOWN_PROC ((gc_proc_id_t) -1) + + +//! final job status +typedef enum { + JS_OK, + JS_SHUTTING_DOWN, // job mananger is shutting down + JS_TOO_MANY_CLIENTS, // too many client threads + JS_UNKNOWN_PROC, // didn't recognize the procedure ID + JS_BAD_DIRECTION, // EA arg has invalid direction + JS_BAD_EAH, // not all EA args have the same high 32 address bits + JS_BAD_N_DIRECT, // too many direct args + JS_BAD_N_EA, // too many EA args + JS_ARGS_TOO_LONG, // total length of EA args exceeds limit + JS_BAD_JUJU, // misc problem: you're having a bad day + JS_BAD_JOB_DESC, // gc_job_desc was not allocated using mgr->alloc_job_desc() + +} gc_job_status_t; + +#define MAX_ARGS_DIRECT 8 // maximum number of args passed using "direct" method +#define MAX_ARGS_EA 8 // maximum number of args passed via EA memory (dma) + +/* + * We support two classes of arguments, + * "direct", which are contained in the gc_job_desc_args and + * "EA", which are copied in/out according to info in gc_job_desc_args + */ + +/*! + * \brief Tag type of "direct" argument + */ +typedef enum { + GCT_S32, + GCT_U32, + GCT_S64, + GCT_U64, + GCT_FLOAT, + GCT_DOUBLE, + GCT_FLT_CMPLX, + GCT_DBL_CMPLX, + GCT_EADDR, + +} gc_tag_t; + + +/*! + * \brief union for passing "direct" argument + */ +typedef union gc_arg_union +{ + int32_t s32; + uint32_t u32; + int64_t s64; + uint64_t u64; + float f; + double d; + //float complex cf; // 64-bits (C99) + //double complex cd; // 128-bits (C99) + gc_eaddr_t ea; // 64-bits +} _AL8 gc_arg_union_t; + + +/*! + * \brief "direct" input or output arguments + */ +typedef struct gc_job_direct_args +{ + uint32_t nargs; // # of "direct" args + gc_tag_t tag[MAX_ARGS_DIRECT] _AL16; // type of direct arg[i] + gc_arg_union_t arg[MAX_ARGS_DIRECT] _AL16; // direct argument values + +} _AL16 gc_job_direct_args_t; + + +// specifies direction for args passed in EA memory + +#define GCJD_DMA_GET 0x01 // in to SPE +#define GCJD_DMA_PUT 0x02 // out from SPE + +/*! + * \brief Description of args passed in EA memory. + * These are DMA'd between EA and LS as specified. + */ +typedef struct gc_job_ea_arg { + //! EA address of buffer + gc_eaddr_t ea_addr; + + //! GC_JD_DMA_* get arg or put arg + uint32_t direction; + + //! number of bytes to get + uint32_t get_size; + + //! number of bytes to put + uint32_t put_size; + +#if defined(__SPU__) + //! local store address (filled in by SPU runtime) + void *ls_addr; + uint32_t _pad[2]; +#else + uint32_t _pad[3]; +#endif + +} _AL16 gc_job_ea_arg_t; + + +typedef struct gc_job_ea_args { + uint32_t nargs; + gc_job_ea_arg_t arg[MAX_ARGS_EA]; + +} _AL16 gc_job_ea_args_t; + + +/*! + * \brief "job description" that is DMA'd to/from the SPE. + * \ingroup gcell + */ +typedef struct gc_job_desc +{ + gc_job_desc_private_t sys; // internals + gc_job_status_t status; // what happened (output) + gc_proc_id_t proc_id; // specifies which procedure to run + gc_job_direct_args_t input; // direct args to SPE + gc_job_direct_args_t output; // direct args from SPE + gc_job_ea_args_t eaa; // args passed via EA memory + +} _AL128 gc_job_desc_t; + + +/*! + * type of procedure invoked on spu + */ +typedef void (*gc_spu_proc_t)(const gc_job_direct_args_t *input, + gc_job_direct_args_t *output, + const gc_job_ea_args_t *eaa); + +#if !defined(__SPU__) + +static inline gc_job_desc_t * +ea_to_jdp(gc_eaddr_t ea) +{ + return (gc_job_desc_t *) ea_to_ptr(ea); +} + +static inline gc_eaddr_t +jdp_to_ea(gc_job_desc_t *item) +{ + return ptr_to_ea(item); +} + +#endif + + +__GC_END_DECLS + +#endif /* INCLUDED_GCELL_GC_JOB_DESC_H */ diff --git a/gcell/include/gcell/gc_job_desc_private.h b/gcell/include/gcell/gc_job_desc_private.h new file mode 100644 index 00000000..fa831a88 --- /dev/null +++ b/gcell/include/gcell/gc_job_desc_private.h @@ -0,0 +1,39 @@ +/* -*- c -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_JOB_DESC_PRIVATE_H +#define INCLUDED_GCELL_GC_JOB_DESC_PRIVATE_H + +// #include + +/*! + * \brief Implementation details we'd like to hide from the user. + */ +typedef struct gc_job_desc_private +{ + gc_eaddr_t next; // used to implement job queue and free list + uint16_t job_id; + uint16_t client_id; + uint32_t direction_union; // union of all gc_job_ea_arg.direction fields +} gc_job_desc_private_t; + +#endif /* INCLUDED_GCELL_GC_JOB_PRIVATE_H */ + diff --git a/gcell/include/gcell/gc_job_manager.h b/gcell/include/gcell/gc_job_manager.h new file mode 100644 index 00000000..8e5de521 --- /dev/null +++ b/gcell/include/gcell/gc_job_manager.h @@ -0,0 +1,287 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_GC_JOB_MANAGER_H +#define INCLUDED_GC_JOB_MANAGER_H + +#include +#include +#include +#include +#include +#include +#include "gc_job_desc.h" + +class gc_job_manager; +typedef boost::shared_ptr gc_job_manager_sptr; +typedef boost::shared_ptr spe_program_handle_sptr; +typedef boost::shared_ptr gc_job_desc_sptr; + +/*! + * \brief Return a boost::shared_ptr to an spe_program_handle_t + * + * \param filename is the name of the SPE ELF executable to open. + * + * Calls spe_image_open to open the file. If successful returns a + * boost::shared_ptr that will call spe_image_close when it's time to + * free the object. + * + * Returns the equivalent of the NULL pointer if the file cannot be + * opened, or if it's not an SPE ELF object file. + * + * \sa gc_program_handle_from_address + */ +spe_program_handle_sptr +gc_program_handle_from_filename(const std::string &filename); + +/*! + * \brief Return a boost::shared_ptr to an spe_program_handle_t + * + * \param handle is a non-zero pointer to an embedded SPE image. + * + * If successful returns a boost::shared_ptr that does nothing when + * it's time to free the object. + * + * \sa gc_program_handle_from_filename + */ +spe_program_handle_sptr +gc_program_handle_from_address(spe_program_handle_t *handle); + +/*! + * \brief map gc_job_status_t into a string + */ +const std::string +gc_job_status_string(gc_job_status_t status); + +/* + * \brief Options that configure the job_manager. + * The default values are reasonable. + */ +struct gc_jm_options { + unsigned int max_jobs; // max # of job descriptors in system + unsigned int max_client_threads; // max # of client threads of job manager + unsigned int nspes; // how many SPEs shall we use? 0 -> all of them + bool gang_schedule; // shall we gang schedule? + bool use_affinity; // shall we try for affinity (FIXME not implmented) + bool enable_logging; // shall we log SPE events? + uint32_t log2_nlog_entries; // log2 of number of log entries (default is 12 == 4k) + spe_program_handle_sptr program_handle; // program to load into SPEs + + gc_jm_options() : + max_jobs(0), max_client_threads(0), nspes(0), + gang_schedule(false), use_affinity(false), + enable_logging(false), log2_nlog_entries(12) + { + } + + gc_jm_options(spe_program_handle_sptr program_handle_, + unsigned int nspes_ = 0) : + max_jobs(0), max_client_threads(0), nspes(nspes_), + gang_schedule(false), use_affinity(false), + enable_logging(false), log2_nlog_entries(12), + program_handle(program_handle_) + { + } +}; + +enum gc_wait_mode { + GC_WAIT_ANY, + GC_WAIT_ALL, +}; + +/* + * exception classes + */ +class gc_exception : public std::runtime_error +{ +public: + gc_exception(const std::string &msg); +}; + +class gc_unknown_proc : public gc_exception +{ +public: + gc_unknown_proc(const std::string &msg); +}; + +class gc_bad_alloc : public gc_exception +{ +public: + gc_bad_alloc(const std::string &msg); +}; + +class gc_bad_align : public gc_exception +{ +public: + gc_bad_align(const std::string &msg); +}; + +class gc_bad_submit : public gc_exception +{ +public: + gc_bad_submit(const std::string &name, gc_job_status_t status); +}; + +/* + * \brief Create an instance of the job manager + */ +gc_job_manager_sptr +gc_make_job_manager(const gc_jm_options *options = 0); + + +/*! + * \brief Abstract class that manages SPE jobs. + * \ingroup gcell + * + * There is typically a single instance derived from this class. + * It is safe to call its methods from any thread. + */ +class gc_job_manager : boost::noncopyable +{ +public: + gc_job_manager(const gc_jm_options *options = 0); + + virtual ~gc_job_manager(); + + /*! + * Stop accepting new jobs. Wait for existing jobs to complete. + * Return all managed SPE's to the system. + */ + virtual bool shutdown() = 0; + + /*! + * \brief Return number of SPE's currently allocated to job manager. + */ + virtual int nspes() const = 0; + + /*! + * \brief Return a pointer to a properly aligned job descriptor, + * or throws gc_bad_alloc if there are none available. + */ + virtual gc_job_desc *alloc_job_desc() = 0; + + /* + *! Free a job descriptor previously allocated with alloc_job_desc() + * + * \param[in] jd pointer to job descriptor to free. + */ + virtual void free_job_desc(gc_job_desc *jd) = 0; + + /*! + * \brief Submit a job for asynchronous processing on an SPE. + * + * \param[in] jd pointer to job description + * + * The caller must not read or write the job description + * or any of the memory associated with any indirect arguments + * until after calling wait_job. + * + * \returns true iff the job was successfully enqueued. + * If submit_job returns false, check jd->status for additional info. + */ + virtual bool submit_job(gc_job_desc *jd) = 0; + + /*! + * \brief Wait for job to complete. + * + * A thread may only wait for jobs which it submitted. + * + * \returns true if sucessful, else false. + */ + virtual bool + wait_job(gc_job_desc *jd) = 0; + + /*! + * \brief wait for 1 or more jobs to complete. + * + * \param[in] njobs is the length of arrays \p jd and \p done. + * \param[in] jd are the jobs that are to be waited for. + * \param[out] done indicates whether the corresponding job is complete. + * \param[in] mode indicates whether to wait for ALL or ANY of the jobs + * in \p jd to complete. + * + * A thread may only wait for jobs which it submitted. + * + * \returns number of jobs completed, or -1 if error. + * The caller must examine the status field of each job to confirm + * successful completion of the job. + */ + virtual int + wait_jobs(unsigned int njobs, + gc_job_desc *jd[], bool done[], gc_wait_mode mode) = 0; + + /*! + * Return the maximum number of bytes of EA arguments that may be + * copied to or from the SPE in a single job. The limit applies + * independently to the "get" and "put" args. + * \sa gc_job_desc_t, gc_job_ea_args_t + */ + virtual int ea_args_maxsize() = 0; + + /*! + * Return gc_proc_id_t associated with spu procedure \p proc_name if one + * exists, otherwise throws gc_unknown_proc. + */ + virtual gc_proc_id_t lookup_proc(const std::string &proc_name) = 0; + + /*! + * Return a vector of all known spu procedure names. + */ + virtual std::vector proc_names() = 0; + + virtual void set_debug(int debug); + virtual int debug(); + + /* ----- static methods ----- */ + + /*! + * \brief Set the singleton gc_job_manager instance. + * \param mgr is the job manager instance. + * + * The singleton is weakly held, thus the caller must maintain + * a reference to the mgr for the duration. (If we held the + * manager strongly, the destructor would never be called, and the + * resources (SPEs) would not be returned.) Bottom line: the + * caller is responsible for life-time management. + */ + static void set_singleton(gc_job_manager_sptr mgr); + + /*! + * \brief Retrieve the singleton gc_job_manager instance. + * + * Returns the singleton gc_job_manager instance or raises + * boost::bad_weak_ptr if the singleton is empty. + */ + static gc_job_manager_sptr singleton(); + + /*! + * \brief return a boost::shared_ptr to a job descriptor. + */ + static gc_job_desc_sptr make_jd_sptr(gc_job_manager_sptr mgr, gc_job_desc *jd); + + /*! + * \brief allocate a job descriptor and return a boost::shared_ptr to it. + */ + static gc_job_desc_sptr alloc_job_desc(gc_job_manager_sptr mgr); +}; + + +#endif /* INCLUDED_GC_JOB_MANAGER_H */ diff --git a/gcell/include/gcell/gc_logging.h b/gcell/include/gcell/gc_logging.h new file mode 100644 index 00000000..9cc6fa77 --- /dev/null +++ b/gcell/include/gcell/gc_logging.h @@ -0,0 +1,166 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GCELL_GC_LOGGING_H +#define INCLUDED_GCELL_GC_LOGGING_H + +#include +#include + +__GC_BEGIN_DECLS + +typedef struct gc_log { + gc_eaddr_t base; // gc_log_entry_t * (16 byte aligned) + uint32_t nentries; // number of entries (power-of-2) +} gc_log_t; + +typedef struct gc_log_entry { + uint32_t seqno; // monotonic sequence number + uint32_t timestamp; // decrementer value (wraps every 53s on PS3) + uint16_t subsystem; // 0 to 255 reserved for system, user gets 256 and up + uint16_t event; + uint32_t info[5]; +} _AL16 gc_log_entry_t; + +#define GCL_SS_SYS 0 // lowest system reserved subsystem +#define GCL_SS_USER 256 // lowest user reserved subsystem + + +/* + * The resulting log files can be displayed using using: + * + * $ od -t x4 -w32 spu_log.00 | less + */ + + +#if defined(__SPU__) + +/*! + * System fills in seqno and timestamp. User is responsible for the rest. + */ + +void _gc_log_write(gc_log_entry_t entry); + +#ifdef ENABLE_GC_LOGGING +#define gc_log_write(entry) _gc_log_write(entry) +#else +#define gc_log_write(entry) do { } while (0) +#endif + +inline static void +gc_log_write0(int subsystem, int event) +{ + gc_log_entry_t e; + e.subsystem = subsystem; + e.event = event; + e.info[0] = 0; + e.info[1] = 0; + e.info[2] = 0; + e.info[3] = 0; + e.info[4] = 0; + gc_log_write(e); +} + +inline static void +gc_log_write1(int subsystem, int event, + uint32_t info0) +{ + gc_log_entry_t e; + e.subsystem = subsystem; + e.event = event; + e.info[0] = info0; + e.info[1] = 0; + e.info[2] = 0; + e.info[3] = 0; + e.info[4] = 0; + gc_log_write(e); +} + +inline static void +gc_log_write2(int subsystem, int event, + uint32_t info0, uint32_t info1) +{ + gc_log_entry_t e; + e.subsystem = subsystem; + e.event = event; + e.info[0] = info0; + e.info[1] = info1; + e.info[2] = 0; + e.info[3] = 0; + e.info[4] = 0; + gc_log_write(e); +} + +inline static void +gc_log_write3(int subsystem, int event, + uint32_t info0, uint32_t info1, uint32_t info2) +{ + gc_log_entry_t e; + e.subsystem = subsystem; + e.event = event; + e.info[0] = info0; + e.info[1] = info1; + e.info[2] = info2; + e.info[3] = 0; + e.info[4] = 0; + gc_log_write(e); +} + +inline static void +gc_log_write4(int subsystem, int event, + uint32_t info0, uint32_t info1, uint32_t info2, uint32_t info3) +{ + gc_log_entry_t e; + e.subsystem = subsystem; + e.event = event; + e.info[0] = info0; + e.info[1] = info1; + e.info[2] = info2; + e.info[3] = info3; + e.info[4] = 0; + gc_log_write(e); +} + +inline static void +gc_log_write5(int subsystem, int event, + uint32_t info0, uint32_t info1, uint32_t info2, uint32_t info3, uint32_t info4) +{ + gc_log_entry_t e; + e.subsystem = subsystem; + e.event = event; + e.info[0] = info0; + e.info[1] = info1; + e.info[2] = info2; + e.info[3] = info3; + e.info[4] = info4; + gc_log_write(e); +} + +/*! + * One time initialization called by system runtime + */ +void +_gc_log_init(gc_log_t log_info); + +#endif + +__GC_END_DECLS + +#endif /* INCLUDED_GCELL_GC_LOGGING_H */ diff --git a/gcell/include/gcell/gc_mbox.h b/gcell/include/gcell/gc_mbox.h new file mode 100644 index 00000000..9793401f --- /dev/null +++ b/gcell/include/gcell/gc_mbox.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef INCLUDED_GCELL_GC_MBOX_H +#define INCLUDED_GCELL_GC_MBOX_H + +/* + * The PPE and SPE exchange a few 32-bit messages via mailboxes. + * All have a 4 bit opcode in the high bits. + * + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | op | arg | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ + +#define MK_MBOX_MSG(cmd, args) ((((cmd) & 0xf) << 28) | ((args) & 0x0fffffff)) +#define MBOX_MSG_OP(msg) (((msg) >> 28) & 0xf) +#define MBOX_MSG_ARG(msg) ((msg) & 0x0fffffff) + +// PPE to SPE (sent via SPE Read Inbound Mailbox) + +#define OP_EXIT 0x0 // exit now +#define OP_GET_SPU_BUFSIZE 0x1 +#define OP_CHECK_QUEUE 0x2 + +// SPE to PPE (sent via SPE Write Outbound Interrupt Mailbox) + +#define OP_JOBS_DONE 0x3 // arg is 0 or 1, indicating which + // gc_completion_info_t contains the info +#define OP_SPU_BUFSIZE 0x4 // arg is max number of bytes + + +#endif /* INCLUDED_GCELL_GC_MBOX_H */ diff --git a/gcell/include/gcell/gc_spu_args.h b/gcell/include/gcell/gc_spu_args.h new file mode 100644 index 00000000..3719bac2 --- /dev/null +++ b/gcell/include/gcell/gc_spu_args.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_SPU_ARGS_H +#define INCLUDED_GCELL_GC_SPU_ARGS_H + +#include +#include + +// args passed to SPE at initialization time + +typedef struct gc_spu_args { + gc_eaddr_t queue; // address of job queue (gc_jd_queue_t *) + gc_eaddr_t comp_info[2]; // completion info (gc_comp_info_t *) + uint32_t spu_idx; // which spu we are: [0,nspus-1] + uint32_t nspus; // number of spus we're using + uint32_t proc_def_ls_addr; // LS addr of proc_def table + uint32_t nproc_defs; // number of proc_defs in table + gc_log_t log; // logging info +} _AL16 gc_spu_args_t; + + +#define GC_CI_NJOBS 62 // makes gc_comp_info 1 cache line long + +/*! + * \brief Used to return info to PPE on which jobs are completed. + * + * When each SPE is initalized, it is passed EA pointers to two of + * these structures. The SPE uses these to communicate which jobs + * that it has worked on are complete. The SPE notifies the PPE by + * sending an OP_JOBS_DONE message (see gc_mbox.h) with an argument of + * 0 or 1, indicating which of the two comp_info's to examine. The + * SPE sets the in_use flag to 1 before DMA'ing to the PPE. When the + * PPE is done with the structure, it must clear the in_use field to + * let the SPE know it can begin using it again. + */ +typedef struct gc_comp_info { + uint16_t in_use; // set by SPE, cleared by PPE when it's finished + uint16_t ncomplete; // number of valid job_id's + uint16_t job_id[GC_CI_NJOBS]; // job_id's of completed jobs +} _AL128 gc_comp_info_t; + +#endif /* INCLUDED_GCELL_GC_SPU_ARGS_H */ diff --git a/gcell/include/gcell/gc_types.h b/gcell/include/gcell/gc_types.h new file mode 100644 index 00000000..b75bcd8d --- /dev/null +++ b/gcell/include/gcell/gc_types.h @@ -0,0 +1,63 @@ +/* -*- c -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_GC_TYPES_H +#define INCLUDED_GCELL_GC_TYPES_H + +#include +#include +#include + +__GC_BEGIN_DECLS + +#ifndef __cplusplus +typedef int bool; +#define true 1 +#define false 0 +#endif + +/*! + * \brief 64-bit integer type representing an effective address (EA) + * + * This type is always 64-bits, regardless of whether we're + * running in 32 or 64-bit mode. + */ +typedef uint64_t gc_eaddr_t; + +#if !defined(__SPU__) +static inline void * +ea_to_ptr(gc_eaddr_t ea) +{ + // in 32-bit mode we're tossing the top 32-bits. + return (void *) (uintptr_t) ea; +} + +static inline gc_eaddr_t +ptr_to_ea(void *p) +{ + // two steps to avoid compiler warning in 32-bit mode. + return (gc_eaddr_t) (uintptr_t) p; +} +#endif + +__GC_END_DECLS + +#endif /* INCLUDED_GCELL_GC_TYPES_H */ diff --git a/gcell/include/gcell/gcp_fft_1d_r2.h b/gcell/include/gcell/gcp_fft_1d_r2.h new file mode 100644 index 00000000..c1d33183 --- /dev/null +++ b/gcell/include/gcell/gcp_fft_1d_r2.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GCP_FFT_1D_R2_H +#define INCLUDED_GCP_FFT_1D_R2_H + +#include +#include + +/*! + * \brief Submit a job that computes the forward or inverse FFT. + * + * \param mgr is the job manager instance + * \param log2_fft_length is the log2 of the fft_length (4 <= x <= 12). + * \param forward is true to compute the forward transform, else the inverse. + * \param shift indicates if an "fftshift" should be applied to the output data + * \param out is the fft_length output from FFT (must be 16-byte aligned). + * \param in is the fft_length input to FFT (must be 16-byte aligned). + * \param twiddle is fft_length/4 twiddle factor input to FFT (must be 16-byte aligned). + * \param window is the window to be applied to the input data. + * The window length must be either 0 or fft_length (must be 16-byte aligned). + * + * Returns a shared_ptr to a job descriptor which should be passed to wait_job*. + * Throws an exception in the event of a problem. + * This uses the FFTW conventions for scaling. That is, neither the forward nor inverse + * are scaled by 1/fft_length. + */ +gc_job_desc_sptr +gcp_fft_1d_r2_submit(gc_job_manager_sptr mgr, + unsigned int log2_fft_length, + bool forward, + bool shift, + std::complex *out, + const std::complex *in, + const std::complex *twiddle, + const float *window); + +/*! + * \brief Compute twiddle factors + * + * \param log2_fft_length is the log2 of the fft_length. + * \param W is fft_length/4 twiddle factor output (must be 16-byte aligned). + */ +void +gcp_fft_1d_r2_twiddle(unsigned int log2_fft_length, std::complex *W); + +#endif /* INCLUDED_GCP_FFT_1D_R2_H */ diff --git a/gcell/include/gcell/memory_barrier.h b/gcell/include/gcell/memory_barrier.h new file mode 100644 index 00000000..4a1f8700 --- /dev/null +++ b/gcell/include/gcell/memory_barrier.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GCELL_MEMORY_BARRIER_H +#define INCLUDED_GCELL_MEMORY_BARRIER_H + +/* + * powerpc memory barriers + * + * The sync instruction guarantees that all memory accesses initiated + * by this processor have been performed (with respect to all other + * mechanisms that access memory). The eieio instruction is a barrier + * providing an ordering (separately) for (a) cacheable stores and (b) + * loads and stores to non-cacheable memory (e.g. I/O devices). + * + * smp_mb() prevents loads and stores being reordered across this point. + * smp_rmb() prevents loads being reordered across this point. + * smp_wmb() prevents stores being reordered across this point. + * + * We have to use the sync instructions for smp_mb(), since lwsync + * doesn't order loads with respect to previous stores. Lwsync is + * fine for smp_rmb(), though. For smp_wmb(), we use eieio since it + * is only used to order updates to system memory. + * + * For details, see "PowerPC Virtual Environment Architecture, Book + * II". Especially Chapter 1, "Storage Model" and Chapter 3, "Storage + * Control Instructions." (site:ibm.com) + */ + +static inline void smp_mb(void) +{ + __asm__ volatile ("sync" : : : "memory"); +} + +static inline void smp_rmb(void) +{ + __asm__ volatile ("lwsync" : : : "memory"); +} + +static inline void smp_wmb(void) +{ + __asm__ volatile ("eieio" : : : "memory"); +} + + +#endif /* INCLUDED_GCELL_MEMORY_BARRIER_H */ diff --git a/gcell/include/gcell/spu/Makefile.am b/gcell/include/gcell/spu/Makefile.am new file mode 100644 index 00000000..58816819 --- /dev/null +++ b/gcell/include/gcell/spu/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2007,2008 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. +# + +include $(top_srcdir)/Makefile.common + +gcellspuinclude_HEADERS = \ + fft_1d.h \ + fft_1d_r2.h \ + gc_delay.h \ + gc_jd_queue.h \ + gc_random.h \ + gc_spu_macs.h \ + libfft.h diff --git a/gcell/include/gcell/spu/Makefile.in b/gcell/include/gcell/spu/Makefile.in new file mode 100644 index 00000000..df6d0191 --- /dev/null +++ b/gcell/include/gcell/spu/Makefile.in @@ -0,0 +1,954 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(gcellspuinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gcell/include/gcell/spu +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(gcellspuincludedir)" +gcellspuincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(gcellspuinclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +gcellspuinclude_HEADERS = \ + fft_1d.h \ + fft_1d_r2.h \ + gc_delay.h \ + gc_jd_queue.h \ + gc_random.h \ + gc_spu_macs.h \ + libfft.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/include/gcell/spu/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/include/gcell/spu/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-gcellspuincludeHEADERS: $(gcellspuinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gcellspuincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gcellspuincludedir)" + @list='$(gcellspuinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gcellspuincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gcellspuincludedir)/$$f'"; \ + $(gcellspuincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gcellspuincludedir)/$$f"; \ + done + +uninstall-gcellspuincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gcellspuinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gcellspuincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gcellspuincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(gcellspuincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-gcellspuincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-gcellspuincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-gcellspuincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-gcellspuincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/include/gcell/spu/fft_1d.h b/gcell/include/gcell/spu/fft_1d.h new file mode 100644 index 00000000..355b84bf --- /dev/null +++ b/gcell/include/gcell/spu/fft_1d.h @@ -0,0 +1,103 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _FFT_1D_H_ +#define _FFT_1D_H_ 1 + +#include + +/* BIT_SWAP - swaps up to 16 bits of the integer _i according to the + * pattern specified by _pat. + */ +#define BIT_SWAP(_i, _pat) spu_extract(spu_gather(spu_shuffle(spu_maskb(_i), _pat, _pat)), 0) + + +#ifndef MAX_FFT_1D_SIZE +#define MAX_FFT_1D_SIZE 8192 +#endif + +#ifndef INV_SQRT_2 +#define INV_SQRT_2 0.7071067811865 +#endif + + +/* The following macro, FFT_1D_BUTTERFLY, performs a 4 way SIMD basic butterfly + * operation. The inputs are in parallel arrays (seperate real and imaginary + * vectors). + * + * p --------------------------> P = p + q*Wi + * \ / + * \ / + * \ / + * \/ + * /\ + * / \ + * / \ + * ____ / \ + * q --| Wi |-----------------> Q = p - q*Wi + * ---- + */ + +#define FFT_1D_BUTTERFLY(_P_re, _P_im, _Q_re, _Q_im, _p_re, _p_im, _q_re, _q_im, _W_re, _W_im) { \ + vector float _qw_re, _qw_im; \ + \ + _qw_re = spu_msub(_q_re, _W_re, spu_mul(_q_im, _W_im)); \ + _qw_im = spu_madd(_q_re, _W_im, spu_mul(_q_im, _W_re)); \ + _P_re = spu_add(_p_re, _qw_re); \ + _P_im = spu_add(_p_im, _qw_im); \ + _Q_re = spu_sub(_p_re, _qw_re); \ + _Q_im = spu_sub(_p_im, _qw_im); \ +} + + +/* FFT_1D_BUTTERFLY_HI is equivalent to FFT_1D_BUTTERFLY with twiddle factors (W_im, -W_re) + */ +#define FFT_1D_BUTTERFLY_HI(_P_re, _P_im, _Q_re, _Q_im, _p_re, _p_im, _q_re, _q_im, _W_re, _W_im) { \ + vector float _qw_re, _qw_im; \ + \ + _qw_re = spu_madd(_q_re, _W_im, spu_mul(_q_im, _W_re)); \ + _qw_im = spu_msub(_q_im, _W_im, spu_mul(_q_re, _W_re)); \ + _P_re = spu_add(_p_re, _qw_re); \ + _P_im = spu_add(_p_im, _qw_im); \ + _Q_re = spu_sub(_p_re, _qw_re); \ + _Q_im = spu_sub(_p_im, _qw_im); \ +} + +#endif /* _FFT_1D_H_ */ diff --git a/gcell/include/gcell/spu/fft_1d_r2.h b/gcell/include/gcell/spu/fft_1d_r2.h new file mode 100644 index 00000000..a51cbc34 --- /dev/null +++ b/gcell/include/gcell/spu/fft_1d_r2.h @@ -0,0 +1,529 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ +#ifndef _FFT_1D_R2_H_ +#define _FFT_1D_R2_H_ 1 + +#include "fft_1d.h" + +/* fft_1d_r2 + * --------- + * Performs a single precision, complex Fast Fourier Transform using + * the DFT (Discrete Fourier Transform) with radix-2 decimation in time. + * The input is an array of complex numbers of length (1<. Note: This routine can support an in-place transformation + * by specifying and to be the same array. + * + * This implementation utilizes the Cooley-Tukey algorithm consisting + * of stages. The basic operation is the butterfly. + * + * p --------------------------> P = p + q*Wi + * \ / + * \ / + * \ / + * \/ + * /\ + * / \ + * / \ + * ____ / \ + * q --| Wi |-----------------> Q = p - q*Wi + * ---- + * + * This routine also requires pre-computed twiddle values, W. W is an + * array of single precision complex numbers of length 1<<(log2_size-2) + * and is computed as follows: + * + * for (i=0; i> 1; + n_4 = n >> 2; + n_8 = n >> 3; + n_16 = n >> 4; + + n_3_16 = n_8 + n_16; + + /* Compute a byte reverse shuffle pattern to be used to produce + * an address bit swap. + */ + reverse = spu_or(spu_slqwbyte(spu_splats((unsigned char)0x80), log2_size), + spu_rlmaskqwbyte(((vec_uchar16){15,14,13,12, 11,10,9,8, + 7, 6, 5, 4, 3, 2,1,0}), + log2_size-16)); + + /* Perform the first 3 stages of the FFT. These stages differs from + * other stages in that the inputs are unscrambled and the data is + * reformated into parallel arrays (ie, seperate real and imaginary + * arrays). The term "unscramble" means the bit address reverse the + * data array. In addition, the first three stages have simple twiddle + * weighting factors. + * stage 1: (1, 0) + * stage 2: (1, 0) and (0, -1) + * stage 3: (1, 0), (0.707, -0.707), (0, -1), (-0.707, -0.707) + * + * The arrays are processed as two halves, simultaneously. The lo (first + * half) and hi (second half). This is done because the scramble + * shares source value between each half of the output arrays. + */ + i = 0; + i_rev = 0; + + in0 = in; + in1 = in + n_8; + in2 = in + n_16; + in3 = in + n_3_16; + + in4 = in + n_4; + in5 = in1 + n_4; + in6 = in2 + n_4; + in7 = in3 + n_4; + + re0 = re; + re1 = re + n_8; + im0 = im; + im1 = im + n_8; + + w0_re = (vector float) { 1.0f, INV_SQRT_2, 0.0f, -INV_SQRT_2}; + w0_im = (vector float) { 0.0f, -INV_SQRT_2, -1.0f, -INV_SQRT_2}; + + do { + src_lo0 = in0[i_rev]; + src_lo1 = in1[i_rev]; + src_lo2 = in2[i_rev]; + src_lo3 = in3[i_rev]; + + src_hi0 = in4[i_rev]; + src_hi1 = in5[i_rev]; + src_hi2 = in6[i_rev]; + src_hi3 = in7[i_rev]; + + /* Perform scramble. + */ + dst_lo0 = spu_shuffle(src_lo0, src_hi0, shuf_lo); + dst_hi0 = spu_shuffle(src_lo0, src_hi0, shuf_hi); + dst_lo1 = spu_shuffle(src_lo1, src_hi1, shuf_lo); + dst_hi1 = spu_shuffle(src_lo1, src_hi1, shuf_hi); + dst_lo2 = spu_shuffle(src_lo2, src_hi2, shuf_lo); + dst_hi2 = spu_shuffle(src_lo2, src_hi2, shuf_hi); + dst_lo3 = spu_shuffle(src_lo3, src_hi3, shuf_lo); + dst_hi3 = spu_shuffle(src_lo3, src_hi3, shuf_hi); + + /* Perform the stage 1 butterfly. The multiplier constant, ppmm, + * is used to control the sign of the operands since a single + * quadword contains both of P and Q valule of the butterfly. + */ + pq_lo0 = spu_madd(ppmm, dst_lo0, spu_rlqwbyte(dst_lo0, 8)); + pq_hi0 = spu_madd(ppmm, dst_hi0, spu_rlqwbyte(dst_hi0, 8)); + pq_lo1 = spu_madd(ppmm, dst_lo1, spu_rlqwbyte(dst_lo1, 8)); + pq_hi1 = spu_madd(ppmm, dst_hi1, spu_rlqwbyte(dst_hi1, 8)); + pq_lo2 = spu_madd(ppmm, dst_lo2, spu_rlqwbyte(dst_lo2, 8)); + pq_hi2 = spu_madd(ppmm, dst_hi2, spu_rlqwbyte(dst_hi2, 8)); + pq_lo3 = spu_madd(ppmm, dst_lo3, spu_rlqwbyte(dst_lo3, 8)); + pq_hi3 = spu_madd(ppmm, dst_hi3, spu_rlqwbyte(dst_hi3, 8)); + + /* Perfrom the stage 2 butterfly. For this stage, the + * inputs pq are still interleaved (p.real, p.imag, q.real, + * q.imag), so we must first re-order the data into + * parallel arrays as well as perform the reorder + * associated with the twiddle W[n/4], which equals + * (0, -1). + * + * ie. (A, B) * (0, -1) => (B, -A) + */ + re_lo0 = spu_madd(ppmm, + spu_shuffle(pq_lo1, pq_lo1, shuf_0303), + spu_shuffle(pq_lo0, pq_lo0, shuf_0202)); + im_lo0 = spu_madd(pmmp, + spu_shuffle(pq_lo1, pq_lo1, shuf_1212), + spu_shuffle(pq_lo0, pq_lo0, shuf_1313)); + + re_lo1 = spu_madd(ppmm, + spu_shuffle(pq_lo3, pq_lo3, shuf_0303), + spu_shuffle(pq_lo2, pq_lo2, shuf_0202)); + im_lo1 = spu_madd(pmmp, + spu_shuffle(pq_lo3, pq_lo3, shuf_1212), + spu_shuffle(pq_lo2, pq_lo2, shuf_1313)); + + + re_hi0 = spu_madd(ppmm, + spu_shuffle(pq_hi1, pq_hi1, shuf_0303), + spu_shuffle(pq_hi0, pq_hi0, shuf_0202)); + im_hi0 = spu_madd(pmmp, + spu_shuffle(pq_hi1, pq_hi1, shuf_1212), + spu_shuffle(pq_hi0, pq_hi0, shuf_1313)); + + re_hi1 = spu_madd(ppmm, + spu_shuffle(pq_hi3, pq_hi3, shuf_0303), + spu_shuffle(pq_hi2, pq_hi2, shuf_0202)); + im_hi1 = spu_madd(pmmp, + spu_shuffle(pq_hi3, pq_hi3, shuf_1212), + spu_shuffle(pq_hi2, pq_hi2, shuf_1313)); + + + /* Perform stage 3 butterfly. + */ + FFT_1D_BUTTERFLY(re0[0], im0[0], re0[1], im0[1], re_lo0, im_lo0, re_lo1, im_lo1, w0_re, w0_im); + FFT_1D_BUTTERFLY(re1[0], im1[0], re1[1], im1[1], re_hi0, im_hi0, re_hi1, im_hi1, w0_re, w0_im); + + re0 += 2; + re1 += 2; + im0 += 2; + im1 += 2; + + i += 8; + i_rev = BIT_SWAP(i, reverse) / 2; + } while (i < n_2); + + /* Process stages 4 to log2_size-2 + */ + for (stage=4, stride=4; stage> stage; + w_2stride = n >> stage; + w_3stride = w_stride + w_2stride; + w_4stride = w_2stride + w_2stride; + + W0 = W; + W1 = W + w_stride; + W2 = W + w_2stride; + W3 = W + w_3stride; + + stride_2 = stride >> 1; + stride_4 = stride >> 2; + stride_3_4 = stride_2 + stride_4; + + re0 = re; im0 = im; + re1 = re + stride_2; im1 = im + stride_2; + re2 = re + stride_4; im2 = im + stride_4; + re3 = re + stride_3_4; im3 = im + stride_3_4; + + for (i=0, offset=0; i> stage; + w_2stride = n >> stage; + w_3stride = w_stride + w_2stride; + w_4stride = w_2stride + w_2stride; + + stride_2 = stride >> 1; + stride_4 = stride >> 2; + + stride_3_4 = stride_2 + stride_4; + + re0 = re; im0 = im; + re1 = re + stride_2; im1 = im + stride_2; + re2 = re + stride_4; im2 = im + stride_4; + re3 = re + stride_3_4; im3 = im + stride_3_4; + + for (i=0, offset=0; i. + * + * This loop has been manually unrolled by 2 to improve + * dual issue rates and reduce stalls. This unrolling + * forces a minimum FFT size of 32. + */ + re0 = re; + re1 = re + n_8; + re2 = re + n_16; + re3 = re + n_3_16; + + im0 = im; + im1 = im + n_8; + im2 = im + n_16; + im3 = im + n_3_16; + + out0 = out; + out1 = out + n_4; + out2 = out + n_8; + out3 = out1 + n_8; + + i = n_16; + + do { + /* Fetch the twiddle factors + */ + w0 = W[0]; + w1 = W[1]; + w2 = W[2]; + w3 = W[3]; + + W += 4; + + w0_re = spu_shuffle(w0, w1, shuf_0246); + w0_im = spu_shuffle(w0, w1, shuf_1357); + w1_re = spu_shuffle(w2, w3, shuf_0246); + w1_im = spu_shuffle(w2, w3, shuf_1357); + + /* Fetch the butterfly inputs, reals and imaginaries + */ + re_lo0 = re0[0]; im_lo0 = im0[0]; + re_lo1 = re1[0]; im_lo1 = im1[0]; + re_lo2 = re0[1]; im_lo2 = im0[1]; + re_lo3 = re1[1]; im_lo3 = im1[1]; + + re_hi0 = re2[0]; im_hi0 = im2[0]; + re_hi1 = re3[0]; im_hi1 = im3[0]; + re_hi2 = re2[1]; im_hi2 = im2[1]; + re_hi3 = re3[1]; im_hi3 = im3[1]; + + re0 += 2; im0 += 2; + re1 += 2; im1 += 2; + re2 += 2; im2 += 2; + re3 += 2; im3 += 2; + + /* Perform the butterflys + */ + FFT_1D_BUTTERFLY (out_re_lo0, out_im_lo0, out_re_lo1, out_im_lo1, re_lo0, im_lo0, re_lo1, im_lo1, w0_re, w0_im); + FFT_1D_BUTTERFLY (out_re_lo2, out_im_lo2, out_re_lo3, out_im_lo3, re_lo2, im_lo2, re_lo3, im_lo3, w1_re, w1_im); + + FFT_1D_BUTTERFLY_HI(out_re_hi0, out_im_hi0, out_re_hi1, out_im_hi1, re_hi0, im_hi0, re_hi1, im_hi1, w0_re, w0_im); + FFT_1D_BUTTERFLY_HI(out_re_hi2, out_im_hi2, out_re_hi3, out_im_hi3, re_hi2, im_hi2, re_hi3, im_hi3, w1_re, w1_im); + + /* Interleave the results and store them into the output buffers (ie, + * the original input buffers. + */ + out0[0] = spu_shuffle(out_re_lo0, out_im_lo0, shuf_0415); + out0[1] = spu_shuffle(out_re_lo0, out_im_lo0, shuf_2637); + out0[2] = spu_shuffle(out_re_lo2, out_im_lo2, shuf_0415); + out0[3] = spu_shuffle(out_re_lo2, out_im_lo2, shuf_2637); + + out1[0] = spu_shuffle(out_re_lo1, out_im_lo1, shuf_0415); + out1[1] = spu_shuffle(out_re_lo1, out_im_lo1, shuf_2637); + out1[2] = spu_shuffle(out_re_lo3, out_im_lo3, shuf_0415); + out1[3] = spu_shuffle(out_re_lo3, out_im_lo3, shuf_2637); + + out2[0] = spu_shuffle(out_re_hi0, out_im_hi0, shuf_0415); + out2[1] = spu_shuffle(out_re_hi0, out_im_hi0, shuf_2637); + out2[2] = spu_shuffle(out_re_hi2, out_im_hi2, shuf_0415); + out2[3] = spu_shuffle(out_re_hi2, out_im_hi2, shuf_2637); + + out3[0] = spu_shuffle(out_re_hi1, out_im_hi1, shuf_0415); + out3[1] = spu_shuffle(out_re_hi1, out_im_hi1, shuf_2637); + out3[2] = spu_shuffle(out_re_hi3, out_im_hi3, shuf_0415); + out3[3] = spu_shuffle(out_re_hi3, out_im_hi3, shuf_2637); + + out0 += 4; + out1 += 4; + out2 += 4; + out3 += 4; + + i -= 2; + } while (i); +} + +#endif /* _FFT_1D_R2_H_ */ diff --git a/gcell/include/gcell/spu/gc_delay.h b/gcell/include/gcell/spu/gc_delay.h new file mode 100644 index 00000000..e995b3a9 --- /dev/null +++ b/gcell/include/gcell/spu/gc_delay.h @@ -0,0 +1,27 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_GCELL_SPU_GC_DELAY_H +#define INCLUDED_GCELL_SPU_GC_DELAY_H + +void gc_udelay(unsigned int usecs); +void gc_cdelay(unsigned int cpu_cycles); + +#endif /* INCLUDED_GCELL_SPU_GC_DELAY_H */ diff --git a/gcell/include/gcell/spu/gc_jd_queue.h b/gcell/include/gcell/spu/gc_jd_queue.h new file mode 100644 index 00000000..c2300478 --- /dev/null +++ b/gcell/include/gcell/spu/gc_jd_queue.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef INCLUDED_GCELL_SPU_GC_JD_QUEUE_H +#define INCLUDED_GCELL_SPU_GC_JD_QUEUE_H + +#include + +/* + * Declarations for SPU side of job queue interface + */ + +__GC_BEGIN_DECLS + +typedef enum { + GCQ_OK, // Got an item + GCQ_EMPTY, // Q is empty + GCQ_LOCKED, // Somebody else has the queue locked +} gc_dequeue_status_t; + +/*! + * \brief Remove and return item at head of queue. + * + * \param[in] q is EA address of queue structure. + * \param[out] item_ea is EA address of item at head of queue. + * \param[in] jd_tag is the tag to use to get the LS copy of the item. + * \param[out] item is local store copy of item at head of queue. + * \returns false if the queue is empty, otherwise returns true + * and sets \p item_ea and DMA's job descriptor into \p item + * + * If return is not GCQ_OK, we're holding a lock-line reservation that + * covers the queue. + */ +gc_dequeue_status_t +gc_jd_queue_dequeue(gc_eaddr_t q, gc_eaddr_t *item_ea, + int jd_tag, gc_job_desc_t *item); + +__GC_END_DECLS + + +#endif /* INCLUDED_GCELL_SPU_GC_JD_QUEUE_H */ diff --git a/gcell/include/gcell/spu/gc_random.h b/gcell/include/gcell/spu/gc_random.h new file mode 100644 index 00000000..f51b187d --- /dev/null +++ b/gcell/include/gcell/spu/gc_random.h @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GCELL_SPU_GC_RANDOM_H +#define INCLUDED_GCELL_SPU_GC_RANDOM_H + +/*! + * \brief Return a uniformly distributed value in the range [0, 1.0) + * (Linear congruential generator. YMMV. Caveat emptor.) + */ + +float gc_uniform_deviate(void); +void gc_set_seed(int seed); + +#endif /* INCLUDED_GCELL_SPU_GC_RANDOM_H */ diff --git a/gcell/include/gcell/spu/gc_spu_macs.h b/gcell/include/gcell/spu/gc_spu_macs.h new file mode 100644 index 00000000..0d7dc997 --- /dev/null +++ b/gcell/include/gcell/spu/gc_spu_macs.h @@ -0,0 +1,380 @@ +/* -*- asm -*- */ +/* + * Copyright 2008 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 INCLUDED_GC_SPU_MACS_H +#define INCLUDED_GC_SPU_MACS_H + +/* + * This file contains a set of macros that are generally useful when + * coding in SPU assembler + * + * Note that the multi-instruction macros in here may overwrite + * registers 77, 78, and 79 without warning. + */ + +/* + * defines for all registers + */ +#define r0 $0 +#define r1 $1 +#define r2 $2 +#define r3 $3 +#define r4 $4 +#define r5 $5 +#define r6 $6 +#define r7 $7 +#define r8 $8 +#define r9 $9 +#define r10 $10 +#define r11 $11 +#define r12 $12 +#define r13 $13 +#define r14 $14 +#define r15 $15 +#define r16 $16 +#define r17 $17 +#define r18 $18 +#define r19 $19 +#define r20 $20 +#define r21 $21 +#define r22 $22 +#define r23 $23 +#define r24 $24 +#define r25 $25 +#define r26 $26 +#define r27 $27 +#define r28 $28 +#define r29 $29 +#define r30 $30 +#define r31 $31 +#define r32 $32 +#define r33 $33 +#define r34 $34 +#define r35 $35 +#define r36 $36 +#define r37 $37 +#define r38 $38 +#define r39 $39 +#define r40 $40 +#define r41 $41 +#define r42 $42 +#define r43 $43 +#define r44 $44 +#define r45 $45 +#define r46 $46 +#define r47 $47 +#define r48 $48 +#define r49 $49 +#define r50 $50 +#define r51 $51 +#define r52 $52 +#define r53 $53 +#define r54 $54 +#define r55 $55 +#define r56 $56 +#define r57 $57 +#define r58 $58 +#define r59 $59 +#define r60 $60 +#define r61 $61 +#define r62 $62 +#define r63 $63 +#define r64 $64 +#define r65 $65 +#define r66 $66 +#define r67 $67 +#define r68 $68 +#define r69 $69 +#define r70 $70 +#define r71 $71 +#define r72 $72 +#define r73 $73 +#define r74 $74 +#define r75 $75 +#define r76 $76 +#define r77 $77 +#define r78 $78 +#define r79 $79 +#define r80 $80 +#define r81 $81 +#define r82 $82 +#define r83 $83 +#define r84 $84 +#define r85 $85 +#define r86 $86 +#define r87 $87 +#define r88 $88 +#define r89 $89 +#define r90 $90 +#define r91 $91 +#define r92 $92 +#define r93 $93 +#define r94 $94 +#define r95 $95 +#define r96 $96 +#define r97 $97 +#define r98 $98 +#define r99 $99 +#define r100 $100 +#define r101 $101 +#define r102 $102 +#define r103 $103 +#define r104 $104 +#define r105 $105 +#define r106 $106 +#define r107 $107 +#define r108 $108 +#define r109 $109 +#define r110 $110 +#define r111 $111 +#define r112 $112 +#define r113 $113 +#define r114 $114 +#define r115 $115 +#define r116 $116 +#define r117 $117 +#define r118 $118 +#define r119 $119 +#define r120 $120 +#define r121 $121 +#define r122 $122 +#define r123 $123 +#define r124 $124 +#define r125 $125 +#define r126 $126 +#define r127 $127 + + +#define lr r0 // link register +#define sp r1 // stack pointer + // r2 is environment pointer for langs that need it (ALGOL) + +#define retval r3 // return values are passed in regs starting at r3 + +#define arg1 r3 // args are passed in regs starting at r3 +#define arg2 r4 +#define arg3 r5 +#define arg4 r6 +#define arg5 r7 +#define arg6 r8 +#define arg7 r9 +#define arg8 r10 +#define arg9 r11 +#define arg10 r12 + +// r3 - r74 are volatile (caller saves) +// r74 - r79 are volatile (scratch regs possibly destroyed by fct prolog/epilog) +// r80 - r127 are non-volatile (callee-saves) + +// scratch registers reserved for use by the macros in this file. + +#define _gc_t0 r79 +#define _gc_t1 r78 +#define _gc_t2 r77 + +/* + * ---------------------------------------------------------------- + * pseudo ops + * ---------------------------------------------------------------- + */ +#define PROC_ENTRY(name) \ + .text; \ + .p2align 4; \ + .global name; \ + .type name, @function; \ +name: + +/* + * ---------------------------------------------------------------- + * aliases for common operations + * ---------------------------------------------------------------- + */ + +// Move register (even pipe, 2 cycles) +#define MR(rt, ra) or rt, ra, ra; + +// Move register (odd pipe, 4 cycles) +#define LMR(rt, ra) rotqbyi rt, ra, 0; + +// return +#define RETURN() bi lr; + +// hint for a return +#define HINT_RETURN(ret_label) hbr ret_label, lr; + +// return if zero +#define BRZ_RETURN(rt) biz rt, lr; + +// return if not zero +#define BRNZ_RETURN(rt) binz rt, lr; + +// return if halfword zero +#define BRHZ_RETURN(rt) bihz rt, lr; + +// return if halfword not zero +#define BRHNZ_RETURN(rt) bihnz rt, lr; + + +/* + * ---------------------------------------------------------------- + * modulo like things for constant moduli that are powers of 2 + * ---------------------------------------------------------------- + */ + +// rt = ra & (pow2 - 1) +#define MODULO(rt, ra, pow2) \ + andi rt, ra, (pow2)-1; + +// rt = pow2 - (ra & (pow2 - 1)) +#define MODULO_NEG(rt, ra, pow2) \ + andi rt, ra, (pow2)-1; \ + sfi rt, rt, (pow2); + +// rt = ra & -(pow2) +#define ROUND_DOWN(rt, ra, pow2) \ + andi rt, ra, -(pow2); + +// rt = (ra + (pow2 - 1)) & -(pow2) +#define ROUND_UP(rt, ra, pow2) \ + ai rt, ra, (pow2)-1; \ + andi rt, rt, -(pow2); + +/* + * ---------------------------------------------------------------- + * Splat - replicate a particular slot into all slots + * Altivec analogs... + * ---------------------------------------------------------------- + */ + +// replicate byte from slot s [0,15] +#define VSPLTB(rt, ra, s) \ + ilh _gc_t0, (s)*0x0101; \ + shufb rt, ra, ra, _gc_t0; + +// replicate halfword from slot s [0,7] +#define VSPLTH(rt, ra, s) \ + ilh _gc_t0, 2*(s)*0x0101 + 0x0001; \ + shufb rt, ra, ra, _gc_t0; + +// replicate word from slot s [0,3] +#define VSPLTW(rt, ra, s) \ + iluh _gc_t0, 4*(s)*0x0101 + 0x0001; \ + iohl _gc_t0, 4*(s)*0x0101 + 0x0203; \ + shufb rt, ra, ra, _gc_t0; + +// replicate double from slot s [0,1] +#define VSPLTD(rt, ra, s) \ + /* sp is always 16-byte aligned */ \ + cdd _gc_t0, 8(sp); /* 0x10111213 14151617 00010203 04050607 */ \ + rotqbyi rt, ra, ra, (s) << 3; /* rotate double into preferred slot */ \ + shufb rt, rt, rt, _gc_t0; + +/* + * ---------------------------------------------------------------- + * lots of min/max variations... + * + * On a slot by slot basis, compute the min or max + * + * U - unsigned, else signed + * B,H,{} - byte, halfword, word + * F float + * ---------------------------------------------------------------- + */ + +#define MIN_SELB(rt, ra, rb, rc) selb rt, ra, rb, rc; +#define MAX_SELB(rt, ra, rb, rc) selb rt, rb, ra, rc; + + // words + +#define MIN(rt, ra, rb) \ + cgt _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define MAX(rt, ra, rb) \ + cgt _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + +#define UMIN(rt, ra, rb) \ + clgt _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define UMAX(rt, ra, rb) \ + clgt _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + + // bytes + +#define MINB(rt, ra, rb) \ + cgtb _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define MAXB(rt, ra, rb) \ + cgtb _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + +#define UMINB(rt, ra, rb) \ + clgtb _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define UMAXB(rt, ra, rb) \ + clgtb _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + + // halfwords + +#define MINH(rt, ra, rb) \ + cgth _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define MAXH(rt, ra, rb) \ + cgth _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + +#define UMINH(rt, ra, rb) \ + clgth _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define UMAXH(rt, ra, rb) \ + clgth _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + + // floats + +#define FMIN(rt, ra, rb) \ + fcgt _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +#define FMAX(rt, ra, rb) \ + fcgt _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + +// Ignoring the sign, select the values with the minimum magnitude +#define FMINMAG(rt, ra, rb) \ + fcmgt _gc_t0, ra, rb; \ + MIN_SELB(rt, ra, rb, _gc_t0) + +// Ignoring the sign, select the values with the maximum magnitude +#define FMAXMAG(rt, ra, rb) \ + fcmgt _gc_t0, ra, rb; \ + MAX_SELB(rt, ra, rb, _gc_t0) + + +#endif /* INCLUDED_GC_SPU_MACS_H */ diff --git a/gcell/include/gcell/spu/libfft.h b/gcell/include/gcell/spu/libfft.h new file mode 100644 index 00000000..dd387be0 --- /dev/null +++ b/gcell/include/gcell/spu/libfft.h @@ -0,0 +1,113 @@ +/* -------------------------------------------------------------- */ +/* (C)Copyright 2008 Free Software Foundation, Inc. */ +/* (C)Copyright 2001,2007, */ +/* International Business Machines Corporation, */ +/* Sony Computer Entertainment, Incorporated, */ +/* Toshiba Corporation, */ +/* */ +/* All Rights Reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the */ +/* following conditions are met: */ +/* */ +/* - Redistributions of source code must retain the above copyright*/ +/* notice, this list of conditions and the following disclaimer. */ +/* */ +/* - Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* - Neither the name of IBM Corporation nor the names of its */ +/* contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written */ +/* permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ +/* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */ +/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT */ +/* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */ +/* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN */ +/* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */ +/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ +/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* -------------------------------------------------------------- */ +/* PROLOG END TAG zYx */ + +#ifndef INCLUDED_LIBFFT_H +#define INCLUDED_LIBFFT_H + +// must be defined before inclusion of fft_1d_r2.h +#define MAX_FFT_1D_SIZE 4096 + +/* fft_1d_r2 + * --------- + * Performs a single precision, complex Fast Fourier Transform using + * the DFT (Discrete Fourier Transform) with radix-2 decimation in time. + * The input is an array of complex numbers of length (1<. Note: This routine can support an in-place transformation + * by specifying and to be the same array. + * + * This implementation utilizes the Cooley-Tukey algorithm consisting + * of stages. The basic operation is the butterfly. + * + * p --------------------------> P = p + q*Wi + * \ / + * \ / + * \ / + * \/ + * /\ + * / \ + * / \ + * ____ / \ + * q --| Wi |-----------------> Q = p - q*Wi + * ---- + * + * This routine also requires pre-computed twiddle values, W. W is an + * array of single precision complex numbers of length 1<<(log2_size-2) + * and is computed as follows: + * + * for (i=0; i/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/lib/general/Makefile.am b/gcell/lib/general/Makefile.am new file mode 100644 index 00000000..bd5a4de6 --- /dev/null +++ b/gcell/lib/general/Makefile.am @@ -0,0 +1,23 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + + diff --git a/gcell/lib/general/Makefile.in b/gcell/lib/general/Makefile.in new file mode 100644 index 00000000..f174fee6 --- /dev/null +++ b/gcell/lib/general/Makefile.in @@ -0,0 +1,871 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gcell/lib/general +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/lib/general/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/lib/general/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/lib/general/spu/fft_1d_r2.c b/gcell/lib/general/spu/fft_1d_r2.c new file mode 100644 index 00000000..0a87e74a --- /dev/null +++ b/gcell/lib/general/spu/fft_1d_r2.c @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include +#include +#include + +/* + * invoke the inline version + */ +void +fft_1d_r2(vector float *out, vector float *in, vector float *W, int log2_size) +{ + assert((1 << log2_size) <= MAX_FFT_1D_SIZE); + + _fft_1d_r2(out, in, W, log2_size); +} diff --git a/gcell/lib/general/spu/memset.S b/gcell/lib/general/spu/memset.S new file mode 100644 index 00000000..39eabce0 --- /dev/null +++ b/gcell/lib/general/spu/memset.S @@ -0,0 +1,185 @@ +/* -*- asm -*- */ +/* + * Copyright 2008 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. + */ + +#include + + .file "memset.S" + + /* + * Computes this, only a lot faster... + * + * void * + * memset(void *pv, int c, size_t n) + * { + * unsigned char *p = (unsigned char *) pv; + * size_t i; + * for (i = 0; i < n; i++) + * p[i] = c; + * + * return pv; + * } + */ + +#define p_arg arg1 // we're going to clobber arg1 w/ the return value +#define c arg2 // the constant we're writing +#define n arg3 // how many bytes to write + +#define p r13 // where we're writing +#define t0 r14 +#define t1 r15 +#define mask r16 +#define old r17 +#define an r18 // aligned n (n rounded down to mod 16 boundary) +#define next_p r19 +#define cond1 r20 +#define cond2 r21 +#define m r22 +#define r r23 + + PROC_ENTRY(memset) + + // Hint the return from do_head, in case we go that way. + // There's pretty much nothing to can do to hint the branch to it. + hbrr do_head_br, head_complete + + MR(p, p_arg) // leaves p, the return value, in the correct reg (r3) + BRZ_RETURN(n) + + MODULO(t0, p, 16) // is p%16 == 0? + VSPLTB(c, c, 3) // splat byte in preferred slot of c into all slots + brnz t0, do_head // no, handle it +head_complete: + + /* + * preconditions: + * p%16 == 0, n > 0 + */ + hbrr middle_loop_br, middle_loop + + ROUND_DOWN(an, n, 16) // an is "aligned n" + MODULO(n, n, 16) // what's left over in the last quad + brz an, do_tail // no whole quad words; skip to tail + clgti t0, an, 127 // an >= 128? + brz t0, middle2 // nope, go handle the cases between 0 and 112 + + /* + * 128 bytes / iteration + */ + .p2align 4 +middle_loop: + ai an, an, -128 + stqd c, 0*16(p) + ai next_p, p, 128 + stqd c, 1*16(p) + cgti cond1, an, 127 + stqd c, 2*16(p) + + stqd c, 3*16(p) + stqd c, 4*16(p) + stqd c, 5*16(p) + stqd c, 6*16(p) + + MR(p, next_p) + stqd c, 7*16-128(next_p) + or cond2, n, an +middle_loop_br: + brnz cond1, middle_loop + + /* + * if an and n are both zero, return now + */ + BRZ_RETURN(cond2) + + /* + * otherwise handle last of full quad words + * + * 0 <= an < 128, p%16 == 0 + */ +middle2: + /* + * if an == 0, go handle the final non-full quadword + */ + brz an, do_tail + hbrr middle2_loop_br, middle2_loop + + .p2align 3 +middle2_loop: + ai next_p, p, 16 + stqd c, 0(p) + ai an, an, -16 + LMR(p, next_p) +middle2_loop_br: + brnz an, middle2_loop + + /* We're done with the full quadwords. */ + + /* + * Handle the final partial quadword. + * We'll be modifying only the left hand portion of the quad. + * + * preconditions: + * an == 0, 0 <= n < 16, p%16 == 0 + */ +do_tail: + HINT_RETURN(do_tail_ret) + il mask, -1 + sfi t1, n, 16 // t1 = 16 - n + lqd old, 0(p) + shlqby mask, mask, t1 + selb t0, old, c, mask + stqd t0, 0(p) +do_tail_ret: + RETURN() + + /* + * ---------------------------------------------------------------- + * Handle the first partial quadword + * + * preconditions: + * p%16 != 0 + * + * postconditions: + * p%16 == 0 or n == 0 + * + * |-- m --| + * +----------------+----------------+ + * | //////// | | + * +----------------+----------------+ + * |----- r -----| + * p + * ---------------------------------------------------------------- + */ +do_head: + lqd old, 0(p) + MODULO_NEG(r, p, 16) + il mask, -1 + UMIN(m, r, n) + shlqby mask, mask, m // 1's in the top, m*8 0's in the bottom + MR(t1, p) + sf t0, m, r // t0 = r - m + a p, p, m // p += m + rotqby mask, mask, t0 // rotate 0's to the right place + sf n, m, n // n -= m + selb t0, c, old, mask // merge + stqd t0, 0(t1) + BRZ_RETURN(n) +do_head_br: + br head_complete diff --git a/gcell/lib/general/spu/qa_memset.c b/gcell/lib/general/spu/qa_memset.c new file mode 100644 index 00000000..e51b02c9 --- /dev/null +++ b/gcell/lib/general/spu/qa_memset.c @@ -0,0 +1,201 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include +#include +#include +#include +#include + + +#define MAX_QA_BYTES 1024 +#define MAX_OFFSET 32 +#define ALIGNMENT 16 +#define K 0xA5 + +// FIXME should be passed at gcell init time +//static const int TIMEBASE = 79800000; // ps3 +static const int TIMEBASE = 26666666; // qs21 + +typedef void* (*memset_fptr)(void *s, int val, size_t n); + +void * +memset_ref(void *sv, int c, size_t n) +{ + unsigned char *s = (unsigned char *) sv; + size_t i; + for (i = 0; i < n; i++) + s[i] = c; + + return sv; +} + +static bool +check_before(unsigned char *buf, size_t len, size_t offset) +{ + unsigned char *p = buf + sizeof(vector unsigned char) + offset; + bool ok = true; + int i; + + for (i = -16; i < 0; i++){ + unsigned char expected = (&p[i] - buf) & 0xff; + if (p[i] != expected){ + printf("b:memset(%p, 0x%x, %zu) [%3d] expected %02x, got %02x\n", + p, K, len, offset, i, K, p[i]); + ok = false; + } + } + return ok; +} + +static bool +check_middle(unsigned char *buf, size_t len, size_t offset) +{ + unsigned char *p = buf + sizeof(vector unsigned char) + offset; + bool ok = true; + size_t i; + + for (i = 0; i < len; i++){ + unsigned char expected = K; + if (p[i] != expected){ + printf("m:memset(%p, 0x%x, %zu) [%3zd] expected %02x, got %02x\n", + p, K, len, offset, i, expected, p[i]); + ok = false; + } + } + return ok; +} + +static bool +check_after(unsigned char *buf, size_t len, size_t offset) +{ + unsigned char *p = buf + sizeof(vector unsigned char) + offset; + bool ok = true; + size_t i; + + for (i = len; i < len + 16; i++){ + unsigned char expected = (&p[i] - buf) & 0xff; + if (p[i] != expected){ + printf("a:memset(%p, 0x%x, %zu) [%3zd] expected %02x, got %02x\n", + p, K, len, offset, i, expected, p[i]); + ok = false; + } + } + return ok; +} + + +static bool +test_memset_aux(memset_fptr f, + unsigned char *buf, size_t buflen, size_t len, size_t offset) +{ + size_t i; + + // init buffer to non-zero known state + for (i = 0; i < buflen; i++) + buf[i] = i; + + // Our working buffer. Starts 16 bytes + offset into buf. + // We offset by 16 so that we can see if data before is getting damaged. + unsigned char *p = buf + sizeof(vector unsigned char) + offset; + + (*f)(p, K, len); + + bool ok = true; + ok &= check_before(buf, len, offset); + ok &= check_middle(buf, len, offset); + ok &= check_after(buf, len, offset); + + return ok; +} + +bool +test_memset(memset_fptr f) +{ + size_t BUFLEN = MAX_QA_BYTES + 2*sizeof(vector unsigned char) + MAX_OFFSET; + unsigned char unaligned_buf[BUFLEN + ALIGNMENT -1]; + unsigned char *aligned_buf = + (unsigned char *)((((intptr_t) unaligned_buf) + ALIGNMENT - 1) & -ALIGNMENT); + + // printf("unaligned = %p\n", unaligned_buf); + // printf("aligned = %p\n", aligned_buf); + + size_t len; + size_t offset; + bool ok = true; + + for (len = 0; len < MAX_QA_BYTES; len++){ + for (offset = 0; offset <= MAX_OFFSET; offset++){ + ok &= test_memset_aux(f, aligned_buf, BUFLEN, len, offset); + } + } + + return ok; +} + +// returns bytes/s +float +benchmark_memset(memset_fptr f, bool aligned) +{ + static const int SIZE = 32768; + unsigned char buf[SIZE]; + uint32_t t0, t1; + int nbytes; + + spu_write_decrementer(0xffffffff); + + if (aligned){ + nbytes = SIZE; + t0 = spu_read_decrementer(); + (*f)(buf, 0x55, nbytes); + (*f)(buf, 0x55, nbytes); + (*f)(buf, 0x55, nbytes); + (*f)(buf, 0x55, nbytes); + t1 = spu_read_decrementer(); + } + else { + nbytes = SIZE - 2; + t0 = spu_read_decrementer(); + (*f)(buf + 1, 0x55, nbytes); + (*f)(buf + 1, 0x55, nbytes); + (*f)(buf + 1, 0x55, nbytes); + (*f)(buf + 1, 0x55, nbytes); + t1 = spu_read_decrementer(); + } + + //printf("delta ticks: %d\n", t0 - t1); + return (float) nbytes * 4 / ((t0 - t1) * 1.0/TIMEBASE); +} + +/* + * Implement the standard QA stub. + * No input arguments, 1 bool output. + */ +static void +gcs_qa_memset(const gc_job_direct_args_t *input _UNUSED, + gc_job_direct_args_t *output, + const gc_job_ea_args_t *eaa _UNUSED) +{ + bool ok = test_memset(memset); + output->arg[0].u32 = ok; +} + +GC_DECLARE_PROC(gcs_qa_memset, "qa_memset"); diff --git a/gcell/lib/runtime/Makefile.am b/gcell/lib/runtime/Makefile.am new file mode 100644 index 00000000..2c653918 --- /dev/null +++ b/gcell/lib/runtime/Makefile.am @@ -0,0 +1,66 @@ +# +# Copyright 2007,2008 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. +# + +include $(top_srcdir)/Makefile.common + +IBM_PPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/ibm/sync/ppu_source + + +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(MBLOCK_INCLUDES) $(CPPUNIT_INCLUDES) \ + $(GCELL_INCLUDES) $(IBM_PPU_SYNC_INCLUDES) $(WITH_INCLUDES) + + +dist_bin_SCRIPTS = gcell-embedspu-libtool + +noinst_LTLIBRARIES = libruntime.la libruntime-qa.la + +libruntime_la_SOURCES = \ + gc_aligned_alloc.cc \ + gc_job_manager.cc \ + gc_job_manager_impl.cc \ + gc_jd_queue.c \ + gc_jd_stack.c \ + gc_proc_def_utils.cc + +libruntime_qa_la_SOURCES = \ + qa_gcell_runtime.cc \ + qa_jd_queue.cc \ + qa_jd_stack.cc \ + qa_job_manager.cc + + +noinst_HEADERS = \ + gc_client_thread_info.h \ + gc_job_manager_impl.h \ + gc_proc_def_utils.h \ + qa_jd_queue.h \ + qa_jd_stack.h \ + qa_job_manager.h \ + qa_gcell_runtime.h + +# generate a libtool.lo that contains an embeded SPU executable +gcell_runtime_qa.lo: ../spu/gcell_runtime_qa + $(GCELL_EMBEDSPU_LIBTOOL) $< $@ + +libruntime_qa_la_LIBADD = \ + gcell_runtime_qa.lo \ + libruntime.la + +CLEANFILES = gcell_runtime_qa.lo diff --git a/gcell/lib/runtime/Makefile.in b/gcell/lib/runtime/Makefile.in new file mode 100644 index 00000000..7e5cbace --- /dev/null +++ b/gcell/lib/runtime/Makefile.in @@ -0,0 +1,1095 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_bin_SCRIPTS) $(noinst_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gcell/lib/runtime +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libruntime_qa_la_DEPENDENCIES = gcell_runtime_qa.lo libruntime.la +am_libruntime_qa_la_OBJECTS = qa_gcell_runtime.lo qa_jd_queue.lo \ + qa_jd_stack.lo qa_job_manager.lo +libruntime_qa_la_OBJECTS = $(am_libruntime_qa_la_OBJECTS) +libruntime_la_LIBADD = +am_libruntime_la_OBJECTS = gc_aligned_alloc.lo gc_job_manager.lo \ + gc_job_manager_impl.lo gc_jd_queue.lo gc_jd_stack.lo \ + gc_proc_def_utils.lo +libruntime_la_OBJECTS = $(am_libruntime_la_OBJECTS) +am__installdirs = "$(DESTDIR)$(bindir)" +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libruntime_qa_la_SOURCES) $(libruntime_la_SOURCES) +DIST_SOURCES = $(libruntime_qa_la_SOURCES) $(libruntime_la_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +IBM_PPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/ibm/sync/ppu_source +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(MBLOCK_INCLUDES) $(CPPUNIT_INCLUDES) \ + $(GCELL_INCLUDES) $(IBM_PPU_SYNC_INCLUDES) $(WITH_INCLUDES) + +dist_bin_SCRIPTS = gcell-embedspu-libtool +noinst_LTLIBRARIES = libruntime.la libruntime-qa.la +libruntime_la_SOURCES = \ + gc_aligned_alloc.cc \ + gc_job_manager.cc \ + gc_job_manager_impl.cc \ + gc_jd_queue.c \ + gc_jd_stack.c \ + gc_proc_def_utils.cc + +libruntime_qa_la_SOURCES = \ + qa_gcell_runtime.cc \ + qa_jd_queue.cc \ + qa_jd_stack.cc \ + qa_job_manager.cc + +noinst_HEADERS = \ + gc_client_thread_info.h \ + gc_job_manager_impl.h \ + gc_proc_def_utils.h \ + qa_jd_queue.h \ + qa_jd_stack.h \ + qa_job_manager.h \ + qa_gcell_runtime.h + +libruntime_qa_la_LIBADD = \ + gcell_runtime_qa.lo \ + libruntime.la + +CLEANFILES = gcell_runtime_qa.lo +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/lib/runtime/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/lib/runtime/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libruntime-qa.la: $(libruntime_qa_la_OBJECTS) $(libruntime_qa_la_DEPENDENCIES) + $(CXXLINK) $(libruntime_qa_la_OBJECTS) $(libruntime_qa_la_LIBADD) $(LIBS) +libruntime.la: $(libruntime_la_OBJECTS) $(libruntime_la_DEPENDENCIES) + $(CXXLINK) $(libruntime_la_OBJECTS) $(libruntime_la_LIBADD) $(LIBS) +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_aligned_alloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_jd_queue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_jd_stack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_job_manager.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_job_manager_impl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_proc_def_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gcell_runtime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_jd_queue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_jd_stack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_job_manager.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_binSCRIPTS install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-dist_binSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +# generate a libtool.lo that contains an embeded SPU executable +gcell_runtime_qa.lo: ../spu/gcell_runtime_qa + $(GCELL_EMBEDSPU_LIBTOOL) $< $@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/lib/runtime/gc_aligned_alloc.cc b/gcell/lib/runtime/gc_aligned_alloc.cc new file mode 100644 index 00000000..905154e3 --- /dev/null +++ b/gcell/lib/runtime/gc_aligned_alloc.cc @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + +// custom deleter of anything that can be freed with "free" +class free_deleter { +public: + void operator()(void *p) { + free(p); + } +}; + +void * +gc_aligned_alloc(size_t size, size_t alignment) +{ + void *p = 0; + if (posix_memalign(&p, alignment, size) != 0){ + perror("posix_memalign"); + throw std::runtime_error("memory"); + } + memset(p, 0, size); // zero the memory + return p; +} + +boost::shared_ptr +gc_aligned_alloc_sptr(size_t size, size_t alignment) +{ + return boost::shared_ptr(gc_aligned_alloc(size, alignment), + free_deleter()); +} diff --git a/gcell/lib/runtime/gc_client_thread_info.h b/gcell/lib/runtime/gc_client_thread_info.h new file mode 100644 index 00000000..9f46ecca --- /dev/null +++ b/gcell/lib/runtime/gc_client_thread_info.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GC_CLIENT_THREAD_INFO_H +#define INCLUDED_GC_CLIENT_THREAD_INFO_H + +#include +#include + +enum gc_ct_state { + CT_NOT_WAITING, + CT_WAIT_ALL, + CT_WAIT_ANY, +}; + +/* + * \brief per client-thread data used by gc_job_manager + * + * "Client threads" are any threads that invoke methods on + * gc_job_manager. We use pthread_set_specific to store a pointer to + * one of these for each thread that comes our way. + */ +class gc_client_thread_info : boost::noncopyable { +public: + gc_client_thread_info() : + d_free(1), d_cond(&d_mutex), d_state(CT_NOT_WAITING), + d_jobs_done(0), d_njobs_waiting_for(0), + d_jobs_waiting_for(0){ } + + ~gc_client_thread_info() { + d_free = 1; + d_state = CT_NOT_WAITING; + d_jobs_done = 0; + d_njobs_waiting_for = 0; + d_jobs_waiting_for = 0; + } + + //! is this cti free? (1->free, 0->in use) + uint32_t d_free; + + //! which client info are we? + uint16_t d_client_id; + + //! hold this mutex to manipulate anything below here + omni_mutex d_mutex; + + //! signaled by event handler to wake client thread up + omni_condition d_cond; + + //! Is this client waiting? + gc_ct_state d_state; + + //! Jobs that have finished and not yet been waited for (bitvector) + unsigned long *d_jobs_done; + + //! # of jobs we're waiting for + unsigned int d_njobs_waiting_for; + + //! Jobs that client thread is waiting for + gc_job_desc **d_jobs_waiting_for; + +}; + +#endif /* INCLUDED_GC_CLIENT_THREAD_INFO_H */ diff --git a/gcell/lib/runtime/gc_jd_queue.c b/gcell/lib/runtime/gc_jd_queue.c new file mode 100644 index 00000000..aeabd305 --- /dev/null +++ b/gcell/lib/runtime/gc_jd_queue.c @@ -0,0 +1,78 @@ +/* -*- c -*- */ +/* + * Copyright 2007 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. + */ + +#include +#include +#include +#include +#include + +void +gc_jd_queue_init(gc_jd_queue_t *q) +{ + _mutex_init(ptr_to_ea(&q->mutex)); + q->head = 0; + q->tail = 0; + smp_wmb(); +} + +void +gc_jd_queue_enqueue(gc_jd_queue_t *q, gc_job_desc_t *item) +{ + item->sys.next = 0; + _mutex_lock(ptr_to_ea(&q->mutex)); + smp_rmb(); // import barrier + + if (q->tail == 0){ // currently empty + q->tail = q->head = jdp_to_ea(item); + } + else { // not empty, append + ea_to_jdp(q->tail)->sys.next = jdp_to_ea(item); + q->tail = jdp_to_ea(item); + } + + smp_wmb(); // orders stores above before clearing of mutex + _mutex_unlock(ptr_to_ea(&q->mutex)); +} + +gc_job_desc_t * +gc_jd_queue_dequeue(gc_jd_queue_t *q) +{ + _mutex_lock(ptr_to_ea(&q->mutex)); + smp_rmb(); // import barrier + + gc_eaddr_t item_ea = q->head; + if (item_ea == 0){ // empty + _mutex_unlock(ptr_to_ea(&q->mutex)); + return 0; + } + + q->head = ea_to_jdp(item_ea)->sys.next; + if (q->head == 0) // now emtpy + q->tail = 0; + + gc_job_desc_t *item = ea_to_jdp(item_ea); + item->sys.next = 0; + + smp_wmb(); // orders stores above before clearing of mutex + _mutex_unlock(ptr_to_ea(&q->mutex)); + return item; +} diff --git a/gcell/lib/runtime/gc_jd_stack.c b/gcell/lib/runtime/gc_jd_stack.c new file mode 100644 index 00000000..4d865acf --- /dev/null +++ b/gcell/lib/runtime/gc_jd_stack.c @@ -0,0 +1,168 @@ +/* -*- c -*- */ +/* + * Copyright 2007 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. + */ + +#include +#include + +/* + * begin extract from ppu_intrinics.h + * FIXME handle this a different way + */ + +#if !defined(__PPU__) && !defined(__ppc__) && !defined(__ppc64__) + && !defined(__GNUC__) + #error ppu_intrinsics.h included on wrong platform/compiler +#endif + +#define __lwarx(base) __extension__ \ + ({unsigned int result; \ + typedef struct {char a[4];} wordsize; \ + wordsize *ptrp = (wordsize*)(base); \ + __asm__ volatile ("lwarx %0,%y1" \ + : "=r" (result) \ + : "Z" (*ptrp)); \ + result; }) + +#ifdef __powerpc64__ +#define __ldarx(base) __extension__ \ + ({unsigned long long result; \ + typedef struct {char a[8];} doublewordsize; \ + doublewordsize *ptrp = (doublewordsize*)(base); \ + __asm__ volatile ("ldarx %0,%y1" \ + : "=r" (result) \ + : "Z" (*ptrp)); \ + result; }) +#endif /* __powerpc64__ */ + +#define __stwcx(base, value) __extension__ \ + ({unsigned int result; \ + typedef struct {char a[4];} wordsize; \ + wordsize *ptrp = (wordsize*)(base); \ + __asm__ volatile ("stwcx. %2,%y1\n" \ + "\tmfocrf %0,0x80" \ + : "=r" (result), \ + "=Z" (*ptrp) \ + : "r" (value)); \ + ((result & 0x20000000) >> 29); }) + + +#ifdef __powerpc64__ +#define __stdcx(base, value) __extension__ \ + ({unsigned long long result; \ + typedef struct {char a[8];} doublewordsize; \ + doublewordsize *ptrp = (doublewordsize*)(base); \ + __asm__ volatile ("stdcx. %2,%y1\n" \ + "\tmfocrf %0,0x80" \ + : "=r" (result), \ + "=Z" (*ptrp) \ + : "r" (value)); \ + ((result & 0x20000000) >> 29); }) +#endif /* __powerpc64__ */ + + +/* + * --- end extract from ppu_intrinics.h -- + */ + + +void +gc_jd_stack_init(gc_jd_stack_t *stack) +{ + stack->top = 0; +} + + +#ifdef __powerpc64__ // 64-bit mode + +void +gc_jd_stack_push(gc_jd_stack_t *stack, gc_job_desc_t *item) +{ + gc_eaddr_t top; + gc_eaddr_t item_ea = ptr_to_ea(item); + unsigned int done; + + do { + top = __ldarx(&stack->top); + item->sys.next = top; + smp_wmb(); // order store of item->next before store of stack->top + done = __stdcx(&stack->top, item_ea); + } while (unlikely(done == 0)); +} + +gc_job_desc_t * +gc_jd_stack_pop(gc_jd_stack_t *stack) +{ + gc_eaddr_t s; + gc_eaddr_t t; + unsigned int done; + + do { + s = __ldarx(&stack->top); + if (s == 0) /* stack's empty */ + return 0; + t = ((gc_job_desc_t *) ea_to_ptr(s))->sys.next; + done = __stdcx(&stack->top, t); + } while (unlikely(done == 0)); + + return ea_to_ptr(s); +} + +#else // 32-bit mode + +/* + * In 32-bit mode, gc_eaddr's will have the top 32-bits zero. + * The ldarx/stdcx instructions aren't available in 32-bit mode, + * thus we use lwarx/stwcx on the low 32-bits of the 64-bit addresses. + * Since we're big-endian, the low 32-bits are at word offset 1. + */ +void +gc_jd_stack_push(gc_jd_stack_t *stack, gc_job_desc_t *item) +{ + gc_eaddr_t top; + unsigned int done; + + do { + top = __lwarx((int32_t *)(&stack->top) + 1); + item->sys.next = top; + smp_wmb(); // order store of item->sys.next before store of stack->top + done = __stwcx((int32_t *)(&stack->top) + 1, item); + } while (unlikely(done == 0)); +} + +gc_job_desc_t * +gc_jd_stack_pop(gc_jd_stack_t *stack) +{ + gc_eaddr_t s; + gc_eaddr_t t; + unsigned int done; + + do { + s = __lwarx((int32_t *)(&stack->top) + 1); + if (s == 0) /* stack's empty */ + return 0; + t = ((gc_job_desc_t *) ea_to_ptr(s))->sys.next; + done = __stwcx((int32_t *)(&stack->top) + 1, (uint32_t) t); + } while (unlikely(done == 0)); + + return ea_to_ptr(s); +} + +#endif diff --git a/gcell/lib/runtime/gc_job_manager.cc b/gcell/lib/runtime/gc_job_manager.cc new file mode 100644 index 00000000..d96bc538 --- /dev/null +++ b/gcell/lib/runtime/gc_job_manager.cc @@ -0,0 +1,186 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include "gc_job_manager_impl.h" +#include +#include + + +static boost::weak_ptr s_singleton; + + +// custom deleter of gc_job_desc allocated via alloc_job_desc_sptr +class job_desc_deleter { + gc_job_manager_sptr d_mgr; +public: + job_desc_deleter(gc_job_manager_sptr mgr) : d_mgr(mgr) {} + + void operator()(gc_job_desc *jd) { + d_mgr->free_job_desc(jd); + } +}; + + + +gc_job_manager_sptr +gc_make_job_manager(const gc_jm_options *options) +{ + return gc_job_manager_sptr(new gc_job_manager_impl(options)); +} + +gc_job_manager::gc_job_manager(const gc_jm_options *options) +{ + // nop +} + +gc_job_manager::~gc_job_manager() +{ + // nop +} + +void +gc_job_manager::set_debug(int debug) +{ + // nop +} + +int +gc_job_manager::debug() +{ + return 0; +} + +void +gc_job_manager::set_singleton(gc_job_manager_sptr mgr) +{ + s_singleton = mgr; +} + +gc_job_manager_sptr +gc_job_manager::singleton() +{ + return gc_job_manager_sptr(s_singleton); +} + +gc_job_desc_sptr +gc_job_manager::make_jd_sptr(gc_job_manager_sptr mgr, gc_job_desc *jd) +{ + return gc_job_desc_sptr(jd, job_desc_deleter(mgr)); +} + +gc_job_desc_sptr +gc_job_manager::alloc_job_desc(gc_job_manager_sptr mgr) +{ + return make_jd_sptr(mgr, mgr->alloc_job_desc()); +} + + +// ------------------------------------------------------------------------ + + +// custom deleter +class spe_program_handle_deleter { +public: + void operator()(spe_program_handle_t *program) { + if (program){ + int r = spe_image_close(program); + if (r != 0){ + perror("spe_image_close"); + } + } + } +}; + +// nop custom deleter +class nop_spe_program_handle_deleter { +public: + void operator()(spe_program_handle_t *program) { + } +}; + +spe_program_handle_sptr +gc_program_handle_from_filename(const std::string &filename) +{ + return spe_program_handle_sptr(spe_image_open(filename.c_str()), + spe_program_handle_deleter()); +} + + +spe_program_handle_sptr +gc_program_handle_from_address(spe_program_handle_t *handle) +{ + return spe_program_handle_sptr(handle, nop_spe_program_handle_deleter()); +} + +const std::string +gc_job_status_string(gc_job_status_t status) +{ + switch(status){ + case JS_OK: return "JS_OK"; + case JS_SHUTTING_DOWN: return "JS_SHUTTING_DOWN"; + case JS_TOO_MANY_CLIENTS: return "JS_TOO_MANY_CLIENTS"; + case JS_UNKNOWN_PROC: return "JS_UNKNOWN_PROC"; + case JS_BAD_DIRECTION: return "JS_BAD_DIRECTION"; + case JS_BAD_EAH: return "JS_BAD_EAH"; + case JS_BAD_N_DIRECT: return "JS_BAD_N_DIRECT"; + case JS_BAD_N_EA: return "JS_BAD_N_EA"; + case JS_ARGS_TOO_LONG: return "JS_ARGS_TOO_LONG"; + case JS_BAD_JUJU: return "JS_BAD_JUJU"; + case JS_BAD_JOB_DESC: return "JS_BAD_JOB_DESC"; + default: + char buf[100]; + snprintf(buf, sizeof(buf), "unknown gc_job_status_t (%d)\n", status); + return buf; + } +} + +/* + * exception classes + */ + +gc_exception::gc_exception(const std::string &msg) + : runtime_error(msg) +{ +} + +gc_unknown_proc::gc_unknown_proc(const std::string &msg) + : gc_exception("gc_unknown_proc: " + msg) +{ +} + +gc_bad_alloc::gc_bad_alloc(const std::string &msg) + : gc_exception("gc_bad_alloc: " + msg) +{ +} + +gc_bad_align::gc_bad_align(const std::string &msg) + : gc_exception("gc_bad_align: " + msg) +{ +} + +gc_bad_submit::gc_bad_submit(const std::string &name, gc_job_status_t status) + : gc_exception("gc_bad_submit(" + name + "): " + gc_job_status_string(status)) +{ +} diff --git a/gcell/lib/runtime/gc_job_manager_impl.cc b/gcell/lib/runtime/gc_job_manager_impl.cc new file mode 100644 index 00000000..cc49fd1f --- /dev/null +++ b/gcell/lib/runtime/gc_job_manager_impl.cc @@ -0,0 +1,1403 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "gc_job_manager_impl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define __nop() __asm__ volatile ("ori 0,0,0" : : : "memory") +#define __cctpl() __asm__ volatile ("or 1,1,1" : : : "memory") +#define __cctpm() __asm__ volatile ("or 2,2,2" : : : "memory") +#define __cctph() __asm__ volatile ("or 3,3,3" : : : "memory") +#define __db8cyc() __asm__ volatile ("or 28,28,28" : : : "memory") +#define __db10cyc() __asm__ volatile ("or 29,29,29" : : : "memory") +#define __db12cyc() __asm__ volatile ("or 30,30,30" : : : "memory") +#define __db16cyc() __asm__ volatile ("or 31,31,31" : : : "memory") + + +#if 1 +#define CCTPL() __cctpl() +#define CCTPM() __cctpm() +#else +#define CCTPL() (void) 0 +#define CCTPM() (void) 0 +#endif + +static const size_t CACHE_LINE_SIZE = 128; + +static const unsigned int DEFAULT_MAX_JOBS = 128; +static const unsigned int DEFAULT_MAX_CLIENT_THREADS = 64; + +// FIXME this really depends on the SPU code... +static const unsigned int MAX_TOTAL_INDIRECT_LENGTH = 16 * 1024; + + +static bool s_key_initialized = false; +static pthread_key_t s_client_key; + +static int s_worker_debug = 0; + +// custom deleter of gang_contexts for use with boost::shared_ptr +class gang_deleter { +public: + void operator()(spe_gang_context_ptr_t ctx) { + if (ctx){ + int r = spe_gang_context_destroy(ctx); + if (r != 0){ + perror("spe_gang_context_destroy"); + } + } + } +}; + + +// custom deleter of anything that can be freed with "free" +class free_deleter { +public: + void operator()(void *p) { + free(p); + } +}; + + +/* + * Called when client thread is destroyed. + * We mark our client info free. + */ +static void +client_key_destructor(void *p) +{ + ((gc_client_thread_info *) p)->d_free = 1; +} + +static bool +is_power_of_2(uint32_t x) +{ + return (x != 0) && !(x & (x - 1)); +} + +//////////////////////////////////////////////////////////////////////// + + +gc_job_manager_impl::gc_job_manager_impl(const gc_jm_options *options) + : d_debug(0), d_spu_args(0), + d_eh_cond(&d_eh_mutex), d_eh_thread(0), d_eh_state(EHS_INIT), + d_shutdown_requested(false), + d_jc_cond(&d_jc_mutex), d_jc_thread(0), d_jc_state(JCS_INIT), d_jc_njobs_active(0), + d_ntell(0), d_tell_start(0), + d_client_thread(0), d_ea_args_maxsize(0), + d_proc_def(0), d_proc_def_ls_addr(0), d_nproc_defs(0) +{ + if (!s_key_initialized){ + int r = pthread_key_create(&s_client_key, client_key_destructor); + if (r != 0) + throw std::runtime_error("pthread_key_create"); + s_key_initialized = true; + } + + // ensure it's zero + pthread_setspecific(s_client_key, 0); + + if (options != 0) + d_options = *options; + + // provide the real default for those indicated with a zero + if (d_options.max_jobs == 0) + d_options.max_jobs = DEFAULT_MAX_JOBS; + if (d_options.max_client_threads == 0) + d_options.max_client_threads = DEFAULT_MAX_CLIENT_THREADS; + + if (!d_options.program_handle){ + fprintf(stderr, "gc_job_manager: options->program_handle must be non-zero\n"); + throw std::runtime_error("gc_job_manager: options->program_handle must be non-zero"); + } + + int ncpu_nodes = spe_cpu_info_get(SPE_COUNT_PHYSICAL_CPU_NODES, -1); + int nusable_spes = spe_cpu_info_get(SPE_COUNT_USABLE_SPES, -1); + + if (debug()){ + printf("cpu_nodes = %d\n", ncpu_nodes); + for (int i = 0; i < ncpu_nodes; i++){ + printf("node[%d].physical_spes = %2d\n", i, + spe_cpu_info_get(SPE_COUNT_PHYSICAL_SPES, i)); + printf("node[%d].usable_spes = %2d\n", i, + spe_cpu_info_get(SPE_COUNT_USABLE_SPES, i)); + } + } + + // clamp nspes + d_options.nspes = std::min(d_options.nspes, (unsigned int) MAX_SPES); + nusable_spes = std::min(nusable_spes, (int) MAX_SPES); + + // + // sanity check requested number of spes. + // + if (d_options.nspes == 0) // use all of them + d_options.nspes = nusable_spes; + else { + if (d_options.nspes > (unsigned int) nusable_spes){ + fprintf(stderr, + "gc_job_manager: warning: caller requested %d spes. There are only %d available.\n", + d_options.nspes, nusable_spes); + if (d_options.gang_schedule){ + // If we're gang scheduling we'll never get scheduled if we + // ask for more than are available. + throw std::out_of_range("gang_scheduling: not enough spes available"); + } + else { // FIXME clamp to usable. problem on PS3 when overcommited + fprintf(stderr, "gc_job_manager: clamping nspes to %d\n", nusable_spes); + d_options.nspes = nusable_spes; + } + } + } + + if (d_options.use_affinity){ + printf("gc_job_manager: warning: affinity request was ignored\n"); + } + + if (d_options.gang_schedule){ + d_gang = spe_gang_context_sptr(spe_gang_context_create(0), gang_deleter()); + if (!d_gang){ + perror("gc_job_manager_impl[spe_gang_context_create]"); + throw std::runtime_error("spe_gang_context_create"); + } + } + + d_ntell = std::min(d_options.nspes, 2U); + + // ---------------------------------------------------------------- + // initalize the job queue + + d_queue = (gc_jd_queue_t *) gc_aligned_alloc(sizeof(gc_jd_queue_t), CACHE_LINE_SIZE); + _d_queue_boost = + boost::shared_ptr((void *) d_queue, free_deleter()); + gc_jd_queue_init(d_queue); + + + // ---------------------------------------------------------------- + // create the spe contexts + + // 1 spu_arg struct for each SPE + assert(sizeof(gc_spu_args_t) % 16 == 0); + d_spu_args = + (gc_spu_args_t *) gc_aligned_alloc(MAX_SPES * sizeof(gc_spu_args_t), 16); + _d_spu_args_boost = + boost::shared_ptr((void *) d_spu_args, free_deleter()); + + // 2 completion info structs for each SPE (we double buffer them) + assert(sizeof(gc_comp_info_t) % CACHE_LINE_SIZE == 0); + d_comp_info = + (gc_comp_info_t *) gc_aligned_alloc(2 * MAX_SPES * sizeof(gc_comp_info_t), + CACHE_LINE_SIZE); + _d_comp_info_boost = + boost::shared_ptr((void *) d_comp_info, free_deleter()); + + + // get a handle to the spe program + + spe_program_handle_t *spe_image = d_options.program_handle.get(); + + // fish proc_def table out of SPE ELF file + + if (!gcpd_find_table(spe_image, &d_proc_def, &d_nproc_defs, &d_proc_def_ls_addr)){ + fprintf(stderr, "gc_job_manager_impl: couldn't find gc_proc_defs in SPE ELF file.\n"); + throw std::runtime_error("no gc_proc_defs"); + } + // fprintf(stderr, "d_proc_def_ls_addr = 0x%0x\n", d_proc_def_ls_addr); + + int spe_flags = (SPE_EVENTS_ENABLE + | SPE_MAP_PS + | SPE_CFG_SIGNOTIFY1_OR + | SPE_CFG_SIGNOTIFY2_OR); + + for (unsigned int i = 0; i < d_options.nspes; i++){ + // FIXME affinity stuff goes here + d_worker[i].spe_ctx = spe_context_create(spe_flags, d_gang.get());; + if (d_worker[i].spe_ctx == 0){ + perror("spe_context_create"); + throw std::runtime_error("spe_context_create"); + } + + d_worker[i].spe_ctrl = + (spe_spu_control_area_t *)spe_ps_area_get(d_worker[i].spe_ctx, SPE_CONTROL_AREA); + if (d_worker[i].spe_ctrl == 0){ + perror("spe_ps_area_get(SPE_CONTROL_AREA)"); + throw std::runtime_error("spe_ps_area_get(SPE_CONTROL_AREA)"); + } + + d_worker[i].spe_idx = i; + d_worker[i].spu_args = &d_spu_args[i]; + d_worker[i].spu_args->queue = ptr_to_ea(d_queue); + d_worker[i].spu_args->comp_info[0] = ptr_to_ea(&d_comp_info[2*i+0]); + d_worker[i].spu_args->comp_info[1] = ptr_to_ea(&d_comp_info[2*i+1]); + d_worker[i].spu_args->spu_idx = i; + d_worker[i].spu_args->nspus = d_options.nspes; + d_worker[i].spu_args->proc_def_ls_addr = d_proc_def_ls_addr; + d_worker[i].spu_args->nproc_defs = d_nproc_defs; + d_worker[i].spu_args->log.base = 0; + d_worker[i].spu_args->log.nentries = 0; + d_worker[i].state = WS_INIT; + + int r = spe_program_load(d_worker[i].spe_ctx, spe_image); + if (r != 0){ + perror("spe_program_load"); + throw std::runtime_error("spe_program_load"); + } + } + + setup_logfiles(); + + // ---------------------------------------------------------------- + // initalize the free list of job descriptors + + d_free_list = (gc_jd_stack_t *) gc_aligned_alloc(sizeof(gc_jd_stack_t), CACHE_LINE_SIZE); + // This ensures that the memory associated with d_free_list is + // automatically freed in the destructor or if an exception occurs + // here in the constructor. + _d_free_list_boost = + boost::shared_ptr((void *) d_free_list, free_deleter()); + gc_jd_stack_init(d_free_list); + + if (debug()){ + printf("sizeof(d_jd[0]) = %d (0x%x)\n", sizeof(d_jd[0]), sizeof(d_jd[0])); + printf("max_jobs = %u\n", d_options.max_jobs); + } + + // Initialize the array of job descriptors. + d_jd = (gc_job_desc_t *) gc_aligned_alloc(sizeof(d_jd[0]) * d_options.max_jobs, CACHE_LINE_SIZE); + _d_jd_boost = boost::shared_ptr((void *) d_jd, free_deleter()); + + + // set unique job_id + for (int i = 0; i < (int) d_options.max_jobs; i++) + d_jd[i].sys.job_id = i; + + // push them onto the free list + for (int i = d_options.max_jobs - 1; i >= 0; i--) + free_job_desc(&d_jd[i]); + + // ---------------------------------------------------------------- + // initialize d_client_thread + + { + gc_client_thread_info_sa cti( + new gc_client_thread_info[d_options.max_client_threads]); + + d_client_thread.swap(cti); + + for (unsigned int i = 0; i < d_options.max_client_threads; i++) + d_client_thread[i].d_client_id = i; + } + + // ---------------------------------------------------------------- + // initialize bitvectors + + // initialize d_bvlen, the number of longs in job related bitvectors. + int bits_per_long = sizeof(unsigned long) * 8; + d_bvlen = (d_options.max_jobs + bits_per_long - 1) / bits_per_long; + + // allocate all bitvectors in a single cache-aligned chunk + size_t nlongs = d_bvlen * d_options.max_client_threads; + void *p = gc_aligned_alloc(nlongs * sizeof(unsigned long), CACHE_LINE_SIZE); + _d_all_bitvectors = boost::shared_ptr(p, free_deleter()); + + // Now point the gc_client_thread_info bitvectors into this storage + unsigned long *v = (unsigned long *) p; + + for (unsigned int i = 0; i < d_options.max_client_threads; i++, v += d_bvlen) + d_client_thread[i].d_jobs_done = v; + + + // ---------------------------------------------------------------- + // create the spe event handler & worker (SPE) threads + + create_event_handler(); +} + +//////////////////////////////////////////////////////////////////////// + +gc_job_manager_impl::~gc_job_manager_impl() +{ + shutdown(); + + d_jd = 0; // handled via _d_jd_boost + d_free_list = 0; // handled via _d_free_list_boost + d_queue = 0; // handled via _d_queue_boost + + // clear cti, since we've deleted the underlying data + pthread_setspecific(s_client_key, 0); + + unmap_logfiles(); +} + +bool +gc_job_manager_impl::shutdown() +{ + omni_mutex_lock l(d_eh_mutex); + + { + omni_mutex_lock l2(d_jc_mutex); + d_shutdown_requested = true; // set flag for event handler thread + d_jc_cond.signal(); // wake up job completer + } + + // should only happens during early QA code + if (d_eh_thread == 0 && d_eh_state == EHS_INIT) + return false; + + while (d_eh_state != EHS_DEAD) // wait for it to finish + d_eh_cond.wait(); + + return true; +} + +int +gc_job_manager_impl::nspes() const +{ + return d_options.nspes; +} + +//////////////////////////////////////////////////////////////////////// + +void +gc_job_manager_impl::bv_zero(unsigned long *bv) +{ + memset(bv, 0, sizeof(unsigned long) * d_bvlen); +} + +inline void +gc_job_manager_impl::bv_clr(unsigned long *bv, unsigned int bitno) +{ + unsigned int wi = bitno / (sizeof (unsigned long) * 8); + unsigned int bi = bitno & ((sizeof (unsigned long) * 8) - 1); + bv[wi] &= ~(1UL << bi); +} + +inline void +gc_job_manager_impl::bv_set(unsigned long *bv, unsigned int bitno) +{ + unsigned int wi = bitno / (sizeof (unsigned long) * 8); + unsigned int bi = bitno & ((sizeof (unsigned long) * 8) - 1); + bv[wi] |= (1UL << bi); +} + +inline bool +gc_job_manager_impl::bv_isset(unsigned long *bv, unsigned int bitno) +{ + unsigned int wi = bitno / (sizeof (unsigned long) * 8); + unsigned int bi = bitno & ((sizeof (unsigned long) * 8) - 1); + return (bv[wi] & (1UL << bi)) != 0; +} + +inline bool +gc_job_manager_impl::bv_isclr(unsigned long *bv, unsigned int bitno) +{ + unsigned int wi = bitno / (sizeof (unsigned long) * 8); + unsigned int bi = bitno & ((sizeof (unsigned long) * 8) - 1); + return (bv[wi] & (1UL << bi)) == 0; +} + +//////////////////////////////////////////////////////////////////////// + +gc_job_desc * +gc_job_manager_impl::alloc_job_desc() +{ + // stack is lock free, and safe to call from any thread + gc_job_desc *jd = gc_jd_stack_pop(d_free_list); + if (jd == 0) + throw gc_bad_alloc("alloc_job_desc: none available"); + + return jd; +} + +void +gc_job_manager_impl::free_job_desc(gc_job_desc *jd) +{ + // stack is lock free, thus safe to call from any thread + if (jd != 0) + gc_jd_stack_push(d_free_list, jd); +} + +//////////////////////////////////////////////////////////////////////// + + +inline bool +gc_job_manager_impl::incr_njobs_active() +{ + omni_mutex_lock l(d_jc_mutex); + + if (d_shutdown_requested) + return false; + + if (d_jc_njobs_active++ == 0) // signal on 0 to 1 transition + d_jc_cond.signal(); + + return true; +} + +inline void +gc_job_manager_impl::decr_njobs_active(int n) +{ + omni_mutex_lock l(d_jc_mutex); + d_jc_njobs_active -= n; +} + + +/* + * We check as much as we can here on the PPE side, so that the SPE + * doesn't have to. + */ +static bool +check_direct_args(gc_job_desc *jd, gc_job_direct_args *args) +{ + if (args->nargs > MAX_ARGS_DIRECT){ + jd->status = JS_BAD_N_DIRECT; + return false; + } + + return true; +} + +static bool +check_ea_args(gc_job_desc *jd, gc_job_ea_args *p) +{ + if (p->nargs > MAX_ARGS_EA){ + jd->status = JS_BAD_N_EA; + return false; + } + + uint32_t dir_union = 0; + + for (unsigned int i = 0; i < p->nargs; i++){ + dir_union |= p->arg[i].direction; + switch(p->arg[i].direction){ + case GCJD_DMA_GET: + case GCJD_DMA_PUT: + break; + + default: + jd->status = JS_BAD_DIRECTION; + return false; + } + } + + if (p->nargs > 1){ + unsigned int common_eah = (p->arg[0].ea_addr) >> 32; + for (unsigned int i = 1; i < p->nargs; i++){ + if ((p->arg[i].ea_addr >> 32) != common_eah){ + jd->status = JS_BAD_EAH; + return false; + } + } + } + + jd->sys.direction_union = dir_union; + return true; +} + +bool +gc_job_manager_impl::submit_job(gc_job_desc *jd) +{ + // Ensure it's one of our job descriptors + + if (jd < d_jd || jd >= &d_jd[d_options.max_jobs]){ + jd->status = JS_BAD_JOB_DESC; + return false; + } + + // Ensure we've got a client_thread_info assigned to this thread. + + gc_client_thread_info *cti = + (gc_client_thread_info *) pthread_getspecific(s_client_key); + if (unlikely(cti == 0)){ + if ((cti = alloc_cti()) == 0){ + fprintf(stderr, "gc_job_manager_impl::submit_job: Too many client threads.\n"); + jd->status = JS_TOO_MANY_CLIENTS; + return false; + } + int r = pthread_setspecific(s_client_key, cti); + if (r != 0){ + jd->status = JS_BAD_JUJU; + fprintf(stderr, "pthread_setspecific failed (return = %d)\n", r); + return false; + } + } + + if (jd->proc_id == GCP_UNKNOWN_PROC){ + jd->status = JS_UNKNOWN_PROC; + return false; + } + + if (!check_direct_args(jd, &jd->input)) + return false; + + if (!check_direct_args(jd, &jd->output)) + return false; + + if (!check_ea_args(jd, &jd->eaa)) + return false; + + jd->status = JS_OK; + jd->sys.client_id = cti->d_client_id; + + if (!incr_njobs_active()){ + jd->status = JS_SHUTTING_DOWN; + return false; + } + + gc_jd_queue_enqueue(d_queue, jd); + // tell_spes_to_check_queue(); + return true; +} + +bool +gc_job_manager_impl::wait_job(gc_job_desc *jd) +{ + bool done; + return wait_jobs(1, &jd, &done, GC_WAIT_ANY) == 1 && jd->status == JS_OK; +} + +int +gc_job_manager_impl::wait_jobs(unsigned int njobs, + gc_job_desc *jd[], + bool done[], + gc_wait_mode mode) +{ + unsigned int i; + + gc_client_thread_info *cti = + (gc_client_thread_info *) pthread_getspecific(s_client_key); + if (unlikely(cti == 0)) + return -1; + + for (i = 0; i < njobs; i++){ + done[i] = false; + if (unlikely(jd[i]->sys.client_id != cti->d_client_id)){ + fprintf(stderr, "gc_job_manager_impl::wait_jobs: can't wait for a job you didn't submit\n"); + return -1; + } + } + + { + omni_mutex_lock l(cti->d_mutex); + + // setup info for event handler + cti->d_state = (mode == GC_WAIT_ANY) ? CT_WAIT_ANY : CT_WAIT_ALL; + cti->d_njobs_waiting_for = njobs; + cti->d_jobs_waiting_for = jd; + assert(cti->d_jobs_done != 0); + + unsigned int ndone = 0; + + // wait for jobs to complete + + while (1){ + ndone = 0; + for (i= 0; i < njobs; i++){ + if (done[i]) + ndone++; + else if (bv_isset(cti->d_jobs_done, jd[i]->sys.job_id)){ + bv_clr(cti->d_jobs_done, jd[i]->sys.job_id); + done[i] = true; + ndone++; + } + } + + if (mode == GC_WAIT_ANY && ndone > 0) + break; + + if (mode == GC_WAIT_ALL && ndone == njobs) + break; + + // FIXME what happens when somebody calls shutdown? + + cti->d_cond.wait(); // wait for event handler to wake us up + } + + cti->d_state = CT_NOT_WAITING; + cti->d_njobs_waiting_for = 0; // tidy up (not reqd) + cti->d_jobs_waiting_for = 0; // tidy up (not reqd) + return ndone; + } +} + +//////////////////////////////////////////////////////////////////////// + +bool +gc_job_manager_impl::send_all_spes(uint32_t msg) +{ + bool ok = true; + + for (unsigned int i = 0; i < d_options.nspes; i++) + ok &= send_spe(i, msg); + + return ok; +} + +bool +gc_job_manager_impl::send_spe(unsigned int spe, uint32_t msg) +{ + if (spe >= d_options.nspes) + return false; + + int r = spe_in_mbox_write(d_worker[spe].spe_ctx, &msg, 1, + SPE_MBOX_ALL_BLOCKING); + if (r < 0){ + perror("spe_in_mbox_write"); + return false; + } + + return r == 1; +} + +void +gc_job_manager_impl::tell_spes_to_check_queue() +{ + int nspes = d_options.nspes; + + for (int i = 0, ntold = 0; ntold < d_ntell && i < nspes ; ++i){ + volatile spe_spu_control_area_t *spe_ctrl = d_worker[d_tell_start].spe_ctrl; + int nfree = (spe_ctrl->SPU_Mbox_Stat >> 8) & 0xFF; + if (nfree == 4){ + spe_ctrl->SPU_In_Mbox = MK_MBOX_MSG(OP_CHECK_QUEUE, 0); + ntold++; + } + + unsigned int t = d_tell_start + 1; + if (t >= d_options.nspes) + t = 0; + d_tell_start = t; + } +} + + +//////////////////////////////////////////////////////////////////////// + +static void +pthread_create_failure_msg(int r, const char *which) +{ + char buf[256]; + const char *s = 0; + + switch (r){ + case EAGAIN: s = "EAGAIN"; break; + case EINVAL: s = "EINVAL"; break; + case EPERM: s = "EPERM"; break; + default: + snprintf(buf, sizeof(buf), "Unknown error %d", r); + s = buf; + break; + } + fprintf(stderr, "pthread_create[%s] failed: %s\n", which, s); +} + + +static bool +start_thread(pthread_t *thread, + void *(*start_routine)(void *), void *arg, + const char *msg) +{ + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + + // FIXME save sigprocmask + // FIXME set sigprocmask + + int r = pthread_create(thread, &attr, start_routine, arg); + + // FIXME restore sigprocmask + + if (r != 0){ + pthread_create_failure_msg(r, msg); + return false; + } + return true; +} + + +//////////////////////////////////////////////////////////////////////// + +static void *start_worker(void *arg); + +static void * +start_event_handler(void *arg) +{ + gc_job_manager_impl *p = (gc_job_manager_impl *) arg; + p->event_handler_loop(); + return 0; +} + +static void * +start_job_completer(void *arg) +{ + gc_job_manager_impl *p = (gc_job_manager_impl *) arg; + p->job_completer_loop(); + return 0; +} + +void +gc_job_manager_impl::create_event_handler() +{ + // create the SPE event handler and register our interest in events + + d_spe_event_handler.ptr = spe_event_handler_create(); + if (d_spe_event_handler.ptr == 0){ + perror("spe_event_handler_create"); + throw std::runtime_error("spe_event_handler_create"); + } + + for (unsigned int i = 0; i < d_options.nspes; i++){ + spe_event_unit_t eu; + memset(&eu, 0, sizeof(eu)); + eu.events = SPE_EVENT_OUT_INTR_MBOX | SPE_EVENT_SPE_STOPPED; + eu.spe = d_worker[i].spe_ctx; + eu.data.u32 = i; // set in events returned by spe_event_wait + + if (spe_event_handler_register(d_spe_event_handler.ptr, &eu) != 0){ + perror("spe_event_handler_register"); + throw std::runtime_error("spe_event_handler_register"); + } + } + + // create the event handling thread + + if (!start_thread(&d_eh_thread, start_event_handler, this, "event_handler")){ + throw std::runtime_error("pthread_create"); + } + + // create the job completion thread + + if (!start_thread(&d_jc_thread, start_job_completer, this, "job_completer")){ + throw std::runtime_error("pthread_create"); + } + + // create the SPE worker threads + + bool ok = true; + for (unsigned int i = 0; ok && i < d_options.nspes; i++){ + char name[256]; + snprintf(name, sizeof(name), "worker[%d]", i); + ok &= start_thread(&d_worker[i].thread, start_worker, + &d_worker[i], name); + } + + if (!ok){ + // + // FIXME Clean up the mess. Need to terminate event handler and all workers. + // + // this should cause the workers to exit, unless they're seriously broken + send_all_spes(MK_MBOX_MSG(OP_EXIT, 0)); + + shutdown(); + + throw std::runtime_error("pthread_create"); + } +} + +//////////////////////////////////////////////////////////////////////// + +void +gc_job_manager_impl::set_eh_state(evt_handler_state s) +{ + omni_mutex_lock l(d_eh_mutex); + d_eh_state = s; + d_eh_cond.broadcast(); +} + +void +gc_job_manager_impl::set_ea_args_maxsize(int maxsize) +{ + omni_mutex_lock l(d_eh_mutex); + d_ea_args_maxsize = maxsize; + d_eh_cond.broadcast(); +} + +void +gc_job_manager_impl::print_event(spe_event_unit_t *evt) +{ + printf("evt: spe = %d events = (0x%x)", evt->data.u32, evt->events); + + if (evt->events & SPE_EVENT_OUT_INTR_MBOX) + printf(" OUT_INTR_MBOX"); + + if (evt->events & SPE_EVENT_IN_MBOX) + printf(" IN_MBOX"); + + if (evt->events & SPE_EVENT_TAG_GROUP) + printf(" TAG_GROUP"); + + if (evt->events & SPE_EVENT_SPE_STOPPED) + printf(" SPE_STOPPED"); + + printf("\n"); +} + +struct job_client_info { + uint16_t job_id; + uint16_t client_id; +}; + +static int +compare_jci_clients(const void *va, const void *vb) +{ + const job_client_info *a = (job_client_info *) va; + const job_client_info *b = (job_client_info *) vb; + + return a->client_id - b->client_id; +} + +void +gc_job_manager_impl::notify_clients_jobs_are_done(unsigned int spe_num, + unsigned int completion_info_idx) +{ + const char *msg = "gc_job_manager_impl::notify_client_job_is_done (INTERNAL ERROR)"; + + smp_rmb(); // order reads so we know that data sent from SPE is here + + gc_comp_info_t *ci = &d_comp_info[2 * spe_num + (completion_info_idx & 0x1)]; + + if (ci->ncomplete == 0){ // never happens, but ensures code below is correct + ci->in_use = 0; + return; + } + + decr_njobs_active(ci->ncomplete); + + if (0){ + static int total_jobs; + static int total_msgs; + total_msgs++; + total_jobs += ci->ncomplete; + printf("ppe: tj = %6d tm = %6d\n", total_jobs, total_msgs); + } + + job_client_info gci[GC_CI_NJOBS]; + + /* + * Make one pass through and sanity check everything while filling in gci + */ + for (unsigned int i = 0; i < ci->ncomplete; i++){ + unsigned int job_id = ci->job_id[i]; + + if (job_id >= d_options.max_jobs){ + // internal error, shouldn't happen + fprintf(stderr,"%s: invalid job_id = %d\n", msg, job_id); + ci->in_use = 0; // clear flag so SPE knows we're done with it + return; + } + gc_job_desc *jd = &d_jd[job_id]; + + if (jd->sys.client_id >= d_options.max_client_threads){ + // internal error, shouldn't happen + fprintf(stderr, "%s: invalid client_id = %d\n", msg, jd->sys.client_id); + ci->in_use = 0; // clear flag so SPE knows we're done with it + return; + } + + gci[i].job_id = job_id; + gci[i].client_id = jd->sys.client_id; + } + + // sort by client_id so we only have to lock & signal once / client + + if (ci->ncomplete > 1) + qsort(gci, ci->ncomplete, sizeof(gci[0]), compare_jci_clients); + + // "wind-in" + + gc_client_thread_info *last_cti = &d_client_thread[gci[0].client_id]; + last_cti->d_mutex.lock(); + bv_set(last_cti->d_jobs_done, gci[0].job_id); // mark job done + + for (unsigned int i = 1; i < ci->ncomplete; i++){ + + gc_client_thread_info *cti = &d_client_thread[gci[i].client_id]; + + if (cti != last_cti){ // new client? + + // yes. signal old client, unlock old, lock new + + // FIXME we could distinguish between CT_WAIT_ALL & CT_WAIT_ANY + + if (last_cti->d_state == CT_WAIT_ANY || last_cti->d_state == CT_WAIT_ALL) + last_cti->d_cond.signal(); // wake client thread up + + last_cti->d_mutex.unlock(); + cti->d_mutex.lock(); + last_cti = cti; + } + + // mark job done + bv_set(cti->d_jobs_done, gci[i].job_id); + } + + // "wind-out" + + if (last_cti->d_state == CT_WAIT_ANY || last_cti->d_state == CT_WAIT_ALL) + last_cti->d_cond.signal(); // wake client thread up + last_cti->d_mutex.unlock(); + + ci->in_use = 0; // clear flag so SPE knows we're done with it +} + +void +gc_job_manager_impl::handle_event(spe_event_unit_t *evt) +{ + // print_event(evt); + + int spe_num = evt->data.u32; + + // only a single event type can be signaled at a time + + if (evt->events == SPE_EVENT_OUT_INTR_MBOX) { // SPE sent us 1 or more msgs + static const int NMSGS = 32; + unsigned int msg[NMSGS]; + int n = spe_out_intr_mbox_read(evt->spe, msg, NMSGS, SPE_MBOX_ANY_BLOCKING); + // printf("spe_out_intr_mbox_read = %d\n", n); + if (n < 0){ + perror("spe_out_intr_mbox_read"); + } + else { + for (int i = 0; i < n; i++){ + switch(MBOX_MSG_OP(msg[i])){ +#if 0 + case OP_JOBS_DONE: + if (debug()) + printf("eh: job_done (0x%08x) from spu[%d]\n", msg[i], spe_num); + notify_clients_jobs_are_done(spe_num, MBOX_MSG_ARG(msg[i])); + break; +#endif + case OP_SPU_BUFSIZE: + set_ea_args_maxsize(MBOX_MSG_ARG(msg[i])); + break; + + case OP_EXIT: + default: + printf("eh: Unexpected msg (0x%08x) from spu[%d]\n", msg[i], spe_num); + break; + } + } + } + } + else if (evt->events == SPE_EVENT_SPE_STOPPED){ // the SPE stopped + spe_stop_info_t si; + int r = spe_stop_info_read(evt->spe, &si); + if (r < 0){ + perror("spe_stop_info_read"); + } + else { + switch (si.stop_reason){ + case SPE_EXIT: + if (debug()){ + printf("eh: spu[%d] SPE_EXIT w/ exit_code = %d\n", + spe_num, si.result.spe_exit_code); + } + break; + case SPE_STOP_AND_SIGNAL: + printf("eh: spu[%d] SPE_STOP_AND_SIGNAL w/ spe_signal_code = 0x%x\n", + spe_num, si.result.spe_signal_code); + break; + case SPE_RUNTIME_ERROR: + printf("eh: spu[%d] SPE_RUNTIME_ERROR w/ spe_runtime_error = 0x%x\n", + spe_num, si.result.spe_runtime_error); + break; + case SPE_RUNTIME_EXCEPTION: + printf("eh: spu[%d] SPE_RUNTIME_EXCEPTION w/ spe_runtime_exception = 0x%x\n", + spe_num, si.result.spe_runtime_exception); + break; + case SPE_RUNTIME_FATAL: + printf("eh: spu[%d] SPE_RUNTIME_FATAL w/ spe_runtime_fatal = 0x%x\n", + spe_num, si.result.spe_runtime_fatal); + break; + case SPE_CALLBACK_ERROR: + printf("eh: spu[%d] SPE_CALLBACK_ERROR w/ spe_callback_error = 0x%x\n", + spe_num, si.result.spe_callback_error); + break; + case SPE_ISOLATION_ERROR: + printf("eh: spu[%d] SPE_ISOLATION_ERROR w/ spe_isolation_error = 0x%x\n", + spe_num, si.result.spe_isolation_error); + break; + default: + printf("eh: spu[%d] UNKNOWN STOP REASON (%d) w/ spu_status = 0x%x\n", + spe_num, si.stop_reason, si.spu_status); + break; + } + } + } +#if 0 // not enabled + else if (evt->events == SPE_EVENT_IN_MBOX){ // there's room to write to SPE + // spe_in_mbox_write (ignore) + } + else if (evt->events == SPE_EVENT_TAG_GROUP){ // our DMA completed + // spe_mfcio_tag_status_read + } +#endif + else { + fprintf(stderr, "handle_event: unexpected evt->events = 0x%x\n", evt->events); + return; + } +} + +// +// This is the "main program" of the event handling thread +// +void +gc_job_manager_impl::event_handler_loop() +{ + static const int MAX_EVENTS = 16; + static const int TIMEOUT = 20; // how long to block in milliseconds + + spe_event_unit_t events[MAX_EVENTS]; + + if (d_debug) + printf("event_handler_loop: starting\n"); + + set_eh_state(EHS_RUNNING); + + // ask the first spe for its max bufsize + send_spe(0, MK_MBOX_MSG(OP_GET_SPU_BUFSIZE, 0)); + + while (1){ + switch(d_eh_state){ + + case EHS_RUNNING: // normal stuff + if (d_shutdown_requested) { + set_eh_state(EHS_SHUTTING_DOWN); + } + break; + + case EHS_SHUTTING_DOWN: + if (d_jc_state == JCS_DEAD){ + send_all_spes(MK_MBOX_MSG(OP_EXIT, 0)); + set_eh_state(EHS_WAITING_FOR_WORKERS_TO_DIE); + } + break; + + case EHS_WAITING_FOR_WORKERS_TO_DIE: + { + bool all_dead = true; + for (unsigned int i = 0; i < d_options.nspes; i++) + all_dead &= d_worker[i].state == WS_DEAD; + + if (all_dead){ + set_eh_state(EHS_DEAD); + if (d_debug) + printf("event_handler_loop: exiting\n"); + return; + } + } + break; + + default: + set_eh_state(EHS_DEAD); + printf("event_handler_loop(default): exiting\n"); + return; + } + + // block waiting for events... + int nevents = spe_event_wait(d_spe_event_handler.ptr, + events, MAX_EVENTS, TIMEOUT); + if (nevents < 0){ + perror("spe_wait_event"); + // FIXME bail? + } + for (int i = 0; i < nevents; i++){ + handle_event(&events[i]); + } + } +} + +//////////////////////////////////////////////////////////////////////// + +void +gc_job_manager_impl::poll_for_job_completion() +{ + static const int niter = 10000; + + CCTPL(); // change current (h/w) thread priority to low + + for (int n = 0; n < niter; n++){ + + for (unsigned int spe_num = 0; spe_num < d_options.nspes; spe_num++){ + volatile spe_spu_control_area_t *spe_ctrl = d_worker[spe_num].spe_ctrl; + int nentries = spe_ctrl->SPU_Mbox_Stat & 0xFF; + while (nentries-- > 0){ + unsigned int msg = spe_ctrl->SPU_Out_Mbox; + switch(MBOX_MSG_OP(msg)){ + case OP_JOBS_DONE: + if (debug()) + printf("jc: job_done (0x%08x) from spu[%d]\n", msg, spe_num); + + CCTPM(); // change current thread priority to medium + notify_clients_jobs_are_done(spe_num, MBOX_MSG_ARG(msg)); + CCTPL(); + break; + + default: + printf("jc: Unexpected msg (0x%08x) from spu[%d]\n", msg, spe_num); + break; + } + } + } + } + CCTPM(); +} + +// +// This is the "main program" of the job completer thread +// +void +gc_job_manager_impl::job_completer_loop() +{ + d_jc_state = JCS_RUNNING; + + while (1){ + { + omni_mutex_lock l(d_jc_mutex); + if (d_jc_njobs_active == 0){ + if (d_shutdown_requested){ + d_jc_state = JCS_DEAD; + return; + } + d_jc_cond.wait(); + } + } + + poll_for_job_completion(); + } +} + +//////////////////////////////////////////////////////////////////////// +// this is the top of the SPE worker threads + +static void * +start_worker(void *arg) +{ + worker_ctx *w = (worker_ctx *) arg; + spe_stop_info_t si; + + w->state = WS_RUNNING; + if (s_worker_debug) + printf("worker[%d]: WS_RUNNING\n", w->spe_idx); + + unsigned int entry = SPE_DEFAULT_ENTRY; + int r = spe_context_run(w->spe_ctx, &entry, 0, w->spu_args, 0, &si); + + if (r < 0){ // error + char buf[64]; + snprintf(buf, sizeof(buf), "worker[%d]: spe_context_run", w->spe_idx); + perror(buf); + } + else if (r == 0){ + // spe program called exit. + if (s_worker_debug) + printf("worker[%d]: SPE_EXIT w/ exit_code = %d\n", + w->spe_idx, si.result.spe_exit_code); + } + else { + // called stop_and_signal + // + // I'm not sure we'll ever get here. I think the event + // handler will catch this... + printf("worker[%d]: SPE_STOP_AND_SIGNAL w/ spe_signal_code = 0x%x\n", + w->spe_idx, si.result.spe_signal_code); + } + + // in any event, we're committing suicide now ;) + if (s_worker_debug) + printf("worker[%d]: WS_DEAD\n", w->spe_idx); + + w->state = WS_DEAD; + return 0; +} + +//////////////////////////////////////////////////////////////////////// + +gc_client_thread_info * +gc_job_manager_impl::alloc_cti() +{ + for (unsigned int i = 0; i < d_options.max_client_threads; i++){ + if (d_client_thread[i].d_free){ + // try to atomically grab it + if (_atomic_dec_if_positive(ptr_to_ea(&d_client_thread[i].d_free)) == 0){ + // got it... + gc_client_thread_info *cti = &d_client_thread[i]; + cti->d_state = CT_NOT_WAITING; + bv_zero(cti->d_jobs_done); + cti->d_njobs_waiting_for = 0; + cti->d_jobs_waiting_for = 0; + + return cti; + } + } + } + return 0; +} + +void +gc_job_manager_impl::free_cti(gc_client_thread_info *cti) +{ + assert((size_t) (cti - d_client_thread.get()) < d_options.max_client_threads); + cti->d_free = 1; +} + +int +gc_job_manager_impl::ea_args_maxsize() +{ + omni_mutex_lock l(d_eh_mutex); + + while (d_ea_args_maxsize == 0) // wait for it to be initialized + d_eh_cond.wait(); + + return d_ea_args_maxsize; +} + +void +gc_job_manager_impl::set_debug(int debug) +{ + d_debug = debug; + s_worker_debug = debug; +} + +int +gc_job_manager_impl::debug() +{ + return d_debug; +} + +//////////////////////////////////////////////////////////////////////// + +void +gc_job_manager_impl::setup_logfiles() +{ + if (!d_options.enable_logging) + return; + + if (d_options.log2_nlog_entries == 0) + d_options.log2_nlog_entries = 12; + + // must end up a multiple of the page size + + size_t pagesize = getpagesize(); + size_t s = (1 << d_options.log2_nlog_entries) * sizeof(gc_log_entry_t); + s = ((s + pagesize - 1) / pagesize) * pagesize; + size_t nentries = s / sizeof(gc_log_entry_t); + assert(is_power_of_2(nentries)); + + for (unsigned int i = 0; i < d_options.nspes; i++){ + char filename[100]; + snprintf(filename, sizeof(filename), "spu_log.%02d", i); + int fd = open(filename, O_CREAT|O_TRUNC|O_RDWR, 0664); + if (fd == -1){ + perror(filename); + return; + } + lseek(fd, s - 1, SEEK_SET); + write(fd, "\0", 1); + void *p = mmap(0, s, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + if (p == MAP_FAILED){ + perror("gc_job_manager_impl::setup_logfiles: mmap"); + close(fd); + return; + } + close(fd); + memset(p, 0, s); + d_spu_args[i].log.base = ptr_to_ea(p); + d_spu_args[i].log.nentries = nentries; + } +} + +void +gc_job_manager_impl::sync_logfiles() +{ + for (unsigned int i = 0; i < d_options.nspes; i++){ + if (d_spu_args[i].log.base) + msync(ea_to_ptr(d_spu_args[i].log.base), + d_spu_args[i].log.nentries * sizeof(gc_log_entry_t), + MS_ASYNC); + } +} + +void +gc_job_manager_impl::unmap_logfiles() +{ + for (unsigned int i = 0; i < d_options.nspes; i++){ + if (d_spu_args[i].log.base) + munmap(ea_to_ptr(d_spu_args[i].log.base), + d_spu_args[i].log.nentries * sizeof(gc_log_entry_t)); + } +} + +//////////////////////////////////////////////////////////////////////// +// +// lookup proc names in d_proc_def table + +gc_proc_id_t +gc_job_manager_impl::lookup_proc(const std::string &proc_name) +{ + for (int i = 0; i < d_nproc_defs; i++) + if (proc_name == d_proc_def[i].name) + return i; + + throw gc_unknown_proc(proc_name); +} + +std::vector +gc_job_manager_impl::proc_names() +{ + std::vector r; + for (int i = 0; i < d_nproc_defs; i++) + r.push_back(d_proc_def[i].name); + + return r; +} + +//////////////////////////////////////////////////////////////////////// + +worker_ctx::~worker_ctx() +{ + if (spe_ctx){ + int r = spe_context_destroy(spe_ctx); + if (r != 0){ + perror("spe_context_destroy"); + } + spe_ctx = 0; + } + state = WS_FREE; +} diff --git a/gcell/lib/runtime/gc_job_manager_impl.h b/gcell/lib/runtime/gc_job_manager_impl.h new file mode 100644 index 00000000..a5611787 --- /dev/null +++ b/gcell/lib/runtime/gc_job_manager_impl.h @@ -0,0 +1,274 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef INCLUDED_GC_JOB_MANAGER_IMPL_H +#define INCLUDED_GC_JOB_MANAGER_IMPL_H + +#include +#include +#include +#include +#include "gc_client_thread_info.h" +#include +#include +#include + +typedef boost::shared_ptr spe_gang_context_sptr; +typedef boost::shared_ptr spe_program_handle_sptr; +typedef boost::scoped_array gc_client_thread_info_sa; + + +enum worker_state { + WS_FREE, // not in use + WS_INIT, // allocated and being initialized + WS_RUNNING, // the thread is running + WS_DEAD, // the thread is dead +}; + +struct worker_ctx { + volatile worker_state state; + unsigned int spe_idx; // [0, nspes-1] + spe_context_ptr_t spe_ctx; + spe_spu_control_area_t *spe_ctrl; + pthread_t thread; + gc_spu_args_t *spu_args; // pointer to 16-byte aligned struct + + worker_ctx() + : state(WS_FREE), spe_idx(0), spe_ctx(0), spe_ctrl(0), + thread(0), spu_args(0) {} + ~worker_ctx(); +}; + +enum evt_handler_state { + EHS_INIT, // being initialized + EHS_RUNNING, // thread is running + EHS_SHUTTING_DOWN, // in process of shutting down everything + EHS_WAITING_FOR_WORKERS_TO_DIE, + EHS_DEAD, // thread is dead +}; + +enum job_completer_state { + JCS_INIT, // being initialized + JCS_RUNNING, // thread is running + JCS_DEAD, // thread is dead +}; + +struct spe_event_handler { + spe_event_handler_ptr_t ptr; + + spe_event_handler() : ptr(0) {} + ~spe_event_handler(){ + if (ptr){ + if (spe_event_handler_destroy(ptr) != 0){ + perror("spe_event_handler_destroy"); + } + } + } +}; + + +/*! + * \brief Concrete class that manages SPE jobs. + * + * This class contains all the implementation details. + */ +class gc_job_manager_impl : public gc_job_manager +{ + enum { MAX_SPES = 16 }; + + int d_debug; + gc_jm_options d_options; + spe_program_handle_sptr d_spe_image; + spe_gang_context_sptr d_gang; // boost::shared_ptr + + worker_ctx d_worker[MAX_SPES]; // SPE ctx, thread, etc + gc_spu_args_t *d_spu_args; // 16-byte aligned structs + boost::shared_ptr _d_spu_args_boost; // hack for automatic storage mgmt + + gc_comp_info_t *d_comp_info; // 128-byte aligned structs + boost::shared_ptr _d_comp_info_boost; // hack for automatic storage mgmt + + // used to coordinate communication w/ the event handling thread + omni_mutex d_eh_mutex; + omni_condition d_eh_cond; + pthread_t d_eh_thread; // the event handler thread + volatile evt_handler_state d_eh_state; + volatile bool d_shutdown_requested; + spe_event_handler d_spe_event_handler; + + // used to coordinate communication w/ the job completer thread + omni_mutex d_jc_mutex; + omni_condition d_jc_cond; + pthread_t d_jc_thread; // the job completion thread + volatile job_completer_state d_jc_state; + int d_jc_njobs_active; // # of jobs submitted but not yet reaped + + // round robin notification of spes + int d_ntell; // # of spes to tell + unsigned int d_tell_start; // which one to start with + + // All of the job descriptors are hung off of here. + // We allocate them all in a single cache aligned chunk. + gc_job_desc_t *d_jd; // [options.max_jobs] + boost::shared_ptr _d_jd_boost; // hack for automatic storage mgmt + + gc_client_thread_info_sa d_client_thread; // [options.max_client_threads] + + // We use bitvectors to represent the completing state of a job. Each + // bitvector is d_bvlen longs in length. + int d_bvlen; // bit vector length in longs + + // This contains the storage for all the bitvectors used by the job + // manager. There's 1 for each client thread, in the d_jobs_done + // field. We allocate them all in a single cache aligned chunk. + boost::shared_ptr _d_all_bitvectors; // hack for automatic storage mgmt + + // Lock free stack where we keep track of the free job descriptors. + gc_jd_stack_t *d_free_list; // stack of free job descriptors + boost::shared_ptr _d_free_list_boost; // hack for automatic storage mgmt + + // The PPE inserts jobs here; SPEs pull jobs from here. + gc_jd_queue_t *d_queue; // job queue + boost::shared_ptr _d_queue_boost; // hack for automatic storage mgmt + + int d_ea_args_maxsize; + + struct gc_proc_def *d_proc_def; // the SPE procedure table + uint32_t d_proc_def_ls_addr; // the LS address of the table + int d_nproc_defs; // number of proc_defs in table + + gc_client_thread_info *alloc_cti(); + void free_cti(gc_client_thread_info *cti); + + void create_event_handler(); + void set_eh_state(evt_handler_state s); + void set_ea_args_maxsize(int maxsize); + + void notify_clients_jobs_are_done(unsigned int spe_num, + unsigned int completion_info_idx); + +public: + void event_handler_loop(); // really private + void job_completer_loop(); // really private + +private: + bool send_all_spes(uint32_t msg); + bool send_spe(unsigned int spe, uint32_t msg); + void print_event(spe_event_unit_t *evt); + void handle_event(spe_event_unit_t *evt); + bool incr_njobs_active(); + void decr_njobs_active(int n); + void tell_spes_to_check_queue(); + void poll_for_job_completion(); + + // bitvector ops + void bv_zero(unsigned long *bv); + void bv_clr(unsigned long *bv, unsigned int bitno); + void bv_set(unsigned long *bv, unsigned int bitno); + bool bv_isset(unsigned long *bv, unsigned int bitno); + bool bv_isclr(unsigned long *bv, unsigned int bitno); + + void setup_logfiles(); + void sync_logfiles(); + void unmap_logfiles(); + + friend gc_job_manager_sptr gc_make_job_manager(const gc_jm_options *options); + + gc_job_manager_impl(const gc_jm_options *options = 0); + +public: + virtual ~gc_job_manager_impl(); + + /*! + * Stop accepting new jobs. Wait for existing jobs to complete. + * Return all managed SPE's to the system. + */ + virtual bool shutdown(); + + /*! + * \brief Return number of SPE's currently allocated to job manager. + */ + virtual int nspes() const; + + /*! + * \brief Return a pointer to a properly aligned job descriptor, + * or zero if none are available. + */ + virtual gc_job_desc *alloc_job_desc(); + + /* + *! Return a job descriptor previously allocated with alloc_job_desc() + * + * \param[in] jd pointer to job descriptor to free. + */ + virtual void free_job_desc(gc_job_desc *jd); + + /*! + * \brief Submit a job for asynchronous processing on an SPE. + * + * \param[in] jd pointer to job description + * + * The caller must not read or write the job description + * or any of the memory associated with any indirect arguments + * until after calling wait_job. + * + * \returns true iff the job was successfully enqueued. + * If submit_job returns false, check jd->status for additional info. + */ + virtual bool submit_job(gc_job_desc *jd); + + /*! + * \brief Wait for job to complete. + * + * A thread may only wait for jobs which it submitted. + * + * \returns true if sucessful, else false. + */ + virtual bool + wait_job(gc_job_desc *jd); + + /*! + * \brief wait for 1 or more jobs to complete. + * + * \param[in] njobs is the length of arrays \p jd and \p done. + * \param[in] jd are the jobs that are to be waited for. + * \param[out] done indicates whether the corresponding job is complete. + * \param[in] mode indicates whether to wait for ALL or ANY of the jobs + * in \p jd to complete. + * + * A thread may only wait for jobs which it submitted. + * + * \returns number of jobs completed, or -1 if error. + */ + virtual int + wait_jobs(unsigned int njobs, + gc_job_desc *jd[], bool done[], gc_wait_mode mode); + + virtual int ea_args_maxsize(); + + virtual gc_proc_id_t lookup_proc(const std::string &name); + virtual std::vector proc_names(); + + virtual void set_debug(int debug); + virtual int debug(); +}; + +#endif /* INCLUDED_GC_JOB_MANAGER_IMPL_H */ diff --git a/gcell/lib/runtime/gc_proc_def_utils.cc b/gcell/lib/runtime/gc_proc_def_utils.cc new file mode 100644 index 00000000..0250d677 --- /dev/null +++ b/gcell/lib/runtime/gc_proc_def_utils.cc @@ -0,0 +1,123 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +static const unsigned char expected[EI_PAD] = { + ELFMAG0, + ELFMAG1, + ELFMAG2, + ELFMAG3, + ELFCLASS32, + ELFDATA2MSB, + EV_CURRENT, + ELFOSABI_SYSV, + 0 +}; + + +/* + * Basically we're going to find the GC_PROC_DEF_SECTION section + * in the ELF file and return a pointer to it. The only things in that + * section are gc_proc_def's + */ +bool +gcpd_find_table(spe_program_handle_t *handle, + struct gc_proc_def **table, int *nentries, uint32_t *ls_addr) +{ + if (!handle || !table || !nentries) + return false; + + *table = 0; + *nentries = 0; + + Elf32_Ehdr *ehdr = (Elf32_Ehdr *)handle->elf_image; + if (!ehdr){ + fprintf(stderr, "gcpd: No ELF image has been loaded\n"); + return false; + } + + // quick check that we're looking at a SPE EXEC object + + if (memcmp(ehdr->e_ident, expected, EI_PAD) != 0){ + fprintf(stderr, "gcpd: invalid ELF header\n"); + return false; + } + + if (ehdr->e_machine != 0x17){ // confirm machine type (EM_SPU) + fprintf(stderr, "gcpd: not an SPE ELF object\n"); + return false; + } + + if (ehdr->e_type != ET_EXEC){ + fprintf(stderr, "gcpd: invalid SPE ELF type.\n"); + fprintf(stderr, "gcpd: SPE type %d != %d\n", ehdr->e_type, ET_EXEC); + return false; + } + + // find the section header table + + Elf32_Shdr *shdr; + Elf32_Shdr *sh; + + if (ehdr->e_shentsize != sizeof (*shdr)){ + fprintf(stderr, "gcpd: invalid section header format.\n"); + return false; + } + + if (ehdr->e_shnum == 0){ + fprintf(stderr, "gcpd: no section headers in file.\n"); + return false; + } + + shdr = (Elf32_Shdr *) ((char *)ehdr + ehdr->e_shoff); + char *str_table = (char *)ehdr + shdr[ehdr->e_shstrndx].sh_offset; + + // traverse the sections looking for GC_PROC_DEF_SECTION + + for (sh = shdr; sh < &shdr[ehdr->e_shnum]; sh++){ + if (0){ + fprintf(stderr, "section name: %s (start: 0x%04x, size: 0x%04x)\n", + str_table + sh->sh_name, sh->sh_offset, sh->sh_size); + } + + if (strcmp(GC_PROC_DEF_SECTION, str_table+sh->sh_name) == 0){ + *table = (struct gc_proc_def *)((char *)ehdr + sh->sh_offset); + if (sh->sh_size % (sizeof(struct gc_proc_def)) != 0){ + fprintf(stderr, "gcpd: %s section has invalid format\n", GC_PROC_DEF_SECTION); + return false; + } + *nentries = sh->sh_size / sizeof(struct gc_proc_def); + *ls_addr = sh->sh_addr; + return true; + } + } + + return false; +} diff --git a/gcell/lib/runtime/gc_proc_def_utils.h b/gcell/lib/runtime/gc_proc_def_utils.h new file mode 100644 index 00000000..79c9b51a --- /dev/null +++ b/gcell/lib/runtime/gc_proc_def_utils.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GC_PROC_DEF_UTILS_H +#define INCLUDED_GC_PROC_DEF_UTILS_H + +#include +#include + +/*! + * \brief find the gc_proc_def table in the SPE program + * + * \param[in] program is the handle to the loaded SPE program + * \param[out] table points to the table, if it's found + * \param[out] nentries is set to the number of entries in the table. + * \param[out] ls_addr is set to the Local Store address of the table + * + * \returns true if successful, else false + */ +bool +gcpd_find_table(spe_program_handle_t *program, + struct gc_proc_def **table, int *nentries, uint32_t *ls_addr); + + +#endif /* INCLUDED_GC_PROC_DEF_UTILS_H */ diff --git a/gcell/lib/runtime/gcell-embedspu-libtool b/gcell/lib/runtime/gcell-embedspu-libtool new file mode 100755 index 00000000..c206086a --- /dev/null +++ b/gcell/lib/runtime/gcell-embedspu-libtool @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Take a spu executable and turn into into a libtool compatible .lo (and .o) file. +# This is needed when you want to embed a SPU executable into a shared library. +# +# The symbol assigned to the embedded executable is the basename of the +# output file with an _spx appended. E.g., if the output filename is +# my_spe_tricks.lo the symbol name is my_spe_tricks_spx. +# ("_spx" stands for SPE executable) + +if [ $# -ne 2 ]; then + echo "usage: gcell-embedspu-libtool spu_executable output_file.lo " 1>&2 + exit 1 +fi + +spu_executable=$1 +lo_file=$2 +symbol_name=${lo_file%%.lo}_spx + +# try to make .libs in case it's not there +mkdir .libs >/dev/null 2>/dev/null + +# generate the .o file that wraps the SPU executable +ppu-embedspu -m32 -fpic ${symbol_name} ${spu_executable} .libs/${symbol_name}.o + +# generate the .lo libtool file that points at all the right places +rm -f $lo_file +cat >$lo_file.new < +#include +#include +#include + +CppUnit::TestSuite * +qa_gcell_runtime::suite() +{ + CppUnit::TestSuite *s = new CppUnit::TestSuite("runtime"); + + s->addTest(qa_jd_stack::suite()); + s->addTest(qa_jd_queue::suite()); + s->addTest(qa_job_manager::suite()); + + return s; +} diff --git a/gcell/lib/runtime/qa_gcell_runtime.h b/gcell/lib/runtime/qa_gcell_runtime.h new file mode 100644 index 00000000..36180c91 --- /dev/null +++ b/gcell/lib/runtime/qa_gcell_runtime.h @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_QA_GCELL_RUNTIME_H +#define INCLUDED_QA_GCELL_RUNTIME_H + +#include + +//! collect all the tests for the runtime directory + +class qa_gcell_runtime { +public: + //! return suite of tests + static CppUnit::TestSuite *suite(); +}; + + +#endif /* INCLUDED_QA_GCELL_RUNTIME_H */ diff --git a/gcell/lib/runtime/qa_jd_queue.cc b/gcell/lib/runtime/qa_jd_queue.cc new file mode 100644 index 00000000..35ab9d82 --- /dev/null +++ b/gcell/lib/runtime/qa_jd_queue.cc @@ -0,0 +1,78 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#include "qa_jd_queue.h" +#include +#include +#include + + + +static const int NJDS = 16; +static gc_jd_queue_t queue; +static gc_job_desc_t jds[NJDS]; + +// no brainer, single threaded basic checkout +void +qa_jd_queue::t1() +{ + // N.B., queue allocated stuff doesn't obey ((aligned (N))) attributes + //const int NJDS = 8; + //gc_jd_queue_t queue; + //gc_job_desc_t jds[NJDS]; + + //printf("&queue = %p\n", &queue); + //printf("&jds[0] = %p\n", &jds[0]); + //printf("&jds[1] = %p\n", &jds[1]); + + CPPUNIT_ASSERT(((uintptr_t) &queue & 0x7f) == 0); + CPPUNIT_ASSERT(((uintptr_t) &jds[0] & 0x7f) == 0); + CPPUNIT_ASSERT(((uintptr_t) &jds[1] & 0x7f) == 0); + + gc_jd_queue_init(&queue); + + CPPUNIT_ASSERT(gc_jd_queue_dequeue(&queue) == 0); + + gc_jd_queue_enqueue(&queue, &jds[0]); + CPPUNIT_ASSERT_EQUAL(&jds[0], gc_jd_queue_dequeue(&queue)); + + CPPUNIT_ASSERT(gc_jd_queue_dequeue(&queue) == 0); + + for (int i = 0; i < NJDS; i++) + gc_jd_queue_enqueue(&queue, &jds[i]); + + for (int i = 0; i < NJDS; i++) + CPPUNIT_ASSERT_EQUAL(&jds[i], gc_jd_queue_dequeue(&queue)); + + CPPUNIT_ASSERT(gc_jd_queue_dequeue(&queue) == 0); +} + +// FIXME multithreaded (running on PPE) +void +qa_jd_queue::t2() +{ +} + +// FIXME multithreaded (running on PPE & SPE) +void +qa_jd_queue::t3() +{ +} diff --git a/gcell/lib/runtime/qa_jd_queue.h b/gcell/lib/runtime/qa_jd_queue.h new file mode 100644 index 00000000..5e1aab84 --- /dev/null +++ b/gcell/lib/runtime/qa_jd_queue.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_QA_JD_QUEUE_H +#define INCLUDED_QA_JD_QUEUE_H + +#include +#include + +class qa_jd_queue : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_jd_queue); + CPPUNIT_TEST(t1); + CPPUNIT_TEST(t2); + CPPUNIT_TEST(t3); + CPPUNIT_TEST_SUITE_END(); + + private: + void t1(); + void t2(); + void t3(); +}; + + +#endif /* INCLUDED_QA_JD_QUEUE_H */ diff --git a/gcell/lib/runtime/qa_jd_stack.cc b/gcell/lib/runtime/qa_jd_stack.cc new file mode 100644 index 00000000..ce4ce2d0 --- /dev/null +++ b/gcell/lib/runtime/qa_jd_stack.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#include "qa_jd_stack.h" +#include +#include +#include + + + +static const int NJDS = 8; +static gc_jd_stack_t stack; +static gc_job_desc_t jds[NJDS]; + +// no brainer, single threaded basic checkout +void +qa_jd_stack::t1() +{ + // N.B., stack allocated stuff doesn't obey ((aligned (N))) attributes + //const int NJDS = 8; + //gc_jd_stack_t stack; + //gc_job_desc_t jds[NJDS]; + + //printf("&stack = %p\n", &stack); + //printf("&jds[0] = %p\n", &jds[0]); + //printf("&jds[1] = %p\n", &jds[1]); + + CPPUNIT_ASSERT(((uintptr_t) &stack & 0x7f) == 0); + CPPUNIT_ASSERT(((uintptr_t) &jds[0] & 0x7f) == 0); + CPPUNIT_ASSERT(((uintptr_t) &jds[1] & 0x7f) == 0); + + gc_jd_stack_init(&stack); + + CPPUNIT_ASSERT(gc_jd_stack_pop(&stack) == 0); + + for (int i = 0; i < NJDS; i++) + gc_jd_stack_push(&stack, &jds[i]); + + for (int i = 0; i < NJDS; i++) + CPPUNIT_ASSERT_EQUAL(&jds[NJDS - i - 1], gc_jd_stack_pop(&stack)); + + CPPUNIT_ASSERT(gc_jd_stack_pop(&stack) == 0); +} + +// FIXME multithreaded (running on PPE) +void +qa_jd_stack::t2() +{ +} diff --git a/gcell/lib/runtime/qa_jd_stack.h b/gcell/lib/runtime/qa_jd_stack.h new file mode 100644 index 00000000..1546bbf9 --- /dev/null +++ b/gcell/lib/runtime/qa_jd_stack.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_QA_JD_STACK_H +#define INCLUDED_QA_JD_STACK_H + +#include +#include + +class qa_jd_stack : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_jd_stack); + CPPUNIT_TEST(t1); + CPPUNIT_TEST(t2); + CPPUNIT_TEST_SUITE_END(); + + private: + void t1(); + void t2(); + +}; + + + +#endif /* INCLUDED_QA_JD_STACK_H */ diff --git a/gcell/lib/runtime/qa_job_manager.cc b/gcell/lib/runtime/qa_job_manager.cc new file mode 100644 index 00000000..45cf26cf --- /dev/null +++ b/gcell/lib/runtime/qa_job_manager.cc @@ -0,0 +1,790 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#include "qa_job_manager.h" +#include +#include +#include +#include +#include +#include +#include + +#include + +// handle to embedded SPU executable w/ QA routines +extern spe_program_handle_t gcell_runtime_qa_spx; + +#if 0 +static void +gc_msleep(unsigned long millisecs) +{ + int r; + struct timespec tv; + tv.tv_sec = millisecs / 1000; + tv.tv_nsec = (millisecs - (tv.tv_sec * 1000)) * 1000000; + + while (1){ + r = nanosleep(&tv, &tv); + if (r == 0) + return; + if (r == -1 && errno == EINTR) + continue; + perror("nanosleep"); + return; + } +} +#endif + +void +qa_job_manager::leak_check(test_t t, const std::string &name) +{ + struct mallinfo before, after; + + before = mallinfo(); + (this->*t)(); + after = mallinfo(); + + size_t delta = after.uordblks - before.uordblks; + if (delta != 0){ + std::cout << name << " leaked memory\n"; + printf(" before.uordblks = %6d\n", before.uordblks); + printf(" after.uordblks = %6d\n", after.uordblks); + printf(" delta = %d\n", after.uordblks - before.uordblks); + } +} + +void +qa_job_manager::t0() +{ + //leak_check(&qa_job_manager::t1_body, "t1-0"); +} + +void +qa_job_manager::t1() +{ + t1_body(); // leaks 800 bytes first time, could be one-time inits + leak_check(&qa_job_manager::t1_body, "t1"); +} + +void +qa_job_manager::t2() +{ + leak_check(&qa_job_manager::t2_body, "t2"); +} + +void +qa_job_manager::t3() +{ + t3_body(); // leaks first time only, could be cppunit + leak_check(&qa_job_manager::t3_body, "t3"); +} + +void +qa_job_manager::t4() +{ + leak_check(&qa_job_manager::t4_body, "t4"); +} + +void +qa_job_manager::t5() +{ + leak_check(&qa_job_manager::t5_body, "t5"); +} + +void +qa_job_manager::t6() +{ + leak_check(&qa_job_manager::t6_body, "t6"); +} + +void +qa_job_manager::t7() +{ + leak_check(&qa_job_manager::t7_body, "t7"); +} + +void +qa_job_manager::t8() +{ + leak_check(&qa_job_manager::t8_body, "t8"); +} + +void +qa_job_manager::t9() +{ + leak_check(&qa_job_manager::t9_body, "t9"); +} + +void +qa_job_manager::t10() +{ + leak_check(&qa_job_manager::t10_body, "t10"); +} + +void +qa_job_manager::t11() +{ + leak_check(&qa_job_manager::t11_body, "t11"); +} + +void +qa_job_manager::t12() +{ + leak_check(&qa_job_manager::t12_body, "t12"); +} + +void +qa_job_manager::t13() +{ + leak_check(&qa_job_manager::t13_body, "t13"); +} + +void +qa_job_manager::t14() +{ + leak_check(&qa_job_manager::t14_body, "t14"); +} + +void +qa_job_manager::t15() +{ + leak_check(&qa_job_manager::t15_body, "t15"); +} + +// ---------------------------------------------------------------- + +void +qa_job_manager::t1_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + mgr = gc_make_job_manager(&opts); +} + +void +qa_job_manager::t2_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 100; + opts.gang_schedule = false; + mgr = gc_make_job_manager(&opts); +} + +void +qa_job_manager::t3_body() +{ + // This leaks memory the first time it's invoked, but I'm not sure + // if it's us or the underlying exception handling mechanism, or + // cppunit. cppunit is the prime suspect. + +#if 0 + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 100; + opts.gang_schedule = true; + CPPUNIT_ASSERT_THROW(mgr = gc_make_job_manager(&opts), std::out_of_range); +#endif +} + +static void +init_jd(gc_job_desc *jd, gc_proc_id_t proc_id) +{ + jd->proc_id = proc_id; + jd->input.nargs = 0; + jd->output.nargs = 0; + jd->eaa.nargs = 0; +} + +void +qa_job_manager::t4_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + //mgr->set_debug(-1); + static const int NJOBS = 32; + gc_job_desc *jds[NJOBS]; + bool done[NJOBS]; + + gc_proc_id_t gcp_no_such; + CPPUNIT_ASSERT_THROW(gcp_no_such = mgr->lookup_proc("--no-such-proc-name--"), gc_unknown_proc); + + gc_proc_id_t gcp_qa_nop = mgr->lookup_proc("qa_nop"); + CPPUNIT_ASSERT(gcp_qa_nop != GCP_UNKNOWN_PROC); + + for (int i = 0; i < NJOBS; i++){ + jds[i] = mgr->alloc_job_desc(); + init_jd(jds[i], gcp_qa_nop); + } + + for (int i = 0; i < NJOBS; i++){ + if (!mgr->submit_job(jds[i])){ + printf("%d: submit_job(jds[%d]) failed, status = %d\n", + __LINE__, i, jds[i]->status); + } + } + + int n = mgr->wait_jobs(NJOBS, jds, done, GC_WAIT_ALL); + CPPUNIT_ASSERT_EQUAL(NJOBS, n); + + for (int i = 0; i < NJOBS; i++){ + mgr->free_job_desc(jds[i]); + } +} + +void +qa_job_manager::t5_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 0; // use them all + mgr = gc_make_job_manager(&opts); + //mgr->set_debug(-1); + static const int NJOBS = 32; + gc_job_desc *jds[NJOBS]; + bool done[NJOBS]; + + gc_proc_id_t gcp_qa_nop = mgr->lookup_proc("qa_nop"); + + for (int i = 0; i < NJOBS; i++){ + jds[i] = mgr->alloc_job_desc(); + init_jd(jds[i], gcp_qa_nop); + } + + for (int i = 0; i < NJOBS; i++){ + if (!mgr->submit_job(jds[i])){ + printf("%d: submit_job(jds[%d]) failed, status = %d\n", + __LINE__, i, jds[i]->status); + } + } + + int n = mgr->wait_jobs(NJOBS, jds, done, GC_WAIT_ALL); + CPPUNIT_ASSERT_EQUAL(NJOBS, n); + + for (int i = 0; i < NJOBS; i++){ + mgr->free_job_desc(jds[i]); + } +} + +void +qa_job_manager::t6_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + gc_proc_id_t gcp_qa_nop = mgr->lookup_proc("qa_nop"); + gc_job_desc *jd = mgr->alloc_job_desc(); + + + // test for success with gcp_qa_nop procedure + init_jd(jd, gcp_qa_nop); + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_OK, jd->status); + } + + // test for JS_UNKNOWN_PROC with bogus procedure + init_jd(jd, -2); + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_UNKNOWN_PROC, jd->status); + } + + mgr->free_job_desc(jd); +} + +static int +sum_shorts(short *p, int nshorts) +{ + int total = 0; + for (int i = 0; i < nshorts; i++) + total += p[i]; + + return total; +} + +static void +test_sum_shorts(gc_job_manager_sptr mgr, short *buf, int nshorts) +{ + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_sum_shorts = mgr->lookup_proc("qa_sum_shorts"); + + init_jd(jd, gcp_qa_sum_shorts); + jd->eaa.nargs = 1; + jd->eaa.arg[0].ea_addr = ptr_to_ea(buf); + jd->eaa.arg[0].direction = GCJD_DMA_GET; + jd->eaa.arg[0].get_size = nshorts * sizeof(short); + + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_OK, jd->status); + int expected = sum_shorts(buf, nshorts); + int actual = jd->output.arg[0].s32; + CPPUNIT_ASSERT_EQUAL(expected, actual); + } + + mgr->free_job_desc(jd); +} + +static const int NS = 32768; +static short short_buf[NS] _AL128; // for known alignment + +// +// test all "get" alignments and sizes +// +void +qa_job_manager::t7_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + + int ea_args_maxsize = mgr->ea_args_maxsize(); + + for (int i = 0; i < NS; i++) // init buffer with known qty + short_buf[i] = 0x1234 + i; + + for (int offset = 0; offset <= 128; offset++){ + for (int len = 0; len <= 128; len++){ + test_sum_shorts(mgr, &short_buf[offset], len); + } + } + + // confirm maximum length + for (int offset = 0; offset <= 64; offset++){ + test_sum_shorts(mgr, &short_buf[offset], ea_args_maxsize/sizeof(short)); + } +} + +// +// test "get" args too long +// +void +qa_job_manager::t8_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_sum_shorts = mgr->lookup_proc("qa_sum_shorts"); + + init_jd(jd, gcp_qa_sum_shorts); + jd->eaa.nargs = 1; + jd->eaa.arg[0].ea_addr = 0; + jd->eaa.arg[0].direction = GCJD_DMA_GET; + jd->eaa.arg[0].get_size = 1 << 20; + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_ARGS_TOO_LONG, jd->status); + } + + mgr->free_job_desc(jd); +} + +// +// test MAX_ARGS_EA "get" case +// +void +qa_job_manager::t9_body() +{ + static const int N = 127; + static const int M = 201; + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_sum_shorts = mgr->lookup_proc("qa_sum_shorts"); + + init_jd(jd, gcp_qa_sum_shorts); + jd->eaa.nargs = MAX_ARGS_EA; + for (int i = 0; i < MAX_ARGS_EA; i++){ + jd->eaa.arg[i].direction = GCJD_DMA_GET; + jd->eaa.arg[i].ea_addr = ptr_to_ea(&short_buf[i * M]); + jd->eaa.arg[i].get_size = N * sizeof(short); + } + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_OK, jd->status); + for (int i = 0; i < MAX_ARGS_EA; i++){ + int expected = sum_shorts(&short_buf[i * M], N); + int actual = jd->output.arg[i].s32; + CPPUNIT_ASSERT_EQUAL(expected, actual); + } + } + + mgr->free_job_desc(jd); +} + +static bool +confirm_const(const unsigned char *buf, size_t len, unsigned char v) +{ + bool ok = true; + + for (size_t i = 0; i < len; i++){ + if (buf[i] != v){ + ok = false; + printf("confirm_const: buf[%6d] = 0x%02x, expected = 0x%02x\n", + i, buf[i], v); + } + } + + return ok; +} + +static bool +confirm_seq(const unsigned char *buf, size_t len, unsigned char v) +{ + bool ok = true; + + for (size_t i = 0; i < len; i++, v++){ + if (buf[i] != v){ + ok = false; + printf("confirm_seq: buf[%6d] = 0x%02x, expected = 0x%02x\n", + i, buf[i], v); + } + } + + return ok; +} + +static void +test_put_seq(gc_job_manager_sptr mgr, int offset, int len, int starting_val) +{ + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_put_seq = mgr->lookup_proc("qa_put_seq"); + + unsigned char *buf = (unsigned char *) short_buf; + size_t buf_len = sizeof(short_buf); + memset(buf, 0xff, buf_len); + + // two cache lines into the buffer, so we can check before and after + int fixed_offset = 256; + + init_jd(jd, gcp_qa_put_seq); + jd->input.nargs = 1; + jd->input.arg[0].s32 = starting_val; + jd->eaa.nargs = 1; + jd->eaa.arg[0].ea_addr = ptr_to_ea(buf + fixed_offset + offset); + jd->eaa.arg[0].direction = GCJD_DMA_PUT; + jd->eaa.arg[0].put_size = len; + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_OK, jd->status); + + // check before + CPPUNIT_ASSERT(confirm_const(&buf[0], fixed_offset + offset, 0xff)); + + // check sequence + CPPUNIT_ASSERT(confirm_seq(&buf[fixed_offset + offset], len, starting_val)); + + // check after + CPPUNIT_ASSERT(confirm_const(&buf[fixed_offset + offset + len], + buf_len - fixed_offset - offset - len, 0xff)); + } + mgr->free_job_desc(jd); +} + +// +// Test all "put" alignments and sizes +// +void +qa_job_manager::t10_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + + int starting_val = 13; + + for (int offset = 0; offset <= 128; offset++){ + for (int len = 0; len <= 128; len++){ + test_put_seq(mgr, offset, len, starting_val++); + } + } + + int ea_args_maxsize = mgr->ea_args_maxsize(); + + // confirm maximum length + for (int offset = 0; offset <= 64; offset++){ + test_put_seq(mgr, offset, ea_args_maxsize, starting_val++); + } +} + +// +// test "put" args too long +// +void +qa_job_manager::t11_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_put_seq = mgr->lookup_proc("qa_put_seq"); + + init_jd(jd, gcp_qa_put_seq); + jd->input.nargs = 1; + jd->input.arg[0].s32 = 0; + jd->eaa.nargs = 1; + jd->eaa.arg[0].ea_addr = 0; + jd->eaa.arg[0].direction = GCJD_DMA_PUT; + jd->eaa.arg[0].put_size = 1 << 20; + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_ARGS_TOO_LONG, jd->status); + } + + mgr->free_job_desc(jd); +} + +// +// test MAX_ARGS_EA "put" case +// +void +qa_job_manager::t12_body() +{ + static const int N = 127; + static const int M = 201; + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_put_seq = mgr->lookup_proc("qa_put_seq"); + + unsigned char *buf = (unsigned char *) short_buf; + size_t buf_len = sizeof(short_buf); + memset(buf, 0xff, buf_len); + + // two cache lines into the buffer, so we can check before and after + int fixed_offset = 256; + + int starting_val = 13; + + init_jd(jd, gcp_qa_put_seq); + jd->input.nargs = 1; + jd->input.arg[0].s32 = starting_val; + jd->eaa.nargs = MAX_ARGS_EA; + for (int i = 0; i < MAX_ARGS_EA; i++){ + jd->eaa.arg[i].direction = GCJD_DMA_PUT; + jd->eaa.arg[i].ea_addr = ptr_to_ea(&buf[i * M + fixed_offset]); + jd->eaa.arg[i].put_size = N; + } + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_OK, jd->status); + for (int i = 0; i < MAX_ARGS_EA; i++){ + CPPUNIT_ASSERT(confirm_seq(&buf[i * M + fixed_offset], N, starting_val)); + starting_val += N; + } + } + + mgr->free_job_desc(jd); +} + +// +// test qa_copy primitive +// +void +qa_job_manager::t13_body() +{ + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + + memset(short_buf, 0, sizeof(short_buf)); + for (int i = 0; i < NS/2; i++) // init buffer with known qty + short_buf[i] = 0x1234 + i; + + int nshorts = NS/2; + + gc_job_desc *jd = mgr->alloc_job_desc(); + gc_proc_id_t gcp_qa_copy = mgr->lookup_proc("qa_copy"); + +#if 0 + printf("gcq_qa_copy = %d\n", gcp_qa_copy); + std::vector procs = mgr->proc_names(); + for (unsigned int i = 0; i < procs.size(); ++i) + std::cout << procs[i] << std::endl; +#endif + + init_jd(jd, gcp_qa_copy); + jd->eaa.nargs = 2; + jd->eaa.arg[0].ea_addr = ptr_to_ea(&short_buf[nshorts]); + jd->eaa.arg[0].direction = GCJD_DMA_PUT; + jd->eaa.arg[0].put_size = nshorts * sizeof(short); + + jd->eaa.arg[1].ea_addr = ptr_to_ea(&short_buf[0]); + jd->eaa.arg[1].direction = GCJD_DMA_GET; + jd->eaa.arg[1].get_size = nshorts * sizeof(short); + + + if (!mgr->submit_job(jd)){ + printf("%d: submit_job(jd) failed, status = %d\n", __LINE__, jd->status); + } + else { + mgr->wait_job(jd); + CPPUNIT_ASSERT_EQUAL(JS_OK, jd->status); + CPPUNIT_ASSERT_EQUAL(0, jd->output.arg[0].s32); + + bool ok = true; + for (int i = 0; i < nshorts; i++){ + if (short_buf[i] != short_buf[i + nshorts]) + ok = false; + } + CPPUNIT_ASSERT(ok); + } + mgr->free_job_desc(jd); +} + +/* + * Parallel submission of NJOBS "put" jobs will test double buffered puts. + */ +void +qa_job_manager::t14_body() +{ + //return; + + //static const int NJOBS = 64; + static const int NJOBS = 128; + static const int LEN_PER_JOB = 1021; + unsigned char buf[NJOBS * LEN_PER_JOB]; + gc_job_desc_t *jd[NJOBS]; + bool done[NJOBS]; + + static const int STARTING_VAL = 13; + + memset(buf, 0xff, LEN_PER_JOB * NJOBS); + + gc_job_manager_sptr mgr; + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + mgr = gc_make_job_manager(&opts); + + + gc_proc_id_t gcp_qa_put_seq = mgr->lookup_proc("qa_put_seq"); + + // do all the initialization up front + + for (int i = 0, val = STARTING_VAL; i < NJOBS; i++, val += 3){ + jd[i] = mgr->alloc_job_desc(); + init_jd(jd[i], gcp_qa_put_seq); + jd[i]->input.nargs = 1; + jd[i]->input.arg[0].s32 = val; + jd[i]->eaa.nargs = 1; + jd[i]->eaa.arg[0].ea_addr = ptr_to_ea(&buf[i * LEN_PER_JOB]); + jd[i]->eaa.arg[0].direction = GCJD_DMA_PUT; + jd[i]->eaa.arg[0].put_size = LEN_PER_JOB; + } + + // submit them all + + for (int i = 0; i < NJOBS; i++){ + if (!mgr->submit_job(jd[i])){ + printf("%d: submit_job(jd[%2d]) failed, status = %d\n", __LINE__, i, jd[i]->status); + } + } + + // wait for them all + + int n = mgr->wait_jobs(NJOBS, jd, done, GC_WAIT_ALL); + CPPUNIT_ASSERT_EQUAL(NJOBS, n); + + // check results + + for (int i = 0, val = STARTING_VAL; i < NJOBS; i++, val += 3){ + CPPUNIT_ASSERT_EQUAL(JS_OK, jd[i]->status); + CPPUNIT_ASSERT(confirm_seq(&buf[i * LEN_PER_JOB], LEN_PER_JOB, val)); + } + + // cleanup + for (int i = 0; i < NJOBS; i++) + mgr->free_job_desc(jd[i]); +} + +void +qa_job_manager::t15_body() +{ + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_runtime_qa_spx); + opts.nspes = 1; + gc_job_manager_sptr mgr = gc_make_job_manager(&opts); + + gc_job_manager::set_singleton(mgr); + + CPPUNIT_ASSERT(gc_job_manager::singleton()); + mgr.reset(); + CPPUNIT_ASSERT_THROW(gc_job_manager::singleton(), boost::bad_weak_ptr); +} diff --git a/gcell/lib/runtime/qa_job_manager.h b/gcell/lib/runtime/qa_job_manager.h new file mode 100644 index 00000000..ab3325b7 --- /dev/null +++ b/gcell/lib/runtime/qa_job_manager.h @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_QA_JOB_MANAGER_H +#define INCLUDED_QA_JOB_MANAGER_H + +#include +#include + +class qa_job_manager; +typedef void (qa_job_manager::*test_t)(); + + +class qa_job_manager : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_job_manager); + CPPUNIT_TEST(t0); + CPPUNIT_TEST(t1); + CPPUNIT_TEST(t2); + CPPUNIT_TEST(t3); + CPPUNIT_TEST(t4); + CPPUNIT_TEST(t5); + CPPUNIT_TEST(t6); + CPPUNIT_TEST(t7); + CPPUNIT_TEST(t8); + CPPUNIT_TEST(t9); + CPPUNIT_TEST(t10); + CPPUNIT_TEST(t11); + CPPUNIT_TEST(t12); + CPPUNIT_TEST(t13); + CPPUNIT_TEST(t14); + CPPUNIT_TEST(t15); + CPPUNIT_TEST_SUITE_END(); + + private: + void leak_check(test_t t, const std::string &name); + + void t0(); + void t1(); + void t1_body(); + void t2(); + void t2_body(); + void t3(); + void t3_body(); + void t4(); + void t4_body(); + void t5(); + void t5_body(); + void t6(); + void t6_body(); + void t7(); + void t7_body(); + void t8(); + void t8_body(); + void t9(); + void t9_body(); + void t10(); + void t10_body(); + void t11(); + void t11_body(); + void t12(); + void t12_body(); + void t13(); + void t13_body(); + void t14(); + void t14_body(); + void t15(); + void t15_body(); + +}; + +#endif /* INCLUDED_QA_JOB_MANAGER_H */ diff --git a/gcell/lib/runtime/spu/gc_delay.c b/gcell/lib/runtime/spu/gc_delay.c new file mode 100644 index 00000000..4d58935a --- /dev/null +++ b/gcell/lib/runtime/spu/gc_delay.c @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#include +#include + +inline static void +gc_udelay_1us(void) +{ + unsigned int i = 158; + + do { // 20 clocks per iteration of the loop + asm ("nop $127; nop $127; nop $127; nop $127; nop $127"); + asm ("nop $127; nop $127; nop $127; nop $127; nop $127"); + asm ("nop $127; nop $127; nop $127; nop $127; nop $127"); + asm ("nop $127; nop $127"); + } while(--i != 0); +} + +void +gc_udelay(unsigned int usecs) +{ + unsigned int i; + for (i = 0; i < usecs; i++) + gc_udelay_1us(); +} + +void +gc_cdelay(unsigned int cpu_cycles) +{ + if (cpu_cycles < 40) // roughly the amount of overhead + return; + + cpu_cycles >>= 2; // about 4 cycles / loop + + while (cpu_cycles-- != 0){ + asm ("nop $127"); // keeps compiler from removing the loop + } +} + diff --git a/gcell/lib/runtime/spu/gc_logging.c b/gcell/lib/runtime/spu/gc_logging.c new file mode 100644 index 00000000..48b7e5f2 --- /dev/null +++ b/gcell/lib/runtime/spu/gc_logging.c @@ -0,0 +1,77 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include +#include +#include +#include + +static gc_eaddr_t log_base_ea; // base address of log entries in EA +static uint32_t log_idx_mask; // nentries - 1 +static uint32_t log_idx; // current log entry index +static uint32_t log_seqno; + +static int log_tags; // two consecutive tags +static int tmp_buffer_busy; // bitmask: buffer busy state +static int tmp_buffer_idx; // 0 or 1 +static gc_log_entry_t tmp_buffer[2]; + +void +_gc_log_init(gc_log_t info) +{ + spu_write_decrementer(~0); + + log_base_ea = info.base; + log_idx_mask = info.nentries - 1; + log_idx = 0; + log_seqno = 0; + + log_tags = mfc_multi_tag_reserve(2); + tmp_buffer_busy = 0; + tmp_buffer_idx = 0; + + gc_log_write0(GCL_SS_SYS, 0); +} + +void +_gc_log_write(gc_log_entry_t entry) +{ + if (log_base_ea == 0) + return; + + entry.seqno = log_seqno++; + entry.timestamp = spu_read_decrementer(); + + if (tmp_buffer_busy & (1 << tmp_buffer_idx)){ + mfc_write_tag_mask(1 << (log_tags + tmp_buffer_idx)); + mfc_read_tag_status_all(); + } + + tmp_buffer[tmp_buffer_idx] = entry; // save local copy + + mfc_put(&tmp_buffer[tmp_buffer_idx], + log_base_ea + log_idx * sizeof(entry), sizeof(entry), + log_tags + tmp_buffer_idx, 0, 0); + + tmp_buffer_busy |= (1 << tmp_buffer_idx); + tmp_buffer_idx ^= 0x1; + log_idx = (log_idx + 1) & log_idx_mask; +} diff --git a/gcell/lib/runtime/spu/gc_main.c b/gcell/lib/runtime/spu/gc_main.c new file mode 100644 index 00000000..ba56e40f --- /dev/null +++ b/gcell/lib/runtime/spu/gc_main.c @@ -0,0 +1,731 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +// #define ENABLE_GC_LOGGING // define to enable logging + +#include +#include +#include +#include "gc_spu_config.h" +#include "spu_buffers.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +//! round x down to p2 boundary (p2 must be a power-of-2) +#define ROUND_DN(x, p2) ((x) & ~((p2)-1)) + +//! round x up to p2 boundary (p2 must be a power-of-2) +#define ROUND_UP(x, p2) (((x)+((p2)-1)) & ~((p2)-1)) + + +//#define OUT_MBOX_CHANNEL SPU_WrOutIntrMbox +#define OUT_MBOX_CHANNEL SPU_WrOutMbox + +#define CHECK_QUEUE_ON_MSG 0 // define to 0 or 1 +#define USE_LLR_LOST_EVENT 0 // define to 0 or 1 + +int gc_sys_tag; // tag for misc DMA operations +static gc_spu_args_t spu_args; + +static struct gc_proc_def *gc_proc_def; // procedure entry points + +// ------------------------------------------------------------------------ + +// state for DMA'ing arguments in and out + +static int get_tag; // 1 tag for job arg gets +static int put_tags; // 2 tags for job arg puts + +static int pb_idx = 0; // current put buffer index (0 or 1) + +// bitmask (bit per put buffer): bit is set if DMA is started but not complete +static int put_in_progress = 0; +#define PBI_MASK(_pbi_) (1 << (_pbi_)) + +// ------------------------------------------------------------------------ + +// our working copy of the completion info +static gc_comp_info_t comp_info = { + .in_use = 1, + .ncomplete = 0 +}; + +static int ci_idx = 0; // index of current comp_info +static int ci_tags; // two consecutive dma tags + +// ------------------------------------------------------------------------ + +/* + * Wait until EA copy of comp_info[idx].in_use is 0 + */ +static void +wait_for_ppe_to_be_done_with_comp_info(int idx) +{ + char _tmp[256]; + char *buf = (char *) ALIGN(_tmp, 128); // get cache-aligned buffer + gc_comp_info_t *p = (gc_comp_info_t *) buf; + + assert(sizeof(gc_comp_info_t) == 128); + + do { + mfc_get(buf, spu_args.comp_info[idx], 128, gc_sys_tag, 0, 0); + mfc_write_tag_mask(1 << gc_sys_tag); + mfc_read_tag_status_all(); + if (p->in_use == 0) + return; + + gc_udelay(1); + + } while (1); +} + +static void +flush_completion_info(void) +{ + // events: 0x3X + + static int total_complete = 0; + + if (comp_info.ncomplete == 0) + return; + + // ensure that PPE is done with the buffer we're about to overwrite + wait_for_ppe_to_be_done_with_comp_info(ci_idx); + + // dma the comp_info out to PPE + int tag = ci_tags + ci_idx; + mfc_put(&comp_info, spu_args.comp_info[ci_idx], sizeof(gc_comp_info_t), tag, 0, 0); + + // we need to wait for the completion info to finish, as well as + // any EA argument puts. + + int tag_mask = 1 << tag; // the comp_info tag + if (put_in_progress & PBI_MASK(0)) + tag_mask |= (1 << (put_tags + 0)); + if (put_in_progress & PBI_MASK(1)) + tag_mask |= (1 << (put_tags + 1)); + + gc_log_write2(GCL_SS_SYS, 0x30, put_in_progress, tag_mask); + + mfc_write_tag_mask(tag_mask); // the tags we're interested in + mfc_read_tag_status_all(); // wait for DMA to complete + put_in_progress = 0; // mark them all complete + + total_complete += comp_info.ncomplete; + gc_log_write4(GCL_SS_SYS, 0x31, + put_in_progress, ci_idx, comp_info.ncomplete, total_complete); + + // send PPE a message + spu_writech(OUT_MBOX_CHANNEL, MK_MBOX_MSG(OP_JOBS_DONE, ci_idx)); + + ci_idx ^= 0x1; // switch buffers + comp_info.in_use = 1; + comp_info.ncomplete = 0; +} + +// ------------------------------------------------------------------------ + + +static unsigned int backoff; // current backoff value in clock cycles +static unsigned int _backoff_start; +static unsigned int _backoff_cap; + +/* + * For 3.2 GHz SPE + * + * 10 1023 cycles 320 ns + * 11 2047 cycle 640 ns + * 12 4095 cycles 1.3 us + * 13 8191 cycles 2.6 us + * 14 16383 cycles 5.1 us + * 15 32767 cycles 10.2 us + * 16 20.4 us + * 17 40.8 us + * 18 81.9 us + * 19 163.8 us + * 20 327.7 us + * 21 655.4 us + */ +static unsigned char log2_backoff_start[16] = { +// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +// ------------------------------------------------------------- +//12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16 + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 +}; + +static unsigned char log2_backoff_cap[16] = { +// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +// ------------------------------------------------------------- +//17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 21, 21 + 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16 +}; + +static void +backoff_init(void) +{ + _backoff_cap = (1 << (log2_backoff_cap[(spu_args.nspus - 1) & 0xf])) - 1; + _backoff_start = (1 << (log2_backoff_start[(spu_args.nspus - 1) & 0xf])) - 1; + + backoff = _backoff_start; +} + +#if !CHECK_QUEUE_ON_MSG + +static void +backoff_reset(void) +{ + backoff = _backoff_start; +} + + +#define RANDOM_WEIGHT 0.2 + +static void +backoff_delay(void) +{ + gc_cdelay(backoff); + + // capped exponential backoff + backoff = ((backoff << 1) + 1); + if (backoff > _backoff_cap) + backoff = _backoff_cap; + + // plus some randomness + float r = (RANDOM_WEIGHT * (2.0 * (gc_uniform_deviate() - 0.5))); + backoff = backoff * (1.0 + r); +} + +#endif // !CHECK_QUEUE_ON_MSG + +// ------------------------------------------------------------------------ + +static inline unsigned int +make_mask(int nbits) +{ + return ~(~0 << nbits); +} + +static unsigned int dc_work; +static int dc_put_tag; +static unsigned char *dc_ls_base; +static gc_eaddr_t dc_ea_base; + +// divide and conquer +static void +d_and_c(unsigned int offset, unsigned int len) +{ + unsigned int mask = make_mask(len) << offset; + unsigned int t = mask & dc_work; + if (t == 0) // nothing to do + return; + if (t == mask){ // got a match, generate dma + mfc_put(dc_ls_base + offset, dc_ea_base + offset, len, dc_put_tag, 0, 0); + } + else { // bisect + len >>= 1; + d_and_c(offset, len); + d_and_c(offset + len, len); + } +} + +// Handle the nasty case of a dma xfer that's less than 16 bytes long. +// len is guaranteed to be in [1, 15] + +static void +handle_slow_and_tedious_dma(gc_eaddr_t ea, unsigned char *ls, + unsigned int len, int put_tag) +{ + // Set up for divide and conquer + unsigned int alignment = ((uintptr_t) ls) & 0x7; + dc_work = make_mask(len) << alignment; + dc_ls_base = (unsigned char *) ROUND_DN((uintptr_t) ls, 8); + dc_ea_base = ROUND_DN(ea, (gc_eaddr_t) 8); + dc_put_tag = put_tag; + + d_and_c( 0, 8); + d_and_c( 8, 8); + d_and_c(16, 8); +} + + +static void +process_job(gc_eaddr_t jd_ea, gc_job_desc_t *jd) +{ + // events: 0x2X + + jd->status = JS_OK; // assume success + + if (jd->proc_id >= spu_args.nproc_defs) + jd->status = JS_UNKNOWN_PROC; + + else { + + if (jd->eaa.nargs == 0) + (*gc_proc_def[jd->proc_id].proc)(&jd->input, &jd->output, &jd->eaa); + + else { // handle EA args that must be DMA'd in/out + + gc_job_ea_args_t *eaa = &jd->eaa; + + int NELMS = + MAX(MAX_ARGS_EA, + (GC_SPU_BUFSIZE + MFC_MAX_DMA_SIZE - 1) / MFC_MAX_DMA_SIZE); + + mfc_list_element_t dma_get_list[NELMS]; + //mfc_list_element_t dma_put_list[NELMS]; + + memset(dma_get_list, 0, sizeof(dma_get_list)); + //memset(dma_put_list, 0, sizeof(dma_put_list)); + + int gli = 0; // get list index + //int pli = 0; // put list index + + unsigned char *get_base = _gci_getbuf[0]; + unsigned char *get_t = get_base; + unsigned int total_get_dma_len = 0; + + unsigned char *put_base = _gci_putbuf[pb_idx]; + unsigned char *put_t = put_base; + unsigned int total_put_alloc = 0; + int put_tag = put_tags + pb_idx; + + // Do we have any "put" args? If so ensure that previous + // dma from this buffer is complete + + gc_log_write2(GCL_SS_SYS, 0x24, put_in_progress, jd->sys.direction_union); + + if ((jd->sys.direction_union & GCJD_DMA_PUT) + && (put_in_progress & PBI_MASK(pb_idx))){ + + gc_log_write2(GCL_SS_SYS, 0x25, put_in_progress, 1 << put_tag); + + mfc_write_tag_mask(1 << put_tag); // the tag we're interested in + mfc_read_tag_status_all(); // wait for DMA to complete + put_in_progress &= ~(PBI_MASK(pb_idx)); + + gc_log_write1(GCL_SS_SYS, 0x26, put_in_progress); + } + + + // for now, all EA's must have the same high 32-bits + gc_eaddr_t common_ea = eaa->arg[0].ea_addr; + + + // assign LS addresses for buffers + + for (unsigned int i = 0; i < eaa->nargs; i++){ + + gc_eaddr_t ea_base = 0; + unsigned char *ls_base; + int offset; + unsigned int dma_len; + + if (eaa->arg[i].direction == GCJD_DMA_GET){ + ea_base = ROUND_DN(eaa->arg[i].ea_addr, (gc_eaddr_t) CACHE_LINE_SIZE); + offset = eaa->arg[i].ea_addr & (CACHE_LINE_SIZE-1); + dma_len = ROUND_UP(eaa->arg[i].get_size + offset, CACHE_LINE_SIZE); + total_get_dma_len += dma_len; + + if (total_get_dma_len > GC_SPU_BUFSIZE){ + jd->status = JS_ARGS_TOO_LONG; + goto wrap_up; + } + + ls_base = get_t; + get_t += dma_len; + eaa->arg[i].ls_addr = ls_base + offset; + + if (0){ + assert((mfc_ea2l(eaa->arg[i].ea_addr) & 0x7f) == ((intptr_t)eaa->arg[i].ls_addr & 0x7f)); + assert((ea_base & 0x7f) == 0); + assert(((intptr_t)ls_base & 0x7f) == 0); + assert((dma_len & 0x7f) == 0); + assert((eaa->arg[i].get_size <= dma_len) + && dma_len <= (eaa->arg[i].get_size + offset + CACHE_LINE_SIZE - 1)); + } + + // add to dma get list + // FIXME (someday) the dma list is where the JS_BAD_EAH limitation comes from + + while (dma_len != 0){ + int n = MIN(dma_len, MFC_MAX_DMA_SIZE); + dma_get_list[gli].size = n; + dma_get_list[gli].eal = mfc_ea2l(ea_base); + dma_len -= n; + ea_base += n; + gli++; + } + } + + else if (eaa->arg[i].direction == GCJD_DMA_PUT){ + // + // This case is a trickier than the PUT case since we can't + // write outside of the bounds of the user provided buffer. + // We still align the buffers to 128-bytes for good performance + // in the middle portion of the xfers. + // + ea_base = ROUND_DN(eaa->arg[i].ea_addr, (gc_eaddr_t) CACHE_LINE_SIZE); + offset = eaa->arg[i].ea_addr & (CACHE_LINE_SIZE-1); + + uint32_t ls_alloc_len = + ROUND_UP(eaa->arg[i].put_size + offset, CACHE_LINE_SIZE); + + total_put_alloc += ls_alloc_len; + + if (total_put_alloc > GC_SPU_BUFSIZE){ + jd->status = JS_ARGS_TOO_LONG; + goto wrap_up; + } + + ls_base = put_t; + put_t += ls_alloc_len; + eaa->arg[i].ls_addr = ls_base + offset; + + if (1){ + assert((mfc_ea2l(eaa->arg[i].ea_addr) & 0x7f) + == ((intptr_t)eaa->arg[i].ls_addr & 0x7f)); + assert((ea_base & 0x7f) == 0); + assert(((intptr_t)ls_base & 0x7f) == 0); + } + } + + else + assert(0); + } + + // fire off the dma to fetch the args and wait for it to complete + mfc_getl(get_base, common_ea, dma_get_list, gli*sizeof(dma_get_list[0]), get_tag, 0, 0); + mfc_write_tag_mask(1 << get_tag); // the tag we're interested in + mfc_read_tag_status_all(); // wait for DMA to complete + + // do the work + (*gc_proc_def[jd->proc_id].proc)(&jd->input, &jd->output, &jd->eaa); + + + // Do we have any "put" args? If so copy them out + if (jd->sys.direction_union & GCJD_DMA_PUT){ + + // Do the copy out using single DMA xfers. The LS ranges + // aren't generally contiguous. + + bool started_dma = false; + + for (unsigned int i = 0; i < eaa->nargs; i++){ + if (eaa->arg[i].direction == GCJD_DMA_PUT && eaa->arg[i].put_size != 0){ + + started_dma = true; + + gc_eaddr_t ea; + unsigned char *ls; + unsigned int len; + + ea = eaa->arg[i].ea_addr; + ls = (unsigned char *) eaa->arg[i].ls_addr; + len = eaa->arg[i].put_size; + + if (len < 16) + handle_slow_and_tedious_dma(ea, ls, len, put_tag); + + else { + if ((ea & 0xf) != 0){ + + // printf("1: ea = 0x%x len = %5d\n", (int) ea, len); + + // handle the "pre-multiple-of-16" portion + // do 1, 2, 4, or 8 byte xfers as required + + if (ea & 0x1){ // do a 1-byte xfer + mfc_put(ls, ea, 1, put_tag, 0, 0); + ea += 1; + ls += 1; + len -= 1; + } + if (ea & 0x2){ // do a 2-byte xfer + mfc_put(ls, ea, 2, put_tag, 0, 0); + ea += 2; + ls += 2; + len -= 2; + } + if (ea & 0x4){ // do a 4-byte xfer + mfc_put(ls, ea, 4, put_tag, 0, 0); + ea += 4; + ls += 4; + len -= 4; + } + if (ea & 0x8){ // do an 8-byte xfer + mfc_put(ls, ea, 8, put_tag, 0, 0); + ea += 8; + ls += 8; + len -= 8; + } + } + + if (1){ + // printf("2: ea = 0x%x len = %5d\n", (int) ea, len); + assert((ea & 0xf) == 0); + assert((((intptr_t) ls) & 0xf) == 0); + } + + // handle the "multiple-of-16" portion + + int aligned_len = ROUND_DN(len, 16); + len = len & (16 - 1); + + while (aligned_len != 0){ + int dma_len = MIN(aligned_len, MFC_MAX_DMA_SIZE); + mfc_put(ls, ea, dma_len, put_tag, 0, 0); + ea += dma_len; + ls += dma_len; + aligned_len -= dma_len; + } + + if (1){ + // printf("3: ea = 0x%x len = %5d\n", (int)ea, len); + assert((ea & 0xf) == 0); + assert((((intptr_t) ls) & 0xf) == 0); + } + + // handle "post-multiple-of-16" portion + + if (len != 0){ + + if (len >= 8){ // do an 8-byte xfer + mfc_put(ls, ea, 8, put_tag, 0, 0); + ea += 8; + ls += 8; + len -= 8; + } + if (len >= 4){ // do a 4-byte xfer + mfc_put(ls, ea, 4, put_tag, 0, 0); + ea += 4; + ls += 4; + len -= 4; + } + if (len >= 2){ // do a 2-byte xfer + mfc_put(ls, ea, 2, put_tag, 0, 0); + ea += 2; + ls += 2; + len -= 2; + } + if (len >= 1){ // do a 1-byte xfer + mfc_put(ls, ea, 1, put_tag, 0, 0); + ea += 1; + ls += 1; + len -= 1; + } + if (1) + assert(len == 0); + } + } + } + } + if (started_dma){ + put_in_progress |= PBI_MASK(pb_idx); // note it's running + gc_log_write2(GCL_SS_SYS, 0x27, put_in_progress, pb_idx); + pb_idx ^= 1; // toggle current buffer + } + } + } + } + + wrap_up:; // semicolon creates null statement for C99 compliance + + // Copy job descriptor back out to EA. + // (The dma will be waited on in flush_completion_info) + int tag = ci_tags + ci_idx; // use the current completion tag + mfc_put(jd, jd_ea, sizeof(*jd), tag, 0, 0); + + // Tell PPE we're done with the job. + // + // We queue these up until we run out of room, or until we can send + // the info to the PPE w/o blocking. The blocking check is in + // main_loop + + comp_info.job_id[comp_info.ncomplete++] = jd->sys.job_id; + + if (comp_info.ncomplete == GC_CI_NJOBS){ + gc_log_write0(GCL_SS_SYS, 0x28); + flush_completion_info(); + } +} + +static void +main_loop(void) +{ + // events: 0x1X + + static gc_job_desc_t jd; // static gets us proper alignment + gc_eaddr_t jd_ea; + int total_jobs = 0; + +#if (USE_LLR_LOST_EVENT) + // setup events + spu_writech(SPU_WrEventMask, MFC_LLR_LOST_EVENT); + + // prime the pump + while (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, ci_tags + ci_idx, &jd)) + process_job(jd_ea, &jd); + // we're now holding a lock-line reservation +#endif + + while (1){ + +#if !CHECK_QUEUE_ON_MSG +#if (USE_LLR_LOST_EVENT) + + if (unlikely(spu_readchcnt(SPU_RdEventStat))){ + // + // execute standard event handling prologue + // + int status = spu_readch(SPU_RdEventStat); + int mask = spu_readch(SPU_RdEventMask); + spu_writech(SPU_WrEventMask, mask & ~status); // disable active events + spu_writech(SPU_WrEventAck, status); // ack active events + + // execute per-event actions + + if (status & MFC_LLR_LOST_EVENT){ + // + // We've lost a line reservation. This is most likely caused + // by somebody doing something to the queue. Go look and see + // if there's anything for us. + // + while (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, ci_tags + ci_idx, &jd) == GCQ_OK) + process_job(jd_ea, &jd); + } + + // + // execute standard event handling epilogue + // + spu_writech(SPU_WrEventMask, mask); // restore event mask + } + +#else + + // try to get a job from the job queue + if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, ci_tags + ci_idx, &jd) == GCQ_OK){ + total_jobs++; + gc_log_write2(GCL_SS_SYS, 0x10, jd.sys.job_id, total_jobs); + + process_job(jd_ea, &jd); + + gc_log_write2(GCL_SS_SYS, 0x11, jd.sys.job_id, total_jobs); + backoff_reset(); + } + else + backoff_delay(); + +#endif +#endif + + // any msgs for us? + + if (unlikely(spu_readchcnt(SPU_RdInMbox))){ + int msg = spu_readch(SPU_RdInMbox); + // printf("spu[%d] mbox_msg: 0x%08x\n", spu_args.spu_idx, msg); +#if CHECK_QUEUE_ON_MSG + if (MBOX_MSG_OP(msg) == OP_CHECK_QUEUE){ + + while (1){ + //int delay = (int)(3200.0 * gc_uniform_deviate()); // uniformly in [0, 1.0us] + //gc_cdelay(delay); + + gc_dequeue_status_t s = + gc_jd_queue_dequeue(spu_args.queue, &jd_ea, ci_tags + ci_idx, &jd); + + if (s == GCQ_OK){ + total_jobs++; + gc_log_write2(GCL_SS_SYS, 0x10, jd.sys.job_id, total_jobs); + + process_job(jd_ea, &jd); + + gc_log_write2(GCL_SS_SYS, 0x11, jd.sys.job_id, total_jobs); + } + else if (s == GCQ_EMPTY){ + break; + } + else { // GCQ_LOCKED -- keep trying + } + } + } + else +#endif + if (MBOX_MSG_OP(msg) == OP_EXIT){ + flush_completion_info(); + return; + } + else if (MBOX_MSG_OP(msg) == OP_GET_SPU_BUFSIZE){ + spu_writech(SPU_WrOutIntrMbox, MK_MBOX_MSG(OP_SPU_BUFSIZE, GC_SPU_BUFSIZE_BASE)); + } + } + + // If we've got job completion info for the PPE and we can send a + // message without blocking, do it. + + if (comp_info.ncomplete != 0 && spu_readchcnt(OUT_MBOX_CHANNEL) != 0){ + gc_log_write0(GCL_SS_SYS, 0x12); + flush_completion_info(); + } + } +} + + +int +main(unsigned long long spe_id __attribute__((unused)), + unsigned long long argp, + unsigned long long envp __attribute__((unused))) +{ + gc_sys_tag = mfc_tag_reserve(); // allocate a tag for our misc DMA operations + get_tag = mfc_tag_reserve(); + ci_tags = mfc_multi_tag_reserve(2); + put_tags = mfc_multi_tag_reserve(2); + + // dma the args in + mfc_get(&spu_args, argp, sizeof(spu_args), gc_sys_tag, 0, 0); + mfc_write_tag_mask(1 << gc_sys_tag); // the tag we're interested in + mfc_read_tag_status_all(); // wait for DMA to complete + + // initialize pointer to procedure entry table + gc_proc_def = (gc_proc_def_t *) spu_args.proc_def_ls_addr; + + gc_set_seed(spu_args.spu_idx); + + // initialize logging + _gc_log_init(spu_args.log); + + backoff_init(); // initialize backoff parameters + + main_loop(); + return 0; +} diff --git a/gcell/lib/runtime/spu/gc_random.c b/gcell/lib/runtime/spu/gc_random.c new file mode 100644 index 00000000..ae2fde87 --- /dev/null +++ b/gcell/lib/runtime/spu/gc_random.c @@ -0,0 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#include + +static int last_val = 0; + +# define M 259200 // values from Numerical Recipes in C, 1988 +# define A 7141 +# define C 54773 + +void +gc_set_seed(int seed) +{ + last_val = ((unsigned int) seed) % M; +} + +/* + * Return a uniformly distributed value in the range [0, 1.0) + * (Linear congruential generator. YMMV. Caveat emptor.) + */ +float +gc_uniform_deviate(void) +{ + last_val = (last_val * A + C) % M; + return (float) last_val * (1.0f / (float) M); +} diff --git a/gcell/lib/runtime/spu/gc_spu_config.h b/gcell/lib/runtime/spu/gc_spu_config.h new file mode 100644 index 00000000..6320e6db --- /dev/null +++ b/gcell/lib/runtime/spu/gc_spu_config.h @@ -0,0 +1,39 @@ +/* -*- c -*- */ +/* + * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef INCLUDED_GCELL_GC_SPU_CONFIG_H +#define INCLUDED_GCELL_GC_SPU_CONFIG_H + +#include + +#define CACHE_LINE_SIZE 128 // in bytes + +#if 1 +# define GC_SPU_BUFSIZE_BASE (40 * 1024) // must be multiple of CACHE_LINE_SIZE +#else +# define GC_SPU_BUFSIZE_BASE (20 * 1024) // must be multiple of CACHE_LINE_SIZE +#endif + +#define GC_SPU_BUFSIZE (GC_SPU_BUFSIZE_BASE + MAX_ARGS_EA * CACHE_LINE_SIZE) + +#define NGETBUFS 1 // gets are single buffered +#define NPUTBUFS 2 // puts are double buffered + +#endif /* INCLUDED_GCELL_GC_SPU_CONFIG_H */ diff --git a/gcell/lib/runtime/spu/gc_spu_jd_queue.c b/gcell/lib/runtime/spu/gc_spu_jd_queue.c new file mode 100644 index 00000000..91bb5bc7 --- /dev/null +++ b/gcell/lib/runtime/spu/gc_spu_jd_queue.c @@ -0,0 +1,123 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include +#include +#include +#include "mutex_lock.h" +#include "mutex_unlock.h" + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + +extern int gc_sys_tag; + +// keep track of stats +int jdq_ok; +int jdq_empty; +int jdq_locked; + + +#define INITIAL_BACKOFF 32.0 +#define MAX_BACKOFF 8192.0 /* 2.6us */ +#define RANDOM_WEIGHT 0.2 + +static float +next_backoff(float backoff) +{ + // exponential with random + float t = backoff * 2.0; + if (t > MAX_BACKOFF) + t = MAX_BACKOFF; + + float r = (RANDOM_WEIGHT * (2.0 * (gc_uniform_deviate() - 0.5))); + t = t * (1.0 + r); + + return t; +} + +gc_dequeue_status_t +gc_jd_queue_dequeue(gc_eaddr_t q, gc_eaddr_t *item_ea, + int jd_tag, gc_job_desc_t *item) +{ + int status; + char _tmp[256]; + gc_jd_queue_t *local_q = + (gc_jd_queue_t *) ALIGN(_tmp, 128); // get cache-aligned buffer + + float backoff = next_backoff(INITIAL_BACKOFF); + + do { + // Copy the queue structure in and get a lock line reservation. + // (The structure is 128-byte aligned and completely fills a cache-line) + + mfc_getllar(local_q, q, 0, 0); + spu_readch(MFC_RdAtomicStat); + + if (local_q->mutex != 0){ // somebody else has it locked + jdq_locked++; + return GCQ_LOCKED; + } + + if (local_q->head == 0){ // the queue is empty + jdq_empty++; + return GCQ_EMPTY; + } + + // Try to acquire the lock + + local_q->mutex = 1; + mfc_putllc(local_q, q, 0, 0); + status = spu_readch(MFC_RdAtomicStat); + + if (status != 0){ + gc_cdelay((int) backoff); + backoff = next_backoff(backoff); + } + + } while (status != 0); + + // we're now holding the lock + + // copy in job descriptor at head of queue + *item_ea = local_q->head; + + // We must use the fence with the jd_tag to ensure that any + // previously initiated put of a job desc is locally ordered before + // the get of the new one. + mfc_getf(item, local_q->head, sizeof(gc_job_desc_t), jd_tag, 0, 0); + mfc_write_tag_mask(1 << jd_tag); // the tag we're interested in + mfc_read_tag_status_all(); // wait for DMA to complete + + local_q->head = item->sys.next; + item->sys.next = 0; + if (local_q->head == 0) // now empty? + local_q->tail = 0; + + // Copy the queue struct back out and unlock the mutex in one fell swoop. + // We use the unconditional put since it's faster and we own the lock. + + local_q->mutex = 0; + mfc_putlluc(local_q, q, 0, 0); + spu_readch(MFC_RdAtomicStat); + + jdq_ok++; + return GCQ_OK; +} diff --git a/gcell/lib/runtime/spu/gcell_runtime_qa.c b/gcell/lib/runtime/spu/gcell_runtime_qa.c new file mode 100644 index 00000000..47a4b5b5 --- /dev/null +++ b/gcell/lib/runtime/spu/gcell_runtime_qa.c @@ -0,0 +1,105 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include +#include +#include + + +static void +qa_nop(const gc_job_direct_args_t *input _UNUSED, + gc_job_direct_args_t *output _UNUSED, + const gc_job_ea_args_t *eaa _UNUSED) +{ +} + +GC_DECLARE_PROC(qa_nop, "qa_nop"); + +static int +sum_shorts(short *p, int nshorts) +{ + int total = 0; + for (int i = 0; i < nshorts; i++) + total += p[i]; + + return total; +} + +static void +qa_sum_shorts(const gc_job_direct_args_t *input _UNUSED, + gc_job_direct_args_t *output, + const gc_job_ea_args_t *eaa) +{ + for (unsigned int i = 0; i < eaa->nargs; i++){ + short *p = eaa->arg[i].ls_addr; + int n = eaa->arg[i].get_size / sizeof(short); + output->arg[i].s32 = sum_shorts(p, n); + //printf("qa_sum_shorts(%p, %d) = %d\n", p, n, output->arg[i].s32); + } +} + +GC_DECLARE_PROC(qa_sum_shorts, "qa_sum_shorts"); + +static void +write_seq(unsigned char *p, int nbytes, int counter) +{ + for (int i = 0; i < nbytes; i++) + p[i] = counter++; +} + +static void +qa_put_seq(const gc_job_direct_args_t *input, + gc_job_direct_args_t *output _UNUSED, + const gc_job_ea_args_t *eaa) +{ + int counter = input->arg[0].s32; + + for (unsigned int i = 0; i < eaa->nargs; i++){ + unsigned char *p = eaa->arg[i].ls_addr; + int n = eaa->arg[i].put_size; + write_seq(p, n, counter); + counter += n; + } +} + +GC_DECLARE_PROC(qa_put_seq, "qa_put_seq"); + +static void +qa_copy(const gc_job_direct_args_t *input _UNUSED, + gc_job_direct_args_t *output, + const gc_job_ea_args_t *eaa) +{ + if (eaa->nargs != 2 + || eaa->arg[0].direction != GCJD_DMA_PUT + || eaa->arg[1].direction != GCJD_DMA_GET){ + output->arg[0].s32 = -1; + return; + } + + output->arg[0].s32 = 0; + unsigned n = eaa->arg[0].put_size; + if (eaa->arg[1].get_size < n) + n = eaa->arg[1].get_size; + + memcpy(eaa->arg[0].ls_addr, eaa->arg[1].ls_addr, n); +} + +GC_DECLARE_PROC(qa_copy, "qa_copy"); diff --git a/gcell/lib/runtime/spu/spu_buffers.c b/gcell/lib/runtime/spu/spu_buffers.c new file mode 100644 index 00000000..29ae99d9 --- /dev/null +++ b/gcell/lib/runtime/spu/spu_buffers.c @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include "spu_buffers.h" +#include + +static unsigned char _getbuf[NGETBUFS][GC_SPU_BUFSIZE] _AL128; +static unsigned char _putbuf[NPUTBUFS][GC_SPU_BUFSIZE] _AL128; + +unsigned char *_gci_getbuf[NGETBUFS] = { + _getbuf[0] +}; + +unsigned char *_gci_putbuf[NPUTBUFS] = { + _putbuf[0], + _putbuf[1] +}; diff --git a/gcell/lib/runtime/spu/spu_buffers.h b/gcell/lib/runtime/spu/spu_buffers.h new file mode 100644 index 00000000..24811dc3 --- /dev/null +++ b/gcell/lib/runtime/spu/spu_buffers.h @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_SPU_BUFFERS_H +#define INCLUDED_SPU_BUFFERS_H + +#include "gc_spu_config.h" + +//! pointer to input buffer +extern unsigned char *_gci_getbuf[NGETBUFS]; + +//! pointers to output buffers +extern unsigned char *_gci_putbuf[NPUTBUFS]; + +#endif /* INCLUDED_SPU_BUFFERS_H */ diff --git a/gcell/lib/spu/Makefile.am b/gcell/lib/spu/Makefile.am new file mode 100644 index 00000000..5afa40e3 --- /dev/null +++ b/gcell/lib/spu/Makefile.am @@ -0,0 +1,138 @@ +# +# Copyright 2008 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. +# + +# We're building a single .a file from files in several +# subdirectories. We use the "single Makefile, multiple subdirectory" +# automake alternative. We're doing this because we're faking out +# automake and getting it to build for 2 architectures at the same +# time, the PPE (powerpc64) and the SPE. The easiest way to handle +# the SPE was to just build a static library using automake's built in +# rules, since trying to get libtool to handle two architectures in +# the same tree seemed untenable. + +include $(top_srcdir)/Makefile.common.spu + +IBM_SPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/ibm/sync/spu_source +AM_CPPFLAGS = $(GCELL_SPU_INCLUDES) $(IBM_SPU_SYNC_INCLUDES) + +libspu_LIBRARIES = libgcell_spu.a + +# ---------------------------------------------------------------- +# files in the lib/runtime/spu directory + +runtime_srcdir = $(srcdir)/../runtime/spu + +runtime_spu_sources = \ + $(runtime_srcdir)/gc_delay.c \ + $(runtime_srcdir)/gc_spu_jd_queue.c \ + $(runtime_srcdir)/spu_buffers.c \ + $(runtime_srcdir)/gc_logging.c \ + $(runtime_srcdir)/gc_main.c \ + $(runtime_srcdir)/gc_random.c + + +runtime_spu_headers = + +runtime_spu_noinst_headers = \ + $(runtime_srcdir)/gc_spu_config.h \ + $(runtime_srcdir)/spu_buffers.h + +# ---------------------------------------------------------------- +# files in the lib/general/spu directory + +general_srcdir = $(srcdir)/../general/spu + +general_spu_sources = \ + $(general_srcdir)/fft_1d_r2.c \ + $(general_srcdir)/memset.S + +general_spu_headers = +# These now live in include/gcell/spu +#general_spu_headers = \ +# $(general_srcdir)/gc_spu_macs.h \ +# $(general_srcdir)/libfft.h + +general_spu_noinst_headers = +# As do these +#general_spu_noinst_headers = \ +# $(general_srcdir)/fft_1d.h \ +# $(general_srcdir)/fft_1d_r2.h + +# The QA code for (usually) non-PPE visible support routines in lib/general/spu +general_spu_qa_sources = \ + $(general_srcdir)/qa_memset.c + +# ---------------------------------------------------------------- +# files in the lib/wrapper/spu directory + +wrapper_srcdir = $(srcdir)/../wrapper/spu + +wrapper_spu_sources = \ + $(wrapper_srcdir)/gcs_fft_1d_r2.c + +wrapper_spu_headers = + +wrapper_spu_noinst_headers = + +# ---------------------------------------------------------------- +# build the library from the files in the three directories + +libgcell_spu_a_SOURCES = \ + $(runtime_spu_sources) \ + $(general_spu_sources) \ + $(wrapper_spu_sources) + +gcellspuinclude_HEADERS = \ + $(runtime_spu_headers) \ + $(general_spu_headers) \ + $(wrapper_spu_headers) + +noinst_HEADERS = \ + $(runtime_spu_noinst_headers) \ + $(general_spu_noinst_headers) \ + $(wrapper_spu_noinst_headers) + +# ---------------------------------------------------------------- +# build some SPU executables + +libspu_PROGRAMS = \ + gcell_all + +noinst_PROGRAMS = \ + gcell_runtime_qa \ + gcell_general_qa + +# +# All known non-QA gcell procs (at least until they get too big). +# +gcell_all_SOURCES = $(wrapper_spu_sources) +gcell_all_LDADD = libgcell_spu.a + +# +# The QA code required for testing the runtime. +# +gcell_runtime_qa_SOURCES = $(runtime_srcdir)/gcell_runtime_qa.c +gcell_runtime_qa_LDADD = libgcell_spu.a + +# +# The QA code required for testing the SPE support routines in lib/general/spu +# +gcell_general_qa_SOURCES = $(general_spu_qa_sources) +gcell_general_qa_LDADD = libgcell_spu.a diff --git a/gcell/lib/spu/Makefile.in b/gcell/lib/spu/Makefile.in new file mode 100644 index 00000000..1daf168e --- /dev/null +++ b/gcell/lib/spu/Makefile.in @@ -0,0 +1,1427 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# We're building a single .a file from files in several +# subdirectories. We use the "single Makefile, multiple subdirectory" +# automake alternative. We're doing this because we're faking out +# automake and getting it to build for 2 architectures at the same +# time, the PPE (powerpc64) and the SPE. The easiest way to handle +# the SPE was to just build a static library using automake's built in +# rules, since trying to get libtool to handle two architectures in +# the same tree seemed untenable. + +# -*- Makefile -*- +# +# Copyright 2007,2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(gcellspuinclude_HEADERS) $(noinst_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.common.spu +libspu_PROGRAMS = gcell_all$(EXEEXT) +noinst_PROGRAMS = gcell_runtime_qa$(EXEEXT) gcell_general_qa$(EXEEXT) +subdir = gcell/lib/spu +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libspudir)" "$(DESTDIR)$(libspudir)" \ + "$(DESTDIR)$(gcellspuincludedir)" +libspuLIBRARIES_INSTALL = $(INSTALL_DATA) +LIBRARIES = $(libspu_LIBRARIES) +ARFLAGS = cru +libgcell_spu_a_AR = $(AR) $(ARFLAGS) +libgcell_spu_a_LIBADD = +am__objects_1 = gc_delay.$(OBJEXT) gc_spu_jd_queue.$(OBJEXT) \ + spu_buffers.$(OBJEXT) gc_logging.$(OBJEXT) gc_main.$(OBJEXT) \ + gc_random.$(OBJEXT) +am__objects_2 = fft_1d_r2.$(OBJEXT) memset.$(OBJEXT) +am__objects_3 = gcs_fft_1d_r2.$(OBJEXT) +am_libgcell_spu_a_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) +libgcell_spu_a_OBJECTS = $(am_libgcell_spu_a_OBJECTS) +libspuPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(libspu_PROGRAMS) $(noinst_PROGRAMS) +am_gcell_all_OBJECTS = $(am__objects_3) +gcell_all_OBJECTS = $(am_gcell_all_OBJECTS) +gcell_all_DEPENDENCIES = libgcell_spu.a +am__objects_4 = qa_memset.$(OBJEXT) +am_gcell_general_qa_OBJECTS = $(am__objects_4) +gcell_general_qa_OBJECTS = $(am_gcell_general_qa_OBJECTS) +gcell_general_qa_DEPENDENCIES = libgcell_spu.a +am_gcell_runtime_qa_OBJECTS = gcell_runtime_qa.$(OBJEXT) +gcell_runtime_qa_OBJECTS = $(am_gcell_runtime_qa_OBJECTS) +gcell_runtime_qa_DEPENDENCIES = libgcell_spu.a +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libgcell_spu_a_SOURCES) $(gcell_all_SOURCES) \ + $(gcell_general_qa_SOURCES) $(gcell_runtime_qa_SOURCES) +DIST_SOURCES = $(libgcell_spu_a_SOURCES) $(gcell_all_SOURCES) \ + $(gcell_general_qa_SOURCES) $(gcell_runtime_qa_SOURCES) +gcellspuincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(gcellspuinclude_HEADERS) $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ + +# We're abusing automake, getting it to generate code for two +# architectures under the same tree. If you've got a better way to do +# this, please let us know +AR = spu-ar +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = spu-gcc +CCAS = spu-gcc +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = +CPP = @CPP@ + +# Need to override user stuff even though it gives a warning. +# (Otherwise these contain PPE related info.) +CPPFLAGS = +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = spu-ld +LDFLAGS = +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = spu-ranlib +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = -O3 -g --std=gnu99 -fstrict-aliasing $(C_WARNINGS) +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +C_WARNINGS = \ + -Wall -Wextra -Wstrict-prototypes -Werror-implicit-function-declaration + +IBM_SPU_SYNC_INCLUDES = -I$(top_srcdir)/gcell/ibm/sync/spu_source +AM_CPPFLAGS = $(GCELL_SPU_INCLUDES) $(IBM_SPU_SYNC_INCLUDES) +libspu_LIBRARIES = libgcell_spu.a + +# ---------------------------------------------------------------- +# files in the lib/runtime/spu directory +runtime_srcdir = $(srcdir)/../runtime/spu +runtime_spu_sources = \ + $(runtime_srcdir)/gc_delay.c \ + $(runtime_srcdir)/gc_spu_jd_queue.c \ + $(runtime_srcdir)/spu_buffers.c \ + $(runtime_srcdir)/gc_logging.c \ + $(runtime_srcdir)/gc_main.c \ + $(runtime_srcdir)/gc_random.c + +runtime_spu_headers = +runtime_spu_noinst_headers = \ + $(runtime_srcdir)/gc_spu_config.h \ + $(runtime_srcdir)/spu_buffers.h + + +# ---------------------------------------------------------------- +# files in the lib/general/spu directory +general_srcdir = $(srcdir)/../general/spu +general_spu_sources = \ + $(general_srcdir)/fft_1d_r2.c \ + $(general_srcdir)/memset.S + +general_spu_headers = +# These now live in include/gcell/spu +#general_spu_headers = \ +# $(general_srcdir)/gc_spu_macs.h \ +# $(general_srcdir)/libfft.h +general_spu_noinst_headers = +# As do these +#general_spu_noinst_headers = \ +# $(general_srcdir)/fft_1d.h \ +# $(general_srcdir)/fft_1d_r2.h + +# The QA code for (usually) non-PPE visible support routines in lib/general/spu +general_spu_qa_sources = \ + $(general_srcdir)/qa_memset.c + + +# ---------------------------------------------------------------- +# files in the lib/wrapper/spu directory +wrapper_srcdir = $(srcdir)/../wrapper/spu +wrapper_spu_sources = \ + $(wrapper_srcdir)/gcs_fft_1d_r2.c + +wrapper_spu_headers = +wrapper_spu_noinst_headers = + +# ---------------------------------------------------------------- +# build the library from the files in the three directories +libgcell_spu_a_SOURCES = \ + $(runtime_spu_sources) \ + $(general_spu_sources) \ + $(wrapper_spu_sources) + +gcellspuinclude_HEADERS = \ + $(runtime_spu_headers) \ + $(general_spu_headers) \ + $(wrapper_spu_headers) + +noinst_HEADERS = \ + $(runtime_spu_noinst_headers) \ + $(general_spu_noinst_headers) \ + $(wrapper_spu_noinst_headers) + + +# +# All known non-QA gcell procs (at least until they get too big). +# +gcell_all_SOURCES = $(wrapper_spu_sources) +gcell_all_LDADD = libgcell_spu.a + +# +# The QA code required for testing the runtime. +# +gcell_runtime_qa_SOURCES = $(runtime_srcdir)/gcell_runtime_qa.c +gcell_runtime_qa_LDADD = libgcell_spu.a + +# +# The QA code required for testing the SPE support routines in lib/general/spu +# +gcell_general_qa_SOURCES = $(general_spu_qa_sources) +gcell_general_qa_LDADD = libgcell_spu.a +all: all-am + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common.spu $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/lib/spu/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/lib/spu/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libspuLIBRARIES: $(libspu_LIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libspudir)" || $(MKDIR_P) "$(DESTDIR)$(libspudir)" + @list='$(libspu_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(libspuLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libspudir)/$$f'"; \ + $(libspuLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libspudir)/$$f"; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(libspu_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + p=$(am__strip_dir) \ + echo " $(RANLIB) '$(DESTDIR)$(libspudir)/$$p'"; \ + $(RANLIB) "$(DESTDIR)$(libspudir)/$$p"; \ + else :; fi; \ + done + +uninstall-libspuLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(libspu_LIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libspudir)/$$p'"; \ + rm -f "$(DESTDIR)$(libspudir)/$$p"; \ + done + +clean-libspuLIBRARIES: + -test -z "$(libspu_LIBRARIES)" || rm -f $(libspu_LIBRARIES) +libgcell_spu.a: $(libgcell_spu_a_OBJECTS) $(libgcell_spu_a_DEPENDENCIES) + -rm -f libgcell_spu.a + $(libgcell_spu_a_AR) libgcell_spu.a $(libgcell_spu_a_OBJECTS) $(libgcell_spu_a_LIBADD) + $(RANLIB) libgcell_spu.a +install-libspuPROGRAMS: $(libspu_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(libspudir)" || $(MKDIR_P) "$(DESTDIR)$(libspudir)" + @list='$(libspu_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libspuPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(libspudir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libspuPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(libspudir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-libspuPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(libspu_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(libspudir)/$$f'"; \ + rm -f "$(DESTDIR)$(libspudir)/$$f"; \ + done + +clean-libspuPROGRAMS: + @list='$(libspu_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +gcell_all$(EXEEXT): $(gcell_all_OBJECTS) $(gcell_all_DEPENDENCIES) + @rm -f gcell_all$(EXEEXT) + $(LINK) $(gcell_all_OBJECTS) $(gcell_all_LDADD) $(LIBS) +gcell_general_qa$(EXEEXT): $(gcell_general_qa_OBJECTS) $(gcell_general_qa_DEPENDENCIES) + @rm -f gcell_general_qa$(EXEEXT) + $(LINK) $(gcell_general_qa_OBJECTS) $(gcell_general_qa_LDADD) $(LIBS) +gcell_runtime_qa$(EXEEXT): $(gcell_runtime_qa_OBJECTS) $(gcell_runtime_qa_DEPENDENCIES) + @rm -f gcell_runtime_qa$(EXEEXT) + $(LINK) $(gcell_runtime_qa_OBJECTS) $(gcell_runtime_qa_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fft_1d_r2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_delay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_logging.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc_spu_jd_queue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcell_runtime_qa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcs_fft_1d_r2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_memset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spu_buffers.Po@am__quote@ + +.S.o: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.S.lo: +@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< + +memset.o: $(general_srcdir)/memset.S +@am__fastdepCCAS_TRUE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT memset.o -MD -MP -MF $(DEPDIR)/memset.Tpo -c -o memset.o `test -f '$(general_srcdir)/memset.S' || echo '$(srcdir)/'`$(general_srcdir)/memset.S +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/memset.Tpo $(DEPDIR)/memset.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$(general_srcdir)/memset.S' object='memset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o memset.o `test -f '$(general_srcdir)/memset.S' || echo '$(srcdir)/'`$(general_srcdir)/memset.S + +memset.obj: $(general_srcdir)/memset.S +@am__fastdepCCAS_TRUE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT memset.obj -MD -MP -MF $(DEPDIR)/memset.Tpo -c -o memset.obj `if test -f '$(general_srcdir)/memset.S'; then $(CYGPATH_W) '$(general_srcdir)/memset.S'; else $(CYGPATH_W) '$(srcdir)/$(general_srcdir)/memset.S'; fi` +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/memset.Tpo $(DEPDIR)/memset.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$(general_srcdir)/memset.S' object='memset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o memset.obj `if test -f '$(general_srcdir)/memset.S'; then $(CYGPATH_W) '$(general_srcdir)/memset.S'; else $(CYGPATH_W) '$(srcdir)/$(general_srcdir)/memset.S'; fi` + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +gc_delay.o: $(runtime_srcdir)/gc_delay.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_delay.o -MD -MP -MF $(DEPDIR)/gc_delay.Tpo -c -o gc_delay.o `test -f '$(runtime_srcdir)/gc_delay.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_delay.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_delay.Tpo $(DEPDIR)/gc_delay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_delay.c' object='gc_delay.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_delay.o `test -f '$(runtime_srcdir)/gc_delay.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_delay.c + +gc_delay.obj: $(runtime_srcdir)/gc_delay.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_delay.obj -MD -MP -MF $(DEPDIR)/gc_delay.Tpo -c -o gc_delay.obj `if test -f '$(runtime_srcdir)/gc_delay.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_delay.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_delay.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_delay.Tpo $(DEPDIR)/gc_delay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_delay.c' object='gc_delay.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_delay.obj `if test -f '$(runtime_srcdir)/gc_delay.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_delay.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_delay.c'; fi` + +gc_spu_jd_queue.o: $(runtime_srcdir)/gc_spu_jd_queue.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_spu_jd_queue.o -MD -MP -MF $(DEPDIR)/gc_spu_jd_queue.Tpo -c -o gc_spu_jd_queue.o `test -f '$(runtime_srcdir)/gc_spu_jd_queue.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_spu_jd_queue.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_spu_jd_queue.Tpo $(DEPDIR)/gc_spu_jd_queue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_spu_jd_queue.c' object='gc_spu_jd_queue.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_spu_jd_queue.o `test -f '$(runtime_srcdir)/gc_spu_jd_queue.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_spu_jd_queue.c + +gc_spu_jd_queue.obj: $(runtime_srcdir)/gc_spu_jd_queue.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_spu_jd_queue.obj -MD -MP -MF $(DEPDIR)/gc_spu_jd_queue.Tpo -c -o gc_spu_jd_queue.obj `if test -f '$(runtime_srcdir)/gc_spu_jd_queue.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_spu_jd_queue.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_spu_jd_queue.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_spu_jd_queue.Tpo $(DEPDIR)/gc_spu_jd_queue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_spu_jd_queue.c' object='gc_spu_jd_queue.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_spu_jd_queue.obj `if test -f '$(runtime_srcdir)/gc_spu_jd_queue.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_spu_jd_queue.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_spu_jd_queue.c'; fi` + +spu_buffers.o: $(runtime_srcdir)/spu_buffers.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spu_buffers.o -MD -MP -MF $(DEPDIR)/spu_buffers.Tpo -c -o spu_buffers.o `test -f '$(runtime_srcdir)/spu_buffers.c' || echo '$(srcdir)/'`$(runtime_srcdir)/spu_buffers.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spu_buffers.Tpo $(DEPDIR)/spu_buffers.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/spu_buffers.c' object='spu_buffers.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spu_buffers.o `test -f '$(runtime_srcdir)/spu_buffers.c' || echo '$(srcdir)/'`$(runtime_srcdir)/spu_buffers.c + +spu_buffers.obj: $(runtime_srcdir)/spu_buffers.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spu_buffers.obj -MD -MP -MF $(DEPDIR)/spu_buffers.Tpo -c -o spu_buffers.obj `if test -f '$(runtime_srcdir)/spu_buffers.c'; then $(CYGPATH_W) '$(runtime_srcdir)/spu_buffers.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/spu_buffers.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/spu_buffers.Tpo $(DEPDIR)/spu_buffers.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/spu_buffers.c' object='spu_buffers.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spu_buffers.obj `if test -f '$(runtime_srcdir)/spu_buffers.c'; then $(CYGPATH_W) '$(runtime_srcdir)/spu_buffers.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/spu_buffers.c'; fi` + +gc_logging.o: $(runtime_srcdir)/gc_logging.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_logging.o -MD -MP -MF $(DEPDIR)/gc_logging.Tpo -c -o gc_logging.o `test -f '$(runtime_srcdir)/gc_logging.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_logging.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_logging.Tpo $(DEPDIR)/gc_logging.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_logging.c' object='gc_logging.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_logging.o `test -f '$(runtime_srcdir)/gc_logging.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_logging.c + +gc_logging.obj: $(runtime_srcdir)/gc_logging.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_logging.obj -MD -MP -MF $(DEPDIR)/gc_logging.Tpo -c -o gc_logging.obj `if test -f '$(runtime_srcdir)/gc_logging.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_logging.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_logging.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_logging.Tpo $(DEPDIR)/gc_logging.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_logging.c' object='gc_logging.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_logging.obj `if test -f '$(runtime_srcdir)/gc_logging.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_logging.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_logging.c'; fi` + +gc_main.o: $(runtime_srcdir)/gc_main.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_main.o -MD -MP -MF $(DEPDIR)/gc_main.Tpo -c -o gc_main.o `test -f '$(runtime_srcdir)/gc_main.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_main.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_main.Tpo $(DEPDIR)/gc_main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_main.c' object='gc_main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_main.o `test -f '$(runtime_srcdir)/gc_main.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_main.c + +gc_main.obj: $(runtime_srcdir)/gc_main.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_main.obj -MD -MP -MF $(DEPDIR)/gc_main.Tpo -c -o gc_main.obj `if test -f '$(runtime_srcdir)/gc_main.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_main.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_main.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_main.Tpo $(DEPDIR)/gc_main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_main.c' object='gc_main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_main.obj `if test -f '$(runtime_srcdir)/gc_main.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_main.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_main.c'; fi` + +gc_random.o: $(runtime_srcdir)/gc_random.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_random.o -MD -MP -MF $(DEPDIR)/gc_random.Tpo -c -o gc_random.o `test -f '$(runtime_srcdir)/gc_random.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_random.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_random.Tpo $(DEPDIR)/gc_random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_random.c' object='gc_random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_random.o `test -f '$(runtime_srcdir)/gc_random.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gc_random.c + +gc_random.obj: $(runtime_srcdir)/gc_random.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gc_random.obj -MD -MP -MF $(DEPDIR)/gc_random.Tpo -c -o gc_random.obj `if test -f '$(runtime_srcdir)/gc_random.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_random.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_random.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gc_random.Tpo $(DEPDIR)/gc_random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gc_random.c' object='gc_random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gc_random.obj `if test -f '$(runtime_srcdir)/gc_random.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gc_random.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gc_random.c'; fi` + +fft_1d_r2.o: $(general_srcdir)/fft_1d_r2.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fft_1d_r2.o -MD -MP -MF $(DEPDIR)/fft_1d_r2.Tpo -c -o fft_1d_r2.o `test -f '$(general_srcdir)/fft_1d_r2.c' || echo '$(srcdir)/'`$(general_srcdir)/fft_1d_r2.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fft_1d_r2.Tpo $(DEPDIR)/fft_1d_r2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(general_srcdir)/fft_1d_r2.c' object='fft_1d_r2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fft_1d_r2.o `test -f '$(general_srcdir)/fft_1d_r2.c' || echo '$(srcdir)/'`$(general_srcdir)/fft_1d_r2.c + +fft_1d_r2.obj: $(general_srcdir)/fft_1d_r2.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fft_1d_r2.obj -MD -MP -MF $(DEPDIR)/fft_1d_r2.Tpo -c -o fft_1d_r2.obj `if test -f '$(general_srcdir)/fft_1d_r2.c'; then $(CYGPATH_W) '$(general_srcdir)/fft_1d_r2.c'; else $(CYGPATH_W) '$(srcdir)/$(general_srcdir)/fft_1d_r2.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/fft_1d_r2.Tpo $(DEPDIR)/fft_1d_r2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(general_srcdir)/fft_1d_r2.c' object='fft_1d_r2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fft_1d_r2.obj `if test -f '$(general_srcdir)/fft_1d_r2.c'; then $(CYGPATH_W) '$(general_srcdir)/fft_1d_r2.c'; else $(CYGPATH_W) '$(srcdir)/$(general_srcdir)/fft_1d_r2.c'; fi` + +gcs_fft_1d_r2.o: $(wrapper_srcdir)/gcs_fft_1d_r2.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gcs_fft_1d_r2.o -MD -MP -MF $(DEPDIR)/gcs_fft_1d_r2.Tpo -c -o gcs_fft_1d_r2.o `test -f '$(wrapper_srcdir)/gcs_fft_1d_r2.c' || echo '$(srcdir)/'`$(wrapper_srcdir)/gcs_fft_1d_r2.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gcs_fft_1d_r2.Tpo $(DEPDIR)/gcs_fft_1d_r2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(wrapper_srcdir)/gcs_fft_1d_r2.c' object='gcs_fft_1d_r2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gcs_fft_1d_r2.o `test -f '$(wrapper_srcdir)/gcs_fft_1d_r2.c' || echo '$(srcdir)/'`$(wrapper_srcdir)/gcs_fft_1d_r2.c + +gcs_fft_1d_r2.obj: $(wrapper_srcdir)/gcs_fft_1d_r2.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gcs_fft_1d_r2.obj -MD -MP -MF $(DEPDIR)/gcs_fft_1d_r2.Tpo -c -o gcs_fft_1d_r2.obj `if test -f '$(wrapper_srcdir)/gcs_fft_1d_r2.c'; then $(CYGPATH_W) '$(wrapper_srcdir)/gcs_fft_1d_r2.c'; else $(CYGPATH_W) '$(srcdir)/$(wrapper_srcdir)/gcs_fft_1d_r2.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gcs_fft_1d_r2.Tpo $(DEPDIR)/gcs_fft_1d_r2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(wrapper_srcdir)/gcs_fft_1d_r2.c' object='gcs_fft_1d_r2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gcs_fft_1d_r2.obj `if test -f '$(wrapper_srcdir)/gcs_fft_1d_r2.c'; then $(CYGPATH_W) '$(wrapper_srcdir)/gcs_fft_1d_r2.c'; else $(CYGPATH_W) '$(srcdir)/$(wrapper_srcdir)/gcs_fft_1d_r2.c'; fi` + +qa_memset.o: $(general_srcdir)/qa_memset.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT qa_memset.o -MD -MP -MF $(DEPDIR)/qa_memset.Tpo -c -o qa_memset.o `test -f '$(general_srcdir)/qa_memset.c' || echo '$(srcdir)/'`$(general_srcdir)/qa_memset.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/qa_memset.Tpo $(DEPDIR)/qa_memset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(general_srcdir)/qa_memset.c' object='qa_memset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o qa_memset.o `test -f '$(general_srcdir)/qa_memset.c' || echo '$(srcdir)/'`$(general_srcdir)/qa_memset.c + +qa_memset.obj: $(general_srcdir)/qa_memset.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT qa_memset.obj -MD -MP -MF $(DEPDIR)/qa_memset.Tpo -c -o qa_memset.obj `if test -f '$(general_srcdir)/qa_memset.c'; then $(CYGPATH_W) '$(general_srcdir)/qa_memset.c'; else $(CYGPATH_W) '$(srcdir)/$(general_srcdir)/qa_memset.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/qa_memset.Tpo $(DEPDIR)/qa_memset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(general_srcdir)/qa_memset.c' object='qa_memset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o qa_memset.obj `if test -f '$(general_srcdir)/qa_memset.c'; then $(CYGPATH_W) '$(general_srcdir)/qa_memset.c'; else $(CYGPATH_W) '$(srcdir)/$(general_srcdir)/qa_memset.c'; fi` + +gcell_runtime_qa.o: $(runtime_srcdir)/gcell_runtime_qa.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gcell_runtime_qa.o -MD -MP -MF $(DEPDIR)/gcell_runtime_qa.Tpo -c -o gcell_runtime_qa.o `test -f '$(runtime_srcdir)/gcell_runtime_qa.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gcell_runtime_qa.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gcell_runtime_qa.Tpo $(DEPDIR)/gcell_runtime_qa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gcell_runtime_qa.c' object='gcell_runtime_qa.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gcell_runtime_qa.o `test -f '$(runtime_srcdir)/gcell_runtime_qa.c' || echo '$(srcdir)/'`$(runtime_srcdir)/gcell_runtime_qa.c + +gcell_runtime_qa.obj: $(runtime_srcdir)/gcell_runtime_qa.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gcell_runtime_qa.obj -MD -MP -MF $(DEPDIR)/gcell_runtime_qa.Tpo -c -o gcell_runtime_qa.obj `if test -f '$(runtime_srcdir)/gcell_runtime_qa.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gcell_runtime_qa.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gcell_runtime_qa.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/gcell_runtime_qa.Tpo $(DEPDIR)/gcell_runtime_qa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(runtime_srcdir)/gcell_runtime_qa.c' object='gcell_runtime_qa.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gcell_runtime_qa.obj `if test -f '$(runtime_srcdir)/gcell_runtime_qa.c'; then $(CYGPATH_W) '$(runtime_srcdir)/gcell_runtime_qa.c'; else $(CYGPATH_W) '$(srcdir)/$(runtime_srcdir)/gcell_runtime_qa.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-gcellspuincludeHEADERS: $(gcellspuinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gcellspuincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gcellspuincludedir)" + @list='$(gcellspuinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gcellspuincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gcellspuincludedir)/$$f'"; \ + $(gcellspuincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gcellspuincludedir)/$$f"; \ + done + +uninstall-gcellspuincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gcellspuinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gcellspuincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gcellspuincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libspudir)" "$(DESTDIR)$(libspudir)" "$(DESTDIR)$(gcellspuincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libspuLIBRARIES clean-libspuPROGRAMS \ + clean-libtool clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-gcellspuincludeHEADERS \ + install-libspuLIBRARIES install-libspuPROGRAMS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-gcellspuincludeHEADERS \ + uninstall-libspuLIBRARIES uninstall-libspuPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libspuLIBRARIES clean-libspuPROGRAMS clean-libtool \ + clean-noinstPROGRAMS ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-gcellspuincludeHEADERS install-html install-html-am \ + install-info install-info-am install-libspuLIBRARIES \ + install-libspuPROGRAMS install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-gcellspuincludeHEADERS \ + uninstall-libspuLIBRARIES uninstall-libspuPROGRAMS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/lib/wrapper/Makefile.am b/gcell/lib/wrapper/Makefile.am new file mode 100644 index 00000000..0676ebb7 --- /dev/null +++ b/gcell/lib/wrapper/Makefile.am @@ -0,0 +1,74 @@ +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(DEFINES) $(GCELL_INCLUDES) $(FFTW3F_CFLAGS) $(WITH_INCLUDES) + +noinst_LTLIBRARIES = libwrapper.la libwrapper-qa.la + +# +# generate libtool.lo's that contain embedded SPU executables +# +gcell_all.lo: ../spu/gcell_all + $(GCELL_EMBEDSPU_LIBTOOL) $< $@ + +gcell_general_qa.lo: ../spu/gcell_general_qa + $(GCELL_EMBEDSPU_LIBTOOL) $< $@ + + + +# The primary library + +libwrapper_la_SOURCES = \ + gcp_fft_1d_r2.cc + +libwrapper_la_LIBADD = \ + gcell_all.lo + + +# The QA library + +libwrapper_qa_la_SOURCES = \ + qa_gcell_general.cc \ + qa_gcell_wrapper.cc + +# FFTW now depends on gcell, don't create circular dependency :-) +# qa_gcp_fft_1d_r2.cc + +libwrapper_qa_la_LIBADD = \ + gcell_general_qa.lo + +# -lfftw3f + +# Headers + +# Moved to include/gcell +#gcellinclude_HEADERS = \ +# gcp_fft_1d_r2.h + +noinst_HEADERS = \ + qa_gcell_general.h \ + qa_gcell_wrapper.h \ + qa_gcp_fft_1d_r2.h + + +CLEANFILES = gcell_all.lo gcell_general_qa.lo + diff --git a/gcell/lib/wrapper/Makefile.in b/gcell/lib/wrapper/Makefile.in new file mode 100644 index 00000000..a5015825 --- /dev/null +++ b/gcell/lib/wrapper/Makefile.in @@ -0,0 +1,1034 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gcell/lib/wrapper +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libwrapper_qa_la_DEPENDENCIES = gcell_general_qa.lo +am_libwrapper_qa_la_OBJECTS = qa_gcell_general.lo qa_gcell_wrapper.lo +libwrapper_qa_la_OBJECTS = $(am_libwrapper_qa_la_OBJECTS) +libwrapper_la_DEPENDENCIES = gcell_all.lo +am_libwrapper_la_OBJECTS = gcp_fft_1d_r2.lo +libwrapper_la_OBJECTS = $(am_libwrapper_la_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libwrapper_qa_la_SOURCES) $(libwrapper_la_SOURCES) +DIST_SOURCES = $(libwrapper_qa_la_SOURCES) $(libwrapper_la_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(DEFINES) $(GCELL_INCLUDES) $(FFTW3F_CFLAGS) $(WITH_INCLUDES) +noinst_LTLIBRARIES = libwrapper.la libwrapper-qa.la + +# The primary library +libwrapper_la_SOURCES = \ + gcp_fft_1d_r2.cc + +libwrapper_la_LIBADD = \ + gcell_all.lo + + +# The QA library +libwrapper_qa_la_SOURCES = \ + qa_gcell_general.cc \ + qa_gcell_wrapper.cc + + +# FFTW now depends on gcell, don't create circular dependency :-) +# qa_gcp_fft_1d_r2.cc +libwrapper_qa_la_LIBADD = \ + gcell_general_qa.lo + + +# -lfftw3f + +# Headers + +# Moved to include/gcell +#gcellinclude_HEADERS = \ +# gcp_fft_1d_r2.h +noinst_HEADERS = \ + qa_gcell_general.h \ + qa_gcell_wrapper.h \ + qa_gcp_fft_1d_r2.h + +CLEANFILES = gcell_all.lo gcell_general_qa.lo +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcell/lib/wrapper/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gcell/lib/wrapper/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libwrapper-qa.la: $(libwrapper_qa_la_OBJECTS) $(libwrapper_qa_la_DEPENDENCIES) + $(CXXLINK) $(libwrapper_qa_la_OBJECTS) $(libwrapper_qa_la_LIBADD) $(LIBS) +libwrapper.la: $(libwrapper_la_OBJECTS) $(libwrapper_la_DEPENDENCIES) + $(CXXLINK) $(libwrapper_la_OBJECTS) $(libwrapper_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcp_fft_1d_r2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gcell_general.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gcell_wrapper.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +# +# generate libtool.lo's that contain embedded SPU executables +# +gcell_all.lo: ../spu/gcell_all + $(GCELL_EMBEDSPU_LIBTOOL) $< $@ + +gcell_general_qa.lo: ../spu/gcell_general_qa + $(GCELL_EMBEDSPU_LIBTOOL) $< $@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gcell/lib/wrapper/gcp_fft_1d_r2.cc b/gcell/lib/wrapper/gcp_fft_1d_r2.cc new file mode 100644 index 00000000..9e7e00f4 --- /dev/null +++ b/gcell/lib/wrapper/gcp_fft_1d_r2.cc @@ -0,0 +1,119 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + +static void +init_jd(gc_job_desc *jd, + gc_proc_id_t proc_id, + unsigned log2_fft_length, + bool shift, + std::complex *out, + const std::complex *in, + const std::complex *twiddle, + const float *window) +{ + jd->proc_id = proc_id; + jd->input.nargs = 2; + jd->output.nargs = 0; + jd->eaa.nargs = 4; + + jd->input.arg[0].u32 = log2_fft_length; + jd->input.arg[1].u32 = shift; + unsigned int fft_length = 1 << log2_fft_length; + + jd->eaa.arg[0].ea_addr = ptr_to_ea(out); + jd->eaa.arg[0].direction = GCJD_DMA_PUT; + jd->eaa.arg[0].put_size = sizeof(std::complex) * fft_length; + + jd->eaa.arg[1].ea_addr = ptr_to_ea(const_cast*>(in)); + jd->eaa.arg[1].direction = GCJD_DMA_GET; + jd->eaa.arg[1].get_size = sizeof(std::complex) * fft_length; + + jd->eaa.arg[2].ea_addr = ptr_to_ea(const_cast*>(twiddle)); + jd->eaa.arg[2].direction = GCJD_DMA_GET; + jd->eaa.arg[2].get_size = sizeof(std::complex) * fft_length / 4; + + jd->eaa.arg[3].ea_addr = ptr_to_ea(const_cast(window)); + jd->eaa.arg[3].direction = GCJD_DMA_GET; + if (window == 0) + jd->eaa.arg[3].get_size = 0; + else + jd->eaa.arg[3].get_size = sizeof(float) * fft_length; +} + + +gc_job_desc_sptr +gcp_fft_1d_r2_submit(gc_job_manager_sptr mgr, + unsigned int log2_fft_length, + bool forward, + bool shift, + std::complex *out, + const std::complex *in, + const std::complex *twiddle, + const float *window) +{ + unsigned int fft_length = 1 << log2_fft_length; + if (fft_length > 4096) + throw std::invalid_argument("fft_length > 4096"); + + if ((intptr_t)out & 0xf) + throw gc_bad_align("out"); + if ((intptr_t)in & 0xf) + throw gc_bad_align("in"); + if ((intptr_t)twiddle & 0xf) + throw gc_bad_align("twiddle"); + if ((intptr_t)window & 0xf) + throw gc_bad_align("window"); + + std::string proc_name; + if (forward) + proc_name = "fwd_fft_1d_r2"; + else + proc_name = "inv_fft_1d_r2"; + + gc_proc_id_t fft_id = mgr->lookup_proc(proc_name); + gc_job_desc_sptr jd = gc_job_manager::alloc_job_desc(mgr); + init_jd(jd.get(), fft_id, log2_fft_length, shift, out, in, twiddle, window); + if (!mgr->submit_job(jd.get())){ + gc_job_status_t s = jd->status; + throw gc_bad_submit(proc_name, s); + } + return jd; +} + +void +gcp_fft_1d_r2_twiddle(unsigned int log2_fft_length, std::complex *twiddle) +{ + unsigned int n = 1 << log2_fft_length; + + twiddle[0].real() = 1.0; + twiddle[0].imag() = 0.0; + for (unsigned i=1; i < n/4; i++){ + twiddle[i].real() = cos(i * 2*M_PI/n); + twiddle[n/4 - i].imag() = -twiddle[i].real(); + } +} diff --git a/gcell/lib/wrapper/qa_gcell_general.cc b/gcell/lib/wrapper/qa_gcell_general.cc new file mode 100644 index 00000000..af971981 --- /dev/null +++ b/gcell/lib/wrapper/qa_gcell_general.cc @@ -0,0 +1,83 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include "qa_gcell_general.h" +#include + +#include +#include // random, posix_memalign +#include +#include +#include + + +// handle to embedded SPU executable +extern spe_program_handle_t gcell_general_qa_spx; + +gc_job_desc_sptr +gcp_qa_general_submit(gc_job_manager_sptr mgr, const std::string &proc_name) +{ + gc_proc_id_t proc_id = mgr->lookup_proc(proc_name); + gc_job_desc_sptr jd = gc_job_manager::alloc_job_desc(mgr); + + jd->proc_id = proc_id; + jd->input.nargs = 0; + jd->output.nargs = 1; + jd->eaa.nargs = 0; + + if (!mgr->submit_job(jd.get())){ + gc_job_status_t s = jd->status; + throw gc_bad_submit(proc_name, s); + } + return jd; +} + + +bool +qa_gcell_general::generic_test_body(const std::string &proc_name) +{ + gc_jm_options opts; + opts.program_handle = gc_program_handle_from_address(&gcell_general_qa_spx); + opts.nspes = 1; + gc_job_manager_sptr mgr = gc_make_job_manager(&opts); + + gc_job_desc_sptr jd = gcp_qa_general_submit(mgr, proc_name); + if (!mgr->wait_job(jd.get())){ + fprintf(stderr, "wait_job for %s failed: %s\n", + proc_name.c_str(), + gc_job_status_string(jd->status).c_str()); + CPPUNIT_ASSERT(0); + } + + return jd->output.arg[0].u32; // bool result from SPE code +} + +/* + * ------------------------------------------------------------------------ + * Add more calls to SPE QA code here... + * ------------------------------------------------------------------------ + */ +void +qa_gcell_general::test_memset() +{ + CPPUNIT_ASSERT(generic_test_body("qa_memset")); +} + diff --git a/gcell/lib/wrapper/qa_gcell_general.h b/gcell/lib/wrapper/qa_gcell_general.h new file mode 100644 index 00000000..f1e64e71 --- /dev/null +++ b/gcell/lib/wrapper/qa_gcell_general.h @@ -0,0 +1,40 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_QA_GCELL_GENERAL_H +#define INCLUDED_QA_GCELL_GENERAL_H + +#include +#include + +class qa_gcell_general : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_gcell_general); + CPPUNIT_TEST(test_memset); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_memset(); + + bool generic_test_body(const std::string &proc_name); +}; + +#endif /* INCLUDED_QA_GCELL_GENERAL_H */ diff --git a/gcell/lib/wrapper/qa_gcell_wrapper.cc b/gcell/lib/wrapper/qa_gcell_wrapper.cc new file mode 100644 index 00000000..ccfd2fde --- /dev/null +++ b/gcell/lib/wrapper/qa_gcell_wrapper.cc @@ -0,0 +1,41 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/* + * This class gathers together all the test cases for the lib/wrapper + * directory into a single test suite. As you create new test cases, + * add them here. + */ + +#include +#include +//#include + +CppUnit::TestSuite * +qa_gcell_wrapper::suite() +{ + CppUnit::TestSuite *s = new CppUnit::TestSuite("wrapper"); + + s->addTest(qa_gcell_general::suite()); + //s->addTest(qa_gcp_fft_1d_r2::suite()); + + return s; +} diff --git a/gcell/lib/wrapper/qa_gcell_wrapper.h b/gcell/lib/wrapper/qa_gcell_wrapper.h new file mode 100644 index 00000000..cb29db88 --- /dev/null +++ b/gcell/lib/wrapper/qa_gcell_wrapper.h @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_QA_GCELL_WRAPPER_H +#define INCLUDED_QA_GCELL_WRAPPER_H + +#include + +//! collect all the tests for the wrapper directory + +class qa_gcell_wrapper { +public: + //! return suite of tests + static CppUnit::TestSuite *suite(); +}; + + +#endif /* INCLUDED_QA_GCELL_WRAPPER_H */ diff --git a/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h b/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h new file mode 100644 index 00000000..339ddd25 --- /dev/null +++ b/gcell/lib/wrapper/qa_gcp_fft_1d_r2.h @@ -0,0 +1,48 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_QA_GCP_FFT_1D_R2_H +#define INCLUDED_QA_GCP_FFT_1D_R2_H + +#include +#include +#include + +class qa_gcp_fft_1d_r2 : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_gcp_fft_1d_r2); + CPPUNIT_TEST(t1); + CPPUNIT_TEST(t2); + CPPUNIT_TEST(t3); + CPPUNIT_TEST(t4); + CPPUNIT_TEST_SUITE_END(); + + private: + void t1(); + void t2(); + void t3(); + void t4(); + + void test(gc_job_manager_sptr mgr, int log2_fft_size, bool forward); +}; + + + +#endif /* INCLUDED_QA_GCP_FFT_1D_R2_H */ diff --git a/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c b/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c new file mode 100644 index 00000000..582757ab --- /dev/null +++ b/gcell/lib/wrapper/spu/gcs_fft_1d_r2.c @@ -0,0 +1,94 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include +#include +#include + +/* + * v is really vector complex + */ +static void +conjugate_vector(vector float *v, int nelements) +{ + vector float k = {1, -1, 1, -1}; + int i; + for (i = 0; i < nelements; i++) + v[i] *= k; +} + +static void +gcs_fwd_fft_1d_r2(const gc_job_direct_args_t *input, + gc_job_direct_args_t *output __attribute__((unused)), + const gc_job_ea_args_t *eaa) +{ + vector float *out = (vector float *) eaa->arg[0].ls_addr; // complex + vector float *in = (vector float *) eaa->arg[1].ls_addr; // complex + vector float *twiddle = (vector float *) eaa->arg[2].ls_addr; // complex + vector float *window = (vector float *) eaa->arg[3].ls_addr; // float + + int log2_fft_length = input->arg[0].u32; + int shift = input->arg[1].u32; // non-zero if we should apply fftshift + + if (eaa->arg[3].get_size){ // apply window + // FIXME pointwise multiply in *= window + assert(0); + } + + fft_1d_r2(out, in, twiddle, log2_fft_length); + + if (shift){ + // FIXME apply "fftshift" to output data in-place + assert(0); + } +} + +GC_DECLARE_PROC(gcs_fwd_fft_1d_r2, "fwd_fft_1d_r2"); + +static void +gcs_inv_fft_1d_r2(const gc_job_direct_args_t *input, + gc_job_direct_args_t *output __attribute__((unused)), + const gc_job_ea_args_t *eaa) +{ + vector float *out = (vector float *) eaa->arg[0].ls_addr; // complex + vector float *in = (vector float *) eaa->arg[1].ls_addr; // complex + vector float *twiddle = (vector float *) eaa->arg[2].ls_addr; // complex + vector float *window = (vector float *) eaa->arg[3].ls_addr; // float + + int log2_fft_length = input->arg[0].u32; + int shift = input->arg[1].u32; // non-zero if we should apply fftshift + + if (eaa->arg[3].get_size){ // apply window + // FIXME pointwise multiply in *= window + assert(0); + } + + if (shift){ + // FIXME apply "fftshift" to input data in-place + assert(0); + } + + conjugate_vector(in, 1 << (log2_fft_length - 1)); + fft_1d_r2(out, in, twiddle, log2_fft_length); + conjugate_vector(out, 1 << (log2_fft_length - 1)); +} + +GC_DECLARE_PROC(gcs_inv_fft_1d_r2, "inv_fft_1d_r2"); diff --git a/gnuradio-core/ChangeLog b/gnuradio-core/ChangeLog deleted file mode 100644 index 6b5bbadb..00000000 --- a/gnuradio-core/ChangeLog +++ /dev/null @@ -1,1899 +0,0 @@ -2006-08-01 Achilleas Anastasopoulos - - * src/lib/general/gr_packed_to_unpacked_XX.cc.t, - src/lib/general/gr_unpacked_to_packed_XX.cc.t: fixed bug in - multiple stream support. - -2006-07-06 Tom Rondeau - - * src/python/gnuradio/blksimpl/gmsk2.py: - Added AGC to GMSK code. - -2006-07-06 Tom Rondeau - - * src/python/gnuradio/blksimpl/Makefile.am: - Call to gmsk.py was causing error after removal of gmsk.py file. - Removed call in Makefile.am to this. - -2006-07-05 Eric Blossom - - * src/python/gnuradio/blksimpl/gmsk.py: Removed long deprecated - code. We'll give this a week or so for the dust to settle, then - we'll rename gmsk2.py to gmsk.py - -2006-06-29 Tom Rondeau - - * src/lib/general/gr_correlate_access_code_bb.cc (work): - Removed branches; cleaned up code to only deal with a 180 degree phase shift in - BPSK. - -2006-06-28 Tom Rondeau - - * src/python/gnuradio/gr/qa_correlate_access_code.py (test_correlate_access_code.test_001): - Changes to access code correlator to handle BPSK phase reversal - killed qa_correlate_access_code. Modified the access code search in - test_001 to all the test to pass properly. - -2006-06-28 Tom Rondeau - - * src/lib/general/gr_constellation_decoder_cb.cc: - Set Compute_EVN=false by default (to clean up the output) - -2006-06-20 Tom Rondeau - - * src/lib/general/gr_costas_loop_cc.{h,cc,i}: modified to support - both BPSK and QPSK via "order" constructor argument. Removed - unused ref_phase ctor arg. - -2006-06-20 Eric Blossom - - * src/lib/general/gr_probe_avg_mag_sqrd_{f,c}.{h,cc,i}: added accessor - for threshold. - - * src/python/gnuradio/blksimpl/pkt.py: result of refactoring - gmsk2_pkt.py. This is the common packet handling framework, and - is modulation independent. gmsk2_pkt is now deprecated. - - * src/python/gnuradio/blksimpl/gmsk2_pkt.py: added deprecation warning. - - * src/python/gnuradio/packet_utils.py (make_packet): added - bits_per_baud parameter to handle QPSK, etc in the future. - -2006-06-17 Eric Blossom - - * src/lib/runtime/gr_realtime.{h,cc,i}: new function to enable - realtime scheduling. - -2006-06-15 Eric Blossom - - * src/lib/io/gr_oscope_guts.{h,cc,i}, - src/lib/io/gr_oscope_sink_x.{h,cc}: added set_sample_rate method. - - * src/lib/general/gr_keep_one_in_n.{h,cc,i}: added set_n method. - -2006-06-13 Eric Blossom - - * src/lib/general/gr_binary_slicer_fb.h: corrected calling sequence. - -2006-06-08 Eric Blossom - - * src/lib/general/gr_feval.{h,cc,i}, - src/python/gnuradio/gr/qa_feval.py: new C++/python helper that - allows C++ code to evaluate a function defined in Python. Uses - SWIG directors. - -2006-06-06 Eric Blossom - - * src/lib/general/gr_unpack_k_bits_bb.cc (work): bug fix. Was - computing the wrong answer and writing *way* too much data if k was > 1. - * src/python/gnuradio/gr/qa_unpack_k_bits.py: new ;) - - * src/lib/general/gr_diff_decoder_bb.{h,cc,i}: new. differential - decoder. constellation index in / constellation index out. - - * src/lib/general/gr_map_bb.{h,cc,i}: new. map any byte into any - other byte. - -2006-06-01 Eric Blossom - - * src/lib/filter/ccomplex_dotprod_3dnow64.S, - src/lib/filter/3dnow_float_dotprod_really_simple.S, - src/lib/filter/3dnow_float_dotprod_simple.S, - src/lib/filter/assembly.h, - src/lib/filter/ccomplex_dotprod_3dnow.S, - src/lib/filter/ccomplex_dotprod_3dnow64.S, - src/lib/filter/ccomplex_dotprod_3dnowext.S, - src/lib/filter/ccomplex_dotprod_3dnowext64.S, - src/lib/filter/ccomplex_dotprod_sse.S, - src/lib/filter/ccomplex_dotprod_sse64.S, - src/lib/filter/complex_dotprod_3dnow.S, - src/lib/filter/complex_dotprod_3dnow64.S, - src/lib/filter/complex_dotprod_3dnowext.S, - src/lib/filter/complex_dotprod_3dnowext64.S, - src/lib/filter/complex_dotprod_sse.S, - src/lib/filter/complex_dotprod_sse64.S, - src/lib/filter/fcomplex_dotprod_3dnow.S, - src/lib/filter/fcomplex_dotprod_3dnow64.S, - src/lib/filter/fcomplex_dotprod_sse.S, - src/lib/filter/fcomplex_dotprod_sse64.S, - src/lib/filter/float_dotprod_3dnow.S, - src/lib/filter/float_dotprod_3dnow64.S, - src/lib/filter/float_dotprod_sse.S, - src/lib/filter/float_dotprod_sse64.S, - src/lib/filter/short_dotprod_mmx.S, - src/lib/filter/short_dotprod_mmx64.S: changed all occurrences of - .align 16 to .p2align 4 to avoid ambiguous interpretation of .align - argument. - - -2006-05-29 Eric Blossom - - * src/python/gnuradio/blksimpl/gmsk2_pkt.py: now uses string of 1's - and 0's for access_code representation. Refactored to use - correlate_access_code_bb and frame_sink_1 instead of packet_sink. - - * src/lib/general/gr_binary_slicer_fb.{h,cc,i}: new - * src/lib/general/gr_qpsk_slicer_cb.{h,cc,i}: deleted. Use - gr_constellation_decoder_cb instead. - -2006-05-29 Eric Blossom - - * src/lib/general/gr_clock_recovery_mm_cc.cc: revised - implementation based on G. R. Danesfahani, T.G. Jeans, - "Optimisation of modified Mueller and Muller algorithm," - Electronics Letters, Vol. 31, no. 13, 22 June 1995, pp. 1032 - 1033. - Thanks Tom! - - * src/utils/cool.m, src/utils/db_width.m, src/utils/filter_tools.m, - src/utils/read_char_binary.m, src/utils/read_complex_binary.m, - src/utils/read_float_binary.m, src/utils/read_int_binary.m, - src/utils/read_short_binary.m: modified to be compatible with - MATLAB. - -2006-05-26 Eric Blossom - - * src/lib/general/gr_framer_sink_1.{h,cc,i}: new. Refactored from - gr_packet_sink. Use in combination with gr_correlate_access_code_bb. - -2006-05-24 Eric Blossom - - * src/lib/general/gr_diff_encoder_bb.{h,cc,i}: new. differential encoder. - - * src/lib/general/gr_constellation_decoder_cb.{h,cc,i}: new. - Maps i/q value to closest constellation point and return value - associated with the point. This probably obsoletes - gr_qpsk_slicer_cb. - - * src/lib/general/gr_qpsk_slicer_cb.{h,cc,i}: new. - * src/lib/general/gr_unpack_k_bits_bb.{h,cc,i}: unpack bytes - containing k valid bits, into bytes, 1 bit per byte. - - * src/lib/general/gr_correlate_access_code_bb.{h,cc,i}: new. - General purpose block for searching for access codes (sync - vectors). Can handle any sync vector between 1 and 64 bits. - -2006-05-23 Eric Blossom - - * src/lib/general/gr_diff_phasor_cc.{h,cc,i}: new. Compute phase - difference as a complex number between adjacent complex items in - stream. This is useful for demodulating differentially encoded PSK. - - * src/python/gnuradio/gruimpl/mathmisc.py (log2): new function. - - * src/lib/general/gr_firdes.cc (root_raised_cosine): force ntaps - to be odd. - -2006-05-21 Martin Dudok van Heel - - Added generic test class gr_test. - gr_test is a gnuradio block meant to be used in a flow_graph. - It doesn't do much processing, but you can specify from python every parameter you need to for testing. - For example history, output_multiple, input and output signature, decimation and such. - Especially handy for testing setting up the buffers. - It also touches every available input and output to check for segfaults. - You can also instruct it to not consume all ninput_items or not produce all noutput_items. - - There is also a new script test_buffers.py in src/tests which uses gr_test to test setting up the buffers. - It is NOT automatically run by make check yet, because it will fail with an assert when it reaches circbuf memory limit of the system. - (On linux: Trying to setup a buffer >shmmax - Note that you can set the smmax limit manually on a linux 2.6 system in the following way in a root console) - #set shmmax limit manually to 300MB - echo 300000000 >/proc/sys/kernel/shmmax - - * src/lib/general/Makefile.am: added gr_test - * src/lib/general/general.i: added gr_test - * src/lib/general/gr_test.cc: new - * src/lib/general/gr_test.h: new - * src/lib/general/gr_test.i: new - * src/lib/general/gr_test_types.h: new - * src/tests/test_buffers.py: new script to test setting up the buffers using gr_test - -2006-05-21 Martin Dudok van Heel - - Solved the following bugs which result from incorrect buffersize setup: - sched: is requesting more input data - than we can provide. - ninput_items_required = 8192 - max_possible_items_available = 8191 - If this is a filter, consider reducing the number of taps. - - python: src/lib/runtime/gr_buffer.h:108: unsigned int gr_buffer::index_sub(unsigned int, unsigned int): - Assertion `(unsigned) s < d_bufsize' failed. - Aborted - - * src/python/gnuradio/gr/flow_graph.py: resolved above bugs by adding + mdown.history() to nitems when appropriate - -2006-04-24 Eric Blossom - - * src/lib/general/gr_chunks_to_symbols_XX.{h,cc,i}.t, - src/lib/general/gr_packed_to_unpacked_XX.{h,cc,i}.t, - src/lib/general/gr_unpacked_to_packed_XX.{h,cc,i}.t: - new pseudo-templates for generating family of blocks. Patch - submitted by Achilleas Anastasopoulos , touched - up by Eric. - -2006-04-24 Martin Dudok van Heel - - * src/python/gnuradio/gr/flow_graph.py (buffer_sizes.allocate): - increase buffer size allocation for blocks with a large - output_multiple, not just those that are decimators. - -2006-04-05 Eric Blossom - - * src/lib/general/gr_pll_carriertracking_cc.i: added - squelch_enable and set_lock_threshold methods. - - * src/lib/general/gr_clock_recovery_mm_cc.h: removed erroneous - class prefix to method. GCC 4.1.0 complains ;) - -2006-04-03 Eric Blossom - - * src/lib/general/gr_pll_carriertracking_cc.cc (phase_detector): - fixed typo. - - * src/python/gnuradio/gr/prefs.py: don't load prefs if - GR_DONT_LOAD_PREFS environment variable is set. run_tests sets - this to avoid interactions with system and user prefs during - make check. - - * src/python/gnuradio/gr/qa_rational_resampler.py: disabled two - tests that were causing hangs on SuSE 10.0. Should be investigated. - -2006-03-30 Eric Blossom - - * src/lib/filter/gr_fft_filter_ccc.{h,cc}, - src/lib/filter/gr_fft_filter_fff.{h,cc}: reworked to allow - safer setting of new taps after instantiation. - -2006-03-29 Eric Blossom - - * src/lib/general/gr_prefix.{h,cc,i}: new function that returns - installation prefix directory (--prefix argument to configure). - - * src/lib/general/gr_prefs.{h,cc,i}: reworked implementation to - use python ConfigParser. - * src/python/gnuradio/gr/prefs.py: moved from - src/python/gnuradio/prefs.py to solve initialization problem. - - * src/lib/general/gr_stream_to_vector.{h,cc,i}: renamed from gr_serial_to_parallel - * src/lib/general/gr_vector_to_stream.{h,cc,i}: renamed from gr_parallel_to_serial - * src/lib/python/gnuradio/gr/__init__.py: new aliases for - backwards compatibility with rename. - - * src/lib/swig/Makefile.am: cleanup for make distcheck. - - * src/lib/atsc/GrAtscBitTimingLoop.cc, GrAtscBitTimingLoop.h, - GrAtscBitTimingLoop2.cc, GrAtscBitTimingLoop2.h, - GrAtscBitTimingLoop3.cc, GrAtscBitTimingLoop3.h, - GrAtscConvert2xTo20.cc, GrAtscConvert2xTo20.h, - GrAtscDataSegToSoftDataSeg.cc, GrAtscDataSegToSoftDataSeg.h, - GrAtscDeinterleaver.cc, GrAtscDeinterleaver.h, - GrAtscDerandomizer.cc, GrAtscDerandomizer.h, - GrAtscEqualizer.cc, GrAtscEqualizer.h, GrAtscFPLL.cc, - GrAtscFPLL.h, GrAtscFieldSyncChecker.cc, - GrAtscFieldSyncChecker.h, GrAtscFieldSyncCorrelator.cc, - GrAtscFieldSyncCorrelator.h, GrAtscFieldSyncDemux.cc, - GrAtscFieldSyncDemux.h, GrAtscFieldSyncMux.cc, - GrAtscFieldSyncMux.h, GrAtscInterleaver.cc, - GrAtscInterleaver.h, GrAtscRSDecoder.cc, GrAtscRSDecoder.h, - GrAtscRSEncoder.cc, GrAtscRSEncoder.h, GrAtscRandomizer.cc, - GrAtscRandomizer.h, GrAtscSegSymSync.cc, GrAtscSegSymSync.h, - GrAtscSegSymSyncImpl.cc, GrAtscSegSymSyncImpl.h, - GrAtscSegSymSyncImpl_export.h, GrAtscSymbolMapper.h, - GrAtscTrellisEncoder.cc, GrAtscTrellisEncoder.h, - GrAtscViterbiDecoder.cc, GrAtscViterbiDecoder.h, Makefile.am, - README, atsc_basic_trellis_encoder.cc, - atsc_basic_trellis_encoder.h, atsc_consts.h, - atsc_data_interleaver.cc, atsc_data_interleaver.h, - atsc_diag_output.h, atsc_equalizer.cc, atsc_equalizer.h, - atsc_equalizer_lms.cc, atsc_equalizer_lms.h, - atsc_equalizer_lms2.cc, atsc_equalizer_lms2.h, - atsc_equalizer_nop.cc, atsc_equalizer_nop.h, atsc_exp2_lp.cc, - atsc_exp2_lp.h, atsc_exp2_lp20.dat, atsc_exp2_lp2x.dat, - atsc_fake_single_viterbi.cc, atsc_fake_single_viterbi.h, - atsc_fs_checker.cc, atsc_fs_checker.h, - atsc_fs_checker_naive.cc, atsc_fs_checker_naive.h, - atsc_fs_correlator.cc, atsc_fs_correlator.h, - atsc_fs_correlator_naive.cc, atsc_fs_correlator_naive.h, - atsc_pnXXX.cc, atsc_pnXXX.h, atsc_randomizer.cc, - atsc_randomizer.h, atsc_reed_solomon.cc, atsc_reed_solomon.h, - atsc_root_raised_cosine.cc, atsc_root_raised_cosine.h, - atsc_root_raised_cosine_bandpass.cc, - atsc_root_raised_cosine_bandpass.h, atsc_single_viterbi.cc, - atsc_single_viterbi.h, atsc_slicer_agc.h, - atsc_sliding_correlator.cc, atsc_sliding_correlator.h, - atsc_sssr.cc, atsc_sssr.h, atsc_syminfo.h, atsc_sync_tag.h, - atsc_trellis_encoder.cc, atsc_trellis_encoder.h, atsc_types.h, - atsc_viterbi_decoder.cc, atsc_viterbi_decoder.h, - atsc_viterbi_gen.cc, atsc_vsbtx_lp.cc, atsc_vsbtx_lp.dat, - atsc_vsbtx_lp.h, convolutional_interleaver.h, - create_atsc_equalizer.cc, create_atsc_equalizer.h, - create_atsc_fs_checker.cc, create_atsc_fs_checker.h, - create_atsc_fs_correlator.cc, create_atsc_fs_correlator.h, - fpll_btloop_coupling.h, gen_encoder.py, interleaver_fifo.h, - plinfo.cc, qa_atsc.cc, qa_atsc.h, - qa_atsc_basic_trellis_encoder.cc, - qa_atsc_basic_trellis_encoder.h, qa_atsc_data_interleaver.cc, - qa_atsc_data_interleaver.h, qa_atsc_equalizer_nop.cc, - qa_atsc_equalizer_nop.h, qa_atsc_fake_single_viterbi.cc, - qa_atsc_fake_single_viterbi.h, qa_atsc_fs_correlator.cc, - qa_atsc_fs_correlator.h, qa_atsc_randomizer.cc, - qa_atsc_randomizer.h, qa_atsc_reed_solomon.cc, - qa_atsc_reed_solomon.h, qa_atsc_single_viterbi.cc, - qa_atsc_single_viterbi.h, qa_atsc_sliding_correlator.cc, - qa_atsc_sliding_correlator.h, qa_atsc_trellis_encoder.cc, - qa_atsc_trellis_encoder.h, - qa_atsc_trellis_encoder_t1_input.dat, - qa_atsc_trellis_encoder_t1_output.dat, - qa_atsc_viterbi_decoder.cc, qa_atsc_viterbi_decoder.h, - qa_atsc_viterbi_decoder_t1_input.dat, - qa_atsc_viterbi_decoder_t1_output.dat, - qa_convolutional_interleaver.cc, - qa_convolutional_interleaver.h, qa_interleaver_fifo.cc, - qa_interleaver_fifo.h: Moved all atsc code from src/lib/atsc to - new gr-atsc CVS module. - - * src/lib/general/gri_ringbuffer.{h,cc}: removed. Use - gr_buffer/gr_buffer_reader instead. - -2006-03-27 Eric Blossom - - * src/lib/general/gr_prefs.{h,cc,i}: renamed parameter from "val" to - "v" to work around issue in SWIG 1.3.{28,29} and/or g++ 4.0.2. - - * src/lib/general/gr_prefs.{h,cc,i}, src/python/gnuradio/prefs.py: - new class for user preferences. This uses SWIG directors (serious - magic), to have the actual implementation be in python, but - callable transparently from C++. We'll use this for user prefs - such as audio module, audio module options, etc. - -2006-03-25 Eric Blossom - - * src/lib/io/gri_logger.h (class gri_logger): new class that can - safely log to a file from within a JACK or portaudio callback. - Uses a ringbuffer to communicate with a separate thread that - writes the file. - -2006-03-17 Eric Blossom - - * src/lib/runtime/gr_buffer.cc (gr_buffer_reader): added missing - drop_reader call to destructor. Fixed latent bug. - -2006-03-15 Eric Blossom - - * src/lib/omnithread.h, - src/lib/omnithread/ot_posix.h, src/lib/omnithread/posix.cc, - src/lib/omnithread/nt.cc: mods to - allow specifying a max count on semaphores. This allows the - construction of binary semaphores by passing max_count=1 to the ctor. - The default behavior is unchanged. - -2006-03-13 Eric Blossom - - * src/lib/general/gr_pll_carriertracking_cc.cc (work): refactored - loop control. - -2006-03-12 Stephane Fillod - * src/lib/general/gri_ringbuffer.{cc,h}, - src/lib/general/Makefile.am: new lockless ringbuffer (single - reader/single writer) taken from JACK software (GPL). - * * src/lib/omnithread/omnithread.h: add omni_mutex::trylock - * * src/lib/omnithread/ot_posix.h: POSIX trylock implementation - * * src/lib/omnithread/ot_nt.h: Win32 trylock implementation - -2006-03-12 Eric Blossom - - * src/lib/general/gr_firdes.h, src/lib/io/gr_file_source.h: Fix - for g++ 4.1. Removed extra class:: qualification. Patch - submitted by Martin Michlmayr - -2006-03-10 Eric Blossom - - * src/lib/general/gr_dd_mpsk_sync_cc.cc: doc fixes. reworked - delay line handling. - * src/lib/general/gr_dd_mpsk_sync_cc.h: doc fixes. Added DLLEN const. - * src/lib/general/gr_costas_loop_cc.h: doc fixes. - * src/lib/general/gr_costas_loop_cc.cc (work): cosmetic tweak to - loop control. - -2006-03-07 Eric Blossom - - * src/lib/general/gr_multiply_const_XX.h.t, - src/lib/general/gr_quadrature_demod_cf.h, - src/lib/general/gr_frequency_modulator_fc.h, - src/lib/general/gr_packed_to_unpacked_bb.h, - src/lib/general/gr_unpacked_to_packed_bb.h, - src/lib/general/gr_chunks_to_symbols_bf.h, - src/lib/general/gr_chunks_to_symbols_bc.h: doc fixs. - -2006-02-22 Martin Dudok van Heel - - Addded new blocks gr_single_pole_iir_filter_cc - gr_agc_cc - gr_phase_modulator_fc - Changed gr_single_pole_iir.h to make this work - Bugfix, to make make_check work again. - - * src/lib/filter/Makefile.am: Added gr_single_pole_iir_filter_cc - Added missing gr_single_pole_avg.h and gr_single_pole_rec.h (fix make check bug) - * src/lib/filter/filter.i: changed. Added gr_single_pole_iir_filter_cc - * src/lib/filter/gr_single_pole_iir.h: changed template to have - partial specialization for . Needed - because calculations and temporary variables have to be - gr_complexd in this special case - * src/lib/filter/gr_single_pole_iir_filter_cc.cc: new - * src/lib/filter/gr_single_pole_iir_filter_cc.h: new - * src/lib/filter/gr_single_pole_iir_filter_cc.i: new - * src/lib/general/Makefile.am: changed. Added gr_agc_cc, gr_phase_modulator_fc,gri_agc_cc - * src/lib/general/general.i: changed. Added gr_agc_cc, gr_phase_modulator_fc - * src/lib/general/gr_agc_cc.cc: new - * src/lib/general/gr_agc_cc.h: new - * src/lib/general/gr_agc_cc.i: new - * src/lib/general/gr_phase_modulator_fc.cc: new - * src/lib/general/gr_phase_modulator_fc.h: new - * src/lib/general/gr_phase_modulator_fc.i: new - * src/lib/general/gri_agc_cc.h: new - * src/lib/general/gri_agc_cc.i: new - * src/python/gnuradio/gr/Makefile.am: changed. Added qa_single_pole_iir_cc.py - * src/python/gnuradio/gr/qa_single_pole_iir_cc.py: new - -2006-02-17 Stephane Fillod - - * configure.ac, src/lib/filter/ccomplex_dotprod_generic.cc, - src/lib/filter/complex_dotprod_generic.cc, - src/lib/filter/generate_gr_fir_sysconfig.py, - src/lib/filter/generate_gr_fir_sysconfig_generic.py, - src/lib/filter/generate_gr_fir_util.py, - src/lib/filter/gr_fir_XXX.cc.t, - src/lib/filter/gr_fir_XXX_generic.cc.t, - src/lib/filter/gr_fir_ccc_simd.cc, - src/lib/filter/gr_fir_ccc_x86.cc, - src/lib/filter/gr_fir_ccf_simd.cc, - src/lib/filter/gr_fir_ccf_x86.cc, - src/lib/filter/gr_fir_fcc_simd.cc, - src/lib/filter/gr_fir_fcc_x86.cc, - src/lib/filter/gr_fir_fff_simd.cc, - src/lib/filter/gr_fir_fff_x86.cc, - src/lib/filter/gr_fir_fsf_simd.cc, - src/lib/filter/gr_fir_fsf_x86.cc, - src/lib/filter/gr_fir_scc_simd.cc, - src/lib/filter/gr_fir_scc_x86.cc, - src/lib/filter/gr_fir_sysconfig_x86.cc, - src/lib/filter/gri_mmse_fir_interpolator.cc, - src/lib/filter/gri_mmse_fir_interpolator_cc.cc, - src/lib/filter/sysconfig_x86.cc, - src/lib/general/gr_align_on_samplenumbers_ss.cc, - src/lib/general/gr_crc32.cc, - src/lib/general/gr_head.cc, - src/lib/general/gr_lfsr_32k_source_s.cc, - src/lib/general/gr_noise_source_X.cc.t, - src/lib/general/gr_nop.cc, - src/lib/general/gr_reverse.cc, - src/lib/general/gr_sig_source_X.cc.t, - src/lib/general/gr_simple_correlator.cc, - src/lib/general/gr_simple_framer.cc, - src/lib/general/gr_skiphead.cc, - src/lib/general/gr_vector_sink_X.cc.t, - src/lib/general/gr_vector_source_X.cc.t, - src/lib/general/qa_gr_fxpt.cc, - src/lib/general/qa_gr_fxpt_nco.cc, - src/lib/general/qa_gr_fxpt_vco.cc, - src/lib/io/gr_oscope_guts.cc, - src/lib/runtime/gr_io_signature.cc, - src/lib/runtime/gr_types.h, - src/lib/runtime/qa_gr_block.cc, - src/lib/runtime/qa_gr_buffer.cc, - src/lib/runtime/qa_gr_io_signature.cc: added proper config check - for stdint.h to define gr_int* types. - -2006-02-16 Eric Blossom - - * src/lib/runtime/gr_types.h: added typedef for gr_int64 and - gr_uint64. Need proper autoconf fix for these. - -2006-02-08 Eric Blossom - - * src/lib/io/gr_file_sink.{h,cc,i}: added new methods: enable & - disable. Thanks Marcus! - -2006-02-06 Eric Blossom - - * src/lib/general/gr_kludge_copy.{h,cc,i}: new. Copies input to output. - * src/python/gnuradio/gr/qa_kludge_copy.py: new QA code. - -2006-02-05 Eric Blossom - - * src/python/gnuradio/gr/qa_iir.py (test_iir.test_iir_direct_008): - accept either RuntimeError or ValueError in test case. The return - value changed in swig 1.3.28. - - * src/lib/swig/gnuradio.i: now use anonymous templates for - std::vector's. This was a tip from one of the SWIG developers. - It generates less code. - -2006-02-02 Eric Blossom - - * src/python/gnuradio/gruimpl/seq_with_cursor.py: added method to - select closest index by value. - -2006-01-30 Eric Blossom - - * src/lib/general/gr_packet_sink.{h,i}: Added new "carrier_sensed" - method. Naive implementation, but it just might work ;) - * src/python/gnuradio/blksimpl/gmsk2_pkt.py (carrier_sensed): new method. - -2006-01-28 Eric Blossom - - * src/lib/general/gr_pa_2x2_phase_combiner.{h,cc,i}: new. - four antenna phase combiner for phased array experiments. - - * src/lib/general/gr_simple_squelch_cc.{h,cc,i}: added threshold - and squelch_range methods. - -2006-01-24 Eric Blossom - - * src/lib/general/gr_sync_block.cc (forecast): removed duplicated code. - * src/lib/general/gr_sync_interpolator.cc (forecast): removed duplicated code. - * src/lib/general/gr_sync_decimation.cc (forecast): removed duplicated code. - * src/lib/runtime/gr_single_threaded_scheduler.cc (main_loop): - take advantage of fixed_rate() method so that we can consume all - available input. Fixed bad audio sound with encdec. - -2005-12-23 Eric Blossom - - * src/lib/general/gr_interleaved_short_to_complex.i (class - gr_interleaved_short_to_complex): corrected superclass spec. - -2005-12-19 Martin Dudok van Heel - - Addded a new blocks to convert from unsigned char to float and for char to float. - Added new agc block gr_agc_ff based on existing gr_agc block - (which can't be directly used in a flowgraph). All needed for - tv-reception. - - * src/lib/general/gr_uchar_to_float.{cc,h,i}: new - * src/lib/general/gri_uchar_to_float.{cc,h}: new - * src/lib/general/gr_char_to_float.{cc,h,i}: new - * src/lib/general/gri_char_to_float.{cc,h}: new - * src/lib/general/gr_agc_ff.cc: new - * src/lib/general/gr_agc_ff.h: new - * src/lib/general/gr_agc_ff.i: new - * src/lib/general/Makefile.am: changed. Added gr_agc_ff, - gr_(u)char_to_float and gri_(u)char_to_float. - * src/lib/general/general.i: changed. Added - gr_agc_ff,gr_(u)char_to_float and gri_(u)char_to_float. - -2005-12-17 Eric Blossom - - * src/lib/general/gr_quadrature_demod_cf.cc: use fast arctan code. - -2005-12-17 Bob McGwier N4HY - - * src/lib/general/gr_lms_dfe_cc.{h,cc,i}: new. - * src/lib/general/gr_fast_atan2f.cc: new. Fast arc tangent using - table lookup and interpolation. Declaration added to gr_math.h - -2005-12-17 Eric Blossom - - * src/lib/general/gr_lms_dfe_ff.h: doc fix. - * src/lib/general/gr_lms_dfe_ff.cc: refactored. Moved common - functions to gr_misc - * src/lib/general/gr_misc.{h,cc}: new. Collect misc functions in - one place. - * doc/Makefile.am: --enable-doxygen default is now "no" - -2005-12-16 Eric Blossom - - * src/lib/swig/gnuradio_swig_bug_workaround.h: removed from CVS. - It's generated when it's needed. - -2005-12-09 Eric Blossom - - made 2.6 release. - -2005-12-08 Chuck Swiger - - * src/lib/general/gr_probe_signal_f.{h,cc,i}: new. Return a - single sample from the stream. - -2005-12-07 Chuck Swiger - - * src/lib/general/gr_probe_avg_mag_sqrd_{f,c}.{h,cc,i}: new. - Sinks that measure the average magnitude squared and allow the - value to be retrieved via accessors. - -2005-12-06 Eric Blossom - - * src/lib/general/gr_clock_recovery_mm_ff.cc: doc fix: added reference to book. - -2005-12-01 Eric Blossom - - * src/lib/general/gr_packet_sink.h (class gr_packet_sink): changed - d_threshold to unsigned to eliminate warning. - * src/lib/general/gr_simple_correlator.cc: removed duplicate - definition of slice. - -2005-12-01 Stephane Fillod - - * src/lib/general/gr_count_bits.cc (gr_count_bits32): faster - implementation. No branching. - -2005-11-22 Ramakrishnan Muthukrishnan - - * src/python/gnuradio/gr/qa_filter_delay_fc.py, - src/python/gnuradio/gr/qa_hilbert.py: updated QA code to reflect - change in delay line handling. - -2005-11-21 Eric Blossom - - * config/gr_boost.m4: reworked to look for latest version if - installed in version-specific subdir of /usr/local/include. - * src/lib/swig/Makefile.am (DISTCLEANFILES): added gnuradio_swig_python.d - -2005-11-19 Eric Blossom - - * config/usrp_libusb.m4 (USRP_LIBUSB): add -lIOKit under darwin. - * config/gr_no_undefinedm4, config/gr_set_md_cpu.m4, - config/gr_x86_64.m3, config/usrp_fusb_tech.m4, - config/usrp_libusb.m4: changed incorrect use of - AC_CANONICAL_TARGET to HOST. - -2005-11-18 Eric Blossom - - These changes enabled discontinous transmission of usrp packets. - The treatment of history was slightly changed. Now we provide - zeros for the initial delay lines and produce N outputs for N - inputs. In the past we would produce N-history-1 outputs for N inputs. - - * src/python/gnuradio/packet_utils.py: ensure at least a single - byte of padding to flush filters. - * src/lib/runtime/gr_block.{h,cc,i}, - src/lib/general/gr_sync_block.{h,cc,i}, - src/lib/general/gr_sync_decimator.{h,cc,i}, - src/lib/general/gr_sync_interpolator.{h,cc,i}: moved history into - gr_block from gr_sync_block. Added new methods to support fast - path through scheduler: fixed_rate, fixed_rate_ninput_to_output - and fixed_rate_noutput_to_input. - - * src/python/gnuradio/gr/flow_graph.py (flow_graph._connect_inputs): - account for initial history when attaching buffer reader. - * src/lib/runtime/gr_buffer.{h,cc,i} (gr_buffer_add_reader): modified to - provide zeros for initial history. - - * src/python/gnuradio/gr/qa_fft_filter.py, - src/python/gnuradio/gr/qa_filter_delay_fc.py, - src/python/gnuradio/gr/qa_hilbert.py, - src/python/gnuradio/gr/qa_interp_fir_filter.py, - src/python/gnuradio/gr/qa_rational_resampler.py: tweaked QA code - to work with new history behavior. - - -2005-11-17 Eric Blossom - - * src/lib/filter/gr_interp_fir_filter_XXX.cc.t, - gr_rational_resampler_base_XXX.cc.t: ensure that history is set in - constructor. - - * src/lib/runtime/gr_msg_queue.i: more evil hackery to release - Python global interpreter lock around blocking msg_queue methods. - - * src/python/gnuradio/packet_utils.py (make_packet): conditionally - add padding such that final packet is a multiple of 512 bytes on the USB. - -2005-11-16 Eric Blossom - - * src/lib/io/gr_message_source.h (class gr_message_source): added - msgq limit to constructor args. - - * src/lib/general/gr_packet_sink.{h,cc,i}: added access code - detection threshold to ctor args. - - * src/lib/filter/gri_mmse_fir_interpolator.{h,cc}: declared interpolate const. - - * src/lib/general/gr_clock_recovery_mm_ff.cc: limit excursions of - omega using omega_relative_limit. Added conditional diagnostic logging. - - * src/lib/runtime/gr_msg_queue.{h,cc}: block when inserting into a - full msg queue. - - * src/lib/filter/gr_fractional_interpolator.cc (general_work): - 1.0 - d_mu -> d_mu to match revised filter defs. - -2005-11-15 Eric Blossom - - * src/lib/io/gr_oscope_guts.{h,cc}, - src/lib/io/gr_oscope_sink_f.{h,cc,i}: Refactored to use messages - and message queues to communicate to Python. This code will never - block waiting for the gui. - * src/lib/io/gr_message_sink.{h,cc,i}: new. A sink that packages up its - input and puts it in a message queue. - -2005-11-14 Eric Blossom - - * doc/Doxyfile.in: updated to latest version. Turned off serveral - options to reduce documentation generation time. - -2005-11-13 Eric Blossom - - * src/python/gnuradio/blksimpl/gmsk2.py, - src/python/gnuradio/blksimpl/gmsk2_pkt.py: new GMSK mod/demod. - * src/python/gnuradio/gruimpl/mathmisc.py: new: gcd, lcm. - * src/python/gnuradio/blksimpl/rational_resampler.py: If neither - taps nor fractional_bw is supplied, provide a reasonable default. - -2005-11-11 Eric Blossom - - * src/lib/filter/qa_gri_mmse_fir_interpolator.cc (t1): revised sign. - - * src/lib/filter/gr_fir_filter_XXX.cc.t (work): if taps updated, return 0. - * src/lib/filter/gr_interp_fir_filter_XXX.cc.t (work): if taps updated, return 0. - -2005-11-09 Matt Ettus - - * src/lib/general/gr_packet_sink.cc (gr_make_packet_sink): new. - slices, correlates for packet access code, checks header and - assembles packets. - -2005-11-09 Eric Blossom - - * src/lib/io/gr_message_source.h: new class. Messages sent to - this class are streamed to its single output. - - * src/lib/runtime/gr_message.{h,cc,i}: removed unused methods; new - constructor from string; get contents as string. - - * src/lib/filter/gri_mmse_fir_interpolator.{h,cc}: renamed from gr_mmse_fir_interpolator. - * src/lib/filter/gr_fractional_interpolator.{h,cc,i}: new. - -2005-11-08 Eric Blossom - - * src/lib/general/gr_crc32.{h,cc,i}: new. ISO 3309 CRC-32 generator. - -2005-11-08 Matt Ettus - - * src/lib/general/gr_threshold_ff.{h,cc,i}: new. - * src/python/gnuradio/blksimpl/standard_squelch.py: new - * src/python/gnuradio/blksimpl/nbfm_rx.py: removed squelch from - block. - -2005-11-07 Eric Blossom - - * src/python/gnuradio/blksimpl/rational_resampler.py - (design_filter): added code to automatically design filter. - - * src/lib/general/gr_firdes.cc (window): fixed Kaiser window. - -2005-10-28 Eric Blossom - - * src/lib/io/gr_oscope_sink_f.cc (gr_oscope_sink_f): fixed del of - unowned variable that was causing double-free. - -2005-10-23 Eric Blossom - - * src/lib/general/gr_nco.h (gr_nco): removed unused local var. - -2005-10-17 Eric Blossom - - * src/lib/general/gr_fxpt_vco.h: use floats instead of double. - Gives 30% speedup on Opteron under gcc 3.3.5 - -2005-10-17 Stephane Fillod - - * src/lib/general/gr_fxpt_nco.h, src/lib/general/gr_nco.h, - src/lib/general/gr_sig_source_X.cc.t: set primitives in shape - for an eventual simd speedup. fix bug in sincos() of gr_nco.h. - - * src/lib/general/Makefile.am, src/lib/general/gr_vco.h, - src/lib/general/gr_vco_f.cc, src/lib/general/gr_vco_f.h, - src/lib/general/qa_gr_fxpt_vco.h, src/lib/general/qa_gr_fxpt_vco.cc, - src/lib/general/qa_general.cc, src/tests/benchmark_vco.cc, - src/lib/general/gr_fxpt_vco.h: make use of fixed point cosine for VCO, - with appropriate QA code, set primitives in shape for an eventual - simd speedup. - * src/lib/general/qa_gr_fxpt_vco.cc, src/lib/general/gr_vco.h, - src/lib/general/qa_gr_fxpt_vco.h, src/lib/general/gr_fxpt_vco.h: new - - * README: reference gr-audio-jack, gr-audio-windows and gr-comedi - -2005-10-12 Eric Blossom - - * src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.{h,cc}: resurrected - rev 1.1 then added check for contiguous mapping. - * src/lib/runtime/gr_vmcircbuf.cc: enable gr_vmcircbuf_mmap_tmpfile. - -2005-10-11 Eric Blossom - - * src/lib/runtime/gr_vmcircbuf_mmap_shm_open.cc - (gr_vmcircbuf_mmap_shm_open): corrected error message. - -2005-10-10 Eric Blossom - - * src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.{h,cc}: removed. - -2005-10-10 Stephane Fillod - - * src/lib/general/gr_check_counting_s.cc, - src/lib/general/gr_check_lfsr_32k_s.cc, - src/lib/general/gr_vector_source_X.cc.t, - src/lib/runtime/gr_vmcircbuf_createfilemapping.cc, - src/lib/runtime/gr_vmcircbuf_mmap_shm_open.cc: compiler warning - silencing. - - * src/lib/general/gr_sig_source_X.cc.t, - src/lib/general/gr_fxpt_nco.h, - src/lib/general/gr_nco.h: added sincos block primitive. - * src/lib/general/qa_gr_fxpt_nco.cc: qa code for new sincos - block primitive. cleanup. - * src/tests/benchmark_nco.cc: benchmark the new sincos block - - * src/tests/Makefile.am: added benchmark_vco - src/tests/benchmark_vco.cc: new - -2005-10-05 Eric Blossom - - * src/python/gnuradio/gr/hier_block.py (hier_block_base.__init__): - reenabled weakref to break circular graph. - * src/python/gnuradio/gr/basic_flow_graph.py (basic_flow_graph), - src/python/gnuradio/gr/flow_graph.py (flow_graph): - removed __slots__ class attribute so we can create weakrefs to - flow graphs. - - * src/python/gnuradio/gr/gr_threading.py: New. Load appropriate bug fix. - * src/python/gnuradio/gr/gr_threading_23.py (Thread.join): bug fixed - version of python 2.3 threading.py. - * src/python/gnuradio/gr/gr_threading_24.py (Thread.join): bug fixed - version of python 2.4 threading.py. - - * src/lib/general/gr_vco_f.{h,cc,i}: new VCO block. - -2005-10-03 Eric Blossom - - * src/python/gnuradio/gr/hier_block.py (hier_block_base.__init__): - backed out use of weakref. - * src/python/gnuradio/gr/scheduler.py (scheduler.wait): backed out - "Control-C fix". - -2005-10-02 Eric Blossom - - * src/python/gnuradio/blksimpl/wfm_tx.py: New. Wide band FM tx block. - -2005-09-29 Eric Blossom - - * src/python/gnuradio/gr/hier_block.py (hier_block_base.__init__): - store weakref to flow_graph to break circular graph so that flow - graph can be reclaimed right away. - - * src/python/gnuradio/gr/flow_graph.py (flow_graph.__del__): call - self.stop() to ensure that i/o devices get shutdown gracefully. - - * src/python/gnuradio/gr/scheduler.py (scheduler.wait): calling - thread.join was keeping us from seeing SIGINT. Replaced with - alternate implementation. - -2005-09-27 Eric Blossom - - * src/python/gnuradio/eng_option.py (check_subdev): removed the - (0, None) and (1, None) results. - -2005-09-21 Eric Blossom - - * src/python/gnuradio/eng_option.py (check_subdev): added new - command line parser type, "subdev", for selecting usrp daughterboards. - -2005-09-17 Krzysztof Kamieniecki - - * src/lib/filter/qa_gr_fir_ccf.cc: alignment fix for gcc 4.x - -2005-08-28 Stephane Fillod - - * config/gr_set_md_cpu.m4, src/lib/filter/Makefile.am: add simd - support for x86_64 platform. - - * src/lib/filter/ccomplex_dotprod_3dnow64.S, - src/lib/filter/ccomplex_dotprod_3dnowext64.S, - src/lib/filter/ccomplex_dotprod_sse64.S, - src/lib/filter/complex_dotprod_3dnow64.S, - src/lib/filter/complex_dotprod_3dnowext64.S, - src/lib/filter/complex_dotprod_sse64.S, - src/lib/filter/fcomplex_dotprod_3dnow64.S, - src/lib/filter/fcomplex_dotprod_sse64.S, - src/lib/filter/float_dotprod_3dnow64.S, - src/lib/filter/float_dotprod_sse64.S, - src/lib/filter/short_dotprod_mmx64.S, - src/lib/filter/cpuid_x86_64.S: new - - * src/lib/filter/ccomplex_dotprod_3dnow.S, - src/lib/filter/ccomplex_dotprod_3dnowext.S, - src/lib/filter/ccomplex_dotprod_sse.S, - src/lib/filter/complex_dotprod_3dnow.S, - src/lib/filter/complex_dotprod_3dnowext.S, - src/lib/filter/complex_dotprod_sse.S, - src/lib/filter/fcomplex_dotprod_3dnow.S, - src/lib/filter/fcomplex_dotprod_sse.S, - src/lib/filter/float_dotprod_3dnow.S, - src/lib/filter/float_dotprod_sse.S, - src/lib/filter/short_dotprod_mmx.S - src/lib/filter/cpuid_x86.S: filename debug info fix, - removed useless emms instruction in pure SSE. - * src/lib/filter/qa_gr_fir_ccc.cc: comment fix - -2005-08-28 Eric Blossom - - * src/lib/general/malloc16.c: fixed 64-bit pointer to int cast problem. - -2005-08-26 Eric Blossom - - * src/python/gnuradio/gr/qa_rational_resampler.py - (test_rational_resampler.test_002_interp): reduced random test - from 10k cases to 1000 cases. The 10k case turns up a single - failure. FIXME figure out why! - - * src/python/gnuradio/gr/qa_fsk_stuff.py - (test_bytes_to_syms.test_simple_framer): fixed test case to - reflect 0x55 trailing tail. - - * src/lib/filter/qa_gr_fir_ccc.cc (test_random_io): Ensure 16-byte - input alignment to meet contract with SIMD ccc kernel. - -2005-08-25 Eric Blossom - - * src/lib/general/gr_simple_correlator.cc: average the samples in - the sync field and use this to set the slicing level for the - payload. This helps account for frequency offsets between the Tx - and Rx sides. - -2005-08-24 Eric Blossom - - * src/lib/general/gr_simple_framer_sync.h: include GRSF_TAIL_PAD - in GRSF_OVERHEAD. - - * src/lib/runtime/gr_single_threaded_scheduler.cc (main_loop): now - only invoke sources if we are not making progress. This avoids - blocking (in most cases) unless we've got nothing better to do. - - * src/lib/filter/gr_freq_xlating_fir_filter_XXX.cc.t - (build_composite_fir): reversed taps to fix problem introduced - when we "rationalized" the tap ordering a while ago. [We are - missing a unit test for this...] - -2005-08-22 Matt Ettus - - * src/python/gnuradio/blksimpl/gmsk.py: - made several changes to the filters on both TX and RX. - The demod filter (integrate_taps) should not average - over multiple samples. In reality, a few samples should - work, so I'm not sure why it doesn't here. - -2005-08-22 Eric Blossom - - * src/lib/general/gr_simple_correlator.cc (general_work): removed - incorrect magic number and replaced with constant expression. - [Almost as embarrassing as a buffer overflow] - -2005-08-21 Eric Blossom - - * src/lib/general/gr_simple_framer_sync.h: added one byte tail - padding to ensure that correlator has a chance to get synced in - case it was later on the previous packet. - - * src/lib/general/gr_simple_correlator.cc (general_work): - corrected to use count_bits64. - -2005-08-19 Eric Blossom - - * doc/Makefile.am: clean-local now uses $(RM) -fr - -2005-08-18 Eric Blossom - - * src/lib/general/gr_count_bits.{h,cc}: new gr_count_bits64. - - * src/lib/general/gr_simple_correlator.{h,cc}, - src/lib/general/gr_simple_framer.{h,cc}, - src/lib/general/gr_simple_framer_sync.h, - src/python/gnuradio/gr/qa_fsk_stuff.py: changed length of SYNC - code from 32 to 64 bits. - -2005-08-16 Andrew Thomas Beck - - * src/lib/runtime/gr_vmcircbuf_createfilemapping.cc (gr_vmcircbuf_createfilemapping): fixes. - -2005-08-15 Eric Blossom - - * src/lib/runtime/gr_single_threaded_scheduler.i, - src/lib/runtime/gr_block_detail.i, src/lib/runtime/gr_buffer.i: - fixes for SWIG 1.3.25. Thanks to Job de Haas for a big clue! - -2005-08-08 Martin Dudok van Heel - - Addded a new block to convert from float to unsigned char. Needed for new tv-reception example. - - * src/lib/general/gr_float_to_uchar.{cc,h,i}: new - * src/lib/general/gri_float_to_uchar.{cc,h}: new - * src/lib/general/Makefile.am: changed. Added gr_float_to_uchar and gri_float_to_uchar. (Also added gr_float_to_char.h which was - forgotten in previous patch to add gr_float_to_char) - * src/lib/general/general.i: changed. Added gr_float_to_uchar and gri_float_to_uchar. - -2005-07-28 Eric Blossom - - * src/lib/general/qa_gr_circular_file.cc (t1): conditionalized - base on HAVE_MMAP. - -2005-07-24 Stephane Fillod - - * src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc: get correct - granularity under Cygwin. - - * src/lib/filter/Makefile.am: renamed .s files to .S in order - to enable preprocessor support in assembly source - * src/lib/general/README: misc status update - * src/lib/filter/assembly.h: new - * src/lib/filter/3dnow_float_dotprod_really_simple.S, - src/lib/filter/3dnow_float_dotprod_simple.S, - src/lib/filter/ccomplex_dotprod_3dnow.S, - src/lib/filter/ccomplex_dotprod_3dnowext.S, - src/lib/filter/ccomplex_dotprod_sse.S, - src/lib/filter/complex_dotprod_3dnow.S, - src/lib/filter/complex_dotprod_3dnowext.S, - src/lib/filter/complex_dotprod_sse.S, - src/lib/filter/fcomplex_dotprod_3dnow.S, - src/lib/filter/fcomplex_dotprod_sse.S, - src/lib/filter/float_dotprod_3dnow.S, - src/lib/filter/float_dotprod_sse.S, - src/lib/filter/short_dotprod_mmx.S, - src/lib/filter/cpuid_x86.S: new, moved from .s files with - added preprocessor macros to handle both ELF and Windows - x86 assembly. - * src/lib/filter/3dnow_float_dotprod_really_simple.s, - src/lib/filter/3dnow_float_dotprod_simple.s, - src/lib/filter/ccomplex_dotprod_3dnow.s, - src/lib/filter/ccomplex_dotprod_3dnowext.s, - src/lib/filter/ccomplex_dotprod_sse.s, - src/lib/filter/complex_dotprod_3dnow.s, - src/lib/filter/complex_dotprod_3dnowext.s, - src/lib/filter/complex_dotprod_sse.s, - src/lib/filter/fcomplex_dotprod_3dnow.s, - src/lib/filter/fcomplex_dotprod_sse.s, - src/lib/filter/float_dotprod_3dnow.s, - src/lib/filter/float_dotprod_sse.s, - src/lib/filter/short_dotprod_mmx.s, - src/lib/filter/cpuid_x86.s: removed (renamed) - - -2005-07-21 Eric Blossom - - * src/lib/filter/gr_fft_filter_fff.cc (compute_sizes): turned off - debugging output. - -2005-07-20 Eric Blossom - - * src/python/gnuradio/blksimpl/filterbank.py: documented channel - number to frequency mapping. Fixed a couple of problems related - to reversing filter tap order. - -2005-07-20 Martin Dvh - - * src/lib/runtime/gr_vmcircbuf_createfilemapping.{h,cc}: new. - Native implementation for Windows NT/W2K/XP. - * config/gr_python.m4: MinGW mods. - -2005-07-19 Eric Blossom - - * src/lib/filter/gr_fft_filter_fff.{h,cc,i}: new. Work in - progress. Not yet ready for prime time. - - * src/lib/runtime/gr_single_threaded_scheduler.cc: fixed spinning when - sink's upstream was done, but there was a non-zero but too small - amount of data left in the sink's input buffer. - -2005-07-18 Stephane Fillod - - * config/gr_libgnuradio_core_extra_ldflags.m4, - config/gr_no_undefined.m4, config/gr_python.m4: mods for MinGW. - -2005-07-17 Eric Blossom - - * src/lib/filter/gr_rational_resampler_base_XXX.{h,cc,i}: new. - - * src/python/gnuradio/blksimpl/rational_resampler.py - (rational_resampler_ccc.__init__): new. High-level wrapper for - gr.rational_resampler_base_??? - -2005-07-15 Eric Blossom - - * src/lib/filter/gr_fft_filter_ccc.cc, src/lib/filter/gr_fir_XXX.h.t, - src/lib/filter/gr_fir_ccc_simd.cc, src/lib/filter/gr_fir_ccc_simd.h, - src/lib/filter/gr_fir_ccf_simd.cc, src/lib/filter/gr_fir_ccf_simd.h, - src/lib/filter/gr_fir_fcc_simd.cc, src/lib/filter/gr_fir_fcc_simd.h, - src/lib/filter/gr_fir_fff_simd.cc, src/lib/filter/gr_fir_fsf_simd.cc, - src/lib/filter/gr_fir_scc_simd.cc, src/lib/filter/gr_fir_scc_simd.h, - src/lib/filter/gr_hilbert_fc.cc, src/lib/filter/gr_interp_fir_filter_XXX.cc.t, - src/lib/filter/gr_mmse_fir_interpolator.cc, src/lib/filter/qa_ccomplex_dotprod_x86.cc, - src/lib/filter/qa_gr_fir_ccc.cc, src/lib/filter/qa_gr_fir_ccf.cc, - src/lib/filter/qa_gr_fir_fcc.cc, src/lib/filter/qa_gr_fir_fff.cc, - src/lib/filter/qa_gr_fir_scc.cc, src/lib/general/Makefile.am, - src/lib/general/gr_firdes.cc, src/lib/general/gr_firdes.h, - src/lib/general/gr_firdes.i, src/python/gnuradio/gr/qa_filter_delay_fc.py, - src/python/gnuradio/gr/qa_interp_fir_filter.py: reversed order of - "taps" arguments constructors and set_taps, fixed taps() so it - returns the right order. We now require the "right" order for - taps, instead of the reversed order ("dot product order") we used to - require. - -2005-07-13 Martin Dvh - - * config/gr_check_createfilemapping.m4, - config/gr_libgnuradio_core_extra_ldflags.m4: new files - * configure.ac, config/Makefile.am, src/lib/Makefile.am: added - support for extra ld flags and future createfilemapping - factory. - * src/lib/io/gr_file_source.cc, src/lib/io/gr_file_sink.cc: - binary mode support under Windows. - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac, src/lib/Makefile.am: mods for x86_64, $(NO_UNDEFINED) - - * src/python/gnuradio/gr/qa_complex_to_xxx.py: loosened up passing - threshold so that we pass on x86_64. - -2005-06-23 Eric Blossom - - * src/lib/runtime/gr_error_handler.cc: added #include - -2005-06-19 Eric Blossom - - * src/lib/runtime/gr_single_threaded_scheduler.cc (main_loop): - added diagnostic logging. Fixed problem where data was dribbling - through pipeline. - - * src/lib/general/gr_fxpt.cc: gcc 4.x fix. - -2005-06-16 Eric Blossom - - * src/lib/general/gr_nco.h: increase precision: float->double. - * src/lib/general/qa_gr_fxpt_nco.h: changed initial test frequency - -2005-06-16 Stephane Fillod - - * gnuradio-core.pc.in, src/lib/Makefile.am, src/lib/atsc/Makefile.am, - src/lib/filter/Makefile.am, src/lib/general/Makefile.am, - src/lib/runtime/Makefile.am, src/tests/Makefile.am: put qa code - in separate library. - -2005-06-12 Eric Blossom - - * src/python/gnuradio/blksimpl/filterbank.py: new. DFT filterbank. - * src/lib/general/gr_vector_to_streams.{h,cc,i}: new. - * src/lib/general/gr_streams_to_vector.{h,cc,i}: new. - * src/lib/general/gr_streams_to_stream.{h,cc,i}: new. Convert - streams of 1 item into a stream of N items. - * src/lib/general/gr_stream_to_streams.{h,cc,i}: new. Convert - a stream of N items into N streams of 1 items. - -2005-06-11 Eric Blossom - - * src/lib/general/gr_nlog10_ff.{h,cc,i}: added addition constructor arg, - k, that is added to the return value. Handy for normalizing FFTs. - - * src/lib/filter/gr_fft_filter_ccc.{h,cc,i}: new. FFT based FIR filtering. - -2005-06-10 Eric Blossom - - * src/python/gnuradio/gr/flow_graph.py (buffer_sizes.allocate), - src/python/gnuradio/gr/basic_flow_graph.py (downstream_verticies_port): - modified to take into account downstream block decimation ratio. - This allows us to compute big FFTs, FIRs with lots of taps, etc. - -2005-05-18 Eric Blossom - - * src/lib/runtime/gr_block.{h,cc,i}: new start/stop methods. These are - useful for minimizing latency due to startup overhead. - * src/lib/runtime/gr_single_threaded_scheduler.cc: call new methods. - -2005-05-18 John Gilmore - - * src/python/gnuradio/gruimpl/hexint.py: new. Convert hex - constants to negative ints for long ints >= 2**31. - -2005-05-11 Eric Blossom - - * src/lib/runtime/gr_vmcircbuf_sysv_shm.cc - (gr_vmcircbuf_sysv_shm): add read-only guard page on either side - of buffer. - - * src/lib/general/gr_throttle.{h,cc,i}: new block to rate-limit - samples. Mostly useful where there's nothing stopping us from - sucking down all CPU. E.g., reading from files, gr.sig_source, etc. - -2005-05-09 Stephane Fillod - - * src/lib/filter/fcomplex_dotprod_{3dnow,sse}.s, - src/lib/filter/fcomplex_dotprod_x86.h, - src/lib/filter/gr_fir_ccf_simd.{cc,h}, - src/lib/filter/gr_fir_ccf_x86.{cc,h}, - src/lib/filter/gr_fir_fcc_simd.{cc,h}, - src/lib/filter/gr_fir_fcc_x86.{cc,h}, - src/tests/benchmark_dotprod_ccf.cc, - src/tests/benchmark_dotprod_fsf.cc: new files - * src/lib/filter/Makefile.am, src/tests/Makefile.am, - src/lib/filter/gr_fir_sysconfig_x86.{cc,h}: support for FCC and - CCF filter speedup - * src/tests/benchmark_dotprod_{ccc,fcc,scc}.cc: copy/paste fixes - which should not change benchmark results - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - * src/lib/runtime/gr_error_handler.cc, src/lib/runtime/gr_local_sighandler.{h,cc}, - src/lib/runtime/gr_vmcircbuf.cc, src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc: - modifications for Cygin, MinGW - -2005-04-27 Eric Blossom - - * src/lib/general/gr_fake_channel_coder_pp.{h,cc,i}: new classes - the pretend to do channel encoding and decoding, but really only - add and strip padding... - - * src/lib/runtime/gr_buffer.cc (allocate_buffer): cleaned up formatting - on allocation warning message. - - * src/python/gnuradio/blksimpl/digital_voice.py: GSM vocoder + GMSK. - -2005-04-03 Eric Blossom - - * src/lib/io/gr_oscope_guts.cc (found_trigger): fixed trigger - problem where value was exactly equal to trigger value. - -2005-03-29 Eric Blossom - - * src/python/gnuradio/blksimpl/gmsk.py: new GMSK mod and demod - from Joshua Lackey - -2005-03-29 Ramakrishnan Muthukrishnan - - * src/lib/filter/gr_filter_delay_fc.{h,cc,i}, - src/python/gnuradio/gr/qa_filter_delay_fc.py: New block that - pairs a filter with a delay. - -2005-03-26 Eric Blossom - - * src/lib/runtime/gr_dispatcher.{h,cc,i}, - src/lib/runtime/gr_select_handler.{h,cc,i}: new. Framework for - callbacks based on select(2). - - * src/lib/runtime/gr_error_handler.{h,cc,i}: new. - -2005-03-14 Eric Blossom - - * src/lib/general/gr_complex_to_xxx.{h,cc,i}: now support - vector length argument, vlen. - * src/lib/general/gr_nlog10_ff.{h,cc,i}: new. - * src/lib/general/gr_parallel_to_serial.{h,cc,i}: new. - * src/lib/filter/gr_single_pole_iir_filter_ff.{h,cc,i}: new - * src/python/gnuradio/gr/qa_single_pole_iir.py: new - * src/python/gnuradio/gr/qa_nlog10.py: new - -2005-03-08 Eric Blossom - - * src/python/gnuradio/gr/qa_fsk_stuff.py: enabled simple_framer qa code. - * src/lib/general/gr_simple_framer.{h,cc}: added forecast method. - -2005-03-07 Eric Blossom - - * configure.ac: test for trunc and work around if missing. - -2005-03-02 Eric Blossom - - * src/python/gnuradio/blks/__init__.py, src/python/gnuradio/blksimpl/__init__.py, - src/python/gnuradio/gru/__init__.py, - src/python/gnuradio/gruimpl/__init__.py: refactored organization - so that hierarchical blocks are physically contained in the - blkimpl directory, but that for convenience in naming, all blocks - appear in the gnuradio.blks package. Same story for gruimpl vs gru. - - Rearranged a bunch of stuff under src/python. CVS sucks! - -2005-02-28 Eric Blossom - - * src/lib/general/gr_frequency_modulator_fc.cc (work): fixed - floating point loss of precision. - * src/lib/general/gr_simple_correlator.cc (general_work): fixed - bug that had it processing only a single sample at a time. - -2005-02-25 Matt Ettus - - * lib/general/Makefile.am, lib/general/general.i, - lib/general/gr_rms_[ff,cf].[cc,h,i]: new rms measuring block - -2005-02-25 Eric Blossom - - * python/gnuradio/gr/qa_mute.py, lib/general/gr_mute_XX.cc.t, - lib/general/gr_mute_XX.h.t, lib/general/gr_mute_XX.i.t: new block. - * lib/general/Makefile.am, lib/general/Makefile.gen, - lib/general/general_generated.i, lib/general/generate_common.py: - mods to generate new block. - -2005-02-23 Eric Blossom - - * src/python/gnuradio/gr/hier_block.py: new. support for - hierarchical signal processing blocks. - * src/python/gnuradio/gr/basic_flow_graph.py, - src/python/gnuradio/gr/qa_basic_flow_graph.py: modified to support - hierarchical signal processing blocks. - -2005-02-22 Eric Blossom - - * src/lib/general/gr_simple_squelch_cc.{h,cc,i}: new. - - * src/lib/runtime/gr_message.{h,cc,i}, - src/lib/runtime/gr_msg_handler.{h,cc,i}, - src/lib/runtime/gr_msg_queue.{h,cc,i}, - src/lib/runtime/gr_timer.h: new. work-in-progress. - -2005-02-09 Eric Blossom - - * src/lib/io/gr_file_descriptor_source.{h,cc}(work): reworked to - return as soon as any data is available. This make it much more - friendly for reading sockets, named pipes, etc. - -2005-02-07 Eric Blossom - - * src/python/gnuradio/gr/basic_flow_graph.py (coerce_endpoint): - fix exception message. - -2005-02-06 Eric Blossom - - * src/python/gnuradio/gr/basic_flow_graph.py - (basic_flow_graph.connect): connect now takes >= 2 args, per - Thomas Traber's suggestion. - * src/python/gnuradio/gr/qa_flow_graph.py, - src/python/gnuradio/gr/qa_basic_flow_grapy.py: additional test code. - -2005-02-05 Eric Blossom - - * src/python/gnuradio/gr/basic_flow_graph.py - (basic_flow_graph.connect): removed unnecessary None - -2005-02-02 Chuck Swiger - - * src/lib/io/gr_file_source.{h,cc,i}: added seek method. - -2005-01-29 Eric Blossom - - * src/lib/runtime/gr_io_signature.i: mods for SWIG 1.3.24 - -2005-01-24 Eric Blossom - - * src/python/gnuradio/freqz.py (freqz): New. Compute frequency - response of filter. - * src/python/gnuradio/gnuplot_freqz.py: New. Plot output of freqz. - -2005-01-17 Eric Blossom - - * src/lib/runtime/gr_single_threaded_scheduler.cc (main_loop): - Make better initial estimate of noutput_items when current block - is a decimator. Removed old diagnostic code. - - * src/lib/general/gr_vector_source_X.cc.t (work): reorganized the - repeat case so that we always return the number of items requested. - This fixes the excessive latency we were seeing in - spectrum_inversion.py - - * src/python/gnuradio/gr/flow_graph.py: Set noutputs correctly. - * src/python/gnuradio/gr/qa_flow_graph.py: Test value of noutputs. - -2005-01-16 Eric Blossom - - * src/lib/runtime/gr_single_threaded_scheduler.cc (main_loop): - check for situation where block is requesting more input data than - we will ever provide. - - * src/python/gnuradio/gr/flow_graph.py (buffer_sizes.allocate): - set minimum buffersize to 2 * output_multiple() - - * src/lib/runtime/gr_buffer.cc (space_available): fixed degenerate - case to be consistent with normal case. - -2005-01-01 Eric Blossom - - * src/lib/io/sdr_1000.i (class sdr_1000_base): removed default arg - to work around SWIG 1.3.23 bug. - -2004-12-22 Eric Blossom - - * src/lib/general/qa_gr_fxpt.cc (t0): disabled float_to_fixed test - to avoid spurious failures. - -2004-12-21 Eric Blossom - - * src/lib/general/gr_fxpt.h (class gr_fxpt): added explicit float cast. - * src/lib/general/Makefile.am (grinclude_HEADERS): added gr_fxpt_nco.h - -2004-12-18 Eric Blossom - - * src/lib/general/gr_fxpt.{h,cc},src/lib/general/gr_fxpt_nco.{h,cc}, - src/lib/general/qa_gr_fxpt.{h,cc},src/lib/general/qa_gr_fxpt_nco.{h,cc}, - src/tests/benchmark_nco.cc: new. Faster sine and cosine - calculation. Uses table lookup with linear interpolation. This - is about 3x faster than the original code. - -2004-12-17 Eric Blossom - - * src/lib/general/Makefile.am (swiginclude_HEADERS): fixed typo. - * src/lib/general/gr_deinterleave.{h,cc,i}: new. - -2004-12-11 Eric Blossom - - * src/lib/general/gr_interleave.{h,cc,i}: new. - -2004-12-10 Eric Blossom - - * src/python/gnuradio/eng_option.py (check_intx): now parses hex - numbers too. - -2004-12-09 Eric Blossom - - * src/lib/filter/Makefile.am: fixed problem with gr_hilbert_fc on - OS/X (it was in the wrong place in the makefile). Now builds and - checks on OS/X. - -2004-12-06 Ramakrishnan Muthukrishnan - - * src/lib/filter/Makefile.am, src/lib/general/Makefile.am, - src/python/gnuradio/Makefile.am, - src/python/gnuradio/gr/Makefile.am: added *.pyc to CLEANFILES - -2004-11-30 Eric Blossom - - * src/python/gnuradio/gr/Makefile.am, configure.ac: modified to - no longer require run_test_trampoline. Now uses AC_CONFIG_COMMANDS to - set execute bit on run_tests. - * src/python/gnuradio/gr/run_test_trampoline: removed. - - * src/lib/filter/Makefile.am (swiginclude_HEADERS): fix typo in gr_hilbert_fc.i - -2004-11-27 Eric Blossom - - * src/python/gnuradio/gr/qa_hilbert.py: new - * src/lib/general/gr_firdes.i: moved from filter to general. - * src/lib/general/gr_firdes.{h,cc}: new method: reverse. - * src/lib/filter/gr_hilbert_fc.i: new. - * src/lib/filter/gr_hilbert_fc.cc: ensure ntaps is odd. - -2004-11-08 Stephane Fillod - - * src/lib/filter/Makefile.am, src/tests/Makefile.am, - src/lib/filter/complex_dotprod_generic.cc, - src/lib/filter/gr_fir_sysconfig_x86.{cc,h}, - src/lib/filter/qa_dotprod_x86.cc, src/lib/filter/qa_filter.cc: - added support for x86 SIMD CCC dotproduct. - * src/lib/filter/ccomplex_dotprod_3dnow.s, - src/lib/filter/ccomplex_dotprod_3dnowext.s, - src/lib/filter/ccomplex_dotprod_generic.{cc,h}, - src/lib/filter/ccomplex_dotprod_sse.s, - src/lib/filter/ccomplex_dotprod_x86.h, - src/lib/filter/gr_fir_ccc_simd.{cc,h}, - src/lib/filter/gr_fir_ccc_x86.{cc,h}, - src/lib/filter/qa_ccomplex_dotprod_x86.{cc,h}, - src/lib/filter/qa_gr_fir_ccc.{cc,h}, - src/tests/benchmark_dotprod.cc, - src/tests/benchmark_dotprod_{ccc,fcc,scc}.cc: new - -2004-11-08 Eric Blossom - - * src/lib/runtime/gr_block.h: new methods: set_input_signature and - set_output_signature. - -2004-11-04 Eric Blossom - - * configure.ac: upped version to 2.3cvs - - * configure.ac: set version to 2.3. Made release. - * src/python/gnuradio/audio.py (__init__): raise error if no audio - module found. - -2004-11-02 Eric Blossom - - * src/lib/runtime/gr_local_sighandler.cc (name): conditionalized - based on signal names. - -2004-10-30 Eric Blossom - - * src/lib/runtime/gr_local_sighandler.{h,cc}: new. get and set - signal handlers. - * src/lib/runtime/gr_vmcircbuf.cc (test_factory): install handlers - for SIGBUS and SIGSEGV while running tests. - -2004-10-18 Stephane Fillod - - * config/gr_pwin32.m4, src/lib/runtime/gr_preferences.cc: proper - detect Sleep() support, check for mkdir that takes only one arg - under win32. - * src/lib/runtime/gr_io_signature.cc, - src/lib/runtime/gr_io_signature.h, - src/lib/runtime/gr_io_signature.i, - src/lib/runtime/qa_gr_io_signature.cc: resolve a clash with - INFINITE already defined. - * src/lib/runtime/gr_pagesize.cc: declare missing prototype of - getpagesize() under win32. - -2004-10-18 Eric Blossom - - * src/python/gnuradio/gr/run_tests.in: allow VPATH building. - -2004-10-18 Stephane Fillod - - * configure.ac, src/lib/filter/Makefile.am, - src/lib/general/Makefile.am: allow VPATH building. - -2004-10-17 Eric Blossom - - * doc/Makefile.am (install-data-local): install html documentation. - * src/lib/filter/gr_iir_filter_ffd.cc (gr_iir_filter_ffd): removed - debug message. - * src/python/gnuradio/gr/run_tests.in: changed == to = for POSIX - compatibility. - * src/python/gnuradio/gr/qa_basic_flow_graph.py: use /usr/bin/env - to find python. - -2004-10-13 Eric Blossom - - * configure.ac: upped rev to 2.2cvs - -2004-10-11 Eric Blossom - - * configure.ac: bumped rev to 2.2, make release - * Makefile.am (EXTRA_DIST): added config.h.in - -2004-10-07 Eric Blossom - - * src/python/gnuradio/lmx2306.py: now works! - -2004-09-29 Eric Blossom - - * src/lib/filter/gri_iir.h: renamed from gr_iir.h. Also, changed - the sign back. We're consistent with Oppenheim and Schafer, - "Discrete-Time Signal Processing." Documented exactly what we - compute. Faster delay line implementation. - * src/lib/filter/gr_iir_filter_ffd.{h,cc,i}: new direct form IIR block. - -2004-09-23 Eric Blossom - - * config/usrp_fusb_tech.m4, config/bnv_have_qt.m4, config/cppunit.m4, - config/gr_check_mc4020.m4, config/gr_check_usrp.m4, config/gr_doxygen.m4, - config/gr_gprof.m4, config/gr_scripting.m4, config/gr_set_md_cpu.m4, - config/pkg.m4, config/usrp_fusb_tech.m4: added additional quoting - to first arg of AC_DEFUN to silence automake warning. - -2004-09-22 Eric Blossom - - * src/lib/io/gr_file_descriptor_sink.cc: added missing #include - * src/lib/io/gr_file_descriptor_source.cc: added missing #include - -2004-09-21 Matthew Hall - - * src/gnu/lib/gr/gr_iir.h: rewrote ctor docs. Fixed sign error - in filter method. Now gr_iir uses Direct Form I of IIR. - -2004-09-19 Eric Blossom - - * src/lib/general/gr_complex_to_xxx.{h,cc,i}: new blocks. - * src/python/gnuradio/gr/qa_complex_xxx.py: new qa code. - - * src/lib/general/gr_simple_correlator.{h,cc,i}: payload size is - now in bytes, not bits. - * src/lib/general/gr_simple_framer.{h,cc,i}: payload size is - now in bytes, not bits. - - * src/lib/swig/Makefile.am: now tracks swig .i file dependencies. - * src/lib/swig/gnuradio.i: simplification and cleanup. - -2004-09-18 Eric Blossom - - These modifications happened sometime between 2004-09-08 and 2004-09-18. - The details are lost in the swirl around preparing the TAPR DCC. - - * src/lib/filter/gr_interp_fir_filter_XXX.{h,cc,i}.t: new - * src/lib/filter/generate_gr_interp_fir_filter_XXX.py: new - * src/lib/filter/generate_all.py: modified for to generate interpolating fir filter - * src/lib/general/gr_bytes_to_syms.{h,cc,i}: new - * src/lib/general/gr_frequency_modulator_fc.{h,cc,i}: new - * src/lib/general/gr_simple_framer.{h,cc,i}: new - * src/lib/general/gr_simple_framer_sync.h: new - * src/lib/general/gr_simple_correlator.{h,cc,i}: new - * src/lib/io/gr_oscope_guts.{h,cc}: new - * src/lib/io/gr_oscope_sink_{f,x}.{h,cc}: new - * src/lib/io/gr_trigger_mode.h: new - * src/lib/io/ppio.i: new - - The following changes are related to moving from SWIG 1.3.21 to 1.3.22 - - * src/lib/runtime/gr_block_detail.i: removed unneccesary global decl of friend. - * src/lib/runtime/gr_buffer.i: removed unneccesary global decl of friend. - * src/lib/runtime/gr_io_signature.i: removed unneccesary global decl of friend. - * src/lib/runtime/gr_single_threaded_scheduler.i: removed unneccesary global decl of friend. - * src/lib/swig/gnuradio.i: mods for improved STL support - - * src/lib/runtime/gr_types.h: new typedefs - * src/lib/swig/gen-swig-bug-fix: new. generate gnuradio_swig_bug_workaround.h - - * src/python/gnuradio/eng_notation.py: new - * src/python/gnuradio/grutil.py: new - * src/python/gnuradio/gr_unittest.py: new subclass of unittest - * src/python/gnuradio/lmx2306.py: new. Control National PLL synthesizer - * src/python/gnuradio/microtune.py: new. Command line interface - to microtune boards. - * src/python/gnuradio/gr/qa_frequency_modulator.py: new - * src/python/gnuradio/gr/qa_fsk_stuff.py: new - * src/python/gnuradio/gr/qa_head.py: new - * src/python/gnuradio/gr/qa_interp_fir_filter.py: new - * src/python/gnuradio/gr/qa_sig_source.py: new - -2004-09-08 Eric Blossom - - * src/python/gnuradio/gr/basic_flow_graph.py - (basic_flow_graph.validate): now calls check_topology. - * src/lib/runtime/gr_block.{h,cc,i} (check_topology): new method. - - * src/lib/general/gr_short_to_float.{h,cc,i}: new - * src/lib/general/gr_float_to_short.{h,cc,i}: new - -2004-08-26 Eric Blossom - - * src/lib/general/gr_fft_vfc.{h,cc,i}: new - * src/lib/general/gr_fft_vcc.{h,cc,i}: new - * src/lib/general/gri_fft.{h,cc}: renamed from gr_fft.{h,cc} - * src/lib/general/gr_serial_to_parallel.{h,cc,i}: new - * src/lib/general/gr_keep_one_in_n.{h,cc,i}: new - -2004-08-25 Eric Blossom - - * src/lib/io/gr_file_descriptor_source.{h,cc,i}: new - * src/lib/io/gr_file_descriptor_sink.{h,cc,i}: new - -2004-08-19 Eric Blossom - - * src/lib/general/gr_sig_source_X.cc.t (work): performance tweak - for constant case. - - * src/python/gnuradio/eng_option.py (check_eng_float): support - engineering notation in option parsing. E.g., 32k, 106.5M - -2004-08-18 Eric Blossom - - * src/python/gnuradio/gr/scheduler.py, - src/python/gnuradio/gr/basic_flow_graph.py, - src/python/gnuradio/gr/flow_graph.py, - src/python/gnuradio/gr/qa_flowgraph.py: modified to partition - graphs and assign separate threads to each disjoint set of - verticies. - - -2004-08-05 Eric Blossom - - * src/lib/general/gr_lfsr_32k_source_s.{h,cc,i}: new. - - * src/lib/general/gr_check_counting_s.{h,cc,i}: renamed from gr_counting_sink. - * src/lib/general/gri_lfsr_15_1_0.h: new LFSR generator with - period 32K-1 bits. - * src/lib/general/gri_lfsr_32k.h: new LFSR generator with period - 32K bits. - * src/lib/general/gr_counting_sink_s.{h,cc,i}: new. checks that - it's input is a counting sequence. - * src/lib/filter/Makefile.am: added missing .t files - -2004-07-31 Eric Blossom - - * src/lib/general/gr_vector_source_X.{h,cc,i}.t: added repeat - argument to constructor. - -2004-07-30 Eric Blossom - - * src/lib/general/gr_sig_source_X.cc.t (work): now use gr_sincos - to compute both at same time. - - * src/lib/general/gr_nco.h (gr_nco): renamed method cossin -> sincos - and use gr_sincos to compute value. - - * configure.ac: upped rev to 2.1cvs. - -2004-07-21 Eric Blossom - - * configure.ac: upped rev to 2.1. Made release. - -2004-07-20 Eric Blossom - - * src/python/gnuradio/optfir.py: new. High level routines for optimal FIR design. - * src/lib/general/gr_remez.{h,cc}: new. Parks-McClellan method - for optimal FIR design. - -2004-07-19 Eric Blossom - - * src/lib/general/gri_add_const_ss_generic.cc: new. - * src/lib/general/gri_add_const_ss.h: new. - -2004-07-17 Eric Blossom - - * src/python/gnuradio/gr/flow_graph.py (buffer_sizes.allocate): - take into account output_multiple when computing buffer size. - - * src/lib/runtime/gr_block.i: added output_multiple and - relative_rate to swig interface. - -2004-07-12 Eric Blossom - - * configure.ac: upped rev to 2.0cvs - - * src/python/gnuradio/sdr_1000.py: added back in. - * src/lib/io/sdr_1000.{h,cc}: added back in. - -2004-07-11 Eric Blossom - - * config/gr_boost.m4 (GR_REQUIRE_BOOST_INCLUDES): new m4 macro. - -2004-07-09 Eric Blossom - - * src/lib/audio-oss: removed all files and moved to gr-audio-oss package. - -2004-07-04 Eric Blossom - - * src/lib/general/gr_{add,sub,multiply,divide}_XX.{h,i,cc}.t: new - * src/lib/general/gr_multiply_const_XX.{h,i,cc}.t: new - * src/lib/runtime/gr_block.{h,cc} (class gr_block): renamed - basic_work method to general_work - * src/lib/general/gr_sync_block.{h,cc} (class gr_sync_block): - renamed sync_work method to work. - -2004-07-03 Eric Blossom - - * src/python/gnuradio/gr/scheduler.py: new. Now run graph in - separate thread. - * src/lib/runtime/gr_single_threaded_scheduler.{h,i,cc}: added - stop method. - * src/lib/general/gr_noise_source_X.{h,i,cc}.t: new random noise source. - * config/gr_swig.m4: fail, not warn, if the right version isn't found. - * src/lib/general/gr_random.{h,cc}: moved implementation specific - defines out of header and into implementation. Also moved statics - into class and cleaned up a couple of other annoyances. - -2004-07-01 Eric Blossom - - * src/python/gnuradio/gr/run_tests.in: new. Sets PYTHONPATH - for sucessful testing in build tree; runs all tests. - * src/lib/runtime/{gr_block.i,gr_swig_block_magic.i}: revised to - use lambda expression for repr printing instead of referencing global. - * src/lib/swig/Makefile.am: now generate standalone swig runtime - library that all other swig modules link against. - -2004-06-21 Eric Blossom - - Cleaned up interface to microtune modules and eval boards. - Now uses boost::shared_ptr's. Refactored all uses 4937 and 4702, - and corresponding eval board classes. - - * src/lib/io/i2c.{h,cc}: split into i2c.{h,cc} and i2c_bitbang.{h,cc} - * src/lib/io/eval_board_4702_defs.h: deleted. - * src/lib/io/i2cio.{h,cc}: renamed to i2c_bbio.{h,cc} - * src/lib/io/i2cio_pp.{h,cc}: renamed to i2c_bbio_pp.{h,cc} - -2004-06-13 Eric Blossom - - * src/lib/general/gr_quadrature_demod_cf.{i,h,cc}: new. - - * src/lib/audio-oss/gr_audio_sink_oss.{i,h,cc}: new. - FIXME: should be moved into a different build tree to decouple oss - dependency. - - * src/lib/io/gr_file_{sink,source}.{i,h,cc} io.i: new. - -2004-06-12 Eric Blossom - - * src/lib/general/gr_sig_source_X.{h,cc,i}.t: new - * src/lib/general/gr_sig_source_waveform.h: new - * src/lib/general/gr_head.{h,cc,i}: new - - * src/lib/runtime/gr_block_detail.cc (set_done), gr_buffer.h: - propagate "done" upstream - - -2004-XX-XX Eric Blossom - - Months of changes... This was whatever it took to get - the beginning of the new code base working... - -2004-03-11 Eric Blossom - - * src/lib/runtime/io_signature.{h,cc}, - * src/lib/runtime/qa_io_signature.{h,cc}: new. - -2004-03-08 Eric Blossom - - Removed cppunit from our build tree and updated qa code to work - with cppunit-1.9.12 - - * Makefile.am - * bootstrap - * configure.ac - * config/Makefile.am - * config/cppunit.m4 - * src/lib/Makefile.am - * src/lib/atsc/convolutional_interleaver.h - * src/lib/atsc/qa_atsc_basic_trellis_encoder.cc - * src/lib/atsc/qa_atsc_data_interleaver.cc - * src/lib/atsc/qa_atsc_equalizer_nop.cc - * src/lib/atsc/qa_atsc_fake_single_viterbi.cc - * src/lib/atsc/qa_atsc_fs_correlator.cc - * src/lib/atsc/qa_atsc_randomizer.cc - * src/lib/atsc/qa_atsc_reed_solomon.cc - * src/lib/atsc/qa_atsc_single_viterbi.cc - * src/lib/atsc/qa_atsc_trellis_encoder.cc - * src/lib/atsc/qa_atsc_viterbi_decoder.cc - * src/lib/atsc/qa_convolutional_interleaver.cc - * src/lib/atsc/qa_interleaver_fifo.cc - * src/lib/filter/qa_complex_dotprod_x86.cc - * src/lib/filter/qa_float_dotprod_x86.cc - * src/lib/filter/qa_gr_fir_CCF.cc - * src/lib/filter/qa_gr_fir_FCC.cc - * src/lib/filter/qa_gr_fir_FFF.cc - * src/lib/filter/qa_gr_fir_SCC.cc - * src/lib/filter/qa_gr_mmse_fir_interpolator.cc - * src/lib/filter/qa_sse_float_dotprod.cc - * src/lib/general/qa_gr_circular_file.cc - * src/lib/general/qa_gr_firdes.cc - * src/lib/general/old/qa_gr_fir_SSS.cc - * src/lib/general/old/qa_gr_fir_sse.cc - * src/lib/runtime/qa_gr_vmcircbuf.cc - * src/lib/vrx/VrComplex.h - * src/tests/GrTestSink.cc - * src/tests/GrTestSkippingSink.cc - * src/tests/GrTestSource.cc - - - -This code was derived from gnuradio-0.9 with a massive amount of hacking. - -# -# Copyright 2001,2002,2003,2004,2005,2006 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. -# diff --git a/gnuradio-core/Makefile.am b/gnuradio-core/Makefile.am index 91537dfa..d5447c17 100644 --- a/gnuradio-core/Makefile.am +++ b/gnuradio-core/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2006 Free Software Foundation, Inc. +# Copyright 2001,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -22,13 +22,12 @@ include $(top_srcdir)/Makefile.common EXTRA_DIST = \ - gnuradio-core.conf \ gnuradio-core.pc.in -SUBDIRS = src doc +SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gnuradio-core.pc -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gnuradio-core.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gnuradio-core.conf diff --git a/gnuradio-core/Makefile.in b/gnuradio-core/Makefile.in index cf0badf4..cace4f72 100644 --- a/gnuradio-core/Makefile.in +++ b/gnuradio-core/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2006 Free Software Foundation, Inc. +# Copyright 2001,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,30 +76,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/gnuradio-core.pc.in $(top_srcdir)/Makefile.common \ - ChangeLog THANKS +DIST_COMMON = $(dist_etc_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/gnuradio-core.pc.in \ + $(top_srcdir)/Makefile.common subdir = gnuradio-core ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -112,15 +118,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -137,10 +163,11 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -148,9 +175,11 @@ am__vpath_adj = case $$p in \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(pkgconfigdir)" -etcDATA_INSTALL = $(INSTALL_DATA) +dist_etcDATA_INSTALL = $(INSTALL_DATA) pkgconfigDATA_INSTALL = $(INSTALL_DATA) -DATA = $(etc_DATA) $(pkgconfig_DATA) +DATA = $(dist_etc_DATA) $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -158,10 +187,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -169,9 +197,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -179,6 +214,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -191,73 +228,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -267,49 +297,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -317,15 +387,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -335,16 +548,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -353,72 +584,140 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = \ - gnuradio-core.conf \ gnuradio-core.pc.in -SUBDIRS = src doc +SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gnuradio-core.pc -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gnuradio-core.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gnuradio-core.conf all: all-recursive .SUFFIXES: @@ -426,8 +725,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -459,30 +758,26 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-etcDATA: $(etc_DATA) +install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) - test -z "$(etcdir)" || $(mkdir_p) "$(DESTDIR)$(etcdir)" - @list='$(etc_DATA)'; for p in $$list; do \ + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ - $(etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ done -uninstall-etcDATA: +uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) - @list='$(etc_DATA)'; for p in $$list; do \ + @list='$(dist_etc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ rm -f "$(DESTDIR)$(etcdir)/$$f"; \ done install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)" + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -529,8 +824,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -574,8 +868,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -600,8 +894,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -611,13 +905,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -631,23 +924,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -661,7 +952,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -669,17 +960,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -696,6 +992,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -711,8 +1008,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -724,14 +1020,22 @@ info: info-recursive info-am: -install-data-am: install-etcDATA install-pkgconfigDATA +install-data-am: install-dist_etcDATA install-pkgconfigDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -750,25 +1054,37 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-etcDATA uninstall-info-am \ - uninstall-pkgconfigDATA +uninstall-am: uninstall-dist_etcDATA uninstall-pkgconfigDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-etcDATA install-exec install-exec-am \ - install-info install-info-am install-man install-pkgconfigDATA \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-etcDATA \ - uninstall-info-am uninstall-pkgconfigDATA + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_etcDATA \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/THANKS b/gnuradio-core/THANKS deleted file mode 100644 index 00e44886..00000000 --- a/gnuradio-core/THANKS +++ /dev/null @@ -1,7 +0,0 @@ -GNU Radio THANKS file - -GNU Radio has originally been written by Free Software Foundation, Inc. -Many people have further contributed to GNU Radio by reporting problems, -suggesting various improvements, or submitting actual code. Here is -a list of these people. Help me keep it complete and exempt of errors. - diff --git a/gnuradio-core/doc/Doxyfile.in b/gnuradio-core/doc/Doxyfile.in deleted file mode 100644 index 5a71393e..00000000 --- a/gnuradio-core/doc/Doxyfile.in +++ /dev/null @@ -1,1247 +0,0 @@ -# Doxyfile 1.4.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "GNU Radio @VERSION@" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -# -eb -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = @top_srcdir@/gnuradio-core/src/lib \ - @top_srcdir@/gnuradio-core/src/tests \ - @top_srcdir@/gnuradio-core/doc/other \ - @top_srcdir@/gr-audio-alsa \ - @top_srcdir@/gr-audio-jack \ - @top_srcdir@/gr-audio-oss \ - @top_srcdir@/gr-audio-osx \ - @top_srcdir@/gr-audio-portaudio \ - @top_srcdir@/gr-gsm-fr-vocoder \ - @top_srcdir@/gr-radio-astronomy \ - @top_srcdir@/gr-trellis \ - @top_srcdir@/gr-usrp \ - @top_srcdir@/gr-video-sdl \ - @top_srcdir@/usrp/host - - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = *.h \ - *.cc \ - *.dox - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = CVS .svn .libs .deps \ - @top_builddir@/gnuradio-core/src/lib/swig/gnuradio_swig_python_.cc \ - @top_builddir@/gr-atsc/src/lib/atsc.cc \ - @top_builddir@/gr-audio-alsa/src/audio_alsa.cc \ - @top_builddir@/gr-audio-jack/src/audio_jack.cc \ - @top_builddir@/gr-audio-oss/src/audio_oss.cc \ - @top_builddir@/gr-audio-osx/src/audio_osx.cc \ - @top_builddir@/gr-audio-portaudio/src/audio_portaudio.cc \ - @top_builddir@/gr-audio-windows/src/audio_windows.cc \ - @top_builddir@/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.cc \ - @top_builddir@/gr-radio-astronomy/src/lib/ra.cc \ - @top_builddir@/gr-trellis/src/lib/trellis.cc \ - @top_builddir@/gr-usrp/src/usrp1.cc \ - @top_builddir@/gr-video-sdl/src/video_sdl.cc \ - @top_builddir@/usrp/host/swig/prims.cc - - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = moc_*.cc - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -# -eb -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = letter - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = YES - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -# -eb -XML_PROGRAMLISTING = NO - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = @HAVE_DOT@ - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -# -eb -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/gnuradio-core/doc/Makefile.am b/gnuradio-core/doc/Makefile.am deleted file mode 100644 index 4786b375..00000000 --- a/gnuradio-core/doc/Makefile.am +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright 2001,2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -SUBDIRS = other xml - -man3dir = $(mandir)/man3 -docdir = $(prefix)/share/doc/@PACKAGE@-@VERSION@ - -EXTRA_DIST = - -all-local: prep @generate_docs@ -doc: docs # alias - -docs: prep html/index.html -html/index.html: - @DOXYGEN@ - -prep: - mkdir -p html - -#install-data-local: -# $(mkinstalldirs) $(DESTDIR)$(man3dir) -# @for i in ./man/man3/*.3; do \ -# inst=`basename $$i | sed 's/_/:/g'`; \ -# echo "$(INSTALL_DATA) $$i $(DESTDIR)$(man3dir)/$$inst"; \ -# $(INSTALL_DATA) $$i $(DESTDIR)$(man3dir)/$$inst; \ -# done -# $(mkinstalldirs) $(DESTDIR)$(docdir) -## @for i in ../README ../ChangeLog @PACKAGE@.ps @PACKAGE@.pdf; do \ -## echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)"; \ -## $(INSTALL_DATA) $$i $(DESTDIR)$(docdir); \ -## done -# cp -r html $(docdir) - -install-data-local: - $(mkinstalldirs) $(DESTDIR)$(docdir) - @for i in $(top_srcdir)/README $(top_srcdir)/README.hacking; do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir); \ - done - cp -r html $(DESTDIR)$(docdir) - -uninstall-local: - @for i in README README.hacking; do \ - echo "$(RM) $(DESTDIR)$(docdir)/$$i;"; \ - $(RM) $(DESTDIR)$(docdir)/$$i; \ - done - $(RM) -fr $(DESTDIR)$(docdir)/html - -clean-local: - $(RM) -fr latex html man diff --git a/gnuradio-core/doc/Makefile.in b/gnuradio-core/doc/Makefile.in deleted file mode 100644 index 76e172a5..00000000 --- a/gnuradio-core/doc/Makefile.in +++ /dev/null @@ -1,756 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2001,2005 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 -*- -# -# Copyright 2004,2006,2007 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common -subdir = gnuradio-core/doc -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = Doxyfile -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = $(prefix)/share/doc/@PACKAGE@-@VERSION@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - -# includes -grincludedir = $(includedir)/gnuradio - -# swig includes -swigincludedir = $(grincludedir)/swig - -# Install this stuff in the appropriate subdirectory -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -grpythondir = $(pythondir)/gnuradio -grpyexecdir = $(pyexecdir)/gnuradio - -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern - -# Where to find gnuradio include files in the current build tree -# top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - - -# How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la - -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i - -# How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include - -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la - -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) - -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f -SUBDIRS = other xml -man3dir = $(mandir)/man3 -EXTRA_DIST = -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-core/doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile all-local -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool clean-local mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: install-data-local - -install-exec-am: - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am uninstall-local - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local check \ - check-am clean clean-generic clean-libtool clean-local \ - clean-recursive ctags ctags-recursive distclean \ - distclean-generic distclean-libtool distclean-recursive \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am \ - install-data-local install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am uninstall-local - - -all-local: prep @generate_docs@ -doc: docs # alias - -docs: prep html/index.html -html/index.html: - @DOXYGEN@ - -prep: - mkdir -p html - -#install-data-local: -# $(mkinstalldirs) $(DESTDIR)$(man3dir) -# @for i in ./man/man3/*.3; do \ -# inst=`basename $$i | sed 's/_/:/g'`; \ -# echo "$(INSTALL_DATA) $$i $(DESTDIR)$(man3dir)/$$inst"; \ -# $(INSTALL_DATA) $$i $(DESTDIR)$(man3dir)/$$inst; \ -# done -# $(mkinstalldirs) $(DESTDIR)$(docdir) -# cp -r html $(docdir) - -install-data-local: - $(mkinstalldirs) $(DESTDIR)$(docdir) - @for i in $(top_srcdir)/README $(top_srcdir)/README.hacking; do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir); \ - done - cp -r html $(DESTDIR)$(docdir) - -uninstall-local: - @for i in README README.hacking; do \ - echo "$(RM) $(DESTDIR)$(docdir)/$$i;"; \ - $(RM) $(DESTDIR)$(docdir)/$$i; \ - done - $(RM) -fr $(DESTDIR)$(docdir)/html - -clean-local: - $(RM) -fr latex html man -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-core/doc/other/Makefile.am b/gnuradio-core/doc/other/Makefile.am deleted file mode 100644 index b6641af1..00000000 --- a/gnuradio-core/doc/other/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright 2001,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. -# - -include $(top_srcdir)/Makefile.common - -EXTRA_DIST = \ - tv-channel-frequencies \ - vector_docstub.h \ - shared_ptr_docstub.h \ - omnithread.html \ - omnithread.pdf \ - omnithread.ps \ - group_defs.dox diff --git a/gnuradio-core/doc/other/Makefile.in b/gnuradio-core/doc/other/Makefile.in deleted file mode 100644 index 308387db..00000000 --- a/gnuradio-core/doc/other/Makefile.in +++ /dev/null @@ -1,564 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2001,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. -# - -# -*- Makefile -*- -# -# Copyright 2004,2006,2007 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common -subdir = gnuradio-core/doc/other -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - -# includes -grincludedir = $(includedir)/gnuradio - -# swig includes -swigincludedir = $(grincludedir)/swig - -# Install this stuff in the appropriate subdirectory -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -grpythondir = $(pythondir)/gnuradio -grpyexecdir = $(pyexecdir)/gnuradio - -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern - -# Where to find gnuradio include files in the current build tree -# top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - - -# How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la - -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i - -# How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include - -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la - -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) - -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f -EXTRA_DIST = \ - tv-channel-frequencies \ - vector_docstub.h \ - shared_ptr_docstub.h \ - omnithread.html \ - omnithread.pdf \ - omnithread.ps \ - group_defs.dox - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/doc/other/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-core/doc/other/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-core/doc/other/group_defs.dox b/gnuradio-core/doc/other/group_defs.dox deleted file mode 100644 index 47cce21c..00000000 --- a/gnuradio-core/doc/other/group_defs.dox +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * \defgroup block Signal Processing Blocks - * These are the signal processing blocks, blah, blah blah... - * @{ - */ - -/*! - * \defgroup source Signal Sources - * signal sources docs... - */ - -/*! - * \defgroup sink Signal Sinks - * docs for sinks... - */ - -/*! - * \defgroup filter Filters - */ - -/*! - * \defgroup converter Type Conversions - */ - -/*! @} */ - -/*! \defgroup filter_design Filter Design */ -/*! \defgroup filter_primitive Filter Primitives */ -/*! \defgroup internal Implementation Details */ -/*! \defgroup qa Quality Assurance */ - diff --git a/gnuradio-core/doc/xml/Makefile.in b/gnuradio-core/doc/xml/Makefile.in deleted file mode 100644 index d4a287d2..00000000 --- a/gnuradio-core/doc/xml/Makefile.in +++ /dev/null @@ -1,483 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2005 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = gnuradio-core/doc/xml -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = README doxy2swig.py swig.xsl -CLEANFILES = *.xml combine.xslt compound.xsd index.xsd -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/doc/xml/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-core/doc/xml/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-core/gnuradio-core.pc.in b/gnuradio-core/gnuradio-core.pc.in index cc6c03ac..2c507fa2 100644 --- a/gnuradio-core/gnuradio-core.pc.in +++ b/gnuradio-core/gnuradio-core.pc.in @@ -5,7 +5,7 @@ includedir=@includedir@/gnuradio Name: gnuradio-core Description: GNU Software Radio toolkit -Requires: +Requires: gruel fftw3f gsl gnuradio-omnithread Version: @VERSION@ -Libs: -L${libdir} -lgnuradio-core @FFTW3F_LIBS@ -Cflags: -I${includedir} @DEFINES@ @PTHREAD_CFLAGS@ +Libs: -L${libdir} -lgnuradio-core @BOOST_LDFLAGS@ @BOOST_THREAD_LIB@ @BOOST_DATE_TIME_LIB@ +Cflags: @BOOST_CPPFLAGS@ @BOOST_CXXFLAGS@ -I${includedir} @DEFINES@ diff --git a/gnuradio-core/src/Makefile.in b/gnuradio-core/src/Makefile.in index e526501c..87aa6d49 100644 --- a/gnuradio-core/src/Makefile.in +++ b/gnuradio-core/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,20 +161,22 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -156,9 +184,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -166,6 +201,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -178,73 +215,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -254,49 +284,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -304,15 +374,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -322,16 +535,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -340,63 +571,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = gen_interpolator_taps lib tests python DIST_SUBDIRS = gen_interpolator_taps lib tests python utils all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/gen_interpolator_taps/Makefile.in b/gnuradio-core/src/gen_interpolator_taps/Makefile.in index 95f04977..107376a8 100644 --- a/gnuradio-core/src/gen_interpolator_taps/Makefile.in +++ b/gnuradio-core/src/gen_interpolator_taps/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +58,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -86,25 +82,35 @@ DIST_COMMON = README $(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \ @ENABLE_FORTRAN_TRUE@noinst_PROGRAMS = gen_interpolator_taps$(EXEEXT) subdir = gnuradio-core/src/gen_interpolator_taps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -145,23 +171,25 @@ gen_interpolator_taps_OBJECTS = $(am_gen_interpolator_taps_OBJECTS) am__DEPENDENCIES_1 = @ENABLE_FORTRAN_TRUE@gen_interpolator_taps_DEPENDENCIES = \ @ENABLE_FORTRAN_TRUE@ $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) -LTF77COMPILE = $(LIBTOOL) --tag=F77 --mode=compile $(F77) $(AM_FFLAGS) \ - $(FFLAGS) +LTF77COMPILE = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) F77LD = $(F77) -F77LINK = $(LIBTOOL) --tag=F77 --mode=link $(F77LD) $(AM_FFLAGS) \ - $(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +F77LINK = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(gen_interpolator_taps_SOURCES) DIST_SOURCES = $(am__gen_interpolator_taps_SOURCES_DIST) am__noinst_HEADERS_DIST = simpson.h @@ -172,10 +200,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -183,9 +210,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -193,6 +227,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -205,73 +241,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -281,49 +310,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -331,15 +400,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -349,16 +561,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -367,63 +597,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = praxis.txt simpson.h @ENABLE_FORTRAN_TRUE@noinst_HEADERS = simpson.h @ENABLE_FORTRAN_TRUE@gen_interpolator_taps_SOURCES = gen_interpolator_taps.c objective_fct.c simpson.c praxis.f @@ -436,8 +735,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -470,7 +769,7 @@ clean-noinstPROGRAMS: done gen_interpolator_taps$(EXEEXT): $(gen_interpolator_taps_OBJECTS) $(gen_interpolator_taps_DEPENDENCIES) @rm -f gen_interpolator_taps$(EXEEXT) - $(F77LINK) $(gen_interpolator_taps_LDFLAGS) $(gen_interpolator_taps_OBJECTS) $(gen_interpolator_taps_LDADD) $(LIBS) + $(F77LINK) $(gen_interpolator_taps_OBJECTS) $(gen_interpolator_taps_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -483,22 +782,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simpson.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -518,17 +817,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -540,8 +835,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -551,13 +846,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -571,23 +865,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -598,6 +890,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) @@ -617,6 +912,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -635,7 +931,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -649,12 +945,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -675,20 +979,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS ctags distclean \ + clean-libtool clean-noinstPROGRAMS ctags dist-hook distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/Makefile.am b/gnuradio-core/src/lib/Makefile.am index 6dbeb7c7..fcb4d4ea 100644 --- a/gnuradio-core/src/lib/Makefile.am +++ b/gnuradio-core/src/lib/Makefile.am @@ -24,7 +24,7 @@ include $(top_srcdir)/Makefile.common ## Process this file with automake to produce Makefile.in # We've got to build . before swig -SUBDIRS = missing runtime filter general g72x reed-solomon omnithread io . swig +SUBDIRS = missing runtime filter viterbi general gengen g72x reed-solomon io hier . swig # generate libgnuradio-core.la from the convenience libraries in subdirs @@ -35,22 +35,29 @@ libgnuradio_core_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 libgnuradio_core_qa_la_SOURCES = bug_work_around_6.cc libgnuradio_core_qa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 \ - $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) + $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) + + libgnuradio_core_la_LIBADD = \ filter/libfilter.la \ g72x/libccitt.la \ + viterbi/libviterbi.la \ general/libgeneral.la \ + gengen/libgengen.la \ io/libio.la \ missing/libmissing.la \ - omnithread/libomnithread.la \ reed-solomon/librs.la \ runtime/libruntime.la \ - $(FFTW3F_LIBS) + hier/libhier.la \ + $(OMNITHREAD_LA) \ + $(GRUEL_LA) \ + $(FFTW3F_LIBS) \ + $(GSL_LIBS) \ + $(CBLAS_LIBS) libgnuradio_core_qa_la_LIBADD = \ filter/libfilter-qa.la \ general/libgeneral-qa.la \ runtime/libruntime-qa.la \ - missing/libmissing.la \ libgnuradio-core.la \ $(CPPUNIT_LIBS) diff --git a/gnuradio-core/src/lib/Makefile.in b/gnuradio-core/src/lib/Makefile.in index 7b696169..df484311 100644 --- a/gnuradio-core/src/lib/Makefile.in +++ b/gnuradio-core/src/lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -144,38 +170,49 @@ LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libgnuradio_core_qa_la_DEPENDENCIES = filter/libfilter-qa.la \ general/libgeneral-qa.la runtime/libruntime-qa.la \ - missing/libmissing.la libgnuradio-core.la \ - $(am__DEPENDENCIES_1) + libgnuradio-core.la $(am__DEPENDENCIES_1) am_libgnuradio_core_qa_la_OBJECTS = bug_work_around_6.lo libgnuradio_core_qa_la_OBJECTS = $(am_libgnuradio_core_qa_la_OBJECTS) +libgnuradio_core_qa_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgnuradio_core_qa_la_LDFLAGS) $(LDFLAGS) -o $@ libgnuradio_core_la_DEPENDENCIES = filter/libfilter.la \ - g72x/libccitt.la general/libgeneral.la io/libio.la \ - missing/libmissing.la omnithread/libomnithread.la \ - reed-solomon/librs.la runtime/libruntime.la \ + g72x/libccitt.la viterbi/libviterbi.la general/libgeneral.la \ + gengen/libgengen.la io/libio.la missing/libmissing.la \ + reed-solomon/librs.la runtime/libruntime.la hier/libhier.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libgnuradio_core_la_OBJECTS = bug_work_around_6.lo libgnuradio_core_la_OBJECTS = $(am_libgnuradio_core_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +libgnuradio_core_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgnuradio_core_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libgnuradio_core_qa_la_SOURCES) \ $(libgnuradio_core_la_SOURCES) DIST_SOURCES = $(libgnuradio_core_qa_la_SOURCES) \ $(libgnuradio_core_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -183,10 +220,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -194,9 +230,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -204,6 +247,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -216,73 +261,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -292,49 +330,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -342,15 +420,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -360,16 +581,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -378,66 +617,135 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT # We've got to build . before swig -SUBDIRS = missing runtime filter general g72x reed-solomon omnithread io . swig +SUBDIRS = missing runtime filter viterbi general gengen g72x reed-solomon io hier . swig # generate libgnuradio-core.la from the convenience libraries in subdirs lib_LTLIBRARIES = libgnuradio-core.la libgnuradio-core-qa.la @@ -445,24 +753,29 @@ libgnuradio_core_la_SOURCES = bug_work_around_6.cc libgnuradio_core_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 libgnuradio_core_qa_la_SOURCES = bug_work_around_6.cc libgnuradio_core_qa_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 \ - $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) + $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) libgnuradio_core_la_LIBADD = \ filter/libfilter.la \ g72x/libccitt.la \ + viterbi/libviterbi.la \ general/libgeneral.la \ + gengen/libgengen.la \ io/libio.la \ missing/libmissing.la \ - omnithread/libomnithread.la \ reed-solomon/librs.la \ runtime/libruntime.la \ - $(FFTW3F_LIBS) + hier/libhier.la \ + $(OMNITHREAD_LA) \ + $(GRUEL_LA) \ + $(FFTW3F_LIBS) \ + $(GSL_LIBS) \ + $(CBLAS_LIBS) libgnuradio_core_qa_la_LIBADD = \ filter/libfilter-qa.la \ general/libgeneral-qa.la \ runtime/libruntime-qa.la \ - missing/libmissing.la \ libgnuradio-core.la \ $(CPPUNIT_LIBS) @@ -474,8 +787,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -501,21 +814,21 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: @@ -527,9 +840,9 @@ clean-libLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libgnuradio-core-qa.la: $(libgnuradio_core_qa_la_OBJECTS) $(libgnuradio_core_qa_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libgnuradio_core_qa_la_LDFLAGS) $(libgnuradio_core_qa_la_OBJECTS) $(libgnuradio_core_qa_la_LIBADD) $(LIBS) + $(libgnuradio_core_qa_la_LINK) -rpath $(libdir) $(libgnuradio_core_qa_la_OBJECTS) $(libgnuradio_core_qa_la_LIBADD) $(LIBS) libgnuradio-core.la: $(libgnuradio_core_la_OBJECTS) $(libgnuradio_core_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libgnuradio_core_la_LDFLAGS) $(libgnuradio_core_la_OBJECTS) $(libgnuradio_core_la_LIBADD) $(LIBS) + $(libgnuradio_core_la_LINK) -rpath $(libdir) $(libgnuradio_core_la_OBJECTS) $(libgnuradio_core_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -540,22 +853,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bug_work_around_6.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -566,10 +879,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -601,8 +910,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -646,8 +954,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -672,8 +980,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -683,13 +991,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -703,23 +1010,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -733,7 +1038,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -741,17 +1046,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -768,6 +1078,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -786,7 +1097,7 @@ distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-recursive @@ -800,12 +1111,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: install-libLTLIBRARIES +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -826,25 +1145,37 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES +uninstall-am: uninstall-libLTLIBRARIES -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-recursive ctags ctags-recursive distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-info-am uninstall-libLTLIBRARIES + uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/bug_work_around_6.cc b/gnuradio-core/src/lib/bug_work_around_6.cc index 929c7f81..b829360f 100644 --- a/gnuradio-core/src/lib/bug_work_around_6.cc +++ b/gnuradio-core/src/lib/bug_work_around_6.cc @@ -1,3 +1,3 @@ // if libgrio has no sources, it doesn't get built correctly -static int gr_bug_work_around_6; +static int gr_bug_work_around_6 __attribute__((unused)); diff --git a/gnuradio-core/src/lib/filter/3dnow_float_dotprod_really_simple.S b/gnuradio-core/src/lib/filter/3dnow_float_dotprod_really_simple.S index 52f42705..6050425a 100644 --- a/gnuradio-core/src/lib/filter/3dnow_float_dotprod_really_simple.S +++ b/gnuradio-core/src/lib/filter/3dnow_float_dotprod_really_simple.S @@ -72,14 +72,14 @@ sse_float_dotprod: shll $1, %ecx # count * 2 .p2align 4 -.loop1: +.Loop1: movq (%eax), %mm0 pfmul (%edx), %mm0 pfadd %mm0, %mm4 addl $8, %edx addl $8, %eax decl %ecx - jne .loop1 + jne .Loop1 # at this point mm4 contains partial sums @@ -93,3 +93,7 @@ sse_float_dotprod: .Lfe1: .size sse_float_dotprod,.Lfe1-sse_float_dotprod .ident "Hand coded x86 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/3dnow_float_dotprod_simple.S b/gnuradio-core/src/lib/filter/3dnow_float_dotprod_simple.S index 70f09b38..1097728c 100644 --- a/gnuradio-core/src/lib/filter/3dnow_float_dotprod_simple.S +++ b/gnuradio-core/src/lib/filter/3dnow_float_dotprod_simple.S @@ -72,7 +72,7 @@ sse_float_dotprod: pxor %mm5, %mm5 # mm5 = 0 0 .p2align 4 -.loop1: +.Loop1: movq 0(%eax), %mm0 movq 8(%eax), %mm1 @@ -85,7 +85,7 @@ sse_float_dotprod: addl $16, %edx addl $16, %eax decl %ecx - jne .loop1 + jne .Loop1 # at this point mm4 and mm5 contain partial sums @@ -100,3 +100,7 @@ sse_float_dotprod: .Lfe1: .size sse_float_dotprod,.Lfe1-sse_float_dotprod .ident "Hand coded x86 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/Makefile.am b/gnuradio-core/src/lib/filter/Makefile.am index 4266415f..b7fd0f58 100644 --- a/gnuradio-core/src/lib/filter/Makefile.am +++ b/gnuradio-core/src/lib/filter/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2002,2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2001,2002,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,7 +26,7 @@ include $(top_srcdir)/Makefile.common # other performance critical items # -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libfilter.la libfilter-qa.la @@ -34,7 +34,7 @@ noinst_LTLIBRARIES = libfilter.la libfilter-qa.la # these scripts generate FIR code # -CODE_GENERATOR = \ +code_generator = \ generate_all.py \ generate_gr_fir_XXX.py \ generate_gr_fir_filter_XXX.py \ @@ -62,18 +62,12 @@ CODE_GENERATOR = \ gr_freq_xlating_fir_filter_XXX.h.t \ gr_freq_xlating_fir_filter_XXX.i.t - - -# include $(srcdir)/Makefile.gen -include Makefile.gen - - -$(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR) - PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py - - -BUILT_SOURCES = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC) - +# Source built by Python into $(builddir) +BUILT_SOURCES = \ + $(GENERATED_H) \ + $(GENERATED_I) \ + $(GENERATED_CC) \ + filter_generated.i # ---------------------------------------------------------------- # MD_CPU and MD_SUBCPU are set at configure time by way of @@ -94,7 +88,7 @@ generic_qa_CODE = \ x86_CODE = \ sysconfig_x86.cc \ gr_fir_sysconfig_x86.cc \ - gr_cpu.cc \ + gr_cpu_x86.cc \ gr_fir_ccc_simd.cc \ gr_fir_ccc_x86.cc \ gr_fir_fff_simd.cc \ @@ -143,6 +137,18 @@ x86_qa_CODE = \ qa_complex_dotprod_x86.cc \ qa_ccomplex_dotprod_x86.cc +powerpc_CODE = \ + sysconfig_powerpc.cc \ + gr_fir_sysconfig_powerpc.cc \ + gr_cpu_powerpc.cc \ + gr_fir_fff_altivec.cc \ + gr_altivec.c \ + dotprod_fff_altivec.c + +powerpc_qa_CODE = \ + qa_dotprod_powerpc.cc + + # # include each _CODE entry here... # @@ -152,14 +158,15 @@ EXTRA_libfilter_la_SOURCES = \ $(x86_CODE) \ $(x86_SUBCODE) \ $(x86_64_SUBCODE) \ - $(x86_qa_CODE) + $(x86_qa_CODE) \ + $(powerpc_CODE) \ + $(powerpc_qa_CODE) EXTRA_DIST = \ 3dnow_float_dotprod_really_simple.S \ 3dnow_float_dotprod_simple.S \ - $(CODE_GENERATOR) - + $(code_generator) # work around automake deficiency libfilter_la_common_SOURCES = \ @@ -170,15 +177,12 @@ libfilter_la_common_SOURCES = \ gr_fft_filter_fff.cc \ gr_goertzel_fc.cc \ gr_filter_delay_fc.cc \ - gr_fractional_interpolator.cc \ + gr_fractional_interpolator_ff.cc \ + gr_fractional_interpolator_cc.cc \ gr_hilbert_fc.cc \ gr_iir_filter_ffd.cc \ gr_sincos.c \ gr_single_pole_iir_filter_ff.cc \ - gr_single_pole_avg_filter_ff.cc \ - gr_single_pole_rec_filter_ff.cc \ - gr_single_zero_avg_filter_ff.cc \ - gr_single_zero_rec_filter_ff.cc \ gr_single_pole_iir_filter_cc.cc \ gri_goertzel.cc \ gri_mmse_fir_interpolator.cc \ @@ -195,7 +199,9 @@ libfilter_qa_la_common_SOURCES = \ qa_gr_fir_fff.cc \ qa_gr_fir_ccc.cc \ qa_gr_fir_scc.cc \ - qa_gri_mmse_fir_interpolator.cc + qa_gr_rotator.cc \ + qa_gri_mmse_fir_interpolator.cc \ + qa_gri_mmse_fir_interpolator_cc.cc if MD_CPU_generic libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(generic_CODE) @@ -212,6 +218,11 @@ endif libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(x86_qa_CODE) endif +if MD_CPU_powerpc +libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(powerpc_CODE) +libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(powerpc_qa_CODE) +endif + grinclude_HEADERS = \ $(GENERATED_H) \ @@ -223,29 +234,25 @@ grinclude_HEADERS = \ float_dotprod_generic.h \ float_dotprod_x86.h \ gr_adaptive_fir_ccf.h \ + gr_altivec.h \ gr_cma_equalizer_cc.h \ gr_cpu.h \ gr_fft_filter_ccc.h \ gr_fft_filter_fff.h \ gr_filter_delay_fc.h \ gr_fir_sysconfig_x86.h \ - gr_fractional_interpolator.h \ + gr_fir_sysconfig_powerpc.h \ + gr_fractional_interpolator_ff.h \ + gr_fractional_interpolator_cc.h \ gr_goertzel_fc.h \ gr_hilbert_fc.h \ gr_iir_filter_ffd.h \ gr_rotator.h \ gr_sincos.h \ - gr_single_pole_avg.h \ - gr_single_pole_rec.h \ gr_single_pole_iir.h \ gr_single_pole_iir_filter_ff.h \ - gr_single_pole_avg_filter_ff.h \ - gr_single_pole_rec_filter_ff.h \ - gr_single_zero_avg_filter_ff.h \ - gr_single_zero_rec_filter_ff.h \ - gr_single_pole_iir_filter_cc.h \ - gr_single_zero_avg.h \ - gr_single_zero_rec.h \ + gr_single_pole_iir_filter_cc.h \ + gr_vec_types.h \ gri_goertzel.h \ gri_iir.h \ gri_mmse_fir_interpolator.h \ @@ -257,6 +264,7 @@ grinclude_HEADERS = \ noinst_HEADERS = \ assembly.h \ + dotprod_fff_altivec.h \ gr_fir_scc_simd.h \ gr_fir_scc_x86.h \ gr_fir_fcc_simd.h \ @@ -265,6 +273,7 @@ noinst_HEADERS = \ gr_fir_ccf_x86.h \ gr_fir_ccc_simd.h \ gr_fir_ccc_x86.h \ + gr_fir_fff_altivec.h \ gr_fir_fff_simd.h \ gr_fir_fff_x86.h \ gr_fir_fsf_simd.h \ @@ -279,7 +288,9 @@ noinst_HEADERS = \ qa_gr_fir_fff.h \ qa_gr_fir_ccc.h \ qa_gr_fir_scc.h \ - qa_gri_mmse_fir_interpolator.h + qa_gr_rotator.h \ + qa_gri_mmse_fir_interpolator.h \ + qa_gri_mmse_fir_interpolator_cc.h @@ -291,16 +302,28 @@ swiginclude_HEADERS = \ gr_fft_filter_ccc.i \ gr_fft_filter_fff.i \ gr_filter_delay_fc.i \ + gr_fractional_interpolator_ff.i \ + gr_fractional_interpolator_cc.i \ gr_goertzel_fc.i \ gr_hilbert_fc.i \ gr_iir_filter_ffd.i \ gr_single_pole_iir_filter_ff.i \ - gr_single_pole_avg_filter_ff.i \ - gr_single_pole_rec_filter_ff.i \ - gr_single_zero_avg_filter_ff.i \ - gr_single_zero_rec_filter_ff.i \ gr_single_pole_iir_filter_cc.i \ $(GENERATED_I) +# Do creation and inclusion of other Makefiles last + +# include the srcdir's Makefile.gen; doing this creates an implicit +# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. +include $(srcdir)/Makefile.gen + +# common way for generating local Makefile.gen +makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py +include $(top_srcdir)/Makefile.gen.gen -CLEANFILES = $(BUILT_SOURCES) *.pyc +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(BUILT_SOURCES) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +include $(top_srcdir)/Makefile.par.gen diff --git a/gnuradio-core/src/lib/filter/Makefile.in b/gnuradio-core/src/lib/filter/Makefile.in index eb0c2b50..785d4f87 100644 --- a/gnuradio-core/src/lib/filter/Makefile.in +++ b/gnuradio-core/src/lib/filter/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2002,2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2001,2002,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,51 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# Copyright 2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +102,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,28 +124,39 @@ target_triplet = @target@ DIST_COMMON = README $(grinclude_HEADERS) $(noinst_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.gen \ $(srcdir)/Makefile.in $(swiginclude_HEADERS) \ - $(top_srcdir)/Makefile.common + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.gen.gen \ + $(top_srcdir)/Makefile.par.gen subdir = gnuradio-core/src/lib/filter ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +165,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -139,19 +210,25 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libfilter_qa_la_LIBADD = am__libfilter_qa_la_SOURCES_DIST = qa_filter.cc qa_gr_fir_ccf.cc \ qa_gr_fir_fcc.cc qa_gr_fir_fff.cc qa_gr_fir_ccc.cc \ - qa_gr_fir_scc.cc qa_gri_mmse_fir_interpolator.cc \ - qa_dotprod_generic.cc qa_dotprod_x86.cc \ + qa_gr_fir_scc.cc qa_gr_rotator.cc \ + qa_gri_mmse_fir_interpolator.cc \ + qa_gri_mmse_fir_interpolator_cc.cc qa_dotprod_generic.cc \ + qa_dotprod_powerpc.cc qa_dotprod_x86.cc \ qa_float_dotprod_x86.cc qa_complex_dotprod_x86.cc \ qa_ccomplex_dotprod_x86.cc am__objects_1 = qa_filter.lo qa_gr_fir_ccf.lo qa_gr_fir_fcc.lo \ qa_gr_fir_fff.lo qa_gr_fir_ccc.lo qa_gr_fir_scc.lo \ - qa_gri_mmse_fir_interpolator.lo + qa_gr_rotator.lo qa_gri_mmse_fir_interpolator.lo \ + qa_gri_mmse_fir_interpolator_cc.lo am__objects_2 = qa_dotprod_generic.lo -am__objects_3 = qa_dotprod_x86.lo qa_float_dotprod_x86.lo \ +am__objects_3 = qa_dotprod_powerpc.lo +am__objects_4 = qa_dotprod_x86.lo qa_float_dotprod_x86.lo \ qa_complex_dotprod_x86.lo qa_ccomplex_dotprod_x86.lo -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@am_libfilter_qa_la_OBJECTS = \ -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@ $(am__objects_1) \ -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@ $(am__objects_3) +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@am_libfilter_qa_la_OBJECTS = $(am__objects_1) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@ $(am__objects_4) +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_TRUE@am_libfilter_qa_la_OBJECTS = \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_TRUE@ $(am__objects_1) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_TRUE@ $(am__objects_3) @MD_CPU_generic_TRUE@am_libfilter_qa_la_OBJECTS = $(am__objects_1) \ @MD_CPU_generic_TRUE@ $(am__objects_2) libfilter_qa_la_OBJECTS = $(am_libfilter_qa_la_OBJECTS) @@ -180,24 +257,24 @@ am__libfilter_la_SOURCES_DIST = gr_fir_ccc.cc gr_fir_ccc_generic.cc \ gr_rational_resampler_base_scc.cc gr_adaptive_fir_ccf.cc \ gr_cma_equalizer_cc.cc gr_fft_filter_ccc.cc \ gr_fft_filter_fff.cc gr_goertzel_fc.cc gr_filter_delay_fc.cc \ - gr_fractional_interpolator.cc gr_hilbert_fc.cc \ + gr_fractional_interpolator_ff.cc \ + gr_fractional_interpolator_cc.cc gr_hilbert_fc.cc \ gr_iir_filter_ffd.cc gr_sincos.c \ gr_single_pole_iir_filter_ff.cc \ - gr_single_pole_avg_filter_ff.cc \ - gr_single_pole_rec_filter_ff.cc \ - gr_single_zero_avg_filter_ff.cc \ - gr_single_zero_rec_filter_ff.cc \ gr_single_pole_iir_filter_cc.cc gri_goertzel.cc \ gri_mmse_fir_interpolator.cc gri_mmse_fir_interpolator_cc.cc \ complex_dotprod_generic.cc ccomplex_dotprod_generic.cc \ float_dotprod_generic.c short_dotprod_generic.c \ - sysconfig_generic.cc float_dotprod_sse.S float_dotprod_3dnow.S \ + sysconfig_generic.cc sysconfig_powerpc.cc \ + gr_fir_sysconfig_powerpc.cc gr_cpu_powerpc.cc \ + gr_fir_fff_altivec.cc gr_altivec.c dotprod_fff_altivec.c \ + float_dotprod_sse.S float_dotprod_3dnow.S \ complex_dotprod_3dnowext.S complex_dotprod_3dnow.S \ complex_dotprod_sse.S ccomplex_dotprod_3dnowext.S \ ccomplex_dotprod_3dnow.S ccomplex_dotprod_sse.S \ fcomplex_dotprod_3dnow.S fcomplex_dotprod_sse.S \ short_dotprod_mmx.S cpuid_x86.S sysconfig_x86.cc \ - gr_fir_sysconfig_x86.cc gr_cpu.cc gr_fir_ccc_simd.cc \ + gr_fir_sysconfig_x86.cc gr_cpu_x86.cc gr_fir_ccc_simd.cc \ gr_fir_ccc_x86.cc gr_fir_fff_simd.cc gr_fir_fff_x86.cc \ gr_fir_fsf_simd.cc gr_fir_fsf_x86.cc gr_fir_scc_simd.cc \ gr_fir_scc_x86.cc gr_fir_fcc_simd.cc gr_fir_fcc_x86.cc \ @@ -208,7 +285,7 @@ am__libfilter_la_SOURCES_DIST = gr_fir_ccc.cc gr_fir_ccc_generic.cc \ ccomplex_dotprod_3dnow64.S ccomplex_dotprod_sse64.S \ fcomplex_dotprod_3dnow64.S fcomplex_dotprod_sse64.S \ short_dotprod_mmx64.S cpuid_x86_64.S -am__objects_4 = gr_fir_ccc.lo gr_fir_ccc_generic.lo gr_fir_ccf.lo \ +am__objects_5 = gr_fir_ccc.lo gr_fir_ccc_generic.lo gr_fir_ccf.lo \ gr_fir_ccf_generic.lo gr_fir_fcc.lo gr_fir_fcc_generic.lo \ gr_fir_fff.lo gr_fir_fff_generic.lo gr_fir_filter_ccc.lo \ gr_fir_filter_ccf.lo gr_fir_filter_fcc.lo gr_fir_filter_fff.lo \ @@ -229,70 +306,77 @@ am__objects_4 = gr_fir_ccc.lo gr_fir_ccc_generic.lo gr_fir_ccf.lo \ gr_rational_resampler_base_fff.lo \ gr_rational_resampler_base_fsf.lo \ gr_rational_resampler_base_scc.lo -am__objects_5 = $(am__objects_4) gr_adaptive_fir_ccf.lo \ +am__objects_6 = $(am__objects_5) gr_adaptive_fir_ccf.lo \ gr_cma_equalizer_cc.lo gr_fft_filter_ccc.lo \ gr_fft_filter_fff.lo gr_goertzel_fc.lo gr_filter_delay_fc.lo \ - gr_fractional_interpolator.lo gr_hilbert_fc.lo \ + gr_fractional_interpolator_ff.lo \ + gr_fractional_interpolator_cc.lo gr_hilbert_fc.lo \ gr_iir_filter_ffd.lo gr_sincos.lo \ gr_single_pole_iir_filter_ff.lo \ - gr_single_pole_avg_filter_ff.lo \ - gr_single_pole_rec_filter_ff.lo \ - gr_single_zero_avg_filter_ff.lo \ - gr_single_zero_rec_filter_ff.lo \ gr_single_pole_iir_filter_cc.lo gri_goertzel.lo \ gri_mmse_fir_interpolator.lo gri_mmse_fir_interpolator_cc.lo \ complex_dotprod_generic.lo ccomplex_dotprod_generic.lo \ float_dotprod_generic.lo short_dotprod_generic.lo -am__objects_6 = sysconfig_generic.lo -am__objects_7 = float_dotprod_sse.lo float_dotprod_3dnow.lo \ +am__objects_7 = sysconfig_generic.lo +am__objects_8 = sysconfig_powerpc.lo gr_fir_sysconfig_powerpc.lo \ + gr_cpu_powerpc.lo gr_fir_fff_altivec.lo gr_altivec.lo \ + dotprod_fff_altivec.lo +am__objects_9 = float_dotprod_sse.lo float_dotprod_3dnow.lo \ complex_dotprod_3dnowext.lo complex_dotprod_3dnow.lo \ complex_dotprod_sse.lo ccomplex_dotprod_3dnowext.lo \ ccomplex_dotprod_3dnow.lo ccomplex_dotprod_sse.lo \ fcomplex_dotprod_3dnow.lo fcomplex_dotprod_sse.lo \ short_dotprod_mmx.lo cpuid_x86.lo -am__objects_8 = sysconfig_x86.lo gr_fir_sysconfig_x86.lo gr_cpu.lo \ - gr_fir_ccc_simd.lo gr_fir_ccc_x86.lo gr_fir_fff_simd.lo \ - gr_fir_fff_x86.lo gr_fir_fsf_simd.lo gr_fir_fsf_x86.lo \ - gr_fir_scc_simd.lo gr_fir_scc_x86.lo gr_fir_fcc_simd.lo \ - gr_fir_fcc_x86.lo gr_fir_ccf_simd.lo gr_fir_ccf_x86.lo \ - sse_debug.lo -am__objects_9 = float_dotprod_sse64.lo float_dotprod_3dnow64.lo \ +am__objects_10 = sysconfig_x86.lo gr_fir_sysconfig_x86.lo \ + gr_cpu_x86.lo gr_fir_ccc_simd.lo gr_fir_ccc_x86.lo \ + gr_fir_fff_simd.lo gr_fir_fff_x86.lo gr_fir_fsf_simd.lo \ + gr_fir_fsf_x86.lo gr_fir_scc_simd.lo gr_fir_scc_x86.lo \ + gr_fir_fcc_simd.lo gr_fir_fcc_x86.lo gr_fir_ccf_simd.lo \ + gr_fir_ccf_x86.lo sse_debug.lo +am__objects_11 = float_dotprod_sse64.lo float_dotprod_3dnow64.lo \ complex_dotprod_3dnowext64.lo complex_dotprod_3dnow64.lo \ complex_dotprod_sse64.lo ccomplex_dotprod_3dnowext64.lo \ ccomplex_dotprod_3dnow64.lo ccomplex_dotprod_sse64.lo \ fcomplex_dotprod_3dnow64.lo fcomplex_dotprod_sse64.lo \ short_dotprod_mmx64.lo cpuid_x86_64.lo -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@am_libfilter_la_OBJECTS = $(am__objects_5) \ -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@ $(am__objects_7) \ -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@ $(am__objects_8) -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@am_libfilter_la_OBJECTS = $(am__objects_5) \ -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@ $(am__objects_9) \ -@MD_CPU_generic_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@ $(am__objects_8) -@MD_CPU_generic_TRUE@am_libfilter_la_OBJECTS = $(am__objects_5) \ -@MD_CPU_generic_TRUE@ $(am__objects_6) +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@am_libfilter_la_OBJECTS = $(am__objects_6) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@ $(am__objects_9) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@ $(am__objects_10) +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@am_libfilter_la_OBJECTS = $(am__objects_6) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@ $(am__objects_11) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_FALSE@@MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@ $(am__objects_10) +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_TRUE@am_libfilter_la_OBJECTS = \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_TRUE@ $(am__objects_6) \ +@MD_CPU_generic_FALSE@@MD_CPU_powerpc_TRUE@ $(am__objects_8) +@MD_CPU_generic_TRUE@am_libfilter_la_OBJECTS = $(am__objects_6) \ +@MD_CPU_generic_TRUE@ $(am__objects_7) libfilter_la_OBJECTS = $(am_libfilter_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles -CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ - $(CCASFLAGS) +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libfilter_qa_la_SOURCES) $(libfilter_la_SOURCES) \ $(EXTRA_libfilter_la_SOURCES) DIST_SOURCES = $(am__libfilter_qa_la_SOURCES_DIST) \ @@ -315,10 +399,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -326,9 +409,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -336,6 +426,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -348,73 +440,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -424,49 +509,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -474,15 +599,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -492,16 +760,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -510,75 +796,146 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/Makefile.gen-generate-generate-* \ + $(DEPDIR)/stamp-sources-generate* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT stamp-sources-generate # # This directory contains mostly filter routines, plus a few # other performance critical items # -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libfilter.la libfilter-qa.la # ---------------------------------------------------------------- # these scripts generate FIR code # -CODE_GENERATOR = \ +code_generator = \ generate_all.py \ generate_gr_fir_XXX.py \ generate_gr_fir_filter_XXX.py \ @@ -607,118 +964,13 @@ CODE_GENERATOR = \ gr_freq_xlating_fir_filter_XXX.i.t -# -# This file is machine generated. All edits will be overwritten -# -GENERATED_H = \ - gr_fir_ccc.h \ - gr_fir_ccc_generic.h \ - gr_fir_ccf.h \ - gr_fir_ccf_generic.h \ - gr_fir_fcc.h \ - gr_fir_fcc_generic.h \ - gr_fir_fff.h \ - gr_fir_fff_generic.h \ - gr_fir_filter_ccc.h \ - gr_fir_filter_ccf.h \ - gr_fir_filter_fcc.h \ - gr_fir_filter_fff.h \ - gr_fir_filter_fsf.h \ - gr_fir_filter_scc.h \ - gr_fir_fsf.h \ - gr_fir_fsf_generic.h \ - gr_fir_scc.h \ - gr_fir_scc_generic.h \ - gr_fir_sysconfig.h \ - gr_fir_sysconfig_generic.h \ - gr_fir_util.h \ - gr_freq_xlating_fir_filter_ccc.h \ - gr_freq_xlating_fir_filter_ccf.h \ - gr_freq_xlating_fir_filter_fcc.h \ - gr_freq_xlating_fir_filter_fcf.h \ - gr_freq_xlating_fir_filter_scc.h \ - gr_freq_xlating_fir_filter_scf.h \ - gr_interp_fir_filter_ccc.h \ - gr_interp_fir_filter_ccf.h \ - gr_interp_fir_filter_fcc.h \ - gr_interp_fir_filter_fff.h \ - gr_interp_fir_filter_fsf.h \ - gr_interp_fir_filter_scc.h \ - gr_rational_resampler_base_ccc.h \ - gr_rational_resampler_base_ccf.h \ - gr_rational_resampler_base_fcc.h \ - gr_rational_resampler_base_fff.h \ - gr_rational_resampler_base_fsf.h \ - gr_rational_resampler_base_scc.h - -GENERATED_I = \ - gr_fir_filter_ccc.i \ - gr_fir_filter_ccf.i \ - gr_fir_filter_fcc.i \ - gr_fir_filter_fff.i \ - gr_fir_filter_fsf.i \ - gr_fir_filter_scc.i \ - gr_freq_xlating_fir_filter_ccc.i \ - gr_freq_xlating_fir_filter_ccf.i \ - gr_freq_xlating_fir_filter_fcc.i \ - gr_freq_xlating_fir_filter_fcf.i \ - gr_freq_xlating_fir_filter_scc.i \ - gr_freq_xlating_fir_filter_scf.i \ - gr_interp_fir_filter_ccc.i \ - gr_interp_fir_filter_ccf.i \ - gr_interp_fir_filter_fcc.i \ - gr_interp_fir_filter_fff.i \ - gr_interp_fir_filter_fsf.i \ - gr_interp_fir_filter_scc.i \ - gr_rational_resampler_base_ccc.i \ - gr_rational_resampler_base_ccf.i \ - gr_rational_resampler_base_fcc.i \ - gr_rational_resampler_base_fff.i \ - gr_rational_resampler_base_fsf.i \ - gr_rational_resampler_base_scc.i - -GENERATED_CC = \ - gr_fir_ccc.cc \ - gr_fir_ccc_generic.cc \ - gr_fir_ccf.cc \ - gr_fir_ccf_generic.cc \ - gr_fir_fcc.cc \ - gr_fir_fcc_generic.cc \ - gr_fir_fff.cc \ - gr_fir_fff_generic.cc \ - gr_fir_filter_ccc.cc \ - gr_fir_filter_ccf.cc \ - gr_fir_filter_fcc.cc \ - gr_fir_filter_fff.cc \ - gr_fir_filter_fsf.cc \ - gr_fir_filter_scc.cc \ - gr_fir_fsf.cc \ - gr_fir_fsf_generic.cc \ - gr_fir_scc.cc \ - gr_fir_scc_generic.cc \ - gr_fir_sysconfig.cc \ - gr_fir_sysconfig_generic.cc \ - gr_fir_util.cc \ - gr_freq_xlating_fir_filter_ccc.cc \ - gr_freq_xlating_fir_filter_ccf.cc \ - gr_freq_xlating_fir_filter_fcc.cc \ - gr_freq_xlating_fir_filter_fcf.cc \ - gr_freq_xlating_fir_filter_scc.cc \ - gr_freq_xlating_fir_filter_scf.cc \ - gr_interp_fir_filter_ccc.cc \ - gr_interp_fir_filter_ccf.cc \ - gr_interp_fir_filter_fcc.cc \ - gr_interp_fir_filter_fff.cc \ - gr_interp_fir_filter_fsf.cc \ - gr_interp_fir_filter_scc.cc \ - gr_rational_resampler_base_ccc.cc \ - gr_rational_resampler_base_ccf.cc \ - gr_rational_resampler_base_fcc.cc \ - gr_rational_resampler_base_fff.cc \ - gr_rational_resampler_base_fsf.cc \ - gr_rational_resampler_base_scc.cc +# Source built by Python into $(builddir) +BUILT_SOURCES = \ + $(GENERATED_H) \ + $(GENERATED_I) \ + $(GENERATED_CC) \ + filter_generated.i -BUILT_SOURCES = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC) # ---------------------------------------------------------------- # MD_CPU and MD_SUBCPU are set at configure time by way of @@ -738,7 +990,7 @@ generic_qa_CODE = \ x86_CODE = \ sysconfig_x86.cc \ gr_fir_sysconfig_x86.cc \ - gr_cpu.cc \ + gr_cpu_x86.cc \ gr_fir_ccc_simd.cc \ gr_fir_ccc_x86.cc \ gr_fir_fff_simd.cc \ @@ -787,6 +1039,17 @@ x86_qa_CODE = \ qa_complex_dotprod_x86.cc \ qa_ccomplex_dotprod_x86.cc +powerpc_CODE = \ + sysconfig_powerpc.cc \ + gr_fir_sysconfig_powerpc.cc \ + gr_cpu_powerpc.cc \ + gr_fir_fff_altivec.cc \ + gr_altivec.c \ + dotprod_fff_altivec.c + +powerpc_qa_CODE = \ + qa_dotprod_powerpc.cc + # # include each _CODE entry here... @@ -797,13 +1060,13 @@ EXTRA_libfilter_la_SOURCES = \ $(x86_CODE) \ $(x86_SUBCODE) \ $(x86_64_SUBCODE) \ - $(x86_qa_CODE) - -EXTRA_DIST = \ - 3dnow_float_dotprod_really_simple.S \ - 3dnow_float_dotprod_simple.S \ - $(CODE_GENERATOR) + $(x86_qa_CODE) \ + $(powerpc_CODE) \ + $(powerpc_qa_CODE) +EXTRA_DIST = 3dnow_float_dotprod_really_simple.S \ + 3dnow_float_dotprod_simple.S $(code_generator) \ + stamp-sources-generate # work around automake deficiency libfilter_la_common_SOURCES = \ @@ -814,15 +1077,12 @@ libfilter_la_common_SOURCES = \ gr_fft_filter_fff.cc \ gr_goertzel_fc.cc \ gr_filter_delay_fc.cc \ - gr_fractional_interpolator.cc \ + gr_fractional_interpolator_ff.cc \ + gr_fractional_interpolator_cc.cc \ gr_hilbert_fc.cc \ gr_iir_filter_ffd.cc \ gr_sincos.c \ gr_single_pole_iir_filter_ff.cc \ - gr_single_pole_avg_filter_ff.cc \ - gr_single_pole_rec_filter_ff.cc \ - gr_single_zero_avg_filter_ff.cc \ - gr_single_zero_rec_filter_ff.cc \ gr_single_pole_iir_filter_cc.cc \ gri_goertzel.cc \ gri_mmse_fir_interpolator.cc \ @@ -839,12 +1099,16 @@ libfilter_qa_la_common_SOURCES = \ qa_gr_fir_fff.cc \ qa_gr_fir_ccc.cc \ qa_gr_fir_scc.cc \ - qa_gri_mmse_fir_interpolator.cc + qa_gr_rotator.cc \ + qa_gri_mmse_fir_interpolator.cc \ + qa_gri_mmse_fir_interpolator_cc.cc @MD_CPU_generic_TRUE@libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(generic_CODE) +@MD_CPU_powerpc_TRUE@libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(powerpc_CODE) @MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_FALSE@libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(x86_SUBCODE) $(x86_CODE) @MD_CPU_x86_TRUE@@MD_SUBCPU_x86_64_TRUE@libfilter_la_SOURCES = $(libfilter_la_common_SOURCES) $(x86_64_SUBCODE) $(x86_CODE) @MD_CPU_generic_TRUE@libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(generic_qa_CODE) +@MD_CPU_powerpc_TRUE@libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(powerpc_qa_CODE) @MD_CPU_x86_TRUE@libfilter_qa_la_SOURCES = $(libfilter_qa_la_common_SOURCES) $(x86_qa_CODE) grinclude_HEADERS = \ $(GENERATED_H) \ @@ -856,29 +1120,25 @@ grinclude_HEADERS = \ float_dotprod_generic.h \ float_dotprod_x86.h \ gr_adaptive_fir_ccf.h \ + gr_altivec.h \ gr_cma_equalizer_cc.h \ gr_cpu.h \ gr_fft_filter_ccc.h \ gr_fft_filter_fff.h \ gr_filter_delay_fc.h \ gr_fir_sysconfig_x86.h \ - gr_fractional_interpolator.h \ + gr_fir_sysconfig_powerpc.h \ + gr_fractional_interpolator_ff.h \ + gr_fractional_interpolator_cc.h \ gr_goertzel_fc.h \ gr_hilbert_fc.h \ gr_iir_filter_ffd.h \ gr_rotator.h \ gr_sincos.h \ - gr_single_pole_avg.h \ - gr_single_pole_rec.h \ gr_single_pole_iir.h \ gr_single_pole_iir_filter_ff.h \ - gr_single_pole_avg_filter_ff.h \ - gr_single_pole_rec_filter_ff.h \ - gr_single_zero_avg_filter_ff.h \ - gr_single_zero_rec_filter_ff.h \ - gr_single_pole_iir_filter_cc.h \ - gr_single_zero_avg.h \ - gr_single_zero_rec.h \ + gr_single_pole_iir_filter_cc.h \ + gr_vec_types.h \ gri_goertzel.h \ gri_iir.h \ gri_mmse_fir_interpolator.h \ @@ -890,6 +1150,7 @@ grinclude_HEADERS = \ noinst_HEADERS = \ assembly.h \ + dotprod_fff_altivec.h \ gr_fir_scc_simd.h \ gr_fir_scc_x86.h \ gr_fir_fcc_simd.h \ @@ -898,6 +1159,7 @@ noinst_HEADERS = \ gr_fir_ccf_x86.h \ gr_fir_ccc_simd.h \ gr_fir_ccc_x86.h \ + gr_fir_fff_altivec.h \ gr_fir_fff_simd.h \ gr_fir_fff_x86.h \ gr_fir_fsf_simd.h \ @@ -912,7 +1174,9 @@ noinst_HEADERS = \ qa_gr_fir_fff.h \ qa_gr_fir_ccc.h \ qa_gr_fir_scc.h \ - qa_gri_mmse_fir_interpolator.h + qa_gr_rotator.h \ + qa_gri_mmse_fir_interpolator.h \ + qa_gri_mmse_fir_interpolator_cc.h swiginclude_HEADERS = \ filter.i \ @@ -922,29 +1186,152 @@ swiginclude_HEADERS = \ gr_fft_filter_ccc.i \ gr_fft_filter_fff.i \ gr_filter_delay_fc.i \ + gr_fractional_interpolator_ff.i \ + gr_fractional_interpolator_cc.i \ gr_goertzel_fc.i \ gr_hilbert_fc.i \ gr_iir_filter_ffd.i \ gr_single_pole_iir_filter_ff.i \ - gr_single_pole_avg_filter_ff.i \ - gr_single_pole_rec_filter_ff.i \ - gr_single_zero_avg_filter_ff.i \ - gr_single_zero_rec_filter_ff.i \ gr_single_pole_iir_filter_cc.i \ $(GENERATED_I) -CLEANFILES = $(BUILT_SOURCES) *.pyc + +# +# This file is machine generated. All edits will be overwritten +# +GENERATED_H = \ + gr_fir_ccc.h \ + gr_fir_ccc_generic.h \ + gr_fir_ccf.h \ + gr_fir_ccf_generic.h \ + gr_fir_fcc.h \ + gr_fir_fcc_generic.h \ + gr_fir_fff.h \ + gr_fir_fff_generic.h \ + gr_fir_filter_ccc.h \ + gr_fir_filter_ccf.h \ + gr_fir_filter_fcc.h \ + gr_fir_filter_fff.h \ + gr_fir_filter_fsf.h \ + gr_fir_filter_scc.h \ + gr_fir_fsf.h \ + gr_fir_fsf_generic.h \ + gr_fir_scc.h \ + gr_fir_scc_generic.h \ + gr_fir_sysconfig.h \ + gr_fir_sysconfig_generic.h \ + gr_fir_util.h \ + gr_freq_xlating_fir_filter_ccc.h \ + gr_freq_xlating_fir_filter_ccf.h \ + gr_freq_xlating_fir_filter_fcc.h \ + gr_freq_xlating_fir_filter_fcf.h \ + gr_freq_xlating_fir_filter_scc.h \ + gr_freq_xlating_fir_filter_scf.h \ + gr_interp_fir_filter_ccc.h \ + gr_interp_fir_filter_ccf.h \ + gr_interp_fir_filter_fcc.h \ + gr_interp_fir_filter_fff.h \ + gr_interp_fir_filter_fsf.h \ + gr_interp_fir_filter_scc.h \ + gr_rational_resampler_base_ccc.h \ + gr_rational_resampler_base_ccf.h \ + gr_rational_resampler_base_fcc.h \ + gr_rational_resampler_base_fff.h \ + gr_rational_resampler_base_fsf.h \ + gr_rational_resampler_base_scc.h + +GENERATED_I = \ + gr_fir_filter_ccc.i \ + gr_fir_filter_ccf.i \ + gr_fir_filter_fcc.i \ + gr_fir_filter_fff.i \ + gr_fir_filter_fsf.i \ + gr_fir_filter_scc.i \ + gr_freq_xlating_fir_filter_ccc.i \ + gr_freq_xlating_fir_filter_ccf.i \ + gr_freq_xlating_fir_filter_fcc.i \ + gr_freq_xlating_fir_filter_fcf.i \ + gr_freq_xlating_fir_filter_scc.i \ + gr_freq_xlating_fir_filter_scf.i \ + gr_interp_fir_filter_ccc.i \ + gr_interp_fir_filter_ccf.i \ + gr_interp_fir_filter_fcc.i \ + gr_interp_fir_filter_fff.i \ + gr_interp_fir_filter_fsf.i \ + gr_interp_fir_filter_scc.i \ + gr_rational_resampler_base_ccc.i \ + gr_rational_resampler_base_ccf.i \ + gr_rational_resampler_base_fcc.i \ + gr_rational_resampler_base_fff.i \ + gr_rational_resampler_base_fsf.i \ + gr_rational_resampler_base_scc.i + +GENERATED_CC = \ + gr_fir_ccc.cc \ + gr_fir_ccc_generic.cc \ + gr_fir_ccf.cc \ + gr_fir_ccf_generic.cc \ + gr_fir_fcc.cc \ + gr_fir_fcc_generic.cc \ + gr_fir_fff.cc \ + gr_fir_fff_generic.cc \ + gr_fir_filter_ccc.cc \ + gr_fir_filter_ccf.cc \ + gr_fir_filter_fcc.cc \ + gr_fir_filter_fff.cc \ + gr_fir_filter_fsf.cc \ + gr_fir_filter_scc.cc \ + gr_fir_fsf.cc \ + gr_fir_fsf_generic.cc \ + gr_fir_scc.cc \ + gr_fir_scc_generic.cc \ + gr_fir_sysconfig.cc \ + gr_fir_sysconfig_generic.cc \ + gr_fir_util.cc \ + gr_freq_xlating_fir_filter_ccc.cc \ + gr_freq_xlating_fir_filter_ccf.cc \ + gr_freq_xlating_fir_filter_fcc.cc \ + gr_freq_xlating_fir_filter_fcf.cc \ + gr_freq_xlating_fir_filter_scc.cc \ + gr_freq_xlating_fir_filter_scf.cc \ + gr_interp_fir_filter_ccc.cc \ + gr_interp_fir_filter_ccf.cc \ + gr_interp_fir_filter_fcc.cc \ + gr_interp_fir_filter_fff.cc \ + gr_interp_fir_filter_fsf.cc \ + gr_interp_fir_filter_scc.cc \ + gr_rational_resampler_base_ccc.cc \ + gr_rational_resampler_base_ccf.cc \ + gr_rational_resampler_base_fcc.cc \ + gr_rational_resampler_base_fff.cc \ + gr_rational_resampler_base_fsf.cc \ + gr_rational_resampler_base_scc.cc + + +# Do creation and inclusion of other Makefiles last + +# include the srcdir's Makefile.gen; doing this creates an implicit +# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. + +# common way for generating local Makefile.gen +makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(BUILT_SOURCES) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .S .c .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(srcdir)/Makefile.gen $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(srcdir)/Makefile.gen $(top_srcdir)/Makefile.gen.gen $(top_srcdir)/Makefile.par.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -978,9 +1365,9 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libfilter-qa.la: $(libfilter_qa_la_OBJECTS) $(libfilter_qa_la_DEPENDENCIES) - $(CXXLINK) $(libfilter_qa_la_LDFLAGS) $(libfilter_qa_la_OBJECTS) $(libfilter_qa_la_LIBADD) $(LIBS) + $(CXXLINK) $(libfilter_qa_la_OBJECTS) $(libfilter_qa_la_LIBADD) $(LIBS) libfilter.la: $(libfilter_la_OBJECTS) $(libfilter_la_DEPENDENCIES) - $(CXXLINK) $(libfilter_la_LDFLAGS) $(libfilter_la_OBJECTS) $(libfilter_la_LIBADD) $(LIBS) + $(CXXLINK) $(libfilter_la_OBJECTS) $(libfilter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -988,12 +1375,37 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_3dnow.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_3dnow64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_3dnowext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_3dnowext64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_sse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccomplex_dotprod_sse64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_3dnow.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_3dnow64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_3dnowext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_3dnowext64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_sse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complex_dotprod_sse64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpuid_x86.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpuid_x86_64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dotprod_fff_altivec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcomplex_dotprod_3dnow.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcomplex_dotprod_3dnow64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcomplex_dotprod_sse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcomplex_dotprod_sse64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float_dotprod_3dnow.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float_dotprod_3dnow64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float_dotprod_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float_dotprod_sse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float_dotprod_sse64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_adaptive_fir_ccf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_altivec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_cma_equalizer_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_cpu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_cpu_powerpc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_cpu_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fft_filter_ccc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fft_filter_fff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_filter_delay_fc.Plo@am__quote@ @@ -1010,6 +1422,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fcc_simd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fcc_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fff_altivec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fff_generic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fff_simd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_fff_x86.Plo@am__quote@ @@ -1029,9 +1442,11 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_scc_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_sysconfig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_sysconfig_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_sysconfig_powerpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_sysconfig_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fir_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fractional_interpolator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fractional_interpolator_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fractional_interpolator_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_freq_xlating_fir_filter_ccc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_freq_xlating_fir_filter_ccf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_freq_xlating_fir_filter_fcc.Plo@am__quote@ @@ -1054,18 +1469,15 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_rational_resampler_base_fsf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_rational_resampler_base_scc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sincos.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_pole_avg_filter_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_pole_iir_filter_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_pole_iir_filter_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_pole_rec_filter_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_zero_avg_filter_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_zero_rec_filter_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_goertzel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_mmse_fir_interpolator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_mmse_fir_interpolator_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_ccomplex_dotprod_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_complex_dotprod_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_dotprod_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_dotprod_powerpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_dotprod_x86.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_filter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_float_dotprod_x86.Plo@am__quote@ @@ -1074,59 +1486,76 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_fir_fcc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_fir_fff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_fir_scc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_rotator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gri_mmse_fir_interpolator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gri_mmse_fir_interpolator_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_dotprod_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_dotprod_mmx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/short_dotprod_mmx64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sse_debug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sysconfig_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sysconfig_powerpc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sysconfig_x86.Plo@am__quote@ .S.o: - $(CCASCOMPILE) -c $< +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< .S.obj: - $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .S.lo: - $(LTCCASCOMPILE) -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -1136,13 +1565,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -1159,7 +1584,7 @@ uninstall-grincludeHEADERS: done install-swigincludeHEADERS: $(swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" @list='$(swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -1180,8 +1605,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -1193,8 +1618,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -1204,13 +1629,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -1224,23 +1648,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -1251,13 +1673,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -1275,9 +1700,9 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -1295,7 +1720,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -1309,12 +1734,20 @@ info-am: install-data-am: install-grincludeHEADERS install-swigincludeHEADERS +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -1335,28 +1768,89 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS uninstall-swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-grincludeHEADERS install-info \ - install-info-am install-man install-strip \ - install-swigincludeHEADERS installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-grincludeHEADERS uninstall-info-am \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ uninstall-swigincludeHEADERS -# include $(srcdir)/Makefile.gen - -$(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR) - PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile $(srcdir)/Makefile.gen: + @trap 'rm -rf $(DEPDIR)/Makefile.gen-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/Makefile.gen-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/Makefile.gen-generate-stamp; \ + rm -f $(DEPDIR)/Makefile.gen-generate-tmp; \ + touch $(DEPDIR)/Makefile.gen-generate-tmp; \ + do_recreate=0; \ + if test -f $(srcdir)/Makefile.gen; then \ + if $(RM) $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.gen"; \ + $(makefile_gen_gen_command); \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; \ + mv -f $(DEPDIR)/Makefile.gen-generate-tmp $(DEPDIR)/Makefile.gen-generate-stamp; \ + rmdir $(DEPDIR)/Makefile.gen-generate-lock; \ + else \ + while test -d $(DEPDIR)/Makefile.gen-generate-lock; do sleep 1; done; \ + test -f $(DEPDIR)/Makefile.gen-generate-stamp; exit $$?; \ + fi; + +STAMPS ?= +EXTRA_DIST ?= +MOSTLYCLEANFILES ?= + +stamp-sources-generate: $(gen_sources_deps) + @rm -f $(DEPDIR)/stamp-sources-generate-tmp + @touch $(DEPDIR)/stamp-sources-generate-tmp + $(par_gen_command) + @mv -f $(DEPDIR)/stamp-sources-generate-tmp $@ + +$(gen_sources): stamp-sources-generate + @if test -f $@; then :; else \ + trap 'rm -rf $(DEPDIR)/stamp-sources-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/stamp-sources-generate-lock 2>/dev/null; then \ + rm -f stamp-sources-generate; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-sources-generate; \ + rmdir $(DEPDIR)/stamp-sources-generate-lock; \ + else \ + while test -d $(DEPDIR)/stamp-sources-generate-lock; do sleep 1; done; \ + test -f stamp-sources-generate; exit $$?; \ + fi; \ + fi; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow.S b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow.S index 9a1d33ca..26f5830f 100644 --- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow.S +++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow.S @@ -91,7 +91,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: # complex prod: C += A * B, w/ temp Z, mmPN=$80000000 # @@ -165,7 +165,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnow): .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Let's see if original n_2_ccomplex_blocks was odd. @@ -214,3 +214,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnow): FUNC_TAIL(ccomplex_dotprod_3dnow) .ident "Hand coded x86 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow64.S b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow64.S index 70b06b21..feaf1cb0 100644 --- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow64.S +++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnow64.S @@ -91,7 +91,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: # complex prod: C += A * B, w/ temp Z, mmPN=$80000000 # @@ -165,7 +165,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnow): .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Let's see if original n_2_ccomplex_blocks was odd. @@ -211,3 +211,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnow): FUNC_TAIL(ccomplex_dotprod_3dnow) .ident "Hand coded x86_64 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext.S b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext.S index 51493194..1a09cc3e 100644 --- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext.S +++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext.S @@ -89,7 +89,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnowext): # .p2align 4 -.loop1: +.Loop1: # complex prod: C += A * B, w/ temp Z # @@ -144,7 +144,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnowext): .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Let's see if original n_2_ccomplex_blocks was odd. @@ -189,3 +189,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnowext): FUNC_TAIL(ccomplex_dotprod_3dnowext) .ident "Hand coded x86 3DNow!Ext assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext64.S b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext64.S index 65f5ca55..75f5af28 100644 --- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext64.S +++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_3dnowext64.S @@ -89,7 +89,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnowext): # .p2align 4 -.loop1: +.Loop1: # complex prod: C += A * B, w/ temp Z # @@ -144,7 +144,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnowext): .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Let's see if original n_2_ccomplex_blocks was odd. @@ -186,3 +186,7 @@ GLOB_SYMB(ccomplex_dotprod_3dnowext): FUNC_TAIL(ccomplex_dotprod_3dnowext) .ident "Hand coded x86_64 3DNow!Ext assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse.S b/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse.S index 2fc26fbd..a06ce4d3 100644 --- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse.S +++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse.S @@ -85,7 +85,7 @@ GLOB_SYMB(ccomplex_dotprod_sse): # .p2align 4 -.loop1: +.Loop1: # complex prod: C += A * B, w/ temp Z & Y (or B), xmmPN=$0x8000000080000000 # @@ -141,7 +141,7 @@ GLOB_SYMB(ccomplex_dotprod_sse): .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Let's sse if original n_2_ccomplex_blocks was odd. @@ -192,3 +192,7 @@ GLOB_SYMB(ccomplex_dotprod_sse): FUNC_TAIL(ccomplex_dotprod_sse) .ident "Hand coded x86 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse64.S b/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse64.S index f2348886..6da4f2eb 100644 --- a/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse64.S +++ b/gnuradio-core/src/lib/filter/ccomplex_dotprod_sse64.S @@ -85,7 +85,7 @@ GLOB_SYMB(ccomplex_dotprod_sse): # .p2align 4 -.loop1: +.Loop1: # complex prod: C += A * B, w/ temp Z & Y (or B), xmmPN=$0x8000000080000000 # @@ -141,7 +141,7 @@ GLOB_SYMB(ccomplex_dotprod_sse): .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Let's sse if original n_2_ccomplex_blocks was odd. @@ -189,3 +189,7 @@ GLOB_SYMB(ccomplex_dotprod_sse): FUNC_TAIL(ccomplex_dotprod_sse) .ident "Hand coded x86_64 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_3dnow.S b/gnuradio-core/src/lib/filter/complex_dotprod_3dnow.S index 09c9982d..6e46bf7b 100644 --- a/gnuradio-core/src/lib/filter/complex_dotprod_3dnow.S +++ b/gnuradio-core/src/lib/filter/complex_dotprod_3dnow.S @@ -100,7 +100,7 @@ GLOB_SYMB(complex_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%edx), %mm0 pfadd %mm2, %mm6 @@ -145,7 +145,7 @@ GLOB_SYMB(complex_dotprod_3dnow): .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -186,3 +186,7 @@ GLOB_SYMB(complex_dotprod_3dnow): FUNC_TAIL(complex_dotprod_3dnow) .ident "Hand coded x86 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_3dnow64.S b/gnuradio-core/src/lib/filter/complex_dotprod_3dnow64.S index bec26727..fe978455 100644 --- a/gnuradio-core/src/lib/filter/complex_dotprod_3dnow64.S +++ b/gnuradio-core/src/lib/filter/complex_dotprod_3dnow64.S @@ -100,7 +100,7 @@ GLOB_SYMB(complex_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%rsi), %mm0 pfadd %mm2, %mm6 @@ -145,7 +145,7 @@ GLOB_SYMB(complex_dotprod_3dnow): .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -181,3 +181,7 @@ GLOB_SYMB(complex_dotprod_3dnow): FUNC_TAIL(complex_dotprod_3dnow) .ident "Hand coded x86_64 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext.S b/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext.S index 3a5792bc..122fd2b5 100644 --- a/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext.S +++ b/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext.S @@ -93,7 +93,7 @@ GLOB_SYMB(complex_dotprod_3dnowext): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%edx), %mm0 pfadd %mm2, %mm6 @@ -125,7 +125,7 @@ GLOB_SYMB(complex_dotprod_3dnowext): .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -165,3 +165,7 @@ GLOB_SYMB(complex_dotprod_3dnowext): FUNC_TAIL(complex_dotprod_3dnowext) .ident "Hand coded x86 3DNow!Ext assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext64.S b/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext64.S index f35853d7..94905497 100644 --- a/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext64.S +++ b/gnuradio-core/src/lib/filter/complex_dotprod_3dnowext64.S @@ -93,7 +93,7 @@ GLOB_SYMB(complex_dotprod_3dnowext): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%rsi), %mm0 pfadd %mm2, %mm6 @@ -125,7 +125,7 @@ GLOB_SYMB(complex_dotprod_3dnowext): .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -162,3 +162,7 @@ GLOB_SYMB(complex_dotprod_3dnowext): FUNC_TAIL(complex_dotprod_3dnowext) .ident "Hand coded x86_64 3DNow!Ext assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_sse.S b/gnuradio-core/src/lib/filter/complex_dotprod_sse.S index 97ad9b66..ff5ef5d0 100644 --- a/gnuradio-core/src/lib/filter/complex_dotprod_sse.S +++ b/gnuradio-core/src/lib/filter/complex_dotprod_sse.S @@ -81,7 +81,7 @@ GLOB_SYMB(complex_dotprod_sse): jmp .L1_test .p2align 4 -.loop1: +.Loop1: pxor %mm0, %mm0 punpcklwd 0(%eax), %mm0 @@ -95,7 +95,7 @@ GLOB_SYMB(complex_dotprod_sse): addps %xmm0, %xmm4 .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # set up for primary loop which is unrolled 4 times @@ -105,7 +105,7 @@ GLOB_SYMB(complex_dotprod_sse): movaps %xmm5, %xmm7 shrl $2, %ecx # n_2_complex_blocks / 4 - je .cleanup # if zero, take short path + je .Lcleanup # if zero, take short path # finish setup and loop priming @@ -129,7 +129,7 @@ GLOB_SYMB(complex_dotprod_sse): # hence enter loop at top .p2align 4 -.loop2: +.Loop2: mulps (%edx), %xmm0 addps %xmm2, %xmm6 @@ -169,7 +169,7 @@ GLOB_SYMB(complex_dotprod_sse): addl $0x40, %edx addl $0x10, %eax decl %ecx - jne .loop2 + jne .Loop2 # OK, now we've done with all the multiplies, but # we still need to handle the unaccumulated @@ -188,7 +188,7 @@ GLOB_SYMB(complex_dotprod_sse): # At this point, xmm4 contains 2x2 partial sums. We need # to compute a "horizontal complex add" across xmm4. -.cleanup: # xmm4 = r1 i2 r3 i4 +.Lcleanup: # xmm4 = r1 i2 r3 i4 movl 20(%ebp), %eax # @result movhlps %xmm4, %xmm0 # xmm0 = ?? ?? r1 r2 addps %xmm4, %xmm0 # xmm0 = ?? ?? r1+r3 i2+i4 @@ -200,3 +200,7 @@ GLOB_SYMB(complex_dotprod_sse): FUNC_TAIL(complex_dotprod_sse) .ident "Hand coded x86 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/complex_dotprod_sse64.S b/gnuradio-core/src/lib/filter/complex_dotprod_sse64.S index acbff61a..2e945654 100644 --- a/gnuradio-core/src/lib/filter/complex_dotprod_sse64.S +++ b/gnuradio-core/src/lib/filter/complex_dotprod_sse64.S @@ -80,7 +80,7 @@ GLOB_SYMB(complex_dotprod_sse): jmp .L1_test .p2align 4 -.loop1: +.Loop1: pxor %mm0, %mm0 punpcklwd 0(%rdi), %mm0 @@ -94,7 +94,7 @@ GLOB_SYMB(complex_dotprod_sse): addps %xmm0, %xmm4 .L1_test: dec %rax - jge .loop1 + jge .Loop1 # set up for primary loop which is unrolled 4 times @@ -103,7 +103,7 @@ GLOB_SYMB(complex_dotprod_sse): shr $2, %rdx # n_2_complex_blocks / 4 movaps %xmm5, %xmm7 - je .cleanup # if zero, take short path + je .Lcleanup # if zero, take short path # finish setup and loop priming @@ -127,7 +127,7 @@ GLOB_SYMB(complex_dotprod_sse): # hence enter loop at top .p2align 4 -.loop2: +.Loop2: mulps (%rsi), %xmm0 addps %xmm2, %xmm6 @@ -167,7 +167,7 @@ GLOB_SYMB(complex_dotprod_sse): add $0x40, %rsi add $0x10, %rdi dec %rdx - jne .loop2 + jne .Loop2 # OK, now we've done with all the multiplies, but # we still need to handle the unaccumulated @@ -186,7 +186,7 @@ GLOB_SYMB(complex_dotprod_sse): # At this point, xmm4 contains 2x2 partial sums. We need # to compute a "horizontal complex add" across xmm4. -.cleanup: # xmm4 = r1 i2 r3 i4 +.Lcleanup: # xmm4 = r1 i2 r3 i4 movhlps %xmm4, %xmm0 # xmm0 = ?? ?? r1 r2 addps %xmm4, %xmm0 # xmm0 = ?? ?? r1+r3 i2+i4 movlps %xmm0, (%rcx) # store low 2x32 bits (complex) to memory @@ -196,3 +196,7 @@ GLOB_SYMB(complex_dotprod_sse): FUNC_TAIL(complex_dotprod_sse) .ident "Hand coded x86_64 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/cpuid_x86.S b/gnuradio-core/src/lib/filter/cpuid_x86.S index ba4d66a0..4e1a9404 100644 --- a/gnuradio-core/src/lib/filter/cpuid_x86.S +++ b/gnuradio-core/src/lib/filter/cpuid_x86.S @@ -54,3 +54,7 @@ GLOB_SYMB(cpuid_x86): FUNC_TAIL(cpuid_x86) .ident "Hand coded cpuid assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/cpuid_x86_64.S b/gnuradio-core/src/lib/filter/cpuid_x86_64.S index c2775b8d..32b1847c 100644 --- a/gnuradio-core/src/lib/filter/cpuid_x86_64.S +++ b/gnuradio-core/src/lib/filter/cpuid_x86_64.S @@ -48,3 +48,7 @@ GLOB_SYMB(cpuid_x86): FUNC_TAIL(cpuid_x86) .ident "Hand coded cpuid64 assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/dotprod_fff_altivec.c b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.c new file mode 100644 index 00000000..bebf7e40 --- /dev/null +++ b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.c @@ -0,0 +1,162 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + +/*! + * \param x any value + * \param pow2 must be a power of 2 + * \returns \p x rounded down to a multiple of \p pow2. + */ +static inline size_t +gr_p2_round_down(size_t x, size_t pow2) +{ + return x & -pow2; +} + + +#if 0 + +float +dotprod_fff_altivec(const float *a, const float *b, size_t n) +{ + float sum = 0; + for (size_t i = 0; i < n; i++){ + sum += a[i] * b[i]; + } + return sum; +} + +#else + +/* + * preconditions: + * + * n > 0 and a multiple of 4 + * a 4-byte aligned + * b 16-byte aligned + */ +float +dotprod_fff_altivec(const float *_a, const float *_b, size_t n) +{ + const vec_float4 *a = (const vec_float4 *) _a; + const vec_float4 *b = (const vec_float4 *) _b; + + static const size_t UNROLL_CNT = 4; + + n = gr_p2_round_down(n, 4); + size_t loop_cnt = n / (UNROLL_CNT * FLOATS_PER_VEC); + size_t nleft = n % (UNROLL_CNT * FLOATS_PER_VEC); + + // printf("n = %zd, loop_cnt = %zd, nleft = %zd\n", n, loop_cnt, nleft); + + // Used with vperm to build a* from p* + vec_uchar16 lvsl_a = vec_lvsl(0, _a); + + vec_float4 p0, p1, p2, p3; + vec_float4 a0, a1, a2, a3; + vec_float4 b0, b1, b2, b3; + vec_float4 acc0 = {0, 0, 0, 0}; + vec_float4 acc1 = {0, 0, 0, 0}; + vec_float4 acc2 = {0, 0, 0, 0}; + vec_float4 acc3 = {0, 0, 0, 0}; + + // wind in + + p0 = vec_ld(0*VS, a); + p1 = vec_ld(1*VS, a); + p2 = vec_ld(2*VS, a); + p3 = vec_ld(3*VS, a); + a += UNROLL_CNT; + + a0 = vec_perm(p0, p1, lvsl_a); + b0 = vec_ld(0*VS, b); + p0 = vec_ld(0*VS, a); + + size_t i; + for (i = 0; i < loop_cnt; i++){ + + a1 = vec_perm(p1, p2, lvsl_a); + b1 = vec_ld(1*VS, b); + p1 = vec_ld(1*VS, a); + acc0 = vec_madd(a0, b0, acc0); + + a2 = vec_perm(p2, p3, lvsl_a); + b2 = vec_ld(2*VS, b); + p2 = vec_ld(2*VS, a); + acc1 = vec_madd(a1, b1, acc1); + + a3 = vec_perm(p3, p0, lvsl_a); + b3 = vec_ld(3*VS, b); + p3 = vec_ld(3*VS, a); + acc2 = vec_madd(a2, b2, acc2); + + a += UNROLL_CNT; + b += UNROLL_CNT; + + a0 = vec_perm(p0, p1, lvsl_a); + b0 = vec_ld(0*VS, b); + p0 = vec_ld(0*VS, a); + acc3 = vec_madd(a3, b3, acc3); + } + + /* + * The compiler ought to be able to figure out that 0, 4, 8 and 12 + * are the only possible values for nleft. + */ + switch (nleft){ + case 0: + break; + + case 4: + acc0 = vec_madd(a0, b0, acc0); + break; + + case 8: + a1 = vec_perm(p1, p2, lvsl_a); + b1 = vec_ld(1*VS, b); + acc0 = vec_madd(a0, b0, acc0); + acc1 = vec_madd(a1, b1, acc1); + break; + + case 12: + a1 = vec_perm(p1, p2, lvsl_a); + b1 = vec_ld(1*VS, b); + acc0 = vec_madd(a0, b0, acc0); + a2 = vec_perm(p2, p3, lvsl_a); + b2 = vec_ld(2*VS, b); + acc1 = vec_madd(a1, b1, acc1); + acc2 = vec_madd(a2, b2, acc2); + break; + } + + acc0 = acc0 + acc1; + acc2 = acc2 + acc3; + acc0 = acc0 + acc2; + + return horizontal_add_f(acc0); +} + +#endif diff --git a/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h new file mode 100644 index 00000000..d9ee52cf --- /dev/null +++ b/gnuradio-core/src/lib/filter/dotprod_fff_altivec.h @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_DOTPROD_FFF_ALTIVEC_H +#define INCLUDED_DOTPROD_FFF_ALTIVEC_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*! + *
+ *
+ *  preconditions:
+ *
+ *    n > 0 and a multiple of 4
+ *    a   4-byte aligned
+ *    b  16-byte aligned
+ *
+ * 
+ */ +float +dotprod_fff_altivec(const float *a, const float *b, size_t n); + +#ifdef __cplusplus +} +#endif + + +#endif /* INCLUDED_DOTPROD_FFF_ALTIVEC_H */ diff --git a/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow.S b/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow.S index 6afc3861..8c49909c 100644 --- a/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow.S +++ b/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow.S @@ -92,7 +92,7 @@ GLOB_SYMB(fcomplex_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%edx), %mm0 pfadd %mm2, %mm6 @@ -129,7 +129,7 @@ GLOB_SYMB(fcomplex_dotprod_3dnow): .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -170,3 +170,7 @@ GLOB_SYMB(fcomplex_dotprod_3dnow): FUNC_TAIL(fcomplex_dotprod_3dnow) .ident "Hand coded x86 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow64.S b/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow64.S index 1fc4a247..2924d91a 100644 --- a/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow64.S +++ b/gnuradio-core/src/lib/filter/fcomplex_dotprod_3dnow64.S @@ -91,7 +91,7 @@ GLOB_SYMB(fcomplex_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%rsi), %mm0 pfadd %mm2, %mm6 @@ -128,7 +128,7 @@ GLOB_SYMB(fcomplex_dotprod_3dnow): .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -164,3 +164,7 @@ GLOB_SYMB(fcomplex_dotprod_3dnow): FUNC_TAIL(fcomplex_dotprod_3dnow) .ident "Hand coded x86_64 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse.S b/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse.S index 722656bd..e390c275 100644 --- a/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse.S +++ b/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse.S @@ -81,7 +81,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): jmp .L1_test .p2align 4 -.loop1: +.Loop1: movlps 0(%eax), %xmm0 shufps $0x50, %xmm0, %xmm0 # b01010000 @@ -92,7 +92,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): addps %xmm0, %xmm4 .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # set up for primary loop which is unrolled 4 times @@ -102,7 +102,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): movaps %xmm5, %xmm7 shrl $2, %ecx # n_2_complex_blocks / 4 - je .cleanup # if zero, take short path + je .Lcleanup # if zero, take short path # finish setup and loop priming @@ -120,7 +120,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): # hence enter loop at top .p2align 4 -.loop2: +.Loop2: addps %xmm2, %xmm6 movlps 0x10(%eax), %xmm2 @@ -152,7 +152,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): addl $0x40, %edx addl $0x20, %eax decl %ecx - jne .loop2 + jne .Loop2 # OK, now we've done with all the multiplies, but # we still need to handle the unaccumulated @@ -171,7 +171,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): # At this point, xmm4 contains 2x2 partial sums. We need # to compute a "horizontal complex add" across xmm4. -.cleanup: # xmm4 = r1 i2 r3 i4 +.Lcleanup: # xmm4 = r1 i2 r3 i4 movl 20(%ebp), %eax # @result movhlps %xmm4, %xmm0 # xmm0 = ?? ?? r1 r2 addps %xmm4, %xmm0 # xmm0 = ?? ?? r1+r3 i2+i4 @@ -182,3 +182,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): FUNC_TAIL(fcomplex_dotprod_sse) .ident "Hand coded x86 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse64.S b/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse64.S index cb96438f..9d985a19 100644 --- a/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse64.S +++ b/gnuradio-core/src/lib/filter/fcomplex_dotprod_sse64.S @@ -79,7 +79,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): jmp .L1_test .p2align 4 -.loop1: +.Loop1: movlps 0(%rdi), %xmm0 shufps $0x50, %xmm0, %xmm0 # b01010000 @@ -90,7 +90,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): addps %xmm0, %xmm4 .L1_test: dec %rax - jge .loop1 + jge .Loop1 # set up for primary loop which is unrolled 4 times @@ -99,7 +99,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): movaps %xmm5, %xmm7 shr $2, %rdx # n_2_complex_blocks / 4 - je .cleanup # if zero, take short path + je .Lcleanup # if zero, take short path # finish setup and loop priming @@ -117,7 +117,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): # hence enter loop at top .p2align 4 -.loop2: +.Loop2: addps %xmm2, %xmm6 movlps 0x10(%rdi), %xmm2 @@ -149,7 +149,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): add $0x40, %rsi add $0x20, %rdi dec %rdx - jne .loop2 + jne .Loop2 # OK, now we've done with all the multiplies, but # we still need to handle the unaccumulated @@ -168,7 +168,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): # At this point, xmm4 contains 2x2 partial sums. We need # to compute a "horizontal complex add" across xmm4. -.cleanup: # xmm4 = r1 i2 r3 i4 +.Lcleanup: # xmm4 = r1 i2 r3 i4 movhlps %xmm4, %xmm0 # xmm0 = ?? ?? r1 r2 addps %xmm4, %xmm0 # xmm0 = ?? ?? r1+r3 i2+i4 movlps %xmm0, (%rcx) # store low 2x32 bits (complex) to memory @@ -177,3 +177,7 @@ GLOB_SYMB(fcomplex_dotprod_sse): FUNC_TAIL(fcomplex_dotprod_sse) .ident "Hand coded x86_64 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/filter.i b/gnuradio-core/src/lib/filter/filter.i index c1295b80..7931a4d5 100644 --- a/gnuradio-core/src/lib/filter/filter.i +++ b/gnuradio-core/src/lib/filter/filter.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004,2005,2006 Free Software Foundation, Inc. + * Copyright 2004,2005,2006,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include #include %} @@ -39,6 +41,8 @@ %include "gr_filter_delay_fc.i" %include "gr_fft_filter_ccc.i" %include "gr_fft_filter_fff.i" +%include "gr_fractional_interpolator_ff.i" +%include "gr_fractional_interpolator_cc.i" %include "gr_goertzel_fc.i" %include "gr_cma_equalizer_cc.i" diff --git a/gnuradio-core/src/lib/filter/float_dotprod_3dnow.S b/gnuradio-core/src/lib/filter/float_dotprod_3dnow.S index e6651460..9e2479cb 100644 --- a/gnuradio-core/src/lib/filter/float_dotprod_3dnow.S +++ b/gnuradio-core/src/lib/filter/float_dotprod_3dnow.S @@ -86,7 +86,7 @@ GLOB_SYMB(float_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%edx), %mm0 pfadd %mm2, %mm6 movq 16(%eax), %mm2 @@ -107,7 +107,7 @@ GLOB_SYMB(float_dotprod_3dnow): addl $32, %eax .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -146,3 +146,7 @@ GLOB_SYMB(float_dotprod_3dnow): FUNC_TAIL(float_dotprod_3dnow) .ident "Hand coded x86 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/float_dotprod_3dnow64.S b/gnuradio-core/src/lib/filter/float_dotprod_3dnow64.S index 2754dd46..8558f564 100644 --- a/gnuradio-core/src/lib/filter/float_dotprod_3dnow64.S +++ b/gnuradio-core/src/lib/filter/float_dotprod_3dnow64.S @@ -85,7 +85,7 @@ GLOB_SYMB(float_dotprod_3dnow): # .p2align 4 -.loop1: +.Loop1: pfmul 0(%rdi), %mm0 pfadd %mm2, %mm6 movq 16(%rsi), %mm2 @@ -106,7 +106,7 @@ GLOB_SYMB(float_dotprod_3dnow): add $32, %rsi .L1_test: dec %rax - jge .loop1 + jge .Loop1 # We've handled the bulk of multiplies up to here. # Now accumulate the final two additions and see if original @@ -143,3 +143,7 @@ GLOB_SYMB(float_dotprod_3dnow): FUNC_TAIL(float_dotprod_3dnow) .ident "Hand coded x86_64 3DNow! assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/float_dotprod_sse.S b/gnuradio-core/src/lib/filter/float_dotprod_sse.S index a3a2df39..31b0f383 100644 --- a/gnuradio-core/src/lib/filter/float_dotprod_sse.S +++ b/gnuradio-core/src/lib/filter/float_dotprod_sse.S @@ -79,7 +79,7 @@ GLOB_SYMB(float_dotprod_sse): jmp .L1_test .p2align 4 -.loop1: +.Loop1: movaps (%eax), %xmm0 mulps (%edx), %xmm0 addl $0x10, %edx @@ -87,7 +87,7 @@ GLOB_SYMB(float_dotprod_sse): addps %xmm0, %xmm4 .L1_test: decl %ecx - jge .loop1 + jge .Loop1 # set up for primary loop which is unrolled 4 times @@ -97,7 +97,7 @@ GLOB_SYMB(float_dotprod_sse): movaps %xmm5, %xmm7 shrl $2, %ecx # n_4_float_blocks / 4 - je .cleanup # if zero, take short path + je .Lcleanup # if zero, take short path # finish setup and loop priming @@ -110,7 +110,7 @@ GLOB_SYMB(float_dotprod_sse): # hence enter loop at top .p2align 4 -.loop2: +.Loop2: mulps (%edx), %xmm0 addps %xmm2, %xmm6 movaps 0x20(%eax), %xmm2 @@ -130,7 +130,7 @@ GLOB_SYMB(float_dotprod_sse): addl $0x40, %edx addl $0x40, %eax decl %ecx - jne .loop2 + jne .Loop2 # OK, now we've done with all the multiplies, but # we still need to handle the unaccumulated @@ -150,7 +150,7 @@ GLOB_SYMB(float_dotprod_sse): # to compute a "horizontal add" across xmm4. # This is a fairly nasty operation... -.cleanup: # xmm4 = d1 d2 d3 d4 +.Lcleanup: # xmm4 = d1 d2 d3 d4 xorps %xmm0, %xmm0 # xmm0 = 0 0 0 0 (may be unnecessary) movhlps %xmm4, %xmm0 # xmm0 = 0 0 d1 d2 addps %xmm4, %xmm0 # xmm0 = d1 d2 d1+d3 d2+d4 @@ -165,3 +165,7 @@ GLOB_SYMB(float_dotprod_sse): FUNC_TAIL(float_dotprod_sse) .ident "Hand coded x86 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/float_dotprod_sse64.S b/gnuradio-core/src/lib/filter/float_dotprod_sse64.S index c5e56f36..4c5ad95c 100644 --- a/gnuradio-core/src/lib/filter/float_dotprod_sse64.S +++ b/gnuradio-core/src/lib/filter/float_dotprod_sse64.S @@ -77,7 +77,7 @@ GLOB_SYMB(float_dotprod_sse): jmp .L1_test .p2align 4 -.loop1: +.Loop1: movaps (%rsi), %xmm0 mulps (%rdi), %xmm0 add $0x10, %rdi @@ -85,7 +85,7 @@ GLOB_SYMB(float_dotprod_sse): addps %xmm0, %xmm4 .L1_test: dec %rax - jge .loop1 + jge .Loop1 # set up for primary loop which is unrolled 4 times @@ -94,7 +94,7 @@ GLOB_SYMB(float_dotprod_sse): movaps %xmm5, %xmm7 shr $2, %rdx # n_4_float_blocks / 4 - je .cleanup # if zero, take short path + je .Lcleanup # if zero, take short path # finish setup and loop priming @@ -107,7 +107,7 @@ GLOB_SYMB(float_dotprod_sse): # hence enter loop at top .p2align 4 -.loop2: +.Loop2: mulps (%rdi), %xmm0 addps %xmm2, %xmm6 movaps 0x20(%rsi), %xmm2 @@ -127,7 +127,7 @@ GLOB_SYMB(float_dotprod_sse): add $0x40, %rdi add $0x40, %rsi dec %rdx - jne .loop2 + jne .Loop2 # OK, now we've done with all the multiplies, but # we still need to handle the unaccumulated @@ -147,7 +147,7 @@ GLOB_SYMB(float_dotprod_sse): # to compute a "horizontal add" across xmm4. # This is a fairly nasty operation... -.cleanup: # xmm4 = d1 d2 d3 d4 +.Lcleanup: # xmm4 = d1 d2 d3 d4 xorps %xmm0, %xmm0 # xmm0 = 0 0 0 0 (may be unnecessary) movhlps %xmm4, %xmm0 # xmm0 = 0 0 d1 d2 addps %xmm4, %xmm0 # xmm0 = d1 d2 d1+d3 d2+d4 @@ -159,3 +159,7 @@ GLOB_SYMB(float_dotprod_sse): FUNC_TAIL(float_dotprod_sse) .ident "Hand coded x86_64 SSE assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig.py b/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig.py index 16e64bb0..b3967219 100755 --- a/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig.py +++ b/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig.py @@ -1,7 +1,7 @@ #!/bin/env python # -*- python -*- # -# Copyright 2003 Free Software Foundation, Inc. +# Copyright 2003,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,6 +28,9 @@ from generate_utils import * def make_gr_fir_sysconfig_h (): out = open_and_log_name ('gr_fir_sysconfig.h', 'w') + if not out: + return + out.write (copyright) out.write ( @@ -96,6 +99,9 @@ gr_fir_sysconfig *gr_fir_sysconfig_singleton (); def make_gr_fir_sysconfig_cc (): out = open_and_log_name ('gr_fir_sysconfig.cc', 'w') + if not out: + return + out.write (copyright) out.write ( diff --git a/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig_generic.py b/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig_generic.py index 8f79c020..03caadaf 100755 --- a/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig_generic.py +++ b/gnuradio-core/src/lib/filter/generate_gr_fir_sysconfig_generic.py @@ -1,7 +1,7 @@ #!/bin/env python # -*- python -*- # -# Copyright 2003 Free Software Foundation, Inc. +# Copyright 2003,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,6 +28,8 @@ from generate_utils import * def make_gr_fir_sysconfig_generic_h (): out = open_and_log_name ('gr_fir_sysconfig_generic.h', 'w') + if not out: + return out.write (copyright) out.write ( @@ -110,6 +112,8 @@ gr_fir_sysconfig_generic::get_gr_fir_%s_info (std::vector *info) def make_gr_fir_sysconfig_generic_cc (): out = open_and_log_name ('gr_fir_sysconfig_generic.cc', 'w') + if not out: + return out.write (copyright) out.write ( diff --git a/gnuradio-core/src/lib/filter/generate_gr_fir_util.py b/gnuradio-core/src/lib/filter/generate_gr_fir_util.py index 3119562c..4f5f5ce0 100755 --- a/gnuradio-core/src/lib/filter/generate_gr_fir_util.py +++ b/gnuradio-core/src/lib/filter/generate_gr_fir_util.py @@ -1,6 +1,6 @@ #!/bin/env python # -# Copyright 2003 Free Software Foundation, Inc. +# Copyright 2003,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -44,6 +44,8 @@ def make_info (out, sig): def make_gr_fir_util_h (): out = open_and_log_name ('gr_fir_util.h', 'w') + if not out: + return out.write (copyright) out.write ( @@ -142,6 +144,8 @@ gr_fir_util::get_gr_fir_%s_info (std::vector *info) def make_gr_fir_util_cc (): out = open_and_log_name ('gr_fir_util.cc', 'w') + if not out: + return out.write (copyright) out.write (''' diff --git a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc index 501ae336..57850602 100644 --- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc +++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc @@ -27,7 +27,7 @@ #include #include -gr_adaptive_fir_ccf::gr_adaptive_fir_ccf(char *name, int decimation, const std::vector &taps) +gr_adaptive_fir_ccf::gr_adaptive_fir_ccf(const char *name, int decimation, const std::vector &taps) : gr_sync_decimator (name, gr_make_io_signature (1, 1, sizeof(gr_complex)), gr_make_io_signature (1, 1, sizeof(gr_complex)), diff --git a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h index 6df0bf5b..f860f4fa 100644 --- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h +++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.h @@ -27,7 +27,7 @@ /*! * \brief Adaptive FIR filter with gr_complex input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_adaptive_fir_ccf : public gr_sync_decimator { @@ -44,9 +44,10 @@ protected: // Override to calculate new weight from old, corresponding input virtual void update_tap(float &tap, const gr_complex &in) = 0; - + + gr_adaptive_fir_ccf(const char *name, int decimation, const std::vector &taps); + public: - gr_adaptive_fir_ccf(char *name, int decimation, const std::vector &taps); void set_taps(const std::vector &taps); int work(int noutput_items, diff --git a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.i b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.i index 90132f2d..c73c7804 100644 --- a/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.i +++ b/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.i @@ -22,7 +22,7 @@ class gr_adaptive_fir_ccf : public gr_sync_decimator { -private: +protected: gr_adaptive_fir_ccf(char *name, int decimation, const std::vector &taps); public: diff --git a/gnuradio-core/src/lib/filter/gr_altivec.c b/gnuradio-core/src/lib/filter/gr_altivec.c new file mode 100644 index 00000000..41613274 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_altivec.c @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include + +void +gr_print_vector_float(FILE *fp, vec_float4 v) +{ + union v_float_u u; + u.v = v; + fprintf(fp, "{ %f, %f, %f, %f }", u.f[0], u.f[1], u.f[2], u.f[3]); +} + +void +gr_pvf(FILE *fp, const char *label, vec_float4 v) +{ + fprintf(fp, "%s = ", label); + gr_print_vector_float(fp, v); + putc('\n', fp); +} diff --git a/gnuradio-core/src/lib/filter/gr_altivec.h b/gnuradio-core/src/lib/filter/gr_altivec.h new file mode 100644 index 00000000..c0d7cfb3 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_altivec.h @@ -0,0 +1,75 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_ALTIVEC_H +#define INCLUDED_GR_ALTIVEC_H + +/* + * N.B., always use "vec_float4" et al. instead of "vector float" to + * ensure portability across the various powerpc compilers. Some of + * them treat "vector" as a context specific keyword, some don't. + * Avoid the problem by always using the defines in vec_types.h + * (included below) + */ + +#include +#undef bool // repair namespace pollution +#undef vector // repair namespace pollution + +#ifdef HAVE_VEC_TYPES_H +#include // use system version if we've got it +#else +#include // fall back to our local copy +#endif +#undef qword // repair namespace pollution + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define VS sizeof(vec_float4) +#define FLOATS_PER_VEC (sizeof(vec_float4)/sizeof(float)) + +union v_float_u { + vec_float4 v; + float f[FLOATS_PER_VEC]; +}; + +void gr_print_vector_float(FILE *fp, vec_float4 v); +void gr_pvf(FILE *fp, const char *label, vec_float4 v); + +static inline float +horizontal_add_f(vec_float4 v) +{ + union v_float_u u; + vec_float4 t0 = vec_add(v, vec_sld(v, v, 8)); + vec_float4 t1 = vec_add(t0, vec_sld(t0, t0, 4)); + u.v = t1; + return u.f[0]; +} + +#ifdef __cplusplus +} +#endif + +#endif /* INCLUDED_GR_ALTIVEC_H */ diff --git a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h index 06c70f5b..c78047c1 100644 --- a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h +++ b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h @@ -33,7 +33,7 @@ gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu); /*! * \brief Implements constant modulus adaptive filter on complex stream - * \ingroup filter + * \ingroup eq_blk */ class gr_cma_equalizer_cc : public gr_adaptive_fir_ccf { diff --git a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.i b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.i index 3178156a..30e2fb8b 100644 --- a/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.i +++ b/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,7 +22,9 @@ GR_SWIG_BLOCK_MAGIC(gr,cma_equalizer_cc) -%include +// retrieve info on the base class, without generating wrappers since +// the base class has a pure virual method. +%import "gr_adaptive_fir_ccf.i" gr_cma_equalizer_cc_sptr gr_make_cma_equalizer_cc(int num_taps, float modulus, float mu); diff --git a/gnuradio-core/src/lib/filter/gr_cpu.cc b/gnuradio-core/src/lib/filter/gr_cpu.cc deleted file mode 100644 index 6fe3591c..00000000 --- a/gnuradio-core/src/lib/filter/gr_cpu.cc +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include - -/* - * execute CPUID instruction, return EAX, EBX, ECX and EDX values in result - */ -extern "C" { -void cpuid_x86 (unsigned int op, unsigned int result[4]); -}; - -/* - * CPUID functions returning a single datum - */ - -static inline unsigned int cpuid_eax(unsigned int op) -{ - unsigned int regs[4]; - cpuid_x86 (op, regs); - return regs[0]; -} - -static inline unsigned int cpuid_ebx(unsigned int op) -{ - unsigned int regs[4]; - cpuid_x86 (op, regs); - return regs[1]; -} - -static inline unsigned int cpuid_ecx(unsigned int op) -{ - unsigned int regs[4]; - cpuid_x86 (op, regs); - return regs[2]; -} - -static inline unsigned int cpuid_edx(unsigned int op) -{ - unsigned int regs[4]; - cpuid_x86 (op, regs); - return regs[3]; -} - -// ---------------------------------------------------------------- - -bool -gr_cpu::has_mmx () -{ - unsigned int edx = cpuid_edx (1); // standard features - return (edx & (1 << 23)) != 0; -} - -bool -gr_cpu::has_sse () -{ - unsigned int edx = cpuid_edx (1); // standard features - return (edx & (1 << 25)) != 0; -} - -bool -gr_cpu::has_sse2 () -{ - unsigned int edx = cpuid_edx (1); // standard features - return (edx & (1 << 26)) != 0; -} - -bool -gr_cpu::has_3dnow () -{ - unsigned int extended_fct_count = cpuid_eax (0x80000000); - if (extended_fct_count < 0x80000001) - return false; - - unsigned int extended_features = cpuid_edx (0x80000001); - return (extended_features & (1 << 31)) != 0; -} - -bool -gr_cpu::has_3dnowext () -{ - unsigned int extended_fct_count = cpuid_eax (0x80000000); - if (extended_fct_count < 0x80000001) - return false; - - unsigned int extended_features = cpuid_edx (0x80000001); - return (extended_features & (1 << 30)) != 0; -} diff --git a/gnuradio-core/src/lib/filter/gr_cpu.h b/gnuradio-core/src/lib/filter/gr_cpu.h index 2d42eb61..ef10beae 100644 --- a/gnuradio-core/src/lib/filter/gr_cpu.h +++ b/gnuradio-core/src/lib/filter/gr_cpu.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,8 +27,13 @@ struct gr_cpu { static bool has_mmx (); static bool has_sse (); static bool has_sse2 (); + static bool has_sse3 (); + static bool has_ssse3 (); + static bool has_sse4_1 (); + static bool has_sse4_2 (); static bool has_3dnow (); static bool has_3dnowext (); + static bool has_altivec (); }; #endif /* _GR_CPU_H_ */ diff --git a/gnuradio-core/src/lib/filter/gr_cpu_powerpc.cc b/gnuradio-core/src/lib/filter/gr_cpu_powerpc.cc new file mode 100644 index 00000000..35c342aa --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_cpu_powerpc.cc @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002,2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +bool +gr_cpu::has_mmx () +{ + return false; +} + +bool +gr_cpu::has_sse () +{ + return false; +} + +bool +gr_cpu::has_sse2 () +{ + return false; +} + +bool +gr_cpu::has_3dnow () +{ + return false; +} + +bool +gr_cpu::has_3dnowext () +{ + return false; +} + +bool +gr_cpu::has_altivec () +{ + return true; // FIXME assume we've always got it +} diff --git a/gnuradio-core/src/lib/filter/gr_cpu_x86.cc b/gnuradio-core/src/lib/filter/gr_cpu_x86.cc new file mode 100644 index 00000000..a13a69c0 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_cpu_x86.cc @@ -0,0 +1,113 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +/* + * execute CPUID instruction, return EAX, EBX, ECX and EDX values in result + */ +extern "C" { +void cpuid_x86 (unsigned int op, unsigned int result[4]); +}; + +/* + * CPUID functions returning a single datum + */ + +static inline unsigned int cpuid_eax(unsigned int op) +{ + unsigned int regs[4]; + cpuid_x86 (op, regs); + return regs[0]; +} + +static inline unsigned int cpuid_ebx(unsigned int op) +{ + unsigned int regs[4]; + cpuid_x86 (op, regs); + return regs[1]; +} + +static inline unsigned int cpuid_ecx(unsigned int op) +{ + unsigned int regs[4]; + cpuid_x86 (op, regs); + return regs[2]; +} + +static inline unsigned int cpuid_edx(unsigned int op) +{ + unsigned int regs[4]; + cpuid_x86 (op, regs); + return regs[3]; +} + +// ---------------------------------------------------------------- + +bool +gr_cpu::has_mmx () +{ + unsigned int edx = cpuid_edx (1); // standard features + return (edx & (1 << 23)) != 0; +} + +bool +gr_cpu::has_sse () +{ + unsigned int edx = cpuid_edx (1); // standard features + return (edx & (1 << 25)) != 0; +} + +bool +gr_cpu::has_sse2 () +{ + unsigned int edx = cpuid_edx (1); // standard features + return (edx & (1 << 26)) != 0; +} + +bool +gr_cpu::has_3dnow () +{ + unsigned int extended_fct_count = cpuid_eax (0x80000000); + if (extended_fct_count < 0x80000001) + return false; + + unsigned int extended_features = cpuid_edx (0x80000001); + return (extended_features & (1 << 31)) != 0; +} + +bool +gr_cpu::has_3dnowext () +{ + unsigned int extended_fct_count = cpuid_eax (0x80000000); + if (extended_fct_count < 0x80000001) + return false; + + unsigned int extended_features = cpuid_edx (0x80000001); + return (extended_features & (1 << 30)) != 0; +} + +bool +gr_cpu::has_altivec () +{ + return false; +} diff --git a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc index a4e6c991..3dd40d56 100644 --- a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc +++ b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.cc @@ -37,7 +37,9 @@ #include #include +#include #include +#include gr_fft_filter_ccc_sptr gr_make_fft_filter_ccc (int decimation, const std::vector &taps) { @@ -65,6 +67,7 @@ gr_fft_filter_ccc::~gr_fft_filter_ccc () delete d_invfft; } +#if 0 static void print_vector_complex(const std::string label, const std::vector &x) { @@ -73,6 +76,7 @@ print_vector_complex(const std::string label, const std::vector &x) std::cout << x[i] << " "; std::cout << "\n"; } +#endif void gr_fft_filter_ccc::set_taps (const std::vector &taps) diff --git a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h index 278f9ad5..c5363dcb 100644 --- a/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h +++ b/gnuradio-core/src/lib/filter/gr_fft_filter_ccc.h @@ -33,7 +33,7 @@ class gri_fft_complex; /*! * \brief Fast FFT filter with gr_complex input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fft_filter_ccc : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc index 865f8a1e..57232f3f 100644 --- a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc +++ b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.cc @@ -32,7 +32,10 @@ #include #include + +#include #include +#include gr_fft_filter_fff_sptr gr_make_fft_filter_fff (int decimation, const std::vector &taps) { @@ -57,6 +60,7 @@ gr_fft_filter_fff::~gr_fft_filter_fff () delete d_invfft; } +#if 0 static void print_vector_complex(const std::string label, const std::vector &x) { @@ -74,6 +78,7 @@ print_vector_float(const std::string label, const std::vector &x) std::cout << x[i] << " "; std::cout << "\n"; } +#endif void gr_fft_filter_fff::set_taps (const std::vector &taps) diff --git a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h index e39ad566..b2636110 100644 --- a/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h +++ b/gnuradio-core/src/lib/filter/gr_fft_filter_fff.h @@ -34,7 +34,7 @@ class gri_fft_real_rev; /*! * \brief Fast FFT filter with float input, float output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fft_filter_fff : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h b/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h index 8ecff003..946edf2c 100644 --- a/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h +++ b/gnuradio-core/src/lib/filter/gr_filter_delay_fc.h @@ -37,7 +37,7 @@ class gr_fir_fff; /*! * \brief Filter-Delay Combination Block. - * \ingroup filter + * \ingroup filter_blk * * The block takes one or two float stream and outputs a complex * stream. If only one float stream is input, the real output is diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.cc b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.cc index 8868b1a5..44fdeacd 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.cc +++ b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,6 +28,7 @@ #include #include #include +#include using std::cerr; using std::endl; @@ -105,6 +106,8 @@ gr_fir_ccc_simd::filter (const gr_complex input[]) if (ntaps () == 0) return 0.0; + if (((intptr_t) input & 0x7) != 0) + throw std::invalid_argument("gr_complex must be 8-byte aligned"); // Round input data address down to 16 byte boundary // NB: depending on the alignment of input[], memory diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h index a23965c7..14ff1e6b 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h +++ b/gnuradio-core/src/lib/filter/gr_fir_ccc_simd.h @@ -26,6 +26,7 @@ /*! * \brief common base class for SIMD versions of gr_fir_ccc + * \ingroup filter_primitive * * This base class handles alignment issues common to SSE and 3DNOW * subclasses. diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.cc b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.cc index 0862ba1f..c20cd4e6 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.cc +++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,6 +28,7 @@ #include #include #include +#include using std::cerr; using std::endl; @@ -103,6 +104,8 @@ gr_fir_ccf_simd::filter (const gr_complex input[]) if (ntaps () == 0) return 0.0; + if (((intptr_t) input & 0x7) != 0) + throw std::invalid_argument("gr_complex must be 8-byte aligned"); // Round input data address down to 16 byte boundary // NB: depending on the alignment of input[], memory diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h index de5bc5be..ebc6a1bc 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h +++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_simd.h @@ -27,6 +27,7 @@ /*! * \brief common base class for SIMD versions of gr_fir_ccf + * \ingroup filter_primitive * * This base class handles alignment issues common to SSE and 3DNOW * subclasses. diff --git a/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h b/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h index 2a50d0ff..7f936546 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h +++ b/gnuradio-core/src/lib/filter/gr_fir_ccf_x86.h @@ -27,6 +27,7 @@ /*! * \brief 3DNow! version of gr_fir_ccf + * \ingroup filter_primitive */ class gr_fir_ccf_3dnow : public gr_fir_ccf_simd { @@ -37,6 +38,7 @@ public: /*! * \brief SSE version of gr_fir_ccf + * \ingroup filter_primitive */ class gr_fir_ccf_sse : public gr_fir_ccf_simd { diff --git a/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h b/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h index fc98ad19..e2ed8bca 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h +++ b/gnuradio-core/src/lib/filter/gr_fir_fcc_simd.h @@ -27,6 +27,7 @@ /*! * \brief common base class for SIMD versions of gr_fir_fcc + * \ingroup filter_primitive * * This base class handles alignment issues common to SSE and 3DNOW * subclasses. diff --git a/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h b/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h index 3a643378..49386c35 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h +++ b/gnuradio-core/src/lib/filter/gr_fir_fcc_x86.h @@ -27,6 +27,7 @@ /*! * \brief 3DNow! version of gr_fir_fcc + * \ingroup filter_primitive */ class gr_fir_fcc_3dnow : public gr_fir_fcc_simd { @@ -37,6 +38,7 @@ public: /*! * \brief SSE version of gr_fir_fcc + * \ingroup filter_blk */ class gr_fir_fcc_sse : public gr_fir_fcc_simd { diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.cc b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.cc new file mode 100644 index 00000000..996e80cd --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include "posix_memalign.h" + +gr_fir_fff_altivec::gr_fir_fff_altivec() + : gr_fir_fff_generic(), + d_naligned_taps(0), d_aligned_taps(0) +{ +} + +gr_fir_fff_altivec::gr_fir_fff_altivec (const std::vector &new_taps) + : gr_fir_fff_generic(new_taps), + d_naligned_taps(0), d_aligned_taps(0) +{ + set_taps(new_taps); +} + +gr_fir_fff_altivec::~gr_fir_fff_altivec() +{ + if (d_aligned_taps){ + free(d_aligned_taps); + d_aligned_taps = 0; + } +} + +void +gr_fir_fff_altivec::set_taps(const std::vector &inew_taps) +{ + gr_fir_fff_generic::set_taps(inew_taps); // call superclass + d_naligned_taps = gr_p2_round_up(ntaps(), FLOATS_PER_VEC); + + if (d_aligned_taps){ + free(d_aligned_taps); + d_aligned_taps = 0; + } + void *p; + int r = posix_memalign(&p, sizeof(vec_float4), d_naligned_taps * sizeof(d_aligned_taps[0])); + if (r != 0){ + throw std::bad_alloc(); + } + d_aligned_taps = (float *) p; + memcpy(d_aligned_taps, &d_taps[0], ntaps() * sizeof(d_aligned_taps[0])); + for (size_t i = ntaps(); i < d_naligned_taps; i++) + d_aligned_taps[i] = 0.0; +} + + +float +gr_fir_fff_altivec::filter (const float input[]) +{ + if (d_naligned_taps == 0) + return 0.0; + + return dotprod_fff_altivec(input, d_aligned_taps, d_naligned_taps); +} diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h new file mode 100644 index 00000000..1694f552 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fir_fff_altivec.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_FIR_FFF_ALTIVEC_H +#define INCLUDED_GR_FIR_FFF_ALTIVEC_H + +#include + +/*! + * \brief altivec version of gr_fir_fff + */ +class gr_fir_fff_altivec : public gr_fir_fff_generic +{ +protected: + + size_t d_naligned_taps; // number of taps (multiple of 4) + float *d_aligned_taps; // 16-byte aligned, and zero padded to multiple of 4 + +public: + gr_fir_fff_altivec(); + gr_fir_fff_altivec(const std::vector &taps); + ~gr_fir_fff_altivec(); + + virtual void set_taps (const std::vector &taps); + virtual float filter (const float input[]); +}; + +#endif /* INCLUDED_GR_FIR_FFF_ALTIVEC_H */ diff --git a/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h b/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h index eac5cc92..82d3e3b9 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h +++ b/gnuradio-core/src/lib/filter/gr_fir_fff_simd.h @@ -26,6 +26,7 @@ /*! * \brief common base class for SIMD versions of gr_fir_fff + * \ingroup filter_primitive * * This base class handles alignment issues common to SSE and 3DNOW * subclasses. diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t b/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t index 6c283b62..f2e56c90 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_XXX.h.t @@ -38,7 +38,7 @@ class @FIR_TYPE@; /*! * \brief FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps - * \ingroup filter + * \ingroup filter_blk */ class @NAME@ : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_ccc.h b/gnuradio-core/src/lib/filter/gr_fir_filter_ccc.h index 70dcb279..f33b2dcb 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_ccc.h +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_ccc.h @@ -38,7 +38,7 @@ class gr_fir_ccc; /*! * \brief FIR filter with gr_complex input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fir_filter_ccc : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_ccf.h b/gnuradio-core/src/lib/filter/gr_fir_filter_ccf.h index b0bc50af..6f74532d 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_ccf.h +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_ccf.h @@ -38,7 +38,7 @@ class gr_fir_ccf; /*! * \brief FIR filter with gr_complex input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fir_filter_ccf : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_fcc.h b/gnuradio-core/src/lib/filter/gr_fir_filter_fcc.h index 70633aea..e9d06d29 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_fcc.h +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_fcc.h @@ -38,7 +38,7 @@ class gr_fir_fcc; /*! * \brief FIR filter with float input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fir_filter_fcc : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_fff.h b/gnuradio-core/src/lib/filter/gr_fir_filter_fff.h index 3476c02a..d7615144 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_fff.h +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_fff.h @@ -38,7 +38,7 @@ class gr_fir_fff; /*! * \brief FIR filter with float input, float output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fir_filter_fff : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_fsf.h b/gnuradio-core/src/lib/filter/gr_fir_filter_fsf.h index e4b1fd52..dcb6e031 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_fsf.h +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_fsf.h @@ -38,7 +38,7 @@ class gr_fir_fsf; /*! * \brief FIR filter with float input, short output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fir_filter_fsf : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_filter_scc.h b/gnuradio-core/src/lib/filter/gr_fir_filter_scc.h index a8170df1..a48de056 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_filter_scc.h +++ b/gnuradio-core/src/lib/filter/gr_fir_filter_scc.h @@ -38,7 +38,7 @@ class gr_fir_scc; /*! * \brief FIR filter with short input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_fir_filter_scc : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h b/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h index 3e802d2a..ad689407 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h +++ b/gnuradio-core/src/lib/filter/gr_fir_fsf_simd.h @@ -26,6 +26,7 @@ /*! * \brief common base class for SIMD versions of gr_fir_fsf + * \ingroup filter_primitive * * This base class handles alignment issues common to SSE and 3DNOW * subclasses. diff --git a/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h b/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h index a95344a9..78fdf73c 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h +++ b/gnuradio-core/src/lib/filter/gr_fir_fsf_x86.h @@ -27,6 +27,7 @@ /*! * \brief 3DNow! version of gr_fir_fsf + * \ingroup filter_primitive */ class gr_fir_fsf_3dnow : public gr_fir_fsf_simd { @@ -37,6 +38,7 @@ public: /*! * \brief SSE version of gr_fir_fsf + * \ingroup filter_primitive */ class gr_fir_fsf_sse : public gr_fir_fsf_simd { diff --git a/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h b/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h index 01b4e6cb..2af45c8f 100644 --- a/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h +++ b/gnuradio-core/src/lib/filter/gr_fir_scc_simd.h @@ -27,11 +27,11 @@ /*! * \brief common base class for SIMD versions of gr_fir_scc + * \ingroup filter_primitive * * This base class handles alignment issues common to SSE and 3DNOW * subclasses. */ - class gr_fir_scc_simd : public gr_fir_scc_generic { protected: diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.cc b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.cc new file mode 100644 index 00000000..34d3f813 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.cc @@ -0,0 +1,340 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002,2008 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. + */ +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + +#include +#include +//#include +#include +#include +//#include +#include +#include +#include +#include +#include +//#include +#include +#include +//#include +#include +#include +//#include + +#include +using std::cerr; + +/* + * ---------------------------------------------------------------- + * static functions that serve as constructors... + * ---------------------------------------------------------------- + */ + +#if 0 +static gr_fir_ccf * +make_gr_fir_ccf_altivec(const std::vector &taps) +{ + return new gr_fir_ccf_altivec(taps); +} + +static gr_fir_fcc * +make_gr_fir_fcc_altivec(const std::vector &taps) +{ + return new gr_fir_fcc_altivec(taps); +} + +static gr_fir_ccc * +make_gr_fir_ccc_altivec (const std::vector &taps) +{ + return new gr_fir_ccc_altivec (taps); +} +#endif + +static gr_fir_fff * +make_gr_fir_fff_altivec (const std::vector &taps) +{ + return new gr_fir_fff_altivec (taps); +} + +#if 0 +static gr_fir_fsf * +make_gr_fir_fsf_altivec (const std::vector &taps) +{ + return new gr_fir_fsf_altivec (taps); +} + +static gr_fir_scc * +make_gr_fir_scc_altivec(const std::vector &taps) +{ + return new gr_fir_scc_altivec(taps); +} +#endif + +/* + * ---------------------------------------------------------------- + * Return instances of the fastest powerpc versions of these classes. + * + * check CPUID, if has altivec, return altivec version, + * else return generic version. + * ---------------------------------------------------------------- + */ + +gr_fir_ccf * +gr_fir_sysconfig_powerpc::create_gr_fir_ccf (const std::vector &taps) +{ + static bool first = true; + +#if 0 + if (gr_cpu::has_altivec ()){ + if (first){ + cerr << ">>> gr_fir_ccf: using altivec\n"; + first = false; + } + return make_gr_fir_ccf_altivec (taps); + } +#endif + + if (0 && first){ + cerr << ">>> gr_fir_ccf: handing off to parent class\n"; + first = false; + } + return gr_fir_sysconfig_generic::create_gr_fir_ccf (taps); +} + +gr_fir_fcc * +gr_fir_sysconfig_powerpc::create_gr_fir_fcc (const std::vector &taps) +{ + static bool first = true; + +#if 0 + if (gr_cpu::has_altivec ()){ + if (first){ + cerr << ">>> gr_fir_fcc: using altivec\n"; + first = false; + } + return make_gr_fir_fcc_altivec (taps); + } +#endif + + if (0 && first){ + cerr << ">>> gr_fir_fcc: handing off to parent class\n"; + first = false; + } + return gr_fir_sysconfig_generic::create_gr_fir_fcc (taps); +} + +gr_fir_ccc * +gr_fir_sysconfig_powerpc::create_gr_fir_ccc (const std::vector &taps) +{ + static bool first = true; + +#if 0 + if (gr_cpu::has_altivec ()){ + if (first){ + cerr << ">>> gr_fir_ccc: using altivec\n"; + first = false; + } + return make_gr_fir_ccc_altivec (taps); + } +#endif + + if (0 && first){ + cerr << ">>> gr_fir_ccc: handing off to parent class\n"; + first = false; + } + return gr_fir_sysconfig_generic::create_gr_fir_ccc (taps); +} + +gr_fir_fff * +gr_fir_sysconfig_powerpc::create_gr_fir_fff (const std::vector &taps) +{ + static bool first = true; + + if (gr_cpu::has_altivec ()){ + if (first){ + cerr << ">>> gr_fir_fff: using altivec\n"; + first = false; + } + return make_gr_fir_fff_altivec (taps); + } + + if (0 && first){ + cerr << ">>> gr_fir_fff: handing off to parent class\n"; + first = false; + } + return gr_fir_sysconfig_generic::create_gr_fir_fff (taps); +} + +gr_fir_fsf * +gr_fir_sysconfig_powerpc::create_gr_fir_fsf (const std::vector &taps) +{ + static bool first = true; + +#if 0 + if (gr_cpu::has_altivec ()){ + if (first){ + cerr << ">>> gr_fir_fsf: using altivec\n"; + first = false; + } + return make_gr_fir_fsf_altivec (taps); + } +#endif + + if (0 && first){ + cerr << ">>> gr_fir_fsf: handing off to parent class\n"; + first = false; + } + return gr_fir_sysconfig_generic::create_gr_fir_fsf (taps); +} + + +gr_fir_scc * +gr_fir_sysconfig_powerpc::create_gr_fir_scc (const std::vector &taps) +{ + static bool first = true; + +#if 0 + if (gr_cpu::has_altivec ()){ + if (first){ + cerr << ">>> gr_fir_scc: using altivec\n"; + first = false; + } + return make_gr_fir_scc_altivec (taps); + } +#endif + + if (0 && first){ + cerr << ">>> gr_fir_scc: handing off to parent class\n"; + first = false; + } + return gr_fir_sysconfig_generic::create_gr_fir_scc (taps); +} + +/* + * ---------------------------------------------------------------- + * Return info about available implementations + * ---------------------------------------------------------------- + */ + +void +gr_fir_sysconfig_powerpc::get_gr_fir_ccf_info (std::vector *info) +{ + // invoke parent.. + gr_fir_sysconfig_generic::get_gr_fir_ccf_info (info); + +#if 0 + // add our stuff... + gr_fir_ccf_info t; + if (gr_cpu::has_altivec ()){ + t.name = "altivec"; + t.create = make_gr_fir_ccf_altivec; + (*info).push_back (t); + } +#endif +} + +void +gr_fir_sysconfig_powerpc::get_gr_fir_fcc_info (std::vector *info) +{ + // invoke parent.. + gr_fir_sysconfig_generic::get_gr_fir_fcc_info (info); + +#if 0 + // add our stuff... + gr_fir_fcc_info t; + if (gr_cpu::has_altivec ()){ + t.name = "altivec"; + t.create = make_gr_fir_fcc_altivec; + (*info).push_back (t); + } +#endif +} + +void +gr_fir_sysconfig_powerpc::get_gr_fir_ccc_info (std::vector *info) +{ + // invoke parent.. + gr_fir_sysconfig_generic::get_gr_fir_ccc_info (info); + +#if 0 + // add our stuff... + gr_fir_ccc_info t; + if (gr_cpu::has_altivec ()){ + t.name = "altivec"; + t.create = make_gr_fir_ccc_altivec; + (*info).push_back (t); + } +#endif +} + +void +gr_fir_sysconfig_powerpc::get_gr_fir_fff_info (std::vector *info) +{ + // invoke parent.. + gr_fir_sysconfig_generic::get_gr_fir_fff_info (info); + + // add our stuff... + gr_fir_fff_info t; + if (gr_cpu::has_altivec ()){ + t.name = "altivec"; + t.create = make_gr_fir_fff_altivec; + (*info).push_back (t); + } +} + +void +gr_fir_sysconfig_powerpc::get_gr_fir_fsf_info (std::vector *info) +{ + // invoke parent.. + gr_fir_sysconfig_generic::get_gr_fir_fsf_info (info); + +#if 0 + // add our stuff... + gr_fir_fsf_info t; + if (gr_cpu::has_altivec ()){ + t.name = "altivec"; + t.create = make_gr_fir_fsf_altivec; + (*info).push_back (t); + } +#endif +} + +void +gr_fir_sysconfig_powerpc::get_gr_fir_scc_info (std::vector *info) +{ + // invoke parent.. + gr_fir_sysconfig_generic::get_gr_fir_scc_info (info); + +#if 0 + // add our stuff... + gr_fir_scc_info t; + if (gr_cpu::has_altivec ()){ + t.name = "altivec"; + t.create = make_gr_fir_scc_altivec; + (*info).push_back (t); + } +#endif +} diff --git a/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h new file mode 100644 index 00000000..9c31cdf1 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fir_sysconfig_powerpc.h @@ -0,0 +1,46 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002,2008 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. + */ +#ifndef INCLUDED_GR_FIR_SYSCONFIG_POWERPC_H +#define INCLUDED_GR_FIR_SYSCONFIG_POWERPC_H + +#include + +class gr_fir_sysconfig_powerpc : public gr_fir_sysconfig_generic { +public: + virtual gr_fir_ccf *create_gr_fir_ccf (const std::vector &taps); + virtual gr_fir_fcc *create_gr_fir_fcc (const std::vector &taps); + virtual gr_fir_fff *create_gr_fir_fff (const std::vector &taps); + virtual gr_fir_fsf *create_gr_fir_fsf (const std::vector &taps); + virtual gr_fir_scc *create_gr_fir_scc (const std::vector &taps); + virtual gr_fir_ccc *create_gr_fir_ccc (const std::vector &taps); +//virtual gr_fir_sss *create_gr_fir_sss (const std::vector &taps); + + virtual void get_gr_fir_ccf_info (std::vector *info); + virtual void get_gr_fir_fcc_info (std::vector *info); + virtual void get_gr_fir_fff_info (std::vector *info); + virtual void get_gr_fir_fsf_info (std::vector *info); + virtual void get_gr_fir_scc_info (std::vector *info); + virtual void get_gr_fir_ccc_info (std::vector *info); +//virtual void get_gr_fir_sss_info (std::vector *info); +}; + +#endif diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator.cc b/gnuradio-core/src/lib/filter/gr_fractional_interpolator.cc deleted file mode 100644 index 9166fcf7..00000000 --- a/gnuradio-core/src/lib/filter/gr_fractional_interpolator.cc +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -// Public constructor -gr_fractional_interpolator_sptr gr_make_fractional_interpolator(float phase_shift, float interp_ratio) -{ - return gr_fractional_interpolator_sptr(new gr_fractional_interpolator(phase_shift, interp_ratio)); -} - -gr_fractional_interpolator::gr_fractional_interpolator(float phase_shift, float interp_ratio) - : gr_block ("fractional_interpolator", - gr_make_io_signature (1, 1, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (float))), - d_mu (phase_shift), d_mu_inc (interp_ratio), d_interp() -{ - if (interp_ratio <= 0) - throw std::out_of_range ("interpolation ratio must be > 0"); - if (phase_shift < 0 || phase_shift > 1) - throw std::out_of_range ("phase shift ratio must be > 0 and < 1"); - - set_relative_rate (1.0 / interp_ratio); -} - -gr_fractional_interpolator::~gr_fractional_interpolator() -{ - delete d_interp; -} - -void -gr_fractional_interpolator::forecast(int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size(); - for (unsigned i=0; i < ninputs; i++) - - ninput_items_required[i] = - (int) ceil((noutput_items * d_mu_inc) + d_interp->ntaps()); -} - -int -gr_fractional_interpolator::general_work(int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - - int ii = 0; // input index - int oo = 0; // output index - - while (oo < noutput_items){ - - // produce output sample - - out[oo++] = d_interp->interpolate(&in[ii], d_mu); - - // printf( "%4d %9.6f\n", ii, d_mu); - - double s = d_mu + d_mu_inc; - double f = floor (s); - int incr = (int) f; - d_mu = s - f; - ii += incr; - } - - consume_each (ii); - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator.h deleted file mode 100644 index eda0b772..00000000 --- a/gnuradio-core/src/lib/filter/gr_fractional_interpolator.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_H -#define INCLUDED_GR_FRACTIONAL_INTERPOLATOR_H - -#include - -class gri_mmse_fir_interpolator; - -class gr_fractional_interpolator; -typedef boost::shared_ptr gr_fractional_interpolator_sptr; - -// public constructor -gr_fractional_interpolator_sptr gr_make_fractional_interpolator (float phase_shift, float interp_ratio); - -/*! - * \brief Interpolating mmse filter with float input, float output - * \ingroup filter - */ -class gr_fractional_interpolator : public gr_block -{ - public: - ~gr_fractional_interpolator (); - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - -protected: - gr_fractional_interpolator (float phase_shift, float interp_ratio); - - private: - float d_mu; - float d_mu_inc; - gri_mmse_fir_interpolator *d_interp; - - friend gr_fractional_interpolator_sptr - gr_make_fractional_interpolator (float phase_shift, float interp_ratio); -}; - -#endif diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.cc b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.cc new file mode 100644 index 00000000..56a1a31a --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +// Public constructor +gr_fractional_interpolator_cc_sptr gr_make_fractional_interpolator_cc(float phase_shift, float interp_ratio) +{ + return gr_fractional_interpolator_cc_sptr(new gr_fractional_interpolator_cc(phase_shift, interp_ratio)); +} + +gr_fractional_interpolator_cc::gr_fractional_interpolator_cc(float phase_shift, float interp_ratio) + : gr_block ("fractional_interpolator_cc", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + gr_make_io_signature (1, 1, sizeof (gr_complex))), + d_mu (phase_shift), d_mu_inc (interp_ratio), d_interp(new gri_mmse_fir_interpolator_cc()) +{ + if (interp_ratio <= 0) + throw std::out_of_range ("interpolation ratio must be > 0"); + if (phase_shift < 0 || phase_shift > 1) + throw std::out_of_range ("phase shift ratio must be > 0 and < 1"); + + set_relative_rate (1.0 / interp_ratio); +} + +gr_fractional_interpolator_cc::~gr_fractional_interpolator_cc() +{ + delete d_interp; +} + +void +gr_fractional_interpolator_cc::forecast(int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size(); + for (unsigned i=0; i < ninputs; i++) + + ninput_items_required[i] = + (int) ceil((noutput_items * d_mu_inc) + d_interp->ntaps()); +} + +int +gr_fractional_interpolator_cc::general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + int ii = 0; // input index + int oo = 0; // output index + + while (oo < noutput_items) { + + out[oo++] = d_interp->interpolate(&in[ii], d_mu); + + double s = d_mu + d_mu_inc; + double f = floor (s); + int incr = (int) f; + d_mu = s - f; + ii += incr; + } + + consume_each (ii); + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h new file mode 100644 index 00000000..c8378c43 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_CC_H +#define INCLUDED_GR_FRACTIONAL_INTERPOLATOR_CC_H + +#include + +class gri_mmse_fir_interpolator_cc; + +class gr_fractional_interpolator_cc; +typedef boost::shared_ptr gr_fractional_interpolator_cc_sptr; + +// public constructor +gr_fractional_interpolator_cc_sptr gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio); + +/*! + * \brief Interpolating mmse filter with gr_complex input, gr_complex output + * \ingroup filter_blk + */ +class gr_fractional_interpolator_cc : public gr_block +{ +public: + ~gr_fractional_interpolator_cc (); + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + float mu() const { return d_mu;} + float interp_ratio() const { return d_mu_inc;} + void set_mu (float mu) { d_mu = mu; } + void set_interp_ratio (float interp_ratio) { d_mu_inc = interp_ratio; } + +protected: + gr_fractional_interpolator_cc (float phase_shift, float interp_ratio); + +private: + float d_mu; + float d_mu_inc; + gri_mmse_fir_interpolator_cc *d_interp; + + friend gr_fractional_interpolator_cc_sptr + gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio); +}; + +#endif diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.i b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.i new file mode 100644 index 00000000..2803aae1 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_cc.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,fractional_interpolator_cc); + +gr_fractional_interpolator_cc_sptr gr_make_fractional_interpolator_cc (float phase_shift, float interp_ratio); + +class gr_fractional_interpolator_cc : public gr_block +{ +private: + gr_fractional_interpolator_cc (float phase_shift, float interp_ratio); + +public: + float mu() const; + float interp_ratio() const; + void set_mu (float mu); + void set_interp_ratio (float interp_ratio); +}; diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.cc b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.cc new file mode 100644 index 00000000..0e0fdad7 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +// Public constructor +gr_fractional_interpolator_ff_sptr gr_make_fractional_interpolator_ff(float phase_shift, float interp_ratio) +{ + return gr_fractional_interpolator_ff_sptr(new gr_fractional_interpolator_ff(phase_shift, interp_ratio)); +} + +gr_fractional_interpolator_ff::gr_fractional_interpolator_ff(float phase_shift, float interp_ratio) + : gr_block ("fractional_interpolator_ff", + gr_make_io_signature (1, 1, sizeof (float)), + gr_make_io_signature (1, 1, sizeof (float))), + d_mu (phase_shift), d_mu_inc (interp_ratio), d_interp(new gri_mmse_fir_interpolator()) +{ + if (interp_ratio <= 0) + throw std::out_of_range ("interpolation ratio must be > 0"); + if (phase_shift < 0 || phase_shift > 1) + throw std::out_of_range ("phase shift ratio must be > 0 and < 1"); + + set_relative_rate (1.0 / interp_ratio); +} + +gr_fractional_interpolator_ff::~gr_fractional_interpolator_ff() +{ + delete d_interp; +} + +void +gr_fractional_interpolator_ff::forecast(int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size(); + for (unsigned i=0; i < ninputs; i++) + + ninput_items_required[i] = + (int) ceil((noutput_items * d_mu_inc) + d_interp->ntaps()); +} + +int +gr_fractional_interpolator_ff::general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + int ii = 0; // input index + int oo = 0; // output index + + while (oo < noutput_items) { + + out[oo++] = d_interp->interpolate(&in[ii], d_mu); + + double s = d_mu + d_mu_inc; + double f = floor (s); + int incr = (int) f; + d_mu = s - f; + ii += incr; + } + + consume_each (ii); + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h new file mode 100644 index 00000000..f5012928 --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifndef INCLUDED_GR_FRACTIONAL_INTERPOLATOR_FF_H +#define INCLUDED_GR_FRACTIONAL_INTERPOLATOR_FF_H + +#include + +class gri_mmse_fir_interpolator; + +class gr_fractional_interpolator_ff; +typedef boost::shared_ptr gr_fractional_interpolator_ff_sptr; + +// public constructor +gr_fractional_interpolator_ff_sptr gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio); + +/*! + * \brief Interpolating mmse filter with float input, float output + * \ingroup filter_blk + */ +class gr_fractional_interpolator_ff : public gr_block +{ +public: + ~gr_fractional_interpolator_ff (); + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + float mu() const { return d_mu;} + float interp_ratio() const { return d_mu_inc;} + void set_mu (float mu) { d_mu = mu; } + void set_interp_ratio (float interp_ratio) { d_mu_inc = interp_ratio; } + +protected: + gr_fractional_interpolator_ff (float phase_shift, float interp_ratio); + +private: + float d_mu; + float d_mu_inc; + gri_mmse_fir_interpolator *d_interp; + + friend gr_fractional_interpolator_ff_sptr + gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio); +}; + +#endif diff --git a/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.i b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.i new file mode 100644 index 00000000..9ae3e2ad --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_fractional_interpolator_ff.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,fractional_interpolator_ff); + +gr_fractional_interpolator_ff_sptr gr_make_fractional_interpolator_ff (float phase_shift, float interp_ratio); + +class gr_fractional_interpolator_ff : public gr_block +{ +private: + gr_fractional_interpolator_ff (float phase_shift, float interp_ratio); + +public: + float mu() const; + float interp_ratio() const; + void set_mu (float mu); + void set_interp_ratio (float interp_ratio); +}; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.cc.t b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.cc.t index 49721ed6..f51e046a 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.cc.t +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.cc.t @@ -110,6 +110,7 @@ int set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t index ba0db8a6..1205e8a0 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_XXX.h.t @@ -49,7 +49,7 @@ class @FIR_TYPE@; /*! * \brief FIR filter combined with frequency translation with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.cc b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.cc index 4200bf7c..a27bc1e8 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.cc +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.cc @@ -110,6 +110,7 @@ gr_freq_xlating_fir_filter_ccc::work (int noutput_items, set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.h b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.h index 8dfdbae1..706d9460 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.h +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccc.h @@ -49,7 +49,7 @@ class gr_fir_ccc; /*! * \brief FIR filter combined with frequency translation with gr_complex input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.cc b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.cc index e9e0f7c3..6f3d9876 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.cc +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.cc @@ -110,6 +110,7 @@ gr_freq_xlating_fir_filter_ccf::work (int noutput_items, set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.h b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.h index 21ca24b0..681d82bb 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.h +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_ccf.h @@ -49,7 +49,7 @@ class gr_fir_ccc; /*! * \brief FIR filter combined with frequency translation with gr_complex input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.cc b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.cc index 9b28a27a..9adb8701 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.cc +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.cc @@ -110,6 +110,7 @@ gr_freq_xlating_fir_filter_fcc::work (int noutput_items, set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.h b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.h index 872b3463..0087fb8d 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.h +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcc.h @@ -49,7 +49,7 @@ class gr_fir_fcc; /*! * \brief FIR filter combined with frequency translation with float input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.cc b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.cc index ef2d84e1..ac1bcbd3 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.cc +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.cc @@ -110,6 +110,7 @@ gr_freq_xlating_fir_filter_fcf::work (int noutput_items, set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.h b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.h index c26ba0c0..760ce0ee 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.h +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_fcf.h @@ -49,7 +49,7 @@ class gr_fir_fcc; /*! * \brief FIR filter combined with frequency translation with float input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.cc b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.cc index 2ccfe3fc..f274378e 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.cc +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.cc @@ -110,6 +110,7 @@ gr_freq_xlating_fir_filter_scc::work (int noutput_items, set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.h b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.h index ce0b51b7..012bc1d5 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.h +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scc.h @@ -49,7 +49,7 @@ class gr_fir_scc; /*! * \brief FIR filter combined with frequency translation with short input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.cc b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.cc index d2465a55..96f94245 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.cc +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.cc @@ -110,6 +110,7 @@ gr_freq_xlating_fir_filter_scf::work (int noutput_items, set_history (d_proto_taps.size ()); build_composite_fir (); d_updated = false; + return 0; // history requirements may have changed. } unsigned j = 0; diff --git a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.h b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.h index eaa914eb..e8cb02aa 100644 --- a/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.h +++ b/gnuradio-core/src/lib/filter/gr_freq_xlating_fir_filter_scf.h @@ -49,7 +49,7 @@ class gr_fir_scc; /*! * \brief FIR filter combined with frequency translation with short input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk * * This class efficiently combines a frequency translation * (typically "down conversion") with a FIR filter (typically low-pass) diff --git a/gnuradio-core/src/lib/filter/gr_goertzel_fc.h b/gnuradio-core/src/lib/filter/gr_goertzel_fc.h index 16b5252e..9518c5c9 100644 --- a/gnuradio-core/src/lib/filter/gr_goertzel_fc.h +++ b/gnuradio-core/src/lib/filter/gr_goertzel_fc.h @@ -34,7 +34,7 @@ gr_goertzel_fc_sptr gr_make_goertzel_fc(int rate, int len, float freq); /*! * \brief Goertzel single-bin DFT calculation. - * \ingroup filter + * \ingroup dft_blk */ class gr_goertzel_fc : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/filter/gr_hilbert_fc.h b/gnuradio-core/src/lib/filter/gr_hilbert_fc.h index 53366c73..adcac779 100644 --- a/gnuradio-core/src/lib/filter/gr_hilbert_fc.h +++ b/gnuradio-core/src/lib/filter/gr_hilbert_fc.h @@ -38,7 +38,7 @@ class gr_fir_fff; /*! * \brief Hilbert transformer. - * \ingroup filter + * \ingroup filter_blk * * real output is input appropriately delayed. * imaginary output is hilbert filtered (90 degree phase shift) diff --git a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.cc b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.cc index 675118ce..0c2d3863 100644 --- a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.cc +++ b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.cc @@ -57,11 +57,6 @@ void gr_iir_filter_ffd::set_taps (const std::vector &fftaps, const std::vector &fbtaps) throw (std::invalid_argument) { - if (fftaps.size () != fbtaps.size ()){ - fprintf (stderr, - "gr_iir_filter_ffd::set_taps: fftaps and fbtaps must have the same number of elements.\n"); - throw std::invalid_argument ("gr_iir_filter_ffd::set_taps"); - } d_new_fftaps = fftaps; d_new_fbtaps = fbtaps; @@ -76,7 +71,6 @@ gr_iir_filter_ffd::work (int noutput_items, const float *in = (const float *) input_items[0]; float *out = (float *) output_items[0]; - // fprintf (stderr, "gr_iir_filter_ffd::work noutput_items = %d\n", noutput_items); if (d_updated){ d_iir.set_taps (d_new_fftaps, d_new_fbtaps); diff --git a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h index 48413e68..0382646f 100644 --- a/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h +++ b/gnuradio-core/src/lib/filter/gr_iir_filter_ffd.h @@ -35,17 +35,16 @@ gr_make_iir_filter_ffd (const std::vector &fftaps, /*! * \brief IIR filter with float input, float output and double taps - * \ingroup filter + * \ingroup filter_blk * * This filter uses the Direct Form I implementation, where * \p fftaps contains the feed-forward taps, and \p fbtaps the feedback ones. * - * \p fftaps and \p fbtaps must have equal numbers of taps - * + * * The input and output satisfy a difference equation of the form \f[ - y[n] - \sum_{k=1}^{N} a_k y[n-k] = \sum_{k=0}^{M} b_k x[n-k] + y[n] - \sum_{k=1}^{M} a_k y[n-k] = \sum_{k=0}^{N} b_k x[n-k] \f] * with the corresponding rational system function diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t index ee886d8f..790e0b90 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_XXX.h.t @@ -38,7 +38,7 @@ class @FIR_TYPE@; /*! * \brief Interpolating FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps - * \ingroup filter + * \ingroup filter_blk */ class @NAME@ : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccc.h b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccc.h index 2a959aee..24cd3745 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccc.h +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccc.h @@ -38,7 +38,7 @@ class gr_fir_ccc; /*! * \brief Interpolating FIR filter with gr_complex input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_interp_fir_filter_ccc : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccf.h b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccf.h index 24a9b972..bc97de98 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccf.h +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_ccf.h @@ -38,7 +38,7 @@ class gr_fir_ccf; /*! * \brief Interpolating FIR filter with gr_complex input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_interp_fir_filter_ccf : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fcc.h b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fcc.h index 6782d947..f4dee3d6 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fcc.h +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fcc.h @@ -38,7 +38,7 @@ class gr_fir_fcc; /*! * \brief Interpolating FIR filter with float input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_interp_fir_filter_fcc : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fff.h b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fff.h index 717c2b2a..176c5228 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fff.h +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fff.h @@ -38,7 +38,7 @@ class gr_fir_fff; /*! * \brief Interpolating FIR filter with float input, float output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_interp_fir_filter_fff : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fsf.h b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fsf.h index a2b8c24f..de7333bd 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fsf.h +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_fsf.h @@ -38,7 +38,7 @@ class gr_fir_fsf; /*! * \brief Interpolating FIR filter with float input, short output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_interp_fir_filter_fsf : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_scc.h b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_scc.h index 54f70129..bbf427f3 100644 --- a/gnuradio-core/src/lib/filter/gr_interp_fir_filter_scc.h +++ b/gnuradio-core/src/lib/filter/gr_interp_fir_filter_scc.h @@ -38,7 +38,7 @@ class gr_fir_scc; /*! * \brief Interpolating FIR filter with short input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_interp_fir_filter_scc : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t index 3cb269a2..983b350f 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_XXX.h.t @@ -42,7 +42,7 @@ class @FIR_TYPE@; /*! * \brief Rational Resampling Polyphase FIR filter with @I_TYPE@ input, @O_TYPE@ output and @TAP_TYPE@ taps - * \ingroup filter + * \ingroup filter_blk */ class @NAME@ : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccc.h b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccc.h index 08649ea6..68a0128b 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccc.h +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccc.h @@ -42,7 +42,7 @@ class gr_fir_ccc; /*! * \brief Rational Resampling Polyphase FIR filter with gr_complex input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_rational_resampler_base_ccc : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccf.h b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccf.h index f02155d8..48fd3d9d 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccf.h +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_ccf.h @@ -42,7 +42,7 @@ class gr_fir_ccf; /*! * \brief Rational Resampling Polyphase FIR filter with gr_complex input, gr_complex output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_rational_resampler_base_ccf : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fcc.h b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fcc.h index 972ec3f9..a3f90ca2 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fcc.h +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fcc.h @@ -42,7 +42,7 @@ class gr_fir_fcc; /*! * \brief Rational Resampling Polyphase FIR filter with float input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_rational_resampler_base_fcc : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fff.h b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fff.h index 3b46f409..31a5b81d 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fff.h +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fff.h @@ -42,7 +42,7 @@ class gr_fir_fff; /*! * \brief Rational Resampling Polyphase FIR filter with float input, float output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_rational_resampler_base_fff : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fsf.h b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fsf.h index ce7bd9ba..22654292 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fsf.h +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_fsf.h @@ -42,7 +42,7 @@ class gr_fir_fsf; /*! * \brief Rational Resampling Polyphase FIR filter with float input, short output and float taps - * \ingroup filter + * \ingroup filter_blk */ class gr_rational_resampler_base_fsf : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_scc.h b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_scc.h index 38016392..c90295ea 100644 --- a/gnuradio-core/src/lib/filter/gr_rational_resampler_base_scc.h +++ b/gnuradio-core/src/lib/filter/gr_rational_resampler_base_scc.h @@ -42,7 +42,7 @@ class gr_fir_scc; /*! * \brief Rational Resampling Polyphase FIR filter with short input, gr_complex output and gr_complex taps - * \ingroup filter + * \ingroup filter_blk */ class gr_rational_resampler_base_scc : public gr_block { diff --git a/gnuradio-core/src/lib/filter/gr_rotator.h b/gnuradio-core/src/lib/filter/gr_rotator.h index ccc08c9c..cb8f21a4 100644 --- a/gnuradio-core/src/lib/filter/gr_rotator.h +++ b/gnuradio-core/src/lib/filter/gr_rotator.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003 Free Software Foundation, Inc. + * Copyright 2003,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,21 +28,24 @@ class gr_rotator { gr_complex d_phase; gr_complex d_phase_incr; + unsigned int d_counter; public: - gr_rotator () : d_phase (1), d_phase_incr (0) { } + gr_rotator () : d_phase (1), d_phase_incr (1), d_counter(0) { } - void set_phase (gr_complex phase) { d_phase = phase; } - void set_phase_incr (gr_complex incr) { d_phase_incr = incr; } + void set_phase (gr_complex phase) { d_phase = phase / abs(phase); } + void set_phase_incr (gr_complex incr) { d_phase_incr = incr / abs(incr); } gr_complex rotate (gr_complex in){ - d_phase *= d_phase_incr; // incr our phase (complex mult == add phases) + d_counter++; - d_phase /= abs(d_phase); // ensure multiplication is rotation - // FIXME. This is expensive. Maybe workaround using - // double precision complex??? + gr_complex z = in * d_phase; // rotate in by phase + d_phase *= d_phase_incr; // incr our phase (complex mult == add phases) - return in * d_phase; // rotate in by phase + if ((d_counter % 512) == 0) + d_phase /= abs(d_phase); // Normalize to ensure multiplication is rotation + + return z; } }; diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_avg.h b/gnuradio-core/src/lib/filter/gr_single_pole_avg.h deleted file mode 100644 index 0995eee3..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_avg.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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. - */ -#ifndef _GR_SINGLE_POLE_AVG_H_ -#define _GR_SINGLE_POLE_AVG_H_ - -#include - -/*! - * \brief class template for single pole moving average filter - */ -template -class gr_single_pole_avg { -public: - /*! - * \brief construct new single pole moving average filter with given alpha - * - * computes y(i) = alpha * x(i) - (1-alpha) * y(i-1) - */ - gr_single_pole_avg (tap_type alpha = 1.0) - { - d_prev_input = 0; - set_taps (alpha); - } - - /*! - * \brief compute a single output value. - * \returns the filtered input value. - */ - o_type filter (const i_type input); - - /*! - * \brief compute an array of N output values. - * \p input must have n valid entries. - */ - void filterN (o_type output[], const i_type input[], unsigned long n); - - /*! - * \brief install \p alpha as the current taps. - */ - void set_taps (tap_type alpha) - { - if (alpha < 0 || alpha > 1) - throw std::out_of_range ("Alpha must be in [0, 1]\n"); - - d_alpha = alpha; - d_one_minus_alpha = 1.0 - alpha; - } - - //! reset state to zero - void reset () - { - d_prev_input = 0; - } - - tap_type prev_input () { return d_prev_input; } - -protected: - tap_type d_alpha; - tap_type d_one_minus_alpha; - tap_type d_prev_input; -}; - - -// -// general case. We may want to specialize this -// -template -o_type -gr_single_pole_avg::filter (const i_type input) -{ - tap_type output; - - output = d_alpha * input - d_one_minus_alpha * d_prev_input; - d_prev_input = input; - - return (o_type) output; -} - - -template -void -gr_single_pole_avg::filterN (o_type output[], - const i_type input[], - unsigned long n) -{ - for (unsigned i = 0; i < n; i++) - output[i] = filter (input[i]); -} - - -#endif /* _GR_SINGLE_POLE_AVG_H_ */ diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.cc b/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.cc deleted file mode 100644 index ee1f3ade..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.cc +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - - -gr_single_pole_avg_filter_ff_sptr -gr_make_single_pole_avg_filter_ff (double alpha, unsigned int vlen) -{ - return gr_single_pole_avg_filter_ff_sptr(new gr_single_pole_avg_filter_ff(alpha, vlen)); -} - -gr_single_pole_avg_filter_ff::gr_single_pole_avg_filter_ff ( - double alpha, unsigned int vlen) - : gr_sync_block ("single_pole_avg_filter_ff", - gr_make_io_signature (1, 1, sizeof (float) * vlen), - gr_make_io_signature (1, 1, sizeof (float) * vlen)), - d_vlen(vlen), d_rec(vlen) -{ - set_taps(alpha); -} - -gr_single_pole_avg_filter_ff::~gr_single_pole_avg_filter_ff () -{ - // nop -} - -void -gr_single_pole_avg_filter_ff::set_taps (double alpha) -{ - for (unsigned int i = 0; i < d_vlen; i++) - d_rec[i].set_taps(alpha); -} - -int -gr_single_pole_avg_filter_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - unsigned int vlen = d_vlen; - - if (d_vlen == 1){ - for (int i = 0; i < noutput_items; i++) - out[i] = d_rec[0].filter (in[i]); - } - else { - for (int i = 0; i < noutput_items; i++){ - for (unsigned int j = 0; j < vlen; j++){ - *out++ = d_rec[j].filter (*in++); - } - } - } - return noutput_items; -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.h b/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.h deleted file mode 100644 index dddc0d8a..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005 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. - */ - -#ifndef INCLUDED_GR_SINGLE_POLE_REC_FILTER_FF_H -#define INCLUDED_GR_SINGLE_POLE_REC_FILTER_FF_H - -#include -#include -#include - -class gr_single_pole_avg_filter_ff; -typedef boost::shared_ptr gr_single_pole_avg_filter_ff_sptr; - -gr_single_pole_avg_filter_ff_sptr -gr_make_single_pole_avg_filter_ff (double alpha, unsigned int vlen=1); - -/*! - * \brief single pole moving average filter with float input, float output - * \ingroup filter - * - * The input and output satisfy a difference equation of the form - - \f[ - y[n] - (1-alpha) y[n-1] = alpha x[n] - \f] - - * with the corresponding rational system function - - \f[ - H(z) = \frac{alpha}{1 - (1-alpha) z^{-1}} - \f] - - * Note that some texts define the system function with a + in the denominator. - * If you're using that convention, you'll need to negate the feedback tap. - */ -class gr_single_pole_avg_filter_ff : public gr_sync_block -{ - private: - friend gr_single_pole_avg_filter_ff_sptr - gr_make_single_pole_avg_filter_ff (double alpha, unsigned int vlen); - - unsigned int d_vlen; - std::vector > d_rec; - - gr_single_pole_avg_filter_ff (double alpha, unsigned int vlen); - - public: - ~gr_single_pole_avg_filter_ff (); - - void set_taps (double alpha); - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.i b/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.i deleted file mode 100644 index 6edec23d..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_avg_filter_ff.i +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,single_pole_avg_filter_ff); - -gr_single_pole_avg_filter_ff_sptr -gr_make_single_pole_avg_filter_ff (double alpha, unsigned int vlen=1); - -class gr_single_pole_avg_filter_ff : public gr_sync_block -{ - public: - ~gr_single_pole_avg_filter_ff (); - - void set_taps (double alpha); -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h index 7ae878d8..1f107342 100644 --- a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h +++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_cc.h @@ -36,7 +36,7 @@ gr_make_single_pole_iir_filter_cc (double alpha, unsigned int vlen=1); /*! * \brief single pole IIR filter with complex input, complex output - * \ingroup filter + * \ingroup filter_blk * * The input and output satisfy a difference equation of the form diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h index 15499d99..f676e94b 100644 --- a/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h +++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir_filter_ff.h @@ -35,7 +35,7 @@ gr_make_single_pole_iir_filter_ff (double alpha, unsigned int vlen=1); /*! * \brief single pole IIR filter with float input, float output - * \ingroup filter + * \ingroup filter_blk * * The input and output satisfy a difference equation of the form diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_rec.h b/gnuradio-core/src/lib/filter/gr_single_pole_rec.h deleted file mode 100644 index 62204861..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_rec.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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. - */ -#ifndef _GR_SINGLE_POLE_REC_H_ -#define _GR_SINGLE_POLE_REC_H_ - -#include - -/*! - * \brief class template for single pole recursive filter - */ -template -class gr_single_pole_rec { -public: - /*! - * \brief construct new single pole IIR with given alpha - * - * computes y(i) = alpha * x(i) - (1-alpha) * y(i-1) - */ - gr_single_pole_rec (tap_type alpha = 1.0) - { - d_prev_output = 0; - set_taps (alpha); - } - - /*! - * \brief compute a single output value. - * \returns the filtered input value. - */ - o_type filter (const i_type input); - - /*! - * \brief compute an array of N output values. - * \p input must have n valid entries. - */ - void filterN (o_type output[], const i_type input[], unsigned long n); - - /*! - * \brief install \p alpha as the current taps. - */ - void set_taps (tap_type alpha) - { - if (alpha < 0 || alpha > 1) - throw std::out_of_range ("Alpha must be in [0, 1]\n"); - - d_alpha = alpha; - d_one_minus_alpha = 1.0 - alpha; - } - - //! reset state to pole - void reset () - { - d_prev_output = 0; - } - - tap_type prev_output () { return d_prev_output; } - -protected: - tap_type d_alpha; - tap_type d_one_minus_alpha; - tap_type d_prev_output; -}; - - -// -// general case. We may want to specialize this -// -template -o_type -gr_single_pole_rec::filter (const i_type input) -{ - tap_type output; - - output = d_alpha * input + d_one_minus_alpha * d_prev_output; - d_prev_output = output; - - return (o_type) output; -} - - -template -void -gr_single_pole_rec::filterN (o_type output[], - const i_type input[], - unsigned long n) -{ - for (unsigned i = 0; i < n; i++) - output[i] = filter (input[i]); -} - - -#endif /* _GR_SINGLE_POLE_REC_H_ */ diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.cc b/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.cc deleted file mode 100644 index 683bafb2..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.cc +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - - -gr_single_pole_rec_filter_ff_sptr -gr_make_single_pole_rec_filter_ff (double alpha, unsigned int vlen) -{ - return gr_single_pole_rec_filter_ff_sptr(new gr_single_pole_rec_filter_ff(alpha, vlen)); -} - -gr_single_pole_rec_filter_ff::gr_single_pole_rec_filter_ff ( - double alpha, unsigned int vlen) - : gr_sync_block ("single_pole_rec_filter_ff", - gr_make_io_signature (1, 1, sizeof (float) * vlen), - gr_make_io_signature (1, 1, sizeof (float) * vlen)), - d_vlen(vlen), d_rec(vlen) -{ - set_taps(alpha); -} - -gr_single_pole_rec_filter_ff::~gr_single_pole_rec_filter_ff () -{ - // nop -} - -void -gr_single_pole_rec_filter_ff::set_taps (double alpha) -{ - for (unsigned int i = 0; i < d_vlen; i++) - d_rec[i].set_taps(alpha); -} - -int -gr_single_pole_rec_filter_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - unsigned int vlen = d_vlen; - - if (d_vlen == 1){ - for (int i = 0; i < noutput_items; i++) - out[i] = d_rec[0].filter (in[i]); - } - else { - for (int i = 0; i < noutput_items; i++){ - for (unsigned int j = 0; j < vlen; j++){ - *out++ = d_rec[j].filter (*in++); - } - } - } - return noutput_items; -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.h b/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.h deleted file mode 100644 index 66ef237c..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005 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. - */ - -#ifndef INCLUDED_GR_SINGLE_POLE_REC_FILTER_FF_H -#define INCLUDED_GR_SINGLE_POLE_REC_FILTER_FF_H - -#include -#include -#include - -class gr_single_pole_rec_filter_ff; -typedef boost::shared_ptr gr_single_pole_rec_filter_ff_sptr; - -gr_single_pole_rec_filter_ff_sptr -gr_make_single_pole_rec_filter_ff (double alpha, unsigned int vlen=1); - -/*! - * \brief single pole recursive filter with float input, float output - * \ingroup filter - * - * The input and output satisfy a difference equation of the form - - \f[ - y[n] - (1-alpha) y[n-1] = alpha x[n] - \f] - - * with the corresponding rational system function - - \f[ - H(z) = \frac{alpha}{1 - (1-alpha) z^{-1}} - \f] - - * Note that some texts define the system function with a + in the denominator. - * If you're using that convention, you'll need to negate the feedback tap. - */ -class gr_single_pole_rec_filter_ff : public gr_sync_block -{ - private: - friend gr_single_pole_rec_filter_ff_sptr - gr_make_single_pole_rec_filter_ff (double alpha, unsigned int vlen); - - unsigned int d_vlen; - std::vector > d_rec; - - gr_single_pole_rec_filter_ff (double alpha, unsigned int vlen); - - public: - ~gr_single_pole_rec_filter_ff (); - - void set_taps (double alpha); - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.i b/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.i deleted file mode 100644 index 90213b9d..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_pole_rec_filter_ff.i +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,single_pole_rec_filter_ff); - -gr_single_pole_rec_filter_ff_sptr -gr_make_single_pole_rec_filter_ff (double alpha, unsigned int vlen=1); - -class gr_single_pole_rec_filter_ff : public gr_sync_block -{ - public: - ~gr_single_pole_rec_filter_ff (); - - void set_taps (double alpha); -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_avg.h b/gnuradio-core/src/lib/filter/gr_single_zero_avg.h deleted file mode 100644 index 2c49c1e2..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_avg.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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. - */ -#ifndef _GR_SINGLE_ZERO_AVG_H_ -#define _GR_SINGLE_ZERO_AVG_H_ - -#include - -/*! - * \brief class template for single zero moving average filter - */ -template -class gr_single_zero_avg { -public: - /*! - * \brief construct new single zero moving average filter with given alpha - * - * computes y(i) = alpha * x(i) + (1-alpha) * y(i-1) - */ - gr_single_zero_avg (tap_type alpha = 1.0) - { - d_prev_input = 0; - set_taps (alpha); - } - - /*! - * \brief compute a single output value. - * \returns the filtered input value. - */ - o_type filter (const i_type input); - - /*! - * \brief compute an array of N output values. - * \p input must have n valid entries. - */ - void filterN (o_type output[], const i_type input[], unsigned long n); - - /*! - * \brief install \p alpha as the current taps. - */ - void set_taps (tap_type alpha) - { - if (alpha < 0 || alpha > 1) - throw std::out_of_range ("Alpha must be in [0, 1]\n"); - - d_alpha = alpha; - d_one_minus_alpha = 1.0 - alpha; - } - - //! reset state to zero - void reset () - { - d_prev_input = 0; - } - - tap_type prev_input () { return d_prev_input; } - -protected: - tap_type d_alpha; - tap_type d_one_minus_alpha; - tap_type d_prev_input; -}; - - -// -// general case. We may want to specialize this -// -template -o_type -gr_single_zero_avg::filter (const i_type input) -{ - tap_type output; - - output = d_alpha * input + d_one_minus_alpha * d_prev_input; - d_prev_input = input; - - return (o_type) output; -} - - -template -void -gr_single_zero_avg::filterN (o_type output[], - const i_type input[], - unsigned long n) -{ - for (unsigned i = 0; i < n; i++) - output[i] = filter (input[i]); -} - - -#endif /* _GR_SINGLE_ZERO_AVG_H_ */ diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.cc b/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.cc deleted file mode 100644 index cd07d55b..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.cc +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - - -gr_single_zero_avg_filter_ff_sptr -gr_make_single_zero_avg_filter_ff (double alpha, unsigned int vlen) -{ - return gr_single_zero_avg_filter_ff_sptr(new gr_single_zero_avg_filter_ff(alpha, vlen)); -} - -gr_single_zero_avg_filter_ff::gr_single_zero_avg_filter_ff ( - double alpha, unsigned int vlen) - : gr_sync_block ("single_zero_avg_filter_ff", - gr_make_io_signature (1, 1, sizeof (float) * vlen), - gr_make_io_signature (1, 1, sizeof (float) * vlen)), - d_vlen(vlen), d_rec(vlen) -{ - set_taps(alpha); -} - -gr_single_zero_avg_filter_ff::~gr_single_zero_avg_filter_ff () -{ - // nop -} - -void -gr_single_zero_avg_filter_ff::set_taps (double alpha) -{ - for (unsigned int i = 0; i < d_vlen; i++) - d_rec[i].set_taps(alpha); -} - -int -gr_single_zero_avg_filter_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - unsigned int vlen = d_vlen; - - if (d_vlen == 1){ - for (int i = 0; i < noutput_items; i++) - out[i] = d_rec[0].filter (in[i]); - } - else { - for (int i = 0; i < noutput_items; i++){ - for (unsigned int j = 0; j < vlen; j++){ - *out++ = d_rec[j].filter (*in++); - } - } - } - return noutput_items; -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.h b/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.h deleted file mode 100644 index 14e1ef7c..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005 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. - */ - -#ifndef INCLUDED_GR_SINGLE_ZERO_REC_FILTER_FF_H -#define INCLUDED_GR_SINGLE_ZERO_REC_FILTER_FF_H - -#include -#include -#include - -class gr_single_zero_avg_filter_ff; -typedef boost::shared_ptr gr_single_zero_avg_filter_ff_sptr; - -gr_single_zero_avg_filter_ff_sptr -gr_make_single_zero_avg_filter_ff (double alpha, unsigned int vlen=1); - -/*! - * \brief single zero moving average filter with float input, float output - * \ingroup filter - * - * The input and output satisfy a difference equation of the form - - \f[ - y[n] - (1-alpha) y[n-1] = alpha x[n] - \f] - - * with the corresponding rational system function - - \f[ - H(z) = \frac{alpha}{1 - (1-alpha) z^{-1}} - \f] - - * Note that some texts define the system function with a + in the denominator. - * If you're using that convention, you'll need to negate the feedback tap. - */ -class gr_single_zero_avg_filter_ff : public gr_sync_block -{ - private: - friend gr_single_zero_avg_filter_ff_sptr - gr_make_single_zero_avg_filter_ff (double alpha, unsigned int vlen); - - unsigned int d_vlen; - std::vector > d_rec; - - gr_single_zero_avg_filter_ff (double alpha, unsigned int vlen); - - public: - ~gr_single_zero_avg_filter_ff (); - - void set_taps (double alpha); - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.i b/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.i deleted file mode 100644 index 4715249e..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_avg_filter_ff.i +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,single_zero_avg_filter_ff); - -gr_single_zero_avg_filter_ff_sptr -gr_make_single_zero_avg_filter_ff (double alpha, unsigned int vlen=1); - -class gr_single_zero_avg_filter_ff : public gr_sync_block -{ - public: - ~gr_single_zero_avg_filter_ff (); - - void set_taps (double alpha); -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_rec.h b/gnuradio-core/src/lib/filter/gr_single_zero_rec.h deleted file mode 100644 index 461ef5fa..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_rec.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2002 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. - */ -#ifndef _GR_SINGLE_ZERO_REC_H_ -#define _GR_SINGLE_ZERO_REC_H_ - -#include - -/*! - * \brief class template for single zero recursive filter - */ -template -class gr_single_zero_rec { -public: - /*! - * \brief construct new single zero IIR with given alpha - * - * computes y(i) = alpha * x(i) - (1-alpha) * y(i-1) - */ - gr_single_zero_rec (tap_type alpha = 1.0) - { - d_prev_output = 0; - set_taps (alpha); - } - - /*! - * \brief compute a single output value. - * \returns the filtered input value. - */ - o_type filter (const i_type input); - - /*! - * \brief compute an array of N output values. - * \p input must have n valid entries. - */ - void filterN (o_type output[], const i_type input[], unsigned long n); - - /*! - * \brief install \p alpha as the current taps. - */ - void set_taps (tap_type alpha) - { - if (alpha < 0 || alpha > 1) - throw std::out_of_range ("Alpha must be in [0, 1]\n"); - - d_alpha = alpha; - d_one_minus_alpha = 1.0 - alpha; - } - - //! reset state to zero - void reset () - { - d_prev_output = 0; - } - - tap_type prev_output () { return d_prev_output; } - -protected: - tap_type d_alpha; - tap_type d_one_minus_alpha; - tap_type d_prev_output; -}; - - -// -// general case. We may want to specialize this -// -template -o_type -gr_single_zero_rec::filter (const i_type input) -{ - tap_type output; - - output = d_alpha * input - d_one_minus_alpha * d_prev_output; - d_prev_output = output; - - return (o_type) output; -} - - -template -void -gr_single_zero_rec::filterN (o_type output[], - const i_type input[], - unsigned long n) -{ - for (unsigned i = 0; i < n; i++) - output[i] = filter (input[i]); -} - - -#endif /* _GR_SINGLE_ZERO_REC_H_ */ diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.cc b/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.cc deleted file mode 100644 index 57c4d53d..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.cc +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - - -gr_single_zero_rec_filter_ff_sptr -gr_make_single_zero_rec_filter_ff (double alpha, unsigned int vlen) -{ - return gr_single_zero_rec_filter_ff_sptr(new gr_single_zero_rec_filter_ff(alpha, vlen)); -} - -gr_single_zero_rec_filter_ff::gr_single_zero_rec_filter_ff ( - double alpha, unsigned int vlen) - : gr_sync_block ("single_zero_rec_filter_ff", - gr_make_io_signature (1, 1, sizeof (float) * vlen), - gr_make_io_signature (1, 1, sizeof (float) * vlen)), - d_vlen(vlen), d_rec(vlen) -{ - set_taps(alpha); -} - -gr_single_zero_rec_filter_ff::~gr_single_zero_rec_filter_ff () -{ - // nop -} - -void -gr_single_zero_rec_filter_ff::set_taps (double alpha) -{ - for (unsigned int i = 0; i < d_vlen; i++) - d_rec[i].set_taps(alpha); -} - -int -gr_single_zero_rec_filter_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const float *in = (const float *) input_items[0]; - float *out = (float *) output_items[0]; - unsigned int vlen = d_vlen; - - if (d_vlen == 1){ - for (int i = 0; i < noutput_items; i++) - out[i] = d_rec[0].filter (in[i]); - } - else { - for (int i = 0; i < noutput_items; i++){ - for (unsigned int j = 0; j < vlen; j++){ - *out++ = d_rec[j].filter (*in++); - } - } - } - return noutput_items; -}; diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.h b/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.h deleted file mode 100644 index 989d9409..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2005 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. - */ - -#ifndef INCLUDED_GR_SINGLE_POLE_REC_FILTER_FF_H -#define INCLUDED_GR_SINGLE_POLE_REC_FILTER_FF_H - -#include -#include -#include - -class gr_single_zero_rec_filter_ff; -typedef boost::shared_ptr gr_single_zero_rec_filter_ff_sptr; - -gr_single_zero_rec_filter_ff_sptr -gr_make_single_zero_rec_filter_ff (double alpha, unsigned int vlen=1); - -/*! - * \brief single zero recursive filter with float input, float output - * \ingroup filter - * - * The input and output satisfy a difference equation of the form - - \f[ - y[n] - (1-alpha) y[n-1] = -alpha x[n] - \f] - - * with the corresponding system function - - \f[ - H(z) = {alpha - (1-alpha) z^{-1}} - \f] - - * Note that some texts define the system function with a + in the denominator. - * If you're using that convention, you'll need to negate the feedback tap. - */ -class gr_single_zero_rec_filter_ff : public gr_sync_block -{ - private: - friend gr_single_zero_rec_filter_ff_sptr - gr_make_single_zero_rec_filter_ff (double alpha, unsigned int vlen); - - unsigned int d_vlen; - std::vector > d_rec; - - gr_single_zero_rec_filter_ff (double alpha, unsigned int vlen); - - public: - ~gr_single_zero_rec_filter_ff (); - - void set_taps (double alpha); - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.i b/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.i deleted file mode 100644 index 1aa896c4..00000000 --- a/gnuradio-core/src/lib/filter/gr_single_zero_rec_filter_ff.i +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -GR_SWIG_BLOCK_MAGIC(gr,single_zero_rec_filter_ff); - -gr_single_zero_rec_filter_ff_sptr -gr_make_single_zero_rec_filter_ff (double alpha, unsigned int vlen=1); - -class gr_single_zero_rec_filter_ff : public gr_sync_block -{ - public: - ~gr_single_zero_rec_filter_ff (); - - void set_taps (double alpha); -}; diff --git a/gnuradio-core/src/lib/filter/gr_vec_types.h b/gnuradio-core/src/lib/filter/gr_vec_types.h new file mode 100644 index 00000000..af05c7bb --- /dev/null +++ b/gnuradio-core/src/lib/filter/gr_vec_types.h @@ -0,0 +1,54 @@ +/* Cell single token vector types + Copyright (C) 2007 Free Software Foundation, Inc. + + 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 the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This file 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 file; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* As a special exception, if you include this header file into source files + compiled by GCC, this header file does not by itself cause the resulting + executable to be covered by the GNU General Public License. This exception + does not however invalidate any other reasons why the executable file might be + covered by the GNU General Public License. */ + +/* Single token vector data types for the PowerPC SIMD/Vector Multi-media + eXtension */ + +#ifndef INCLUDED_GR_VEC_TYPES_H +#define INCLUDED_GR_VEC_TYPES_H + +#define qword __vector unsigned char + +#define vec_uchar16 __vector unsigned char +#define vec_char16 __vector signed char +#define vec_bchar16 __vector bool char + +#define vec_ushort8 __vector unsigned short +#define vec_short8 __vector signed short +#define vec_bshort8 __vector bool short + +#define vec_pixel8 __vector pixel + +#define vec_uint4 __vector unsigned int +#define vec_int4 __vector signed int +#define vec_bint4 __vector bool int + +#define vec_float4 __vector float + +#define vec_ullong2 __vector bool char +#define vec_llong2 __vector bool short + +#define vec_double2 __vector bool int + +#endif /* INCLUDED_GR_VEC_TYPES_H */ diff --git a/gnuradio-core/src/lib/filter/gri_goertzel.h b/gnuradio-core/src/lib/filter/gri_goertzel.h index 1d20a920..86d3d34d 100644 --- a/gnuradio-core/src/lib/filter/gri_goertzel.h +++ b/gnuradio-core/src/lib/filter/gri_goertzel.h @@ -26,9 +26,9 @@ #include /*! - * \brief implements Goertzel single-bin DFT calculation + * \brief Implements Goertzel single-bin DFT calculation + * \ingroup misc */ - class gri_goertzel { public: diff --git a/gnuradio-core/src/lib/filter/gri_iir.h b/gnuradio-core/src/lib/filter/gri_iir.h index 56cd8b5b..5bc67df5 100644 --- a/gnuradio-core/src/lib/filter/gri_iir.h +++ b/gnuradio-core/src/lib/filter/gri_iir.h @@ -43,13 +43,13 @@ public: * The input and output satisfy a difference equation of the form \f[ - y[n] - \sum_{k=1}^{N} a_k y[n-k] = \sum_{k=0}^{M} b_k x[n-k] + y[n] - \sum_{k=1}^{M} a_k y[n-k] = \sum_{k=0}^{N} b_k x[n-k] \f] * with the corresponding rational system function \f[ - H(z) = \frac{\sum_{k=0}^{M} b_k z^{-k}}{1 - \sum_{k=1}^{N} a_k z^{-k}} + H(z) = \frac{\sum_{k=0}^{N} b_k z^{-k}}{1 - \sum_{k=1}^{M} a_k z^{-k}} \f] * Note that some texts define the system function with a + in the denominator. @@ -61,7 +61,7 @@ public: set_taps (fftaps, fbtaps); } - gri_iir () : d_latest(0) { } + gri_iir () : d_latest_n(0),d_latest_m(0) { } ~gri_iir () {} @@ -80,7 +80,8 @@ public: /*! * \return number of taps in filter. */ - unsigned ntaps () const { return d_fftaps.size (); } + unsigned ntaps_ff () const { return d_fftaps.size (); } + unsigned ntaps_fb () const { return d_fbtaps.size (); } /*! * \brief install new taps. @@ -88,19 +89,22 @@ public: void set_taps (const std::vector &fftaps, const std::vector &fbtaps) throw (std::invalid_argument) { - if (fftaps.size () != fbtaps.size ()) - throw std::invalid_argument ("gri_iir::set_taps"); - d_latest = 0; + + d_latest_n = 0; + d_latest_m = 0; d_fftaps = fftaps; d_fbtaps = fbtaps; int n = fftaps.size (); + int m = fbtaps.size (); d_prev_input.resize (2 * n); - d_prev_output.resize (2 * n); + d_prev_output.resize (2 * m); for (int i = 0; i < 2 * n; i++){ d_prev_input[i] = 0; + } + for (int i = 0; i < 2 * m; i++){ d_prev_output[i] = 0; } } @@ -108,7 +112,8 @@ public: protected: std::vector d_fftaps; std::vector d_fbtaps; - int d_latest; + int d_latest_n; + int d_latest_m; std::vector d_prev_output; std::vector d_prev_input; }; @@ -123,29 +128,36 @@ gri_iir::filter (const i_type input) { tap_type acc; unsigned i = 0; - unsigned n = ntaps (); + unsigned n = ntaps_ff (); + unsigned m = ntaps_fb (); if (n == 0) return (o_type) 0; - int latest = d_latest; + int latest_n = d_latest_n; + int latest_m = d_latest_m; acc = d_fftaps[0] * input; for (i = 1; i < n; i ++) - acc += (d_fftaps[i] * d_prev_input[latest + i] - + d_fbtaps[i] * d_prev_output[latest + i]); + acc += (d_fftaps[i] * d_prev_input[latest_n + i]); + for (i = 1; i < m; i ++) + acc += (d_fbtaps[i] * d_prev_output[latest_m + i]); // store the values twice to avoid having to handle wrap-around in the loop - d_prev_output[latest] = acc; - d_prev_output[latest+n] = acc; - d_prev_input[latest] = input; - d_prev_input[latest+n] = input; - - latest--; - if (latest < 0) - latest += n; - - d_latest = latest; + d_prev_output[latest_m] = acc; + d_prev_output[latest_m+m] = acc; + d_prev_input[latest_n] = input; + d_prev_input[latest_n+n] = input; + + latest_n--; + latest_m--; + if (latest_n < 0) + latest_n += n; + if (latest_m < 0) + latest_m += m; + + d_latest_m = latest_m; + d_latest_n = latest_n; return (o_type) acc; } diff --git a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h index 0cd44529..616520ad 100644 --- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h +++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h @@ -28,6 +28,7 @@ class gr_fir_fff; /*! * \brief Compute intermediate samples between signal samples x(k*Ts) + * \ingroup filter_primitive * * This implements a Mininum Mean Squared Error interpolator with 8 taps. * It is suitable for signals where the bandwidth of interest B = 1/(4*Ts) diff --git a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h index 527c3ec3..daf8b19b 100644 --- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h +++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -29,6 +29,7 @@ class gr_fir_ccf; /*! * \brief Compute intermediate samples between signal samples x(k*Ts) + * \ingroup filter_primitive * * This implements a Mininum Mean Squared Error interpolator with 8 taps. * It is suitable for signals where the bandwidth of interest B = 1/(4*Ts) @@ -49,8 +50,10 @@ public: /*! * \brief compute a single interpolated output value. - * \p input must have ntaps() valid entries. + * + * \p input must have ntaps() valid entries and be 8-byte aligned. * input[0] .. input[ntaps() - 1] are referenced to compute the output value. + * \throws std::invalid_argument if input is not 8-byte aligned. * * \p mu must be in the range [0, 1] and specifies the fractional delay. * diff --git a/gnuradio-core/src/lib/filter/qa_dotprod_powerpc.cc b/gnuradio-core/src/lib/filter/qa_dotprod_powerpc.cc new file mode 100644 index 00000000..1b02a79c --- /dev/null +++ b/gnuradio-core/src/lib/filter/qa_dotprod_powerpc.cc @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ +#include "qa_dotprod.h" + +CppUnit::TestSuite * +qa_dotprod_suite () +{ + CppUnit::TestSuite *s = new CppUnit::TestSuite ("dotprod"); + + // empty test suite + + return s; +} diff --git a/gnuradio-core/src/lib/filter/qa_filter.cc b/gnuradio-core/src/lib/filter/qa_filter.cc index 2a48636f..878d4802 100644 --- a/gnuradio-core/src/lib/filter/qa_filter.cc +++ b/gnuradio-core/src/lib/filter/qa_filter.cc @@ -1,5 +1,5 @@ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -34,6 +34,8 @@ #include #include #include +#include +#include CppUnit::TestSuite * qa_filter::suite () @@ -41,12 +43,14 @@ qa_filter::suite () CppUnit::TestSuite *s = new CppUnit::TestSuite ("filter"); s->addTest (qa_dotprod_suite ()); - s->addTest (qa_gri_mmse_fir_interpolator::suite ()); s->addTest (qa_gr_fir_fff::suite ()); s->addTest (qa_gr_fir_ccc::suite ()); s->addTest (qa_gr_fir_fcc::suite ()); s->addTest (qa_gr_fir_scc::suite ()); s->addTest (qa_gr_fir_ccf::suite ()); + s->addTest (qa_gri_mmse_fir_interpolator::suite ()); + s->addTest (qa_gri_mmse_fir_interpolator_cc::suite ()); + s->addTest (qa_gr_rotator::suite ()); return s; } diff --git a/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc b/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc index 7c0003c1..52f3340a 100644 --- a/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc +++ b/gnuradio-core/src/lib/filter/qa_gr_fir_ccc.cc @@ -47,6 +47,7 @@ typedef gr_complex acc_type; #include #include #include +#include using std::vector; @@ -148,9 +149,9 @@ test_random_io (fir_maker_t maker) // arithmetic. for (int o = 0; o < ol; o++){ - ASSERT_COMPLEXES_EQUAL (expected_output[o], - actual_output[o], - abs (expected_output[o]) * ERR_DELTA); + CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected_output[o], + actual_output[o], + abs (expected_output[o]) * ERR_DELTA); } delete f1; diff --git a/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc b/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc index 1af7c91f..6bb63f24 100644 --- a/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc +++ b/gnuradio-core/src/lib/filter/qa_gr_fir_ccf.cc @@ -47,6 +47,7 @@ typedef gr_complex acc_type; #include #include #include +#include using std::vector; @@ -147,8 +148,8 @@ test_random_io (fir_maker_t maker) // arithmetic. for (int o = 0; o < ol; o++){ - ASSERT_COMPLEXES_EQUAL (expected_output[o], actual_output[o], - abs (expected_output[o]) * ERR_DELTA); + CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected_output[o], actual_output[o], + abs (expected_output[o]) * ERR_DELTA); } delete f1; diff --git a/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc b/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc index 5163a0e1..bb56d178 100644 --- a/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc +++ b/gnuradio-core/src/lib/filter/qa_gr_fir_fcc.cc @@ -46,6 +46,7 @@ typedef gr_complex acc_type; #include #include #include +#include using std::vector; @@ -146,9 +147,9 @@ test_random_io (fir_maker_t maker) // arithmetic. for (int o = 0; o < ol; o++){ - ASSERT_COMPLEXES_EQUAL (expected_output[o], - actual_output[o], - abs (expected_output[o]) * ERR_DELTA); + CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected_output[o], + actual_output[o], + abs (expected_output[o]) * ERR_DELTA); } delete f1; diff --git a/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc b/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc index abb2caea..b921223e 100644 --- a/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc +++ b/gnuradio-core/src/lib/filter/qa_gr_fir_fff.cc @@ -32,6 +32,7 @@ #include #include #include +#include using std::vector; @@ -142,7 +143,7 @@ ref_dotprod (const i_type input[], const tap_type taps[], int ntaps) static void test_random_io (fir_maker_t maker) { - const int MAX_TAPS = 9; + const int MAX_TAPS = 32; const int OUTPUT_LEN = 17; const int INPUT_LEN = MAX_TAPS + OUTPUT_LEN; @@ -186,7 +187,7 @@ test_random_io (fir_maker_t maker) for (int o = 0; o < ol; o++){ CPPUNIT_ASSERT_DOUBLES_EQUAL (expected_output[o], actual_output[o], - fabs (expected_output[o]) * 1e-4); + fabs (expected_output[o]) * 9e-3); } delete f1; diff --git a/gnuradio-core/src/lib/filter/qa_gr_fir_scc.cc b/gnuradio-core/src/lib/filter/qa_gr_fir_scc.cc index ddbbf9c6..1aea34fb 100644 --- a/gnuradio-core/src/lib/filter/qa_gr_fir_scc.cc +++ b/gnuradio-core/src/lib/filter/qa_gr_fir_scc.cc @@ -145,9 +145,9 @@ test_random_io (fir_maker_t maker) // arithmetic. for (int o = 0; o < ol; o++){ - ASSERT_COMPLEXES_EQUAL (expected_output[o], - actual_output[o], - abs (expected_output[o]) * ERR_DELTA); + CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected_output[o], + actual_output[o], + abs (expected_output[o]) * ERR_DELTA); } delete f1; diff --git a/gnuradio-core/src/lib/filter/qa_gr_rotator.cc b/gnuradio-core/src/lib/filter/qa_gr_rotator.cc new file mode 100644 index 00000000..ce71a3d8 --- /dev/null +++ b/gnuradio-core/src/lib/filter/qa_gr_rotator.cc @@ -0,0 +1,70 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + + +// error vector magnitude +__attribute__((unused)) static float +error_vector_mag(gr_complex a, gr_complex b) +{ + return abs(a-b); +} + +void +qa_gr_rotator::t1 () +{ + static const unsigned int N = 100000; + + gr_rotator r; + + double phase_incr = 2*M_PI / 1003; + double phase = 0; + + // Old code: We increment then return the rotated value, thus we need to start one tick back + // r.set_phase(gr_complex(1,0) * conj(gr_expj(phase_incr))); + + r.set_phase(gr_complex(1,0)); + r.set_phase_incr(gr_expj(phase_incr)); + + for (unsigned i = 0; i < N; i++){ + gr_complex expected = gr_expj(phase); + gr_complex actual = r.rotate(gr_complex(1, 0)); + +#if 0 + float evm = error_vector_mag(expected, actual); + printf("[%6d] expected: (%8.6f, %8.6f) actual: (%8.6f, %8.6f) evm: %8.6f\n", + i, expected.real(), expected.imag(), actual.real(), actual.imag(), evm); +#endif + + CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected, actual, 0.0001); + + phase += phase_incr; + if (phase >= 2*M_PI) + phase -= 2*M_PI; + } +} diff --git a/gnuradio-core/src/lib/filter/qa_gr_rotator.h b/gnuradio-core/src/lib/filter/qa_gr_rotator.h new file mode 100644 index 00000000..2cc6006a --- /dev/null +++ b/gnuradio-core/src/lib/filter/qa_gr_rotator.h @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef _QA_GR_ROTATOR_H_ +#define _QA_GR_ROTATOR_H_ + +#include +#include + +class qa_gr_rotator : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE (qa_gr_rotator); + CPPUNIT_TEST (t1); + CPPUNIT_TEST_SUITE_END (); + + private: + void t1 (); + +}; + +#endif /* _QA_GR_ROTATOR_H_ */ diff --git a/gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.cc b/gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.cc new file mode 100644 index 00000000..3c379ea2 --- /dev/null +++ b/gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.cc @@ -0,0 +1,118 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002,2007 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +#define NELEM(x) (sizeof (x) / sizeof (x[0])) + + +static float +test_fcn_sin(double index) +{ + return (2 * sin (index * 0.25 * 2 * M_PI + 0.125 * M_PI) + + 3 * sin (index * 0.077 * 2 * M_PI + 0.3 * M_PI)); +} + +static float +test_fcn_cos(double index) +{ + return (2 * cos (index * 0.25 * 2 * M_PI + 0.125 * M_PI) + + 3 * cos (index * 0.077 * 2 * M_PI + 0.3 * M_PI)); +} + +static gr_complex +test_fcn(double index) +{ + return gr_complex(test_fcn_cos(index), test_fcn_sin(index)); +} + + +void +qa_gri_mmse_fir_interpolator_cc::t1() +{ + static const unsigned N = 100; + gr_complex input[N + 10] __attribute__ ((aligned (8))); + + for (unsigned i = 0; i < NELEM(input); i++) + input[i] = test_fcn ((double) i); + + gri_mmse_fir_interpolator_cc intr; + float inv_nsteps = 1.0 / intr.nsteps (); + + for (unsigned i = 0; i < N; i++){ + for (unsigned imu = 0; imu <= intr.nsteps (); imu += 1){ + gr_complex expected = test_fcn ((i + 3) + imu * inv_nsteps); + gr_complex actual = intr.interpolate (&input[i], imu * inv_nsteps); + + CPPUNIT_ASSERT_COMPLEXES_EQUAL (expected, actual, 0.004); + // printf ("%9.6f %9.6f %9.6f\n", expected, actual, expected - actual); + } + } +} + + +/* + * Force bad alignment and confirm that it raises an exception + */ +void +qa_gri_mmse_fir_interpolator_cc::t2_body() +{ + static const unsigned N = 100; + float float_input[2*(N+10) + 1]; + gr_complex *input; + + // We require that gr_complex be aligned on an 8-byte boundary. + // Ensure that we ARE NOT ;) + + if (((intptr_t) float_input & 0x7) == 0) + input = reinterpret_cast(&float_input[1]); + else + input = reinterpret_cast(&float_input[0]); + + + for (unsigned i = 0; i < (N+10); i++) + input[i] = test_fcn ((double) i); + + gri_mmse_fir_interpolator_cc intr; + float inv_nsteps = 1.0 / intr.nsteps (); + + for (unsigned i = 0; i < N; i++){ + for (unsigned imu = 0; imu <= intr.nsteps (); imu += 1){ + gr_complex expected = test_fcn ((i + 3) + imu * inv_nsteps); + gr_complex actual = intr.interpolate (&input[i], imu * inv_nsteps); + + CPPUNIT_ASSERT_COMPLEXES_EQUAL (expected, actual, 0.004); + // printf ("%9.6f %9.6f %9.6f\n", expected, actual, expected - actual); + } + } +} + +void +qa_gri_mmse_fir_interpolator_cc::t2() +{ + CPPUNIT_ASSERT_THROW(t2_body(), std::invalid_argument); +} diff --git a/gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.h b/gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.h new file mode 100644 index 00000000..496f3970 --- /dev/null +++ b/gnuradio-core/src/lib/filter/qa_gri_mmse_fir_interpolator_cc.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002,2007 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. + */ +#ifndef _QA_GRI_MMSE_FIR_INTERPOLATOR_CC_H_ +#define _QA_GRI_MMSE_FIR_INTERPOLATOR_CC_H_ + +#include +#include + +class qa_gri_mmse_fir_interpolator_cc : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_gri_mmse_fir_interpolator_cc); + CPPUNIT_TEST(t1); + // CPPUNIT_TEST(t2); + CPPUNIT_TEST_SUITE_END(); + + private: + void t1(); + void t2(); + void t2_body(); + +}; + +#endif /* _QA_GRI_MMSE_FIR_INTERPOLATOR_CC_H_ */ diff --git a/gnuradio-core/src/lib/filter/short_dotprod_mmx.S b/gnuradio-core/src/lib/filter/short_dotprod_mmx.S index f864d08a..1830a1a9 100644 --- a/gnuradio-core/src/lib/filter/short_dotprod_mmx.S +++ b/gnuradio-core/src/lib/filter/short_dotprod_mmx.S @@ -111,3 +111,7 @@ GLOB_SYMB(short_dotprod_mmx): FUNC_TAIL(short_dotprod_mmx) .ident "Hand coded x86 MMX assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/short_dotprod_mmx64.S b/gnuradio-core/src/lib/filter/short_dotprod_mmx64.S index 02b910e9..7d9b25cb 100644 --- a/gnuradio-core/src/lib/filter/short_dotprod_mmx64.S +++ b/gnuradio-core/src/lib/filter/short_dotprod_mmx64.S @@ -99,3 +99,7 @@ GLOB_SYMB(short_dotprod_mmx): FUNC_TAIL(short_dotprod_mmx) .ident "Hand coded x86_64 MMX assembly" + +#if defined(__linux__) && defined(__ELF__) +.section .note.GNU-stack,"",%progbits +#endif diff --git a/gnuradio-core/src/lib/filter/stamp-sources-generate b/gnuradio-core/src/lib/filter/stamp-sources-generate new file mode 100644 index 00000000..e69de29b diff --git a/gnuradio-core/src/lib/filter/sysconfig_powerpc.cc b/gnuradio-core/src/lib/filter/sysconfig_powerpc.cc new file mode 100644 index 00000000..e2b27815 --- /dev/null +++ b/gnuradio-core/src/lib/filter/sysconfig_powerpc.cc @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2002,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +gr_fir_sysconfig * +gr_fir_sysconfig_singleton () +{ + static gr_fir_sysconfig *singleton = 0; + + if (singleton) + return singleton; + + singleton = new gr_fir_sysconfig_powerpc (); + return singleton; +} diff --git a/gnuradio-core/src/lib/g72x/Makefile.in b/gnuradio-core/src/lib/g72x/Makefile.in index 91b676bb..d0594b1d 100644 --- a/gnuradio-core/src/lib/g72x/Makefile.in +++ b/gnuradio-core/src/lib/g72x/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/lib/g72x ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,17 +162,18 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libccitt_la_LIBADD = am_libccitt_la_OBJECTS = g711.lo g72x.lo g721.lo g723_24.lo g723_40.lo libccitt_la_OBJECTS = $(am_libccitt_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libccitt_la_SOURCES) DIST_SOURCES = $(libccitt_la_SOURCES) ETAGS = etags @@ -155,10 +182,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -166,9 +192,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -176,6 +209,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -188,73 +223,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -264,49 +292,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -314,15 +382,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -332,16 +543,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -350,63 +579,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT noinst_LTLIBRARIES = libccitt.la libccitt_la_SOURCES = g711.c g72x.c g721.c g723_24.c g723_40.c g72x.h EXTRA_DIST = encode.c decode.c @@ -418,8 +716,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -453,7 +751,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libccitt.la: $(libccitt_la_OBJECTS) $(libccitt_la_DEPENDENCIES) - $(LINK) $(libccitt_la_LDFLAGS) $(libccitt_la_OBJECTS) $(libccitt_la_LIBADD) $(LIBS) + $(LINK) $(libccitt_la_OBJECTS) $(libccitt_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -468,22 +766,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g72x.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -494,17 +792,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -516,8 +810,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -527,13 +821,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -547,23 +840,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -574,6 +865,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) @@ -593,6 +887,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -611,7 +906,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -625,12 +920,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -651,20 +954,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/general/Makefile.am b/gnuradio-core/src/lib/general/Makefile.am index 70e05a11..4ceb7248 100644 --- a/gnuradio-core/src/lib/general/Makefile.am +++ b/gnuradio-core/src/lib/general/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2002,2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2001,2002,2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,95 +21,25 @@ include $(top_srcdir)/Makefile.common -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libgeneral.la libgeneral-qa.la -# ---------------------------------------------------------------- -# these scripts generate code - -CODE_GENERATOR = \ - generate_all.py \ - generate_common.py \ - gr_add_XX.cc.t \ - gr_add_XX.h.t \ - gr_add_XX.i.t \ - gr_add_const_XX.cc.t \ - gr_add_const_XX.h.t \ - gr_add_const_XX.i.t \ - gr_add_vXX.cc.t \ - gr_add_vXX.h.t \ - gr_add_vXX.i.t \ - gr_add_const_vXX.cc.t \ - gr_add_const_vXX.h.t \ - gr_add_const_vXX.i.t \ - gr_chunks_to_symbols_XX.cc.t \ - gr_chunks_to_symbols_XX.h.t \ - gr_chunks_to_symbols_XX.i.t \ - gr_divide_XX.cc.t \ - gr_divide_XX.h.t \ - gr_divide_XX.i.t \ - gr_multiply_XX.cc.t \ - gr_multiply_XX.h.t \ - gr_multiply_XX.i.t \ - gr_multiply_const_XX.cc.t \ - gr_multiply_const_XX.h.t \ - gr_multiply_const_XX.i.t \ - gr_multiply_vXX.cc.t \ - gr_multiply_vXX.h.t \ - gr_multiply_vXX.i.t \ - gr_multiply_const_vXX.cc.t \ - gr_multiply_const_vXX.h.t \ - gr_multiply_const_vXX.i.t \ - gr_mute_XX.cc.t \ - gr_mute_XX.h.t \ - gr_mute_XX.i.t \ - gr_noise_source_X.cc.t \ - gr_noise_source_X.h.t \ - gr_noise_source_X.i.t \ - gr_packed_to_unpacked_XX.cc.t \ - gr_packed_to_unpacked_XX.h.t \ - gr_packed_to_unpacked_XX.i.t \ - gr_sig_source_X.cc.t \ - gr_sig_source_X.h.t \ - gr_sig_source_X.i.t \ - gr_sub_XX.cc.t \ - gr_sub_XX.h.t \ - gr_sub_XX.i.t \ - gr_unpacked_to_packed_XX.cc.t \ - gr_unpacked_to_packed_XX.h.t \ - gr_unpacked_to_packed_XX.i.t \ - gr_vector_source_X.cc.t \ - gr_vector_source_X.h.t \ - gr_vector_source_X.i.t \ - gr_vector_sink_X.cc.t \ - gr_vector_sink_X.h.t \ - gr_vector_sink_X.i.t - -# include $(srcdir)/Makefile.gen -include Makefile.gen - - -$(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR) - PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py - - -BUILT_SOURCES = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC) +BUILT_SOURCES = # ---------------------------------------------------------------- EXTRA_DIST = \ - $(CODE_GENERATOR) \ gen_sine_table.py \ gr_prefix.cc.in libgeneral_la_SOURCES = \ - $(GENERATED_CC) \ gr_agc_cc.cc \ gr_agc_ff.cc \ gr_agc2_cc.cc \ gr_agc2_ff.cc \ gr_align_on_samplenumbers_ss.cc \ + gr_bin_statistics_f.cc \ gr_binary_slicer_fb.cc \ gr_bytes_to_syms.cc \ gr_char_to_float.cc \ @@ -125,30 +55,40 @@ libgeneral_la_SOURCES = \ gr_correlate_access_code_bb.cc \ gr_costas_loop_cc.cc \ gr_count_bits.cc \ + gr_cpfsk_bc.cc \ gr_crc32.cc \ gr_ctcss_squelch_ff.cc \ gr_dd_mpsk_sync_cc.cc \ + gr_decode_ccsds_27_fb.cc \ gr_deinterleave.cc \ + gr_delay.cc \ gr_diff_decoder_bb.cc \ gr_diff_encoder_bb.cc \ gr_diff_phasor_cc.cc \ + gr_dpll_bb.cc \ + gr_encode_ccsds_27_bb.cc \ gr_fake_channel_coder_pp.cc \ gr_fast_atan2f.cc \ gr_feedforward_agc_cc.cc \ gr_feval.cc \ gr_fft_vcc.cc \ + gr_fft_vcc_fftw.cc \ gr_fft_vfc.cc \ gr_firdes.cc \ gr_float_to_char.cc \ gr_float_to_complex.cc \ gr_float_to_short.cc \ gr_float_to_uchar.cc \ + gr_fmdet_cf.cc \ gr_frequency_modulator_fc.cc \ gr_fxpt.cc \ gr_framer_sink_1.cc \ + gr_glfsr_source_b.cc \ + gr_glfsr_source_f.cc \ gr_head.cc \ gr_interleave.cc \ gr_interleaved_short_to_complex.cc \ + gr_iqcomp_cc.cc \ gr_keep_one_in_n.cc \ gr_kludge_copy.cc \ gr_lfsr_32k_source_s.cc \ @@ -157,26 +97,40 @@ libgeneral_la_SOURCES = \ gr_map_bb.cc \ gr_math.cc \ gr_misc.cc \ + gr_mpsk_receiver_cc.cc \ gr_nlog10_ff.cc \ gr_nop.cc \ gr_null_sink.cc \ gr_null_source.cc \ + gr_ofdm_frame_acquisition.cc \ + gr_ofdm_cyclic_prefixer.cc \ + gr_ofdm_demapper_vcb.cc \ + gr_ofdm_mapper_bcv.cc \ + gr_ofdm_frame_sink.cc \ + gr_ofdm_insert_preamble.cc \ + gr_ofdm_sampler.cc \ gr_pa_2x2_phase_combiner.cc \ gr_packet_sink.cc \ + gr_peak_detector2_fb.cc \ gr_phase_modulator_fc.cc \ gr_pll_carriertracking_cc.cc \ gr_pll_freqdet_cf.cc \ gr_pll_refout_cc.cc \ + gr_pn_correlator_cc.cc \ gr_prefix.cc \ gr_prefs.cc \ gr_probe_avg_mag_sqrd_c.cc \ + gr_probe_avg_mag_sqrd_cf.cc \ gr_probe_avg_mag_sqrd_f.cc \ gr_probe_signal_f.cc \ gr_pwr_squelch_cc.cc \ gr_pwr_squelch_ff.cc \ gr_quadrature_demod_cf.cc \ + gr_rail_ff.cc \ gr_random.cc \ + gr_regenerate_bb.cc \ gr_remez.cc \ + gr_repeat.cc \ gr_reverse.cc \ gr_rms_cf.cc \ gr_rms_ff.cc \ @@ -185,15 +139,15 @@ libgeneral_la_SOURCES = \ gr_simple_framer.cc \ gr_simple_squelch_cc.cc \ gr_skiphead.cc \ + gr_squash_ff.cc \ gr_squelch_base_cc.cc \ gr_squelch_base_ff.cc \ + gr_stream_mux.cc \ gr_stream_to_streams.cc \ gr_stream_to_vector.cc \ gr_streams_to_stream.cc \ gr_streams_to_vector.cc \ - gr_sync_block.cc \ - gr_sync_decimator.cc \ - gr_sync_interpolator.cc \ + gr_stretch_ff.cc \ gr_test.cc \ gr_threshold_ff.cc \ gr_throttle.cc \ @@ -201,6 +155,8 @@ libgeneral_la_SOURCES = \ gr_vco_f.cc \ gr_vector_to_stream.cc \ gr_vector_to_streams.cc \ + gr_wavelet_ff.cc \ + gr_wvps_ff.cc \ gri_add_const_ss_generic.cc \ gri_char_to_float.cc \ gri_debugger_hook.cc \ @@ -208,11 +164,16 @@ libgeneral_la_SOURCES = \ gri_float_to_char.cc \ gri_float_to_short.cc \ gri_float_to_uchar.cc \ + gri_glfsr.cc \ gri_interleaved_short_to_complex.cc \ gri_short_to_float.cc \ gri_uchar_to_float.cc \ malloc16.c \ - gr_unpack_k_bits_bb.cc + gr_unpack_k_bits_bb.cc \ + gr_descrambler_bb.cc \ + gr_scrambler_bb.cc \ + gr_probe_mpsk_snr_c.cc \ + gr_probe_density_b.cc libgeneral_qa_la_SOURCES = \ qa_general.cc \ @@ -220,17 +181,17 @@ libgeneral_qa_la_SOURCES = \ qa_gr_firdes.cc \ qa_gr_fxpt.cc \ qa_gr_fxpt_nco.cc \ - qa_gr_fxpt_vco.cc - - + qa_gr_fxpt_vco.cc \ + qa_gr_math.cc \ + qa_gri_lfsr.cc grinclude_HEADERS = \ - $(GENERATED_H) \ gr_agc_cc.h \ gr_agc_ff.h \ gr_agc2_cc.h \ gr_agc2_ff.h \ gr_align_on_samplenumbers_ss.h \ + gr_bin_statistics_f.h \ gr_binary_slicer_fb.h \ gr_bytes_to_syms.h \ gr_char_to_float.h \ @@ -246,33 +207,42 @@ grinclude_HEADERS = \ gr_correlate_access_code_bb.h \ gr_costas_loop_cc.h \ gr_count_bits.h \ + gr_cpfsk_bc.h \ gr_crc32.h \ gr_ctcss_squelch_ff.h \ gr_dd_mpsk_sync_cc.h \ + gr_decode_ccsds_27_fb.h \ gr_diff_decoder_bb.h \ gr_diff_encoder_bb.h \ gr_deinterleave.h \ + gr_delay.h \ gr_diff_phasor_cc.h \ - gr_endianness.h \ + gr_dpll_bb.h \ + gr_encode_ccsds_27_bb.h \ gr_expj.h \ gr_fake_channel_coder_pp.h \ gr_feedforward_agc_cc.h \ gr_feval.h \ gr_fft_vcc.h \ + gr_fft_vcc_fftw.h \ gr_fft_vfc.h \ gr_firdes.h \ gr_float_to_char.h \ gr_float_to_complex.h \ gr_float_to_short.h \ gr_float_to_uchar.h \ + gr_fmdet_cf.h \ gr_framer_sink_1.h \ gr_frequency_modulator_fc.h \ gr_fxpt.h \ gr_fxpt_nco.h \ gr_fxpt_vco.h \ + gr_glfsr_source_b.h \ + gr_glfsr_source_f.h \ gr_head.h \ gr_interleave.h \ gr_interleaved_short_to_complex.h \ + gr_iqcomp_cc.h \ gr_keep_one_in_n.h \ gr_kludge_copy.h \ gr_lfsr_32k_source_s.h \ @@ -282,47 +252,59 @@ grinclude_HEADERS = \ gr_map_bb.h \ gr_math.h \ gr_misc.h \ + gr_mpsk_receiver_cc.h \ gr_nco.h \ gr_nlog10_ff.h \ - gr_noise_type.h \ gr_nop.h \ gr_null_sink.h \ gr_null_source.h \ + gr_ofdm_frame_acquisition.h \ + gr_ofdm_cyclic_prefixer.h \ + gr_ofdm_demapper_vcb.h \ + gr_ofdm_mapper_bcv.h \ + gr_ofdm_frame_sink.h \ + gr_ofdm_insert_preamble.h \ + gr_ofdm_sampler.h \ gr_pa_2x2_phase_combiner.h \ gr_packet_sink.h \ + gr_peak_detector2_fb.h \ gr_phase_modulator_fc.h \ gr_pll_carriertracking_cc.h \ gr_pll_freqdet_cf.h \ gr_pll_refout_cc.h \ + gr_pn_correlator_cc.h \ gr_prefix.h \ gr_prefs.h \ gr_probe_avg_mag_sqrd_c.h \ + gr_probe_avg_mag_sqrd_cf.h \ gr_probe_avg_mag_sqrd_f.h \ gr_probe_signal_f.h \ gr_pwr_squelch_cc.h \ gr_pwr_squelch_ff.h \ gr_quadrature_demod_cf.h \ + gr_rail_ff.h \ gr_random.h \ + gr_regenerate_bb.h \ gr_remez.h \ + gr_repeat.h \ gr_reverse.h \ gr_rms_cf.h \ gr_rms_ff.h \ gr_short_to_float.h \ - gr_sig_source_waveform.h \ gr_simple_correlator.h \ gr_simple_framer.h \ gr_simple_framer_sync.h \ gr_simple_squelch_cc.h \ + gr_squash_ff.h \ gr_skiphead.h \ gr_squelch_base_cc.h \ gr_squelch_base_ff.h \ + gr_stream_mux.h \ gr_stream_to_streams.h \ gr_stream_to_vector.h \ gr_streams_to_stream.h \ gr_streams_to_vector.h \ - gr_sync_block.h \ - gr_sync_decimator.h \ - gr_sync_interpolator.h \ + gr_stretch_ff.h \ gr_test_types.h \ gr_test.h \ gr_threshold_ff.h \ @@ -332,6 +314,8 @@ grinclude_HEADERS = \ gr_vco_f.h \ gr_vector_to_stream.h \ gr_vector_to_streams.h \ + gr_wavelet_ff.h \ + gr_wvps_ff.h \ gri_add_const_ss.h \ gri_agc_cc.h \ gri_agc_ff.h \ @@ -343,6 +327,8 @@ grinclude_HEADERS = \ gri_float_to_char.h \ gri_float_to_short.h \ gri_float_to_uchar.h \ + gri_lfsr.h \ + gri_glfsr.h \ gri_interleaved_short_to_complex.h \ gri_lfsr_15_1_0.h \ gri_lfsr_32k.h \ @@ -350,8 +336,11 @@ grinclude_HEADERS = \ gri_uchar_to_float.h \ malloc16.h \ random.h \ - gr_unpack_k_bits_bb.h - + gr_unpack_k_bits_bb.h \ + gr_descrambler_bb.h \ + gr_scrambler_bb.h \ + gr_probe_mpsk_snr_c.h \ + gr_probe_density_b.h noinst_HEADERS = \ qa_general.h \ @@ -360,17 +349,18 @@ noinst_HEADERS = \ qa_gr_fxpt.h \ qa_gr_fxpt_nco.h \ qa_gr_fxpt_vco.h \ - sine_table.h + qa_gri_lfsr.h \ + sine_table.h \ + qa_gr_math.h swiginclude_HEADERS = \ - $(GENERATED_I) \ general.i \ - general_generated.i \ gr_agc_cc.i \ gr_agc_ff.i \ gr_agc2_cc.i \ gr_agc2_ff.i \ gr_align_on_samplenumbers_ss.i \ + gr_bin_statistics_f.i \ gr_binary_slicer_fb.i \ gr_bytes_to_syms.i \ gr_char_to_float.i \ @@ -384,14 +374,18 @@ swiginclude_HEADERS = \ gr_constellation_decoder_cb.i \ gr_correlate_access_code_bb.i \ gr_costas_loop_cc.i \ + gr_cpfsk_bc.i \ gr_crc32.i \ gr_ctcss_squelch_ff.i \ gr_dd_mpsk_sync_cc.i \ + gr_decode_ccsds_27_fb.i \ gr_diff_decoder_bb.i \ gr_diff_encoder_bb.i \ gr_diff_phasor_cc.i \ + gr_dpll_bb.i \ gr_deinterleave.i \ - gr_endianness.i \ + gr_delay.i \ + gr_encode_ccsds_27_bb.i \ gr_fake_channel_coder_pp.i \ gr_feedforward_agc_cc.i \ gr_feval.i \ @@ -402,52 +396,70 @@ swiginclude_HEADERS = \ gr_float_to_complex.i \ gr_float_to_short.i \ gr_float_to_uchar.i \ + gr_fmdet_cf.i \ gr_frequency_modulator_fc.i \ gr_framer_sink_1.i \ + gr_glfsr_source_b.i \ + gr_glfsr_source_f.i \ gr_head.i \ gr_interleave.i \ gr_interleaved_short_to_complex.i \ + gr_iqcomp_cc.i \ gr_keep_one_in_n.i \ gr_kludge_copy.i \ gr_lfsr_32k_source_s.i \ gr_lms_dfe_cc.i \ gr_lms_dfe_ff.i \ gr_map_bb.i \ + gr_mpsk_receiver_cc.i \ gr_nlog10_ff.i \ gr_nop.i \ gr_null_sink.i \ gr_null_source.i \ + gr_ofdm_frame_acquisition.i \ + gr_ofdm_cyclic_prefixer.i \ + gr_ofdm_demapper_vcb.i \ + gr_ofdm_mapper_bcv.i \ + gr_ofdm_frame_sink.i \ + gr_ofdm_insert_preamble.i \ + gr_ofdm_sampler.i \ gr_pa_2x2_phase_combiner.i \ gr_packet_sink.i \ + gr_peak_detector2_fb.i \ gr_phase_modulator_fc.i \ gr_pll_carriertracking_cc.i \ gr_pll_freqdet_cf.i \ gr_pll_refout_cc.i \ + gr_pn_correlator_cc.i \ gr_prefix.i \ gr_prefs.i \ gr_probe_avg_mag_sqrd_c.i \ + gr_probe_avg_mag_sqrd_cf.i \ gr_probe_avg_mag_sqrd_f.i \ gr_probe_signal_f.i \ gr_pwr_squelch_cc.i \ gr_pwr_squelch_ff.i \ gr_quadrature_demod_cf.i \ + gr_rail_ff.i \ + gr_regenerate_bb.i \ gr_remez.i \ gr_rms_cf.i \ gr_rms_ff.i \ + gr_repeat.i \ gr_short_to_float.i \ gr_simple_correlator.i \ gr_simple_framer.i \ gr_simple_squelch_cc.i \ gr_skiphead.i \ + gr_squash_ff.i \ gr_squelch_base_cc.i \ gr_squelch_base_ff.i \ + gr_stream_mux.i \ gr_stream_to_streams.i \ gr_stream_to_vector.i \ gr_streams_to_stream.i \ gr_streams_to_vector.i \ - gr_sync_block.i \ - gr_sync_decimator.i \ - gr_sync_interpolator.i \ + gr_stretch_ff.i \ gr_test.i \ gr_threshold_ff.i \ gr_throttle.i \ @@ -456,10 +468,13 @@ swiginclude_HEADERS = \ gr_vector_to_stream.i \ gr_vector_to_streams.i \ gr_unpack_k_bits_bb.i \ + gr_wavelet_ff.i \ + gr_wvps_ff.i \ gri_agc_cc.i \ gri_agc_ff.i \ gri_agc2_cc.i \ - gri_agc2_ff.i - - -CLEANFILES = $(BUILT_SOURCES) *.pyc + gri_agc2_ff.i \ + gr_descrambler_bb.i \ + gr_scrambler_bb.i \ + gr_probe_mpsk_snr_c.i \ + gr_probe_density_b.i diff --git a/gnuradio-core/src/lib/general/Makefile.gen b/gnuradio-core/src/lib/general/Makefile.gen deleted file mode 100644 index f0c477e3..00000000 --- a/gnuradio-core/src/lib/general/Makefile.gen +++ /dev/null @@ -1,234 +0,0 @@ -# -# This file is machine generated. All edits will be overwritten -# -GENERATED_H = \ - gr_add_cc.h \ - gr_add_const_cc.h \ - gr_add_const_ff.h \ - gr_add_const_ii.h \ - gr_add_const_sf.h \ - gr_add_const_ss.h \ - gr_add_const_vcc.h \ - gr_add_const_vff.h \ - gr_add_const_vii.h \ - gr_add_const_vss.h \ - gr_add_ff.h \ - gr_add_ii.h \ - gr_add_ss.h \ - gr_add_vcc.h \ - gr_add_vff.h \ - gr_add_vii.h \ - gr_add_vss.h \ - gr_chunks_to_symbols_bc.h \ - gr_chunks_to_symbols_bf.h \ - gr_chunks_to_symbols_ic.h \ - gr_chunks_to_symbols_if.h \ - gr_chunks_to_symbols_sc.h \ - gr_chunks_to_symbols_sf.h \ - gr_divide_cc.h \ - gr_divide_ff.h \ - gr_divide_ii.h \ - gr_divide_ss.h \ - gr_multiply_cc.h \ - gr_multiply_const_cc.h \ - gr_multiply_const_ff.h \ - gr_multiply_const_ii.h \ - gr_multiply_const_ss.h \ - gr_multiply_const_vcc.h \ - gr_multiply_const_vff.h \ - gr_multiply_const_vii.h \ - gr_multiply_const_vss.h \ - gr_multiply_ff.h \ - gr_multiply_ii.h \ - gr_multiply_ss.h \ - gr_multiply_vcc.h \ - gr_multiply_vff.h \ - gr_multiply_vii.h \ - gr_multiply_vss.h \ - gr_mute_cc.h \ - gr_mute_ff.h \ - gr_mute_ii.h \ - gr_mute_ss.h \ - gr_noise_source_c.h \ - gr_noise_source_f.h \ - gr_noise_source_i.h \ - gr_noise_source_s.h \ - gr_packed_to_unpacked_bb.h \ - gr_packed_to_unpacked_ii.h \ - gr_packed_to_unpacked_ss.h \ - gr_sig_source_c.h \ - gr_sig_source_f.h \ - gr_sig_source_i.h \ - gr_sig_source_s.h \ - gr_sub_cc.h \ - gr_sub_ff.h \ - gr_sub_ii.h \ - gr_sub_ss.h \ - gr_unpacked_to_packed_bb.h \ - gr_unpacked_to_packed_ii.h \ - gr_unpacked_to_packed_ss.h \ - gr_vector_sink_b.h \ - gr_vector_sink_c.h \ - gr_vector_sink_f.h \ - gr_vector_sink_i.h \ - gr_vector_sink_s.h \ - gr_vector_source_b.h \ - gr_vector_source_c.h \ - gr_vector_source_f.h \ - gr_vector_source_i.h \ - gr_vector_source_s.h - -GENERATED_I = \ - gr_add_cc.i \ - gr_add_const_cc.i \ - gr_add_const_ff.i \ - gr_add_const_ii.i \ - gr_add_const_sf.i \ - gr_add_const_ss.i \ - gr_add_const_vcc.i \ - gr_add_const_vff.i \ - gr_add_const_vii.i \ - gr_add_const_vss.i \ - gr_add_ff.i \ - gr_add_ii.i \ - gr_add_ss.i \ - gr_add_vcc.i \ - gr_add_vff.i \ - gr_add_vii.i \ - gr_add_vss.i \ - gr_chunks_to_symbols_bc.i \ - gr_chunks_to_symbols_bf.i \ - gr_chunks_to_symbols_ic.i \ - gr_chunks_to_symbols_if.i \ - gr_chunks_to_symbols_sc.i \ - gr_chunks_to_symbols_sf.i \ - gr_divide_cc.i \ - gr_divide_ff.i \ - gr_divide_ii.i \ - gr_divide_ss.i \ - gr_multiply_cc.i \ - gr_multiply_const_cc.i \ - gr_multiply_const_ff.i \ - gr_multiply_const_ii.i \ - gr_multiply_const_ss.i \ - gr_multiply_const_vcc.i \ - gr_multiply_const_vff.i \ - gr_multiply_const_vii.i \ - gr_multiply_const_vss.i \ - gr_multiply_ff.i \ - gr_multiply_ii.i \ - gr_multiply_ss.i \ - gr_multiply_vcc.i \ - gr_multiply_vff.i \ - gr_multiply_vii.i \ - gr_multiply_vss.i \ - gr_mute_cc.i \ - gr_mute_ff.i \ - gr_mute_ii.i \ - gr_mute_ss.i \ - gr_noise_source_c.i \ - gr_noise_source_f.i \ - gr_noise_source_i.i \ - gr_noise_source_s.i \ - gr_packed_to_unpacked_bb.i \ - gr_packed_to_unpacked_ii.i \ - gr_packed_to_unpacked_ss.i \ - gr_sig_source_c.i \ - gr_sig_source_f.i \ - gr_sig_source_i.i \ - gr_sig_source_s.i \ - gr_sub_cc.i \ - gr_sub_ff.i \ - gr_sub_ii.i \ - gr_sub_ss.i \ - gr_unpacked_to_packed_bb.i \ - gr_unpacked_to_packed_ii.i \ - gr_unpacked_to_packed_ss.i \ - gr_vector_sink_b.i \ - gr_vector_sink_c.i \ - gr_vector_sink_f.i \ - gr_vector_sink_i.i \ - gr_vector_sink_s.i \ - gr_vector_source_b.i \ - gr_vector_source_c.i \ - gr_vector_source_f.i \ - gr_vector_source_i.i \ - gr_vector_source_s.i - -GENERATED_CC = \ - gr_add_cc.cc \ - gr_add_const_cc.cc \ - gr_add_const_ff.cc \ - gr_add_const_ii.cc \ - gr_add_const_sf.cc \ - gr_add_const_ss.cc \ - gr_add_const_vcc.cc \ - gr_add_const_vff.cc \ - gr_add_const_vii.cc \ - gr_add_const_vss.cc \ - gr_add_ff.cc \ - gr_add_ii.cc \ - gr_add_ss.cc \ - gr_add_vcc.cc \ - gr_add_vff.cc \ - gr_add_vii.cc \ - gr_add_vss.cc \ - gr_chunks_to_symbols_bc.cc \ - gr_chunks_to_symbols_bf.cc \ - gr_chunks_to_symbols_ic.cc \ - gr_chunks_to_symbols_if.cc \ - gr_chunks_to_symbols_sc.cc \ - gr_chunks_to_symbols_sf.cc \ - gr_divide_cc.cc \ - gr_divide_ff.cc \ - gr_divide_ii.cc \ - gr_divide_ss.cc \ - gr_multiply_cc.cc \ - gr_multiply_const_cc.cc \ - gr_multiply_const_ff.cc \ - gr_multiply_const_ii.cc \ - gr_multiply_const_ss.cc \ - gr_multiply_const_vcc.cc \ - gr_multiply_const_vff.cc \ - gr_multiply_const_vii.cc \ - gr_multiply_const_vss.cc \ - gr_multiply_ff.cc \ - gr_multiply_ii.cc \ - gr_multiply_ss.cc \ - gr_multiply_vcc.cc \ - gr_multiply_vff.cc \ - gr_multiply_vii.cc \ - gr_multiply_vss.cc \ - gr_mute_cc.cc \ - gr_mute_ff.cc \ - gr_mute_ii.cc \ - gr_mute_ss.cc \ - gr_noise_source_c.cc \ - gr_noise_source_f.cc \ - gr_noise_source_i.cc \ - gr_noise_source_s.cc \ - gr_packed_to_unpacked_bb.cc \ - gr_packed_to_unpacked_ii.cc \ - gr_packed_to_unpacked_ss.cc \ - gr_sig_source_c.cc \ - gr_sig_source_f.cc \ - gr_sig_source_i.cc \ - gr_sig_source_s.cc \ - gr_sub_cc.cc \ - gr_sub_ff.cc \ - gr_sub_ii.cc \ - gr_sub_ss.cc \ - gr_unpacked_to_packed_bb.cc \ - gr_unpacked_to_packed_ii.cc \ - gr_unpacked_to_packed_ss.cc \ - gr_vector_sink_b.cc \ - gr_vector_sink_c.cc \ - gr_vector_sink_f.cc \ - gr_vector_sink_i.cc \ - gr_vector_sink_s.cc \ - gr_vector_source_b.cc \ - gr_vector_source_c.cc \ - gr_vector_source_f.cc \ - gr_vector_source_i.cc \ - gr_vector_source_s.cc - diff --git a/gnuradio-core/src/lib/general/Makefile.in b/gnuradio-core/src/lib/general/Makefile.in index af6cec99..6cb67008 100644 --- a/gnuradio-core/src/lib/general/Makefile.in +++ b/gnuradio-core/src/lib/general/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2002,2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2001,2002,2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +58,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -82,30 +78,40 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = README $(grinclude_HEADERS) $(noinst_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.gen \ - $(srcdir)/Makefile.in $(srcdir)/gr_prefix.cc.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gr_prefix.cc.in $(swiginclude_HEADERS) \ + $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/lib/general ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +120,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -139,99 +165,86 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libgeneral_qa_la_LIBADD = am_libgeneral_qa_la_OBJECTS = qa_general.lo qa_gr_circular_file.lo \ qa_gr_firdes.lo qa_gr_fxpt.lo qa_gr_fxpt_nco.lo \ - qa_gr_fxpt_vco.lo + qa_gr_fxpt_vco.lo qa_gr_math.lo qa_gri_lfsr.lo libgeneral_qa_la_OBJECTS = $(am_libgeneral_qa_la_OBJECTS) libgeneral_la_LIBADD = -am__objects_1 = gr_add_cc.lo gr_add_const_cc.lo gr_add_const_ff.lo \ - gr_add_const_ii.lo gr_add_const_sf.lo gr_add_const_ss.lo \ - gr_add_const_vcc.lo gr_add_const_vff.lo gr_add_const_vii.lo \ - gr_add_const_vss.lo gr_add_ff.lo gr_add_ii.lo gr_add_ss.lo \ - gr_add_vcc.lo gr_add_vff.lo gr_add_vii.lo gr_add_vss.lo \ - gr_chunks_to_symbols_bc.lo gr_chunks_to_symbols_bf.lo \ - gr_chunks_to_symbols_ic.lo gr_chunks_to_symbols_if.lo \ - gr_chunks_to_symbols_sc.lo gr_chunks_to_symbols_sf.lo \ - gr_divide_cc.lo gr_divide_ff.lo gr_divide_ii.lo \ - gr_divide_ss.lo gr_multiply_cc.lo gr_multiply_const_cc.lo \ - gr_multiply_const_ff.lo gr_multiply_const_ii.lo \ - gr_multiply_const_ss.lo gr_multiply_const_vcc.lo \ - gr_multiply_const_vff.lo gr_multiply_const_vii.lo \ - gr_multiply_const_vss.lo gr_multiply_ff.lo gr_multiply_ii.lo \ - gr_multiply_ss.lo gr_multiply_vcc.lo gr_multiply_vff.lo \ - gr_multiply_vii.lo gr_multiply_vss.lo gr_mute_cc.lo \ - gr_mute_ff.lo gr_mute_ii.lo gr_mute_ss.lo gr_noise_source_c.lo \ - gr_noise_source_f.lo gr_noise_source_i.lo gr_noise_source_s.lo \ - gr_packed_to_unpacked_bb.lo gr_packed_to_unpacked_ii.lo \ - gr_packed_to_unpacked_ss.lo gr_sig_source_c.lo \ - gr_sig_source_f.lo gr_sig_source_i.lo gr_sig_source_s.lo \ - gr_sub_cc.lo gr_sub_ff.lo gr_sub_ii.lo gr_sub_ss.lo \ - gr_unpacked_to_packed_bb.lo gr_unpacked_to_packed_ii.lo \ - gr_unpacked_to_packed_ss.lo gr_vector_sink_b.lo \ - gr_vector_sink_c.lo gr_vector_sink_f.lo gr_vector_sink_i.lo \ - gr_vector_sink_s.lo gr_vector_source_b.lo \ - gr_vector_source_c.lo gr_vector_source_f.lo \ - gr_vector_source_i.lo gr_vector_source_s.lo -am_libgeneral_la_OBJECTS = $(am__objects_1) gr_agc_cc.lo gr_agc_ff.lo \ - gr_agc2_cc.lo gr_agc2_ff.lo gr_align_on_samplenumbers_ss.lo \ - gr_binary_slicer_fb.lo gr_bytes_to_syms.lo gr_char_to_float.lo \ - gr_check_counting_s.lo gr_check_lfsr_32k_s.lo \ - gr_circular_file.lo gr_clock_recovery_mm_cc.lo \ - gr_clock_recovery_mm_ff.lo gr_complex_to_interleaved_short.lo \ - gr_complex_to_xxx.lo gr_conjugate_cc.lo \ - gr_constellation_decoder_cb.lo gr_correlate_access_code_bb.lo \ - gr_costas_loop_cc.lo gr_count_bits.lo gr_crc32.lo \ +am_libgeneral_la_OBJECTS = gr_agc_cc.lo gr_agc_ff.lo gr_agc2_cc.lo \ + gr_agc2_ff.lo gr_align_on_samplenumbers_ss.lo \ + gr_bin_statistics_f.lo gr_binary_slicer_fb.lo \ + gr_bytes_to_syms.lo gr_char_to_float.lo gr_check_counting_s.lo \ + gr_check_lfsr_32k_s.lo gr_circular_file.lo \ + gr_clock_recovery_mm_cc.lo gr_clock_recovery_mm_ff.lo \ + gr_complex_to_interleaved_short.lo gr_complex_to_xxx.lo \ + gr_conjugate_cc.lo gr_constellation_decoder_cb.lo \ + gr_correlate_access_code_bb.lo gr_costas_loop_cc.lo \ + gr_count_bits.lo gr_cpfsk_bc.lo gr_crc32.lo \ gr_ctcss_squelch_ff.lo gr_dd_mpsk_sync_cc.lo \ - gr_deinterleave.lo gr_diff_decoder_bb.lo gr_diff_encoder_bb.lo \ - gr_diff_phasor_cc.lo gr_fake_channel_coder_pp.lo \ - gr_fast_atan2f.lo gr_feedforward_agc_cc.lo gr_feval.lo \ - gr_fft_vcc.lo gr_fft_vfc.lo gr_firdes.lo gr_float_to_char.lo \ - gr_float_to_complex.lo gr_float_to_short.lo \ - gr_float_to_uchar.lo gr_frequency_modulator_fc.lo gr_fxpt.lo \ - gr_framer_sink_1.lo gr_head.lo gr_interleave.lo \ - gr_interleaved_short_to_complex.lo gr_keep_one_in_n.lo \ - gr_kludge_copy.lo gr_lfsr_32k_source_s.lo gr_lms_dfe_cc.lo \ - gr_lms_dfe_ff.lo gr_map_bb.lo gr_math.lo gr_misc.lo \ + gr_decode_ccsds_27_fb.lo gr_deinterleave.lo gr_delay.lo \ + gr_diff_decoder_bb.lo gr_diff_encoder_bb.lo \ + gr_diff_phasor_cc.lo gr_dpll_bb.lo gr_encode_ccsds_27_bb.lo \ + gr_fake_channel_coder_pp.lo gr_fast_atan2f.lo \ + gr_feedforward_agc_cc.lo gr_feval.lo gr_fft_vcc.lo \ + gr_fft_vcc_fftw.lo gr_fft_vfc.lo gr_firdes.lo \ + gr_float_to_char.lo gr_float_to_complex.lo \ + gr_float_to_short.lo gr_float_to_uchar.lo gr_fmdet_cf.lo \ + gr_frequency_modulator_fc.lo gr_fxpt.lo gr_framer_sink_1.lo \ + gr_glfsr_source_b.lo gr_glfsr_source_f.lo gr_head.lo \ + gr_interleave.lo gr_interleaved_short_to_complex.lo \ + gr_iqcomp_cc.lo gr_keep_one_in_n.lo gr_kludge_copy.lo \ + gr_lfsr_32k_source_s.lo gr_lms_dfe_cc.lo gr_lms_dfe_ff.lo \ + gr_map_bb.lo gr_math.lo gr_misc.lo gr_mpsk_receiver_cc.lo \ gr_nlog10_ff.lo gr_nop.lo gr_null_sink.lo gr_null_source.lo \ - gr_pa_2x2_phase_combiner.lo gr_packet_sink.lo \ + gr_ofdm_frame_acquisition.lo gr_ofdm_cyclic_prefixer.lo \ + gr_ofdm_demapper_vcb.lo gr_ofdm_mapper_bcv.lo \ + gr_ofdm_frame_sink.lo gr_ofdm_insert_preamble.lo \ + gr_ofdm_sampler.lo gr_pa_2x2_phase_combiner.lo \ + gr_packet_sink.lo gr_peak_detector2_fb.lo \ gr_phase_modulator_fc.lo gr_pll_carriertracking_cc.lo \ - gr_pll_freqdet_cf.lo gr_pll_refout_cc.lo gr_prefix.lo \ - gr_prefs.lo gr_probe_avg_mag_sqrd_c.lo \ + gr_pll_freqdet_cf.lo gr_pll_refout_cc.lo \ + gr_pn_correlator_cc.lo gr_prefix.lo gr_prefs.lo \ + gr_probe_avg_mag_sqrd_c.lo gr_probe_avg_mag_sqrd_cf.lo \ gr_probe_avg_mag_sqrd_f.lo gr_probe_signal_f.lo \ gr_pwr_squelch_cc.lo gr_pwr_squelch_ff.lo \ - gr_quadrature_demod_cf.lo gr_random.lo gr_remez.lo \ - gr_reverse.lo gr_rms_cf.lo gr_rms_ff.lo gr_short_to_float.lo \ + gr_quadrature_demod_cf.lo gr_rail_ff.lo gr_random.lo \ + gr_regenerate_bb.lo gr_remez.lo gr_repeat.lo gr_reverse.lo \ + gr_rms_cf.lo gr_rms_ff.lo gr_short_to_float.lo \ gr_simple_correlator.lo gr_simple_framer.lo \ - gr_simple_squelch_cc.lo gr_skiphead.lo gr_squelch_base_cc.lo \ - gr_squelch_base_ff.lo gr_stream_to_streams.lo \ - gr_stream_to_vector.lo gr_streams_to_stream.lo \ - gr_streams_to_vector.lo gr_sync_block.lo gr_sync_decimator.lo \ - gr_sync_interpolator.lo gr_test.lo gr_threshold_ff.lo \ - gr_throttle.lo gr_uchar_to_float.lo gr_vco_f.lo \ - gr_vector_to_stream.lo gr_vector_to_streams.lo \ + gr_simple_squelch_cc.lo gr_skiphead.lo gr_squash_ff.lo \ + gr_squelch_base_cc.lo gr_squelch_base_ff.lo gr_stream_mux.lo \ + gr_stream_to_streams.lo gr_stream_to_vector.lo \ + gr_streams_to_stream.lo gr_streams_to_vector.lo \ + gr_stretch_ff.lo gr_test.lo gr_threshold_ff.lo gr_throttle.lo \ + gr_uchar_to_float.lo gr_vco_f.lo gr_vector_to_stream.lo \ + gr_vector_to_streams.lo gr_wavelet_ff.lo gr_wvps_ff.lo \ gri_add_const_ss_generic.lo gri_char_to_float.lo \ gri_debugger_hook.lo gri_fft.lo gri_float_to_char.lo \ - gri_float_to_short.lo gri_float_to_uchar.lo \ + gri_float_to_short.lo gri_float_to_uchar.lo gri_glfsr.lo \ gri_interleaved_short_to_complex.lo gri_short_to_float.lo \ - gri_uchar_to_float.lo malloc16.lo gr_unpack_k_bits_bb.lo + gri_uchar_to_float.lo malloc16.lo gr_unpack_k_bits_bb.lo \ + gr_descrambler_bb.lo gr_scrambler_bb.lo gr_probe_mpsk_snr_c.lo \ + gr_probe_density_b.lo libgeneral_la_OBJECTS = $(am_libgeneral_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libgeneral_qa_la_SOURCES) $(libgeneral_la_SOURCES) DIST_SOURCES = $(libgeneral_qa_la_SOURCES) $(libgeneral_la_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -252,10 +265,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -263,9 +275,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -273,6 +292,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -285,73 +306,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -361,49 +375,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -411,15 +465,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -429,16 +626,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -447,376 +662,148 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) -noinst_LTLIBRARIES = libgeneral.la libgeneral-qa.la +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# ---------------------------------------------------------------- -# these scripts generate code -CODE_GENERATOR = \ - generate_all.py \ - generate_common.py \ - gr_add_XX.cc.t \ - gr_add_XX.h.t \ - gr_add_XX.i.t \ - gr_add_const_XX.cc.t \ - gr_add_const_XX.h.t \ - gr_add_const_XX.i.t \ - gr_add_vXX.cc.t \ - gr_add_vXX.h.t \ - gr_add_vXX.i.t \ - gr_add_const_vXX.cc.t \ - gr_add_const_vXX.h.t \ - gr_add_const_vXX.i.t \ - gr_chunks_to_symbols_XX.cc.t \ - gr_chunks_to_symbols_XX.h.t \ - gr_chunks_to_symbols_XX.i.t \ - gr_divide_XX.cc.t \ - gr_divide_XX.h.t \ - gr_divide_XX.i.t \ - gr_multiply_XX.cc.t \ - gr_multiply_XX.h.t \ - gr_multiply_XX.i.t \ - gr_multiply_const_XX.cc.t \ - gr_multiply_const_XX.h.t \ - gr_multiply_const_XX.i.t \ - gr_multiply_vXX.cc.t \ - gr_multiply_vXX.h.t \ - gr_multiply_vXX.i.t \ - gr_multiply_const_vXX.cc.t \ - gr_multiply_const_vXX.h.t \ - gr_multiply_const_vXX.i.t \ - gr_mute_XX.cc.t \ - gr_mute_XX.h.t \ - gr_mute_XX.i.t \ - gr_noise_source_X.cc.t \ - gr_noise_source_X.h.t \ - gr_noise_source_X.i.t \ - gr_packed_to_unpacked_XX.cc.t \ - gr_packed_to_unpacked_XX.h.t \ - gr_packed_to_unpacked_XX.i.t \ - gr_sig_source_X.cc.t \ - gr_sig_source_X.h.t \ - gr_sig_source_X.i.t \ - gr_sub_XX.cc.t \ - gr_sub_XX.h.t \ - gr_sub_XX.i.t \ - gr_unpacked_to_packed_XX.cc.t \ - gr_unpacked_to_packed_XX.h.t \ - gr_unpacked_to_packed_XX.i.t \ - gr_vector_source_X.cc.t \ - gr_vector_source_X.h.t \ - gr_vector_source_X.i.t \ - gr_vector_sink_X.cc.t \ - gr_vector_sink_X.h.t \ - gr_vector_sink_X.i.t +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d -# -# This file is machine generated. All edits will be overwritten -# -GENERATED_H = \ - gr_add_cc.h \ - gr_add_const_cc.h \ - gr_add_const_ff.h \ - gr_add_const_ii.h \ - gr_add_const_sf.h \ - gr_add_const_ss.h \ - gr_add_const_vcc.h \ - gr_add_const_vff.h \ - gr_add_const_vii.h \ - gr_add_const_vss.h \ - gr_add_ff.h \ - gr_add_ii.h \ - gr_add_ss.h \ - gr_add_vcc.h \ - gr_add_vff.h \ - gr_add_vii.h \ - gr_add_vss.h \ - gr_chunks_to_symbols_bc.h \ - gr_chunks_to_symbols_bf.h \ - gr_chunks_to_symbols_ic.h \ - gr_chunks_to_symbols_if.h \ - gr_chunks_to_symbols_sc.h \ - gr_chunks_to_symbols_sf.h \ - gr_divide_cc.h \ - gr_divide_ff.h \ - gr_divide_ii.h \ - gr_divide_ss.h \ - gr_multiply_cc.h \ - gr_multiply_const_cc.h \ - gr_multiply_const_ff.h \ - gr_multiply_const_ii.h \ - gr_multiply_const_ss.h \ - gr_multiply_const_vcc.h \ - gr_multiply_const_vff.h \ - gr_multiply_const_vii.h \ - gr_multiply_const_vss.h \ - gr_multiply_ff.h \ - gr_multiply_ii.h \ - gr_multiply_ss.h \ - gr_multiply_vcc.h \ - gr_multiply_vff.h \ - gr_multiply_vii.h \ - gr_multiply_vss.h \ - gr_mute_cc.h \ - gr_mute_ff.h \ - gr_mute_ii.h \ - gr_mute_ss.h \ - gr_noise_source_c.h \ - gr_noise_source_f.h \ - gr_noise_source_i.h \ - gr_noise_source_s.h \ - gr_packed_to_unpacked_bb.h \ - gr_packed_to_unpacked_ii.h \ - gr_packed_to_unpacked_ss.h \ - gr_sig_source_c.h \ - gr_sig_source_f.h \ - gr_sig_source_i.h \ - gr_sig_source_s.h \ - gr_sub_cc.h \ - gr_sub_ff.h \ - gr_sub_ii.h \ - gr_sub_ss.h \ - gr_unpacked_to_packed_bb.h \ - gr_unpacked_to_packed_ii.h \ - gr_unpacked_to_packed_ss.h \ - gr_vector_sink_b.h \ - gr_vector_sink_c.h \ - gr_vector_sink_f.h \ - gr_vector_sink_i.h \ - gr_vector_sink_s.h \ - gr_vector_source_b.h \ - gr_vector_source_c.h \ - gr_vector_source_f.h \ - gr_vector_source_i.h \ - gr_vector_source_s.h - -GENERATED_I = \ - gr_add_cc.i \ - gr_add_const_cc.i \ - gr_add_const_ff.i \ - gr_add_const_ii.i \ - gr_add_const_sf.i \ - gr_add_const_ss.i \ - gr_add_const_vcc.i \ - gr_add_const_vff.i \ - gr_add_const_vii.i \ - gr_add_const_vss.i \ - gr_add_ff.i \ - gr_add_ii.i \ - gr_add_ss.i \ - gr_add_vcc.i \ - gr_add_vff.i \ - gr_add_vii.i \ - gr_add_vss.i \ - gr_chunks_to_symbols_bc.i \ - gr_chunks_to_symbols_bf.i \ - gr_chunks_to_symbols_ic.i \ - gr_chunks_to_symbols_if.i \ - gr_chunks_to_symbols_sc.i \ - gr_chunks_to_symbols_sf.i \ - gr_divide_cc.i \ - gr_divide_ff.i \ - gr_divide_ii.i \ - gr_divide_ss.i \ - gr_multiply_cc.i \ - gr_multiply_const_cc.i \ - gr_multiply_const_ff.i \ - gr_multiply_const_ii.i \ - gr_multiply_const_ss.i \ - gr_multiply_const_vcc.i \ - gr_multiply_const_vff.i \ - gr_multiply_const_vii.i \ - gr_multiply_const_vss.i \ - gr_multiply_ff.i \ - gr_multiply_ii.i \ - gr_multiply_ss.i \ - gr_multiply_vcc.i \ - gr_multiply_vff.i \ - gr_multiply_vii.i \ - gr_multiply_vss.i \ - gr_mute_cc.i \ - gr_mute_ff.i \ - gr_mute_ii.i \ - gr_mute_ss.i \ - gr_noise_source_c.i \ - gr_noise_source_f.i \ - gr_noise_source_i.i \ - gr_noise_source_s.i \ - gr_packed_to_unpacked_bb.i \ - gr_packed_to_unpacked_ii.i \ - gr_packed_to_unpacked_ss.i \ - gr_sig_source_c.i \ - gr_sig_source_f.i \ - gr_sig_source_i.i \ - gr_sig_source_s.i \ - gr_sub_cc.i \ - gr_sub_ff.i \ - gr_sub_ii.i \ - gr_sub_ss.i \ - gr_unpacked_to_packed_bb.i \ - gr_unpacked_to_packed_ii.i \ - gr_unpacked_to_packed_ss.i \ - gr_vector_sink_b.i \ - gr_vector_sink_c.i \ - gr_vector_sink_f.i \ - gr_vector_sink_i.i \ - gr_vector_sink_s.i \ - gr_vector_source_b.i \ - gr_vector_source_c.i \ - gr_vector_source_f.i \ - gr_vector_source_i.i \ - gr_vector_source_s.i - -GENERATED_CC = \ - gr_add_cc.cc \ - gr_add_const_cc.cc \ - gr_add_const_ff.cc \ - gr_add_const_ii.cc \ - gr_add_const_sf.cc \ - gr_add_const_ss.cc \ - gr_add_const_vcc.cc \ - gr_add_const_vff.cc \ - gr_add_const_vii.cc \ - gr_add_const_vss.cc \ - gr_add_ff.cc \ - gr_add_ii.cc \ - gr_add_ss.cc \ - gr_add_vcc.cc \ - gr_add_vff.cc \ - gr_add_vii.cc \ - gr_add_vss.cc \ - gr_chunks_to_symbols_bc.cc \ - gr_chunks_to_symbols_bf.cc \ - gr_chunks_to_symbols_ic.cc \ - gr_chunks_to_symbols_if.cc \ - gr_chunks_to_symbols_sc.cc \ - gr_chunks_to_symbols_sf.cc \ - gr_divide_cc.cc \ - gr_divide_ff.cc \ - gr_divide_ii.cc \ - gr_divide_ss.cc \ - gr_multiply_cc.cc \ - gr_multiply_const_cc.cc \ - gr_multiply_const_ff.cc \ - gr_multiply_const_ii.cc \ - gr_multiply_const_ss.cc \ - gr_multiply_const_vcc.cc \ - gr_multiply_const_vff.cc \ - gr_multiply_const_vii.cc \ - gr_multiply_const_vss.cc \ - gr_multiply_ff.cc \ - gr_multiply_ii.cc \ - gr_multiply_ss.cc \ - gr_multiply_vcc.cc \ - gr_multiply_vff.cc \ - gr_multiply_vii.cc \ - gr_multiply_vss.cc \ - gr_mute_cc.cc \ - gr_mute_ff.cc \ - gr_mute_ii.cc \ - gr_mute_ss.cc \ - gr_noise_source_c.cc \ - gr_noise_source_f.cc \ - gr_noise_source_i.cc \ - gr_noise_source_s.cc \ - gr_packed_to_unpacked_bb.cc \ - gr_packed_to_unpacked_ii.cc \ - gr_packed_to_unpacked_ss.cc \ - gr_sig_source_c.cc \ - gr_sig_source_f.cc \ - gr_sig_source_i.cc \ - gr_sig_source_s.cc \ - gr_sub_cc.cc \ - gr_sub_ff.cc \ - gr_sub_ii.cc \ - gr_sub_ss.cc \ - gr_unpacked_to_packed_bb.cc \ - gr_unpacked_to_packed_ii.cc \ - gr_unpacked_to_packed_ss.cc \ - gr_vector_sink_b.cc \ - gr_vector_sink_c.cc \ - gr_vector_sink_f.cc \ - gr_vector_sink_i.cc \ - gr_vector_sink_s.cc \ - gr_vector_source_b.cc \ - gr_vector_source_c.cc \ - gr_vector_source_f.cc \ - gr_vector_source_i.cc \ - gr_vector_source_s.cc - -BUILT_SOURCES = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC) +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) +noinst_LTLIBRARIES = libgeneral.la libgeneral-qa.la +BUILT_SOURCES = # ---------------------------------------------------------------- EXTRA_DIST = \ - $(CODE_GENERATOR) \ gen_sine_table.py \ gr_prefix.cc.in libgeneral_la_SOURCES = \ - $(GENERATED_CC) \ gr_agc_cc.cc \ gr_agc_ff.cc \ gr_agc2_cc.cc \ gr_agc2_ff.cc \ gr_align_on_samplenumbers_ss.cc \ + gr_bin_statistics_f.cc \ gr_binary_slicer_fb.cc \ gr_bytes_to_syms.cc \ gr_char_to_float.cc \ @@ -832,30 +819,40 @@ libgeneral_la_SOURCES = \ gr_correlate_access_code_bb.cc \ gr_costas_loop_cc.cc \ gr_count_bits.cc \ + gr_cpfsk_bc.cc \ gr_crc32.cc \ gr_ctcss_squelch_ff.cc \ gr_dd_mpsk_sync_cc.cc \ + gr_decode_ccsds_27_fb.cc \ gr_deinterleave.cc \ + gr_delay.cc \ gr_diff_decoder_bb.cc \ gr_diff_encoder_bb.cc \ gr_diff_phasor_cc.cc \ + gr_dpll_bb.cc \ + gr_encode_ccsds_27_bb.cc \ gr_fake_channel_coder_pp.cc \ gr_fast_atan2f.cc \ gr_feedforward_agc_cc.cc \ gr_feval.cc \ gr_fft_vcc.cc \ + gr_fft_vcc_fftw.cc \ gr_fft_vfc.cc \ gr_firdes.cc \ gr_float_to_char.cc \ gr_float_to_complex.cc \ gr_float_to_short.cc \ gr_float_to_uchar.cc \ + gr_fmdet_cf.cc \ gr_frequency_modulator_fc.cc \ gr_fxpt.cc \ gr_framer_sink_1.cc \ + gr_glfsr_source_b.cc \ + gr_glfsr_source_f.cc \ gr_head.cc \ gr_interleave.cc \ gr_interleaved_short_to_complex.cc \ + gr_iqcomp_cc.cc \ gr_keep_one_in_n.cc \ gr_kludge_copy.cc \ gr_lfsr_32k_source_s.cc \ @@ -864,26 +861,40 @@ libgeneral_la_SOURCES = \ gr_map_bb.cc \ gr_math.cc \ gr_misc.cc \ + gr_mpsk_receiver_cc.cc \ gr_nlog10_ff.cc \ gr_nop.cc \ gr_null_sink.cc \ gr_null_source.cc \ + gr_ofdm_frame_acquisition.cc \ + gr_ofdm_cyclic_prefixer.cc \ + gr_ofdm_demapper_vcb.cc \ + gr_ofdm_mapper_bcv.cc \ + gr_ofdm_frame_sink.cc \ + gr_ofdm_insert_preamble.cc \ + gr_ofdm_sampler.cc \ gr_pa_2x2_phase_combiner.cc \ gr_packet_sink.cc \ + gr_peak_detector2_fb.cc \ gr_phase_modulator_fc.cc \ gr_pll_carriertracking_cc.cc \ gr_pll_freqdet_cf.cc \ gr_pll_refout_cc.cc \ + gr_pn_correlator_cc.cc \ gr_prefix.cc \ gr_prefs.cc \ gr_probe_avg_mag_sqrd_c.cc \ + gr_probe_avg_mag_sqrd_cf.cc \ gr_probe_avg_mag_sqrd_f.cc \ gr_probe_signal_f.cc \ gr_pwr_squelch_cc.cc \ gr_pwr_squelch_ff.cc \ gr_quadrature_demod_cf.cc \ + gr_rail_ff.cc \ gr_random.cc \ + gr_regenerate_bb.cc \ gr_remez.cc \ + gr_repeat.cc \ gr_reverse.cc \ gr_rms_cf.cc \ gr_rms_ff.cc \ @@ -892,15 +903,15 @@ libgeneral_la_SOURCES = \ gr_simple_framer.cc \ gr_simple_squelch_cc.cc \ gr_skiphead.cc \ + gr_squash_ff.cc \ gr_squelch_base_cc.cc \ gr_squelch_base_ff.cc \ + gr_stream_mux.cc \ gr_stream_to_streams.cc \ gr_stream_to_vector.cc \ gr_streams_to_stream.cc \ gr_streams_to_vector.cc \ - gr_sync_block.cc \ - gr_sync_decimator.cc \ - gr_sync_interpolator.cc \ + gr_stretch_ff.cc \ gr_test.cc \ gr_threshold_ff.cc \ gr_throttle.cc \ @@ -908,6 +919,8 @@ libgeneral_la_SOURCES = \ gr_vco_f.cc \ gr_vector_to_stream.cc \ gr_vector_to_streams.cc \ + gr_wavelet_ff.cc \ + gr_wvps_ff.cc \ gri_add_const_ss_generic.cc \ gri_char_to_float.cc \ gri_debugger_hook.cc \ @@ -915,11 +928,16 @@ libgeneral_la_SOURCES = \ gri_float_to_char.cc \ gri_float_to_short.cc \ gri_float_to_uchar.cc \ + gri_glfsr.cc \ gri_interleaved_short_to_complex.cc \ gri_short_to_float.cc \ gri_uchar_to_float.cc \ malloc16.c \ - gr_unpack_k_bits_bb.cc + gr_unpack_k_bits_bb.cc \ + gr_descrambler_bb.cc \ + gr_scrambler_bb.cc \ + gr_probe_mpsk_snr_c.cc \ + gr_probe_density_b.cc libgeneral_qa_la_SOURCES = \ qa_general.cc \ @@ -927,15 +945,17 @@ libgeneral_qa_la_SOURCES = \ qa_gr_firdes.cc \ qa_gr_fxpt.cc \ qa_gr_fxpt_nco.cc \ - qa_gr_fxpt_vco.cc + qa_gr_fxpt_vco.cc \ + qa_gr_math.cc \ + qa_gri_lfsr.cc grinclude_HEADERS = \ - $(GENERATED_H) \ gr_agc_cc.h \ gr_agc_ff.h \ gr_agc2_cc.h \ gr_agc2_ff.h \ gr_align_on_samplenumbers_ss.h \ + gr_bin_statistics_f.h \ gr_binary_slicer_fb.h \ gr_bytes_to_syms.h \ gr_char_to_float.h \ @@ -951,33 +971,42 @@ grinclude_HEADERS = \ gr_correlate_access_code_bb.h \ gr_costas_loop_cc.h \ gr_count_bits.h \ + gr_cpfsk_bc.h \ gr_crc32.h \ gr_ctcss_squelch_ff.h \ gr_dd_mpsk_sync_cc.h \ + gr_decode_ccsds_27_fb.h \ gr_diff_decoder_bb.h \ gr_diff_encoder_bb.h \ gr_deinterleave.h \ + gr_delay.h \ gr_diff_phasor_cc.h \ - gr_endianness.h \ + gr_dpll_bb.h \ + gr_encode_ccsds_27_bb.h \ gr_expj.h \ gr_fake_channel_coder_pp.h \ gr_feedforward_agc_cc.h \ gr_feval.h \ gr_fft_vcc.h \ + gr_fft_vcc_fftw.h \ gr_fft_vfc.h \ gr_firdes.h \ gr_float_to_char.h \ gr_float_to_complex.h \ gr_float_to_short.h \ gr_float_to_uchar.h \ + gr_fmdet_cf.h \ gr_framer_sink_1.h \ gr_frequency_modulator_fc.h \ gr_fxpt.h \ gr_fxpt_nco.h \ gr_fxpt_vco.h \ + gr_glfsr_source_b.h \ + gr_glfsr_source_f.h \ gr_head.h \ gr_interleave.h \ gr_interleaved_short_to_complex.h \ + gr_iqcomp_cc.h \ gr_keep_one_in_n.h \ gr_kludge_copy.h \ gr_lfsr_32k_source_s.h \ @@ -987,47 +1016,59 @@ grinclude_HEADERS = \ gr_map_bb.h \ gr_math.h \ gr_misc.h \ + gr_mpsk_receiver_cc.h \ gr_nco.h \ gr_nlog10_ff.h \ - gr_noise_type.h \ gr_nop.h \ gr_null_sink.h \ gr_null_source.h \ + gr_ofdm_frame_acquisition.h \ + gr_ofdm_cyclic_prefixer.h \ + gr_ofdm_demapper_vcb.h \ + gr_ofdm_mapper_bcv.h \ + gr_ofdm_frame_sink.h \ + gr_ofdm_insert_preamble.h \ + gr_ofdm_sampler.h \ gr_pa_2x2_phase_combiner.h \ gr_packet_sink.h \ + gr_peak_detector2_fb.h \ gr_phase_modulator_fc.h \ gr_pll_carriertracking_cc.h \ gr_pll_freqdet_cf.h \ gr_pll_refout_cc.h \ + gr_pn_correlator_cc.h \ gr_prefix.h \ gr_prefs.h \ gr_probe_avg_mag_sqrd_c.h \ + gr_probe_avg_mag_sqrd_cf.h \ gr_probe_avg_mag_sqrd_f.h \ gr_probe_signal_f.h \ gr_pwr_squelch_cc.h \ gr_pwr_squelch_ff.h \ gr_quadrature_demod_cf.h \ + gr_rail_ff.h \ gr_random.h \ + gr_regenerate_bb.h \ gr_remez.h \ + gr_repeat.h \ gr_reverse.h \ gr_rms_cf.h \ gr_rms_ff.h \ gr_short_to_float.h \ - gr_sig_source_waveform.h \ gr_simple_correlator.h \ gr_simple_framer.h \ gr_simple_framer_sync.h \ gr_simple_squelch_cc.h \ + gr_squash_ff.h \ gr_skiphead.h \ gr_squelch_base_cc.h \ gr_squelch_base_ff.h \ + gr_stream_mux.h \ gr_stream_to_streams.h \ gr_stream_to_vector.h \ gr_streams_to_stream.h \ gr_streams_to_vector.h \ - gr_sync_block.h \ - gr_sync_decimator.h \ - gr_sync_interpolator.h \ + gr_stretch_ff.h \ gr_test_types.h \ gr_test.h \ gr_threshold_ff.h \ @@ -1037,6 +1078,8 @@ grinclude_HEADERS = \ gr_vco_f.h \ gr_vector_to_stream.h \ gr_vector_to_streams.h \ + gr_wavelet_ff.h \ + gr_wvps_ff.h \ gri_add_const_ss.h \ gri_agc_cc.h \ gri_agc_ff.h \ @@ -1048,6 +1091,8 @@ grinclude_HEADERS = \ gri_float_to_char.h \ gri_float_to_short.h \ gri_float_to_uchar.h \ + gri_lfsr.h \ + gri_glfsr.h \ gri_interleaved_short_to_complex.h \ gri_lfsr_15_1_0.h \ gri_lfsr_32k.h \ @@ -1055,7 +1100,11 @@ grinclude_HEADERS = \ gri_uchar_to_float.h \ malloc16.h \ random.h \ - gr_unpack_k_bits_bb.h + gr_unpack_k_bits_bb.h \ + gr_descrambler_bb.h \ + gr_scrambler_bb.h \ + gr_probe_mpsk_snr_c.h \ + gr_probe_density_b.h noinst_HEADERS = \ qa_general.h \ @@ -1064,17 +1113,18 @@ noinst_HEADERS = \ qa_gr_fxpt.h \ qa_gr_fxpt_nco.h \ qa_gr_fxpt_vco.h \ - sine_table.h + qa_gri_lfsr.h \ + sine_table.h \ + qa_gr_math.h swiginclude_HEADERS = \ - $(GENERATED_I) \ general.i \ - general_generated.i \ gr_agc_cc.i \ gr_agc_ff.i \ gr_agc2_cc.i \ gr_agc2_ff.i \ gr_align_on_samplenumbers_ss.i \ + gr_bin_statistics_f.i \ gr_binary_slicer_fb.i \ gr_bytes_to_syms.i \ gr_char_to_float.i \ @@ -1088,14 +1138,18 @@ swiginclude_HEADERS = \ gr_constellation_decoder_cb.i \ gr_correlate_access_code_bb.i \ gr_costas_loop_cc.i \ + gr_cpfsk_bc.i \ gr_crc32.i \ gr_ctcss_squelch_ff.i \ gr_dd_mpsk_sync_cc.i \ + gr_decode_ccsds_27_fb.i \ gr_diff_decoder_bb.i \ gr_diff_encoder_bb.i \ gr_diff_phasor_cc.i \ + gr_dpll_bb.i \ gr_deinterleave.i \ - gr_endianness.i \ + gr_delay.i \ + gr_encode_ccsds_27_bb.i \ gr_fake_channel_coder_pp.i \ gr_feedforward_agc_cc.i \ gr_feval.i \ @@ -1106,52 +1160,70 @@ swiginclude_HEADERS = \ gr_float_to_complex.i \ gr_float_to_short.i \ gr_float_to_uchar.i \ + gr_fmdet_cf.i \ gr_frequency_modulator_fc.i \ gr_framer_sink_1.i \ + gr_glfsr_source_b.i \ + gr_glfsr_source_f.i \ gr_head.i \ gr_interleave.i \ gr_interleaved_short_to_complex.i \ + gr_iqcomp_cc.i \ gr_keep_one_in_n.i \ gr_kludge_copy.i \ gr_lfsr_32k_source_s.i \ gr_lms_dfe_cc.i \ gr_lms_dfe_ff.i \ gr_map_bb.i \ + gr_mpsk_receiver_cc.i \ gr_nlog10_ff.i \ gr_nop.i \ gr_null_sink.i \ gr_null_source.i \ + gr_ofdm_frame_acquisition.i \ + gr_ofdm_cyclic_prefixer.i \ + gr_ofdm_demapper_vcb.i \ + gr_ofdm_mapper_bcv.i \ + gr_ofdm_frame_sink.i \ + gr_ofdm_insert_preamble.i \ + gr_ofdm_sampler.i \ gr_pa_2x2_phase_combiner.i \ gr_packet_sink.i \ + gr_peak_detector2_fb.i \ gr_phase_modulator_fc.i \ gr_pll_carriertracking_cc.i \ gr_pll_freqdet_cf.i \ gr_pll_refout_cc.i \ + gr_pn_correlator_cc.i \ gr_prefix.i \ gr_prefs.i \ gr_probe_avg_mag_sqrd_c.i \ + gr_probe_avg_mag_sqrd_cf.i \ gr_probe_avg_mag_sqrd_f.i \ gr_probe_signal_f.i \ gr_pwr_squelch_cc.i \ gr_pwr_squelch_ff.i \ gr_quadrature_demod_cf.i \ + gr_rail_ff.i \ + gr_regenerate_bb.i \ gr_remez.i \ gr_rms_cf.i \ gr_rms_ff.i \ + gr_repeat.i \ gr_short_to_float.i \ gr_simple_correlator.i \ gr_simple_framer.i \ gr_simple_squelch_cc.i \ gr_skiphead.i \ + gr_squash_ff.i \ gr_squelch_base_cc.i \ gr_squelch_base_ff.i \ + gr_stream_mux.i \ gr_stream_to_streams.i \ gr_stream_to_vector.i \ gr_streams_to_stream.i \ gr_streams_to_vector.i \ - gr_sync_block.i \ - gr_sync_decimator.i \ - gr_sync_interpolator.i \ + gr_stretch_ff.i \ gr_test.i \ gr_threshold_ff.i \ gr_throttle.i \ @@ -1160,23 +1232,28 @@ swiginclude_HEADERS = \ gr_vector_to_stream.i \ gr_vector_to_streams.i \ gr_unpack_k_bits_bb.i \ + gr_wavelet_ff.i \ + gr_wvps_ff.i \ gri_agc_cc.i \ gri_agc_ff.i \ gri_agc2_cc.i \ - gri_agc2_ff.i + gri_agc2_ff.i \ + gr_descrambler_bb.i \ + gr_scrambler_bb.i \ + gr_probe_mpsk_snr_c.i \ + gr_probe_density_b.i -CLEANFILES = $(BUILT_SOURCES) *.pyc all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(srcdir)/Makefile.gen $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -1212,9 +1289,9 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libgeneral-qa.la: $(libgeneral_qa_la_OBJECTS) $(libgeneral_qa_la_DEPENDENCIES) - $(CXXLINK) $(libgeneral_qa_la_LDFLAGS) $(libgeneral_qa_la_OBJECTS) $(libgeneral_qa_la_LIBADD) $(LIBS) + $(CXXLINK) $(libgeneral_qa_la_OBJECTS) $(libgeneral_qa_la_LIBADD) $(LIBS) libgeneral.la: $(libgeneral_la_OBJECTS) $(libgeneral_la_DEPENDENCIES) - $(CXXLINK) $(libgeneral_la_LDFLAGS) $(libgeneral_la_OBJECTS) $(libgeneral_la_LIBADD) $(LIBS) + $(CXXLINK) $(libgeneral_la_OBJECTS) $(libgeneral_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -1222,39 +1299,17 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_sf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_ss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vcc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_ss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_vcc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_vff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_vii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_vss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_agc2_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_agc2_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_agc_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_agc_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_align_on_samplenumbers_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_bin_statistics_f.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_binary_slicer_fb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_bytes_to_syms.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_char_to_float.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_check_counting_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_check_lfsr_32k_s.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_bc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_bf.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_ic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_if.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_sc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_sf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_circular_file.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_clock_recovery_mm_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_clock_recovery_mm_ff.Plo@am__quote@ @@ -1265,34 +1320,41 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_correlate_access_code_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_costas_loop_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_count_bits.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_cpfsk_bc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_crc32.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ctcss_squelch_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_dd_mpsk_sync_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_decode_ccsds_27_fb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_deinterleave.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_delay.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_descrambler_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_diff_decoder_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_diff_encoder_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_diff_phasor_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_dpll_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_encode_ccsds_27_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fake_channel_coder_pp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fast_atan2f.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_feedforward_agc_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_feval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fft_vcc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fft_vcc_fftw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fft_vfc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_firdes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_float_to_char.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_float_to_complex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_float_to_short.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_float_to_uchar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fmdet_cf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_framer_sink_1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_frequency_modulator_fc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_fxpt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_glfsr_source_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_glfsr_source_f.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_head.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_interleave.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_interleaved_short_to_complex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_iqcomp_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_keep_one_in_n.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_kludge_copy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_lfsr_32k_source_s.Plo@am__quote@ @@ -1301,99 +1363,70 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_map_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_math.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_misc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_ss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vcc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_ss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_vcc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_vff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_vii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_vss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mpsk_receiver_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_nlog10_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_nop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_null_sink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_null_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_cyclic_prefixer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_demapper_vcb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_frame_acquisition.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_frame_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_insert_preamble.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_mapper_bcv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_ofdm_sampler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pa_2x2_phase_combiner.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packed_to_unpacked_bb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packed_to_unpacked_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packed_to_unpacked_ss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packet_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_peak_detector2_fb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_phase_modulator_fc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pll_carriertracking_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pll_freqdet_cf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pll_refout_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pn_correlator_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_prefix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_prefs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_probe_avg_mag_sqrd_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_probe_avg_mag_sqrd_cf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_probe_avg_mag_sqrd_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_probe_density_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_probe_mpsk_snr_c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_probe_signal_f.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pwr_squelch_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pwr_squelch_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_quadrature_demod_cf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_rail_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_random.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_regenerate_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_remez.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_repeat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_rms_cf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_rms_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_scrambler_bb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_short_to_float.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_simple_correlator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_simple_framer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_simple_squelch_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_skiphead.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_squash_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_squelch_base_cc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_squelch_base_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_stream_mux.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_stream_to_streams.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_stream_to_vector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_streams_to_stream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_streams_to_vector.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_cc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_ff.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_ss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sync_block.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sync_decimator.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sync_interpolator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_stretch_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_test.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_threshold_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_throttle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_uchar_to_float.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpack_k_bits_bb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpacked_to_packed_bb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpacked_to_packed_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpacked_to_packed_ss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vco_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_b.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_s.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_b.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_to_stream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_to_streams.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_wavelet_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_wvps_ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_add_const_ss_generic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_char_to_float.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_debugger_hook.Plo@am__quote@ @@ -1401,6 +1434,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_float_to_char.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_float_to_short.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_float_to_uchar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_glfsr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_interleaved_short_to_complex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_short_to_float.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_uchar_to_float.Plo@am__quote@ @@ -1411,45 +1445,47 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_fxpt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_fxpt_nco.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_fxpt_vco.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_math.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gri_lfsr.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -1459,13 +1495,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -1482,7 +1514,7 @@ uninstall-grincludeHEADERS: done install-swigincludeHEADERS: $(swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" @list='$(swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -1503,8 +1535,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -1516,8 +1548,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -1527,13 +1559,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -1547,23 +1578,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -1574,13 +1603,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -1598,9 +1630,9 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -1618,7 +1650,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -1632,12 +1664,20 @@ info-am: install-data-am: install-grincludeHEADERS install-swigincludeHEADERS +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -1658,28 +1698,36 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS uninstall-swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-grincludeHEADERS install-info \ - install-info-am install-man install-strip \ - install-swigincludeHEADERS installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-grincludeHEADERS uninstall-info-am \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ uninstall-swigincludeHEADERS -# include $(srcdir)/Makefile.gen +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -$(GENERATED_H) $(GENERATED_I) $(GENERATED_CC): $(CODE_GENERATOR) - PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i index ba32ab8e..0cb54870 100644 --- a/gnuradio-core/src/lib/general/general.i +++ b/gnuradio-core/src/lib/general/general.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004,2005,2006 Free Software Foundation, Inc. + * Copyright 2004,2005,2006,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,15 +22,11 @@ %{ -#include -#include -#include #include #include #include #include #include -#include #include #include #include @@ -61,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -71,6 +68,8 @@ #include #include #include +#include +#include #include #include #include @@ -85,12 +84,23 @@ #include #include #include +#include +#include #include #include #include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -112,18 +122,31 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + %} -%include "gr_sync_block.i" -%include "gr_sync_decimator.i" -%include "gr_sync_interpolator.i" %include "gr_nop.i" %include "gr_null_sink.i" %include "gr_null_source.i" %include "gr_head.i" %include "gr_skiphead.i" -%include "gr_sig_source_waveform.h" -%include "gr_noise_type.h" %include "gr_quadrature_demod_cf.i" %include "gr_remez.i" %include "gr_float_to_complex.i" @@ -154,6 +177,7 @@ %include "gr_firdes.i" %include "gr_interleave.i" %include "gr_deinterleave.i" +%include "gr_delay.i" %include "gr_simple_squelch_cc.i" %include "gr_agc_ff.i" %include "gr_agc_cc.i" @@ -164,6 +188,8 @@ %include "gr_nlog10_ff.i" %include "gr_fake_channel_coder_pp.i" %include "gr_throttle.i" +%include "gr_mpsk_receiver_cc.i" +%include "gr_stream_mux.i" %include "gr_stream_to_streams.i" %include "gr_streams_to_stream.i" %include "gr_streams_to_vector.i" @@ -178,12 +204,23 @@ %include "gr_packet_sink.i" %include "gr_lms_dfe_cc.i" %include "gr_lms_dfe_ff.i" +%include "gr_dpll_bb.i" +%include "gr_fmdet_cf.i" %include "gr_pll_freqdet_cf.i" %include "gr_pll_refout_cc.i" %include "gr_pll_carriertracking_cc.i" +%include "gr_pn_correlator_cc.i" %include "gr_probe_avg_mag_sqrd_c.i" +%include "gr_probe_avg_mag_sqrd_cf.i" %include "gr_probe_avg_mag_sqrd_f.i" %include "gr_probe_signal_f.i" +%include "gr_ofdm_frame_acquisition.i" +%include "gr_ofdm_cyclic_prefixer.i" +%include "gr_ofdm_mapper_bcv.i" +%include "gr_ofdm_frame_sink.i" +%include "gr_ofdm_insert_preamble.i" +%include "gr_ofdm_sampler.i" +%include "gr_regenerate_bb.i" %include "gr_costas_loop_cc.i" %include "gr_pa_2x2_phase_combiner.i" %include "gr_kludge_copy.i" @@ -205,5 +242,20 @@ %include "gr_pwr_squelch_ff.i" %include "gr_ctcss_squelch_ff.i" %include "gr_feedforward_agc_cc.i" - -%include "general_generated.i" +%include "gr_bin_statistics_f.i" +%include "gr_glfsr_source_b.i" +%include "gr_glfsr_source_f.i" +%include "gr_peak_detector2_fb.i" +%include "gr_repeat.i" +%include "gr_cpfsk_bc.i" +%include "gr_encode_ccsds_27_bb.i" +%include "gr_decode_ccsds_27_fb.i" +%include "gr_descrambler_bb.i" +%include "gr_scrambler_bb.i" +%include "gr_probe_mpsk_snr_c.i" +%include "gr_probe_density_b.i" +%include "gr_rail_ff.i" +%include "gr_squash_ff.i" +%include "gr_stretch_ff.i" +%include "gr_wavelet_ff.i" +%include "gr_wvps_ff.i" diff --git a/gnuradio-core/src/lib/general/general_generated.i b/gnuradio-core/src/lib/general/general_generated.i deleted file mode 100644 index a41f30a3..00000000 --- a/gnuradio-core/src/lib/general/general_generated.i +++ /dev/null @@ -1,156 +0,0 @@ -// -// This file is machine generated. All edits will be overwritten -// -%{ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -%} - -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include diff --git a/gnuradio-core/src/lib/general/generate_all.py b/gnuradio-core/src/lib/general/generate_all.py deleted file mode 100755 index d0d0ba0c..00000000 --- a/gnuradio-core/src/lib/general/generate_all.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -# -# 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 build_utils import output_glue - -import generate_common - -def generate_all (): - generate_common.generate () - output_glue ('general') - - -if __name__ == '__main__': - generate_all () diff --git a/gnuradio-core/src/lib/general/generate_common.py b/gnuradio-core/src/lib/general/generate_common.py deleted file mode 100755 index 3b268615..00000000 --- a/gnuradio-core/src/lib/general/generate_common.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2006 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 build_utils import expand_template, standard_dict -from build_utils_codes import * - -import re - - -# sources and sinks -ss_signatures = ['s', 'i', 'f', 'c'] - -ss_roots = [ - 'gr_vector_source_X', - 'gr_vector_sink_X', - 'gr_noise_source_X', - 'gr_sig_source_X' - ] - -# regular blocks -reg_signatures = ['ss', 'ii', 'ff', 'cc'] - -reg_roots = [ - 'gr_add_const_XX', - 'gr_multiply_const_XX', - 'gr_add_XX', - 'gr_sub_XX', - 'gr_multiply_XX', - 'gr_divide_XX', - 'gr_mute_XX', - 'gr_add_vXX', - 'gr_multiply_vXX', - 'gr_add_const_vXX', - 'gr_multiply_const_vXX' - ] - -# other blocks -others = ( - ('gr_chunks_to_symbols_XX', ('bf', 'bc', 'sf', 'sc', 'if', 'ic')), - ('gr_unpacked_to_packed_XX', ('bb','ss','ii')), - ('gr_packed_to_unpacked_XX', ('bb','ss','ii')) - ) - - -def expand_h_cc_i (root, sig): - # root looks like 'gr_vector_sink_X' - name = re.sub ('X+', sig, root) - d = standard_dict (name, sig) - expand_template (d, root + '.h.t') - expand_template (d, root + '.cc.t') - expand_template (d, root + '.i.t') - - -def generate (): - expand_h_cc_i ('gr_add_const_XX', 'sf') # for MC4020 - expand_h_cc_i ('gr_vector_sink_X', 'b') - expand_h_cc_i ('gr_vector_source_X', 'b') - for r in ss_roots: - for s in ss_signatures: - expand_h_cc_i (r, s) - for r in reg_roots : - for s in reg_signatures: - expand_h_cc_i (r, s) - - for root, sigs in others: - for s in sigs: - expand_h_cc_i (root, s) - - - -if __name__ == '__main__': - generate () - - diff --git a/gnuradio-core/src/lib/general/gr_add_XX.cc.t b/gnuradio-core/src/lib/general/gr_add_XX.cc.t deleted file mode 100644 index d29c9b40..00000000 --- a/gnuradio-core/src/lib/general/gr_add_XX.cc.t +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ () -{ - return @SPTR_NAME@ (new @NAME@ ()); -} - -@NAME@::@NAME@ () - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc += ((@I_TYPE@ *) input_items[j])[i]; - - *optr++ = (@O_TYPE@) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_XX.h.t b/gnuradio-core/src/lib/general/gr_add_XX.h.t deleted file mode 100644 index 6bd68fc7..00000000 --- a/gnuradio-core/src/lib/general/gr_add_XX.h.t +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input streams. - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); - - @NAME@ (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_XX.i.t b/gnuradio-core/src/lib/general/gr_add_XX.i.t deleted file mode 100644 index a4bc4ce6..00000000 --- a/gnuradio-core/src/lib/general/gr_add_XX.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -class @NAME@ : public gr_sync_block -{ - private: - @NAME@ (); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_cc.cc b/gnuradio-core/src/lib/general/gr_add_cc.cc deleted file mode 100644 index bf69a901..00000000 --- a/gnuradio-core/src/lib/general/gr_add_cc.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_cc_sptr -gr_make_add_cc () -{ - return gr_add_cc_sptr (new gr_add_cc ()); -} - -gr_add_cc::gr_add_cc () - : gr_sync_block ("add_cc", - gr_make_io_signature (1, -1, sizeof (gr_complex)), - gr_make_io_signature (1, 1, sizeof (gr_complex))) -{ -} - -int -gr_add_cc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - gr_complex acc = ((gr_complex *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc += ((gr_complex *) input_items[j])[i]; - - *optr++ = (gr_complex) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_cc.h b/gnuradio-core/src/lib/general/gr_add_cc.h deleted file mode 100644 index 4182a46c..00000000 --- a/gnuradio-core/src/lib/general/gr_add_cc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CC_H -#define INCLUDED_GR_ADD_CC_H - -#include - -class gr_add_cc; -typedef boost::shared_ptr gr_add_cc_sptr; - -gr_add_cc_sptr gr_make_add_cc (); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input streams. - */ -class gr_add_cc : public gr_sync_block -{ - friend gr_add_cc_sptr gr_make_add_cc (); - - gr_add_cc (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_cc.i b/gnuradio-core/src/lib/general/gr_add_cc.i deleted file mode 100644 index 19d6ac68..00000000 --- a/gnuradio-core/src/lib/general/gr_add_cc.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_cc) - -gr_add_cc_sptr gr_make_add_cc (); - -class gr_add_cc : public gr_sync_block -{ - private: - gr_add_cc (); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_const_XX.h.t b/gnuradio-core/src/lib/general/gr_add_const_XX.h.t deleted file mode 100644 index 88dd1060..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_XX.h.t +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); - -/*! - * \brief output = input + constant - * \ingroup block - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); - - @O_TYPE@ d_k; // the constant - @NAME@ (@O_TYPE@ k); - - public: - @O_TYPE@ k () const { return d_k; } - void set_k (@O_TYPE@ k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_cc.h b/gnuradio-core/src/lib/general/gr_add_const_cc.h deleted file mode 100644 index 1bf146ec..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_cc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_CC_H -#define INCLUDED_GR_ADD_CONST_CC_H - -#include - -class gr_add_const_cc; -typedef boost::shared_ptr gr_add_const_cc_sptr; - -gr_add_const_cc_sptr gr_make_add_const_cc (gr_complex k); - -/*! - * \brief output = input + constant - * \ingroup block - */ -class gr_add_const_cc : public gr_sync_block -{ - friend gr_add_const_cc_sptr gr_make_add_const_cc (gr_complex k); - - gr_complex d_k; // the constant - gr_add_const_cc (gr_complex k); - - public: - gr_complex k () const { return d_k; } - void set_k (gr_complex k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_ff.h b/gnuradio-core/src/lib/general/gr_add_const_ff.h deleted file mode 100644 index cf607b9d..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_ff.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_FF_H -#define INCLUDED_GR_ADD_CONST_FF_H - -#include - -class gr_add_const_ff; -typedef boost::shared_ptr gr_add_const_ff_sptr; - -gr_add_const_ff_sptr gr_make_add_const_ff (float k); - -/*! - * \brief output = input + constant - * \ingroup block - */ -class gr_add_const_ff : public gr_sync_block -{ - friend gr_add_const_ff_sptr gr_make_add_const_ff (float k); - - float d_k; // the constant - gr_add_const_ff (float k); - - public: - float k () const { return d_k; } - void set_k (float k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_ii.h b/gnuradio-core/src/lib/general/gr_add_const_ii.h deleted file mode 100644 index 8ca8b741..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_ii.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_II_H -#define INCLUDED_GR_ADD_CONST_II_H - -#include - -class gr_add_const_ii; -typedef boost::shared_ptr gr_add_const_ii_sptr; - -gr_add_const_ii_sptr gr_make_add_const_ii (int k); - -/*! - * \brief output = input + constant - * \ingroup block - */ -class gr_add_const_ii : public gr_sync_block -{ - friend gr_add_const_ii_sptr gr_make_add_const_ii (int k); - - int d_k; // the constant - gr_add_const_ii (int k); - - public: - int k () const { return d_k; } - void set_k (int k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_sf.h b/gnuradio-core/src/lib/general/gr_add_const_sf.h deleted file mode 100644 index fd73e92f..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_sf.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_SF_H -#define INCLUDED_GR_ADD_CONST_SF_H - -#include - -class gr_add_const_sf; -typedef boost::shared_ptr gr_add_const_sf_sptr; - -gr_add_const_sf_sptr gr_make_add_const_sf (float k); - -/*! - * \brief output = input + constant - * \ingroup block - */ -class gr_add_const_sf : public gr_sync_block -{ - friend gr_add_const_sf_sptr gr_make_add_const_sf (float k); - - float d_k; // the constant - gr_add_const_sf (float k); - - public: - float k () const { return d_k; } - void set_k (float k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_ss.h b/gnuradio-core/src/lib/general/gr_add_const_ss.h deleted file mode 100644 index 1ad1de83..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_ss.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_SS_H -#define INCLUDED_GR_ADD_CONST_SS_H - -#include - -class gr_add_const_ss; -typedef boost::shared_ptr gr_add_const_ss_sptr; - -gr_add_const_ss_sptr gr_make_add_const_ss (short k); - -/*! - * \brief output = input + constant - * \ingroup block - */ -class gr_add_const_ss : public gr_sync_block -{ - friend gr_add_const_ss_sptr gr_make_add_const_ss (short k); - - short d_k; // the constant - gr_add_const_ss (short k); - - public: - short k () const { return d_k; } - void set_k (short k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vXX.h.t b/gnuradio-core/src/lib/general/gr_add_const_vXX.h.t deleted file mode 100755 index e6a8e9b5..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_vXX.h.t +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k); - -/*! - * \brief output vector = input vector + constant vector - * \ingroup block - */ -class @NAME@ : public gr_sync_block -{ - 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); - - public: - const std::vector<@I_TYPE@> k () const { return d_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, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vcc.h b/gnuradio-core/src/lib/general/gr_add_const_vcc.h deleted file mode 100644 index 882a4762..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_vcc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_VCC_H -#define INCLUDED_GR_ADD_CONST_VCC_H - -#include - -class gr_add_const_vcc; -typedef boost::shared_ptr gr_add_const_vcc_sptr; - -gr_add_const_vcc_sptr gr_make_add_const_vcc (const std::vector k); - -/*! - * \brief output vector = input vector + constant vector - * \ingroup block - */ -class gr_add_const_vcc : public gr_sync_block -{ - friend gr_add_const_vcc_sptr gr_make_add_const_vcc (const std::vector k); - - std::vector d_k; // the constant - gr_add_const_vcc (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vff.h b/gnuradio-core/src/lib/general/gr_add_const_vff.h deleted file mode 100644 index 46a491ba..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_vff.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_VFF_H -#define INCLUDED_GR_ADD_CONST_VFF_H - -#include - -class gr_add_const_vff; -typedef boost::shared_ptr gr_add_const_vff_sptr; - -gr_add_const_vff_sptr gr_make_add_const_vff (const std::vector k); - -/*! - * \brief output vector = input vector + constant vector - * \ingroup block - */ -class gr_add_const_vff : public gr_sync_block -{ - friend gr_add_const_vff_sptr gr_make_add_const_vff (const std::vector k); - - std::vector d_k; // the constant - gr_add_const_vff (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vii.h b/gnuradio-core/src/lib/general/gr_add_const_vii.h deleted file mode 100644 index 7f35aa9a..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_vii.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_VII_H -#define INCLUDED_GR_ADD_CONST_VII_H - -#include - -class gr_add_const_vii; -typedef boost::shared_ptr gr_add_const_vii_sptr; - -gr_add_const_vii_sptr gr_make_add_const_vii (const std::vector k); - -/*! - * \brief output vector = input vector + constant vector - * \ingroup block - */ -class gr_add_const_vii : public gr_sync_block -{ - friend gr_add_const_vii_sptr gr_make_add_const_vii (const std::vector k); - - std::vector d_k; // the constant - gr_add_const_vii (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vss.h b/gnuradio-core/src/lib/general/gr_add_const_vss.h deleted file mode 100644 index 1215cd31..00000000 --- a/gnuradio-core/src/lib/general/gr_add_const_vss.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_CONST_VSS_H -#define INCLUDED_GR_ADD_CONST_VSS_H - -#include - -class gr_add_const_vss; -typedef boost::shared_ptr gr_add_const_vss_sptr; - -gr_add_const_vss_sptr gr_make_add_const_vss (const std::vector k); - -/*! - * \brief output vector = input vector + constant vector - * \ingroup block - */ -class gr_add_const_vss : public gr_sync_block -{ - friend gr_add_const_vss_sptr gr_make_add_const_vss (const std::vector k); - - std::vector d_k; // the constant - gr_add_const_vss (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_ff.cc b/gnuradio-core/src/lib/general/gr_add_ff.cc deleted file mode 100644 index 8abfaf2c..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ff.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_ff_sptr -gr_make_add_ff () -{ - return gr_add_ff_sptr (new gr_add_ff ()); -} - -gr_add_ff::gr_add_ff () - : gr_sync_block ("add_ff", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (float))) -{ -} - -int -gr_add_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - float acc = ((float *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc += ((float *) input_items[j])[i]; - - *optr++ = (float) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_ff.h b/gnuradio-core/src/lib/general/gr_add_ff.h deleted file mode 100644 index 1f7fb0f9..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ff.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_FF_H -#define INCLUDED_GR_ADD_FF_H - -#include - -class gr_add_ff; -typedef boost::shared_ptr gr_add_ff_sptr; - -gr_add_ff_sptr gr_make_add_ff (); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input streams. - */ -class gr_add_ff : public gr_sync_block -{ - friend gr_add_ff_sptr gr_make_add_ff (); - - gr_add_ff (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_ff.i b/gnuradio-core/src/lib/general/gr_add_ff.i deleted file mode 100644 index f6f23a0f..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ff.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_ff) - -gr_add_ff_sptr gr_make_add_ff (); - -class gr_add_ff : public gr_sync_block -{ - private: - gr_add_ff (); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_ii.cc b/gnuradio-core/src/lib/general/gr_add_ii.cc deleted file mode 100644 index 05c77e09..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ii.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_ii_sptr -gr_make_add_ii () -{ - return gr_add_ii_sptr (new gr_add_ii ()); -} - -gr_add_ii::gr_add_ii () - : gr_sync_block ("add_ii", - gr_make_io_signature (1, -1, sizeof (int)), - gr_make_io_signature (1, 1, sizeof (int))) -{ -} - -int -gr_add_ii::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - int acc = ((int *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc += ((int *) input_items[j])[i]; - - *optr++ = (int) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_ii.h b/gnuradio-core/src/lib/general/gr_add_ii.h deleted file mode 100644 index 4b80af26..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ii.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_II_H -#define INCLUDED_GR_ADD_II_H - -#include - -class gr_add_ii; -typedef boost::shared_ptr gr_add_ii_sptr; - -gr_add_ii_sptr gr_make_add_ii (); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input streams. - */ -class gr_add_ii : public gr_sync_block -{ - friend gr_add_ii_sptr gr_make_add_ii (); - - gr_add_ii (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_ii.i b/gnuradio-core/src/lib/general/gr_add_ii.i deleted file mode 100644 index 3755537a..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ii.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_ii) - -gr_add_ii_sptr gr_make_add_ii (); - -class gr_add_ii : public gr_sync_block -{ - private: - gr_add_ii (); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_ss.cc b/gnuradio-core/src/lib/general/gr_add_ss.cc deleted file mode 100644 index 465a5773..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ss.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_ss_sptr -gr_make_add_ss () -{ - return gr_add_ss_sptr (new gr_add_ss ()); -} - -gr_add_ss::gr_add_ss () - : gr_sync_block ("add_ss", - gr_make_io_signature (1, -1, sizeof (short)), - gr_make_io_signature (1, 1, sizeof (short))) -{ -} - -int -gr_add_ss::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - short acc = ((short *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc += ((short *) input_items[j])[i]; - - *optr++ = (short) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_ss.h b/gnuradio-core/src/lib/general/gr_add_ss.h deleted file mode 100644 index ce26490e..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ss.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_SS_H -#define INCLUDED_GR_ADD_SS_H - -#include - -class gr_add_ss; -typedef boost::shared_ptr gr_add_ss_sptr; - -gr_add_ss_sptr gr_make_add_ss (); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input streams. - */ -class gr_add_ss : public gr_sync_block -{ - friend gr_add_ss_sptr gr_make_add_ss (); - - gr_add_ss (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_ss.i b/gnuradio-core/src/lib/general/gr_add_ss.i deleted file mode 100644 index e41d6ec7..00000000 --- a/gnuradio-core/src/lib/general/gr_add_ss.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_ss) - -gr_add_ss_sptr gr_make_add_ss (); - -class gr_add_ss : public gr_sync_block -{ - private: - gr_add_ss (); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_vXX.cc.t b/gnuradio-core/src/lib/general/gr_add_vXX.cc.t deleted file mode 100755 index 10b420ff..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vXX.cc.t +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ (size_t nitems_per_block) -{ - return @SPTR_NAME@ (new @NAME@ (nitems_per_block)); -} - -@NAME@::@NAME@ (size_t nitems_per_block) - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*nitems_per_block)) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(@I_TYPE@); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc += ((@I_TYPE@ *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (@O_TYPE@) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_vXX.h.t b/gnuradio-core/src/lib/general/gr_add_vXX.h.t deleted file mode 100755 index e229f968..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vXX.h.t +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t nitems_per_block); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input vectors. - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t nitems_per_block); - - @NAME@ (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_vXX.i.t b/gnuradio-core/src/lib/general/gr_add_vXX.i.t deleted file mode 100755 index 34e97828..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vXX.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) - -@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t nitems_per_block); - -class @NAME@ : public gr_sync_block -{ - private: - @NAME@ (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_vcc.cc b/gnuradio-core/src/lib/general/gr_add_vcc.cc deleted file mode 100644 index ec527f19..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vcc.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_vcc_sptr -gr_make_add_vcc (size_t nitems_per_block) -{ - return gr_add_vcc_sptr (new gr_add_vcc (nitems_per_block)); -} - -gr_add_vcc::gr_add_vcc (size_t nitems_per_block) - : gr_sync_block ("add_vcc", - gr_make_io_signature (1, -1, sizeof (gr_complex)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (gr_complex)*nitems_per_block)) -{ -} - -int -gr_add_vcc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(gr_complex); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - gr_complex acc = ((gr_complex *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc += ((gr_complex *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (gr_complex) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_vcc.h b/gnuradio-core/src/lib/general/gr_add_vcc.h deleted file mode 100644 index a89b3190..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vcc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_VCC_H -#define INCLUDED_GR_ADD_VCC_H - -#include - -class gr_add_vcc; -typedef boost::shared_ptr gr_add_vcc_sptr; - -gr_add_vcc_sptr gr_make_add_vcc (size_t nitems_per_block); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input vectors. - */ -class gr_add_vcc : public gr_sync_block -{ - friend gr_add_vcc_sptr gr_make_add_vcc (size_t nitems_per_block); - - gr_add_vcc (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_vcc.i b/gnuradio-core/src/lib/general/gr_add_vcc.i deleted file mode 100644 index 87ddd1ab..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vcc.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_vcc) - -gr_add_vcc_sptr gr_make_add_vcc (size_t nitems_per_block); - -class gr_add_vcc : public gr_sync_block -{ - private: - gr_add_vcc (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_vff.cc b/gnuradio-core/src/lib/general/gr_add_vff.cc deleted file mode 100644 index 6ac75d4c..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vff.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_vff_sptr -gr_make_add_vff (size_t nitems_per_block) -{ - return gr_add_vff_sptr (new gr_add_vff (nitems_per_block)); -} - -gr_add_vff::gr_add_vff (size_t nitems_per_block) - : gr_sync_block ("add_vff", - gr_make_io_signature (1, -1, sizeof (float)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (float)*nitems_per_block)) -{ -} - -int -gr_add_vff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(float); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - float acc = ((float *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc += ((float *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (float) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_vff.h b/gnuradio-core/src/lib/general/gr_add_vff.h deleted file mode 100644 index 269bba88..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vff.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_VFF_H -#define INCLUDED_GR_ADD_VFF_H - -#include - -class gr_add_vff; -typedef boost::shared_ptr gr_add_vff_sptr; - -gr_add_vff_sptr gr_make_add_vff (size_t nitems_per_block); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input vectors. - */ -class gr_add_vff : public gr_sync_block -{ - friend gr_add_vff_sptr gr_make_add_vff (size_t nitems_per_block); - - gr_add_vff (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_vff.i b/gnuradio-core/src/lib/general/gr_add_vff.i deleted file mode 100644 index f5744b31..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vff.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_vff) - -gr_add_vff_sptr gr_make_add_vff (size_t nitems_per_block); - -class gr_add_vff : public gr_sync_block -{ - private: - gr_add_vff (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_vii.cc b/gnuradio-core/src/lib/general/gr_add_vii.cc deleted file mode 100644 index b6026f03..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vii.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_vii_sptr -gr_make_add_vii (size_t nitems_per_block) -{ - return gr_add_vii_sptr (new gr_add_vii (nitems_per_block)); -} - -gr_add_vii::gr_add_vii (size_t nitems_per_block) - : gr_sync_block ("add_vii", - gr_make_io_signature (1, -1, sizeof (int)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (int)*nitems_per_block)) -{ -} - -int -gr_add_vii::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(int); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - int acc = ((int *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc += ((int *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (int) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_vii.h b/gnuradio-core/src/lib/general/gr_add_vii.h deleted file mode 100644 index 9784ea2b..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vii.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_VII_H -#define INCLUDED_GR_ADD_VII_H - -#include - -class gr_add_vii; -typedef boost::shared_ptr gr_add_vii_sptr; - -gr_add_vii_sptr gr_make_add_vii (size_t nitems_per_block); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input vectors. - */ -class gr_add_vii : public gr_sync_block -{ - friend gr_add_vii_sptr gr_make_add_vii (size_t nitems_per_block); - - gr_add_vii (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_vii.i b/gnuradio-core/src/lib/general/gr_add_vii.i deleted file mode 100644 index adcd1d5f..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vii.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_vii) - -gr_add_vii_sptr gr_make_add_vii (size_t nitems_per_block); - -class gr_add_vii : public gr_sync_block -{ - private: - gr_add_vii (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_add_vss.cc b/gnuradio-core/src/lib/general/gr_add_vss.cc deleted file mode 100644 index 723d16e8..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vss.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_add_vss_sptr -gr_make_add_vss (size_t nitems_per_block) -{ - return gr_add_vss_sptr (new gr_add_vss (nitems_per_block)); -} - -gr_add_vss::gr_add_vss (size_t nitems_per_block) - : gr_sync_block ("add_vss", - gr_make_io_signature (1, -1, sizeof (short)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (short)*nitems_per_block)) -{ -} - -int -gr_add_vss::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(short); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - short acc = ((short *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc += ((short *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (short) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_add_vss.h b/gnuradio-core/src/lib/general/gr_add_vss.h deleted file mode 100644 index 45bcc329..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vss.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_ADD_VSS_H -#define INCLUDED_GR_ADD_VSS_H - -#include - -class gr_add_vss; -typedef boost::shared_ptr gr_add_vss_sptr; - -gr_add_vss_sptr gr_make_add_vss (size_t nitems_per_block); - -/*! - * \brief output = sum (input_0, input_1, ...) - * \ingroup block - * - * Add across all input vectors. - */ -class gr_add_vss : public gr_sync_block -{ - friend gr_add_vss_sptr gr_make_add_vss (size_t nitems_per_block); - - gr_add_vss (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_add_vss.i b/gnuradio-core/src/lib/general/gr_add_vss.i deleted file mode 100644 index 095eb167..00000000 --- a/gnuradio-core/src/lib/general/gr_add_vss.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,add_vss) - -gr_add_vss_sptr gr_make_add_vss (size_t nitems_per_block); - -class gr_add_vss : public gr_sync_block -{ - private: - gr_add_vss (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_agc2_cc.h b/gnuradio-core/src/lib/general/gr_agc2_cc.h index b2fbbfc8..0eb20afb 100644 --- a/gnuradio-core/src/lib/general/gr_agc2_cc.h +++ b/gnuradio-core/src/lib/general/gr_agc2_cc.h @@ -34,6 +34,7 @@ gr_make_agc2_cc (float attack_rate = 1e-1, float decay_rate = 1e-2, float refere float gain = 1.0, float max_gain = 0.0); /*! * \brief high performance Automatic Gain Control class + * \ingroup level_blk * * For Power the absolute value of the complex number is used. */ diff --git a/gnuradio-core/src/lib/general/gr_agc2_ff.h b/gnuradio-core/src/lib/general/gr_agc2_ff.h index 8ce53f34..ef470765 100644 --- a/gnuradio-core/src/lib/general/gr_agc2_ff.h +++ b/gnuradio-core/src/lib/general/gr_agc2_ff.h @@ -34,6 +34,7 @@ gr_make_agc2_ff (float attack_rate = 1e-1, float decay_rate = 1e-2, float refere /*! * \brief high performance Automatic Gain Control class * + * \ingroup level_blk * Power is approximated by absolute value */ diff --git a/gnuradio-core/src/lib/general/gr_agc_cc.h b/gnuradio-core/src/lib/general/gr_agc_cc.h index 55957161..43a5de6c 100644 --- a/gnuradio-core/src/lib/general/gr_agc_cc.h +++ b/gnuradio-core/src/lib/general/gr_agc_cc.h @@ -33,6 +33,7 @@ gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, float max_gain = 0.0); /*! * \brief high performance Automatic Gain Control class + * \ingroup level_blk * * For Power the absolute value of the complex number is used. */ diff --git a/gnuradio-core/src/lib/general/gr_agc_ff.h b/gnuradio-core/src/lib/general/gr_agc_ff.h index 1021d07b..7cb167fc 100644 --- a/gnuradio-core/src/lib/general/gr_agc_ff.h +++ b/gnuradio-core/src/lib/general/gr_agc_ff.h @@ -34,6 +34,7 @@ gr_make_agc_ff (float rate = 1e-4, float reference = 1.0, /*! * \brief high performance Automatic Gain Control class + * \ingroup level_blk * * Power is approximated by absolute value */ diff --git a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc index 4d4d9961..241a33f5 100644 --- a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc +++ b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.cc @@ -28,6 +28,8 @@ #include #include #include +#include +#include //define ALIGN_ADVANCED_IMPLEMENTATION to have an alternative implementation of the align algoritm which exactly follows the align_interval spec. //It is more resource intensive, less tested and probably not needed @@ -330,7 +332,7 @@ gr_align_on_samplenumbers_ss::general_work (int noutput_items, x_high16bits = uin[d_nchan*2]; x_low16bits = uin[d_nchan*2+1]; unsigned int ucounter_begin2 = x_high16bits<<16 | x_low16bits; - if((d_state[i].ucounter_begin+1)!=(ucounter_begin2)) + if((d_state[i].ucounter_begin+1)!=(ucounter_begin2)){ if(ucounter_begin2==0) { #ifdef DEBUG_TOCONSUME @@ -341,6 +343,7 @@ gr_align_on_samplenumbers_ss::general_work (int noutput_items, { ePrintf("Error: counter not continuous.\n ucounter_begin[%i]=%i +1 != ucounter_begin2=%i\n",i,d_state[i].ucounter_begin,ucounter_begin2); } + } //diff_comp[i]=ucounter[i]-ucounter[0]; //diff_min=std::min(diff[i],diff_min); diff --git a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h index 45965e4f..5038e168 100644 --- a/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h +++ b/gnuradio-core/src/lib/general/gr_align_on_samplenumbers_ss.h @@ -25,13 +25,9 @@ #include -class gr_align_on_samplenumbers_ss; -typedef boost::shared_ptr gr_align_on_samplenumbers_ss_sptr; - -gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan=2, int align_interval=128); - /*! * \brief align several complex short (interleaved short) input channels with corresponding unsigned 32 bit sample_counters (provided as interleaved 16 bit values) + * \ingroup misc * \param number of complex_short input channels (including the 32 bit counting channel) * \param align_interval is after how much samples (minimally) the sample-alignement is refreshed. Default is 128. * A bigger value means less processing power but also requests more buffer space, which has a maximum. @@ -46,6 +42,12 @@ gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan=2 * This means that the first complex_short channel on every input is an interleaved 32 bit counter. * The samples are aligned by dropping samples untill the samplenumbers match. */ +class gr_align_on_samplenumbers_ss; +typedef boost::shared_ptr gr_align_on_samplenumbers_ss_sptr; + +gr_align_on_samplenumbers_ss_sptr gr_make_align_on_samplenumbers_ss (int nchan=2, int align_interval=128); + + class gr_align_on_samplenumbers_ss : public gr_block diff --git a/gnuradio-core/src/lib/general/gr_bin_statistics_f.cc b/gnuradio-core/src/lib/general/gr_bin_statistics_f.cc new file mode 100644 index 00000000..61abd72b --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_bin_statistics_f.cc @@ -0,0 +1,174 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_bin_statistics_f_sptr +gr_make_bin_statistics_f(unsigned int vlen, + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, + size_t tune_delay, + size_t dwell_delay) +{ + return gr_bin_statistics_f_sptr(new gr_bin_statistics_f(vlen, + msgq, + tune, + tune_delay, + dwell_delay)); +} + +gr_bin_statistics_f::gr_bin_statistics_f(unsigned int vlen, + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, + size_t tune_delay, + size_t dwell_delay) + : gr_sync_block("bin_statistics_f", + gr_make_io_signature(1, 1, sizeof(float) * vlen), + gr_make_io_signature(0, 0, 0)), + d_vlen(vlen), d_msgq(msgq), d_tune(tune), + d_tune_delay(tune_delay), d_dwell_delay(dwell_delay), + d_center_freq(0), d_delay(0), + d_max(vlen) +{ + enter_init(); +} + +gr_bin_statistics_f::~gr_bin_statistics_f() +{ + // NOP +} + +void +gr_bin_statistics_f::enter_init() +{ + d_state = ST_INIT; + d_delay = 0; +} + +void +gr_bin_statistics_f::enter_tune_delay() +{ + d_state = ST_TUNE_DELAY; + d_delay = d_tune_delay; + d_center_freq = d_tune->calleval(0); +} + +void +gr_bin_statistics_f::enter_dwell_delay() +{ + d_state = ST_DWELL_DELAY; + d_delay = d_dwell_delay; + reset_stats(); +} + +void +gr_bin_statistics_f::leave_dwell_delay() +{ + send_stats(); +} + +int +gr_bin_statistics_f::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *input = (const float *) input_items[0]; + size_t vlen = d_max.size(); + + int n = 0; + int t; + + while (n < noutput_items){ + switch (d_state){ + + case ST_INIT: + enter_tune_delay(); + break; + + case ST_TUNE_DELAY: + t = std::min(noutput_items - n, int(d_delay)); + n += t; + d_delay -= t; + assert(d_delay >= 0); + if (d_delay == 0) + enter_dwell_delay(); + break; + + case ST_DWELL_DELAY: + t = std::min(noutput_items - n, int(d_delay)); + for (int i = 0; i < t; i++){ + accrue_stats(&input[n * vlen]); + n++; + } + d_delay -= t; + assert(d_delay >= 0); + if (d_delay == 0){ + leave_dwell_delay(); + enter_tune_delay(); + } + break; + + default: + assert(0); + } + } + + return noutput_items; +} + +////////////////////////////////////////////////////////////////////////// +// virtual methods for gathering stats +////////////////////////////////////////////////////////////////////////// + +void +gr_bin_statistics_f::reset_stats() +{ + for (size_t i = 0; i < vlen(); i++){ + d_max[i] = 0; + } +} + +void +gr_bin_statistics_f::accrue_stats(const float *input) +{ + for (size_t i = 0; i < vlen(); i++){ + d_max[i] = std::max(d_max[i], input[i]); // compute per bin maxima + } +} + +void +gr_bin_statistics_f::send_stats() +{ + if (msgq()->full_p()) // if the queue is full, don't block, drop the data... + return; + + // build & send a message + gr_message_sptr msg = gr_make_message(0, center_freq(), vlen(), vlen() * sizeof(float)); + memcpy(msg->msg(), &d_max[0], vlen() * sizeof(float)); + msgq()->insert_tail(msg); +} diff --git a/gnuradio-core/src/lib/general/gr_bin_statistics_f.h b/gnuradio-core/src/lib/general/gr_bin_statistics_f.h new file mode 100644 index 00000000..d8c4c2fa --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_bin_statistics_f.h @@ -0,0 +1,99 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_GR_BIN_STATISTICS_F_H +#define INCLUDED_GR_BIN_STATISTICS_F_H + + +#include +#include +#include +#include + +class gr_bin_statistics_f; +typedef boost::shared_ptr gr_bin_statistics_f_sptr; + + +gr_bin_statistics_f_sptr +gr_make_bin_statistics_f(unsigned int vlen, // vector length + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, // callback + size_t tune_delay, // samples + size_t dwell_delay); // samples + +/*! + * \brief control scanning and record frequency domain statistics + * \ingroup sink_blk + */ +class gr_bin_statistics_f : public gr_sync_block +{ + friend gr_bin_statistics_f_sptr + gr_make_bin_statistics_f(unsigned int vlen, // vector length + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, // callback + size_t tune_delay, // samples + size_t dwell_delay); // samples + + enum state_t { ST_INIT, ST_TUNE_DELAY, ST_DWELL_DELAY }; + + size_t d_vlen; + gr_msg_queue_sptr d_msgq; + gr_feval_dd *d_tune; + size_t d_tune_delay; + size_t d_dwell_delay; + double d_center_freq; + + state_t d_state; + size_t d_delay; // nsamples remaining to state transition + + gr_bin_statistics_f(unsigned int vlen, + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, + size_t tune_delay, + size_t dwell_delay); + + void enter_init(); + void enter_tune_delay(); + void enter_dwell_delay(); + void leave_dwell_delay(); + +protected: + std::vector d_max; // per bin maxima + + size_t vlen() const { return d_vlen; } + double center_freq() const { return d_center_freq; } + gr_msg_queue_sptr msgq() const { return d_msgq; } + + virtual void reset_stats(); + virtual void accrue_stats(const float *input); + virtual void send_stats(); + +public: + ~gr_bin_statistics_f(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_bin_statistics_f.i b/gnuradio-core/src/lib/general/gr_bin_statistics_f.i new file mode 100644 index 00000000..5cec882f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_bin_statistics_f.i @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,bin_statistics_f); + +gr_bin_statistics_f_sptr +gr_make_bin_statistics_f(unsigned int vlen, // vector length + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, // callback + size_t tune_delay, // samples + size_t dwell_delay); // samples + + +class gr_bin_statistics_f : public gr_sync_block +{ +private: + gr_bin_statistics_f(unsigned int vlen, + gr_msg_queue_sptr msgq, + gr_feval_dd *tune, + size_t tune_delay, + size_t dwell_delay); +public: + ~gr_bin_statistics_f(); +}; diff --git a/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h b/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h index 9876f0c5..2aa4a082 100644 --- a/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h +++ b/gnuradio-core/src/lib/general/gr_binary_slicer_fb.h @@ -32,7 +32,7 @@ gr_binary_slicer_fb_sptr gr_make_binary_slicer_fb (); /*! * \brief slice float binary symbol outputting 1 bit output - * \ingroup block + * \ingroup converter_blk * * x < 0 --> 0 * x >= 0 --> 1 diff --git a/gnuradio-core/src/lib/general/gr_bytes_to_syms.h b/gnuradio-core/src/lib/general/gr_bytes_to_syms.h index a9abaa1e..1531de02 100644 --- a/gnuradio-core/src/lib/general/gr_bytes_to_syms.h +++ b/gnuradio-core/src/lib/general/gr_bytes_to_syms.h @@ -31,7 +31,7 @@ gr_bytes_to_syms_sptr gr_make_bytes_to_syms (); /*! * \brief Convert stream of bytes to stream of +/- 1 symbols - * \ingroup block + * \ingroup converter_blk * * input: stream of bytes; output: stream of float * diff --git a/gnuradio-core/src/lib/general/gr_char_to_float.h b/gnuradio-core/src/lib/general/gr_char_to_float.h index b9644172..482e479d 100644 --- a/gnuradio-core/src/lib/general/gr_char_to_float.h +++ b/gnuradio-core/src/lib/general/gr_char_to_float.h @@ -33,7 +33,7 @@ gr_make_char_to_float (); /*! * \brief Convert stream of chars to a stream of float - * \ingroup converter + * \ingroup converter_blk */ class gr_char_to_float : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_check_counting_s.h b/gnuradio-core/src/lib/general/gr_check_counting_s.h index 2795dfa3..da35ab8e 100644 --- a/gnuradio-core/src/lib/general/gr_check_counting_s.h +++ b/gnuradio-core/src/lib/general/gr_check_counting_s.h @@ -32,7 +32,7 @@ gr_check_counting_s_sptr gr_make_check_counting_s (bool do_32bit=false); /*! * \brief sink that checks if its input stream consists of a counting sequence. * \param do_32bit expect an interleaved 32 bit counter in stead of 16 bit counter (default false) - * \ingroup sink + * \ingroup sink_blk * * This sink is typically used to test the USRP "Counting Mode" or "Counting mode 32 bit". */ diff --git a/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h b/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h index dfc14efc..e2bff46d 100644 --- a/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h +++ b/gnuradio-core/src/lib/general/gr_check_lfsr_32k_s.h @@ -33,7 +33,7 @@ gr_check_lfsr_32k_s_sptr gr_make_check_lfsr_32k_s (); /*! * \brief sink that checks if its input stream consists of a lfsr_32k sequence. - * \ingroup sink + * \ingroup sink_blk * * This sink is typically used along with gr_lfsr_32k_source_s to test * the USRP using its digital loopback mode. diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t deleted file mode 100644 index e6bd6cae..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include -#include -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D) -{ - return @SPTR_NAME@ (new @NAME@ (symbol_table,D)); -} - -@NAME@::@NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D) - : gr_sync_interpolator ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, -1, sizeof (@O_TYPE@)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of @I_TYPE@; output: stream of @O_TYPE@ - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class @NAME@ : public gr_sync_interpolator -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D); - - int d_D; - std::vector<@O_TYPE@> d_symbol_table; - @NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector<@O_TYPE@> symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.cc b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.cc deleted file mode 100644 index 72c57c81..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_chunks_to_symbols_bc_sptr -gr_make_chunks_to_symbols_bc (const std::vector &symbol_table, const int D) -{ - return gr_chunks_to_symbols_bc_sptr (new gr_chunks_to_symbols_bc (symbol_table,D)); -} - -gr_chunks_to_symbols_bc::gr_chunks_to_symbols_bc (const std::vector &symbol_table, const int D) - : gr_sync_interpolator ("chunks_to_symbols_bc", - gr_make_io_signature (1, -1, sizeof (unsigned char)), - gr_make_io_signature (1, -1, sizeof (gr_complex)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -gr_chunks_to_symbols_bc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class gr_chunks_to_symbols_bc; -typedef boost::shared_ptr gr_chunks_to_symbols_bc_sptr; - -gr_chunks_to_symbols_bc_sptr gr_make_chunks_to_symbols_bc (const std::vector &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of unsigned char; output: stream of gr_complex - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_chunks_to_symbols_bc : public gr_sync_interpolator -{ - friend gr_chunks_to_symbols_bc_sptr gr_make_chunks_to_symbols_bc (const std::vector &symbol_table, const int D); - - int d_D; - std::vector d_symbol_table; - gr_chunks_to_symbols_bc (const std::vector &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.cc b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.cc deleted file mode 100644 index ca277daa..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_chunks_to_symbols_bf_sptr -gr_make_chunks_to_symbols_bf (const std::vector &symbol_table, const int D) -{ - return gr_chunks_to_symbols_bf_sptr (new gr_chunks_to_symbols_bf (symbol_table,D)); -} - -gr_chunks_to_symbols_bf::gr_chunks_to_symbols_bf (const std::vector &symbol_table, const int D) - : gr_sync_interpolator ("chunks_to_symbols_bf", - gr_make_io_signature (1, -1, sizeof (unsigned char)), - gr_make_io_signature (1, -1, sizeof (float)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -gr_chunks_to_symbols_bf::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class gr_chunks_to_symbols_bf; -typedef boost::shared_ptr gr_chunks_to_symbols_bf_sptr; - -gr_chunks_to_symbols_bf_sptr gr_make_chunks_to_symbols_bf (const std::vector &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of unsigned char; output: stream of float - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_chunks_to_symbols_bf : public gr_sync_interpolator -{ - friend gr_chunks_to_symbols_bf_sptr gr_make_chunks_to_symbols_bf (const std::vector &symbol_table, const int D); - - int d_D; - std::vector d_symbol_table; - gr_chunks_to_symbols_bf (const std::vector &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.cc b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.cc deleted file mode 100644 index 99d18fb5..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_chunks_to_symbols_ic_sptr -gr_make_chunks_to_symbols_ic (const std::vector &symbol_table, const int D) -{ - return gr_chunks_to_symbols_ic_sptr (new gr_chunks_to_symbols_ic (symbol_table,D)); -} - -gr_chunks_to_symbols_ic::gr_chunks_to_symbols_ic (const std::vector &symbol_table, const int D) - : gr_sync_interpolator ("chunks_to_symbols_ic", - gr_make_io_signature (1, -1, sizeof (int)), - gr_make_io_signature (1, -1, sizeof (gr_complex)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -gr_chunks_to_symbols_ic::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class gr_chunks_to_symbols_ic; -typedef boost::shared_ptr gr_chunks_to_symbols_ic_sptr; - -gr_chunks_to_symbols_ic_sptr gr_make_chunks_to_symbols_ic (const std::vector &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of int; output: stream of gr_complex - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_chunks_to_symbols_ic : public gr_sync_interpolator -{ - friend gr_chunks_to_symbols_ic_sptr gr_make_chunks_to_symbols_ic (const std::vector &symbol_table, const int D); - - int d_D; - std::vector d_symbol_table; - gr_chunks_to_symbols_ic (const std::vector &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.cc b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.cc deleted file mode 100644 index 0dcce671..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_chunks_to_symbols_if_sptr -gr_make_chunks_to_symbols_if (const std::vector &symbol_table, const int D) -{ - return gr_chunks_to_symbols_if_sptr (new gr_chunks_to_symbols_if (symbol_table,D)); -} - -gr_chunks_to_symbols_if::gr_chunks_to_symbols_if (const std::vector &symbol_table, const int D) - : gr_sync_interpolator ("chunks_to_symbols_if", - gr_make_io_signature (1, -1, sizeof (int)), - gr_make_io_signature (1, -1, sizeof (float)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -gr_chunks_to_symbols_if::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class gr_chunks_to_symbols_if; -typedef boost::shared_ptr gr_chunks_to_symbols_if_sptr; - -gr_chunks_to_symbols_if_sptr gr_make_chunks_to_symbols_if (const std::vector &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of int; output: stream of float - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_chunks_to_symbols_if : public gr_sync_interpolator -{ - friend gr_chunks_to_symbols_if_sptr gr_make_chunks_to_symbols_if (const std::vector &symbol_table, const int D); - - int d_D; - std::vector d_symbol_table; - gr_chunks_to_symbols_if (const std::vector &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.cc b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.cc deleted file mode 100644 index 1bf33375..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_chunks_to_symbols_sc_sptr -gr_make_chunks_to_symbols_sc (const std::vector &symbol_table, const int D) -{ - return gr_chunks_to_symbols_sc_sptr (new gr_chunks_to_symbols_sc (symbol_table,D)); -} - -gr_chunks_to_symbols_sc::gr_chunks_to_symbols_sc (const std::vector &symbol_table, const int D) - : gr_sync_interpolator ("chunks_to_symbols_sc", - gr_make_io_signature (1, -1, sizeof (short)), - gr_make_io_signature (1, -1, sizeof (gr_complex)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -gr_chunks_to_symbols_sc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class gr_chunks_to_symbols_sc; -typedef boost::shared_ptr gr_chunks_to_symbols_sc_sptr; - -gr_chunks_to_symbols_sc_sptr gr_make_chunks_to_symbols_sc (const std::vector &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of short; output: stream of gr_complex - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_chunks_to_symbols_sc : public gr_sync_interpolator -{ - friend gr_chunks_to_symbols_sc_sptr gr_make_chunks_to_symbols_sc (const std::vector &symbol_table, const int D); - - int d_D; - std::vector d_symbol_table; - gr_chunks_to_symbols_sc (const std::vector &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.cc b/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.cc deleted file mode 100644 index d5e7240a..00000000 --- a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.cc +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -gr_chunks_to_symbols_sf_sptr -gr_make_chunks_to_symbols_sf (const std::vector &symbol_table, const int D) -{ - return gr_chunks_to_symbols_sf_sptr (new gr_chunks_to_symbols_sf (symbol_table,D)); -} - -gr_chunks_to_symbols_sf::gr_chunks_to_symbols_sf (const std::vector &symbol_table, const int D) - : gr_sync_interpolator ("chunks_to_symbols_sf", - gr_make_io_signature (1, -1, sizeof (short)), - gr_make_io_signature (1, -1, sizeof (float)), - D), - d_D (D), - d_symbol_table (symbol_table) -{ -} - -int -gr_chunks_to_symbols_sf::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (noutput_items % d_D == 0); - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - - for (int m=0;m - -class gr_chunks_to_symbols_sf; -typedef boost::shared_ptr gr_chunks_to_symbols_sf_sptr; - -gr_chunks_to_symbols_sf_sptr gr_make_chunks_to_symbols_sf (const std::vector &symbol_table, const int D = 1); - -/*! - * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) - * \ingroup block - * - * input: stream of short; output: stream of float - * - * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_XY handles the general case of mapping - * from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_chunks_to_symbols_sf : public gr_sync_interpolator -{ - friend gr_chunks_to_symbols_sf_sptr gr_make_chunks_to_symbols_sf (const std::vector &symbol_table, const int D); - - int d_D; - std::vector d_symbol_table; - gr_chunks_to_symbols_sf (const std::vector &symbol_table, const int D = 1); - - public: - int D () const { return d_D; } - std::vector symbol_table () const { return d_symbol_table; } - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_circular_file.cc b/gnuradio-core/src/lib/general/gr_circular_file.cc index 6f605419..468b49a1 100644 --- a/gnuradio-core/src/lib/general/gr_circular_file.cc +++ b/gnuradio-core/src/lib/general/gr_circular_file.cc @@ -39,6 +39,8 @@ #include #include +#include +#include static const int HEADER_SIZE = 4096; static const int HEADER_MAGIC = 0xEB021026; diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc index aee89039..60e3dd13 100644 --- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc +++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.cc @@ -29,6 +29,8 @@ #include #include #include +#include + // Public constructor @@ -133,47 +135,73 @@ gr_clock_recovery_mm_cc::general_work (int noutput_items, float mm_val=0; gr_complex u, x, y; - while(oo < noutput_items && ii < ni) { - d_p_2T = d_p_1T; - d_p_1T = d_p_0T; - d_p_0T = d_interp->interpolate (&in[ii], d_mu); - - d_c_2T = d_c_1T; - d_c_1T = d_c_0T; - d_c_0T = slicer_0deg(d_p_0T); - - x = (d_c_0T - d_c_2T) * conj(d_p_1T); - y = (d_p_0T - d_p_2T) * conj(d_c_1T); - u = y - x; - mm_val = u.real(); - out[oo++] = d_p_0T; - - // limit mm_val - if (mm_val > 1.0) - mm_val = 1.0; - else if (mm_val < -1.0) - mm_val = -1.0; - - d_omega = d_omega + d_gain_omega * mm_val; - if (d_omega > d_max_omega) - d_omega = d_max_omega; - else if (d_omega < d_min_omega) - d_omega = d_min_omega; - - d_mu = d_mu + d_omega + d_gain_mu * mm_val; - ii += (int)floor(d_mu); - d_mu -= floor(d_mu); - - if(d_verbose) { - printf("%f\t%f\n", d_omega, d_mu); - } - - // write the error signal to the second output - if (write_foptr) + // This loop writes the error to the second output, if it exists + if (write_foptr) { + while(oo < noutput_items && ii < ni) { + d_p_2T = d_p_1T; + d_p_1T = d_p_0T; + d_p_0T = d_interp->interpolate (&in[ii], d_mu); + + d_c_2T = d_c_1T; + d_c_1T = d_c_0T; + d_c_0T = slicer_0deg(d_p_0T); + + x = (d_c_0T - d_c_2T) * conj(d_p_1T); + y = (d_p_0T - d_p_2T) * conj(d_c_1T); + u = y - x; + mm_val = u.real(); + out[oo++] = d_p_0T; + + // limit mm_val + mm_val = gr_branchless_clip(mm_val,1.0); + d_omega = d_omega + d_gain_omega * mm_val; + d_omega = d_omega_mid + gr_branchless_clip(d_omega-d_omega_mid, d_omega_relative_limit); // make sure we don't walk away + + d_mu = d_mu + d_omega + d_gain_mu * mm_val; + ii += (int)floor(d_mu); + d_mu -= floor(d_mu); + + // write the error signal to the second output foptr[oo-1] = gr_complex(d_mu,0); - - if (ii < 0) // clamp it. This should only happen with bogus input - ii = 0; + + if (ii < 0) // clamp it. This should only happen with bogus input + ii = 0; + } + } + // This loop does not write to the second output (ugly, but faster) + else { + while(oo < noutput_items && ii < ni) { + d_p_2T = d_p_1T; + d_p_1T = d_p_0T; + d_p_0T = d_interp->interpolate (&in[ii], d_mu); + + d_c_2T = d_c_1T; + d_c_1T = d_c_0T; + d_c_0T = slicer_0deg(d_p_0T); + + x = (d_c_0T - d_c_2T) * conj(d_p_1T); + y = (d_p_0T - d_p_2T) * conj(d_c_1T); + u = y - x; + mm_val = u.real(); + out[oo++] = d_p_0T; + + // limit mm_val + mm_val = gr_branchless_clip(mm_val,1.0); + + d_omega = d_omega + d_gain_omega * mm_val; + d_omega = d_omega_mid + gr_branchless_clip(d_omega-d_omega_mid, d_omega_relative_limit); // make sure we don't walk away + + d_mu = d_mu + d_omega + d_gain_mu * mm_val; + ii += (int)floor(d_mu); + d_mu -= floor(d_mu); + + if(d_verbose) { + printf("%f\t%f\n", d_omega, d_mu); + } + + if (ii < 0) // clamp it. This should only happen with bogus input + ii = 0; + } } if (ii > 0){ diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h index cacd2319..04227a14 100644 --- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h +++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_cc.h @@ -25,6 +25,7 @@ #include #include +#include class gri_mmse_fir_interpolator_cc; @@ -38,13 +39,14 @@ gr_make_clock_recovery_mm_cc (float omega, float gain_omega, float mu, float gai /*! * \brief Mueller and Müller (M&M) based clock recovery block with complex input, complex output. - * \ingroup block + * \ingroup sync_blk * * This implements the Mueller and Müller (M&M) discrete-time error-tracking synchronizer. - * - * See "Digital Communication Receivers: Synchronization, Channel - * Estimation and Signal Processing" by Heinrich Meyr, Marc Moeneclaey, & Stefan Fechtel. - * ISBN 0-471-50275-8. + * The complex version here is based on: + * Modified Mueller and Muller clock recovery circuit + * Based: + * G. R. Danesfahani, T.G. Jeans, "Optimisation of modified Mueller and Muller + * algorithm," Electronics Letters, Vol. 31, no. 13, 22 June 1995, pp. 1032 - 1033. */ class gr_clock_recovery_mm_cc : public gr_block { @@ -68,6 +70,7 @@ class gr_clock_recovery_mm_cc : public gr_block d_omega = omega; d_min_omega = omega*(1.0 - d_omega_relative_limit); d_max_omega = omega*(1.0 + d_omega_relative_limit); + d_omega_mid = 0.5*(d_min_omega+d_max_omega); } protected: @@ -81,6 +84,7 @@ protected: float d_min_omega; // minimum allowed omega float d_max_omega; // maximum allowed omeg float d_omega_relative_limit; // used to compute min and max omega + float d_omega_mid; float d_gain_mu; gr_complex d_last_sample; gri_mmse_fir_interpolator_cc *d_interp; diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc index d27ab9d6..2e9eea8e 100644 --- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc +++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.cc @@ -108,9 +108,10 @@ gr_clock_recovery_mm_ff::general_work (int noutput_items, int ii = 0; // input index int oo = 0; // output index + int ni = ninput_items[0] - d_interp->ntaps(); // don't use more input than this float mm_val; - while (oo < noutput_items){ + while (oo < noutput_items && ii < ni ){ // produce output sample out[oo] = d_interp->interpolate (&in[ii], d_mu); @@ -118,11 +119,7 @@ gr_clock_recovery_mm_ff::general_work (int noutput_items, d_last_sample = out[oo]; d_omega = d_omega + d_gain_omega * mm_val; - if (d_omega > d_max_omega) - d_omega = d_max_omega; - else if (d_omega < d_min_omega) - d_omega = d_min_omega; - + d_omega = d_omega_mid + gr_branchless_clip(d_omega-d_omega_mid, d_omega_relative_limit); // make sure we don't walk away d_mu = d_mu + d_omega + d_gain_mu * mm_val; ii += (int) floor(d_mu); @@ -136,5 +133,5 @@ gr_clock_recovery_mm_ff::general_work (int noutput_items, consume_each (ii); - return noutput_items; + return oo; } diff --git a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h index 87823c44..d2ec6d3e 100644 --- a/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h +++ b/gnuradio-core/src/lib/general/gr_clock_recovery_mm_ff.h @@ -24,6 +24,7 @@ #define INCLUDED_GR_CLOCK_RECOVERY_MM_FF_H #include +#include #include class gri_mmse_fir_interpolator; @@ -38,7 +39,7 @@ gr_make_clock_recovery_mm_ff (float omega, float gain_omega, float mu, float gai /*! * \brief Mueller and Müller (M&M) based clock recovery block with float input, float output. - * \ingroup block + * \ingroup sync_blk * * This implements the Mueller and Müller (M&M) discrete-time error-tracking synchronizer. * @@ -67,6 +68,7 @@ class gr_clock_recovery_mm_ff : public gr_block d_omega = omega; d_min_omega = omega*(1.0 - d_omega_relative_limit); d_max_omega = omega*(1.0 + d_omega_relative_limit); + d_omega_mid = 0.5*(d_min_omega+d_max_omega); } protected: @@ -76,7 +78,8 @@ protected: private: float d_mu; // fractional sample position [0.0, 1.0] float d_omega; // nominal frequency - float d_min_omega; // minimum allowed omega + float d_min_omega; // minimum allowed omega + float d_omega_mid; // average omega float d_max_omega; // maximum allowed omega float d_gain_omega; // gain for adjusting omega float d_gain_mu; // gain for adjusting mu diff --git a/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h b/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h index de3292cc..0a91eddd 100644 --- a/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h +++ b/gnuradio-core/src/lib/general/gr_complex_to_interleaved_short.h @@ -34,7 +34,7 @@ gr_make_complex_to_interleaved_short (); /*! * \brief Convert stream of complex to a stream of interleaved shorts - * \ingroup converter + * \ingroup converter_blk */ class gr_complex_to_interleaved_short : public gr_sync_interpolator diff --git a/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc b/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc index d519b3a7..abffa4da 100644 --- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc +++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -26,6 +26,7 @@ #include #include +#include // ---------------------------------------------------------------- @@ -50,7 +51,7 @@ gr_complex_to_float::work (int noutput_items, { const gr_complex *in = (const gr_complex *) input_items[0]; float *out0 = (float *) output_items[0]; - float *out1 = (float *) output_items[1]; + float* out1; int noi = noutput_items * d_vlen; switch (output_items.size ()){ @@ -61,6 +62,7 @@ gr_complex_to_float::work (int noutput_items, break; case 2: + out1 = (float *) output_items[1]; for (int i = 0; i < noi; i++){ out0[i] = in[i].real (); out1[i] = in[i].imag (); @@ -226,7 +228,8 @@ gr_complex_to_arg::work (int noutput_items, int noi = noutput_items * d_vlen; for (int i = 0; i < noi; i++){ - out[i] = std::arg (in[i]); + // out[i] = std::arg (in[i]); + out[i] = gr_fast_atan2f(in[i]); } return noutput_items; } diff --git a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h index b6d3aa02..1851c67d 100644 --- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h +++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h @@ -49,7 +49,7 @@ gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen=1); /*! * \brief convert a stream of gr_complex to 1 or 2 streams of float - * \ingroup converter + * \ingroup converter_blk * \param vlen vector len (default 1) */ class gr_complex_to_float : public gr_sync_block @@ -67,7 +67,7 @@ class gr_complex_to_float : public gr_sync_block /*! * \brief complex in, real out (float) - * \ingroup converter + * \ingroup converter_blk * \param vlen vector len (default 1) */ class gr_complex_to_real : public gr_sync_block @@ -85,7 +85,7 @@ class gr_complex_to_real : public gr_sync_block /*! * \brief complex in, imaginary out (float) - * \ingroup converter + * \ingroup converter_blk * \param vlen vector len (default 1) */ class gr_complex_to_imag : public gr_sync_block @@ -103,7 +103,7 @@ class gr_complex_to_imag : public gr_sync_block /*! * \brief complex in, magnitude out (float) - * \ingroup converter + * \ingroup converter_blk * \param vlen vector len (default 1) */ class gr_complex_to_mag : public gr_sync_block @@ -121,7 +121,7 @@ class gr_complex_to_mag : public gr_sync_block /*! * \brief complex in, magnitude squared out (float) - * \ingroup converter + * \ingroup converter_blk * \param vlen vector len (default 1) */ class gr_complex_to_mag_squared : public gr_sync_block @@ -139,7 +139,7 @@ class gr_complex_to_mag_squared : public gr_sync_block /*! * \brief complex in, angle out (float) - * \ingroup converter + * \ingroup converter_blk * \param vlen vector len (default 1) */ class gr_complex_to_arg : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_conjugate_cc.cc b/gnuradio-core/src/lib/general/gr_conjugate_cc.cc index 234c6160..f25ce1a5 100644 --- a/gnuradio-core/src/lib/general/gr_conjugate_cc.cc +++ b/gnuradio-core/src/lib/general/gr_conjugate_cc.cc @@ -53,19 +53,24 @@ gr_conjugate_cc::work (int noutput_items, int size = noutput_items; while (size >= 8){ - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; + optr[0] = conj(iptr[0]); + optr[1] = conj(iptr[1]); + optr[2] = conj(iptr[2]); + optr[3] = conj(iptr[3]); + optr[4] = conj(iptr[4]); + optr[5] = conj(iptr[5]); + optr[6] = conj(iptr[6]); + optr[7] = conj(iptr[7]); size -= 8; + optr += 8; + iptr += 8; + } + + while (size-- > 0) { + *optr = conj(*iptr); + iptr++; + optr++; } - while (size-- > 0) - *optr++ = gr_complex(real(*iptr),-imag(*iptr));iptr++; - return noutput_items; } diff --git a/gnuradio-core/src/lib/general/gr_conjugate_cc.h b/gnuradio-core/src/lib/general/gr_conjugate_cc.h index 6228d878..783019ad 100644 --- a/gnuradio-core/src/lib/general/gr_conjugate_cc.h +++ b/gnuradio-core/src/lib/general/gr_conjugate_cc.h @@ -34,7 +34,7 @@ gr_conjugate_cc_sptr gr_make_conjugate_cc (); /*! * \brief output = complex conjugate of input - * \ingroup block + * \ingroup math_blk */ class gr_conjugate_cc : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.cc b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.cc index e94cc697..5b87f143 100644 --- a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.cc +++ b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.cc @@ -28,6 +28,7 @@ #include #include +#include #include using std::cout; using std::endl; diff --git a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h index a2b0d234..fd7079c1 100644 --- a/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h +++ b/gnuradio-core/src/lib/general/gr_constellation_decoder_cb.h @@ -33,7 +33,11 @@ gr_constellation_decoder_cb_sptr gr_make_constellation_decoder_cb (const std::vector &sym_position, const std::vector &sym_value_out); - +/*! + * \brief Constellation Decoder + * \ingroup coding_blk + * + */ class gr_constellation_decoder_cb : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.cc b/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.cc index a7d675cd..43dae6c1 100644 --- a/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.cc +++ b/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.cc @@ -28,6 +28,8 @@ #include #include #include +#include + #define VERBOSE 0 @@ -88,7 +90,7 @@ gr_correlate_access_code_bb::work (int noutput_items, { const unsigned char *in = (const unsigned char *) input_items[0]; unsigned char *out = (unsigned char *) output_items[0]; - + for (int i = 0; i < noutput_items; i++){ // compute output value @@ -109,9 +111,12 @@ gr_correlate_access_code_bb::work (int noutput_items, // test for access code with up to threshold errors new_flag = (nwrong <= d_threshold); -#if 0 +#if VERBOSE if(new_flag) { - printf("%llx ==> %llx : d_flip=%u\n", d_access_code, d_data_reg, d_flip); + fprintf(stderr, "access code found: %llx\n", d_access_code); + } + else { + fprintf(stderr, "%llx ==> %llx\n", d_access_code, d_data_reg); } #endif diff --git a/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h b/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h index 960bda14..581713c1 100644 --- a/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h +++ b/gnuradio-core/src/lib/general/gr_correlate_access_code_bb.h @@ -38,7 +38,7 @@ gr_make_correlate_access_code_bb (const std::string &access_code, int threshold) /*! * \brief Examine input for specified access code, one bit at a time. - * \ingroup block + * \ingroup sync_blk * * input: stream of bits, 1 bit per input byte (data in LSB) * output: stream of bits, 2 bits per output byte (data in LSB, flag in next higher bit) diff --git a/gnuradio-core/src/lib/general/gr_costas_loop_cc.cc b/gnuradio-core/src/lib/general/gr_costas_loop_cc.cc index a119bd6e..4e0f7e06 100644 --- a/gnuradio-core/src/lib/general/gr_costas_loop_cc.cc +++ b/gnuradio-core/src/lib/general/gr_costas_loop_cc.cc @@ -85,6 +85,18 @@ gr_costas_loop_cc::phase_detector_2(gr_complex sample) const return (sample.real()*sample.imag()); } +void +gr_costas_loop_cc::set_alpha(float alpha) +{ + d_alpha = alpha; +} + +void +gr_costas_loop_cc::set_beta(float beta) +{ + d_beta = beta; +} + int gr_costas_loop_cc::work (int noutput_items, gr_vector_const_void_star &input_items, @@ -98,33 +110,58 @@ gr_costas_loop_cc::work (int noutput_items, float error; gr_complex nco_out; - - for (int i = 0; i < noutput_items; i++){ - nco_out = gr_expj(-d_phase); - optr[i] = iptr[i] * nco_out; - - error = (*this.*d_phase_detector)(optr[i]); - if (error > 1) - error = 1; - else if (error < -1) - error = -1; - - d_freq = d_freq + d_beta * error; - d_phase = d_phase + d_freq + d_alpha * error; - - while(d_phase>M_TWOPI) - d_phase -= M_TWOPI; - while(d_phase<-M_TWOPI) - d_phase += M_TWOPI; - - if (d_freq > d_max_freq) - d_freq = d_max_freq; - else if (d_freq < d_min_freq) - d_freq = d_min_freq; - - if (write_foptr){ + + if (write_foptr) { + + for (int i = 0; i < noutput_items; i++){ + nco_out = gr_expj(-d_phase); + optr[i] = iptr[i] * nco_out; + + error = (*this.*d_phase_detector)(optr[i]); + if (error > 1) + error = 1; + else if (error < -1) + error = -1; + + d_freq = d_freq + d_beta * error; + d_phase = d_phase + d_freq + d_alpha * error; + + while(d_phase>M_TWOPI) + d_phase -= M_TWOPI; + while(d_phase<-M_TWOPI) + d_phase += M_TWOPI; + + if (d_freq > d_max_freq) + d_freq = d_max_freq; + else if (d_freq < d_min_freq) + d_freq = d_min_freq; + foptr[i] = gr_complex(d_freq,0); - //foptr[i] = gr_complex(error, 0); + } + } else { + for (int i = 0; i < noutput_items; i++){ + nco_out = gr_expj(-d_phase); + optr[i] = iptr[i] * nco_out; + + error = (*this.*d_phase_detector)(optr[i]); + if (error > 1) + error = 1; + else if (error < -1) + error = -1; + + d_freq = d_freq + d_beta * error; + d_phase = d_phase + d_freq + d_alpha * error; + + while(d_phase>M_TWOPI) + d_phase -= M_TWOPI; + while(d_phase<-M_TWOPI) + d_phase += M_TWOPI; + + if (d_freq > d_max_freq) + d_freq = d_max_freq; + else if (d_freq < d_min_freq) + d_freq = d_min_freq; + } } return noutput_items; diff --git a/gnuradio-core/src/lib/general/gr_costas_loop_cc.h b/gnuradio-core/src/lib/general/gr_costas_loop_cc.h index 56cbbeac..3b4aab86 100644 --- a/gnuradio-core/src/lib/general/gr_costas_loop_cc.h +++ b/gnuradio-core/src/lib/general/gr_costas_loop_cc.h @@ -28,9 +28,35 @@ #include #include + +/*! \brief A Costas loop carrier recovery module. + * \ingroup sync_blk + * + * The Costas loop locks to the center frequency of a signal and + * downconverts it to baseband. The second (order=2) order loop is + * used for BPSK where the real part of the output signal is the + * baseband BPSK signal and the imaginary part is the error + * signal. When order=4, it can be used for quadrature modulations + * where both I and Q (real and imaginary) are outputted. + * + * More details can be found online: + * + * J. Feigin, "Practical Costas loop design: Designing a simple and inexpensive + * BPSK Costas loop carrier recovery circuit," RF signal processing, pp. 20-36, + * 2002. + * + * http://rfdesign.com/images/archive/0102Feigin20.pdf + * + * \param alpha the loop gain used for phase adjustment + * \param beta the loop gain for frequency adjustments + * \param max_freq the maximum frequency deviation (radians/sample) the loop can handle + * \param min_freq the minimum frequency deviation (radians/sample) the loop can handle + * \param order the loop order, either 2 or 4 + */ class gr_costas_loop_cc; typedef boost::shared_ptr gr_costas_loop_cc_sptr; + gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float beta, float max_freq, float min_freq, @@ -40,7 +66,11 @@ gr_make_costas_loop_cc (float alpha, float beta, /*! * \brief Carrier tracking PLL for QPSK + * \ingroup sync_blk * input: complex; output: complex + *
The Costas loop can have two output streams: + * stream 1 is the baseband I and Q; + * stream 2 is the normalized frequency of the loop * * \p order must be 2 or 4. */ @@ -59,15 +89,51 @@ class gr_costas_loop_cc : public gr_sync_block int order ) throw (std::invalid_argument); + /*! \brief the phase detector circuit for fourth-order loops + * \param sample complex sample + * \return the phase error + */ float phase_detector_4(gr_complex sample) const; // for QPSK + + /*! \brief the phase detector circuit for second-order loops + * \param sample a complex sample + * \return the phase error + */ float phase_detector_2(gr_complex sample) const; // for BPSK + + float (gr_costas_loop_cc::*d_phase_detector)(gr_complex sample) const; public: + /*! \brief set the first order gain + * \param alpha + */ + void set_alpha(float alpha); + + /*! \brief get the first order gain + * + */ + float alpha() const { return d_alpha; } + + /*! \brief set the second order gain + * \param beta + */ + void set_beta(float beta); + + /*! \brief get the second order gain + * + */ + float beta() const { return d_beta; } + int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); + + /*! \brief returns the current NCO frequency in radians/sample + * + */ + float freq() const { return d_freq; } }; #endif diff --git a/gnuradio-core/src/lib/general/gr_costas_loop_cc.i b/gnuradio-core/src/lib/general/gr_costas_loop_cc.i index 841a86b2..488cab37 100644 --- a/gnuradio-core/src/lib/general/gr_costas_loop_cc.i +++ b/gnuradio-core/src/lib/general/gr_costas_loop_cc.i @@ -34,4 +34,11 @@ class gr_costas_loop_cc : public gr_sync_block private: gr_costas_loop_cc (float alpha, float beta, float max_freq, float min_freq, int order); + + public: + void set_alpha(float alpha); + float alpha(); + void set_beta(float beta); + float beta(); + float freq(); }; diff --git a/gnuradio-core/src/lib/general/gr_cpfsk_bc.cc b/gnuradio-core/src/lib/general/gr_cpfsk_bc.cc new file mode 100644 index 00000000..95d7c175 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_cpfsk_bc.cc @@ -0,0 +1,78 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#define M_TWOPI (2*M_PI) + +gr_cpfsk_bc_sptr +gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym) +{ + return gr_cpfsk_bc_sptr(new gr_cpfsk_bc(k, ampl, samples_per_sym)); +} + +gr_cpfsk_bc::gr_cpfsk_bc(float k, float ampl, int samples_per_sym) + : gr_sync_interpolator("cpfsk_bc", + gr_make_io_signature(1, 1, sizeof(char)), + gr_make_io_signature(1, 1, sizeof(gr_complex)), + samples_per_sym) +{ + d_samples_per_sym = samples_per_sym; + d_freq = k*M_PI/samples_per_sym; + d_ampl = ampl; + d_phase = 0.0; +} + +gr_cpfsk_bc::~gr_cpfsk_bc() +{ +} + +int +gr_cpfsk_bc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const char *in = (const char *)input_items[0]; + gr_complex *out = (gr_complex *)output_items[0]; + + for (int i = 0; i < noutput_items/d_samples_per_sym; i++) { + for (int j = 0; j < d_samples_per_sym; j++) { + if (in[i] == 1) + d_phase += d_freq; + else + d_phase -= d_freq; + + while (d_phase > M_TWOPI) + d_phase -= M_TWOPI; + while (d_phase < -M_TWOPI) + d_phase += M_TWOPI; + + *out++ = gr_expj(d_phase)*d_ampl; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_cpfsk_bc.h b/gnuradio-core/src/lib/general/gr_cpfsk_bc.h new file mode 100644 index 00000000..29bcfed6 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_cpfsk_bc.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ +#ifndef INCLUDED_GR_CPFSK_BC_H +#define INCLUDED_GR_CPFSK_BC_H + +#include + +class gr_cpfsk_bc; + +typedef boost::shared_ptr gr_cpfsk_bc_sptr; + +gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym); + +/*! + * \brief Perform continuous phase 2-level frequency shift keying modulation + * on an input stream of unpacked bits. + * \ingroup modulation_blk + * + * \param k modulation index + * \param ampl output amplitude + * \param samples_per_sym number of output samples per input bit + */ + +class gr_cpfsk_bc : public gr_sync_interpolator +{ +private: + friend gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym); + + gr_cpfsk_bc(float k, float ampl, int samples_per_sym); + + int d_samples_per_sym; // Samples per symbol, square pulse + float d_freq; // Modulation index*pi/samples_per_sym + float d_ampl; // Output amplitude + float d_phase; // Current phase + + public: + ~gr_cpfsk_bc(); + + void set_amplitude(float amplitude) { d_ampl = amplitude; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_CPFSK_BC_H */ diff --git a/gnuradio-core/src/lib/general/gr_cpfsk_bc.i b/gnuradio-core/src/lib/general/gr_cpfsk_bc.i new file mode 100644 index 00000000..918766a6 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_cpfsk_bc.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,cpfsk_bc); + +gr_cpfsk_bc_sptr gr_make_cpfsk_bc(float k, float ampl, int samples_per_sym); + +class gr_cpfsk_bc : public gr_sync_interpolator +{ +private: + gr_cpfsk_bc(float k, float ampl, int samples_per_sym); + +public: + void set_amplitude(float amplitude); +}; diff --git a/gnuradio-core/src/lib/general/gr_crc32.h b/gnuradio-core/src/lib/general/gr_crc32.h index b0c746ac..87a8d15f 100644 --- a/gnuradio-core/src/lib/general/gr_crc32.h +++ b/gnuradio-core/src/lib/general/gr_crc32.h @@ -28,6 +28,7 @@ /*! * \brief update running CRC-32 + * \ingroup misc * * Update a running CRC with the bytes buf[0..len-1] The CRC should be * initialized to all 1's, and the transmitted value is the 1's diff --git a/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h b/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h index 807b83fe..49df785f 100644 --- a/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h +++ b/gnuradio-core/src/lib/general/gr_ctcss_squelch_ff.h @@ -34,7 +34,7 @@ gr_make_ctcss_squelch_ff(int rate, float freq, float level=0.01, int len=0, int /*! * \brief gate or zero output if ctcss tone not present - * \ingroup block + * \ingroup level_blk */ class gr_ctcss_squelch_ff : public gr_squelch_base_ff { diff --git a/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.cc b/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.cc index f410b907..d4141efc 100644 --- a/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.cc +++ b/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.cc @@ -30,6 +30,7 @@ #include #include #include +#include #include diff --git a/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.h b/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.h index b8a2bd83..4ffcd377 100644 --- a/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.h +++ b/gnuradio-core/src/lib/general/gr_dd_mpsk_sync_cc.h @@ -37,6 +37,7 @@ gr_make_dd_mpsk_sync_cc (float alpha, float beta, /*! * \brief Decision directed M-PSK synchronous demod + * \ingroup sync_blk * This block performs joint carrier tracking and symbol timing recovery. * * input: complex baseband; output: properly timed complex samples ready for slicing. diff --git a/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.cc b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.cc new file mode 100644 index 00000000..add036f2 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.cc @@ -0,0 +1,86 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_decode_ccsds_27_fb_sptr +gr_make_decode_ccsds_27_fb() +{ + return gr_decode_ccsds_27_fb_sptr(new gr_decode_ccsds_27_fb()); +} + +gr_decode_ccsds_27_fb::gr_decode_ccsds_27_fb() + : gr_sync_decimator("decode_ccsds_27_fb", + gr_make_io_signature(1, 1, sizeof(float)), + gr_make_io_signature(1, 1, sizeof(char)), + 2*8) // Rate 1/2 code, unpacked to packed translation +{ + float RATE = 0.5; + float ebn0 = 12.0; + float esn0 = RATE*pow(10.0, ebn0/10); + + gen_met(d_mettab, 100, esn0, 0.0, 256); + viterbi_chunks_init(d_state0); +} + +gr_decode_ccsds_27_fb::~gr_decode_ccsds_27_fb() +{ +} + +int +gr_decode_ccsds_27_fb::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *)input_items[0]; + unsigned char *out = (unsigned char *)output_items[0]; + + for (int i = 0; i < noutput_items*16; i++) { + // Translate and clip [-1.0..1.0] to [28..228] + float sample = in[i]*100.0+128.0; + if (sample > 255.0) + sample = 255.0; + else if (sample < 0.0) + sample = 0.0; + unsigned char sym = (unsigned char)(floor(sample)); + + d_viterbi_in[d_count % 4] = sym; + if ((d_count % 4) == 3) { + // Every fourth symbol, perform butterfly operation + viterbi_butterfly2(d_viterbi_in, d_mettab, d_state0, d_state1); + + // Every sixteenth symbol, read out a byte + if (d_count % 16 == 11) { + // long metric = + viterbi_get_output(d_state0, out++); + // printf("%li\n", *(out-1), metric); + } + } + + d_count++; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h new file mode 100644 index 00000000..50a6c9d8 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.h @@ -0,0 +1,77 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ +#ifndef INCLUDED_GR_DECODE_CCSDS_27_FB_H +#define INCLUDED_GR_DECODE_CCSDS_27_FB_H + +#include + +extern "C" { +#include "../viterbi/viterbi.h" +} + +class gr_decode_ccsds_27_fb; + +typedef boost::shared_ptr gr_decode_ccsds_27_fb_sptr; + +gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb(); + +/*! \brief A rate 1/2, k=7 convolutional decoder for the CCSDS standard + * \ingroup ecc + * + * This block performs soft-decision convolutional decoding using the Viterbi + * algorithm. + * + * The input is a stream of (possibly noise corrupted) floating point values + * nominally spanning [-1.0, 1.0], representing the encoded channel symbols + * 0 (-1.0) and 1 (1.0), with erased symbols at 0.0. + * + * The output is MSB first packed bytes of decoded values. + * + * As a rate 1/2 code, there will be one output byte for every 16 input symbols. + * + * This block is designed for continuous data streaming, not packetized data. + * The first 32 bits out will be zeroes, with the output delayed four bytes + * from the corresponding inputs. + */ + +class gr_decode_ccsds_27_fb : public gr_sync_decimator +{ +private: + friend gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb(); + + gr_decode_ccsds_27_fb(); + + // Viterbi state + int d_mettab[2][256]; + struct viterbi_state d_state0[64]; + struct viterbi_state d_state1[64]; + unsigned char d_viterbi_in[16]; + + int d_count; + +public: + ~gr_decode_ccsds_27_fb(); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_DECODE_CCSDS_27_FB_H */ diff --git a/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.i b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.i new file mode 100644 index 00000000..f05a0141 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_decode_ccsds_27_fb.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,decode_ccsds_27_fb); + +gr_decode_ccsds_27_fb_sptr gr_make_decode_ccsds_27_fb (); + +class gr_decode_ccsds_27_fb : public gr_sync_decimator +{ +private: + gr_decode_ccsds_27_fb(); +}; diff --git a/gnuradio-core/src/lib/general/gr_deinterleave.h b/gnuradio-core/src/lib/general/gr_deinterleave.h index af9dd3f0..59c310bd 100644 --- a/gnuradio-core/src/lib/general/gr_deinterleave.h +++ b/gnuradio-core/src/lib/general/gr_deinterleave.h @@ -32,7 +32,7 @@ gr_deinterleave_sptr gr_make_deinterleave (size_t itemsize); /*! * \brief deinterleave a single input into N outputs - * \ingroup block + * \ingroup slicedice_blk */ class gr_deinterleave : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/general/gr_delay.cc b/gnuradio-core/src/lib/general/gr_delay.cc new file mode 100644 index 00000000..d52faca3 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_delay.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_delay_sptr +gr_make_delay (size_t itemsize, int delay) +{ + return gr_delay_sptr (new gr_delay (itemsize, delay)); +} + +gr_delay::gr_delay (size_t itemsize, int delay) + : gr_sync_block ("delay", + gr_make_io_signature (1, -1, itemsize), + gr_make_io_signature (1, -1, itemsize)), + d_itemsize(itemsize) +{ + set_delay(delay); +} + +int +gr_delay::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert(input_items.size() == output_items.size()); + + const char *iptr; + char *optr; + + for(size_t i = 0; i < input_items.size(); i++) { + iptr = (const char *) input_items[i]; + optr = (char *) output_items[i]; + + memcpy(optr, iptr, noutput_items*d_itemsize); + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_delay.h b/gnuradio-core/src/lib/general/gr_delay.h new file mode 100644 index 00000000..d7e8252a --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_delay.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_DELAY_H +#define INCLUDED_GR_DELAY_H + +#include + +class gr_delay; +typedef boost::shared_ptr gr_delay_sptr; + +gr_delay_sptr gr_make_delay (size_t itemsize, int delay); + +/*! + * \brief delay the input by a certain number of samples + * \ingroup misc_blk + */ +class gr_delay : public gr_sync_block +{ + friend gr_delay_sptr gr_make_delay (size_t itemsize, int delay); + + gr_delay (size_t itemsize, int delay); + + size_t d_itemsize; + + public: + int delay () const { return history()-1; } + void set_delay (int delay) { set_history(delay+1); } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_delay.i b/gnuradio-core/src/lib/general/gr_delay.i new file mode 100644 index 00000000..a527d008 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_delay.i @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,delay) + + gr_delay_sptr gr_make_delay (size_t itemsize, int delay); + +class gr_delay : public gr_sync_block +{ + private: + gr_delay (size_t itemsize, int delay); + + public: + int delay() const { return history()-1; } + void set_delay (int delay) { set_history(delay+1); } +}; diff --git a/gnuradio-core/src/lib/general/gr_descrambler_bb.cc b/gnuradio-core/src/lib/general/gr_descrambler_bb.cc new file mode 100644 index 00000000..e173a8a2 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_descrambler_bb.cc @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_descrambler_bb_sptr +gr_make_descrambler_bb(int mask, int seed, int len) +{ + return gr_descrambler_bb_sptr(new gr_descrambler_bb(mask, seed, len)); +} + +gr_descrambler_bb::gr_descrambler_bb(int mask, int seed, int len) + : gr_sync_block("descrambler_bb", + gr_make_io_signature (1, 1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))), + d_lfsr(mask, seed, len) +{ +} + +int +gr_descrambler_bb::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) + out[i] = d_lfsr.next_bit_descramble(in[i]); + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_descrambler_bb.h b/gnuradio-core/src/lib/general/gr_descrambler_bb.h new file mode 100644 index 00000000..19787690 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_descrambler_bb.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef INCLUDED_GR_DESCRAMBLER_BB_H +#define INCLUDED_GR_DESCRAMBLER_BB_H + +#include +#include "gri_lfsr.h" + +class gr_descrambler_bb; +typedef boost::shared_ptr gr_descrambler_bb_sptr; + +gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len); + +/*! + * Descramble an input stream using an LFSR. This block works on the LSB only + * of the input data stream, i.e., on an "unpacked binary" stream, and + * produces the same format on its output. + * + * \param mask Polynomial mask for LFSR + * \param seed Initial shift register contents + * \param len Shift register length + * + * \ingroup coding_blk + */ + +class gr_descrambler_bb : public gr_sync_block +{ + friend gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len); + + gri_lfsr d_lfsr; + + gr_descrambler_bb(int mask, int seed, int len); + +public: + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_DESCRAMBLER_BB_H */ diff --git a/gnuradio-core/src/lib/general/gr_descrambler_bb.i b/gnuradio-core/src/lib/general/gr_descrambler_bb.i new file mode 100644 index 00000000..e93c50c1 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_descrambler_bb.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,descrambler_bb); + +gr_descrambler_bb_sptr gr_make_descrambler_bb(int mask, int seed, int len); + +class gr_descrambler_bb : public gr_sync_block +{ +private: + gr_descrambler_bb(int mask, int seed, int len); +}; diff --git a/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h b/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h index ec47d8b6..6fd08ec4 100644 --- a/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h +++ b/gnuradio-core/src/lib/general/gr_diff_decoder_bb.h @@ -32,7 +32,7 @@ gr_diff_decoder_bb_sptr gr_make_diff_decoder_bb (unsigned int modulus); /*! * \brief y[0] = (x[0] - x[-1]) % M - * \ingroup block + * \ingroup coding_blk * * Differential decoder */ diff --git a/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h b/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h index dbf16101..50aff73c 100644 --- a/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h +++ b/gnuradio-core/src/lib/general/gr_diff_encoder_bb.h @@ -32,7 +32,7 @@ gr_diff_encoder_bb_sptr gr_make_diff_encoder_bb (unsigned int modulus); /*! * \brief y[0] = (x[0] + y[-1]) % M - * \ingroup block + * \ingroup coding_blk * * Differential encoder */ diff --git a/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h b/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h index 4be7060e..1070ba18 100644 --- a/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h +++ b/gnuradio-core/src/lib/general/gr_diff_phasor_cc.h @@ -25,6 +25,10 @@ #include +/*! + * \brief Please fix my documentation! + * \ingroup misc + */ class gr_diff_phasor_cc; typedef boost::shared_ptr gr_diff_phasor_cc_sptr; diff --git a/gnuradio-core/src/lib/general/gr_divide_XX.cc.t b/gnuradio-core/src/lib/general/gr_divide_XX.cc.t deleted file mode 100644 index fbffc2d5..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_XX.cc.t +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ () -{ - return @SPTR_NAME@ (new @NAME@ ()); -} - -@NAME@::@NAME@ () - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items; i++) - *optr++ = (@O_TYPE@) ((@O_TYPE@) 1 / - ((@I_TYPE@ *) input_items[0])[i]); - } - - else { - for (int i = 0; i < noutput_items; i++){ - @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc /= ((@I_TYPE@ *) input_items[j])[i]; - - *optr++ = (@O_TYPE@) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_divide_XX.h.t b/gnuradio-core/src/lib/general/gr_divide_XX.h.t deleted file mode 100644 index 96e72f03..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_XX.h.t +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -/*! - * \brief output = input_0 / input_1 / input_x ...) - * \ingroup block - * - * Divide across all input streams. - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); - - @NAME@ (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_divide_XX.i.t b/gnuradio-core/src/lib/general/gr_divide_XX.i.t deleted file mode 100644 index a4bc4ce6..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_XX.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -class @NAME@ : public gr_sync_block -{ - private: - @NAME@ (); -}; diff --git a/gnuradio-core/src/lib/general/gr_divide_cc.cc b/gnuradio-core/src/lib/general/gr_divide_cc.cc deleted file mode 100644 index 9cab934f..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_cc.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_divide_cc_sptr -gr_make_divide_cc () -{ - return gr_divide_cc_sptr (new gr_divide_cc ()); -} - -gr_divide_cc::gr_divide_cc () - : gr_sync_block ("divide_cc", - gr_make_io_signature (1, -1, sizeof (gr_complex)), - gr_make_io_signature (1, 1, sizeof (gr_complex))) -{ -} - -int -gr_divide_cc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items; i++) - *optr++ = (gr_complex) ((gr_complex) 1 / - ((gr_complex *) input_items[0])[i]); - } - - else { - for (int i = 0; i < noutput_items; i++){ - gr_complex acc = ((gr_complex *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc /= ((gr_complex *) input_items[j])[i]; - - *optr++ = (gr_complex) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_divide_cc.h b/gnuradio-core/src/lib/general/gr_divide_cc.h deleted file mode 100644 index 5d90ec45..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_cc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_DIVIDE_CC_H -#define INCLUDED_GR_DIVIDE_CC_H - -#include - -class gr_divide_cc; -typedef boost::shared_ptr gr_divide_cc_sptr; - -gr_divide_cc_sptr gr_make_divide_cc (); - -/*! - * \brief output = input_0 / input_1 / input_x ...) - * \ingroup block - * - * Divide across all input streams. - */ -class gr_divide_cc : public gr_sync_block -{ - friend gr_divide_cc_sptr gr_make_divide_cc (); - - gr_divide_cc (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_divide_cc.i b/gnuradio-core/src/lib/general/gr_divide_cc.i deleted file mode 100644 index f9ddc557..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_cc.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,divide_cc) - -gr_divide_cc_sptr gr_make_divide_cc (); - -class gr_divide_cc : public gr_sync_block -{ - private: - gr_divide_cc (); -}; diff --git a/gnuradio-core/src/lib/general/gr_divide_ff.cc b/gnuradio-core/src/lib/general/gr_divide_ff.cc deleted file mode 100644 index ea79023d..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ff.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_divide_ff_sptr -gr_make_divide_ff () -{ - return gr_divide_ff_sptr (new gr_divide_ff ()); -} - -gr_divide_ff::gr_divide_ff () - : gr_sync_block ("divide_ff", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (float))) -{ -} - -int -gr_divide_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items; i++) - *optr++ = (float) ((float) 1 / - ((float *) input_items[0])[i]); - } - - else { - for (int i = 0; i < noutput_items; i++){ - float acc = ((float *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc /= ((float *) input_items[j])[i]; - - *optr++ = (float) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_divide_ff.h b/gnuradio-core/src/lib/general/gr_divide_ff.h deleted file mode 100644 index b26ce6c5..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ff.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_DIVIDE_FF_H -#define INCLUDED_GR_DIVIDE_FF_H - -#include - -class gr_divide_ff; -typedef boost::shared_ptr gr_divide_ff_sptr; - -gr_divide_ff_sptr gr_make_divide_ff (); - -/*! - * \brief output = input_0 / input_1 / input_x ...) - * \ingroup block - * - * Divide across all input streams. - */ -class gr_divide_ff : public gr_sync_block -{ - friend gr_divide_ff_sptr gr_make_divide_ff (); - - gr_divide_ff (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_divide_ff.i b/gnuradio-core/src/lib/general/gr_divide_ff.i deleted file mode 100644 index 045a9277..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ff.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,divide_ff) - -gr_divide_ff_sptr gr_make_divide_ff (); - -class gr_divide_ff : public gr_sync_block -{ - private: - gr_divide_ff (); -}; diff --git a/gnuradio-core/src/lib/general/gr_divide_ii.cc b/gnuradio-core/src/lib/general/gr_divide_ii.cc deleted file mode 100644 index 93b37b52..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ii.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_divide_ii_sptr -gr_make_divide_ii () -{ - return gr_divide_ii_sptr (new gr_divide_ii ()); -} - -gr_divide_ii::gr_divide_ii () - : gr_sync_block ("divide_ii", - gr_make_io_signature (1, -1, sizeof (int)), - gr_make_io_signature (1, 1, sizeof (int))) -{ -} - -int -gr_divide_ii::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items; i++) - *optr++ = (int) ((int) 1 / - ((int *) input_items[0])[i]); - } - - else { - for (int i = 0; i < noutput_items; i++){ - int acc = ((int *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc /= ((int *) input_items[j])[i]; - - *optr++ = (int) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_divide_ii.h b/gnuradio-core/src/lib/general/gr_divide_ii.h deleted file mode 100644 index 3756f70a..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ii.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_DIVIDE_II_H -#define INCLUDED_GR_DIVIDE_II_H - -#include - -class gr_divide_ii; -typedef boost::shared_ptr gr_divide_ii_sptr; - -gr_divide_ii_sptr gr_make_divide_ii (); - -/*! - * \brief output = input_0 / input_1 / input_x ...) - * \ingroup block - * - * Divide across all input streams. - */ -class gr_divide_ii : public gr_sync_block -{ - friend gr_divide_ii_sptr gr_make_divide_ii (); - - gr_divide_ii (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_divide_ii.i b/gnuradio-core/src/lib/general/gr_divide_ii.i deleted file mode 100644 index 35061670..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ii.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,divide_ii) - -gr_divide_ii_sptr gr_make_divide_ii (); - -class gr_divide_ii : public gr_sync_block -{ - private: - gr_divide_ii (); -}; diff --git a/gnuradio-core/src/lib/general/gr_divide_ss.cc b/gnuradio-core/src/lib/general/gr_divide_ss.cc deleted file mode 100644 index f1465612..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ss.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_divide_ss_sptr -gr_make_divide_ss () -{ - return gr_divide_ss_sptr (new gr_divide_ss ()); -} - -gr_divide_ss::gr_divide_ss () - : gr_sync_block ("divide_ss", - gr_make_io_signature (1, -1, sizeof (short)), - gr_make_io_signature (1, 1, sizeof (short))) -{ -} - -int -gr_divide_ss::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items; i++) - *optr++ = (short) ((short) 1 / - ((short *) input_items[0])[i]); - } - - else { - for (int i = 0; i < noutput_items; i++){ - short acc = ((short *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc /= ((short *) input_items[j])[i]; - - *optr++ = (short) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_divide_ss.h b/gnuradio-core/src/lib/general/gr_divide_ss.h deleted file mode 100644 index d9a84920..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ss.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_DIVIDE_SS_H -#define INCLUDED_GR_DIVIDE_SS_H - -#include - -class gr_divide_ss; -typedef boost::shared_ptr gr_divide_ss_sptr; - -gr_divide_ss_sptr gr_make_divide_ss (); - -/*! - * \brief output = input_0 / input_1 / input_x ...) - * \ingroup block - * - * Divide across all input streams. - */ -class gr_divide_ss : public gr_sync_block -{ - friend gr_divide_ss_sptr gr_make_divide_ss (); - - gr_divide_ss (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_divide_ss.i b/gnuradio-core/src/lib/general/gr_divide_ss.i deleted file mode 100644 index 285cb89a..00000000 --- a/gnuradio-core/src/lib/general/gr_divide_ss.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,divide_ss) - -gr_divide_ss_sptr gr_make_divide_ss (); - -class gr_divide_ss : public gr_sync_block -{ - private: - gr_divide_ss (); -}; diff --git a/gnuradio-core/src/lib/general/gr_dpll_bb.cc b/gnuradio-core/src/lib/general/gr_dpll_bb.cc new file mode 100644 index 00000000..f24b2a88 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_dpll_bb.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_dpll_bb_sptr +gr_make_dpll_bb (float period, float gain) +{ + return gr_dpll_bb_sptr (new gr_dpll_bb (period, gain)); +} + +gr_dpll_bb::gr_dpll_bb (float period, float gain) + : gr_sync_block ("dpll_bb", + gr_make_io_signature (1, 1, sizeof (char)), + gr_make_io_signature (1, 1, sizeof (char))), + d_restart(0),d_pulse_phase(0) +{ + d_pulse_frequency = 1.0/period; + d_gain = gain; + d_decision_threshold = 1.0 - 0.5*d_pulse_frequency; +#if 1 + fprintf(stderr,"frequency = %f period = %f gain = %f threshold = %f\n", + d_pulse_frequency, + period, + d_gain, + d_decision_threshold); +#endif +} + +int +gr_dpll_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const char *iptr = (const char *) input_items[0]; + char *optr = (char *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + optr[i]= 0; + if(iptr[i] == 1) { + if (d_restart == 0) { + d_pulse_phase = 1; + } else { + if (d_pulse_phase > 0.5) d_pulse_phase += d_gain*(1.0-d_pulse_phase); + else d_pulse_phase -= d_gain*d_pulse_phase; + } + d_restart = 3; + } + if (d_pulse_phase > d_decision_threshold) { + d_pulse_phase -= 1.0; + if (d_restart > 0) { + d_restart -= 1; + optr[i] = 1; + } + } + d_pulse_phase += d_pulse_frequency; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_dpll_bb.h b/gnuradio-core/src/lib/general/gr_dpll_bb.h new file mode 100644 index 00000000..e6b5fc0f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_dpll_bb.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_DPLL_BB_H +#define INCLUDED_GR_DPLL_BB_H + +#include + +class gr_dpll_bb; +typedef boost::shared_ptr gr_dpll_bb_sptr; + +gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain); + +/*! + * \brief Detect the peak of a signal + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1, + * or it outputs 0's. + */ +class gr_dpll_bb : public gr_sync_block +{ + friend gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain); + + gr_dpll_bb (float period, float gain); + + private: + unsigned char d_restart; + float d_pulse_phase, d_pulse_frequency,d_gain,d_decision_threshold; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_dpll_bb.i b/gnuradio-core/src/lib/general/gr_dpll_bb.i new file mode 100644 index 00000000..59ce7f03 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_dpll_bb.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,dpll_bb) + + gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain); + +class gr_dpll_bb : public gr_sync_block +{ + private: + gr_dpll_bb (float period, float gain); +}; diff --git a/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.cc b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.cc new file mode 100644 index 00000000..76b8091f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 Free Software Foundation, Inc. + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +extern "C" { +#include <../viterbi/viterbi.h> +} + +gr_encode_ccsds_27_bb_sptr +gr_make_encode_ccsds_27_bb() +{ + return gr_encode_ccsds_27_bb_sptr(new gr_encode_ccsds_27_bb()); +} + +gr_encode_ccsds_27_bb::gr_encode_ccsds_27_bb() + : gr_sync_interpolator("encode_ccsds_27_bb", + gr_make_io_signature(1, 1, sizeof(char)), + gr_make_io_signature(1, 1, sizeof(char)), + 16) // Rate 1/2 code, packed to unpacked conversion +{ + d_encstate = 0; +} + +gr_encode_ccsds_27_bb::~gr_encode_ccsds_27_bb() +{ +} + +int +gr_encode_ccsds_27_bb::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *in = (unsigned char *)input_items[0]; + unsigned char *out = (unsigned char *)output_items[0]; + + d_encstate = encode(out, in, noutput_items/16, d_encstate); + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h new file mode 100644 index 00000000..86832ee0 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ +#ifndef INCLUDED_GR_ENCODE_CCSDS_27_BB_H +#define INCLUDED_GR_ENCODE_CCSDS_27_BB_H + +#include + +class gr_encode_ccsds_27_bb; + +typedef boost::shared_ptr gr_encode_ccsds_27_bb_sptr; + +gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb(); + +/*! \brief A rate 1/2, k=7 convolutional encoder for the CCSDS standard + * \ingroup ecc + * + * This block performs convolutional encoding using the CCSDS standard + * polynomial ("Voyager"). + * + * The input is an MSB first packed stream of bits. + * + * The output is a stream of symbols 0 or 1 representing the encoded data. + * + * As a rate 1/2 code, there will be 16 output symbols for every input byte. + * + * This block is designed for continuous data streaming, not packetized data. + * There is no provision to "flush" the encoder. + */ + +class gr_encode_ccsds_27_bb : public gr_sync_interpolator +{ +private: + friend gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb(); + + gr_encode_ccsds_27_bb(); + unsigned char d_encstate; + + public: + ~gr_encode_ccsds_27_bb(); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_ENCODE_CCSDS_27_BB_H */ diff --git a/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.i b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.i new file mode 100644 index 00000000..d4bda41c --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_encode_ccsds_27_bb.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,encode_ccsds_27_bb); + +gr_encode_ccsds_27_bb_sptr gr_make_encode_ccsds_27_bb (); + +class gr_encode_ccsds_27_bb : public gr_sync_interpolator +{ +private: + gr_encode_ccsds_27_bb(); +}; diff --git a/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc b/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc index accd25fb..02385c59 100644 --- a/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc +++ b/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.cc @@ -28,6 +28,7 @@ #include #include #include +#include static const int PAD_VAL = 0xAA; diff --git a/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h b/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h index 6541c4fb..480fb8e7 100644 --- a/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h +++ b/gnuradio-core/src/lib/general/gr_fake_channel_coder_pp.h @@ -33,7 +33,7 @@ gr_make_fake_channel_encoder_pp(int input_vlen, int output_vlen); /*! * \brief pad packet with alternating 1,0 pattern. - * \ingroup block + * \ingroup coding_blk * * input: stream of byte vectors; output: stream of byte vectors */ @@ -65,7 +65,7 @@ gr_make_fake_channel_decoder_pp(int input_vlen, int output_vlen); /*! * \brief remove fake padding from packet - * \ingroup block + * \ingroup coding_blk * * input: stream of byte vectors; output: stream of byte vectors */ diff --git a/gnuradio-core/src/lib/general/gr_fast_atan2f.cc b/gnuradio-core/src/lib/general/gr_fast_atan2f.cc index df8d1add..6e14660f 100644 --- a/gnuradio-core/src/lib/general/gr_fast_atan2f.cc +++ b/gnuradio-core/src/lib/general/gr_fast_atan2f.cc @@ -196,3 +196,4 @@ gr_fast_atan2f(REAL y, REAL x) return (angle); #endif } + diff --git a/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h b/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h index 71694fdb..8c600d3d 100644 --- a/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h +++ b/gnuradio-core/src/lib/general/gr_feedforward_agc_cc.h @@ -33,6 +33,7 @@ gr_make_feedforward_agc_cc(int nsamples, float reference = 1.0); /*! * \brief Non-causal AGC which computes required gain based on max absolute value over nsamples + * \ingroup level_blk */ class gr_feedforward_agc_cc : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_feval.cc b/gnuradio-core/src/lib/general/gr_feval.cc index 3be5f47c..e679ef58 100644 --- a/gnuradio-core/src/lib/general/gr_feval.cc +++ b/gnuradio-core/src/lib/general/gr_feval.cc @@ -34,6 +34,14 @@ gr_feval_dd::eval(double x) return 0; } +double +gr_feval_dd::calleval(double x) +{ + return eval(x); +} + +// ---------------------------------------------------------------- + gr_feval_cc::~gr_feval_cc(){} gr_complex @@ -42,6 +50,14 @@ gr_feval_cc::eval(gr_complex x) return 0; } +gr_complex +gr_feval_cc::calleval(gr_complex x) +{ + return eval(x); +} + +// ---------------------------------------------------------------- + gr_feval_ll::~gr_feval_ll(){} long @@ -50,23 +66,51 @@ gr_feval_ll::eval(long x) return 0; } +long +gr_feval_ll::calleval(long x) +{ + return eval(x); +} + +// ---------------------------------------------------------------- + +gr_feval::~gr_feval(){} + +void +gr_feval::eval(void) +{ + // nop +} + +void +gr_feval::calleval(void) +{ + eval(); +} + /* * Trivial examples showing C++ (transparently) calling Python */ double gr_feval_dd_example(gr_feval_dd *f, double x) { - return f->eval(x); + return f->calleval(x); } gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x) { - return f->eval(x); + return f->calleval(x); } long gr_feval_ll_example(gr_feval_ll *f, long x) { - return f->eval(x); + return f->calleval(x); +} + +void +gr_feval_example(gr_feval *f) +{ + f->calleval(); } diff --git a/gnuradio-core/src/lib/general/gr_feval.h b/gnuradio-core/src/lib/general/gr_feval.h index d1d322bc..cc4209af 100644 --- a/gnuradio-core/src/lib/general/gr_feval.h +++ b/gnuradio-core/src/lib/general/gr_feval.h @@ -26,62 +26,114 @@ /*! * \brief base class for evaluating a function: double -> double + * \ingroup misc * * This class is designed to be subclassed in Python or C++ * and is callable from both places. It uses SWIG's * "director" feature to implement the magic. * It's slow. Don't use it in a performance critical path. + * + * Override eval to define the behavior. + * Use calleval to invoke eval (this kludge is required to allow a + * python specific "shim" to be inserted. */ class gr_feval_dd { -public: - gr_feval_dd() {} - virtual ~gr_feval_dd(); - +protected: /*! * \brief override this to define the function */ virtual double eval(double x); + +public: + gr_feval_dd() {} + virtual ~gr_feval_dd(); + + virtual double calleval(double x); // invoke "eval" }; /*! * \brief base class for evaluating a function: complex -> complex + * \ingroup misc * * This class is designed to be subclassed in Python or C++ * and is callable from both places. It uses SWIG's * "director" feature to implement the magic. * It's slow. Don't use it in a performance critical path. + * + * Override eval to define the behavior. + * Use calleval to invoke eval (this kludge is required to allow a + * python specific "shim" to be inserted. */ class gr_feval_cc { -public: - gr_feval_cc() {} - virtual ~gr_feval_cc(); - +protected: /*! * \brief override this to define the function */ virtual gr_complex eval(gr_complex x); + +public: + gr_feval_cc() {} + virtual ~gr_feval_cc(); + + virtual gr_complex calleval(gr_complex x); // invoke "eval" }; /*! * \brief base class for evaluating a function: long -> long + * \ingroup misc * * This class is designed to be subclassed in Python or C++ * and is callable from both places. It uses SWIG's * "director" feature to implement the magic. * It's slow. Don't use it in a performance critical path. + * + * Override eval to define the behavior. + * Use calleval to invoke eval (this kludge is required to allow a + * python specific "shim" to be inserted. */ class gr_feval_ll { +protected: + /*! + * \brief override this to define the function + */ + virtual long eval(long x); + public: gr_feval_ll() {} virtual ~gr_feval_ll(); + virtual long calleval(long x); // invoke "eval" +}; + +/*! + * \brief base class for evaluating a function: void -> void + * \ingroup misc + * + * This class is designed to be subclassed in Python or C++ + * and is callable from both places. It uses SWIG's + * "director" feature to implement the magic. + * It's slow. Don't use it in a performance critical path. + * + * Override eval to define the behavior. + * Use calleval to invoke eval (this kludge is required to allow a + * python specific "shim" to be inserted. + */ +class gr_feval +{ +protected: /*! * \brief override this to define the function */ - virtual long eval(long x); + virtual void eval(); + +public: + gr_feval() {} + virtual ~gr_feval(); + + virtual void calleval(); // invoke "eval" }; /*! @@ -90,6 +142,6 @@ public: double gr_feval_dd_example(gr_feval_dd *f, double x); gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x); long gr_feval_ll_example(gr_feval_ll *f, long x); - +void gr_feval_example(gr_feval *f); #endif /* INCLUDED_GR_FEVAL_H */ diff --git a/gnuradio-core/src/lib/general/gr_feval.i b/gnuradio-core/src/lib/general/gr_feval.i index e71b963d..8594a6fa 100644 --- a/gnuradio-core/src/lib/general/gr_feval.i +++ b/gnuradio-core/src/lib/general/gr_feval.i @@ -20,42 +20,169 @@ * Boston, MA 02110-1301, USA. */ + +/* + * N.B., this is a _very_ non-standard SWIG .i file + * + * It contains a bunch of magic that is required to ensure that when + * these classes are used as base classes for python code, + * everything works when calling back from C++ into Python. + * + * The gist of the problem is that our C++ code is usually not holding + * the Python Global Interpreter Lock (GIL). Thus if we invoke a + * "director" method from C++, we'll end up in Python not holding the + * GIL. Disaster (SIGSEGV) will result. To avoid this we insert a + * "shim" that grabs and releases the GIL. + * + * If you don't understand SWIG "directors" or the Python GIL, + * don't bother trying to understand what's going on in here. + * + * [We could eliminate a bunch of this hair by requiring SWIG 1.3.29 + * or later and some additional magic declarations, but many systems + * aren't shipping that version yet. Thus we kludge...] + */ + + // Enable SWIG directors for these classes -%feature("director") gr_feval_dd; -%feature("director") gr_feval_cc; -%feature("director") gr_feval_ll; +%feature("director") gr_py_feval_dd; +%feature("director") gr_py_feval_cc; +%feature("director") gr_py_feval_ll; +%feature("director") gr_py_feval; + +%feature("nodirector") gr_py_feval_dd::calleval; +%feature("nodirector") gr_py_feval_cc::calleval; +%feature("nodirector") gr_py_feval_ll::calleval; +%feature("nodirector") gr_py_feval::calleval; + + +%rename(feval_dd) gr_py_feval_dd; +%rename(feval_cc) gr_py_feval_cc; +%rename(feval_ll) gr_py_feval_ll; +%rename(feval) gr_py_feval; + +//%exception { +// try { $action } +// catch (Swig::DirectorException &e) { std::cerr << e.getMessage(); SWIG_fail; } +//} + +%{ + +// class that ensures we acquire and release the Python GIL + +class ensure_py_gil_state { + PyGILState_STATE d_gstate; +public: + ensure_py_gil_state() { d_gstate = PyGILState_Ensure(); } + ~ensure_py_gil_state() { PyGILState_Release(d_gstate); } +}; +%} -%rename(feval_dd) gr_feval_dd; +/* + * These are the real C++ base classes, however we don't want these exposed. + */ +%ignore gr_feval_dd; class gr_feval_dd { +protected: + virtual double eval(double x); + public: gr_feval_dd() {} virtual ~gr_feval_dd(); - virtual double eval(double x); + virtual double calleval(double x); }; -%rename(feval_cc) gr_feval_cc; +%ignore gr_feval_cc; class gr_feval_cc { +protected: + virtual gr_complex eval(gr_complex x); + public: gr_feval_cc() {} virtual ~gr_feval_cc(); - virtual gr_complex eval(gr_complex x); + virtual gr_complex calleval(gr_complex x); }; -%rename(feval_ll) gr_feval_ll; +%ignore gr_feval_ll; class gr_feval_ll { +protected: + virtual long eval(long x); + public: gr_feval_ll() {} virtual ~gr_feval_ll(); - virtual long eval(long x); + virtual long calleval(long x); }; +%ignore gr_feval; +class gr_feval +{ +protected: + virtual void eval(); + +public: + gr_feval() {} + virtual ~gr_feval(); + + virtual void calleval(); +}; + +/* + * These are the ones to derive from in Python. They have the magic shim + * that ensures that we're holding the Python GIL when we enter Python land... + */ + +%inline %{ + +class gr_py_feval_dd : public gr_feval_dd +{ + public: + double calleval(double x) + { + ensure_py_gil_state _lock; + return eval(x); + } +}; + +class gr_py_feval_cc : public gr_feval_cc +{ + public: + gr_complex calleval(gr_complex x) + { + ensure_py_gil_state _lock; + return eval(x); + } +}; + +class gr_py_feval_ll : public gr_feval_ll +{ + public: + long calleval(long x) + { + ensure_py_gil_state _lock; + return eval(x); + } +}; + +class gr_py_feval : public gr_feval +{ + public: + void calleval() + { + ensure_py_gil_state _lock; + eval(); + } +}; + +%} + + // examples / test cases @@ -67,3 +194,6 @@ gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x); %rename(feval_ll_example) gr_feval_ll_example; long gr_feval_ll_example(gr_feval_ll *f, long x); + +%rename(feval_example) gr_feval_example; +void gr_feval_example(gr_feval *f); diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.cc b/gnuradio-core/src/lib/general/gr_fft_vcc.cc index 943979a4..d07f6fa0 100644 --- a/gnuradio-core/src/lib/general/gr_fft_vcc.cc +++ b/gnuradio-core/src/lib/general/gr_fft_vcc.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -24,74 +24,36 @@ #include "config.h" #endif -#include +#include // abstract class +#include // concrete class #include #include #include +#include gr_fft_vcc_sptr -gr_make_fft_vcc (int fft_size, bool forward,const std::vector window) +gr_make_fft_vcc (int fft_size, bool forward,const std::vector &window, bool shift) { - return gr_fft_vcc_sptr (new gr_fft_vcc (fft_size, forward, window)); + return gr_make_fft_vcc_fftw(fft_size, forward, window, shift); } -gr_fft_vcc::gr_fft_vcc (int fft_size, bool forward, const std::vector window) - : gr_sync_block ("fft_vcc", +gr_fft_vcc::gr_fft_vcc (const std::string &name, + int fft_size, bool forward, const std::vector &window, + bool shift) + : gr_sync_block (name, gr_make_io_signature (1, 1, fft_size * sizeof (gr_complex)), gr_make_io_signature (1, 1, fft_size * sizeof (gr_complex))), - d_fft_size(fft_size) + d_fft_size(fft_size), d_forward(forward), d_shift(shift) { - d_fft = new gri_fft_complex (d_fft_size, forward); - set_window(window); - } gr_fft_vcc::~gr_fft_vcc () { - delete d_fft; -} - -int -gr_fft_vcc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - const gr_complex *in = (const gr_complex *) input_items[0]; - gr_complex *out = (gr_complex *) output_items[0]; - - unsigned int input_data_size = input_signature()->sizeof_stream_item (0); - unsigned int output_data_size = output_signature()->sizeof_stream_item (0); - - int count = 0; - - while (count++ < noutput_items){ - - // copy input into optimally aligned buffer - - if (d_window.size()){ - gr_complex *dst = d_fft->get_inbuf(); - for (unsigned int i = 0; i < d_fft_size; i++) // apply window - dst[i] = in[i] * d_window[i]; - } - else - memcpy (d_fft->get_inbuf(), in, input_data_size); - - // compute the fft - d_fft->execute (); - - // cpoy result to our output - memcpy (out, d_fft->get_outbuf (), output_data_size); - - in += d_fft_size; - out += d_fft_size; - } - - return noutput_items; } bool -gr_fft_vcc::set_window(const std::vector window) +gr_fft_vcc::set_window(const std::vector &window) { if(window.size()==0 || window.size()==d_fft_size) { d_window=window; diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.h b/gnuradio-core/src/lib/general/gr_fft_vcc.h index b8bb0733..2ab9241e 100644 --- a/gnuradio-core/src/lib/general/gr_fft_vcc.h +++ b/gnuradio-core/src/lib/general/gr_fft_vcc.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -25,38 +25,36 @@ #include -class gri_fft_complex; - class gr_fft_vcc; typedef boost::shared_ptr gr_fft_vcc_sptr; gr_fft_vcc_sptr -gr_make_fft_vcc (int fft_size, bool forward, const std::vector window); +gr_make_fft_vcc (int fft_size, bool forward, const std::vector &window, bool shift=false); /*! * \brief Compute forward or reverse FFT. complex vector in / complex vector out. - * \ingroup block + * \ingroup dft_blk + * + * Abstract base class */ - class gr_fft_vcc : public gr_sync_block { +protected: friend gr_fft_vcc_sptr - gr_make_fft_vcc (int fft_size, bool forward, const std::vector window); + gr_make_fft_vcc (int fft_size, bool forward, const std::vector &window, bool shift); - unsigned int d_fft_size; + unsigned int d_fft_size; std::vector d_window; - gri_fft_complex *d_fft; + bool d_forward; + bool d_shift; - gr_fft_vcc (int fft_size, bool forward, const std::vector window); + gr_fft_vcc (const std::string &name, int fft_size, bool forward, + const std::vector &window, bool shift); public: ~gr_fft_vcc (); - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - bool set_window(const std::vector window); + bool set_window(const std::vector &window); }; - #endif /* INCLUDED_GR_FFT_VCC_H */ diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.i b/gnuradio-core/src/lib/general/gr_fft_vcc.i index 435b5834..24757137 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 Free Software Foundation, Inc. + * Copyright 2004,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -23,13 +23,13 @@ GR_SWIG_BLOCK_MAGIC(gr, fft_vcc) gr_fft_vcc_sptr -gr_make_fft_vcc (int fft_size, bool forward, const std::vector window); +gr_make_fft_vcc (int fft_size, bool forward, const std::vector window, bool shift=false); class gr_fft_vcc : public gr_sync_block { protected: - gr_fft_vcc (int fft_size, bool forward, const std::vector window); + gr_fft_vcc (int fft_size, bool forward, const std::vector &window, bool shift); public: - bool set_window(const std::vector window); + bool set_window(const std::vector &window); }; diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc new file mode 100644 index 00000000..f69d2e84 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc @@ -0,0 +1,104 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_fft_vcc_sptr +gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector &window, bool shift) +{ + return gr_fft_vcc_sptr (new gr_fft_vcc_fftw (fft_size, forward, window, shift)); +} + +gr_fft_vcc_fftw::gr_fft_vcc_fftw (int fft_size, bool forward, + const std::vector &window, bool shift) + : gr_fft_vcc("fft_vcc_fftw", fft_size, forward, window, shift) +{ + d_fft = new gri_fft_complex (d_fft_size, forward); +} + +gr_fft_vcc_fftw::~gr_fft_vcc_fftw () +{ + delete d_fft; +} + +int +gr_fft_vcc_fftw::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + unsigned int input_data_size = input_signature()->sizeof_stream_item (0); + unsigned int output_data_size = output_signature()->sizeof_stream_item (0); + + int count = 0; + + while (count++ < noutput_items){ + + // copy input into optimally aligned buffer + + if (d_window.size()){ + gr_complex *dst = d_fft->get_inbuf(); + for (unsigned int i = 0; i < d_fft_size; i++) // apply window + dst[i] = in[i] * d_window[i]; + } + else { + if(!d_forward && d_shift) { // apply an ifft shift on the data + gr_complex *dst = d_fft->get_inbuf(); + unsigned int len = (unsigned int)(floor(d_fft_size/2.0)); // half length of complex array + memcpy(&dst[0], &in[len], sizeof(gr_complex)*(d_fft_size - len)); + memcpy(&dst[d_fft_size - len], &in[0], sizeof(gr_complex)*len); + } + else { + memcpy (d_fft->get_inbuf(), in, input_data_size); + } + } + + // compute the fft + d_fft->execute (); + + // copy result to our output + if(d_forward && d_shift) { // apply a fft shift on the data + unsigned int len = (unsigned int)(ceil(d_fft_size/2.0)); + memcpy(&out[0], &d_fft->get_outbuf()[len], sizeof(gr_complex)*(d_fft_size - len)); + memcpy(&out[d_fft_size - len], &d_fft->get_outbuf()[0], sizeof(gr_complex)*len); + } + else { + memcpy (out, d_fft->get_outbuf (), output_data_size); + } + + in += d_fft_size; + out += d_fft_size; + } + + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h new file mode 100644 index 00000000..c026162e --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007,2008 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. + */ + +#ifndef INCLUDED_GR_FFT_VCC_FFTW_H +#define INCLUDED_GR_FFT_VCC_FFTW_H + +#include + +class gri_fft_complex; + +gr_fft_vcc_sptr +gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector &window, bool shift=false); + +/*! + * \brief Compute forward or reverse FFT. complex vector in / complex vector out. + * \ingroup dft_blk + * + * Concrete class that uses FFTW. + */ +class gr_fft_vcc_fftw : public gr_fft_vcc +{ + friend gr_fft_vcc_sptr + gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector &window, bool shift); + + gri_fft_complex *d_fft; + + gr_fft_vcc_fftw (int fft_size, bool forward, const std::vector &window, bool shift); + + public: + ~gr_fft_vcc_fftw (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif /* INCLUDED_GR_FFT_VCC_FFTW_H */ diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.cc b/gnuradio-core/src/lib/general/gr_fft_vfc.cc index f6c14f98..df68af7e 100644 --- a/gnuradio-core/src/lib/general/gr_fft_vfc.cc +++ b/gnuradio-core/src/lib/general/gr_fft_vfc.cc @@ -29,6 +29,8 @@ #include #include #include +#include +#include // FIXME after this is working, change to use native real to complex fft. diff --git a/gnuradio-core/src/lib/general/gr_fft_vfc.h b/gnuradio-core/src/lib/general/gr_fft_vfc.h index d9f7d35a..054a383e 100644 --- a/gnuradio-core/src/lib/general/gr_fft_vfc.h +++ b/gnuradio-core/src/lib/general/gr_fft_vfc.h @@ -35,7 +35,7 @@ gr_make_fft_vfc (int fft_size, bool forward, const std::vector); /*! * \brief Compute forward FFT. float vector in / complex vector out. - * \ingroup block + * \ingroup dft_blk */ class gr_fft_vfc : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_firdes.cc b/gnuradio-core/src/lib/general/gr_firdes.cc index 7b449af9..8efeb343 100644 --- a/gnuradio-core/src/lib/general/gr_firdes.cc +++ b/gnuradio-core/src/lib/general/gr_firdes.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -50,6 +50,53 @@ static double Izero(double x) // === Low Pass === // +vector +gr_firdes::low_pass_2(double gain, + double sampling_freq, // Hz + double cutoff_freq, // Hz BEGINNING of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // attenuation dB + win_type window_type, + double beta) // used only with Kaiser +{ + sanity_check_1f (sampling_freq, cutoff_freq, transition_width); + + int ntaps = compute_ntaps_windes (sampling_freq, transition_width, + attenuation_dB); + + // construct the truncated ideal impulse response + // [sin(x)/x for the low pass case] + + vector taps(ntaps); + vector w = window (window_type, ntaps, beta); + + int M = (ntaps - 1) / 2; + double fwT0 = 2 * M_PI * cutoff_freq / sampling_freq; + for (int n = -M; n <= M; n++){ + if (n == 0) + taps[n + M] = fwT0 / M_PI * w[n + M]; + else { + // a little algebra gets this into the more familiar sin(x)/x form + taps[n + M] = sin (n * fwT0) / (n * M_PI) * w[n + M]; + } + } + + // find the factor to normalize the gain, fmax. + // For low-pass, gain @ zero freq = 1.0 + + double fmax = taps[0 + M]; + for (int n = 1; n <= M; n++) + fmax += 2 * taps[n + M]; + + gain /= fmax; // normalize + + for (int i = 0; i < ntaps; i++) + taps[i] *= gain; + + + return taps; +} + vector gr_firdes::low_pass (double gain, double sampling_freq, @@ -74,7 +121,7 @@ gr_firdes::low_pass (double gain, for (int n = -M; n <= M; n++){ if (n == 0) - taps[n + M] = fwT0 / M_PI * w[n + M]; + taps[n + M] = fwT0 / M_PI * w[n + M]; else { // a little algebra gets this into the more familiar sin(x)/x form taps[n + M] = sin (n * fwT0) / (n * M_PI) * w[n + M]; @@ -96,22 +143,71 @@ gr_firdes::low_pass (double gain, return taps; } + // // === High Pass === // +vector +gr_firdes::high_pass_2 (double gain, + double sampling_freq, + double cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // attenuation dB + win_type window_type, + double beta) // used only with Kaiser +{ + sanity_check_1f (sampling_freq, cutoff_freq, transition_width); + + int ntaps = compute_ntaps_windes (sampling_freq, transition_width, + attenuation_dB); + + // construct the truncated ideal impulse response times the window function + + vector taps(ntaps); + vector w = window (window_type, ntaps, beta); + + int M = (ntaps - 1) / 2; + double fwT0 = 2 * M_PI * cutoff_freq / sampling_freq; + + for (int n = -M; n <= M; n++){ + if (n == 0) + taps[n + M] = (1 - (fwT0 / M_PI)) * w[n + M]; + else { + // a little algebra gets this into the more familiar sin(x)/x form + taps[n + M] = -sin (n * fwT0) / (n * M_PI) * w[n + M]; + } + } + + // find the factor to normalize the gain, fmax. + // For high-pass, gain @ fs/2 freq = 1.0 + + double fmax = taps[0 + M]; + for (int n = 1; n <= M; n++) + fmax += 2 * taps[n + M] * cos (n * M_PI); + + gain /= fmax; // normalize + + for (int i = 0; i < ntaps; i++) + taps[i] *= gain; + + + return taps; +} + + vector gr_firdes::high_pass (double gain, - double sampling_freq, - double cutoff_freq, // Hz center of transition band - double transition_width, // Hz width of transition band - win_type window_type, - double beta) // used only with Kaiser + double sampling_freq, + double cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + win_type window_type, + double beta) // used only with Kaiser { sanity_check_1f (sampling_freq, cutoff_freq, transition_width); int ntaps = compute_ntaps (sampling_freq, transition_width, - window_type, beta); + window_type, beta); // construct the truncated ideal impulse response times the window function @@ -129,15 +225,15 @@ gr_firdes::high_pass (double gain, taps[n + M] = -sin (n * fwT0) / (n * M_PI) * w[n + M]; } } - + // find the factor to normalize the gain, fmax. // For high-pass, gain @ fs/2 freq = 1.0 - + double fmax = taps[0 + M]; for (int n = 1; n <= M; n++) fmax += 2 * taps[n + M] * cos (n * M_PI); - gain /= fmax; // normalize + gain /= fmax; // normalize for (int i = 0; i < ntaps; i++) taps[i] *= gain; @@ -146,9 +242,57 @@ gr_firdes::high_pass (double gain, } // -// === Band Pass === +// === Band Pass === // +vector +gr_firdes::band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz center of transition band + double high_cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // attenuation dB + win_type window_type, + double beta) // used only with Kaiser +{ + sanity_check_2f (sampling_freq, + low_cutoff_freq, + high_cutoff_freq, transition_width); + + int ntaps = compute_ntaps_windes (sampling_freq, transition_width, + attenuation_dB); + + vector taps(ntaps); + vector w = window (window_type, ntaps, beta); + + int M = (ntaps - 1) / 2; + double fwT0 = 2 * M_PI * low_cutoff_freq / sampling_freq; + double fwT1 = 2 * M_PI * high_cutoff_freq / sampling_freq; + + for (int n = -M; n <= M; n++){ + if (n == 0) + taps[n + M] = (fwT1 - fwT0) / M_PI * w[n + M]; + else { + taps[n + M] = (sin (n * fwT1) - sin (n * fwT0)) / (n * M_PI) * w[n + M]; + } + } + + // find the factor to normalize the gain, fmax. + // For band-pass, gain @ center freq = 1.0 + + double fmax = taps[0 + M]; + for (int n = 1; n <= M; n++) + fmax += 2 * taps[n + M] * cos (n * (fwT0 + fwT1) * 0.5); + + gain /= fmax; // normalize + + for (int i = 0; i < ntaps; i++) + taps[i] *= gain; + + return taps; +} + + vector gr_firdes::band_pass (double gain, double sampling_freq, @@ -201,6 +345,47 @@ gr_firdes::band_pass (double gain, // === Complex Band Pass === // +vector +gr_firdes::complex_band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz center of transition band + double high_cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // attenuation dB + win_type window_type, + double beta) // used only with Kaiser +{ + sanity_check_2f_c (sampling_freq, + low_cutoff_freq, + high_cutoff_freq, transition_width); + + int ntaps = compute_ntaps_windes (sampling_freq, transition_width, + attenuation_dB); + + + + vector taps(ntaps); + vector lptaps(ntaps); + vector w = window (window_type, ntaps, beta); + + lptaps = low_pass_2(gain,sampling_freq,(high_cutoff_freq - low_cutoff_freq)/2,transition_width,attenuation_dB,window_type,beta); + + gr_complex *optr = &taps[0]; + float *iptr = &lptaps[0]; + float freq = M_PI * (high_cutoff_freq + low_cutoff_freq)/sampling_freq; + float phase=0; + if (lptaps.size() & 01) { + phase = - freq * ( lptaps.size() >> 1 ); + } else phase = - freq/2.0 * ((1 + 2*lptaps.size()) >> 1); + for(unsigned int i=0;i gr_firdes::complex_band_pass (double gain, double sampling_freq, @@ -240,11 +425,59 @@ gr_firdes::complex_band_pass (double gain, return taps; } - // // === Band Reject === // +vector +gr_firdes::band_reject_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz center of transition band + double high_cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // attenuation dB + win_type window_type, + double beta) // used only with Kaiser +{ + sanity_check_2f (sampling_freq, + low_cutoff_freq, + high_cutoff_freq, transition_width); + + int ntaps = compute_ntaps_windes (sampling_freq, transition_width, + attenuation_dB); + + // construct the truncated ideal impulse response times the window function + + vector taps(ntaps); + vector w = window (window_type, ntaps, beta); + + int M = (ntaps - 1) / 2; + double fwT0 = 2 * M_PI * low_cutoff_freq / sampling_freq; + double fwT1 = 2 * M_PI * high_cutoff_freq / sampling_freq; + + for (int n = -M; n <= M; n++){ + if (n == 0) + taps[n + M] = 1.0 + ((fwT0 - fwT1) / M_PI * w[n + M]); + else { + taps[n + M] = (sin (n * fwT0) - sin (n * fwT1)) / (n * M_PI) * w[n + M]; + } + } + + // find the factor to normalize the gain, fmax. + // For band-reject, gain @ zero freq = 1.0 + + double fmax = taps[0 + M]; + for (int n = 1; n <= M; n++) + fmax += 2 * taps[n + M]; + + gain /= fmax; // normalize + + for (int i = 0; i < ntaps; i++) + taps[i] *= gain; + + return taps; +} + vector gr_firdes::band_reject (double gain, double sampling_freq, @@ -427,6 +660,19 @@ static const float width_factor[5] = { // indexed by win_type 10.0 // WIN_KAISER }; +int +gr_firdes::compute_ntaps_windes(double sampling_freq, + double transition_width, // this is frequency, not relative frequency + double attenuation_dB) +{ + // Based on formula from Multirate Signal Processing for + // Communications Systems, fredric j harris + int ntaps = (int)(attenuation_dB*sampling_freq/(22.0*transition_width)); + if ((ntaps & 1) == 0) // if even... + ntaps++; // ...make odd + return ntaps; +} + int gr_firdes::compute_ntaps (double sampling_freq, double transition_width, @@ -493,6 +739,12 @@ gr_firdes::window (win_type type, int ntaps, double beta) taps[n] = 0.42 - 0.50 * cos ((2*M_PI * n) / (M-1)) - 0.08 * cos ((4*M_PI * n) / (M-1)); break; + case WIN_BLACKMAN_hARRIS: + for (int n = -ntaps/2; n < ntaps/2; n++) + taps[n+ntaps/2] = 0.35875 + 0.48829*cos((2*M_PI * n) / (float)M) + + 0.14128*cos((4*M_PI * n) / (float)M) + 0.01168*cos((6*M_PI * n) / (float)M); + break; + #if 0 case WIN_KAISER: for (int n = 0; n < ntaps; n++) @@ -518,7 +770,7 @@ gr_firdes::window (win_type type, int ntaps, double beta) #endif default: - throw std::runtime_error ("not_implemented"); + throw std::out_of_range ("gr_firdes:window: type out of range"); } return taps; diff --git a/gnuradio-core/src/lib/general/gr_firdes.h b/gnuradio-core/src/lib/general/gr_firdes.h index 831c0ee6..de775bd0 100644 --- a/gnuradio-core/src/lib/general/gr_firdes.h +++ b/gnuradio-core/src/lib/general/gr_firdes.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -29,6 +29,7 @@ /*! * \brief Finite Impulse Response (FIR) filter design functions. + * \ingroup filter_design */ class gr_firdes { @@ -39,7 +40,8 @@ class gr_firdes { WIN_HANN = 1, // max attenuation 44 dB WIN_BLACKMAN = 2, // max attenuation 74 dB WIN_RECTANGULAR = 3, - WIN_KAISER = 4 // max attenuation a function of beta, google it + WIN_KAISER = 4, // max attenuation a function of beta, google it + WIN_BLACKMAN_hARRIS = 5, }; @@ -67,6 +69,33 @@ class gr_firdes { win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser + /*! + * \brief use "window method" to design a low-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB required stopband attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuatin --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + low_pass_2 (double gain, + double sampling_freq, + double cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + /*! * \brief use "window method" to design a high-pass FIR filter * @@ -81,6 +110,7 @@ class gr_firdes { * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector high_pass (double gain, double sampling_freq, @@ -89,6 +119,33 @@ class gr_firdes { win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser + /*! + * \brief use "window method" to design a high-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + high_pass_2 (double gain, + double sampling_freq, + double cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + /*! * \brief use "window method" to design a band-pass FIR filter * @@ -113,6 +170,34 @@ class gr_firdes { win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser + /*! + * \brief use "window method" to design a band-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser /*! * \brief use "window method" to design a complex band-pass FIR filter @@ -139,6 +224,34 @@ class gr_firdes { win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser + /*! + * \brief use "window method" to design a complex band-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + complex_band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser /*! * \brief use "window method" to design a band-reject FIR filter @@ -165,6 +278,35 @@ class gr_firdes { win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser + /*! + * \brief use "window method" to design a band-reject FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + band_reject_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + /*!\brief design a Hilbert Transform Filter * * \p ntaps: Number of taps, must be odd @@ -172,7 +314,7 @@ class gr_firdes { * \p beta: Only used for Kaiser */ static std::vector - hilbert (unsigned int ntaps, + hilbert (unsigned int ntaps = 19, win_type windowtype = WIN_RECTANGULAR, double beta = 6.76); @@ -220,6 +362,10 @@ private: static int compute_ntaps (double sampling_freq, double transition_width, win_type window_type, double beta); + + static int compute_ntaps_windes (double sampling_freq, + double transition_width, + double attenuation_dB); }; #endif diff --git a/gnuradio-core/src/lib/general/gr_firdes.i b/gnuradio-core/src/lib/general/gr_firdes.i index a0ea2f45..d49434ad 100644 --- a/gnuradio-core/src/lib/general/gr_firdes.i +++ b/gnuradio-core/src/lib/general/gr_firdes.i @@ -1,4 +1,24 @@ /* -*- C++ -*- */ +/* + * Copyright 2002,2008 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. + */ /*! * \brief Finite Impulse Response (FIR) filter design functions. @@ -14,7 +34,8 @@ class gr_firdes { WIN_HANN = 1, // max attenuation 44 dB WIN_BLACKMAN = 2, // max attenuation 74 dB WIN_RECTANGULAR = 3, - WIN_KAISER = 4 // max attenuation variable with beta, google it + WIN_KAISER = 4, // max attenuation variable with beta, google it + WIN_BLACKMAN_hARRIS = 5, }; // ... class methods ... @@ -39,7 +60,35 @@ class gr_firdes { double cutoff_freq, // Hz center of transition band double transition_width, // Hz width of transition band win_type window = WIN_HAMMING, - double beta = 6.76); // used only with Kaiser + double beta = 6.76 // used only with Kaiser + ) throw(std::out_of_range); + + /*! + * \brief use "window method" to design a low-pass FIR filter + * using alternative design criteria + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + static std::vector + low_pass_2 (double gain, + double sampling_freq, + double cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation + win_type window = WIN_HAMMING, + double beta = 6.76 // used only with Kaiser + ) throw(std::out_of_range); /*! * \brief use "window method" to design a high-pass FIR filter @@ -55,14 +104,44 @@ class gr_firdes { * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector high_pass (double gain, double sampling_freq, double cutoff_freq, // Hz center of transition band double transition_width, // Hz width of transition band win_type window = WIN_HAMMING, + double beta = 6.76 // used only with Kaiser + ) throw(std::out_of_range); + + /*! + * \brief use "window method" to design a high-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + high_pass_2 (double gain, + double sampling_freq, + double cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser + /*! * \brief use "window method" to design a band-pass FIR filter * @@ -78,6 +157,7 @@ class gr_firdes { * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector band_pass (double gain, double sampling_freq, @@ -85,8 +165,38 @@ class gr_firdes { double high_cutoff_freq, // Hz center of transition band double transition_width, // Hz width of transition band win_type window = WIN_HAMMING, - double beta = 6.76); // used only with Kaiser + double beta = 6.76 // used only with Kaiser + ) throw(std::out_of_range); + + + /*! + * \brief use "window method" to design a band-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + static std::vector + band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser /*! * \brief use "window method" to design a band-reject FIR filter @@ -110,10 +220,40 @@ class gr_firdes { double low_cutoff_freq, // Hz center of transition band double high_cutoff_freq, // Hz center of transition band double transition_width, // Hz width of transition band + win_type window = WIN_HAMMING, // used only with Kaiser + double beta = 6.76 + ) throw(std::out_of_range); + + + /*! + * \brief use "window method" to design a complex band-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + complex_band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser - /*! * \brief use "window method" to design a band-reject FIR filter * @@ -136,6 +276,37 @@ class gr_firdes { double low_cutoff_freq, // Hz center of transition band double high_cutoff_freq, // Hz center of transition band double transition_width, // Hz width of transition band + win_type window = WIN_HAMMING, // used only with Kaiser + double beta = 6.76 + ) throw(std::out_of_range); + + + /*! + * \brief use "window method" to design a band-reject FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + band_reject_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB win_type window = WIN_HAMMING, double beta = 6.76); // used only with Kaiser @@ -146,9 +317,10 @@ class gr_firdes { * \p beta: Only used for Kaiser */ static std::vector - hilbert (unsigned int ntaps, + hilbert (unsigned int ntaps = 19, win_type windowtype = WIN_RECTANGULAR, - double beta = 6.76); + double beta = 6.76 + ) throw(std::out_of_range); /*! * \brief design a Root Cosine FIR Filter (do we need a window?) @@ -164,7 +336,7 @@ class gr_firdes { double sampling_freq, double symbol_rate, // Symbol rate, NOT bitrate (unless BPSK) double alpha, // Excess Bandwidth Factor - int ntaps); + int ntaps) throw(std::out_of_range); /*! * \brief design a Gaussian filter @@ -178,10 +350,11 @@ class gr_firdes { gaussian (double gain, double spb, double bt, // Bandwidth to bitrate ratio - int ntaps); + int ntaps) throw(std::out_of_range); /*! * Return window given type, ntaps and optional beta. */ - static std::vector gr_firdes::window (win_type type, int ntaps, double beta); + static std::vector gr_firdes::window (win_type type, int ntaps, double beta) + throw(std::runtime_error); }; diff --git a/gnuradio-core/src/lib/general/gr_float_to_char.h b/gnuradio-core/src/lib/general/gr_float_to_char.h index 6d635b2e..e65072bf 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_char.h +++ b/gnuradio-core/src/lib/general/gr_float_to_char.h @@ -33,7 +33,7 @@ gr_make_float_to_char (); /*! * \brief Convert stream of float to a stream of char - * \ingroup converter + * \ingroup converter_blk */ class gr_float_to_char : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.cc b/gnuradio-core/src/lib/general/gr_float_to_complex.cc index 0c5c22d0..af878231 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.cc +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,15 +28,16 @@ #include gr_float_to_complex_sptr -gr_make_float_to_complex () +gr_make_float_to_complex (size_t vlen) { - return gr_float_to_complex_sptr (new gr_float_to_complex ()); + return gr_float_to_complex_sptr (new gr_float_to_complex (vlen)); } -gr_float_to_complex::gr_float_to_complex () +gr_float_to_complex::gr_float_to_complex (size_t vlen) : gr_sync_block ("gr_float_to_complex", - gr_make_io_signature (1, 2, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (gr_complex))) + gr_make_io_signature (1, 2, sizeof (float) * vlen), + gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen)), + d_vlen (vlen) { } @@ -51,12 +52,12 @@ gr_float_to_complex::work (int noutput_items, switch (input_items.size ()){ case 1: - for (int j = 0; j < noutput_items; j++) + for (int j = 0; j < noutput_items*d_vlen; j++) out[j] = gr_complex (r[j], 0); break; case 2: - for (int j = 0; j < noutput_items; j++) + for (int j = 0; j < noutput_items*d_vlen; j++) out[j] = gr_complex (r[j], i[j]); break; diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.h b/gnuradio-core/src/lib/general/gr_float_to_complex.h index 67dfa6b1..f6cc2485 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.h +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -30,17 +30,19 @@ class gr_float_to_complex; typedef boost::shared_ptr gr_float_to_complex_sptr; gr_float_to_complex_sptr -gr_make_float_to_complex (); +gr_make_float_to_complex (size_t vlen = 1); /*! * \brief Convert 1 or 2 streams of float to a stream of gr_complex - * \ingroup converter + * \ingroup converter_blk */ class gr_float_to_complex : public gr_sync_block { - friend gr_float_to_complex_sptr gr_make_float_to_complex (); - gr_float_to_complex (); + friend gr_float_to_complex_sptr gr_make_float_to_complex (size_t vlen); + gr_float_to_complex (size_t vlen); + + size_t d_vlen; public: virtual int work (int noutput_items, diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.i b/gnuradio-core/src/lib/general/gr_float_to_complex.i index 0dd0635b..5ed48533 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.i +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004, 2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,9 +22,9 @@ GR_SWIG_BLOCK_MAGIC(gr,float_to_complex) -gr_float_to_complex_sptr gr_make_float_to_complex (); +gr_float_to_complex_sptr gr_make_float_to_complex (size_t vlen = 1); class gr_float_to_complex : public gr_sync_block { - gr_float_to_complex (); + gr_float_to_complex (size_t vlen); }; diff --git a/gnuradio-core/src/lib/general/gr_float_to_short.h b/gnuradio-core/src/lib/general/gr_float_to_short.h index 3c6d60b8..e8534392 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_short.h +++ b/gnuradio-core/src/lib/general/gr_float_to_short.h @@ -33,7 +33,7 @@ gr_make_float_to_short (); /*! * \brief Convert stream of float to a stream of short - * \ingroup converter + * \ingroup converter_blk */ class gr_float_to_short : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_float_to_uchar.h b/gnuradio-core/src/lib/general/gr_float_to_uchar.h index 912753ac..3bca9c55 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_uchar.h +++ b/gnuradio-core/src/lib/general/gr_float_to_uchar.h @@ -33,7 +33,7 @@ gr_make_float_to_uchar (); /*! * \brief Convert stream of float to a stream of unsigned char - * \ingroup converter + * \ingroup converter_blk */ class gr_float_to_uchar : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_fmdet_cf.cc b/gnuradio-core/src/lib/general/gr_fmdet_cf.cc new file mode 100644 index 00000000..172ef127 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_fmdet_cf.cc @@ -0,0 +1,91 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#define M_TWOPI (2*M_PI) + +gr_fmdet_cf_sptr +gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl) +{ + return gr_fmdet_cf_sptr (new gr_fmdet_cf (samplerate, freq_low, freq_high, scl)); +} + +gr_fmdet_cf::gr_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl) + : gr_sync_block ("fmdet_cf", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + gr_make_io_signature (1, 1, sizeof (float))), + d_S1(0.1),d_S2(0.1), + d_S3(0.1),d_S4(0.1) +{ + float delta; + d_freqhi = freq_high; + d_freqlo = freq_low; + delta = (d_freqhi - d_freqlo); + d_scl = scl; + d_bias = 0.5*scl*(d_freqhi+d_freqlo)/delta; +} + +int +gr_fmdet_cf::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *iptr = (gr_complex *) input_items[0]; + float *optr = (float *) output_items[0]; + + int size = noutput_items; + + gr_complex Sdot,S0,S1=d_S1,S2=d_S2,S3=d_S3,S4=d_S4; + + while (size-- > 0) { + S0=*iptr++; + + Sdot = gr_complex(d_scl* + (-S0.real() + 8.0*S1.real() - 8.0*S3.real() + S4.real()), + d_scl* + (-S0.imag() + 8.0*S1.imag() - 8.0*S3.imag() + S4.imag())); + d_freq = (S2.real()*Sdot.imag()-S2.imag()*Sdot.real())/ + (S2.real()*S2.real()+S2.imag()*S2.imag()); + + S4=S3; + S3=S2; + S2=S1; + S1=S0; + + + *optr++ = d_freq-d_bias; + } + d_S1=S1; + d_S2=S2; + d_S3=S3; + d_S4=S4; + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_fmdet_cf.h b/gnuradio-core/src/lib/general/gr_fmdet_cf.h new file mode 100644 index 00000000..7e8be31b --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_fmdet_cf.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_GR_FMDET_CF_H +#define INCLUDED_GR_FMDET_CF_H + +#include + +class gr_fmdet_cf; +typedef boost::shared_ptr gr_fmdet_cf_sptr; + +gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl); + +/*! + * \brief Implements an IQ slope detector + * + * + * input: stream of complex; output: stream of floats + * + * This implements a limiting slope detector. The limiter is in the + * normalization by the magnitude of the sample + */ + +class gr_fmdet_cf : public gr_sync_block +{ + friend gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, + float freq_high, float scl); + + gr_complex d_S1,d_S2,d_S3,d_S4; + float d_freq,d_freqlo,d_freqhi,d_scl,d_bias; + gr_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_fmdet_cf.i b/gnuradio-core/src/lib/general/gr_fmdet_cf.i new file mode 100644 index 00000000..e1da717c --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_fmdet_cf.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,fmdet_cf) + +gr_fmdet_cf_sptr gr_make_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl); + +class gr_fmdet_cf : public gr_sync_block +{ + private: + gr_fmdet_cf (float samplerate, float freq_low, float freq_high, float scl); +}; diff --git a/gnuradio-core/src/lib/general/gr_framer_sink_1.cc b/gnuradio-core/src/lib/general/gr_framer_sink_1.cc index 63249d7a..9da271ba 100644 --- a/gnuradio-core/src/lib/general/gr_framer_sink_1.cc +++ b/gnuradio-core/src/lib/general/gr_framer_sink_1.cc @@ -28,6 +28,7 @@ #include #include #include +#include #define VERBOSE 0 @@ -52,13 +53,14 @@ gr_framer_sink_1::enter_have_sync() } inline void -gr_framer_sink_1::enter_have_header(int payload_len) +gr_framer_sink_1::enter_have_header(int payload_len, int whitener_offset) { if (VERBOSE) - fprintf(stderr, "@ enter_have_header (payload_len = %d)\n", payload_len); + fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", payload_len, whitener_offset); d_state = STATE_HAVE_HEADER; d_packetlen = payload_len; + d_packet_whitener_offset = whitener_offset; d_packetlen_cnt = 0; d_packet_byte = 0; d_packet_byte_index = 0; @@ -125,15 +127,26 @@ gr_framer_sink_1::work (int noutput_items, // we have a full header, check to see if it has been received properly if (header_ok()){ - int payload_len = header_payload_len(); - if (payload_len <= MAX_PKT_LEN) // reasonable? - enter_have_header(payload_len); // yes. - else - enter_search(); // no. + int payload_len; + int whitener_offset; + header_payload(&payload_len, &whitener_offset); + enter_have_header(payload_len, whitener_offset); + + if (d_packetlen == 0){ // check for zero-length payload + // build a zero-length message + // NOTE: passing header field as arg1 is not scalable + gr_message_sptr msg = + gr_make_message(0, d_packet_whitener_offset, 0, 0); + + d_target_queue->insert_tail(msg); // send it + msg.reset(); // free it up + + enter_search(); + } } else - enter_search(); // no. - break; // we're in a new state + enter_search(); // bad header + break; // we're in a new state } } break; @@ -151,7 +164,9 @@ gr_framer_sink_1::work (int noutput_items, if (d_packetlen_cnt == d_packetlen){ // packet is filled // build a message - gr_message_sptr msg = gr_make_message(0, 0, 0, d_packetlen_cnt); + // NOTE: passing header field as arg1 is not scalable + gr_message_sptr msg = + gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt); memcpy(msg->msg(), d_packet, d_packetlen_cnt); d_target_queue->insert_tail(msg); // send it diff --git a/gnuradio-core/src/lib/general/gr_framer_sink_1.h b/gnuradio-core/src/lib/general/gr_framer_sink_1.h index 8a572cb5..3f2e8aa8 100644 --- a/gnuradio-core/src/lib/general/gr_framer_sink_1.h +++ b/gnuradio-core/src/lib/general/gr_framer_sink_1.h @@ -34,7 +34,7 @@ gr_make_framer_sink_1 (gr_msg_queue_sptr target_queue); /*! * \brief Given a stream of bits and access_code flags, assemble packets. - * \ingroup sink + * \ingroup sink_blk * * input: stream of bytes from gr_correlate_access_code_bb * output: none. Pushes assembled packet into target queue @@ -70,6 +70,7 @@ class gr_framer_sink_1 : public gr_sync_block unsigned char d_packet_byte; // byte being assembled int d_packet_byte_index; // which bit of d_packet_byte we're working on int d_packetlen; // length of packet + int d_packet_whitener_offset; // offset into whitener string to use int d_packetlen_cnt; // how many so far protected: @@ -77,7 +78,7 @@ class gr_framer_sink_1 : public gr_sync_block void enter_search(); void enter_have_sync(); - void enter_have_header(int payload_len); + void enter_have_header(int payload_len, int whitener_offset); bool header_ok() { @@ -85,11 +86,13 @@ class gr_framer_sink_1 : public gr_sync_block return ((d_header >> 16) ^ (d_header & 0xffff)) == 0; } - int header_payload_len() + void header_payload(int *len, int *offset) { // header consists of two 16-bit shorts in network byte order - int t = (d_header >> 16) & 0xffff; - return t; + // payload length is lower 12 bits + // whitener offset is upper 4 bits + *len = (d_header >> 16) & 0x0fff; + *offset = (d_header >> 28) & 0x000f; } public: diff --git a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h index 9286bc49..4ba05d70 100644 --- a/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h +++ b/gnuradio-core/src/lib/general/gr_frequency_modulator_fc.h @@ -32,7 +32,7 @@ gr_frequency_modulator_fc_sptr gr_make_frequency_modulator_fc (double sensitivit /*! * \brief Frequency modulator block - * \ingroup block + * \ingroup modulation_blk * * float input; complex baseband output */ diff --git a/gnuradio-core/src/lib/general/gr_fxpt.h b/gnuradio-core/src/lib/general/gr_fxpt.h index e41577fe..520729f8 100644 --- a/gnuradio-core/src/lib/general/gr_fxpt.h +++ b/gnuradio-core/src/lib/general/gr_fxpt.h @@ -26,6 +26,7 @@ /*! * \brief fixed point sine and cosine and friends. + * \ingroup misc * * fixed pt radians * --------- -------- diff --git a/gnuradio-core/src/lib/general/gr_fxpt_nco.h b/gnuradio-core/src/lib/general/gr_fxpt_nco.h index 879c5ab4..ca0d54f0 100644 --- a/gnuradio-core/src/lib/general/gr_fxpt_nco.h +++ b/gnuradio-core/src/lib/general/gr_fxpt_nco.h @@ -27,9 +27,10 @@ /*! * \brief Numerically Controlled Oscillator (NCO) + * \ingroup misc */ class gr_fxpt_nco { - gr_int32 d_phase; + gr_uint32 d_phase; gr_int32 d_phase_inc; public: diff --git a/gnuradio-core/src/lib/general/gr_fxpt_vco.h b/gnuradio-core/src/lib/general/gr_fxpt_vco.h index 00dd855a..1ff968b7 100644 --- a/gnuradio-core/src/lib/general/gr_fxpt_vco.h +++ b/gnuradio-core/src/lib/general/gr_fxpt_vco.h @@ -27,6 +27,7 @@ /*! * \brief Voltage Controlled Oscillator (VCO) + * \ingroup misc */ class gr_fxpt_vco { gr_int32 d_phase; diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_b.cc b/gnuradio-core/src/lib/general/gr_glfsr_source_b.cc new file mode 100644 index 00000000..8fe61604 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_glfsr_source_b.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +gr_glfsr_source_b_sptr +gr_make_glfsr_source_b(int degree, bool repeat, int mask, int seed) +{ + return gr_glfsr_source_b_sptr(new gr_glfsr_source_b(degree, repeat, mask, seed)); +} + +gr_glfsr_source_b::gr_glfsr_source_b(int degree, bool repeat, int mask, int seed) + : gr_sync_block ("glfsr_source_b", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof(unsigned char))), + d_repeat(repeat), + d_index(0) +{ + if (degree < 1 || degree > 32) + throw std::runtime_error("gr_glfsr_source_b: degree must be between 1 and 32 inclusive"); + d_length = (unsigned int)((1ULL << degree)-1); + + if (mask == 0) + mask = gri_glfsr::glfsr_mask(degree); + d_glfsr = new gri_glfsr(mask, seed); +} + +gr_glfsr_source_b::~gr_glfsr_source_b() +{ + delete d_glfsr; +} + +int +gr_glfsr_source_b::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + char *out = (char *) output_items[0]; + if ((d_index > d_length) && d_repeat == false) + return -1; /* once through the sequence */ + + int i; + for (i = 0; i < noutput_items; i++) { + out[i] = d_glfsr->next_bit(); + d_index++; + if (d_index > d_length && d_repeat == false) + break; + } + + return i; +} + +int +gr_glfsr_source_b::mask() const +{ + return d_glfsr->mask(); +} diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_b.h b/gnuradio-core/src/lib/general/gr_glfsr_source_b.h new file mode 100644 index 00000000..cff8df11 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_glfsr_source_b.h @@ -0,0 +1,65 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_GLFSR_SOURCE_B_H +#define INCLUDED_GR_GLFSR_SOURCE_B_H + +#include + +class gri_glfsr; + +class gr_glfsr_source_b; +typedef boost::shared_ptr gr_glfsr_source_b_sptr; + +gr_glfsr_source_b_sptr gr_make_glfsr_source_b(int degree, bool repeat=true, int mask=0, int seed=1); + +/*! + * \brief Galois LFSR pseudo-random source + * \ingroup source_blk + */ +class gr_glfsr_source_b : public gr_sync_block +{ + private: + friend gr_glfsr_source_b_sptr + gr_make_glfsr_source_b(int degree, bool repeat, int mask, int seed); + + gri_glfsr *d_glfsr; + + bool d_repeat; + unsigned int d_index; + unsigned int d_length; + + gr_glfsr_source_b(int degree, bool repeat, int mask, int seed); + + public: + + ~gr_glfsr_source_b(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + unsigned int period() const { return d_length; } + int mask() const; +}; + +#endif /* INCLUDED_GR_GLFSR_SOURCE_B_H */ diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_b.i b/gnuradio-core/src/lib/general/gr_glfsr_source_b.i new file mode 100644 index 00000000..fe0a987f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_glfsr_source_b.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,glfsr_source_b); + +gr_glfsr_source_b_sptr +gr_make_glfsr_source_b(int degree, bool repeat=true, int mask=0, int seed=1) + throw (std::runtime_error); + +class gr_glfsr_source_b : public gr_sync_block +{ +protected: + gr_glfsr_source_b(int degree, bool repeat, int mask, int seed); + +public: + unsigned int period() const; + int mask() const; +}; diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_f.cc b/gnuradio-core/src/lib/general/gr_glfsr_source_f.cc new file mode 100644 index 00000000..8ef3a06c --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_glfsr_source_f.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +gr_glfsr_source_f_sptr +gr_make_glfsr_source_f(int degree, bool repeat, int mask, int seed) +{ + return gr_glfsr_source_f_sptr(new gr_glfsr_source_f(degree, repeat, mask, seed)); +} + +gr_glfsr_source_f::gr_glfsr_source_f(int degree, bool repeat, int mask, int seed) + : gr_sync_block ("glfsr_source_f", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof(float))), + d_repeat(repeat), + d_index(0) +{ + if (degree < 1 || degree > 32) + throw std::runtime_error("gr_glfsr_source_f: degree must be between 1 and 32 inclusive"); + d_length = (unsigned int)((1ULL << degree)-1); + + if (mask == 0) + mask = gri_glfsr::glfsr_mask(degree); + d_glfsr = new gri_glfsr(mask, seed); +} + +gr_glfsr_source_f::~gr_glfsr_source_f() +{ + delete d_glfsr; +} + +int +gr_glfsr_source_f::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *out = (float *) output_items[0]; + if ((d_index > d_length) && d_repeat == false) + return -1; /* once through the sequence */ + + int i; + for (i = 0; i < noutput_items; i++) { + out[i] = (float)d_glfsr->next_bit()*2.0-1.0; + d_index++; + if (d_index > d_length && d_repeat == false) + break; + } + + return i; +} + +int +gr_glfsr_source_f::mask() const +{ + return d_glfsr->mask(); +} diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_f.h b/gnuradio-core/src/lib/general/gr_glfsr_source_f.h new file mode 100644 index 00000000..00797080 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_glfsr_source_f.h @@ -0,0 +1,65 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_GLFSR_SOURCE_F_H +#define INCLUDED_GR_GLFSR_SOURCE_F_H + +#include + +class gri_glfsr; + +class gr_glfsr_source_f; +typedef boost::shared_ptr gr_glfsr_source_f_sptr; + +gr_glfsr_source_f_sptr gr_make_glfsr_source_f(int degree, bool repeat=true, int mask=0, int seed=1); + +/*! + * \brief Galois LFSR pseudo-random source generating float outputs -1.0 - 1.0 + * \ingroup source_blk + */ +class gr_glfsr_source_f : public gr_sync_block +{ + private: + friend gr_glfsr_source_f_sptr + gr_make_glfsr_source_f(int degree, bool repeat, int mask, int seed); + + gri_glfsr *d_glfsr; + + bool d_repeat; + unsigned int d_index; + unsigned int d_length; + + gr_glfsr_source_f(int degree, bool repeat, int mask, int seed); + + public: + + ~gr_glfsr_source_f(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + unsigned int period() const { return d_length; } + int mask() const; +}; + +#endif /* INCLUDED_GR_GLFSR_SOURCE_F_H */ diff --git a/gnuradio-core/src/lib/general/gr_glfsr_source_f.i b/gnuradio-core/src/lib/general/gr_glfsr_source_f.i new file mode 100644 index 00000000..d165ab89 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_glfsr_source_f.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,glfsr_source_f); + +gr_glfsr_source_f_sptr +gr_make_glfsr_source_f(int degree, bool repeat=true, int mask=0, int seed=1) + throw (std::runtime_error); + +class gr_glfsr_source_f : public gr_sync_block +{ +protected: + gr_glfsr_source_f(int degree, bool repeat, int mask, int seed); + +public: + unsigned int period() const; + int mask() const; +}; diff --git a/gnuradio-core/src/lib/general/gr_head.cc b/gnuradio-core/src/lib/general/gr_head.cc index 7f0506cd..94a00cc6 100644 --- a/gnuradio-core/src/lib/general/gr_head.cc +++ b/gnuradio-core/src/lib/general/gr_head.cc @@ -25,6 +25,7 @@ #endif #include #include +#include gr_head::gr_head (size_t sizeof_stream_item, int nitems) : gr_sync_block ("head", diff --git a/gnuradio-core/src/lib/general/gr_head.h b/gnuradio-core/src/lib/general/gr_head.h index 87f865d2..cd97d639 100644 --- a/gnuradio-core/src/lib/general/gr_head.h +++ b/gnuradio-core/src/lib/general/gr_head.h @@ -28,7 +28,7 @@ /*! * \brief copies the first N items to the output then signals done - * \ingroup block + * \ingroup slicedice_blk * * Useful for building test cases */ diff --git a/gnuradio-core/src/lib/general/gr_interleave.h b/gnuradio-core/src/lib/general/gr_interleave.h index 6f77c470..faffdd75 100644 --- a/gnuradio-core/src/lib/general/gr_interleave.h +++ b/gnuradio-core/src/lib/general/gr_interleave.h @@ -32,7 +32,7 @@ gr_interleave_sptr gr_make_interleave (size_t itemsize); /*! * \brief interleave N inputs to a single output - * \ingroup block + * \ingroup slicedice_blk */ class gr_interleave : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h b/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h index 53473707..c79a9370 100644 --- a/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h +++ b/gnuradio-core/src/lib/general/gr_interleaved_short_to_complex.h @@ -34,7 +34,7 @@ gr_make_interleaved_short_to_complex (); /*! * \brief Convert stream of interleaved shorts to a stream of complex - * \ingroup converter + * \ingroup converter_blk */ class gr_interleaved_short_to_complex : public gr_sync_decimator diff --git a/gnuradio-core/src/lib/general/gr_iqcomp_cc.cc b/gnuradio-core/src/lib/general/gr_iqcomp_cc.cc new file mode 100644 index 00000000..e0a2c08a --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_iqcomp_cc.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_iqcomp_cc_sptr +gr_make_iqcomp_cc (float mu) +{ + return gr_iqcomp_cc_sptr (new gr_iqcomp_cc (mu)); +} + +gr_iqcomp_cc::gr_iqcomp_cc (float mu) + : gr_sync_block ("iqcomp_cc", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + gr_make_io_signature (1, 1, sizeof (gr_complex))), + d_mu (mu) +{ + d_wi=0.0; + d_wq=0.0; +} + +int +gr_iqcomp_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *iptr = (gr_complex *) input_items[0]; + // gr_complex *optr = (gr_complex *) output_items[0]; + + for(int i = 0 ; i < noutput_items ; i++) { + float i_out = iptr[i].real() - iptr[i].imag() * d_wq; + float q_out = iptr[i].imag() - iptr[i].real() * d_wi; + d_wi += d_mu * q_out * iptr[i].real(); + d_wq += d_mu * i_out * iptr[i].imag(); + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_iqcomp_cc.h b/gnuradio-core/src/lib/general/gr_iqcomp_cc.h new file mode 100644 index 00000000..f4c6cf8e --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_iqcomp_cc.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + + +#ifndef INCLUDED_GR_IQCOMP_CC_H +#define INCLUDED_GR_IQCOMP_CC_H + +#include + +class gr_iqcomp_cc; +typedef boost::shared_ptr gr_iqcomp_cc_sptr; + +gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu); + +/*! + * \brief + * \ingroup misc_blk + */ +class gr_iqcomp_cc : public gr_sync_block +{ + friend gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu); + + float d_mu, d_wi, d_wq; + gr_iqcomp_cc (float mu); + + public: + float mu () const { return d_mu; } + void set_mu (float mu) { d_mu = mu; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_iqcomp_cc.i b/gnuradio-core/src/lib/general/gr_iqcomp_cc.i new file mode 100644 index 00000000..91710ad2 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_iqcomp_cc.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + + +GR_SWIG_BLOCK_MAGIC(gr,iqcomp_cc) + +gr_iqcomp_cc_sptr gr_make_iqcomp_cc (float mu); + +class gr_iqcomp_cc : public gr_sync_block +{ + private: + gr_iqcomp_cc (float mu); + + public: + float mu () const { return d_mu; } + void set_mu (float mu) { d_mu = mu; } +}; diff --git a/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc b/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc index 9fb99ea3..e38240a3 100644 --- a/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc +++ b/gnuradio-core/src/lib/general/gr_keep_one_in_n.cc @@ -26,6 +26,7 @@ #include #include +#include gr_keep_one_in_n_sptr gr_make_keep_one_in_n (size_t item_size, int n) diff --git a/gnuradio-core/src/lib/general/gr_keep_one_in_n.h b/gnuradio-core/src/lib/general/gr_keep_one_in_n.h index 1cc145a9..33782744 100644 --- a/gnuradio-core/src/lib/general/gr_keep_one_in_n.h +++ b/gnuradio-core/src/lib/general/gr_keep_one_in_n.h @@ -34,7 +34,7 @@ gr_make_keep_one_in_n (size_t item_size, int n); /*! * \brief decimate a stream, keeping one item out of every n. - * \ingroup block + * \ingroup slicedice_blk */ class gr_keep_one_in_n : public gr_block { diff --git a/gnuradio-core/src/lib/general/gr_kludge_copy.cc b/gnuradio-core/src/lib/general/gr_kludge_copy.cc index 2589322f..142c444c 100644 --- a/gnuradio-core/src/lib/general/gr_kludge_copy.cc +++ b/gnuradio-core/src/lib/general/gr_kludge_copy.cc @@ -31,7 +31,7 @@ gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize) { - return gr_kludge_copy_sptr(new gr_kludge_copy(itemsize)); + return gnuradio::get_initial_sptr(new gr_kludge_copy(itemsize)); } gr_kludge_copy::gr_kludge_copy(size_t itemsize) diff --git a/gnuradio-core/src/lib/general/gr_kludge_copy.h b/gnuradio-core/src/lib/general/gr_kludge_copy.h index 9ae5cda4..90fd047d 100644 --- a/gnuradio-core/src/lib/general/gr_kludge_copy.h +++ b/gnuradio-core/src/lib/general/gr_kludge_copy.h @@ -32,7 +32,7 @@ gr_kludge_copy_sptr gr_make_kludge_copy(size_t itemsize); /*! * \brief output[i] = input[i] - * \ingroup block + * \ingroup misc_blk * * This is a short term kludge to work around a problem with the hierarchical block impl. */ diff --git a/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h b/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h index 6485bb8b..f8497e4c 100644 --- a/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h +++ b/gnuradio-core/src/lib/general/gr_lfsr_32k_source_s.h @@ -33,7 +33,7 @@ gr_lfsr_32k_source_s_sptr gr_make_lfsr_32k_source_s (); /*! * \brief LFSR pseudo-random source with period of 2^15 bits (2^11 shorts) - * \ingroup source + * \ingroup source_blk * * This source is typically used along with gr_check_lfsr_32k_s to test * the USRP using its digital loopback mode. diff --git a/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h b/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h index 6f18816b..7b3a2c84 100644 --- a/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h +++ b/gnuradio-core/src/lib/general/gr_lms_dfe_cc.h @@ -33,7 +33,7 @@ gr_lms_dfe_cc_sptr gr_make_lms_dfe_cc (float lambda_ff, float lambda_fb, /*! * \brief Least-Mean-Square Decision Feedback Equalizer (complex in/out) - * \ingroup block + * \ingroup eq_blk */ class gr_lms_dfe_cc : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h b/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h index 8c1f3f9c..dd610c47 100644 --- a/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h +++ b/gnuradio-core/src/lib/general/gr_lms_dfe_ff.h @@ -33,7 +33,7 @@ gr_lms_dfe_ff_sptr gr_make_lms_dfe_ff (float lambda_ff, float lambda_fb, /*! * \brief Least-Mean-Square Decision Feedback Equalizer (float in/out) - * \ingroup block + * \ingroup eq_blk */ class gr_lms_dfe_ff : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_log2_const.h b/gnuradio-core/src/lib/general/gr_log2_const.h index 058fcfff..4ea42092 100644 --- a/gnuradio-core/src/lib/general/gr_log2_const.h +++ b/gnuradio-core/src/lib/general/gr_log2_const.h @@ -31,16 +31,16 @@ template static inline int gr_log2_const() { assert(0); return 0; } -template<> static inline int gr_log2_const<1>() { return 0; } -template<> static inline int gr_log2_const<2>() { return 1; } -template<> static inline int gr_log2_const<4>() { return 2; } -template<> static inline int gr_log2_const<8>() { return 3; } -template<> static inline int gr_log2_const<16>() { return 4; } -template<> static inline int gr_log2_const<32>() { return 5; } -template<> static inline int gr_log2_const<64>() { return 6; } -template<> static inline int gr_log2_const<128>() { return 7; } -template<> static inline int gr_log2_const<256>() { return 8; } -template<> static inline int gr_log2_const<512>() { return 9; } -template<> static inline int gr_log2_const<1024>(){ return 10; } +template<> inline int gr_log2_const<1>() { return 0; } +template<> inline int gr_log2_const<2>() { return 1; } +template<> inline int gr_log2_const<4>() { return 2; } +template<> inline int gr_log2_const<8>() { return 3; } +template<> inline int gr_log2_const<16>() { return 4; } +template<> inline int gr_log2_const<32>() { return 5; } +template<> inline int gr_log2_const<64>() { return 6; } +template<> inline int gr_log2_const<128>() { return 7; } +template<> inline int gr_log2_const<256>() { return 8; } +template<> inline int gr_log2_const<512>() { return 9; } +template<> inline int gr_log2_const<1024>(){ return 10; } #endif /* INCLUDED_GR_LOG2_CONST_H */ diff --git a/gnuradio-core/src/lib/general/gr_map_bb.cc b/gnuradio-core/src/lib/general/gr_map_bb.cc index 491316f7..b10dfea3 100644 --- a/gnuradio-core/src/lib/general/gr_map_bb.cc +++ b/gnuradio-core/src/lib/general/gr_map_bb.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -41,7 +41,7 @@ gr_map_bb::gr_map_bb (const std::vector &map) for (int i = 0; i < 0x100; i++) d_map[i] = i; - unsigned int size = std::max((size_t) 0x100, map.size()); + unsigned int size = std::min((size_t) 0x100, map.size()); for (unsigned int i = 0; i < size; i++) d_map[i] = map[i]; } diff --git a/gnuradio-core/src/lib/general/gr_map_bb.h b/gnuradio-core/src/lib/general/gr_map_bb.h index 041ce6ed..4986ab18 100644 --- a/gnuradio-core/src/lib/general/gr_map_bb.h +++ b/gnuradio-core/src/lib/general/gr_map_bb.h @@ -31,7 +31,7 @@ gr_map_bb_sptr gr_make_map_bb(const std::vector &map); /*! * \brief output[i] = map[input[i]] - * \ingroup block + * \ingroup coding_blk */ class gr_map_bb : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_math.h b/gnuradio-core/src/lib/general/gr_math.h index 414077b3..ea0f2002 100644 --- a/gnuradio-core/src/lib/general/gr_math.h +++ b/gnuradio-core/src/lib/general/gr_math.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003,2005 Free Software Foundation, Inc. + * Copyright 2003,2005,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,6 +27,14 @@ #ifndef _GR_MATH_H_ #define _GR_MATH_H_ +#include + +static inline bool +gr_is_power_of_2(long x) +{ + return x != 0 && (x & (x-1)) == 0; +} + long gr_gcd (long m, long n); // returns a non-zero value if value is "not-a-number" (NaN), and 0 otherwise @@ -42,6 +50,7 @@ int gr_signbit (double x); /*! * \brief Fast arc tangent using table lookup and linear interpolation + * \ingroup misc * * \param y component of input vector * \param x component of input vector @@ -57,4 +66,156 @@ int gr_signbit (double x); */ float gr_fast_atan2f(float y, float x); +static inline float gr_fast_atan2f(gr_complex z) +{ + return gr_fast_atan2f(z.imag(), z.real()); +} + +/* This bounds x by +/- clip without a branch */ +static inline float gr_branchless_clip(float x, float clip) +{ + float x1 = fabsf(x+clip); + float x2 = fabsf(x-clip); + x1 -= x2; + return 0.5*x1; +} + +static inline float gr_clip(float x, float clip) +{ + float y = x; + if(x > clip) + y = clip; + else if(x < -clip) + y = -clip; + return y; +} + +// Slicer Functions +static inline unsigned int gr_binary_slicer(float x) +{ + if(x >= 0) + return 1; + else + return 0; +} + +static inline unsigned int gr_quad_45deg_slicer(float r, float i) +{ + unsigned int ret = 0; + if((r >= 0) && (i >= 0)) + ret = 0; + else if((r < 0) && (i >= 0)) + ret = 1; + else if((r < 0) && (i < 0)) + ret = 2; + else + ret = 3; + return ret; +} + +static inline unsigned int gr_quad_0deg_slicer(float r, float i) +{ + unsigned int ret = 0; + if(fabsf(r) > fabsf(i)) { + if(r > 0) + ret = 0; + else + ret = 2; + } + else { + if(i > 0) + ret = 1; + else + ret = 3; + } + + return ret; +} + +static inline unsigned int gr_quad_45deg_slicer(gr_complex x) +{ + return gr_quad_45deg_slicer(x.real(), x.imag()); +} + +static inline unsigned int gr_quad_0deg_slicer(gr_complex x) +{ + return gr_quad_0deg_slicer(x.real(), x.imag()); +} + +// Branchless Slicer Functions +static inline unsigned int gr_branchless_binary_slicer(float x) +{ + return (x >= 0); +} + +static inline unsigned int gr_branchless_quad_0deg_slicer(float r, float i) +{ + unsigned int ret = 0; + ret = (fabsf(r) > fabsf(i)) * (((r < 0) << 0x1)); // either 0 (00) or 2 (10) + ret |= (fabsf(i) > fabsf(r)) * (((i < 0) << 0x1) | 0x1); // either 1 (01) or 3 (11) + + return ret; +} + +static inline unsigned int gr_branchless_quad_0deg_slicer(gr_complex x) +{ + return gr_branchless_quad_0deg_slicer(x.real(), x.imag()); +} + +static inline unsigned int gr_branchless_quad_45deg_slicer(float r, float i) +{ + char ret = (r <= 0); + ret |= ((i <= 0) << 1); + return (ret ^ ((ret & 0x2) >> 0x1)); +} + +static inline unsigned int gr_branchless_quad_45deg_slicer(gr_complex x) +{ + return gr_branchless_quad_45deg_slicer(x.real(), x.imag()); +} + +/*! + * \param x any value + * \param pow2 must be a power of 2 + * \returns \p x rounded down to a multiple of \p pow2. + */ +static inline size_t +gr_p2_round_down(size_t x, size_t pow2) +{ + return x & -pow2; +} + +/*! + * \param x any value + * \param pow2 must be a power of 2 + * \returns \p x rounded up to a multiple of \p pow2. + */ +static inline size_t +gr_p2_round_up(size_t x, size_t pow2) +{ + return gr_p2_round_down(x + pow2 - 1, pow2); +} + +/*! + * \param x any value + * \param pow2 must be a power of 2 + * \returns \p x modulo \p pow2. + */ +static inline size_t +gr_p2_modulo(size_t x, size_t pow2) +{ + return x & (pow2 - 1); +} + +/*! + * \param x any value + * \param pow2 must be a power of 2 + * \returns \p pow2 - (\p x modulo \p pow2). + */ +static inline size_t +gr_p2_modulo_neg(size_t x, size_t pow2) +{ + return pow2 - gr_p2_modulo(x, pow2); +} + #endif /* _GR_MATH_H_ */ diff --git a/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc new file mode 100644 index 00000000..49bbb8d3 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.cc @@ -0,0 +1,324 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2006,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + + +#define M_TWOPI (2*M_PI) +#define VERBOSE_MM 0 // Used for debugging symbol timing loop +#define VERBOSE_COSTAS 0 // Used for debugging phase and frequency tracking + +// Public constructor + +gr_mpsk_receiver_cc_sptr +gr_make_mpsk_receiver_cc(unsigned int M, float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel) +{ + return gr_mpsk_receiver_cc_sptr (new gr_mpsk_receiver_cc (M, theta, + alpha, beta, + fmin, fmax, + mu, gain_mu, + omega, gain_omega, omega_rel)); +} + +gr_mpsk_receiver_cc::gr_mpsk_receiver_cc (unsigned int M, float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel) + : gr_block ("mpsk_receiver_cc", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + gr_make_io_signature (1, 1, sizeof (gr_complex))), + d_M(M), d_theta(theta), + d_alpha(alpha), d_beta(beta), d_freq(0), d_max_freq(fmax), d_min_freq(fmin), d_phase(0), + d_current_const_point(0), + d_mu(mu), d_gain_mu(gain_mu), d_gain_omega(gain_omega), + d_omega_rel(omega_rel), d_max_omega(0), d_min_omega(0), + d_p_2T(0), d_p_1T(0), d_p_0T(0), d_c_2T(0), d_c_1T(0), d_c_0T(0) +{ + d_interp = new gri_mmse_fir_interpolator_cc(); + d_dl_idx = 0; + + set_omega(omega); + + if (omega <= 0.0) + throw std::out_of_range ("clock rate must be > 0"); + if (gain_mu < 0 || gain_omega < 0) + throw std::out_of_range ("Gains must be non-negative"); + + assert(d_interp->ntaps() <= DLLEN); + + // zero double length delay line. + for (unsigned int i = 0; i < 2 * DLLEN; i++) + d_dl[i] = gr_complex(0.0,0.0); + + // build the constellation vector from M + make_constellation(); + + // Select a phase detector and a decision maker for the modulation order + switch(d_M) { + case 2: // optimized algorithms for BPSK + d_phase_error_detector = &gr_mpsk_receiver_cc::phase_error_detector_bpsk; //bpsk; + d_decision = &gr_mpsk_receiver_cc::decision_bpsk; + break; + + case 4: // optimized algorithms for QPSK + d_phase_error_detector = &gr_mpsk_receiver_cc::phase_error_detector_qpsk; //qpsk; + d_decision = &gr_mpsk_receiver_cc::decision_qpsk; + break; + + default: // generic algorithms for any M (power of 2?) but not pretty + d_phase_error_detector = &gr_mpsk_receiver_cc::phase_error_detector_generic; + d_decision = &gr_mpsk_receiver_cc::decision_generic; + break; + } +} + +gr_mpsk_receiver_cc::~gr_mpsk_receiver_cc () +{ + delete d_interp; +} + +void +gr_mpsk_receiver_cc::forecast(int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size(); + for (unsigned i=0; i < ninputs; i++) + ninput_items_required[i] = (int) ceil((noutput_items * d_omega) + d_interp->ntaps()); +} + +// FIXME add these back in an test difference in performance +float +gr_mpsk_receiver_cc::phase_error_detector_qpsk(gr_complex sample) const +{ + float phase_error = 0; + if(fabsf(sample.real()) > fabsf(sample.imag())) { + if(sample.real() > 0) + phase_error = -sample.imag(); + else + phase_error = sample.imag(); + } + else { + if(sample.imag() > 0) + phase_error = sample.real(); + else + phase_error = -sample.real(); + } + + return phase_error; +} + +float +gr_mpsk_receiver_cc::phase_error_detector_bpsk(gr_complex sample) const +{ + return -(sample.real()*sample.imag()); +} + +float gr_mpsk_receiver_cc::phase_error_detector_generic(gr_complex sample) const +{ + //return gr_fast_atan2f(sample*conj(d_constellation[d_current_const_point])); + return -arg(sample*conj(d_constellation[d_current_const_point])); +} + +unsigned int +gr_mpsk_receiver_cc::decision_bpsk(gr_complex sample) const +{ + return (gr_branchless_binary_slicer(sample.real()) ^ 1); + //return gr_binary_slicer(sample.real()) ^ 1; +} + +unsigned int +gr_mpsk_receiver_cc::decision_qpsk(gr_complex sample) const +{ + unsigned int index; + + //index = gr_branchless_quad_0deg_slicer(sample); + index = gr_quad_0deg_slicer(sample); + return index; +} + +unsigned int +gr_mpsk_receiver_cc::decision_generic(gr_complex sample) const +{ + unsigned int min_m = 0; + float min_s = 65535; + + // Develop all possible constellation points and find the one that minimizes + // the Euclidean distance (error) with the sample + for(unsigned int m=0; m < d_M; m++) { + gr_complex diff = norm(d_constellation[m] - sample); + + if(fabs(diff.real()) < min_s) { + min_s = fabs(diff.real()); + min_m = m; + } + } + // Return the index of the constellation point that minimizes the error + return min_m; +} + + +void +gr_mpsk_receiver_cc::make_constellation() +{ + for(unsigned int m=0; m < d_M; m++) { + d_constellation.push_back(gr_expj((M_TWOPI/d_M)*m)); + } +} + +void +gr_mpsk_receiver_cc::mm_sampler(const gr_complex symbol) +{ + gr_complex sample, nco; + + d_mu--; // skip a number of symbols between sampling + d_phase += d_freq; // increment the phase based on the frequency of the rotation + + // Keep phase clamped and not walk to infinity + while(d_phase > M_TWOPI) + d_phase -= M_TWOPI; + while(d_phase < -M_TWOPI) + d_phase += M_TWOPI; + + nco = gr_expj(d_phase+d_theta); // get the NCO value for derotating the current sample + sample = nco*symbol; // get the downconverted symbol + + // Fill up the delay line for the interpolator + d_dl[d_dl_idx] = sample; + d_dl[(d_dl_idx + DLLEN)] = sample; // put this in the second half of the buffer for overflows + d_dl_idx = (d_dl_idx+1) % DLLEN; // Keep the delay line index in bounds +} + +void +gr_mpsk_receiver_cc::mm_error_tracking(gr_complex sample) +{ + gr_complex u, x, y; + float mm_error = 0; + + // Make sample timing corrections + + // set the delayed samples + d_p_2T = d_p_1T; + d_p_1T = d_p_0T; + d_p_0T = sample; + d_c_2T = d_c_1T; + d_c_1T = d_c_0T; + + d_current_const_point = (*this.*d_decision)(d_p_0T); // make a decision on the sample value + d_c_0T = d_constellation[d_current_const_point]; + + x = (d_c_0T - d_c_2T) * conj(d_p_1T); + y = (d_p_0T - d_p_2T) * conj(d_c_1T); + u = y - x; + mm_error = u.real(); // the error signal is in the real part + mm_error = gr_branchless_clip(mm_error, 1.0); // limit mm_val + + d_omega = d_omega + d_gain_omega * mm_error; // update omega based on loop error + d_omega = d_omega_mid + gr_branchless_clip(d_omega-d_omega_mid, d_omega_rel); // make sure we don't walk away + + d_mu += d_omega + d_gain_mu * mm_error; // update mu based on loop error + +#if VERBOSE_MM + printf("mm: mu: %f omega: %f mm_error: %f sample: %f+j%f constellation: %f+j%f\n", + d_mu, d_omega, mm_error, sample.real(), sample.imag(), + d_constellation[d_current_const_point].real(), d_constellation[d_current_const_point].imag()); +#endif +} + + +void +gr_mpsk_receiver_cc::phase_error_tracking(gr_complex sample) +{ + float phase_error = 0; + + // Make phase and frequency corrections based on sampled value + phase_error = (*this.*d_phase_error_detector)(sample); + + phase_error = gr_branchless_clip(phase_error, 1.0); + + d_freq += d_beta*phase_error; // adjust frequency based on error + d_phase += d_freq + d_alpha*phase_error; // adjust phase based on error + + // Make sure we stay within +-2pi + while(d_phase > M_TWOPI) + d_phase -= M_TWOPI; + while(d_phase < -M_TWOPI) + d_phase += M_TWOPI; + + // Limit the frequency range + d_freq = gr_branchless_clip(d_freq, d_max_freq); + +#if VERBOSE_COSTAS + printf("cl: phase_error: %f phase: %f freq: %f sample: %f+j%f constellation: %f+j%f\n", + phase_error, d_phase, d_freq, sample.real(), sample.imag(), + d_constellation[d_current_const_point].real(), d_constellation[d_current_const_point].imag()); +#endif +} + +int +gr_mpsk_receiver_cc::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + int i=0, o=0; + + while((o < noutput_items) && (i < ninput_items[0])) { + while((d_mu > 1) && (i < ninput_items[0])) { + mm_sampler(in[i]); // puts symbols into a buffer and adjusts d_mu + i++; + } + + if(i < ninput_items[0]) { + gr_complex interp_sample = d_interp->interpolate(&d_dl[d_dl_idx], d_mu); + + mm_error_tracking(interp_sample); // corrects M&M sample time + phase_error_tracking(interp_sample); // corrects phase and frequency offsets + + out[o++] = interp_sample; + } + } + + #if 0 + printf("ninput_items: %d noutput_items: %d consuming: %d returning: %d\n", + ninput_items[0], noutput_items, i, o); + #endif + + consume_each(i); + return o; +} diff --git a/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h new file mode 100644 index 00000000..024d74ad --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.h @@ -0,0 +1,315 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifndef INCLUDED_GR_MPSK_RECEIVER_CC_H +#define INCLUDED_GR_MPSK_RECEIVER_CC_H + +#include +#include +#include + +class gri_mmse_fir_interpolator_cc; + +class gr_mpsk_receiver_cc; +typedef boost::shared_ptr gr_mpsk_receiver_cc_sptr; + +// public constructor +gr_mpsk_receiver_cc_sptr +gr_make_mpsk_receiver_cc (unsigned int M, float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel); + +/*! + * \brief This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol + * synchronization. + * \ingroup sync_blk + * \ingroup demod_blk + * + * This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol + * synchronization. It performs carrier frequency and phase locking as well as symbol timing recovery. + * It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and + * PI/4 DQPSK. + * + * The phase and frequency synchronization are based on a Costas loop that finds the error of the incoming + * signal point compared to its nearest constellation point. The frequency and phase of the NCO are + * updated according to this error. There are optimized phase error detectors for BPSK and QPSK, but 8PSK + * is done using a brute-force computation of the constellation points to find the minimum. + * + * The symbol synchronization is done using a modified Mueller and Muller circuit from the paper: + * + * G. R. Danesfahani, T.G. Jeans, "Optimisation of modified Mueller and Muller + * algorithm," Electronics Letters, Vol. 31, no. 13, 22 June 1995, pp. 1032 - 1033. + * + * This circuit interpolates the downconverted sample (using the NCO developed by the Costas loop) + * every mu samples, then it finds the sampling error based on this and the past symbols and the decision + * made on the samples. Like the phase error detector, there are optimized decision algorithms for BPSK + * and QPKS, but 8PSK uses another brute force computation against all possible symbols. The modifications + * to the M&M used here reduce self-noise. + * + */ + +class gr_mpsk_receiver_cc : public gr_block +{ + public: + ~gr_mpsk_receiver_cc (); + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + + // Member functions related to the symbol tracking portion of the receiver + //! (M&M) Returns current value of mu + float mu() const { return d_mu;} + + //! (M&M) Returns current value of omega + float omega() const { return d_omega;} + + //! (M&M) Returns mu gain factor + float gain_mu() const { return d_gain_mu;} + + //! (M&M) Returns omega gain factor + float gain_omega() const { return d_gain_omega;} + + //! (M&M) Sets value of mu + void set_mu (float mu) { d_mu = mu; } + + //! (M&M) Sets value of omega and its min and max values + void set_omega (float omega) { + d_omega = omega; + d_min_omega = omega*(1.0 - d_omega_rel); + d_max_omega = omega*(1.0 + d_omega_rel); + d_omega_mid = 0.5*(d_min_omega+d_max_omega); + } + + //! (M&M) Sets value for mu gain factor + void set_gain_mu (float gain_mu) { d_gain_mu = gain_mu; } + + //! (M&M) Sets value for omega gain factor + void set_gain_omega (float gain_omega) { d_gain_omega = gain_omega; } + + + + // Member function related to the phase/frequency tracking portion of the receiver + //! (CL) Returns the value for alpha (the phase gain term) + float alpha() const { return d_alpha; } + + //! (CL) Returns the value of beta (the frequency gain term) + float beta() const { return d_beta; } + + //! (CL) Returns the current value of the frequency of the NCO in the Costas loop + float freq() const { return d_freq; } + + //! (CL) Returns the current value of the phase of the NCO in the Costal loop + float phase() const { return d_phase; } + + //! (CL) Sets the value for alpha (the phase gain term) + void set_alpha(float alpha) { d_alpha = alpha; } + + //! (CL) Setss the value of beta (the frequency gain term) + void set_beta(float beta) { d_beta = beta; } + + //! (CL) Sets the current value of the frequency of the NCO in the Costas loop + void set_freq(float freq) { d_freq = freq; } + + //! (CL) Setss the current value of the phase of the NCO in the Costal loop + void set_phase(float phase) { d_phase = phase; } + + +protected: + + /*! + * \brief Constructor to synchronize incoming M-PSK symbols + * + * \param M modulation order of the M-PSK modulation + * \param theta any constant phase rotation from the real axis of the constellation + * \param alpha gain parameter to adjust the phase in the Costas loop (~0.01) + * \param beta gain parameter to adjust the frequency in the Costas loop (~alpha^2/4) + * \param fmin minimum normalized frequency value the loop can achieve + * \param fmax maximum normalized frequency value the loop can achieve + * \param mu initial parameter for the interpolator [0,1] + * \param gain_mu gain parameter of the M&M error signal to adjust mu (~0.05) + * \param omega initial value for the number of symbols between samples (~number of samples/symbol) + * \param gain_omega gain parameter to adjust omega based on the error (~omega^2/4) + * \param omega_rel sets the maximum (omega*(1+omega_rel)) and minimum (omega*(1+omega_rel)) omega (~0.005) + * + * The constructor also chooses which phase detector and decision maker to use in the work loop based on the + * value of M. + */ + gr_mpsk_receiver_cc (unsigned int M, float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel); + + void make_constellation(); + void mm_sampler(const gr_complex symbol); + void mm_error_tracking(gr_complex sample); + void phase_error_tracking(gr_complex sample); + + +/*! + * \brief Phase error detector for MPSK modulations. + * + * \param sample the I&Q sample from which to determine the phase error + * + * This function determines the phase error for any MPSK signal by creating a set of PSK constellation points + * and doing a brute-force search to see which point minimizes the Euclidean distance. This point is then used + * to derotate the sample to the real-axis and a atan (using the fast approximation function) to determine the + * phase difference between the incoming sample and the real constellation point + * + * This should be cleaned up and made more efficient. + * + * \returns the approximated phase error. + */ + float phase_error_detector_generic(gr_complex sample) const; // generic for M but more costly + + /*! + * \brief Phase error detector for BPSK modulation. + * + * \param sample the I&Q sample from which to determine the phase error + * + * This function determines the phase error using a simple BPSK phase error detector by multiplying the real + * and imaginary (the error signal) components together. As the imaginary part goes to 0, so does this error. + * + * \returns the approximated phase error. + */ + float phase_error_detector_bpsk(gr_complex sample) const; // optimized for BPSK + + /*! + * \brief Phase error detector for QPSK modulation. + * + * \param sample the I&Q sample from which to determine the phase error + * + * This function determines the phase error using the limiter approach in a standard 4th order Costas loop + * + * \returns the approximated phase error. + */ + float phase_error_detector_qpsk(gr_complex sample) const; + + + + /*! + * \brief Decision maker for a generic MPSK constellation. + * + * \param sample the baseband I&Q sample from which to make the decision + * + * This decision maker is a generic implementation that does a brute-force search + * for the constellation point that minimizes the error between it and the incoming signal. + * + * \returns the index to d_constellation that minimizes the error/ + */ + unsigned int decision_generic(gr_complex sample) const; + + + /*! + * \brief Decision maker for BPSK constellation. + * + * \param sample the baseband I&Q sample from which to make the decision + * + * This decision maker is a simple slicer function that makes a decision on the symbol based on its + * placement on the real axis of greater than 0 or less than 0; the quadrature component is always 0. + * + * \returns the index to d_constellation that minimizes the error/ + */ + unsigned int decision_bpsk(gr_complex sample) const; + + + /*! + * \brief Decision maker for QPSK constellation. + * + * \param sample the baseband I&Q sample from which to make the decision + * + * This decision maker is a simple slicer function that makes a decision on the symbol based on its + * placement versus both axes and returns which quadrant the symbol is in. + * + * \returns the index to d_constellation that minimizes the error/ + */ + unsigned int decision_qpsk(gr_complex sample) const; + + private: + unsigned int d_M; + float d_theta; + + // Members related to carrier and phase tracking + float d_alpha; + float d_beta; + float d_freq, d_max_freq, d_min_freq; + float d_phase; + +/*! + * \brief Decision maker function pointer + * + * \param sample the baseband I&Q sample from which to make the decision + * + * This is a function pointer that is set in the constructor to point to the proper decision function + * for the specified constellation order. + * + * \return index into d_constellation point that is the closest to the recieved sample + */ + unsigned int (gr_mpsk_receiver_cc::*d_decision)(gr_complex sample) const; // pointer to decision function + + + std::vector d_constellation; + unsigned int d_current_const_point; + + // Members related to symbol timing + float d_mu, d_gain_mu; + float d_omega, d_gain_omega, d_omega_rel, d_max_omega, d_min_omega, d_omega_mid; + gr_complex d_p_2T, d_p_1T, d_p_0T; + gr_complex d_c_2T, d_c_1T, d_c_0T; + + /*! + * \brief Phase error detector function pointer + * + * \param sample the I&Q sample from which to determine the phase error + * + * This is a function pointer that is set in the constructor to point to the proper phase error detector + * function for the specified constellation order. + */ + float (gr_mpsk_receiver_cc::*d_phase_error_detector)(gr_complex sample) const; + + + //! get interpolated value + gri_mmse_fir_interpolator_cc *d_interp; + + //! delay line length. + static const unsigned int DLLEN = 8; + + //! delay line plus some length for overflow protection + gr_complex d_dl[2*DLLEN] __attribute__ ((aligned(8))); + + //! index to delay line + unsigned int d_dl_idx; + + friend gr_mpsk_receiver_cc_sptr + gr_make_mpsk_receiver_cc (unsigned int M, float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i new file mode 100644 index 00000000..88cb43e0 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_mpsk_receiver_cc.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,mpsk_receiver_cc); + +gr_mpsk_receiver_cc_sptr gr_make_mpsk_receiver_cc (unsigned int M, float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel); +class gr_mpsk_receiver_cc : public gr_block +{ + private: + gr_mpsk_receiver_cc (unsigned int M,float theta, + float alpha, float beta, + float fmin, float fmax, + float mu, float gain_mu, + float omega, float gain_omega, float omega_rel); +public: + float mu() const { return d_mu;} + float omega() const { return d_omega;} + float gain_mu() const { return d_gain_mu;} + float gain_omega() const { return d_gain_omega;} + void set_mu (float mu) { d_mu = mu; } + void set_omega (float omega) { + d_omega = omega; + d_min_omega = omega*(1.0 - d_omega_rel); + d_max_omega = omega*(1.0 + d_omega_rel); + } + void set_gain_mu (float gain_mu) { d_gain_mu = gain_mu; } + void set_gain_omega (float gain_omega) { d_gain_omega = gain_omega; } + float alpha() const { return d_alpha; } + float beta() const { return d_beta; } + float freq() const { return d_freq; } + float phase() const { return d_phase; } + void set_alpha(float alpha) { d_alpha = alpha; } + void set_beta(float beta) { d_beta = beta; } + void set_freq(float freq) { d_freq = freq; } + void set_phase(float phase) { d_phase = phase; } +}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_XX.cc.t b/gnuradio-core/src/lib/general/gr_multiply_XX.cc.t deleted file mode 100644 index 20001351..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_XX.cc.t +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ () -{ - return @SPTR_NAME@ (new @NAME@ ()); -} - -@NAME@::@NAME@ () - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc *= ((@I_TYPE@ *) input_items[j])[i]; - - *optr++ = (@O_TYPE@) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_XX.h.t b/gnuradio-core/src/lib/general/gr_multiply_XX.h.t deleted file mode 100644 index fc48fe0b..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_XX.h.t +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Multiply across all input streams. - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); - - @NAME@ (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_XX.i.t b/gnuradio-core/src/lib/general/gr_multiply_XX.i.t deleted file mode 100644 index a4bc4ce6..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_XX.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -class @NAME@ : public gr_sync_block -{ - private: - @NAME@ (); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_cc.cc b/gnuradio-core/src/lib/general/gr_multiply_cc.cc deleted file mode 100644 index d5f9bbfe..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_cc.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_cc_sptr -gr_make_multiply_cc () -{ - return gr_multiply_cc_sptr (new gr_multiply_cc ()); -} - -gr_multiply_cc::gr_multiply_cc () - : gr_sync_block ("multiply_cc", - gr_make_io_signature (1, -1, sizeof (gr_complex)), - gr_make_io_signature (1, 1, sizeof (gr_complex))) -{ -} - -int -gr_multiply_cc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - gr_complex acc = ((gr_complex *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc *= ((gr_complex *) input_items[j])[i]; - - *optr++ = (gr_complex) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_cc.h b/gnuradio-core/src/lib/general/gr_multiply_cc.h deleted file mode 100644 index cb43b365..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_cc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CC_H -#define INCLUDED_GR_MULTIPLY_CC_H - -#include - -class gr_multiply_cc; -typedef boost::shared_ptr gr_multiply_cc_sptr; - -gr_multiply_cc_sptr gr_make_multiply_cc (); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Multiply across all input streams. - */ -class gr_multiply_cc : public gr_sync_block -{ - friend gr_multiply_cc_sptr gr_make_multiply_cc (); - - gr_multiply_cc (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_cc.i b/gnuradio-core/src/lib/general/gr_multiply_cc.i deleted file mode 100644 index 1fae6f81..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_cc.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_cc) - -gr_multiply_cc_sptr gr_make_multiply_cc (); - -class gr_multiply_cc : public gr_sync_block -{ - private: - gr_multiply_cc (); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_XX.h.t b/gnuradio-core/src/lib/general/gr_multiply_const_XX.h.t deleted file mode 100644 index 9db22636..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_XX.h.t +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); - -/*! - * \brief output = input * constant - * \ingroup block - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); - - @O_TYPE@ d_k; // the constant - @NAME@ (@O_TYPE@ k); - - public: - @O_TYPE@ k () const { return d_k; } - void set_k (@O_TYPE@ k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_cc.h b/gnuradio-core/src/lib/general/gr_multiply_const_cc.h deleted file mode 100644 index 30c7d422..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_cc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_CC_H -#define INCLUDED_GR_MULTIPLY_CONST_CC_H - -#include - -class gr_multiply_const_cc; -typedef boost::shared_ptr gr_multiply_const_cc_sptr; - -gr_multiply_const_cc_sptr gr_make_multiply_const_cc (gr_complex k); - -/*! - * \brief output = input * constant - * \ingroup block - */ -class gr_multiply_const_cc : public gr_sync_block -{ - friend gr_multiply_const_cc_sptr gr_make_multiply_const_cc (gr_complex k); - - gr_complex d_k; // the constant - gr_multiply_const_cc (gr_complex k); - - public: - gr_complex k () const { return d_k; } - void set_k (gr_complex k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ff.h b/gnuradio-core/src/lib/general/gr_multiply_const_ff.h deleted file mode 100644 index ace389ad..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_ff.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_FF_H -#define INCLUDED_GR_MULTIPLY_CONST_FF_H - -#include - -class gr_multiply_const_ff; -typedef boost::shared_ptr gr_multiply_const_ff_sptr; - -gr_multiply_const_ff_sptr gr_make_multiply_const_ff (float k); - -/*! - * \brief output = input * constant - * \ingroup block - */ -class gr_multiply_const_ff : public gr_sync_block -{ - friend gr_multiply_const_ff_sptr gr_make_multiply_const_ff (float k); - - float d_k; // the constant - gr_multiply_const_ff (float k); - - public: - float k () const { return d_k; } - void set_k (float k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ii.h b/gnuradio-core/src/lib/general/gr_multiply_const_ii.h deleted file mode 100644 index 0478b0a1..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_ii.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_II_H -#define INCLUDED_GR_MULTIPLY_CONST_II_H - -#include - -class gr_multiply_const_ii; -typedef boost::shared_ptr gr_multiply_const_ii_sptr; - -gr_multiply_const_ii_sptr gr_make_multiply_const_ii (int k); - -/*! - * \brief output = input * constant - * \ingroup block - */ -class gr_multiply_const_ii : public gr_sync_block -{ - friend gr_multiply_const_ii_sptr gr_make_multiply_const_ii (int k); - - int d_k; // the constant - gr_multiply_const_ii (int k); - - public: - int k () const { return d_k; } - void set_k (int k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ss.h b/gnuradio-core/src/lib/general/gr_multiply_const_ss.h deleted file mode 100644 index 60f172c6..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_ss.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_SS_H -#define INCLUDED_GR_MULTIPLY_CONST_SS_H - -#include - -class gr_multiply_const_ss; -typedef boost::shared_ptr gr_multiply_const_ss_sptr; - -gr_multiply_const_ss_sptr gr_make_multiply_const_ss (short k); - -/*! - * \brief output = input * constant - * \ingroup block - */ -class gr_multiply_const_ss : public gr_sync_block -{ - friend gr_multiply_const_ss_sptr gr_make_multiply_const_ss (short k); - - short d_k; // the constant - gr_multiply_const_ss (short k); - - public: - short k () const { return d_k; } - void set_k (short k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vXX.h.t b/gnuradio-core/src/lib/general/gr_multiply_const_vXX.h.t deleted file mode 100755 index 0f43c5de..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_vXX.h.t +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k); - -/*! - * \brief output vector = input vector * constant vector (element-wise) - * \ingroup block - */ -class @NAME@ : public gr_sync_block -{ - 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); - - public: - const std::vector<@I_TYPE@> k () const { return d_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, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vcc.h b/gnuradio-core/src/lib/general/gr_multiply_const_vcc.h deleted file mode 100644 index 46149544..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_vcc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_VCC_H -#define INCLUDED_GR_MULTIPLY_CONST_VCC_H - -#include - -class gr_multiply_const_vcc; -typedef boost::shared_ptr gr_multiply_const_vcc_sptr; - -gr_multiply_const_vcc_sptr gr_make_multiply_const_vcc (const std::vector k); - -/*! - * \brief output vector = input vector * constant vector (element-wise) - * \ingroup block - */ -class gr_multiply_const_vcc : public gr_sync_block -{ - friend gr_multiply_const_vcc_sptr gr_make_multiply_const_vcc (const std::vector k); - - std::vector d_k; // the constant - gr_multiply_const_vcc (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vff.h b/gnuradio-core/src/lib/general/gr_multiply_const_vff.h deleted file mode 100644 index 325ecab4..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_vff.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_VFF_H -#define INCLUDED_GR_MULTIPLY_CONST_VFF_H - -#include - -class gr_multiply_const_vff; -typedef boost::shared_ptr gr_multiply_const_vff_sptr; - -gr_multiply_const_vff_sptr gr_make_multiply_const_vff (const std::vector k); - -/*! - * \brief output vector = input vector * constant vector (element-wise) - * \ingroup block - */ -class gr_multiply_const_vff : public gr_sync_block -{ - friend gr_multiply_const_vff_sptr gr_make_multiply_const_vff (const std::vector k); - - std::vector d_k; // the constant - gr_multiply_const_vff (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vii.h b/gnuradio-core/src/lib/general/gr_multiply_const_vii.h deleted file mode 100644 index 74bb35c8..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_vii.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_VII_H -#define INCLUDED_GR_MULTIPLY_CONST_VII_H - -#include - -class gr_multiply_const_vii; -typedef boost::shared_ptr gr_multiply_const_vii_sptr; - -gr_multiply_const_vii_sptr gr_make_multiply_const_vii (const std::vector k); - -/*! - * \brief output vector = input vector * constant vector (element-wise) - * \ingroup block - */ -class gr_multiply_const_vii : public gr_sync_block -{ - friend gr_multiply_const_vii_sptr gr_make_multiply_const_vii (const std::vector k); - - std::vector d_k; // the constant - gr_multiply_const_vii (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vss.h b/gnuradio-core/src/lib/general/gr_multiply_const_vss.h deleted file mode 100644 index fc89e676..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_const_vss.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_CONST_VSS_H -#define INCLUDED_GR_MULTIPLY_CONST_VSS_H - -#include - -class gr_multiply_const_vss; -typedef boost::shared_ptr gr_multiply_const_vss_sptr; - -gr_multiply_const_vss_sptr gr_make_multiply_const_vss (const std::vector k); - -/*! - * \brief output vector = input vector * constant vector (element-wise) - * \ingroup block - */ -class gr_multiply_const_vss : public gr_sync_block -{ - friend gr_multiply_const_vss_sptr gr_make_multiply_const_vss (const std::vector k); - - std::vector d_k; // the constant - gr_multiply_const_vss (const std::vector k); - - public: - const std::vector k () const { return d_k; } - void set_k (const std::vector k) { d_k = k; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_ff.cc b/gnuradio-core/src/lib/general/gr_multiply_ff.cc deleted file mode 100644 index 60a65202..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ff.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_ff_sptr -gr_make_multiply_ff () -{ - return gr_multiply_ff_sptr (new gr_multiply_ff ()); -} - -gr_multiply_ff::gr_multiply_ff () - : gr_sync_block ("multiply_ff", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (float))) -{ -} - -int -gr_multiply_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - float acc = ((float *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc *= ((float *) input_items[j])[i]; - - *optr++ = (float) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_ff.h b/gnuradio-core/src/lib/general/gr_multiply_ff.h deleted file mode 100644 index d868fa59..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ff.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_FF_H -#define INCLUDED_GR_MULTIPLY_FF_H - -#include - -class gr_multiply_ff; -typedef boost::shared_ptr gr_multiply_ff_sptr; - -gr_multiply_ff_sptr gr_make_multiply_ff (); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Multiply across all input streams. - */ -class gr_multiply_ff : public gr_sync_block -{ - friend gr_multiply_ff_sptr gr_make_multiply_ff (); - - gr_multiply_ff (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_ff.i b/gnuradio-core/src/lib/general/gr_multiply_ff.i deleted file mode 100644 index 3f00633e..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ff.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_ff) - -gr_multiply_ff_sptr gr_make_multiply_ff (); - -class gr_multiply_ff : public gr_sync_block -{ - private: - gr_multiply_ff (); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_ii.cc b/gnuradio-core/src/lib/general/gr_multiply_ii.cc deleted file mode 100644 index e67ac53b..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ii.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_ii_sptr -gr_make_multiply_ii () -{ - return gr_multiply_ii_sptr (new gr_multiply_ii ()); -} - -gr_multiply_ii::gr_multiply_ii () - : gr_sync_block ("multiply_ii", - gr_make_io_signature (1, -1, sizeof (int)), - gr_make_io_signature (1, 1, sizeof (int))) -{ -} - -int -gr_multiply_ii::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - int acc = ((int *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc *= ((int *) input_items[j])[i]; - - *optr++ = (int) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_ii.h b/gnuradio-core/src/lib/general/gr_multiply_ii.h deleted file mode 100644 index c3d4084e..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ii.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_II_H -#define INCLUDED_GR_MULTIPLY_II_H - -#include - -class gr_multiply_ii; -typedef boost::shared_ptr gr_multiply_ii_sptr; - -gr_multiply_ii_sptr gr_make_multiply_ii (); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Multiply across all input streams. - */ -class gr_multiply_ii : public gr_sync_block -{ - friend gr_multiply_ii_sptr gr_make_multiply_ii (); - - gr_multiply_ii (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_ii.i b/gnuradio-core/src/lib/general/gr_multiply_ii.i deleted file mode 100644 index 606a1aad..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ii.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_ii) - -gr_multiply_ii_sptr gr_make_multiply_ii (); - -class gr_multiply_ii : public gr_sync_block -{ - private: - gr_multiply_ii (); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_ss.cc b/gnuradio-core/src/lib/general/gr_multiply_ss.cc deleted file mode 100644 index 3d973447..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ss.cc +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_ss_sptr -gr_make_multiply_ss () -{ - return gr_multiply_ss_sptr (new gr_multiply_ss ()); -} - -gr_multiply_ss::gr_multiply_ss () - : gr_sync_block ("multiply_ss", - gr_make_io_signature (1, -1, sizeof (short)), - gr_make_io_signature (1, 1, sizeof (short))) -{ -} - -int -gr_multiply_ss::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - int ninputs = input_items.size (); - - for (int i = 0; i < noutput_items; i++){ - short acc = ((short *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc *= ((short *) input_items[j])[i]; - - *optr++ = (short) acc; - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_ss.h b/gnuradio-core/src/lib/general/gr_multiply_ss.h deleted file mode 100644 index 981e41fc..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ss.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_SS_H -#define INCLUDED_GR_MULTIPLY_SS_H - -#include - -class gr_multiply_ss; -typedef boost::shared_ptr gr_multiply_ss_sptr; - -gr_multiply_ss_sptr gr_make_multiply_ss (); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Multiply across all input streams. - */ -class gr_multiply_ss : public gr_sync_block -{ - friend gr_multiply_ss_sptr gr_make_multiply_ss (); - - gr_multiply_ss (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_ss.i b/gnuradio-core/src/lib/general/gr_multiply_ss.i deleted file mode 100644 index 9b33846c..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_ss.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_ss) - -gr_multiply_ss_sptr gr_make_multiply_ss (); - -class gr_multiply_ss : public gr_sync_block -{ - private: - gr_multiply_ss (); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_vXX.cc.t b/gnuradio-core/src/lib/general/gr_multiply_vXX.cc.t deleted file mode 100755 index 2aff6f68..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vXX.cc.t +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ (size_t nitems_per_block) -{ - return @SPTR_NAME@ (new @NAME@ (nitems_per_block)); -} - -@NAME@::@NAME@ (size_t nitems_per_block) - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*nitems_per_block)) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(@I_TYPE@); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc *= ((@I_TYPE@ *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (@O_TYPE@) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_vXX.h.t b/gnuradio-core/src/lib/general/gr_multiply_vXX.h.t deleted file mode 100755 index 560ec7cc..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vXX.h.t +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t nitems_per_block); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Element-wise multiply across all input vectors. - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t nitems_per_block); - - @NAME@ (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_vXX.i.t b/gnuradio-core/src/lib/general/gr_multiply_vXX.i.t deleted file mode 100755 index 34e97828..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vXX.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) - -@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t nitems_per_block); - -class @NAME@ : public gr_sync_block -{ - private: - @NAME@ (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_vcc.cc b/gnuradio-core/src/lib/general/gr_multiply_vcc.cc deleted file mode 100644 index 615f8e7a..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vcc.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_vcc_sptr -gr_make_multiply_vcc (size_t nitems_per_block) -{ - return gr_multiply_vcc_sptr (new gr_multiply_vcc (nitems_per_block)); -} - -gr_multiply_vcc::gr_multiply_vcc (size_t nitems_per_block) - : gr_sync_block ("multiply_vcc", - gr_make_io_signature (1, -1, sizeof (gr_complex)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (gr_complex)*nitems_per_block)) -{ -} - -int -gr_multiply_vcc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(gr_complex); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - gr_complex acc = ((gr_complex *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc *= ((gr_complex *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (gr_complex) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_vcc.h b/gnuradio-core/src/lib/general/gr_multiply_vcc.h deleted file mode 100644 index a5f671f6..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vcc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_VCC_H -#define INCLUDED_GR_MULTIPLY_VCC_H - -#include - -class gr_multiply_vcc; -typedef boost::shared_ptr gr_multiply_vcc_sptr; - -gr_multiply_vcc_sptr gr_make_multiply_vcc (size_t nitems_per_block); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Element-wise multiply across all input vectors. - */ -class gr_multiply_vcc : public gr_sync_block -{ - friend gr_multiply_vcc_sptr gr_make_multiply_vcc (size_t nitems_per_block); - - gr_multiply_vcc (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_vcc.i b/gnuradio-core/src/lib/general/gr_multiply_vcc.i deleted file mode 100644 index ae56042d..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vcc.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_vcc) - -gr_multiply_vcc_sptr gr_make_multiply_vcc (size_t nitems_per_block); - -class gr_multiply_vcc : public gr_sync_block -{ - private: - gr_multiply_vcc (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_vff.cc b/gnuradio-core/src/lib/general/gr_multiply_vff.cc deleted file mode 100644 index 9d13f7e5..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vff.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_vff_sptr -gr_make_multiply_vff (size_t nitems_per_block) -{ - return gr_multiply_vff_sptr (new gr_multiply_vff (nitems_per_block)); -} - -gr_multiply_vff::gr_multiply_vff (size_t nitems_per_block) - : gr_sync_block ("multiply_vff", - gr_make_io_signature (1, -1, sizeof (float)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (float)*nitems_per_block)) -{ -} - -int -gr_multiply_vff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(float); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - float acc = ((float *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc *= ((float *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (float) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_vff.h b/gnuradio-core/src/lib/general/gr_multiply_vff.h deleted file mode 100644 index 43ea8a0a..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vff.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_VFF_H -#define INCLUDED_GR_MULTIPLY_VFF_H - -#include - -class gr_multiply_vff; -typedef boost::shared_ptr gr_multiply_vff_sptr; - -gr_multiply_vff_sptr gr_make_multiply_vff (size_t nitems_per_block); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Element-wise multiply across all input vectors. - */ -class gr_multiply_vff : public gr_sync_block -{ - friend gr_multiply_vff_sptr gr_make_multiply_vff (size_t nitems_per_block); - - gr_multiply_vff (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_vff.i b/gnuradio-core/src/lib/general/gr_multiply_vff.i deleted file mode 100644 index 48a276d9..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vff.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_vff) - -gr_multiply_vff_sptr gr_make_multiply_vff (size_t nitems_per_block); - -class gr_multiply_vff : public gr_sync_block -{ - private: - gr_multiply_vff (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_vii.cc b/gnuradio-core/src/lib/general/gr_multiply_vii.cc deleted file mode 100644 index 06030cdd..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vii.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_vii_sptr -gr_make_multiply_vii (size_t nitems_per_block) -{ - return gr_multiply_vii_sptr (new gr_multiply_vii (nitems_per_block)); -} - -gr_multiply_vii::gr_multiply_vii (size_t nitems_per_block) - : gr_sync_block ("multiply_vii", - gr_make_io_signature (1, -1, sizeof (int)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (int)*nitems_per_block)) -{ -} - -int -gr_multiply_vii::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(int); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - int acc = ((int *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc *= ((int *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (int) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_vii.h b/gnuradio-core/src/lib/general/gr_multiply_vii.h deleted file mode 100644 index 64788477..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vii.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_VII_H -#define INCLUDED_GR_MULTIPLY_VII_H - -#include - -class gr_multiply_vii; -typedef boost::shared_ptr gr_multiply_vii_sptr; - -gr_multiply_vii_sptr gr_make_multiply_vii (size_t nitems_per_block); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Element-wise multiply across all input vectors. - */ -class gr_multiply_vii : public gr_sync_block -{ - friend gr_multiply_vii_sptr gr_make_multiply_vii (size_t nitems_per_block); - - gr_multiply_vii (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_vii.i b/gnuradio-core/src/lib/general/gr_multiply_vii.i deleted file mode 100644 index 9f94a8ef..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vii.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_vii) - -gr_multiply_vii_sptr gr_make_multiply_vii (size_t nitems_per_block); - -class gr_multiply_vii : public gr_sync_block -{ - private: - gr_multiply_vii (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_vss.cc b/gnuradio-core/src/lib/general/gr_multiply_vss.cc deleted file mode 100644 index e6bac98f..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vss.cc +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_multiply_vss_sptr -gr_make_multiply_vss (size_t nitems_per_block) -{ - return gr_multiply_vss_sptr (new gr_multiply_vss (nitems_per_block)); -} - -gr_multiply_vss::gr_multiply_vss (size_t nitems_per_block) - : gr_sync_block ("multiply_vss", - gr_make_io_signature (1, -1, sizeof (short)*nitems_per_block), - gr_make_io_signature (1, 1, sizeof (short)*nitems_per_block)) -{ -} - -int -gr_multiply_vss::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - int ninputs = input_items.size (); - int nitems_per_block = output_signature()->sizeof_stream_item(0)/sizeof(short); - - for (int i = 0; i < noutput_items; i++){ - for (int j = 0; j < nitems_per_block; j++){ - short acc = ((short *) input_items[0])[i*nitems_per_block+j]; - for (int k = 1; k < ninputs; k++) - acc *= ((short *) input_items[k])[i*nitems_per_block+j]; - - *optr++ = (short) acc; - } - } - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_multiply_vss.h b/gnuradio-core/src/lib/general/gr_multiply_vss.h deleted file mode 100644 index 97c0fc2a..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vss.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MULTIPLY_VSS_H -#define INCLUDED_GR_MULTIPLY_VSS_H - -#include - -class gr_multiply_vss; -typedef boost::shared_ptr gr_multiply_vss_sptr; - -gr_multiply_vss_sptr gr_make_multiply_vss (size_t nitems_per_block); - -/*! - * \brief output = prod (input_0, input_1, ...) - * \ingroup block - * - * Element-wise multiply across all input vectors. - */ -class gr_multiply_vss : public gr_sync_block -{ - friend gr_multiply_vss_sptr gr_make_multiply_vss (size_t nitems_per_block); - - gr_multiply_vss (size_t nitems_per_block); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_vss.i b/gnuradio-core/src/lib/general/gr_multiply_vss.i deleted file mode 100644 index 6d68918d..00000000 --- a/gnuradio-core/src/lib/general/gr_multiply_vss.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,multiply_vss) - -gr_multiply_vss_sptr gr_make_multiply_vss (size_t nitems_per_block); - -class gr_multiply_vss : public gr_sync_block -{ - private: - gr_multiply_vss (size_t nitems_per_block); -}; diff --git a/gnuradio-core/src/lib/general/gr_mute_XX.h.t b/gnuradio-core/src/lib/general/gr_mute_XX.h.t deleted file mode 100644 index 74a922a2..00000000 --- a/gnuradio-core/src/lib/general/gr_mute_XX.h.t +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute=false); - -/*! - * \brief output = input or zero if muted. - * \ingroup block - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute); - - bool d_mute; - @NAME@ (bool mute); - - public: - bool mute () const { return d_mute; } - void set_mute (bool mute) { d_mute = mute; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_cc.h b/gnuradio-core/src/lib/general/gr_mute_cc.h deleted file mode 100644 index 953855ff..00000000 --- a/gnuradio-core/src/lib/general/gr_mute_cc.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MUTE_CC_H -#define INCLUDED_GR_MUTE_CC_H - -#include - -class gr_mute_cc; -typedef boost::shared_ptr gr_mute_cc_sptr; - -gr_mute_cc_sptr gr_make_mute_cc (bool mute=false); - -/*! - * \brief output = input or zero if muted. - * \ingroup block - */ -class gr_mute_cc : public gr_sync_block -{ - friend gr_mute_cc_sptr gr_make_mute_cc (bool mute); - - bool d_mute; - gr_mute_cc (bool mute); - - public: - bool mute () const { return d_mute; } - void set_mute (bool mute) { d_mute = mute; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_ff.h b/gnuradio-core/src/lib/general/gr_mute_ff.h deleted file mode 100644 index 4be8dcc5..00000000 --- a/gnuradio-core/src/lib/general/gr_mute_ff.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MUTE_FF_H -#define INCLUDED_GR_MUTE_FF_H - -#include - -class gr_mute_ff; -typedef boost::shared_ptr gr_mute_ff_sptr; - -gr_mute_ff_sptr gr_make_mute_ff (bool mute=false); - -/*! - * \brief output = input or zero if muted. - * \ingroup block - */ -class gr_mute_ff : public gr_sync_block -{ - friend gr_mute_ff_sptr gr_make_mute_ff (bool mute); - - bool d_mute; - gr_mute_ff (bool mute); - - public: - bool mute () const { return d_mute; } - void set_mute (bool mute) { d_mute = mute; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_ii.h b/gnuradio-core/src/lib/general/gr_mute_ii.h deleted file mode 100644 index 37fead78..00000000 --- a/gnuradio-core/src/lib/general/gr_mute_ii.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MUTE_II_H -#define INCLUDED_GR_MUTE_II_H - -#include - -class gr_mute_ii; -typedef boost::shared_ptr gr_mute_ii_sptr; - -gr_mute_ii_sptr gr_make_mute_ii (bool mute=false); - -/*! - * \brief output = input or zero if muted. - * \ingroup block - */ -class gr_mute_ii : public gr_sync_block -{ - friend gr_mute_ii_sptr gr_make_mute_ii (bool mute); - - bool d_mute; - gr_mute_ii (bool mute); - - public: - bool mute () const { return d_mute; } - void set_mute (bool mute) { d_mute = mute; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_ss.h b/gnuradio-core/src/lib/general/gr_mute_ss.h deleted file mode 100644 index 62297a48..00000000 --- a/gnuradio-core/src/lib/general/gr_mute_ss.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_MUTE_SS_H -#define INCLUDED_GR_MUTE_SS_H - -#include - -class gr_mute_ss; -typedef boost::shared_ptr gr_mute_ss_sptr; - -gr_mute_ss_sptr gr_make_mute_ss (bool mute=false); - -/*! - * \brief output = input or zero if muted. - * \ingroup block - */ -class gr_mute_ss : public gr_sync_block -{ - friend gr_mute_ss_sptr gr_make_mute_ss (bool mute); - - bool d_mute; - gr_mute_ss (bool mute); - - public: - bool mute () const { return d_mute; } - void set_mute (bool mute) { d_mute = mute; } - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_nco.h b/gnuradio-core/src/lib/general/gr_nco.h index b8da597c..0e740a31 100644 --- a/gnuradio-core/src/lib/general/gr_nco.h +++ b/gnuradio-core/src/lib/general/gr_nco.h @@ -30,6 +30,7 @@ /*! * \brief base class template for Numerically Controlled Oscillator (NCO) + * \ingroup misc */ diff --git a/gnuradio-core/src/lib/general/gr_nlog10_ff.h b/gnuradio-core/src/lib/general/gr_nlog10_ff.h index 6e093023..1cb50f3c 100644 --- a/gnuradio-core/src/lib/general/gr_nlog10_ff.h +++ b/gnuradio-core/src/lib/general/gr_nlog10_ff.h @@ -31,7 +31,7 @@ gr_nlog10_ff_sptr gr_make_nlog10_ff (float n=1.0, unsigned vlen=1, float k=0); /*! * \brief output = n*log10(input) + k - * \ingroup block + * \ingroup math_blk */ class gr_nlog10_ff : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_noise_source_X.h.t b/gnuradio-core/src/lib/general/gr_noise_source_X.h.t deleted file mode 100644 index 2eac56fa..00000000 --- a/gnuradio-core/src/lib/general/gr_noise_source_X.h.t +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include -#include -#include - - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @NAME@_sptr; - -@NAME@_sptr -gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021); - -/*! - * \brief random number source - * \ingroup source - */ -class @NAME@ : public gr_sync_block { - friend @NAME@_sptr - gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed); - - gr_noise_type_t d_type; - float d_ampl; - gr_random d_rng; - - @NAME@ (gr_noise_type_t type, float ampl, long seed = 3021); - - public: - void set_type (gr_noise_type_t type) { d_type = type; } - void set_amplitude (float ampl) { d_ampl = ampl; } - - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_c.h b/gnuradio-core/src/lib/general/gr_noise_source_c.h deleted file mode 100644 index 09dd0d28..00000000 --- a/gnuradio-core/src/lib/general/gr_noise_source_c.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_NOISE_SOURCE_C_H -#define INCLUDED_GR_NOISE_SOURCE_C_H - -#include -#include -#include - - -class gr_noise_source_c; -typedef boost::shared_ptr gr_noise_source_c_sptr; - -gr_noise_source_c_sptr -gr_make_noise_source_c (gr_noise_type_t type, float ampl, long seed = 3021); - -/*! - * \brief random number source - * \ingroup source - */ -class gr_noise_source_c : public gr_sync_block { - friend gr_noise_source_c_sptr - gr_make_noise_source_c (gr_noise_type_t type, float ampl, long seed); - - gr_noise_type_t d_type; - float d_ampl; - gr_random d_rng; - - gr_noise_source_c (gr_noise_type_t type, float ampl, long seed = 3021); - - public: - void set_type (gr_noise_type_t type) { d_type = type; } - void set_amplitude (float ampl) { d_ampl = ampl; } - - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_f.h b/gnuradio-core/src/lib/general/gr_noise_source_f.h deleted file mode 100644 index 21fa0664..00000000 --- a/gnuradio-core/src/lib/general/gr_noise_source_f.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_NOISE_SOURCE_F_H -#define INCLUDED_GR_NOISE_SOURCE_F_H - -#include -#include -#include - - -class gr_noise_source_f; -typedef boost::shared_ptr gr_noise_source_f_sptr; - -gr_noise_source_f_sptr -gr_make_noise_source_f (gr_noise_type_t type, float ampl, long seed = 3021); - -/*! - * \brief random number source - * \ingroup source - */ -class gr_noise_source_f : public gr_sync_block { - friend gr_noise_source_f_sptr - gr_make_noise_source_f (gr_noise_type_t type, float ampl, long seed); - - gr_noise_type_t d_type; - float d_ampl; - gr_random d_rng; - - gr_noise_source_f (gr_noise_type_t type, float ampl, long seed = 3021); - - public: - void set_type (gr_noise_type_t type) { d_type = type; } - void set_amplitude (float ampl) { d_ampl = ampl; } - - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_i.h b/gnuradio-core/src/lib/general/gr_noise_source_i.h deleted file mode 100644 index 0e3a5806..00000000 --- a/gnuradio-core/src/lib/general/gr_noise_source_i.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_NOISE_SOURCE_I_H -#define INCLUDED_GR_NOISE_SOURCE_I_H - -#include -#include -#include - - -class gr_noise_source_i; -typedef boost::shared_ptr gr_noise_source_i_sptr; - -gr_noise_source_i_sptr -gr_make_noise_source_i (gr_noise_type_t type, float ampl, long seed = 3021); - -/*! - * \brief random number source - * \ingroup source - */ -class gr_noise_source_i : public gr_sync_block { - friend gr_noise_source_i_sptr - gr_make_noise_source_i (gr_noise_type_t type, float ampl, long seed); - - gr_noise_type_t d_type; - float d_ampl; - gr_random d_rng; - - gr_noise_source_i (gr_noise_type_t type, float ampl, long seed = 3021); - - public: - void set_type (gr_noise_type_t type) { d_type = type; } - void set_amplitude (float ampl) { d_ampl = ampl; } - - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_s.h b/gnuradio-core/src/lib/general/gr_noise_source_s.h deleted file mode 100644 index 8409c0fb..00000000 --- a/gnuradio-core/src/lib/general/gr_noise_source_s.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_NOISE_SOURCE_S_H -#define INCLUDED_GR_NOISE_SOURCE_S_H - -#include -#include -#include - - -class gr_noise_source_s; -typedef boost::shared_ptr gr_noise_source_s_sptr; - -gr_noise_source_s_sptr -gr_make_noise_source_s (gr_noise_type_t type, float ampl, long seed = 3021); - -/*! - * \brief random number source - * \ingroup source - */ -class gr_noise_source_s : public gr_sync_block { - friend gr_noise_source_s_sptr - gr_make_noise_source_s (gr_noise_type_t type, float ampl, long seed); - - gr_noise_type_t d_type; - float d_ampl; - gr_random d_rng; - - gr_noise_source_s (gr_noise_type_t type, float ampl, long seed = 3021); - - public: - void set_type (gr_noise_type_t type) { d_type = type; } - void set_amplitude (float ampl) { d_ampl = ampl; } - - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_nop.h b/gnuradio-core/src/lib/general/gr_nop.h index 72575fdb..60b20c5a 100644 --- a/gnuradio-core/src/lib/general/gr_nop.h +++ b/gnuradio-core/src/lib/general/gr_nop.h @@ -28,7 +28,7 @@ /*! * \brief Does nothing. Used for testing only. - * \ingroup block + * \ingroup misc_blk */ class gr_nop : public gr_block { diff --git a/gnuradio-core/src/lib/general/gr_null_sink.h b/gnuradio-core/src/lib/general/gr_null_sink.h index f1595b1f..66df5d13 100644 --- a/gnuradio-core/src/lib/general/gr_null_sink.h +++ b/gnuradio-core/src/lib/general/gr_null_sink.h @@ -28,7 +28,7 @@ /*! * \brief Bit bucket - * \ingroup sink + * \ingroup sink_blk */ class gr_null_sink : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_null_source.cc b/gnuradio-core/src/lib/general/gr_null_source.cc index 82853ccf..d11976e1 100644 --- a/gnuradio-core/src/lib/general/gr_null_source.cc +++ b/gnuradio-core/src/lib/general/gr_null_source.cc @@ -26,6 +26,7 @@ #include #include +#include gr_null_source::gr_null_source (size_t sizeof_stream_item) : gr_sync_block ("null_source", diff --git a/gnuradio-core/src/lib/general/gr_null_source.h b/gnuradio-core/src/lib/general/gr_null_source.h index 78fb0f72..63b1939b 100644 --- a/gnuradio-core/src/lib/general/gr_null_source.h +++ b/gnuradio-core/src/lib/general/gr_null_source.h @@ -27,7 +27,7 @@ /*! * \brief A source of zeros. - * \ingroup source + * \ingroup source_blk */ class gr_null_source : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.cc b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.cc new file mode 100644 index 00000000..5327c570 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.cc @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_ofdm_cyclic_prefixer_sptr +gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size) +{ + return gr_ofdm_cyclic_prefixer_sptr (new gr_ofdm_cyclic_prefixer (input_size, output_size)); +} + +gr_ofdm_cyclic_prefixer::gr_ofdm_cyclic_prefixer (size_t input_size, size_t output_size) + : gr_sync_interpolator ("ofdm_cyclic_prefixer", + gr_make_io_signature (1, 1, input_size*sizeof(gr_complex)), + gr_make_io_signature (1, 1, sizeof(gr_complex)), + output_size), + d_input_size(input_size), + d_output_size(output_size) + +{ +} + +int +gr_ofdm_cyclic_prefixer::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *in = (gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + size_t cp_size = d_output_size - d_input_size; + unsigned int i=0, j=0; + + j = cp_size; + for(i=0; i < d_input_size; i++,j++) { + out[j] = in[i]; + } + + j = d_input_size - cp_size; + for(i=0; i < cp_size; i++, j++) { + out[i] = in[j]; + } + + return d_output_size; +} diff --git a/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h new file mode 100644 index 00000000..eab91cd1 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2005,2006 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. + */ + +#ifndef INCLUDED_GR_OFDM_CYCLIC_PREFIXER_H +#define INCLUDED_GR_OFDM_CYCLIC_PREFIXER_H + +#include +#include + +class gr_ofdm_cyclic_prefixer; +typedef boost::shared_ptr gr_ofdm_cyclic_prefixer_sptr; + +gr_ofdm_cyclic_prefixer_sptr +gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size); + + +/*! + * \brief adds a cyclic prefix vector to an input size long ofdm + * symbol(vector) and converts vector to a stream output_size long. + * \ingroup ofdm_blk + */ +class gr_ofdm_cyclic_prefixer : public gr_sync_interpolator +{ + friend gr_ofdm_cyclic_prefixer_sptr + gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size); + + protected: + gr_ofdm_cyclic_prefixer (size_t input_size, size_t output_size); + + public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + private: + size_t d_input_size; + size_t d_output_size; +}; + +#endif /* INCLUDED_GR_OFDM_CYCLIC_PREFIXER_H */ diff --git a/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.i b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.i new file mode 100644 index 00000000..9fd8521a --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_cyclic_prefixer.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_cyclic_prefixer) + +gr_ofdm_cyclic_prefixer_sptr +gr_make_ofdm_cyclic_prefixer (size_t input_size, size_t output_size); + +class gr_ofdm_cyclic_prefixer : public gr_sync_interpolator +{ + protected: + gr_ofdm_cyclic_prefixer (size_t input_size, size_t output_size); + + public: +}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.cc b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.cc new file mode 100644 index 00000000..4da7690b --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.cc @@ -0,0 +1,41 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2005 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_ofdm_demapper_vcb::~gr_ofdm_demapper_vcb(void) +{ +} + +gr_ofdm_demapper_vcb::gr_ofdm_demapper_vcb (unsigned bits_per_symbol,unsigned int vlen) + : gr_sync_decimator ("ofdm_demapper_vcb", + gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen), + gr_make_io_signature (1, 1, sizeof(unsigned char)), + bits_per_symbol) +{ +} + diff --git a/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h new file mode 100644 index 00000000..979e1996 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_GR_OFDM_DEMAPPER_VCB_H +#define INCLUDED_GR_OFDM_DEMAPPER_VCB_H + +#include + +class gr_ofdm_demapper_vcb; +typedef boost::shared_ptr gr_ofdm_demapper_vcb_sptr; + +gr_ofdm_demapper_vcb_sptr +gr_make_ofdm_demapper_vcb (unsigned int bits_per_symbol, unsigned int vlen); + + +/*! + * \brief take a stream of vectors in from an FFT and demodulate to a stream of + * bits. Abstract class must be subclassed with specific mapping. + * + * \ingroup demodulation_blk + * \ingroup ofdm_blk + */ +class gr_ofdm_demapper_vcb : public gr_sync_decimator +{ + friend gr_ofdm_demapper_vcb_sptr + gr_make_ofdm_demapper_vcb (unsigned int bits_per_symbol, unsigned int vlen); + +protected: + gr_ofdm_demapper_vcb (unsigned int bits_per_symbol, unsigned int vlen); + +public: + ~gr_ofdm_demapper_vcb(void); +}; + + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.i b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.i new file mode 100644 index 00000000..e786c70f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_demapper_vcb.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_mapper_bcv) + +gr_ofdm_mapper_bcv_sptr +gr_make_ofdm_mapper_bcv (unsigned int bits_per_symbol, + unsigned int vlen); + +class gr_ofdm_mapper_bcv : public gr_sync_decimator +{ + protected: + gr_ofdm_mapper_bcv (unsigned int bits_per_symbol, + unsigned int vlen); + + public: +}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc new file mode 100644 index 00000000..fd27e6d4 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc @@ -0,0 +1,208 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#define VERBOSE 0 +#define M_TWOPI (2*M_PI) +#define MAX_NUM_SYMBOLS 1000 + +gr_ofdm_frame_acquisition_sptr +gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len) +{ + return gr_ofdm_frame_acquisition_sptr (new gr_ofdm_frame_acquisition (occupied_carriers, fft_length, cplen, + known_symbol, max_fft_shift_len)); +} + +gr_ofdm_frame_acquisition::gr_ofdm_frame_acquisition (unsigned occupied_carriers, unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len) + : gr_block ("ofdm_frame_acquisition", + gr_make_io_signature2 (2, 2, sizeof(gr_complex)*fft_length, sizeof(char)*fft_length), + gr_make_io_signature2 (2, 2, sizeof(gr_complex)*occupied_carriers, sizeof(char))), + d_occupied_carriers(occupied_carriers), + d_fft_length(fft_length), + d_cplen(cplen), + d_freq_shift_len(max_fft_shift_len), + d_known_symbol(known_symbol), + d_coarse_freq(0), + d_phase_count(0) +{ + d_symbol_phase_diff.resize(d_fft_length); + d_known_phase_diff.resize(d_occupied_carriers); + d_hestimate.resize(d_occupied_carriers); + + unsigned int i = 0, j = 0; + + std::fill(d_known_phase_diff.begin(), d_known_phase_diff.end(), 0); + for(i = 0; i < d_known_symbol.size()-2; i+=2) { + d_known_phase_diff[i] = norm(d_known_symbol[i] - d_known_symbol[i+2]); + } + + d_phase_lut = new gr_complex[(2*d_freq_shift_len+1) * MAX_NUM_SYMBOLS]; + for(i = 0; i <= 2*d_freq_shift_len; i++) { + for(j = 0; j < MAX_NUM_SYMBOLS; j++) { + d_phase_lut[j + i*MAX_NUM_SYMBOLS] = gr_expj(-M_TWOPI*d_cplen/d_fft_length*(i-d_freq_shift_len)*j); + } + } +} + +gr_ofdm_frame_acquisition::~gr_ofdm_frame_acquisition(void) +{ + delete [] d_phase_lut; +} + +void +gr_ofdm_frame_acquisition::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size (); + for (unsigned i = 0; i < ninputs; i++) + ninput_items_required[i] = 1; +} + +gr_complex +gr_ofdm_frame_acquisition::coarse_freq_comp(int freq_delta, int symbol_count) +{ + // return gr_complex(cos(-M_TWOPI*freq_delta*d_cplen/d_fft_length*symbol_count), + // sin(-M_TWOPI*freq_delta*d_cplen/d_fft_length*symbol_count)); + + return gr_expj(-M_TWOPI*freq_delta*d_cplen/d_fft_length*symbol_count); + + //return d_phase_lut[MAX_NUM_SYMBOLS * (d_freq_shift_len + freq_delta) + symbol_count]; +} + +void +gr_ofdm_frame_acquisition::correlate(const gr_complex *symbol, int zeros_on_left) +{ + unsigned int i,j; + + std::fill(d_symbol_phase_diff.begin(), d_symbol_phase_diff.end(), 0); + for(i = 0; i < d_fft_length-2; i++) { + d_symbol_phase_diff[i] = norm(symbol[i] - symbol[i+2]); + } + + // sweep through all possible/allowed frequency offsets and select the best + int index = 0; + float max = 0, sum=0; + for(i = zeros_on_left - d_freq_shift_len; i < zeros_on_left + d_freq_shift_len; i++) { + sum = 0; + for(j = 0; j < d_occupied_carriers; j++) { + sum += (d_known_phase_diff[j] * d_symbol_phase_diff[i+j]); + } + if(sum > max) { + max = sum; + index = i; + } + } + + // set the coarse frequency offset relative to the edge of the occupied tones + d_coarse_freq = index - zeros_on_left; +} + +void +gr_ofdm_frame_acquisition::calculate_equalizer(const gr_complex *symbol, int zeros_on_left) +{ + unsigned int i=0; + + // Set first tap of equalizer + d_hestimate[0] = d_known_symbol[0] / + (coarse_freq_comp(d_coarse_freq,1)*symbol[zeros_on_left+d_coarse_freq]); + + // set every even tap based on known symbol + // linearly interpolate between set carriers to set zero-filled carriers + // FIXME: is this the best way to set this? + for(i = 2; i < d_occupied_carriers; i+=2) { + d_hestimate[i] = d_known_symbol[i] / + (coarse_freq_comp(d_coarse_freq,1)*(symbol[i+zeros_on_left+d_coarse_freq])); + d_hestimate[i-1] = (d_hestimate[i] + d_hestimate[i-2]) / gr_complex(2.0, 0.0); + } + + // with even number of carriers; last equalizer tap is wrong + if(!(d_occupied_carriers & 1)) { + d_hestimate[d_occupied_carriers-1] = d_hestimate[d_occupied_carriers-2]; + } + + if(VERBOSE) { + fprintf(stderr, "Equalizer setting:\n"); + for(i = 0; i < d_occupied_carriers; i++) { + gr_complex sym = coarse_freq_comp(d_coarse_freq,1)*symbol[i+zeros_on_left+d_coarse_freq]; + gr_complex output = sym * d_hestimate[i]; + fprintf(stderr, "sym: %+.4f + j%+.4f ks: %+.4f + j%+.4f eq: %+.4f + j%+.4f ==> %+.4f + j%+.4f\n", + sym .real(), sym.imag(), + d_known_symbol[i].real(), d_known_symbol[i].imag(), + d_hestimate[i].real(), d_hestimate[i].imag(), + output.real(), output.imag()); + } + fprintf(stderr, "\n"); + } +} + +int +gr_ofdm_frame_acquisition::general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *symbol = (const gr_complex *)input_items[0]; + const char *signal_in = (const char *)input_items[1]; + + gr_complex *out = (gr_complex *) output_items[0]; + char *signal_out = (char *) output_items[1]; + + int unoccupied_carriers = d_fft_length - d_occupied_carriers; + int zeros_on_left = (int)ceil(unoccupied_carriers/2.0); + + if(signal_in[0]) { + d_phase_count = 1; + correlate(symbol, zeros_on_left); + calculate_equalizer(symbol, zeros_on_left); + signal_out[0] = 1; + } + else { + signal_out[0] = 0; + } + + for(unsigned int i = 0; i < d_occupied_carriers; i++) { + out[i] = d_hestimate[i]*coarse_freq_comp(d_coarse_freq,d_phase_count) + *symbol[i+zeros_on_left+d_coarse_freq]; + } + + d_phase_count++; + if(d_phase_count == MAX_NUM_SYMBOLS) { + d_phase_count = 1; + } + + consume_each(1); + return 1; +} diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h new file mode 100644 index 00000000..5db8dbb7 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.h @@ -0,0 +1,116 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006, 2007 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. + */ + +#ifndef INCLUDED_GR_OFDM_FRAME_ACQUISITION_H +#define INCLUDED_GR_OFDM_FRAME_ACQUISITION_H + + +#include +#include + +class gr_ofdm_frame_acquisition; +typedef boost::shared_ptr gr_ofdm_frame_acquisition_sptr; + +gr_ofdm_frame_acquisition_sptr +gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len=10); + +/*! + * \brief take a vector of complex constellation points in from an FFT + * and performs a correlation and equalization. + * \ingroup demodulation_blk + * \ingroup ofdm_blk + * + * This block takes the output of an FFT of a received OFDM symbol and finds the + * start of a frame based on two known symbols. It also looks at the surrounding + * bins in the FFT output for the correlation in case there is a large frequency + * shift in the data. This block assumes that the fine frequency shift has already + * been corrected and that the samples fall in the middle of one FFT bin. + * + * It then uses one of those known + * symbols to estimate the channel response over all subcarriers and does a simple + * 1-tap equalization on all subcarriers. This corrects for the phase and amplitude + * distortion caused by the channel. + */ + +class gr_ofdm_frame_acquisition : public gr_block +{ + /*! + * \brief Build an OFDM correlator and equalizer. + * \param occupied_carriers The number of subcarriers with data in the received symbol + * \param fft_length The size of the FFT vector (occupied_carriers + unused carriers) + * \param cplen The length of the cycle prefix + * \param known_symbol A vector of complex numbers representing a known symbol at the + * start of a frame (usually a BPSK PN sequence) + * \param max_fft_shift_len Set's the maximum distance you can look between bins for correlation + */ + friend gr_ofdm_frame_acquisition_sptr + gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len); + +protected: + gr_ofdm_frame_acquisition (unsigned int occupied_carriers, unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len); + + private: + unsigned char slicer(gr_complex x); + void correlate(const gr_complex *symbol, int zeros_on_left); + void calculate_equalizer(const gr_complex *symbol, int zeros_on_left); + gr_complex coarse_freq_comp(int freq_delta, int count); + + unsigned int d_occupied_carriers; // !< \brief number of subcarriers with data + unsigned int d_fft_length; // !< \brief length of FFT vector + unsigned int d_cplen; // !< \brief length of cyclic prefix in samples + unsigned int d_freq_shift_len; // !< \brief number of surrounding bins to look at for correlation + std::vector d_known_symbol; // !< \brief known symbols at start of frame + std::vector d_known_phase_diff; // !< \brief factor used in correlation from known symbol + std::vector d_symbol_phase_diff; // !< \brief factor used in correlation from received symbol + std::vector d_hestimate; // !< channel estimate + int d_coarse_freq; // !< \brief search distance in number of bins + unsigned int d_phase_count; // !< \brief accumulator for coarse freq correction + float d_snr_est; // !< an estimation of the signal to noise ratio + + gr_complex *d_phase_lut; // !< look-up table for coarse frequency compensation + + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + + public: + /*! + * \brief Return an estimate of the SNR of the channel + */ + float snr() { return d_snr_est; } + + ~gr_ofdm_frame_acquisition(void); + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.i b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.i new file mode 100644 index 00000000..0fd0bc58 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.i @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006, 2007 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_frame_acquisition); + +gr_ofdm_frame_acquisition_sptr +gr_make_ofdm_frame_acquisition (unsigned int occupied_carriers, + unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len=4); + +class gr_ofdm_frame_acquisition : public gr_sync_decimator +{ + protected: + gr_ofdm_frame_acquisition (unsigned int occupied_carriers, + unsigned int fft_length, + unsigned int cplen, + const std::vector &known_symbol, + unsigned int max_fft_shift_len); + + public: + float snr() { return d_snr_est; } + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc new file mode 100644 index 00000000..26a5cf0f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc @@ -0,0 +1,405 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define VERBOSE 0 + +inline void +gr_ofdm_frame_sink::enter_search() +{ + if (VERBOSE) + fprintf(stderr, "@ enter_search\n"); + + d_state = STATE_SYNC_SEARCH; + +} + +inline void +gr_ofdm_frame_sink::enter_have_sync() +{ + if (VERBOSE) + fprintf(stderr, "@ enter_have_sync\n"); + + d_state = STATE_HAVE_SYNC; + + // clear state of demapper + d_byte_offset = 0; + d_partial_byte = 0; + + d_header = 0; + d_headerbytelen_cnt = 0; + + // Resetting PLL + d_freq = 0.0; + d_phase = 0.0; + fill(d_dfe.begin(), d_dfe.end(), gr_complex(1.0,0.0)); +} + +inline void +gr_ofdm_frame_sink::enter_have_header() +{ + d_state = STATE_HAVE_HEADER; + + // header consists of two 16-bit shorts in network byte order + // payload length is lower 12 bits + // whitener offset is upper 4 bits + d_packetlen = (d_header >> 16) & 0x0fff; + d_packet_whitener_offset = (d_header >> 28) & 0x000f; + d_packetlen_cnt = 0; + + if (VERBOSE) + fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", + d_packetlen, d_packet_whitener_offset); +} + + +unsigned char gr_ofdm_frame_sink::slicer(const gr_complex x) +{ + unsigned int table_size = d_sym_value_out.size(); + unsigned int min_index = 0; + float min_euclid_dist = norm(x - d_sym_position[0]); + float euclid_dist = 0; + + for (unsigned int j = 1; j < table_size; j++){ + euclid_dist = norm(x - d_sym_position[j]); + if (euclid_dist < min_euclid_dist){ + min_euclid_dist = euclid_dist; + min_index = j; + } + } + return d_sym_value_out[min_index]; +} + +unsigned int gr_ofdm_frame_sink::demapper(const gr_complex *in, + unsigned char *out) +{ + unsigned int i=0, bytes_produced=0; + gr_complex carrier; + + carrier=gr_expj(d_phase); + + gr_complex accum_error = 0.0; + //while(i < d_occupied_carriers) { + while(i < d_subcarrier_map.size()) { + if(d_nresid > 0) { + d_partial_byte |= d_resid; + d_byte_offset += d_nresid; + d_nresid = 0; + d_resid = 0; + } + + //while((d_byte_offset < 8) && (i < d_occupied_carriers)) { + while((d_byte_offset < 8) && (i < d_subcarrier_map.size())) { + //gr_complex sigrot = in[i]*carrier*d_dfe[i]; + gr_complex sigrot = in[d_subcarrier_map[i]]*carrier*d_dfe[i]; + + if(d_derotated_output != NULL){ + d_derotated_output[i] = sigrot; + } + + unsigned char bits = slicer(sigrot); + + gr_complex closest_sym = d_sym_position[bits]; + + accum_error += sigrot * conj(closest_sym); + + // FIX THE FOLLOWING STATEMENT + if (norm(sigrot)> 0.001) d_dfe[i] += d_eq_gain*(closest_sym/sigrot-d_dfe[i]); + + i++; + + if((8 - d_byte_offset) >= d_nbits) { + d_partial_byte |= bits << (d_byte_offset); + d_byte_offset += d_nbits; + } + else { + d_nresid = d_nbits-(8-d_byte_offset); + int mask = ((1<<(8-d_byte_offset))-1); + d_partial_byte |= (bits & mask) << d_byte_offset; + d_resid = bits >> (8-d_byte_offset); + d_byte_offset += (d_nbits - d_nresid); + } + //printf("demod symbol: %.4f + j%.4f bits: %x partial_byte: %x byte_offset: %d resid: %x nresid: %d\n", + // in[i-1].real(), in[i-1].imag(), bits, d_partial_byte, d_byte_offset, d_resid, d_nresid); + } + + if(d_byte_offset == 8) { + //printf("demod byte: %x \n\n", d_partial_byte); + out[bytes_produced++] = d_partial_byte; + d_byte_offset = 0; + d_partial_byte = 0; + } + } + //std::cerr << "accum_error " << accum_error << std::endl; + + float angle = arg(accum_error); + + d_freq = d_freq - d_freq_gain*angle; + d_phase = d_phase + d_freq - d_phase_gain*angle; + if (d_phase >= 2*M_PI) d_phase -= 2*M_PI; + if (d_phase <0) d_phase += 2*M_PI; + + //if(VERBOSE) + // std::cerr << angle << "\t" << d_freq << "\t" << d_phase << "\t" << std::endl; + + return bytes_produced; +} + + +gr_ofdm_frame_sink_sptr +gr_make_ofdm_frame_sink(const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_carriers, + float phase_gain, float freq_gain) +{ + return gr_ofdm_frame_sink_sptr(new gr_ofdm_frame_sink(sym_position, sym_value_out, + target_queue, occupied_carriers, + phase_gain, freq_gain)); +} + + +gr_ofdm_frame_sink::gr_ofdm_frame_sink(const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_carriers, + float phase_gain, float freq_gain) + : gr_sync_block ("ofdm_frame_sink", + gr_make_io_signature2 (2, 2, sizeof(gr_complex)*occupied_carriers, sizeof(char)), + gr_make_io_signature (1, 1, sizeof(gr_complex)*occupied_carriers)), + d_target_queue(target_queue), d_occupied_carriers(occupied_carriers), + d_byte_offset(0), d_partial_byte(0), + d_resid(0), d_nresid(0),d_phase(0),d_freq(0),d_phase_gain(phase_gain),d_freq_gain(freq_gain), + d_eq_gain(0.05) +{ + std::string carriers = "FE7F"; + + // A bit hacky to fill out carriers to occupied_carriers length + int diff = (d_occupied_carriers - 4*carriers.length()); + while(diff > 7) { + carriers.insert(0, "f"); + carriers.insert(carriers.length(), "f"); + diff -= 8; + } + + // if there's extras left to be processed + // divide remaining to put on either side of current map + // all of this is done to stick with the concept of a carrier map string that + // can be later passed by the user, even though it'd be cleaner to just do this + // on the carrier map itself + int diff_left=0; + int diff_right=0; + + // dictionary to convert from integers to ascii hex representation + char abc[16] = {'0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + if(diff > 0) { + char c[2] = {0,0}; + + diff_left = (int)ceil((float)diff/2.0f); // number of carriers to put on the left side + c[0] = abc[(1 << diff_left) - 1]; // convert to bits and move to ASCI integer + carriers.insert(0, c); + + diff_right = diff - diff_left; // number of carriers to put on the right side + c[0] = abc[0xF^((1 << diff_right) - 1)]; // convert to bits and move to ASCI integer + carriers.insert(carriers.length(), c); + } + + // It seemed like such a good idea at the time... + // because we are only dealing with the occupied_carriers + // at this point, the diff_left in the following compensates + // for any offset from the 0th carrier introduced + unsigned int i,j,k; + for(i = 0; i < (d_occupied_carriers/4)+diff_left; i++) { + char c = carriers[i]; + for(j = 0; j < 4; j++) { + k = (strtol(&c, NULL, 16) >> (3-j)) & 0x1; + if(k) { + d_subcarrier_map.push_back(4*i + j - diff_left); + } + } + } + + // make sure we stay in the limit currently imposed by the occupied_carriers + if(d_subcarrier_map.size() > d_occupied_carriers) { + throw std::invalid_argument("gr_ofdm_mapper_bcv: subcarriers allocated exceeds size of occupied carriers"); + } + + d_bytes_out = new unsigned char[d_occupied_carriers]; + d_dfe.resize(occupied_carriers); + fill(d_dfe.begin(), d_dfe.end(), gr_complex(1.0,0.0)); + + set_sym_value_out(sym_position, sym_value_out); + + enter_search(); +} + +gr_ofdm_frame_sink::~gr_ofdm_frame_sink () +{ + delete [] d_bytes_out; +} + +bool +gr_ofdm_frame_sink::set_sym_value_out(const std::vector &sym_position, + const std::vector &sym_value_out) +{ + if (sym_position.size() != sym_value_out.size()) + return false; + + if (sym_position.size()<1) + return false; + + d_sym_position = sym_position; + d_sym_value_out = sym_value_out; + d_nbits = (unsigned long)ceil(log10(d_sym_value_out.size()) / log10(2.0)); + + return true; +} + + +int +gr_ofdm_frame_sink::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + const char *sig = (const char *) input_items[1]; + unsigned int j = 0; + unsigned int bytes=0; + + // If the output is connected, send it the derotated symbols + if(output_items.size() >= 1) + d_derotated_output = (gr_complex *)output_items[0]; + else + d_derotated_output = NULL; + + if (VERBOSE) + fprintf(stderr,">>> Entering state machine\n"); + + switch(d_state) { + + case STATE_SYNC_SEARCH: // Look for flag indicating beginning of pkt + if (VERBOSE) + fprintf(stderr,"SYNC Search, noutput=%d\n", noutput_items); + + if (sig[0]) { // Found it, set up for header decode + enter_have_sync(); + } + break; + + case STATE_HAVE_SYNC: + // only demod after getting the preamble signal; otherwise, the + // equalizer taps will screw with the PLL performance + bytes = demapper(&in[0], d_bytes_out); + + if (VERBOSE) { + if(sig[0]) + printf("ERROR -- Found SYNC in HAVE_SYNC\n"); + fprintf(stderr,"Header Search bitcnt=%d, header=0x%08x\n", + d_headerbytelen_cnt, d_header); + } + + j = 0; + while(j < bytes) { + d_header = (d_header << 8) | (d_bytes_out[j] & 0xFF); + j++; + + if (++d_headerbytelen_cnt == HEADERBYTELEN) { + + if (VERBOSE) + fprintf(stderr, "got header: 0x%08x\n", d_header); + + // we have a full header, check to see if it has been received properly + if (header_ok()){ + enter_have_header(); + + if (VERBOSE) + printf("\nPacket Length: %d\n", d_packetlen); + + while((j < bytes) && (d_packetlen_cnt < d_packetlen)) { + d_packet[d_packetlen_cnt++] = d_bytes_out[j++]; + } + + if(d_packetlen_cnt == d_packetlen) { + gr_message_sptr msg = + gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen); + memcpy(msg->msg(), d_packet, d_packetlen_cnt); + d_target_queue->insert_tail(msg); // send it + msg.reset(); // free it up + + enter_search(); + } + } + else { + enter_search(); // bad header + } + } + } + break; + + case STATE_HAVE_HEADER: + bytes = demapper(&in[0], d_bytes_out); + + if (VERBOSE) { + if(sig[0]) + printf("ERROR -- Found SYNC in HAVE_HEADER at %d, length of %d\n", d_packetlen_cnt, d_packetlen); + fprintf(stderr,"Packet Build\n"); + } + + j = 0; + while(j < bytes) { + d_packet[d_packetlen_cnt++] = d_bytes_out[j++]; + + if (d_packetlen_cnt == d_packetlen){ // packet is filled + // build a message + // NOTE: passing header field as arg1 is not scalable + gr_message_sptr msg = + gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt); + memcpy(msg->msg(), d_packet, d_packetlen_cnt); + + d_target_queue->insert_tail(msg); // send it + msg.reset(); // free it up + + enter_search(); + break; + } + } + break; + + default: + assert(0); + + } // switch + + return 1; +} diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h new file mode 100644 index 00000000..c419b867 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h @@ -0,0 +1,126 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_OFDM_FRAME_SINK_H +#define INCLUDED_GR_OFDM_FRAME_SINK_H + +#include +#include + +class gr_ofdm_frame_sink; +typedef boost::shared_ptr gr_ofdm_frame_sink_sptr; + +gr_ofdm_frame_sink_sptr +gr_make_ofdm_frame_sink (const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_tones, + float phase_gain=0.25, float freq_gain=0.25*0.25/4.0); + +/*! + * \brief Takes an OFDM symbol in, demaps it into bits of 0's and 1's, packs + * them into packets, and sends to to a message queue sink. + * \ingroup sink_blk + * \ingroup ofdm_blk + * + * NOTE: The mod input parameter simply chooses a pre-defined demapper/slicer. Eventually, + * we want to be able to pass in a reference to an object to do the demapping and slicing + * for a given modulation type. + */ +class gr_ofdm_frame_sink : public gr_sync_block +{ + friend gr_ofdm_frame_sink_sptr + gr_make_ofdm_frame_sink (const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_tones, + float phase_gain, float freq_gain); + + private: + enum state_t {STATE_SYNC_SEARCH, STATE_HAVE_SYNC, STATE_HAVE_HEADER}; + + static const int MAX_PKT_LEN = 4096; + static const int HEADERBYTELEN = 4; + + gr_msg_queue_sptr d_target_queue; // where to send the packet when received + state_t d_state; + unsigned int d_header; // header bits + int d_headerbytelen_cnt; // how many so far + + unsigned char *d_bytes_out; // hold the current bytes produced by the demapper + + unsigned int d_occupied_carriers; + unsigned int d_byte_offset; + unsigned int d_partial_byte; + + unsigned char d_packet[MAX_PKT_LEN]; // assembled payload + int d_packetlen; // length of packet + int d_packet_whitener_offset; // offset into whitener string to use + int d_packetlen_cnt; // how many so far + + gr_complex * d_derotated_output; // Pointer to output stream to send deroated symbols out + + std::vector d_sym_position; + std::vector d_sym_value_out; + std::vector d_dfe; + unsigned int d_nbits; + + unsigned char d_resid; + unsigned int d_nresid; + float d_phase; + float d_freq; + float d_phase_gain; + float d_freq_gain; + float d_eq_gain; + + std::vector d_subcarrier_map; + + protected: + gr_ofdm_frame_sink(const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_tones, + float phase_gain, float freq_gain); + + void enter_search(); + void enter_have_sync(); + void enter_have_header(); + + bool header_ok() + { + // confirm that two copies of header info are identical + return ((d_header >> 16) ^ (d_header & 0xffff)) == 0; + } + + unsigned char slicer(const gr_complex x); + unsigned int demapper(const gr_complex *in, + unsigned char *out); + + bool set_sym_value_out(const std::vector &sym_position, + const std::vector &sym_value_out); + + public: + ~gr_ofdm_frame_sink(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_OFDM_FRAME_SINK_H */ diff --git a/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i new file mode 100644 index 00000000..38ab50e9 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i @@ -0,0 +1,41 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_frame_sink); + +gr_ofdm_frame_sink_sptr +gr_make_ofdm_frame_sink(const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_tones, + float phase_gain=0.25, float freq_gain=0.25*0.25/4); + +class gr_ofdm_frame_sink : public gr_sync_block +{ + protected: + gr_ofdm_frame_sink(const std::vector &sym_position, + const std::vector &sym_value_out, + gr_msg_queue_sptr target_queue, unsigned int occupied_tones, + float phase_gain, float freq_gain); + + public: + ~gr_ofdm_frame_sink(); +}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.cc b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.cc new file mode 100644 index 00000000..3706c367 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.cc @@ -0,0 +1,187 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +gr_ofdm_insert_preamble_sptr +gr_make_ofdm_insert_preamble(int fft_length, + const std::vector > &preamble) +{ + return gr_ofdm_insert_preamble_sptr(new gr_ofdm_insert_preamble(fft_length, + preamble)); +} + +gr_ofdm_insert_preamble::gr_ofdm_insert_preamble + (int fft_length, + const std::vector > &preamble) + : gr_block("ofdm_insert_preamble", + gr_make_io_signature2(2, 2, + sizeof(gr_complex)*fft_length, + sizeof(char)), + gr_make_io_signature2(1, 2, + sizeof(gr_complex)*fft_length, + sizeof(char))), + d_fft_length(fft_length), + d_preamble(preamble), + d_state(ST_IDLE), + d_nsymbols_output(0), + d_pending_flag(0) +{ + // sanity check preamble symbols + for (size_t i = 0; i < d_preamble.size(); i++){ + if (d_preamble[i].size() != (size_t) d_fft_length) + throw std::invalid_argument("gr_ofdm_insert_preamble: invalid length for preamble symbol"); + } + + enter_idle(); +} + + +gr_ofdm_insert_preamble::~gr_ofdm_insert_preamble() +{ +} + +int +gr_ofdm_insert_preamble::general_work (int noutput_items, + gr_vector_int &ninput_items_v, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int ninput_items = std::min(ninput_items_v[0], ninput_items_v[1]); + const gr_complex *in_sym = (const gr_complex *) input_items[0]; + const unsigned char *in_flag = (const unsigned char *) input_items[1]; + + gr_complex *out_sym = (gr_complex *) output_items[0]; + unsigned char *out_flag = 0; + if (output_items.size() == 2) + out_flag = (unsigned char *) output_items[1]; + + + int no = 0; // number items output + int ni = 0; // number items read from input + + +#define write_out_flag() \ + do { if (out_flag) \ + out_flag[no] = d_pending_flag; \ + d_pending_flag = 0; \ + } while(0) + + + while (no < noutput_items && ni < ninput_items){ + switch(d_state){ + case ST_IDLE: + if (in_flag[ni] & 0x1) // this is first symbol of new payload + enter_preamble(); + else + ni++; // eat one input symbol + break; + + case ST_PREAMBLE: + assert(in_flag[ni] & 0x1); + if (d_nsymbols_output >= (int) d_preamble.size()){ + // we've output all the preamble + enter_first_payload(); + } + else { + memcpy(&out_sym[no * d_fft_length], + &d_preamble[d_nsymbols_output][0], + d_fft_length*sizeof(gr_complex)); + + write_out_flag(); + no++; + d_nsymbols_output++; + } + break; + + case ST_FIRST_PAYLOAD: + // copy first payload symbol from input to output + memcpy(&out_sym[no * d_fft_length], + &in_sym[ni * d_fft_length], + d_fft_length * sizeof(gr_complex)); + + write_out_flag(); + no++; + ni++; + enter_payload(); + break; + + case ST_PAYLOAD: + if (in_flag[ni] & 0x1){ // this is first symbol of a new payload + enter_preamble(); + break; + } + + // copy a symbol from input to output + memcpy(&out_sym[no * d_fft_length], + &in_sym[ni * d_fft_length], + d_fft_length * sizeof(gr_complex)); + + write_out_flag(); + no++; + ni++; + break; + + default: + std::cerr << "gr_ofdm_insert_preamble: (can't happen) invalid state, resetting\n"; + enter_idle(); + } + } + + consume_each(ni); + return no; +} + +void +gr_ofdm_insert_preamble::enter_idle() +{ + d_state = ST_IDLE; + d_nsymbols_output = 0; + d_pending_flag = 0; +} + +void +gr_ofdm_insert_preamble::enter_preamble() +{ + d_state = ST_PREAMBLE; + d_nsymbols_output = 0; + d_pending_flag = 1; +} + +void +gr_ofdm_insert_preamble::enter_first_payload() +{ + d_state = ST_FIRST_PAYLOAD; +} + +void +gr_ofdm_insert_preamble::enter_payload() +{ + d_state = ST_PAYLOAD; +} diff --git a/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h new file mode 100644 index 00000000..57c1af01 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.h @@ -0,0 +1,104 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_GR_OFDM_INSERT_PREAMBLE_H +#define INCLUDED_GR_OFDM_INSERT_PREAMBLE_H + +#include +#include + +class gr_ofdm_insert_preamble; +typedef boost::shared_ptr gr_ofdm_insert_preamble_sptr; + +gr_ofdm_insert_preamble_sptr +gr_make_ofdm_insert_preamble(int fft_length, + const std::vector > &preamble); + +/*! + * \brief insert "pre-modulated" preamble symbols before each payload. + * \ingroup sync_blk + * \ingroup ofdm_blk + * + *
+ * input 1: stream of vectors of gr_complex [fft_length]
+ *          These are the modulated symbols of the payload.
+ *
+ * input 2: stream of char.  The LSB indicates whether the corresponding
+ *          symbol on input 1 is the first symbol of the payload or not.
+ *          It's a 1 if the corresponding symbol is the first symbol,
+ *          otherwise 0.
+ *
+ * N.B., this implies that there must be at least 1 symbol in the payload.
+ *
+ *
+ * output 1: stream of vectors of gr_complex [fft_length]
+ *           These include the preamble symbols and the payload symbols.
+ *
+ * output 2: stream of char.  The LSB indicates whether the corresponding
+ *           symbol on input 1 is the first symbol of a packet (i.e., the
+ *           first symbol of the preamble.)   It's a 1 if the corresponding
+ *           symbol is the first symbol, otherwise 0.
+ * 
+ * + * \param fft_length length of each symbol in samples. + * \param preamble vector of symbols that represent the pre-modulated preamble. + */ + +class gr_ofdm_insert_preamble : public gr_block +{ + friend gr_ofdm_insert_preamble_sptr + gr_make_ofdm_insert_preamble(int fft_length, + const std::vector > &preamble); + +protected: + gr_ofdm_insert_preamble(int fft_length, + const std::vector > &preamble); + +private: + enum state_t { + ST_IDLE, + ST_PREAMBLE, + ST_FIRST_PAYLOAD, + ST_PAYLOAD + }; + + int d_fft_length; + const std::vector > d_preamble; + state_t d_state; + int d_nsymbols_output; + int d_pending_flag; + + void enter_idle(); + void enter_preamble(); + void enter_first_payload(); + void enter_payload(); + + +public: + ~gr_ofdm_insert_preamble(); + + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_OFDM_INSERT_PREAMBLE_H */ diff --git a/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.i b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.i new file mode 100644 index 00000000..e33bd63a --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_insert_preamble.i @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_insert_preamble); + +gr_ofdm_insert_preamble_sptr +gr_make_ofdm_insert_preamble(int fft_length, + const std::vector > &preamble); + + +class gr_ofdm_insert_preamble : public gr_block +{ + protected: + gr_ofdm_insert_preamble(int fft_length, + const std::vector > &preamble); +}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc new file mode 100644 index 00000000..02f09f5f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.cc @@ -0,0 +1,241 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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. + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +gr_ofdm_mapper_bcv_sptr +gr_make_ofdm_mapper_bcv (const std::vector &constellation, unsigned int msgq_limit, + unsigned int occupied_carriers, unsigned int fft_length) +{ + return gr_ofdm_mapper_bcv_sptr (new gr_ofdm_mapper_bcv (constellation, msgq_limit, + occupied_carriers, fft_length)); +} + +// Consumes 1 packet and produces as many OFDM symbols of fft_length to hold the full packet +gr_ofdm_mapper_bcv::gr_ofdm_mapper_bcv (const std::vector &constellation, unsigned int msgq_limit, + unsigned int occupied_carriers, unsigned int fft_length) + : gr_sync_block ("ofdm_mapper_bcv", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature2 (1, 2, sizeof(gr_complex)*fft_length, sizeof(char))), + d_constellation(constellation), + d_msgq(gr_make_msg_queue(msgq_limit)), d_msg_offset(0), d_eof(false), + d_occupied_carriers(occupied_carriers), + d_fft_length(fft_length), + d_bit_offset(0), + d_pending_flag(0), + d_resid(0), + d_nresid(0) +{ + if (!(d_occupied_carriers <= d_fft_length)) + throw std::invalid_argument("gr_ofdm_mapper_bcv: occupied carriers must be <= fft_length"); + + // this is not the final form of this solution since we still use the occupied_tones concept, + // which would get us into trouble if the number of carriers we seek is greater than the occupied carriers. + // Eventually, we will get rid of the occupied_carriers concept. + std::string carriers = "FE7F"; + + // A bit hacky to fill out carriers to occupied_carriers length + int diff = (d_occupied_carriers - 4*carriers.length()); + while(diff > 7) { + carriers.insert(0, "f"); + carriers.insert(carriers.length(), "f"); + diff -= 8; + } + + // if there's extras left to be processed + // divide remaining to put on either side of current map + // all of this is done to stick with the concept of a carrier map string that + // can be later passed by the user, even though it'd be cleaner to just do this + // on the carrier map itself + int diff_left=0; + int diff_right=0; + + // dictionary to convert from integers to ascii hex representation + char abc[16] = {'0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + if(diff > 0) { + char c[2] = {0,0}; + + diff_left = (int)ceil((float)diff/2.0f); // number of carriers to put on the left side + c[0] = abc[(1 << diff_left) - 1]; // convert to bits and move to ASCI integer + carriers.insert(0, c); + + diff_right = diff - diff_left; // number of carriers to put on the right side + c[0] = abc[0xF^((1 << diff_right) - 1)]; // convert to bits and move to ASCI integer + carriers.insert(carriers.length(), c); + } + + // find out how many zeros to pad on the sides; the difference between the fft length and the subcarrier + // mapping size in chunks of four. This is the number to pack on the left and this number plus any + // residual nulls (if odd) will be packed on the right. + diff = (d_fft_length/4 - carriers.length())/2; + + unsigned int i,j,k; + for(i = 0; i < carriers.length(); i++) { + char c = carriers[i]; // get the current hex character from the string + for(j = 0; j < 4; j++) { // walk through all four bits + k = (strtol(&c, NULL, 16) >> (3-j)) & 0x1; // convert to int and extract next bit + if(k) { // if bit is a 1, + d_subcarrier_map.push_back(4*(i+diff) + j); // use this subcarrier + } + } + } + + // make sure we stay in the limit currently imposed by the occupied_carriers + if(d_subcarrier_map.size() > d_occupied_carriers) { + throw std::invalid_argument("gr_ofdm_mapper_bcv: subcarriers allocated exceeds size of occupied carriers"); + } + + d_nbits = (unsigned long)ceil(log10(d_constellation.size()) / log10(2.0)); +} + +gr_ofdm_mapper_bcv::~gr_ofdm_mapper_bcv(void) +{ +} + +int gr_ofdm_mapper_bcv::randsym() +{ + return (rand() % d_constellation.size()); +} + +int +gr_ofdm_mapper_bcv::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *out = (gr_complex *)output_items[0]; + + unsigned int i=0; + + //printf("OFDM BPSK Mapper: ninput_items: %d noutput_items: %d\n", ninput_items[0], noutput_items); + + if(d_eof) { + return -1; + } + + if(!d_msg) { + d_msg = d_msgq->delete_head(); // block, waiting for a message + d_msg_offset = 0; + d_bit_offset = 0; + d_pending_flag = 1; // new packet, write start of packet flag + + if((d_msg->length() == 0) && (d_msg->type() == 1)) { + d_msg.reset(); + return -1; // We're done; no more messages coming. + } + } + + char *out_flag = 0; + if(output_items.size() == 2) + out_flag = (char *) output_items[1]; + + + // Build a single symbol: + // Initialize all bins to 0 to set unused carriers + memset(out, 0, d_fft_length*sizeof(gr_complex)); + + i = 0; + unsigned char bits = 0; + //while((d_msg_offset < d_msg->length()) && (i < d_occupied_carriers)) { + while((d_msg_offset < d_msg->length()) && (i < d_subcarrier_map.size())) { + + // need new data to process + if(d_bit_offset == 0) { + d_msgbytes = d_msg->msg()[d_msg_offset]; + //printf("mod message byte: %x\n", d_msgbytes); + } + + if(d_nresid > 0) { + // take the residual bits, fill out nbits with info from the new byte, and put them in the symbol + d_resid |= (((1 << d_nresid)-1) & d_msgbytes) << (d_nbits - d_nresid); + bits = d_resid; + + out[d_subcarrier_map[i]] = d_constellation[bits]; + i++; + + d_bit_offset += d_nresid; + d_nresid = 0; + d_resid = 0; + //printf("mod bit(r): %x resid: %x nresid: %d bit_offset: %d\n", + // bits, d_resid, d_nresid, d_bit_offset); + } + else { + if((8 - d_bit_offset) >= d_nbits) { // test to make sure we can fit nbits + // take the nbits number of bits at a time from the byte to add to the symbol + bits = ((1 << d_nbits)-1) & (d_msgbytes >> d_bit_offset); + d_bit_offset += d_nbits; + + out[d_subcarrier_map[i]] = d_constellation[bits]; + i++; + } + else { // if we can't fit nbits, store them for the next + // saves d_nresid bits of this message where d_nresid < d_nbits + unsigned int extra = 8-d_bit_offset; + d_resid = ((1 << extra)-1) & (d_msgbytes >> d_bit_offset); + d_bit_offset += extra; + d_nresid = d_nbits - extra; + } + + } + + if(d_bit_offset == 8) { + d_bit_offset = 0; + d_msg_offset++; + } + } + + // Ran out of data to put in symbol + if (d_msg_offset == d_msg->length()) { + if(d_nresid > 0) { + d_resid |= 0x00; + bits = d_resid; + d_nresid = 0; + d_resid = 0; + } + + //while(i < d_occupied_carriers) { // finish filling out the symbol + while(i < d_subcarrier_map.size()) { // finish filling out the symbol + out[d_subcarrier_map[i]] = d_constellation[randsym()]; + + i++; + } + + if (d_msg->type() == 1) // type == 1 sets EOF + d_eof = true; + d_msg.reset(); // finished packet, free message + assert(d_bit_offset == 0); + } + + if (out_flag) + out_flag[0] = d_pending_flag; + d_pending_flag = 0; + + return 1; // produced symbol +} diff --git a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h new file mode 100644 index 00000000..5a21b90a --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.h @@ -0,0 +1,87 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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. + */ + +#ifndef INCLUDED_GR_OFDM_MAPPER_BCV_H +#define INCLUDED_GR_OFDM_MAPPER_BCV_H + +#include +#include +#include + +class gr_ofdm_mapper_bcv; +typedef boost::shared_ptr gr_ofdm_mapper_bcv_sptr; + +gr_ofdm_mapper_bcv_sptr +gr_make_ofdm_mapper_bcv (const std::vector &constellation, unsigned msgq_limit, + unsigned occupied_carriers, unsigned int fft_length); + +/*! + * \brief take a stream of bytes in and map to a vector of complex + * constellation points suitable for IFFT input to be used in an ofdm + * modulator. Abstract class must be subclassed with specific mapping. + * \ingroup modulation_blk + * \ingroup ofdm_blk + */ + +class gr_ofdm_mapper_bcv : public gr_sync_block +{ + friend gr_ofdm_mapper_bcv_sptr + gr_make_ofdm_mapper_bcv (const std::vector &constellation, unsigned msgq_limit, + unsigned occupied_carriers, unsigned int fft_length); + protected: + gr_ofdm_mapper_bcv (const std::vector &constellation, unsigned msgq_limit, + unsigned occupied_carriers, unsigned int fft_length); + + private: + std::vector d_constellation; + gr_msg_queue_sptr d_msgq; + gr_message_sptr d_msg; + unsigned d_msg_offset; + bool d_eof; + + unsigned int d_occupied_carriers; + unsigned int d_fft_length; + unsigned int d_bit_offset; + int d_pending_flag; + + unsigned long d_nbits; + unsigned char d_msgbytes; + + unsigned char d_resid; + unsigned int d_nresid; + + std::vector d_subcarrier_map; + + int randsym(); + + public: + ~gr_ofdm_mapper_bcv(void); + + gr_msg_queue_sptr msgq() const { return d_msgq; } + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.i b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.i new file mode 100644 index 00000000..30c69292 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_mapper_bcv.i @@ -0,0 +1,46 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_mapper_bcv); + +gr_ofdm_mapper_bcv_sptr +gr_make_ofdm_mapper_bcv (const std::vector &constellation, + unsigned int msgq_limit, + unsigned int bits_per_symbol, + unsigned int fft_length); + + +class gr_ofdm_mapper_bcv : public gr_sync_block +{ + protected: + gr_ofdm_mapper_bcv (const std::vector &constellation, + unsigned int msgq_limit, + unsigned int bits_per_symbol, + unsigned int fft_length); + + public: + gr_msg_queue_sptr msgq(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; diff --git a/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc b/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc new file mode 100644 index 00000000..74bd65a5 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc @@ -0,0 +1,132 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +gr_ofdm_sampler_sptr +gr_make_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout) +{ + return gr_ofdm_sampler_sptr (new gr_ofdm_sampler (fft_length, symbol_length, timeout)); +} + +gr_ofdm_sampler::gr_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout) + : gr_block ("ofdm_sampler", + gr_make_io_signature2 (2, 2, sizeof (gr_complex), sizeof(char)), + gr_make_io_signature2 (2, 2, sizeof (gr_complex)*fft_length, sizeof(char)*fft_length)), + d_state(STATE_NO_SIG), d_timeout_max(timeout), d_fft_length(fft_length), d_symbol_length(symbol_length) +{ +} + +void +gr_ofdm_sampler::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + // FIXME do we need more + //int nreqd = (noutput_items-1) * d_symbol_length + d_fft_length; + int nreqd = d_symbol_length + d_fft_length; + unsigned ninputs = ninput_items_required.size (); + for (unsigned i = 0; i < ninputs; i++) + ninput_items_required[i] = nreqd; +} + + +int +gr_ofdm_sampler::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *iptr = (const gr_complex *) input_items[0]; + const char *trigger = (const char *) input_items[1]; + + gr_complex *optr = (gr_complex *) output_items[0]; + char *outsig = (char *) output_items[1]; + + //FIXME: we only process a single OFDM symbol at a time; after the preamble, we can + // process a few at a time as long as we always look out for the next preamble. + + unsigned int index=d_fft_length; // start one fft length into the input so we can always look back this far + + outsig[0] = 0; // set output to no signal by default + + // Search for a preamble trigger signal during the next symbol length + while((d_state != STATE_PREAMBLE) && (index <= (d_symbol_length+d_fft_length))) { + if(trigger[index]) { + outsig[0] = 1; // tell the next block there is a preamble coming + d_state = STATE_PREAMBLE; + } + else + index++; + } + + unsigned int i, pos, ret; + switch(d_state) { + case(STATE_PREAMBLE): + // When we found a preamble trigger, get it and set the symbol boundary here + for(i = (index - d_fft_length + 1); i <= index; i++) { + *optr++ = iptr[i]; + } + + d_timeout = d_timeout_max; // tell the system to expect at least this many symbols for a frame + d_state = STATE_FRAME; + consume_each(index - d_fft_length + 1); // consume up to one fft_length away to keep the history + ret = 1; + break; + + case(STATE_FRAME): + // use this state when we have processed a preamble and are getting the rest of the frames + //FIXME: we could also have a power squelch system here to enter STATE_NO_SIG if no power is received + + // skip over fft length history and cyclic prefix + pos = d_symbol_length; // keeps track of where we are in the input buffer + while(pos < d_symbol_length + d_fft_length) { + *optr++ = iptr[pos++]; + } + + if(d_timeout-- == 0) { + printf("TIMEOUT\n"); + d_state = STATE_NO_SIG; + } + + consume_each(d_symbol_length); // jump up by 1 fft length and the cyclic prefix length + ret = 1; + break; + + case(STATE_NO_SIG): + default: + consume_each(index-d_fft_length); // consume everything we've gone through so far leaving the fft length history + ret = 0; + break; + } + + return ret; +} diff --git a/gnuradio-core/src/lib/general/gr_ofdm_sampler.h b/gnuradio-core/src/lib/general/gr_ofdm_sampler.h new file mode 100644 index 00000000..d059636e --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_sampler.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_OFDM_SAMPLER_H +#define INCLUDED_GR_OFDM_SAMPLER_H + +#include + +class gr_ofdm_sampler; +typedef boost::shared_ptr gr_ofdm_sampler_sptr; + +gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout=1000); + +/*! + * \brief does the rest of the OFDM stuff + * \ingroup ofdm_blk + */ +class gr_ofdm_sampler : public gr_block +{ + friend gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout); + + gr_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout); + + private: + enum state_t {STATE_NO_SIG, STATE_PREAMBLE, STATE_FRAME}; + + state_t d_state; + unsigned int d_timeout_max; + unsigned int d_timeout; + unsigned int d_fft_length; + unsigned int d_symbol_length; + + public: + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_ofdm_sampler.i b/gnuradio-core/src/lib/general/gr_ofdm_sampler.i new file mode 100644 index 00000000..601330b0 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_ofdm_sampler.i @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,ofdm_sampler) + + gr_ofdm_sampler_sptr gr_make_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout=1000); + +class gr_ofdm_sampler : public gr_sync_block +{ + private: + gr_ofdm_sampler (unsigned int fft_length, + unsigned int symbol_length, + unsigned int timeout); +}; diff --git a/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h b/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h index 3013c0c5..ec163911 100644 --- a/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h +++ b/gnuradio-core/src/lib/general/gr_pa_2x2_phase_combiner.h @@ -31,7 +31,7 @@ gr_pa_2x2_phase_combiner_sptr gr_make_pa_2x2_phase_combiner (); /*! * \brief pa_2x2 phase combiner - * \ingroup block + * \ingroup misc_blk * * Anntenas are arranged like this: * diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.h.t b/gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.h.t deleted file mode 100644 index 5b52ba87..00000000 --- a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.h.t +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ -gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. - * \ingroup block - * - * input: stream of @I_TYPE@; output: stream of @O_TYPE@ - * - * This is the inverse of gr_unpacked_to_packed_XX. - * - * The bits in the bytes or shorts input stream are grouped into chunks of - * \p bits_per_chunk bits and each resulting chunk is written right- - * justified to the output stream of bytes or shorts. - * All b or 16 bits of the each input bytes or short are processed. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX_ followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into - * arbitrary float or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class @NAME@ : public gr_block -{ - friend @SPTR_NAME@ - gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); - - @NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } - -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.h b/gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.h deleted file mode 100644 index e35152d9..00000000 --- a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_PACKED_TO_UNPACKED_BB_H -#define INCLUDED_GR_PACKED_TO_UNPACKED_BB_H - -#include -#include - -class gr_packed_to_unpacked_bb; -typedef boost::shared_ptr gr_packed_to_unpacked_bb_sptr; - -gr_packed_to_unpacked_bb_sptr -gr_make_packed_to_unpacked_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. - * \ingroup block - * - * input: stream of unsigned char; output: stream of unsigned char - * - * This is the inverse of gr_unpacked_to_packed_XX. - * - * The bits in the bytes or shorts input stream are grouped into chunks of - * \p bits_per_chunk bits and each resulting chunk is written right- - * justified to the output stream of bytes or shorts. - * All b or 16 bits of the each input bytes or short are processed. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX_ followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into - * arbitrary float or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_packed_to_unpacked_bb : public gr_block -{ - friend gr_packed_to_unpacked_bb_sptr - gr_make_packed_to_unpacked_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); - - gr_packed_to_unpacked_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } - -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.h b/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.h deleted file mode 100644 index e168185d..00000000 --- a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_PACKED_TO_UNPACKED_II_H -#define INCLUDED_GR_PACKED_TO_UNPACKED_II_H - -#include -#include - -class gr_packed_to_unpacked_ii; -typedef boost::shared_ptr gr_packed_to_unpacked_ii_sptr; - -gr_packed_to_unpacked_ii_sptr -gr_make_packed_to_unpacked_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. - * \ingroup block - * - * input: stream of int; output: stream of int - * - * This is the inverse of gr_unpacked_to_packed_XX. - * - * The bits in the bytes or shorts input stream are grouped into chunks of - * \p bits_per_chunk bits and each resulting chunk is written right- - * justified to the output stream of bytes or shorts. - * All b or 16 bits of the each input bytes or short are processed. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX_ followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into - * arbitrary float or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_packed_to_unpacked_ii : public gr_block -{ - friend gr_packed_to_unpacked_ii_sptr - gr_make_packed_to_unpacked_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); - - gr_packed_to_unpacked_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } - -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.h b/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.h deleted file mode 100644 index 7d6fbb05..00000000 --- a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_PACKED_TO_UNPACKED_SS_H -#define INCLUDED_GR_PACKED_TO_UNPACKED_SS_H - -#include -#include - -class gr_packed_to_unpacked_ss; -typedef boost::shared_ptr gr_packed_to_unpacked_ss_sptr; - -gr_packed_to_unpacked_ss_sptr -gr_make_packed_to_unpacked_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. - * \ingroup block - * - * input: stream of short; output: stream of short - * - * This is the inverse of gr_unpacked_to_packed_XX. - * - * The bits in the bytes or shorts input stream are grouped into chunks of - * \p bits_per_chunk bits and each resulting chunk is written right- - * justified to the output stream of bytes or shorts. - * All b or 16 bits of the each input bytes or short are processed. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX_ followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into - * arbitrary float or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ - -class gr_packed_to_unpacked_ss : public gr_block -{ - friend gr_packed_to_unpacked_ss_sptr - gr_make_packed_to_unpacked_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); - - gr_packed_to_unpacked_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } - -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_packet_sink.cc b/gnuradio-core/src/lib/general/gr_packet_sink.cc index 8e822511..0979f76d 100644 --- a/gnuradio-core/src/lib/general/gr_packet_sink.cc +++ b/gnuradio-core/src/lib/general/gr_packet_sink.cc @@ -33,6 +33,7 @@ #include #include #include +#include #define VERBOSE 0 diff --git a/gnuradio-core/src/lib/general/gr_packet_sink.h b/gnuradio-core/src/lib/general/gr_packet_sink.h index ba01bf60..73c5d6c5 100644 --- a/gnuradio-core/src/lib/general/gr_packet_sink.h +++ b/gnuradio-core/src/lib/general/gr_packet_sink.h @@ -36,7 +36,7 @@ gr_make_packet_sink (const std::vector& sync_vector, ); /*! * \brief process received bits looking for packet sync, header, and process bits into packet - * \ingroup sink + * \ingroup sink_blk */ class gr_packet_sink : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc new file mode 100644 index 00000000..4f927bff --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.cc @@ -0,0 +1,107 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_peak_detector2_fb_sptr +gr_make_peak_detector2_fb (float threshold_factor_rise, + int look_ahead, float alpha) +{ + return gr_peak_detector2_fb_sptr (new gr_peak_detector2_fb (threshold_factor_rise, + look_ahead, alpha)); +} + +gr_peak_detector2_fb::gr_peak_detector2_fb (float threshold_factor_rise, + int look_ahead, float alpha) + : gr_sync_block ("peak_detector2_fb", + gr_make_io_signature (1, 1, sizeof(float)), + gr_make_io_signature2 (1, 2, sizeof(char), sizeof(float))), + d_threshold_factor_rise(threshold_factor_rise), + d_look_ahead(look_ahead), d_alpha(alpha), d_avg(0.0f), d_found(false) +{ +} + +int +gr_peak_detector2_fb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) { + float *iptr = (float *) input_items[0]; + char *optr = (char *) output_items[0]; + + assert(noutput_items >= 2); + + memset(optr, 0, noutput_items*sizeof(char)); + + for (int i = 0; i < noutput_items; i++) { + + if (!d_found) { + // Have not yet detected presence of peak + if (iptr[i] > d_avg * (1.0f + d_threshold_factor_rise)) { + d_found = true; + d_look_ahead_remaining = d_look_ahead; + d_peak_val = -(float)INFINITY; + } + else { + d_avg = d_alpha*iptr[i] + (1.0f - d_alpha)*d_avg; + } + } + else { + // Detected presence of peak + if (iptr[i] > d_peak_val) { + d_peak_val = iptr[i]; + d_peak_ind = i; + } + else if (d_look_ahead_remaining <= 0) { + optr[d_peak_ind] = 1; + d_found = false; + d_avg = iptr[i]; + } + + // Have not yet located peak, loop and keep searching. + d_look_ahead_remaining--; + } + + // Every iteration of the loop, write debugging signal out if + // connected: + if (output_items.size() == 2) { + float *sigout = (float *) output_items[1]; + sigout[i] = d_avg; + } + } // loop + + if (!d_found) + return noutput_items; + + // else if detected presence, keep searching during the next call to work. + int tmp = d_peak_ind; + d_peak_ind = 1; + + return tmp - 1; +} + + diff --git a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h new file mode 100644 index 00000000..58a00624 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.h @@ -0,0 +1,108 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_gr_peak_detector2_FB_H +#define INCLUDED_gr_peak_detector2_FB_H + +#include + +class gr_peak_detector2_fb; +typedef boost::shared_ptr gr_peak_detector2_fb_sptr; + +gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise = 7, + int look_ahead = 1000, + float alpha = 0.001); + +/*! + * \brief Detect the peak of a signal + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1, + * or it outputs 0's. A separate debug output may be connected, to + * view the internal EWMA described below. + * + * \param threshold_factor_rise The threshold factor determins when a peak + * is present. An EWMA average of the signal is calculated and when the + * value of the signal goes over threshold_factor_rise*average, we + * call the peak. + * \param look_ahead The look-ahead value is used when the threshold is + * found to locate the peak within this range. + * \param alpha The gain value of a single-pole moving average filter + */ + +class gr_peak_detector2_fb : public gr_sync_block +{ + friend gr_peak_detector2_fb_sptr + gr_make_peak_detector2_fb (float threshold_factor_rise, int look_ahead, float alpha); + + gr_peak_detector2_fb (float threshold_factor_rise, int look_ahead, float alpha); + +private: + float d_threshold_factor_rise; + int d_look_ahead; + int d_look_ahead_remaining; + int d_peak_ind; + float d_peak_val; + float d_alpha; + float d_avg; + bool d_found; + +public: + + /*! \brief Set the threshold factor value for the rise time + * \param thr new threshold factor + */ + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + + /*! \brief Set the look-ahead factor + * \param look new look-ahead factor + */ + void set_look_ahead(int look) { d_look_ahead = look; } + + /*! \brief Set the running average alpha + * \param alpha new alpha for running average + */ + void set_alpha(int alpha) { d_alpha = alpha; } + + /*! \brief Get the threshold factor value for the rise time + * \return threshold factor + */ + float threshold_factor_rise() { return d_threshold_factor_rise; } + + /*! \brief Get the look-ahead factor value + * \return look-ahead factor + */ + int look_ahead() { return d_look_ahead; } + + /*! \brief Get the alpha value of the running average + * \return alpha + */ + float alpha() { return d_alpha; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif + + diff --git a/gnuradio-core/src/lib/general/gr_peak_detector2_fb.i b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.i new file mode 100644 index 00000000..4b01435c --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_peak_detector2_fb.i @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + + +GR_SWIG_BLOCK_MAGIC(gr,peak_detector2_fb) + + gr_peak_detector2_fb_sptr gr_make_peak_detector2_fb (float threshold_factor_rise = 7, + int look_ahead = 1000, + float alpha=0.001); + +class gr_peak_detector2_fb : public gr_sync_block +{ +private: + gr_peak_detector2_fb (float threshold_factor_rise, int look_ahead, float alpha); + +public: + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + void set_look_ahead(int look) { d_look_ahead = look; } + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + float threshold_factor_rise() { return d_threshold_factor_rise; } + int look_ahead() { return d_look_ahead; } + float alpha() { return d_avg_alpha; } +}; + + diff --git a/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h b/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h index b9c1f8de..50157534 100644 --- a/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h +++ b/gnuradio-core/src/lib/general/gr_phase_modulator_fc.h @@ -32,7 +32,7 @@ gr_phase_modulator_fc_sptr gr_make_phase_modulator_fc (double sensitivity); /*! * \brief Phase modulator block - * \ingroup block + * \ingroup modulation_blk * output=complex(cos(in*sensitivity),sin(in*sensitivity)) */ class gr_phase_modulator_fc : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.cc b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.cc index 18becfe5..5f0e9a69 100644 --- a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.cc +++ b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.cc @@ -28,6 +28,7 @@ #include #include #include +#include #define M_TWOPI (2*M_PI) @@ -63,7 +64,8 @@ float gr_pll_carriertracking_cc::phase_detector(gr_complex sample,float ref_phase) { float sample_phase; - sample_phase = atan2(sample.imag(),sample.real()); + // sample_phase = atan2(sample.imag(),sample.real()); + sample_phase = gr_fast_atan2f(sample.imag(),sample.real()); return mod_2pi(sample_phase-ref_phase); } diff --git a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h index ae05dee5..195f0601 100644 --- a/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h +++ b/gnuradio-core/src/lib/general/gr_pll_carriertracking_cc.h @@ -33,7 +33,7 @@ gr_pll_carriertracking_cc_sptr gr_make_pll_carriertracking_cc (float alpha, floa /*! * \brief Implements a PLL which locks to the input frequency and outputs the * input signal mixed with that carrier. - * \ingroup block + * \ingroup sync_blk * * input: stream of complex; output: stream of complex * diff --git a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.cc b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.cc index 006f029d..c9fd9a71 100644 --- a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.cc +++ b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.cc @@ -29,6 +29,7 @@ #include #include #include +#include #define M_TWOPI (2*M_PI) @@ -63,7 +64,7 @@ float gr_pll_freqdet_cf::phase_detector(gr_complex sample,float ref_phase) { float sample_phase; - sample_phase = atan2(sample.imag(),sample.real()); + sample_phase = gr_fast_atan2f(sample.imag(),sample.real()); return mod_2pi(sample_phase-ref_phase); } diff --git a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h index 1d8e209e..0581c872 100644 --- a/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h +++ b/gnuradio-core/src/lib/general/gr_pll_freqdet_cf.h @@ -33,7 +33,7 @@ gr_pll_freqdet_cf_sptr gr_make_pll_freqdet_cf (float alpha, float beta, /*! * \brief Implements a PLL which locks to the input frequency and outputs * an estimate of that frequency. Useful for FM Demod. - * \ingroup block + * \ingroup sync_blk * * input: stream of complex; output: stream of floats * diff --git a/gnuradio-core/src/lib/general/gr_pll_refout_cc.cc b/gnuradio-core/src/lib/general/gr_pll_refout_cc.cc index 84326264..5df822d3 100644 --- a/gnuradio-core/src/lib/general/gr_pll_refout_cc.cc +++ b/gnuradio-core/src/lib/general/gr_pll_refout_cc.cc @@ -30,6 +30,7 @@ #include #include #include +#include #define M_TWOPI (2*M_PI) @@ -64,7 +65,7 @@ float gr_pll_refout_cc::phase_detector(gr_complex sample,float ref_phase) { float sample_phase; - sample_phase = atan2(sample.imag(),sample.real()); + sample_phase = gr_fast_atan2f(sample.imag(),sample.real()); return mod_2pi(sample_phase-ref_phase); } diff --git a/gnuradio-core/src/lib/general/gr_pll_refout_cc.h b/gnuradio-core/src/lib/general/gr_pll_refout_cc.h index fa8d4769..3263c957 100644 --- a/gnuradio-core/src/lib/general/gr_pll_refout_cc.h +++ b/gnuradio-core/src/lib/general/gr_pll_refout_cc.h @@ -34,7 +34,7 @@ gr_pll_refout_cc_sptr gr_make_pll_refout_cc (float alpha, float beta, float max_freq, float min_freq); /*! * \brief Implements a PLL which locks to the input frequency and outputs a carrier - * \ingroup block + * \ingroup sync_blk * * input: stream of complex; output: stream of complex * diff --git a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc new file mode 100644 index 00000000..2614c3a2 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.cc @@ -0,0 +1,77 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_pn_correlator_cc_sptr +gr_make_pn_correlator_cc(int degree, int mask, int seed) +{ + return gr_pn_correlator_cc_sptr (new gr_pn_correlator_cc(degree, mask, seed)); +} + +gr_pn_correlator_cc::gr_pn_correlator_cc(int degree, int mask, int seed) + : gr_sync_decimator ("pn_correlator_cc", + gr_make_io_signature (1, 1, sizeof(gr_complex)), + gr_make_io_signature (1, 1, sizeof(gr_complex)), + (unsigned int)((1ULL << degree)-1)) // PN code length +{ + d_len = (unsigned int)((1ULL << degree)-1); + if (mask == 0) + mask = gri_glfsr::glfsr_mask(degree); + d_reference = new gri_glfsr(mask, seed); + for (int i = 0; i < d_len; i++) // initialize to last value in sequence + d_pn = 2.0*d_reference->next_bit()-1.0; +} + +gr_pn_correlator_cc::~gr_pn_correlator_cc() +{ + delete d_reference; +} + +int +gr_pn_correlator_cc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + gr_complex sum; + + for (int i = 0; i < noutput_items; i++) { + sum = 0.0; + + for (int j = 0; j < d_len; j++) { + if (j != 0) // retard PN generator one sample per period + d_pn = 2.0*d_reference->next_bit()-1.0; // no conditionals + sum += *in++ * d_pn; + } + + *out++ = sum*gr_complex(1.0/d_len, 0.0); + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h new file mode 100644 index 00000000..73bb7aa8 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.h @@ -0,0 +1,61 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_PN_CORRELATOR_CC_H +#define INCLUDED_GR_PN_CORRELATOR_CC_H + +#include +#include + +class gr_pn_correlator_cc; +typedef boost::shared_ptr gr_pn_correlator_cc_sptr; + +gr_pn_correlator_cc_sptr +gr_make_pn_correlator_cc(int degree, int mask=0, int seed=1); +/*! + * \brief PN code sequential search correlator + * + * \ingroup sync_blk + * Receives complex baseband signal, outputs complex correlation against + * reference PN code, one sample per PN code period + */ + +class gr_pn_correlator_cc : public gr_sync_decimator +{ + friend gr_pn_correlator_cc_sptr gr_make_pn_correlator_cc(int degree, int mask, int seed); + + int d_len; + float d_pn; + gri_glfsr *d_reference; + + protected: + gr_pn_correlator_cc(int degree, int mask, int seed); + + public: + virtual int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + ~gr_pn_correlator_cc(); +}; + +#endif /* INCLUDED_GR_PN_CORRELATOR_CC_H */ diff --git a/gnuradio-core/src/lib/general/gr_pn_correlator_cc.i b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.i new file mode 100644 index 00000000..a5115d36 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_pn_correlator_cc.i @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,pn_correlator_cc) + +gr_pn_correlator_cc_sptr +gr_make_pn_correlator_cc(int degree, int mask=0, int seed=1); + +class gr_pn_correlator_cc : public gr_sync_decimator +{ + protected: + gr_pn_correlator_cc(); +}; diff --git a/gnuradio-core/src/lib/general/gr_prefix.cc b/gnuradio-core/src/lib/general/gr_prefix.cc index 3b524363..842b0415 100644 --- a/gnuradio-core/src/lib/general/gr_prefix.cc +++ b/gnuradio-core/src/lib/general/gr_prefix.cc @@ -25,5 +25,5 @@ const std::string gr_prefix() { - return "/usr/local"; + return "/home/jcorgan/.local"; } diff --git a/gnuradio-core/src/lib/general/gr_prefs.h b/gnuradio-core/src/lib/general/gr_prefs.h index 4a2caa46..4396d727 100644 --- a/gnuradio-core/src/lib/general/gr_prefs.h +++ b/gnuradio-core/src/lib/general/gr_prefs.h @@ -26,6 +26,7 @@ /*! * \brief Base class for representing user preferences a la windows INI files. + * \ingroup misc * * The real implementation is in Python, and is accessable from C++ * via the magic of SWIG directors. diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h index 158f9eaa..ee887201 100644 --- a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h +++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_c.h @@ -33,7 +33,7 @@ gr_make_probe_avg_mag_sqrd_c (double threshold_db, double alpha = 0.0001); /*! * \brief compute avg magnitude squared. - * \ingroup sink + * \ingroup sink_blk * * input: gr_complex * diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.cc b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.cc new file mode 100644 index 00000000..8b1c7cc5 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.cc @@ -0,0 +1,86 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#include + +gr_probe_avg_mag_sqrd_cf_sptr +gr_make_probe_avg_mag_sqrd_cf(double threshold_db, double alpha) +{ + return gr_probe_avg_mag_sqrd_cf_sptr(new gr_probe_avg_mag_sqrd_cf(threshold_db, alpha)); +} + +gr_probe_avg_mag_sqrd_cf::gr_probe_avg_mag_sqrd_cf (double threshold_db, double alpha) + : gr_sync_block ("probe_avg_mag_sqrd_cf", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + gr_make_io_signature(1, 1, sizeof(float))), + d_iir(alpha), d_unmuted(false), d_level(0) +{ + set_threshold (threshold_db); +} + +gr_probe_avg_mag_sqrd_cf::~gr_probe_avg_mag_sqrd_cf() +{ +} + + +int +gr_probe_avg_mag_sqrd_cf::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + out[i] = d_iir.prev_output(); + double mag_sqrd = in[i].real()*in[i].real() + in[i].imag()*in[i].imag(); + d_iir.filter(mag_sqrd); // computed for side effect: prev_output() + } + + d_unmuted = d_iir.prev_output() >= d_threshold; + d_level = d_iir.prev_output(); + return noutput_items; +} + +double +gr_probe_avg_mag_sqrd_cf::threshold() const +{ + return 10 * std::log10(d_threshold); +} + +void +gr_probe_avg_mag_sqrd_cf::set_threshold(double decibels) +{ + // convert to absolute threshold (mag squared) + d_threshold = std::pow(10.0, decibels/10); +} + +void +gr_probe_avg_mag_sqrd_cf::set_alpha(double alpha) +{ + d_iir.set_taps(alpha); +} diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h new file mode 100644 index 00000000..6c536ca5 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.h @@ -0,0 +1,76 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2006 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. + */ +#ifndef INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H +#define INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H + +#include +#include + +class gr_probe_avg_mag_sqrd_cf; +typedef boost::shared_ptr gr_probe_avg_mag_sqrd_cf_sptr; + +gr_probe_avg_mag_sqrd_cf_sptr +gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha = 0.0001); + +/*! + * \brief compute avg magnitude squared. + * \ingroup sink_blk + * + * input: gr_complex + * output: gr_float + * + * Compute a running average of the magnitude squared of the the input. + * The level and indication as to whether the level exceeds threshold + * can be retrieved with the level and unmuted accessors. + * + */ +class gr_probe_avg_mag_sqrd_cf : public gr_sync_block +{ + double d_threshold; + gr_single_pole_iir d_iir; + bool d_unmuted; + double d_level; + + friend gr_probe_avg_mag_sqrd_cf_sptr + gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha); + + gr_probe_avg_mag_sqrd_cf (double threshold_db, double alpha); + +public: + ~gr_probe_avg_mag_sqrd_cf (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // ACCESSORS + bool unmuted () const { return d_unmuted; } + double level () const { return d_level; } + + double threshold() const; + + // SETTERS + void set_alpha (double alpha); + void set_threshold (double decibels); +}; + +#endif /* INCLUDED_GR_PROBE_AVG_MAG_SQRD_CF_H */ diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.i b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.i new file mode 100644 index 00000000..646b4b67 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_cf.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,probe_avg_mag_sqrd_cf); + +gr_probe_avg_mag_sqrd_cf_sptr +gr_make_probe_avg_mag_sqrd_cf (double threshold_db, double alpha = 0.0001); + +class gr_probe_avg_mag_sqrd_cf : public gr_sync_block +{ +public: + bool unmuted () const { return d_unmuted; } + double level () const { return d_level; } + void set_alpha (double alpha); + void set_threshold (double decibels); + double threshold(); +}; diff --git a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h index 3908dc6b..b31e54f6 100644 --- a/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h +++ b/gnuradio-core/src/lib/general/gr_probe_avg_mag_sqrd_f.h @@ -33,7 +33,7 @@ gr_make_probe_avg_mag_sqrd_f (double threshold_db, double alpha = 0.0001); /*! * \brief compute avg magnitude squared. - * \ingroup sink + * \ingroup sink_blk * * input: float * diff --git a/gnuradio-core/src/lib/general/gr_probe_density_b.cc b/gnuradio-core/src/lib/general/gr_probe_density_b.cc new file mode 100644 index 00000000..dae4eec7 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_density_b.cc @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +gr_probe_density_b_sptr +gr_make_probe_density_b(double alpha) +{ + return gr_probe_density_b_sptr(new gr_probe_density_b(alpha)); +} + +gr_probe_density_b::gr_probe_density_b(double alpha) + : gr_sync_block("density_b", + gr_make_io_signature(1, 1, sizeof(char)), + gr_make_io_signature(0, 0, 0)) +{ + set_alpha(alpha); + d_density = 1.0; +} + +gr_probe_density_b::~gr_probe_density_b() +{ +} + +int +gr_probe_density_b::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const char *in = (const char *)input_items[0]; + + for (int i = 0; i < noutput_items; i++) + d_density = d_alpha*(double)in[i] + d_beta*d_density; + + return noutput_items; +} + +void +gr_probe_density_b::set_alpha(double alpha) +{ + d_alpha = alpha; + d_beta = 1.0-d_alpha; +} + diff --git a/gnuradio-core/src/lib/general/gr_probe_density_b.h b/gnuradio-core/src/lib/general/gr_probe_density_b.h new file mode 100644 index 00000000..92b98d19 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_density_b.h @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * 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. + */ +#ifndef INCLUDED_GR_PROBE_DENSITY_B_H +#define INCLUDED_GR_PROBE_DENSITY_B_H + +#include + +class gr_probe_density_b; + +typedef boost::shared_ptr gr_probe_density_b_sptr; + +gr_probe_density_b_sptr gr_make_probe_density_b(double alpha); + +/*! + * This block maintains a running average of the input stream and + * makes it available as an accessor function. The input stream + * is type unsigned char. + * + * If you send this block a stream of unpacked bytes, it will tell + * you what the bit density is. + * + * \param alpha Average filter constant + * + */ + +class gr_probe_density_b : public gr_sync_block +{ +private: + friend gr_probe_density_b_sptr gr_make_probe_density_b(double alpha); + + double d_alpha; + double d_beta; + double d_density; + + gr_probe_density_b(double alpha); + +public: + ~gr_probe_density_b(); + + /*! + * \brief Returns the current density value + */ + double density() const { return d_density; } + + /*! + * \brief Set the average filter constant + */ + void set_alpha(double alpha); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_PROBE_DENSITY_B_H */ diff --git a/gnuradio-core/src/lib/general/gr_probe_density_b.i b/gnuradio-core/src/lib/general/gr_probe_density_b.i new file mode 100644 index 00000000..54ed07cf --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_density_b.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,probe_density_b); + +gr_probe_density_b_sptr gr_make_probe_density_b(double alpha); + +class gr_probe_density_b : public gr_sync_block +{ +public: + double density() const; + + void set_alpha(double alpha); + +private: + gr_probe_density_b(); +}; diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc new file mode 100644 index 00000000..a0bb99ce --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.cc @@ -0,0 +1,85 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +gr_probe_mpsk_snr_c_sptr +gr_make_probe_mpsk_snr_c(double alpha) +{ + return gr_probe_mpsk_snr_c_sptr(new gr_probe_mpsk_snr_c(alpha)); +} + +gr_probe_mpsk_snr_c::gr_probe_mpsk_snr_c(double alpha) + : gr_sync_block ("probe_mpsk_snr_c", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + gr_make_io_signature(0, 0, 0)), + d_signal_mean(0.0), + d_noise_variance(0.0) +{ + set_alpha(alpha); +} + +gr_probe_mpsk_snr_c::~gr_probe_mpsk_snr_c() +{ +} + +int +gr_probe_mpsk_snr_c::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + + for (int i = 0; i < noutput_items; i++){ + // Update of signal mean estimate + double mag = abs(in[i]); + d_signal_mean = d_alpha*abs(in[i]) + d_beta*d_signal_mean; + + // Update noise variance estimate + double noise = mag-d_signal_mean; + double var = noise*noise; + d_noise_variance = d_alpha*var + d_beta*d_noise_variance; + } + + return noutput_items; +} + +double +gr_probe_mpsk_snr_c::snr() const +{ + if (d_noise_variance == 0.0) + return 0.0; + else + return 10*log10(d_signal_mean*d_signal_mean/d_noise_variance); +} + +void +gr_probe_mpsk_snr_c::set_alpha(double alpha) +{ + d_alpha = alpha; + d_beta = 1.0-alpha; +} diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h new file mode 100644 index 00000000..279a4a5b --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.h @@ -0,0 +1,82 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef INCLUDED_GR_PROBE_MPSK_SNR_C_H +#define INCLUDED_GR_PROBE_MPSK_SNR_C_H + +#include + +class gr_probe_mpsk_snr_c; +typedef boost::shared_ptr gr_probe_mpsk_snr_c_sptr; + +gr_probe_mpsk_snr_c_sptr +gr_make_probe_mpsk_snr_c(double alpha = 0.0001); + +/*! + * Compute the estimate SNR of an MPSK signal using the Squared Signal + * to Noise Variance (SNV) technique. + * + * This technique assumes an AWGN channel. + * + * \param alpha Mean and variance smoothing filter constant + * \ingroup sink_blk + * + * Compute the running average of the signal mean and noise variance. + * The estimated signal mean, noise variance, and SNR are available + * via accessors. + * + * This SNR estimator is inaccurate below about 7dB SNR. + * + */ +class gr_probe_mpsk_snr_c : public gr_sync_block +{ + double d_alpha; + double d_beta; + double d_signal_mean; + double d_noise_variance; + + // Factory function returning shared pointer of this class + friend gr_probe_mpsk_snr_c_sptr + gr_make_probe_mpsk_snr_c(double alpha); + + // Private constructor + gr_probe_mpsk_snr_c(double alpha); + +public: + ~gr_probe_mpsk_snr_c(); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // Return the estimated signal mean + double signal_mean() const { return d_signal_mean; } + + // Return the estimated noise variance + double noise_variance() const { return d_noise_variance; } + + // Return the estimated signal-to-noise ratio in decibels + double snr() const; + + void set_alpha(double alpha); +}; + +#endif /* INCLUDED_GR_PROBE_MPSK_SNR_C_H */ diff --git a/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i new file mode 100644 index 00000000..37a86b23 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_probe_mpsk_snr_c.i @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,probe_mpsk_snr_c); + +gr_probe_mpsk_snr_c_sptr +gr_make_probe_mpsk_snr_c(double alpha = 0.0001); + +class gr_probe_mpsk_snr_c : public gr_sync_block +{ +private: + void gr_probe_mpsk_snr_c(double alpha); + +public: + double signal_mean(); + double noise_variance(); + double snr(); + + void set_alpha (double alpha); +}; diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.h b/gnuradio-core/src/lib/general/gr_probe_signal_f.h index 85ddef5b..9605bb68 100644 --- a/gnuradio-core/src/lib/general/gr_probe_signal_f.h +++ b/gnuradio-core/src/lib/general/gr_probe_signal_f.h @@ -32,7 +32,7 @@ gr_make_probe_signal_f (); /*! * \brief Sink that allows a sample to be grabbed from Python. - * \ingroup sink + * \ingroup sink_blk */ class gr_probe_signal_f : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h index 97d91bfe..9c519f38 100644 --- a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h +++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.h @@ -35,7 +35,7 @@ gr_make_pwr_squelch_cc(double db, double alpha = 0.0001, int ramp=0, bool gate=f /*! * \brief gate or zero output when input power below threshold - * \ingroup block + * \ingroup level_blk */ class gr_pwr_squelch_cc : public gr_squelch_base_cc { diff --git a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.i b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.i index 3d0e7f11..d2e8718c 100644 --- a/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.i +++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_cc.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,7 +22,9 @@ GR_SWIG_BLOCK_MAGIC(gr,pwr_squelch_cc); -%include gr_squelch_base_cc.i +// retrieve info on the base class, without generating wrappers since +// the base class has a pure virual method. +%import "gr_squelch_base_cc.i" gr_pwr_squelch_cc_sptr gr_make_pwr_squelch_cc(double db, double alpha=0.0001, int ramp=0, bool gate=false); diff --git a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h index 25fed7d1..6952dbce 100644 --- a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h +++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.h @@ -35,7 +35,7 @@ gr_make_pwr_squelch_ff(double db, double alpha = 0.0001, int ramp=0, bool gate=f /*! * \brief gate or zero output when input power below threshold - * \ingroup block + * \ingroup level_blk */ class gr_pwr_squelch_ff : public gr_squelch_base_ff { diff --git a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.i b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.i index 8c5919c9..4cb16c4c 100644 --- a/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.i +++ b/gnuradio-core/src/lib/general/gr_pwr_squelch_ff.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,7 +22,9 @@ GR_SWIG_BLOCK_MAGIC(gr,pwr_squelch_ff); -%include gr_squelch_base_ff.i +// retrieve info on the base class, without generating wrappers since +// the base class has a pure virual method. +%import "gr_squelch_base_ff.i" gr_pwr_squelch_ff_sptr gr_make_pwr_squelch_ff(double db, double alpha=0.0001, int ramp=0, bool gate=false); diff --git a/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h b/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h index 079dcf33..a29acd62 100644 --- a/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h +++ b/gnuradio-core/src/lib/general/gr_quadrature_demod_cf.h @@ -31,7 +31,7 @@ gr_quadrature_demod_cf_sptr gr_make_quadrature_demod_cf (float gain); /*! * \brief quadrature demodulator: complex in, float out - * \ingroup block + * \ingroup demodulation_blk * * This can be used to demod FM, FSK, GMSK, etc. * The input is complex baseband. diff --git a/gnuradio-core/src/lib/general/gr_rail_ff.cc b/gnuradio-core/src/lib/general/gr_rail_ff.cc new file mode 100644 index 00000000..9fd3af8d --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_rail_ff.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_rail_ff_sptr +gr_make_rail_ff(float lo, float hi) +{ + return gr_rail_ff_sptr(new gr_rail_ff(lo, hi)); +} + +gr_rail_ff::gr_rail_ff(float lo, float hi) + : gr_sync_block("rail_ff", + gr_make_io_signature(1, 1, sizeof(float)), + gr_make_io_signature(1, 1, sizeof(float))), + d_lo(lo), d_hi(hi) +{ +} + +int +gr_rail_ff::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + if (in[i] < d_lo) + out[i] = d_lo; + else if (in[i] > d_hi) + out[i] = d_hi; + else + out[i] = in[i]; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_rail_ff.h b/gnuradio-core/src/lib/general/gr_rail_ff.h new file mode 100644 index 00000000..d9e19a96 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_rail_ff.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_GR_RAIL_FF_H_ +# define INCLUDED_GR_RAIL_FF_H_ + +#include + +/*! + * \brief clips input values to min, max + * \ingroup misc + */ + +class gr_rail_ff; +typedef boost::shared_ptr gr_rail_ff_sptr; + +gr_rail_ff_sptr gr_make_rail_ff(float lo, float hi); + +class gr_rail_ff : public gr_sync_block +{ + friend gr_rail_ff_sptr gr_make_rail_ff (float lo, float hi); + + float d_lo, d_hi; // the constant + gr_rail_ff(float lo, float hi); + + public: + float lo() const { return d_lo; } + void set_lo(float lo) { d_lo = lo; } + float hi() const { return d_hi; } + void set_hi(float hi) { d_hi = hi; } + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_rail_ff.i b/gnuradio-core/src/lib/general/gr_rail_ff.i new file mode 100644 index 00000000..ae39b76d --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_rail_ff.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,rail_ff); + +gr_rail_ff_sptr gr_make_rail_ff(float lo, float hi); + +class gr_rail_ff : public gr_sync_block +{ +private: + gr_rail_ff(float lo, float hi); +}; diff --git a/gnuradio-core/src/lib/general/gr_random.h b/gnuradio-core/src/lib/general/gr_random.h index 92a16e3b..e5002fd3 100644 --- a/gnuradio-core/src/lib/general/gr_random.h +++ b/gnuradio-core/src/lib/general/gr_random.h @@ -27,6 +27,7 @@ /*! * \brief pseudo random number generator + * \ingroup math_blk */ class gr_random { protected: diff --git a/gnuradio-core/src/lib/general/gr_regenerate_bb.cc b/gnuradio-core/src/lib/general/gr_regenerate_bb.cc new file mode 100644 index 00000000..18367552 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_regenerate_bb.cc @@ -0,0 +1,90 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_regenerate_bb_sptr +gr_make_regenerate_bb (int period, unsigned int max_regen) +{ + return gr_regenerate_bb_sptr (new gr_regenerate_bb (period, max_regen)); +} + +gr_regenerate_bb::gr_regenerate_bb (int period, unsigned int max_regen) + : gr_sync_block ("regenerate_bb", + gr_make_io_signature (1, 1, sizeof (char)), + gr_make_io_signature (1, 1, sizeof (char))), + d_period(period), + d_countdown(0), + d_max_regen(max_regen), + d_regen_count(max_regen) +{ +} + +void gr_regenerate_bb::set_max_regen(unsigned int regen) +{ + d_max_regen = regen; + d_countdown = 0; + d_regen_count = d_max_regen; +} + +void gr_regenerate_bb::set_period(int period) +{ + d_period = period; + d_countdown = 0; + d_regen_count = d_max_regen; +} + +int +gr_regenerate_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const char *iptr = (const char *) input_items[0]; + char *optr = (char *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + optr[i] = 0; + + if(d_regen_count < d_max_regen) { + d_countdown--; + + if(d_countdown == 0) { + optr[i] = 1; + d_countdown = d_period; + d_regen_count++; + } + } + + if(iptr[i] == 1) { + d_countdown = d_period; + optr[i] = 1; + d_regen_count = 0; + } + + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_regenerate_bb.h b/gnuradio-core/src/lib/general/gr_regenerate_bb.h new file mode 100644 index 00000000..db511b22 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_regenerate_bb.h @@ -0,0 +1,75 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GR_REGENERATE_BB_H +#define INCLUDED_GR_REGENERATE_BB_H + +#include + +class gr_regenerate_bb; +typedef boost::shared_ptr gr_regenerate_bb_sptr; + +gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=500); + +/*! + * \brief Detect the peak of a signal and repeat every period samples + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1 repeated every period samples + * until reset by detection of another 1 on the input or stopped after max_regen + * regenerations have occurred. + * + * Note that if max_regen=(-1)/ULONG_MAX then the regeneration will run forever. + */ +class gr_regenerate_bb : public gr_sync_block +{ + /*! + * \brief Make a regenerate block + * \param period The number of samples between regenerations + * \param max_regen The maximum number of regenerations to perform; if set to + * ULONG_MAX, it will regenerate continuously. + */ + friend gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen); + + gr_regenerate_bb (int period, unsigned int max_regen); + + private: + int d_period; + int d_countdown; + unsigned int d_max_regen; + unsigned int d_regen_count; + + public: + /*! \brief Reset the maximum regeneration count; this will reset the current regen. + */ + void set_max_regen(unsigned int regen); + + /*! \brief Reset the period of regenerations; this will reset the current regen. + */ + void set_period(int period); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_regenerate_bb.i b/gnuradio-core/src/lib/general/gr_regenerate_bb.i new file mode 100644 index 00000000..7b29b92b --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_regenerate_bb.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,regenerate_bb) + +gr_regenerate_bb_sptr gr_make_regenerate_bb (int period, unsigned int max_regen=500); + +class gr_regenerate_bb : public gr_sync_block +{ + private: + gr_regenerate_bb (int period, unsigned int max_regen); + +public: + void set_max_regen(unsigned int regen); + + /*! \brief Reset the period of regenerations; this will reset the current regen. + */ + void set_period(int period); +}; diff --git a/gnuradio-core/src/lib/general/gr_remez.h b/gnuradio-core/src/lib/general/gr_remez.h index ed4ea79b..85e1516a 100644 --- a/gnuradio-core/src/lib/general/gr_remez.h +++ b/gnuradio-core/src/lib/general/gr_remez.h @@ -30,6 +30,7 @@ /*! * \brief Parks-McClellan FIR filter design. * + * \ingroup filter_design * * Calculates the optimal (in the Chebyshev/minimax sense) FIR filter * inpulse reponse given a set of band edges, the desired reponse on diff --git a/gnuradio-core/src/lib/general/gr_repeat.cc b/gnuradio-core/src/lib/general/gr_repeat.cc new file mode 100644 index 00000000..70bb44e5 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_repeat.cc @@ -0,0 +1,69 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_repeat_sptr +gr_make_repeat(size_t itemsize, int interp) +{ + return gr_repeat_sptr(new gr_repeat(itemsize, interp)); +} + +gr_repeat::gr_repeat(size_t itemsize, int interp) + : gr_sync_interpolator("extend", + gr_make_io_signature(1, 1, itemsize), + gr_make_io_signature(1, 1, itemsize), + interp), + d_interp(interp), + d_itemsize(itemsize) +{ +} + +gr_repeat::~gr_repeat() +{ +} + +int +gr_repeat::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const char *in = (const char *) input_items[0]; + char *out = (char *)output_items[0]; + + for (int i = 0; i < noutput_items/d_interp; i++) { + for (int j = 0; j < d_interp; j++) { + memcpy(out, in, d_itemsize); + out += d_itemsize; + } + + in += d_itemsize; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_repeat.h b/gnuradio-core/src/lib/general/gr_repeat.h new file mode 100644 index 00000000..f323fc37 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_repeat.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef INCLUDED_GR_REPEAT_H +#define INCLUDED_GR_REPEAT_H + +#include + +class gr_repeat; + +typedef boost::shared_ptr gr_repeat_sptr; + +gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp); + +/*! + * \brief Repeat a sample 'interp' times in output stream + * \ingroup misc_blk + */ + +class gr_repeat : public gr_sync_interpolator +{ +private: + friend gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp); + + gr_repeat(size_t itemsize, int interp); + + int d_interp; + int d_itemsize; + + public: + ~gr_repeat(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_REPEAT_H */ diff --git a/gnuradio-core/src/lib/general/gr_repeat.i b/gnuradio-core/src/lib/general/gr_repeat.i new file mode 100644 index 00000000..c657a490 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_repeat.i @@ -0,0 +1,11 @@ +/* -*- c++ -*- */ + +GR_SWIG_BLOCK_MAGIC(gr,repeat); + +gr_repeat_sptr gr_make_repeat(size_t itemsize, int interp); + +class gr_repeat : public gr_sync_interpolator +{ +private: + gr_repeat(); +}; diff --git a/gnuradio-core/src/lib/general/gr_rms_cf.h b/gnuradio-core/src/lib/general/gr_rms_cf.h index cbe6a840..86c4bdba 100644 --- a/gnuradio-core/src/lib/general/gr_rms_cf.h +++ b/gnuradio-core/src/lib/general/gr_rms_cf.h @@ -33,6 +33,7 @@ gr_make_rms_cf (double alpha = 0.0001); /*! * \brief RMS average power + * \ingroup math_blk */ class gr_rms_cf : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_rms_ff.h b/gnuradio-core/src/lib/general/gr_rms_ff.h index 19d3aa65..ed1635eb 100644 --- a/gnuradio-core/src/lib/general/gr_rms_ff.h +++ b/gnuradio-core/src/lib/general/gr_rms_ff.h @@ -33,6 +33,7 @@ gr_make_rms_ff (double alpha = 0.0001); /*! * \brief RMS average power + * \ingroup math_blk */ class gr_rms_ff : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_scrambler_bb.cc b/gnuradio-core/src/lib/general/gr_scrambler_bb.cc new file mode 100644 index 00000000..42f70901 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_scrambler_bb.cc @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_scrambler_bb_sptr +gr_make_scrambler_bb(int mask, int seed, int len) +{ + return gr_scrambler_bb_sptr(new gr_scrambler_bb(mask, seed, len)); +} + +gr_scrambler_bb::gr_scrambler_bb(int mask, int seed, int len) + : gr_sync_block("scrambler_bb", + gr_make_io_signature (1, 1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))), + d_lfsr(mask, seed, len) +{ +} + +int +gr_scrambler_bb::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) + out[i] = d_lfsr.next_bit_scramble(in[i]); + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_scrambler_bb.h b/gnuradio-core/src/lib/general/gr_scrambler_bb.h new file mode 100644 index 00000000..7efe8b59 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_scrambler_bb.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef INCLUDED_GR_SCRAMBLER_BB_H +#define INCLUDED_GR_SCRAMBLER_BB_H + +#include +#include "gri_lfsr.h" + +class gr_scrambler_bb; +typedef boost::shared_ptr gr_scrambler_bb_sptr; + +gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len); + +/*! + * Scramble an input stream using an LFSR. This block works on the LSB only + * of the input data stream, i.e., on an "unpacked binary" stream, and + * produces the same format on its output. + * + * \param mask Polynomial mask for LFSR + * \param seed Initial shift register contents + * \param len Shift register length + * + * \ingroup coding_blk + */ + +class gr_scrambler_bb : public gr_sync_block +{ + friend gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len); + + gri_lfsr d_lfsr; + + gr_scrambler_bb(int mask, int seed, int len); + +public: + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_SCRAMBLER_BB_H */ diff --git a/gnuradio-core/src/lib/general/gr_scrambler_bb.i b/gnuradio-core/src/lib/general/gr_scrambler_bb.i new file mode 100644 index 00000000..9a607c4b --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_scrambler_bb.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,scrambler_bb); + +gr_scrambler_bb_sptr gr_make_scrambler_bb(int mask, int seed, int len); + +class gr_scrambler_bb : public gr_sync_block +{ +private: + gr_scrambler_bb(int mask, int seed, int len); +}; diff --git a/gnuradio-core/src/lib/general/gr_short_to_float.h b/gnuradio-core/src/lib/general/gr_short_to_float.h index 9d19a757..ccb19d9f 100644 --- a/gnuradio-core/src/lib/general/gr_short_to_float.h +++ b/gnuradio-core/src/lib/general/gr_short_to_float.h @@ -33,7 +33,7 @@ gr_make_short_to_float (); /*! * \brief Convert stream of short to a stream of float - * \ingroup converter + * \ingroup converter_blk */ class gr_short_to_float : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_sig_source_X.cc.t b/gnuradio-core/src/lib/general/gr_sig_source_X.cc.t deleted file mode 100644 index 051c6b67..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_X.cc.t +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include <@NAME@.h> -#include -#include -#include -#include - - -@NAME@::@NAME@ (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, @TYPE@ offset) - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (@TYPE@))), - d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), - d_ampl (ampl), d_offset (offset) -{ - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -@NAME@_sptr -gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, @TYPE@ offset) -{ - return @NAME@_sptr (new @NAME@ (sampling_freq, waveform, frequency, ampl, offset)); -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @TYPE@ *optr = (@TYPE@ *) output_items[0]; - @TYPE@ t; - - switch (d_waveform){ - -#if @IS_COMPLEX@ // complex? - - case GR_CONST_WAVE: - t = (gr_complex) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - case GR_COS_WAVE: - d_nco.sincos (optr, noutput_items, d_ampl); - if (d_offset == gr_complex(0,0)) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - -#else // nope... - - case GR_CONST_WAVE: - t = (@TYPE@) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - d_nco.sin (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - - case GR_COS_WAVE: - d_nco.cos (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; -#endif - - default: - throw std::runtime_error ("gr_sig_source: invalid waveform"); - } - - return noutput_items; -} - -void -@NAME@::set_sampling_freq (double sampling_freq) -{ - d_sampling_freq = sampling_freq; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -@NAME@::set_waveform (gr_waveform_t waveform) -{ - d_waveform = waveform; -} - -void -@NAME@::set_frequency (double frequency) -{ - d_frequency = frequency; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -@NAME@::set_amplitude (double ampl) -{ - d_ampl = ampl; -} - -void -@NAME@::set_offset (@TYPE@ offset) -{ - d_offset = offset; -} - diff --git a/gnuradio-core/src/lib/general/gr_sig_source_X.h.t b/gnuradio-core/src/lib/general/gr_sig_source_X.h.t deleted file mode 100644 index 2980ab80..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_X.h.t +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include -#include -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @NAME@_sptr; - -/*! - * \brief signal generator with @TYPE@ output. - * \ingroup source - */ - -class @NAME@ : public gr_sync_block { - friend @NAME@_sptr - gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, @TYPE@ offset); - - double d_sampling_freq; - gr_waveform_t d_waveform; - double d_frequency; - double d_ampl; - @TYPE@ d_offset; - gr_fxpt_nco d_nco; - - - @NAME@ (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, @TYPE@ offset); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // ACCESSORS - double sampling_freq () const { return d_sampling_freq; } - gr_waveform_t waveform () const { return d_waveform; } - double frequency () const { return d_frequency; } - double amplitude () const { return d_ampl; } - @TYPE@ offset () const { return d_offset; } - - // MANIPULATORS - void set_sampling_freq (double sampling_freq); - void set_waveform (gr_waveform_t waveform); - void set_frequency (double frequency); - void set_amplitude (double ampl); - void set_offset (@TYPE@ offset); -}; - -@NAME@_sptr -gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, @TYPE@ offset = 0); - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_c.cc b/gnuradio-core/src/lib/general/gr_sig_source_c.cc deleted file mode 100644 index 86a95097..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_c.cc +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - - -gr_sig_source_c::gr_sig_source_c (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, gr_complex offset) - : gr_sync_block ("sig_source_c", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (gr_complex))), - d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), - d_ampl (ampl), d_offset (offset) -{ - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -gr_sig_source_c_sptr -gr_make_sig_source_c (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, gr_complex offset) -{ - return gr_sig_source_c_sptr (new gr_sig_source_c (sampling_freq, waveform, frequency, ampl, offset)); -} - -int -gr_sig_source_c::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - gr_complex t; - - switch (d_waveform){ - -#if 1 // complex? - - case GR_CONST_WAVE: - t = (gr_complex) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - case GR_COS_WAVE: - d_nco.sincos (optr, noutput_items, d_ampl); - if (d_offset == gr_complex(0,0)) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - -#else // nope... - - case GR_CONST_WAVE: - t = (gr_complex) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - d_nco.sin (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - - case GR_COS_WAVE: - d_nco.cos (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; -#endif - - default: - throw std::runtime_error ("gr_sig_source: invalid waveform"); - } - - return noutput_items; -} - -void -gr_sig_source_c::set_sampling_freq (double sampling_freq) -{ - d_sampling_freq = sampling_freq; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_c::set_waveform (gr_waveform_t waveform) -{ - d_waveform = waveform; -} - -void -gr_sig_source_c::set_frequency (double frequency) -{ - d_frequency = frequency; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_c::set_amplitude (double ampl) -{ - d_ampl = ampl; -} - -void -gr_sig_source_c::set_offset (gr_complex offset) -{ - d_offset = offset; -} - diff --git a/gnuradio-core/src/lib/general/gr_sig_source_c.h b/gnuradio-core/src/lib/general/gr_sig_source_c.h deleted file mode 100644 index 3ba00d21..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_c.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SIG_SOURCE_C_H -#define INCLUDED_GR_SIG_SOURCE_C_H - -#include -#include -#include - -class gr_sig_source_c; -typedef boost::shared_ptr gr_sig_source_c_sptr; - -/*! - * \brief signal generator with gr_complex output. - * \ingroup source - */ - -class gr_sig_source_c : public gr_sync_block { - friend gr_sig_source_c_sptr - gr_make_sig_source_c (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, gr_complex offset); - - double d_sampling_freq; - gr_waveform_t d_waveform; - double d_frequency; - double d_ampl; - gr_complex d_offset; - gr_fxpt_nco d_nco; - - - gr_sig_source_c (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, gr_complex offset); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // ACCESSORS - double sampling_freq () const { return d_sampling_freq; } - gr_waveform_t waveform () const { return d_waveform; } - double frequency () const { return d_frequency; } - double amplitude () const { return d_ampl; } - gr_complex offset () const { return d_offset; } - - // MANIPULATORS - void set_sampling_freq (double sampling_freq); - void set_waveform (gr_waveform_t waveform); - void set_frequency (double frequency); - void set_amplitude (double ampl); - void set_offset (gr_complex offset); -}; - -gr_sig_source_c_sptr -gr_make_sig_source_c (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, gr_complex offset = 0); - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_f.cc b/gnuradio-core/src/lib/general/gr_sig_source_f.cc deleted file mode 100644 index b9ce3f0c..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_f.cc +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - - -gr_sig_source_f::gr_sig_source_f (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, float offset) - : gr_sync_block ("sig_source_f", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (float))), - d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), - d_ampl (ampl), d_offset (offset) -{ - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -gr_sig_source_f_sptr -gr_make_sig_source_f (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, float offset) -{ - return gr_sig_source_f_sptr (new gr_sig_source_f (sampling_freq, waveform, frequency, ampl, offset)); -} - -int -gr_sig_source_f::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - float t; - - switch (d_waveform){ - -#if 0 // complex? - - case GR_CONST_WAVE: - t = (gr_complex) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - case GR_COS_WAVE: - d_nco.sincos (optr, noutput_items, d_ampl); - if (d_offset == gr_complex(0,0)) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - -#else // nope... - - case GR_CONST_WAVE: - t = (float) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - d_nco.sin (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - - case GR_COS_WAVE: - d_nco.cos (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; -#endif - - default: - throw std::runtime_error ("gr_sig_source: invalid waveform"); - } - - return noutput_items; -} - -void -gr_sig_source_f::set_sampling_freq (double sampling_freq) -{ - d_sampling_freq = sampling_freq; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_f::set_waveform (gr_waveform_t waveform) -{ - d_waveform = waveform; -} - -void -gr_sig_source_f::set_frequency (double frequency) -{ - d_frequency = frequency; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_f::set_amplitude (double ampl) -{ - d_ampl = ampl; -} - -void -gr_sig_source_f::set_offset (float offset) -{ - d_offset = offset; -} - diff --git a/gnuradio-core/src/lib/general/gr_sig_source_f.h b/gnuradio-core/src/lib/general/gr_sig_source_f.h deleted file mode 100644 index 267094b3..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_f.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SIG_SOURCE_F_H -#define INCLUDED_GR_SIG_SOURCE_F_H - -#include -#include -#include - -class gr_sig_source_f; -typedef boost::shared_ptr gr_sig_source_f_sptr; - -/*! - * \brief signal generator with float output. - * \ingroup source - */ - -class gr_sig_source_f : public gr_sync_block { - friend gr_sig_source_f_sptr - gr_make_sig_source_f (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, float offset); - - double d_sampling_freq; - gr_waveform_t d_waveform; - double d_frequency; - double d_ampl; - float d_offset; - gr_fxpt_nco d_nco; - - - gr_sig_source_f (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, float offset); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // ACCESSORS - double sampling_freq () const { return d_sampling_freq; } - gr_waveform_t waveform () const { return d_waveform; } - double frequency () const { return d_frequency; } - double amplitude () const { return d_ampl; } - float offset () const { return d_offset; } - - // MANIPULATORS - void set_sampling_freq (double sampling_freq); - void set_waveform (gr_waveform_t waveform); - void set_frequency (double frequency); - void set_amplitude (double ampl); - void set_offset (float offset); -}; - -gr_sig_source_f_sptr -gr_make_sig_source_f (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, float offset = 0); - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_i.cc b/gnuradio-core/src/lib/general/gr_sig_source_i.cc deleted file mode 100644 index 2fe1c3a4..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_i.cc +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - - -gr_sig_source_i::gr_sig_source_i (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, int offset) - : gr_sync_block ("sig_source_i", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (int))), - d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), - d_ampl (ampl), d_offset (offset) -{ - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -gr_sig_source_i_sptr -gr_make_sig_source_i (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, int offset) -{ - return gr_sig_source_i_sptr (new gr_sig_source_i (sampling_freq, waveform, frequency, ampl, offset)); -} - -int -gr_sig_source_i::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - int t; - - switch (d_waveform){ - -#if 0 // complex? - - case GR_CONST_WAVE: - t = (gr_complex) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - case GR_COS_WAVE: - d_nco.sincos (optr, noutput_items, d_ampl); - if (d_offset == gr_complex(0,0)) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - -#else // nope... - - case GR_CONST_WAVE: - t = (int) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - d_nco.sin (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - - case GR_COS_WAVE: - d_nco.cos (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; -#endif - - default: - throw std::runtime_error ("gr_sig_source: invalid waveform"); - } - - return noutput_items; -} - -void -gr_sig_source_i::set_sampling_freq (double sampling_freq) -{ - d_sampling_freq = sampling_freq; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_i::set_waveform (gr_waveform_t waveform) -{ - d_waveform = waveform; -} - -void -gr_sig_source_i::set_frequency (double frequency) -{ - d_frequency = frequency; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_i::set_amplitude (double ampl) -{ - d_ampl = ampl; -} - -void -gr_sig_source_i::set_offset (int offset) -{ - d_offset = offset; -} - diff --git a/gnuradio-core/src/lib/general/gr_sig_source_i.h b/gnuradio-core/src/lib/general/gr_sig_source_i.h deleted file mode 100644 index 05857c70..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_i.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SIG_SOURCE_I_H -#define INCLUDED_GR_SIG_SOURCE_I_H - -#include -#include -#include - -class gr_sig_source_i; -typedef boost::shared_ptr gr_sig_source_i_sptr; - -/*! - * \brief signal generator with int output. - * \ingroup source - */ - -class gr_sig_source_i : public gr_sync_block { - friend gr_sig_source_i_sptr - gr_make_sig_source_i (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, int offset); - - double d_sampling_freq; - gr_waveform_t d_waveform; - double d_frequency; - double d_ampl; - int d_offset; - gr_fxpt_nco d_nco; - - - gr_sig_source_i (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, int offset); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // ACCESSORS - double sampling_freq () const { return d_sampling_freq; } - gr_waveform_t waveform () const { return d_waveform; } - double frequency () const { return d_frequency; } - double amplitude () const { return d_ampl; } - int offset () const { return d_offset; } - - // MANIPULATORS - void set_sampling_freq (double sampling_freq); - void set_waveform (gr_waveform_t waveform); - void set_frequency (double frequency); - void set_amplitude (double ampl); - void set_offset (int offset); -}; - -gr_sig_source_i_sptr -gr_make_sig_source_i (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, int offset = 0); - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_s.cc b/gnuradio-core/src/lib/general/gr_sig_source_s.cc deleted file mode 100644 index db78e857..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_s.cc +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - - -gr_sig_source_s::gr_sig_source_s (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, short offset) - : gr_sync_block ("sig_source_s", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (short))), - d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), - d_ampl (ampl), d_offset (offset) -{ - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -gr_sig_source_s_sptr -gr_make_sig_source_s (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, short offset) -{ - return gr_sig_source_s_sptr (new gr_sig_source_s (sampling_freq, waveform, frequency, ampl, offset)); -} - -int -gr_sig_source_s::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - short t; - - switch (d_waveform){ - -#if 0 // complex? - - case GR_CONST_WAVE: - t = (gr_complex) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - case GR_COS_WAVE: - d_nco.sincos (optr, noutput_items, d_ampl); - if (d_offset == gr_complex(0,0)) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - -#else // nope... - - case GR_CONST_WAVE: - t = (short) d_ampl + d_offset; - for (int i = 0; i < noutput_items; i++) // FIXME unroll - optr[i] = t; - break; - - case GR_SIN_WAVE: - d_nco.sin (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; - - case GR_COS_WAVE: - d_nco.cos (optr, noutput_items, d_ampl); - if (d_offset == 0) - break; - - for (int i = 0; i < noutput_items; i++){ - optr[i] += d_offset; - } - break; -#endif - - default: - throw std::runtime_error ("gr_sig_source: invalid waveform"); - } - - return noutput_items; -} - -void -gr_sig_source_s::set_sampling_freq (double sampling_freq) -{ - d_sampling_freq = sampling_freq; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_s::set_waveform (gr_waveform_t waveform) -{ - d_waveform = waveform; -} - -void -gr_sig_source_s::set_frequency (double frequency) -{ - d_frequency = frequency; - d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); -} - -void -gr_sig_source_s::set_amplitude (double ampl) -{ - d_ampl = ampl; -} - -void -gr_sig_source_s::set_offset (short offset) -{ - d_offset = offset; -} - diff --git a/gnuradio-core/src/lib/general/gr_sig_source_s.h b/gnuradio-core/src/lib/general/gr_sig_source_s.h deleted file mode 100644 index f6c5f806..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_s.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SIG_SOURCE_S_H -#define INCLUDED_GR_SIG_SOURCE_S_H - -#include -#include -#include - -class gr_sig_source_s; -typedef boost::shared_ptr gr_sig_source_s_sptr; - -/*! - * \brief signal generator with short output. - * \ingroup source - */ - -class gr_sig_source_s : public gr_sync_block { - friend gr_sig_source_s_sptr - gr_make_sig_source_s (double sampling_freq, gr_waveform_t waveform, - double frequency, double ampl, short offset); - - double d_sampling_freq; - gr_waveform_t d_waveform; - double d_frequency; - double d_ampl; - short d_offset; - gr_fxpt_nco d_nco; - - - gr_sig_source_s (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, short offset); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // ACCESSORS - double sampling_freq () const { return d_sampling_freq; } - gr_waveform_t waveform () const { return d_waveform; } - double frequency () const { return d_frequency; } - double amplitude () const { return d_ampl; } - short offset () const { return d_offset; } - - // MANIPULATORS - void set_sampling_freq (double sampling_freq); - void set_waveform (gr_waveform_t waveform); - void set_frequency (double frequency); - void set_amplitude (double ampl); - void set_offset (short offset); -}; - -gr_sig_source_s_sptr -gr_make_sig_source_s (double sampling_freq, gr_waveform_t waveform, - double wave_freq, double ampl, short offset = 0); - - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_waveform.h b/gnuradio-core/src/lib/general/gr_sig_source_waveform.h deleted file mode 100644 index 1900aaa6..00000000 --- a/gnuradio-core/src/lib/general/gr_sig_source_waveform.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ -#ifndef INCLUDED_GR_SIG_SOURCE_WAVEFORM_H -#define INCLUDED_GR_SIG_SOURCE_WAVEFORM_H - -typedef enum { - GR_CONST_WAVE = 100, GR_SIN_WAVE, GR_COS_WAVE -} gr_waveform_t; - -#endif /* INCLUDED_GR_SIG_SOURCE_WAVEFORM_H */ diff --git a/gnuradio-core/src/lib/general/gr_simple_correlator.cc b/gnuradio-core/src/lib/general/gr_simple_correlator.cc index 5638ff72..ebfbfa72 100644 --- a/gnuradio-core/src/lib/general/gr_simple_correlator.cc +++ b/gnuradio-core/src/lib/general/gr_simple_correlator.cc @@ -30,6 +30,8 @@ #include #include #include +#include +#include static const int THRESHOLD = 3; diff --git a/gnuradio-core/src/lib/general/gr_simple_correlator.h b/gnuradio-core/src/lib/general/gr_simple_correlator.h index db335fe0..b21d38a0 100644 --- a/gnuradio-core/src/lib/general/gr_simple_correlator.h +++ b/gnuradio-core/src/lib/general/gr_simple_correlator.h @@ -35,7 +35,7 @@ gr_simple_correlator_sptr gr_make_simple_correlator (int payload_bytesize); /*! * \brief inverse of gr_simple_framer (more or less) - * \ingroup block + * \ingroup sync_blk */ class gr_simple_correlator : public gr_block { diff --git a/gnuradio-core/src/lib/general/gr_simple_framer.cc b/gnuradio-core/src/lib/general/gr_simple_framer.cc index 33ae74e6..d2de0954 100644 --- a/gnuradio-core/src/lib/general/gr_simple_framer.cc +++ b/gnuradio-core/src/lib/general/gr_simple_framer.cc @@ -29,6 +29,7 @@ #include #include #include +#include gr_simple_framer_sptr diff --git a/gnuradio-core/src/lib/general/gr_simple_framer.h b/gnuradio-core/src/lib/general/gr_simple_framer.h index 4809ab47..d930da33 100644 --- a/gnuradio-core/src/lib/general/gr_simple_framer.h +++ b/gnuradio-core/src/lib/general/gr_simple_framer.h @@ -32,7 +32,7 @@ gr_simple_framer_sptr gr_make_simple_framer (int payload_bytesize); /*! * \brief add sync field, seq number and command field to payload - * \ingroup block + * \ingroup sync_blk */ class gr_simple_framer : public gr_block { diff --git a/gnuradio-core/src/lib/general/gr_simple_framer_sync.h b/gnuradio-core/src/lib/general/gr_simple_framer_sync.h index 2bda708e..d5712fe8 100644 --- a/gnuradio-core/src/lib/general/gr_simple_framer_sync.h +++ b/gnuradio-core/src/lib/general/gr_simple_framer_sync.h @@ -23,11 +23,12 @@ #ifndef INCLUDED_GR_SIMPLE_FRAMER_SYNC_H #define INCLUDED_GR_SIMPLE_FRAMER_SYNC_H -/* - * Here are a couple of maximum length sequences (m-sequences) that were generated by the +/*! + * \brief Here are a couple of maximum length sequences (m-sequences) that were generated by the * the "mseq" matlab/octave code downloaded from: * http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=990&objectType=file * + *
  * 31-bit m-sequence:
  *	0110100100001010111011000111110
  *	0x690AEC76 (padded on right with a zero)
@@ -35,6 +36,7 @@
  * 63-bit m-sequence:
  *	101011001101110110100100111000101111001010001100001000001111110
  *      0xACDDA4E2F28C20FC (padded on right with a zero)
+ * 
*/ static const unsigned long long GRSF_SYNC = 0xacdda4e2f28c20fcULL; diff --git a/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h b/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h index 47479640..30744f6f 100644 --- a/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h +++ b/gnuradio-core/src/lib/general/gr_simple_squelch_cc.h @@ -33,6 +33,7 @@ gr_make_simple_squelch_cc (double threshold_db, double alpha = 0.0001); /*! * \brief simple squelch block based on average signal power and threshold in dB. + * \ingroup level_blk */ class gr_simple_squelch_cc : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_skiphead.cc b/gnuradio-core/src/lib/general/gr_skiphead.cc index 662e32d1..45e3d5cb 100644 --- a/gnuradio-core/src/lib/general/gr_skiphead.cc +++ b/gnuradio-core/src/lib/general/gr_skiphead.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2005 Free Software Foundation, Inc. + * Copyright 2005,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -25,46 +25,59 @@ #endif #include #include +#include -gr_skiphead::gr_skiphead (size_t sizeof_stream_item, int nitems) - : gr_sync_block ("skiphead", - gr_make_io_signature (1, 1, sizeof_stream_item), - gr_make_io_signature (1, 1, sizeof_stream_item)), - d_nitems (nitems), d_nskipped_items (0) +gr_skiphead::gr_skiphead (size_t itemsize, size_t nitems_to_skip) + : gr_block ("skiphead", + gr_make_io_signature(1, 1, itemsize), + gr_make_io_signature(1, 1, itemsize)), + d_nitems_to_skip(nitems_to_skip), d_nitems(0) { } -gr_block_sptr -gr_make_skiphead (size_t sizeof_stream_item, int nitems) +gr_skiphead_sptr +gr_make_skiphead (size_t itemsize, size_t nitems_to_skip) { - return gr_block_sptr (new gr_skiphead (sizeof_stream_item, nitems)); + return gr_skiphead_sptr (new gr_skiphead (itemsize, nitems_to_skip)); } int -gr_skiphead::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) +gr_skiphead::general_work(int noutput_items, + gr_vector_int &ninput_items_ignored, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) { - int items_to_skip = d_nitems - d_nskipped_items; - if (items_to_skip <=0) - { - //Done with skipping, copy all input to the output; - memcpy (output_items[0], input_items[0], noutput_items * input_signature()->sizeof_stream_item (0)); - return noutput_items; - } else if (items_to_skip < noutput_items) - { - memcpy (output_items[0], &(((char *)input_items[0])[items_to_skip*input_signature()->sizeof_stream_item (0)]), (noutput_items -items_to_skip) * input_signature()->sizeof_stream_item (0)); - //memcpy (output_items[0], &((input_items[0])[items_to_skip]), (noutput_items -items_to_skip) * input_signature()->sizeof_stream_item (0)); - //memcpy (output_items[0], input_items[0]+items_to_skip*input_signature()->sizeof_stream_item (0), (noutput_items -items_to_skip) * input_signature()->sizeof_stream_item (0)); - d_nskipped_items += items_to_skip; - consume_each (items_to_skip); - return (noutput_items -items_to_skip); - } else - { - d_nskipped_items += noutput_items; - consume_each (items_to_skip); - return 0; + const char *in = (const char *) input_items[0]; + char *out = (char *) output_items[0]; + + int ninput_items = noutput_items; // we've got at least this many input items + int ii = 0; // input index + + while (ii < ninput_items){ + + long long ni_total = ii + d_nitems; // total items processed so far + if (ni_total < d_nitems_to_skip){ // need to skip some more + + int n_to_skip = (int) std::min(d_nitems_to_skip - ni_total, + (long long)(ninput_items - ii)); + ii += n_to_skip; + } + + else { // nothing left to skip. copy away + + int n_to_copy = ninput_items - ii; + if (n_to_copy > 0){ + size_t itemsize = output_signature()->sizeof_stream_item(0); + memcpy(out, in + (ii*itemsize), n_to_copy*itemsize); + } + + d_nitems += ninput_items; + consume_each(ninput_items); + return n_to_copy; + } } - return -1;//Should never get here + d_nitems += ninput_items; + consume_each(ninput_items); + return 0; } diff --git a/gnuradio-core/src/lib/general/gr_skiphead.h b/gnuradio-core/src/lib/general/gr_skiphead.h index dc7b8336..965feff9 100644 --- a/gnuradio-core/src/lib/general/gr_skiphead.h +++ b/gnuradio-core/src/lib/general/gr_skiphead.h @@ -26,29 +26,35 @@ #include #include // size_t +class gr_skiphead; +typedef boost::shared_ptr gr_skiphead_sptr; + + /*! * \brief skips the first N items, from then on copies items to the output - * \ingroup block + * \ingroup slicedice_blk * * Useful for building test cases and sources which have metadata or junk at the start */ -class gr_skiphead : public gr_sync_block +class gr_skiphead : public gr_block { - friend gr_block_sptr gr_make_skiphead (size_t sizeof_stream_item, int nitems); - gr_skiphead (size_t sizeof_stream_item, int nitems); + friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); + gr_skiphead (size_t itemsize, size_t nitems_to_skip); - int d_nitems; - int d_nskipped_items; + long long d_nitems_to_skip; + long long d_nitems; // total items seen public: - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); }; -gr_block_sptr -gr_make_skiphead (size_t sizeof_stream_item, int nitems); +gr_skiphead_sptr +gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); #endif /* INCLUDED_GR_SKIPHEAD_H */ diff --git a/gnuradio-core/src/lib/general/gr_skiphead.i b/gnuradio-core/src/lib/general/gr_skiphead.i index 9d77191c..52c0808f 100644 --- a/gnuradio-core/src/lib/general/gr_skiphead.i +++ b/gnuradio-core/src/lib/general/gr_skiphead.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2005 Free Software Foundation, Inc. + * Copyright 2005,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,11 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%ignore gr_skiphead; +GR_SWIG_BLOCK_MAGIC(gr,skiphead); + +gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); + class gr_skiphead : public gr_block { - friend gr_block_sptr gr_make_skiphead (size_t sizeof_stream_item, int nitems); - gr_skiphead (size_t sizeof_stream_item, int nitems); + friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); + gr_skiphead (size_t itemsize, size_t nitems_to_skip); }; - -%rename(skiphead) gr_make_skiphead; -gr_block_sptr gr_make_skiphead (size_t sizeof_stream_item, int nitems); diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.cc b/gnuradio-core/src/lib/general/gr_squash_ff.cc new file mode 100644 index 00000000..05ad4a7e --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_squash_ff.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +// expect input vector of igrid.size y-values, +// produce output vector of ogrid.size y-values + +gr_squash_ff_sptr +gr_make_squash_ff(const std::vector &igrid, + const std::vector &ogrid) +{ + return gr_squash_ff_sptr(new gr_squash_ff(igrid, ogrid)); +} + +gr_squash_ff::gr_squash_ff(const std::vector &igrid, + const std::vector &ogrid) + : gr_sync_block("squash_ff", + gr_make_io_signature(1, 1, sizeof(float) * igrid.size()), + gr_make_io_signature(1, 1, sizeof(float) * ogrid.size())) +{ + d_inum = igrid.size(); + d_onum = ogrid.size(); + d_igrid = (double *) malloc(d_inum * sizeof(double)); + d_iwork = (double *) malloc(d_inum * sizeof(double)); + d_ogrid = (double *) malloc(d_onum * sizeof(double)); + for (unsigned int i = 0; i < d_inum; i++) + d_igrid[i] = igrid[i]; + for (unsigned int i = 0; i < d_onum; i++) + d_ogrid[i] = ogrid[i]; + + d_accel = gsl_interp_accel_alloc(); + d_spline = gsl_spline_alloc(gsl_interp_cspline, d_inum); // FIXME check w/ Frank +} + +gr_squash_ff::~gr_squash_ff() +{ + free((char *) d_igrid); + free((char *) d_iwork); + free((char *) d_ogrid); + gsl_interp_accel_free(d_accel); + gsl_spline_free(d_spline); +} + +int +gr_squash_ff::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int count = 0; count < noutput_items; count++) { + + for (unsigned int i = 0; i < d_inum; i++) + d_iwork[i] = in[i]; + + gsl_spline_init(d_spline, d_igrid, d_iwork, d_inum); + + for (unsigned int i = 0; i < d_onum; i++) + out[i] = gsl_spline_eval(d_spline, d_ogrid[i], d_accel); + + in += d_inum; + out += d_onum; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.h b/gnuradio-core/src/lib/general/gr_squash_ff.h new file mode 100644 index 00000000..ee3426ca --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_squash_ff.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_GR_SQUASH_FF_H_ +# define INCLUDED_GR_SQUASH_FF_H_ + +#include +#include +#include +#include +/*! + * \brief implements cheap resampling of spectrum directly from + * spectral points, using gsl interpolation + * \ingroup misc + */ + +class gr_squash_ff; +typedef boost::shared_ptr gr_squash_ff_sptr; + +gr_squash_ff_sptr gr_make_squash_ff(const std::vector &igrid, + const std::vector &ogrid); + +class gr_squash_ff : public gr_sync_block +{ + friend gr_squash_ff_sptr gr_make_squash_ff(const std::vector &igrid, + const std::vector &ogrid); + + size_t d_inum; + size_t d_onum; + double *d_igrid; + double *d_iwork; + double *d_ogrid; + + gsl_interp_accel *d_accel; + gsl_spline *d_spline; + + gr_squash_ff(const std::vector &igrid, + const std::vector &ogrid); + + public: + ~gr_squash_ff(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_squash_ff.i b/gnuradio-core/src/lib/general/gr_squash_ff.i new file mode 100644 index 00000000..c89b1c28 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_squash_ff.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,squash_ff); + +gr_squash_ff_sptr gr_make_squash_ff(const std::vector &igrid, + const std::vector &ogrid); + +class gr_squash_ff : public gr_sync_block +{ +private: + gr_squash_ff(const std::vector &igrid, + const std::vector &ogrid); + +}; + diff --git a/gnuradio-core/src/lib/general/gr_stream_mux.cc b/gnuradio-core/src/lib/general/gr_stream_mux.cc new file mode 100644 index 00000000..06556b58 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_stream_mux.cc @@ -0,0 +1,124 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#define VERBOSE 0 + +gr_stream_mux_sptr +gr_make_stream_mux (size_t itemsize, const std::vector &lengths) +{ + return gr_stream_mux_sptr (new gr_stream_mux (itemsize, lengths)); +} + +gr_stream_mux::gr_stream_mux (size_t itemsize, const std::vector &lengths) + : gr_block ("stream_mux", + gr_make_io_signature (1, -1, itemsize), + gr_make_io_signature (1, 1, itemsize)), + d_itemsize(itemsize), + d_stream(0), + d_residual(0), + d_lengths(lengths) +{ + if(d_lengths[d_stream] == 0) { + increment_stream(); + } + d_residual = d_lengths[d_stream]; +} + +gr_stream_mux::~gr_stream_mux(void) +{ +} + +void +gr_stream_mux::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size (); + for (unsigned i = 0; i < ninputs; i++) + ninput_items_required[i] = (d_lengths[i] == 0 ? 0 : 1); +} + +void gr_stream_mux::increment_stream() +{ + do { + d_stream = (d_stream+1) % d_lengths.size(); + } while(d_lengths[d_stream] == 0); + + d_residual = d_lengths[d_stream]; +} + +int +gr_stream_mux::general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + char *out = (char *) output_items[0]; + const char *in; + int out_index = 0; + std::vector input_index(d_lengths.size(), 0); + + if(VERBOSE) { + printf("mux: nouput_items: %d d_stream: %d\n", noutput_items, d_stream); + for(size_t i = 0; i < d_lengths.size(); i++) + printf("\tninput_items[%zu]: %d\n", i, ninput_items[i]); + } + + while (1) { + int r = std::min(noutput_items - out_index, + std::min(d_residual, + ninput_items[d_stream] - input_index[d_stream])); + if(VERBOSE) { + printf("mux: r=%d\n", r); + printf("\tnoutput_items - out_index: %d\n", + noutput_items - out_index); + printf("\td_residual: %d\n", + d_residual); + printf("\tninput_items[d_stream] - input_index[d_stream]: %d\n", + ninput_items[d_stream] - input_index[d_stream]); + } + + if(r <= 0) { + return out_index; + } + + in = (const char *) input_items[d_stream] + input_index[d_stream]*d_itemsize; + + memcpy(&out[out_index*d_itemsize], in, r*d_itemsize); + out_index += r; + input_index[d_stream] += r; + d_residual -= r; + + consume(d_stream, r); + + if(d_residual == 0) { + increment_stream(); + } + } +} diff --git a/gnuradio-core/src/lib/general/gr_stream_mux.h b/gnuradio-core/src/lib/general/gr_stream_mux.h new file mode 100644 index 00000000..29829339 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_stream_mux.h @@ -0,0 +1,92 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_GR_STREAM_MUX_H +#define INCLUDED_GR_STREAM_MUX_H + + +#include +#include + +/*! + * \brief Creates a stream muxing block to multiplex many streams into + * one with a specified format. + * \ingroup converter_blk + * + * \param itemsize the item size of the stream + * \param length a vector (list/tuple) specifying the number of + * items from each stream the mux together. + * Warning: this requires that at least as many items + * per stream are available or the system will wait + * indefinitely for the items. + * + */ +class gr_stream_mux; +typedef boost::shared_ptr gr_stream_mux_sptr; + + + +gr_stream_mux_sptr +gr_make_stream_mux (size_t itemsize, const std::vector &lengths); + + +/*! + * \brief Stream muxing block to multiplex many streams into + * one with a specified format. + * + * Muxes N streams together producing an output stream that + * contains N0 items from the first stream, N1 items from the second, + * etc. and repeats: + * + * [N0, N1, N2, ..., Nm, N0, N1, ...] + */ + +class gr_stream_mux : public gr_block +{ + friend gr_stream_mux_sptr + gr_make_stream_mux (size_t itemsize, const std::vector &lengths); + + protected: + gr_stream_mux (size_t itemsize, const std::vector &lengths); + + private: + size_t d_itemsize; + unsigned int d_stream; // index of currently selected stream + int d_residual; // number if items left to put into current stream + gr_vector_int d_lengths; // number if items to pack per stream + + void increment_stream(); + + public: + ~gr_stream_mux(void); + + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_stream_mux.i b/gnuradio-core/src/lib/general/gr_stream_mux.i new file mode 100644 index 00000000..be6d58ab --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_stream_mux.i @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +GR_SWIG_BLOCK_MAGIC(gr,stream_mux) + +gr_stream_mux_sptr +gr_make_stream_mux (size_t itemsize, + const std::vector &lengths); + +class gr_stream_mux : public gr_block +{ + protected: + gr_make_stream_mux (size_t itemsize, + const std::vector &lengths); + + public: + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; diff --git a/gnuradio-core/src/lib/general/gr_stream_to_streams.cc b/gnuradio-core/src/lib/general/gr_stream_to_streams.cc index 1efbe31b..b38a8d4d 100644 --- a/gnuradio-core/src/lib/general/gr_stream_to_streams.cc +++ b/gnuradio-core/src/lib/general/gr_stream_to_streams.cc @@ -26,6 +26,7 @@ #include #include +#include gr_stream_to_streams_sptr gr_make_stream_to_streams (size_t item_size, size_t nstreams) diff --git a/gnuradio-core/src/lib/general/gr_stream_to_streams.h b/gnuradio-core/src/lib/general/gr_stream_to_streams.h index 14799952..2fdd39e4 100644 --- a/gnuradio-core/src/lib/general/gr_stream_to_streams.h +++ b/gnuradio-core/src/lib/general/gr_stream_to_streams.h @@ -33,7 +33,7 @@ gr_make_stream_to_streams (size_t item_size, size_t nstreams); /*! * \brief convert a stream of items into a N streams of items - * \ingroup block + * \ingroup slicedice_blk * * Converts a stream of N items into N streams of 1 item. * Repeat ad infinitum. diff --git a/gnuradio-core/src/lib/general/gr_stream_to_vector.cc b/gnuradio-core/src/lib/general/gr_stream_to_vector.cc index 739d38d8..fd233adc 100644 --- a/gnuradio-core/src/lib/general/gr_stream_to_vector.cc +++ b/gnuradio-core/src/lib/general/gr_stream_to_vector.cc @@ -26,6 +26,7 @@ #include #include +#include gr_stream_to_vector_sptr gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block) diff --git a/gnuradio-core/src/lib/general/gr_stream_to_vector.h b/gnuradio-core/src/lib/general/gr_stream_to_vector.h index a413f095..2cb03f6a 100644 --- a/gnuradio-core/src/lib/general/gr_stream_to_vector.h +++ b/gnuradio-core/src/lib/general/gr_stream_to_vector.h @@ -34,7 +34,7 @@ gr_make_stream_to_vector (size_t item_size, size_t nitems_per_block); /*! * \brief convert a stream of items into a stream of blocks containing nitems_per_block - * \ingroup block + * \ingroup slicedice_blk */ class gr_stream_to_vector : public gr_sync_decimator { diff --git a/gnuradio-core/src/lib/general/gr_streams_to_stream.cc b/gnuradio-core/src/lib/general/gr_streams_to_stream.cc index f4c939e7..6f6b49a8 100644 --- a/gnuradio-core/src/lib/general/gr_streams_to_stream.cc +++ b/gnuradio-core/src/lib/general/gr_streams_to_stream.cc @@ -26,6 +26,7 @@ #include #include +#include gr_streams_to_stream_sptr gr_make_streams_to_stream (size_t item_size, size_t nstreams) diff --git a/gnuradio-core/src/lib/general/gr_streams_to_stream.h b/gnuradio-core/src/lib/general/gr_streams_to_stream.h index 3df8f7a2..044af6cd 100644 --- a/gnuradio-core/src/lib/general/gr_streams_to_stream.h +++ b/gnuradio-core/src/lib/general/gr_streams_to_stream.h @@ -33,7 +33,7 @@ gr_make_streams_to_stream (size_t item_size, size_t nstreams); /*! * \brief Convert N streams of 1 item into a 1 stream of N items - * \ingroup block + * \ingroup slicedice_blk * * Convert N streams of 1 item into 1 stream of N items. * Repeat ad infinitum. diff --git a/gnuradio-core/src/lib/general/gr_streams_to_vector.cc b/gnuradio-core/src/lib/general/gr_streams_to_vector.cc index c0d130b5..f3ee2c49 100644 --- a/gnuradio-core/src/lib/general/gr_streams_to_vector.cc +++ b/gnuradio-core/src/lib/general/gr_streams_to_vector.cc @@ -26,6 +26,7 @@ #include #include +#include gr_streams_to_vector_sptr gr_make_streams_to_vector (size_t item_size, size_t nstreams) diff --git a/gnuradio-core/src/lib/general/gr_streams_to_vector.h b/gnuradio-core/src/lib/general/gr_streams_to_vector.h index 85aba0aa..1b2e3ebf 100644 --- a/gnuradio-core/src/lib/general/gr_streams_to_vector.h +++ b/gnuradio-core/src/lib/general/gr_streams_to_vector.h @@ -34,7 +34,7 @@ gr_make_streams_to_vector (size_t item_size, size_t nstreams); /*! * \brief convert N streams of items to 1 stream of vector length N - * \ingroup block + * \ingroup slicedice_blk */ class gr_streams_to_vector : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_stretch_ff.cc b/gnuradio-core/src/lib/general/gr_stretch_ff.cc new file mode 100644 index 00000000..f1822dcb --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_stretch_ff.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_stretch_ff_sptr +gr_make_stretch_ff(float lo, size_t vlen) +{ + return gr_stretch_ff_sptr(new gr_stretch_ff(lo, vlen)); +} + +gr_stretch_ff::gr_stretch_ff(float lo, size_t vlen) + : gr_sync_block("stretch_ff", + gr_make_io_signature(1, 1, vlen * sizeof(float)), + gr_make_io_signature(1, 1, vlen * sizeof(float))), + d_lo(lo), d_vlen(vlen) +{ +} + +int +gr_stretch_ff::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int count = 0; count < noutput_items; count++) { + float vmax = in[0] - d_lo; + + for (unsigned int i = 1; i < d_vlen; i++) { + float vtmp = in[i] - d_lo; + if (vtmp > vmax) + vmax = vtmp; + } + + if (vmax != 0.0) + for (unsigned int i = 0; i < d_vlen; i++) + out[i] = d_lo * (1.0 - (in[i] - d_lo) / vmax); + else + for (unsigned int i = 0; i < d_vlen; i++) + out[i] = in[i]; + + in += d_vlen; + out += d_vlen; + } + + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/general/gr_stretch_ff.h b/gnuradio-core/src/lib/general/gr_stretch_ff.h new file mode 100644 index 00000000..e75e1969 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_stretch_ff.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_GR_STRETCH_FF_H_ +# define INCLUDED_GR_STRETCH_FF_H_ + +#include + +/*! + * \brief adjust y-range of an input vector by mapping to range + * (max-of-input, stipulated-min). Primarily for spectral signature + * matching by normalizing spectrum dynamic ranges. + * \ingroup misc_blk + */ + + +class gr_stretch_ff; +typedef boost::shared_ptr gr_stretch_ff_sptr; + +gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen); + +class gr_stretch_ff : public gr_sync_block +{ + friend gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen); + + float d_lo; // the constant + size_t d_vlen; + gr_stretch_ff(float lo, size_t vlen); + + public: + float lo() const { return d_lo; } + void set_lo(float lo) { d_lo = lo; } + size_t vlen() const { return d_vlen; } + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_stretch_ff.i b/gnuradio-core/src/lib/general/gr_stretch_ff.i new file mode 100644 index 00000000..74c10fb2 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_stretch_ff.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,stretch_ff); + +gr_stretch_ff_sptr gr_make_stretch_ff(float lo, size_t vlen); + +class gr_stretch_ff : public gr_sync_block +{ +private: + gr_stretch_ff(float lo, size_t vlen); +}; + diff --git a/gnuradio-core/src/lib/general/gr_sub_XX.cc.t b/gnuradio-core/src/lib/general/gr_sub_XX.cc.t deleted file mode 100644 index 178e1714..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_XX.cc.t +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <@NAME@.h> -#include - -@SPTR_NAME@ -gr_make_@BASE_NAME@ () -{ - return @SPTR_NAME@ (new @NAME@ ()); -} - -@NAME@::@NAME@ () - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), - gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items; i++) - *optr++ = (@O_TYPE@) -((@I_TYPE@ *) input_items[0])[i]; - } - - else { - for (int i = 0; i < noutput_items; i++){ - @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc -= ((@I_TYPE@ *) input_items[j])[i]; - - *optr++ = (@O_TYPE@) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_sub_XX.h.t b/gnuradio-core/src/lib/general/gr_sub_XX.h.t deleted file mode 100644 index f96906af..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_XX.h.t +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -/*! - * \brief output = input_0 - input_1 - ...) - * \ingroup block - * - * Subtract across all input streams. - */ -class @NAME@ : public gr_sync_block -{ - friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); - - @NAME@ (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sub_XX.i.t b/gnuradio-core/src/lib/general/gr_sub_XX.i.t deleted file mode 100644 index a4bc4ce6..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_XX.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -class @NAME@ : public gr_sync_block -{ - private: - @NAME@ (); -}; diff --git a/gnuradio-core/src/lib/general/gr_sub_cc.cc b/gnuradio-core/src/lib/general/gr_sub_cc.cc deleted file mode 100644 index 2f76ef77..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_cc.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_sub_cc_sptr -gr_make_sub_cc () -{ - return gr_sub_cc_sptr (new gr_sub_cc ()); -} - -gr_sub_cc::gr_sub_cc () - : gr_sync_block ("sub_cc", - gr_make_io_signature (1, -1, sizeof (gr_complex)), - gr_make_io_signature (1, 1, sizeof (gr_complex))) -{ -} - -int -gr_sub_cc::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items; i++) - *optr++ = (gr_complex) -((gr_complex *) input_items[0])[i]; - } - - else { - for (int i = 0; i < noutput_items; i++){ - gr_complex acc = ((gr_complex *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc -= ((gr_complex *) input_items[j])[i]; - - *optr++ = (gr_complex) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_sub_cc.h b/gnuradio-core/src/lib/general/gr_sub_cc.h deleted file mode 100644 index 9d1124c0..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_cc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SUB_CC_H -#define INCLUDED_GR_SUB_CC_H - -#include - -class gr_sub_cc; -typedef boost::shared_ptr gr_sub_cc_sptr; - -gr_sub_cc_sptr gr_make_sub_cc (); - -/*! - * \brief output = input_0 - input_1 - ...) - * \ingroup block - * - * Subtract across all input streams. - */ -class gr_sub_cc : public gr_sync_block -{ - friend gr_sub_cc_sptr gr_make_sub_cc (); - - gr_sub_cc (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sub_cc.i b/gnuradio-core/src/lib/general/gr_sub_cc.i deleted file mode 100644 index 26d4306b..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_cc.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,sub_cc) - -gr_sub_cc_sptr gr_make_sub_cc (); - -class gr_sub_cc : public gr_sync_block -{ - private: - gr_sub_cc (); -}; diff --git a/gnuradio-core/src/lib/general/gr_sub_ff.cc b/gnuradio-core/src/lib/general/gr_sub_ff.cc deleted file mode 100644 index 1588b837..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ff.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_sub_ff_sptr -gr_make_sub_ff () -{ - return gr_sub_ff_sptr (new gr_sub_ff ()); -} - -gr_sub_ff::gr_sub_ff () - : gr_sync_block ("sub_ff", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, 1, sizeof (float))) -{ -} - -int -gr_sub_ff::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items; i++) - *optr++ = (float) -((float *) input_items[0])[i]; - } - - else { - for (int i = 0; i < noutput_items; i++){ - float acc = ((float *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc -= ((float *) input_items[j])[i]; - - *optr++ = (float) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_sub_ff.h b/gnuradio-core/src/lib/general/gr_sub_ff.h deleted file mode 100644 index 7ae80e52..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ff.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SUB_FF_H -#define INCLUDED_GR_SUB_FF_H - -#include - -class gr_sub_ff; -typedef boost::shared_ptr gr_sub_ff_sptr; - -gr_sub_ff_sptr gr_make_sub_ff (); - -/*! - * \brief output = input_0 - input_1 - ...) - * \ingroup block - * - * Subtract across all input streams. - */ -class gr_sub_ff : public gr_sync_block -{ - friend gr_sub_ff_sptr gr_make_sub_ff (); - - gr_sub_ff (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sub_ff.i b/gnuradio-core/src/lib/general/gr_sub_ff.i deleted file mode 100644 index b06d4eae..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ff.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,sub_ff) - -gr_sub_ff_sptr gr_make_sub_ff (); - -class gr_sub_ff : public gr_sync_block -{ - private: - gr_sub_ff (); -}; diff --git a/gnuradio-core/src/lib/general/gr_sub_ii.cc b/gnuradio-core/src/lib/general/gr_sub_ii.cc deleted file mode 100644 index a5029ec7..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ii.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_sub_ii_sptr -gr_make_sub_ii () -{ - return gr_sub_ii_sptr (new gr_sub_ii ()); -} - -gr_sub_ii::gr_sub_ii () - : gr_sync_block ("sub_ii", - gr_make_io_signature (1, -1, sizeof (int)), - gr_make_io_signature (1, 1, sizeof (int))) -{ -} - -int -gr_sub_ii::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items; i++) - *optr++ = (int) -((int *) input_items[0])[i]; - } - - else { - for (int i = 0; i < noutput_items; i++){ - int acc = ((int *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc -= ((int *) input_items[j])[i]; - - *optr++ = (int) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_sub_ii.h b/gnuradio-core/src/lib/general/gr_sub_ii.h deleted file mode 100644 index 8460fad5..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ii.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SUB_II_H -#define INCLUDED_GR_SUB_II_H - -#include - -class gr_sub_ii; -typedef boost::shared_ptr gr_sub_ii_sptr; - -gr_sub_ii_sptr gr_make_sub_ii (); - -/*! - * \brief output = input_0 - input_1 - ...) - * \ingroup block - * - * Subtract across all input streams. - */ -class gr_sub_ii : public gr_sync_block -{ - friend gr_sub_ii_sptr gr_make_sub_ii (); - - gr_sub_ii (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sub_ii.i b/gnuradio-core/src/lib/general/gr_sub_ii.i deleted file mode 100644 index 1683e227..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ii.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,sub_ii) - -gr_sub_ii_sptr gr_make_sub_ii (); - -class gr_sub_ii : public gr_sync_block -{ - private: - gr_sub_ii (); -}; diff --git a/gnuradio-core/src/lib/general/gr_sub_ss.cc b/gnuradio-core/src/lib/general/gr_sub_ss.cc deleted file mode 100644 index 3531b9ad..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ss.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -gr_sub_ss_sptr -gr_make_sub_ss () -{ - return gr_sub_ss_sptr (new gr_sub_ss ()); -} - -gr_sub_ss::gr_sub_ss () - : gr_sync_block ("sub_ss", - gr_make_io_signature (1, -1, sizeof (short)), - gr_make_io_signature (1, 1, sizeof (short))) -{ -} - -int -gr_sub_ss::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - int ninputs = input_items.size (); - - if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items; i++) - *optr++ = (short) -((short *) input_items[0])[i]; - } - - else { - for (int i = 0; i < noutput_items; i++){ - short acc = ((short *) input_items[0])[i]; - for (int j = 1; j < ninputs; j++) - acc -= ((short *) input_items[j])[i]; - - *optr++ = (short) acc; - } - } - - return noutput_items; -} diff --git a/gnuradio-core/src/lib/general/gr_sub_ss.h b/gnuradio-core/src/lib/general/gr_sub_ss.h deleted file mode 100644 index ec090eb7..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ss.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_SUB_SS_H -#define INCLUDED_GR_SUB_SS_H - -#include - -class gr_sub_ss; -typedef boost::shared_ptr gr_sub_ss_sptr; - -gr_sub_ss_sptr gr_make_sub_ss (); - -/*! - * \brief output = input_0 - input_1 - ...) - * \ingroup block - * - * Subtract across all input streams. - */ -class gr_sub_ss : public gr_sync_block -{ - friend gr_sub_ss_sptr gr_make_sub_ss (); - - gr_sub_ss (); - - public: - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_sub_ss.i b/gnuradio-core/src/lib/general/gr_sub_ss.i deleted file mode 100644 index 6deafd16..00000000 --- a/gnuradio-core/src/lib/general/gr_sub_ss.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,sub_ss) - -gr_sub_ss_sptr gr_make_sub_ss (); - -class gr_sub_ss : public gr_sync_block -{ - private: - gr_sub_ss (); -}; diff --git a/gnuradio-core/src/lib/general/gr_sync_block.h b/gnuradio-core/src/lib/general/gr_sync_block.h deleted file mode 100644 index dcc7e2e7..00000000 --- a/gnuradio-core/src/lib/general/gr_sync_block.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_GR_SYNC_BLOCK_H -#define INCLUDED_GR_SYNC_BLOCK_H - -#include - -/*! - * \brief synchronous 1:1 input to output with history - * \ingroup block - * - * Override work to provide the signal processing implementation. - */ -class gr_sync_block : public gr_block -{ - protected: - - gr_sync_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - public: - - /*! - * \brief just like gr_block::general_work, only this arranges to call consume_each for you - * - * The user must override work to define the signal processing code - */ - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) = 0; - - - // gr_sync_block overrides these to assist work - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - int fixed_rate_ninput_to_noutput(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); -}; - -#endif /* INCLUDED_GR_SYNC_BLOCK_H */ diff --git a/gnuradio-core/src/lib/general/gr_sync_decimator.h b/gnuradio-core/src/lib/general/gr_sync_decimator.h deleted file mode 100644 index 4666ece8..00000000 --- a/gnuradio-core/src/lib/general/gr_sync_decimator.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_GR_SYNC_DECIMATOR_H -#define INCLUDED_GR_SYNC_DECIMATOR_H - -#include - -/*! - * \brief synchronous N:1 input to output with history - * \ingroup block - * - * Override work to provide the signal processing implementation. - */ -class gr_sync_decimator : public gr_sync_block -{ - private: - unsigned d_decimation; - - protected: - - gr_sync_decimator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned decimation); - public: - - unsigned decimation () const { return d_decimation; } - void set_decimation (unsigned decimation) - { - d_decimation = decimation; - set_relative_rate (1.0 / decimation); - } - - // gr_sync_decimator overrides these to assist work - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // derived classes should override work - - int fixed_rate_ninput_to_noutput(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); -}; - - -#endif /* INCLUDED_GR_SYNC_DECIMATOR_H */ diff --git a/gnuradio-core/src/lib/general/gr_sync_interpolator.cc b/gnuradio-core/src/lib/general/gr_sync_interpolator.cc deleted file mode 100644 index f61e59ea..00000000 --- a/gnuradio-core/src/lib/general/gr_sync_interpolator.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -gr_sync_interpolator::gr_sync_interpolator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned interpolation) - : gr_sync_block (name, input_signature, output_signature) -{ - set_interpolation (interpolation); -} - -void -gr_sync_interpolator::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - unsigned ninputs = ninput_items_required.size (); - for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = fixed_rate_noutput_to_ninput(noutput_items); -} - -int -gr_sync_interpolator::fixed_rate_noutput_to_ninput(int noutput_items) -{ - return noutput_items / interpolation() + history() - 1; -} - -int -gr_sync_interpolator::fixed_rate_ninput_to_noutout(int ninput_items) -{ - return std::max(0, ninput_items - (int)history() + 1) * interpolation(); -} - -int -gr_sync_interpolator::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int r = work (noutput_items, input_items, output_items); - if (r > 0) - consume_each (r / interpolation ()); - return r; -} - - diff --git a/gnuradio-core/src/lib/general/gr_sync_interpolator.h b/gnuradio-core/src/lib/general/gr_sync_interpolator.h deleted file mode 100644 index 46851de2..00000000 --- a/gnuradio-core/src/lib/general/gr_sync_interpolator.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_GR_SYNC_INTERPOLATOR_H -#define INCLUDED_GR_SYNC_INTERPOLATOR_H - -#include - -/*! - * \brief synchronous 1:N input to output with history - * \ingroup block - * - * Override work to provide the signal processing implementation. - */ -class gr_sync_interpolator : public gr_sync_block -{ - private: - unsigned d_interpolation; - - protected: - gr_sync_interpolator (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature, - unsigned interpolation); - public: - - unsigned interpolation () const { return d_interpolation; } - void set_interpolation (unsigned interpolation) - { - d_interpolation = interpolation; - set_relative_rate (1.0 * interpolation); - set_output_multiple (interpolation); - } - - // gr_sync_interpolator overrides these to assist work - void forecast (int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - // derived classes should override work - - int fixed_rate_ninput_to_noutout(int ninput); - int fixed_rate_noutput_to_ninput(int noutput); -}; - - -#endif /* INCLUDED_GR_SYNC_INTERPOLATOR_H */ diff --git a/gnuradio-core/src/lib/general/gr_test.cc b/gnuradio-core/src/lib/general/gr_test.cc index 25f142cc..a04554ec 100644 --- a/gnuradio-core/src/lib/general/gr_test.cc +++ b/gnuradio-core/src/lib/general/gr_test.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -28,6 +28,7 @@ #include #include #include +#include gr_test_sptr gr_make_test (const std::string &name, int min_inputs, int max_inputs, unsigned int sizeof_input_item, @@ -138,9 +139,9 @@ gr_test::general_work (int noutput_items, } } } - //Now copy input to output untill max ninputs or max noutputs is reached + //Now copy input to output until max ninputs or max noutputs is reached int common_nports=std::min(ninputs,noutputs); - if(d_sizeof_output_item==d_sizeof_input_item); + if(d_sizeof_output_item==d_sizeof_input_item) for (int i = 0; i < common_nports; i++) { memcpy(output_items[i],input_items[i],noutput_items*d_sizeof_input_item); diff --git a/gnuradio-core/src/lib/general/gr_test.h b/gnuradio-core/src/lib/general/gr_test.h index baec1702..5438ac70 100644 --- a/gnuradio-core/src/lib/general/gr_test.h +++ b/gnuradio-core/src/lib/general/gr_test.h @@ -39,7 +39,7 @@ gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"), /*! * \brief Test class for testing runtime system (setting up buffers and such.) - * \ingroup block + * \ingroup misc * * This block does not do any usefull actual data processing. * It just exposes setting all standard block parameters using the contructor or public methods. @@ -49,12 +49,7 @@ gr_test_sptr gr_make_test (const std::string &name=std::string("gr_test"), * factor and/or large output_multiple. * The runtime system should detect this and create large enough buffers * all through the signal chain. - * */ - - - - class gr_test : public gr_block { public: diff --git a/gnuradio-core/src/lib/general/gr_threshold_ff.h b/gnuradio-core/src/lib/general/gr_threshold_ff.h index 2589b188..65b677a7 100644 --- a/gnuradio-core/src/lib/general/gr_threshold_ff.h +++ b/gnuradio-core/src/lib/general/gr_threshold_ff.h @@ -31,8 +31,8 @@ typedef boost::shared_ptr gr_threshold_ff_sptr; gr_threshold_ff_sptr gr_make_threshold_ff (float lo, float hi, float initial_state=0); /*! - * \brief - * \ingroup block + * \brief Please fix my documentation + * \ingroup misc_blk */ class gr_threshold_ff : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_throttle.cc b/gnuradio-core/src/lib/general/gr_throttle.cc index 33f3e086..88219c1c 100644 --- a/gnuradio-core/src/lib/general/gr_throttle.cc +++ b/gnuradio-core/src/lib/general/gr_throttle.cc @@ -29,9 +29,13 @@ #include #include #include +#include #ifdef HAVE_TIME_H #include #endif +#if !defined(HAVE_NANOSLEEP) && defined(HAVE_SSLEEP) +#include +#endif #ifdef HAVE_NANOSLEEP @@ -80,7 +84,7 @@ gr_throttle::work (int noutput_items, const char *in = (const char *) input_items[0]; char *out = (char *) output_items[0]; -#if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_NANOSLEEP) +#if defined(HAVE_GETTIMEOFDAY) // // If our average sample rate exceeds our target sample rate, // delay long enough to reduce to our target rate. @@ -96,10 +100,14 @@ gr_throttle::work (int noutput_items, double actual_samples_per_sec = d_total_samples / t; if (actual_samples_per_sec > d_samples_per_sec){ // need to delay double delay = d_total_samples / d_samples_per_sec - t; +#ifdef HAVE_NANOSLEEP struct timespec ts; ts.tv_sec = (time_t)floor(delay); ts.tv_nsec = (long)((delay - floor(delay)) * 1e9); gr_nanosleep(&ts); +#elif HAVE_SSLEEP + Sleep( (DWORD)(delay*1000) ); +#endif } #endif diff --git a/gnuradio-core/src/lib/general/gr_throttle.h b/gnuradio-core/src/lib/general/gr_throttle.h index 2f862c05..a1c9773c 100644 --- a/gnuradio-core/src/lib/general/gr_throttle.h +++ b/gnuradio-core/src/lib/general/gr_throttle.h @@ -35,9 +35,14 @@ gr_throttle_sptr gr_make_throttle(size_t itemsize, double samples_per_sec); /*! * \brief throttle flow of samples such that the average rate does not exceed samples_per_sec. - * \ingroup block + * \ingroup misc_blk * * input: one stream of itemsize; output: one stream of itemsize + * + * N.B. this should only be used in GUI apps where there is no other + * rate limiting block. It is not intended nor effective at precisely + * controlling the rate of samples. That should be controlled by a + * source or sink tied to sample clock. E.g., a USRP or audio card. */ class gr_throttle : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_uchar_to_float.h b/gnuradio-core/src/lib/general/gr_uchar_to_float.h index a9bbc100..3b83c893 100644 --- a/gnuradio-core/src/lib/general/gr_uchar_to_float.h +++ b/gnuradio-core/src/lib/general/gr_uchar_to_float.h @@ -33,7 +33,7 @@ gr_make_uchar_to_float (); /*! * \brief Convert stream of unsigned chars to a stream of float - * \ingroup converter + * \ingroup converter_blk */ class gr_uchar_to_float : public gr_sync_block diff --git a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h index f027db74..e2be2c59 100644 --- a/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h +++ b/gnuradio-core/src/lib/general/gr_unpack_k_bits_bb.h @@ -32,7 +32,8 @@ gr_unpack_k_bits_bb_sptr gr_make_unpack_k_bits_bb (unsigned k); class gr_unpack_k_bits_bb; /*! - * \brief Converts a byte with k relevent bits to k output bytes with 1 bit in the LSB + * \brief Converts a byte with k relevent bits to k output bytes with 1 bit in the LSB. + * \ingroup converter_blk */ class gr_unpack_k_bits_bb : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.h.t b/gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.h.t deleted file mode 100644 index 24c5db42..00000000 --- a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.h.t +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @NAME@_sptr; - -@SPTR_NAME@ -gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. - * \ingroup block - * - * input: stream of @I_TYPE@; output: stream of @O_TYPE@ - * - * This is the inverse of gr_packed_to_unpacked_XX. - * - * The low \p bits_per_chunk bits are extracted from each input byte or short. - * These bits are then packed densely into the output bytes or shorts, such that - * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ -class @NAME@ : public gr_block -{ - friend @SPTR_NAME@ - gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); - - @NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.h b/gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.h deleted file mode 100644 index 4a011ee3..00000000 --- a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_UNPACKED_TO_PACKED_BB_H -#define INCLUDED_GR_UNPACKED_TO_PACKED_BB_H - -#include -#include - -class gr_unpacked_to_packed_bb; -typedef boost::shared_ptr gr_unpacked_to_packed_bb_sptr; - -gr_unpacked_to_packed_bb_sptr -gr_make_unpacked_to_packed_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. - * \ingroup block - * - * input: stream of unsigned char; output: stream of unsigned char - * - * This is the inverse of gr_packed_to_unpacked_XX. - * - * The low \p bits_per_chunk bits are extracted from each input byte or short. - * These bits are then packed densely into the output bytes or shorts, such that - * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ -class gr_unpacked_to_packed_bb : public gr_block -{ - friend gr_unpacked_to_packed_bb_sptr - gr_make_unpacked_to_packed_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); - - gr_unpacked_to_packed_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.h b/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.h deleted file mode 100644 index 6ecee2f7..00000000 --- a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_UNPACKED_TO_PACKED_II_H -#define INCLUDED_GR_UNPACKED_TO_PACKED_II_H - -#include -#include - -class gr_unpacked_to_packed_ii; -typedef boost::shared_ptr gr_unpacked_to_packed_ii_sptr; - -gr_unpacked_to_packed_ii_sptr -gr_make_unpacked_to_packed_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. - * \ingroup block - * - * input: stream of int; output: stream of int - * - * This is the inverse of gr_packed_to_unpacked_XX. - * - * The low \p bits_per_chunk bits are extracted from each input byte or short. - * These bits are then packed densely into the output bytes or shorts, such that - * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ -class gr_unpacked_to_packed_ii : public gr_block -{ - friend gr_unpacked_to_packed_ii_sptr - gr_make_unpacked_to_packed_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); - - gr_unpacked_to_packed_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.h b/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.h deleted file mode 100644 index 0f69e1c1..00000000 --- a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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 machine generated. Edits will be over written - -#ifndef INCLUDED_GR_UNPACKED_TO_PACKED_SS_H -#define INCLUDED_GR_UNPACKED_TO_PACKED_SS_H - -#include -#include - -class gr_unpacked_to_packed_ss; -typedef boost::shared_ptr gr_unpacked_to_packed_ss_sptr; - -gr_unpacked_to_packed_ss_sptr -gr_make_unpacked_to_packed_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); - -/*! - * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. - * \ingroup block - * - * input: stream of short; output: stream of short - * - * This is the inverse of gr_packed_to_unpacked_XX. - * - * The low \p bits_per_chunk bits are extracted from each input byte or short. - * These bits are then packed densely into the output bytes or shorts, such that - * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. - * The right thing is done if bits_per_chunk is not a power of two. - * - * The combination of gr_packed_to_unpacked_XX followed by - * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the - * general case of mapping from a stream of bytes or shorts into arbitrary float - * or complex symbols. - * - * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, - * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, - * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. - * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. - */ -class gr_unpacked_to_packed_ss : public gr_block -{ - friend gr_unpacked_to_packed_ss_sptr - gr_make_unpacked_to_packed_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); - - gr_unpacked_to_packed_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); - - unsigned int d_bits_per_chunk; - gr_endianness_t d_endianness; - unsigned int d_index; - - public: - void forecast(int noutput_items, gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vco.h b/gnuradio-core/src/lib/general/gr_vco.h index ef82a671..1e8636f7 100644 --- a/gnuradio-core/src/lib/general/gr_vco.h +++ b/gnuradio-core/src/lib/general/gr_vco.h @@ -30,6 +30,7 @@ /*! * \brief base class template for Voltage Controlled Oscillator (VCO) + * \ingroup misc */ //FIXME Eventually generalize this to fixed point diff --git a/gnuradio-core/src/lib/general/gr_vco_f.h b/gnuradio-core/src/lib/general/gr_vco_f.h index c4182852..2bdf6089 100644 --- a/gnuradio-core/src/lib/general/gr_vco_f.h +++ b/gnuradio-core/src/lib/general/gr_vco_f.h @@ -25,21 +25,23 @@ #include #include -class gr_vco_f; -typedef boost::shared_ptr gr_vco_f_sptr; - /*! * \brief VCO - Voltage controlled oscillator + * \ingroup misc * * \param sampling_rate sampling rate (Hz) * \param sensitivity units are radians/sec/volt * \param amplitude output amplitude */ +class gr_vco_f; +typedef boost::shared_ptr gr_vco_f_sptr; + + gr_vco_f_sptr gr_make_vco_f(double sampling_rate, double sensitivity, double amplitude); /*! * \brief VCO - Voltage controlled oscillator - * \ingroup block + * \ingroup modulator_blk * * input: float stream of control voltages; output: float oscillator output */ diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_X.cc.t b/gnuradio-core/src/lib/general/gr_vector_sink_X.cc.t deleted file mode 100644 index 303ac4cd..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_X.cc.t +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include <@NAME@.h> -#include -#include - - -@NAME@::@NAME@ () - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (1, 1, sizeof (@TYPE@)), - gr_make_io_signature (0, 0, 0)) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @TYPE@ *iptr = (@TYPE@ *) input_items[0]; - for (int i = 0; i < noutput_items; i++) - d_data.push_back (iptr[i]); - - return noutput_items; -} - - -@NAME@_sptr -gr_make_@BASE_NAME@ () -{ - return @NAME@_sptr (new @NAME@ ()); -} - -std::vector<@TYPE@> -@NAME@::data () const -{ - return d_data; -} diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_X.h.t b/gnuradio-core/src/lib/general/gr_vector_sink_X.h.t deleted file mode 100644 index 6aeb9948..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_X.h.t +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @NAME@_sptr; - -@NAME@_sptr -gr_make_@BASE_NAME@ (); - - -/*! - * \brief @TYPE@ sink that writes to a vector - * \ingroup sink - */ - -class @NAME@ : public gr_sync_block { - friend @NAME@_sptr gr_make_@BASE_NAME@ (); - std::vector<@TYPE@> d_data; - @NAME@ (); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - std::vector<@TYPE@> data () const; -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_X.i.t b/gnuradio-core/src/lib/general/gr_vector_sink_X.i.t deleted file mode 100644 index 988340e3..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_X.i.t +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@); - -@SPTR_NAME@ gr_make_@BASE_NAME@ (); - -class @NAME@ : public gr_sync_block { - private: - @NAME@ (); - - public: - std::vector<@TYPE@> data () const; -}; - diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_b.cc b/gnuradio-core/src/lib/general/gr_vector_sink_b.cc deleted file mode 100644 index 3c4100bb..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_b.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_sink_b::gr_vector_sink_b () - : gr_sync_block ("vector_sink_b", - gr_make_io_signature (1, 1, sizeof (unsigned char)), - gr_make_io_signature (0, 0, 0)) -{ -} - -int -gr_vector_sink_b::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - unsigned char *iptr = (unsigned char *) input_items[0]; - for (int i = 0; i < noutput_items; i++) - d_data.push_back (iptr[i]); - - return noutput_items; -} - - -gr_vector_sink_b_sptr -gr_make_vector_sink_b () -{ - return gr_vector_sink_b_sptr (new gr_vector_sink_b ()); -} - -std::vector -gr_vector_sink_b::data () const -{ - return d_data; -} diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_b.h b/gnuradio-core/src/lib/general/gr_vector_sink_b.h deleted file mode 100644 index 0cdb59d0..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_b.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SINK_B_H -#define INCLUDED_GR_VECTOR_SINK_B_H - -#include - -class gr_vector_sink_b; -typedef boost::shared_ptr gr_vector_sink_b_sptr; - -gr_vector_sink_b_sptr -gr_make_vector_sink_b (); - - -/*! - * \brief unsigned char sink that writes to a vector - * \ingroup sink - */ - -class gr_vector_sink_b : public gr_sync_block { - friend gr_vector_sink_b_sptr gr_make_vector_sink_b (); - std::vector d_data; - gr_vector_sink_b (); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - std::vector data () const; -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_b.i b/gnuradio-core/src/lib/general/gr_vector_sink_b.i deleted file mode 100644 index af14595b..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_b.i +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - - -GR_SWIG_BLOCK_MAGIC(gr,vector_sink_b); - -gr_vector_sink_b_sptr gr_make_vector_sink_b (); - -class gr_vector_sink_b : public gr_sync_block { - private: - gr_vector_sink_b (); - - public: - std::vector data () const; -}; - diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_c.cc b/gnuradio-core/src/lib/general/gr_vector_sink_c.cc deleted file mode 100644 index 86837ec3..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_c.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_sink_c::gr_vector_sink_c () - : gr_sync_block ("vector_sink_c", - gr_make_io_signature (1, 1, sizeof (gr_complex)), - gr_make_io_signature (0, 0, 0)) -{ -} - -int -gr_vector_sink_c::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *iptr = (gr_complex *) input_items[0]; - for (int i = 0; i < noutput_items; i++) - d_data.push_back (iptr[i]); - - return noutput_items; -} - - -gr_vector_sink_c_sptr -gr_make_vector_sink_c () -{ - return gr_vector_sink_c_sptr (new gr_vector_sink_c ()); -} - -std::vector -gr_vector_sink_c::data () const -{ - return d_data; -} diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_c.h b/gnuradio-core/src/lib/general/gr_vector_sink_c.h deleted file mode 100644 index 6f6c43a8..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_c.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SINK_C_H -#define INCLUDED_GR_VECTOR_SINK_C_H - -#include - -class gr_vector_sink_c; -typedef boost::shared_ptr gr_vector_sink_c_sptr; - -gr_vector_sink_c_sptr -gr_make_vector_sink_c (); - - -/*! - * \brief gr_complex sink that writes to a vector - * \ingroup sink - */ - -class gr_vector_sink_c : public gr_sync_block { - friend gr_vector_sink_c_sptr gr_make_vector_sink_c (); - std::vector d_data; - gr_vector_sink_c (); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - std::vector data () const; -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_c.i b/gnuradio-core/src/lib/general/gr_vector_sink_c.i deleted file mode 100644 index 86dacbfe..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_c.i +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - - -GR_SWIG_BLOCK_MAGIC(gr,vector_sink_c); - -gr_vector_sink_c_sptr gr_make_vector_sink_c (); - -class gr_vector_sink_c : public gr_sync_block { - private: - gr_vector_sink_c (); - - public: - std::vector data () const; -}; - diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_f.cc b/gnuradio-core/src/lib/general/gr_vector_sink_f.cc deleted file mode 100644 index 509ed8a5..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_f.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_sink_f::gr_vector_sink_f () - : gr_sync_block ("vector_sink_f", - gr_make_io_signature (1, 1, sizeof (float)), - gr_make_io_signature (0, 0, 0)) -{ -} - -int -gr_vector_sink_f::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *iptr = (float *) input_items[0]; - for (int i = 0; i < noutput_items; i++) - d_data.push_back (iptr[i]); - - return noutput_items; -} - - -gr_vector_sink_f_sptr -gr_make_vector_sink_f () -{ - return gr_vector_sink_f_sptr (new gr_vector_sink_f ()); -} - -std::vector -gr_vector_sink_f::data () const -{ - return d_data; -} diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_f.h b/gnuradio-core/src/lib/general/gr_vector_sink_f.h deleted file mode 100644 index a2af4f39..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_f.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SINK_F_H -#define INCLUDED_GR_VECTOR_SINK_F_H - -#include - -class gr_vector_sink_f; -typedef boost::shared_ptr gr_vector_sink_f_sptr; - -gr_vector_sink_f_sptr -gr_make_vector_sink_f (); - - -/*! - * \brief float sink that writes to a vector - * \ingroup sink - */ - -class gr_vector_sink_f : public gr_sync_block { - friend gr_vector_sink_f_sptr gr_make_vector_sink_f (); - std::vector d_data; - gr_vector_sink_f (); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - std::vector data () const; -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_f.i b/gnuradio-core/src/lib/general/gr_vector_sink_f.i deleted file mode 100644 index 331fc444..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_f.i +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - - -GR_SWIG_BLOCK_MAGIC(gr,vector_sink_f); - -gr_vector_sink_f_sptr gr_make_vector_sink_f (); - -class gr_vector_sink_f : public gr_sync_block { - private: - gr_vector_sink_f (); - - public: - std::vector data () const; -}; - diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_i.cc b/gnuradio-core/src/lib/general/gr_vector_sink_i.cc deleted file mode 100644 index ad2e71bf..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_i.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_sink_i::gr_vector_sink_i () - : gr_sync_block ("vector_sink_i", - gr_make_io_signature (1, 1, sizeof (int)), - gr_make_io_signature (0, 0, 0)) -{ -} - -int -gr_vector_sink_i::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *iptr = (int *) input_items[0]; - for (int i = 0; i < noutput_items; i++) - d_data.push_back (iptr[i]); - - return noutput_items; -} - - -gr_vector_sink_i_sptr -gr_make_vector_sink_i () -{ - return gr_vector_sink_i_sptr (new gr_vector_sink_i ()); -} - -std::vector -gr_vector_sink_i::data () const -{ - return d_data; -} diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_i.h b/gnuradio-core/src/lib/general/gr_vector_sink_i.h deleted file mode 100644 index 4241a2ea..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_i.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SINK_I_H -#define INCLUDED_GR_VECTOR_SINK_I_H - -#include - -class gr_vector_sink_i; -typedef boost::shared_ptr gr_vector_sink_i_sptr; - -gr_vector_sink_i_sptr -gr_make_vector_sink_i (); - - -/*! - * \brief int sink that writes to a vector - * \ingroup sink - */ - -class gr_vector_sink_i : public gr_sync_block { - friend gr_vector_sink_i_sptr gr_make_vector_sink_i (); - std::vector d_data; - gr_vector_sink_i (); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - std::vector data () const; -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_i.i b/gnuradio-core/src/lib/general/gr_vector_sink_i.i deleted file mode 100644 index 2b14f649..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_i.i +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - - -GR_SWIG_BLOCK_MAGIC(gr,vector_sink_i); - -gr_vector_sink_i_sptr gr_make_vector_sink_i (); - -class gr_vector_sink_i : public gr_sync_block { - private: - gr_vector_sink_i (); - - public: - std::vector data () const; -}; - diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_s.cc b/gnuradio-core/src/lib/general/gr_vector_sink_s.cc deleted file mode 100644 index caedc72d..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_s.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_sink_s::gr_vector_sink_s () - : gr_sync_block ("vector_sink_s", - gr_make_io_signature (1, 1, sizeof (short)), - gr_make_io_signature (0, 0, 0)) -{ -} - -int -gr_vector_sink_s::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *iptr = (short *) input_items[0]; - for (int i = 0; i < noutput_items; i++) - d_data.push_back (iptr[i]); - - return noutput_items; -} - - -gr_vector_sink_s_sptr -gr_make_vector_sink_s () -{ - return gr_vector_sink_s_sptr (new gr_vector_sink_s ()); -} - -std::vector -gr_vector_sink_s::data () const -{ - return d_data; -} diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_s.h b/gnuradio-core/src/lib/general/gr_vector_sink_s.h deleted file mode 100644 index 397ebcb5..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_s.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SINK_S_H -#define INCLUDED_GR_VECTOR_SINK_S_H - -#include - -class gr_vector_sink_s; -typedef boost::shared_ptr gr_vector_sink_s_sptr; - -gr_vector_sink_s_sptr -gr_make_vector_sink_s (); - - -/*! - * \brief short sink that writes to a vector - * \ingroup sink - */ - -class gr_vector_sink_s : public gr_sync_block { - friend gr_vector_sink_s_sptr gr_make_vector_sink_s (); - std::vector d_data; - gr_vector_sink_s (); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - std::vector data () const; -}; - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_sink_s.i b/gnuradio-core/src/lib/general/gr_vector_sink_s.i deleted file mode 100644 index 63cc4fb0..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_sink_s.i +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - - -GR_SWIG_BLOCK_MAGIC(gr,vector_sink_s); - -gr_vector_sink_s_sptr gr_make_vector_sink_s (); - -class gr_vector_sink_s : public gr_sync_block { - private: - gr_vector_sink_s (); - - public: - std::vector data () const; -}; - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_X.cc.t b/gnuradio-core/src/lib/general/gr_vector_source_X.cc.t deleted file mode 100644 index 528a7c40..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_X.cc.t +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include <@NAME@.h> -#include -#include - - -@NAME@::@NAME@ (const std::vector<@TYPE@> &data, bool repeat) - : gr_sync_block ("@BASE_NAME@", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (@TYPE@))), - d_data (data), - d_repeat (repeat), - d_offset (0) -{ -} - -int -@NAME@::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - @TYPE@ *optr = (@TYPE@ *) output_items[0]; - - if (d_repeat){ - unsigned int size = d_data.size (); - unsigned int offset = d_offset; - - if (size == 0) - return -1; - - for (int i = 0; i < noutput_items; i++){ - optr[i] = d_data[offset++]; - if (offset >= size) - offset = 0; - } - d_offset = offset; - return noutput_items; - } - - else { - if (d_offset >= d_data.size ()) - return -1; // Done! - - unsigned n = std::min ((unsigned) d_data.size () - d_offset, - (unsigned) noutput_items); - for (unsigned i = 0; i < n; i++) - optr[i] = d_data[d_offset + i]; - - d_offset += n; - return n; - } -} - -@NAME@_sptr -gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat) -{ - return @NAME@_sptr (new @NAME@ (data, repeat)); -} - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_X.h.t b/gnuradio-core/src/lib/general/gr_vector_source_X.h.t deleted file mode 100644 index 62a4dc8a..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_X.h.t +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -#ifndef @GUARD_NAME@ -#define @GUARD_NAME@ - -#include - -class @NAME@; -typedef boost::shared_ptr<@NAME@> @NAME@_sptr; - -/*! - * \brief source of @TYPE@'s that gets its data from a vector - * \ingroup source - */ - -class @NAME@ : public gr_sync_block { - friend @NAME@_sptr - gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat = false); - - std::vector<@TYPE@> d_data; - bool d_repeat; - unsigned int d_offset; - - @NAME@ (const std::vector<@TYPE@> &data, bool repeat); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -@NAME@_sptr -gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat); - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_source_X.i.t b/gnuradio-core/src/lib/general/gr_vector_source_X.i.t deleted file mode 100644 index c56f7287..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_X.i.t +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// @WARNING@ - -GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@); - -@NAME@_sptr -gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat = false); - -class @NAME@ : public gr_sync_block { - private: - @NAME@ (const std::vector<@TYPE@> &data); -}; diff --git a/gnuradio-core/src/lib/general/gr_vector_source_b.cc b/gnuradio-core/src/lib/general/gr_vector_source_b.cc deleted file mode 100644 index 24ebb04f..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_b.cc +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_source_b::gr_vector_source_b (const std::vector &data, bool repeat) - : gr_sync_block ("vector_source_b", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (unsigned char))), - d_data (data), - d_repeat (repeat), - d_offset (0) -{ -} - -int -gr_vector_source_b::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - unsigned char *optr = (unsigned char *) output_items[0]; - - if (d_repeat){ - unsigned int size = d_data.size (); - unsigned int offset = d_offset; - - if (size == 0) - return -1; - - for (int i = 0; i < noutput_items; i++){ - optr[i] = d_data[offset++]; - if (offset >= size) - offset = 0; - } - d_offset = offset; - return noutput_items; - } - - else { - if (d_offset >= d_data.size ()) - return -1; // Done! - - unsigned n = std::min ((unsigned) d_data.size () - d_offset, - (unsigned) noutput_items); - for (unsigned i = 0; i < n; i++) - optr[i] = d_data[d_offset + i]; - - d_offset += n; - return n; - } -} - -gr_vector_source_b_sptr -gr_make_vector_source_b (const std::vector &data, bool repeat) -{ - return gr_vector_source_b_sptr (new gr_vector_source_b (data, repeat)); -} - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_b.h b/gnuradio-core/src/lib/general/gr_vector_source_b.h deleted file mode 100644 index 979d1741..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_b.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SOURCE_B_H -#define INCLUDED_GR_VECTOR_SOURCE_B_H - -#include - -class gr_vector_source_b; -typedef boost::shared_ptr gr_vector_source_b_sptr; - -/*! - * \brief source of unsigned char's that gets its data from a vector - * \ingroup source - */ - -class gr_vector_source_b : public gr_sync_block { - friend gr_vector_source_b_sptr - gr_make_vector_source_b (const std::vector &data, bool repeat = false); - - std::vector d_data; - bool d_repeat; - unsigned int d_offset; - - gr_vector_source_b (const std::vector &data, bool repeat); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -gr_vector_source_b_sptr -gr_make_vector_source_b (const std::vector &data, bool repeat); - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_source_b.i b/gnuradio-core/src/lib/general/gr_vector_source_b.i deleted file mode 100644 index c45948f6..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_b.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,vector_source_b); - -gr_vector_source_b_sptr -gr_make_vector_source_b (const std::vector &data, bool repeat = false); - -class gr_vector_source_b : public gr_sync_block { - private: - gr_vector_source_b (const std::vector &data); -}; diff --git a/gnuradio-core/src/lib/general/gr_vector_source_c.cc b/gnuradio-core/src/lib/general/gr_vector_source_c.cc deleted file mode 100644 index b85c6b45..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_c.cc +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_source_c::gr_vector_source_c (const std::vector &data, bool repeat) - : gr_sync_block ("vector_source_c", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (gr_complex))), - d_data (data), - d_repeat (repeat), - d_offset (0) -{ -} - -int -gr_vector_source_c::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - gr_complex *optr = (gr_complex *) output_items[0]; - - if (d_repeat){ - unsigned int size = d_data.size (); - unsigned int offset = d_offset; - - if (size == 0) - return -1; - - for (int i = 0; i < noutput_items; i++){ - optr[i] = d_data[offset++]; - if (offset >= size) - offset = 0; - } - d_offset = offset; - return noutput_items; - } - - else { - if (d_offset >= d_data.size ()) - return -1; // Done! - - unsigned n = std::min ((unsigned) d_data.size () - d_offset, - (unsigned) noutput_items); - for (unsigned i = 0; i < n; i++) - optr[i] = d_data[d_offset + i]; - - d_offset += n; - return n; - } -} - -gr_vector_source_c_sptr -gr_make_vector_source_c (const std::vector &data, bool repeat) -{ - return gr_vector_source_c_sptr (new gr_vector_source_c (data, repeat)); -} - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_c.h b/gnuradio-core/src/lib/general/gr_vector_source_c.h deleted file mode 100644 index e045d53c..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_c.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SOURCE_C_H -#define INCLUDED_GR_VECTOR_SOURCE_C_H - -#include - -class gr_vector_source_c; -typedef boost::shared_ptr gr_vector_source_c_sptr; - -/*! - * \brief source of gr_complex's that gets its data from a vector - * \ingroup source - */ - -class gr_vector_source_c : public gr_sync_block { - friend gr_vector_source_c_sptr - gr_make_vector_source_c (const std::vector &data, bool repeat = false); - - std::vector d_data; - bool d_repeat; - unsigned int d_offset; - - gr_vector_source_c (const std::vector &data, bool repeat); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -gr_vector_source_c_sptr -gr_make_vector_source_c (const std::vector &data, bool repeat); - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_source_c.i b/gnuradio-core/src/lib/general/gr_vector_source_c.i deleted file mode 100644 index 475779a0..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_c.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,vector_source_c); - -gr_vector_source_c_sptr -gr_make_vector_source_c (const std::vector &data, bool repeat = false); - -class gr_vector_source_c : public gr_sync_block { - private: - gr_vector_source_c (const std::vector &data); -}; diff --git a/gnuradio-core/src/lib/general/gr_vector_source_f.cc b/gnuradio-core/src/lib/general/gr_vector_source_f.cc deleted file mode 100644 index 7be0f06b..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_f.cc +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_source_f::gr_vector_source_f (const std::vector &data, bool repeat) - : gr_sync_block ("vector_source_f", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (float))), - d_data (data), - d_repeat (repeat), - d_offset (0) -{ -} - -int -gr_vector_source_f::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - float *optr = (float *) output_items[0]; - - if (d_repeat){ - unsigned int size = d_data.size (); - unsigned int offset = d_offset; - - if (size == 0) - return -1; - - for (int i = 0; i < noutput_items; i++){ - optr[i] = d_data[offset++]; - if (offset >= size) - offset = 0; - } - d_offset = offset; - return noutput_items; - } - - else { - if (d_offset >= d_data.size ()) - return -1; // Done! - - unsigned n = std::min ((unsigned) d_data.size () - d_offset, - (unsigned) noutput_items); - for (unsigned i = 0; i < n; i++) - optr[i] = d_data[d_offset + i]; - - d_offset += n; - return n; - } -} - -gr_vector_source_f_sptr -gr_make_vector_source_f (const std::vector &data, bool repeat) -{ - return gr_vector_source_f_sptr (new gr_vector_source_f (data, repeat)); -} - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_f.h b/gnuradio-core/src/lib/general/gr_vector_source_f.h deleted file mode 100644 index d7a9391c..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_f.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SOURCE_F_H -#define INCLUDED_GR_VECTOR_SOURCE_F_H - -#include - -class gr_vector_source_f; -typedef boost::shared_ptr gr_vector_source_f_sptr; - -/*! - * \brief source of float's that gets its data from a vector - * \ingroup source - */ - -class gr_vector_source_f : public gr_sync_block { - friend gr_vector_source_f_sptr - gr_make_vector_source_f (const std::vector &data, bool repeat = false); - - std::vector d_data; - bool d_repeat; - unsigned int d_offset; - - gr_vector_source_f (const std::vector &data, bool repeat); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -gr_vector_source_f_sptr -gr_make_vector_source_f (const std::vector &data, bool repeat); - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_source_f.i b/gnuradio-core/src/lib/general/gr_vector_source_f.i deleted file mode 100644 index 78f0b423..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_f.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,vector_source_f); - -gr_vector_source_f_sptr -gr_make_vector_source_f (const std::vector &data, bool repeat = false); - -class gr_vector_source_f : public gr_sync_block { - private: - gr_vector_source_f (const std::vector &data); -}; diff --git a/gnuradio-core/src/lib/general/gr_vector_source_i.cc b/gnuradio-core/src/lib/general/gr_vector_source_i.cc deleted file mode 100644 index f83e1d82..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_i.cc +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_source_i::gr_vector_source_i (const std::vector &data, bool repeat) - : gr_sync_block ("vector_source_i", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (int))), - d_data (data), - d_repeat (repeat), - d_offset (0) -{ -} - -int -gr_vector_source_i::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - int *optr = (int *) output_items[0]; - - if (d_repeat){ - unsigned int size = d_data.size (); - unsigned int offset = d_offset; - - if (size == 0) - return -1; - - for (int i = 0; i < noutput_items; i++){ - optr[i] = d_data[offset++]; - if (offset >= size) - offset = 0; - } - d_offset = offset; - return noutput_items; - } - - else { - if (d_offset >= d_data.size ()) - return -1; // Done! - - unsigned n = std::min ((unsigned) d_data.size () - d_offset, - (unsigned) noutput_items); - for (unsigned i = 0; i < n; i++) - optr[i] = d_data[d_offset + i]; - - d_offset += n; - return n; - } -} - -gr_vector_source_i_sptr -gr_make_vector_source_i (const std::vector &data, bool repeat) -{ - return gr_vector_source_i_sptr (new gr_vector_source_i (data, repeat)); -} - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_i.h b/gnuradio-core/src/lib/general/gr_vector_source_i.h deleted file mode 100644 index 9b7f72e7..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_i.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SOURCE_I_H -#define INCLUDED_GR_VECTOR_SOURCE_I_H - -#include - -class gr_vector_source_i; -typedef boost::shared_ptr gr_vector_source_i_sptr; - -/*! - * \brief source of int's that gets its data from a vector - * \ingroup source - */ - -class gr_vector_source_i : public gr_sync_block { - friend gr_vector_source_i_sptr - gr_make_vector_source_i (const std::vector &data, bool repeat = false); - - std::vector d_data; - bool d_repeat; - unsigned int d_offset; - - gr_vector_source_i (const std::vector &data, bool repeat); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -gr_vector_source_i_sptr -gr_make_vector_source_i (const std::vector &data, bool repeat); - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_source_i.i b/gnuradio-core/src/lib/general/gr_vector_source_i.i deleted file mode 100644 index 775bd143..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_i.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,vector_source_i); - -gr_vector_source_i_sptr -gr_make_vector_source_i (const std::vector &data, bool repeat = false); - -class gr_vector_source_i : public gr_sync_block { - private: - gr_vector_source_i (const std::vector &data); -}; diff --git a/gnuradio-core/src/lib/general/gr_vector_source_s.cc b/gnuradio-core/src/lib/general/gr_vector_source_s.cc deleted file mode 100644 index e639a5f7..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_s.cc +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - - -gr_vector_source_s::gr_vector_source_s (const std::vector &data, bool repeat) - : gr_sync_block ("vector_source_s", - gr_make_io_signature (0, 0, 0), - gr_make_io_signature (1, 1, sizeof (short))), - d_data (data), - d_repeat (repeat), - d_offset (0) -{ -} - -int -gr_vector_source_s::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - short *optr = (short *) output_items[0]; - - if (d_repeat){ - unsigned int size = d_data.size (); - unsigned int offset = d_offset; - - if (size == 0) - return -1; - - for (int i = 0; i < noutput_items; i++){ - optr[i] = d_data[offset++]; - if (offset >= size) - offset = 0; - } - d_offset = offset; - return noutput_items; - } - - else { - if (d_offset >= d_data.size ()) - return -1; // Done! - - unsigned n = std::min ((unsigned) d_data.size () - d_offset, - (unsigned) noutput_items); - for (unsigned i = 0; i < n; i++) - optr[i] = d_data[d_offset + i]; - - d_offset += n; - return n; - } -} - -gr_vector_source_s_sptr -gr_make_vector_source_s (const std::vector &data, bool repeat) -{ - return gr_vector_source_s_sptr (new gr_vector_source_s (data, repeat)); -} - diff --git a/gnuradio-core/src/lib/general/gr_vector_source_s.h b/gnuradio-core/src/lib/general/gr_vector_source_s.h deleted file mode 100644 index 65003f18..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_s.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -#ifndef INCLUDED_GR_VECTOR_SOURCE_S_H -#define INCLUDED_GR_VECTOR_SOURCE_S_H - -#include - -class gr_vector_source_s; -typedef boost::shared_ptr gr_vector_source_s_sptr; - -/*! - * \brief source of short's that gets its data from a vector - * \ingroup source - */ - -class gr_vector_source_s : public gr_sync_block { - friend gr_vector_source_s_sptr - gr_make_vector_source_s (const std::vector &data, bool repeat = false); - - std::vector d_data; - bool d_repeat; - unsigned int d_offset; - - gr_vector_source_s (const std::vector &data, bool repeat); - - public: - virtual int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -gr_vector_source_s_sptr -gr_make_vector_source_s (const std::vector &data, bool repeat); - -#endif diff --git a/gnuradio-core/src/lib/general/gr_vector_source_s.i b/gnuradio-core/src/lib/general/gr_vector_source_s.i deleted file mode 100644 index 31a87400..00000000 --- a/gnuradio-core/src/lib/general/gr_vector_source_s.i +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(gr,vector_source_s); - -gr_vector_source_s_sptr -gr_make_vector_source_s (const std::vector &data, bool repeat = false); - -class gr_vector_source_s : public gr_sync_block { - private: - gr_vector_source_s (const std::vector &data); -}; diff --git a/gnuradio-core/src/lib/general/gr_vector_to_stream.cc b/gnuradio-core/src/lib/general/gr_vector_to_stream.cc index 39650aea..149bc0d5 100644 --- a/gnuradio-core/src/lib/general/gr_vector_to_stream.cc +++ b/gnuradio-core/src/lib/general/gr_vector_to_stream.cc @@ -26,6 +26,7 @@ #include #include +#include gr_vector_to_stream_sptr gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block) diff --git a/gnuradio-core/src/lib/general/gr_vector_to_stream.h b/gnuradio-core/src/lib/general/gr_vector_to_stream.h index 95148691..de6cc2a8 100644 --- a/gnuradio-core/src/lib/general/gr_vector_to_stream.h +++ b/gnuradio-core/src/lib/general/gr_vector_to_stream.h @@ -34,7 +34,7 @@ gr_make_vector_to_stream (size_t item_size, size_t nitems_per_block); /*! * \brief convert a stream of blocks of nitems_per_block items into a stream of items - * \ingroup block + * \ingroup slicedice_blk */ class gr_vector_to_stream : public gr_sync_interpolator { diff --git a/gnuradio-core/src/lib/general/gr_vector_to_streams.cc b/gnuradio-core/src/lib/general/gr_vector_to_streams.cc index cd3d8279..19f15b17 100644 --- a/gnuradio-core/src/lib/general/gr_vector_to_streams.cc +++ b/gnuradio-core/src/lib/general/gr_vector_to_streams.cc @@ -26,6 +26,7 @@ #include #include +#include gr_vector_to_streams_sptr gr_make_vector_to_streams (size_t item_size, size_t nstreams) diff --git a/gnuradio-core/src/lib/general/gr_vector_to_streams.h b/gnuradio-core/src/lib/general/gr_vector_to_streams.h index 3b128394..d5ba7acf 100644 --- a/gnuradio-core/src/lib/general/gr_vector_to_streams.h +++ b/gnuradio-core/src/lib/general/gr_vector_to_streams.h @@ -34,7 +34,7 @@ gr_make_vector_to_streams (size_t item_size, size_t nstreams); /*! * \brief Convert 1 stream of vectors of length N to N streams of items - * \ingroup block + * \ingroup slicedice_blk */ class gr_vector_to_streams : public gr_sync_block { diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.cc b/gnuradio-core/src/lib/general/gr_wavelet_ff.cc new file mode 100644 index 00000000..6cbfa238 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_wavelet_ff.cc @@ -0,0 +1,107 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 tewavelet 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +#include + +// NB in this version, only Daubechies wavelets +// order is wavelet length, even, 2...20 + +gr_wavelet_ff_sptr +gr_make_wavelet_ff(int size, + int order, + bool forward) +{ + return gr_wavelet_ff_sptr(new gr_wavelet_ff(size, + order, + forward)); +} + +gr_wavelet_ff::gr_wavelet_ff(int size, + int order, + bool forward) + : gr_sync_block("wavelet_ff", + gr_make_io_signature(1, 1, size * sizeof(float)), + gr_make_io_signature(1, 1, size * sizeof(float))), + d_size(size), + d_order(order), + d_forward(forward) +{ + d_wavelet = gsl_wavelet_alloc(gsl_wavelet_daubechies, d_order); + if (d_wavelet == NULL) + throw std::runtime_error("can't allocate wavelet"); + d_workspace = gsl_wavelet_workspace_alloc(d_size); + if (d_workspace == NULL) + throw std::runtime_error("can't allocate wavelet workspace"); + d_temp = (double *) malloc(d_size*sizeof(double)); + if (d_workspace == NULL) + throw std::runtime_error("can't allocate wavelet double conversion temp"); +} + +gr_wavelet_ff::~gr_wavelet_ff() +{ + gsl_wavelet_free(d_wavelet); + gsl_wavelet_workspace_free(d_workspace); + free((char *) d_temp); +} + +int +gr_wavelet_ff::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int count = 0; count < noutput_items; count++) { + for (int i = 0; i < d_size; i++) + d_temp[i] = in[i]; + + if (d_forward) + gsl_wavelet_transform_forward(d_wavelet, + d_temp, + 1, + d_size, + d_workspace); + else + gsl_wavelet_transform_inverse(d_wavelet, + d_temp, + 1, + d_size, + d_workspace); + + for (int i = 0; i < d_size; i++) + out[i] = d_temp[i]; + + in += d_size; + out += d_size; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.h b/gnuradio-core/src/lib/general/gr_wavelet_ff.h new file mode 100644 index 00000000..dcfb595e --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_wavelet_ff.h @@ -0,0 +1,70 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005 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. + */ +#ifndef INCLUDED_GR_WAVELET_FF_H +#define INCLUDED_GR_WAVELET_FF_H + +#include +#include + +#include +#include + +class gr_wavelet_ff; +typedef boost::shared_ptr gr_wavelet_ff_sptr; + +gr_wavelet_ff_sptr +gr_make_wavelet_ff(int size = 1024, + int order = 20, + bool forward = true); + +/*! + * \brief compute wavelet transform using gsl routines + * \ingroup wavelet_blk + */ + +class gr_wavelet_ff : public gr_sync_block +{ + int d_size; + int d_order; + bool d_forward; + gsl_wavelet *d_wavelet; + gsl_wavelet_workspace *d_workspace; + double *d_temp; + + friend gr_wavelet_ff_sptr + gr_make_wavelet_ff(int size, + int order, + bool forward); + + gr_wavelet_ff(int size, + int order, + bool forward); + +public: + ~gr_wavelet_ff(); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_WAVELET_FF_H */ diff --git a/gnuradio-core/src/lib/general/gr_wavelet_ff.i b/gnuradio-core/src/lib/general/gr_wavelet_ff.i new file mode 100644 index 00000000..9d426417 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_wavelet_ff.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,wavelet_ff); + +gr_wavelet_ff_sptr gr_make_wavelet_ff(int size, int order, bool forward); + +class gr_wavelet_ff : public gr_sync_block +{ +private: + gr_wavelet_ff(int size, int order, bool forward); +}; + diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.cc b/gnuradio-core/src/lib/general/gr_wvps_ff.cc new file mode 100644 index 00000000..f814ba8f --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_wvps_ff.cc @@ -0,0 +1,98 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +static int +ceil_log2(int k) +{ + int m = 0; + for (int n = k-1; n > 0; n >>= 1) m++; + return m; +} + +gr_wvps_ff_sptr +gr_make_wvps_ff(int ilen) +{ + return gr_wvps_ff_sptr(new gr_wvps_ff(ilen)); +} + +gr_wvps_ff::gr_wvps_ff(int ilen) + : gr_sync_block("wvps_ff", + gr_make_io_signature(1, 1, sizeof(float) * ilen), + gr_make_io_signature(1, 1, sizeof(float) * ceil_log2(ilen))), + d_ilen(ilen), d_olen(ceil_log2(ilen)) +{ +} + +// input vector assumed to be output from gsl wavelet computation + +int +gr_wvps_ff::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int count = 0; count < noutput_items; count++) { + + // any power? + + if (in[0] == 0.0) { + for (int i = 0; i < d_olen; i++) + out[i] = 0.0; + + } else { + + // get power normalization from 0-th wavelet coefficient + + float scl = 1.0/(in[0]*in[0]); + int k = 1; + + // sum powers over sequences of bins, + // sequence lengths in increasing powers of 2 + + for (int e = 0; e < d_olen; e++) { + int m = 01< + +class gr_wvps_ff; +typedef boost::shared_ptr gr_wvps_ff_sptr; + +gr_wvps_ff_sptr +gr_make_wvps_ff(int ilen); + + +/*! + * \brief computes the Wavelet Power Spectrum from a set of wavelet coefficients + * \ingroup wavelet_blk + */ +class gr_wvps_ff : public gr_sync_block +{ + friend gr_wvps_ff_sptr + gr_make_wvps_ff(int ilen); + + int d_ilen; + int d_olen; + + protected: + gr_wvps_ff(int ilen); + + public: + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +}; + +#endif /* INCLUDED_GR_WVPS_FF_H */ diff --git a/gnuradio-core/src/lib/general/gr_wvps_ff.i b/gnuradio-core/src/lib/general/gr_wvps_ff.i new file mode 100644 index 00000000..877126fb --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_wvps_ff.i @@ -0,0 +1,29 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +GR_SWIG_BLOCK_MAGIC(gr,wvps_ff); + +gr_wvps_ff_sptr gr_make_wvps_ff(int ilen); + +class gr_wvps_ff : public gr_sync_block +{ +private: + gr_wvps_ff(int ilen); +}; diff --git a/gnuradio-core/src/lib/general/gri_agc2_cc.h b/gnuradio-core/src/lib/general/gri_agc2_cc.h index 30f83162..441d1e45 100644 --- a/gnuradio-core/src/lib/general/gri_agc2_cc.h +++ b/gnuradio-core/src/lib/general/gri_agc2_cc.h @@ -30,7 +30,6 @@ * * For Power the absolute value of the complex number is used. */ - class gri_agc2_cc { public: diff --git a/gnuradio-core/src/lib/general/gri_agc2_ff.h b/gnuradio-core/src/lib/general/gri_agc2_ff.h index ad0f5d81..a06dab78 100644 --- a/gnuradio-core/src/lib/general/gri_agc2_ff.h +++ b/gnuradio-core/src/lib/general/gri_agc2_ff.h @@ -39,14 +39,14 @@ class gri_agc2_ff { : _attack_rate(attack_rate), _decay_rate(decay_rate), _reference(reference), _gain(gain), _max_gain(max_gain) {}; - float decay_rate () const { return _decay_rate; } float attack_rate () const { return _attack_rate; } + float decay_rate () const { return _decay_rate; } float reference () const { return _reference; } float gain () const { return _gain; } float max_gain () const { return _max_gain; } - void set_decay_rate (float rate) { _decay_rate = rate; } void set_attack_rate (float rate) { _attack_rate = rate; } + void set_decay_rate (float rate) { _decay_rate = rate; } void set_reference (float reference) { _reference = reference; } void set_gain (float gain) { _gain = gain; } void set_max_gain (float max_gain) { _max_gain = max_gain; } @@ -79,8 +79,8 @@ class gri_agc2_ff { } protected: - float _decay_rate; // decay rate for slow changing signals float _attack_rate; // attack_rate for fast changing signals + float _decay_rate; // decay rate for slow changing signals float _reference; // reference value float _gain; // current gain float _max_gain; // maximum gain diff --git a/gnuradio-core/src/lib/general/gri_agc_ff.h b/gnuradio-core/src/lib/general/gri_agc_ff.h index b9c12402..de609a8d 100644 --- a/gnuradio-core/src/lib/general/gri_agc_ff.h +++ b/gnuradio-core/src/lib/general/gri_agc_ff.h @@ -30,7 +30,6 @@ * * Power is approximated by absolute value */ - class gri_agc_ff { public: diff --git a/gnuradio-core/src/lib/general/gri_fft.cc b/gnuradio-core/src/lib/general/gri_fft.cc index 17ea89e1..e535f28c 100644 --- a/gnuradio-core/src/lib/general/gri_fft.cc +++ b/gnuradio-core/src/lib/general/gri_fft.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003 Free Software Foundation, Inc. + * Copyright 2003,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -29,10 +29,19 @@ #include #include + +boost::mutex & +gri_fft_planner::mutex() +{ + static boost::mutex s_planning_mutex; + + return s_planning_mutex; +} + static char * wisdom_filename () { - static char *filename = ".gr_fftw_wisdom"; + static const char *filename = ".gr_fftw_wisdom"; char *home = getenv ("HOME"); if (home){ @@ -80,6 +89,9 @@ gri_fftw_export_wisdom () gri_fft_complex::gri_fft_complex (int fft_size, bool forward) { + // Hold global mutex during plan construction and destruction. + gri_fft_planner::scoped_lock lock(gri_fft_planner::mutex()); + assert (sizeof (fftwf_complex) == sizeof (gr_complex)); if (fft_size <= 0) @@ -96,10 +108,6 @@ gri_fft_complex::gri_fft_complex (int fft_size, bool forward) throw std::runtime_error ("fftwf_malloc"); } - // FIXME If there's ever a chance that the planning functions - // will be called in multiple threads, we've got to ensure single - // threaded access. They are not thread-safe. - gri_fftw_import_wisdom (); // load prior wisdom from disk d_plan = fftwf_plan_dft_1d (fft_size, reinterpret_cast(d_inbuf), @@ -116,6 +124,9 @@ gri_fft_complex::gri_fft_complex (int fft_size, bool forward) gri_fft_complex::~gri_fft_complex () { + // Hold global mutex during plan construction and destruction. + gri_fft_planner::scoped_lock lock(gri_fft_planner::mutex()); + fftwf_destroy_plan ((fftwf_plan) d_plan); fftwf_free (d_inbuf); fftwf_free (d_outbuf); @@ -131,6 +142,9 @@ gri_fft_complex::execute () gri_fft_real_fwd::gri_fft_real_fwd (int fft_size) { + // Hold global mutex during plan construction and destruction. + gri_fft_planner::scoped_lock lock(gri_fft_planner::mutex()); + assert (sizeof (fftwf_complex) == sizeof (gr_complex)); if (fft_size <= 0) @@ -147,10 +161,6 @@ gri_fft_real_fwd::gri_fft_real_fwd (int fft_size) throw std::runtime_error ("fftwf_malloc"); } - // FIXME If there's ever a chance that the planning functions - // will be called in multiple threads, we've got to ensure single - // threaded access. They are not thread-safe. - gri_fftw_import_wisdom (); // load prior wisdom from disk d_plan = fftwf_plan_dft_r2c_1d (fft_size, d_inbuf, @@ -166,6 +176,9 @@ gri_fft_real_fwd::gri_fft_real_fwd (int fft_size) gri_fft_real_fwd::~gri_fft_real_fwd () { + // Hold global mutex during plan construction and destruction. + gri_fft_planner::scoped_lock lock(gri_fft_planner::mutex()); + fftwf_destroy_plan ((fftwf_plan) d_plan); fftwf_free (d_inbuf); fftwf_free (d_outbuf); @@ -181,6 +194,9 @@ gri_fft_real_fwd::execute () gri_fft_real_rev::gri_fft_real_rev (int fft_size) { + // Hold global mutex during plan construction and destruction. + gri_fft_planner::scoped_lock lock(gri_fft_planner::mutex()); + assert (sizeof (fftwf_complex) == sizeof (gr_complex)); if (fft_size <= 0) diff --git a/gnuradio-core/src/lib/general/gri_fft.h b/gnuradio-core/src/lib/general/gri_fft.h index 267aa7c6..9ffcc5a5 100644 --- a/gnuradio-core/src/lib/general/gri_fft.h +++ b/gnuradio-core/src/lib/general/gri_fft.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003 Free Software Foundation, Inc. + * Copyright 2003,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,11 +27,25 @@ */ #include +#include /*! - * \brief FFT: complex in, complex out + * \brief Export reference to planner mutex for those apps that + * want to use FFTW w/o using the gri_fftw* classes. */ +class gri_fft_planner { +public: + typedef boost::mutex::scoped_lock scoped_lock; + /*! + * Return reference to planner mutex + */ + static boost::mutex &mutex(); +}; +/*! + * \brief FFT: complex in, complex out + * \ingroup misc + */ class gri_fft_complex { int d_fft_size; gr_complex *d_inbuf; @@ -61,6 +75,7 @@ public: /*! * \brief FFT: real in, complex out + * \ingroup misc */ class gri_fft_real_fwd { int d_fft_size; @@ -91,6 +106,7 @@ public: /*! * \brief FFT: complex in, float out + * \ingroup misc */ class gri_fft_real_rev { int d_fft_size; diff --git a/gnuradio-core/src/lib/general/gri_glfsr.cc b/gnuradio-core/src/lib/general/gri_glfsr.cc new file mode 100644 index 00000000..940ef037 --- /dev/null +++ b/gnuradio-core/src/lib/general/gri_glfsr.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include + +static int s_polynomial_masks[] = { + 0x00000000, + 0x00000001, // x^1 + 1 + 0x00000003, // x^2 + x^1 + 1 + 0x00000005, // x^3 + x^1 + 1 + 0x00000009, // x^4 + x^1 + 1 + 0x00000012, // x^5 + x^2 + 1 + 0x00000021, // x^6 + x^1 + 1 + 0x00000041, // x^7 + x^1 + 1 + 0x0000008E, // x^8 + x^4 + x^3 + x^2 + 1 + 0x00000108, // x^9 + x^4 + 1 + 0x00000204, // x^10 + x^4 + 1 + 0x00000402, // x^11 + x^2 + 1 + 0x00000829, // x^12 + x^6 + x^4 + x^1 + 1 + 0x0000100D, // x^13 + x^4 + x^3 + x^1 + 1 + 0x00002015, // x^14 + x^5 + x^3 + x^1 + 1 + 0x00004001, // x^15 + x^1 + 1 + 0x00008016, // x^16 + x^5 + x^3 + x^2 + 1 + 0x00010004, // x^17 + x^3 + 1 + 0x00020013, // x^18 + x^5 + x^2 + x^1 + 1 + 0x00040013, // x^19 + x^5 + x^2 + x^1 + 1 + 0x00080004, // x^20 + x^3 + 1 + 0x00100002, // x^21 + x^2 + 1 + 0x00200001, // x^22 + x^1 + 1 + 0x00400010, // x^23 + x^5 + 1 + 0x0080000D, // x^24 + x^4 + x^3 + x^1 + 1 + 0x01000004, // x^25 + x^3 + 1 + 0x02000023, // x^26 + x^6 + x^2 + x^1 + 1 + 0x04000013, // x^27 + x^5 + x^2 + x^1 + 1 + 0x08000004, // x^28 + x^3 + 1 + 0x10000002, // x^29 + x^2 + 1 + 0x20000029, // x^30 + x^4 + x^1 + 1 + 0x40000004, // x^31 + x^3 + 1 + 0x80000057 // x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + 1 +}; + +int gri_glfsr::glfsr_mask(int degree) +{ + if (degree < 1 || degree > 32) + throw std::runtime_error("gri_glfsr::glfsr_mask(): degree must be between 1 and 32 inclusive"); + return s_polynomial_masks[degree]; +} diff --git a/gnuradio-core/src/lib/general/gri_glfsr.h b/gnuradio-core/src/lib/general/gri_glfsr.h new file mode 100644 index 00000000..7dd5f866 --- /dev/null +++ b/gnuradio-core/src/lib/general/gri_glfsr.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_GRI_GLFSR_H +#define INCLUDED_GRI_GLFSR_H + +/*! + * \brief Galois Linear Feedback Shift Register using specified polynomial mask + * \ingroup misc + * + * Generates a maximal length pseudo-random sequence of length 2^degree-1 + */ + +class gri_glfsr +{ + private: + int d_shift_register; + int d_mask; + + public: + + gri_glfsr(int mask, int seed) { d_shift_register = seed; d_mask = mask; } + static int glfsr_mask(int degree); + + unsigned char next_bit() { + unsigned char bit = d_shift_register & 1; + d_shift_register >>= 1; + if (bit) + d_shift_register ^= d_mask; + return bit; + } + + int mask() const { return d_mask; } +}; + +#endif /* INCLUDED_GRI_GLFSR_H */ diff --git a/gnuradio-core/src/lib/general/gri_lfsr.h b/gnuradio-core/src/lib/general/gri_lfsr.h new file mode 100644 index 00000000..715da78a --- /dev/null +++ b/gnuradio-core/src/lib/general/gri_lfsr.h @@ -0,0 +1,143 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_GRI_LFSR_H +#define INCLUDED_GRI_LFSR_H + +#include +#include + +/*! + * \brief Fibonacci Linear Feedback Shift Register using specified polynomial mask + * \ingroup misc + * + * Generates a maximal length pseudo-random sequence of length 2^degree-1 + * + * Constructor: gri_lfsr(int mask, int seed, int reg_len); + * + * mask - polynomial coefficients representing the locations + * of feedback taps from a shift register which are xor'ed + * together to form the new high order bit. + * + * Some common masks might be: + * x^4 + x^3 + x^0 = 0x19 + * x^5 + x^3 + x^0 = 0x29 + * x^6 + x^5 + x^0 = 0x61 + * + * seed - the initialization vector placed into the register + * durring initialization. Low order bit corresponds + * to x^0 coefficient -- the first to be shifted as output. + * + * reg_len - specifies the length of the feedback shift register + * to be used. Durring each iteration, the register + * is rightshifted one and the new bit is placed in bit reg_len. + * reg_len should generally be at least order(mask) + 1 + * + * + * see http://en.wikipedia.org/wiki/Linear_feedback_shift_register + * for more explanation. + * + * + * + * next_bit() - Standard LFSR operation + * + * Perform one cycle of the LFSR. The output bit is taken from + * the shift register LSB. The shift register MSB is assigned from + * the modulo 2 sum of the masked shift register. + * + * next_bit_scramble(unsigned char input) - Scramble an input stream + * + * Perform one cycle of the LFSR. The output bit is taken from + * the shift register LSB. The shift register MSB is assigned from + * the modulo 2 sum of the masked shift register and the input LSB. + * + * next_bit_descramble(unsigned char input) - Descramble an input stream + * + * Perform one cycle of the LFSR. The output bit is taken from + * the modulo 2 sum of the masked shift register and the input LSB. + * The shift register MSB is assigned from the LSB of the input. + * + * See http://en.wikipedia.org/wiki/Scrambler for operation of these + * last two functions (see multiplicative scrambler.) + * + */ + +class gri_lfsr +{ + private: + uint32_t d_shift_register; + uint32_t d_mask; + uint32_t d_shift_register_length; // less than 32 + + static uint32_t + popCount(uint32_t x) + { + uint32_t r = x - ((x >> 1) & 033333333333) + - ((x >> 2) & 011111111111); + return ((r + (r >> 3)) & 030707070707) % 63; + } + + public: + + gri_lfsr(uint32_t mask, uint32_t seed, uint32_t reg_len) + : d_shift_register(seed), d_mask(mask), d_shift_register_length(reg_len) + { + if (reg_len > 31) + throw std::invalid_argument("reg_len must be <= 31"); + } + + unsigned char next_bit() { + unsigned char output = d_shift_register & 1; + unsigned char newbit = popCount( d_shift_register & d_mask )%2; + d_shift_register = ((d_shift_register>>1) | (newbit<>1) | (newbit<>1) | (newbit< +#include void *malloc16Align(int size){ void *p; diff --git a/gnuradio-core/src/lib/general/qa_general.cc b/gnuradio-core/src/lib/general/qa_general.cc index cf00dc76..6984d798 100644 --- a/gnuradio-core/src/lib/general/qa_general.cc +++ b/gnuradio-core/src/lib/general/qa_general.cc @@ -31,6 +31,8 @@ #include #include #include +#include +#include CppUnit::TestSuite * qa_general::suite () @@ -42,6 +44,8 @@ qa_general::suite () s->addTest (qa_gr_fxpt::suite ()); s->addTest (qa_gr_fxpt_nco::suite ()); s->addTest (qa_gr_fxpt_vco::suite ()); + s->addTest (qa_gr_math::suite ()); + s->addTest (qa_gri_lfsr::suite ()); return s; } diff --git a/gnuradio-core/src/lib/general/qa_gr_firdes.cc b/gnuradio-core/src/lib/general/qa_gr_firdes.cc index 9184c8c9..771249b2 100644 --- a/gnuradio-core/src/lib/general/qa_gr_firdes.cc +++ b/gnuradio-core/src/lib/general/qa_gr_firdes.cc @@ -33,6 +33,7 @@ using std::vector; +#if 0 static void print_taps (std::ostream &s, vector &v) { @@ -41,6 +42,7 @@ print_taps (std::ostream &s, vector &v) printf ("tap[%2d] = %16.7e\n", i, v[i]); } } +#endif static void check_symmetry (vector &v) @@ -275,6 +277,211 @@ const static float t3_exp[107] = { }; +const static float t4_exp[] = { // low pass + 0.001059958362, +0.0002263929928, +-0.001277606934, +-0.0009675776237, + 0.001592264394, + 0.00243603508, +-0.001451682881, +-0.004769335967, +5.281541594e-18, + 0.007567512803, + 0.003658855334, +-0.009761494584, + -0.01011830103, + 0.009636915289, + 0.0193619132, +-0.004935568199, + -0.03060629964, +-0.007267376408, + 0.04236677289, + 0.03197422624, + -0.05274848267, + -0.0850463286, + 0.05989059806, + 0.31065014, + 0.4370569289, + 0.31065014, + 0.05989059806, + -0.0850463286, + -0.05274848267, + 0.03197422624, + 0.04236677289, +-0.007267376408, + -0.03060629964, +-0.004935568199, + 0.0193619132, + 0.009636915289, + -0.01011830103, +-0.009761494584, + 0.003658855334, + 0.007567512803, +5.281541594e-18, +-0.004769335967, +-0.001451682881, + 0.00243603508, + 0.001592264394, +-0.0009675776237, +-0.001277606934, +0.0002263929928, + 0.001059958362, +}; + + +const static float t5_exp[] = { //high pass +-0.001062123571, +-0.0002268554381, + 0.001280216733, + 0.000969554123, +-0.001595516922, +-0.002441011136, + 0.001454648213, + 0.004779078532, +-5.292330097e-18, +-0.007582970895, + -0.00366632943, + 0.009781434201, + 0.01013896987, +-0.009656600654, + -0.01940146461, + 0.004945650231, + 0.03066881932, + 0.00728222169, + -0.04245331511, + -0.03203954175, + 0.05285623297, + 0.08522006124, + -0.06001294032, + -0.3112847209, + 0.5630782247, + -0.3112847209, + -0.06001294032, + 0.08522006124, + 0.05285623297, + -0.03203954175, + -0.04245331511, + 0.00728222169, + 0.03066881932, + 0.004945650231, + -0.01940146461, +-0.009656600654, + 0.01013896987, + 0.009781434201, + -0.00366632943, +-0.007582970895, +-5.292330097e-18, + 0.004779078532, + 0.001454648213, +-0.002441011136, +-0.001595516922, + 0.000969554123, + 0.001280216733, +-0.0002268554381, +-0.001062123571, +}; + +const static float t6_exp[] = { // bandpass +0.0002809273137, +-0.001047327649, +7.936541806e-05, +-0.0004270860809, +0.0007595835486, +0.0008966081077, +-0.0004236323002, +0.0002423936094, +-0.002212299034, +0.0004807534278, +0.0002620361629, + 0.001443728455, + 0.002229931997, +-0.002720607212, +5.731141573e-05, +-0.004297634587, + 0.001878833398, + 0.003217151389, + 0.001357055153, + 0.003965090029, +-0.008576190099, +-0.0003257228818, +-0.004805727862, + 0.004721920472, + 0.01007549558, +-0.002688719891, + 0.004467967432, + -0.01837076992, +5.119658377e-17, + 0.001125075156, + 0.008071650751, + 0.02113764361, + -0.01602453552, + 0.001618095324, + -0.03004053794, + 0.003163811285, + 0.0219683405, + 0.007950295694, + 0.03682873398, + -0.05142467469, + -0.00794606097, + -0.03965795785, + 0.01544955093, + 0.09681399167, + -0.01610304788, + 0.08297294378, + -0.2811714709, + -0.1094062924, + 0.5275565982, + -0.1094062924, + -0.2811714709, + 0.08297294378, + -0.01610304788, + 0.09681399167, + 0.01544955093, + -0.03965795785, + -0.00794606097, + -0.05142467469, + 0.03682873398, + 0.007950295694, + 0.0219683405, + 0.003163811285, + -0.03004053794, + 0.001618095324, + -0.01602453552, + 0.02113764361, + 0.008071650751, + 0.001125075156, +5.119658377e-17, + -0.01837076992, + 0.004467967432, +-0.002688719891, + 0.01007549558, + 0.004721920472, +-0.004805727862, +-0.0003257228818, +-0.008576190099, + 0.003965090029, + 0.001357055153, + 0.003217151389, + 0.001878833398, +-0.004297634587, +5.731141573e-05, +-0.002720607212, + 0.002229931997, + 0.001443728455, +0.0002620361629, +0.0004807534278, +-0.002212299034, +0.0002423936094, +-0.0004236323002, +0.0008966081077, +0.0007595835486, +-0.0004270860809, +7.936541806e-05, +-0.001047327649, +0.0002809273137, +}; + void qa_gr_firdes::t1 () { @@ -340,5 +547,72 @@ qa_gr_firdes::t3 () void qa_gr_firdes::t4 () +{ + vector taps = + gr_firdes::low_pass_2 ( 1.0, + 8000, + 1750, + 500, + 66, + gr_firdes::WIN_HAMMING); + + // std::cout << "ntaps: " << taps.size () << std::endl; + // print_taps (std::cout, taps); + + CPPUNIT_ASSERT_EQUAL (NELEM (t4_exp), taps.size ()); + for (unsigned int i = 0; i < taps.size (); i++) + CPPUNIT_ASSERT_DOUBLES_EQUAL (t4_exp[i], taps[i], 1e-9); + + + check_symmetry (taps); +} + +void +qa_gr_firdes::t5 () +{ + vector taps = + gr_firdes::high_pass_2 ( 1.0, + 8000, + 1750, + 500, + 66, + gr_firdes::WIN_HAMMING); + + // std::cout << "ntaps: " << taps.size () << std::endl; + // print_taps (std::cout, taps); + + CPPUNIT_ASSERT_EQUAL (NELEM (t5_exp), taps.size ()); + + for (unsigned int i = 0; i < taps.size (); i++) + CPPUNIT_ASSERT_DOUBLES_EQUAL (t5_exp[i], taps[i], 1e-9); + + check_symmetry (taps); +} + +void +qa_gr_firdes::t6 () +{ + vector taps = + gr_firdes::band_pass_2 ( 1.0, + 20e6, + 5.75e6 - (5.28e6/2), + 5.75e6 + (5.28e6/2), + 0.62e6, + 66, + gr_firdes::WIN_HAMMING); + + // std::cout << "ntaps: " << taps.size () << std::endl; + // print_taps (std::cout, taps); + + CPPUNIT_ASSERT_EQUAL (NELEM (t6_exp), taps.size ()); + + for (unsigned int i = 0; i < taps.size (); i++) + CPPUNIT_ASSERT_DOUBLES_EQUAL (t6_exp[i], taps[i], 1e-7); + + check_symmetry (taps); +} + +void +qa_gr_firdes::t7 () { } diff --git a/gnuradio-core/src/lib/general/qa_gr_firdes.h b/gnuradio-core/src/lib/general/qa_gr_firdes.h index cb57fd74..d8566454 100644 --- a/gnuradio-core/src/lib/general/qa_gr_firdes.h +++ b/gnuradio-core/src/lib/general/qa_gr_firdes.h @@ -32,6 +32,9 @@ class qa_gr_firdes : public CppUnit::TestCase { CPPUNIT_TEST (t2); CPPUNIT_TEST (t3); CPPUNIT_TEST (t4); + CPPUNIT_TEST (t5); + CPPUNIT_TEST (t6); + CPPUNIT_TEST (t7); CPPUNIT_TEST_SUITE_END (); private: @@ -39,6 +42,9 @@ class qa_gr_firdes : public CppUnit::TestCase { void t2 (); void t3 (); void t4 (); + void t5 (); + void t6 (); + void t7 (); }; diff --git a/gnuradio-core/src/lib/general/qa_gr_math.cc b/gnuradio-core/src/lib/general/qa_gr_math.cc new file mode 100644 index 00000000..b3a1b959 --- /dev/null +++ b/gnuradio-core/src/lib/general/qa_gr_math.cc @@ -0,0 +1,105 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +void +qa_gr_math::test_binary_slicer1 () +{ + float x[5] = {-1, -0.5, 0, 0.5, 1.0}; + unsigned int z[5] = {0, 0, 1, 1, 1}; + unsigned int y; + + //printf("\nBinary\n"); + for (unsigned int i = 0; i < 5; i++) { + y = gr_binary_slicer(x[i]); + //printf("in: %f out: %d desired: %d\n", x[i], y, z[i]); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); + } + + //printf("\nBranchless Binary\n"); + for (unsigned int i = 0; i < 5; i++) { + y = gr_branchless_binary_slicer(x[i]); + //printf("in: %f out: %d desired: %d\n", x[i], y, z[i]); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); + } +} + +void +qa_gr_math::test_quad_0deg_slicer1 () +{ + gr_complex x[4] = {gr_complex(1, 0), + gr_complex(0, 1), + gr_complex(-1, 0), + gr_complex(0, -1)}; + + unsigned int z[4] = {0, 1, 2, 3}; + unsigned int y; + + //printf("\nQuad0\n"); + for (unsigned int i = 0; i < 4; i++) { + y = gr_quad_0deg_slicer(x[i]); + //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); + } + + //printf("\nBranchless Quad0\n"); + for (unsigned int i = 0; i < 4; i++) { + y = gr_branchless_quad_0deg_slicer(x[i]); + //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); + } +} + +void +qa_gr_math::test_quad_45deg_slicer1 () +{ + gr_complex x[4] = {gr_complex(0.707, 0.707), + gr_complex(-0.707, 0.707), + gr_complex(-0.707, -0.707), + gr_complex(0.707, -0.707)}; + + unsigned int z[4] = {0, 1, 2, 3}; + unsigned int y; + + //printf("\nQuad45\n"); + for (unsigned int i = 0; i < 4; i++) { + y = gr_quad_45deg_slicer(x[i]); + //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); + } + + //printf("\nBranchless Quad45\n"); + for (unsigned int i = 0; i < 4; i++) { + y = gr_branchless_quad_45deg_slicer(x[i]); + //printf("in: %.4f+j%.4f out: %d desired: %d\n", x[i].real(), x[i].imag(), y, z[i]); + + CPPUNIT_ASSERT_DOUBLES_EQUAL(y, z[i], 1e-9); + } +} diff --git a/gnuradio-core/src/lib/general/qa_gr_math.h b/gnuradio-core/src/lib/general/qa_gr_math.h new file mode 100644 index 00000000..bcc3a62d --- /dev/null +++ b/gnuradio-core/src/lib/general/qa_gr_math.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef _QA_GR_MATH_H_ +#define _QA_GR_MATH_H_ + +#include +#include + +class qa_gr_math : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_gr_math); + CPPUNIT_TEST(test_binary_slicer1); + CPPUNIT_TEST(test_quad_0deg_slicer1); + CPPUNIT_TEST(test_quad_45deg_slicer1); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_binary_slicer1(); + void test_quad_0deg_slicer1(); + void test_quad_45deg_slicer1(); +}; + +#endif /* _QA_GR_MATH_H_ */ diff --git a/gnuradio-core/src/lib/general/qa_gri_lfsr.cc b/gnuradio-core/src/lib/general/qa_gri_lfsr.cc new file mode 100644 index 00000000..9f8b62dc --- /dev/null +++ b/gnuradio-core/src/lib/general/qa_gri_lfsr.cc @@ -0,0 +1,141 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +void +qa_gri_lfsr::test_lfsr () +{ + int mask = 0x19; + int seed = 0x01; + int length = 5; + + gri_lfsr lfsr1(mask,seed,length); + gri_lfsr lfsr2(mask,seed,length); + + unsigned char expected[] = {1, 0, 1, 1, 0, 1, 0, 1, 0, 0}; + + for(unsigned int i=0; i<31; i++){ + lfsr1.next_bit(); + } + + // test that after one lfsr cycle we still match out uncycled lfsr + for (unsigned int i = 0; i < 41; i++) { + CPPUNIT_ASSERT_EQUAL((int) lfsr1.next_bit(), (int) lfsr2.next_bit()); + } + + // test the known correct values at the given shift offset + for(unsigned int i=0; i<10; i++){ + CPPUNIT_ASSERT_EQUAL((int) lfsr1.next_bit(), (int) expected[i]); + } + + // test for register length too long + CPPUNIT_ASSERT_THROW(gri_lfsr(mask, seed, 32), std::invalid_argument); +} + +void +qa_gri_lfsr::test_scrambler() +{ + // CCSDS 7-bit scrambler + int mask = 0x8A; + int seed = 0x7F; + int length = 7; + + gri_lfsr scrambler(mask, seed, length); + + // Impulse (1 and 126 more zeroes) + unsigned char src[] = + { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 }; // flush bits + + // Impulse response (including leading bits) + unsigned char expected[] = + { 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, + 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, + 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, }; + + int len = sizeof(src); + unsigned char actual[len]; + + for (int i = 0; i < len; i++) + actual[i] = scrambler.next_bit_scramble(src[i]); + + CPPUNIT_ASSERT(memcmp(expected, actual, len) == 0); +} + +void +qa_gri_lfsr::test_descrambler() +{ + // CCSDS 7-bit scrambler + int mask = 0x8A; + int seed = 0x7F; + int length = 7; + + gri_lfsr descrambler(mask, seed, length); + + // Scrambled sequence (impulse response) + unsigned char src[] = + { 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, + 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, + 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, + 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0 }; + + // Original (garbage while synchronizing, them impulse) + unsigned char expected[] = + { 0, 1, 0, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + int len = sizeof(src); + unsigned char actual[len]; + + for (int i = 0; i < len; i++) + actual[i] = descrambler.next_bit_descramble(src[i]); + + CPPUNIT_ASSERT(memcmp(expected, actual, len) == 0); +} diff --git a/gnuradio-core/src/lib/general/qa_gri_lfsr.h b/gnuradio-core/src/lib/general/qa_gri_lfsr.h new file mode 100644 index 00000000..2a1b92e9 --- /dev/null +++ b/gnuradio-core/src/lib/general/qa_gri_lfsr.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifndef _QA_GRI_LFSR_H_ +#define _QA_GRI_LFSR_H_ + +#include +#include + +class qa_gri_lfsr : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_gri_lfsr); + CPPUNIT_TEST(test_lfsr); + CPPUNIT_TEST(test_scrambler); + CPPUNIT_TEST(test_descrambler); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_lfsr(); + void test_scrambler(); + void test_descrambler(); +}; + +#endif /* _QA_GRI_LFSR_H_ */ diff --git a/gnuradio-core/src/lib/general/random.h b/gnuradio-core/src/lib/general/random.h index c5f6683d..c643c3e4 100644 --- a/gnuradio-core/src/lib/general/random.h +++ b/gnuradio-core/src/lib/general/random.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003 Free Software Foundation, Inc. + * Copyright 2003, 2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -23,9 +23,15 @@ #ifndef _RANDOM_H_ #define _RANDOM_H_ -// we use this because some systems (solaris) define RAND_MAX as 32767 +// While rand(3) specifies RAND_MAX, random(3) says that the output +// ranges from 0 to 2^31-1 but does not specify a macro to denote +// this. We define RANDOM_MAX for cleanliness. We must omit the +// definition for systems that have made the same choice. (Note that +// random(3) is from 4.2BSD, and not specified by POSIX.) -static const int RANDOM_MAX = 2147483647; +#ifndef RANDOM_MAX +static const int RANDOM_MAX = 2147483647; // 2^31-1 +#endif /* RANDOM_MAX */ #include diff --git a/gnuradio-core/src/lib/gengen/Makefile.am b/gnuradio-core/src/lib/gengen/Makefile.am new file mode 100644 index 00000000..db7bee02 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/Makefile.am @@ -0,0 +1,159 @@ +# +# Copyright 2001,2002,2004,2006,2007,2008,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. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + +#noinst_LTLIBRARIES = libgengen.la libgengen-qa.la +noinst_LTLIBRARIES = libgengen.la + +# ---------------------------------------------------------------- +# these scripts generate code + +core_generator = \ + generate_all.py \ + generate_common.py \ + gr_add_XX.cc.t \ + gr_add_XX.h.t \ + gr_add_XX.i.t \ + gr_add_const_XX.cc.t \ + gr_add_const_XX.h.t \ + gr_add_const_XX.i.t \ + gr_add_const_vXX.cc.t \ + gr_add_const_vXX.h.t \ + gr_add_const_vXX.i.t \ + gr_argmax_XX.cc.t \ + gr_argmax_XX.h.t \ + gr_argmax_XX.i.t \ + gr_chunks_to_symbols_XX.cc.t \ + gr_chunks_to_symbols_XX.h.t \ + gr_chunks_to_symbols_XX.i.t \ + gr_divide_XX.cc.t \ + gr_divide_XX.h.t \ + gr_divide_XX.i.t \ + gr_integrate_XX.cc.t \ + gr_integrate_XX.h.t \ + gr_integrate_XX.i.t \ + gr_max_XX.cc.t \ + gr_max_XX.h.t \ + gr_max_XX.i.t \ + gr_multiply_XX.cc.t \ + gr_multiply_XX.h.t \ + gr_multiply_XX.i.t \ + gr_multiply_const_XX.cc.t \ + gr_multiply_const_XX.h.t \ + gr_multiply_const_XX.i.t \ + gr_multiply_const_vXX.cc.t \ + gr_multiply_const_vXX.h.t \ + gr_multiply_const_vXX.i.t \ + gr_mute_XX.cc.t \ + gr_mute_XX.h.t \ + gr_mute_XX.i.t \ + gr_noise_source_X.cc.t \ + gr_noise_source_X.h.t \ + gr_noise_source_X.i.t \ + gr_packed_to_unpacked_XX.cc.t \ + gr_packed_to_unpacked_XX.h.t \ + gr_packed_to_unpacked_XX.i.t \ + gr_peak_detector_XX.cc.t \ + gr_peak_detector_XX.h.t \ + gr_peak_detector_XX.i.t \ + gr_sample_and_hold_XX.cc.t \ + gr_sample_and_hold_XX.h.t \ + gr_sample_and_hold_XX.i.t \ + gr_sig_source_X.cc.t \ + gr_sig_source_X.h.t \ + gr_sig_source_X.i.t \ + gr_sub_XX.cc.t \ + gr_sub_XX.h.t \ + gr_sub_XX.i.t \ + gr_unpacked_to_packed_XX.cc.t \ + gr_unpacked_to_packed_XX.h.t \ + gr_unpacked_to_packed_XX.i.t \ + gr_vector_source_X.cc.t \ + gr_vector_source_X.h.t \ + gr_vector_source_X.i.t \ + gr_vector_sink_X.cc.t \ + gr_vector_sink_X.h.t \ + gr_vector_sink_X.i.t \ + gr_xor_XX.cc.t \ + gr_xor_XX.h.t \ + gr_xor_XX.i.t \ + gr_and_XX.cc.t \ + gr_and_XX.h.t \ + gr_and_XX.i.t \ + gr_and_const_XX.cc.t \ + gr_and_const_XX.h.t \ + gr_and_const_XX.i.t \ + gr_or_XX.cc.t \ + gr_or_XX.h.t \ + gr_or_XX.i.t \ + gr_not_XX.cc.t \ + gr_not_XX.h.t \ + gr_not_XX.i.t \ + gr_moving_average_XX.cc.t \ + gr_moving_average_XX.h.t \ + gr_moving_average_XX.i.t + +# Source built by Python into $(builddir) +BUILT_SOURCES = \ + $(GENERATED_H) \ + $(GENERATED_I) \ + $(GENERATED_CC) \ + gengen_generated.i + +# ---------------------------------------------------------------- + +EXTRA_DIST = \ + $(core_generator) + +libgengen_la_SOURCES = \ + $(GENERATED_CC) + +grinclude_HEADERS = \ + $(GENERATED_H) \ + gr_endianness.h \ + gr_noise_type.h \ + gr_sig_source_waveform.h + +swiginclude_HEADERS = \ + $(GENERATED_I) \ + gr_endianness.i \ + gengen.i \ + gengen_generated.i + +# Do creation and inclusion of other Makefiles last + +# include the srcdir's Makefile.gen; doing this creates an implicit +# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. +include $(srcdir)/Makefile.gen + +# common way for generating local Makefile.gen +makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py +include $(top_srcdir)/Makefile.gen.gen + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(BUILT_SOURCES) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +include $(top_srcdir)/Makefile.par.gen diff --git a/gnuradio-core/src/lib/gengen/Makefile.gen b/gnuradio-core/src/lib/gengen/Makefile.gen new file mode 100644 index 00000000..1c529803 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/Makefile.gen @@ -0,0 +1,318 @@ +# +# This file is machine generated. All edits will be overwritten +# +GENERATED_H = \ + gr_add_cc.h \ + gr_add_const_cc.h \ + gr_add_const_ff.h \ + gr_add_const_ii.h \ + gr_add_const_sf.h \ + gr_add_const_ss.h \ + gr_add_const_vcc.h \ + gr_add_const_vff.h \ + gr_add_const_vii.h \ + gr_add_const_vss.h \ + gr_add_ff.h \ + gr_add_ii.h \ + gr_add_ss.h \ + gr_and_bb.h \ + gr_and_const_bb.h \ + gr_and_const_ii.h \ + gr_and_const_ss.h \ + gr_and_ii.h \ + gr_and_ss.h \ + gr_argmax_fs.h \ + gr_argmax_is.h \ + gr_argmax_ss.h \ + gr_chunks_to_symbols_bc.h \ + gr_chunks_to_symbols_bf.h \ + gr_chunks_to_symbols_ic.h \ + gr_chunks_to_symbols_if.h \ + gr_chunks_to_symbols_sc.h \ + gr_chunks_to_symbols_sf.h \ + gr_divide_cc.h \ + gr_divide_ff.h \ + gr_divide_ii.h \ + gr_divide_ss.h \ + gr_integrate_cc.h \ + gr_integrate_ff.h \ + gr_integrate_ii.h \ + gr_integrate_ss.h \ + gr_max_ff.h \ + gr_max_ii.h \ + gr_max_ss.h \ + gr_moving_average_cc.h \ + gr_moving_average_ff.h \ + gr_moving_average_ii.h \ + gr_moving_average_ss.h \ + gr_multiply_cc.h \ + gr_multiply_const_cc.h \ + gr_multiply_const_ff.h \ + gr_multiply_const_ii.h \ + gr_multiply_const_ss.h \ + gr_multiply_const_vcc.h \ + gr_multiply_const_vff.h \ + gr_multiply_const_vii.h \ + gr_multiply_const_vss.h \ + gr_multiply_ff.h \ + gr_multiply_ii.h \ + gr_multiply_ss.h \ + gr_mute_cc.h \ + gr_mute_ff.h \ + gr_mute_ii.h \ + gr_mute_ss.h \ + gr_noise_source_c.h \ + gr_noise_source_f.h \ + gr_noise_source_i.h \ + gr_noise_source_s.h \ + gr_not_bb.h \ + gr_not_ii.h \ + gr_not_ss.h \ + gr_or_bb.h \ + gr_or_ii.h \ + gr_or_ss.h \ + gr_packed_to_unpacked_bb.h \ + gr_packed_to_unpacked_ii.h \ + gr_packed_to_unpacked_ss.h \ + gr_peak_detector_fb.h \ + gr_peak_detector_ib.h \ + gr_peak_detector_sb.h \ + gr_sample_and_hold_bb.h \ + gr_sample_and_hold_ff.h \ + gr_sample_and_hold_ii.h \ + gr_sample_and_hold_ss.h \ + gr_sig_source_c.h \ + gr_sig_source_f.h \ + gr_sig_source_i.h \ + gr_sig_source_s.h \ + gr_sub_cc.h \ + gr_sub_ff.h \ + gr_sub_ii.h \ + gr_sub_ss.h \ + gr_unpacked_to_packed_bb.h \ + gr_unpacked_to_packed_ii.h \ + gr_unpacked_to_packed_ss.h \ + gr_vector_sink_b.h \ + gr_vector_sink_c.h \ + gr_vector_sink_f.h \ + gr_vector_sink_i.h \ + gr_vector_sink_s.h \ + gr_vector_source_b.h \ + gr_vector_source_c.h \ + gr_vector_source_f.h \ + gr_vector_source_i.h \ + gr_vector_source_s.h \ + gr_xor_bb.h \ + gr_xor_ii.h \ + gr_xor_ss.h + +GENERATED_I = \ + gr_add_cc.i \ + gr_add_const_cc.i \ + gr_add_const_ff.i \ + gr_add_const_ii.i \ + gr_add_const_sf.i \ + gr_add_const_ss.i \ + gr_add_const_vcc.i \ + gr_add_const_vff.i \ + gr_add_const_vii.i \ + gr_add_const_vss.i \ + gr_add_ff.i \ + gr_add_ii.i \ + gr_add_ss.i \ + gr_and_bb.i \ + gr_and_const_bb.i \ + gr_and_const_ii.i \ + gr_and_const_ss.i \ + gr_and_ii.i \ + gr_and_ss.i \ + gr_argmax_fs.i \ + gr_argmax_is.i \ + gr_argmax_ss.i \ + gr_chunks_to_symbols_bc.i \ + gr_chunks_to_symbols_bf.i \ + gr_chunks_to_symbols_ic.i \ + gr_chunks_to_symbols_if.i \ + gr_chunks_to_symbols_sc.i \ + gr_chunks_to_symbols_sf.i \ + gr_divide_cc.i \ + gr_divide_ff.i \ + gr_divide_ii.i \ + gr_divide_ss.i \ + gr_integrate_cc.i \ + gr_integrate_ff.i \ + gr_integrate_ii.i \ + gr_integrate_ss.i \ + gr_max_ff.i \ + gr_max_ii.i \ + gr_max_ss.i \ + gr_moving_average_cc.i \ + gr_moving_average_ff.i \ + gr_moving_average_ii.i \ + gr_moving_average_ss.i \ + gr_multiply_cc.i \ + gr_multiply_const_cc.i \ + gr_multiply_const_ff.i \ + gr_multiply_const_ii.i \ + gr_multiply_const_ss.i \ + gr_multiply_const_vcc.i \ + gr_multiply_const_vff.i \ + gr_multiply_const_vii.i \ + gr_multiply_const_vss.i \ + gr_multiply_ff.i \ + gr_multiply_ii.i \ + gr_multiply_ss.i \ + gr_mute_cc.i \ + gr_mute_ff.i \ + gr_mute_ii.i \ + gr_mute_ss.i \ + gr_noise_source_c.i \ + gr_noise_source_f.i \ + gr_noise_source_i.i \ + gr_noise_source_s.i \ + gr_not_bb.i \ + gr_not_ii.i \ + gr_not_ss.i \ + gr_or_bb.i \ + gr_or_ii.i \ + gr_or_ss.i \ + gr_packed_to_unpacked_bb.i \ + gr_packed_to_unpacked_ii.i \ + gr_packed_to_unpacked_ss.i \ + gr_peak_detector_fb.i \ + gr_peak_detector_ib.i \ + gr_peak_detector_sb.i \ + gr_sample_and_hold_bb.i \ + gr_sample_and_hold_ff.i \ + gr_sample_and_hold_ii.i \ + gr_sample_and_hold_ss.i \ + gr_sig_source_c.i \ + gr_sig_source_f.i \ + gr_sig_source_i.i \ + gr_sig_source_s.i \ + gr_sub_cc.i \ + gr_sub_ff.i \ + gr_sub_ii.i \ + gr_sub_ss.i \ + gr_unpacked_to_packed_bb.i \ + gr_unpacked_to_packed_ii.i \ + gr_unpacked_to_packed_ss.i \ + gr_vector_sink_b.i \ + gr_vector_sink_c.i \ + gr_vector_sink_f.i \ + gr_vector_sink_i.i \ + gr_vector_sink_s.i \ + gr_vector_source_b.i \ + gr_vector_source_c.i \ + gr_vector_source_f.i \ + gr_vector_source_i.i \ + gr_vector_source_s.i \ + gr_xor_bb.i \ + gr_xor_ii.i \ + gr_xor_ss.i + +GENERATED_CC = \ + gr_add_cc.cc \ + gr_add_const_cc.cc \ + gr_add_const_ff.cc \ + gr_add_const_ii.cc \ + gr_add_const_sf.cc \ + gr_add_const_ss.cc \ + gr_add_const_vcc.cc \ + gr_add_const_vff.cc \ + gr_add_const_vii.cc \ + gr_add_const_vss.cc \ + gr_add_ff.cc \ + gr_add_ii.cc \ + gr_add_ss.cc \ + gr_and_bb.cc \ + gr_and_const_bb.cc \ + gr_and_const_ii.cc \ + gr_and_const_ss.cc \ + gr_and_ii.cc \ + gr_and_ss.cc \ + gr_argmax_fs.cc \ + gr_argmax_is.cc \ + gr_argmax_ss.cc \ + gr_chunks_to_symbols_bc.cc \ + gr_chunks_to_symbols_bf.cc \ + gr_chunks_to_symbols_ic.cc \ + gr_chunks_to_symbols_if.cc \ + gr_chunks_to_symbols_sc.cc \ + gr_chunks_to_symbols_sf.cc \ + gr_divide_cc.cc \ + gr_divide_ff.cc \ + gr_divide_ii.cc \ + gr_divide_ss.cc \ + gr_integrate_cc.cc \ + gr_integrate_ff.cc \ + gr_integrate_ii.cc \ + gr_integrate_ss.cc \ + gr_max_ff.cc \ + gr_max_ii.cc \ + gr_max_ss.cc \ + gr_moving_average_cc.cc \ + gr_moving_average_ff.cc \ + gr_moving_average_ii.cc \ + gr_moving_average_ss.cc \ + gr_multiply_cc.cc \ + gr_multiply_const_cc.cc \ + gr_multiply_const_ff.cc \ + gr_multiply_const_ii.cc \ + gr_multiply_const_ss.cc \ + gr_multiply_const_vcc.cc \ + gr_multiply_const_vff.cc \ + gr_multiply_const_vii.cc \ + gr_multiply_const_vss.cc \ + gr_multiply_ff.cc \ + gr_multiply_ii.cc \ + gr_multiply_ss.cc \ + gr_mute_cc.cc \ + gr_mute_ff.cc \ + gr_mute_ii.cc \ + gr_mute_ss.cc \ + gr_noise_source_c.cc \ + gr_noise_source_f.cc \ + gr_noise_source_i.cc \ + gr_noise_source_s.cc \ + gr_not_bb.cc \ + gr_not_ii.cc \ + gr_not_ss.cc \ + gr_or_bb.cc \ + gr_or_ii.cc \ + gr_or_ss.cc \ + gr_packed_to_unpacked_bb.cc \ + gr_packed_to_unpacked_ii.cc \ + gr_packed_to_unpacked_ss.cc \ + gr_peak_detector_fb.cc \ + gr_peak_detector_ib.cc \ + gr_peak_detector_sb.cc \ + gr_sample_and_hold_bb.cc \ + gr_sample_and_hold_ff.cc \ + gr_sample_and_hold_ii.cc \ + gr_sample_and_hold_ss.cc \ + gr_sig_source_c.cc \ + gr_sig_source_f.cc \ + gr_sig_source_i.cc \ + gr_sig_source_s.cc \ + gr_sub_cc.cc \ + gr_sub_ff.cc \ + gr_sub_ii.cc \ + gr_sub_ss.cc \ + gr_unpacked_to_packed_bb.cc \ + gr_unpacked_to_packed_ii.cc \ + gr_unpacked_to_packed_ss.cc \ + gr_vector_sink_b.cc \ + gr_vector_sink_c.cc \ + gr_vector_sink_f.cc \ + gr_vector_sink_i.cc \ + gr_vector_sink_s.cc \ + gr_vector_source_b.cc \ + gr_vector_source_c.cc \ + gr_vector_source_f.cc \ + gr_vector_source_i.cc \ + gr_vector_source_s.cc \ + gr_xor_bb.cc \ + gr_xor_ii.cc \ + gr_xor_ss.cc + diff --git a/gnuradio-core/src/lib/gengen/Makefile.in b/gnuradio-core/src/lib/gengen/Makefile.in new file mode 100644 index 00000000..5d8fcd07 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/Makefile.in @@ -0,0 +1,1727 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2001,2002,2004,2006,2007,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# 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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.gen $(srcdir)/Makefile.in \ + $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.gen.gen $(top_srcdir)/Makefile.par.gen +subdir = gnuradio-core/src/lib/gengen +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libgengen_la_LIBADD = +am__objects_1 = gr_add_cc.lo gr_add_const_cc.lo gr_add_const_ff.lo \ + gr_add_const_ii.lo gr_add_const_sf.lo gr_add_const_ss.lo \ + gr_add_const_vcc.lo gr_add_const_vff.lo gr_add_const_vii.lo \ + gr_add_const_vss.lo gr_add_ff.lo gr_add_ii.lo gr_add_ss.lo \ + gr_and_bb.lo gr_and_const_bb.lo gr_and_const_ii.lo \ + gr_and_const_ss.lo gr_and_ii.lo gr_and_ss.lo gr_argmax_fs.lo \ + gr_argmax_is.lo gr_argmax_ss.lo gr_chunks_to_symbols_bc.lo \ + gr_chunks_to_symbols_bf.lo gr_chunks_to_symbols_ic.lo \ + gr_chunks_to_symbols_if.lo gr_chunks_to_symbols_sc.lo \ + gr_chunks_to_symbols_sf.lo gr_divide_cc.lo gr_divide_ff.lo \ + gr_divide_ii.lo gr_divide_ss.lo gr_integrate_cc.lo \ + gr_integrate_ff.lo gr_integrate_ii.lo gr_integrate_ss.lo \ + gr_max_ff.lo gr_max_ii.lo gr_max_ss.lo gr_moving_average_cc.lo \ + gr_moving_average_ff.lo gr_moving_average_ii.lo \ + gr_moving_average_ss.lo gr_multiply_cc.lo \ + gr_multiply_const_cc.lo gr_multiply_const_ff.lo \ + gr_multiply_const_ii.lo gr_multiply_const_ss.lo \ + gr_multiply_const_vcc.lo gr_multiply_const_vff.lo \ + gr_multiply_const_vii.lo gr_multiply_const_vss.lo \ + gr_multiply_ff.lo gr_multiply_ii.lo gr_multiply_ss.lo \ + gr_mute_cc.lo gr_mute_ff.lo gr_mute_ii.lo gr_mute_ss.lo \ + gr_noise_source_c.lo gr_noise_source_f.lo gr_noise_source_i.lo \ + gr_noise_source_s.lo gr_not_bb.lo gr_not_ii.lo gr_not_ss.lo \ + gr_or_bb.lo gr_or_ii.lo gr_or_ss.lo \ + gr_packed_to_unpacked_bb.lo gr_packed_to_unpacked_ii.lo \ + gr_packed_to_unpacked_ss.lo gr_peak_detector_fb.lo \ + gr_peak_detector_ib.lo gr_peak_detector_sb.lo \ + gr_sample_and_hold_bb.lo gr_sample_and_hold_ff.lo \ + gr_sample_and_hold_ii.lo gr_sample_and_hold_ss.lo \ + gr_sig_source_c.lo gr_sig_source_f.lo gr_sig_source_i.lo \ + gr_sig_source_s.lo gr_sub_cc.lo gr_sub_ff.lo gr_sub_ii.lo \ + gr_sub_ss.lo gr_unpacked_to_packed_bb.lo \ + gr_unpacked_to_packed_ii.lo gr_unpacked_to_packed_ss.lo \ + gr_vector_sink_b.lo gr_vector_sink_c.lo gr_vector_sink_f.lo \ + gr_vector_sink_i.lo gr_vector_sink_s.lo gr_vector_source_b.lo \ + gr_vector_source_c.lo gr_vector_source_f.lo \ + gr_vector_source_i.lo gr_vector_source_s.lo gr_xor_bb.lo \ + gr_xor_ii.lo gr_xor_ss.lo +am_libgengen_la_OBJECTS = $(am__objects_1) +libgengen_la_OBJECTS = $(am_libgengen_la_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libgengen_la_SOURCES) +DIST_SOURCES = $(libgengen_la_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(swigincludedir)" +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/Makefile.gen-generate-generate-* \ + $(DEPDIR)/stamp-sources-generate* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT stamp-sources-generate +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + +#noinst_LTLIBRARIES = libgengen.la libgengen-qa.la +noinst_LTLIBRARIES = libgengen.la + +# ---------------------------------------------------------------- +# these scripts generate code +core_generator = \ + generate_all.py \ + generate_common.py \ + gr_add_XX.cc.t \ + gr_add_XX.h.t \ + gr_add_XX.i.t \ + gr_add_const_XX.cc.t \ + gr_add_const_XX.h.t \ + gr_add_const_XX.i.t \ + gr_add_const_vXX.cc.t \ + gr_add_const_vXX.h.t \ + gr_add_const_vXX.i.t \ + gr_argmax_XX.cc.t \ + gr_argmax_XX.h.t \ + gr_argmax_XX.i.t \ + gr_chunks_to_symbols_XX.cc.t \ + gr_chunks_to_symbols_XX.h.t \ + gr_chunks_to_symbols_XX.i.t \ + gr_divide_XX.cc.t \ + gr_divide_XX.h.t \ + gr_divide_XX.i.t \ + gr_integrate_XX.cc.t \ + gr_integrate_XX.h.t \ + gr_integrate_XX.i.t \ + gr_max_XX.cc.t \ + gr_max_XX.h.t \ + gr_max_XX.i.t \ + gr_multiply_XX.cc.t \ + gr_multiply_XX.h.t \ + gr_multiply_XX.i.t \ + gr_multiply_const_XX.cc.t \ + gr_multiply_const_XX.h.t \ + gr_multiply_const_XX.i.t \ + gr_multiply_const_vXX.cc.t \ + gr_multiply_const_vXX.h.t \ + gr_multiply_const_vXX.i.t \ + gr_mute_XX.cc.t \ + gr_mute_XX.h.t \ + gr_mute_XX.i.t \ + gr_noise_source_X.cc.t \ + gr_noise_source_X.h.t \ + gr_noise_source_X.i.t \ + gr_packed_to_unpacked_XX.cc.t \ + gr_packed_to_unpacked_XX.h.t \ + gr_packed_to_unpacked_XX.i.t \ + gr_peak_detector_XX.cc.t \ + gr_peak_detector_XX.h.t \ + gr_peak_detector_XX.i.t \ + gr_sample_and_hold_XX.cc.t \ + gr_sample_and_hold_XX.h.t \ + gr_sample_and_hold_XX.i.t \ + gr_sig_source_X.cc.t \ + gr_sig_source_X.h.t \ + gr_sig_source_X.i.t \ + gr_sub_XX.cc.t \ + gr_sub_XX.h.t \ + gr_sub_XX.i.t \ + gr_unpacked_to_packed_XX.cc.t \ + gr_unpacked_to_packed_XX.h.t \ + gr_unpacked_to_packed_XX.i.t \ + gr_vector_source_X.cc.t \ + gr_vector_source_X.h.t \ + gr_vector_source_X.i.t \ + gr_vector_sink_X.cc.t \ + gr_vector_sink_X.h.t \ + gr_vector_sink_X.i.t \ + gr_xor_XX.cc.t \ + gr_xor_XX.h.t \ + gr_xor_XX.i.t \ + gr_and_XX.cc.t \ + gr_and_XX.h.t \ + gr_and_XX.i.t \ + gr_and_const_XX.cc.t \ + gr_and_const_XX.h.t \ + gr_and_const_XX.i.t \ + gr_or_XX.cc.t \ + gr_or_XX.h.t \ + gr_or_XX.i.t \ + gr_not_XX.cc.t \ + gr_not_XX.h.t \ + gr_not_XX.i.t \ + gr_moving_average_XX.cc.t \ + gr_moving_average_XX.h.t \ + gr_moving_average_XX.i.t + + +# Source built by Python into $(builddir) +BUILT_SOURCES = \ + $(GENERATED_H) \ + $(GENERATED_I) \ + $(GENERATED_CC) \ + gengen_generated.i + + +# ---------------------------------------------------------------- +EXTRA_DIST = $(core_generator) stamp-sources-generate +libgengen_la_SOURCES = \ + $(GENERATED_CC) + +grinclude_HEADERS = \ + $(GENERATED_H) \ + gr_endianness.h \ + gr_noise_type.h \ + gr_sig_source_waveform.h + +swiginclude_HEADERS = \ + $(GENERATED_I) \ + gr_endianness.i \ + gengen.i \ + gengen_generated.i + + +# +# This file is machine generated. All edits will be overwritten +# +GENERATED_H = \ + gr_add_cc.h \ + gr_add_const_cc.h \ + gr_add_const_ff.h \ + gr_add_const_ii.h \ + gr_add_const_sf.h \ + gr_add_const_ss.h \ + gr_add_const_vcc.h \ + gr_add_const_vff.h \ + gr_add_const_vii.h \ + gr_add_const_vss.h \ + gr_add_ff.h \ + gr_add_ii.h \ + gr_add_ss.h \ + gr_and_bb.h \ + gr_and_const_bb.h \ + gr_and_const_ii.h \ + gr_and_const_ss.h \ + gr_and_ii.h \ + gr_and_ss.h \ + gr_argmax_fs.h \ + gr_argmax_is.h \ + gr_argmax_ss.h \ + gr_chunks_to_symbols_bc.h \ + gr_chunks_to_symbols_bf.h \ + gr_chunks_to_symbols_ic.h \ + gr_chunks_to_symbols_if.h \ + gr_chunks_to_symbols_sc.h \ + gr_chunks_to_symbols_sf.h \ + gr_divide_cc.h \ + gr_divide_ff.h \ + gr_divide_ii.h \ + gr_divide_ss.h \ + gr_integrate_cc.h \ + gr_integrate_ff.h \ + gr_integrate_ii.h \ + gr_integrate_ss.h \ + gr_max_ff.h \ + gr_max_ii.h \ + gr_max_ss.h \ + gr_moving_average_cc.h \ + gr_moving_average_ff.h \ + gr_moving_average_ii.h \ + gr_moving_average_ss.h \ + gr_multiply_cc.h \ + gr_multiply_const_cc.h \ + gr_multiply_const_ff.h \ + gr_multiply_const_ii.h \ + gr_multiply_const_ss.h \ + gr_multiply_const_vcc.h \ + gr_multiply_const_vff.h \ + gr_multiply_const_vii.h \ + gr_multiply_const_vss.h \ + gr_multiply_ff.h \ + gr_multiply_ii.h \ + gr_multiply_ss.h \ + gr_mute_cc.h \ + gr_mute_ff.h \ + gr_mute_ii.h \ + gr_mute_ss.h \ + gr_noise_source_c.h \ + gr_noise_source_f.h \ + gr_noise_source_i.h \ + gr_noise_source_s.h \ + gr_not_bb.h \ + gr_not_ii.h \ + gr_not_ss.h \ + gr_or_bb.h \ + gr_or_ii.h \ + gr_or_ss.h \ + gr_packed_to_unpacked_bb.h \ + gr_packed_to_unpacked_ii.h \ + gr_packed_to_unpacked_ss.h \ + gr_peak_detector_fb.h \ + gr_peak_detector_ib.h \ + gr_peak_detector_sb.h \ + gr_sample_and_hold_bb.h \ + gr_sample_and_hold_ff.h \ + gr_sample_and_hold_ii.h \ + gr_sample_and_hold_ss.h \ + gr_sig_source_c.h \ + gr_sig_source_f.h \ + gr_sig_source_i.h \ + gr_sig_source_s.h \ + gr_sub_cc.h \ + gr_sub_ff.h \ + gr_sub_ii.h \ + gr_sub_ss.h \ + gr_unpacked_to_packed_bb.h \ + gr_unpacked_to_packed_ii.h \ + gr_unpacked_to_packed_ss.h \ + gr_vector_sink_b.h \ + gr_vector_sink_c.h \ + gr_vector_sink_f.h \ + gr_vector_sink_i.h \ + gr_vector_sink_s.h \ + gr_vector_source_b.h \ + gr_vector_source_c.h \ + gr_vector_source_f.h \ + gr_vector_source_i.h \ + gr_vector_source_s.h \ + gr_xor_bb.h \ + gr_xor_ii.h \ + gr_xor_ss.h + +GENERATED_I = \ + gr_add_cc.i \ + gr_add_const_cc.i \ + gr_add_const_ff.i \ + gr_add_const_ii.i \ + gr_add_const_sf.i \ + gr_add_const_ss.i \ + gr_add_const_vcc.i \ + gr_add_const_vff.i \ + gr_add_const_vii.i \ + gr_add_const_vss.i \ + gr_add_ff.i \ + gr_add_ii.i \ + gr_add_ss.i \ + gr_and_bb.i \ + gr_and_const_bb.i \ + gr_and_const_ii.i \ + gr_and_const_ss.i \ + gr_and_ii.i \ + gr_and_ss.i \ + gr_argmax_fs.i \ + gr_argmax_is.i \ + gr_argmax_ss.i \ + gr_chunks_to_symbols_bc.i \ + gr_chunks_to_symbols_bf.i \ + gr_chunks_to_symbols_ic.i \ + gr_chunks_to_symbols_if.i \ + gr_chunks_to_symbols_sc.i \ + gr_chunks_to_symbols_sf.i \ + gr_divide_cc.i \ + gr_divide_ff.i \ + gr_divide_ii.i \ + gr_divide_ss.i \ + gr_integrate_cc.i \ + gr_integrate_ff.i \ + gr_integrate_ii.i \ + gr_integrate_ss.i \ + gr_max_ff.i \ + gr_max_ii.i \ + gr_max_ss.i \ + gr_moving_average_cc.i \ + gr_moving_average_ff.i \ + gr_moving_average_ii.i \ + gr_moving_average_ss.i \ + gr_multiply_cc.i \ + gr_multiply_const_cc.i \ + gr_multiply_const_ff.i \ + gr_multiply_const_ii.i \ + gr_multiply_const_ss.i \ + gr_multiply_const_vcc.i \ + gr_multiply_const_vff.i \ + gr_multiply_const_vii.i \ + gr_multiply_const_vss.i \ + gr_multiply_ff.i \ + gr_multiply_ii.i \ + gr_multiply_ss.i \ + gr_mute_cc.i \ + gr_mute_ff.i \ + gr_mute_ii.i \ + gr_mute_ss.i \ + gr_noise_source_c.i \ + gr_noise_source_f.i \ + gr_noise_source_i.i \ + gr_noise_source_s.i \ + gr_not_bb.i \ + gr_not_ii.i \ + gr_not_ss.i \ + gr_or_bb.i \ + gr_or_ii.i \ + gr_or_ss.i \ + gr_packed_to_unpacked_bb.i \ + gr_packed_to_unpacked_ii.i \ + gr_packed_to_unpacked_ss.i \ + gr_peak_detector_fb.i \ + gr_peak_detector_ib.i \ + gr_peak_detector_sb.i \ + gr_sample_and_hold_bb.i \ + gr_sample_and_hold_ff.i \ + gr_sample_and_hold_ii.i \ + gr_sample_and_hold_ss.i \ + gr_sig_source_c.i \ + gr_sig_source_f.i \ + gr_sig_source_i.i \ + gr_sig_source_s.i \ + gr_sub_cc.i \ + gr_sub_ff.i \ + gr_sub_ii.i \ + gr_sub_ss.i \ + gr_unpacked_to_packed_bb.i \ + gr_unpacked_to_packed_ii.i \ + gr_unpacked_to_packed_ss.i \ + gr_vector_sink_b.i \ + gr_vector_sink_c.i \ + gr_vector_sink_f.i \ + gr_vector_sink_i.i \ + gr_vector_sink_s.i \ + gr_vector_source_b.i \ + gr_vector_source_c.i \ + gr_vector_source_f.i \ + gr_vector_source_i.i \ + gr_vector_source_s.i \ + gr_xor_bb.i \ + gr_xor_ii.i \ + gr_xor_ss.i + +GENERATED_CC = \ + gr_add_cc.cc \ + gr_add_const_cc.cc \ + gr_add_const_ff.cc \ + gr_add_const_ii.cc \ + gr_add_const_sf.cc \ + gr_add_const_ss.cc \ + gr_add_const_vcc.cc \ + gr_add_const_vff.cc \ + gr_add_const_vii.cc \ + gr_add_const_vss.cc \ + gr_add_ff.cc \ + gr_add_ii.cc \ + gr_add_ss.cc \ + gr_and_bb.cc \ + gr_and_const_bb.cc \ + gr_and_const_ii.cc \ + gr_and_const_ss.cc \ + gr_and_ii.cc \ + gr_and_ss.cc \ + gr_argmax_fs.cc \ + gr_argmax_is.cc \ + gr_argmax_ss.cc \ + gr_chunks_to_symbols_bc.cc \ + gr_chunks_to_symbols_bf.cc \ + gr_chunks_to_symbols_ic.cc \ + gr_chunks_to_symbols_if.cc \ + gr_chunks_to_symbols_sc.cc \ + gr_chunks_to_symbols_sf.cc \ + gr_divide_cc.cc \ + gr_divide_ff.cc \ + gr_divide_ii.cc \ + gr_divide_ss.cc \ + gr_integrate_cc.cc \ + gr_integrate_ff.cc \ + gr_integrate_ii.cc \ + gr_integrate_ss.cc \ + gr_max_ff.cc \ + gr_max_ii.cc \ + gr_max_ss.cc \ + gr_moving_average_cc.cc \ + gr_moving_average_ff.cc \ + gr_moving_average_ii.cc \ + gr_moving_average_ss.cc \ + gr_multiply_cc.cc \ + gr_multiply_const_cc.cc \ + gr_multiply_const_ff.cc \ + gr_multiply_const_ii.cc \ + gr_multiply_const_ss.cc \ + gr_multiply_const_vcc.cc \ + gr_multiply_const_vff.cc \ + gr_multiply_const_vii.cc \ + gr_multiply_const_vss.cc \ + gr_multiply_ff.cc \ + gr_multiply_ii.cc \ + gr_multiply_ss.cc \ + gr_mute_cc.cc \ + gr_mute_ff.cc \ + gr_mute_ii.cc \ + gr_mute_ss.cc \ + gr_noise_source_c.cc \ + gr_noise_source_f.cc \ + gr_noise_source_i.cc \ + gr_noise_source_s.cc \ + gr_not_bb.cc \ + gr_not_ii.cc \ + gr_not_ss.cc \ + gr_or_bb.cc \ + gr_or_ii.cc \ + gr_or_ss.cc \ + gr_packed_to_unpacked_bb.cc \ + gr_packed_to_unpacked_ii.cc \ + gr_packed_to_unpacked_ss.cc \ + gr_peak_detector_fb.cc \ + gr_peak_detector_ib.cc \ + gr_peak_detector_sb.cc \ + gr_sample_and_hold_bb.cc \ + gr_sample_and_hold_ff.cc \ + gr_sample_and_hold_ii.cc \ + gr_sample_and_hold_ss.cc \ + gr_sig_source_c.cc \ + gr_sig_source_f.cc \ + gr_sig_source_i.cc \ + gr_sig_source_s.cc \ + gr_sub_cc.cc \ + gr_sub_ff.cc \ + gr_sub_ii.cc \ + gr_sub_ss.cc \ + gr_unpacked_to_packed_bb.cc \ + gr_unpacked_to_packed_ii.cc \ + gr_unpacked_to_packed_ss.cc \ + gr_vector_sink_b.cc \ + gr_vector_sink_c.cc \ + gr_vector_sink_f.cc \ + gr_vector_sink_i.cc \ + gr_vector_sink_s.cc \ + gr_vector_source_b.cc \ + gr_vector_source_c.cc \ + gr_vector_source_f.cc \ + gr_vector_source_i.cc \ + gr_vector_source_s.cc \ + gr_xor_bb.cc \ + gr_xor_ii.cc \ + gr_xor_ss.cc + + +# Do creation and inclusion of other Makefiles last + +# include the srcdir's Makefile.gen; doing this creates an implicit +# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. + +# common way for generating local Makefile.gen +makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(BUILT_SOURCES) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(srcdir)/Makefile.gen $(top_srcdir)/Makefile.gen.gen $(top_srcdir)/Makefile.par.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/lib/gengen/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-core/src/lib/gengen/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgengen.la: $(libgengen_la_OBJECTS) $(libgengen_la_DEPENDENCIES) + $(CXXLINK) $(libgengen_la_OBJECTS) $(libgengen_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_sf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vcc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_const_vss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_add_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_and_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_and_const_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_and_const_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_and_const_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_and_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_and_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_argmax_fs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_argmax_is.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_argmax_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_bc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_bf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_ic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_if.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_sc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_chunks_to_symbols_sf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_divide_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_integrate_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_integrate_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_integrate_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_integrate_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_max_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_max_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_max_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_moving_average_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_moving_average_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_moving_average_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_moving_average_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vcc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_const_vss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_multiply_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_mute_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_noise_source_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_not_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_not_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_not_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_or_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_or_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_or_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packed_to_unpacked_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packed_to_unpacked_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_packed_to_unpacked_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_peak_detector_fb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_peak_detector_ib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_peak_detector_sb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sample_and_hold_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sample_and_hold_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sample_and_hold_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sample_and_hold_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sig_source_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_cc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_ff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sub_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpacked_to_packed_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpacked_to_packed_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_unpacked_to_packed_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_sink_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vector_source_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_xor_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_xor_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_xor_ss.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-swigincludeHEADERS: $(swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ + $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +uninstall-swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS install-swigincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS uninstall-swigincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ + uninstall-swigincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile $(srcdir)/Makefile.gen: + @trap 'rm -rf $(DEPDIR)/Makefile.gen-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/Makefile.gen-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/Makefile.gen-generate-stamp; \ + rm -f $(DEPDIR)/Makefile.gen-generate-tmp; \ + touch $(DEPDIR)/Makefile.gen-generate-tmp; \ + do_recreate=0; \ + if test -f $(srcdir)/Makefile.gen; then \ + if $(RM) $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.gen"; \ + $(makefile_gen_gen_command); \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; \ + mv -f $(DEPDIR)/Makefile.gen-generate-tmp $(DEPDIR)/Makefile.gen-generate-stamp; \ + rmdir $(DEPDIR)/Makefile.gen-generate-lock; \ + else \ + while test -d $(DEPDIR)/Makefile.gen-generate-lock; do sleep 1; done; \ + test -f $(DEPDIR)/Makefile.gen-generate-stamp; exit $$?; \ + fi; + +STAMPS ?= +EXTRA_DIST ?= +MOSTLYCLEANFILES ?= + +stamp-sources-generate: $(gen_sources_deps) + @rm -f $(DEPDIR)/stamp-sources-generate-tmp + @touch $(DEPDIR)/stamp-sources-generate-tmp + $(par_gen_command) + @mv -f $(DEPDIR)/stamp-sources-generate-tmp $@ + +$(gen_sources): stamp-sources-generate + @if test -f $@; then :; else \ + trap 'rm -rf $(DEPDIR)/stamp-sources-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/stamp-sources-generate-lock 2>/dev/null; then \ + rm -f stamp-sources-generate; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-sources-generate; \ + rmdir $(DEPDIR)/stamp-sources-generate-lock; \ + else \ + while test -d $(DEPDIR)/stamp-sources-generate-lock; do sleep 1; done; \ + test -f stamp-sources-generate; exit $$?; \ + fi; \ + fi; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/lib/gengen/generate_all.py b/gnuradio-core/src/lib/gengen/generate_all.py new file mode 100755 index 00000000..9d9902d6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/generate_all.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +# +# 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 build_utils import output_glue + +import generate_common + +def generate_all (): + generate_common.generate () + output_glue ('gengen') + + +if __name__ == '__main__': + generate_all () diff --git a/gnuradio-core/src/lib/gengen/generate_common.py b/gnuradio-core/src/lib/gengen/generate_common.py new file mode 100755 index 00000000..9bd6bcc9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/generate_common.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python +# +# Copyright 2004,2006,2007,2008,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. +# + +from build_utils import expand_template, standard_dict +from build_utils_codes import * + +import re + + +# sources and sinks +ss_signatures = ['s', 'i', 'f', 'c'] + +ss_roots = [ + 'gr_vector_source_X', + 'gr_vector_sink_X', + 'gr_noise_source_X', + 'gr_sig_source_X' + ] + +# regular blocks +reg_signatures = ['ss', 'ii', 'ff', 'cc'] + +reg_roots = [ + 'gr_add_const_XX', + 'gr_multiply_const_XX', + 'gr_add_XX', + 'gr_sub_XX', + 'gr_multiply_XX', + 'gr_divide_XX', + 'gr_mute_XX', + 'gr_add_const_vXX', + 'gr_multiply_const_vXX', + 'gr_integrate_XX', + 'gr_moving_average_XX', + ] + +# other blocks +others = ( + ('gr_chunks_to_symbols_XX', ('bf', 'bc', 'sf', 'sc', 'if', 'ic')), + ('gr_unpacked_to_packed_XX', ('bb','ss','ii')), + ('gr_packed_to_unpacked_XX', ('bb','ss','ii')), + ('gr_xor_XX', ('bb','ss','ii')), + ('gr_and_XX', ('bb','ss','ii')), + ('gr_and_const_XX', ('bb','ss','ii')), + ('gr_or_XX', ('bb','ss','ii')), + ('gr_not_XX', ('bb','ss','ii')), + ('gr_sample_and_hold_XX', ('bb','ss','ii','ff')), + ('gr_argmax_XX', ('fs','is','ss')), + ('gr_max_XX', ('ff','ii','ss')), + ('gr_peak_detector_XX', ('fb','ib','sb')) + ) + + +def expand_h_cc_i (root, sig): + # root looks like 'gr_vector_sink_X' + name = re.sub ('X+', sig, root) + d = standard_dict (name, sig) + expand_template (d, root + '.h.t') + expand_template (d, root + '.cc.t') + expand_template (d, root + '.i.t') + + +def generate (): + expand_h_cc_i ('gr_add_const_XX', 'sf') # for MC4020 + expand_h_cc_i ('gr_vector_sink_X', 'b') + expand_h_cc_i ('gr_vector_source_X', 'b') + for r in ss_roots: + for s in ss_signatures: + expand_h_cc_i (r, s) + for r in reg_roots : + for s in reg_signatures: + expand_h_cc_i (r, s) + + for root, sigs in others: + for s in sigs: + expand_h_cc_i (root, s) + + + +if __name__ == '__main__': + generate () + + diff --git a/gnuradio-core/src/lib/gengen/gengen.i b/gnuradio-core/src/lib/gengen/gengen.i new file mode 100644 index 00000000..c3827288 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gengen.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +%{ +#include "gr_endianness.h" +#include "gr_sig_source_waveform.h" +#include "gr_noise_type.h" +%} + +%include "gr_endianness.i" +%include "gr_sig_source_waveform.h" +%include "gr_noise_type.h" + +%include "gengen_generated.i" diff --git a/gnuradio-core/src/lib/gengen/gengen_generated.i b/gnuradio-core/src/lib/gengen/gengen_generated.i new file mode 100644 index 00000000..3013b7b3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gengen_generated.i @@ -0,0 +1,212 @@ +// +// This file is machine generated. All edits will be overwritten +// +%{ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +%} + +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include diff --git a/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t new file mode 100644 index 00000000..2e44c5ea --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (size_t vlen) +{ + return @SPTR_NAME@ (new @NAME@ (vlen)); +} + +@NAME@::@NAME@ (size_t vlen) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*vlen), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*vlen)), + d_vlen (vlen) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc += ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_add_XX.h.t b/gnuradio-core/src/lib/gengen/gr_add_XX.h.t new file mode 100644 index 00000000..91dd9196 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_XX.h.t @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +/*! + * \brief output = sum (input_0, input_1, ...) + * \ingroup math_blk + * + * Add across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + @NAME@ (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_add_XX.i.t b/gnuradio-core/src/lib/gengen/gr_add_XX.i.t new file mode 100644 index 00000000..f7726ccf --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_add_cc.cc b/gnuradio-core/src/lib/gengen/gr_add_cc.cc new file mode 100644 index 00000000..26b33fea --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_cc.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_add_cc_sptr +gr_make_add_cc (size_t vlen) +{ + return gr_add_cc_sptr (new gr_add_cc (vlen)); +} + +gr_add_cc::gr_add_cc (size_t vlen) + : gr_sync_block ("add_cc", + gr_make_io_signature (1, -1, sizeof (gr_complex)*vlen), + gr_make_io_signature (1, 1, sizeof (gr_complex)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_add_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *optr = (gr_complex *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + gr_complex acc = ((gr_complex *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc += ((gr_complex *) input_items[j])[i]; + + *optr++ = (gr_complex) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_add_cc.h b/gnuradio-core/src/lib/gengen/gr_add_cc.h new file mode 100644 index 00000000..5f8a0848 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_cc.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CC_H +#define INCLUDED_GR_ADD_CC_H + +#include + +class gr_add_cc; +typedef boost::shared_ptr gr_add_cc_sptr; + +gr_add_cc_sptr gr_make_add_cc (size_t vlen = 1); + +/*! + * \brief output = sum (input_0, input_1, ...) + * \ingroup math_blk + * + * Add across all input streams. + */ +class gr_add_cc : public gr_sync_block +{ + friend gr_add_cc_sptr gr_make_add_cc (size_t vlen); + + gr_add_cc (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_add_cc.i b/gnuradio-core/src/lib/gengen/gr_add_cc.i new file mode 100644 index 00000000..71b4b5b7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_cc.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,add_cc) + +gr_add_cc_sptr gr_make_add_cc (size_t vlen = 1); + +class gr_add_cc : public gr_sync_block +{ + private: + gr_add_cc (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/general/gr_add_const_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_add_const_XX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_XX.cc.t rename to gnuradio-core/src/lib/gengen/gr_add_const_XX.cc.t diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t b/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t new file mode 100644 index 00000000..8e988410 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_XX.h.t @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + +/*! + * \brief output = input + constant + * \ingroup math_blk + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + + @O_TYPE@ d_k; // the constant + @NAME@ (@O_TYPE@ k); + + public: + @O_TYPE@ k () const { return d_k; } + void set_k (@O_TYPE@ k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_XX.i.t b/gnuradio-core/src/lib/gengen/gr_add_const_XX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_XX.i.t rename to gnuradio-core/src/lib/gengen/gr_add_const_XX.i.t diff --git a/gnuradio-core/src/lib/general/gr_add_const_cc.cc b/gnuradio-core/src/lib/gengen/gr_add_const_cc.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_cc.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_cc.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_cc.h b/gnuradio-core/src/lib/gengen/gr_add_const_cc.h new file mode 100644 index 00000000..f155eb8b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_cc.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_CC_H +#define INCLUDED_GR_ADD_CONST_CC_H + +#include + +class gr_add_const_cc; +typedef boost::shared_ptr gr_add_const_cc_sptr; + +gr_add_const_cc_sptr gr_make_add_const_cc (gr_complex k); + +/*! + * \brief output = input + constant + * \ingroup math_blk + */ +class gr_add_const_cc : public gr_sync_block +{ + friend gr_add_const_cc_sptr gr_make_add_const_cc (gr_complex k); + + gr_complex d_k; // the constant + gr_add_const_cc (gr_complex k); + + public: + gr_complex k () const { return d_k; } + void set_k (gr_complex k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_cc.i b/gnuradio-core/src/lib/gengen/gr_add_const_cc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_cc.i rename to gnuradio-core/src/lib/gengen/gr_add_const_cc.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_ff.cc b/gnuradio-core/src/lib/gengen/gr_add_const_ff.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_ff.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_ff.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_ff.h b/gnuradio-core/src/lib/gengen/gr_add_const_ff.h new file mode 100644 index 00000000..de32a6ed --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_ff.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_FF_H +#define INCLUDED_GR_ADD_CONST_FF_H + +#include + +class gr_add_const_ff; +typedef boost::shared_ptr gr_add_const_ff_sptr; + +gr_add_const_ff_sptr gr_make_add_const_ff (float k); + +/*! + * \brief output = input + constant + * \ingroup math_blk + */ +class gr_add_const_ff : public gr_sync_block +{ + friend gr_add_const_ff_sptr gr_make_add_const_ff (float k); + + float d_k; // the constant + gr_add_const_ff (float k); + + public: + float k () const { return d_k; } + void set_k (float k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_ff.i b/gnuradio-core/src/lib/gengen/gr_add_const_ff.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_ff.i rename to gnuradio-core/src/lib/gengen/gr_add_const_ff.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_ii.cc b/gnuradio-core/src/lib/gengen/gr_add_const_ii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_ii.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_ii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_ii.h b/gnuradio-core/src/lib/gengen/gr_add_const_ii.h new file mode 100644 index 00000000..285d24b3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_ii.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_II_H +#define INCLUDED_GR_ADD_CONST_II_H + +#include + +class gr_add_const_ii; +typedef boost::shared_ptr gr_add_const_ii_sptr; + +gr_add_const_ii_sptr gr_make_add_const_ii (int k); + +/*! + * \brief output = input + constant + * \ingroup math_blk + */ +class gr_add_const_ii : public gr_sync_block +{ + friend gr_add_const_ii_sptr gr_make_add_const_ii (int k); + + int d_k; // the constant + gr_add_const_ii (int k); + + public: + int k () const { return d_k; } + void set_k (int k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_ii.i b/gnuradio-core/src/lib/gengen/gr_add_const_ii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_ii.i rename to gnuradio-core/src/lib/gengen/gr_add_const_ii.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_sf.cc b/gnuradio-core/src/lib/gengen/gr_add_const_sf.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_sf.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_sf.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_sf.h b/gnuradio-core/src/lib/gengen/gr_add_const_sf.h new file mode 100644 index 00000000..859af8b2 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_sf.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_SF_H +#define INCLUDED_GR_ADD_CONST_SF_H + +#include + +class gr_add_const_sf; +typedef boost::shared_ptr gr_add_const_sf_sptr; + +gr_add_const_sf_sptr gr_make_add_const_sf (float k); + +/*! + * \brief output = input + constant + * \ingroup math_blk + */ +class gr_add_const_sf : public gr_sync_block +{ + friend gr_add_const_sf_sptr gr_make_add_const_sf (float k); + + float d_k; // the constant + gr_add_const_sf (float k); + + public: + float k () const { return d_k; } + void set_k (float k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_sf.i b/gnuradio-core/src/lib/gengen/gr_add_const_sf.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_sf.i rename to gnuradio-core/src/lib/gengen/gr_add_const_sf.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_ss.cc b/gnuradio-core/src/lib/gengen/gr_add_const_ss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_ss.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_ss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_ss.h b/gnuradio-core/src/lib/gengen/gr_add_const_ss.h new file mode 100644 index 00000000..de79c3de --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_ss.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_SS_H +#define INCLUDED_GR_ADD_CONST_SS_H + +#include + +class gr_add_const_ss; +typedef boost::shared_ptr gr_add_const_ss_sptr; + +gr_add_const_ss_sptr gr_make_add_const_ss (short k); + +/*! + * \brief output = input + constant + * \ingroup math_blk + */ +class gr_add_const_ss : public gr_sync_block +{ + friend gr_add_const_ss_sptr gr_make_add_const_ss (short k); + + short d_k; // the constant + gr_add_const_ss (short k); + + public: + short k () const { return d_k; } + void set_k (short k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_ss.i b/gnuradio-core/src/lib/gengen/gr_add_const_ss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_ss.i rename to gnuradio-core/src/lib/gengen/gr_add_const_ss.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_vXX.cc.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vXX.cc.t rename to gnuradio-core/src/lib/gengen/gr_add_const_vXX.cc.t 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 new file mode 100755 index 00000000..33b6fc39 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.h.t @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k); + +/*! + * \brief output vector = input vector + constant vector + * \ingroup math_blk + */ +class @NAME@ : public gr_sync_block +{ + 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); + + public: + const std::vector<@I_TYPE@> k () const { return d_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, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vXX.i.t b/gnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vXX.i.t rename to gnuradio-core/src/lib/gengen/gr_add_const_vXX.i.t diff --git a/gnuradio-core/src/lib/general/gr_add_const_vcc.cc b/gnuradio-core/src/lib/gengen/gr_add_const_vcc.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vcc.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_vcc.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vcc.h b/gnuradio-core/src/lib/gengen/gr_add_const_vcc.h new file mode 100644 index 00000000..50a79dec --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_vcc.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_VCC_H +#define INCLUDED_GR_ADD_CONST_VCC_H + +#include + +class gr_add_const_vcc; +typedef boost::shared_ptr gr_add_const_vcc_sptr; + +gr_add_const_vcc_sptr gr_make_add_const_vcc (const std::vector k); + +/*! + * \brief output vector = input vector + constant vector + * \ingroup math_blk + */ +class gr_add_const_vcc : public gr_sync_block +{ + friend gr_add_const_vcc_sptr gr_make_add_const_vcc (const std::vector k); + + std::vector d_k; // the constant + gr_add_const_vcc (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vcc.i b/gnuradio-core/src/lib/gengen/gr_add_const_vcc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vcc.i rename to gnuradio-core/src/lib/gengen/gr_add_const_vcc.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_vff.cc b/gnuradio-core/src/lib/gengen/gr_add_const_vff.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vff.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_vff.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vff.h b/gnuradio-core/src/lib/gengen/gr_add_const_vff.h new file mode 100644 index 00000000..70f52c9a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_vff.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_VFF_H +#define INCLUDED_GR_ADD_CONST_VFF_H + +#include + +class gr_add_const_vff; +typedef boost::shared_ptr gr_add_const_vff_sptr; + +gr_add_const_vff_sptr gr_make_add_const_vff (const std::vector k); + +/*! + * \brief output vector = input vector + constant vector + * \ingroup math_blk + */ +class gr_add_const_vff : public gr_sync_block +{ + friend gr_add_const_vff_sptr gr_make_add_const_vff (const std::vector k); + + std::vector d_k; // the constant + gr_add_const_vff (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vff.i b/gnuradio-core/src/lib/gengen/gr_add_const_vff.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vff.i rename to gnuradio-core/src/lib/gengen/gr_add_const_vff.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_vii.cc b/gnuradio-core/src/lib/gengen/gr_add_const_vii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vii.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_vii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vii.h b/gnuradio-core/src/lib/gengen/gr_add_const_vii.h new file mode 100644 index 00000000..c0ac8d2f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_vii.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_VII_H +#define INCLUDED_GR_ADD_CONST_VII_H + +#include + +class gr_add_const_vii; +typedef boost::shared_ptr gr_add_const_vii_sptr; + +gr_add_const_vii_sptr gr_make_add_const_vii (const std::vector k); + +/*! + * \brief output vector = input vector + constant vector + * \ingroup math_blk + */ +class gr_add_const_vii : public gr_sync_block +{ + friend gr_add_const_vii_sptr gr_make_add_const_vii (const std::vector k); + + std::vector d_k; // the constant + gr_add_const_vii (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vii.i b/gnuradio-core/src/lib/gengen/gr_add_const_vii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vii.i rename to gnuradio-core/src/lib/gengen/gr_add_const_vii.i diff --git a/gnuradio-core/src/lib/general/gr_add_const_vss.cc b/gnuradio-core/src/lib/gengen/gr_add_const_vss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vss.cc rename to gnuradio-core/src/lib/gengen/gr_add_const_vss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_add_const_vss.h b/gnuradio-core/src/lib/gengen/gr_add_const_vss.h new file mode 100644 index 00000000..54b61ca9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_const_vss.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_CONST_VSS_H +#define INCLUDED_GR_ADD_CONST_VSS_H + +#include + +class gr_add_const_vss; +typedef boost::shared_ptr gr_add_const_vss_sptr; + +gr_add_const_vss_sptr gr_make_add_const_vss (const std::vector k); + +/*! + * \brief output vector = input vector + constant vector + * \ingroup math_blk + */ +class gr_add_const_vss : public gr_sync_block +{ + friend gr_add_const_vss_sptr gr_make_add_const_vss (const std::vector k); + + std::vector d_k; // the constant + gr_add_const_vss (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_add_const_vss.i b/gnuradio-core/src/lib/gengen/gr_add_const_vss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_add_const_vss.i rename to gnuradio-core/src/lib/gengen/gr_add_const_vss.i diff --git a/gnuradio-core/src/lib/gengen/gr_add_ff.cc b/gnuradio-core/src/lib/gengen/gr_add_ff.cc new file mode 100644 index 00000000..18207c5b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ff.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_add_ff_sptr +gr_make_add_ff (size_t vlen) +{ + return gr_add_ff_sptr (new gr_add_ff (vlen)); +} + +gr_add_ff::gr_add_ff (size_t vlen) + : gr_sync_block ("add_ff", + gr_make_io_signature (1, -1, sizeof (float)*vlen), + gr_make_io_signature (1, 1, sizeof (float)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_add_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + float acc = ((float *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc += ((float *) input_items[j])[i]; + + *optr++ = (float) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_add_ff.h b/gnuradio-core/src/lib/gengen/gr_add_ff.h new file mode 100644 index 00000000..0e25d46a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ff.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_FF_H +#define INCLUDED_GR_ADD_FF_H + +#include + +class gr_add_ff; +typedef boost::shared_ptr gr_add_ff_sptr; + +gr_add_ff_sptr gr_make_add_ff (size_t vlen = 1); + +/*! + * \brief output = sum (input_0, input_1, ...) + * \ingroup math_blk + * + * Add across all input streams. + */ +class gr_add_ff : public gr_sync_block +{ + friend gr_add_ff_sptr gr_make_add_ff (size_t vlen); + + gr_add_ff (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_add_ff.i b/gnuradio-core/src/lib/gengen/gr_add_ff.i new file mode 100644 index 00000000..9d8f4c81 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ff.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,add_ff) + +gr_add_ff_sptr gr_make_add_ff (size_t vlen = 1); + +class gr_add_ff : public gr_sync_block +{ + private: + gr_add_ff (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_add_ii.cc b/gnuradio-core/src/lib/gengen/gr_add_ii.cc new file mode 100644 index 00000000..bbc5fc74 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ii.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_add_ii_sptr +gr_make_add_ii (size_t vlen) +{ + return gr_add_ii_sptr (new gr_add_ii (vlen)); +} + +gr_add_ii::gr_add_ii (size_t vlen) + : gr_sync_block ("add_ii", + gr_make_io_signature (1, -1, sizeof (int)*vlen), + gr_make_io_signature (1, 1, sizeof (int)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_add_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc += ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_add_ii.h b/gnuradio-core/src/lib/gengen/gr_add_ii.h new file mode 100644 index 00000000..694675cd --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ii.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_II_H +#define INCLUDED_GR_ADD_II_H + +#include + +class gr_add_ii; +typedef boost::shared_ptr gr_add_ii_sptr; + +gr_add_ii_sptr gr_make_add_ii (size_t vlen = 1); + +/*! + * \brief output = sum (input_0, input_1, ...) + * \ingroup math_blk + * + * Add across all input streams. + */ +class gr_add_ii : public gr_sync_block +{ + friend gr_add_ii_sptr gr_make_add_ii (size_t vlen); + + gr_add_ii (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_add_ii.i b/gnuradio-core/src/lib/gengen/gr_add_ii.i new file mode 100644 index 00000000..0519468f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,add_ii) + +gr_add_ii_sptr gr_make_add_ii (size_t vlen = 1); + +class gr_add_ii : public gr_sync_block +{ + private: + gr_add_ii (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_add_ss.cc b/gnuradio-core/src/lib/gengen/gr_add_ss.cc new file mode 100644 index 00000000..4af4fec2 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ss.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_add_ss_sptr +gr_make_add_ss (size_t vlen) +{ + return gr_add_ss_sptr (new gr_add_ss (vlen)); +} + +gr_add_ss::gr_add_ss (size_t vlen) + : gr_sync_block ("add_ss", + gr_make_io_signature (1, -1, sizeof (short)*vlen), + gr_make_io_signature (1, 1, sizeof (short)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_add_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc += ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_add_ss.h b/gnuradio-core/src/lib/gengen/gr_add_ss.h new file mode 100644 index 00000000..49322e3a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ss.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ADD_SS_H +#define INCLUDED_GR_ADD_SS_H + +#include + +class gr_add_ss; +typedef boost::shared_ptr gr_add_ss_sptr; + +gr_add_ss_sptr gr_make_add_ss (size_t vlen = 1); + +/*! + * \brief output = sum (input_0, input_1, ...) + * \ingroup math_blk + * + * Add across all input streams. + */ +class gr_add_ss : public gr_sync_block +{ + friend gr_add_ss_sptr gr_make_add_ss (size_t vlen); + + gr_add_ss (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_add_ss.i b/gnuradio-core/src/lib/gengen/gr_add_ss.i new file mode 100644 index 00000000..1f60fb65 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_add_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,add_ss) + +gr_add_ss_sptr gr_make_add_ss (size_t vlen = 1); + +class gr_add_ss : public gr_sync_block +{ + private: + gr_add_ss (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_and_XX.cc.t new file mode 100644 index 00000000..cef21d33 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_XX.cc.t @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ () +{ + return @SPTR_NAME@ (new @NAME@ ()); +} + +@NAME@::@NAME@ () + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc & ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_XX.h.t b/gnuradio-core/src/lib/gengen/gr_and_XX.h.t new file mode 100644 index 00000000..6152942d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_XX.h.t @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +/*! + * \brief output = input_0 & input_1 & , ... & input_N) + * \ingroup math_blk + * + * bitwise boolean and across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + + @NAME@ (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_XX.i.t b/gnuradio-core/src/lib/gengen/gr_and_XX.i.t new file mode 100644 index 00000000..e17d40ee --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_bb.cc b/gnuradio-core/src/lib/gengen/gr_and_bb.cc new file mode 100644 index 00000000..17437559 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_bb.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_and_bb_sptr +gr_make_and_bb () +{ + return gr_and_bb_sptr (new gr_and_bb ()); +} + +gr_and_bb::gr_and_bb () + : gr_sync_block ("and_bb", + gr_make_io_signature (1, -1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))) +{ +} + +int +gr_and_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *optr = (unsigned char *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + unsigned char acc = ((unsigned char *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc & ((unsigned char *) input_items[j])[i]; + + *optr++ = (unsigned char) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_bb.h b/gnuradio-core/src/lib/gengen/gr_and_bb.h new file mode 100644 index 00000000..70fc3884 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_bb.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_AND_BB_H +#define INCLUDED_GR_AND_BB_H + +#include + +class gr_and_bb; +typedef boost::shared_ptr gr_and_bb_sptr; + +gr_and_bb_sptr gr_make_and_bb (); + +/*! + * \brief output = input_0 & input_1 & , ... & input_N) + * \ingroup math_blk + * + * bitwise boolean and across all input streams. + */ +class gr_and_bb : public gr_sync_block +{ + friend gr_and_bb_sptr gr_make_and_bb (); + + gr_and_bb (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_bb.i b/gnuradio-core/src/lib/gengen/gr_and_bb.i new file mode 100644 index 00000000..c0eefb00 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_bb.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,and_bb) + +gr_and_bb_sptr gr_make_and_bb (); + +class gr_and_bb : public gr_sync_block +{ + private: + gr_and_bb (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_and_const_XX.cc.t new file mode 100644 index 00000000..ec725b23 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_XX.cc.t @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (@I_TYPE@ k) +{ + return @SPTR_NAME@ (new @NAME@ (k)); +}; + +@NAME@::@NAME@ (@I_TYPE@ k) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, 1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))), + d_k (k) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @I_TYPE@ *iptr = (@I_TYPE@ *) input_items[0]; + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int size = noutput_items; + + while (size >= 8) { + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + size -= 8; + } + + while (size-- > 0) + *optr++ = *iptr++ & d_k; + + return (noutput_items); +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t b/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t new file mode 100644 index 00000000..3119611f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_XX.h.t @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + +/*! + * \brief output_N = input_N & value + * \ingroup math_blk + * + * bitwise boolean and of const to the data stream. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + + @O_TYPE@ d_k; // the constant + @NAME@ (@O_TYPE@ k); + + public: + @O_TYPE@ k () const { return d_k; } + void set_k (@O_TYPE@ k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_XX.i.t b/gnuradio-core/src/lib/gengen/gr_and_const_XX.i.t new file mode 100644 index 00000000..548431e6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_XX.i.t @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (@O_TYPE@ k); + + public: + @O_TYPE@ k () const { return d_k; } + void set_k (@O_TYPE@ k) { d_k = k; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_bb.cc b/gnuradio-core/src/lib/gengen/gr_and_const_bb.cc new file mode 100644 index 00000000..818396f7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_bb.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_and_const_bb_sptr +gr_make_and_const_bb (unsigned char k) +{ + return gr_and_const_bb_sptr (new gr_and_const_bb (k)); +}; + +gr_and_const_bb::gr_and_const_bb (unsigned char k) + : gr_sync_block ("and_const_bb", + gr_make_io_signature (1, 1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))), + d_k (k) +{ +} + +int +gr_and_const_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *iptr = (unsigned char *) input_items[0]; + unsigned char *optr = (unsigned char *) output_items[0]; + + int size = noutput_items; + + while (size >= 8) { + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + size -= 8; + } + + while (size-- > 0) + *optr++ = *iptr++ & d_k; + + return (noutput_items); +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_bb.h b/gnuradio-core/src/lib/gengen/gr_and_const_bb.h new file mode 100644 index 00000000..80e8ea28 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_bb.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_AND_CONST_BB_H +#define INCLUDED_GR_AND_CONST_BB_H + +#include + +class gr_and_const_bb; +typedef boost::shared_ptr gr_and_const_bb_sptr; + +gr_and_const_bb_sptr gr_make_and_const_bb (unsigned char k); + +/*! + * \brief output_N = input_N & value + * \ingroup math_blk + * + * bitwise boolean and of const to the data stream. + */ +class gr_and_const_bb : public gr_sync_block +{ + friend gr_and_const_bb_sptr gr_make_and_const_bb (unsigned char k); + + unsigned char d_k; // the constant + gr_and_const_bb (unsigned char k); + + public: + unsigned char k () const { return d_k; } + void set_k (unsigned char k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_bb.i b/gnuradio-core/src/lib/gengen/gr_and_const_bb.i new file mode 100644 index 00000000..3456e7ca --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_bb.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,and_const_bb) + +gr_and_const_bb_sptr gr_make_and_const_bb (unsigned char k); + +class gr_and_const_bb : public gr_sync_block +{ + private: + gr_and_const_bb (unsigned char k); + + public: + unsigned char k () const { return d_k; } + void set_k (unsigned char k) { d_k = k; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_ii.cc b/gnuradio-core/src/lib/gengen/gr_and_const_ii.cc new file mode 100644 index 00000000..8b01c95d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_ii.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_and_const_ii_sptr +gr_make_and_const_ii (int k) +{ + return gr_and_const_ii_sptr (new gr_and_const_ii (k)); +}; + +gr_and_const_ii::gr_and_const_ii (int k) + : gr_sync_block ("and_const_ii", + gr_make_io_signature (1, 1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))), + d_k (k) +{ +} + +int +gr_and_const_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *iptr = (int *) input_items[0]; + int *optr = (int *) output_items[0]; + + int size = noutput_items; + + while (size >= 8) { + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + size -= 8; + } + + while (size-- > 0) + *optr++ = *iptr++ & d_k; + + return (noutput_items); +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_ii.h b/gnuradio-core/src/lib/gengen/gr_and_const_ii.h new file mode 100644 index 00000000..80c01765 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_ii.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_AND_CONST_II_H +#define INCLUDED_GR_AND_CONST_II_H + +#include + +class gr_and_const_ii; +typedef boost::shared_ptr gr_and_const_ii_sptr; + +gr_and_const_ii_sptr gr_make_and_const_ii (int k); + +/*! + * \brief output_N = input_N & value + * \ingroup math_blk + * + * bitwise boolean and of const to the data stream. + */ +class gr_and_const_ii : public gr_sync_block +{ + friend gr_and_const_ii_sptr gr_make_and_const_ii (int k); + + int d_k; // the constant + gr_and_const_ii (int k); + + public: + int k () const { return d_k; } + void set_k (int k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_ii.i b/gnuradio-core/src/lib/gengen/gr_and_const_ii.i new file mode 100644 index 00000000..c637c22c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_ii.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,and_const_ii) + +gr_and_const_ii_sptr gr_make_and_const_ii (int k); + +class gr_and_const_ii : public gr_sync_block +{ + private: + gr_and_const_ii (int k); + + public: + int k () const { return d_k; } + void set_k (int k) { d_k = k; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_ss.cc b/gnuradio-core/src/lib/gengen/gr_and_const_ss.cc new file mode 100644 index 00000000..a27c8112 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_ss.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_and_const_ss_sptr +gr_make_and_const_ss (short k) +{ + return gr_and_const_ss_sptr (new gr_and_const_ss (k)); +}; + +gr_and_const_ss::gr_and_const_ss (short k) + : gr_sync_block ("and_const_ss", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))), + d_k (k) +{ +} + +int +gr_and_const_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *iptr = (short *) input_items[0]; + short *optr = (short *) output_items[0]; + + int size = noutput_items; + + while (size >= 8) { + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + *optr++ = *iptr++ & d_k; + size -= 8; + } + + while (size-- > 0) + *optr++ = *iptr++ & d_k; + + return (noutput_items); +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_ss.h b/gnuradio-core/src/lib/gengen/gr_and_const_ss.h new file mode 100644 index 00000000..cb3b2d72 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_ss.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_AND_CONST_SS_H +#define INCLUDED_GR_AND_CONST_SS_H + +#include + +class gr_and_const_ss; +typedef boost::shared_ptr gr_and_const_ss_sptr; + +gr_and_const_ss_sptr gr_make_and_const_ss (short k); + +/*! + * \brief output_N = input_N & value + * \ingroup math_blk + * + * bitwise boolean and of const to the data stream. + */ +class gr_and_const_ss : public gr_sync_block +{ + friend gr_and_const_ss_sptr gr_make_and_const_ss (short k); + + short d_k; // the constant + gr_and_const_ss (short k); + + public: + short k () const { return d_k; } + void set_k (short k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_const_ss.i b/gnuradio-core/src/lib/gengen/gr_and_const_ss.i new file mode 100644 index 00000000..c2934387 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_const_ss.i @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,and_const_ss) + +gr_and_const_ss_sptr gr_make_and_const_ss (short k); + +class gr_and_const_ss : public gr_sync_block +{ + private: + gr_and_const_ss (short k); + + public: + short k () const { return d_k; } + void set_k (short k) { d_k = k; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_ii.cc b/gnuradio-core/src/lib/gengen/gr_and_ii.cc new file mode 100644 index 00000000..a38aaf10 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_ii.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_and_ii_sptr +gr_make_and_ii () +{ + return gr_and_ii_sptr (new gr_and_ii ()); +} + +gr_and_ii::gr_and_ii () + : gr_sync_block ("and_ii", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))) +{ +} + +int +gr_and_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc & ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_ii.h b/gnuradio-core/src/lib/gengen/gr_and_ii.h new file mode 100644 index 00000000..2e772576 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_ii.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_AND_II_H +#define INCLUDED_GR_AND_II_H + +#include + +class gr_and_ii; +typedef boost::shared_ptr gr_and_ii_sptr; + +gr_and_ii_sptr gr_make_and_ii (); + +/*! + * \brief output = input_0 & input_1 & , ... & input_N) + * \ingroup math_blk + * + * bitwise boolean and across all input streams. + */ +class gr_and_ii : public gr_sync_block +{ + friend gr_and_ii_sptr gr_make_and_ii (); + + gr_and_ii (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_ii.i b/gnuradio-core/src/lib/gengen/gr_and_ii.i new file mode 100644 index 00000000..c45d7e1d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,and_ii) + +gr_and_ii_sptr gr_make_and_ii (); + +class gr_and_ii : public gr_sync_block +{ + private: + gr_and_ii (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_and_ss.cc b/gnuradio-core/src/lib/gengen/gr_and_ss.cc new file mode 100644 index 00000000..5fd4f21c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_ss.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_and_ss_sptr +gr_make_and_ss () +{ + return gr_and_ss_sptr (new gr_and_ss ()); +} + +gr_and_ss::gr_and_ss () + : gr_sync_block ("and_ss", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))) +{ +} + +int +gr_and_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc & ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_and_ss.h b/gnuradio-core/src/lib/gengen/gr_and_ss.h new file mode 100644 index 00000000..a35a9f9e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_ss.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_AND_SS_H +#define INCLUDED_GR_AND_SS_H + +#include + +class gr_and_ss; +typedef boost::shared_ptr gr_and_ss_sptr; + +gr_and_ss_sptr gr_make_and_ss (); + +/*! + * \brief output = input_0 & input_1 & , ... & input_N) + * \ingroup math_blk + * + * bitwise boolean and across all input streams. + */ +class gr_and_ss : public gr_sync_block +{ + friend gr_and_ss_sptr gr_make_and_ss (); + + gr_and_ss (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_and_ss.i b/gnuradio-core/src/lib/gengen/gr_and_ss.i new file mode 100644 index 00000000..46f196f3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_and_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,and_ss) + +gr_and_ss_sptr gr_make_and_ss (); + +class gr_and_ss : public gr_sync_block +{ + private: + gr_and_ss (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_argmax_XX.cc.t new file mode 100644 index 00000000..7fe2b638 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_XX.cc.t @@ -0,0 +1,79 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ ( size_t vlen ) +{ + return @SPTR_NAME@ ( new @NAME@(vlen)); +} + +@NAME@::@NAME@( size_t vlen) + : gr_sync_block ( "@BASE_NAME@", + gr_make_io_signature (1, -1, vlen*sizeof (@I_TYPE@)), + gr_make_io_signature (2, 2, sizeof (@O_TYPE@))), + d_vlen(vlen) +{ +} + + +int +@NAME@::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + + int ninputs = input_items.size (); + + @O_TYPE@ *x_optr = (@O_TYPE@ *) output_items[0]; + @O_TYPE@ *y_optr = (@O_TYPE@ *) output_items[1]; + + for (int i=0; i max) { + max = ((@I_TYPE@ *) input_items[k])[i*d_vlen + j]; + x = j; + y = k; + } + } + } + + *x_optr++ = (@O_TYPE@) x; + *y_optr++ = (@O_TYPE@) y; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t b/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t new file mode 100644 index 00000000..2aba94d7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_XX.h.t @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + @NAME@ (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_XX.i.t b/gnuradio-core/src/lib/gengen/gr_argmax_XX.i.t new file mode 100644 index 00000000..aa6bf0ac --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_XX.i.t @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_fs.cc b/gnuradio-core/src/lib/gengen/gr_argmax_fs.cc new file mode 100644 index 00000000..1e974def --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_fs.cc @@ -0,0 +1,79 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_argmax_fs_sptr +gr_make_argmax_fs ( size_t vlen ) +{ + return gr_argmax_fs_sptr ( new gr_argmax_fs(vlen)); +} + +gr_argmax_fs::gr_argmax_fs( size_t vlen) + : gr_sync_block ( "argmax_fs", + gr_make_io_signature (1, -1, vlen*sizeof (float)), + gr_make_io_signature (2, 2, sizeof (short))), + d_vlen(vlen) +{ +} + + +int +gr_argmax_fs::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + + int ninputs = input_items.size (); + + short *x_optr = (short *) output_items[0]; + short *y_optr = (short *) output_items[1]; + + for (int i=0; i max) { + max = ((float *) input_items[k])[i*d_vlen + j]; + x = j; + y = k; + } + } + } + + *x_optr++ = (short) x; + *y_optr++ = (short) y; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_fs.h b/gnuradio-core/src/lib/gengen/gr_argmax_fs.h new file mode 100644 index 00000000..de1099d3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_fs.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ARGMAX_FS_H +#define INCLUDED_GR_ARGMAX_FS_H + +#include + +class gr_argmax_fs; +typedef boost::shared_ptr gr_argmax_fs_sptr; + +gr_argmax_fs_sptr gr_make_argmax_fs (size_t vlen); + + +class gr_argmax_fs : public gr_sync_block +{ + friend gr_argmax_fs_sptr gr_make_argmax_fs (size_t vlen); + + gr_argmax_fs (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_fs.i b/gnuradio-core/src/lib/gengen/gr_argmax_fs.i new file mode 100644 index 00000000..2c2ff22e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_fs.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,argmax_fs) + +gr_argmax_fs_sptr gr_make_argmax_fs (size_t vlen); + +class gr_argmax_fs : public gr_sync_block +{ + private: + gr_argmax_fs (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_is.cc b/gnuradio-core/src/lib/gengen/gr_argmax_is.cc new file mode 100644 index 00000000..09c4b15d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_is.cc @@ -0,0 +1,79 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_argmax_is_sptr +gr_make_argmax_is ( size_t vlen ) +{ + return gr_argmax_is_sptr ( new gr_argmax_is(vlen)); +} + +gr_argmax_is::gr_argmax_is( size_t vlen) + : gr_sync_block ( "argmax_is", + gr_make_io_signature (1, -1, vlen*sizeof (int)), + gr_make_io_signature (2, 2, sizeof (short))), + d_vlen(vlen) +{ +} + + +int +gr_argmax_is::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + + int ninputs = input_items.size (); + + short *x_optr = (short *) output_items[0]; + short *y_optr = (short *) output_items[1]; + + for (int i=0; i max) { + max = ((int *) input_items[k])[i*d_vlen + j]; + x = j; + y = k; + } + } + } + + *x_optr++ = (short) x; + *y_optr++ = (short) y; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_is.h b/gnuradio-core/src/lib/gengen/gr_argmax_is.h new file mode 100644 index 00000000..2e7595ac --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_is.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ARGMAX_IS_H +#define INCLUDED_GR_ARGMAX_IS_H + +#include + +class gr_argmax_is; +typedef boost::shared_ptr gr_argmax_is_sptr; + +gr_argmax_is_sptr gr_make_argmax_is (size_t vlen); + + +class gr_argmax_is : public gr_sync_block +{ + friend gr_argmax_is_sptr gr_make_argmax_is (size_t vlen); + + gr_argmax_is (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_is.i b/gnuradio-core/src/lib/gengen/gr_argmax_is.i new file mode 100644 index 00000000..b5b64e8d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_is.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,argmax_is) + +gr_argmax_is_sptr gr_make_argmax_is (size_t vlen); + +class gr_argmax_is : public gr_sync_block +{ + private: + gr_argmax_is (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_ss.cc b/gnuradio-core/src/lib/gengen/gr_argmax_ss.cc new file mode 100644 index 00000000..0008a6dc --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_ss.cc @@ -0,0 +1,79 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_argmax_ss_sptr +gr_make_argmax_ss ( size_t vlen ) +{ + return gr_argmax_ss_sptr ( new gr_argmax_ss(vlen)); +} + +gr_argmax_ss::gr_argmax_ss( size_t vlen) + : gr_sync_block ( "argmax_ss", + gr_make_io_signature (1, -1, vlen*sizeof (short)), + gr_make_io_signature (2, 2, sizeof (short))), + d_vlen(vlen) +{ +} + + +int +gr_argmax_ss::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + + int ninputs = input_items.size (); + + short *x_optr = (short *) output_items[0]; + short *y_optr = (short *) output_items[1]; + + for (int i=0; i max) { + max = ((short *) input_items[k])[i*d_vlen + j]; + x = j; + y = k; + } + } + } + + *x_optr++ = (short) x; + *y_optr++ = (short) y; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_ss.h b/gnuradio-core/src/lib/gengen/gr_argmax_ss.h new file mode 100644 index 00000000..182fb77a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_ss.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_ARGMAX_SS_H +#define INCLUDED_GR_ARGMAX_SS_H + +#include + +class gr_argmax_ss; +typedef boost::shared_ptr gr_argmax_ss_sptr; + +gr_argmax_ss_sptr gr_make_argmax_ss (size_t vlen); + + +class gr_argmax_ss : public gr_sync_block +{ + friend gr_argmax_ss_sptr gr_make_argmax_ss (size_t vlen); + + gr_argmax_ss (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_argmax_ss.i b/gnuradio-core/src/lib/gengen/gr_argmax_ss.i new file mode 100644 index 00000000..9905d460 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_argmax_ss.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,argmax_ss) + +gr_argmax_ss_sptr gr_make_argmax_ss (size_t vlen); + +class gr_argmax_ss : public gr_sync_block +{ + private: + gr_argmax_ss (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t new file mode 100644 index 00000000..ab61fb08 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.cc.t @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include +#include +#include +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D) +{ + return @SPTR_NAME@ (new @NAME@ (symbol_table,D)); +} + +@NAME@::@NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D) + : gr_sync_interpolator ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, -1, sizeof (@O_TYPE@)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of @I_TYPE@; output: stream of @O_TYPE@ + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class @NAME@ : public gr_sync_interpolator +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D); + + int d_D; + std::vector<@O_TYPE@> d_symbol_table; + @NAME@ (const std::vector<@O_TYPE@> &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector<@O_TYPE@> symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.i.t b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.i.t rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_XX.i.t diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.cc b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.cc new file mode 100644 index 00000000..bc7e34a3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_chunks_to_symbols_bc_sptr +gr_make_chunks_to_symbols_bc (const std::vector &symbol_table, const int D) +{ + return gr_chunks_to_symbols_bc_sptr (new gr_chunks_to_symbols_bc (symbol_table,D)); +} + +gr_chunks_to_symbols_bc::gr_chunks_to_symbols_bc (const std::vector &symbol_table, const int D) + : gr_sync_interpolator ("chunks_to_symbols_bc", + gr_make_io_signature (1, -1, sizeof (unsigned char)), + gr_make_io_signature (1, -1, sizeof (gr_complex)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +gr_chunks_to_symbols_bc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class gr_chunks_to_symbols_bc; +typedef boost::shared_ptr gr_chunks_to_symbols_bc_sptr; + +gr_chunks_to_symbols_bc_sptr gr_make_chunks_to_symbols_bc (const std::vector &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of unsigned char; output: stream of gr_complex + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_chunks_to_symbols_bc : public gr_sync_interpolator +{ + friend gr_chunks_to_symbols_bc_sptr gr_make_chunks_to_symbols_bc (const std::vector &symbol_table, const int D); + + int d_D; + std::vector d_symbol_table; + gr_chunks_to_symbols_bc (const std::vector &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.i b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_bc.i rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bc.i diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.cc b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.cc new file mode 100644 index 00000000..25ee9cb6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_chunks_to_symbols_bf_sptr +gr_make_chunks_to_symbols_bf (const std::vector &symbol_table, const int D) +{ + return gr_chunks_to_symbols_bf_sptr (new gr_chunks_to_symbols_bf (symbol_table,D)); +} + +gr_chunks_to_symbols_bf::gr_chunks_to_symbols_bf (const std::vector &symbol_table, const int D) + : gr_sync_interpolator ("chunks_to_symbols_bf", + gr_make_io_signature (1, -1, sizeof (unsigned char)), + gr_make_io_signature (1, -1, sizeof (float)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +gr_chunks_to_symbols_bf::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class gr_chunks_to_symbols_bf; +typedef boost::shared_ptr gr_chunks_to_symbols_bf_sptr; + +gr_chunks_to_symbols_bf_sptr gr_make_chunks_to_symbols_bf (const std::vector &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of unsigned char; output: stream of float + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_chunks_to_symbols_bf : public gr_sync_interpolator +{ + friend gr_chunks_to_symbols_bf_sptr gr_make_chunks_to_symbols_bf (const std::vector &symbol_table, const int D); + + int d_D; + std::vector d_symbol_table; + gr_chunks_to_symbols_bf (const std::vector &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.i b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_bf.i rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_bf.i diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.cc b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.cc new file mode 100644 index 00000000..fd706c31 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_chunks_to_symbols_ic_sptr +gr_make_chunks_to_symbols_ic (const std::vector &symbol_table, const int D) +{ + return gr_chunks_to_symbols_ic_sptr (new gr_chunks_to_symbols_ic (symbol_table,D)); +} + +gr_chunks_to_symbols_ic::gr_chunks_to_symbols_ic (const std::vector &symbol_table, const int D) + : gr_sync_interpolator ("chunks_to_symbols_ic", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, -1, sizeof (gr_complex)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +gr_chunks_to_symbols_ic::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class gr_chunks_to_symbols_ic; +typedef boost::shared_ptr gr_chunks_to_symbols_ic_sptr; + +gr_chunks_to_symbols_ic_sptr gr_make_chunks_to_symbols_ic (const std::vector &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of int; output: stream of gr_complex + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_chunks_to_symbols_ic : public gr_sync_interpolator +{ + friend gr_chunks_to_symbols_ic_sptr gr_make_chunks_to_symbols_ic (const std::vector &symbol_table, const int D); + + int d_D; + std::vector d_symbol_table; + gr_chunks_to_symbols_ic (const std::vector &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.i b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_ic.i rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_ic.i diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.cc b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.cc new file mode 100644 index 00000000..5751f737 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_chunks_to_symbols_if_sptr +gr_make_chunks_to_symbols_if (const std::vector &symbol_table, const int D) +{ + return gr_chunks_to_symbols_if_sptr (new gr_chunks_to_symbols_if (symbol_table,D)); +} + +gr_chunks_to_symbols_if::gr_chunks_to_symbols_if (const std::vector &symbol_table, const int D) + : gr_sync_interpolator ("chunks_to_symbols_if", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, -1, sizeof (float)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +gr_chunks_to_symbols_if::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class gr_chunks_to_symbols_if; +typedef boost::shared_ptr gr_chunks_to_symbols_if_sptr; + +gr_chunks_to_symbols_if_sptr gr_make_chunks_to_symbols_if (const std::vector &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of int; output: stream of float + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_chunks_to_symbols_if : public gr_sync_interpolator +{ + friend gr_chunks_to_symbols_if_sptr gr_make_chunks_to_symbols_if (const std::vector &symbol_table, const int D); + + int d_D; + std::vector d_symbol_table; + gr_chunks_to_symbols_if (const std::vector &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.i b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_if.i rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_if.i diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.cc b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.cc new file mode 100644 index 00000000..32f6c6ee --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_chunks_to_symbols_sc_sptr +gr_make_chunks_to_symbols_sc (const std::vector &symbol_table, const int D) +{ + return gr_chunks_to_symbols_sc_sptr (new gr_chunks_to_symbols_sc (symbol_table,D)); +} + +gr_chunks_to_symbols_sc::gr_chunks_to_symbols_sc (const std::vector &symbol_table, const int D) + : gr_sync_interpolator ("chunks_to_symbols_sc", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, -1, sizeof (gr_complex)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +gr_chunks_to_symbols_sc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class gr_chunks_to_symbols_sc; +typedef boost::shared_ptr gr_chunks_to_symbols_sc_sptr; + +gr_chunks_to_symbols_sc_sptr gr_make_chunks_to_symbols_sc (const std::vector &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of short; output: stream of gr_complex + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_chunks_to_symbols_sc : public gr_sync_interpolator +{ + friend gr_chunks_to_symbols_sc_sptr gr_make_chunks_to_symbols_sc (const std::vector &symbol_table, const int D); + + int d_D; + std::vector d_symbol_table; + gr_chunks_to_symbols_sc (const std::vector &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.i b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_sc.i rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sc.i diff --git a/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.cc b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.cc new file mode 100644 index 00000000..079c4c05 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.cc @@ -0,0 +1,74 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_chunks_to_symbols_sf_sptr +gr_make_chunks_to_symbols_sf (const std::vector &symbol_table, const int D) +{ + return gr_chunks_to_symbols_sf_sptr (new gr_chunks_to_symbols_sf (symbol_table,D)); +} + +gr_chunks_to_symbols_sf::gr_chunks_to_symbols_sf (const std::vector &symbol_table, const int D) + : gr_sync_interpolator ("chunks_to_symbols_sf", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, -1, sizeof (float)), + D), + d_D (D), + d_symbol_table (symbol_table) +{ +} + +int +gr_chunks_to_symbols_sf::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (noutput_items % d_D == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class gr_chunks_to_symbols_sf; +typedef boost::shared_ptr gr_chunks_to_symbols_sf_sptr; + +gr_chunks_to_symbols_sf_sptr gr_make_chunks_to_symbols_sf (const std::vector &symbol_table, const int D = 1); + +/*! + * \brief Map a stream of symbol indexes (unpacked bytes or shorts) to stream of float or complex onstellation points.in \p D dimensions (\p D = 1 by default) + * \ingroup converter_blk + * + * input: stream of short; output: stream of float + * + * out[n D + k] = symbol_table[in[n] D + k], k=0,1,...,D-1 + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_XY handles the general case of mapping + * from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_chunks_to_symbols_sf : public gr_sync_interpolator +{ + friend gr_chunks_to_symbols_sf_sptr gr_make_chunks_to_symbols_sf (const std::vector &symbol_table, const int D); + + int d_D; + std::vector d_symbol_table; + gr_chunks_to_symbols_sf (const std::vector &symbol_table, const int D = 1); + + public: + int D () const { return d_D; } + std::vector symbol_table () const { return d_symbol_table; } + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.i b/gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_chunks_to_symbols_sf.i rename to gnuradio-core/src/lib/gengen/gr_chunks_to_symbols_sf.i diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t new file mode 100644 index 00000000..2db490f1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (size_t vlen) +{ + return @SPTR_NAME@ (new @NAME@ (vlen)); +} + +@NAME@::@NAME@ (size_t vlen) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*vlen), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*vlen)), + d_vlen (vlen) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // compute reciprocal + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (@O_TYPE@) ((@O_TYPE@) 1 / + ((@I_TYPE@ *) input_items[0])[i]); + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc /= ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t new file mode 100644 index 00000000..a59497c8 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.h.t @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +/*! + * \brief output = input_0 / input_1 / input_x ...) + * \ingroup math_blk + * + * Divide across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + @NAME@ (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t new file mode 100644 index 00000000..f7726ccf --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_cc.cc b/gnuradio-core/src/lib/gengen/gr_divide_cc.cc new file mode 100644 index 00000000..4ab9aa5a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_cc.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_divide_cc_sptr +gr_make_divide_cc (size_t vlen) +{ + return gr_divide_cc_sptr (new gr_divide_cc (vlen)); +} + +gr_divide_cc::gr_divide_cc (size_t vlen) + : gr_sync_block ("divide_cc", + gr_make_io_signature (1, -1, sizeof (gr_complex)*vlen), + gr_make_io_signature (1, 1, sizeof (gr_complex)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_divide_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *optr = (gr_complex *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // compute reciprocal + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (gr_complex) ((gr_complex) 1 / + ((gr_complex *) input_items[0])[i]); + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + gr_complex acc = ((gr_complex *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc /= ((gr_complex *) input_items[j])[i]; + + *optr++ = (gr_complex) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_divide_cc.h b/gnuradio-core/src/lib/gengen/gr_divide_cc.h new file mode 100644 index 00000000..f0e7f7fe --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_cc.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_DIVIDE_CC_H +#define INCLUDED_GR_DIVIDE_CC_H + +#include + +class gr_divide_cc; +typedef boost::shared_ptr gr_divide_cc_sptr; + +gr_divide_cc_sptr gr_make_divide_cc (size_t vlen = 1); + +/*! + * \brief output = input_0 / input_1 / input_x ...) + * \ingroup math_blk + * + * Divide across all input streams. + */ +class gr_divide_cc : public gr_sync_block +{ + friend gr_divide_cc_sptr gr_make_divide_cc (size_t vlen); + + gr_divide_cc (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_divide_cc.i b/gnuradio-core/src/lib/gengen/gr_divide_cc.i new file mode 100644 index 00000000..64b0cd79 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_cc.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,divide_cc) + +gr_divide_cc_sptr gr_make_divide_cc (size_t vlen = 1); + +class gr_divide_cc : public gr_sync_block +{ + private: + gr_divide_cc (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ff.cc b/gnuradio-core/src/lib/gengen/gr_divide_ff.cc new file mode 100644 index 00000000..a33cbf52 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ff.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_divide_ff_sptr +gr_make_divide_ff (size_t vlen) +{ + return gr_divide_ff_sptr (new gr_divide_ff (vlen)); +} + +gr_divide_ff::gr_divide_ff (size_t vlen) + : gr_sync_block ("divide_ff", + gr_make_io_signature (1, -1, sizeof (float)*vlen), + gr_make_io_signature (1, 1, sizeof (float)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_divide_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // compute reciprocal + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (float) ((float) 1 / + ((float *) input_items[0])[i]); + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + float acc = ((float *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc /= ((float *) input_items[j])[i]; + + *optr++ = (float) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ff.h b/gnuradio-core/src/lib/gengen/gr_divide_ff.h new file mode 100644 index 00000000..67c6a7f3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ff.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_DIVIDE_FF_H +#define INCLUDED_GR_DIVIDE_FF_H + +#include + +class gr_divide_ff; +typedef boost::shared_ptr gr_divide_ff_sptr; + +gr_divide_ff_sptr gr_make_divide_ff (size_t vlen = 1); + +/*! + * \brief output = input_0 / input_1 / input_x ...) + * \ingroup math_blk + * + * Divide across all input streams. + */ +class gr_divide_ff : public gr_sync_block +{ + friend gr_divide_ff_sptr gr_make_divide_ff (size_t vlen); + + gr_divide_ff (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ff.i b/gnuradio-core/src/lib/gengen/gr_divide_ff.i new file mode 100644 index 00000000..c88cae15 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ff.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,divide_ff) + +gr_divide_ff_sptr gr_make_divide_ff (size_t vlen = 1); + +class gr_divide_ff : public gr_sync_block +{ + private: + gr_divide_ff (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ii.cc b/gnuradio-core/src/lib/gengen/gr_divide_ii.cc new file mode 100644 index 00000000..e4d82131 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ii.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_divide_ii_sptr +gr_make_divide_ii (size_t vlen) +{ + return gr_divide_ii_sptr (new gr_divide_ii (vlen)); +} + +gr_divide_ii::gr_divide_ii (size_t vlen) + : gr_sync_block ("divide_ii", + gr_make_io_signature (1, -1, sizeof (int)*vlen), + gr_make_io_signature (1, 1, sizeof (int)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_divide_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // compute reciprocal + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (int) ((int) 1 / + ((int *) input_items[0])[i]); + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc /= ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ii.h b/gnuradio-core/src/lib/gengen/gr_divide_ii.h new file mode 100644 index 00000000..8c73288c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ii.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_DIVIDE_II_H +#define INCLUDED_GR_DIVIDE_II_H + +#include + +class gr_divide_ii; +typedef boost::shared_ptr gr_divide_ii_sptr; + +gr_divide_ii_sptr gr_make_divide_ii (size_t vlen = 1); + +/*! + * \brief output = input_0 / input_1 / input_x ...) + * \ingroup math_blk + * + * Divide across all input streams. + */ +class gr_divide_ii : public gr_sync_block +{ + friend gr_divide_ii_sptr gr_make_divide_ii (size_t vlen); + + gr_divide_ii (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ii.i b/gnuradio-core/src/lib/gengen/gr_divide_ii.i new file mode 100644 index 00000000..db42d271 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,divide_ii) + +gr_divide_ii_sptr gr_make_divide_ii (size_t vlen = 1); + +class gr_divide_ii : public gr_sync_block +{ + private: + gr_divide_ii (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ss.cc b/gnuradio-core/src/lib/gengen/gr_divide_ss.cc new file mode 100644 index 00000000..53f6cef7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ss.cc @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_divide_ss_sptr +gr_make_divide_ss (size_t vlen) +{ + return gr_divide_ss_sptr (new gr_divide_ss (vlen)); +} + +gr_divide_ss::gr_divide_ss (size_t vlen) + : gr_sync_block ("divide_ss", + gr_make_io_signature (1, -1, sizeof (short)*vlen), + gr_make_io_signature (1, 1, sizeof (short)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_divide_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // compute reciprocal + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (short) ((short) 1 / + ((short *) input_items[0])[i]); + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc /= ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ss.h b/gnuradio-core/src/lib/gengen/gr_divide_ss.h new file mode 100644 index 00000000..cbda2ed0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ss.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_DIVIDE_SS_H +#define INCLUDED_GR_DIVIDE_SS_H + +#include + +class gr_divide_ss; +typedef boost::shared_ptr gr_divide_ss_sptr; + +gr_divide_ss_sptr gr_make_divide_ss (size_t vlen = 1); + +/*! + * \brief output = input_0 / input_1 / input_x ...) + * \ingroup math_blk + * + * Divide across all input streams. + */ +class gr_divide_ss : public gr_sync_block +{ + friend gr_divide_ss_sptr gr_make_divide_ss (size_t vlen); + + gr_divide_ss (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_divide_ss.i b/gnuradio-core/src/lib/gengen/gr_divide_ss.i new file mode 100644 index 00000000..a4d06282 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_divide_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,divide_ss) + +gr_divide_ss_sptr gr_make_divide_ss (size_t vlen = 1); + +class gr_divide_ss : public gr_sync_block +{ + private: + gr_divide_ss (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/general/gr_endianness.h b/gnuradio-core/src/lib/gengen/gr_endianness.h similarity index 100% rename from gnuradio-core/src/lib/general/gr_endianness.h rename to gnuradio-core/src/lib/gengen/gr_endianness.h diff --git a/gnuradio-core/src/lib/general/gr_endianness.i b/gnuradio-core/src/lib/gengen/gr_endianness.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_endianness.i rename to gnuradio-core/src/lib/gengen/gr_endianness.i diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_integrate_XX.cc.t new file mode 100644 index 00000000..0a62554b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_XX.cc.t @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (int decim) +{ + return @SPTR_NAME@ (new @NAME@ (decim)); +} + +@NAME@::@NAME@ (int decim) + : gr_sync_decimator ("@BASE_NAME@", + gr_make_io_signature (1, 1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)), + decim), + d_decim(decim), + d_count(0) +{ +} + +@NAME@::~@NAME@ () +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const @I_TYPE@ *in = (const @I_TYPE@ *) input_items[0]; + @O_TYPE@ *out = (@O_TYPE@ *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + out[i] = (@O_TYPE@)0; + for (int j = 0; j < d_decim; j++) + out[i] += in[i*d_decim+j]; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t b/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t new file mode 100644 index 00000000..01061ff2 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_XX.h.t @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; + +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (int decim); + +/*! + * \brief output = sum(input[0]...input[n]) + * \ingroup math_blk + * + * Integrate successive samples in input stream and decimate + */ +class @NAME@ : public gr_sync_decimator +{ +private: + friend @SPTR_NAME@ gr_make_@BASE_NAME@(int decim); + + @NAME@ (int decim); + + int d_decim; + int d_count; + +public: + ~@NAME@ (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* @GUARD_NAME@ */ diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_XX.i.t b/gnuradio-core/src/lib/gengen/gr_integrate_XX.i.t new file mode 100644 index 00000000..24a2381a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@); + +@SPTR_NAME@ gr_make_@BASE_NAME@ (int decim); + +class @NAME@ : public gr_sync_decimator +{ +private: + @NAME@ (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_cc.cc b/gnuradio-core/src/lib/gengen/gr_integrate_cc.cc new file mode 100644 index 00000000..44527131 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_cc.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_integrate_cc_sptr +gr_make_integrate_cc (int decim) +{ + return gr_integrate_cc_sptr (new gr_integrate_cc (decim)); +} + +gr_integrate_cc::gr_integrate_cc (int decim) + : gr_sync_decimator ("integrate_cc", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + gr_make_io_signature (1, 1, sizeof (gr_complex)), + decim), + d_decim(decim), + d_count(0) +{ +} + +gr_integrate_cc::~gr_integrate_cc () +{ +} + +int +gr_integrate_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + out[i] = (gr_complex)0; + for (int j = 0; j < d_decim; j++) + out[i] += in[i*d_decim+j]; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_cc.h b/gnuradio-core/src/lib/gengen/gr_integrate_cc.h new file mode 100644 index 00000000..40719531 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_cc.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_INTEGRATE_CC_H +#define INCLUDED_GR_INTEGRATE_CC_H + +#include + +class gr_integrate_cc; + +typedef boost::shared_ptr gr_integrate_cc_sptr; + +gr_integrate_cc_sptr gr_make_integrate_cc (int decim); + +/*! + * \brief output = sum(input[0]...input[n]) + * \ingroup math_blk + * + * Integrate successive samples in input stream and decimate + */ +class gr_integrate_cc : public gr_sync_decimator +{ +private: + friend gr_integrate_cc_sptr gr_make_integrate_cc(int decim); + + gr_integrate_cc (int decim); + + int d_decim; + int d_count; + +public: + ~gr_integrate_cc (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_INTEGRATE_CC_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_cc.i b/gnuradio-core/src/lib/gengen/gr_integrate_cc.i new file mode 100644 index 00000000..b3657f62 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_cc.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,integrate_cc); + +gr_integrate_cc_sptr gr_make_integrate_cc (int decim); + +class gr_integrate_cc : public gr_sync_decimator +{ +private: + gr_integrate_cc (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ff.cc b/gnuradio-core/src/lib/gengen/gr_integrate_ff.cc new file mode 100644 index 00000000..7794255a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ff.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_integrate_ff_sptr +gr_make_integrate_ff (int decim) +{ + return gr_integrate_ff_sptr (new gr_integrate_ff (decim)); +} + +gr_integrate_ff::gr_integrate_ff (int decim) + : gr_sync_decimator ("integrate_ff", + gr_make_io_signature (1, 1, sizeof (float)), + gr_make_io_signature (1, 1, sizeof (float)), + decim), + d_decim(decim), + d_count(0) +{ +} + +gr_integrate_ff::~gr_integrate_ff () +{ +} + +int +gr_integrate_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + out[i] = (float)0; + for (int j = 0; j < d_decim; j++) + out[i] += in[i*d_decim+j]; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ff.h b/gnuradio-core/src/lib/gengen/gr_integrate_ff.h new file mode 100644 index 00000000..e9ada5d3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ff.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_INTEGRATE_FF_H +#define INCLUDED_GR_INTEGRATE_FF_H + +#include + +class gr_integrate_ff; + +typedef boost::shared_ptr gr_integrate_ff_sptr; + +gr_integrate_ff_sptr gr_make_integrate_ff (int decim); + +/*! + * \brief output = sum(input[0]...input[n]) + * \ingroup math_blk + * + * Integrate successive samples in input stream and decimate + */ +class gr_integrate_ff : public gr_sync_decimator +{ +private: + friend gr_integrate_ff_sptr gr_make_integrate_ff(int decim); + + gr_integrate_ff (int decim); + + int d_decim; + int d_count; + +public: + ~gr_integrate_ff (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_INTEGRATE_FF_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ff.i b/gnuradio-core/src/lib/gengen/gr_integrate_ff.i new file mode 100644 index 00000000..7557516f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ff.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,integrate_ff); + +gr_integrate_ff_sptr gr_make_integrate_ff (int decim); + +class gr_integrate_ff : public gr_sync_decimator +{ +private: + gr_integrate_ff (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ii.cc b/gnuradio-core/src/lib/gengen/gr_integrate_ii.cc new file mode 100644 index 00000000..473a3e26 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ii.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_integrate_ii_sptr +gr_make_integrate_ii (int decim) +{ + return gr_integrate_ii_sptr (new gr_integrate_ii (decim)); +} + +gr_integrate_ii::gr_integrate_ii (int decim) + : gr_sync_decimator ("integrate_ii", + gr_make_io_signature (1, 1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int)), + decim), + d_decim(decim), + d_count(0) +{ +} + +gr_integrate_ii::~gr_integrate_ii () +{ +} + +int +gr_integrate_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const int *in = (const int *) input_items[0]; + int *out = (int *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + out[i] = (int)0; + for (int j = 0; j < d_decim; j++) + out[i] += in[i*d_decim+j]; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ii.h b/gnuradio-core/src/lib/gengen/gr_integrate_ii.h new file mode 100644 index 00000000..822b2425 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ii.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_INTEGRATE_II_H +#define INCLUDED_GR_INTEGRATE_II_H + +#include + +class gr_integrate_ii; + +typedef boost::shared_ptr gr_integrate_ii_sptr; + +gr_integrate_ii_sptr gr_make_integrate_ii (int decim); + +/*! + * \brief output = sum(input[0]...input[n]) + * \ingroup math_blk + * + * Integrate successive samples in input stream and decimate + */ +class gr_integrate_ii : public gr_sync_decimator +{ +private: + friend gr_integrate_ii_sptr gr_make_integrate_ii(int decim); + + gr_integrate_ii (int decim); + + int d_decim; + int d_count; + +public: + ~gr_integrate_ii (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_INTEGRATE_II_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ii.i b/gnuradio-core/src/lib/gengen/gr_integrate_ii.i new file mode 100644 index 00000000..30745bf2 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,integrate_ii); + +gr_integrate_ii_sptr gr_make_integrate_ii (int decim); + +class gr_integrate_ii : public gr_sync_decimator +{ +private: + gr_integrate_ii (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ss.cc b/gnuradio-core/src/lib/gengen/gr_integrate_ss.cc new file mode 100644 index 00000000..bda6e38e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ss.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_integrate_ss_sptr +gr_make_integrate_ss (int decim) +{ + return gr_integrate_ss_sptr (new gr_integrate_ss (decim)); +} + +gr_integrate_ss::gr_integrate_ss (int decim) + : gr_sync_decimator ("integrate_ss", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short)), + decim), + d_decim(decim), + d_count(0) +{ +} + +gr_integrate_ss::~gr_integrate_ss () +{ +} + +int +gr_integrate_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const short *in = (const short *) input_items[0]; + short *out = (short *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + out[i] = (short)0; + for (int j = 0; j < d_decim; j++) + out[i] += in[i*d_decim+j]; + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ss.h b/gnuradio-core/src/lib/gengen/gr_integrate_ss.h new file mode 100644 index 00000000..cf3a06b2 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ss.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_INTEGRATE_SS_H +#define INCLUDED_GR_INTEGRATE_SS_H + +#include + +class gr_integrate_ss; + +typedef boost::shared_ptr gr_integrate_ss_sptr; + +gr_integrate_ss_sptr gr_make_integrate_ss (int decim); + +/*! + * \brief output = sum(input[0]...input[n]) + * \ingroup math_blk + * + * Integrate successive samples in input stream and decimate + */ +class gr_integrate_ss : public gr_sync_decimator +{ +private: + friend gr_integrate_ss_sptr gr_make_integrate_ss(int decim); + + gr_integrate_ss (int decim); + + int d_decim; + int d_count; + +public: + ~gr_integrate_ss (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_INTEGRATE_SS_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_integrate_ss.i b/gnuradio-core/src/lib/gengen/gr_integrate_ss.i new file mode 100644 index 00000000..c00149b0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_integrate_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,integrate_ss); + +gr_integrate_ss_sptr gr_make_integrate_ss (int decim); + +class gr_integrate_ss : public gr_sync_decimator +{ +private: + gr_integrate_ss (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_max_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_max_XX.cc.t new file mode 100644 index 00000000..ee88261f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_XX.cc.t @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ ( size_t vlen ) +{ + return @SPTR_NAME@ ( new @NAME@(vlen)); +} + +@NAME@::@NAME@( size_t vlen) + : gr_sync_block ( "@BASE_NAME@", + gr_make_io_signature (1, -1, vlen*sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))), + d_vlen(vlen) +{ +} + +int +@NAME@::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i=0; i max) { + max = ((@I_TYPE@*) input_items[k])[i*d_vlen + j]; + } + } + } + + *optr++ = (@O_TYPE@) max; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_max_XX.h.t b/gnuradio-core/src/lib/gengen/gr_max_XX.h.t new file mode 100644 index 00000000..2aba94d7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_XX.h.t @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + @NAME@ (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_max_XX.i.t b/gnuradio-core/src/lib/gengen/gr_max_XX.i.t new file mode 100644 index 00000000..aa6bf0ac --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_XX.i.t @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_max_ff.cc b/gnuradio-core/src/lib/gengen/gr_max_ff.cc new file mode 100644 index 00000000..b370c66d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ff.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_max_ff_sptr +gr_make_max_ff ( size_t vlen ) +{ + return gr_max_ff_sptr ( new gr_max_ff(vlen)); +} + +gr_max_ff::gr_max_ff( size_t vlen) + : gr_sync_block ( "max_ff", + gr_make_io_signature (1, -1, vlen*sizeof (float)), + gr_make_io_signature (1, 1, sizeof (float))), + d_vlen(vlen) +{ +} + +int +gr_max_ff::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i=0; i max) { + max = ((float*) input_items[k])[i*d_vlen + j]; + } + } + } + + *optr++ = (float) max; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_max_ff.h b/gnuradio-core/src/lib/gengen/gr_max_ff.h new file mode 100644 index 00000000..ce0b0555 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ff.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MAX_FF_H +#define INCLUDED_GR_MAX_FF_H + +#include + +class gr_max_ff; +typedef boost::shared_ptr gr_max_ff_sptr; + +gr_max_ff_sptr gr_make_max_ff (size_t vlen); + + +class gr_max_ff : public gr_sync_block +{ + friend gr_max_ff_sptr gr_make_max_ff (size_t vlen); + + gr_max_ff (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_max_ff.i b/gnuradio-core/src/lib/gengen/gr_max_ff.i new file mode 100644 index 00000000..06e8885b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ff.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,max_ff) + +gr_max_ff_sptr gr_make_max_ff (size_t vlen); + +class gr_max_ff : public gr_sync_block +{ + private: + gr_max_ff (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_max_ii.cc b/gnuradio-core/src/lib/gengen/gr_max_ii.cc new file mode 100644 index 00000000..6933ad52 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ii.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_max_ii_sptr +gr_make_max_ii ( size_t vlen ) +{ + return gr_max_ii_sptr ( new gr_max_ii(vlen)); +} + +gr_max_ii::gr_max_ii( size_t vlen) + : gr_sync_block ( "max_ii", + gr_make_io_signature (1, -1, vlen*sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))), + d_vlen(vlen) +{ +} + +int +gr_max_ii::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i=0; i max) { + max = ((int*) input_items[k])[i*d_vlen + j]; + } + } + } + + *optr++ = (int) max; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_max_ii.h b/gnuradio-core/src/lib/gengen/gr_max_ii.h new file mode 100644 index 00000000..ebffdaae --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ii.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MAX_II_H +#define INCLUDED_GR_MAX_II_H + +#include + +class gr_max_ii; +typedef boost::shared_ptr gr_max_ii_sptr; + +gr_max_ii_sptr gr_make_max_ii (size_t vlen); + + +class gr_max_ii : public gr_sync_block +{ + friend gr_max_ii_sptr gr_make_max_ii (size_t vlen); + + gr_max_ii (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_max_ii.i b/gnuradio-core/src/lib/gengen/gr_max_ii.i new file mode 100644 index 00000000..050b9022 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ii.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,max_ii) + +gr_max_ii_sptr gr_make_max_ii (size_t vlen); + +class gr_max_ii : public gr_sync_block +{ + private: + gr_max_ii (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_max_ss.cc b/gnuradio-core/src/lib/gengen/gr_max_ss.cc new file mode 100644 index 00000000..9121344c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ss.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_max_ss_sptr +gr_make_max_ss ( size_t vlen ) +{ + return gr_max_ss_sptr ( new gr_max_ss(vlen)); +} + +gr_max_ss::gr_max_ss( size_t vlen) + : gr_sync_block ( "max_ss", + gr_make_io_signature (1, -1, vlen*sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))), + d_vlen(vlen) +{ +} + +int +gr_max_ss::work( int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i=0; i max) { + max = ((short*) input_items[k])[i*d_vlen + j]; + } + } + } + + *optr++ = (short) max; + } + return noutput_items; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_max_ss.h b/gnuradio-core/src/lib/gengen/gr_max_ss.h new file mode 100644 index 00000000..ae68e4f1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ss.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MAX_SS_H +#define INCLUDED_GR_MAX_SS_H + +#include + +class gr_max_ss; +typedef boost::shared_ptr gr_max_ss_sptr; + +gr_max_ss_sptr gr_make_max_ss (size_t vlen); + + +class gr_max_ss : public gr_sync_block +{ + friend gr_max_ss_sptr gr_make_max_ss (size_t vlen); + + gr_max_ss (size_t vlen); + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_max_ss.i b/gnuradio-core/src/lib/gengen/gr_max_ss.i new file mode 100644 index 00000000..a081326d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_max_ss.i @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,max_ss) + +gr_max_ss_sptr gr_make_max_ss (size_t vlen); + +class gr_max_ss : public gr_sync_block +{ + private: + gr_max_ss (size_t vlen); + size_t d_vlen; +}; diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.cc.t new file mode 100644 index 00000000..33a0acf9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.cc.t @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (int length, @O_TYPE@ scale, int max_iter) +{ + return @SPTR_NAME@ (new @NAME@ (length, scale, max_iter)); +} + +@NAME@::@NAME@ (int length, @O_TYPE@ scale, int max_iter) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, 1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))), + d_length(length), + d_scale(scale), + d_max_iter(max_iter), + d_new_length(length), + d_new_scale(scale), + d_updated(false) +{ + set_history(length); +} + +@NAME@::~@NAME@ () +{ +} + +void +@NAME@::set_length_and_scale(int length, @O_TYPE@ scale) +{ + d_new_length = length; + d_new_scale = scale; + d_updated = true; +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + if (d_updated) { + d_length = d_new_length; + d_scale = d_new_scale; + set_history(d_length); + d_updated = false; + return 0; // history requirements might have changed + } + + const @I_TYPE@ *in = (const @I_TYPE@ *) input_items[0]; + @O_TYPE@ *out = (@O_TYPE@ *) output_items[0]; + + @I_TYPE@ sum = 0; + int num_iter = (noutput_items>d_max_iter) ? d_max_iter : noutput_items; + for (int i = 0; i < d_length-1 ; i++) { + sum += in[i]; + } + + for (int i = 0; i < num_iter; i++) { + sum += in[i+d_length-1]; + out[i] = sum * d_scale; + sum -= in[i]; + } + + return num_iter; +} diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t new file mode 100644 index 00000000..2441ca65 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.h.t @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; + +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096); + +/*! + * \brief output is the moving sum of the last N samples, scaled by the scale factor + * \ingroup filter_blk + * + * max_iter limits how long we go without flushing the accumulator + * This is necessary to avoid numerical instability for float and complex. + */ +class @NAME@ : public gr_sync_block +{ +private: + friend @SPTR_NAME@ gr_make_@BASE_NAME@(int length, @O_TYPE@ scale, int max_iter); + + @NAME@ (int length, @O_TYPE@ scale, int max_iter = 4096); + + int d_length; + @O_TYPE@ d_scale; + int d_max_iter; + + int d_new_length; + @O_TYPE@ d_new_scale; + bool d_updated; + +public: + ~@NAME@ (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + int length() const { return d_new_length; } + @O_TYPE@ scale() const { return d_new_scale; } + + void set_length_and_scale(int length, @O_TYPE@ scale); +}; + +#endif /* @GUARD_NAME@ */ diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_XX.i.t b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.i.t new file mode 100644 index 00000000..855be90b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_XX.i.t @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@); + +@SPTR_NAME@ gr_make_@BASE_NAME@ (int length, @O_TYPE@ scale, int max_iter=4096); + +class @NAME@ : public gr_sync_block +{ +private: + @NAME@ (); + + public: + int length() const; + @O_TYPE@ scale() const; + void set_length_and_scale(int length, @O_TYPE@ scale); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_cc.cc b/gnuradio-core/src/lib/gengen/gr_moving_average_cc.cc new file mode 100644 index 00000000..96c5d561 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_cc.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_moving_average_cc_sptr +gr_make_moving_average_cc (int length, gr_complex scale, int max_iter) +{ + return gr_moving_average_cc_sptr (new gr_moving_average_cc (length, scale, max_iter)); +} + +gr_moving_average_cc::gr_moving_average_cc (int length, gr_complex scale, int max_iter) + : gr_sync_block ("moving_average_cc", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + gr_make_io_signature (1, 1, sizeof (gr_complex))), + d_length(length), + d_scale(scale), + d_max_iter(max_iter), + d_new_length(length), + d_new_scale(scale), + d_updated(false) +{ + set_history(length); +} + +gr_moving_average_cc::~gr_moving_average_cc () +{ +} + +void +gr_moving_average_cc::set_length_and_scale(int length, gr_complex scale) +{ + d_new_length = length; + d_new_scale = scale; + d_updated = true; +} + +int +gr_moving_average_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + if (d_updated) { + d_length = d_new_length; + d_scale = d_new_scale; + set_history(d_length); + d_updated = false; + return 0; // history requirements might have changed + } + + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + gr_complex sum = 0; + int num_iter = (noutput_items>d_max_iter) ? d_max_iter : noutput_items; + for (int i = 0; i < d_length-1 ; i++) { + sum += in[i]; + } + + for (int i = 0; i < num_iter; i++) { + sum += in[i+d_length-1]; + out[i] = sum * d_scale; + sum -= in[i]; + } + + return num_iter; +} diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_cc.h b/gnuradio-core/src/lib/gengen/gr_moving_average_cc.h new file mode 100644 index 00000000..981933d1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_cc.h @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MOVING_AVERAGE_CC_H +#define INCLUDED_GR_MOVING_AVERAGE_CC_H + +#include + +class gr_moving_average_cc; + +typedef boost::shared_ptr gr_moving_average_cc_sptr; + +gr_moving_average_cc_sptr gr_make_moving_average_cc (int length, gr_complex scale, int max_iter = 4096); + +/*! + * \brief output is the moving sum of the last N samples, scaled by the scale factor + * \ingroup filter_blk + * + * max_iter limits how long we go without flushing the accumulator + * This is necessary to avoid numerical instability for float and complex. + */ +class gr_moving_average_cc : public gr_sync_block +{ +private: + friend gr_moving_average_cc_sptr gr_make_moving_average_cc(int length, gr_complex scale, int max_iter); + + gr_moving_average_cc (int length, gr_complex scale, int max_iter = 4096); + + int d_length; + gr_complex d_scale; + int d_max_iter; + + int d_new_length; + gr_complex d_new_scale; + bool d_updated; + +public: + ~gr_moving_average_cc (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + int length() const { return d_new_length; } + gr_complex scale() const { return d_new_scale; } + + void set_length_and_scale(int length, gr_complex scale); +}; + +#endif /* INCLUDED_GR_MOVING_AVERAGE_CC_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_cc.i b/gnuradio-core/src/lib/gengen/gr_moving_average_cc.i new file mode 100644 index 00000000..8102e55c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_cc.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,moving_average_cc); + +gr_moving_average_cc_sptr gr_make_moving_average_cc (int length, gr_complex scale, int max_iter=4096); + +class gr_moving_average_cc : public gr_sync_block +{ +private: + gr_moving_average_cc (); + + public: + int length() const; + gr_complex scale() const; + void set_length_and_scale(int length, gr_complex scale); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ff.cc b/gnuradio-core/src/lib/gengen/gr_moving_average_ff.cc new file mode 100644 index 00000000..364c905b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ff.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_moving_average_ff_sptr +gr_make_moving_average_ff (int length, float scale, int max_iter) +{ + return gr_moving_average_ff_sptr (new gr_moving_average_ff (length, scale, max_iter)); +} + +gr_moving_average_ff::gr_moving_average_ff (int length, float scale, int max_iter) + : gr_sync_block ("moving_average_ff", + gr_make_io_signature (1, 1, sizeof (float)), + gr_make_io_signature (1, 1, sizeof (float))), + d_length(length), + d_scale(scale), + d_max_iter(max_iter), + d_new_length(length), + d_new_scale(scale), + d_updated(false) +{ + set_history(length); +} + +gr_moving_average_ff::~gr_moving_average_ff () +{ +} + +void +gr_moving_average_ff::set_length_and_scale(int length, float scale) +{ + d_new_length = length; + d_new_scale = scale; + d_updated = true; +} + +int +gr_moving_average_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + if (d_updated) { + d_length = d_new_length; + d_scale = d_new_scale; + set_history(d_length); + d_updated = false; + return 0; // history requirements might have changed + } + + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + float sum = 0; + int num_iter = (noutput_items>d_max_iter) ? d_max_iter : noutput_items; + for (int i = 0; i < d_length-1 ; i++) { + sum += in[i]; + } + + for (int i = 0; i < num_iter; i++) { + sum += in[i+d_length-1]; + out[i] = sum * d_scale; + sum -= in[i]; + } + + return num_iter; +} diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ff.h b/gnuradio-core/src/lib/gengen/gr_moving_average_ff.h new file mode 100644 index 00000000..404fd147 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ff.h @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MOVING_AVERAGE_FF_H +#define INCLUDED_GR_MOVING_AVERAGE_FF_H + +#include + +class gr_moving_average_ff; + +typedef boost::shared_ptr gr_moving_average_ff_sptr; + +gr_moving_average_ff_sptr gr_make_moving_average_ff (int length, float scale, int max_iter = 4096); + +/*! + * \brief output is the moving sum of the last N samples, scaled by the scale factor + * \ingroup filter_blk + * + * max_iter limits how long we go without flushing the accumulator + * This is necessary to avoid numerical instability for float and complex. + */ +class gr_moving_average_ff : public gr_sync_block +{ +private: + friend gr_moving_average_ff_sptr gr_make_moving_average_ff(int length, float scale, int max_iter); + + gr_moving_average_ff (int length, float scale, int max_iter = 4096); + + int d_length; + float d_scale; + int d_max_iter; + + int d_new_length; + float d_new_scale; + bool d_updated; + +public: + ~gr_moving_average_ff (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + int length() const { return d_new_length; } + float scale() const { return d_new_scale; } + + void set_length_and_scale(int length, float scale); +}; + +#endif /* INCLUDED_GR_MOVING_AVERAGE_FF_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ff.i b/gnuradio-core/src/lib/gengen/gr_moving_average_ff.i new file mode 100644 index 00000000..1e3a6706 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ff.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,moving_average_ff); + +gr_moving_average_ff_sptr gr_make_moving_average_ff (int length, float scale, int max_iter=4096); + +class gr_moving_average_ff : public gr_sync_block +{ +private: + gr_moving_average_ff (); + + public: + int length() const; + float scale() const; + void set_length_and_scale(int length, float scale); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ii.cc b/gnuradio-core/src/lib/gengen/gr_moving_average_ii.cc new file mode 100644 index 00000000..4cb6470c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ii.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_moving_average_ii_sptr +gr_make_moving_average_ii (int length, int scale, int max_iter) +{ + return gr_moving_average_ii_sptr (new gr_moving_average_ii (length, scale, max_iter)); +} + +gr_moving_average_ii::gr_moving_average_ii (int length, int scale, int max_iter) + : gr_sync_block ("moving_average_ii", + gr_make_io_signature (1, 1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))), + d_length(length), + d_scale(scale), + d_max_iter(max_iter), + d_new_length(length), + d_new_scale(scale), + d_updated(false) +{ + set_history(length); +} + +gr_moving_average_ii::~gr_moving_average_ii () +{ +} + +void +gr_moving_average_ii::set_length_and_scale(int length, int scale) +{ + d_new_length = length; + d_new_scale = scale; + d_updated = true; +} + +int +gr_moving_average_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + if (d_updated) { + d_length = d_new_length; + d_scale = d_new_scale; + set_history(d_length); + d_updated = false; + return 0; // history requirements might have changed + } + + const int *in = (const int *) input_items[0]; + int *out = (int *) output_items[0]; + + int sum = 0; + int num_iter = (noutput_items>d_max_iter) ? d_max_iter : noutput_items; + for (int i = 0; i < d_length-1 ; i++) { + sum += in[i]; + } + + for (int i = 0; i < num_iter; i++) { + sum += in[i+d_length-1]; + out[i] = sum * d_scale; + sum -= in[i]; + } + + return num_iter; +} diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ii.h b/gnuradio-core/src/lib/gengen/gr_moving_average_ii.h new file mode 100644 index 00000000..b979b0e6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ii.h @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MOVING_AVERAGE_II_H +#define INCLUDED_GR_MOVING_AVERAGE_II_H + +#include + +class gr_moving_average_ii; + +typedef boost::shared_ptr gr_moving_average_ii_sptr; + +gr_moving_average_ii_sptr gr_make_moving_average_ii (int length, int scale, int max_iter = 4096); + +/*! + * \brief output is the moving sum of the last N samples, scaled by the scale factor + * \ingroup filter_blk + * + * max_iter limits how long we go without flushing the accumulator + * This is necessary to avoid numerical instability for float and complex. + */ +class gr_moving_average_ii : public gr_sync_block +{ +private: + friend gr_moving_average_ii_sptr gr_make_moving_average_ii(int length, int scale, int max_iter); + + gr_moving_average_ii (int length, int scale, int max_iter = 4096); + + int d_length; + int d_scale; + int d_max_iter; + + int d_new_length; + int d_new_scale; + bool d_updated; + +public: + ~gr_moving_average_ii (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + int length() const { return d_new_length; } + int scale() const { return d_new_scale; } + + void set_length_and_scale(int length, int scale); +}; + +#endif /* INCLUDED_GR_MOVING_AVERAGE_II_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ii.i b/gnuradio-core/src/lib/gengen/gr_moving_average_ii.i new file mode 100644 index 00000000..3306f3f9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ii.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,moving_average_ii); + +gr_moving_average_ii_sptr gr_make_moving_average_ii (int length, int scale, int max_iter=4096); + +class gr_moving_average_ii : public gr_sync_block +{ +private: + gr_moving_average_ii (); + + public: + int length() const; + int scale() const; + void set_length_and_scale(int length, int scale); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ss.cc b/gnuradio-core/src/lib/gengen/gr_moving_average_ss.cc new file mode 100644 index 00000000..3ce01750 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ss.cc @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_moving_average_ss_sptr +gr_make_moving_average_ss (int length, short scale, int max_iter) +{ + return gr_moving_average_ss_sptr (new gr_moving_average_ss (length, scale, max_iter)); +} + +gr_moving_average_ss::gr_moving_average_ss (int length, short scale, int max_iter) + : gr_sync_block ("moving_average_ss", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))), + d_length(length), + d_scale(scale), + d_max_iter(max_iter), + d_new_length(length), + d_new_scale(scale), + d_updated(false) +{ + set_history(length); +} + +gr_moving_average_ss::~gr_moving_average_ss () +{ +} + +void +gr_moving_average_ss::set_length_and_scale(int length, short scale) +{ + d_new_length = length; + d_new_scale = scale; + d_updated = true; +} + +int +gr_moving_average_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + if (d_updated) { + d_length = d_new_length; + d_scale = d_new_scale; + set_history(d_length); + d_updated = false; + return 0; // history requirements might have changed + } + + const short *in = (const short *) input_items[0]; + short *out = (short *) output_items[0]; + + short sum = 0; + int num_iter = (noutput_items>d_max_iter) ? d_max_iter : noutput_items; + for (int i = 0; i < d_length-1 ; i++) { + sum += in[i]; + } + + for (int i = 0; i < num_iter; i++) { + sum += in[i+d_length-1]; + out[i] = sum * d_scale; + sum -= in[i]; + } + + return num_iter; +} diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ss.h b/gnuradio-core/src/lib/gengen/gr_moving_average_ss.h new file mode 100644 index 00000000..bbb9d9fb --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ss.h @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MOVING_AVERAGE_SS_H +#define INCLUDED_GR_MOVING_AVERAGE_SS_H + +#include + +class gr_moving_average_ss; + +typedef boost::shared_ptr gr_moving_average_ss_sptr; + +gr_moving_average_ss_sptr gr_make_moving_average_ss (int length, short scale, int max_iter = 4096); + +/*! + * \brief output is the moving sum of the last N samples, scaled by the scale factor + * \ingroup filter_blk + * + * max_iter limits how long we go without flushing the accumulator + * This is necessary to avoid numerical instability for float and complex. + */ +class gr_moving_average_ss : public gr_sync_block +{ +private: + friend gr_moving_average_ss_sptr gr_make_moving_average_ss(int length, short scale, int max_iter); + + gr_moving_average_ss (int length, short scale, int max_iter = 4096); + + int d_length; + short d_scale; + int d_max_iter; + + int d_new_length; + short d_new_scale; + bool d_updated; + +public: + ~gr_moving_average_ss (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + int length() const { return d_new_length; } + short scale() const { return d_new_scale; } + + void set_length_and_scale(int length, short scale); +}; + +#endif /* INCLUDED_GR_MOVING_AVERAGE_SS_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_moving_average_ss.i b/gnuradio-core/src/lib/gengen/gr_moving_average_ss.i new file mode 100644 index 00000000..1473892c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_moving_average_ss.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,moving_average_ss); + +gr_moving_average_ss_sptr gr_make_moving_average_ss (int length, short scale, int max_iter=4096); + +class gr_moving_average_ss : public gr_sync_block +{ +private: + gr_moving_average_ss (); + + public: + int length() const; + short scale() const; + void set_length_and_scale(int length, short scale); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t new file mode 100644 index 00000000..000c5e0b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (size_t vlen) +{ + return @SPTR_NAME@ (new @NAME@ (vlen)); +} + +@NAME@::@NAME@ (size_t vlen) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*vlen), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*vlen)), + d_vlen (vlen) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc *= ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t new file mode 100644 index 00000000..cb4a0273 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_XX.h.t @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +/*! + * \brief output = prod (input_0, input_1, ...) + * \ingroup math_blk + * + * Multiply across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + @NAME@ (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_XX.i.t b/gnuradio-core/src/lib/gengen/gr_multiply_XX.i.t new file mode 100644 index 00000000..f7726ccf --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_cc.cc b/gnuradio-core/src/lib/gengen/gr_multiply_cc.cc new file mode 100644 index 00000000..05b42118 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_cc.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_multiply_cc_sptr +gr_make_multiply_cc (size_t vlen) +{ + return gr_multiply_cc_sptr (new gr_multiply_cc (vlen)); +} + +gr_multiply_cc::gr_multiply_cc (size_t vlen) + : gr_sync_block ("multiply_cc", + gr_make_io_signature (1, -1, sizeof (gr_complex)*vlen), + gr_make_io_signature (1, 1, sizeof (gr_complex)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_multiply_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *optr = (gr_complex *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + gr_complex acc = ((gr_complex *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc *= ((gr_complex *) input_items[j])[i]; + + *optr++ = (gr_complex) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_cc.h b/gnuradio-core/src/lib/gengen/gr_multiply_cc.h new file mode 100644 index 00000000..4c072aad --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_cc.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CC_H +#define INCLUDED_GR_MULTIPLY_CC_H + +#include + +class gr_multiply_cc; +typedef boost::shared_ptr gr_multiply_cc_sptr; + +gr_multiply_cc_sptr gr_make_multiply_cc (size_t vlen = 1); + +/*! + * \brief output = prod (input_0, input_1, ...) + * \ingroup math_blk + * + * Multiply across all input streams. + */ +class gr_multiply_cc : public gr_sync_block +{ + friend gr_multiply_cc_sptr gr_make_multiply_cc (size_t vlen); + + gr_multiply_cc (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_cc.i b/gnuradio-core/src/lib/gengen/gr_multiply_cc.i new file mode 100644 index 00000000..43e02302 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_cc.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,multiply_cc) + +gr_multiply_cc_sptr gr_make_multiply_cc (size_t vlen = 1); + +class gr_multiply_cc : public gr_sync_block +{ + private: + gr_multiply_cc (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_XX.cc.t rename to gnuradio-core/src/lib/gengen/gr_multiply_const_XX.cc.t diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t new file mode 100644 index 00000000..0c10185c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.h.t @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + +/*! + * \brief output = input * constant + * \ingroup math_blk + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (@O_TYPE@ k); + + @O_TYPE@ d_k; // the constant + @NAME@ (@O_TYPE@ k); + + public: + @O_TYPE@ k () const { return d_k; } + void set_k (@O_TYPE@ k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_XX.i.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_XX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_XX.i.t rename to gnuradio-core/src/lib/gengen/gr_multiply_const_XX.i.t diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_cc.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_cc.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_cc.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_cc.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_cc.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_cc.h new file mode 100644 index 00000000..31d8e989 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_cc.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_CC_H +#define INCLUDED_GR_MULTIPLY_CONST_CC_H + +#include + +class gr_multiply_const_cc; +typedef boost::shared_ptr gr_multiply_const_cc_sptr; + +gr_multiply_const_cc_sptr gr_make_multiply_const_cc (gr_complex k); + +/*! + * \brief output = input * constant + * \ingroup math_blk + */ +class gr_multiply_const_cc : public gr_sync_block +{ + friend gr_multiply_const_cc_sptr gr_make_multiply_const_cc (gr_complex k); + + gr_complex d_k; // the constant + gr_multiply_const_cc (gr_complex k); + + public: + gr_complex k () const { return d_k; } + void set_k (gr_complex k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_cc.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_cc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_cc.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_cc.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ff.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_ff.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_ff.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_ff.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_ff.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_ff.h new file mode 100644 index 00000000..75eccbc3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_ff.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_FF_H +#define INCLUDED_GR_MULTIPLY_CONST_FF_H + +#include + +class gr_multiply_const_ff; +typedef boost::shared_ptr gr_multiply_const_ff_sptr; + +gr_multiply_const_ff_sptr gr_make_multiply_const_ff (float k); + +/*! + * \brief output = input * constant + * \ingroup math_blk + */ +class gr_multiply_const_ff : public gr_sync_block +{ + friend gr_multiply_const_ff_sptr gr_make_multiply_const_ff (float k); + + float d_k; // the constant + gr_multiply_const_ff (float k); + + public: + float k () const { return d_k; } + void set_k (float k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ff.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_ff.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_ff.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_ff.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ii.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_ii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_ii.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_ii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_ii.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_ii.h new file mode 100644 index 00000000..3ca5cf43 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_ii.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_II_H +#define INCLUDED_GR_MULTIPLY_CONST_II_H + +#include + +class gr_multiply_const_ii; +typedef boost::shared_ptr gr_multiply_const_ii_sptr; + +gr_multiply_const_ii_sptr gr_make_multiply_const_ii (int k); + +/*! + * \brief output = input * constant + * \ingroup math_blk + */ +class gr_multiply_const_ii : public gr_sync_block +{ + friend gr_multiply_const_ii_sptr gr_make_multiply_const_ii (int k); + + int d_k; // the constant + gr_multiply_const_ii (int k); + + public: + int k () const { return d_k; } + void set_k (int k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ii.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_ii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_ii.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_ii.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ss.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_ss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_ss.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_ss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_ss.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_ss.h new file mode 100644 index 00000000..150be9b0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_ss.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_SS_H +#define INCLUDED_GR_MULTIPLY_CONST_SS_H + +#include + +class gr_multiply_const_ss; +typedef boost::shared_ptr gr_multiply_const_ss_sptr; + +gr_multiply_const_ss_sptr gr_make_multiply_const_ss (short k); + +/*! + * \brief output = input * constant + * \ingroup math_blk + */ +class gr_multiply_const_ss : public gr_sync_block +{ + friend gr_multiply_const_ss_sptr gr_make_multiply_const_ss (short k); + + short d_k; // the constant + gr_multiply_const_ss (short k); + + public: + short k () const { return d_k; } + void set_k (short k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_ss.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_ss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_ss.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_ss.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vXX.cc.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vXX.cc.t rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.cc.t 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 new file mode 100755 index 00000000..22334505 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.h.t @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (const std::vector<@I_TYPE@> k); + +/*! + * \brief output vector = input vector * constant vector (element-wise) + * \ingroup math_blk + */ +class @NAME@ : public gr_sync_block +{ + 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); + + public: + const std::vector<@I_TYPE@> k () const { return d_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, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vXX.i.t b/gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vXX.i.t rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vXX.i.t diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vcc.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vcc.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.h new file mode 100644 index 00000000..c30f2492 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_VCC_H +#define INCLUDED_GR_MULTIPLY_CONST_VCC_H + +#include + +class gr_multiply_const_vcc; +typedef boost::shared_ptr gr_multiply_const_vcc_sptr; + +gr_multiply_const_vcc_sptr gr_make_multiply_const_vcc (const std::vector k); + +/*! + * \brief output vector = input vector * constant vector (element-wise) + * \ingroup math_blk + */ +class gr_multiply_const_vcc : public gr_sync_block +{ + friend gr_multiply_const_vcc_sptr gr_make_multiply_const_vcc (const std::vector k); + + std::vector d_k; // the constant + gr_multiply_const_vcc (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vcc.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vcc.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vcc.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vff.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_vff.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vff.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vff.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vff.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_vff.h new file mode 100644 index 00000000..fb5a67ba --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vff.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_VFF_H +#define INCLUDED_GR_MULTIPLY_CONST_VFF_H + +#include + +class gr_multiply_const_vff; +typedef boost::shared_ptr gr_multiply_const_vff_sptr; + +gr_multiply_const_vff_sptr gr_make_multiply_const_vff (const std::vector k); + +/*! + * \brief output vector = input vector * constant vector (element-wise) + * \ingroup math_blk + */ +class gr_multiply_const_vff : public gr_sync_block +{ + friend gr_multiply_const_vff_sptr gr_make_multiply_const_vff (const std::vector k); + + std::vector d_k; // the constant + gr_multiply_const_vff (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vff.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_vff.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vff.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vff.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vii.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_vii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vii.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vii.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_vii.h new file mode 100644 index 00000000..2117c261 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vii.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_VII_H +#define INCLUDED_GR_MULTIPLY_CONST_VII_H + +#include + +class gr_multiply_const_vii; +typedef boost::shared_ptr gr_multiply_const_vii_sptr; + +gr_multiply_const_vii_sptr gr_make_multiply_const_vii (const std::vector k); + +/*! + * \brief output vector = input vector * constant vector (element-wise) + * \ingroup math_blk + */ +class gr_multiply_const_vii : public gr_sync_block +{ + friend gr_multiply_const_vii_sptr gr_make_multiply_const_vii (const std::vector k); + + std::vector d_k; // the constant + gr_multiply_const_vii (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vii.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_vii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vii.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vii.i diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vss.cc b/gnuradio-core/src/lib/gengen/gr_multiply_const_vss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vss.cc rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_const_vss.h b/gnuradio-core/src/lib/gengen/gr_multiply_const_vss.h new file mode 100644 index 00000000..d1411481 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_const_vss.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_CONST_VSS_H +#define INCLUDED_GR_MULTIPLY_CONST_VSS_H + +#include + +class gr_multiply_const_vss; +typedef boost::shared_ptr gr_multiply_const_vss_sptr; + +gr_multiply_const_vss_sptr gr_make_multiply_const_vss (const std::vector k); + +/*! + * \brief output vector = input vector * constant vector (element-wise) + * \ingroup math_blk + */ +class gr_multiply_const_vss : public gr_sync_block +{ + friend gr_multiply_const_vss_sptr gr_make_multiply_const_vss (const std::vector k); + + std::vector d_k; // the constant + gr_multiply_const_vss (const std::vector k); + + public: + const std::vector k () const { return d_k; } + void set_k (const std::vector k) { d_k = k; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_multiply_const_vss.i b/gnuradio-core/src/lib/gengen/gr_multiply_const_vss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_multiply_const_vss.i rename to gnuradio-core/src/lib/gengen/gr_multiply_const_vss.i diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ff.cc b/gnuradio-core/src/lib/gengen/gr_multiply_ff.cc new file mode 100644 index 00000000..72779429 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ff.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_multiply_ff_sptr +gr_make_multiply_ff (size_t vlen) +{ + return gr_multiply_ff_sptr (new gr_multiply_ff (vlen)); +} + +gr_multiply_ff::gr_multiply_ff (size_t vlen) + : gr_sync_block ("multiply_ff", + gr_make_io_signature (1, -1, sizeof (float)*vlen), + gr_make_io_signature (1, 1, sizeof (float)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_multiply_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + float acc = ((float *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc *= ((float *) input_items[j])[i]; + + *optr++ = (float) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ff.h b/gnuradio-core/src/lib/gengen/gr_multiply_ff.h new file mode 100644 index 00000000..c60a8543 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ff.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_FF_H +#define INCLUDED_GR_MULTIPLY_FF_H + +#include + +class gr_multiply_ff; +typedef boost::shared_ptr gr_multiply_ff_sptr; + +gr_multiply_ff_sptr gr_make_multiply_ff (size_t vlen = 1); + +/*! + * \brief output = prod (input_0, input_1, ...) + * \ingroup math_blk + * + * Multiply across all input streams. + */ +class gr_multiply_ff : public gr_sync_block +{ + friend gr_multiply_ff_sptr gr_make_multiply_ff (size_t vlen); + + gr_multiply_ff (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ff.i b/gnuradio-core/src/lib/gengen/gr_multiply_ff.i new file mode 100644 index 00000000..5af9209b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ff.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,multiply_ff) + +gr_multiply_ff_sptr gr_make_multiply_ff (size_t vlen = 1); + +class gr_multiply_ff : public gr_sync_block +{ + private: + gr_multiply_ff (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ii.cc b/gnuradio-core/src/lib/gengen/gr_multiply_ii.cc new file mode 100644 index 00000000..3032339a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ii.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_multiply_ii_sptr +gr_make_multiply_ii (size_t vlen) +{ + return gr_multiply_ii_sptr (new gr_multiply_ii (vlen)); +} + +gr_multiply_ii::gr_multiply_ii (size_t vlen) + : gr_sync_block ("multiply_ii", + gr_make_io_signature (1, -1, sizeof (int)*vlen), + gr_make_io_signature (1, 1, sizeof (int)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_multiply_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc *= ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ii.h b/gnuradio-core/src/lib/gengen/gr_multiply_ii.h new file mode 100644 index 00000000..420e82ba --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ii.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_II_H +#define INCLUDED_GR_MULTIPLY_II_H + +#include + +class gr_multiply_ii; +typedef boost::shared_ptr gr_multiply_ii_sptr; + +gr_multiply_ii_sptr gr_make_multiply_ii (size_t vlen = 1); + +/*! + * \brief output = prod (input_0, input_1, ...) + * \ingroup math_blk + * + * Multiply across all input streams. + */ +class gr_multiply_ii : public gr_sync_block +{ + friend gr_multiply_ii_sptr gr_make_multiply_ii (size_t vlen); + + gr_multiply_ii (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ii.i b/gnuradio-core/src/lib/gengen/gr_multiply_ii.i new file mode 100644 index 00000000..cbcc7375 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,multiply_ii) + +gr_multiply_ii_sptr gr_make_multiply_ii (size_t vlen = 1); + +class gr_multiply_ii : public gr_sync_block +{ + private: + gr_multiply_ii (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ss.cc b/gnuradio-core/src/lib/gengen/gr_multiply_ss.cc new file mode 100644 index 00000000..6b379d8e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ss.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_multiply_ss_sptr +gr_make_multiply_ss (size_t vlen) +{ + return gr_multiply_ss_sptr (new gr_multiply_ss (vlen)); +} + +gr_multiply_ss::gr_multiply_ss (size_t vlen) + : gr_sync_block ("multiply_ss", + gr_make_io_signature (1, -1, sizeof (short)*vlen), + gr_make_io_signature (1, 1, sizeof (short)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_multiply_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items*d_vlen; i++){ + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc *= ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ss.h b/gnuradio-core/src/lib/gengen/gr_multiply_ss.h new file mode 100644 index 00000000..8dceb947 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ss.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MULTIPLY_SS_H +#define INCLUDED_GR_MULTIPLY_SS_H + +#include + +class gr_multiply_ss; +typedef boost::shared_ptr gr_multiply_ss_sptr; + +gr_multiply_ss_sptr gr_make_multiply_ss (size_t vlen = 1); + +/*! + * \brief output = prod (input_0, input_1, ...) + * \ingroup math_blk + * + * Multiply across all input streams. + */ +class gr_multiply_ss : public gr_sync_block +{ + friend gr_multiply_ss_sptr gr_make_multiply_ss (size_t vlen); + + gr_multiply_ss (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_ss.i b/gnuradio-core/src/lib/gengen/gr_multiply_ss.i new file mode 100644 index 00000000..461a8fc9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_multiply_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,multiply_ss) + +gr_multiply_ss_sptr gr_make_multiply_ss (size_t vlen = 1); + +class gr_multiply_ss : public gr_sync_block +{ + private: + gr_multiply_ss (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/general/gr_mute_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_mute_XX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_XX.cc.t rename to gnuradio-core/src/lib/gengen/gr_mute_XX.cc.t diff --git a/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t b/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t new file mode 100644 index 00000000..5007787c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_mute_XX.h.t @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute=false); + +/*! + * \brief output = input or zero if muted. + * \ingroup level_blk + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (bool mute); + + bool d_mute; + @NAME@ (bool mute); + + public: + bool mute () const { return d_mute; } + void set_mute (bool mute) { d_mute = mute; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_XX.i.t b/gnuradio-core/src/lib/gengen/gr_mute_XX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_XX.i.t rename to gnuradio-core/src/lib/gengen/gr_mute_XX.i.t diff --git a/gnuradio-core/src/lib/general/gr_mute_cc.cc b/gnuradio-core/src/lib/gengen/gr_mute_cc.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_cc.cc rename to gnuradio-core/src/lib/gengen/gr_mute_cc.cc diff --git a/gnuradio-core/src/lib/gengen/gr_mute_cc.h b/gnuradio-core/src/lib/gengen/gr_mute_cc.h new file mode 100644 index 00000000..51e5dc41 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_mute_cc.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MUTE_CC_H +#define INCLUDED_GR_MUTE_CC_H + +#include + +class gr_mute_cc; +typedef boost::shared_ptr gr_mute_cc_sptr; + +gr_mute_cc_sptr gr_make_mute_cc (bool mute=false); + +/*! + * \brief output = input or zero if muted. + * \ingroup level_blk + */ +class gr_mute_cc : public gr_sync_block +{ + friend gr_mute_cc_sptr gr_make_mute_cc (bool mute); + + bool d_mute; + gr_mute_cc (bool mute); + + public: + bool mute () const { return d_mute; } + void set_mute (bool mute) { d_mute = mute; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_cc.i b/gnuradio-core/src/lib/gengen/gr_mute_cc.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_cc.i rename to gnuradio-core/src/lib/gengen/gr_mute_cc.i diff --git a/gnuradio-core/src/lib/general/gr_mute_ff.cc b/gnuradio-core/src/lib/gengen/gr_mute_ff.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_ff.cc rename to gnuradio-core/src/lib/gengen/gr_mute_ff.cc diff --git a/gnuradio-core/src/lib/gengen/gr_mute_ff.h b/gnuradio-core/src/lib/gengen/gr_mute_ff.h new file mode 100644 index 00000000..3a76fd8d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_mute_ff.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MUTE_FF_H +#define INCLUDED_GR_MUTE_FF_H + +#include + +class gr_mute_ff; +typedef boost::shared_ptr gr_mute_ff_sptr; + +gr_mute_ff_sptr gr_make_mute_ff (bool mute=false); + +/*! + * \brief output = input or zero if muted. + * \ingroup level_blk + */ +class gr_mute_ff : public gr_sync_block +{ + friend gr_mute_ff_sptr gr_make_mute_ff (bool mute); + + bool d_mute; + gr_mute_ff (bool mute); + + public: + bool mute () const { return d_mute; } + void set_mute (bool mute) { d_mute = mute; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_ff.i b/gnuradio-core/src/lib/gengen/gr_mute_ff.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_ff.i rename to gnuradio-core/src/lib/gengen/gr_mute_ff.i diff --git a/gnuradio-core/src/lib/general/gr_mute_ii.cc b/gnuradio-core/src/lib/gengen/gr_mute_ii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_ii.cc rename to gnuradio-core/src/lib/gengen/gr_mute_ii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_mute_ii.h b/gnuradio-core/src/lib/gengen/gr_mute_ii.h new file mode 100644 index 00000000..d809f8e6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_mute_ii.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MUTE_II_H +#define INCLUDED_GR_MUTE_II_H + +#include + +class gr_mute_ii; +typedef boost::shared_ptr gr_mute_ii_sptr; + +gr_mute_ii_sptr gr_make_mute_ii (bool mute=false); + +/*! + * \brief output = input or zero if muted. + * \ingroup level_blk + */ +class gr_mute_ii : public gr_sync_block +{ + friend gr_mute_ii_sptr gr_make_mute_ii (bool mute); + + bool d_mute; + gr_mute_ii (bool mute); + + public: + bool mute () const { return d_mute; } + void set_mute (bool mute) { d_mute = mute; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_ii.i b/gnuradio-core/src/lib/gengen/gr_mute_ii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_ii.i rename to gnuradio-core/src/lib/gengen/gr_mute_ii.i diff --git a/gnuradio-core/src/lib/general/gr_mute_ss.cc b/gnuradio-core/src/lib/gengen/gr_mute_ss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_ss.cc rename to gnuradio-core/src/lib/gengen/gr_mute_ss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_mute_ss.h b/gnuradio-core/src/lib/gengen/gr_mute_ss.h new file mode 100644 index 00000000..80ca5f96 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_mute_ss.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_MUTE_SS_H +#define INCLUDED_GR_MUTE_SS_H + +#include + +class gr_mute_ss; +typedef boost::shared_ptr gr_mute_ss_sptr; + +gr_mute_ss_sptr gr_make_mute_ss (bool mute=false); + +/*! + * \brief output = input or zero if muted. + * \ingroup level_blk + */ +class gr_mute_ss : public gr_sync_block +{ + friend gr_mute_ss_sptr gr_make_mute_ss (bool mute); + + bool d_mute; + gr_mute_ss (bool mute); + + public: + bool mute () const { return d_mute; } + void set_mute (bool mute) { d_mute = mute; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_mute_ss.i b/gnuradio-core/src/lib/gengen/gr_mute_ss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_mute_ss.i rename to gnuradio-core/src/lib/gengen/gr_mute_ss.i diff --git a/gnuradio-core/src/lib/general/gr_noise_source_X.cc.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_X.cc.t rename to gnuradio-core/src/lib/gengen/gr_noise_source_X.cc.t diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t new file mode 100644 index 00000000..a920ce04 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include +#include +#include + + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @NAME@_sptr; + +@NAME@_sptr +gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021); + +/*! + * \brief random number source + * \ingroup source_blk + */ +class @NAME@ : public gr_sync_block { + friend @NAME@_sptr + gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed); + + gr_noise_type_t d_type; + float d_ampl; + gr_random d_rng; + + @NAME@ (gr_noise_type_t type, float ampl, long seed = 3021); + + public: + void set_type (gr_noise_type_t type) { d_type = type; } + void set_amplitude (float ampl) { d_ampl = ampl; } + + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_X.i.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_X.i.t rename to gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t diff --git a/gnuradio-core/src/lib/general/gr_noise_source_c.cc b/gnuradio-core/src/lib/gengen/gr_noise_source_c.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_c.cc rename to gnuradio-core/src/lib/gengen/gr_noise_source_c.cc diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_c.h b/gnuradio-core/src/lib/gengen/gr_noise_source_c.h new file mode 100644 index 00000000..6d5cc2d0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_noise_source_c.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOISE_SOURCE_C_H +#define INCLUDED_GR_NOISE_SOURCE_C_H + +#include +#include +#include + + +class gr_noise_source_c; +typedef boost::shared_ptr gr_noise_source_c_sptr; + +gr_noise_source_c_sptr +gr_make_noise_source_c (gr_noise_type_t type, float ampl, long seed = 3021); + +/*! + * \brief random number source + * \ingroup source_blk + */ +class gr_noise_source_c : public gr_sync_block { + friend gr_noise_source_c_sptr + gr_make_noise_source_c (gr_noise_type_t type, float ampl, long seed); + + gr_noise_type_t d_type; + float d_ampl; + gr_random d_rng; + + gr_noise_source_c (gr_noise_type_t type, float ampl, long seed = 3021); + + public: + void set_type (gr_noise_type_t type) { d_type = type; } + void set_amplitude (float ampl) { d_ampl = ampl; } + + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_c.i b/gnuradio-core/src/lib/gengen/gr_noise_source_c.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_c.i rename to gnuradio-core/src/lib/gengen/gr_noise_source_c.i diff --git a/gnuradio-core/src/lib/general/gr_noise_source_f.cc b/gnuradio-core/src/lib/gengen/gr_noise_source_f.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_f.cc rename to gnuradio-core/src/lib/gengen/gr_noise_source_f.cc diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_f.h b/gnuradio-core/src/lib/gengen/gr_noise_source_f.h new file mode 100644 index 00000000..d07361eb --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_noise_source_f.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOISE_SOURCE_F_H +#define INCLUDED_GR_NOISE_SOURCE_F_H + +#include +#include +#include + + +class gr_noise_source_f; +typedef boost::shared_ptr gr_noise_source_f_sptr; + +gr_noise_source_f_sptr +gr_make_noise_source_f (gr_noise_type_t type, float ampl, long seed = 3021); + +/*! + * \brief random number source + * \ingroup source_blk + */ +class gr_noise_source_f : public gr_sync_block { + friend gr_noise_source_f_sptr + gr_make_noise_source_f (gr_noise_type_t type, float ampl, long seed); + + gr_noise_type_t d_type; + float d_ampl; + gr_random d_rng; + + gr_noise_source_f (gr_noise_type_t type, float ampl, long seed = 3021); + + public: + void set_type (gr_noise_type_t type) { d_type = type; } + void set_amplitude (float ampl) { d_ampl = ampl; } + + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_f.i b/gnuradio-core/src/lib/gengen/gr_noise_source_f.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_f.i rename to gnuradio-core/src/lib/gengen/gr_noise_source_f.i diff --git a/gnuradio-core/src/lib/general/gr_noise_source_i.cc b/gnuradio-core/src/lib/gengen/gr_noise_source_i.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_i.cc rename to gnuradio-core/src/lib/gengen/gr_noise_source_i.cc diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_i.h b/gnuradio-core/src/lib/gengen/gr_noise_source_i.h new file mode 100644 index 00000000..b3272370 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_noise_source_i.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOISE_SOURCE_I_H +#define INCLUDED_GR_NOISE_SOURCE_I_H + +#include +#include +#include + + +class gr_noise_source_i; +typedef boost::shared_ptr gr_noise_source_i_sptr; + +gr_noise_source_i_sptr +gr_make_noise_source_i (gr_noise_type_t type, float ampl, long seed = 3021); + +/*! + * \brief random number source + * \ingroup source_blk + */ +class gr_noise_source_i : public gr_sync_block { + friend gr_noise_source_i_sptr + gr_make_noise_source_i (gr_noise_type_t type, float ampl, long seed); + + gr_noise_type_t d_type; + float d_ampl; + gr_random d_rng; + + gr_noise_source_i (gr_noise_type_t type, float ampl, long seed = 3021); + + public: + void set_type (gr_noise_type_t type) { d_type = type; } + void set_amplitude (float ampl) { d_ampl = ampl; } + + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_i.i b/gnuradio-core/src/lib/gengen/gr_noise_source_i.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_i.i rename to gnuradio-core/src/lib/gengen/gr_noise_source_i.i diff --git a/gnuradio-core/src/lib/general/gr_noise_source_s.cc b/gnuradio-core/src/lib/gengen/gr_noise_source_s.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_s.cc rename to gnuradio-core/src/lib/gengen/gr_noise_source_s.cc diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_s.h b/gnuradio-core/src/lib/gengen/gr_noise_source_s.h new file mode 100644 index 00000000..25bbe517 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_noise_source_s.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOISE_SOURCE_S_H +#define INCLUDED_GR_NOISE_SOURCE_S_H + +#include +#include +#include + + +class gr_noise_source_s; +typedef boost::shared_ptr gr_noise_source_s_sptr; + +gr_noise_source_s_sptr +gr_make_noise_source_s (gr_noise_type_t type, float ampl, long seed = 3021); + +/*! + * \brief random number source + * \ingroup source_blk + */ +class gr_noise_source_s : public gr_sync_block { + friend gr_noise_source_s_sptr + gr_make_noise_source_s (gr_noise_type_t type, float ampl, long seed); + + gr_noise_type_t d_type; + float d_ampl; + gr_random d_rng; + + gr_noise_source_s (gr_noise_type_t type, float ampl, long seed = 3021); + + public: + void set_type (gr_noise_type_t type) { d_type = type; } + void set_amplitude (float ampl) { d_ampl = ampl; } + + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_noise_source_s.i b/gnuradio-core/src/lib/gengen/gr_noise_source_s.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_source_s.i rename to gnuradio-core/src/lib/gengen/gr_noise_source_s.i diff --git a/gnuradio-core/src/lib/general/gr_noise_type.h b/gnuradio-core/src/lib/gengen/gr_noise_type.h similarity index 100% rename from gnuradio-core/src/lib/general/gr_noise_type.h rename to gnuradio-core/src/lib/gengen/gr_noise_type.h diff --git a/gnuradio-core/src/lib/gengen/gr_not_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_not_XX.cc.t new file mode 100644 index 00000000..27298741 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_XX.cc.t @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ () +{ + return @SPTR_NAME@ (new @NAME@ ()); +} + +@NAME@::@NAME@ () + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, 1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + const @I_TYPE@ *inptr = (const @I_TYPE@ *) input_items[0]; + + + for (int i = 0; i < noutput_items; i++) { + *optr++ = ~(inptr[i]); + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_not_XX.h.t b/gnuradio-core/src/lib/gengen/gr_not_XX.h.t new file mode 100644 index 00000000..cf8d96ed --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_XX.h.t @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +/*! + * \brief output = ~input_0 + * \ingroup math_blk + * + * bitwise boolean not across input stream. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + + @NAME@ (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_not_XX.i.t b/gnuradio-core/src/lib/gengen/gr_not_XX.i.t new file mode 100644 index 00000000..e17d40ee --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_not_bb.cc b/gnuradio-core/src/lib/gengen/gr_not_bb.cc new file mode 100644 index 00000000..11252c19 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_bb.cc @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_not_bb_sptr +gr_make_not_bb () +{ + return gr_not_bb_sptr (new gr_not_bb ()); +} + +gr_not_bb::gr_not_bb () + : gr_sync_block ("not_bb", + gr_make_io_signature (1, 1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))) +{ +} + +int +gr_not_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *optr = (unsigned char *) output_items[0]; + const unsigned char *inptr = (const unsigned char *) input_items[0]; + + + for (int i = 0; i < noutput_items; i++) { + *optr++ = ~(inptr[i]); + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_not_bb.h b/gnuradio-core/src/lib/gengen/gr_not_bb.h new file mode 100644 index 00000000..8e51b977 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_bb.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOT_BB_H +#define INCLUDED_GR_NOT_BB_H + +#include + +class gr_not_bb; +typedef boost::shared_ptr gr_not_bb_sptr; + +gr_not_bb_sptr gr_make_not_bb (); + +/*! + * \brief output = ~input_0 + * \ingroup math_blk + * + * bitwise boolean not across input stream. + */ +class gr_not_bb : public gr_sync_block +{ + friend gr_not_bb_sptr gr_make_not_bb (); + + gr_not_bb (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_not_bb.i b/gnuradio-core/src/lib/gengen/gr_not_bb.i new file mode 100644 index 00000000..b6ed3bc0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_bb.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,not_bb) + +gr_not_bb_sptr gr_make_not_bb (); + +class gr_not_bb : public gr_sync_block +{ + private: + gr_not_bb (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_not_ii.cc b/gnuradio-core/src/lib/gengen/gr_not_ii.cc new file mode 100644 index 00000000..abd06578 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_ii.cc @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_not_ii_sptr +gr_make_not_ii () +{ + return gr_not_ii_sptr (new gr_not_ii ()); +} + +gr_not_ii::gr_not_ii () + : gr_sync_block ("not_ii", + gr_make_io_signature (1, 1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))) +{ +} + +int +gr_not_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + const int *inptr = (const int *) input_items[0]; + + + for (int i = 0; i < noutput_items; i++) { + *optr++ = ~(inptr[i]); + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_not_ii.h b/gnuradio-core/src/lib/gengen/gr_not_ii.h new file mode 100644 index 00000000..6d1781dc --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_ii.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOT_II_H +#define INCLUDED_GR_NOT_II_H + +#include + +class gr_not_ii; +typedef boost::shared_ptr gr_not_ii_sptr; + +gr_not_ii_sptr gr_make_not_ii (); + +/*! + * \brief output = ~input_0 + * \ingroup math_blk + * + * bitwise boolean not across input stream. + */ +class gr_not_ii : public gr_sync_block +{ + friend gr_not_ii_sptr gr_make_not_ii (); + + gr_not_ii (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_not_ii.i b/gnuradio-core/src/lib/gengen/gr_not_ii.i new file mode 100644 index 00000000..18ecd9a4 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,not_ii) + +gr_not_ii_sptr gr_make_not_ii (); + +class gr_not_ii : public gr_sync_block +{ + private: + gr_not_ii (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_not_ss.cc b/gnuradio-core/src/lib/gengen/gr_not_ss.cc new file mode 100644 index 00000000..77a7d6dd --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_ss.cc @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_not_ss_sptr +gr_make_not_ss () +{ + return gr_not_ss_sptr (new gr_not_ss ()); +} + +gr_not_ss::gr_not_ss () + : gr_sync_block ("not_ss", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))) +{ +} + +int +gr_not_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + const short *inptr = (const short *) input_items[0]; + + + for (int i = 0; i < noutput_items; i++) { + *optr++ = ~(inptr[i]); + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_not_ss.h b/gnuradio-core/src/lib/gengen/gr_not_ss.h new file mode 100644 index 00000000..439ba85c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_ss.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_NOT_SS_H +#define INCLUDED_GR_NOT_SS_H + +#include + +class gr_not_ss; +typedef boost::shared_ptr gr_not_ss_sptr; + +gr_not_ss_sptr gr_make_not_ss (); + +/*! + * \brief output = ~input_0 + * \ingroup math_blk + * + * bitwise boolean not across input stream. + */ +class gr_not_ss : public gr_sync_block +{ + friend gr_not_ss_sptr gr_make_not_ss (); + + gr_not_ss (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_not_ss.i b/gnuradio-core/src/lib/gengen/gr_not_ss.i new file mode 100644 index 00000000..9407d4f6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_not_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,not_ss) + +gr_not_ss_sptr gr_make_not_ss (); + +class gr_not_ss : public gr_sync_block +{ + private: + gr_not_ss (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_or_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_or_XX.cc.t new file mode 100644 index 00000000..e118cdbb --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_XX.cc.t @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ () +{ + return @SPTR_NAME@ (new @NAME@ ()); +} + +@NAME@::@NAME@ () + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc | ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_or_XX.h.t b/gnuradio-core/src/lib/gengen/gr_or_XX.h.t new file mode 100644 index 00000000..3e02d9b1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_XX.h.t @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +/*! + * \brief output = input_0 | input_1 | , ... | input_N) + * \ingroup math_blk + * + * bitwise boolean or across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + + @NAME@ (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_or_XX.i.t b/gnuradio-core/src/lib/gengen/gr_or_XX.i.t new file mode 100644 index 00000000..e17d40ee --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_or_bb.cc b/gnuradio-core/src/lib/gengen/gr_or_bb.cc new file mode 100644 index 00000000..a983e36e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_bb.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_or_bb_sptr +gr_make_or_bb () +{ + return gr_or_bb_sptr (new gr_or_bb ()); +} + +gr_or_bb::gr_or_bb () + : gr_sync_block ("or_bb", + gr_make_io_signature (1, -1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))) +{ +} + +int +gr_or_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *optr = (unsigned char *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + unsigned char acc = ((unsigned char *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc | ((unsigned char *) input_items[j])[i]; + + *optr++ = (unsigned char) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_or_bb.h b/gnuradio-core/src/lib/gengen/gr_or_bb.h new file mode 100644 index 00000000..0f23f084 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_bb.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_OR_BB_H +#define INCLUDED_GR_OR_BB_H + +#include + +class gr_or_bb; +typedef boost::shared_ptr gr_or_bb_sptr; + +gr_or_bb_sptr gr_make_or_bb (); + +/*! + * \brief output = input_0 | input_1 | , ... | input_N) + * \ingroup math_blk + * + * bitwise boolean or across all input streams. + */ +class gr_or_bb : public gr_sync_block +{ + friend gr_or_bb_sptr gr_make_or_bb (); + + gr_or_bb (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_or_bb.i b/gnuradio-core/src/lib/gengen/gr_or_bb.i new file mode 100644 index 00000000..05a0526c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_bb.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,or_bb) + +gr_or_bb_sptr gr_make_or_bb (); + +class gr_or_bb : public gr_sync_block +{ + private: + gr_or_bb (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_or_ii.cc b/gnuradio-core/src/lib/gengen/gr_or_ii.cc new file mode 100644 index 00000000..f1c66402 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_ii.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_or_ii_sptr +gr_make_or_ii () +{ + return gr_or_ii_sptr (new gr_or_ii ()); +} + +gr_or_ii::gr_or_ii () + : gr_sync_block ("or_ii", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))) +{ +} + +int +gr_or_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc | ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_or_ii.h b/gnuradio-core/src/lib/gengen/gr_or_ii.h new file mode 100644 index 00000000..1977c902 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_ii.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_OR_II_H +#define INCLUDED_GR_OR_II_H + +#include + +class gr_or_ii; +typedef boost::shared_ptr gr_or_ii_sptr; + +gr_or_ii_sptr gr_make_or_ii (); + +/*! + * \brief output = input_0 | input_1 | , ... | input_N) + * \ingroup math_blk + * + * bitwise boolean or across all input streams. + */ +class gr_or_ii : public gr_sync_block +{ + friend gr_or_ii_sptr gr_make_or_ii (); + + gr_or_ii (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_or_ii.i b/gnuradio-core/src/lib/gengen/gr_or_ii.i new file mode 100644 index 00000000..8715bf9c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,or_ii) + +gr_or_ii_sptr gr_make_or_ii (); + +class gr_or_ii : public gr_sync_block +{ + private: + gr_or_ii (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_or_ss.cc b/gnuradio-core/src/lib/gengen/gr_or_ss.cc new file mode 100644 index 00000000..21b9821f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_ss.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_or_ss_sptr +gr_make_or_ss () +{ + return gr_or_ss_sptr (new gr_or_ss ()); +} + +gr_or_ss::gr_or_ss () + : gr_sync_block ("or_ss", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))) +{ +} + +int +gr_or_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc | ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_or_ss.h b/gnuradio-core/src/lib/gengen/gr_or_ss.h new file mode 100644 index 00000000..4d2f5e21 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_ss.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_OR_SS_H +#define INCLUDED_GR_OR_SS_H + +#include + +class gr_or_ss; +typedef boost::shared_ptr gr_or_ss_sptr; + +gr_or_ss_sptr gr_make_or_ss (); + +/*! + * \brief output = input_0 | input_1 | , ... | input_N) + * \ingroup math_blk + * + * bitwise boolean or across all input streams. + */ +class gr_or_ss : public gr_sync_block +{ + friend gr_or_ss_sptr gr_make_or_ss (); + + gr_or_ss (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_or_ss.i b/gnuradio-core/src/lib/gengen/gr_or_ss.i new file mode 100644 index 00000000..60aa183b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_or_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,or_ss) + +gr_or_ss_sptr gr_make_or_ss (); + +class gr_or_ss : public gr_sync_block +{ + private: + gr_or_ss (); +}; diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.cc.t rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.cc.t diff --git a/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t new file mode 100644 index 00000000..803098c0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.h.t @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. + * \ingroup converter_blk + * + * input: stream of @I_TYPE@; output: stream of @O_TYPE@ + * + * This is the inverse of gr_unpacked_to_packed_XX. + * + * The bits in the bytes or shorts input stream are grouped into chunks of + * \p bits_per_chunk bits and each resulting chunk is written right- + * justified to the output stream of bytes or shorts. + * All b or 16 bits of the each input bytes or short are processed. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX_ followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into + * arbitrary float or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class @NAME@ : public gr_block +{ + friend @SPTR_NAME@ + gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); + + @NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.i.t b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_XX.i.t rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_XX.i.t diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.cc b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.cc rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.cc diff --git a/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.h b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.h new file mode 100644 index 00000000..7a15761a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.h @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_PACKED_TO_UNPACKED_BB_H +#define INCLUDED_GR_PACKED_TO_UNPACKED_BB_H + +#include +#include + +class gr_packed_to_unpacked_bb; +typedef boost::shared_ptr gr_packed_to_unpacked_bb_sptr; + +gr_packed_to_unpacked_bb_sptr +gr_make_packed_to_unpacked_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. + * \ingroup converter_blk + * + * input: stream of unsigned char; output: stream of unsigned char + * + * This is the inverse of gr_unpacked_to_packed_XX. + * + * The bits in the bytes or shorts input stream are grouped into chunks of + * \p bits_per_chunk bits and each resulting chunk is written right- + * justified to the output stream of bytes or shorts. + * All b or 16 bits of the each input bytes or short are processed. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX_ followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into + * arbitrary float or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_packed_to_unpacked_bb : public gr_block +{ + friend gr_packed_to_unpacked_bb_sptr + gr_make_packed_to_unpacked_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); + + gr_packed_to_unpacked_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.i b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_bb.i rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_bb.i diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.cc b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.cc rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.h b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.h new file mode 100644 index 00000000..cfbc6c84 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.h @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_PACKED_TO_UNPACKED_II_H +#define INCLUDED_GR_PACKED_TO_UNPACKED_II_H + +#include +#include + +class gr_packed_to_unpacked_ii; +typedef boost::shared_ptr gr_packed_to_unpacked_ii_sptr; + +gr_packed_to_unpacked_ii_sptr +gr_make_packed_to_unpacked_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. + * \ingroup converter_blk + * + * input: stream of int; output: stream of int + * + * This is the inverse of gr_unpacked_to_packed_XX. + * + * The bits in the bytes or shorts input stream are grouped into chunks of + * \p bits_per_chunk bits and each resulting chunk is written right- + * justified to the output stream of bytes or shorts. + * All b or 16 bits of the each input bytes or short are processed. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX_ followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into + * arbitrary float or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_packed_to_unpacked_ii : public gr_block +{ + friend gr_packed_to_unpacked_ii_sptr + gr_make_packed_to_unpacked_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); + + gr_packed_to_unpacked_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.i b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_ii.i rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ii.i diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.cc b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.cc rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.h b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.h new file mode 100644 index 00000000..aa4e71d7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.h @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_PACKED_TO_UNPACKED_SS_H +#define INCLUDED_GR_PACKED_TO_UNPACKED_SS_H + +#include +#include + +class gr_packed_to_unpacked_ss; +typedef boost::shared_ptr gr_packed_to_unpacked_ss_sptr; + +gr_packed_to_unpacked_ss_sptr +gr_make_packed_to_unpacked_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of packed bytes or shorts to stream of unpacked bytes or shorts. + * \ingroup converter_blk + * + * input: stream of short; output: stream of short + * + * This is the inverse of gr_unpacked_to_packed_XX. + * + * The bits in the bytes or shorts input stream are grouped into chunks of + * \p bits_per_chunk bits and each resulting chunk is written right- + * justified to the output stream of bytes or shorts. + * All b or 16 bits of the each input bytes or short are processed. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX_ followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into + * arbitrary float or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ + +class gr_packed_to_unpacked_ss : public gr_block +{ + friend gr_packed_to_unpacked_ss_sptr + gr_make_packed_to_unpacked_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); + + gr_packed_to_unpacked_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } + +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.i b/gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_packed_to_unpacked_ss.i rename to gnuradio-core/src/lib/gengen/gr_packed_to_unpacked_ss.i diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t new file mode 100644 index 00000000..ce631692 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.cc.t @@ -0,0 +1,111 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) +{ + return @SPTR_NAME@ (new @NAME@ (threshold_factor_rise, + threshold_factor_fall, + look_ahead, alpha)); +} + +@NAME@::@NAME@ (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, 1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (char))), + d_threshold_factor_rise(threshold_factor_rise), + d_threshold_factor_fall(threshold_factor_fall), + d_look_ahead(look_ahead), d_avg_alpha(alpha), d_avg(0), d_found(0) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @I_TYPE@ *iptr = (@I_TYPE@ *) input_items[0]; + char *optr = (char *) output_items[0]; + + memset(optr, 0, noutput_items*sizeof(char)); + + @I_TYPE@ peak_val = -(@I_TYPE@)INFINITY; + int peak_ind = 0; + unsigned char state = 0; + int i = 0; + + //printf("noutput_items %d\n",noutput_items); + while(i < noutput_items) { + if(state == 0) { // below threshold + if(iptr[i] > d_avg*d_threshold_factor_rise) { + state = 1; + } + else { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + } + else if(state == 1) { // above threshold, have not found peak + //printf("Entered State 1: %f i: %d noutput_items: %d\n", iptr[i], i, noutput_items); + if(iptr[i] > peak_val) { + peak_val = iptr[i]; + peak_ind = i; + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else if (iptr[i] > d_avg*d_threshold_factor_fall) { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else { + optr[peak_ind] = 1; + state = 0; + peak_val = -(@I_TYPE@)INFINITY; + //printf("Leaving State 1: Peak: %f Peak Ind: %d i: %d noutput_items: %d\n", + //peak_val, peak_ind, i, noutput_items); + } + } + } + + if(state == 0) { + //printf("Leave in State 0, produced %d\n",noutput_items); + return noutput_items; + } + else { // only return up to passing the threshold + //printf("Leave in State 1, only produced %d of %d\n",peak_ind,noutput_items); + return peak_ind+1; + } +} diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t new file mode 100644 index 00000000..d6a8caf7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.h.t @@ -0,0 +1,125 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha = 0.001); + +/*! + * \brief Detect the peak of a signal + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1, + * or it outputs 0's. + * + * \param threshold_factor_rise The threshold factor determins when a peak + * has started. An average of the signal is calculated and when the + * value of the signal goes over threshold_factor_rise*average, we + * start looking for a peak. + * \param threshold_factor_fall The threshold factor determins when a peak + * has ended. An average of the signal is calculated and when the + * value of the signal goes bellow threshold_factor_fall*average, we + * stop looking for a peak. + * \param look_ahead The look-ahead value is used when the threshold is + * found to look if there another peak within this step range. + * If there is a larger value, we set that as the peak and look ahead + * again. This is continued until the highest point is found with + * This look-ahead range. + * \param alpha The gain value of a moving average filter + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + @NAME@ (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + private: + float d_threshold_factor_rise; + float d_threshold_factor_fall; + int d_look_ahead; + float d_avg_alpha; + float d_avg; + unsigned char d_found; + + public: + + /*! \brief Set the threshold factor value for the rise time + * \param thr new threshold factor + */ + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + + /*! \brief Set the threshold factor value for the fall time + * \param thr new threshold factor + */ + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + + /*! \brief Set the look-ahead factor + * \param look new look-ahead factor + */ + void set_look_ahead(int look) { d_look_ahead = look; } + + /*! \brief Set the running average alpha + * \param alpha new alpha for running average + */ + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + /*! \brief Get the threshold factor value for the rise time + * \return threshold factor + */ + float threshold_factor_rise() { return d_threshold_factor_rise; } + + /*! \brief Get the threshold factor value for the fall time + * \return threshold factor + */ + float threshold_factor_fall() { return d_threshold_factor_fall; } + + /*! \brief Get the look-ahead factor value + * \return look-ahead factor + */ + int look_ahead() { return d_look_ahead; } + + /*! \brief Get the alpha value of the running average + * \return alpha + */ + float alpha() { return d_avg_alpha; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.i.t b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.i.t new file mode 100644 index 00000000..af98945b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_XX.i.t @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha=0.001); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + public: + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + void set_look_ahead(int look) { d_look_ahead = look; } + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + float threshold_factor_rise() { return d_threshold_factor_rise; } + float threshold_factor_fall() { return d_threshold_factor_fall; } + int look_ahead() { return d_look_ahead; } + float alpha() { return d_avg_alpha; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.cc b/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.cc new file mode 100644 index 00000000..2c7b0d48 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.cc @@ -0,0 +1,111 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_peak_detector_fb_sptr +gr_make_peak_detector_fb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) +{ + return gr_peak_detector_fb_sptr (new gr_peak_detector_fb (threshold_factor_rise, + threshold_factor_fall, + look_ahead, alpha)); +} + +gr_peak_detector_fb::gr_peak_detector_fb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) + : gr_sync_block ("peak_detector_fb", + gr_make_io_signature (1, 1, sizeof (float)), + gr_make_io_signature (1, 1, sizeof (char))), + d_threshold_factor_rise(threshold_factor_rise), + d_threshold_factor_fall(threshold_factor_fall), + d_look_ahead(look_ahead), d_avg_alpha(alpha), d_avg(0), d_found(0) +{ +} + +int +gr_peak_detector_fb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *iptr = (float *) input_items[0]; + char *optr = (char *) output_items[0]; + + memset(optr, 0, noutput_items*sizeof(char)); + + float peak_val = -(float)INFINITY; + int peak_ind = 0; + unsigned char state = 0; + int i = 0; + + //printf("noutput_items %d\n",noutput_items); + while(i < noutput_items) { + if(state == 0) { // below threshold + if(iptr[i] > d_avg*d_threshold_factor_rise) { + state = 1; + } + else { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + } + else if(state == 1) { // above threshold, have not found peak + //printf("Entered State 1: %f i: %d noutput_items: %d\n", iptr[i], i, noutput_items); + if(iptr[i] > peak_val) { + peak_val = iptr[i]; + peak_ind = i; + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else if (iptr[i] > d_avg*d_threshold_factor_fall) { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else { + optr[peak_ind] = 1; + state = 0; + peak_val = -(float)INFINITY; + //printf("Leaving State 1: Peak: %f Peak Ind: %d i: %d noutput_items: %d\n", + //peak_val, peak_ind, i, noutput_items); + } + } + } + + if(state == 0) { + //printf("Leave in State 0, produced %d\n",noutput_items); + return noutput_items; + } + else { // only return up to passing the threshold + //printf("Leave in State 1, only produced %d of %d\n",peak_ind,noutput_items); + return peak_ind+1; + } +} diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.h b/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.h new file mode 100644 index 00000000..2b5ba46d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.h @@ -0,0 +1,125 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_PEAK_DETECTOR_FB_H +#define INCLUDED_GR_PEAK_DETECTOR_FB_H + +#include + +class gr_peak_detector_fb; +typedef boost::shared_ptr gr_peak_detector_fb_sptr; + +gr_peak_detector_fb_sptr gr_make_peak_detector_fb (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha = 0.001); + +/*! + * \brief Detect the peak of a signal + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1, + * or it outputs 0's. + * + * \param threshold_factor_rise The threshold factor determins when a peak + * has started. An average of the signal is calculated and when the + * value of the signal goes over threshold_factor_rise*average, we + * start looking for a peak. + * \param threshold_factor_fall The threshold factor determins when a peak + * has ended. An average of the signal is calculated and when the + * value of the signal goes bellow threshold_factor_fall*average, we + * stop looking for a peak. + * \param look_ahead The look-ahead value is used when the threshold is + * found to look if there another peak within this step range. + * If there is a larger value, we set that as the peak and look ahead + * again. This is continued until the highest point is found with + * This look-ahead range. + * \param alpha The gain value of a moving average filter + */ +class gr_peak_detector_fb : public gr_sync_block +{ + friend gr_peak_detector_fb_sptr gr_make_peak_detector_fb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + gr_peak_detector_fb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + private: + float d_threshold_factor_rise; + float d_threshold_factor_fall; + int d_look_ahead; + float d_avg_alpha; + float d_avg; + unsigned char d_found; + + public: + + /*! \brief Set the threshold factor value for the rise time + * \param thr new threshold factor + */ + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + + /*! \brief Set the threshold factor value for the fall time + * \param thr new threshold factor + */ + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + + /*! \brief Set the look-ahead factor + * \param look new look-ahead factor + */ + void set_look_ahead(int look) { d_look_ahead = look; } + + /*! \brief Set the running average alpha + * \param alpha new alpha for running average + */ + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + /*! \brief Get the threshold factor value for the rise time + * \return threshold factor + */ + float threshold_factor_rise() { return d_threshold_factor_rise; } + + /*! \brief Get the threshold factor value for the fall time + * \return threshold factor + */ + float threshold_factor_fall() { return d_threshold_factor_fall; } + + /*! \brief Get the look-ahead factor value + * \return look-ahead factor + */ + int look_ahead() { return d_look_ahead; } + + /*! \brief Get the alpha value of the running average + * \return alpha + */ + float alpha() { return d_avg_alpha; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.i b/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.i new file mode 100644 index 00000000..5bee4410 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_fb.i @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,peak_detector_fb) + +gr_peak_detector_fb_sptr gr_make_peak_detector_fb (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha=0.001); + +class gr_peak_detector_fb : public gr_sync_block +{ + private: + gr_peak_detector_fb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + public: + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + void set_look_ahead(int look) { d_look_ahead = look; } + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + float threshold_factor_rise() { return d_threshold_factor_rise; } + float threshold_factor_fall() { return d_threshold_factor_fall; } + int look_ahead() { return d_look_ahead; } + float alpha() { return d_avg_alpha; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.cc b/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.cc new file mode 100644 index 00000000..19c1def4 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.cc @@ -0,0 +1,111 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_peak_detector_ib_sptr +gr_make_peak_detector_ib (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) +{ + return gr_peak_detector_ib_sptr (new gr_peak_detector_ib (threshold_factor_rise, + threshold_factor_fall, + look_ahead, alpha)); +} + +gr_peak_detector_ib::gr_peak_detector_ib (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) + : gr_sync_block ("peak_detector_ib", + gr_make_io_signature (1, 1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (char))), + d_threshold_factor_rise(threshold_factor_rise), + d_threshold_factor_fall(threshold_factor_fall), + d_look_ahead(look_ahead), d_avg_alpha(alpha), d_avg(0), d_found(0) +{ +} + +int +gr_peak_detector_ib::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *iptr = (int *) input_items[0]; + char *optr = (char *) output_items[0]; + + memset(optr, 0, noutput_items*sizeof(char)); + + int peak_val = -(int)INFINITY; + int peak_ind = 0; + unsigned char state = 0; + int i = 0; + + //printf("noutput_items %d\n",noutput_items); + while(i < noutput_items) { + if(state == 0) { // below threshold + if(iptr[i] > d_avg*d_threshold_factor_rise) { + state = 1; + } + else { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + } + else if(state == 1) { // above threshold, have not found peak + //printf("Entered State 1: %f i: %d noutput_items: %d\n", iptr[i], i, noutput_items); + if(iptr[i] > peak_val) { + peak_val = iptr[i]; + peak_ind = i; + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else if (iptr[i] > d_avg*d_threshold_factor_fall) { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else { + optr[peak_ind] = 1; + state = 0; + peak_val = -(int)INFINITY; + //printf("Leaving State 1: Peak: %f Peak Ind: %d i: %d noutput_items: %d\n", + //peak_val, peak_ind, i, noutput_items); + } + } + } + + if(state == 0) { + //printf("Leave in State 0, produced %d\n",noutput_items); + return noutput_items; + } + else { // only return up to passing the threshold + //printf("Leave in State 1, only produced %d of %d\n",peak_ind,noutput_items); + return peak_ind+1; + } +} diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.h b/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.h new file mode 100644 index 00000000..97fcc4f8 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.h @@ -0,0 +1,125 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_PEAK_DETECTOR_IB_H +#define INCLUDED_GR_PEAK_DETECTOR_IB_H + +#include + +class gr_peak_detector_ib; +typedef boost::shared_ptr gr_peak_detector_ib_sptr; + +gr_peak_detector_ib_sptr gr_make_peak_detector_ib (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha = 0.001); + +/*! + * \brief Detect the peak of a signal + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1, + * or it outputs 0's. + * + * \param threshold_factor_rise The threshold factor determins when a peak + * has started. An average of the signal is calculated and when the + * value of the signal goes over threshold_factor_rise*average, we + * start looking for a peak. + * \param threshold_factor_fall The threshold factor determins when a peak + * has ended. An average of the signal is calculated and when the + * value of the signal goes bellow threshold_factor_fall*average, we + * stop looking for a peak. + * \param look_ahead The look-ahead value is used when the threshold is + * found to look if there another peak within this step range. + * If there is a larger value, we set that as the peak and look ahead + * again. This is continued until the highest point is found with + * This look-ahead range. + * \param alpha The gain value of a moving average filter + */ +class gr_peak_detector_ib : public gr_sync_block +{ + friend gr_peak_detector_ib_sptr gr_make_peak_detector_ib (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + gr_peak_detector_ib (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + private: + float d_threshold_factor_rise; + float d_threshold_factor_fall; + int d_look_ahead; + float d_avg_alpha; + float d_avg; + unsigned char d_found; + + public: + + /*! \brief Set the threshold factor value for the rise time + * \param thr new threshold factor + */ + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + + /*! \brief Set the threshold factor value for the fall time + * \param thr new threshold factor + */ + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + + /*! \brief Set the look-ahead factor + * \param look new look-ahead factor + */ + void set_look_ahead(int look) { d_look_ahead = look; } + + /*! \brief Set the running average alpha + * \param alpha new alpha for running average + */ + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + /*! \brief Get the threshold factor value for the rise time + * \return threshold factor + */ + float threshold_factor_rise() { return d_threshold_factor_rise; } + + /*! \brief Get the threshold factor value for the fall time + * \return threshold factor + */ + float threshold_factor_fall() { return d_threshold_factor_fall; } + + /*! \brief Get the look-ahead factor value + * \return look-ahead factor + */ + int look_ahead() { return d_look_ahead; } + + /*! \brief Get the alpha value of the running average + * \return alpha + */ + float alpha() { return d_avg_alpha; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.i b/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.i new file mode 100644 index 00000000..c21c43db --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_ib.i @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,peak_detector_ib) + +gr_peak_detector_ib_sptr gr_make_peak_detector_ib (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha=0.001); + +class gr_peak_detector_ib : public gr_sync_block +{ + private: + gr_peak_detector_ib (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + public: + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + void set_look_ahead(int look) { d_look_ahead = look; } + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + float threshold_factor_rise() { return d_threshold_factor_rise; } + float threshold_factor_fall() { return d_threshold_factor_fall; } + int look_ahead() { return d_look_ahead; } + float alpha() { return d_avg_alpha; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.cc b/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.cc new file mode 100644 index 00000000..63abb84c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.cc @@ -0,0 +1,111 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +gr_peak_detector_sb_sptr +gr_make_peak_detector_sb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) +{ + return gr_peak_detector_sb_sptr (new gr_peak_detector_sb (threshold_factor_rise, + threshold_factor_fall, + look_ahead, alpha)); +} + +gr_peak_detector_sb::gr_peak_detector_sb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha) + : gr_sync_block ("peak_detector_sb", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (char))), + d_threshold_factor_rise(threshold_factor_rise), + d_threshold_factor_fall(threshold_factor_fall), + d_look_ahead(look_ahead), d_avg_alpha(alpha), d_avg(0), d_found(0) +{ +} + +int +gr_peak_detector_sb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *iptr = (short *) input_items[0]; + char *optr = (char *) output_items[0]; + + memset(optr, 0, noutput_items*sizeof(char)); + + short peak_val = -(short)INFINITY; + int peak_ind = 0; + unsigned char state = 0; + int i = 0; + + //printf("noutput_items %d\n",noutput_items); + while(i < noutput_items) { + if(state == 0) { // below threshold + if(iptr[i] > d_avg*d_threshold_factor_rise) { + state = 1; + } + else { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + } + else if(state == 1) { // above threshold, have not found peak + //printf("Entered State 1: %f i: %d noutput_items: %d\n", iptr[i], i, noutput_items); + if(iptr[i] > peak_val) { + peak_val = iptr[i]; + peak_ind = i; + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else if (iptr[i] > d_avg*d_threshold_factor_fall) { + d_avg = (d_avg_alpha)*iptr[i] + (1-d_avg_alpha)*d_avg; + i++; + } + else { + optr[peak_ind] = 1; + state = 0; + peak_val = -(short)INFINITY; + //printf("Leaving State 1: Peak: %f Peak Ind: %d i: %d noutput_items: %d\n", + //peak_val, peak_ind, i, noutput_items); + } + } + } + + if(state == 0) { + //printf("Leave in State 0, produced %d\n",noutput_items); + return noutput_items; + } + else { // only return up to passing the threshold + //printf("Leave in State 1, only produced %d of %d\n",peak_ind,noutput_items); + return peak_ind+1; + } +} diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.h b/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.h new file mode 100644 index 00000000..6ceabb90 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.h @@ -0,0 +1,125 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_PEAK_DETECTOR_SB_H +#define INCLUDED_GR_PEAK_DETECTOR_SB_H + +#include + +class gr_peak_detector_sb; +typedef boost::shared_ptr gr_peak_detector_sb_sptr; + +gr_peak_detector_sb_sptr gr_make_peak_detector_sb (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha = 0.001); + +/*! + * \brief Detect the peak of a signal + * \ingroup level_blk + * + * If a peak is detected, this block outputs a 1, + * or it outputs 0's. + * + * \param threshold_factor_rise The threshold factor determins when a peak + * has started. An average of the signal is calculated and when the + * value of the signal goes over threshold_factor_rise*average, we + * start looking for a peak. + * \param threshold_factor_fall The threshold factor determins when a peak + * has ended. An average of the signal is calculated and when the + * value of the signal goes bellow threshold_factor_fall*average, we + * stop looking for a peak. + * \param look_ahead The look-ahead value is used when the threshold is + * found to look if there another peak within this step range. + * If there is a larger value, we set that as the peak and look ahead + * again. This is continued until the highest point is found with + * This look-ahead range. + * \param alpha The gain value of a moving average filter + */ +class gr_peak_detector_sb : public gr_sync_block +{ + friend gr_peak_detector_sb_sptr gr_make_peak_detector_sb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + gr_peak_detector_sb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + private: + float d_threshold_factor_rise; + float d_threshold_factor_fall; + int d_look_ahead; + float d_avg_alpha; + float d_avg; + unsigned char d_found; + + public: + + /*! \brief Set the threshold factor value for the rise time + * \param thr new threshold factor + */ + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + + /*! \brief Set the threshold factor value for the fall time + * \param thr new threshold factor + */ + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + + /*! \brief Set the look-ahead factor + * \param look new look-ahead factor + */ + void set_look_ahead(int look) { d_look_ahead = look; } + + /*! \brief Set the running average alpha + * \param alpha new alpha for running average + */ + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + /*! \brief Get the threshold factor value for the rise time + * \return threshold factor + */ + float threshold_factor_rise() { return d_threshold_factor_rise; } + + /*! \brief Get the threshold factor value for the fall time + * \return threshold factor + */ + float threshold_factor_fall() { return d_threshold_factor_fall; } + + /*! \brief Get the look-ahead factor value + * \return look-ahead factor + */ + int look_ahead() { return d_look_ahead; } + + /*! \brief Get the alpha value of the running average + * \return alpha + */ + float alpha() { return d_avg_alpha; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.i b/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.i new file mode 100644 index 00000000..83dfc0cb --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_peak_detector_sb.i @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,peak_detector_sb) + +gr_peak_detector_sb_sptr gr_make_peak_detector_sb (float threshold_factor_rise = 0.25, + float threshold_factor_fall = 0.40, + int look_ahead = 10, + float alpha=0.001); + +class gr_peak_detector_sb : public gr_sync_block +{ + private: + gr_peak_detector_sb (float threshold_factor_rise, + float threshold_factor_fall, + int look_ahead, float alpha); + + public: + void set_threshold_factor_rise(float thr) { d_threshold_factor_rise = thr; } + void set_threshold_factor_fall(float thr) { d_threshold_factor_fall = thr; } + void set_look_ahead(int look) { d_look_ahead = look; } + void set_alpha(int alpha) { d_avg_alpha = alpha; } + + float threshold_factor_rise() { return d_threshold_factor_rise; } + float threshold_factor_fall() { return d_threshold_factor_fall; } + int look_ahead() { return d_look_ahead; } + float alpha() { return d_avg_alpha; } +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.cc.t new file mode 100644 index 00000000..52538286 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.cc.t @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ () +{ + return @SPTR_NAME@ (new @NAME@ ()); +} + +@NAME@::@NAME@ () + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature2 (2, 2, sizeof (@I_TYPE@), sizeof(char)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))), + d_data(0) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @I_TYPE@ *iptr = (@I_TYPE@ *) input_items[0]; + const char *ctrl = (const char *) input_items[1]; + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + if(ctrl[i]) { + d_data = iptr[i]; + } + optr[i] = d_data; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t new file mode 100644 index 00000000..b9648732 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.h.t @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +/*! + * \brief sample and hold circuit + * \ingroup level_blk + * + * Samples the data stream (input stream 0) and holds the value + * if the control signal is 1 (intput stream 1). + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + + @NAME@ (); + + private: + @O_TYPE@ d_data; + + public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.i.t b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.i.t new file mode 100644 index 00000000..342e6a88 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.cc b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.cc new file mode 100644 index 00000000..2d7d6e23 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sample_and_hold_bb_sptr +gr_make_sample_and_hold_bb () +{ + return gr_sample_and_hold_bb_sptr (new gr_sample_and_hold_bb ()); +} + +gr_sample_and_hold_bb::gr_sample_and_hold_bb () + : gr_sync_block ("sample_and_hold_bb", + gr_make_io_signature2 (2, 2, sizeof (unsigned char), sizeof(char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))), + d_data(0) +{ +} + +int +gr_sample_and_hold_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *iptr = (unsigned char *) input_items[0]; + const char *ctrl = (const char *) input_items[1]; + unsigned char *optr = (unsigned char *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + if(ctrl[i]) { + d_data = iptr[i]; + } + optr[i] = d_data; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.h b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.h new file mode 100644 index 00000000..278eef06 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SAMPLE_AND_HOLD_BB_H +#define INCLUDED_GR_SAMPLE_AND_HOLD_BB_H + +#include + +class gr_sample_and_hold_bb; +typedef boost::shared_ptr gr_sample_and_hold_bb_sptr; + +gr_sample_and_hold_bb_sptr gr_make_sample_and_hold_bb (); + +/*! + * \brief sample and hold circuit + * \ingroup level_blk + * + * Samples the data stream (input stream 0) and holds the value + * if the control signal is 1 (intput stream 1). + */ +class gr_sample_and_hold_bb : public gr_sync_block +{ + friend gr_sample_and_hold_bb_sptr gr_make_sample_and_hold_bb (); + + gr_sample_and_hold_bb (); + + private: + unsigned char d_data; + + public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.i b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.i new file mode 100644 index 00000000..3f33e37a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_bb.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sample_and_hold_bb) + +gr_sample_and_hold_bb_sptr gr_make_sample_and_hold_bb (); + +class gr_sample_and_hold_bb : public gr_sync_block +{ + private: + gr_sample_and_hold_bb (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.cc b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.cc new file mode 100644 index 00000000..a3042e7a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sample_and_hold_ff_sptr +gr_make_sample_and_hold_ff () +{ + return gr_sample_and_hold_ff_sptr (new gr_sample_and_hold_ff ()); +} + +gr_sample_and_hold_ff::gr_sample_and_hold_ff () + : gr_sync_block ("sample_and_hold_ff", + gr_make_io_signature2 (2, 2, sizeof (float), sizeof(char)), + gr_make_io_signature (1, 1, sizeof (float))), + d_data(0) +{ +} + +int +gr_sample_and_hold_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *iptr = (float *) input_items[0]; + const char *ctrl = (const char *) input_items[1]; + float *optr = (float *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + if(ctrl[i]) { + d_data = iptr[i]; + } + optr[i] = d_data; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.h b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.h new file mode 100644 index 00000000..c91ed8c6 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SAMPLE_AND_HOLD_FF_H +#define INCLUDED_GR_SAMPLE_AND_HOLD_FF_H + +#include + +class gr_sample_and_hold_ff; +typedef boost::shared_ptr gr_sample_and_hold_ff_sptr; + +gr_sample_and_hold_ff_sptr gr_make_sample_and_hold_ff (); + +/*! + * \brief sample and hold circuit + * \ingroup level_blk + * + * Samples the data stream (input stream 0) and holds the value + * if the control signal is 1 (intput stream 1). + */ +class gr_sample_and_hold_ff : public gr_sync_block +{ + friend gr_sample_and_hold_ff_sptr gr_make_sample_and_hold_ff (); + + gr_sample_and_hold_ff (); + + private: + float d_data; + + public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.i b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.i new file mode 100644 index 00000000..d54c314e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ff.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sample_and_hold_ff) + +gr_sample_and_hold_ff_sptr gr_make_sample_and_hold_ff (); + +class gr_sample_and_hold_ff : public gr_sync_block +{ + private: + gr_sample_and_hold_ff (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.cc b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.cc new file mode 100644 index 00000000..149d98dd --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sample_and_hold_ii_sptr +gr_make_sample_and_hold_ii () +{ + return gr_sample_and_hold_ii_sptr (new gr_sample_and_hold_ii ()); +} + +gr_sample_and_hold_ii::gr_sample_and_hold_ii () + : gr_sync_block ("sample_and_hold_ii", + gr_make_io_signature2 (2, 2, sizeof (int), sizeof(char)), + gr_make_io_signature (1, 1, sizeof (int))), + d_data(0) +{ +} + +int +gr_sample_and_hold_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *iptr = (int *) input_items[0]; + const char *ctrl = (const char *) input_items[1]; + int *optr = (int *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + if(ctrl[i]) { + d_data = iptr[i]; + } + optr[i] = d_data; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.h b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.h new file mode 100644 index 00000000..a3e79b72 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SAMPLE_AND_HOLD_II_H +#define INCLUDED_GR_SAMPLE_AND_HOLD_II_H + +#include + +class gr_sample_and_hold_ii; +typedef boost::shared_ptr gr_sample_and_hold_ii_sptr; + +gr_sample_and_hold_ii_sptr gr_make_sample_and_hold_ii (); + +/*! + * \brief sample and hold circuit + * \ingroup level_blk + * + * Samples the data stream (input stream 0) and holds the value + * if the control signal is 1 (intput stream 1). + */ +class gr_sample_and_hold_ii : public gr_sync_block +{ + friend gr_sample_and_hold_ii_sptr gr_make_sample_and_hold_ii (); + + gr_sample_and_hold_ii (); + + private: + int d_data; + + public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.i b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.i new file mode 100644 index 00000000..bee2b931 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sample_and_hold_ii) + +gr_sample_and_hold_ii_sptr gr_make_sample_and_hold_ii (); + +class gr_sample_and_hold_ii : public gr_sync_block +{ + private: + gr_sample_and_hold_ii (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.cc b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.cc new file mode 100644 index 00000000..9f23d10c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sample_and_hold_ss_sptr +gr_make_sample_and_hold_ss () +{ + return gr_sample_and_hold_ss_sptr (new gr_sample_and_hold_ss ()); +} + +gr_sample_and_hold_ss::gr_sample_and_hold_ss () + : gr_sync_block ("sample_and_hold_ss", + gr_make_io_signature2 (2, 2, sizeof (short), sizeof(char)), + gr_make_io_signature (1, 1, sizeof (short))), + d_data(0) +{ +} + +int +gr_sample_and_hold_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *iptr = (short *) input_items[0]; + const char *ctrl = (const char *) input_items[1]; + short *optr = (short *) output_items[0]; + + for (int i = 0; i < noutput_items; i++){ + if(ctrl[i]) { + d_data = iptr[i]; + } + optr[i] = d_data; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.h b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.h new file mode 100644 index 00000000..2053c620 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SAMPLE_AND_HOLD_SS_H +#define INCLUDED_GR_SAMPLE_AND_HOLD_SS_H + +#include + +class gr_sample_and_hold_ss; +typedef boost::shared_ptr gr_sample_and_hold_ss_sptr; + +gr_sample_and_hold_ss_sptr gr_make_sample_and_hold_ss (); + +/*! + * \brief sample and hold circuit + * \ingroup level_blk + * + * Samples the data stream (input stream 0) and holds the value + * if the control signal is 1 (intput stream 1). + */ +class gr_sample_and_hold_ss : public gr_sync_block +{ + friend gr_sample_and_hold_ss_sptr gr_make_sample_and_hold_ss (); + + gr_sample_and_hold_ss (); + + private: + short d_data; + + public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.i b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.i new file mode 100644 index 00000000..f3c04a43 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sample_and_hold_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sample_and_hold_ss) + +gr_sample_and_hold_ss_sptr gr_make_sample_and_hold_ss (); + +class gr_sample_and_hold_ss : public gr_sync_block +{ + private: + gr_sample_and_hold_ss (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_X.cc.t b/gnuradio-core/src/lib/gengen/gr_sig_source_X.cc.t new file mode 100644 index 00000000..0694df31 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_X.cc.t @@ -0,0 +1,242 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include <@NAME@.h> +#include +#include +#include +#include + + +@NAME@::@NAME@ (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, @TYPE@ offset) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (@TYPE@))), + d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), + d_ampl (ampl), d_offset (offset) +{ + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +@NAME@_sptr +gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, @TYPE@ offset) +{ + return @NAME@_sptr (new @NAME@ (sampling_freq, waveform, frequency, ampl, offset)); +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @TYPE@ *optr = (@TYPE@ *) output_items[0]; + @TYPE@ t; + + switch (d_waveform){ + +#if @IS_COMPLEX@ // complex? + + case GR_CONST_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + case GR_COS_WAVE: + d_nco.sincos (optr, noutput_items, d_ampl); + if (d_offset == gr_complex(0,0)) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* Implements a real square wave high from -PI to 0. + * The imaginary square wave leads by 90 deg. + */ + case GR_SQR_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2) + optr[i] = gr_complex(d_ampl, 0)+d_offset; + else if (d_nco.get_phase() < 0) + optr[i] = gr_complex(d_ampl, d_ampl)+d_offset; + else if (d_nco.get_phase() < M_PI/2) + optr[i] = gr_complex(0, d_ampl)+d_offset; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* Implements a real triangle wave rising from -PI to 0 and + * falling from 0 to PI. The imaginary triangle wave leads by 90 deg. + */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI - d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < 0){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < M_PI/2){ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else{ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI + 3*d_ampl/2)+d_offset; + } + d_nco.step(); + } + break; + + /* Implements a real saw tooth wave rising from -PI to PI. + * The imaginary saw tooth wave leads by 90 deg. + */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + 5*d_ampl/4)+d_offset; + } + else{ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/4)+d_offset; + } + d_nco.step(); + } + break; + +#else // nope... + + case GR_CONST_WAVE: + t = (@TYPE@) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + d_nco.sin (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + case GR_COS_WAVE: + d_nco.cos (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* The square wave is high from -PI to 0. */ + case GR_SQR_WAVE: + t = (@TYPE@) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < 0) + optr[i] = t; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* The triangle wave rises from -PI to 0 and falls from 0 to PI. */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + double t = d_ampl*d_nco.get_phase()/M_PI; + if (d_nco.get_phase() < 0) + optr[i] = static_cast<@TYPE@>(t + d_ampl + d_offset); + else + optr[i] = static_cast<@TYPE@>(-1*t + d_ampl + d_offset); + d_nco.step(); + } + break; + + /* The saw tooth wave rises from -PI to PI. */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + t = static_cast<@TYPE@>(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2 + d_offset); + optr[i] = t; + d_nco.step(); + } + break; + +#endif + + default: + throw std::runtime_error ("gr_sig_source: invalid waveform"); + } + + return noutput_items; +} + +void +@NAME@::set_sampling_freq (double sampling_freq) +{ + d_sampling_freq = sampling_freq; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +@NAME@::set_waveform (gr_waveform_t waveform) +{ + d_waveform = waveform; +} + +void +@NAME@::set_frequency (double frequency) +{ + d_frequency = frequency; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +@NAME@::set_amplitude (double ampl) +{ + d_ampl = ampl; +} + +void +@NAME@::set_offset (@TYPE@ offset) +{ + d_offset = offset; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t new file mode 100644 index 00000000..9906d16a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_X.h.t @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include +#include +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @NAME@_sptr; + +/*! + * \brief signal generator with @TYPE@ output. + * \ingroup source_blk + */ + +class @NAME@ : public gr_sync_block { + friend @NAME@_sptr + gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, @TYPE@ offset); + + double d_sampling_freq; + gr_waveform_t d_waveform; + double d_frequency; + double d_ampl; + @TYPE@ d_offset; + gr_fxpt_nco d_nco; + + + @NAME@ (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, @TYPE@ offset); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // ACCESSORS + double sampling_freq () const { return d_sampling_freq; } + gr_waveform_t waveform () const { return d_waveform; } + double frequency () const { return d_frequency; } + double amplitude () const { return d_ampl; } + @TYPE@ offset () const { return d_offset; } + + // MANIPULATORS + void set_sampling_freq (double sampling_freq); + void set_waveform (gr_waveform_t waveform); + void set_frequency (double frequency); + void set_amplitude (double ampl); + void set_offset (@TYPE@ offset); +}; + +@NAME@_sptr +gr_make_@BASE_NAME@ (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, @TYPE@ offset = 0); + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_X.i.t b/gnuradio-core/src/lib/gengen/gr_sig_source_X.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_sig_source_X.i.t rename to gnuradio-core/src/lib/gengen/gr_sig_source_X.i.t diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_c.cc b/gnuradio-core/src/lib/gengen/gr_sig_source_c.cc new file mode 100644 index 00000000..154e1d4b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_c.cc @@ -0,0 +1,242 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include + + +gr_sig_source_c::gr_sig_source_c (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, gr_complex offset) + : gr_sync_block ("sig_source_c", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (gr_complex))), + d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), + d_ampl (ampl), d_offset (offset) +{ + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +gr_sig_source_c_sptr +gr_make_sig_source_c (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, gr_complex offset) +{ + return gr_sig_source_c_sptr (new gr_sig_source_c (sampling_freq, waveform, frequency, ampl, offset)); +} + +int +gr_sig_source_c::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *optr = (gr_complex *) output_items[0]; + gr_complex t; + + switch (d_waveform){ + +#if 1 // complex? + + case GR_CONST_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + case GR_COS_WAVE: + d_nco.sincos (optr, noutput_items, d_ampl); + if (d_offset == gr_complex(0,0)) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* Implements a real square wave high from -PI to 0. + * The imaginary square wave leads by 90 deg. + */ + case GR_SQR_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2) + optr[i] = gr_complex(d_ampl, 0)+d_offset; + else if (d_nco.get_phase() < 0) + optr[i] = gr_complex(d_ampl, d_ampl)+d_offset; + else if (d_nco.get_phase() < M_PI/2) + optr[i] = gr_complex(0, d_ampl)+d_offset; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* Implements a real triangle wave rising from -PI to 0 and + * falling from 0 to PI. The imaginary triangle wave leads by 90 deg. + */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI - d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < 0){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < M_PI/2){ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else{ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI + 3*d_ampl/2)+d_offset; + } + d_nco.step(); + } + break; + + /* Implements a real saw tooth wave rising from -PI to PI. + * The imaginary saw tooth wave leads by 90 deg. + */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + 5*d_ampl/4)+d_offset; + } + else{ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/4)+d_offset; + } + d_nco.step(); + } + break; + +#else // nope... + + case GR_CONST_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + d_nco.sin (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + case GR_COS_WAVE: + d_nco.cos (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* The square wave is high from -PI to 0. */ + case GR_SQR_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < 0) + optr[i] = t; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* The triangle wave rises from -PI to 0 and falls from 0 to PI. */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + double t = d_ampl*d_nco.get_phase()/M_PI; + if (d_nco.get_phase() < 0) + optr[i] = static_cast(t + d_ampl + d_offset); + else + optr[i] = static_cast(-1*t + d_ampl + d_offset); + d_nco.step(); + } + break; + + /* The saw tooth wave rises from -PI to PI. */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + t = static_cast(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2 + d_offset); + optr[i] = t; + d_nco.step(); + } + break; + +#endif + + default: + throw std::runtime_error ("gr_sig_source: invalid waveform"); + } + + return noutput_items; +} + +void +gr_sig_source_c::set_sampling_freq (double sampling_freq) +{ + d_sampling_freq = sampling_freq; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_c::set_waveform (gr_waveform_t waveform) +{ + d_waveform = waveform; +} + +void +gr_sig_source_c::set_frequency (double frequency) +{ + d_frequency = frequency; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_c::set_amplitude (double ampl) +{ + d_ampl = ampl; +} + +void +gr_sig_source_c::set_offset (gr_complex offset) +{ + d_offset = offset; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_c.h b/gnuradio-core/src/lib/gengen/gr_sig_source_c.h new file mode 100644 index 00000000..49c43d76 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_c.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SIG_SOURCE_C_H +#define INCLUDED_GR_SIG_SOURCE_C_H + +#include +#include +#include + +class gr_sig_source_c; +typedef boost::shared_ptr gr_sig_source_c_sptr; + +/*! + * \brief signal generator with gr_complex output. + * \ingroup source_blk + */ + +class gr_sig_source_c : public gr_sync_block { + friend gr_sig_source_c_sptr + gr_make_sig_source_c (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, gr_complex offset); + + double d_sampling_freq; + gr_waveform_t d_waveform; + double d_frequency; + double d_ampl; + gr_complex d_offset; + gr_fxpt_nco d_nco; + + + gr_sig_source_c (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, gr_complex offset); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // ACCESSORS + double sampling_freq () const { return d_sampling_freq; } + gr_waveform_t waveform () const { return d_waveform; } + double frequency () const { return d_frequency; } + double amplitude () const { return d_ampl; } + gr_complex offset () const { return d_offset; } + + // MANIPULATORS + void set_sampling_freq (double sampling_freq); + void set_waveform (gr_waveform_t waveform); + void set_frequency (double frequency); + void set_amplitude (double ampl); + void set_offset (gr_complex offset); +}; + +gr_sig_source_c_sptr +gr_make_sig_source_c (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, gr_complex offset = 0); + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_c.i b/gnuradio-core/src/lib/gengen/gr_sig_source_c.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sig_source_c.i rename to gnuradio-core/src/lib/gengen/gr_sig_source_c.i diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_f.cc b/gnuradio-core/src/lib/gengen/gr_sig_source_f.cc new file mode 100644 index 00000000..33f7140a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_f.cc @@ -0,0 +1,242 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include + + +gr_sig_source_f::gr_sig_source_f (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, float offset) + : gr_sync_block ("sig_source_f", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (float))), + d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), + d_ampl (ampl), d_offset (offset) +{ + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +gr_sig_source_f_sptr +gr_make_sig_source_f (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, float offset) +{ + return gr_sig_source_f_sptr (new gr_sig_source_f (sampling_freq, waveform, frequency, ampl, offset)); +} + +int +gr_sig_source_f::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + float t; + + switch (d_waveform){ + +#if 0 // complex? + + case GR_CONST_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + case GR_COS_WAVE: + d_nco.sincos (optr, noutput_items, d_ampl); + if (d_offset == gr_complex(0,0)) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* Implements a real square wave high from -PI to 0. + * The imaginary square wave leads by 90 deg. + */ + case GR_SQR_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2) + optr[i] = gr_complex(d_ampl, 0)+d_offset; + else if (d_nco.get_phase() < 0) + optr[i] = gr_complex(d_ampl, d_ampl)+d_offset; + else if (d_nco.get_phase() < M_PI/2) + optr[i] = gr_complex(0, d_ampl)+d_offset; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* Implements a real triangle wave rising from -PI to 0 and + * falling from 0 to PI. The imaginary triangle wave leads by 90 deg. + */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI - d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < 0){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < M_PI/2){ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else{ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI + 3*d_ampl/2)+d_offset; + } + d_nco.step(); + } + break; + + /* Implements a real saw tooth wave rising from -PI to PI. + * The imaginary saw tooth wave leads by 90 deg. + */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + 5*d_ampl/4)+d_offset; + } + else{ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/4)+d_offset; + } + d_nco.step(); + } + break; + +#else // nope... + + case GR_CONST_WAVE: + t = (float) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + d_nco.sin (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + case GR_COS_WAVE: + d_nco.cos (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* The square wave is high from -PI to 0. */ + case GR_SQR_WAVE: + t = (float) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < 0) + optr[i] = t; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* The triangle wave rises from -PI to 0 and falls from 0 to PI. */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + double t = d_ampl*d_nco.get_phase()/M_PI; + if (d_nco.get_phase() < 0) + optr[i] = static_cast(t + d_ampl + d_offset); + else + optr[i] = static_cast(-1*t + d_ampl + d_offset); + d_nco.step(); + } + break; + + /* The saw tooth wave rises from -PI to PI. */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + t = static_cast(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2 + d_offset); + optr[i] = t; + d_nco.step(); + } + break; + +#endif + + default: + throw std::runtime_error ("gr_sig_source: invalid waveform"); + } + + return noutput_items; +} + +void +gr_sig_source_f::set_sampling_freq (double sampling_freq) +{ + d_sampling_freq = sampling_freq; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_f::set_waveform (gr_waveform_t waveform) +{ + d_waveform = waveform; +} + +void +gr_sig_source_f::set_frequency (double frequency) +{ + d_frequency = frequency; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_f::set_amplitude (double ampl) +{ + d_ampl = ampl; +} + +void +gr_sig_source_f::set_offset (float offset) +{ + d_offset = offset; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_f.h b/gnuradio-core/src/lib/gengen/gr_sig_source_f.h new file mode 100644 index 00000000..d90ca6d3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_f.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SIG_SOURCE_F_H +#define INCLUDED_GR_SIG_SOURCE_F_H + +#include +#include +#include + +class gr_sig_source_f; +typedef boost::shared_ptr gr_sig_source_f_sptr; + +/*! + * \brief signal generator with float output. + * \ingroup source_blk + */ + +class gr_sig_source_f : public gr_sync_block { + friend gr_sig_source_f_sptr + gr_make_sig_source_f (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, float offset); + + double d_sampling_freq; + gr_waveform_t d_waveform; + double d_frequency; + double d_ampl; + float d_offset; + gr_fxpt_nco d_nco; + + + gr_sig_source_f (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, float offset); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // ACCESSORS + double sampling_freq () const { return d_sampling_freq; } + gr_waveform_t waveform () const { return d_waveform; } + double frequency () const { return d_frequency; } + double amplitude () const { return d_ampl; } + float offset () const { return d_offset; } + + // MANIPULATORS + void set_sampling_freq (double sampling_freq); + void set_waveform (gr_waveform_t waveform); + void set_frequency (double frequency); + void set_amplitude (double ampl); + void set_offset (float offset); +}; + +gr_sig_source_f_sptr +gr_make_sig_source_f (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, float offset = 0); + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_f.i b/gnuradio-core/src/lib/gengen/gr_sig_source_f.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sig_source_f.i rename to gnuradio-core/src/lib/gengen/gr_sig_source_f.i diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_i.cc b/gnuradio-core/src/lib/gengen/gr_sig_source_i.cc new file mode 100644 index 00000000..b4b04695 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_i.cc @@ -0,0 +1,242 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include + + +gr_sig_source_i::gr_sig_source_i (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, int offset) + : gr_sync_block ("sig_source_i", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (int))), + d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), + d_ampl (ampl), d_offset (offset) +{ + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +gr_sig_source_i_sptr +gr_make_sig_source_i (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, int offset) +{ + return gr_sig_source_i_sptr (new gr_sig_source_i (sampling_freq, waveform, frequency, ampl, offset)); +} + +int +gr_sig_source_i::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + int t; + + switch (d_waveform){ + +#if 0 // complex? + + case GR_CONST_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + case GR_COS_WAVE: + d_nco.sincos (optr, noutput_items, d_ampl); + if (d_offset == gr_complex(0,0)) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* Implements a real square wave high from -PI to 0. + * The imaginary square wave leads by 90 deg. + */ + case GR_SQR_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2) + optr[i] = gr_complex(d_ampl, 0)+d_offset; + else if (d_nco.get_phase() < 0) + optr[i] = gr_complex(d_ampl, d_ampl)+d_offset; + else if (d_nco.get_phase() < M_PI/2) + optr[i] = gr_complex(0, d_ampl)+d_offset; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* Implements a real triangle wave rising from -PI to 0 and + * falling from 0 to PI. The imaginary triangle wave leads by 90 deg. + */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI - d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < 0){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < M_PI/2){ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else{ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI + 3*d_ampl/2)+d_offset; + } + d_nco.step(); + } + break; + + /* Implements a real saw tooth wave rising from -PI to PI. + * The imaginary saw tooth wave leads by 90 deg. + */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + 5*d_ampl/4)+d_offset; + } + else{ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/4)+d_offset; + } + d_nco.step(); + } + break; + +#else // nope... + + case GR_CONST_WAVE: + t = (int) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + d_nco.sin (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + case GR_COS_WAVE: + d_nco.cos (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* The square wave is high from -PI to 0. */ + case GR_SQR_WAVE: + t = (int) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < 0) + optr[i] = t; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* The triangle wave rises from -PI to 0 and falls from 0 to PI. */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + double t = d_ampl*d_nco.get_phase()/M_PI; + if (d_nco.get_phase() < 0) + optr[i] = static_cast(t + d_ampl + d_offset); + else + optr[i] = static_cast(-1*t + d_ampl + d_offset); + d_nco.step(); + } + break; + + /* The saw tooth wave rises from -PI to PI. */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + t = static_cast(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2 + d_offset); + optr[i] = t; + d_nco.step(); + } + break; + +#endif + + default: + throw std::runtime_error ("gr_sig_source: invalid waveform"); + } + + return noutput_items; +} + +void +gr_sig_source_i::set_sampling_freq (double sampling_freq) +{ + d_sampling_freq = sampling_freq; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_i::set_waveform (gr_waveform_t waveform) +{ + d_waveform = waveform; +} + +void +gr_sig_source_i::set_frequency (double frequency) +{ + d_frequency = frequency; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_i::set_amplitude (double ampl) +{ + d_ampl = ampl; +} + +void +gr_sig_source_i::set_offset (int offset) +{ + d_offset = offset; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_i.h b/gnuradio-core/src/lib/gengen/gr_sig_source_i.h new file mode 100644 index 00000000..ca83c5a7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_i.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SIG_SOURCE_I_H +#define INCLUDED_GR_SIG_SOURCE_I_H + +#include +#include +#include + +class gr_sig_source_i; +typedef boost::shared_ptr gr_sig_source_i_sptr; + +/*! + * \brief signal generator with int output. + * \ingroup source_blk + */ + +class gr_sig_source_i : public gr_sync_block { + friend gr_sig_source_i_sptr + gr_make_sig_source_i (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, int offset); + + double d_sampling_freq; + gr_waveform_t d_waveform; + double d_frequency; + double d_ampl; + int d_offset; + gr_fxpt_nco d_nco; + + + gr_sig_source_i (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, int offset); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // ACCESSORS + double sampling_freq () const { return d_sampling_freq; } + gr_waveform_t waveform () const { return d_waveform; } + double frequency () const { return d_frequency; } + double amplitude () const { return d_ampl; } + int offset () const { return d_offset; } + + // MANIPULATORS + void set_sampling_freq (double sampling_freq); + void set_waveform (gr_waveform_t waveform); + void set_frequency (double frequency); + void set_amplitude (double ampl); + void set_offset (int offset); +}; + +gr_sig_source_i_sptr +gr_make_sig_source_i (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, int offset = 0); + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_i.i b/gnuradio-core/src/lib/gengen/gr_sig_source_i.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sig_source_i.i rename to gnuradio-core/src/lib/gengen/gr_sig_source_i.i diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_s.cc b/gnuradio-core/src/lib/gengen/gr_sig_source_s.cc new file mode 100644 index 00000000..08a0dcf4 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_s.cc @@ -0,0 +1,242 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include + + +gr_sig_source_s::gr_sig_source_s (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, short offset) + : gr_sync_block ("sig_source_s", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (short))), + d_sampling_freq (sampling_freq), d_waveform (waveform), d_frequency (frequency), + d_ampl (ampl), d_offset (offset) +{ + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +gr_sig_source_s_sptr +gr_make_sig_source_s (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, short offset) +{ + return gr_sig_source_s_sptr (new gr_sig_source_s (sampling_freq, waveform, frequency, ampl, offset)); +} + +int +gr_sig_source_s::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + short t; + + switch (d_waveform){ + +#if 0 // complex? + + case GR_CONST_WAVE: + t = (gr_complex) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + case GR_COS_WAVE: + d_nco.sincos (optr, noutput_items, d_ampl); + if (d_offset == gr_complex(0,0)) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* Implements a real square wave high from -PI to 0. + * The imaginary square wave leads by 90 deg. + */ + case GR_SQR_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2) + optr[i] = gr_complex(d_ampl, 0)+d_offset; + else if (d_nco.get_phase() < 0) + optr[i] = gr_complex(d_ampl, d_ampl)+d_offset; + else if (d_nco.get_phase() < M_PI/2) + optr[i] = gr_complex(0, d_ampl)+d_offset; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* Implements a real triangle wave rising from -PI to 0 and + * falling from 0 to PI. The imaginary triangle wave leads by 90 deg. + */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI - d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < 0){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else if (d_nco.get_phase() < M_PI/2){ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + d_ampl*d_nco.get_phase()/M_PI + d_ampl/2)+d_offset; + } + else{ + optr[i] = gr_complex(-1*d_ampl*d_nco.get_phase()/M_PI + d_ampl, + -1*d_ampl*d_nco.get_phase()/M_PI + 3*d_ampl/2)+d_offset; + } + d_nco.step(); + } + break; + + /* Implements a real saw tooth wave rising from -PI to PI. + * The imaginary saw tooth wave leads by 90 deg. + */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < -1*M_PI/2){ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + 5*d_ampl/4)+d_offset; + } + else{ + optr[i] = gr_complex(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2, + d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/4)+d_offset; + } + d_nco.step(); + } + break; + +#else // nope... + + case GR_CONST_WAVE: + t = (short) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++) // FIXME unroll + optr[i] = t; + break; + + case GR_SIN_WAVE: + d_nco.sin (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + case GR_COS_WAVE: + d_nco.cos (optr, noutput_items, d_ampl); + if (d_offset == 0) + break; + + for (int i = 0; i < noutput_items; i++){ + optr[i] += d_offset; + } + break; + + /* The square wave is high from -PI to 0. */ + case GR_SQR_WAVE: + t = (short) d_ampl + d_offset; + for (int i = 0; i < noutput_items; i++){ + if (d_nco.get_phase() < 0) + optr[i] = t; + else + optr[i] = d_offset; + d_nco.step(); + } + break; + + /* The triangle wave rises from -PI to 0 and falls from 0 to PI. */ + case GR_TRI_WAVE: + for (int i = 0; i < noutput_items; i++){ + double t = d_ampl*d_nco.get_phase()/M_PI; + if (d_nco.get_phase() < 0) + optr[i] = static_cast(t + d_ampl + d_offset); + else + optr[i] = static_cast(-1*t + d_ampl + d_offset); + d_nco.step(); + } + break; + + /* The saw tooth wave rises from -PI to PI. */ + case GR_SAW_WAVE: + for (int i = 0; i < noutput_items; i++){ + t = static_cast(d_ampl*d_nco.get_phase()/(2*M_PI) + d_ampl/2 + d_offset); + optr[i] = t; + d_nco.step(); + } + break; + +#endif + + default: + throw std::runtime_error ("gr_sig_source: invalid waveform"); + } + + return noutput_items; +} + +void +gr_sig_source_s::set_sampling_freq (double sampling_freq) +{ + d_sampling_freq = sampling_freq; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_s::set_waveform (gr_waveform_t waveform) +{ + d_waveform = waveform; +} + +void +gr_sig_source_s::set_frequency (double frequency) +{ + d_frequency = frequency; + d_nco.set_freq (2 * M_PI * d_frequency / d_sampling_freq); +} + +void +gr_sig_source_s::set_amplitude (double ampl) +{ + d_ampl = ampl; +} + +void +gr_sig_source_s::set_offset (short offset) +{ + d_offset = offset; +} + diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_s.h b/gnuradio-core/src/lib/gengen/gr_sig_source_s.h new file mode 100644 index 00000000..6a6cab1b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_s.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SIG_SOURCE_S_H +#define INCLUDED_GR_SIG_SOURCE_S_H + +#include +#include +#include + +class gr_sig_source_s; +typedef boost::shared_ptr gr_sig_source_s_sptr; + +/*! + * \brief signal generator with short output. + * \ingroup source_blk + */ + +class gr_sig_source_s : public gr_sync_block { + friend gr_sig_source_s_sptr + gr_make_sig_source_s (double sampling_freq, gr_waveform_t waveform, + double frequency, double ampl, short offset); + + double d_sampling_freq; + gr_waveform_t d_waveform; + double d_frequency; + double d_ampl; + short d_offset; + gr_fxpt_nco d_nco; + + + gr_sig_source_s (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, short offset); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // ACCESSORS + double sampling_freq () const { return d_sampling_freq; } + gr_waveform_t waveform () const { return d_waveform; } + double frequency () const { return d_frequency; } + double amplitude () const { return d_ampl; } + short offset () const { return d_offset; } + + // MANIPULATORS + void set_sampling_freq (double sampling_freq); + void set_waveform (gr_waveform_t waveform); + void set_frequency (double frequency); + void set_amplitude (double ampl); + void set_offset (short offset); +}; + +gr_sig_source_s_sptr +gr_make_sig_source_s (double sampling_freq, gr_waveform_t waveform, + double wave_freq, double ampl, short offset = 0); + + +#endif diff --git a/gnuradio-core/src/lib/general/gr_sig_source_s.i b/gnuradio-core/src/lib/gengen/gr_sig_source_s.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sig_source_s.i rename to gnuradio-core/src/lib/gengen/gr_sig_source_s.i diff --git a/gnuradio-core/src/lib/gengen/gr_sig_source_waveform.h b/gnuradio-core/src/lib/gengen/gr_sig_source_waveform.h new file mode 100644 index 00000000..e52a497c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sig_source_waveform.h @@ -0,0 +1,29 @@ +/* -*- c++ -*- */ +/* + * 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. + */ +#ifndef INCLUDED_GR_SIG_SOURCE_WAVEFORM_H +#define INCLUDED_GR_SIG_SOURCE_WAVEFORM_H + +typedef enum { + GR_CONST_WAVE = 100, GR_SIN_WAVE, GR_COS_WAVE, GR_SQR_WAVE, GR_TRI_WAVE, GR_SAW_WAVE +} gr_waveform_t; + +#endif /* INCLUDED_GR_SIG_SOURCE_WAVEFORM_H */ diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t new file mode 100644 index 00000000..c8bdabf9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (size_t vlen) +{ + return @SPTR_NAME@ (new @NAME@ (vlen)); +} + +@NAME@::@NAME@ (size_t vlen) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)*vlen), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@)*vlen)), + d_vlen (vlen) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // negate + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (@O_TYPE@) -((@I_TYPE@ *) input_items[0])[i]; + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc -= ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t new file mode 100644 index 00000000..a58d1f3b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.h.t @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +/*! + * \brief output = input_0 - input_1 - ...) + * \ingroup math_blk + * + * Subtract across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen); + + @NAME@ (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t new file mode 100644 index 00000000..f7726ccf --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (size_t vlen = 1); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_cc.cc b/gnuradio-core/src/lib/gengen/gr_sub_cc.cc new file mode 100644 index 00000000..764ab38e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_cc.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sub_cc_sptr +gr_make_sub_cc (size_t vlen) +{ + return gr_sub_cc_sptr (new gr_sub_cc (vlen)); +} + +gr_sub_cc::gr_sub_cc (size_t vlen) + : gr_sync_block ("sub_cc", + gr_make_io_signature (1, -1, sizeof (gr_complex)*vlen), + gr_make_io_signature (1, 1, sizeof (gr_complex)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_sub_cc::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *optr = (gr_complex *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // negate + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (gr_complex) -((gr_complex *) input_items[0])[i]; + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + gr_complex acc = ((gr_complex *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc -= ((gr_complex *) input_items[j])[i]; + + *optr++ = (gr_complex) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sub_cc.h b/gnuradio-core/src/lib/gengen/gr_sub_cc.h new file mode 100644 index 00000000..a1ac0a44 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_cc.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SUB_CC_H +#define INCLUDED_GR_SUB_CC_H + +#include + +class gr_sub_cc; +typedef boost::shared_ptr gr_sub_cc_sptr; + +gr_sub_cc_sptr gr_make_sub_cc (size_t vlen = 1); + +/*! + * \brief output = input_0 - input_1 - ...) + * \ingroup math_blk + * + * Subtract across all input streams. + */ +class gr_sub_cc : public gr_sync_block +{ + friend gr_sub_cc_sptr gr_make_sub_cc (size_t vlen); + + gr_sub_cc (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sub_cc.i b/gnuradio-core/src/lib/gengen/gr_sub_cc.i new file mode 100644 index 00000000..f5f1adb5 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_cc.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sub_cc) + +gr_sub_cc_sptr gr_make_sub_cc (size_t vlen = 1); + +class gr_sub_cc : public gr_sync_block +{ + private: + gr_sub_cc (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ff.cc b/gnuradio-core/src/lib/gengen/gr_sub_ff.cc new file mode 100644 index 00000000..cc275ec7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ff.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sub_ff_sptr +gr_make_sub_ff (size_t vlen) +{ + return gr_sub_ff_sptr (new gr_sub_ff (vlen)); +} + +gr_sub_ff::gr_sub_ff (size_t vlen) + : gr_sync_block ("sub_ff", + gr_make_io_signature (1, -1, sizeof (float)*vlen), + gr_make_io_signature (1, 1, sizeof (float)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_sub_ff::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // negate + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (float) -((float *) input_items[0])[i]; + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + float acc = ((float *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc -= ((float *) input_items[j])[i]; + + *optr++ = (float) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ff.h b/gnuradio-core/src/lib/gengen/gr_sub_ff.h new file mode 100644 index 00000000..eb66a84f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ff.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SUB_FF_H +#define INCLUDED_GR_SUB_FF_H + +#include + +class gr_sub_ff; +typedef boost::shared_ptr gr_sub_ff_sptr; + +gr_sub_ff_sptr gr_make_sub_ff (size_t vlen = 1); + +/*! + * \brief output = input_0 - input_1 - ...) + * \ingroup math_blk + * + * Subtract across all input streams. + */ +class gr_sub_ff : public gr_sync_block +{ + friend gr_sub_ff_sptr gr_make_sub_ff (size_t vlen); + + gr_sub_ff (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ff.i b/gnuradio-core/src/lib/gengen/gr_sub_ff.i new file mode 100644 index 00000000..354d1356 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ff.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sub_ff) + +gr_sub_ff_sptr gr_make_sub_ff (size_t vlen = 1); + +class gr_sub_ff : public gr_sync_block +{ + private: + gr_sub_ff (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ii.cc b/gnuradio-core/src/lib/gengen/gr_sub_ii.cc new file mode 100644 index 00000000..c095d49a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ii.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sub_ii_sptr +gr_make_sub_ii (size_t vlen) +{ + return gr_sub_ii_sptr (new gr_sub_ii (vlen)); +} + +gr_sub_ii::gr_sub_ii (size_t vlen) + : gr_sync_block ("sub_ii", + gr_make_io_signature (1, -1, sizeof (int)*vlen), + gr_make_io_signature (1, 1, sizeof (int)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_sub_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // negate + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (int) -((int *) input_items[0])[i]; + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc -= ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ii.h b/gnuradio-core/src/lib/gengen/gr_sub_ii.h new file mode 100644 index 00000000..ef2032fe --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ii.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SUB_II_H +#define INCLUDED_GR_SUB_II_H + +#include + +class gr_sub_ii; +typedef boost::shared_ptr gr_sub_ii_sptr; + +gr_sub_ii_sptr gr_make_sub_ii (size_t vlen = 1); + +/*! + * \brief output = input_0 - input_1 - ...) + * \ingroup math_blk + * + * Subtract across all input streams. + */ +class gr_sub_ii : public gr_sync_block +{ + friend gr_sub_ii_sptr gr_make_sub_ii (size_t vlen); + + gr_sub_ii (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ii.i b/gnuradio-core/src/lib/gengen/gr_sub_ii.i new file mode 100644 index 00000000..82382c8b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sub_ii) + +gr_sub_ii_sptr gr_make_sub_ii (size_t vlen = 1); + +class gr_sub_ii : public gr_sync_block +{ + private: + gr_sub_ii (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ss.cc b/gnuradio-core/src/lib/gengen/gr_sub_ss.cc new file mode 100644 index 00000000..d3837c25 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ss.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_sub_ss_sptr +gr_make_sub_ss (size_t vlen) +{ + return gr_sub_ss_sptr (new gr_sub_ss (vlen)); +} + +gr_sub_ss::gr_sub_ss (size_t vlen) + : gr_sync_block ("sub_ss", + gr_make_io_signature (1, -1, sizeof (short)*vlen), + gr_make_io_signature (1, 1, sizeof (short)*vlen)), + d_vlen (vlen) +{ +} + +int +gr_sub_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + if (ninputs == 1){ // negate + for (int i = 0; i < noutput_items*d_vlen; i++) + *optr++ = (short) -((short *) input_items[0])[i]; + } + + else { + for (int i = 0; i < noutput_items*d_vlen; i++){ + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc -= ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + } + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ss.h b/gnuradio-core/src/lib/gengen/gr_sub_ss.h new file mode 100644 index 00000000..e48ddc08 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ss.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifndef INCLUDED_GR_SUB_SS_H +#define INCLUDED_GR_SUB_SS_H + +#include + +class gr_sub_ss; +typedef boost::shared_ptr gr_sub_ss_sptr; + +gr_sub_ss_sptr gr_make_sub_ss (size_t vlen = 1); + +/*! + * \brief output = input_0 - input_1 - ...) + * \ingroup math_blk + * + * Subtract across all input streams. + */ +class gr_sub_ss : public gr_sync_block +{ + friend gr_sub_ss_sptr gr_make_sub_ss (size_t vlen); + + gr_sub_ss (size_t vlen); + + size_t d_vlen; + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_sub_ss.i b/gnuradio-core/src/lib/gengen/gr_sub_ss.i new file mode 100644 index 00000000..45b1f32a --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_sub_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004, 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,sub_ss) + +gr_sub_ss_sptr gr_make_sub_ss (size_t vlen = 1); + +class gr_sub_ss : public gr_sync_block +{ + private: + gr_sub_ss (size_t vlen); +}; diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.cc.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.cc.t rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.cc.t diff --git a/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t new file mode 100644 index 00000000..42d20109 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.h.t @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @NAME@_sptr; + +@SPTR_NAME@ +gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. + * \ingroup converter_blk + * + * input: stream of @I_TYPE@; output: stream of @O_TYPE@ + * + * This is the inverse of gr_packed_to_unpacked_XX. + * + * The low \p bits_per_chunk bits are extracted from each input byte or short. + * These bits are then packed densely into the output bytes or shorts, such that + * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ +class @NAME@ : public gr_block +{ + friend @SPTR_NAME@ + gr_make_@BASE_NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); + + @NAME@ (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.i.t b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.i.t similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_XX.i.t rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_XX.i.t diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.cc b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.cc rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.cc diff --git a/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.h b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.h new file mode 100644 index 00000000..c628a55c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_UNPACKED_TO_PACKED_BB_H +#define INCLUDED_GR_UNPACKED_TO_PACKED_BB_H + +#include +#include + +class gr_unpacked_to_packed_bb; +typedef boost::shared_ptr gr_unpacked_to_packed_bb_sptr; + +gr_unpacked_to_packed_bb_sptr +gr_make_unpacked_to_packed_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. + * \ingroup converter_blk + * + * input: stream of unsigned char; output: stream of unsigned char + * + * This is the inverse of gr_packed_to_unpacked_XX. + * + * The low \p bits_per_chunk bits are extracted from each input byte or short. + * These bits are then packed densely into the output bytes or shorts, such that + * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ +class gr_unpacked_to_packed_bb : public gr_block +{ + friend gr_unpacked_to_packed_bb_sptr + gr_make_unpacked_to_packed_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); + + gr_unpacked_to_packed_bb (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.i b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_bb.i rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_bb.i diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.cc b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.cc rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.cc diff --git a/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.h b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.h new file mode 100644 index 00000000..b299bf1c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_UNPACKED_TO_PACKED_II_H +#define INCLUDED_GR_UNPACKED_TO_PACKED_II_H + +#include +#include + +class gr_unpacked_to_packed_ii; +typedef boost::shared_ptr gr_unpacked_to_packed_ii_sptr; + +gr_unpacked_to_packed_ii_sptr +gr_make_unpacked_to_packed_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. + * \ingroup converter_blk + * + * input: stream of int; output: stream of int + * + * This is the inverse of gr_packed_to_unpacked_XX. + * + * The low \p bits_per_chunk bits are extracted from each input byte or short. + * These bits are then packed densely into the output bytes or shorts, such that + * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ +class gr_unpacked_to_packed_ii : public gr_block +{ + friend gr_unpacked_to_packed_ii_sptr + gr_make_unpacked_to_packed_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); + + gr_unpacked_to_packed_ii (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.i b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_ii.i rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ii.i diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.cc b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.cc rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.cc diff --git a/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.h b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.h new file mode 100644 index 00000000..797ef714 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_UNPACKED_TO_PACKED_SS_H +#define INCLUDED_GR_UNPACKED_TO_PACKED_SS_H + +#include +#include + +class gr_unpacked_to_packed_ss; +typedef boost::shared_ptr gr_unpacked_to_packed_ss_sptr; + +gr_unpacked_to_packed_ss_sptr +gr_make_unpacked_to_packed_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); + +/*! + * \brief Convert a stream of unpacked bytes or shorts into a stream of packed bytes or shorts. + * \ingroup converter_blk + * + * input: stream of short; output: stream of short + * + * This is the inverse of gr_packed_to_unpacked_XX. + * + * The low \p bits_per_chunk bits are extracted from each input byte or short. + * These bits are then packed densely into the output bytes or shorts, such that + * all 8 or 16 bits of the output bytes or shorts are filled with valid input bits. + * The right thing is done if bits_per_chunk is not a power of two. + * + * The combination of gr_packed_to_unpacked_XX followed by + * gr_chunks_to_symbols_Xf or gr_chunks_to_symbols_Xc handles the + * general case of mapping from a stream of bytes or shorts into arbitrary float + * or complex symbols. + * + * \sa gr_packed_to_unpacked_bb, gr_unpacked_to_packed_bb, + * \sa gr_packed_to_unpacked_ss, gr_unpacked_to_packed_ss, + * \sa gr_chunks_to_symbols_bf, gr_chunks_to_symbols_bc. + * \sa gr_chunks_to_symbols_sf, gr_chunks_to_symbols_sc. + */ +class gr_unpacked_to_packed_ss : public gr_block +{ + friend gr_unpacked_to_packed_ss_sptr + gr_make_unpacked_to_packed_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); + + gr_unpacked_to_packed_ss (unsigned int bits_per_chunk, gr_endianness_t endianness); + + unsigned int d_bits_per_chunk; + gr_endianness_t d_endianness; + unsigned int d_index; + + public: + void forecast(int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + bool check_topology(int ninputs, int noutputs) { return ninputs == noutputs; } +}; + +#endif diff --git a/gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.i b/gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_unpacked_to_packed_ss.i rename to gnuradio-core/src/lib/gengen/gr_unpacked_to_packed_ss.i diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_X.cc.t b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.cc.t new file mode 100644 index 00000000..b2a6c4ac --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.cc.t @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include <@NAME@.h> +#include +#include + + +@NAME@::@NAME@ (int vlen) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, 1, sizeof (@TYPE@) * vlen), + gr_make_io_signature (0, 0, 0)), + d_vlen(vlen) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @TYPE@ *iptr = (@TYPE@ *) input_items[0]; + for (int i = 0; i < noutput_items * d_vlen; i++) + d_data.push_back (iptr[i]); + + return noutput_items; +} + + +@NAME@_sptr +gr_make_@BASE_NAME@ (int vlen) +{ + return @NAME@_sptr (new @NAME@ (vlen)); +} + +std::vector<@TYPE@> +@NAME@::data () const +{ + return d_data; +} diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t new file mode 100644 index 00000000..b5fdf88f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.h.t @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @NAME@_sptr; + +@NAME@_sptr +gr_make_@BASE_NAME@ (int vlen = 1); + + +/*! + * \brief @TYPE@ sink that writes to a vector + * \ingroup sink_blk + */ + +class @NAME@ : public gr_sync_block { + friend @NAME@_sptr gr_make_@BASE_NAME@ (int vlen); + std::vector<@TYPE@> d_data; + int d_vlen; + @NAME@ (int vlen); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void clear() {d_data.clear();} + std::vector<@TYPE@> data () const; +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_X.i.t b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.i.t new file mode 100644 index 00000000..22d6faa1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_X.i.t @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@); + +@SPTR_NAME@ gr_make_@BASE_NAME@ (int vlen = 1); + +class @NAME@ : public gr_sync_block { + private: + @NAME@ (int vlen); + + public: + void clear() {d_data.clear();} + std::vector<@TYPE@> data () const; +}; + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_b.cc b/gnuradio-core/src/lib/gengen/gr_vector_sink_b.cc new file mode 100644 index 00000000..8c53b57d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_b.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + + +gr_vector_sink_b::gr_vector_sink_b (int vlen) + : gr_sync_block ("vector_sink_b", + gr_make_io_signature (1, 1, sizeof (unsigned char) * vlen), + gr_make_io_signature (0, 0, 0)), + d_vlen(vlen) +{ +} + +int +gr_vector_sink_b::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *iptr = (unsigned char *) input_items[0]; + for (int i = 0; i < noutput_items * d_vlen; i++) + d_data.push_back (iptr[i]); + + return noutput_items; +} + + +gr_vector_sink_b_sptr +gr_make_vector_sink_b (int vlen) +{ + return gr_vector_sink_b_sptr (new gr_vector_sink_b (vlen)); +} + +std::vector +gr_vector_sink_b::data () const +{ + return d_data; +} diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_b.h b/gnuradio-core/src/lib/gengen/gr_vector_sink_b.h new file mode 100644 index 00000000..f989a5da --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_b.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SINK_B_H +#define INCLUDED_GR_VECTOR_SINK_B_H + +#include + +class gr_vector_sink_b; +typedef boost::shared_ptr gr_vector_sink_b_sptr; + +gr_vector_sink_b_sptr +gr_make_vector_sink_b (int vlen = 1); + + +/*! + * \brief unsigned char sink that writes to a vector + * \ingroup sink_blk + */ + +class gr_vector_sink_b : public gr_sync_block { + friend gr_vector_sink_b_sptr gr_make_vector_sink_b (int vlen); + std::vector d_data; + int d_vlen; + gr_vector_sink_b (int vlen); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void clear() {d_data.clear();} + std::vector data () const; +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_b.i b/gnuradio-core/src/lib/gengen/gr_vector_sink_b.i new file mode 100644 index 00000000..56de8f61 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_b.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + + +GR_SWIG_BLOCK_MAGIC(gr,vector_sink_b); + +gr_vector_sink_b_sptr gr_make_vector_sink_b (int vlen = 1); + +class gr_vector_sink_b : public gr_sync_block { + private: + gr_vector_sink_b (int vlen); + + public: + void clear() {d_data.clear();} + std::vector data () const; +}; + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_c.cc b/gnuradio-core/src/lib/gengen/gr_vector_sink_c.cc new file mode 100644 index 00000000..7c99c18b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_c.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + + +gr_vector_sink_c::gr_vector_sink_c (int vlen) + : gr_sync_block ("vector_sink_c", + gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen), + gr_make_io_signature (0, 0, 0)), + d_vlen(vlen) +{ +} + +int +gr_vector_sink_c::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *iptr = (gr_complex *) input_items[0]; + for (int i = 0; i < noutput_items * d_vlen; i++) + d_data.push_back (iptr[i]); + + return noutput_items; +} + + +gr_vector_sink_c_sptr +gr_make_vector_sink_c (int vlen) +{ + return gr_vector_sink_c_sptr (new gr_vector_sink_c (vlen)); +} + +std::vector +gr_vector_sink_c::data () const +{ + return d_data; +} diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_c.h b/gnuradio-core/src/lib/gengen/gr_vector_sink_c.h new file mode 100644 index 00000000..e1aae569 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_c.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SINK_C_H +#define INCLUDED_GR_VECTOR_SINK_C_H + +#include + +class gr_vector_sink_c; +typedef boost::shared_ptr gr_vector_sink_c_sptr; + +gr_vector_sink_c_sptr +gr_make_vector_sink_c (int vlen = 1); + + +/*! + * \brief gr_complex sink that writes to a vector + * \ingroup sink_blk + */ + +class gr_vector_sink_c : public gr_sync_block { + friend gr_vector_sink_c_sptr gr_make_vector_sink_c (int vlen); + std::vector d_data; + int d_vlen; + gr_vector_sink_c (int vlen); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void clear() {d_data.clear();} + std::vector data () const; +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_c.i b/gnuradio-core/src/lib/gengen/gr_vector_sink_c.i new file mode 100644 index 00000000..c7bf5c29 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_c.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + + +GR_SWIG_BLOCK_MAGIC(gr,vector_sink_c); + +gr_vector_sink_c_sptr gr_make_vector_sink_c (int vlen = 1); + +class gr_vector_sink_c : public gr_sync_block { + private: + gr_vector_sink_c (int vlen); + + public: + void clear() {d_data.clear();} + std::vector data () const; +}; + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_f.cc b/gnuradio-core/src/lib/gengen/gr_vector_sink_f.cc new file mode 100644 index 00000000..c27bb992 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_f.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + + +gr_vector_sink_f::gr_vector_sink_f (int vlen) + : gr_sync_block ("vector_sink_f", + gr_make_io_signature (1, 1, sizeof (float) * vlen), + gr_make_io_signature (0, 0, 0)), + d_vlen(vlen) +{ +} + +int +gr_vector_sink_f::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *iptr = (float *) input_items[0]; + for (int i = 0; i < noutput_items * d_vlen; i++) + d_data.push_back (iptr[i]); + + return noutput_items; +} + + +gr_vector_sink_f_sptr +gr_make_vector_sink_f (int vlen) +{ + return gr_vector_sink_f_sptr (new gr_vector_sink_f (vlen)); +} + +std::vector +gr_vector_sink_f::data () const +{ + return d_data; +} diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_f.h b/gnuradio-core/src/lib/gengen/gr_vector_sink_f.h new file mode 100644 index 00000000..66885ee0 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_f.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SINK_F_H +#define INCLUDED_GR_VECTOR_SINK_F_H + +#include + +class gr_vector_sink_f; +typedef boost::shared_ptr gr_vector_sink_f_sptr; + +gr_vector_sink_f_sptr +gr_make_vector_sink_f (int vlen = 1); + + +/*! + * \brief float sink that writes to a vector + * \ingroup sink_blk + */ + +class gr_vector_sink_f : public gr_sync_block { + friend gr_vector_sink_f_sptr gr_make_vector_sink_f (int vlen); + std::vector d_data; + int d_vlen; + gr_vector_sink_f (int vlen); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void clear() {d_data.clear();} + std::vector data () const; +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_f.i b/gnuradio-core/src/lib/gengen/gr_vector_sink_f.i new file mode 100644 index 00000000..dd868e4f --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_f.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + + +GR_SWIG_BLOCK_MAGIC(gr,vector_sink_f); + +gr_vector_sink_f_sptr gr_make_vector_sink_f (int vlen = 1); + +class gr_vector_sink_f : public gr_sync_block { + private: + gr_vector_sink_f (int vlen); + + public: + void clear() {d_data.clear();} + std::vector data () const; +}; + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_i.cc b/gnuradio-core/src/lib/gengen/gr_vector_sink_i.cc new file mode 100644 index 00000000..731bc2f4 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_i.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + + +gr_vector_sink_i::gr_vector_sink_i (int vlen) + : gr_sync_block ("vector_sink_i", + gr_make_io_signature (1, 1, sizeof (int) * vlen), + gr_make_io_signature (0, 0, 0)), + d_vlen(vlen) +{ +} + +int +gr_vector_sink_i::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *iptr = (int *) input_items[0]; + for (int i = 0; i < noutput_items * d_vlen; i++) + d_data.push_back (iptr[i]); + + return noutput_items; +} + + +gr_vector_sink_i_sptr +gr_make_vector_sink_i (int vlen) +{ + return gr_vector_sink_i_sptr (new gr_vector_sink_i (vlen)); +} + +std::vector +gr_vector_sink_i::data () const +{ + return d_data; +} diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_i.h b/gnuradio-core/src/lib/gengen/gr_vector_sink_i.h new file mode 100644 index 00000000..ec6156cb --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_i.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SINK_I_H +#define INCLUDED_GR_VECTOR_SINK_I_H + +#include + +class gr_vector_sink_i; +typedef boost::shared_ptr gr_vector_sink_i_sptr; + +gr_vector_sink_i_sptr +gr_make_vector_sink_i (int vlen = 1); + + +/*! + * \brief int sink that writes to a vector + * \ingroup sink_blk + */ + +class gr_vector_sink_i : public gr_sync_block { + friend gr_vector_sink_i_sptr gr_make_vector_sink_i (int vlen); + std::vector d_data; + int d_vlen; + gr_vector_sink_i (int vlen); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void clear() {d_data.clear();} + std::vector data () const; +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_i.i b/gnuradio-core/src/lib/gengen/gr_vector_sink_i.i new file mode 100644 index 00000000..24de561c --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_i.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + + +GR_SWIG_BLOCK_MAGIC(gr,vector_sink_i); + +gr_vector_sink_i_sptr gr_make_vector_sink_i (int vlen = 1); + +class gr_vector_sink_i : public gr_sync_block { + private: + gr_vector_sink_i (int vlen); + + public: + void clear() {d_data.clear();} + std::vector data () const; +}; + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_s.cc b/gnuradio-core/src/lib/gengen/gr_vector_sink_s.cc new file mode 100644 index 00000000..b5c6a5cf --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_s.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + + +gr_vector_sink_s::gr_vector_sink_s (int vlen) + : gr_sync_block ("vector_sink_s", + gr_make_io_signature (1, 1, sizeof (short) * vlen), + gr_make_io_signature (0, 0, 0)), + d_vlen(vlen) +{ +} + +int +gr_vector_sink_s::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *iptr = (short *) input_items[0]; + for (int i = 0; i < noutput_items * d_vlen; i++) + d_data.push_back (iptr[i]); + + return noutput_items; +} + + +gr_vector_sink_s_sptr +gr_make_vector_sink_s (int vlen) +{ + return gr_vector_sink_s_sptr (new gr_vector_sink_s (vlen)); +} + +std::vector +gr_vector_sink_s::data () const +{ + return d_data; +} diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_s.h b/gnuradio-core/src/lib/gengen/gr_vector_sink_s.h new file mode 100644 index 00000000..5b2168c8 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_s.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SINK_S_H +#define INCLUDED_GR_VECTOR_SINK_S_H + +#include + +class gr_vector_sink_s; +typedef boost::shared_ptr gr_vector_sink_s_sptr; + +gr_vector_sink_s_sptr +gr_make_vector_sink_s (int vlen = 1); + + +/*! + * \brief short sink that writes to a vector + * \ingroup sink_blk + */ + +class gr_vector_sink_s : public gr_sync_block { + friend gr_vector_sink_s_sptr gr_make_vector_sink_s (int vlen); + std::vector d_data; + int d_vlen; + gr_vector_sink_s (int vlen); + + public: + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + void clear() {d_data.clear();} + std::vector data () const; +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_sink_s.i b/gnuradio-core/src/lib/gengen/gr_vector_sink_s.i new file mode 100644 index 00000000..c301245b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_sink_s.i @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + + +GR_SWIG_BLOCK_MAGIC(gr,vector_sink_s); + +gr_vector_sink_s_sptr gr_make_vector_sink_s (int vlen = 1); + +class gr_vector_sink_s : public gr_sync_block { + private: + gr_vector_sink_s (int vlen); + + public: + void clear() {d_data.clear();} + std::vector data () const; +}; + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_X.cc.t b/gnuradio-core/src/lib/gengen/gr_vector_source_X.cc.t new file mode 100644 index 00000000..889a6f22 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_X.cc.t @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include <@NAME@.h> +#include +#include +#include + + +@NAME@::@NAME@ (const std::vector<@TYPE@> &data, bool repeat, int vlen) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (@TYPE@) * vlen)), + d_data (data), + d_repeat (repeat), + d_offset (0), + d_vlen (vlen) +{ + if ((data.size() % vlen) != 0) + throw std::invalid_argument("data length must be a multiple of vlen"); +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @TYPE@ *optr = (@TYPE@ *) output_items[0]; + + if (d_repeat){ + unsigned int size = d_data.size (); + unsigned int offset = d_offset; + + if (size == 0) + return -1; + + for (int i = 0; i < noutput_items*d_vlen; i++){ + optr[i] = d_data[offset++]; + if (offset >= size) + offset = 0; + } + d_offset = offset; + return noutput_items; + } + + else { + if (d_offset >= d_data.size ()) + return -1; // Done! + + unsigned n = std::min ((unsigned) d_data.size () - d_offset, + (unsigned) noutput_items*d_vlen); + for (unsigned i = 0; i < n; i++) + optr[i] = d_data[d_offset + i]; + + d_offset += n; + return n/d_vlen; + } +} + +@NAME@_sptr +gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat, int vlen) +{ + return @NAME@_sptr (new @NAME@ (data, repeat, vlen)); +} + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t new file mode 100644 index 00000000..63edcb61 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_X.h.t @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @NAME@_sptr; + +/*! + * \brief source of @TYPE@'s that gets its data from a vector + * \ingroup source_blk + */ + +class @NAME@ : public gr_sync_block { + friend @NAME@_sptr + gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat, int vlen); + + std::vector<@TYPE@> d_data; + bool d_repeat; + unsigned int d_offset; + int d_vlen; + + @NAME@ (const std::vector<@TYPE@> &data, bool repeat, int vlen); + + public: + void rewind() {d_offset=0;} + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +@NAME@_sptr +gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat = false, int vlen = 1); + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_X.i.t b/gnuradio-core/src/lib/gengen/gr_vector_source_X.i.t new file mode 100644 index 00000000..a2215789 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_X.i.t @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@); + +@NAME@_sptr +gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, bool repeat = false, int vlen = 1) + throw(std::invalid_argument); + +class @NAME@ : public gr_sync_block { + public: + void rewind() {d_offset=0;} + private: + @NAME@ (const std::vector<@TYPE@> &data, int vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_b.cc b/gnuradio-core/src/lib/gengen/gr_vector_source_b.cc new file mode 100644 index 00000000..3cff2fd5 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_b.cc @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +gr_vector_source_b::gr_vector_source_b (const std::vector &data, bool repeat, int vlen) + : gr_sync_block ("vector_source_b", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (unsigned char) * vlen)), + d_data (data), + d_repeat (repeat), + d_offset (0), + d_vlen (vlen) +{ + if ((data.size() % vlen) != 0) + throw std::invalid_argument("data length must be a multiple of vlen"); +} + +int +gr_vector_source_b::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *optr = (unsigned char *) output_items[0]; + + if (d_repeat){ + unsigned int size = d_data.size (); + unsigned int offset = d_offset; + + if (size == 0) + return -1; + + for (int i = 0; i < noutput_items*d_vlen; i++){ + optr[i] = d_data[offset++]; + if (offset >= size) + offset = 0; + } + d_offset = offset; + return noutput_items; + } + + else { + if (d_offset >= d_data.size ()) + return -1; // Done! + + unsigned n = std::min ((unsigned) d_data.size () - d_offset, + (unsigned) noutput_items*d_vlen); + for (unsigned i = 0; i < n; i++) + optr[i] = d_data[d_offset + i]; + + d_offset += n; + return n/d_vlen; + } +} + +gr_vector_source_b_sptr +gr_make_vector_source_b (const std::vector &data, bool repeat, int vlen) +{ + return gr_vector_source_b_sptr (new gr_vector_source_b (data, repeat, vlen)); +} + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_b.h b/gnuradio-core/src/lib/gengen/gr_vector_source_b.h new file mode 100644 index 00000000..d1544b77 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_b.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SOURCE_B_H +#define INCLUDED_GR_VECTOR_SOURCE_B_H + +#include + +class gr_vector_source_b; +typedef boost::shared_ptr gr_vector_source_b_sptr; + +/*! + * \brief source of unsigned char's that gets its data from a vector + * \ingroup source_blk + */ + +class gr_vector_source_b : public gr_sync_block { + friend gr_vector_source_b_sptr + gr_make_vector_source_b (const std::vector &data, bool repeat, int vlen); + + std::vector d_data; + bool d_repeat; + unsigned int d_offset; + int d_vlen; + + gr_vector_source_b (const std::vector &data, bool repeat, int vlen); + + public: + void rewind() {d_offset=0;} + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +gr_vector_source_b_sptr +gr_make_vector_source_b (const std::vector &data, bool repeat = false, int vlen = 1); + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_b.i b/gnuradio-core/src/lib/gengen/gr_vector_source_b.i new file mode 100644 index 00000000..f794917b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_b.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,vector_source_b); + +gr_vector_source_b_sptr +gr_make_vector_source_b (const std::vector &data, bool repeat = false, int vlen = 1) + throw(std::invalid_argument); + +class gr_vector_source_b : public gr_sync_block { + public: + void rewind() {d_offset=0;} + private: + gr_vector_source_b (const std::vector &data, int vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_c.cc b/gnuradio-core/src/lib/gengen/gr_vector_source_c.cc new file mode 100644 index 00000000..5eb12d7d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_c.cc @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +gr_vector_source_c::gr_vector_source_c (const std::vector &data, bool repeat, int vlen) + : gr_sync_block ("vector_source_c", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen)), + d_data (data), + d_repeat (repeat), + d_offset (0), + d_vlen (vlen) +{ + if ((data.size() % vlen) != 0) + throw std::invalid_argument("data length must be a multiple of vlen"); +} + +int +gr_vector_source_c::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *optr = (gr_complex *) output_items[0]; + + if (d_repeat){ + unsigned int size = d_data.size (); + unsigned int offset = d_offset; + + if (size == 0) + return -1; + + for (int i = 0; i < noutput_items*d_vlen; i++){ + optr[i] = d_data[offset++]; + if (offset >= size) + offset = 0; + } + d_offset = offset; + return noutput_items; + } + + else { + if (d_offset >= d_data.size ()) + return -1; // Done! + + unsigned n = std::min ((unsigned) d_data.size () - d_offset, + (unsigned) noutput_items*d_vlen); + for (unsigned i = 0; i < n; i++) + optr[i] = d_data[d_offset + i]; + + d_offset += n; + return n/d_vlen; + } +} + +gr_vector_source_c_sptr +gr_make_vector_source_c (const std::vector &data, bool repeat, int vlen) +{ + return gr_vector_source_c_sptr (new gr_vector_source_c (data, repeat, vlen)); +} + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_c.h b/gnuradio-core/src/lib/gengen/gr_vector_source_c.h new file mode 100644 index 00000000..6911433e --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_c.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SOURCE_C_H +#define INCLUDED_GR_VECTOR_SOURCE_C_H + +#include + +class gr_vector_source_c; +typedef boost::shared_ptr gr_vector_source_c_sptr; + +/*! + * \brief source of gr_complex's that gets its data from a vector + * \ingroup source_blk + */ + +class gr_vector_source_c : public gr_sync_block { + friend gr_vector_source_c_sptr + gr_make_vector_source_c (const std::vector &data, bool repeat, int vlen); + + std::vector d_data; + bool d_repeat; + unsigned int d_offset; + int d_vlen; + + gr_vector_source_c (const std::vector &data, bool repeat, int vlen); + + public: + void rewind() {d_offset=0;} + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +gr_vector_source_c_sptr +gr_make_vector_source_c (const std::vector &data, bool repeat = false, int vlen = 1); + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_c.i b/gnuradio-core/src/lib/gengen/gr_vector_source_c.i new file mode 100644 index 00000000..7fa5f192 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_c.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,vector_source_c); + +gr_vector_source_c_sptr +gr_make_vector_source_c (const std::vector &data, bool repeat = false, int vlen = 1) + throw(std::invalid_argument); + +class gr_vector_source_c : public gr_sync_block { + public: + void rewind() {d_offset=0;} + private: + gr_vector_source_c (const std::vector &data, int vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_f.cc b/gnuradio-core/src/lib/gengen/gr_vector_source_f.cc new file mode 100644 index 00000000..c5d5e257 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_f.cc @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +gr_vector_source_f::gr_vector_source_f (const std::vector &data, bool repeat, int vlen) + : gr_sync_block ("vector_source_f", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (float) * vlen)), + d_data (data), + d_repeat (repeat), + d_offset (0), + d_vlen (vlen) +{ + if ((data.size() % vlen) != 0) + throw std::invalid_argument("data length must be a multiple of vlen"); +} + +int +gr_vector_source_f::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *optr = (float *) output_items[0]; + + if (d_repeat){ + unsigned int size = d_data.size (); + unsigned int offset = d_offset; + + if (size == 0) + return -1; + + for (int i = 0; i < noutput_items*d_vlen; i++){ + optr[i] = d_data[offset++]; + if (offset >= size) + offset = 0; + } + d_offset = offset; + return noutput_items; + } + + else { + if (d_offset >= d_data.size ()) + return -1; // Done! + + unsigned n = std::min ((unsigned) d_data.size () - d_offset, + (unsigned) noutput_items*d_vlen); + for (unsigned i = 0; i < n; i++) + optr[i] = d_data[d_offset + i]; + + d_offset += n; + return n/d_vlen; + } +} + +gr_vector_source_f_sptr +gr_make_vector_source_f (const std::vector &data, bool repeat, int vlen) +{ + return gr_vector_source_f_sptr (new gr_vector_source_f (data, repeat, vlen)); +} + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_f.h b/gnuradio-core/src/lib/gengen/gr_vector_source_f.h new file mode 100644 index 00000000..206ff4f3 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_f.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SOURCE_F_H +#define INCLUDED_GR_VECTOR_SOURCE_F_H + +#include + +class gr_vector_source_f; +typedef boost::shared_ptr gr_vector_source_f_sptr; + +/*! + * \brief source of float's that gets its data from a vector + * \ingroup source_blk + */ + +class gr_vector_source_f : public gr_sync_block { + friend gr_vector_source_f_sptr + gr_make_vector_source_f (const std::vector &data, bool repeat, int vlen); + + std::vector d_data; + bool d_repeat; + unsigned int d_offset; + int d_vlen; + + gr_vector_source_f (const std::vector &data, bool repeat, int vlen); + + public: + void rewind() {d_offset=0;} + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +gr_vector_source_f_sptr +gr_make_vector_source_f (const std::vector &data, bool repeat = false, int vlen = 1); + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_f.i b/gnuradio-core/src/lib/gengen/gr_vector_source_f.i new file mode 100644 index 00000000..b0ec77a5 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_f.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,vector_source_f); + +gr_vector_source_f_sptr +gr_make_vector_source_f (const std::vector &data, bool repeat = false, int vlen = 1) + throw(std::invalid_argument); + +class gr_vector_source_f : public gr_sync_block { + public: + void rewind() {d_offset=0;} + private: + gr_vector_source_f (const std::vector &data, int vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_i.cc b/gnuradio-core/src/lib/gengen/gr_vector_source_i.cc new file mode 100644 index 00000000..3b889522 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_i.cc @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +gr_vector_source_i::gr_vector_source_i (const std::vector &data, bool repeat, int vlen) + : gr_sync_block ("vector_source_i", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (int) * vlen)), + d_data (data), + d_repeat (repeat), + d_offset (0), + d_vlen (vlen) +{ + if ((data.size() % vlen) != 0) + throw std::invalid_argument("data length must be a multiple of vlen"); +} + +int +gr_vector_source_i::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + if (d_repeat){ + unsigned int size = d_data.size (); + unsigned int offset = d_offset; + + if (size == 0) + return -1; + + for (int i = 0; i < noutput_items*d_vlen; i++){ + optr[i] = d_data[offset++]; + if (offset >= size) + offset = 0; + } + d_offset = offset; + return noutput_items; + } + + else { + if (d_offset >= d_data.size ()) + return -1; // Done! + + unsigned n = std::min ((unsigned) d_data.size () - d_offset, + (unsigned) noutput_items*d_vlen); + for (unsigned i = 0; i < n; i++) + optr[i] = d_data[d_offset + i]; + + d_offset += n; + return n/d_vlen; + } +} + +gr_vector_source_i_sptr +gr_make_vector_source_i (const std::vector &data, bool repeat, int vlen) +{ + return gr_vector_source_i_sptr (new gr_vector_source_i (data, repeat, vlen)); +} + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_i.h b/gnuradio-core/src/lib/gengen/gr_vector_source_i.h new file mode 100644 index 00000000..bde52321 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_i.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SOURCE_I_H +#define INCLUDED_GR_VECTOR_SOURCE_I_H + +#include + +class gr_vector_source_i; +typedef boost::shared_ptr gr_vector_source_i_sptr; + +/*! + * \brief source of int's that gets its data from a vector + * \ingroup source_blk + */ + +class gr_vector_source_i : public gr_sync_block { + friend gr_vector_source_i_sptr + gr_make_vector_source_i (const std::vector &data, bool repeat, int vlen); + + std::vector d_data; + bool d_repeat; + unsigned int d_offset; + int d_vlen; + + gr_vector_source_i (const std::vector &data, bool repeat, int vlen); + + public: + void rewind() {d_offset=0;} + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +gr_vector_source_i_sptr +gr_make_vector_source_i (const std::vector &data, bool repeat = false, int vlen = 1); + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_i.i b/gnuradio-core/src/lib/gengen/gr_vector_source_i.i new file mode 100644 index 00000000..bcd06741 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_i.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,vector_source_i); + +gr_vector_source_i_sptr +gr_make_vector_source_i (const std::vector &data, bool repeat = false, int vlen = 1) + throw(std::invalid_argument); + +class gr_vector_source_i : public gr_sync_block { + public: + void rewind() {d_offset=0;} + private: + gr_vector_source_i (const std::vector &data, int vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_s.cc b/gnuradio-core/src/lib/gengen/gr_vector_source_s.cc new file mode 100644 index 00000000..f38189c1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_s.cc @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +gr_vector_source_s::gr_vector_source_s (const std::vector &data, bool repeat, int vlen) + : gr_sync_block ("vector_source_s", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 1, sizeof (short) * vlen)), + d_data (data), + d_repeat (repeat), + d_offset (0), + d_vlen (vlen) +{ + if ((data.size() % vlen) != 0) + throw std::invalid_argument("data length must be a multiple of vlen"); +} + +int +gr_vector_source_s::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + if (d_repeat){ + unsigned int size = d_data.size (); + unsigned int offset = d_offset; + + if (size == 0) + return -1; + + for (int i = 0; i < noutput_items*d_vlen; i++){ + optr[i] = d_data[offset++]; + if (offset >= size) + offset = 0; + } + d_offset = offset; + return noutput_items; + } + + else { + if (d_offset >= d_data.size ()) + return -1; // Done! + + unsigned n = std::min ((unsigned) d_data.size () - d_offset, + (unsigned) noutput_items*d_vlen); + for (unsigned i = 0; i < n; i++) + optr[i] = d_data[d_offset + i]; + + d_offset += n; + return n/d_vlen; + } +} + +gr_vector_source_s_sptr +gr_make_vector_source_s (const std::vector &data, bool repeat, int vlen) +{ + return gr_vector_source_s_sptr (new gr_vector_source_s (data, repeat, vlen)); +} + diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_s.h b/gnuradio-core/src/lib/gengen/gr_vector_source_s.h new file mode 100644 index 00000000..5db181f7 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_s.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_VECTOR_SOURCE_S_H +#define INCLUDED_GR_VECTOR_SOURCE_S_H + +#include + +class gr_vector_source_s; +typedef boost::shared_ptr gr_vector_source_s_sptr; + +/*! + * \brief source of short's that gets its data from a vector + * \ingroup source_blk + */ + +class gr_vector_source_s : public gr_sync_block { + friend gr_vector_source_s_sptr + gr_make_vector_source_s (const std::vector &data, bool repeat, int vlen); + + std::vector d_data; + bool d_repeat; + unsigned int d_offset; + int d_vlen; + + gr_vector_source_s (const std::vector &data, bool repeat, int vlen); + + public: + void rewind() {d_offset=0;} + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +gr_vector_source_s_sptr +gr_make_vector_source_s (const std::vector &data, bool repeat = false, int vlen = 1); + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_vector_source_s.i b/gnuradio-core/src/lib/gengen/gr_vector_source_s.i new file mode 100644 index 00000000..415825e4 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_vector_source_s.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,vector_source_s); + +gr_vector_source_s_sptr +gr_make_vector_source_s (const std::vector &data, bool repeat = false, int vlen = 1) + throw(std::invalid_argument); + +class gr_vector_source_s : public gr_sync_block { + public: + void rewind() {d_offset=0;} + private: + gr_vector_source_s (const std::vector &data, int vlen); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_xor_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_xor_XX.cc.t new file mode 100644 index 00000000..f64dd1c9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_XX.cc.t @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include + +@SPTR_NAME@ +gr_make_@BASE_NAME@ () +{ + return @SPTR_NAME@ (new @NAME@ ()); +} + +@NAME@::@NAME@ () + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, 1, sizeof (@O_TYPE@))) +{ +} + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + @O_TYPE@ *optr = (@O_TYPE@ *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc ^ ((@I_TYPE@ *) input_items[j])[i]; + + *optr++ = (@O_TYPE@) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t b/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t new file mode 100644 index 00000000..33d72945 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_XX.h.t @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +#ifndef @GUARD_NAME@ +#define @GUARD_NAME@ + +#include + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +/*! + * \brief output = input_0 ^ input_1 ^ , ... ^ input_N) + * \ingroup math_blk + * + * bitwise boolean xor across all input streams. + */ +class @NAME@ : public gr_sync_block +{ + friend @SPTR_NAME@ gr_make_@BASE_NAME@ (); + + @NAME@ (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_xor_XX.i.t b/gnuradio-core/src/lib/gengen/gr_xor_XX.i.t new file mode 100644 index 00000000..e17d40ee --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_XX.i.t @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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@ + +GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@) + +@SPTR_NAME@ gr_make_@BASE_NAME@ (); + +class @NAME@ : public gr_sync_block +{ + private: + @NAME@ (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_xor_bb.cc b/gnuradio-core/src/lib/gengen/gr_xor_bb.cc new file mode 100644 index 00000000..8d2e1c1d --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_bb.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_xor_bb_sptr +gr_make_xor_bb () +{ + return gr_xor_bb_sptr (new gr_xor_bb ()); +} + +gr_xor_bb::gr_xor_bb () + : gr_sync_block ("xor_bb", + gr_make_io_signature (1, -1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (unsigned char))) +{ +} + +int +gr_xor_bb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + unsigned char *optr = (unsigned char *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + unsigned char acc = ((unsigned char *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc ^ ((unsigned char *) input_items[j])[i]; + + *optr++ = (unsigned char) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_xor_bb.h b/gnuradio-core/src/lib/gengen/gr_xor_bb.h new file mode 100644 index 00000000..b4600a29 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_bb.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_XOR_BB_H +#define INCLUDED_GR_XOR_BB_H + +#include + +class gr_xor_bb; +typedef boost::shared_ptr gr_xor_bb_sptr; + +gr_xor_bb_sptr gr_make_xor_bb (); + +/*! + * \brief output = input_0 ^ input_1 ^ , ... ^ input_N) + * \ingroup math_blk + * + * bitwise boolean xor across all input streams. + */ +class gr_xor_bb : public gr_sync_block +{ + friend gr_xor_bb_sptr gr_make_xor_bb (); + + gr_xor_bb (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_xor_bb.i b/gnuradio-core/src/lib/gengen/gr_xor_bb.i new file mode 100644 index 00000000..23942070 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_bb.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,xor_bb) + +gr_xor_bb_sptr gr_make_xor_bb (); + +class gr_xor_bb : public gr_sync_block +{ + private: + gr_xor_bb (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_xor_ii.cc b/gnuradio-core/src/lib/gengen/gr_xor_ii.cc new file mode 100644 index 00000000..8cc8000b --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_ii.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_xor_ii_sptr +gr_make_xor_ii () +{ + return gr_xor_ii_sptr (new gr_xor_ii ()); +} + +gr_xor_ii::gr_xor_ii () + : gr_sync_block ("xor_ii", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, 1, sizeof (int))) +{ +} + +int +gr_xor_ii::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int *optr = (int *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + int acc = ((int *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc ^ ((int *) input_items[j])[i]; + + *optr++ = (int) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_xor_ii.h b/gnuradio-core/src/lib/gengen/gr_xor_ii.h new file mode 100644 index 00000000..2444d940 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_ii.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_XOR_II_H +#define INCLUDED_GR_XOR_II_H + +#include + +class gr_xor_ii; +typedef boost::shared_ptr gr_xor_ii_sptr; + +gr_xor_ii_sptr gr_make_xor_ii (); + +/*! + * \brief output = input_0 ^ input_1 ^ , ... ^ input_N) + * \ingroup math_blk + * + * bitwise boolean xor across all input streams. + */ +class gr_xor_ii : public gr_sync_block +{ + friend gr_xor_ii_sptr gr_make_xor_ii (); + + gr_xor_ii (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_xor_ii.i b/gnuradio-core/src/lib/gengen/gr_xor_ii.i new file mode 100644 index 00000000..22f234f9 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_ii.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,xor_ii) + +gr_xor_ii_sptr gr_make_xor_ii (); + +class gr_xor_ii : public gr_sync_block +{ + private: + gr_xor_ii (); +}; diff --git a/gnuradio-core/src/lib/gengen/gr_xor_ss.cc b/gnuradio-core/src/lib/gengen/gr_xor_ss.cc new file mode 100644 index 00000000..dc366f55 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_ss.cc @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +gr_xor_ss_sptr +gr_make_xor_ss () +{ + return gr_xor_ss_sptr (new gr_xor_ss ()); +} + +gr_xor_ss::gr_xor_ss () + : gr_sync_block ("xor_ss", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (short))) +{ +} + +int +gr_xor_ss::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + short *optr = (short *) output_items[0]; + + int ninputs = input_items.size (); + + for (int i = 0; i < noutput_items; i++) { + short acc = ((short *) input_items[0])[i]; + for (int j = 1; j < ninputs; j++) + acc = acc ^ ((short *) input_items[j])[i]; + + *optr++ = (short) acc; + } + return noutput_items; +} diff --git a/gnuradio-core/src/lib/gengen/gr_xor_ss.h b/gnuradio-core/src/lib/gengen/gr_xor_ss.h new file mode 100644 index 00000000..e7bb4403 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_ss.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +#ifndef INCLUDED_GR_XOR_SS_H +#define INCLUDED_GR_XOR_SS_H + +#include + +class gr_xor_ss; +typedef boost::shared_ptr gr_xor_ss_sptr; + +gr_xor_ss_sptr gr_make_xor_ss (); + +/*! + * \brief output = input_0 ^ input_1 ^ , ... ^ input_N) + * \ingroup math_blk + * + * bitwise boolean xor across all input streams. + */ +class gr_xor_ss : public gr_sync_block +{ + friend gr_xor_ss_sptr gr_make_xor_ss (); + + gr_xor_ss (); + + public: + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gnuradio-core/src/lib/gengen/gr_xor_ss.i b/gnuradio-core/src/lib/gengen/gr_xor_ss.i new file mode 100644 index 00000000..95d6b7d1 --- /dev/null +++ b/gnuradio-core/src/lib/gengen/gr_xor_ss.i @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(gr,xor_ss) + +gr_xor_ss_sptr gr_make_xor_ss (); + +class gr_xor_ss : public gr_sync_block +{ + private: + gr_xor_ss (); +}; diff --git a/gnuradio-core/src/lib/gengen/stamp-sources-generate b/gnuradio-core/src/lib/gengen/stamp-sources-generate new file mode 100644 index 00000000..e69de29b diff --git a/gnuradio-core/src/lib/hier/Makefile.am b/gnuradio-core/src/lib/hier/Makefile.am new file mode 100644 index 00000000..b525d19b --- /dev/null +++ b/gnuradio-core/src/lib/hier/Makefile.am @@ -0,0 +1,37 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + + +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(WITH_INCLUDES) + +noinst_LTLIBRARIES = libhier.la + +libhier_la_SOURCES = \ + gr_channel_model.cc + +grinclude_HEADERS = \ + gr_channel_model.h + +swiginclude_HEADERS = \ + hier.i \ + gr_channel_model.i diff --git a/gnuradio-core/src/lib/hier/Makefile.in b/gnuradio-core/src/lib/hier/Makefile.in new file mode 100644 index 00000000..bfa95e7c --- /dev/null +++ b/gnuradio-core/src/lib/hier/Makefile.in @@ -0,0 +1,1044 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(swiginclude_HEADERS) \ + $(top_srcdir)/Makefile.common +subdir = gnuradio-core/src/lib/hier +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libhier_la_LIBADD = +am_libhier_la_OBJECTS = gr_channel_model.lo +libhier_la_OBJECTS = $(am_libhier_la_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libhier_la_SOURCES) +DIST_SOURCES = $(libhier_la_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(swigincludedir)" +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(WITH_INCLUDES) +noinst_LTLIBRARIES = libhier.la +libhier_la_SOURCES = \ + gr_channel_model.cc + +grinclude_HEADERS = \ + gr_channel_model.h + +swiginclude_HEADERS = \ + hier.i \ + gr_channel_model.i + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/lib/hier/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-core/src/lib/hier/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libhier.la: $(libhier_la_OBJECTS) $(libhier_la_DEPENDENCIES) + $(CXXLINK) $(libhier_la_OBJECTS) $(libhier_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_channel_model.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-swigincludeHEADERS: $(swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ + $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +uninstall-swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS install-swigincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS uninstall-swigincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ + uninstall-swigincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/lib/hier/gr_channel_model.cc b/gnuradio-core/src/lib/hier/gr_channel_model.cc new file mode 100644 index 00000000..fb57e808 --- /dev/null +++ b/gnuradio-core/src/lib/hier/gr_channel_model.cc @@ -0,0 +1,101 @@ +/* + * 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. + */ + +#include +#include +#include +#include + +// Shared pointer constructor +gr_channel_model_sptr +gr_make_channel_model(double noise_voltage, + double frequency_offset, + double epsilon, + const std::vector &taps, + double noise_seed) +{ + return gnuradio::get_initial_sptr(new gr_channel_model(noise_voltage, + frequency_offset, + epsilon, + taps, + noise_seed)); +} + +// Hierarchical block constructor +gr_channel_model::gr_channel_model(double noise_voltage, + double frequency_offset, + double epsilon, + const std::vector &taps, + double noise_seed) + : gr_hier_block2("gr_channel_model", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + gr_make_io_signature(1, 1, sizeof(gr_complex))) +{ + d_taps = taps; + while(d_taps.size() < 2) { + d_taps.push_back(0); + } + + d_timing_offset = gr_make_fractional_interpolator_cc(0, epsilon); + + d_multipath = gr_make_fir_filter_ccc(1, d_taps); + + d_noise_adder = gr_make_add_cc(); + d_noise = gr_make_noise_source_c(GR_GAUSSIAN, noise_voltage, noise_seed); + d_freq_offset = gr_make_sig_source_c(1, GR_SIN_WAVE, frequency_offset, 1.0, 0.0); + d_mixer_offset = gr_make_multiply_cc(); + + connect(self(), 0, d_timing_offset, 0); + connect(d_timing_offset, 0, d_multipath, 0); + connect(d_multipath, 0, d_mixer_offset, 0); + connect(d_freq_offset, 0, d_mixer_offset, 1); + connect(d_mixer_offset, 0, d_noise_adder, 1); + connect(d_noise, 0, d_noise_adder, 0); + connect(d_noise_adder, 0, self(), 0); +} + +void +gr_channel_model::set_noise_voltage(double noise_voltage) +{ + d_noise->set_amplitude(noise_voltage); +} + +void +gr_channel_model::set_frequency_offset(double frequency_offset) +{ + d_freq_offset->set_frequency(frequency_offset); +} + +void +gr_channel_model::set_taps(const std::vector &taps) +{ + d_taps = taps; + while(d_taps.size() < 2) { + d_taps.push_back(0); + } + d_multipath->set_taps(d_taps); +} + +void +gr_channel_model::set_timing_offset(double epsilon) +{ + d_timing_offset->set_interp_ratio(epsilon); +} diff --git a/gnuradio-core/src/lib/hier/gr_channel_model.h b/gnuradio-core/src/lib/hier/gr_channel_model.h new file mode 100644 index 00000000..116b5dc1 --- /dev/null +++ b/gnuradio-core/src/lib/hier/gr_channel_model.h @@ -0,0 +1,73 @@ +/* + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include + +class gr_channel_model; +typedef boost::shared_ptr gr_channel_model_sptr; + + +gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0, + double frequency_offset=0.0, + double epsilon=1.0, + const std::vector &taps=std::vector(1, 1), + double noise_seed=3021); + +/*! + * \brief channel simulator + * \ingroup misc_blk + */ +class gr_channel_model : public gr_hier_block2 +{ + private: + gr_channel_model(double noise_voltage, + double frequency_offset, + double epsilon, + const std::vector &taps, + double noise_seed); + + friend gr_channel_model_sptr gr_make_channel_model(double noise_voltage, + double frequency_offset, + double epsilon, + const std::vector &taps, + double noise_seed); + + gr_fractional_interpolator_cc_sptr d_timing_offset; + gr_sig_source_c_sptr d_freq_offset; + gr_fir_filter_ccc_sptr d_multipath; + gr_add_cc_sptr d_noise_adder; + gr_noise_source_c_sptr d_noise; + gr_multiply_cc_sptr d_mixer_offset; + + std::vector d_taps; + + public: + void set_noise_voltage(double noise_voltage); + void set_frequency_offset(double frequency_offset); + void set_taps(const std::vector &taps); + void set_timing_offset(double epsilon); +}; diff --git a/gnuradio-core/src/lib/hier/gr_channel_model.i b/gnuradio-core/src/lib/hier/gr_channel_model.i new file mode 100644 index 00000000..ff9ab466 --- /dev/null +++ b/gnuradio-core/src/lib/hier/gr_channel_model.i @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,channel_model) + +gr_channel_model_sptr gr_make_channel_model(double noise_voltage=0.0, + double frequency_offset=0.0, + double epsilon=1.0, + const std::vector &taps=std::vector(1, 1), + double noise_seed=3021); + +class gr_channel_model : public gr_hier_block2 +{ + private: + gr_channel_model(double noise_voltage, + double frequency_offset, + double epsilon, + const std::vector &taps, + double noise_seed); + + public: + void set_noise_voltage(double noise_voltage); + void set_frequency_offset(double frequency_offset); + void set_taps(const std::vector &taps); + void set_timing_offset(double epsilon); +}; diff --git a/gnuradio-core/src/lib/hier/hier.i b/gnuradio-core/src/lib/hier/hier.i new file mode 100644 index 00000000..dbcc8e91 --- /dev/null +++ b/gnuradio-core/src/lib/hier/hier.i @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +%{ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +%} + +%include "gr_channel_model.i" diff --git a/gnuradio-core/src/lib/io/Makefile.am b/gnuradio-core/src/lib/io/Makefile.am index e84337f5..4583a033 100644 --- a/gnuradio-core/src/lib/io/Makefile.am +++ b/gnuradio-core/src/lib/io/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2003,2004 Free Software Foundation, Inc. +# Copyright 2001,2003,2004,2006,2007,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -22,16 +22,18 @@ include $(top_srcdir)/Makefile.common -INCLUDES = $(STD_DEFINES_AND_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libio.la libio_la_SOURCES = \ gr_file_sink.cc \ + gr_file_sink_base.cc \ gr_file_source.cc \ gr_file_descriptor_sink.cc \ gr_file_descriptor_source.cc \ + gr_histo_sink_f.cc \ gr_message_sink.cc \ gr_message_source.cc \ gr_oscope_guts.cc \ @@ -50,13 +52,20 @@ libio_la_SOURCES = \ microtune_xxxx_eval_board.cc \ ppio.cc \ ppio_ppdev.cc \ - sdr_1000.cc + sdr_1000.cc \ + gr_udp_sink.cc \ + gr_udp_source.cc \ + gr_wavfile_sink.cc \ + gr_wavfile_source.cc \ + gri_wavfile.cc grinclude_HEADERS = \ gr_file_sink.h \ + gr_file_sink_base.h \ gr_file_source.h \ gr_file_descriptor_sink.h \ gr_file_descriptor_source.h \ + gr_histo_sink_f.h \ gr_message_sink.h \ gr_message_source.h \ gr_oscope_guts.h \ @@ -77,15 +86,24 @@ grinclude_HEADERS = \ microtune_xxxx_eval_board.h \ ppio.h \ ppio_ppdev.h \ - sdr_1000.h + sdr_1000.h \ + gr_udp_sink.h \ + gr_udp_source.h \ + gr_wavfile_source.h \ + gr_wavfile_sink.h \ + gri_wavfile.h + + swiginclude_HEADERS = \ io.i \ gr_file_sink.i \ + gr_file_sink_base.i \ gr_file_source.i \ gr_file_descriptor_sink.i \ gr_file_descriptor_source.i \ + gr_histo_sink.i \ gr_message_sink.i \ gr_message_source.i \ gr_oscope_sink.i \ @@ -93,4 +111,9 @@ swiginclude_HEADERS = \ microtune_4702_eval_board.i \ microtune_4937_eval_board.i \ ppio.i \ - sdr_1000.i + sdr_1000.i \ + gr_udp_sink.i \ + gr_udp_source.i \ + gr_wavfile_source.i \ + gr_wavfile_sink.i + diff --git a/gnuradio-core/src/lib/io/Makefile.in b/gnuradio-core/src/lib/io/Makefile.in index 234b795d..9197c38d 100644 --- a/gnuradio-core/src/lib/io/Makefile.in +++ b/gnuradio-core/src/lib/io/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2003,2004 Free Software Foundation, Inc. +# Copyright 2001,2003,2004,2006,2007,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +58,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -86,25 +82,35 @@ DIST_COMMON = $(grinclude_HEADERS) $(srcdir)/Makefile.am \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/lib/io ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,26 +162,30 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libio_la_LIBADD = -am_libio_la_OBJECTS = gr_file_sink.lo gr_file_source.lo \ - gr_file_descriptor_sink.lo gr_file_descriptor_source.lo \ +am_libio_la_OBJECTS = gr_file_sink.lo gr_file_sink_base.lo \ + gr_file_source.lo gr_file_descriptor_sink.lo \ + gr_file_descriptor_source.lo gr_histo_sink_f.lo \ gr_message_sink.lo gr_message_source.lo gr_oscope_guts.lo \ gr_oscope_sink_f.lo gr_oscope_sink_x.lo gri_logger.lo i2c.lo \ i2c_bitbang.lo i2c_bbio.lo i2c_bbio_pp.lo microtune_4702.lo \ microtune_4937.lo microtune_4702_eval_board.lo \ microtune_4937_eval_board.lo microtune_xxxx.lo \ - microtune_xxxx_eval_board.lo ppio.lo ppio_ppdev.lo sdr_1000.lo + microtune_xxxx_eval_board.lo ppio.lo ppio_ppdev.lo sdr_1000.lo \ + gr_udp_sink.lo gr_udp_source.lo gr_wavfile_sink.lo \ + gr_wavfile_source.lo gri_wavfile.lo libio_la_OBJECTS = $(am_libio_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libio_la_SOURCES) DIST_SOURCES = $(libio_la_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -175,10 +205,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -186,9 +215,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -196,6 +232,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -208,73 +246,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -284,49 +315,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -334,15 +405,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -352,16 +566,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -370,70 +602,141 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -INCLUDES = $(STD_DEFINES_AND_INCLUDES) +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libio.la libio_la_SOURCES = \ gr_file_sink.cc \ + gr_file_sink_base.cc \ gr_file_source.cc \ gr_file_descriptor_sink.cc \ gr_file_descriptor_source.cc \ + gr_histo_sink_f.cc \ gr_message_sink.cc \ gr_message_source.cc \ gr_oscope_guts.cc \ @@ -452,13 +755,20 @@ libio_la_SOURCES = \ microtune_xxxx_eval_board.cc \ ppio.cc \ ppio_ppdev.cc \ - sdr_1000.cc + sdr_1000.cc \ + gr_udp_sink.cc \ + gr_udp_source.cc \ + gr_wavfile_sink.cc \ + gr_wavfile_source.cc \ + gri_wavfile.cc grinclude_HEADERS = \ gr_file_sink.h \ + gr_file_sink_base.h \ gr_file_source.h \ gr_file_descriptor_sink.h \ gr_file_descriptor_source.h \ + gr_histo_sink_f.h \ gr_message_sink.h \ gr_message_source.h \ gr_oscope_guts.h \ @@ -479,14 +789,21 @@ grinclude_HEADERS = \ microtune_xxxx_eval_board.h \ ppio.h \ ppio_ppdev.h \ - sdr_1000.h + sdr_1000.h \ + gr_udp_sink.h \ + gr_udp_source.h \ + gr_wavfile_source.h \ + gr_wavfile_sink.h \ + gri_wavfile.h swiginclude_HEADERS = \ io.i \ gr_file_sink.i \ + gr_file_sink_base.i \ gr_file_source.i \ gr_file_descriptor_sink.i \ gr_file_descriptor_source.i \ + gr_histo_sink.i \ gr_message_sink.i \ gr_message_source.i \ gr_oscope_sink.i \ @@ -494,7 +811,11 @@ swiginclude_HEADERS = \ microtune_4702_eval_board.i \ microtune_4937_eval_board.i \ ppio.i \ - sdr_1000.i + sdr_1000.i \ + gr_udp_sink.i \ + gr_udp_source.i \ + gr_wavfile_source.i \ + gr_wavfile_sink.i all: all-am @@ -504,8 +825,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -539,7 +860,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libio.la: $(libio_la_OBJECTS) $(libio_la_DEPENDENCIES) - $(CXXLINK) $(libio_la_LDFLAGS) $(libio_la_OBJECTS) $(libio_la_LIBADD) $(LIBS) + $(CXXLINK) $(libio_la_OBJECTS) $(libio_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -550,13 +871,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_file_descriptor_sink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_file_descriptor_source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_file_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_file_sink_base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_file_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_histo_sink_f.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_message_sink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_message_source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_oscope_guts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_oscope_sink_f.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_oscope_sink_x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_udp_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_udp_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_wavfile_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_wavfile_source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_logger.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_wavfile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i2c.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i2c_bbio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i2c_bbio_pp.Plo@am__quote@ @@ -572,22 +900,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdr_1000.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -597,13 +925,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -620,7 +944,7 @@ uninstall-grincludeHEADERS: done install-swigincludeHEADERS: $(swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" @list='$(swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -641,8 +965,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -654,8 +978,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -665,13 +989,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -685,23 +1008,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -712,12 +1033,15 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -734,6 +1058,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -752,7 +1077,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -766,12 +1091,20 @@ info-am: install-data-am: install-grincludeHEADERS install-swigincludeHEADERS +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -792,23 +1125,36 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS uninstall-swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-grincludeHEADERS install-info \ - install-info-am install-man install-strip \ - install-swigincludeHEADERS installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-grincludeHEADERS uninstall-info-am \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ uninstall-swigincludeHEADERS + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc index a3a9a8c0..2da66b7a 100644 --- a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc +++ b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.cc @@ -32,6 +32,7 @@ #include #include #include +#include gr_file_descriptor_sink::gr_file_descriptor_sink (size_t itemsize, int fd) diff --git a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h index 4b5ceff3..fa8fa3f0 100644 --- a/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h +++ b/gnuradio-core/src/lib/io/gr_file_descriptor_sink.h @@ -32,7 +32,7 @@ gr_file_descriptor_sink_sptr gr_make_file_descriptor_sink (size_t itemsize, int /*! * \brief Write stream to file descriptor. - * \ingroup sink + * \ingroup sink_blk */ class gr_file_descriptor_sink : public gr_sync_block diff --git a/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc b/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc index b2d7c6bf..700ad4ae 100644 --- a/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc +++ b/gnuradio-core/src/lib/io/gr_file_descriptor_source.cc @@ -32,6 +32,8 @@ #include #include #include +#include +#include gr_file_descriptor_source::gr_file_descriptor_source (size_t itemsize, diff --git a/gnuradio-core/src/lib/io/gr_file_descriptor_source.h b/gnuradio-core/src/lib/io/gr_file_descriptor_source.h index b233580c..a9f11728 100644 --- a/gnuradio-core/src/lib/io/gr_file_descriptor_source.h +++ b/gnuradio-core/src/lib/io/gr_file_descriptor_source.h @@ -33,7 +33,7 @@ gr_make_file_descriptor_source (size_t itemsize, int fd, bool repeat = false); /*! * \brief Read stream from file descriptor. - * \ingroup source + * \ingroup source_blk */ class gr_file_descriptor_source : public gr_sync_block diff --git a/gnuradio-core/src/lib/io/gr_file_sink.cc b/gnuradio-core/src/lib/io/gr_file_sink.cc index 0b1c567c..d40235fa 100644 --- a/gnuradio-core/src/lib/io/gr_file_sink.cc +++ b/gnuradio-core/src/lib/io/gr_file_sink.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004,2006 Free Software Foundation, Inc. + * Copyright 2004,2006,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -26,91 +26,28 @@ #include #include -#include -#include -#include -#include #include -// win32 (mingw/msvc) specific -#ifdef HAVE_IO_H -#include -#endif -#ifdef O_BINARY -#define OUR_O_BINARY O_BINARY -#else -#define OUR_O_BINARY 0 -#endif -// should be handled via configure -#ifdef O_LARGEFILE -#define OUR_O_LARGEFILE O_LARGEFILE -#else -#define OUR_O_LARGEFILE 0 -#endif +gr_file_sink_sptr +gr_make_file_sink (size_t itemsize, const char *filename) +{ + return gr_file_sink_sptr (new gr_file_sink (itemsize, filename)); +} gr_file_sink::gr_file_sink(size_t itemsize, const char *filename) : gr_sync_block ("file_sink", gr_make_io_signature(1, 1, itemsize), gr_make_io_signature(0, 0, 0)), - d_itemsize(itemsize), d_fp(0), d_new_fp(0), d_updated(false) + gr_file_sink_base(filename, true), + d_itemsize(itemsize) { if (!open(filename)) throw std::runtime_error ("can't open file"); } -gr_file_sink_sptr -gr_make_file_sink (size_t itemsize, const char *filename) -{ - return gr_file_sink_sptr (new gr_file_sink (itemsize, filename)); -} - gr_file_sink::~gr_file_sink () { - close(); - if (d_fp){ - fclose((FILE *) d_fp); - d_fp = 0; - } -} - -bool -gr_file_sink::open(const char *filename) -{ - omni_mutex_lock l(d_mutex); // hold mutex for duration of this function - - // we use the open system call to get access to the O_LARGEFILE flag. - int fd; - if ((fd = ::open (filename, - O_WRONLY|O_CREAT|O_TRUNC|OUR_O_LARGEFILE|OUR_O_BINARY, 0664)) < 0){ - perror (filename); - return false; - } - - if (d_new_fp){ // if we've already got a new one open, close it - fclose((FILE *) d_new_fp); - d_new_fp = 0; - } - - if ((d_new_fp = fdopen (fd, "wb")) == NULL){ - perror (filename); - ::close(fd); // don't leak file descriptor if fdopen fails. - } - - d_updated = true; - return d_new_fp != 0; -} - -void -gr_file_sink::close() -{ - omni_mutex_lock l(d_mutex); // hold mutex for duration of this function - - if (d_new_fp){ - fclose((FILE *) d_new_fp); - d_new_fp = 0; - } - d_updated = true; } int @@ -121,20 +58,13 @@ gr_file_sink::work (int noutput_items, char *inbuf = (char *) input_items[0]; int nwritten = 0; - if (d_updated){ - omni_mutex_lock l(d_mutex); // hold mutex for duration of this block - if (d_fp) - fclose((FILE *)d_fp); - d_fp = d_new_fp; // install new file pointer - d_new_fp = 0; - d_updated = false; - } + do_update(); // update d_fp is reqd if (!d_fp) return noutput_items; // drop output on the floor while (nwritten < noutput_items){ - int count = fwrite (inbuf, d_itemsize, noutput_items - nwritten, (FILE *) d_fp); + int count = fwrite (inbuf, d_itemsize, noutput_items - nwritten, d_fp); if (count == 0) // FIXME add error handling break; nwritten += count; diff --git a/gnuradio-core/src/lib/io/gr_file_sink.h b/gnuradio-core/src/lib/io/gr_file_sink.h index 5a5207b7..b9ad06cd 100644 --- a/gnuradio-core/src/lib/io/gr_file_sink.h +++ b/gnuradio-core/src/lib/io/gr_file_sink.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -24,7 +24,7 @@ #define INCLUDED_GR_FILE_SINK_H #include -#include +#include class gr_file_sink; typedef boost::shared_ptr gr_file_sink_sptr; @@ -33,19 +33,15 @@ gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename); /*! * \brief Write stream to file. - * \ingroup sink + * \ingroup sink_blk */ -class gr_file_sink : public gr_sync_block +class gr_file_sink : public gr_sync_block, public gr_file_sink_base { friend gr_file_sink_sptr gr_make_file_sink(size_t itemsize, const char *filename); private: size_t d_itemsize; - void *d_fp; // current FILE pointer - void *d_new_fp; // new FILE pointer - bool d_updated; // is there a new FILE pointer? - omni_mutex d_mutex; protected: gr_file_sink(size_t itemsize, const char *filename); @@ -53,23 +49,9 @@ class gr_file_sink : public gr_sync_block public: ~gr_file_sink(); - /*! - * \brief Open filename and begin output to it. - */ - bool open(const char *filename); - - /*! - * \brief Close current output file. - * - * Closes current output file and ignores any output until - * open is called to connect to another file. - */ - void close(); - int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); }; - #endif /* INCLUDED_GR_FILE_SINK_H */ diff --git a/gnuradio-core/src/lib/io/gr_file_sink.i b/gnuradio-core/src/lib/io/gr_file_sink.i index 07b0a30e..64260392 100644 --- a/gnuradio-core/src/lib/io/gr_file_sink.i +++ b/gnuradio-core/src/lib/io/gr_file_sink.i @@ -25,7 +25,7 @@ GR_SWIG_BLOCK_MAGIC(gr,file_sink) gr_file_sink_sptr gr_make_file_sink (size_t itemsize, const char *filename); -class gr_file_sink : public gr_sync_block +class gr_file_sink : public gr_sync_block, public gr_file_sink_base { protected: gr_file_sink (size_t itemsize, const char *filename); diff --git a/gnuradio-core/src/lib/io/gr_file_sink_base.cc b/gnuradio-core/src/lib/io/gr_file_sink_base.cc new file mode 100644 index 00000000..29ac0dbb --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_file_sink_base.cc @@ -0,0 +1,119 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +// win32 (mingw/msvc) specific +#ifdef HAVE_IO_H +#include +#endif +#ifdef O_BINARY +#define OUR_O_BINARY O_BINARY +#else +#define OUR_O_BINARY 0 +#endif + +// should be handled via configure +#ifdef O_LARGEFILE +#define OUR_O_LARGEFILE O_LARGEFILE +#else +#define OUR_O_LARGEFILE 0 +#endif + +gr_file_sink_base::gr_file_sink_base(const char *filename, bool is_binary) + : d_fp(0), d_new_fp(0), d_updated(false), d_is_binary(is_binary) +{ + if (!open(filename)) + throw std::runtime_error ("can't open file"); +} + +gr_file_sink_base::~gr_file_sink_base () +{ + close(); + if (d_fp){ + fclose(d_fp); + d_fp = 0; + } +} + +bool +gr_file_sink_base::open(const char *filename) +{ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this function + + // we use the open system call to get access to the O_LARGEFILE flag. + int fd; + if ((fd = ::open (filename, + O_WRONLY|O_CREAT|O_TRUNC|OUR_O_LARGEFILE|OUR_O_BINARY, + 0664)) < 0){ + perror (filename); + return false; + } + + if (d_new_fp){ // if we've already got a new one open, close it + fclose(d_new_fp); + d_new_fp = 0; + } + + if ((d_new_fp = fdopen (fd, d_is_binary ? "wb" : "w")) == NULL){ + perror (filename); + ::close(fd); // don't leak file descriptor if fdopen fails. + } + + d_updated = true; + return d_new_fp != 0; +} + +void +gr_file_sink_base::close() +{ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this function + + if (d_new_fp){ + fclose(d_new_fp); + d_new_fp = 0; + } + d_updated = true; +} + +void +gr_file_sink_base::do_update() +{ + if (d_updated){ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this block + if (d_fp) + fclose(d_fp); + d_fp = d_new_fp; // install new file pointer + d_new_fp = 0; + d_updated = false; + } +} diff --git a/gnuradio-core/src/lib/io/gr_file_sink_base.h b/gnuradio-core/src/lib/io/gr_file_sink_base.h new file mode 100644 index 00000000..f36f5ac9 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_file_sink_base.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifndef INCLUDED_GR_FILE_SINK_BASE_H +#define INCLUDED_GR_FILE_SINK_BASE_H + +#include +#include + +/*! + * \brief Common base class for file sinks + */ +class gr_file_sink_base +{ + protected: + FILE *d_fp; // current FILE pointer + FILE *d_new_fp; // new FILE pointer + bool d_updated; // is there a new FILE pointer? + bool d_is_binary; + omni_mutex d_mutex; + + protected: + gr_file_sink_base(const char *filename, bool is_binary); + + public: + ~gr_file_sink_base(); + + /*! + * \brief Open filename and begin output to it. + */ + bool open(const char *filename); + + /*! + * \brief Close current output file. + * + * Closes current output file and ignores any output until + * open is called to connect to another file. + */ + void close(); + + /*! + * \brief if we've had an update, do it now. + */ + void do_update(); +}; + + +#endif /* INCLUDED_GR_FILE_SINK_BASE_H */ diff --git a/gnuradio-core/src/lib/io/gr_file_sink_base.i b/gnuradio-core/src/lib/io/gr_file_sink_base.i new file mode 100644 index 00000000..05a3353b --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_file_sink_base.i @@ -0,0 +1,46 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ +class gr_file_sink_base +{ + protected: + gr_file_sink_base(const char *filename, bool is_binary); + + public: + ~gr_file_sink_base(); + + /*! + * \brief Open filename and begin output to it. + */ + bool open(const char *filename); + + /*! + * \brief Close current output file. + * + * Closes current output file and ignores any output until + * open is called to connect to another file. + */ + void close(); + + /*! + * \brief if we've had an update, do it now. + */ + void do_update(); +}; diff --git a/gnuradio-core/src/lib/io/gr_file_source.cc b/gnuradio-core/src/lib/io/gr_file_source.cc index 95d1c0ac..5591826d 100644 --- a/gnuradio-core/src/lib/io/gr_file_source.cc +++ b/gnuradio-core/src/lib/io/gr_file_source.cc @@ -31,6 +31,7 @@ #include #include #include +#include // win32 (mingw/msvc) specific #ifdef HAVE_IO_H diff --git a/gnuradio-core/src/lib/io/gr_file_source.h b/gnuradio-core/src/lib/io/gr_file_source.h index bf490040..5f5c2564 100644 --- a/gnuradio-core/src/lib/io/gr_file_source.h +++ b/gnuradio-core/src/lib/io/gr_file_source.h @@ -33,7 +33,7 @@ gr_make_file_source (size_t itemsize, const char *filename, bool repeat = false) /*! * \brief Read stream from file - * \ingroup source + * \ingroup source_blk */ class gr_file_source : public gr_sync_block diff --git a/gnuradio-core/src/lib/io/gr_histo_sink.i b/gnuradio-core/src/lib/io/gr_histo_sink.i new file mode 100644 index 00000000..544d772f --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_histo_sink.i @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + + +GR_SWIG_BLOCK_MAGIC(gr,histo_sink_f) + +gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq); + +class gr_histo_sink_f : public gr_sync_block +{ +public: + ~gr_histo_sink_f (void); + + unsigned int get_frame_size(void); + unsigned int get_num_bins(void); + + void set_frame_size(unsigned int frame_size); + void set_num_bins(unsigned int num_bins); + +}; diff --git a/gnuradio-core/src/lib/io/gr_histo_sink_f.cc b/gnuradio-core/src/lib/io/gr_histo_sink_f.cc new file mode 100644 index 00000000..a923a7e4 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_histo_sink_f.cc @@ -0,0 +1,169 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +static float get_clean_num(float num){ + if (num == 0) return 0; + /* extract sign and exponent from num */ + int sign = (num < 0) ? -1 : 1; num = fabs(num); + float exponent = floor(log10(num)); + /* search for closest number with base 1, 2, 5, 10 */ + float closest_num = 10*pow(10, exponent); + if (fabs(num - 1*pow(10, exponent)) < fabs(num - closest_num)) + closest_num = 1*pow(10, exponent); + if (fabs(num - 2*pow(10, exponent)) < fabs(num - closest_num)) + closest_num = 2*pow(10, exponent); + if (fabs(num - 5*pow(10, exponent)) < fabs(num - closest_num)) + closest_num = 5*pow(10, exponent); + return sign*closest_num; +} + +gr_histo_sink_f_sptr +gr_make_histo_sink_f (gr_msg_queue_sptr msgq) +{ + return gr_histo_sink_f_sptr (new gr_histo_sink_f (msgq)); +} + +gr_histo_sink_f::gr_histo_sink_f (gr_msg_queue_sptr msgq) + : gr_sync_block ("histo_sink_f", gr_make_io_signature (1, 1, sizeof (float)), gr_make_io_signature (0, 0, 0)), + d_msgq (msgq), d_num_bins(11), d_frame_size(1000), d_sample_count(0), d_bins(NULL), d_samps(NULL) +{ + pthread_mutex_init(&d_mutex, 0); + //allocate arrays and clear + set_num_bins(d_num_bins); + set_frame_size(d_frame_size); +} + +gr_histo_sink_f::~gr_histo_sink_f (void) +{ + pthread_mutex_destroy(&d_mutex); + delete [] d_samps; + delete [] d_bins; +} + +int +gr_histo_sink_f::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + pthread_mutex_lock(&d_mutex); + for (unsigned int i = 0; i < (unsigned int)noutput_items; i++){ + d_samps[d_sample_count] = in[i]; + d_sample_count++; + /* processed a frame? */ + if (d_sample_count == d_frame_size){ + send_frame(); + clear(); + } + } + pthread_mutex_unlock(&d_mutex); + return noutput_items; +} + +void +gr_histo_sink_f::send_frame(void){ + /* output queue full, drop the data */ + if (d_msgq->full_p()) return; + /* find the minimum and maximum */ + float minimum = d_samps[0]; + float maximum = d_samps[0]; + for (unsigned int i = 0; i < d_frame_size; i++){ + if (d_samps[i] < minimum) minimum = d_samps[i]; + if (d_samps[i] > maximum) maximum = d_samps[i]; + } + minimum = get_clean_num(minimum); + maximum = get_clean_num(maximum); + if (minimum == maximum || minimum > maximum) return; //useless data or screw up? + /* load the bins */ + int index; + float bin_width = (maximum - minimum)/(d_num_bins-1); + for (unsigned int i = 0; i < d_sample_count; i++){ + index = round((d_samps[i] - minimum)/bin_width); + /* ensure the index range in case a small floating point error is involed */ + if (index < 0) index = 0; + if (index >= (int)d_num_bins) index = d_num_bins-1; + d_bins[index]++; + } + /* Build a message to hold the output records */ + gr_message_sptr msg = gr_make_message(0, minimum, maximum, d_num_bins*sizeof(float)); + float *out = (float *)msg->msg(); // get pointer to raw message buffer + /* normalize the bins and put into message */ + for (unsigned int i = 0; i < d_num_bins; i++){ + out[i] = ((float)d_bins[i])/d_frame_size; + } + /* send the message */ + d_msgq->handle(msg); +} + +void +gr_histo_sink_f::clear(void){ + d_sample_count = 0; + /* zero the bins */ + for (unsigned int i = 0; i < d_num_bins; i++){ + d_bins[i] = 0; + } +} + +/************************************************** + * Getters + **************************************************/ +unsigned int +gr_histo_sink_f::get_frame_size(void){ + return d_frame_size; +} + +unsigned int +gr_histo_sink_f::get_num_bins(void){ + return d_num_bins; +} + +/************************************************** + * Setters + **************************************************/ +void +gr_histo_sink_f::set_frame_size(unsigned int frame_size){ + pthread_mutex_lock(&d_mutex); + d_frame_size = frame_size; + /* allocate a new sample array */ + delete [] d_samps; + d_samps = new float[d_frame_size]; + clear(); + pthread_mutex_unlock(&d_mutex); +} + +void +gr_histo_sink_f::set_num_bins(unsigned int num_bins){ + pthread_mutex_lock(&d_mutex); + d_num_bins = num_bins; + /* allocate a new bin array */ + delete [] d_bins; + d_bins = new unsigned int[d_num_bins]; + clear(); + pthread_mutex_unlock(&d_mutex); +} diff --git a/gnuradio-core/src/lib/io/gr_histo_sink_f.h b/gnuradio-core/src/lib/io/gr_histo_sink_f.h new file mode 100644 index 00000000..640398c6 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_histo_sink_f.h @@ -0,0 +1,70 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_GR_HISTO_SINK_F_H +#define INCLUDED_GR_HISTO_SINK_F_H + +#include +#include +#include + +class gr_histo_sink_f; +typedef boost::shared_ptr gr_histo_sink_f_sptr; + +gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq); + +/*! + * \brief Histogram module. + * \ingroup sink_blk + */ +class gr_histo_sink_f : public gr_sync_block +{ +private: + gr_msg_queue_sptr d_msgq; + unsigned int d_num_bins; + unsigned int d_frame_size; + unsigned int d_sample_count; + unsigned int *d_bins; + float *d_samps; + pthread_mutex_t d_mutex; + + friend gr_histo_sink_f_sptr gr_make_histo_sink_f (gr_msg_queue_sptr msgq); + gr_histo_sink_f (gr_msg_queue_sptr msgq); + void send_frame(void); + void clear(void); + +public: + ~gr_histo_sink_f (void); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + unsigned int get_frame_size(void); + unsigned int get_num_bins(void); + + void set_frame_size(unsigned int frame_size); + void set_num_bins(unsigned int num_bins); + +}; + +#endif /* INCLUDED_GR_HISTO_SINK_F_H */ diff --git a/gnuradio-core/src/lib/io/gr_message_sink.cc b/gnuradio-core/src/lib/io/gr_message_sink.cc index 0cb1c002..b9e0cc38 100644 --- a/gnuradio-core/src/lib/io/gr_message_sink.cc +++ b/gnuradio-core/src/lib/io/gr_message_sink.cc @@ -32,6 +32,7 @@ #include #include #include +#include // public constructor that returns a shared_ptr diff --git a/gnuradio-core/src/lib/io/gr_message_sink.h b/gnuradio-core/src/lib/io/gr_message_sink.h index 9126358c..5f1e5f91 100644 --- a/gnuradio-core/src/lib/io/gr_message_sink.h +++ b/gnuradio-core/src/lib/io/gr_message_sink.h @@ -36,7 +36,7 @@ gr_message_sink_sptr gr_make_message_sink (size_t itemsize, /*! * \brief Gather received items into messages and insert into msgq - * \ingroup sink + * \ingroup sink_blk */ class gr_message_sink : public gr_sync_block { diff --git a/gnuradio-core/src/lib/io/gr_message_source.cc b/gnuradio-core/src/lib/io/gr_message_source.cc index bf45318d..3fbe3708 100644 --- a/gnuradio-core/src/lib/io/gr_message_source.cc +++ b/gnuradio-core/src/lib/io/gr_message_source.cc @@ -32,6 +32,7 @@ #include #include #include +#include // public constructor that returns a shared_ptr diff --git a/gnuradio-core/src/lib/io/gr_message_source.h b/gnuradio-core/src/lib/io/gr_message_source.h index 4a1378c2..5a5c6a5d 100644 --- a/gnuradio-core/src/lib/io/gr_message_source.h +++ b/gnuradio-core/src/lib/io/gr_message_source.h @@ -34,7 +34,7 @@ gr_message_source_sptr gr_make_message_source (size_t itemsize, int msgq_limit=0 /*! * \brief Turn received messages into a stream - * \ingroup source + * \ingroup source_blk */ class gr_message_source : public gr_sync_block { diff --git a/gnuradio-core/src/lib/io/gr_oscope_guts.cc b/gnuradio-core/src/lib/io/gr_oscope_guts.cc index 2272aa0f..80f78240 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_guts.cc +++ b/gnuradio-core/src/lib/io/gr_oscope_guts.cc @@ -31,30 +31,31 @@ #include #include -static const int OUTPUT_RECORD_SIZE = 2048; // must be power of 2 +static const int OUTPUT_RECORD_SIZE = 2048; // must be power of 2 static inline int -wrap_bi (int buffer_index) // wrap buffer index +wrap_bi (int buffer_index) // wrap buffer index { return buffer_index & (OUTPUT_RECORD_SIZE - 1); } static inline int -incr_bi (int buffer_index) // increment buffer index +incr_bi (int buffer_index) // increment buffer index { return wrap_bi (buffer_index + 1); } static inline int -decr_bi (int buffer_index) // decrement buffer index +decr_bi (int buffer_index) // decrement buffer index { return wrap_bi (buffer_index - 1); } -gr_oscope_guts::gr_oscope_guts (int nchannels, double sample_rate, gr_msg_queue_sptr msgq) - : d_nchannels (nchannels), +gr_oscope_guts::gr_oscope_guts (double sample_rate, gr_msg_queue_sptr msgq) + : d_nchannels (1), d_msgq (msgq), - d_trigger_mode (gr_TRIG_AUTO), + d_trigger_mode (gr_TRIG_MODE_AUTO), + d_trigger_slope (gr_TRIG_SLOPE_POS), d_trigger_channel (0), d_sample_rate (sample_rate), d_update_rate (20), @@ -65,19 +66,14 @@ gr_oscope_guts::gr_oscope_guts (int nchannels, double sample_rate, gr_msg_queue_ d_decimator_count_init (1), d_hold_off_count (0), d_hold_off_count_init (OUTPUT_RECORD_SIZE/2-1), + d_pre_trigger_count (0), d_post_trigger_count (0), - d_post_trigger_count_init (OUTPUT_RECORD_SIZE/2), - d_prev_sample (0) + d_post_trigger_count_init (OUTPUT_RECORD_SIZE/2) { - if (d_nchannels > MAX_CHANNELS){ - fprintf (stderr, "gr_oscope_guts: too many channels. MAX_CHANNELS = %d\n", MAX_CHANNELS); - throw std::runtime_error ("too many channels"); - } - for (int i = 0; i < MAX_CHANNELS; i++) d_buffer[i] = 0; - for (int i = 0; i < d_nchannels; i++){ + for (int i = 0; i < MAX_CHANNELS; i++){ d_buffer[i] = new float [OUTPUT_RECORD_SIZE]; for (int j = 0; j < OUTPUT_RECORD_SIZE; j++) d_buffer[i][j] = 0.0; @@ -109,10 +105,8 @@ gr_oscope_guts::process_sample (const float *channel_data) d_decimator_count = d_decimator_count_init; for (int i = 0; i < d_nchannels; i++) - d_buffer[i][d_obi] = channel_data[i]; // copy data into buffer + d_buffer[i][d_obi] = channel_data[i]; // copy data into buffer - int trigger = 0; - switch (d_state){ case HOLD_OFF: d_hold_off_count--; @@ -121,12 +115,8 @@ gr_oscope_guts::process_sample (const float *channel_data) break; case LOOK_FOR_TRIGGER: - trigger = found_trigger (d_buffer[d_trigger_channel][d_obi]); - if (trigger != 0){ + if (found_trigger ()) enter_post_trigger (); - if (trigger < 0) // previous sample was closer - d_post_trigger_count--; - } break; case POST_TRIGGER: @@ -158,8 +148,8 @@ gr_oscope_guts::enter_hold_off () void gr_oscope_guts::enter_look_for_trigger () { + d_pre_trigger_count = 0; d_state = LOOK_FOR_TRIGGER; - d_prev_sample = d_buffer[d_trigger_channel][d_obi]; } void @@ -167,48 +157,49 @@ gr_oscope_guts::enter_post_trigger () { d_state = POST_TRIGGER; d_post_trigger_count = d_post_trigger_count_init; + //ensure that the trigger offset is no more than than half a sample + if (d_trigger_off > .5) d_trigger_off -= 1; + else d_post_trigger_count--; } // ---------------------------------------------------------------- -// returns 0 if no trigger found. -// returns +1 if this sample is the trigger point -// returns -1 if the previous sample is the trigger point +// returns true if trigger found -int -gr_oscope_guts::found_trigger (float new_sample) +bool +gr_oscope_guts::found_trigger () { - float prev_sample = d_prev_sample; - d_prev_sample = new_sample; - bool trig; + float prev_sample = d_buffer[d_trigger_channel][decr_bi(d_obi)]; + float new_sample = d_buffer[d_trigger_channel][d_obi]; switch (d_trigger_mode){ - case gr_TRIG_AUTO: // always trigger - return +1; - - case gr_TRIG_POS_SLOPE: - trig = prev_sample < d_trigger_level && new_sample >= d_trigger_level; - if (trig){ - if (fabs (prev_sample - d_trigger_level) < fabs (new_sample - d_trigger_level)) - return -1; - else - return +1; - } - return 0; - - case gr_TRIG_NEG_SLOPE: - trig = prev_sample > d_trigger_level && new_sample <= d_trigger_level; - if (trig){ - if (fabs (prev_sample - d_trigger_level) < fabs (new_sample - d_trigger_level)) - return -1; - else - return +1; + case gr_TRIG_MODE_AUTO: //too many samples without a trigger + d_pre_trigger_count++; + if (d_pre_trigger_count > OUTPUT_RECORD_SIZE/2) return true; + + case gr_TRIG_MODE_NORM: //look for trigger + switch (d_trigger_slope){ + + case gr_TRIG_SLOPE_POS: //trigger point in pos slope? + if (new_sample < d_trigger_level || prev_sample >= d_trigger_level) return false; + break; + + case gr_TRIG_SLOPE_NEG: //trigger point in neg slope? + if (new_sample > d_trigger_level || prev_sample <= d_trigger_level) return false; + break; } - return 0; + + //calculate the trigger offset in % sample + d_trigger_off = (d_trigger_level - prev_sample)/(new_sample - prev_sample); + return true; + + case gr_TRIG_MODE_FREE: //free run mode, always trigger + d_trigger_off = 0; + return true; default: assert (0); - return 0; + return false; } } @@ -218,28 +209,30 @@ gr_oscope_guts::found_trigger (float new_sample) void gr_oscope_guts::write_output_records () { - // if the output queue if full, drop the data on the ground. + // if the output queue if full, drop the data like its hot. if (d_msgq->full_p()) return; - - // Build a message to hold the output records + // Build a message to hold the output records gr_message_sptr msg = - gr_make_message(0, // msg type - d_nchannels, // arg1 for other side - OUTPUT_RECORD_SIZE, // arg2 for other side - d_nchannels * OUTPUT_RECORD_SIZE * sizeof(float)); // sizeof payload + gr_make_message(0, // msg type + d_nchannels, // arg1 for other side + OUTPUT_RECORD_SIZE, // arg2 for other side + ((d_nchannels * OUTPUT_RECORD_SIZE) + 1) * sizeof(float)); // sizeof payload - float *out = (float *)msg->msg(); // get pointer to raw message buffer + float *out = (float *)msg->msg(); // get pointer to raw message buffer for (int ch = 0; ch < d_nchannels; ch++){ // note that d_obi + 1 points at the oldest sample in the buffer - for (int i = 0; i < OUTPUT_RECORD_SIZE; i++) + for (int i = 0; i < OUTPUT_RECORD_SIZE; i++){ out[i] = d_buffer[ch][wrap_bi(d_obi + 1 + i)]; - + } out += OUTPUT_RECORD_SIZE; } - - d_msgq->handle(msg); // send the msg + //Set the last sample as the trigger offset: + // The non gl scope sink will not look at this last sample. + // The gl scope sink will use this last sample as an offset. + out[0] = d_trigger_off; + d_msgq->handle(msg); // send the msg } // ---------------------------------------------------------------- @@ -291,15 +284,17 @@ gr_oscope_guts::set_trigger_channel (int channel) bool gr_oscope_guts::set_trigger_mode (gr_trigger_mode mode) { - switch (mode){ - case gr_TRIG_POS_SLOPE: - case gr_TRIG_NEG_SLOPE: - case gr_TRIG_AUTO: - d_trigger_mode = mode; - trigger_changed (); - return true; - } - return false; + d_trigger_mode = mode; + trigger_changed (); + return true; +} + +bool +gr_oscope_guts::set_trigger_slope (gr_trigger_slope slope) +{ + d_trigger_slope = slope; + trigger_changed (); + return true; } bool @@ -315,23 +310,30 @@ gr_oscope_guts::set_trigger_level_auto () { // find the level 1/2 way between the min and the max - float min_v = d_buffer[d_trigger_channel][0]; - float max_v = d_buffer[d_trigger_channel][0]; + float min_v = d_buffer[d_trigger_channel][0]; + float max_v = d_buffer[d_trigger_channel][0]; for (int i = 1; i < OUTPUT_RECORD_SIZE; i++){ min_v = std::min (min_v, d_buffer[d_trigger_channel][i]); max_v = std::max (max_v, d_buffer[d_trigger_channel][i]); } + return set_trigger_level((min_v + max_v) * 0.5); +} - d_trigger_level = (min_v + max_v) * 0.5; - trigger_changed (); - return true; +bool +gr_oscope_guts::set_num_channels(int nchannels) +{ + if (nchannels > 0 && nchannels <= MAX_CHANNELS){ + d_nchannels = nchannels; + return true; + } + return false; } + void gr_oscope_guts::trigger_changed () { - // d_prev_sample = d_buffer[d_trigger_channel][decr_bi(d_obi)]; enter_look_for_trigger (); } @@ -373,6 +375,12 @@ gr_oscope_guts::get_trigger_mode () const return d_trigger_mode; } +gr_trigger_slope +gr_oscope_guts::get_trigger_slope () const +{ + return d_trigger_slope; +} + double gr_oscope_guts::get_trigger_level () const { diff --git a/gnuradio-core/src/lib/io/gr_oscope_guts.h b/gnuradio-core/src/lib/io/gr_oscope_guts.h index ee3bbc31..f39db62f 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_guts.h +++ b/gnuradio-core/src/lib/io/gr_oscope_guts.h @@ -41,13 +41,15 @@ */ class gr_oscope_guts { +public: + static const int MAX_CHANNELS = 8; private: - static const int MAX_CHANNELS = 16; enum scope_state { HOLD_OFF, LOOK_FOR_TRIGGER, POST_TRIGGER }; int d_nchannels; // how many channels gr_msg_queue_sptr d_msgq; // message queue we stuff output records into - gr_trigger_mode d_trigger_mode; + gr_trigger_mode d_trigger_mode; + gr_trigger_slope d_trigger_slope; int d_trigger_channel; // which channel to watch for trigger condition double d_sample_rate; // input sample rate in Hz double d_update_rate; // approx freq to produce an output record (Hz) @@ -61,9 +63,10 @@ private: int d_decimator_count_init; int d_hold_off_count; int d_hold_off_count_init; + int d_pre_trigger_count; int d_post_trigger_count; int d_post_trigger_count_init; - float d_prev_sample; // used for trigger checking + float d_trigger_off; //%sample trigger is off // NOT IMPLEMENTED gr_oscope_guts (const gr_oscope_guts &rhs); // no copy constructor @@ -71,7 +74,7 @@ private: void trigger_changed (); void update_rate_or_decimation_changed (); - int found_trigger (float sample); // returns -1, 0, +1 + bool found_trigger (); // returns true if found void write_output_records (); void enter_hold_off (); // called on state entry @@ -80,7 +83,7 @@ private: public: // CREATORS - gr_oscope_guts (int nchannels, double sample_rate, gr_msg_queue_sptr msgq); + gr_oscope_guts (double sample_rate, gr_msg_queue_sptr msgq); ~gr_oscope_guts (); // MANIPULATORS @@ -95,9 +98,11 @@ public: bool set_decimation_count (int decimation_count); bool set_trigger_channel (int channel); bool set_trigger_mode (gr_trigger_mode mode); + bool set_trigger_slope (gr_trigger_slope slope); bool set_trigger_level (double trigger_level); bool set_trigger_level_auto (); // set to 50% level bool set_sample_rate(double sample_rate); + bool set_num_channels(int nchannels); // ACCESSORS @@ -107,6 +112,7 @@ public: int get_decimation_count () const; int get_trigger_channel () const; gr_trigger_mode get_trigger_mode () const; + gr_trigger_slope get_trigger_slope () const; double get_trigger_level () const; // # of samples written to each output record. diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink.i b/gnuradio-core/src/lib/io/gr_oscope_sink.i index 7802dac8..9d634193 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_sink.i +++ b/gnuradio-core/src/lib/io/gr_oscope_sink.i @@ -20,11 +20,7 @@ * Boston, MA 02110-1301, USA. */ -enum gr_trigger_mode { - gr_TRIG_AUTO, // auto trigger (on anything) - gr_TRIG_POS_SLOPE, // trigger on positive slope across trigger level - gr_TRIG_NEG_SLOPE // trigger on negative slope across trigger level -}; +%include gr_trigger_mode.h // GR_SWIG_BLOCK_MAGIC(gr,oscope_sink_x) @@ -43,6 +39,7 @@ class gr_oscope_sink_x : public gr_sync_block bool set_decimation_count (int decimation_count); bool set_trigger_channel (int channel); bool set_trigger_mode (gr_trigger_mode mode); + bool set_trigger_slope (gr_trigger_slope slope); bool set_trigger_level (double trigger_level); bool set_trigger_level_auto (); // set to 50% level bool set_sample_rate(double sample_rate); @@ -54,6 +51,7 @@ class gr_oscope_sink_x : public gr_sync_block int get_decimation_count () const; int get_trigger_channel () const; gr_trigger_mode get_trigger_mode () const; + gr_trigger_slope get_trigger_slope () const; double get_trigger_level () const; // # of samples written to each output record. diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc b/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc index 5e0e3066..cb401699 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc +++ b/gnuradio-core/src/lib/io/gr_oscope_sink_f.cc @@ -38,20 +38,18 @@ gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq) gr_oscope_sink_f::gr_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq) : gr_oscope_sink_x ("oscope_sink_f", - gr_make_io_signature (1, MAX_CHANNELS, sizeof (float)), + gr_make_io_signature (1, gr_oscope_guts::MAX_CHANNELS, sizeof (float)), sampling_rate), d_msgq(msgq) { + d_guts = new gr_oscope_guts (d_sampling_rate, d_msgq); } bool gr_oscope_sink_f::check_topology (int ninputs, int noutputs) { - delete d_guts; - d_guts = 0; - d_guts = new gr_oscope_guts (ninputs, d_sampling_rate, d_msgq); - return true; + return d_guts->set_num_channels(ninputs); } @@ -65,7 +63,7 @@ gr_oscope_sink_f::work (int noutput_items, gr_vector_void_star &output_items) { int ni = input_items.size (); - float tmp[MAX_CHANNELS]; + float tmp[gr_oscope_guts::MAX_CHANNELS]; for (int i = 0; i < noutput_items; i++){ diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h b/gnuradio-core/src/lib/io/gr_oscope_sink_f.h index 620aac37..1a8022b8 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_sink_f.h +++ b/gnuradio-core/src/lib/io/gr_oscope_sink_f.h @@ -34,15 +34,12 @@ gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_ /*! * \brief Building block for python oscilloscope module. - * \ingroup sink + * \ingroup sink_blk * - * Accepts 1 to 16 float streams. + * Accepts multiple float streams. */ class gr_oscope_sink_f : public gr_oscope_sink_x { -public: - static const int MAX_CHANNELS = 16; - private: friend gr_oscope_sink_f_sptr gr_make_oscope_sink_f (double sampling_rate, gr_msg_queue_sptr msgq); diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc b/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc index f2c2d437..2bbd5746 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc +++ b/gnuradio-core/src/lib/io/gr_oscope_sink_x.cc @@ -68,6 +68,12 @@ gr_oscope_sink_x::set_trigger_mode (gr_trigger_mode mode) return d_guts->set_trigger_mode (mode); } +bool +gr_oscope_sink_x::set_trigger_slope (gr_trigger_slope slope) +{ + return d_guts->set_trigger_slope (slope); +} + bool gr_oscope_sink_x::set_trigger_level (double trigger_level) { @@ -87,6 +93,12 @@ gr_oscope_sink_x::set_sample_rate (double sample_rate) return d_guts->set_sample_rate (sample_rate); } +bool +gr_oscope_sink_x::set_num_channels (int nchannels) +{ + return d_guts->set_num_channels (nchannels); +} + // ACCESSORS int @@ -125,6 +137,12 @@ gr_oscope_sink_x::get_trigger_mode () const return d_guts->get_trigger_mode (); } +gr_trigger_slope +gr_oscope_sink_x::get_trigger_slope () const +{ + return d_guts->get_trigger_slope (); +} + double gr_oscope_sink_x::get_trigger_level () const { diff --git a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h b/gnuradio-core/src/lib/io/gr_oscope_sink_x.h index 6dc0d633..62cf6510 100644 --- a/gnuradio-core/src/lib/io/gr_oscope_sink_x.h +++ b/gnuradio-core/src/lib/io/gr_oscope_sink_x.h @@ -30,7 +30,7 @@ class gr_oscope_guts; /*! * \brief Abstract class for python oscilloscope module. - * \ingroup sink + * \ingroup sink_blk * * Don't instantiate this. Use gr_oscope_sink_f or gr_oscope_sink_c instead. */ @@ -51,9 +51,11 @@ public: bool set_decimation_count (int decimation_count); bool set_trigger_channel (int channel); bool set_trigger_mode (gr_trigger_mode mode); + bool set_trigger_slope (gr_trigger_slope slope); bool set_trigger_level (double trigger_level); bool set_trigger_level_auto (); // set to 50% level bool set_sample_rate(double sample_rate); + bool set_num_channels (int nchannels); // ACCESSORS @@ -63,6 +65,7 @@ public: int get_decimation_count () const; int get_trigger_channel () const; gr_trigger_mode get_trigger_mode () const; + gr_trigger_slope get_trigger_slope () const; double get_trigger_level () const; // # of samples written to each output record. diff --git a/gnuradio-core/src/lib/io/gr_trigger_mode.h b/gnuradio-core/src/lib/io/gr_trigger_mode.h index 18d49ecf..63f6b1c9 100644 --- a/gnuradio-core/src/lib/io/gr_trigger_mode.h +++ b/gnuradio-core/src/lib/io/gr_trigger_mode.h @@ -24,9 +24,14 @@ #define INCLUDED_GR_TRIGGER_MODE_H enum gr_trigger_mode { - gr_TRIG_AUTO, // auto trigger (on anything) - gr_TRIG_POS_SLOPE, // trigger on positive slope across trigger level - gr_TRIG_NEG_SLOPE // trigger on negative slope across trigger level + gr_TRIG_MODE_FREE, + gr_TRIG_MODE_AUTO, + gr_TRIG_MODE_NORM, +}; + +enum gr_trigger_slope { + gr_TRIG_SLOPE_POS, + gr_TRIG_SLOPE_NEG, }; #endif /* INCLUDED_GR_TRIGGER_MODE_H */ diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.cc b/gnuradio-core/src/lib/io/gr_udp_sink.cc new file mode 100644 index 00000000..215eaf8d --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_udp_sink.cc @@ -0,0 +1,198 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#include +#if defined(HAVE_SOCKET) +#include +#include +typedef void* optval_t; +#else +#define SHUT_RDWR 2 +#define inet_aton(N,A) ( (A)->s_addr = inet_addr(N), ( (A)->s_addr != INADDR_NONE ) ) +typedef char* optval_t; +#endif + +#define SNK_VERBOSE 0 + +gr_udp_sink::gr_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size) + : gr_sync_block ("udp_sink", + gr_make_io_signature (1, 1, itemsize), + gr_make_io_signature (0, 0, 0)), + d_itemsize (itemsize), d_updated(false), d_payload_size(payload_size) +{ + int ret = 0; + + // Set up the address stucture for the source address and port numbers + // Get the source IP address from the host name + struct hostent *hsrc = gethostbyname(src); + if(hsrc) { // if the source was provided as a host namex + d_ip_src = *(struct in_addr*)hsrc->h_addr_list[0]; + } + else { // assume it was specified as an IP address + if((ret=inet_aton(src, &d_ip_src)) == 0) { // format IP address + perror("Not a valid source IP address or host name"); + throw std::runtime_error("can't initialize source socket"); + } + } + + // Get the destination IP address from the host name + struct hostent *hdst = gethostbyname(dst); + if(hdst) { // if the source was provided as a host namex + d_ip_dst = *(struct in_addr*)hdst->h_addr_list[0]; + } + else { // assume it was specified as an IP address + if((ret=inet_aton(dst, &d_ip_dst)) == 0) { // format IP address + perror("Not a valid destination IP address or host name"); + throw std::runtime_error("can't initialize destination socket"); + } + } + + d_port_src = htons(port_src); // format port number + d_port_dst = htons(port_dst); // format port number + + d_sockaddr_src.sin_family = AF_INET; + d_sockaddr_src.sin_addr = d_ip_src; + d_sockaddr_src.sin_port = d_port_src; + + d_sockaddr_dst.sin_family = AF_INET; + d_sockaddr_dst.sin_addr = d_ip_dst; + d_sockaddr_dst.sin_port = d_port_dst; + + open(); +} + +// public constructor that returns a shared_ptr + +gr_udp_sink_sptr +gr_make_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size) +{ + return gr_udp_sink_sptr (new gr_udp_sink (itemsize, + src, port_src, + dst, port_dst, + payload_size)); +} + +gr_udp_sink::~gr_udp_sink () +{ + close(); +} + +bool +gr_udp_sink::open() +{ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this function + + // create socket + if((d_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { + perror("socket open"); + throw std::runtime_error("can't open socket"); + } + + // Turn on reuse address + int opt_val = true; + if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (optval_t)&opt_val, sizeof(int)) == -1) { + perror("SO_REUSEADDR"); + throw std::runtime_error("can't set socket option SO_REUSEADDR"); + } + + // Don't wait when shutting down + linger lngr; + lngr.l_onoff = 1; + lngr.l_linger = 0; + if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (optval_t)&lngr, sizeof(linger)) == -1) { + perror("SO_LINGER"); + throw std::runtime_error("can't set socket option SO_LINGER"); + } + + // bind socket to an address and port number to listen on + if(bind (d_socket, (sockaddr*)&d_sockaddr_src, sizeof(struct sockaddr)) == -1) { + perror("socket bind"); + throw std::runtime_error("can't bind socket"); + } + + // Not sure if we should throw here or allow retries + if(connect(d_socket, (sockaddr*)&d_sockaddr_dst, sizeof(struct sockaddr)) == -1) { + perror("socket connect"); + throw std::runtime_error("can't connect to socket"); + } + + d_updated = true; + return d_socket != 0; +} + +void +gr_udp_sink::close() +{ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this function + + if (d_socket){ + shutdown(d_socket, SHUT_RDWR); + d_socket = 0; + } + d_updated = true; +} + +int +gr_udp_sink::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const char *in = (const char *) input_items[0]; + ssize_t r=0, bytes_sent=0, bytes_to_send=0; + ssize_t total_size = noutput_items*d_itemsize; + + #if SNK_VERBOSE + printf("Entered upd_sink\n"); + #endif + + while(bytes_sent < total_size) { + bytes_to_send = std::min((ssize_t)d_payload_size, (total_size-bytes_sent)); + + r = send(d_socket, (in+bytes_sent), bytes_to_send, 0); + if(r == -1) { // error on send command + perror("udp_sink"); // there should be no error case where this function + return -1; // should not exit immediately + } + bytes_sent += r; + + #if SNK_VERBOSE + printf("\tbyte sent: %d bytes\n", bytes); + #endif + } + + #if SNK_VERBOSE + printf("Sent: %d bytes (noutput_items: %d)\n", bytes_sent, noutput_items); + #endif + + return noutput_items; +} diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.h b/gnuradio-core/src/lib/io/gr_udp_sink.h new file mode 100644 index 00000000..13b2befc --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_udp_sink.h @@ -0,0 +1,131 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifndef INCLUDED_GR_UDP_SINK_H +#define INCLUDED_GR_UDP_SINK_H + +#include +#include +#if defined(HAVE_SOCKET) +#include +#include +#elif defined(HAVE_WINDOWS_H) +#include +#include +#endif +#if defined(HAVE_NETINET_IN_H) +#include +#endif + +class gr_udp_sink; +typedef boost::shared_ptr gr_udp_sink_sptr; + +gr_udp_sink_sptr +gr_make_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size=1472); + +/*! + * \brief Write stream to an UDP socket. + * \ingroup sink_blk + * + * \param itemsize The size (in bytes) of the item datatype + * \param src The source address as either the host name or the 'numbers-and-dots' + * IP address + * \param port_src Destination port to bind to (0 allows socket to choose an appropriate port) + * \param dst The destination address as either the host name or the 'numbers-and-dots' + * IP address + * \param port_dst Destination port to connect to + * \param payload_size UDP payload size by default set to + * 1472 = (1500 MTU - (8 byte UDP header) - (20 byte IP header)) + */ + +class gr_udp_sink : public gr_sync_block +{ + friend gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size); + private: + size_t d_itemsize; + bool d_updated; + omni_mutex d_mutex; + + int d_payload_size; // maximum transmission unit (packet length) + int d_socket; // handle to socket + int d_socket_rcv; // handle to socket retuned in the accept call + struct in_addr d_ip_src; // store the source ip info + struct in_addr d_ip_dst; // store the destination ip info + unsigned short d_port_src; // the port number to open for connections to this service + unsigned short d_port_dst; // port number of the remove system + struct sockaddr_in d_sockaddr_src; // store the source sockaddr data (formatted IP address and port number) + struct sockaddr_in d_sockaddr_dst; // store the destination sockaddr data (formatted IP address and port number) + + protected: + /*! + * \brief UDP Sink Constructor + * + * \param itemsize The size (in bytes) of the item datatype + * \param src The source address as either the host name or the 'numbers-and-dots' + * IP address + * \param port_src Destination port to bind to (0 allows socket to choose an appropriate port) + * \param dst The destination address as either the host name or the 'numbers-and-dots' + * IP address + * \param port_dst Destination port to connect to + * \param payload_size UDP payload size by default set to + * 1472 = (1500 MTU - (8 byte UDP header) - (20 byte IP header)) + */ + gr_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size); + + public: + ~gr_udp_sink (); + + /*! + * \brief open a socket specified by the port and ip address info + * + * Opens a socket, binds to the address, and makes connectionless association + * over UDP. If any of these fail, the fuction retuns the error and exits. + */ + bool open(); + + /*! + * \brief Close current socket. + * + * Shuts down read/write on the socket + */ + void close(); + + /*! \brief return the PAYLOAD_SIZE of the socket */ + int payload_size() { return d_payload_size; } + + // should we export anything else? + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GR_UDP_SINK_H */ diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.i b/gnuradio-core/src/lib/io/gr_udp_sink.i new file mode 100644 index 00000000..0f37b477 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_udp_sink.i @@ -0,0 +1,46 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + + +GR_SWIG_BLOCK_MAGIC(gr,udp_sink) + +gr_udp_sink_sptr +gr_make_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size=1472); + +class gr_udp_sink : public gr_sync_block +{ + protected: + gr_udp_sink (size_t itemsize, + const char *src, unsigned short port_src, + const char *dst, unsigned short port_dst, + int payload_size); + + bool open(); + void close(); + int payload_size() { return d_payload_size; } + + public: + ~gr_udp_sink (); +}; diff --git a/gnuradio-core/src/lib/io/gr_udp_source.cc b/gnuradio-core/src/lib/io/gr_udp_source.cc new file mode 100644 index 00000000..9b6ee6e7 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_udp_source.cc @@ -0,0 +1,237 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#include +#include +#include +#include +#if defined(HAVE_SOCKET) +#include +typedef void* optval_t; +#else +#define SHUT_RDWR 2 +#define inet_aton(N,A) ( (A)->s_addr = inet_addr(N), ( (A)->s_addr != INADDR_NONE ) ) +typedef char* optval_t; +#endif + +#define SRC_VERBOSE 0 + +gr_udp_source::gr_udp_source(size_t itemsize, const char *src, + unsigned short port_src, int payload_size) + : gr_sync_block ("udp_source", + gr_make_io_signature(0, 0, 0), + gr_make_io_signature(1, 1, itemsize)), + d_itemsize(itemsize), d_updated(false), d_payload_size(payload_size), d_residual(0), d_temp_offset(0) +{ + int ret = 0; + + // Set up the address stucture for the source address and port numbers + // Get the source IP address from the host name + struct hostent *hsrc = gethostbyname(src); + if(hsrc) { // if the source was provided as a host namex + d_ip_src = *(struct in_addr*)hsrc->h_addr_list[0]; + } + else { // assume it was specified as an IP address + if((ret=inet_aton(src, &d_ip_src)) == 0) { // format IP address + perror("Not a valid source IP address or host name"); + throw std::runtime_error("can't initialize source socket"); + } + } + + d_port_src = htons(port_src); // format port number + + d_sockaddr_src.sin_family = AF_INET; + d_sockaddr_src.sin_addr = d_ip_src; + d_sockaddr_src.sin_port = d_port_src; + + d_temp_buff = new char[d_payload_size]; // allow it to hold up to payload_size bytes + + open(); +} + +gr_udp_source_sptr +gr_make_udp_source (size_t itemsize, const char *ipaddr, + unsigned short port, int payload_size) +{ + return gr_udp_source_sptr (new gr_udp_source (itemsize, ipaddr, + port, payload_size)); +} + +gr_udp_source::~gr_udp_source () +{ + delete [] d_temp_buff; + close(); +} + +bool +gr_udp_source::open() +{ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this function + // create socket + d_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + if(d_socket == -1) { + perror("socket open"); + throw std::runtime_error("can't open socket"); + } + + // Turn on reuse address + int opt_val = 1; + if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (optval_t)&opt_val, sizeof(int)) == -1) { + perror("SO_REUSEADDR"); + throw std::runtime_error("can't set socket option SO_REUSEADDR"); + } + + // Don't wait when shutting down + linger lngr; + lngr.l_onoff = 1; + lngr.l_linger = 0; + if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (optval_t)&lngr, sizeof(linger)) == -1) { + perror("SO_LINGER"); + throw std::runtime_error("can't set socket option SO_LINGER"); + } + + // Set a timeout on the receive function to not block indefinitely + // This value can (and probably should) be changed + timeval timeout; + timeout.tv_sec = 1; + timeout.tv_usec = 0; + if(setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (optval_t)&timeout, sizeof(timeout)) == -1) { + perror("SO_RCVTIMEO"); + throw std::runtime_error("can't set socket option SO_RCVTIMEO"); + } + + // bind socket to an address and port number to listen on + if(bind (d_socket, (sockaddr*)&d_sockaddr_src, sizeof(struct sockaddr)) == -1) { + perror("socket bind"); + throw std::runtime_error("can't bind socket"); + } + + d_updated = true; + return d_socket != 0; +} + +void +gr_udp_source::close() +{ + omni_mutex_lock l(d_mutex); // hold mutex for duration of this function + + if (d_socket){ + shutdown(d_socket, SHUT_RDWR); + d_socket = 0; + } + d_updated = true; +} + +int +gr_udp_source::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + char *out = (char *) output_items[0]; + ssize_t r=0, nbytes=0, bytes_received=0; + ssize_t total_bytes = (ssize_t)(d_itemsize*noutput_items); + + #if SRC_VERBOSE + printf("\nEntered udp_source\n"); + #endif + + // Remove items from temp buffer if they are in there + if(d_residual) { + nbytes = std::min(d_residual, total_bytes); + memcpy(out, d_temp_buff+d_temp_offset, nbytes); + bytes_received = nbytes; + + #if SRC_VERBOSE + printf("\tTemp buff size: %d offset: %d (bytes_received: %d) (noutput_items: %d)\n", + d_residual, d_temp_offset, bytes_received, noutput_items); + #endif + + // Increment pointer + out += bytes_received; + + // Update indexing of amount of bytes left in the buffer + d_residual -= nbytes; + d_temp_offset = d_temp_offset+d_residual; + } + + while(1) { + // get the data into our output buffer and record the number of bytes + // This is a non-blocking call with a timeout set in the constructor + r = recv(d_socket, d_temp_buff, d_payload_size, 0); // get the entire payload or the what's available + + // Check if there was a problem; forget it if the operation just timed out + if(r == -1) { + if(errno == EAGAIN) { // handle non-blocking call timeout + #if SRC_VERBOSE + printf("UDP receive timed out\n"); + #endif + + // Break here to allow the rest of the flow graph time to run and so ctrl-C breaks + break; + } + else { + perror("udp_source"); + return -1; + } + } + else { + // Calculate the number of bytes we can take from the buffer in this call + nbytes = std::min(r, total_bytes-bytes_received); + + // adjust the total number of bytes we have to round down to nearest integer of an itemsize + nbytes -= ((bytes_received+nbytes) % d_itemsize); + + // copy the number of bytes we want to look at here + memcpy(out, d_temp_buff, nbytes); + + d_residual = r - nbytes; // save the number of bytes stored + d_temp_offset=nbytes; // reset buffer index + + // keep track of the total number of bytes received + bytes_received += nbytes; + + // increment the pointer + out += nbytes; + + // Immediately return when data comes in + break; + } + + #if SNK_VERBOSE + printf("\tbytes received: %d bytes (nbytes: %d)\n", bytes, nbytes); + #endif + } + + #if SRC_VERBOSE + printf("Total Bytes Received: %d (bytes_received / noutput_items = %d / %d)\n", + bytes_received, bytes_received, noutput_items); + #endif + + // bytes_received is already set to some integer multiple of itemsize + return bytes_received/d_itemsize; +} + diff --git a/gnuradio-core/src/lib/io/gr_udp_source.h b/gnuradio-core/src/lib/io/gr_udp_source.h new file mode 100644 index 00000000..afc41a45 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_udp_source.h @@ -0,0 +1,120 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifndef INCLUDED_GR_UDP_SOURCE_H +#define INCLUDED_GR_UDP_SOURCE_H + +#include +#include +#if defined(HAVE_SOCKET) +#include +#include +#elif defined(HAVE_WINDOWS_H) +#include +#include +#endif +#if defined(HAVE_NETINET_IN_H) +#include +#endif + +class gr_udp_source; +typedef boost::shared_ptr gr_udp_source_sptr; + +gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *src, + unsigned short port_src, int payload_size=1472); + +/*! + * \brief Read stream from an UDP socket. + * \ingroup source_blk + * + * \param itemsize The size (in bytes) of the item datatype + * \param src The source address as either the host name or the 'numbers-and-dots' + * IP address + * \param port_src The port number on which the socket listens for data + * \param payload_size UDP payload size by default set to + * 1472 = (1500 MTU - (8 byte UDP header) - (20 byte IP header)) + * +*/ + +class gr_udp_source : public gr_sync_block +{ + friend gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *src, + unsigned short port_src, int payload_size); + + private: + size_t d_itemsize; + bool d_updated; + omni_mutex d_mutex; + + int d_payload_size; // maximum transmission unit (packet length) + int d_socket; // handle to socket + int d_socket_rcv; // handle to socket retuned in the accept call + struct in_addr d_ip_src; // store the source IP address to use + unsigned short d_port_src; // the port number to open for connections to this service + struct sockaddr_in d_sockaddr_src; // store the source sockaddr data (formatted IP address and port number) + char *d_temp_buff; // hold buffer between calls + ssize_t d_residual; // hold information about number of bytes stored in the temp buffer + size_t d_temp_offset; // point to temp buffer location offset + + protected: + /*! + * \brief UDP Source Constructor + * + * \param itemsize The size (in bytes) of the item datatype + * \param src The source address as either the host name or the 'numbers-and-dots' + * IP address + * \param port_src The port number on which the socket listens for data + * \param payload_size UDP payload size by default set to + * 1472 = (1500 MTU - (8 byte UDP header) - (20 byte IP header)) + */ + gr_udp_source(size_t itemsize, const char *src, unsigned short port_src, int payload_size); + + public: + ~gr_udp_source(); + + /*! + * \brief open a socket specified by the port and ip address info + * + * Opens a socket, binds to the address, and waits for a connection + * over UDP. If any of these fail, the fuction retuns the error and exits. + */ + bool open(); + + /*! + * \brief Close current socket. + * + * Shuts down read/write on the socket + */ + void close(); + + /*! \brief return the PAYLOAD_SIZE of the socket */ + int payload_size() { return d_payload_size; } + + // should we export anything else? + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif /* INCLUDED_GR_UDP_SOURCE_H */ diff --git a/gnuradio-core/src/lib/io/gr_udp_source.i b/gnuradio-core/src/lib/io/gr_udp_source.i new file mode 100644 index 00000000..fb39dad6 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_udp_source.i @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,udp_source) + +gr_udp_source_sptr +gr_make_udp_source (size_t itemsize, const char *src, + unsigned short port_src, int payload_size=1472); + +class gr_udp_source : public gr_sync_block +{ + protected: + gr_udp_source (size_t itemsize, const char *src, + unsigned short port_src, int payload_size); + + public: + ~gr_udp_source (); + + bool open(); + void close(); + int payload_size() { return d_payload_size; } + +}; diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.cc b/gnuradio-core/src/lib/io/gr_wavfile_sink.cc new file mode 100644 index 00000000..f06c33d5 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.cc @@ -0,0 +1,278 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006,2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +// win32 (mingw/msvc) specific +#ifdef HAVE_IO_H +#include +#endif +#ifdef O_BINARY +#define OUR_O_BINARY O_BINARY +#else +#define OUR_O_BINARY 0 +#endif + +// should be handled via configure +#ifdef O_LARGEFILE +#define OUR_O_LARGEFILE O_LARGEFILE +#else +#define OUR_O_LARGEFILE 0 +#endif + + +gr_wavfile_sink_sptr +gr_make_wavfile_sink(const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample) +{ + return gr_wavfile_sink_sptr (new gr_wavfile_sink (filename, + n_channels, + sample_rate, + bits_per_sample)); +} + +gr_wavfile_sink::gr_wavfile_sink(const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample) + : gr_sync_block ("wavfile_sink", + gr_make_io_signature(1, n_channels, sizeof(float)), + gr_make_io_signature(0, 0, 0)), + d_sample_rate(sample_rate), d_nchans(n_channels), + d_fp(0), d_new_fp(0), d_updated(false) +{ + if (bits_per_sample != 8 && bits_per_sample != 16) { + throw std::runtime_error("Invalid bits per sample (supports 8 and 16)"); + } + d_bytes_per_sample = bits_per_sample / 8; + d_bytes_per_sample_new = d_bytes_per_sample; + + if (!open(filename)) { + throw std::runtime_error ("can't open file"); + } + + if (bits_per_sample == 8) { + d_max_sample_val = 0xFF; + d_min_sample_val = 0; + d_normalize_fac = d_max_sample_val/2; + d_normalize_shift = 1; + } else { + d_max_sample_val = 0x7FFF; + d_min_sample_val = -0x7FFF; + d_normalize_fac = d_max_sample_val; + d_normalize_shift = 0; + if (bits_per_sample != 16) { + fprintf(stderr, "Invalid bits per sample value requested, using 16"); + } + } +} + + +bool +gr_wavfile_sink::open(const char* filename) +{ + omni_mutex_lock l(d_mutex); + + // we use the open system call to get access to the O_LARGEFILE flag. + int fd; + if ((fd = ::open (filename, + O_WRONLY|O_CREAT|O_TRUNC|OUR_O_LARGEFILE|OUR_O_BINARY, + 0664)) < 0){ + perror (filename); + return false; + } + + if (d_new_fp) { // if we've already got a new one open, close it + fclose(d_new_fp); + d_new_fp = 0; + } + + if ((d_new_fp = fdopen (fd, "wb")) == NULL) { + perror (filename); + ::close(fd); // don't leak file descriptor if fdopen fails. + return false; + } + d_updated = true; + + if (!gri_wavheader_write(d_new_fp, + d_sample_rate, + d_nchans, + d_bytes_per_sample_new)) { + fprintf(stderr, "[%s] could not write to WAV file\n", __FILE__); + exit(-1); + } + + return true; +} + + +void +gr_wavfile_sink::close() +{ + omni_mutex_lock l(d_mutex); + + if (!d_fp) + return; + + close_wav(); +} + +void gr_wavfile_sink::close_wav() +{ + unsigned int byte_count = d_sample_count * d_bytes_per_sample; + + gri_wavheader_complete(d_fp, byte_count); + + fclose(d_fp); + d_fp = NULL; +} + + +gr_wavfile_sink::~gr_wavfile_sink () +{ + if (d_new_fp) { + fclose(d_new_fp); + } + + close(); +} + + +int +gr_wavfile_sink::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float **in = (float **) &input_items[0]; + int n_in_chans = input_items.size(); + + short int sample_buf_s; + + int nwritten; + + do_update(); // update: d_fp is reqd + if (!d_fp) // drop output on the floor + return noutput_items; + + for (nwritten = 0; nwritten < noutput_items; nwritten++) { + for (int chan = 0; chan < d_nchans; chan++) { + // Write zeros to channels which are in the WAV file + // but don't have any inputs here + if (chan < n_in_chans) { + sample_buf_s = + convert_to_short(in[chan][nwritten]); + } else { + sample_buf_s = 0; + } + + gri_wav_write_sample(d_fp, sample_buf_s, d_bytes_per_sample); + + if (feof(d_fp) || ferror(d_fp)) { + fprintf(stderr, "[%s] file i/o error\n", __FILE__); + close(); + exit(-1); + } + d_sample_count++; + } + } + + return nwritten; +} + + +short int +gr_wavfile_sink::convert_to_short(float sample) +{ + sample += d_normalize_shift; + sample *= d_normalize_fac; + if (sample > d_max_sample_val) { + sample = d_max_sample_val; + } else if (sample < d_min_sample_val) { + sample = d_min_sample_val; + } + + return (short int) roundf(sample); +} + + +void +gr_wavfile_sink::set_bits_per_sample(int bits_per_sample) +{ + omni_mutex_lock l(d_mutex); + if (bits_per_sample == 8 || bits_per_sample == 16) { + d_bytes_per_sample_new = bits_per_sample / 8; + } +} + + +void +gr_wavfile_sink::set_sample_rate(unsigned int sample_rate) +{ + omni_mutex_lock l(d_mutex); + d_sample_rate = sample_rate; +} + + +void +gr_wavfile_sink::do_update() +{ + if (!d_updated) { + return; + } + + omni_mutex_lock l(d_mutex); // hold mutex for duration of this block + if (d_fp) { + close_wav(); + } + + d_fp = d_new_fp; // install new file pointer + d_new_fp = 0; + d_sample_count = 0; + d_bytes_per_sample = d_bytes_per_sample_new; + + if (d_bytes_per_sample == 1) { + d_max_sample_val = UCHAR_MAX; + d_min_sample_val = 0; + d_normalize_fac = d_max_sample_val/2; + d_normalize_shift = 1; + } else if (d_bytes_per_sample == 2) { + d_max_sample_val = SHRT_MAX; + d_min_sample_val = SHRT_MIN; + d_normalize_fac = d_max_sample_val; + d_normalize_shift = 0; + } + + d_updated = false; +} diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.h b/gnuradio-core/src/lib/io/gr_wavfile_sink.h new file mode 100644 index 00000000..fd1d0bf6 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.h @@ -0,0 +1,137 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_GR_WAVFILE_SINK_H +#define INCLUDED_GR_WAVFILE_SINK_H + +#include +#include +#include + +class gr_wavfile_sink; +typedef boost::shared_ptr gr_wavfile_sink_sptr; + +/* + * \p filename The .wav file to be opened + * \p n_channels Number of channels (2 = stereo or I/Q output) + * \p sample_rate Sample rate [S/s] + * \p bits_per_sample 16 or 8 bit, default is 16 + */ +gr_wavfile_sink_sptr +gr_make_wavfile_sink (const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample = 16); + +/*! + * \brief Read stream from a Microsoft PCM (.wav) file, output floats + * + * Values are within [-1;1]. + * Check gr_make_wavfile_source() for extra info. + * + * \ingroup sink_blk + */ +class gr_wavfile_sink : public gr_sync_block +{ +private: + friend gr_wavfile_sink_sptr gr_make_wavfile_sink (const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample); + + gr_wavfile_sink(const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample); + + unsigned d_sample_rate; + int d_nchans; + unsigned d_sample_count; + int d_bytes_per_sample; + int d_bytes_per_sample_new; + int d_max_sample_val; + int d_min_sample_val; + int d_normalize_shift; + int d_normalize_fac; + + FILE *d_fp; + FILE *d_new_fp; + bool d_updated; + omni_mutex d_mutex; + + /*! + * \brief Convert a sample value within [-1;+1] to a corresponding + * short integer value + */ + short convert_to_short(float sample); + + /*! + * \brief Writes information to the WAV header which is not available + * a-priori (chunk size etc.) and closes the file. Not thread-safe and + * assumes d_fp is a valid file pointer, should thus only be called by + * other methods. + */ + void close_wav(); + +public: + ~gr_wavfile_sink (); + + /*! + * \brief Opens a new file and writes a WAV header. Thread-safe. + */ + bool open(const char* filename); + + /*! + * \brief Closes the currently active file and completes the WAV + * header. Thread-safe. + */ + void close(); + + /*! + * \brief If any file changes have occurred, update now. This is called + * internally by work() and thus doesn't usually need to be called by + * hand. + */ + void do_update(); + + /*! + * \brief Set the sample rate. This will not affect the WAV file + * currently opened. Any following open() calls will use this new + * sample rate. + */ + void set_sample_rate(unsigned int sample_rate); + + /*! + * \brief Set bits per sample. This will not affect the WAV file + * currently opened (see set_sample_rate()). If the value is neither + * 8 nor 16, the call is ignored and the current value is kept. + */ + void set_bits_per_sample(int bits_per_sample); + + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + +}; + +#endif /* INCLUDED_GR_WAVFILE_SINK_H */ diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.i b/gnuradio-core/src/lib/io/gr_wavfile_sink.i new file mode 100644 index 00000000..7ccad197 --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.i @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + + +GR_SWIG_BLOCK_MAGIC(gr,wavfile_sink); + +gr_wavfile_sink_sptr +gr_make_wavfile_sink (const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample = 16) throw (std::runtime_error); + +class gr_wavfile_sink : public gr_sync_block +{ +protected: + gr_wavfile_sink(const char *filename, + int n_channels, + unsigned int sample_rate, + int bits_per_sample) throw (std::runtime_error); + +public: + ~gr_wavfile_sink (); + bool open(const char* filename); + void close(); + void set_sample_rate(unsigned int sample_rate); + void set_bits_per_sample(int bits_per_sample); +}; + diff --git a/gnuradio-core/src/lib/io/gr_wavfile_source.cc b/gnuradio-core/src/lib/io/gr_wavfile_source.cc new file mode 100644 index 00000000..900f84ef --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_wavfile_source.cc @@ -0,0 +1,172 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +// win32 (mingw/msvc) specific +#ifdef HAVE_IO_H +#include +#endif +#ifdef O_BINARY +#define OUR_O_BINARY O_BINARY +#else +#define OUR_O_BINARY 0 +#endif +// should be handled via configure +#ifdef O_LARGEFILE +#define OUR_O_LARGEFILE O_LARGEFILE +#else +#define OUR_O_LARGEFILE 0 +#endif + + +gr_wavfile_source_sptr +gr_make_wavfile_source (const char *filename, bool repeat) +{ + return gr_wavfile_source_sptr (new gr_wavfile_source (filename, repeat)); +} + + +gr_wavfile_source::gr_wavfile_source (const char *filename, bool repeat) + : gr_sync_block ("wavfile_source", + gr_make_io_signature (0, 0, 0), + gr_make_io_signature (1, 2, sizeof(float))), + d_fp(NULL), d_repeat(repeat), + d_sample_rate(1), d_nchans(1), d_bytes_per_sample(2), d_first_sample_pos(0), + d_samples_per_chan(0), d_sample_idx(0) +{ + // we use "open" to use to the O_LARGEFILE flag + + int fd; + if ((fd = open (filename, O_RDONLY | OUR_O_LARGEFILE | OUR_O_BINARY)) < 0) { + perror (filename); + throw std::runtime_error ("can't open file"); + } + + if ((d_fp = fdopen (fd, "rb")) == NULL) { + perror (filename); + throw std::runtime_error ("can't open file"); + } + + // Scan headers, check file validity + if (!gri_wavheader_parse(d_fp, + d_sample_rate, + d_nchans, + d_bytes_per_sample, + d_first_sample_pos, + d_samples_per_chan)) { + throw std::runtime_error("is not a valid wav file"); + } + + if (d_samples_per_chan == 0) { + throw std::runtime_error("WAV file does not contain any samples"); + } + + if (d_bytes_per_sample == 1) { + d_normalize_fac = 128; + d_normalize_shift = 1; + } else { + d_normalize_fac = 0x7FFF; + d_normalize_shift = 0; + } + + // Re-set the output signature + set_output_signature(gr_make_io_signature(1, d_nchans, sizeof(float))); +} + + +gr_wavfile_source::~gr_wavfile_source () +{ + fclose(d_fp); +} + + +int +gr_wavfile_source::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float **out = (float **) &output_items[0]; + int n_out_chans = output_items.size(); + + int i; + short sample; + + for (i = 0; i < noutput_items; i++) { + if (d_sample_idx >= d_samples_per_chan) { + if (!d_repeat) { + // if nothing was read at all, say we're done. + return i ? i : -1; + } + + if (fseek (d_fp, d_first_sample_pos, SEEK_SET) == -1) { + fprintf(stderr, "[%s] fseek failed\n", __FILE__); + exit(-1); + } + + d_sample_idx = 0; + } + + for (int chan = 0; chan < d_nchans; chan++) { + sample = gri_wav_read_sample(d_fp, d_bytes_per_sample); + + if (chan < n_out_chans) { + out[chan][i] = convert_to_float(sample); + } + } + + d_sample_idx++; + + // OK, EOF is not necessarily an error. But we're not going to + // deal with handling corrupt wav files, so if they give us any + // trouble they won't be processed. Serves them bloody right. + if (feof(d_fp) || ferror(d_fp)) { + if (i == 0) { + fprintf(stderr, "[%s] WAV file has corrupted header or i/o error\n", __FILE__); + return -1; + } + return i; + } + } + + return noutput_items; +} + + +float +gr_wavfile_source::convert_to_float(short int sample) +{ + float sample_out = (float) sample; + sample_out /= d_normalize_fac; + sample_out -= d_normalize_shift; + return sample_out; +} diff --git a/gnuradio-core/src/lib/io/gr_wavfile_source.h b/gnuradio-core/src/lib/io/gr_wavfile_source.h new file mode 100644 index 00000000..0c663f0a --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_wavfile_source.h @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifndef INCLUDED_GR_WAVFILE_SOURCE_H +#define INCLUDED_GR_WAVFILE_SOURCE_H + +#include + +class gr_wavfile_source; +typedef boost::shared_ptr gr_wavfile_source_sptr; + +gr_wavfile_source_sptr +gr_make_wavfile_source (const char *filename, bool repeat = false); + +/*! + * \brief Read stream from a Microsoft PCM (.wav) file, output floats + * + * Unless otherwise called, values are within [-1;1]. + * Check gr_make_wavfile_source() for extra info. + * + * \ingroup source_blk + */ + +class gr_wavfile_source : public gr_sync_block +{ +private: + friend gr_wavfile_source_sptr gr_make_wavfile_source (const char *filename, + bool repeat); + gr_wavfile_source(const char *filename, bool repeat); + + FILE *d_fp; + bool d_repeat; + + unsigned d_sample_rate; + int d_nchans; + int d_bytes_per_sample; + int d_first_sample_pos; + unsigned d_samples_per_chan; + unsigned d_sample_idx; + int d_normalize_shift; + int d_normalize_fac; + + /*! + * \brief Convert an integer sample value to a float value within [-1;1] + */ + float convert_to_float(short int sample); + +public: + ~gr_wavfile_source (); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + /*! + * \brief Read the sample rate as specified in the wav file header + */ + unsigned int sample_rate() const { return d_sample_rate; }; + + /*! + * \brief Return the number of bits per sample as specified in the wav + * file header. Only 8 or 16 bit are supported here. + */ + int bits_per_sample() const { return d_bytes_per_sample * 8; }; + + /*! + * \brief Return the number of channels in the wav file as specified in + * the wav file header. This is also the max number of outputs you can + * have. + */ + int channels() const { return d_nchans; }; +}; + +#endif /* INCLUDED_GR_WAVFILE_SOURCE_H */ diff --git a/gnuradio-core/src/lib/io/gr_wavfile_source.i b/gnuradio-core/src/lib/io/gr_wavfile_source.i new file mode 100644 index 00000000..5af2224f --- /dev/null +++ b/gnuradio-core/src/lib/io/gr_wavfile_source.i @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +GR_SWIG_BLOCK_MAGIC(gr,wavfile_source); + +gr_wavfile_source_sptr +gr_make_wavfile_source (const char *filename, + bool repeat = false) throw (std::runtime_error); + +class gr_wavfile_source : public gr_sync_block +{ +private: + gr_wavfile_source(const char *filename, + bool repeat) throw (std::runtime_error); + +public: + ~gr_wavfile_source(); + + unsigned int sample_rate(); + int bits_per_sample(); + int channels(); +}; + diff --git a/gnuradio-core/src/lib/io/gri_logger.cc b/gnuradio-core/src/lib/io/gri_logger.cc index dbaace68..c085a93c 100644 --- a/gnuradio-core/src/lib/io/gri_logger.cc +++ b/gnuradio-core/src/lib/io/gri_logger.cc @@ -29,6 +29,7 @@ #include #include #include +#include /* diff --git a/gnuradio-core/src/lib/io/gri_logger.h b/gnuradio-core/src/lib/io/gri_logger.h index da54e56a..e5caf7d0 100644 --- a/gnuradio-core/src/lib/io/gri_logger.h +++ b/gnuradio-core/src/lib/io/gri_logger.h @@ -23,7 +23,7 @@ #define INCLUDED_GRI_LOGGER_H #include -#include +#include #include class gri_log_poster; diff --git a/gnuradio-core/src/lib/io/gri_wavfile.cc b/gnuradio-core/src/lib/io/gri_wavfile.cc new file mode 100644 index 00000000..c1a2b7c7 --- /dev/null +++ b/gnuradio-core/src/lib/io/gri_wavfile.cc @@ -0,0 +1,312 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +# define VALID_COMPRESSION_TYPE 0x0001 + +// WAV files are always little-endian, so we need some byte switching macros + +// FIXME: These need to be refactored into a separate endianess header file +// as they duplicate routines defined in usrp/host/lib/legacy/usrp_bytesex.h + +#ifdef WORDS_BIGENDIAN + +#ifdef HAVE_BYTESWAP_H +#include +#else +#warning Using non-portable code (likely wrong other than ILP32). + +static inline short int +bswap_16 (unsigned short int x) +{ + return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)); +} + +static inline unsigned int +bswap_32 (unsigned int x) +{ + return ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \ + | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)); +} +#endif // HAVE_BYTESWAP_H + +static inline uint32_t +host_to_wav(uint32_t x) +{ + return bswap_32(x); +} + +static inline uint16_t +host_to_wav(uint16_t x) +{ + return bswap_16(x); +} + +static inline int16_t +host_to_wav(int16_t x) +{ + return bswap_16(x); +} + +static inline uint32_t +wav_to_host(uint32_t x) +{ + return bswap_32(x); +} + +static inline uint16_t +wav_to_host(uint16_t x) +{ + return bswap_16(x); +} + +static inline int16_t +wav_to_host(int16_t x) +{ + return bswap_16(x); +} + +#else + +static inline uint32_t +host_to_wav(uint32_t x) +{ + return x; +} + +static inline uint16_t +host_to_wav(uint16_t x) +{ + return x; +} + +static inline int16_t +host_to_wav(int16_t x) +{ + return x; +} + +static inline uint32_t +wav_to_host(uint32_t x) +{ + return x; +} + +static inline uint16_t +wav_to_host(uint16_t x) +{ + return x; +} + +static inline int16_t +wav_to_host(int16_t x) +{ + return x; +} + +#endif // WORDS_BIGENDIAN + + +bool +gri_wavheader_parse(FILE *fp, + unsigned int &sample_rate_o, + int &nchans_o, + int &bytes_per_sample_o, + int &first_sample_pos_o, + unsigned int &samples_per_chan_o) +{ + // _o variables take return values + char str_buf[8] = {0}; + + uint32_t file_size; + uint32_t fmt_hdr_skip; + uint16_t compression_type; + uint16_t nchans; + uint32_t sample_rate; + uint32_t avg_bytes_per_sec; + uint16_t block_align; + uint16_t bits_per_sample; + uint32_t chunk_size; + + size_t fresult; + + fresult = fread(str_buf, 1, 4, fp); + if (fresult != 4 || strncmp(str_buf, "RIFF", 4) || feof(fp)) { + return false; + } + + fread(&file_size, 1, 4, fp); + + fresult = fread(str_buf, 1, 8, fp); + if (fresult != 8 || strncmp(str_buf, "WAVEfmt ", 8) || feof(fp)) { + return false; + } + + fread(&fmt_hdr_skip, 1, 4, fp); + + fread(&compression_type, 1, 2, fp); + if (wav_to_host(compression_type) != VALID_COMPRESSION_TYPE) { + return false; + } + + fread(&nchans, 1, 2, fp); + fread(&sample_rate, 1, 4, fp); + fread(&avg_bytes_per_sec, 1, 4, fp); + fread(&block_align, 1, 2, fp); + fread(&bits_per_sample, 1, 2, fp); + + if (ferror(fp)) { + return false; + } + + fmt_hdr_skip = wav_to_host(fmt_hdr_skip); + nchans = wav_to_host(nchans); + sample_rate = wav_to_host(sample_rate); + bits_per_sample = wav_to_host(bits_per_sample); + + if (bits_per_sample != 8 && bits_per_sample != 16) { + return false; + } + + fmt_hdr_skip -= 16; + if (fmt_hdr_skip) { + fseek(fp, fmt_hdr_skip, SEEK_CUR); + } + + // data chunk + fresult = fread(str_buf, 1, 4, fp); + if (strncmp(str_buf, "data", 4)) { + return false; + } + + fread(&chunk_size, 1, 4, fp); + if (ferror(fp)) { + return false; + } + + // More byte swapping + chunk_size = wav_to_host(chunk_size); + + // Output values + sample_rate_o = (unsigned) sample_rate; + nchans_o = (int) nchans; + bytes_per_sample_o = (int) (bits_per_sample / 8); + first_sample_pos_o = (int) ftell(fp); + samples_per_chan_o = (unsigned) (chunk_size / (bytes_per_sample_o * nchans)); + return true; +} + + +short int +gri_wav_read_sample(FILE *fp, int bytes_per_sample) +{ + int16_t buf = 0; + fread(&buf, bytes_per_sample, 1, fp); + + return (short) wav_to_host(buf); +} + + +bool +gri_wavheader_write(FILE *fp, + unsigned int sample_rate, + int nchans, + int bytes_per_sample) +{ + const int header_len = 44; + char wav_hdr[header_len] = "RIFF\0\0\0\0WAVEfmt \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0data\0\0\0"; + uint16_t nchans_f = (uint16_t) nchans; + uint32_t sample_rate_f = (uint32_t) sample_rate; + uint16_t block_align = bytes_per_sample * nchans; + uint32_t avg_bytes = sample_rate * block_align; + uint16_t bits_per_sample = bytes_per_sample * 8; + + nchans_f = host_to_wav(nchans_f); + sample_rate_f = host_to_wav(sample_rate_f); + block_align = host_to_wav(block_align); + avg_bytes = host_to_wav(avg_bytes); + bits_per_sample = host_to_wav(bits_per_sample); + + wav_hdr[16] = 0x10; // no extra bytes + wav_hdr[20] = 0x01; // no compression + memcpy((void *) (wav_hdr + 22), (void *) &nchans_f, 2); + memcpy((void *) (wav_hdr + 24), (void *) &sample_rate_f, 4); + memcpy((void *) (wav_hdr + 28), (void *) &avg_bytes, 4); + memcpy((void *) (wav_hdr + 32), (void *) &block_align, 2); + memcpy((void *) (wav_hdr + 34), (void *) &bits_per_sample, 2); + + fwrite(&wav_hdr, 1, header_len, fp); + if (ferror(fp)) { + return false; + } + + return true; +} + + +void +gri_wav_write_sample(FILE *fp, short int sample, int bytes_per_sample) +{ + void *data_ptr; + unsigned char buf_8bit; + int16_t buf_16bit; + + if (bytes_per_sample == 1) { + buf_8bit = (unsigned char) sample; + data_ptr = (void *) &buf_8bit; + } else { + buf_16bit = host_to_wav((int16_t) sample); + data_ptr = (void *) &buf_16bit; + } + + fwrite(data_ptr, 1, bytes_per_sample, fp); +} + + +bool +gri_wavheader_complete(FILE *fp, unsigned int byte_count) +{ + uint32_t chunk_size = (uint32_t) byte_count; + chunk_size = host_to_wav(chunk_size); + + fseek(fp, 40, SEEK_SET); + fwrite(&chunk_size, 1, 4, fp); + + chunk_size = (uint32_t) byte_count + 36; // fmt chunk and data header + chunk_size = host_to_wav(chunk_size); + fseek(fp, 4, SEEK_SET); + + fwrite(&chunk_size, 1, 4, fp); + + if (ferror(fp)) { + return false; + } + + return true; +} diff --git a/gnuradio-core/src/lib/io/gri_wavfile.h b/gnuradio-core/src/lib/io/gri_wavfile.h new file mode 100644 index 00000000..2c7c1207 --- /dev/null +++ b/gnuradio-core/src/lib/io/gri_wavfile.h @@ -0,0 +1,100 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +// This file stores all the RIFF file type knowledge for the gr_wavfile_* +// blocks. + +#include + +/*! + * \brief Read signal information from a given WAV file. + * + * \p fp File pointer to an opened, empty file. + * \p sample_rate Stores the sample rate [S/s] + * \p nchans Number of channels + * \p bytes_per_sample Bytes per sample, can either be 1 or 2 (corresponding to + * 8 or 16 bit samples, respectively) + * \p first_sample_pos Number of the first byte containing a sample. Use this + * with fseek() to jump from the end of the file to the first sample + * when in repeat mode. + * \p samples_per_chan Number of samples per channel + * \p normalize_fac The normalization factor with which you need to divide the + * integer values of the samples to get them within [-1;1] + * \p normalize_shift The value by which the sample values need to be shifted + * after normalization (reason being, 8-bit WAV files store samples as + * unsigned char and 16-bit as signed short int) + * \return True on a successful read, false if the file could not be read or is + * not a valid WAV file. + */ +bool +gri_wavheader_parse(FILE *fp, + unsigned int &sample_rate, + int &nchans, + int &bytes_per_sample, + int &first_sample_pos, + unsigned int &samples_per_chan); + + +/*! + * \brief Read one sample from an open WAV file at the current position. + * + * Takes care of endianness. + */ +short int +gri_wav_read_sample(FILE *fp, int bytes_per_sample); + + +/*! + * \brief Write a valid RIFF file header + * + * Note: Some header values are kept blank because they're usually not known + * a-priori (file and chunk lengths). Use gri_wavheader_complete() to fill + * these in. + */ +bool +gri_wavheader_write(FILE *fp, + unsigned int sample_rate, + int nchans, + int bytes_per_sample); + +/*! + * \brief Write one sample to an open WAV file at the current position. + * + * Takes care of endianness. + */ +void +gri_wav_write_sample(FILE *fp, short int sample, int bytes_per_sample); + + +/*! + * \brief Complete a WAV header + * + * Note: The stream position is changed during this function. If anything + * needs to be written to the WAV file after calling this function (which + * shouldn't happen), you need to fseek() to the end of the file (or + * whereever). + * + * \p fp File pointer to an open WAV file with a blank header + * \p byte_count Length of all samples written to the file in bytes. + */ +bool +gri_wavheader_complete(FILE *fp, unsigned int byte_count); diff --git a/gnuradio-core/src/lib/io/i2c_bbio.h b/gnuradio-core/src/lib/io/i2c_bbio.h index 2777e747..c6b226e3 100644 --- a/gnuradio-core/src/lib/io/i2c_bbio.h +++ b/gnuradio-core/src/lib/io/i2c_bbio.h @@ -31,6 +31,7 @@ typedef boost::shared_ptr i2c_bbio_sptr; /*! * \brief abstract class that implements bit banging i/o for i2c bus. + * \ingroup base */ class i2c_bbio { public: diff --git a/gnuradio-core/src/lib/io/i2c_bbio_pp.h b/gnuradio-core/src/lib/io/i2c_bbio_pp.h index 000b5b91..5a99cdcd 100644 --- a/gnuradio-core/src/lib/io/i2c_bbio_pp.h +++ b/gnuradio-core/src/lib/io/i2c_bbio_pp.h @@ -29,6 +29,7 @@ /*! * \brief concrete class that bit bangs eval board i2c bus using parallel port * + * \ingroup base * This class talks to the i2c bus on the microtune eval board using * the parallel port. This works for both the 4937 and 4702 boards. */ diff --git a/gnuradio-core/src/lib/io/i2c_bitbang.h b/gnuradio-core/src/lib/io/i2c_bitbang.h index 97c497fb..c9deb38b 100644 --- a/gnuradio-core/src/lib/io/i2c_bitbang.h +++ b/gnuradio-core/src/lib/io/i2c_bitbang.h @@ -28,6 +28,7 @@ /*! * \brief class for controlling i2c bus + * \ingroup base */ class i2c_bitbang : public i2c { friend i2c_sptr make_i2c_bitbang (i2c_bbio_sptr io); diff --git a/gnuradio-core/src/lib/io/io.i b/gnuradio-core/src/lib/io/io.i index 0293bc99..3538942c 100644 --- a/gnuradio-core/src/lib/io/io.i +++ b/gnuradio-core/src/lib/io/io.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,10 +22,15 @@ %{ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include #include +#include #include #include #include @@ -34,13 +39,19 @@ #include #include #include +#include +#include +#include +#include %} +%include "gr_file_sink_base.i" %include "gr_file_sink.i" %include "gr_file_source.i" %include "gr_file_descriptor_sink.i" %include "gr_file_descriptor_source.i" +%include "gr_histo_sink.i" %include "microtune_xxxx_eval_board.i" %include "microtune_4702_eval_board.i" %include "microtune_4937_eval_board.i" @@ -49,4 +60,8 @@ %include "ppio.i" %include "gr_message_source.i" %include "gr_message_sink.i" +%include "gr_udp_sink.i" +%include "gr_udp_source.i" +%include "gr_wavfile_sink.i" +%include "gr_wavfile_source.i" diff --git a/gnuradio-core/src/lib/io/microtune_4702.cc b/gnuradio-core/src/lib/io/microtune_4702.cc index 01fe450f..59c88e26 100644 --- a/gnuradio-core/src/lib/io/microtune_4702.cc +++ b/gnuradio-core/src/lib/io/microtune_4702.cc @@ -151,7 +151,7 @@ microtune_4702::set_RF_freq (double target_freq, double *p_actual_freq) buf[0] = ((divisor & 0x07f00) >> 8) & 0xff; // DB1 buf[1] = divisor & 0xff; // DB2 buf[2] = control_byte_1 (d_prescaler, d_reference_divider); - buf[2] = (buf[2]|(((divisor & 0x18000) >> 10)) & 0xff); + buf[2] = buf[2] | (((divisor & 0x18000) >> 10) & 0xff); buf[3] = control_byte_2 (target_freq); printf ("%x\n", PLL_I2C_ADDR); diff --git a/gnuradio-core/src/lib/io/microtune_4702.h b/gnuradio-core/src/lib/io/microtune_4702.h index 1f41ee0a..95c64abe 100644 --- a/gnuradio-core/src/lib/io/microtune_4702.h +++ b/gnuradio-core/src/lib/io/microtune_4702.h @@ -27,6 +27,7 @@ /*! * \brief class for controlling microtune 4702 tuner module + * \ingroup hardware */ class microtune_4702 : public microtune_xxxx { diff --git a/gnuradio-core/src/lib/io/microtune_4702_eval_board.h b/gnuradio-core/src/lib/io/microtune_4702_eval_board.h index e0e2f9c6..6e972691 100644 --- a/gnuradio-core/src/lib/io/microtune_4702_eval_board.h +++ b/gnuradio-core/src/lib/io/microtune_4702_eval_board.h @@ -27,6 +27,7 @@ /*! * \brief control microtune 4702 eval board + * \ingroup hardware */ class microtune_4702_eval_board : public microtune_xxxx_eval_board { diff --git a/gnuradio-core/src/lib/io/microtune_4937.h b/gnuradio-core/src/lib/io/microtune_4937.h index 2d0f2be6..b263ceb0 100644 --- a/gnuradio-core/src/lib/io/microtune_4937.h +++ b/gnuradio-core/src/lib/io/microtune_4937.h @@ -27,6 +27,7 @@ /*! * \brief class for controlling microtune 4937 tuner module + * \ingroup hardware */ class microtune_4937 : public microtune_xxxx { public: diff --git a/gnuradio-core/src/lib/io/microtune_4937_eval_board.h b/gnuradio-core/src/lib/io/microtune_4937_eval_board.h index c6ab5b84..154a7281 100644 --- a/gnuradio-core/src/lib/io/microtune_4937_eval_board.h +++ b/gnuradio-core/src/lib/io/microtune_4937_eval_board.h @@ -27,6 +27,7 @@ /*! * \brief control microtune 4937 eval board + * \ingroup hardware */ class microtune_4937_eval_board : public microtune_xxxx_eval_board { diff --git a/gnuradio-core/src/lib/io/microtune_xxxx.h b/gnuradio-core/src/lib/io/microtune_xxxx.h index 55450356..4d5074a8 100644 --- a/gnuradio-core/src/lib/io/microtune_xxxx.h +++ b/gnuradio-core/src/lib/io/microtune_xxxx.h @@ -30,6 +30,7 @@ typedef boost::shared_ptr i2c_sptr; /*! * \brief abstract class for controlling microtune {4937,4702} tuner modules + * \ingroup base */ class microtune_xxxx { public: diff --git a/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h b/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h index 18e50d60..808075e5 100644 --- a/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h +++ b/gnuradio-core/src/lib/io/microtune_xxxx_eval_board.h @@ -35,6 +35,7 @@ typedef boost::shared_ptr i2c_sptr; /*! * \brief abstract class for controlling microtune xxxx eval board + * \ingroup hardware */ class microtune_xxxx_eval_board { public: diff --git a/gnuradio-core/src/lib/io/ppio.h b/gnuradio-core/src/lib/io/ppio.h index da5ba70c..e1a62e2a 100644 --- a/gnuradio-core/src/lib/io/ppio.h +++ b/gnuradio-core/src/lib/io/ppio.h @@ -31,6 +31,7 @@ typedef boost::shared_ptr ppio_sptr; /*! * \brief abstract class that provides low level access to parallel port bits + * \ingroup hardware */ class ppio { diff --git a/gnuradio-core/src/lib/io/ppio_ppdev.cc b/gnuradio-core/src/lib/io/ppio_ppdev.cc index 61591ad1..074de1aa 100644 --- a/gnuradio-core/src/lib/io/ppio_ppdev.cc +++ b/gnuradio-core/src/lib/io/ppio_ppdev.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2001,2003,2004 Free Software Foundation, Inc. + * Copyright 2001,2003,2004,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -32,11 +32,16 @@ #include #include #include -#ifdef HAVE_LINUX_PPDEV_H +#if defined(HAVE_LINUX_PPDEV_H) #include #include #include #include +#elif defined(HAVE_DEV_PPBUS_PPI_H) +#include +#include +#include +#include #else // #warn "ppio_ppdev is not functional on this platform" #endif @@ -53,84 +58,138 @@ static int CP_ACTIVE_LOW_BITS = 0x0B; static int SP_ACTIVE_LOW_BITS = 0x80; -#ifndef HAVE_LINUX_PPDEV_H // use stubs +#if defined(HAVE_LINUX_PPDEV_H) + +// The real Linux code... ppio_ppdev::ppio_ppdev (int which) { - std::cerr << "ppio_ppdev: Not implemented on this platform\n"; - throw std::runtime_error ("not implmeneted"); + std::ostringstream filename; + filename << "/dev/parport" << which; + const char *c_filename = filename.str().c_str(); + + if ((d_fd = open (c_filename, O_RDWR)) < 0){ + int my_errno = errno; + perror (c_filename); + if (my_errno == ENOENT){ + std::cerr << "Does the device file " << c_filename << " exist?\n"; + std::cerr << "If not, as root execute: \n"; + std::cerr << " # mknod " << c_filename << " c 99 0\n"; + std::cerr << " # chmod 666 " << c_filename << std::endl; + } + throw std::runtime_error ("open"); + } + + int mode = IEEE1284_MODE_COMPAT; + if (ioctl (d_fd, PPSETMODE, &mode) != 0){ + perror ("ppio_ppdev: PPSETMODE"); + close (d_fd); + throw std::runtime_error ("PPSETMODE"); + } } ppio_ppdev::~ppio_ppdev () { + close (d_fd); } + void ppio_ppdev::write_data (unsigned char v) { + if (ioctl (d_fd, PPWDATA, &v) != 0){ + perror ("ppio_ppdev: PPWDATA"); + throw std::runtime_error ("PPWDATA"); + } } unsigned char ppio_ppdev::read_data () { - return 0; + unsigned char v; + + if (ioctl (d_fd, PPRDATA, &v) != 0){ + perror ("ppio_ppdev: PPRDATA"); + throw std::runtime_error ("PPRDATA"); + } + return v; } void ppio_ppdev::write_control (unsigned char v) { + unsigned char ctrl = v ^ CP_ACTIVE_LOW_BITS; + if (ioctl (d_fd, PPWCONTROL, &ctrl) != 0){ + perror ("ppio_ppdev: PPWCONTROL"); + throw std::runtime_error ("PPWCONTROL"); + } } unsigned char ppio_ppdev::read_control () { - return 0; + unsigned char ctrl; + if (ioctl (d_fd, PPRCONTROL, &ctrl) != 0){ + perror ("ppio_ppdev: PPRCONTROL"); + throw std::runtime_error ("PPRCONTROL"); + } + + return ctrl ^ CP_ACTIVE_LOW_BITS; } unsigned char ppio_ppdev::read_status () { - return 0; + unsigned char status; + if (ioctl (d_fd, PPRSTATUS, &status) != 0){ + perror ("ppio_ppdev: PPRSTATUS"); + throw std::runtime_error ("PPRSTATUS"); + } + + return status ^ SP_ACTIVE_LOW_BITS; } void ppio_ppdev::lock () { + if (ioctl (d_fd, PPCLAIM) != 0){ + perror ("ppio_ppdev: PPCLAIM"); + throw std::runtime_error ("PPCLAIM"); + } } void ppio_ppdev::unlock () { + if (ioctl (d_fd, PPRELEASE) != 0){ + perror ("ppio_ppdev: PPRELEASE"); + throw std::runtime_error ("PPRELEASE"); + } } -#else +#elif defined(HAVE_DEV_PPBUS_PPI_H) -// The real code... +// The real FreeBSD code... (Could work on other BSDs as well) ppio_ppdev::ppio_ppdev (int which) { std::ostringstream filename; - filename << "/dev/parport" << which; + filename << "/dev/ppi" << which; const char *c_filename = filename.str().c_str(); - if ((d_fd = open (c_filename, O_RDWR)) < 0){ int my_errno = errno; perror (c_filename); - if (my_errno == ENOENT){ - std::cerr << "Does the device file " << c_filename << " exist?\n"; - std::cerr << "If not, as root execute: \n"; - std::cerr << " # mknod " << c_filename << " c 99 0\n"; - std::cerr << " # chmod 666 " << c_filename << std::endl; - } throw std::runtime_error ("open"); } +#if 0 int mode = IEEE1284_MODE_COMPAT; if (ioctl (d_fd, PPSETMODE, &mode) != 0){ perror ("ppio_ppdev: PPSETMODE"); close (d_fd); throw std::runtime_error ("PPSETMODE"); } +#endif } ppio_ppdev::~ppio_ppdev () @@ -142,9 +201,9 @@ ppio_ppdev::~ppio_ppdev () void ppio_ppdev::write_data (unsigned char v) { - if (ioctl (d_fd, PPWDATA, &v) != 0){ - perror ("ppio_ppdev: PPWDATA"); - throw std::runtime_error ("PPWDATA"); + if (ioctl (d_fd, PPISDATA, &v) != 0){ + perror ("ppio_ppdev: PPISDATA"); + throw std::runtime_error ("PPISDATA"); } } @@ -153,9 +212,9 @@ ppio_ppdev::read_data () { unsigned char v; - if (ioctl (d_fd, PPRDATA, &v) != 0){ - perror ("ppio_ppdev: PPRDATA"); - throw std::runtime_error ("PPRDATA"); + if (ioctl (d_fd, PPIGDATA, &v) != 0){ + perror ("ppio_ppdev: PPIGDATA"); + throw std::runtime_error ("PPIGDATA"); } return v; } @@ -164,9 +223,9 @@ void ppio_ppdev::write_control (unsigned char v) { unsigned char ctrl = v ^ CP_ACTIVE_LOW_BITS; - if (ioctl (d_fd, PPWCONTROL, &ctrl) != 0){ - perror ("ppio_ppdev: PPWCONTROL"); - throw std::runtime_error ("PPWCONTROL"); + if (ioctl (d_fd, PPISCTRL, &ctrl) != 0){ + perror ("ppio_ppdev: PPISCTRL"); + throw std::runtime_error ("PPISCTRL"); } } @@ -174,9 +233,9 @@ unsigned char ppio_ppdev::read_control () { unsigned char ctrl; - if (ioctl (d_fd, PPRCONTROL, &ctrl) != 0){ - perror ("ppio_ppdev: PPRCONTROL"); - throw std::runtime_error ("PPRCONTROL"); + if (ioctl (d_fd, PPIGCTRL, &ctrl) != 0){ + perror ("ppio_ppdev: PPIGCTRL"); + throw std::runtime_error ("PPIGCTRL"); } return ctrl ^ CP_ACTIVE_LOW_BITS; @@ -186,30 +245,71 @@ unsigned char ppio_ppdev::read_status () { unsigned char status; - if (ioctl (d_fd, PPRSTATUS, &status) != 0){ - perror ("ppio_ppdev: PPRSTATUS"); - throw std::runtime_error ("PPRSTATUS"); + if (ioctl (d_fd, PPIGSTATUS, &status) != 0){ + perror ("ppio_ppdev: PPIGSTATUS"); + throw std::runtime_error ("PPIGSTATUS"); } - return status ^ SP_ACTIVE_LOW_BITS; } void ppio_ppdev::lock () { - if (ioctl (d_fd, PPCLAIM) != 0){ - perror ("ppio_ppdev: PPCLAIM"); - throw std::runtime_error ("PPCLAIM"); - } } void ppio_ppdev::unlock () { - if (ioctl (d_fd, PPRELEASE) != 0){ - perror ("ppio_ppdev: PPRELEASE"); - throw std::runtime_error ("PPRELEASE"); - } +} +#else +/* Apparently, non real code */ + +ppio_ppdev::ppio_ppdev (int which) +{ + std::cerr << "ppio_ppdev: Not implemented on this platform\n"; + throw std::runtime_error ("not implmeneted"); +} + +ppio_ppdev::~ppio_ppdev () +{ +} + +void +ppio_ppdev::write_data (unsigned char v) +{ +} + +unsigned char +ppio_ppdev::read_data () +{ + return 0; +} + +void +ppio_ppdev::write_control (unsigned char v) +{ +} + +unsigned char +ppio_ppdev::read_control () +{ + return 0; +} + +unsigned char +ppio_ppdev::read_status () +{ + return 0; +} + +void +ppio_ppdev::lock () +{ +} + +void +ppio_ppdev::unlock () +{ } #endif diff --git a/gnuradio-core/src/lib/io/ppio_ppdev.h b/gnuradio-core/src/lib/io/ppio_ppdev.h index d5acfefc..b5abe3f0 100644 --- a/gnuradio-core/src/lib/io/ppio_ppdev.h +++ b/gnuradio-core/src/lib/io/ppio_ppdev.h @@ -30,6 +30,7 @@ typedef boost::shared_ptr ppio_ppdev_sptr; /*! * \brief access to parallel port bits using the linux ppdev interface + * \ingroup hardware */ class ppio_ppdev : public ppio { diff --git a/gnuradio-core/src/lib/io/sdr_1000.h b/gnuradio-core/src/lib/io/sdr_1000.h index 2867c1ba..113e85de 100644 --- a/gnuradio-core/src/lib/io/sdr_1000.h +++ b/gnuradio-core/src/lib/io/sdr_1000.h @@ -34,6 +34,7 @@ enum { L_EXT = 0, L_BAND = 1, L_DDS0 = 2, L_DDS1 = 3 }; /*! * \brief Very low level interface to SDR 1000 xcvr hardware * \sa sdr_1000.py for a higher level interface. + * \ingroup hardware */ class sdr_1000_base { ppio_sptr d_ppio; diff --git a/gnuradio-core/src/lib/missing/Makefile.am b/gnuradio-core/src/lib/missing/Makefile.am index 2285d9b1..08e521cb 100644 --- a/gnuradio-core/src/lib/missing/Makefile.am +++ b/gnuradio-core/src/lib/missing/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2003,2004 Free Software Foundation, Inc. +# Copyright 2003,2004,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,13 +21,18 @@ include $(top_srcdir)/Makefile.common +AM_CPPFLAGS = $(GNURADIO_INCLUDES) $(WITH_INCLUDES) + EXTRA_DIST = \ getopt.h \ getopt.c \ gettimeofday.c \ - usleep.c + posix_memalign.cc \ + posix_memalign.h \ + usleep.c noinst_LTLIBRARIES = libmissing.la libmissing_la_SOURCES = \ - bug_work_around_8.cc + bug_work_around_8.cc \ + posix_memalign.cc diff --git a/gnuradio-core/src/lib/missing/Makefile.in b/gnuradio-core/src/lib/missing/Makefile.in index edd25690..043e6553 100644 --- a/gnuradio-core/src/lib/missing/Makefile.in +++ b/gnuradio-core/src/lib/missing/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2003,2004 Free Software Foundation, Inc. +# Copyright 2003,2004,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/lib/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -134,19 +160,20 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmissing_la_LIBADD = -am_libmissing_la_OBJECTS = bug_work_around_8.lo +am_libmissing_la_OBJECTS = bug_work_around_8.lo posix_memalign.lo libmissing_la_OBJECTS = $(am_libmissing_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libmissing_la_SOURCES) DIST_SOURCES = $(libmissing_la_SOURCES) ETAGS = etags @@ -155,10 +182,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -166,9 +192,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -176,6 +209,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -188,73 +223,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -264,49 +292,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -314,15 +382,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -332,16 +543,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -350,72 +579,145 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(GNURADIO_INCLUDES) $(WITH_INCLUDES) EXTRA_DIST = \ getopt.h \ getopt.c \ gettimeofday.c \ - usleep.c + posix_memalign.cc \ + posix_memalign.h \ + usleep.c noinst_LTLIBRARIES = libmissing.la libmissing_la_SOURCES = \ - bug_work_around_8.cc + bug_work_around_8.cc \ + posix_memalign.cc all: all-am @@ -425,8 +727,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -460,7 +762,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libmissing.la: $(libmissing_la_OBJECTS) $(libmissing_la_DEPENDENCIES) - $(CXXLINK) $(libmissing_la_LDFLAGS) $(libmissing_la_OBJECTS) $(libmissing_la_LIBADD) $(LIBS) + $(CXXLINK) $(libmissing_la_OBJECTS) $(libmissing_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -469,24 +771,25 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bug_work_around_8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix_memalign.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -497,17 +800,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -519,8 +818,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -530,13 +829,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -550,23 +848,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -577,6 +873,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) @@ -596,6 +895,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -614,7 +914,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -628,12 +928,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -654,20 +962,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/missing/bug_work_around_8.cc b/gnuradio-core/src/lib/missing/bug_work_around_8.cc index b7970227..b2cbdb3d 100644 --- a/gnuradio-core/src/lib/missing/bug_work_around_8.cc +++ b/gnuradio-core/src/lib/missing/bug_work_around_8.cc @@ -1,2 +1,2 @@ // if libmisc has no sources, it doesn't get built correctly -static int gr_bug_work_around_8; +static int gr_bug_work_around_8 __attribute__((unused)); diff --git a/gnuradio-core/src/lib/missing/posix_memalign.cc b/gnuradio-core/src/lib/missing/posix_memalign.cc new file mode 100644 index 00000000..a2e98b01 --- /dev/null +++ b/gnuradio-core/src/lib/missing/posix_memalign.cc @@ -0,0 +1,114 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "posix_memalign.h" + +#ifdef HAVE_MALLOC_H +// for Cygwin valloc () prototype +#include +#endif + +#ifndef HAVE_POSIX_MEMALIGN + +/* emulate posix_memalign functionality, to some degree */ + +#include +#include "gr_pagesize.h" + +int posix_memalign +(void **memptr, size_t alignment, size_t size) +{ + /* emulate posix_memalign functionality, to some degree */ + + /* make sure the return handle is valid; return "bad address" if not valid */ + if (memptr == 0) + return (EFAULT); + *memptr = (void*) 0; + + /* make sure 'alignment' is a power of 2 + * and multiple of sizeof (void*) + */ + + /* make sure 'alignment' is a multiple of sizeof (void*) */ + if ((alignment % sizeof (void*)) != 0) + return (EINVAL); + + /* make sure 'alignment' is a power of 2 */ + if ((alignment & (alignment - 1)) != 0) + return (EINVAL); + + /* good alignment */ + +#if (ALIGNED_MALLOC != 0) + + /* if 'malloc' is known to be aligned, and the desired 'alignment' + * matches is <= that provided by 'malloc', then use 'malloc'. This + * works on, e.g., Darwin 8 & 9: for which malloc is 16-byte aligned. + */ + size_t am = (size_t) ALIGNED_MALLOC; + if (alignment <= am) { + /* make sure ALIGNED_MALLOC is a power of 2, to guarantee that the + * alignment is correct (since 'alignment' must be a power of 2). + */ + if ((am & (am - 1)) != 0) + return (EINVAL); + /* good malloc alignment */ + *memptr = malloc (size); + } + +#endif /* (ALIGNED_MALLOC != 0) */ +#ifdef HAVE_VALLOC + + if (*memptr == (void*) 0) { + /* try valloc if it exists */ + /* cheap and easy way to make sure alignment is met, so long as it + * is <= pagesize () */ + if (alignment <= (size_t) gr_pagesize ()) { + *memptr = valloc (size); + } + } + +#endif /* HAVE_VALLOC */ + +#if (ALIGNED_MALLOC == 0) && !defined (HAVE_VALLOC) + /* no posix_memalign, valloc, and malloc isn't known to be aligned + * (enough for the input arguments); no idea what to do. + */ + +#error gnuradio-core/src/libmissing/posix_memalign.cc: Cannot find a way to alloc aligned memory. + +#endif + + /* if the pointer wasn't allocated properly, return that there was + * not enough memory to allocate; otherwise, return OK (0). + */ + if (*memptr == (void*) 0) + return (ENOMEM); + else + return (0); +}; + +#endif /* ! HAVE_POSIX_MEMALIGN */ diff --git a/gnuradio-core/src/lib/missing/posix_memalign.h b/gnuradio-core/src/lib/missing/posix_memalign.h new file mode 100644 index 00000000..1be4bfc5 --- /dev/null +++ b/gnuradio-core/src/lib/missing/posix_memalign.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef _POSIX_MEMALIGN_H_ +#define _POSIX_MEMALIGN_H_ + +#include + +#ifndef HAVE_POSIX_MEMALIGN + +#ifdef __cplusplus +extern "C" { +#endif + +extern int posix_memalign (void** memptr, size_t alignment, size_t size); + +#ifdef __cplusplus +}; +#endif + +#endif /* ! HAVE_POSIX_MEMALIGN */ + +#endif /* _POSIX_MEMALIGN_H_ */ diff --git a/gnuradio-core/src/lib/omnithread/Makefile.am b/gnuradio-core/src/lib/omnithread/Makefile.am deleted file mode 100644 index 1379d589..00000000 --- a/gnuradio-core/src/lib/omnithread/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright 2003 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -# This is the omnithread package, -# extracted from the omniORB-4.0.1 distribution - -# we should do some configure hacking to determine these on the fly -OMNITHREAD_DEFINES = -DPthreadDraftVersion=10 - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(OMNITHREAD_DEFINES) - -noinst_LTLIBRARIES = libomnithread.la - -# At this point we only support the posix and nt pthreads i/f... - -if OMNITHREAD_POSIX -libomnithread_la_SOURCES = \ - posix.cc -endif - -if OMNITHREAD_NT -libomnithread_la_SOURCES = \ - nt.cc -endif - -libomnithread_la_LIBADD = \ - $(PTHREAD_LIBS) - -# ... but this code also came with the package - -EXTRA_DIST = \ - mach.cc \ - nt.cc \ - posix.cc \ - solaris.cc \ - threaddata.cc \ - vxWorks.cc \ - dir.mk - -grinclude_HEADERS = \ - omnithread.h \ - ot_mach.h \ - ot_nt.h \ - ot_posix.h \ - ot_pthread_nt.h \ - ot_solaris.h \ - ot_VxThread.h diff --git a/gnuradio-core/src/lib/omnithread/Makefile.in b/gnuradio-core/src/lib/omnithread/Makefile.in deleted file mode 100644 index cadf8345..00000000 --- a/gnuradio-core/src/lib/omnithread/Makefile.in +++ /dev/null @@ -1,738 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2003 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 -*- -# -# Copyright 2004,2006,2007 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. -# - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common -subdir = gnuradio-core/src/lib/omnithread -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -am__DEPENDENCIES_1 = -libomnithread_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -am__libomnithread_la_SOURCES_DIST = nt.cc posix.cc -@OMNITHREAD_NT_FALSE@@OMNITHREAD_POSIX_TRUE@am_libomnithread_la_OBJECTS = \ -@OMNITHREAD_NT_FALSE@@OMNITHREAD_POSIX_TRUE@ posix.lo -@OMNITHREAD_NT_TRUE@am_libomnithread_la_OBJECTS = nt.lo -libomnithread_la_OBJECTS = $(am_libomnithread_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libomnithread_la_SOURCES) -DIST_SOURCES = $(am__libomnithread_la_SOURCES_DIST) -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(grincludedir)" -grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - -# includes -grincludedir = $(includedir)/gnuradio - -# swig includes -swigincludedir = $(grincludedir)/swig - -# Install this stuff in the appropriate subdirectory -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -grpythondir = $(pythondir)/gnuradio -grpyexecdir = $(pyexecdir)/gnuradio - -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern - -# Where to find gnuradio include files in the current build tree -# top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - - -# How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la - -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i - -# How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include - -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la - -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) - -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f - -# This is the omnithread package, -# extracted from the omniORB-4.0.1 distribution - -# we should do some configure hacking to determine these on the fly -OMNITHREAD_DEFINES = -DPthreadDraftVersion=10 -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(OMNITHREAD_DEFINES) -noinst_LTLIBRARIES = libomnithread.la -@OMNITHREAD_NT_TRUE@libomnithread_la_SOURCES = \ -@OMNITHREAD_NT_TRUE@ nt.cc - - -# At this point we only support the posix and nt pthreads i/f... -@OMNITHREAD_POSIX_TRUE@libomnithread_la_SOURCES = \ -@OMNITHREAD_POSIX_TRUE@ posix.cc - -libomnithread_la_LIBADD = \ - $(PTHREAD_LIBS) - - -# ... but this code also came with the package -EXTRA_DIST = \ - mach.cc \ - nt.cc \ - posix.cc \ - solaris.cc \ - threaddata.cc \ - vxWorks.cc \ - dir.mk - -grinclude_HEADERS = \ - omnithread.h \ - ot_mach.h \ - ot_nt.h \ - ot_posix.h \ - ot_pthread_nt.h \ - ot_solaris.h \ - ot_VxThread.h - -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/lib/omnithread/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-core/src/lib/omnithread/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libomnithread.la: $(libomnithread_la_OBJECTS) $(libomnithread_la_DEPENDENCIES) - $(CXXLINK) $(libomnithread_la_LDFLAGS) $(libomnithread_la_OBJECTS) $(libomnithread_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nt.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix.Plo@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-grincludeHEADERS: $(grinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ - done - -uninstall-grincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(grincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-grincludeHEADERS - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-grincludeHEADERS install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-core/src/lib/omnithread/mach.cc b/gnuradio-core/src/lib/omnithread/mach.cc deleted file mode 100644 index 8759bb4c..00000000 --- a/gnuradio-core/src/lib/omnithread/mach.cc +++ /dev/null @@ -1,714 +0,0 @@ -// Package : omnithread -// omnithread/mach.cc Created : 7/97 lars immisch lars@ibp.de -// -// Copyright (C) 1997 Immisch, Becker & Partner -// -// This file is part of the omnithread library -// -// The omnithread library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library 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 -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Boston, MA -// 02110-1301, USA -// - -// -// Implementation of OMNI thread abstraction for mach threads -// -// to the author's pleasure, mach cthreads are very similar to posix threads -// - -#include -#include -#include -#include -#include "omnithread.h" - -#define DB(x) // x -// #include or #include if DB is on. - -#define ERRNO(x) (x) - -// -// static variables -// - -int omni_thread::init_t::count = 0; - -omni_mutex* omni_thread::next_id_mutex; -int omni_thread::next_id = 0; - -static int normal_priority; -static int highest_priority; - -static size_t stack_size = 0; - -/////////////////////////////////////////////////////////////////////////// -// -// Mutex -// -/////////////////////////////////////////////////////////////////////////// - - -omni_mutex::omni_mutex(void) -{ - mutex_init(&mach_mutex); -} - - -omni_mutex::~omni_mutex(void) -{ - mutex_clear(&mach_mutex); -} - - -void omni_mutex::lock(void) -{ - mutex_lock(&mach_mutex); -} - - -void omni_mutex::unlock(void) -{ - mutex_unlock(&mach_mutex); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Condition variable -// -/////////////////////////////////////////////////////////////////////////// - - -omni_condition::omni_condition(omni_mutex* m) : mutex(m) -{ - condition_init(&mach_cond); -} - - -omni_condition::~omni_condition(void) -{ - condition_clear(&mach_cond); -} - -void -omni_condition::wait(void) -{ - condition_wait(&mach_cond, &mutex->mach_mutex); -} - -typedef struct alarmclock_args { - unsigned long secs; - unsigned long nsecs; - bool wakeup; - condition_t condition; - mutex_t mutex; -}; - -any_t alarmclock(any_t arg) -{ - alarmclock_args* alarm = (alarmclock_args*)arg; - - omni_thread::sleep(alarm->secs, alarm->nsecs); - - mutex_lock(alarm->mutex); - - alarm->wakeup = TRUE; - - condition_signal(alarm->condition); - - mutex_unlock(alarm->mutex); - - return (any_t)TRUE; -} - -int omni_condition::timedwait(unsigned long abs_secs, unsigned long abs_nsecs) -{ - alarmclock_args alarm; - - omni_thread::get_time(&alarm.secs, &alarm.nsecs, 0, 0); - - if (abs_secs < alarm.secs || (abs_secs == alarm.secs && abs_nsecs <= alarm.nsecs)) - return ETIMEDOUT; - - alarm.secs = abs_secs - alarm.secs; - if (abs_nsecs <= alarm.nsecs) { - alarm.nsecs = 1000000 - alarm.nsecs + abs_nsecs; - alarm.secs--; - } - else { - alarm.nsecs = abs_nsecs - alarm.nsecs; - } - - alarm.mutex = &mutex->mach_mutex; - alarm.condition = &mach_cond; - alarm.wakeup = FALSE; - - cthread_t ct = cthread_fork((cthread_fn_t)alarmclock, (any_t)&alarm); - cthread_detach(ct); - - condition_wait(&mach_cond, &mutex->mach_mutex); - - if (alarm.wakeup) { - return 0; - } - - // interrupt the alarmclock thread sleep - cthread_abort(ct); - - // wait until it has signalled the condition - condition_wait(&mach_cond, &mutex->mach_mutex); - - return 1; -} - - -void omni_condition::signal(void) -{ - condition_signal(&mach_cond); -} - - -void omni_condition::broadcast(void) -{ - condition_signal(&mach_cond); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Counting semaphore -// -/////////////////////////////////////////////////////////////////////////// - - -omni_semaphore::omni_semaphore(unsigned int initial) : c(&m) -{ - value = initial; -} - - -omni_semaphore::~omni_semaphore(void) -{ -} - - -void -omni_semaphore::wait(void) -{ - omni_mutex_lock l(m); - - while (value == 0) - c.wait(); - - value--; -} - - -int -omni_semaphore::trywait(void) -{ - omni_mutex_lock l(m); - - if (value == 0) - return 0; - - value--; - return 1; -} - - -void -omni_semaphore::post(void) -{ - omni_mutex_lock l(m); - - if (value == 0) - c.signal(); - - value++; -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Thread -// -/////////////////////////////////////////////////////////////////////////// - - - -// -// Initialisation function (gets called before any user code). -// - -omni_thread::init_t::init_t(void) -{ - if (count++ != 0) // only do it once however many objects get created. - return; - - // - // find base and max priority. - // This is the initial thread, so the max priority of this - // thread also applies to any newly created thread. - // - - kern_return_t error; - struct thread_sched_info info; - unsigned int info_count = THREAD_SCHED_INFO_COUNT; - - error = thread_info(thread_self(), THREAD_SCHED_INFO, (thread_info_t)&info, &info_count); - if (error != KERN_SUCCESS) { - DB(cerr << "omni_thread::init: error determining thread_info" << endl); - ::exit(1); - } - else { - normal_priority = info.base_priority; - highest_priority = info.max_priority; - } - - next_id_mutex = new omni_mutex; - - // - // Create object for this (i.e. initial) thread. - // - - omni_thread* t = new omni_thread; - - if (t->_state != STATE_NEW) { - DB(cerr << "omni_thread::init: problem creating initial thread object\n"); - ::exit(1); - } - - t->_state = STATE_RUNNING; - - t->mach_thread = cthread_self(); - - DB(cerr << "initial thread " << t->id() << endl); - - cthread_set_data(t->mach_thread, (any_t)t); -} - - -// -// Wrapper for thread creation. -// - -extern "C" void* -omni_thread_wrapper(void* ptr) -{ - omni_thread* me = (omni_thread*)ptr; - - DB(cerr << "omni_thread::wrapper: thread " << me->id() - << " started\n"); - - cthread_set_data(cthread_self(), (any_t)me); - - // - // Now invoke the thread function with the given argument. - // - - if (me->fn_void != NULL) { - (*me->fn_void)(me->thread_arg); - omni_thread::exit(); - } - - if (me->fn_ret != NULL) { - void* return_value = (*me->fn_ret)(me->thread_arg); - omni_thread::exit(return_value); - } - - if (me->detached) { - me->run(me->thread_arg); - omni_thread::exit(); - } else { - void* return_value = me->run_undetached(me->thread_arg); - omni_thread::exit(return_value); - } - - // should never get here. - - return NULL; -} - - -// -// Constructors for omni_thread - set up the thread object but don't -// start it running. -// - -// construct a detached thread running a given function. - -omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = fn; - fn_ret = NULL; -} - -// construct an undetached thread running a given function. - -omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 0); - fn_void = NULL; - fn_ret = fn; -} - -// construct a thread which will run either run() or run_undetached(). - -omni_thread::omni_thread(void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = NULL; - fn_ret = NULL; -} - -// common part of all constructors. - -void omni_thread::common_constructor(void* arg, priority_t pri, int det) -{ - _state = STATE_NEW; - _priority = pri; - - next_id_mutex->lock(); - _id = next_id++; - next_id_mutex->unlock(); - - thread_arg = arg; - detached = det; // may be altered in start_undetached() - - _dummy = 0; - _values = 0; - _value_alloc = 0; - // posix_thread is set up in initialisation routine or start(). -} - - -// -// Destructor for omni_thread. -// - -omni_thread::~omni_thread(void) -{ - DB(cerr << "destructor called for thread " << id() << endl); - if (_values) { - for (key_t i=0; i < _value_alloc; i++) { - if (_values[i]) { - delete _values[i]; - } - } - delete [] _values; - } -} - - -// -// Start the thread -// - -void -omni_thread::start(void) -{ - omni_mutex_lock l(mutex); - - int rc; - - if (_state != STATE_NEW) - throw omni_thread_invalid(); - - mach_thread = cthread_fork(omni_thread_wrapper, (any_t)this); - - _state = STATE_RUNNING; - - if (detached) { - cthread_detach(mach_thread); - } -} - -// -// Start a thread which will run the member function run_undetached(). -// - -void -omni_thread::start_undetached(void) -{ - if ((fn_void != NULL) || (fn_ret != NULL)) - throw omni_thread_invalid(); - - detached = 0; - start(); -} - - -// -// join - simply check error conditions & call cthread_join. -// - -void -omni_thread::join(void** status) -{ - mutex.lock(); - - if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { - mutex.unlock(); - throw omni_thread_invalid(); - } - - mutex.unlock(); - - if (this == self()) - throw omni_thread_invalid(); - - if (detached) - throw omni_thread_invalid(); - - DB(cerr << "omni_thread::join: doing cthread_join\n"); - - *status = cthread_join(mach_thread); - - delete this; -} - - -// -// Change this thread's priority. -// - -void -omni_thread::set_priority(priority_t pri) -{ - omni_mutex_lock l(mutex); - - if (_state != STATE_RUNNING) - throw omni_thread_invalid(); - - _priority = pri; - - kern_return_t rc = cthread_priority(mach_thread, mach_priority(pri), FALSE); - - if (rc != KERN_SUCCESS) - throw omni_thread_fatal(errno); -} - -// -// create - construct a new thread object and start it running. Returns thread -// object if successful, null pointer if not. -// - -// detached version - -omni_thread* -omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - -// undetached version - -omni_thread* -omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - -// -// exit() _must_ lock the mutex even in the case of a detached thread. This is -// because a thread may run to completion before the thread that created it has -// had a chance to get out of start(). By locking the mutex we ensure that the -// creating thread must have reached the end of start() before we delete the -// thread object. Of course, once the call to start() returns, the user can -// still incorrectly refer to the thread object, but that's their problem. -// - -void omni_thread::exit(void* return_value) -{ - omni_thread* me = self(); - - if (me) - { - me->mutex.lock(); - - if (me->_state != STATE_RUNNING) - DB(cerr << "omni_thread::exit: thread not in \"running\" state\n"); - - me->_state = STATE_TERMINATED; - - me->mutex.unlock(); - - DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " - << me->detached << " return value " << return_value << endl); - - if (me->detached) - delete me; - } - else - { - DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); - } - cthread_exit(return_value); -} - -omni_thread* omni_thread::self(void) -{ - omni_thread* me; - - me = (omni_thread*)cthread_data(cthread_self()); - - if (!me) { - // This thread is not created by omni_thread::start because it - // doesn't has a class omni_thread instance attached to its key. - DB(cerr << "omni_thread::self: called with a non-ominthread. NULL is returned." << endl); - } - - return me; -} - -void omni_thread::yield(void) -{ - cthread_yield(); -} - -#define MAX_SLEEP_SECONDS (unsigned)4294966 // (2**32-2)/1000 - -void -omni_thread::sleep(unsigned long secs, unsigned long nanosecs) -{ - if (secs <= MAX_SLEEP_SECONDS) { - thread_switch(THREAD_NULL, SWITCH_OPTION_WAIT, secs * 1000 + nanosecs / 1000000); - return; - } - - unsigned no_of_max_sleeps = secs / MAX_SLEEP_SECONDS; - - for (unsigned i = 0; i < no_of_max_sleeps; i++) - thread_switch(THREAD_NULL, SWITCH_OPTION_WAIT, MAX_SLEEP_SECONDS * 1000); - - thread_switch(THREAD_NULL, SWITCH_OPTION_WAIT, - (secs % MAX_SLEEP_SECONDS) * 1000 + nanosecs / 1000000); - - return; -} - -void -omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, - unsigned long rel_sec, unsigned long rel_nsec) -{ - int rc; - unsigned long tv_sec; - unsigned long tv_nsec; - struct timeval tv; - - rc = gettimeofday(&tv, NULL); - if (rc) throw omni_thread_fatal(rc); - - tv_sec = tv.tv_sec; - tv_nsec = tv.tv_usec * 1000; - - tv_nsec += rel_nsec; - tv_sec += rel_sec + tv_nsec / 1000000000; - tv_nsec = tv_nsec % 1000000000; - - *abs_sec = tv_sec; - *abs_nsec = tv_nsec; -} - - -int -omni_thread::mach_priority(priority_t pri) -{ - switch (pri) { - - case PRIORITY_LOW: - return 0; - - case PRIORITY_NORMAL: - return normal_priority; - - case PRIORITY_HIGH: - return highest_priority; - - default: - return -1; - } -} - -void -omni_thread::stacksize(unsigned long sz) -{ - stack_size = sz; -} - -unsigned long -omni_thread::stacksize() -{ - return stack_size; -} - - -// -// Dummy thread -// - -#error This dummy thread code is not tested. It might work if you're lucky. - -class omni_thread_dummy : public omni_thread { -public: - inline omni_thread_dummy() : omni_thread() - { - _dummy = 1; - _state = STATE_RUNNING; - mach_thread = cthread_self(); - cthread_set_data(mach_thread, (any_t)this)); - } - inline ~omni_thread_dummy() - { - cthread_set_data(mach_thread, (any_t)0)); - } -}; - -omni_thread* -omni_thread::create_dummy() -{ - if (omni_thread::self()) - throw omni_thread_invalid(); - - return new omni_thread_dummy; -} - -void -omni_thread::release_dummy() -{ - omni_thread* self = omni_thread::self(); - if (!self || !self->_dummy) - throw omni_thread_invalid(); - - omni_thread_dummy* dummy = (omni_thread_dummy*)self; - delete dummy; -} - - -#define INSIDE_THREAD_IMPL_CC -#include "threaddata.cc" -#undef INSIDE_THREAD_IMPL_CC diff --git a/gnuradio-core/src/lib/omnithread/nt.cc b/gnuradio-core/src/lib/omnithread/nt.cc deleted file mode 100644 index 3853f010..00000000 --- a/gnuradio-core/src/lib/omnithread/nt.cc +++ /dev/null @@ -1,969 +0,0 @@ -// Package : omnithread -// omnithread/nt.cc Created : 6/95 tjr -// -// Copyright (C) 2006 Free Software Foundation, Inc. -// Copyright (C) 1995-1999 AT&T Laboratories Cambridge -// -// This file is part of the omnithread library -// -// The omnithread library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library 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 -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Boston, MA -// 02110-1301, USA -// - -// -// Implementation of OMNI thread abstraction for NT threads -// - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#define DB(x) // x -//#include or #include if DB is on. - -static void get_time_now(unsigned long* abs_sec, unsigned long* abs_nsec); - -/////////////////////////////////////////////////////////////////////////// -// -// Mutex -// -/////////////////////////////////////////////////////////////////////////// - - -omni_mutex::omni_mutex(void) -{ - InitializeCriticalSection(&crit); -} - -omni_mutex::~omni_mutex(void) -{ - DeleteCriticalSection(&crit); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Condition variable -// -/////////////////////////////////////////////////////////////////////////// - - -// -// Condition variables are tricky to implement using NT synchronisation -// primitives, since none of them have the atomic "release mutex and wait to be -// signalled" which is central to the idea of a condition variable. To get -// around this the solution is to record which threads are waiting and -// explicitly wake up those threads. -// -// Here we implement a condition variable using a list of waiting threads -// (protected by a critical section), and a per-thread semaphore (which -// actually only needs to be a binary semaphore). -// -// To wait on the cv, a thread puts itself on the list of waiting threads for -// that cv, then releases the mutex and waits on its own personal semaphore. A -// signalling thread simply takes a thread from the head of the list and kicks -// that thread's semaphore. Broadcast is simply implemented by kicking the -// semaphore of each waiting thread. -// -// The only other tricky part comes when a thread gets a timeout from a timed -// wait on its semaphore. Between returning with a timeout from the wait and -// entering the critical section, a signalling thread could get in, kick the -// waiting thread's semaphore and remove it from the list. If this happens, -// the waiting thread's semaphore is now out of step so it needs resetting, and -// the thread should indicate that it was signalled rather than that it timed -// out. -// -// It is possible that the thread calling wait or timedwait is not a -// omni_thread. In this case we have to provide a temporary data structure, -// i.e. for the duration of the call, for the thread to link itself on the -// list of waiting threads. _internal_omni_thread_dummy provides such -// a data structure and _internal_omni_thread_helper is a helper class to -// deal with this special case for wait() and timedwait(). Once created, -// the _internal_omni_thread_dummy is cached for use by the next wait() or -// timedwait() call from a non-omni_thread. This is probably worth doing -// because creating a Semaphore is quite heavy weight. - -class _internal_omni_thread_helper; - -class _internal_omni_thread_dummy : public omni_thread { -public: - inline _internal_omni_thread_dummy() : next(0) { } - inline ~_internal_omni_thread_dummy() { } - friend class _internal_omni_thread_helper; -private: - _internal_omni_thread_dummy* next; -}; - -class _internal_omni_thread_helper { -public: - inline _internal_omni_thread_helper() { - d = 0; - t = omni_thread::self(); - if (!t) { - omni_mutex_lock sync(cachelock); - if (cache) { - d = cache; - cache = cache->next; - } - else { - d = new _internal_omni_thread_dummy; - } - t = d; - } - } - inline ~_internal_omni_thread_helper() { - if (d) { - omni_mutex_lock sync(cachelock); - d->next = cache; - cache = d; - } - } - inline operator omni_thread* () { return t; } - inline omni_thread* operator->() { return t; } - - static _internal_omni_thread_dummy* cache; - static omni_mutex cachelock; - -private: - _internal_omni_thread_dummy* d; - omni_thread* t; -}; - -_internal_omni_thread_dummy* _internal_omni_thread_helper::cache = 0; -omni_mutex _internal_omni_thread_helper::cachelock; - - -omni_condition::omni_condition(omni_mutex* m) : mutex(m) -{ - InitializeCriticalSection(&crit); - waiting_head = waiting_tail = NULL; -} - - -omni_condition::~omni_condition(void) -{ - DeleteCriticalSection(&crit); - DB( if (waiting_head != NULL) { - cerr << "omni_condition::~omni_condition: list of waiting threads " - << "is not empty\n"; - } ) -} - - -void -omni_condition::wait(void) -{ - _internal_omni_thread_helper me; - - EnterCriticalSection(&crit); - - me->cond_next = NULL; - me->cond_prev = waiting_tail; - if (waiting_head == NULL) - waiting_head = me; - else - waiting_tail->cond_next = me; - waiting_tail = me; - me->cond_waiting = TRUE; - - LeaveCriticalSection(&crit); - - mutex->unlock(); - - DWORD result = WaitForSingleObject(me->cond_semaphore, INFINITE); - - mutex->lock(); - - if (result != WAIT_OBJECT_0) - throw omni_thread_fatal(GetLastError()); -} - - -int -omni_condition::timedwait(unsigned long abs_sec, unsigned long abs_nsec) -{ - _internal_omni_thread_helper me; - - EnterCriticalSection(&crit); - - me->cond_next = NULL; - me->cond_prev = waiting_tail; - if (waiting_head == NULL) - waiting_head = me; - else - waiting_tail->cond_next = me; - waiting_tail = me; - me->cond_waiting = TRUE; - - LeaveCriticalSection(&crit); - - mutex->unlock(); - - unsigned long now_sec, now_nsec; - - get_time_now(&now_sec, &now_nsec); - - DWORD timeout; - if ((abs_sec <= now_sec) && ((abs_sec < now_sec) || (abs_nsec < now_nsec))) - timeout = 0; - else { - timeout = (abs_sec-now_sec) * 1000; - - if( abs_nsec < now_nsec ) timeout -= (now_nsec-abs_nsec) / 1000000; - else timeout += (abs_nsec-now_nsec) / 1000000; - } - - DWORD result = WaitForSingleObject(me->cond_semaphore, timeout); - - if (result == WAIT_TIMEOUT) { - EnterCriticalSection(&crit); - - if (me->cond_waiting) { - if (me->cond_prev != NULL) - me->cond_prev->cond_next = me->cond_next; - else - waiting_head = me->cond_next; - if (me->cond_next != NULL) - me->cond_next->cond_prev = me->cond_prev; - else - waiting_tail = me->cond_prev; - me->cond_waiting = FALSE; - - LeaveCriticalSection(&crit); - - mutex->lock(); - return 0; - } - - // - // We timed out but another thread still signalled us. Wait for - // the semaphore (it _must_ have been signalled) to decrement it - // again. Return that we were signalled, not that we timed out. - // - - LeaveCriticalSection(&crit); - - result = WaitForSingleObject(me->cond_semaphore, INFINITE); - } - - if (result != WAIT_OBJECT_0) - throw omni_thread_fatal(GetLastError()); - - mutex->lock(); - return 1; -} - - -void -omni_condition::signal(void) -{ - EnterCriticalSection(&crit); - - if (waiting_head != NULL) { - omni_thread* t = waiting_head; - waiting_head = t->cond_next; - if (waiting_head == NULL) - waiting_tail = NULL; - else - waiting_head->cond_prev = NULL; - t->cond_waiting = FALSE; - - if (!ReleaseSemaphore(t->cond_semaphore, 1, NULL)) { - int rc = GetLastError(); - LeaveCriticalSection(&crit); - throw omni_thread_fatal(rc); - } - } - - LeaveCriticalSection(&crit); -} - - -void -omni_condition::broadcast(void) -{ - EnterCriticalSection(&crit); - - while (waiting_head != NULL) { - omni_thread* t = waiting_head; - waiting_head = t->cond_next; - if (waiting_head == NULL) - waiting_tail = NULL; - else - waiting_head->cond_prev = NULL; - t->cond_waiting = FALSE; - - if (!ReleaseSemaphore(t->cond_semaphore, 1, NULL)) { - int rc = GetLastError(); - LeaveCriticalSection(&crit); - throw omni_thread_fatal(rc); - } - } - - LeaveCriticalSection(&crit); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Counting semaphore -// -/////////////////////////////////////////////////////////////////////////// - - -#define SEMAPHORE_MAX 0x7fffffff - - -omni_semaphore::omni_semaphore(unsigned int initial, unsigned int max_count) -{ - if (max_count > SEMAPHORE_MAX) - max_count= SEMAPHORE_MAX; - - nt_sem = CreateSemaphore(NULL, initial, max_count, NULL); - - if (nt_sem == NULL) { - DB( cerr << "omni_semaphore::omni_semaphore: CreateSemaphore error " - << GetLastError() << endl ); - throw omni_thread_fatal(GetLastError()); - } -} - - -omni_semaphore::~omni_semaphore(void) -{ - if (!CloseHandle(nt_sem)) { - DB( cerr << "omni_semaphore::~omni_semaphore: CloseHandle error " - << GetLastError() << endl ); - throw omni_thread_fatal(GetLastError()); - } -} - - -void -omni_semaphore::wait(void) -{ - if (WaitForSingleObject(nt_sem, INFINITE) != WAIT_OBJECT_0) - throw omni_thread_fatal(GetLastError()); -} - - -int -omni_semaphore::trywait(void) -{ - switch (WaitForSingleObject(nt_sem, 0)) { - - case WAIT_OBJECT_0: - return 1; - case WAIT_TIMEOUT: - return 0; - } - - throw omni_thread_fatal(GetLastError()); - return 0; /* keep msvc++ happy */ -} - - -void -omni_semaphore::post(void) -{ - if (!ReleaseSemaphore(nt_sem, 1, NULL) - && GetLastError() != ERROR_TOO_MANY_POSTS ) // MinGW fix--see ticket:95 in trac - throw omni_thread_fatal(GetLastError()); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Thread -// -/////////////////////////////////////////////////////////////////////////// - - -// -// Static variables -// - -omni_mutex* omni_thread::next_id_mutex; -int omni_thread::next_id = 0; -static DWORD self_tls_index; - -static unsigned int stack_size = 0; - -// -// Initialisation function (gets called before any user code). -// - -static int& count() { - static int the_count = 0; - return the_count; -} - -omni_thread::init_t::init_t(void) -{ - if (count()++ != 0) // only do it once however many objects get created. - return; - - DB(cerr << "omni_thread::init: NT implementation initialising\n"); - - self_tls_index = TlsAlloc(); - - if (self_tls_index == 0xffffffff) - throw omni_thread_fatal(GetLastError()); - - next_id_mutex = new omni_mutex; - - // - // Create object for this (i.e. initial) thread. - // - - omni_thread* t = new omni_thread; - - t->_state = STATE_RUNNING; - - if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), - GetCurrentProcess(), &t->handle, - 0, FALSE, DUPLICATE_SAME_ACCESS)) - throw omni_thread_fatal(GetLastError()); - - t->nt_id = GetCurrentThreadId(); - - DB(cerr << "initial thread " << t->id() << " NT thread id " << t->nt_id - << endl); - - if (!TlsSetValue(self_tls_index, (LPVOID)t)) - throw omni_thread_fatal(GetLastError()); - - if (!SetThreadPriority(t->handle, nt_priority(PRIORITY_NORMAL))) - throw omni_thread_fatal(GetLastError()); -} - -omni_thread::init_t::~init_t(void) -{ - if (--count() != 0) return; - - omni_thread* self = omni_thread::self(); - if (!self) return; - - TlsSetValue(self_tls_index, (LPVOID)0); - delete self; - - delete next_id_mutex; - - TlsFree(self_tls_index); -} - -// -// Wrapper for thread creation. -// - -extern "C" -#ifndef __BCPLUSPLUS__ -unsigned __stdcall -#else -void _USERENTRY -#endif -omni_thread_wrapper(void* ptr) -{ - omni_thread* me = (omni_thread*)ptr; - - DB(cerr << "omni_thread_wrapper: thread " << me->id() - << " started\n"); - - if (!TlsSetValue(self_tls_index, (LPVOID)me)) - throw omni_thread_fatal(GetLastError()); - - // - // Now invoke the thread function with the given argument. - // - - if (me->fn_void != NULL) { - (*me->fn_void)(me->thread_arg); - omni_thread::exit(); - } - - if (me->fn_ret != NULL) { - void* return_value = (*me->fn_ret)(me->thread_arg); - omni_thread::exit(return_value); - } - - if (me->detached) { - me->run(me->thread_arg); - omni_thread::exit(); - } else { - void* return_value = me->run_undetached(me->thread_arg); - omni_thread::exit(return_value); - } - - // should never get here. -#ifndef __BCPLUSPLUS__ - return 0; -#endif -} - - -// -// Constructors for omni_thread - set up the thread object but don't -// start it running. -// - -// construct a detached thread running a given function. - -omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = fn; - fn_ret = NULL; -} - -// construct an undetached thread running a given function. - -omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 0); - fn_void = NULL; - fn_ret = fn; -} - -// construct a thread which will run either run() or run_undetached(). - -omni_thread::omni_thread(void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = NULL; - fn_ret = NULL; -} - -// common part of all constructors. - -void -omni_thread::common_constructor(void* arg, priority_t pri, int det) -{ - _state = STATE_NEW; - _priority = pri; - - next_id_mutex->lock(); - _id = next_id++; - next_id_mutex->unlock(); - - thread_arg = arg; - detached = det; // may be altered in start_undetached() - - cond_semaphore = CreateSemaphore(NULL, 0, SEMAPHORE_MAX, NULL); - - if (cond_semaphore == NULL) - throw omni_thread_fatal(GetLastError()); - - cond_next = cond_prev = NULL; - cond_waiting = FALSE; - - handle = NULL; - - _dummy = 0; - _values = 0; - _value_alloc = 0; -} - - -// -// Destructor for omni_thread. -// - -omni_thread::~omni_thread(void) -{ - DB(cerr << "destructor called for thread " << id() << endl); - if (_values) { - for (key_t i=0; i < _value_alloc; i++) { - if (_values[i]) { - delete _values[i]; - } - } - delete [] _values; - } - if (handle && !CloseHandle(handle)) - throw omni_thread_fatal(GetLastError()); - if (cond_semaphore && !CloseHandle(cond_semaphore)) - throw omni_thread_fatal(GetLastError()); -} - - -// -// Start the thread -// - -void -omni_thread::start(void) -{ - omni_mutex_lock l(mutex); - - if (_state != STATE_NEW) - throw omni_thread_invalid(); - -#ifndef __BCPLUSPLUS__ - // MSVC++ or compatiable - unsigned int t; - handle = (HANDLE)_beginthreadex( - NULL, - stack_size, - omni_thread_wrapper, - (LPVOID)this, - CREATE_SUSPENDED, - &t); - nt_id = t; - if (handle == NULL) - throw omni_thread_fatal(GetLastError()); -#else - // Borland C++ - handle = (HANDLE)_beginthreadNT(omni_thread_wrapper, - stack_size, - (void*)this, - NULL, - CREATE_SUSPENDED, - &nt_id); - if (handle == INVALID_HANDLE_VALUE) - throw omni_thread_fatal(errno); -#endif - - if (!SetThreadPriority(handle, nt_priority(_priority))) - throw omni_thread_fatal(GetLastError()); - - if (ResumeThread(handle) == 0xffffffff) - throw omni_thread_fatal(GetLastError()); - - _state = STATE_RUNNING; -} - - -// -// Start a thread which will run the member function run_undetached(). -// - -void -omni_thread::start_undetached(void) -{ - if ((fn_void != NULL) || (fn_ret != NULL)) - throw omni_thread_invalid(); - - detached = 0; - start(); -} - - -// -// join - simply check error conditions & call WaitForSingleObject. -// - -void -omni_thread::join(void** status) -{ - mutex.lock(); - - if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { - mutex.unlock(); - throw omni_thread_invalid(); - } - - mutex.unlock(); - - if (this == self()) - throw omni_thread_invalid(); - - if (detached) - throw omni_thread_invalid(); - - DB(cerr << "omni_thread::join: doing WaitForSingleObject\n"); - - if (WaitForSingleObject(handle, INFINITE) != WAIT_OBJECT_0) - throw omni_thread_fatal(GetLastError()); - - DB(cerr << "omni_thread::join: WaitForSingleObject succeeded\n"); - - if (status) - *status = return_val; - - delete this; -} - - -// -// Change this thread's priority. -// - -void -omni_thread::set_priority(priority_t pri) -{ - omni_mutex_lock l(mutex); - - if (_state != STATE_RUNNING) - throw omni_thread_invalid(); - - _priority = pri; - - if (!SetThreadPriority(handle, nt_priority(pri))) - throw omni_thread_fatal(GetLastError()); -} - - -// -// create - construct a new thread object and start it running. Returns thread -// object if successful, null pointer if not. -// - -// detached version - -omni_thread* -omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - t->start(); - return t; -} - -// undetached version - -omni_thread* -omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - t->start(); - return t; -} - - -// -// exit() _must_ lock the mutex even in the case of a detached thread. This is -// because a thread may run to completion before the thread that created it has -// had a chance to get out of start(). By locking the mutex we ensure that the -// creating thread must have reached the end of start() before we delete the -// thread object. Of course, once the call to start() returns, the user can -// still incorrectly refer to the thread object, but that's their problem. -// - -void -omni_thread::exit(void* return_value) -{ - omni_thread* me = self(); - - if (me) - { - me->mutex.lock(); - - me->_state = STATE_TERMINATED; - - me->mutex.unlock(); - - DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " - << me->detached << " return value " << return_value << endl); - - if (me->detached) { - delete me; - } else { - me->return_val = return_value; - } - } - else - { - DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); - } -#ifndef __BCPLUSPLUS__ - // MSVC++ or compatiable - // _endthreadex() does not automatically closes the thread handle. - // The omni_thread dtor closes the thread handle. - _endthreadex(0); -#else - // Borland C++ - // _endthread() does not automatically closes the thread handle. - // _endthreadex() is only available if __MFC_COMPAT__ is defined and - // all it does is to call _endthread(). - _endthread(); -#endif -} - - -omni_thread* -omni_thread::self(void) -{ - LPVOID me; - - me = TlsGetValue(self_tls_index); - - if (me == NULL) { - DB(cerr << "omni_thread::self: called with a non-ominthread. NULL is returned." << endl); - } - return (omni_thread*)me; -} - - -void -omni_thread::yield(void) -{ - Sleep(0); -} - - -#define MAX_SLEEP_SECONDS (DWORD)4294966 // (2**32-2)/1000 - -void -omni_thread::sleep(unsigned long secs, unsigned long nanosecs) -{ - if (secs <= MAX_SLEEP_SECONDS) { - Sleep(secs * 1000 + nanosecs / 1000000); - return; - } - - DWORD no_of_max_sleeps = secs / MAX_SLEEP_SECONDS; - - for (DWORD i = 0; i < no_of_max_sleeps; i++) - Sleep(MAX_SLEEP_SECONDS * 1000); - - Sleep((secs % MAX_SLEEP_SECONDS) * 1000 + nanosecs / 1000000); -} - - -void -omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, - unsigned long rel_sec, unsigned long rel_nsec) -{ - get_time_now(abs_sec, abs_nsec); - *abs_nsec += rel_nsec; - *abs_sec += rel_sec + *abs_nsec / 1000000000; - *abs_nsec = *abs_nsec % 1000000000; -} - - -int -omni_thread::nt_priority(priority_t pri) -{ - switch (pri) { - - case PRIORITY_LOW: - return THREAD_PRIORITY_LOWEST; - - case PRIORITY_NORMAL: - return THREAD_PRIORITY_NORMAL; - - case PRIORITY_HIGH: - return THREAD_PRIORITY_HIGHEST; - } - - throw omni_thread_invalid(); - return 0; /* keep msvc++ happy */ -} - - -static void -get_time_now(unsigned long* abs_sec, unsigned long* abs_nsec) -{ - static int days_in_preceding_months[12] - = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; - static int days_in_preceding_months_leap[12] - = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; - - SYSTEMTIME st; - - GetSystemTime(&st); - *abs_nsec = st.wMilliseconds * 1000000; - - // this formula should work until 1st March 2100 - - DWORD days = ((st.wYear - 1970) * 365 + (st.wYear - 1969) / 4 - + ((st.wYear % 4) - ? days_in_preceding_months[st.wMonth - 1] - : days_in_preceding_months_leap[st.wMonth - 1]) - + st.wDay - 1); - - *abs_sec = st.wSecond + 60 * (st.wMinute + 60 * (st.wHour + 24 * days)); -} - -void -omni_thread::stacksize(unsigned long sz) -{ - stack_size = sz; -} - -unsigned long -omni_thread::stacksize() -{ - return stack_size; -} - -// -// Dummy thread -// - -class omni_thread_dummy : public omni_thread { -public: - inline omni_thread_dummy() : omni_thread() - { - _dummy = 1; - _state = STATE_RUNNING; - - if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), - GetCurrentProcess(), &handle, - 0, FALSE, DUPLICATE_SAME_ACCESS)) - throw omni_thread_fatal(GetLastError()); - - nt_id = GetCurrentThreadId(); - - if (!TlsSetValue(self_tls_index, (LPVOID)this)) - throw omni_thread_fatal(GetLastError()); - } - inline ~omni_thread_dummy() - { - if (!TlsSetValue(self_tls_index, (LPVOID)0)) - throw omni_thread_fatal(GetLastError()); - } -}; - -omni_thread* -omni_thread::create_dummy() -{ - if (omni_thread::self()) - throw omni_thread_invalid(); - - return new omni_thread_dummy; -} - -void -omni_thread::release_dummy() -{ - omni_thread* self = omni_thread::self(); - if (!self || !self->_dummy) - throw omni_thread_invalid(); - - omni_thread_dummy* dummy = (omni_thread_dummy*)self; - delete dummy; -} - - -#if defined(__DMC__) && defined(_WINDLL) -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - return TRUE; -} -#endif - - -#define INSIDE_THREAD_IMPL_CC -#include "threaddata.cc" -#undef INSIDE_THREAD_IMPL_CC diff --git a/gnuradio-core/src/lib/omnithread/omnithread.h b/gnuradio-core/src/lib/omnithread/omnithread.h deleted file mode 100644 index b6df34d7..00000000 --- a/gnuradio-core/src/lib/omnithread/omnithread.h +++ /dev/null @@ -1,622 +0,0 @@ -// -*- Mode: C++; -*- -// Package : omnithread -// omnithread.h Created : 7/94 tjr -// -// Copyright (C) 2006 Free Software Foundation, Inc. -// Copyright (C) 1994,1995,1996, 1997 Olivetti & Oracle Research Laboratory -// -// This file is part of the omnithread library -// -// The omnithread library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library 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 -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Boston, MA -// 02110-1301, USA -// - -// -// Interface to OMNI thread abstraction. -// -// This file declares classes for threads and synchronisation objects -// (mutexes, condition variables and counting semaphores). -// -// Wherever a seemingly arbitrary choice has had to be made as to the interface -// provided, the intention here has been to be as POSIX-like as possible. This -// is why there is no semaphore timed wait, for example. -// - -#ifndef __omnithread_h_ -#define __omnithread_h_ - -#ifndef NULL -#define NULL 0 -#endif - -class omni_mutex; -class omni_condition; -class omni_semaphore; -class omni_thread; - -// -// OMNI_THREAD_EXPOSE can be defined as public or protected to expose the -// implementation class - this may be useful for debugging. Hopefully this -// won't change the underlying structure which the compiler generates so that -// this can work without recompiling the library. -// - -#ifndef OMNI_THREAD_EXPOSE -#define OMNI_THREAD_EXPOSE private -#endif - -// -// Include implementation-specific header file. -// -// This must define 4 CPP macros of the form OMNI_x_IMPLEMENTATION for mutex, -// condition variable, semaphore and thread. Each should define any -// implementation-specific members of the corresponding classes. -// - - -// -// For now, we assume they've always got a Posix Threads implementation. -// If not, it'll take some configure hacking to sort it out, along with -// the relevant libraries to link with, etc. -// - -#if !defined(OMNITHREAD_POSIX) && !defined(OMNITHREAD_NT) && defined HAVE_CONFIG_H -#include -#endif - -#if defined(OMNITHREAD_POSIX) -#include - -#elif defined(OMNITHREAD_NT) -#include - -#ifdef _MSC_VER - -// Using MSVC++ to compile. If compiling library as a DLL, -// define _OMNITHREAD_DLL. If compiling as a statuc library, define -// _WINSTATIC -// If compiling an application that is to be statically linked to omnithread, -// define _WINSTATIC (if the application is to be dynamically linked, -// there is no need to define any of these macros). - -#if defined (_OMNITHREAD_DLL) && defined(_WINSTATIC) -#error "Both _OMNITHREAD_DLL and _WINSTATIC are defined." -#elif defined(_OMNITHREAD_DLL) -#define _OMNITHREAD_NTDLL_ __declspec(dllexport) -#elif !defined(_WINSTATIC) -#define _OMNITHREAD_NTDLL_ __declspec(dllimport) -#elif defined(_WINSTATIC) -#define _OMNITHREAD_NTDLL_ -#endif - // _OMNITHREAD_DLL && _WINSTATIC - -#else - -// Not using MSVC++ to compile -#define _OMNITHREAD_NTDLL_ - -#endif - // _MSC_VER - -#elif defined(__vxWorks__) -#include - -#elif defined(__sunos__) -#if __OSVERSION__ != 5 -// XXX Workaround for SUN C++ compiler (seen on 4.2) Template.DB code -// regeneration bug. See omniORB2/CORBA_sysdep.h for details. -#if !defined(__SUNPRO_CC) || __OSVERSION__ != '5' -#error "Only SunOS 5.x or later is supported." -#endif -#endif -#ifdef UseSolarisThreads -#include -#else -#include -#endif - -#elif defined(__rtems__) -#include -#include - -#elif defined(__macos__) -#include -#include - -#else -#error "No implementation header file" -#endif - - -#if !defined(__WIN32__) -#define _OMNITHREAD_NTDLL_ -#endif - -#if (!defined(OMNI_MUTEX_IMPLEMENTATION) || \ - !defined(OMNI_MUTEX_LOCK_IMPLEMENTATION) || \ - !defined(OMNI_MUTEX_TRYLOCK_IMPLEMENTATION)|| \ - !defined(OMNI_MUTEX_UNLOCK_IMPLEMENTATION) || \ - !defined(OMNI_CONDITION_IMPLEMENTATION) || \ - !defined(OMNI_SEMAPHORE_IMPLEMENTATION) || \ - !defined(OMNI_THREAD_IMPLEMENTATION)) -#error "Implementation header file incomplete" -#endif - - -// -// This exception is thrown in the event of a fatal error. -// - -class _OMNITHREAD_NTDLL_ omni_thread_fatal { -public: - int error; - omni_thread_fatal(int e = 0) : error(e) {} -}; - - -// -// This exception is thrown when an operation is invoked with invalid -// arguments. -// - -class _OMNITHREAD_NTDLL_ omni_thread_invalid {}; - - -/////////////////////////////////////////////////////////////////////////// -// -// Mutex -// -/////////////////////////////////////////////////////////////////////////// - -class _OMNITHREAD_NTDLL_ omni_mutex { - -public: - omni_mutex(void); - ~omni_mutex(void); - - inline void lock(void) { OMNI_MUTEX_LOCK_IMPLEMENTATION } - inline void unlock(void) { OMNI_MUTEX_UNLOCK_IMPLEMENTATION } - inline int trylock(void) { return OMNI_MUTEX_TRYLOCK_IMPLEMENTATION } - // if mutex is unlocked, lock it and return 1 (true). - // If it's already locked then return 0 (false). - - inline void acquire(void) { lock(); } - inline void release(void) { unlock(); } - // the names lock and unlock are preferred over acquire and release - // since we are attempting to be as POSIX-like as possible. - - friend class omni_condition; - -private: - // dummy copy constructor and operator= to prevent copying - omni_mutex(const omni_mutex&); - omni_mutex& operator=(const omni_mutex&); - -OMNI_THREAD_EXPOSE: - OMNI_MUTEX_IMPLEMENTATION -}; - -// -// As an alternative to: -// { -// mutex.lock(); -// ..... -// mutex.unlock(); -// } -// -// you can use a single instance of the omni_mutex_lock class: -// -// { -// omni_mutex_lock l(mutex); -// .... -// } -// -// This has the advantage that mutex.unlock() will be called automatically -// when an exception is thrown. -// - -class _OMNITHREAD_NTDLL_ omni_mutex_lock { - omni_mutex& mutex; -public: - omni_mutex_lock(omni_mutex& m) : mutex(m) { mutex.lock(); } - ~omni_mutex_lock(void) { mutex.unlock(); } -private: - // dummy copy constructor and operator= to prevent copying - omni_mutex_lock(const omni_mutex_lock&); - omni_mutex_lock& operator=(const omni_mutex_lock&); -}; - - -/////////////////////////////////////////////////////////////////////////// -// -// Condition variable -// -/////////////////////////////////////////////////////////////////////////// - -class _OMNITHREAD_NTDLL_ omni_condition { - - omni_mutex* mutex; - -public: - omni_condition(omni_mutex* m); - // constructor must be given a pointer to an existing mutex. The - // condition variable is then linked to the mutex, so that there is an - // implicit unlock and lock around wait() and timed_wait(). - - ~omni_condition(void); - - void wait(void); - // wait for the condition variable to be signalled. The mutex is - // implicitly released before waiting and locked again after waking up. - // If wait() is called by multiple threads, a signal may wake up more - // than one thread. See POSIX threads documentation for details. - - int timedwait(unsigned long secs, unsigned long nanosecs = 0); - // timedwait() is given an absolute time to wait until. To wait for a - // relative time from now, use omni_thread::get_time. See POSIX threads - // documentation for why absolute times are better than relative. - // Returns 1 (true) if successfully signalled, 0 (false) if time - // expired. - - void signal(void); - // if one or more threads have called wait(), signal wakes up at least - // one of them, possibly more. See POSIX threads documentation for - // details. - - void broadcast(void); - // broadcast is like signal but wakes all threads which have called - // wait(). - -private: - // dummy copy constructor and operator= to prevent copying - omni_condition(const omni_condition&); - omni_condition& operator=(const omni_condition&); - -OMNI_THREAD_EXPOSE: - OMNI_CONDITION_IMPLEMENTATION -}; - - -/////////////////////////////////////////////////////////////////////////// -// -// Counting (or binary) semaphore -// -/////////////////////////////////////////////////////////////////////////// - -class _OMNITHREAD_NTDLL_ omni_semaphore { - -public: - // if max_count == 1, you've got a binary semaphore. - omni_semaphore(unsigned int initial = 1, unsigned int max_count = 0x7fffffff); - ~omni_semaphore(void); - - void wait(void); - // if semaphore value is > 0 then decrement it and carry on. If it's - // already 0 then block. - - int trywait(void); - // if semaphore value is > 0 then decrement it and return 1 (true). - // If it's already 0 then return 0 (false). - - void post(void); - // if any threads are blocked in wait(), wake one of them up. Otherwise - // increment the value of the semaphore. - -private: - // dummy copy constructor and operator= to prevent copying - omni_semaphore(const omni_semaphore&); - omni_semaphore& operator=(const omni_semaphore&); - -OMNI_THREAD_EXPOSE: - OMNI_SEMAPHORE_IMPLEMENTATION -}; - -// -// A helper class for semaphores, similar to omni_mutex_lock above. -// - -class _OMNITHREAD_NTDLL_ omni_semaphore_lock { - omni_semaphore& sem; -public: - omni_semaphore_lock(omni_semaphore& s) : sem(s) { sem.wait(); } - ~omni_semaphore_lock(void) { sem.post(); } -private: - // dummy copy constructor and operator= to prevent copying - omni_semaphore_lock(const omni_semaphore_lock&); - omni_semaphore_lock& operator=(const omni_semaphore_lock&); -}; - - -/////////////////////////////////////////////////////////////////////////// -// -// Thread -// -/////////////////////////////////////////////////////////////////////////// - -class _OMNITHREAD_NTDLL_ omni_thread { - -public: - - enum priority_t { - PRIORITY_LOW, - PRIORITY_NORMAL, - PRIORITY_HIGH - }; - - enum state_t { - STATE_NEW, // thread object exists but thread hasn't - // started yet. - STATE_RUNNING, // thread is running. - STATE_TERMINATED // thread has terminated but storage has not - // been reclaimed (i.e. waiting to be joined). - }; - - // - // Constructors set up the thread object but the thread won't start until - // start() is called. The create method can be used to construct and start - // a thread in a single call. - // - - omni_thread(void (*fn)(void*), void* arg = NULL, - priority_t pri = PRIORITY_NORMAL); - omni_thread(void* (*fn)(void*), void* arg = NULL, - priority_t pri = PRIORITY_NORMAL); - // these constructors create a thread which will run the given function - // when start() is called. The thread will be detached if given a - // function with void return type, undetached if given a function - // returning void*. If a thread is detached, storage for the thread is - // reclaimed automatically on termination. Only an undetached thread - // can be joined. - - void start(void); - // start() causes a thread created with one of the constructors to - // start executing the appropriate function. - -protected: - - omni_thread(void* arg = NULL, priority_t pri = PRIORITY_NORMAL); - // this constructor is used in a derived class. The thread will - // execute the run() or run_undetached() member functions depending on - // whether start() or start_undetached() is called respectively. - - void start_undetached(void); - // can be used with the above constructor in a derived class to cause - // the thread to be undetached. In this case the thread executes the - // run_undetached member function. - - virtual ~omni_thread(void); - // destructor cannot be called by user (except via a derived class). - // Use exit() or cancel() instead. This also means a thread object must - // be allocated with new - it cannot be statically or automatically - // allocated. The destructor of a class that inherits from omni_thread - // shouldn't be public either (otherwise the thread object can be - // destroyed while the underlying thread is still running). - -public: - - void join(void**); - // join causes the calling thread to wait for another's completion, - // putting the return value in the variable of type void* whose address - // is given (unless passed a null pointer). Only undetached threads - // may be joined. Storage for the thread will be reclaimed. - - void set_priority(priority_t); - // set the priority of the thread. - - static omni_thread* create(void (*fn)(void*), void* arg = NULL, - priority_t pri = PRIORITY_NORMAL); - static omni_thread* create(void* (*fn)(void*), void* arg = NULL, - priority_t pri = PRIORITY_NORMAL); - // create spawns a new thread executing the given function with the - // given argument at the given priority. Returns a pointer to the - // thread object. It simply constructs a new thread object then calls - // start. - - static void exit(void* return_value = NULL); - // causes the calling thread to terminate. - - static omni_thread* self(void); - // returns the calling thread's omni_thread object. If the - // calling thread is not the main thread and is not created - // using this library, returns 0. (But see create_dummy() - // below.) - - static void yield(void); - // allows another thread to run. - - static void sleep(unsigned long secs, unsigned long nanosecs = 0); - // sleeps for the given time. - - static void get_time(unsigned long* abs_sec, unsigned long* abs_nsec, - unsigned long rel_sec = 0, unsigned long rel_nsec=0); - // calculates an absolute time in seconds and nanoseconds, suitable for - // use in timed_waits on condition variables, which is the current time - // plus the given relative offset. - - - static void stacksize(unsigned long sz); - static unsigned long stacksize(); - // Use this value as the stack size when spawning a new thread. - // The default value (0) means that the thread library default is - // to be used. - - - // Per-thread data - // - // These functions allow you to attach additional data to an - // omni_thread. First allocate a key for yourself with - // allocate_key(). Then you can store any object whose class is - // derived from value_t. Any values still stored in the - // omni_thread when the thread exits are deleted. - // - // These functions are NOT thread safe, so you should be very - // careful about setting/getting data in a different thread to the - // current thread. - - typedef unsigned int key_t; - static key_t allocate_key(); - - class value_t { - public: - virtual ~value_t() {} - }; - - value_t* set_value(key_t k, value_t* v); - // Sets a value associated with the given key. The key must - // have been allocated with allocate_key(). If a value has - // already been set with the specified key, the old value_t - // object is deleted and replaced. Returns the value which was - // set, or zero if the key is invalid. - - value_t* get_value(key_t k); - // Returns the value associated with the key. If the key is - // invalid, or there is no value for the key, returns zero. - - value_t* remove_value(key_t k); - // Removes the value associated with the key and returns it. - // If the key is invalid, or there is no value for the key, - // returns zero. - - - // Dummy omni_thread - // - // Sometimes, an application finds itself with threads created - // outside of omnithread which must interact with omnithread - // features such as the per-thread data. In this situation, - // omni_thread::self() would normally return 0. These functions - // allow the application to create a suitable dummy omni_thread - // object. - - static omni_thread* create_dummy(void); - // creates a dummy omni_thread for the calling thread. Future - // calls to self() will return the dummy omni_thread. Throws - // omni_thread_invalid if this thread already has an - // associated omni_thread (real or dummy). - - static void release_dummy(); - // release the dummy omni_thread for this thread. This - // function MUST be called before the thread exits. Throws - // omni_thread_invalid if the calling thread does not have a - // dummy omni_thread. - - // class ensure_self should be created on the stack. If created in - // a thread without an associated omni_thread, it creates a dummy - // thread which is released when the ensure_self object is deleted. - - class ensure_self { - public: - inline ensure_self() : _dummy(0) - { - _self = omni_thread::self(); - if (!_self) { - _dummy = 1; - _self = omni_thread::create_dummy(); - } - } - inline ~ensure_self() - { - if (_dummy) - omni_thread::release_dummy(); - } - inline omni_thread* self() { return _self; } - private: - omni_thread* _self; - int _dummy; - }; - - -private: - - virtual void run(void* /*arg*/) {} - virtual void* run_undetached(void* /*arg*/) { return NULL; } - // can be overridden in a derived class. When constructed using the - // the constructor omni_thread(void*, priority_t), these functions are - // called by start() and start_undetached() respectively. - - void common_constructor(void* arg, priority_t pri, int det); - // implements the common parts of the constructors. - - omni_mutex mutex; - // used to protect any members which can change after construction, - // i.e. the following 2 members. - - state_t _state; - priority_t _priority; - - static omni_mutex* next_id_mutex; - static int next_id; - int _id; - - void (*fn_void)(void*); - void* (*fn_ret)(void*); - void* thread_arg; - int detached; - int _dummy; - value_t** _values; - unsigned long _value_alloc; - - omni_thread(const omni_thread&); - omni_thread& operator=(const omni_thread&); - // Not implemented - -public: - - priority_t priority(void) { - - // return this thread's priority. - - omni_mutex_lock l(mutex); - return _priority; - } - - state_t state(void) { - - // return thread state (invalid, new, running or terminated). - - omni_mutex_lock l(mutex); - return _state; - } - - int id(void) { return _id; } - // return unique thread id within the current process. - - - // This class plus the instance of it declared below allows us to execute - // some initialisation code before main() is called. - - class _OMNITHREAD_NTDLL_ init_t { - public: - init_t(void); - ~init_t(void); - }; - - friend class init_t; - friend class omni_thread_dummy; - -OMNI_THREAD_EXPOSE: - OMNI_THREAD_IMPLEMENTATION -}; - -#ifndef __rtems__ -static omni_thread::init_t omni_thread_init; -#else -// RTEMS calls global Ctor/Dtor in a context that is not -// a posix thread. Calls to functions to pthread_self() in -// that context returns NULL. -// So, for RTEMS we will make the thread initialization at the -// beginning of the Init task that has a posix context. -#endif - -#endif diff --git a/gnuradio-core/src/lib/omnithread/ot_pthread_nt.h b/gnuradio-core/src/lib/omnithread/ot_pthread_nt.h deleted file mode 100644 index dbf4356c..00000000 --- a/gnuradio-core/src/lib/omnithread/ot_pthread_nt.h +++ /dev/null @@ -1,186 +0,0 @@ -/* Package : omnithread - omnithread/pthread_nt.h Created : Steven Brenneis - - Copyright (C) 1998 Steven Brennes - - This file is part of the omnithread library - - The omnithread library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 51 Franklin Street, Boston, MA - 02110-1301, USA - - Posix Threads implementation for Windows NT, version 4.0 -*/ - -#ifndef PTHREAD_NT_H_INCLUDED -#define PTHREAD_NT_H_INCLUDED - -#include - -#ifndef ETIMEDOUT -// May have to be changed if NT starts supporting more errno values -#define ETIMEDOUT 60 -#endif - -#undef PthreadDraftVersion -#define PthreadDraftVersion 10 - -#define NoNanoSleep - -#define PthreadSupportThreadPriority - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _TIMERS_T_ -#define _TIMERS_T_ - typedef struct timespec { - unsigned long tv_sec; - long tv_nsec; - } timespec_t; -#endif - -typedef char* __pthreadLongString_t; -typedef void* __pthreadLongAddr_t; -typedef __pthreadLongAddr_t* __pthreadLongAddr_p; -typedef long __pthreadLongInt_t; -typedef unsigned long __pthreadLongUint_t; -typedef __pthreadLongAddr_p __pthreadTsd_t; - -typedef struct __pthread_mutex_t { - unsigned int lock; /* LOCK, SLOW, TYPE, RECURSIVE */ - unsigned int valid; /* Validation info */ - __pthreadLongString_t name; /* Name of mutex */ - unsigned int arg; /* printf argument for name */ - unsigned int depth; /* Recursive lock depth */ - unsigned long sequence; /* Mutex sequence number */ - unsigned long owner; /* Current owner (if known */ - __pthreadLongAddr_t block; /* Pointer to blocking struct */ -} pthread_mutex_t; - -typedef struct __pthread_mutexattr_t { - long valid; - __pthreadLongUint_t reserved[15]; -} pthread_mutexattr_t; - -typedef struct __pthread_cond_t { - unsigned int state; /* EVENT, SLOW, REFCNT */ - unsigned int valid; /* Validation info */ - __pthreadLongString_t name; /* Name of condition variable */ - unsigned int arg; /* printf argument for name */ - unsigned long sequence; /* Condition variable seq # */ - __pthreadLongAddr_t block; /* Pointer to blocking struct */ -} pthread_cond_t ; - -typedef struct __pthread_condattr_t { - long valid; - __pthreadLongUint_t reserved[13]; -} pthread_condattr_t ; - -typedef struct __pthread_transp_t { - __pthreadLongAddr_t reserved1; /* Reserved to posix_nt */ - __pthreadLongAddr_t reserved2; /* Reserved to posix_nt */ - unsigned short size; /* Size of data structure */ - unsigned char reserved3[2]; /* Reserved to posix_nt */ - __pthreadLongAddr_t reserved4; /* Reserved to posix_nt */ - __pthreadLongUint_t sequence; /* Thread sequence number */ - __pthreadLongUint_t reserved5[2]; /* Reserved to posix_nt */ - __pthreadLongAddr_t per_kt_area; /* Pointer to kernel context */ - __pthreadLongAddr_t stack_base; /* Current stack base */ - __pthreadLongAddr_t stack_reserve; /* Current stack reserve zone */ - __pthreadLongAddr_t stack_yellow; /* Current stack yellow zone */ - __pthreadLongAddr_t stack_guard; /* Current stack guard zone */ - __pthreadLongUint_t stack_size; /* Size of stack */ - __pthreadTsd_t tsd_values; /* TSD array (indexed by key) */ - unsigned long tsd_count; /* Number of TSD cells */ - __pthreadLongAddr_t reserved6; /* Reserved to posix_nt */ - __pthreadLongAddr_t reserved7; /* Reserved to posix_nt */ - unsigned int thread_flags; /* Dynamic external state */ -} pthread_transp_t, *pthread_transp_p; - -typedef pthread_transp_p pthread_t; - -typedef struct __pthread_attr_t { - long valid; - __pthreadLongString_t name; - __pthreadLongUint_t arg; - __pthreadLongUint_t reserved[19]; -} pthread_attr_t ; - -typedef unsigned int pthread_key_t; - -typedef struct sched_param { - int sched_priority; -} sched_param_t; - -/* Function Prototypes */ - -int pthread_create(pthread_t *thread, const pthread_attr_t *attr, - void *(*start_routine)(void*), void *arg); -int pthread_detach(pthread_t thread); -int pthread_join(pthread_t thread, void **value_ptr); -void pthread_exit(void *value_ptr); -int pthread_attr_init(pthread_attr_t *attr); -int pthread_attr_destroy(pthread_attr_t *attr); -int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); -int pthread_attr_getstacksize(const pthread_attr_t *attr, - size_t *stacksize); -int pthread_cond_init(pthread_cond_t *cond, - const pthread_condattr_t *attr); -int pthread_cond_destroy(pthread_cond_t *cond); -int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); -int pthread_cond_timedwait(pthread_cond_t *cond, - pthread_mutex_t *mutex, - const struct timespec *abstime); -int pthread_cond_signal(pthread_cond_t *cond); -int pthread_cond_broadcast(pthread_cond_t *cond); -int pthread_key_create(pthread_key_t *key, void (*destructor)(void*)); -int pthread_key_delete(pthread_key_t key); -int pthread_mutex_destroy(pthread_mutex_t *mutex); -int pthread_mutex_init(pthread_mutex_t *mutex, - const pthread_mutexattr_t *attr); -int pthread_mutex_lock(pthread_mutex_t *mutex); -int pthread_mutex_trylock(pthread_mutex_t *mutex); -int pthread_mutex_unlock(pthread_mutex_t *mutex); -pthread_t pthread_self(); -int pthread_setspecific(pthread_key_t key, const void *value); -void *pthread_getspecific(pthread_key_t key); -int pthread_getschedparam(pthread_t thread, int *policy, - struct sched_param *param); -int pthread_setschedparam(pthread_t thread, int policy, - const struct sched_param *param); -int pthread_attr_setschedparam(pthread_attr_t *attr, - const struct sched_param *param); -int pthread_attr_getschedparam(const pthread_attr_t *attr, - struct sched_param *param); - -int pthread_delay_np(const struct timespec *interval); -int pthread_get_expiration_np(const struct timespec *delta, - struct timespec *abstime); - -# define SCHED_FIFO 1 -# define SCHED_RR 2 -# define SCHED_OTHER 3 - -int sched_yield(); -int sched_get_priority_max(int policy); -int sched_get_priority_min(int policy); - - -#ifdef __cplusplus -} -#endif - -#endif // PTHREAD_NT_H_INCLUDED diff --git a/gnuradio-core/src/lib/omnithread/posix.cc b/gnuradio-core/src/lib/omnithread/posix.cc deleted file mode 100644 index b82e86df..00000000 --- a/gnuradio-core/src/lib/omnithread/posix.cc +++ /dev/null @@ -1,972 +0,0 @@ -// Package : omnithread -// omnithread/posix.cc Created : 7/94 tjr -// -// Copyright (C) 2006 Free Software Foundation, Inc. -// Copyright (C) 1994-1999 AT&T Laboratories Cambridge -// -// This file is part of the omnithread library -// -// The omnithread library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library 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 -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Boston, MA -// 02110-1301, USA -// - -// -// Implementation of OMNI thread abstraction for posix threads -// -// The source below tests for the definition of the macros: -// PthreadDraftVersion -// PthreadSupportThreadPriority -// NoNanoSleep -// NeedPthreadInit -// -// As different draft versions of the pthread standard P1003.4a/P1003.1c -// define slightly different APIs, the macro 'PthreadDraftVersion' -// identifies the draft version supported by this particular platform. -// -// Some unix variants do not support thread priority unless a real-time -// kernel option is installed. The macro 'PthreadSupportThreadPriority', -// if defined, enables the use of thread priority. If it is not defined, -// setting or changing thread priority will be silently ignored. -// -// nanosleep() is defined in Posix P1003.4 since Draft 9 (?). -// Not all platforms support this standard. The macro 'NoNanoSleep' -// identifies platform that don't. -// - -#include -#include -#include -#include -#include - -#ifdef HAVE_NANOSLEEP -#undef NoNanoSleep -#else -#define NoNanoSleep -#endif - -#ifdef HAVE_SYS_TIME_H -// typedef of struct timeval and gettimeofday(); -#include -#include -#endif - -#if defined(__linux__) && defined(_MIT_POSIX_THREADS) -#include -#endif - -#if defined(__irix__) && defined(PthreadSupportThreadPriority) -#if _POSIX_THREAD_PRIORITY_SCHEDULING -#include -#endif -#endif - -#define DB(x) // x -//#include or #include if DB is on. - -#if (PthreadDraftVersion <= 6) -#define ERRNO(x) (((x) != 0) ? (errno) : 0) -#ifdef __VMS -// pthread_setprio returns old priority on success (draft version 4: -// OpenVms version < 7) -#define THROW_ERRORS(x) { if ((x) == -1) throw omni_thread_fatal(errno); } -#else -#define THROW_ERRORS(x) { if ((x) != 0) throw omni_thread_fatal(errno); } -#endif -#else -#define ERRNO(x) (x) -#define THROW_ERRORS(x) { int rc = (x); \ - if (rc != 0) throw omni_thread_fatal(rc); } -#endif - - - -/////////////////////////////////////////////////////////////////////////// -// -// Mutex -// -/////////////////////////////////////////////////////////////////////////// - - -omni_mutex::omni_mutex(void) -{ -#if (PthreadDraftVersion == 4) - THROW_ERRORS(pthread_mutex_init(&posix_mutex, pthread_mutexattr_default)); -#else - THROW_ERRORS(pthread_mutex_init(&posix_mutex, 0)); -#endif -} - -omni_mutex::~omni_mutex(void) -{ - THROW_ERRORS(pthread_mutex_destroy(&posix_mutex)); -} - - -/////////////////////////////////////////////////////////////////////////// -// -// Condition variable -// -/////////////////////////////////////////////////////////////////////////// - - -omni_condition::omni_condition(omni_mutex* m) : mutex(m) -{ -#if (PthreadDraftVersion == 4) - THROW_ERRORS(pthread_cond_init(&posix_cond, pthread_condattr_default)); -#else - THROW_ERRORS(pthread_cond_init(&posix_cond, 0)); -#endif -} - -omni_condition::~omni_condition(void) -{ - THROW_ERRORS(pthread_cond_destroy(&posix_cond)); -} - -void -omni_condition::wait(void) -{ - THROW_ERRORS(pthread_cond_wait(&posix_cond, &mutex->posix_mutex)); -} - -int -omni_condition::timedwait(unsigned long secs, unsigned long nanosecs) -{ - timespec rqts = { secs, nanosecs }; - -again: - int rc = ERRNO(pthread_cond_timedwait(&posix_cond, - &mutex->posix_mutex, &rqts)); - if (rc == 0) - return 1; - -#if (PthreadDraftVersion <= 6) - if (rc == EAGAIN) - return 0; -#endif - - // Some versions of unix produces this errno when the wait was - // interrupted by a unix signal or fork. - // Some versions of the glibc 2.0.x produces this errno when the - // program is debugged under gdb. Straightly speaking this is non-posix - // compliant. We catch this here to make debugging possible. - if (rc == EINTR) - goto again; - - if (rc == ETIMEDOUT) - return 0; - - throw omni_thread_fatal(rc); -#ifdef _MSC_VER - return 0; -#endif -} - -void -omni_condition::signal(void) -{ - THROW_ERRORS(pthread_cond_signal(&posix_cond)); -} - -void -omni_condition::broadcast(void) -{ - THROW_ERRORS(pthread_cond_broadcast(&posix_cond)); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Counting (or binary) semaphore -// -/////////////////////////////////////////////////////////////////////////// - - -omni_semaphore::omni_semaphore(unsigned int initial, unsigned int _max_count) : c(&m) -{ - value = initial; - max_count = _max_count; - if (value < 0 || max_count < 1) - throw omni_thread_fatal(0); -} - -omni_semaphore::~omni_semaphore(void) -{ -} - -void -omni_semaphore::wait(void) -{ - omni_mutex_lock l(m); - - while (value == 0) - c.wait(); - - value--; -} - -int -omni_semaphore::trywait(void) -{ - omni_mutex_lock l(m); - - if (value == 0) - return 0; - - value--; - return 1; -} - -void -omni_semaphore::post(void) -{ - { - omni_mutex_lock l(m); - if (value < max_count) - value++; - } - - c.signal(); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Thread -// -/////////////////////////////////////////////////////////////////////////// - - -// -// static variables -// - -omni_mutex* omni_thread::next_id_mutex; -int omni_thread::next_id = 0; - -static pthread_key_t self_key; - -#ifdef PthreadSupportThreadPriority -static int lowest_priority; -static int normal_priority; -static int highest_priority; -#endif - -#if defined(__osf1__) && defined(__alpha__) || defined(__VMS) -// omniORB requires a larger stack size than the default (21120) on OSF/1 -static size_t stack_size = 32768; -#elif defined(__rtems__) -static size_t stack_size = ThreadStackSize; -#elif defined(__aix__) -static size_t stack_size = 262144; -#else -static size_t stack_size = 0; -#endif - -// -// Initialisation function (gets called before any user code). -// - -static int& count() { - static int the_count = 0; - return the_count; -} - -omni_thread::init_t::init_t(void) -{ - if (count()++ != 0) // only do it once however many objects get created. - return; - - DB(cerr << "omni_thread::init: posix 1003.4a/1003.1c (draft " - << PthreadDraftVersion << ") implementation initialising\n"); - -#ifdef NeedPthreadInit - - pthread_init(); - -#endif - -#if (PthreadDraftVersion == 4) - THROW_ERRORS(pthread_keycreate(&self_key, NULL)); -#else - THROW_ERRORS(pthread_key_create(&self_key, NULL)); -#endif - -#ifdef PthreadSupportThreadPriority - -#if defined(__osf1__) && defined(__alpha__) || defined(__VMS) - - lowest_priority = PRI_OTHER_MIN; - highest_priority = PRI_OTHER_MAX; - -#elif defined(__hpux__) - - lowest_priority = PRI_OTHER_MIN; - highest_priority = PRI_OTHER_MAX; - -#elif defined(__sunos__) && (__OSVERSION__ == 5) - - // a bug in pthread_attr_setschedparam means lowest priority is 1 not 0 - - lowest_priority = 1; - highest_priority = 3; - -#else - - lowest_priority = sched_get_priority_min(SCHED_FIFO); - highest_priority = sched_get_priority_max(SCHED_FIFO); - -#endif - - switch (highest_priority - lowest_priority) { - - case 0: - case 1: - normal_priority = lowest_priority; - break; - - default: - normal_priority = lowest_priority + 1; - break; - } - -#endif /* PthreadSupportThreadPriority */ - - next_id_mutex = new omni_mutex; - - // - // Create object for this (i.e. initial) thread. - // - - omni_thread* t = new omni_thread; - - t->_state = STATE_RUNNING; - - t->posix_thread = pthread_self (); - - DB(cerr << "initial thread " << t->id() << endl); - - THROW_ERRORS(pthread_setspecific(self_key, (void*)t)); - -#ifdef PthreadSupportThreadPriority - -#if (PthreadDraftVersion == 4) - - THROW_ERRORS(pthread_setprio(t->posix_thread, - posix_priority(PRIORITY_NORMAL))); - -#elif (PthreadDraftVersion == 6) - - pthread_attr_t attr; - pthread_attr_init(&attr); - - THROW_ERRORS(pthread_attr_setprio(&attr, posix_priority(PRIORITY_NORMAL))); - - THROW_ERRORS(pthread_setschedattr(t->posix_thread, attr)); - -#else - - struct sched_param sparam; - - sparam.sched_priority = posix_priority(PRIORITY_NORMAL); - - THROW_ERRORS(pthread_setschedparam(t->posix_thread, SCHED_OTHER, &sparam)); - -#endif /* PthreadDraftVersion */ - -#endif /* PthreadSupportThreadPriority */ -} - -omni_thread::init_t::~init_t(void) -{ - if (--count() != 0) return; - - omni_thread* self = omni_thread::self(); - if (!self) return; - - pthread_setspecific(self_key, 0); - delete self; - - delete next_id_mutex; -} - -// -// Wrapper for thread creation. -// - -extern "C" void* -omni_thread_wrapper(void* ptr) -{ - omni_thread* me = (omni_thread*)ptr; - - DB(cerr << "omni_thread_wrapper: thread " << me->id() - << " started\n"); - - THROW_ERRORS(pthread_setspecific(self_key, me)); - - // - // Now invoke the thread function with the given argument. - // - - if (me->fn_void != NULL) { - (*me->fn_void)(me->thread_arg); - omni_thread::exit(); - } - - if (me->fn_ret != NULL) { - void* return_value = (*me->fn_ret)(me->thread_arg); - omni_thread::exit(return_value); - } - - if (me->detached) { - me->run(me->thread_arg); - omni_thread::exit(); - } else { - void* return_value = me->run_undetached(me->thread_arg); - omni_thread::exit(return_value); - } - - // should never get here. - - return NULL; -} - - -// -// Constructors for omni_thread - set up the thread object but don't -// start it running. -// - -// construct a detached thread running a given function. - -omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = fn; - fn_ret = NULL; -} - -// construct an undetached thread running a given function. - -omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 0); - fn_void = NULL; - fn_ret = fn; -} - -// construct a thread which will run either run() or run_undetached(). - -omni_thread::omni_thread(void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = NULL; - fn_ret = NULL; -} - -// common part of all constructors. - -void -omni_thread::common_constructor(void* arg, priority_t pri, int det) -{ - _state = STATE_NEW; - _priority = pri; - - next_id_mutex->lock(); - _id = next_id++; - next_id_mutex->unlock(); - - thread_arg = arg; - detached = det; // may be altered in start_undetached() - - _dummy = 0; - _values = 0; - _value_alloc = 0; - // posix_thread is set up in initialisation routine or start(). -} - - -// -// Destructor for omni_thread. -// - -omni_thread::~omni_thread(void) -{ - DB(cerr << "destructor called for thread " << id() << endl); - if (_values) { - for (key_t i=0; i < _value_alloc; i++) { - if (_values[i]) { - delete _values[i]; - } - } - delete [] _values; - } -} - - -// -// Start the thread -// - -void -omni_thread::start(void) -{ - omni_mutex_lock l(mutex); - - if (_state != STATE_NEW) - throw omni_thread_invalid(); - - pthread_attr_t attr; - -#if (PthreadDraftVersion == 4) - pthread_attr_create(&attr); -#else - pthread_attr_init(&attr); -#endif - -#if (PthreadDraftVersion == 8) - pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_UNDETACHED); -#endif - -#ifdef PthreadSupportThreadPriority - -#if (PthreadDraftVersion <= 6) - - THROW_ERRORS(pthread_attr_setprio(&attr, posix_priority(_priority))); - -#else - - struct sched_param sparam; - - sparam.sched_priority = posix_priority(_priority); - - THROW_ERRORS(pthread_attr_setschedparam(&attr, &sparam)); - -#endif /* PthreadDraftVersion */ - -#endif /* PthreadSupportThreadPriority */ - -#if !defined(__linux__) - if (stack_size) { - THROW_ERRORS(pthread_attr_setstacksize(&attr, stack_size)); - } -#endif - - -#if (PthreadDraftVersion == 4) - THROW_ERRORS(pthread_create(&posix_thread, attr, omni_thread_wrapper, - (void*)this)); - pthread_attr_delete(&attr); -#else - THROW_ERRORS(pthread_create(&posix_thread, &attr, omni_thread_wrapper, - (void*)this)); - pthread_attr_destroy(&attr); -#endif - - _state = STATE_RUNNING; - - if (detached) { - -#if (PthreadDraftVersion <= 6) - THROW_ERRORS(pthread_detach(&posix_thread)); -#else - THROW_ERRORS(pthread_detach(posix_thread)); -#endif - } -} - - -// -// Start a thread which will run the member function run_undetached(). -// - -void -omni_thread::start_undetached(void) -{ - if ((fn_void != NULL) || (fn_ret != NULL)) - throw omni_thread_invalid(); - - detached = 0; - start(); -} - - -// -// join - simply check error conditions & call pthread_join. -// - -void -omni_thread::join(void** status) -{ - mutex.lock(); - - if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { - mutex.unlock(); - throw omni_thread_invalid(); - } - - mutex.unlock(); - - if (this == self()) - throw omni_thread_invalid(); - - if (detached) - throw omni_thread_invalid(); - - DB(cerr << "omni_thread::join: doing pthread_join\n"); - - THROW_ERRORS(pthread_join(posix_thread, status)); - - DB(cerr << "omni_thread::join: pthread_join succeeded\n"); - -#if (PthreadDraftVersion == 4) - // With draft 4 pthreads implementations (HPUX 10.x and - // Digital Unix 3.2), have to detach the thread after - // join. If not, the storage for the thread will not be - // be reclaimed. - THROW_ERRORS(pthread_detach(&posix_thread)); -#endif - - delete this; -} - - -// -// Change this thread's priority. -// - -void -omni_thread::set_priority(priority_t pri) -{ - omni_mutex_lock l(mutex); - - if (_state != STATE_RUNNING) - throw omni_thread_invalid(); - - _priority = pri; - -#ifdef PthreadSupportThreadPriority - -#if (PthreadDraftVersion == 4) - - THROW_ERRORS(pthread_setprio(posix_thread, posix_priority(pri))); - -#elif (PthreadDraftVersion == 6) - - pthread_attr_t attr; - pthread_attr_init(&attr); - - THROW_ERRORS(pthread_attr_setprio(&attr, posix_priority(pri))); - - THROW_ERRORS(pthread_setschedattr(posix_thread, attr)); - -#else - - struct sched_param sparam; - - sparam.sched_priority = posix_priority(pri); - - THROW_ERRORS(pthread_setschedparam(posix_thread, SCHED_OTHER, &sparam)); - -#endif /* PthreadDraftVersion */ - -#endif /* PthreadSupportThreadPriority */ -} - - -// -// create - construct a new thread object and start it running. Returns thread -// object if successful, null pointer if not. -// - -// detached version - -omni_thread* -omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - -// undetached version - -omni_thread* -omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - - -// -// exit() _must_ lock the mutex even in the case of a detached thread. This is -// because a thread may run to completion before the thread that created it has -// had a chance to get out of start(). By locking the mutex we ensure that the -// creating thread must have reached the end of start() before we delete the -// thread object. Of course, once the call to start() returns, the user can -// still incorrectly refer to the thread object, but that's their problem. -// - -void -omni_thread::exit(void* return_value) -{ - omni_thread* me = self(); - - if (me) - { - me->mutex.lock(); - - me->_state = STATE_TERMINATED; - - me->mutex.unlock(); - - DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " - << me->detached << " return value " << return_value << endl); - - if (me->detached) - delete me; - } - else - { - DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); - } - - pthread_exit(return_value); -} - - -omni_thread* -omni_thread::self(void) -{ - omni_thread* me; - -#if (PthreadDraftVersion <= 6) - - THROW_ERRORS(pthread_getspecific(self_key, (void**)&me)); - -#else - - me = (omni_thread *)pthread_getspecific(self_key); - -#endif - - if (!me) { - // This thread is not created by omni_thread::start because it - // doesn't has a class omni_thread instance attached to its key. - DB(cerr << "omni_thread::self: called with a non-omnithread. NULL is returned." << endl); - } - - return me; -} - - -void -omni_thread::yield(void) -{ -#if (PthreadDraftVersion == 6) - - pthread_yield(NULL); - -#elif (PthreadDraftVersion < 9) - - pthread_yield(); - -#else - - THROW_ERRORS(sched_yield()); - -#endif -} - - -void -omni_thread::sleep(unsigned long secs, unsigned long nanosecs) -{ - timespec rqts = { secs, nanosecs }; - -#ifndef NoNanoSleep - - timespec remain; - while (nanosleep(&rqts, &remain)) { - if (errno == EINTR) { - rqts.tv_sec = remain.tv_sec; - rqts.tv_nsec = remain.tv_nsec; - continue; - } - else - throw omni_thread_fatal(errno); - } -#else - -#if defined(__osf1__) && defined(__alpha__) || defined(__hpux__) && (__OSVERSION__ == 10) || defined(__VMS) || defined(__SINIX__) || defined (__POSIX_NT__) - - if (pthread_delay_np(&rqts) != 0) - throw omni_thread_fatal(errno); - -#elif defined(__linux__) || defined(__aix__) - - if (secs > 2000) { - while ((secs = ::sleep(secs))) ; - } else { - usleep(secs * 1000000 + (nanosecs / 1000)); - } - -#elif defined(__darwin__) || defined(__macos__) - - // Single UNIX Specification says argument of usleep() must be - // less than 1,000,000. - secs += nanosecs / 1000000000; - nanosecs %= 1000000000; - while ((secs = ::sleep(secs))) ; - usleep(nanosecs / 1000); - -#else - - throw omni_thread_invalid(); - -#endif -#endif /* NoNanoSleep */ -} - - -void -omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, - unsigned long rel_sec, unsigned long rel_nsec) -{ - timespec abs; - -#if defined(__osf1__) && defined(__alpha__) || defined(__hpux__) && (__OSVERSION__ == 10) || defined(__VMS) || defined(__SINIX__) || defined(__POSIX_NT__) - - timespec rel; - rel.tv_sec = rel_sec; - rel.tv_nsec = rel_nsec; - THROW_ERRORS(pthread_get_expiration_np(&rel, &abs)); - -#else - -#ifdef HAVE_CLOCK_GETTIME /* __linux__ || __aix__ */ - - clock_gettime(CLOCK_REALTIME, &abs); - -#elif defined(HAVE_GETTIMEOFDAY) /* defined(__linux__) || defined(__aix__) || defined(__SCO_VERSION__) || defined(__darwin__) || defined(__macos__) */ - - struct timeval tv; - gettimeofday(&tv, NULL); - abs.tv_sec = tv.tv_sec; - abs.tv_nsec = tv.tv_usec * 1000; - -#else -#error no get time support -#endif /* __linux__ || __aix__ */ - - abs.tv_nsec += rel_nsec; - abs.tv_sec += rel_sec + abs.tv_nsec / 1000000000; - abs.tv_nsec = abs.tv_nsec % 1000000000; - -#endif /* __osf1__ && __alpha__ */ - - *abs_sec = abs.tv_sec; - *abs_nsec = abs.tv_nsec; -} - - -int -omni_thread::posix_priority(priority_t pri) -{ -#ifdef PthreadSupportThreadPriority - switch (pri) { - - case PRIORITY_LOW: - return lowest_priority; - - case PRIORITY_NORMAL: - return normal_priority; - - case PRIORITY_HIGH: - return highest_priority; - - } -#endif - - throw omni_thread_invalid(); -#ifdef _MSC_VER - return 0; -#endif -} - -void -omni_thread::stacksize(unsigned long sz) -{ - stack_size = sz; -} - -unsigned long -omni_thread::stacksize() -{ - return stack_size; -} - -// -// Dummy thread -// - -class omni_thread_dummy : public omni_thread { -public: - inline omni_thread_dummy() : omni_thread() - { - _dummy = 1; - _state = STATE_RUNNING; - posix_thread = pthread_self(); - THROW_ERRORS(pthread_setspecific(self_key, (void*)this)); - } - inline ~omni_thread_dummy() - { - THROW_ERRORS(pthread_setspecific(self_key, 0)); - } -}; - -omni_thread* -omni_thread::create_dummy() -{ - if (omni_thread::self()) - throw omni_thread_invalid(); - - return new omni_thread_dummy; -} - -void -omni_thread::release_dummy() -{ - omni_thread* self = omni_thread::self(); - if (!self || !self->_dummy) - throw omni_thread_invalid(); - - omni_thread_dummy* dummy = (omni_thread_dummy*)self; - delete dummy; -} - - -#define INSIDE_THREAD_IMPL_CC -#include "threaddata.cc" -#undef INSIDE_THREAD_IMPL_CC diff --git a/gnuradio-core/src/lib/omnithread/solaris.cc b/gnuradio-core/src/lib/omnithread/solaris.cc deleted file mode 100644 index b0139d29..00000000 --- a/gnuradio-core/src/lib/omnithread/solaris.cc +++ /dev/null @@ -1,615 +0,0 @@ -// Package : omnithread -// omnithread/solaris.cc Created : 7/94 tjr -// -// Copyright (C) 1994-1999 AT&T Laboratories Cambridge -// -// This file is part of the omnithread library -// -// The omnithread library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Library General Public -// License as published by the Free Software Foundation; either -// version 2 of the License, or (at your option) any later version. -// -// This library 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 -// Library General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this library; if not, write to the Free -// Software Foundation, Inc., 51 Franklin Street, Boston, MA -// 02110-1301, USA -// -// -// Implementation of OMNI thread abstraction for solaris threads. -// - -#include -#include -#include - -#define DB(x) // x -// #include or #include if DB is on. - -#define THROW_ERRORS(x) { int rc = (x); \ - if (rc != 0) throw omni_thread_fatal(rc); } - - - -/////////////////////////////////////////////////////////////////////////// -// -// Mutex -// -/////////////////////////////////////////////////////////////////////////// - - -omni_mutex::omni_mutex(void) -{ - THROW_ERRORS(mutex_init(&sol_mutex, USYNC_THREAD, 0)); -} - -omni_mutex::~omni_mutex(void) -{ - THROW_ERRORS(mutex_destroy(&sol_mutex)); -} - -void -omni_mutex::lock(void) -{ - THROW_ERRORS(mutex_lock(&sol_mutex)); -} - -void -omni_mutex::unlock(void) -{ - THROW_ERRORS(mutex_unlock(&sol_mutex)); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Condition variable -// -/////////////////////////////////////////////////////////////////////////// - - -omni_condition::omni_condition(omni_mutex* m) : mutex(m) -{ - THROW_ERRORS(cond_init(&sol_cond, USYNC_THREAD, 0)); -} - -omni_condition::~omni_condition(void) -{ - THROW_ERRORS(cond_destroy(&sol_cond)); -} - -void -omni_condition::wait(void) -{ - THROW_ERRORS(cond_wait(&sol_cond, &mutex->sol_mutex)); -} - -int -omni_condition::timedwait(unsigned long secs, unsigned long nanosecs) -{ - timespec rqts = { secs, nanosecs }; - - again: - int rc = cond_timedwait(&sol_cond, &mutex->sol_mutex, &rqts); - - if (rc == 0) - return 1; - - if (rc == EINTR) - goto again; - - if (rc == ETIME) - return 0; - - throw omni_thread_fatal(rc); -} - -void -omni_condition::signal(void) -{ - THROW_ERRORS(cond_signal(&sol_cond)); -} - -void -omni_condition::broadcast(void) -{ - THROW_ERRORS(cond_broadcast(&sol_cond)); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Counting semaphore -// -/////////////////////////////////////////////////////////////////////////// - - -omni_semaphore::omni_semaphore(unsigned int initial) -{ - THROW_ERRORS(sema_init(&sol_sem, initial, USYNC_THREAD, NULL)); -} - -omni_semaphore::~omni_semaphore(void) -{ - THROW_ERRORS(sema_destroy(&sol_sem)); -} - -void -omni_semaphore::wait(void) -{ - THROW_ERRORS(sema_wait(&sol_sem)); -} - -void -omni_semaphore::post(void) -{ - THROW_ERRORS(sema_post(&sol_sem)); -} - - - -/////////////////////////////////////////////////////////////////////////// -// -// Thread -// -/////////////////////////////////////////////////////////////////////////// - - -// -// Static variables -// - -int omni_thread::init_t::count = 0; - -omni_mutex* omni_thread::next_id_mutex; -int omni_thread::next_id = 0; - -static thread_key_t self_key; - -static size_t stack_size = 0; - -// -// Initialisation function (gets called before any user code). -// - -omni_thread::init_t::init_t(void) -{ - if (count++ != 0) // only do it once however many objects get created. - return; - - DB(cerr << "omni_thread::init: solaris implementation initialising\n"); - - THROW_ERRORS(thr_keycreate(&self_key, NULL)); - - next_id_mutex = new omni_mutex; - - // - // Create object for this (i.e. initial) thread. - // - - omni_thread* t = new omni_thread; - - t->_state = STATE_RUNNING; - - t->sol_thread = thr_self(); - - DB(cerr << "initial thread " << t->id() << " sol_thread " << t->sol_thread - << endl); - - THROW_ERRORS(thr_setspecific(self_key, (void*)t)); - - THROW_ERRORS(thr_setprio(t->sol_thread, sol_priority(PRIORITY_NORMAL))); -} - - -// -// Wrapper for thread creation. -// - -extern "C" void* -omni_thread_wrapper(void* ptr) -{ - omni_thread* me = (omni_thread*)ptr; - - DB(cerr << "omni_thread::wrapper: thread " << me->id() - << " started\n"); - - THROW_ERRORS(thr_setspecific(self_key, me)); - - // - // Now invoke the thread function with the given argument. - // - - if (me->fn_void != NULL) { - (*me->fn_void)(me->thread_arg); - omni_thread::exit(); - } - - if (me->fn_ret != NULL) { - void* return_value = (*me->fn_ret)(me->thread_arg); - omni_thread::exit(return_value); - } - - if (me->detached) { - me->run(me->thread_arg); - omni_thread::exit(); - } else { - void* return_value = me->run_undetached(me->thread_arg); - omni_thread::exit(return_value); - } - - // should never get here. - - return NULL; -} - - -// -// Constructors for omni_thread - set up the thread object but don't -// start it running. -// - -// construct a detached thread running a given function. - -omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = fn; - fn_ret = NULL; -} - -// construct an undetached thread running a given function. - -omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 0); - fn_void = NULL; - fn_ret = fn; -} - -// construct a thread which will run either run() or run_undetached(). - -omni_thread::omni_thread(void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = NULL; - fn_ret = NULL; -} - -// common part of all constructors. - -void -omni_thread::common_constructor(void* arg, priority_t pri, int det) -{ - _state = STATE_NEW; - _priority = pri; - - next_id_mutex->lock(); - _id = next_id++; - next_id_mutex->unlock(); - - thread_arg = arg; - detached = det; // may be altered in start_undetached() - - _dummy = 0; - _values = 0; - _value_alloc = 0; - // sol_thread is set up in initialisation routine or start(). -} - - -// -// Destructor for omni_thread. -// - -omni_thread::~omni_thread(void) -{ - DB(cerr << "destructor called for thread " << id() << endl); - if (_values) { - for (key_t i=0; i < _value_alloc; i++) { - if (_values[i]) { - delete _values[i]; - } - } - delete [] _values; - } -} - - -// -// Start the thread -// - -void -omni_thread::start(void) -{ - long flags = 0; - - if (detached) - flags |= THR_DETACHED; - - omni_mutex_lock l(mutex); - - if (_state != STATE_NEW) - throw omni_thread_invalid(); - - THROW_ERRORS(thr_create(0, stack_size, omni_thread_wrapper, (void*)this, flags, - &sol_thread)); - - _state = STATE_RUNNING; - - THROW_ERRORS(thr_setprio(sol_thread, sol_priority(_priority))); -} - - -// -// Start a thread which will run the member function run_undetached(). -// - -void -omni_thread::start_undetached(void) -{ - if ((fn_void != NULL) || (fn_ret != NULL)) - throw omni_thread_invalid(); - - detached = 0; - start(); -} - - -// -// join - simply check error conditions & call thr_join. -// - -void -omni_thread::join(void** status) -{ - mutex.lock(); - - if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { - mutex.unlock(); - throw omni_thread_invalid(); - } - - mutex.unlock(); - - if (this == self()) - throw omni_thread_invalid(); - - if (detached) - throw omni_thread_invalid(); - - DB(cerr << "omni_thread::join: doing thr_join\n"); - - THROW_ERRORS(thr_join(sol_thread, (thread_t *)NULL, status)); - - DB(cerr << "omni_thread::join: thr_join succeeded\n"); - - delete this; -} - - -// -// Change this thread's priority. -// - -void -omni_thread::set_priority(priority_t pri) -{ - omni_mutex_lock l(mutex); - - if (_state != STATE_RUNNING) - throw omni_thread_invalid(); - - _priority = pri; - - THROW_ERRORS(thr_setprio(sol_thread, sol_priority(pri))); -} - - -// -// create - construct a new thread object and start it running. Returns thread -// object if successful, null pointer if not. -// - -// detached version - -omni_thread* -omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - -// undetached version - -omni_thread* -omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - - -// -// exit() _must_ lock the mutex even in the case of a detached thread. This is -// because a thread may run to completion before the thread that created it has -// had a chance to get out of start(). By locking the mutex we ensure that the -// creating thread must have reached the end of start() before we delete the -// thread object. Of course, once the call to start() returns, the user can -// still incorrectly refer to the thread object, but that's their problem. -// - -void -omni_thread::exit(void* return_value) -{ - omni_thread* me = self(); - - if (me) - { - me->mutex.lock(); - - me->_state = STATE_TERMINATED; - - me->mutex.unlock(); - - DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " - << me->detached << " return value " << return_value << endl); - - if (me->detached) - delete me; - } - else - { - DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); - } - - thr_exit(return_value); -} - - -omni_thread* -omni_thread::self(void) -{ - omni_thread* me; - - THROW_ERRORS(thr_getspecific(self_key, (void**)&me)); - - if (!me) { - // This thread is not created by omni_thread::start because it - // doesn't has a class omni_thread instance attached to its key. - DB(cerr << "omni_thread::self: called with a non-ominthread. NULL is returned." << endl); - } - - return me; -} - - -void -omni_thread::yield(void) -{ - thr_yield(); -} - - -void -omni_thread::sleep(unsigned long secs, unsigned long nanosecs) -{ - timespec rqts = { secs, nanosecs }; - timespec remain; - while (nanosleep(&rqts, &remain)) { - if (errno == EINTR) { - rqts.tv_sec = remain.tv_sec; - rqts.tv_nsec = remain.tv_nsec; - continue; - } - else - throw omni_thread_fatal(errno); - } -} - - -void -omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, - unsigned long rel_sec, unsigned long rel_nsec) -{ - timespec abs; - clock_gettime(CLOCK_REALTIME, &abs); - abs.tv_nsec += rel_nsec; - abs.tv_sec += rel_sec + abs.tv_nsec / 1000000000; - abs.tv_nsec = abs.tv_nsec % 1000000000; - *abs_sec = abs.tv_sec; - *abs_nsec = abs.tv_nsec; -} - - -int -omni_thread::sol_priority(priority_t pri) -{ - switch (pri) { - - case PRIORITY_LOW: - return 0; - - case PRIORITY_NORMAL: - return 1; - - case PRIORITY_HIGH: - return 2; - } - - throw omni_thread_invalid(); -} - - -void -omni_thread::stacksize(unsigned long sz) -{ - stack_size = sz; -} - -unsigned long -omni_thread::stacksize() -{ - return stack_size; -} - - -// -// Dummy thread -// - -#error This dummy thread code is not tested. It might work if you're lucky. - -class omni_thread_dummy : public omni_thread { -public: - inline omni_thread_dummy() : omni_thread() - { - _dummy = 1; - _state = STATE_RUNNING; - sol_thread = thr_self(); - THROW_ERRORS(thr_setspecific(self_key, (void*)this)); - } - inline ~omni_thread_dummy() - { - THROW_ERRORS(thr_setspecific(self_key, 0)); - } -}; - -omni_thread* -omni_thread::create_dummy() -{ - if (omni_thread::self()) - throw omni_thread_invalid(); - - return new omni_thread_dummy; -} - -void -omni_thread::release_dummy() -{ - omni_thread* self = omni_thread::self(); - if (!self || !self->_dummy) - throw omni_thread_invalid(); - - omni_thread_dummy* dummy = (omni_thread_dummy*)self; - delete dummy; -} - - -#define INSIDE_THREAD_IMPL_CC -#include "threaddata.cc" -#undef INSIDE_THREAD_IMPL_CC diff --git a/gnuradio-core/src/lib/omnithread/vxWorks.cc b/gnuradio-core/src/lib/omnithread/vxWorks.cc deleted file mode 100644 index 25634ce9..00000000 --- a/gnuradio-core/src/lib/omnithread/vxWorks.cc +++ /dev/null @@ -1,1160 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// Filename: vxWorks.cc -// Author: Tihomir Sokcevic -// Acterna, Eningen. -// Description: vxWorks adaptation of the omnithread wrapper classes -// Notes: Munching strategy is imperative -////////////////////////////////////////////////////////////////////////////// -// $Log$ -// Revision 1.1 2004/04/10 18:00:52 eb -// Initial revision -// -// Revision 1.1.1.1 2004/03/01 00:20:27 eb -// initial checkin -// -// Revision 1.1 2003/05/25 05:29:04 eb -// see ChangeLog -// -// Revision 1.1.2.1 2003/02/17 02:03:11 dgrisby -// vxWorks port. (Thanks Michael Sturm / Acterna Eningen GmbH). -// -// Revision 1.1.1.1 2002/11/19 14:58:04 sokcevti -// OmniOrb4.0.0 VxWorks port -// -// Revision 1.4 2002/10/15 07:54:09 kuttlest -// change semaphore from SEM_FIFO to SEM_PRIO -// --- -// -// Revision 1.3 2002/07/05 07:38:52 engeln -// made priority redefinable on load time by defining int variables -// omni_thread_prio_low = 220; -// omni_thread_prio_normal = 110; -// omni_thread_prio_high = 55; -// the default priority is prio_normal. -// The normal priority default has been increased from 200 to 110 and the -// high priority from 100 to 55. -// --- -// -// Revision 1.2 2002/06/14 12:44:57 engeln -// replaced possibly unsafe wakeup procedure in broadcast. -// --- -// -// Revision 1.1.1.1 2002/04/02 10:09:34 sokcevti -// omniORB4 initial realease -// -// Revision 1.0 2001/10/23 14:22:45 sokcevti -// Initial Version 4.00 -// --- -// -////////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////////// -// Include files -////////////////////////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include -#include - -#include // assert -#include // intContext - - -////////////////////////////////////////////////////////////////////////////// -// Local defines -////////////////////////////////////////////////////////////////////////////// -#define ERRNO(x) (((x) != 0) ? (errno) : 0) -#define THROW_ERRORS(x) { if((x) != OK) throw omni_thread_fatal(errno); } -#define OMNI_THREAD_ID 0x7F7155AAl -#define OMNI_STACK_SIZE 32768l - -#ifdef _DEBUG - #include - #define DBG_TRACE(X) X -#else // _DEBUG - #define DBG_TRACE(X) -#endif // _DEBUG - -#define DBG_ASSERT(X) - -#define DBG_THROW(X) X - -int omni_thread_prio_low = 220; -int omni_thread_prio_normal = 110; -int omni_thread_prio_high = 55; -/////////////////////////////////////////////////////////////////////////// -// -// Mutex -// -/////////////////////////////////////////////////////////////////////////// -omni_mutex::omni_mutex(void):m_bConstructed(false) -{ - mutexID = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE); - - DBG_ASSERT(assert(mutexID != NULL)); - - if(mutexID==NULL) - { - DBG_TRACE(cout<<"Exception: omni_mutex::omni_mutex() tid: "<<(int)taskIdSelf()<mutexID<<" tid:"<<(int)taskIdSelf()<mutexID<<" tid:"<<(int)taskIdSelf()< count. - - STATUS status = semTake(waiters_lock_,WAIT_FOREVER); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::wait"<unlock(); - - // Wait to be awakened by a cond_signal() or cond_broadcast(). - status = semTake(sema_,WAIT_FOREVER); - - // reenable task rescheduling - taskUnlock(); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::wait"< count. - status = semTake(waiters_lock_,WAIT_FOREVER); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::wait"<, even when errors - // occur because that's the guarantee that we give to our callers. - mutex->lock(); -} - - -// The time given is absolute. Return 0 is timeout -int omni_condition::timedwait(unsigned long secs, unsigned long nanosecs) -{ - STATUS result = OK; - timespec now; - unsigned long timeout; - int ticks; - - // Prevent race conditions on the count. - STATUS status = semTake(waiters_lock_, WAIT_FOREVER); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::timedwait"<unlock(); - - // Wait to be awakened by a signal() or broadcast(). - ticks = (timeout * sysClkRateGet()) / 1000L; - result = semTake(sema_, ticks); - - // reenable task rescheduling - taskUnlock(); - - // Reacquire lock to avoid race conditions. - status = semTake(waiters_lock_, WAIT_FOREVER); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::timedwait"<id()<<" SemID:"<<(int)sema_<<" errno:"<, even when errors - // occur because that's the guarantee that we give to our callers. - mutex->lock(); - - if(result!=OK) // timeout - return 0; - - return 1; -} - -void omni_condition::signal(void) -{ - DBG_TRACE(cout<<"omni_condition::signal mutexID: "<<(int)mutex->mutexID<<" tid:"<<(int)taskIdSelf()< 0; - - status = semGive(waiters_lock_); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::signal"<mutexID<<" tid:"<<(int)taskIdSelf()< must be locked before this call is made. - // This is needed to ensure that and are - // consistent relative to each other. - STATUS status = semTake(waiters_lock_, WAIT_FOREVER); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::signal"< 0) - { - // We are broadcasting, even if there is just one waiter... - // Record the fact that we are broadcasting. This helps the - // cond_wait() method know how to optimize itself. Be sure to - // set this with the held. - have_waiters = 1; - } - - status = semGive(waiters_lock_); - - DBG_ASSERT(assert(status == OK)); - - if(status != OK) - { - DBG_TRACE(cout<<"Exception: omni_condition::signal"<id()<<" SemID:"<<(int)sema_<<" errno:"<spare1 = 0; - delete self; - - delete next_id_mutex; -} - - -// -// Wrapper for thread creation. -// -extern "C" void omni_thread_wrapper(void* ptr) -{ - omni_thread* me = (omni_thread*)ptr; - - DBG_TRACE(cout<<"omni_thread_wrapper: thread "<id()<<" started\n"); - - // - // We can now tweaked the task info since the tcb exist now - // - me->mutex.lock(); // To ensure that start has had time to finish - taskTcb(me->tid)->spare1 = OMNI_THREAD_ID; - taskTcb(me->tid)->spare2 = (int)ptr; - me->mutex.unlock(); - - // - // Now invoke the thread function with the given argument. - // - if(me->fn_void != NULL) - { - (*me->fn_void)(me->thread_arg); - omni_thread::exit(); - } - - if(me->fn_ret != NULL) - { - void* return_value = (*me->fn_ret)(me->thread_arg); - omni_thread::exit(return_value); - } - - if(me->detached) - { - me->run(me->thread_arg); - omni_thread::exit(); - } - else - { - void* return_value = me->run_undetached(me->thread_arg); - omni_thread::exit(return_value); - } -} - - -// -// Special functions for VxWorks only -// -void omni_thread::attach(void) -{ - DBG_TRACE(cout<<"omni_thread_attach: VxWorks mapping thread initialising\n"); - - int _tid = taskIdSelf(); - - // Check the task is not already attached - if(taskTcb(_tid)->spare1 == OMNI_THREAD_ID) - return; - - // Create the mutex required to lock the threads debugging id (create before the thread!!!) - if(next_id_mutex == 0) - next_id_mutex = new omni_mutex; - - // Create a thread object for THIS running process - omni_thread* t = new omni_thread; - - // Lock its mutex straigh away! - omni_mutex_lock l(t->mutex); - - // Adjust data members of this instance - t->_state = STATE_RUNNING; - t->tid = taskIdSelf(); - - // Set the thread values so it can be recongnised as a omni_thread - // Set the id last can possibly prevent race condition - taskTcb(t->tid)->spare2 = (int)t; - taskTcb(t->tid)->spare1 = OMNI_THREAD_ID; - - // Create the running_mutex at this stage, but leave it empty. We are not running - // in the task context HERE, so taking it would be disastrous. - t->running_cond = new omni_condition(&t->mutex); -} - - -void omni_thread::detach(void) -{ - DBG_TRACE(cout<<"omni_thread_detach: VxWorks detaching thread mapping\n"); - - int _tid = taskIdSelf(); - - // Check the task has a OMNI_THREAD attached - if(taskTcb(_tid)->spare1 != OMNI_THREAD_ID) - return; - - // Invalidate the id NOW ! - taskTcb(_tid)->spare1 = 0; - - // Even if NULL, it is safe to delete the thread - omni_thread* t = (omni_thread*)taskTcb(_tid)->spare2; - // Fininsh cleaning the tcb structure - taskTcb(_tid)->spare2 = 0; - - delete t; -} - - -// -// Constructors for omni_thread - set up the thread object but don't -// start it running. -// - -// construct a detached thread running a given function. -omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = fn; - fn_ret = NULL; -} - -// construct an undetached thread running a given function. -omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) -{ - common_constructor(arg, pri, 0); - fn_void = NULL; - fn_ret = fn; -} - -// construct a thread which will run either run() or run_undetached(). - -omni_thread::omni_thread(void* arg, priority_t pri) -{ - common_constructor(arg, pri, 1); - fn_void = NULL; - fn_ret = NULL; -} - -// common part of all constructors. -void omni_thread::common_constructor(void* arg, priority_t pri, int det) -{ - _state = STATE_NEW; - _priority = pri; - - // Set the debugging id - next_id_mutex->lock(); - _id = next_id++; - next_id_mutex->unlock(); - - // Note : tid can only be setup when the task is up and running - tid = 0; - - thread_arg = arg; - detached = det; // may be altered in start_undetached() - - _dummy = 0; - _values = 0; - _value_alloc = 0; -} - -// -// Destructor for omni_thread. -// -omni_thread::~omni_thread(void) -{ - DBG_TRACE(cout<<"omni_thread::~omni_thread for thread "<wait(); - mutex.unlock(); - - if(status) - *status = return_val; - - delete this; -} - - -// -// Change this thread's priority. -// -void omni_thread::set_priority(priority_t pri) -{ - omni_mutex_lock l(mutex); - - DBG_ASSERT(assert(_state == STATE_RUNNING)); - - if(_state != STATE_RUNNING) - { - DBG_THROW(throw omni_thread_invalid()); - } - - _priority = pri; - - if(taskPrioritySet(tid, vxworks_priority(pri))==ERROR) - { - DBG_ASSERT(assert(false)); - - DBG_THROW(throw omni_thread_fatal(errno)); - } -} - - -// -// create - construct a new thread object and start it running. Returns thread -// object if successful, null pointer if not. -// - -// detached version (the entry point is a void) -omni_thread* omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - -// undetached version (the entry point is a void*) -omni_thread* omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) -{ - omni_thread* t = new omni_thread(fn, arg, pri); - - t->start(); - - return t; -} - - -// -// exit() _must_ lock the mutex even in the case of a detached thread. This is -// because a thread may run to completion before the thread that created it has -// had a chance to get out of start(). By locking the mutex we ensure that the -// creating thread must have reached the end of start() before we delete the -// thread object. Of course, once the call to start() returns, the user can -// still incorrectly refer to the thread object, but that's their problem. -// -void omni_thread::exit(void* return_value) -{ - omni_thread* me = self(); - - if(me) - { - me->mutex.lock(); - - me->return_val = return_value; - me->_state = STATE_TERMINATED; - me->running_cond->signal(); - - me->mutex.unlock(); - - DBG_TRACE(cout<<"omni_thread::exit: thread "<id()<<" detached "<detached<<" return value "<<(int)return_value<detached) - delete me; - } - else - DBG_TRACE(cout<<"omni_thread::exit: called with a non-omnithread. Exit quietly."<spare1 != OMNI_THREAD_ID) - return NULL; - - return (omni_thread*)taskTcb(taskIdSelf())->spare2; -} - - -void omni_thread::yield(void) -{ - taskDelay(NO_WAIT); -} - - -void omni_thread::sleep(unsigned long secs, unsigned long nanosecs) -{ - int tps = sysClkRateGet(); - - // Convert to us to avoid overflow in the multiplication - // tps should always be less than 1000 ! - nanosecs /= 1000; - - taskDelay(secs*tps + (nanosecs*tps)/1000000l); -} - - -void omni_thread::get_time( unsigned long* abs_sec, - unsigned long* abs_nsec, - unsigned long rel_sec, - unsigned long rel_nsec) -{ - timespec abs; - clock_gettime(CLOCK_REALTIME, &abs); - abs.tv_nsec += rel_nsec; - abs.tv_sec += rel_sec + abs.tv_nsec / 1000000000; - abs.tv_nsec = abs.tv_nsec % 1000000000; - *abs_sec = abs.tv_sec; - *abs_nsec = abs.tv_nsec; -} - - -int omni_thread::vxworks_priority(priority_t pri) -{ - switch (pri) - { - case PRIORITY_LOW: - return omni_thread_prio_low; - - case PRIORITY_NORMAL: - return omni_thread_prio_normal; - - case PRIORITY_HIGH: - return omni_thread_prio_high; - } - - DBG_ASSERT(assert(false)); - - DBG_THROW(throw omni_thread_invalid()); -} - - -void omni_thread::stacksize(unsigned long sz) -{ - stack_size = sz; -} - - -unsigned long omni_thread::stacksize() -{ - return stack_size; -} - - -void omni_thread::show(void) -{ - omni_thread *pThread; - int s1, s2; - int tid = taskIdSelf(); - - printf("TaskId is %.8x\n", tid); - - s1 = taskTcb(tid)->spare1; - - if(s1 != OMNI_THREAD_ID) - { - printf("Spare 1 is %.8x, and not recongnized\n", s1); - - return; - } - else - { - printf("Spare 1 indicate an omni_thread.\n"); - } - - s2 = taskTcb(tid)->spare2; - - if(s2 == 0) - { - printf("Spare 2 is NULL! - No thread object attached !!\n"); - - return; - } - else - { - printf("Thread object at %.8x\n", s2); - } - - pThread = (omni_thread *)s2; - - state_t status = pThread->_state; - - printf(" | Thread status is "); - - switch (status) - { - case STATE_NEW: - printf("NEW\n"); break; - case STATE_RUNNING: - printf("STATE_RUNNING\n"); break; - case STATE_TERMINATED: - printf("TERMINATED\n"); break; - default: - printf("Illegal (=%.8x)\n", (unsigned int)status); - - return; - } - - if(pThread->tid != tid) - { - printf(" | Task ID in thread object is different!! (=%.8x)\n", pThread->tid); - - return; - } - else - { - printf(" | Task ID in thread consistent\n"); - } - - printf("\n"); -} - - -// -// Dummy thread -// - -class omni_thread_dummy : public omni_thread { -public: - inline omni_thread_dummy() : omni_thread() - { - _dummy = 1; - _state = STATE_RUNNING; - - // Adjust data members of this instance - tid = taskIdSelf(); - - // Set the thread values so it can be recongnised as a omni_thread - // Set the id last can possibly prevent race condition - taskTcb(tid)->spare2 = (int)this; - taskTcb(tid)->spare1 = OMNI_THREAD_ID; - } - inline ~omni_thread_dummy() - { - taskTcb(taskIdSelf())->spare1 = 0; - } -}; - -omni_thread* -omni_thread::create_dummy() -{ - if (omni_thread::self()) - throw omni_thread_invalid(); - - return new omni_thread_dummy; -} - -void -omni_thread::release_dummy() -{ - omni_thread* self = omni_thread::self(); - if (!self || !self->_dummy) - throw omni_thread_invalid(); - - omni_thread_dummy* dummy = (omni_thread_dummy*)self; - delete dummy; -} - - -#define INSIDE_THREAD_IMPL_CC -#include "threaddata.cc" -#undef INSIDE_THREAD_IMPL_CC diff --git a/gnuradio-core/src/lib/reed-solomon/Makefile.am b/gnuradio-core/src/lib/reed-solomon/Makefile.am index 93b8fc93..b7bd939b 100644 --- a/gnuradio-core/src/lib/reed-solomon/Makefile.am +++ b/gnuradio-core/src/lib/reed-solomon/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2002 Free Software Foundation, Inc. +# Copyright 2002,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,7 +25,7 @@ include $(top_srcdir)/Makefile.common # If you need the int versions too, please figure out how to add them *cleanly* to # this Makefile.am. -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) TESTS = rstest diff --git a/gnuradio-core/src/lib/reed-solomon/Makefile.in b/gnuradio-core/src/lib/reed-solomon/Makefile.in index 354d00d7..e3043a09 100644 --- a/gnuradio-core/src/lib/reed-solomon/Makefile.in +++ b/gnuradio-core/src/lib/reed-solomon/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2002 Free Software Foundation, Inc. +# Copyright 2002,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -59,15 +59,11 @@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -85,28 +81,39 @@ target_triplet = @target@ DIST_COMMON = README $(grinclude_HEADERS) $(noinst_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common +TESTS = rstest$(EXEEXT) noinst_PROGRAMS = rstest$(EXEEXT) subdir = gnuradio-core/src/lib/reed-solomon ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -115,15 +122,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -144,17 +171,18 @@ PROGRAMS = $(noinst_PROGRAMS) am_rstest_OBJECTS = rstest.$(OBJEXT) exercise.$(OBJEXT) rstest_OBJECTS = $(am_rstest_OBJECTS) rstest_DEPENDENCIES = librs.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(librs_la_SOURCES) $(rstest_SOURCES) DIST_SOURCES = $(librs_la_SOURCES) $(rstest_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -172,10 +200,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -183,9 +210,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -193,6 +227,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -205,73 +241,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -281,49 +310,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -331,15 +400,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -349,16 +561,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -367,69 +597,137 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT # Note, this Makefile.am only builds the char versions of the reed soloman routines. # If you need the int versions too, please figure out how to add them *cleanly* to # this Makefile.am. -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) -TESTS = rstest +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) EXTRA_DIST = \ README.karn @@ -458,8 +756,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -493,7 +791,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done librs.la: $(librs_la_OBJECTS) $(librs_la_DEPENDENCIES) - $(LINK) $(librs_la_LDFLAGS) $(librs_la_OBJECTS) $(librs_la_LIBADD) $(LIBS) + $(LINK) $(librs_la_OBJECTS) $(librs_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ @@ -503,7 +801,7 @@ clean-noinstPROGRAMS: done rstest$(EXEEXT): $(rstest_OBJECTS) $(rstest_DEPENDENCIES) @rm -f rstest$(EXEEXT) - $(LINK) $(rstest_LDFLAGS) $(rstest_OBJECTS) $(rstest_LDADD) $(LIBS) + $(LINK) $(rstest_OBJECTS) $(rstest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -518,22 +816,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rstest.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -543,13 +841,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -570,8 +864,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -583,8 +877,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -594,13 +888,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -616,7 +909,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -625,7 +918,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -637,7 +930,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -651,23 +944,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -687,23 +993,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -714,13 +1018,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(grincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -737,6 +1044,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -755,7 +1063,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -769,12 +1077,20 @@ info-am: install-data-am: install-grincludeHEADERS +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -795,21 +1111,35 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am +uninstall-am: uninstall-grincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-grincludeHEADERS uninstall-info-am - + clean-noinstPROGRAMS ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/reed-solomon/decode_rs.c b/gnuradio-core/src/lib/reed-solomon/decode_rs.c index ca409782..27ddd853 100644 --- a/gnuradio-core/src/lib/reed-solomon/decode_rs.c +++ b/gnuradio-core/src/lib/reed-solomon/decode_rs.c @@ -8,6 +8,7 @@ #endif #include +#include #define NULL ((void *)0) #define min(a,b) ((a) < (b) ? (a) : (b)) diff --git a/gnuradio-core/src/lib/reed-solomon/encode_rs.c b/gnuradio-core/src/lib/reed-solomon/encode_rs.c index 9d56d0bf..147f0a9e 100644 --- a/gnuradio-core/src/lib/reed-solomon/encode_rs.c +++ b/gnuradio-core/src/lib/reed-solomon/encode_rs.c @@ -3,6 +3,7 @@ * May be used under the terms of the GNU General Public License (GPL) */ #include +#include #ifdef FIXED #include "fixed.h" diff --git a/gnuradio-core/src/lib/reed-solomon/exercise.c b/gnuradio-core/src/lib/reed-solomon/exercise.c index 91d43e15..1e04f618 100644 --- a/gnuradio-core/src/lib/reed-solomon/exercise.c +++ b/gnuradio-core/src/lib/reed-solomon/exercise.c @@ -13,6 +13,7 @@ #include #include #include +#include #ifdef FIXED #include "fixed.h" diff --git a/gnuradio-core/src/lib/runtime/Makefile.am b/gnuradio-core/src/lib/runtime/Makefile.am index e097b12c..af5e4980 100644 --- a/gnuradio-core/src/lib/runtime/Makefile.am +++ b/gnuradio-core/src/lib/runtime/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2003,2004 Free Software Foundation, Inc. +# Copyright 2003,2004,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,7 +21,7 @@ include $(top_srcdir)/Makefile.common -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(GRUEL_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libruntime.la libruntime-qa.la @@ -30,8 +30,14 @@ libruntime_la_LIBADD = \ libruntime_la_SOURCES = \ + gr_basic_block.cc \ + gr_flowgraph.cc \ + gr_flat_flowgraph.cc \ gr_block.cc \ gr_block_detail.cc \ + gr_block_executor.cc \ + gr_hier_block2.cc \ + gr_hier_block2_detail.cc \ gr_buffer.cc \ gr_dispatcher.cc \ gr_error_handler.cc \ @@ -43,8 +49,19 @@ libruntime_la_SOURCES = \ gr_pagesize.cc \ gr_preferences.cc \ gr_realtime.cc \ + gr_scheduler.cc \ + gr_scheduler_sts.cc \ + gr_scheduler_tpb.cc \ gr_single_threaded_scheduler.cc \ + gr_sptr_magic.cc \ + gr_sync_block.cc \ + gr_sync_decimator.cc \ + gr_sync_interpolator.cc \ gr_tmp_path.cc \ + gr_top_block.cc \ + gr_top_block_impl.cc \ + gr_tpb_detail.cc \ + gr_tpb_thread_body.cc \ gr_vmcircbuf.cc \ gr_vmcircbuf_mmap_shm_open.cc \ gr_vmcircbuf_mmap_tmpfile.cc \ @@ -54,14 +71,24 @@ libruntime_la_SOURCES = \ libruntime_qa_la_SOURCES = \ qa_gr_block.cc \ + qa_gr_hier_block2.cc \ + qa_gr_hier_block2_derived.cc \ qa_gr_buffer.cc \ + qa_gr_flowgraph.cc \ + qa_gr_top_block.cc \ qa_gr_io_signature.cc \ qa_gr_vmcircbuf.cc \ qa_runtime.cc grinclude_HEADERS = \ + gr_basic_block.h \ + gr_flowgraph.h \ + gr_flat_flowgraph.h \ gr_block.h \ gr_block_detail.h \ + gr_block_executor.h \ + gr_hier_block2.h \ + gr_hier_block2_detail.h \ gr_buffer.h \ gr_complex.h \ gr_dispatcher.h \ @@ -74,9 +101,20 @@ grinclude_HEADERS = \ gr_pagesize.h \ gr_preferences.h \ gr_realtime.h \ - gr_runtime.h \ + gr_runtime_types.h \ + gr_scheduler.h \ + gr_scheduler_sts.h \ + gr_scheduler_tpb.h \ gr_select_handler.h \ gr_single_threaded_scheduler.h \ + gr_sptr_magic.h \ + gr_sync_block.h \ + gr_sync_decimator.h \ + gr_sync_interpolator.h \ + gr_top_block.h \ + gr_top_block_impl.h \ + gr_tpb_detail.h \ + gr_tpb_thread_body.h \ gr_timer.h \ gr_tmp_path.h \ gr_types.h \ @@ -88,14 +126,20 @@ noinst_HEADERS = \ gr_vmcircbuf_sysv_shm.h \ gr_vmcircbuf_createfilemapping.h \ qa_gr_block.h \ + qa_gr_flowgraph.h \ + qa_gr_hier_block2.h \ + qa_gr_hier_block2_derived.h \ qa_gr_buffer.h \ qa_gr_io_signature.h \ + qa_gr_top_block.h \ qa_gr_vmcircbuf.h \ qa_runtime.h swiginclude_HEADERS = \ + gr_basic_block.i \ gr_block.i \ gr_block_detail.i \ + gr_hier_block2.i \ gr_buffer.i \ gr_dispatcher.i \ gr_error_handler.i \ @@ -105,5 +149,8 @@ swiginclude_HEADERS = \ gr_msg_queue.i \ gr_realtime.i \ gr_single_threaded_scheduler.i \ - gr_swig_block_magic.i \ + gr_sync_block.i \ + gr_sync_decimator.i \ + gr_sync_interpolator.i \ + gr_top_block.i \ runtime.i diff --git a/gnuradio-core/src/lib/runtime/Makefile.in b/gnuradio-core/src/lib/runtime/Makefile.in index 677a6d3a..4122b72f 100644 --- a/gnuradio-core/src/lib/runtime/Makefile.in +++ b/gnuradio-core/src/lib/runtime/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2003,2004 Free Software Foundation, Inc. +# Copyright 2003,2004,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +58,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -86,25 +82,35 @@ DIST_COMMON = $(grinclude_HEADERS) $(noinst_HEADERS) \ $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/lib/runtime ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,31 +162,41 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libruntime_qa_la_LIBADD = -am_libruntime_qa_la_OBJECTS = qa_gr_block.lo qa_gr_buffer.lo \ - qa_gr_io_signature.lo qa_gr_vmcircbuf.lo qa_runtime.lo +am_libruntime_qa_la_OBJECTS = qa_gr_block.lo qa_gr_hier_block2.lo \ + qa_gr_hier_block2_derived.lo qa_gr_buffer.lo \ + qa_gr_flowgraph.lo qa_gr_top_block.lo qa_gr_io_signature.lo \ + qa_gr_vmcircbuf.lo qa_runtime.lo libruntime_qa_la_OBJECTS = $(am_libruntime_qa_la_OBJECTS) am__DEPENDENCIES_1 = libruntime_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -am_libruntime_la_OBJECTS = gr_block.lo gr_block_detail.lo gr_buffer.lo \ - gr_dispatcher.lo gr_error_handler.lo gr_io_signature.lo \ - gr_local_sighandler.lo gr_message.lo gr_msg_handler.lo \ - gr_msg_queue.lo gr_pagesize.lo gr_preferences.lo \ - gr_realtime.lo gr_single_threaded_scheduler.lo gr_tmp_path.lo \ - gr_vmcircbuf.lo gr_vmcircbuf_mmap_shm_open.lo \ - gr_vmcircbuf_mmap_tmpfile.lo gr_vmcircbuf_createfilemapping.lo \ - gr_vmcircbuf_sysv_shm.lo gr_select_handler.lo +am_libruntime_la_OBJECTS = gr_basic_block.lo gr_flowgraph.lo \ + gr_flat_flowgraph.lo gr_block.lo gr_block_detail.lo \ + gr_block_executor.lo gr_hier_block2.lo \ + gr_hier_block2_detail.lo gr_buffer.lo gr_dispatcher.lo \ + gr_error_handler.lo gr_io_signature.lo gr_local_sighandler.lo \ + gr_message.lo gr_msg_handler.lo gr_msg_queue.lo gr_pagesize.lo \ + gr_preferences.lo gr_realtime.lo gr_scheduler.lo \ + gr_scheduler_sts.lo gr_scheduler_tpb.lo \ + gr_single_threaded_scheduler.lo gr_sptr_magic.lo \ + gr_sync_block.lo gr_sync_decimator.lo gr_sync_interpolator.lo \ + gr_tmp_path.lo gr_top_block.lo gr_top_block_impl.lo \ + gr_tpb_detail.lo gr_tpb_thread_body.lo gr_vmcircbuf.lo \ + gr_vmcircbuf_mmap_shm_open.lo gr_vmcircbuf_mmap_tmpfile.lo \ + gr_vmcircbuf_createfilemapping.lo gr_vmcircbuf_sysv_shm.lo \ + gr_select_handler.lo libruntime_la_OBJECTS = $(am_libruntime_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libruntime_qa_la_SOURCES) $(libruntime_la_SOURCES) DIST_SOURCES = $(libruntime_qa_la_SOURCES) $(libruntime_la_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -181,10 +217,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -192,9 +227,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -202,6 +244,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -214,73 +258,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -290,49 +327,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -340,15 +417,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -358,16 +578,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -376,71 +614,146 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(GRUEL_INCLUDES) $(WITH_INCLUDES) noinst_LTLIBRARIES = libruntime.la libruntime-qa.la libruntime_la_LIBADD = \ $(SHM_OPEN_LIBS) libruntime_la_SOURCES = \ + gr_basic_block.cc \ + gr_flowgraph.cc \ + gr_flat_flowgraph.cc \ gr_block.cc \ gr_block_detail.cc \ + gr_block_executor.cc \ + gr_hier_block2.cc \ + gr_hier_block2_detail.cc \ gr_buffer.cc \ gr_dispatcher.cc \ gr_error_handler.cc \ @@ -452,8 +765,19 @@ libruntime_la_SOURCES = \ gr_pagesize.cc \ gr_preferences.cc \ gr_realtime.cc \ + gr_scheduler.cc \ + gr_scheduler_sts.cc \ + gr_scheduler_tpb.cc \ gr_single_threaded_scheduler.cc \ + gr_sptr_magic.cc \ + gr_sync_block.cc \ + gr_sync_decimator.cc \ + gr_sync_interpolator.cc \ gr_tmp_path.cc \ + gr_top_block.cc \ + gr_top_block_impl.cc \ + gr_tpb_detail.cc \ + gr_tpb_thread_body.cc \ gr_vmcircbuf.cc \ gr_vmcircbuf_mmap_shm_open.cc \ gr_vmcircbuf_mmap_tmpfile.cc \ @@ -463,14 +787,24 @@ libruntime_la_SOURCES = \ libruntime_qa_la_SOURCES = \ qa_gr_block.cc \ + qa_gr_hier_block2.cc \ + qa_gr_hier_block2_derived.cc \ qa_gr_buffer.cc \ + qa_gr_flowgraph.cc \ + qa_gr_top_block.cc \ qa_gr_io_signature.cc \ qa_gr_vmcircbuf.cc \ qa_runtime.cc grinclude_HEADERS = \ + gr_basic_block.h \ + gr_flowgraph.h \ + gr_flat_flowgraph.h \ gr_block.h \ gr_block_detail.h \ + gr_block_executor.h \ + gr_hier_block2.h \ + gr_hier_block2_detail.h \ gr_buffer.h \ gr_complex.h \ gr_dispatcher.h \ @@ -483,9 +817,20 @@ grinclude_HEADERS = \ gr_pagesize.h \ gr_preferences.h \ gr_realtime.h \ - gr_runtime.h \ + gr_runtime_types.h \ + gr_scheduler.h \ + gr_scheduler_sts.h \ + gr_scheduler_tpb.h \ gr_select_handler.h \ gr_single_threaded_scheduler.h \ + gr_sptr_magic.h \ + gr_sync_block.h \ + gr_sync_decimator.h \ + gr_sync_interpolator.h \ + gr_top_block.h \ + gr_top_block_impl.h \ + gr_tpb_detail.h \ + gr_tpb_thread_body.h \ gr_timer.h \ gr_tmp_path.h \ gr_types.h \ @@ -497,14 +842,20 @@ noinst_HEADERS = \ gr_vmcircbuf_sysv_shm.h \ gr_vmcircbuf_createfilemapping.h \ qa_gr_block.h \ + qa_gr_flowgraph.h \ + qa_gr_hier_block2.h \ + qa_gr_hier_block2_derived.h \ qa_gr_buffer.h \ qa_gr_io_signature.h \ + qa_gr_top_block.h \ qa_gr_vmcircbuf.h \ qa_runtime.h swiginclude_HEADERS = \ + gr_basic_block.i \ gr_block.i \ gr_block_detail.i \ + gr_hier_block2.i \ gr_buffer.i \ gr_dispatcher.i \ gr_error_handler.i \ @@ -514,7 +865,10 @@ swiginclude_HEADERS = \ gr_msg_queue.i \ gr_realtime.i \ gr_single_threaded_scheduler.i \ - gr_swig_block_magic.i \ + gr_sync_block.i \ + gr_sync_decimator.i \ + gr_sync_interpolator.i \ + gr_top_block.i \ runtime.i all: all-am @@ -525,8 +879,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -560,9 +914,9 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libruntime-qa.la: $(libruntime_qa_la_OBJECTS) $(libruntime_qa_la_DEPENDENCIES) - $(CXXLINK) $(libruntime_qa_la_LDFLAGS) $(libruntime_qa_la_OBJECTS) $(libruntime_qa_la_LIBADD) $(LIBS) + $(CXXLINK) $(libruntime_qa_la_OBJECTS) $(libruntime_qa_la_LIBADD) $(LIBS) libruntime.la: $(libruntime_la_OBJECTS) $(libruntime_la_DEPENDENCIES) - $(CXXLINK) $(libruntime_la_LDFLAGS) $(libruntime_la_OBJECTS) $(libruntime_la_LIBADD) $(LIBS) + $(CXXLINK) $(libruntime_la_OBJECTS) $(libruntime_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -570,11 +924,17 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_basic_block.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_block.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_block_detail.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_block_executor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_buffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_dispatcher.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_error_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_flat_flowgraph.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_flowgraph.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_hier_block2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_hier_block2_detail.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_io_signature.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_local_sighandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_message.Plo@am__quote@ @@ -583,9 +943,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_pagesize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_preferences.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_realtime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_scheduler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_scheduler_sts.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_scheduler_tpb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_select_handler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_single_threaded_scheduler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sptr_magic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sync_block.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sync_decimator.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_sync_interpolator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_tmp_path.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_top_block.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_top_block_impl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_tpb_detail.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_tpb_thread_body.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vmcircbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vmcircbuf_createfilemapping.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vmcircbuf_mmap_shm_open.Plo@am__quote@ @@ -593,27 +964,31 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gr_vmcircbuf_sysv_shm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_block.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_buffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_flowgraph.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_hier_block2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_hier_block2_derived.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_io_signature.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_top_block.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_gr_vmcircbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_runtime.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -623,13 +998,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -646,7 +1017,7 @@ uninstall-grincludeHEADERS: done install-swigincludeHEADERS: $(swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" @list='$(swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -667,8 +1038,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -680,8 +1051,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -691,13 +1062,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -711,23 +1081,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -738,12 +1106,15 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -760,6 +1131,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -778,7 +1150,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -792,12 +1164,20 @@ info-am: install-data-am: install-grincludeHEADERS install-swigincludeHEADERS +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -818,23 +1198,36 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS uninstall-swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-grincludeHEADERS install-info \ - install-info-am install-man install-strip \ - install-swigincludeHEADERS installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-grincludeHEADERS uninstall-info-am \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ uninstall-swigincludeHEADERS + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.cc b/gnuradio-core/src/lib/runtime/gr_basic_block.cc new file mode 100644 index 00000000..e94e089e --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_basic_block.cc @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +static long s_next_id = 0; +static long s_ncurrently_allocated = 0; + +long +gr_basic_block_ncurrently_allocated() +{ + return s_ncurrently_allocated; +} + +gr_basic_block::gr_basic_block(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature) + : d_name(name), + d_input_signature(input_signature), + d_output_signature(output_signature), + d_unique_id(s_next_id++), + d_color(WHITE) +{ + s_ncurrently_allocated++; +} + +gr_basic_block::~gr_basic_block() +{ + s_ncurrently_allocated--; +} + +gr_basic_block_sptr +gr_basic_block::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 new file mode 100644 index 00000000..faaba1c8 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_basic_block.h @@ -0,0 +1,117 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifndef INCLUDED_GR_BASIC_BLOCK_H +#define INCLUDED_GR_BASIC_BLOCK_H + +#include +#include +#include +#include + +/*! + * \brief The abstract base class for all signal processing blocks. + * \ingroup internal + * + * Basic blocks are the bare abstraction of an entity that has a name + * and a set of inputs and outputs. These are never instantiated + * directly; rather, this is the abstract parent class of both gr_hier_block, + * which is a recursive container, and gr_block, which implements actual + * signal processing functions. + */ + +class gr_basic_block : public boost::enable_shared_from_this +{ +protected: + friend class gr_flowgraph; + friend class gr_flat_flowgraph; // TODO: will be redundant + + enum vcolor { WHITE, GREY, BLACK }; + + std::string d_name; + gr_io_signature_sptr d_input_signature; + gr_io_signature_sptr d_output_signature; + long d_unique_id; + vcolor d_color; + + //! Protected constructor prevents instantiation by non-derived classes + gr_basic_block(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); + + //! may only be called during constructor + void set_input_signature(gr_io_signature_sptr iosig) { + d_input_signature = iosig; + } + + //! may only be called during constructor + void set_output_signature(gr_io_signature_sptr iosig) { + d_output_signature = iosig; + } + + /*! + * \brief Allow the flowgraph to set for sorting and partitioning + */ + void set_color(vcolor color) { d_color = color; } + vcolor color() const { return d_color; } + +public: + virtual ~gr_basic_block(); + long unique_id() const { return d_unique_id; } + 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 + + /*! + * \brief Confirm that ninputs and noutputs is an acceptable combination. + * + * \param ninputs number of input streams connected + * \param noutputs number of output streams connected + * + * \returns true if this is a valid configuration for this block. + * + * This function is called by the runtime system whenever the + * topology changes. Most classes do not need to override this. + * This check is in addition to the constraints specified by the input + * and output gr_io_signatures. + */ + virtual bool check_topology(int ninputs, int noutputs) { return true; } +}; + +inline bool operator<(gr_basic_block_sptr lhs, gr_basic_block_sptr rhs) +{ + return lhs->unique_id() < rhs->unique_id(); +} + +typedef std::vector gr_basic_block_vector_t; +typedef std::vector::iterator gr_basic_block_viter_t; + +long gr_basic_block_ncurrently_allocated(); + +inline std::ostream &operator << (std::ostream &os, gr_basic_block_sptr basic_block) +{ + os << basic_block->name() << "(" << basic_block->unique_id() << ")"; + return os; +} + +#endif /* INCLUDED_GR_BASIC_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_basic_block.i b/gnuradio-core/src/lib/runtime/gr_basic_block.i new file mode 100644 index 00000000..60e08aac --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_basic_block.i @@ -0,0 +1,52 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +class gr_basic_block; +typedef boost::shared_ptr gr_basic_block_sptr; +%template(gr_basic_block_sptr) boost::shared_ptr; + +// support vectors of these... +namespace std { + %template(x_vector_gr_basic_block_sptr) vector; +}; + +class gr_basic_block +{ +protected: + gr_basic_block(); + +public: + virtual ~gr_basic_block(); + std::string name() const; + gr_io_signature_sptr input_signature() const; + gr_io_signature_sptr output_signature() const; + long unique_id() const; + gr_basic_block_sptr basic_block(); + bool check_topology (int ninputs, int noutputs); +}; + +%rename(block_ncurrently_allocated) gr_basic_block_ncurrently_allocated; +long gr_basic_block_ncurrently_allocated(); + +%pythoncode %{ +gr_basic_block_sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id ()) +%} diff --git a/gnuradio-core/src/lib/runtime/gr_block.cc b/gnuradio-core/src/lib/runtime/gr_block.cc index 8b705a35..b8b1bd9c 100644 --- a/gnuradio-core/src/lib/runtime/gr_block.cc +++ b/gnuradio-core/src/lib/runtime/gr_block.cc @@ -27,34 +27,21 @@ #include #include #include - -static long s_next_id = 0; -static long s_ncurrently_allocated = 0; - -long -gr_block_ncurrently_allocated () -{ - return s_ncurrently_allocated; -} +#include gr_block::gr_block (const std::string &name, gr_io_signature_sptr input_signature, gr_io_signature_sptr output_signature) - : d_name (name), - d_input_signature (input_signature), - d_output_signature (output_signature), + : gr_basic_block(name, input_signature, output_signature), d_output_multiple (1), d_relative_rate (1.0), - d_unique_id (s_next_id++), d_history(1), d_fixed_rate(false) { - s_ncurrently_allocated++; } gr_block::~gr_block () { - s_ncurrently_allocated--; } // stub implementation: 1:1 @@ -64,17 +51,11 @@ gr_block::forecast (int noutput_items, gr_vector_int &ninput_items_required) { unsigned ninputs = ninput_items_required.size (); for (unsigned i = 0; i < ninputs; i++) - ninput_items_required[i] = noutput_items; + ninput_items_required[i] = noutput_items + history() - 1; } // default implementation -bool -gr_block::check_topology (int ninputs, int noutputs) -{ - return true; -} - bool gr_block::start() { @@ -129,3 +110,11 @@ gr_block::fixed_rate_noutput_to_ninput(int noutput) { throw std::runtime_error("Unimplemented"); } + +std::ostream& +operator << (std::ostream& os, const gr_block *m) +{ + os << "name() << " (" << m->unique_id() << ")>"; + return os; +} + diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h index c6c76906..354695c0 100644 --- a/gnuradio-core/src/lib/runtime/gr_block.h +++ b/gnuradio-core/src/lib/runtime/gr_block.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -23,13 +23,17 @@ #ifndef INCLUDED_GR_BLOCK_H #define INCLUDED_GR_BLOCK_H -#include -#include +#include /*! - * \brief The abstract base class for all signal processing blocks. - * \ingroup block + * \brief The abstract base class for all 'terminal' processing blocks. + * \ingroup base_blk * + * A signal processing flow is constructed by creating a tree of + * hierarchical blocks, which at any level may also contain terminal nodes + * that actually implement signal processing functions. This is the base + * class for all such leaf nodes. + * Blocks have a set of input streams and output streams. The * input_signature and output_signature define the number of input * streams and output streams respectively, and the type of the data @@ -49,16 +53,11 @@ * It reads the input items and writes the output items. */ -class gr_block { +class gr_block : public gr_basic_block { public: virtual ~gr_block (); - - 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; } - long unique_id () const { return d_unique_id; } /*! * Assume block computes y_i = f(x_i, x_i-1, x_i-2, x_i-3...) @@ -113,21 +112,6 @@ class gr_block { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) = 0; - /*! - * \brief Confirm that ninputs and noutputs is an acceptable combination. - * - * \param ninputs number of input streams connected - * \param noutputs number of output streams connected - * - * \returns true if this is a valid configuration for this block. - * - * This function is called by the runtime system whenever the - * topology changes. Most classes do not need to override this. - * This check is in addition to the constraints specified by the input - * and output gr_io_signatures. - */ - virtual bool check_topology (int ninputs, int noutputs); - /*! * \brief Called to enable drivers, etc for i/o devices. * @@ -205,32 +189,17 @@ class gr_block { private: - std::string d_name; - gr_io_signature_sptr d_input_signature; - gr_io_signature_sptr d_output_signature; - int d_output_multiple; - double d_relative_rate; // approx output_rate / input_rate - gr_block_detail_sptr d_detail; // implementation details - long d_unique_id; // convenient for debugging - unsigned d_history; - bool d_fixed_rate; - - + int d_output_multiple; + double d_relative_rate; // approx output_rate / input_rate + gr_block_detail_sptr d_detail; // implementation details + unsigned d_history; + bool d_fixed_rate; + protected: gr_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); - - //! may only be called during constructor - void set_input_signature (gr_io_signature_sptr iosig){ - d_input_signature = iosig; - } - - //! may only be called during constructor - void set_output_signature (gr_io_signature_sptr iosig){ - d_output_signature = iosig; - } + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); void set_fixed_rate(bool fixed_rate){ d_fixed_rate = fixed_rate; } @@ -242,6 +211,16 @@ class gr_block { void set_detail (gr_block_detail_sptr detail) { d_detail = detail; } }; -long gr_block_ncurrently_allocated (); +typedef std::vector gr_block_vector_t; +typedef std::vector::iterator gr_block_viter_t; + +inline gr_block_sptr cast_to_block_sptr(gr_basic_block_sptr p) +{ + return boost::dynamic_pointer_cast(p); +} + + +std::ostream& +operator << (std::ostream& os, const gr_block *m); #endif /* INCLUDED_GR_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_block.i b/gnuradio-core/src/lib/runtime/gr_block.i index 808e2436..c2e2aa4b 100644 --- a/gnuradio-core/src/lib/runtime/gr_block.i +++ b/gnuradio-core/src/lib/runtime/gr_block.i @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +%include + class gr_block; typedef boost::shared_ptr gr_block_sptr; %template(gr_block_sptr) boost::shared_ptr; @@ -29,26 +31,21 @@ namespace std { %template(x_vector_gr_block_sptr) vector; }; -class gr_block { +class gr_block : public gr_basic_block { protected: gr_block (const std::string &name, - gr_io_signature_sptr input_signature, - gr_io_signature_sptr output_signature); + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); public: virtual ~gr_block (); - std::string name () const; - gr_io_signature_sptr input_signature () const; - gr_io_signature_sptr output_signature () const; - long unique_id () const; unsigned history () const; int output_multiple () const; double relative_rate () const; - bool check_topology (int ninputs, int noutputs); bool start(); bool stop(); @@ -57,9 +54,6 @@ class gr_block { void set_detail (gr_block_detail_sptr detail) { d_detail = detail; } }; -%rename(block_ncurrently_allocated) gr_block_ncurrently_allocated; -long gr_block_ncurrently_allocated (); - %pythoncode %{ gr_block_sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id ()) gr_block_sptr.block = lambda self: self diff --git a/gnuradio-core/src/lib/runtime/gr_block_detail.h b/gnuradio-core/src/lib/runtime/gr_block_detail.h index 634f5e57..2856c402 100644 --- a/gnuradio-core/src/lib/runtime/gr_block_detail.h +++ b/gnuradio-core/src/lib/runtime/gr_block_detail.h @@ -1,19 +1,19 @@ /* -*- c++ -*- */ /* * 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 detail. - * + * * 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, @@ -23,7 +23,8 @@ #ifndef INCLUDED_GR_BLOCK_DETAIL_H #define INCLUDED_GR_BLOCK_DETAIL_H -#include +#include +#include #include /*! @@ -34,7 +35,6 @@ * of almost all users of GNU Radio. This decoupling also means that * we can make changes to the guts without having to recompile everything. */ - class gr_block_detail { public: ~gr_block_detail (); @@ -73,20 +73,29 @@ class gr_block_detail { */ void consume_each (int how_many_items); + /*! + * \brief Tell the scheduler \p how_many_items were produced on each output stream. + */ void produce_each (int how_many_items); + + gr_tpb_detail d_tpb; // used by thread-per-block scheduler + // ---------------------------------------------------------------------------- private: - unsigned int d_ninputs; - unsigned int d_noutputs; + unsigned int d_ninputs; + unsigned int d_noutputs; std::vector d_input; - std::vector d_output; - bool d_done; - + std::vector d_output; + bool d_done; + + gr_block_detail (unsigned int ninputs, unsigned int noutputs); - friend gr_block_detail_sptr + friend class gr_tpb_detail; + + friend gr_block_detail_sptr gr_make_block_detail (unsigned int ninputs, unsigned int noutputs); }; diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.cc b/gnuradio-core/src/lib/runtime/gr_block_executor.cc new file mode 100644 index 00000000..fd3a916d --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_block_executor.cc @@ -0,0 +1,329 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// must be defined to either 0 or 1 +#define ENABLE_LOGGING 0 + +#if (ENABLE_LOGGING) +#define LOG(x) do { x; } while(0) +#else +#define LOG(x) do {;} while(0) +#endif + +static int which_scheduler = 0; + +inline static unsigned int +round_up (unsigned int n, unsigned int multiple) +{ + return ((n + multiple - 1) / multiple) * multiple; +} + +inline static unsigned int +round_down (unsigned int n, unsigned int multiple) +{ + return (n / multiple) * multiple; +} + +// +// Return minimum available write space in all our downstream buffers +// or -1 if we're output blocked and the output we're blocked +// on is done. +// +static int +min_available_space (gr_block_detail *d, int output_multiple) +{ + int min_space = std::numeric_limits::max(); + + for (int i = 0; i < d->noutputs (); i++){ + gr_buffer::scoped_lock guard(*d->output(i)->mutex()); +#if 0 + int n = round_down(d->output(i)->space_available(), output_multiple); +#else + int n = round_down(std::min(d->output(i)->space_available(), + d->output(i)->bufsize()/2), + output_multiple); +#endif + if (n == 0){ // We're blocked on output. + if (d->output(i)->done()){ // Downstream is done, therefore we're done. + return -1; + } + return 0; + } + min_space = std::min (min_space, n); + } + return min_space; +} + + + +gr_block_executor::gr_block_executor (gr_block_sptr block) + : d_block(block), d_log(0) +{ + if (ENABLE_LOGGING){ + char name[100]; + snprintf(name, sizeof(name), "sst-%03d.log", which_scheduler++); + d_log = new std::ofstream(name); + std::unitbuf(*d_log); // make it unbuffered... + *d_log << "gr_block_executor: " + << d_block << std::endl; + } + + d_block->start(); // enable any drivers, etc. +} + +gr_block_executor::~gr_block_executor () +{ + if (ENABLE_LOGGING) + delete d_log; + + d_block->stop(); // stop any drivers, etc. +} + +gr_block_executor::state +gr_block_executor::run_one_iteration() +{ + int noutput_items; + int max_items_avail; + + gr_block *m = d_block.get(); + gr_block_detail *d = m->detail().get(); + + LOG(*d_log << std::endl << m); + + if (d->done()){ + assert(0); + return DONE; + } + + if (d->source_p ()){ + d_ninput_items_required.resize (0); + d_ninput_items.resize (0); + d_input_items.resize (0); + d_input_done.resize(0); + d_output_items.resize (d->noutputs ()); + + // determine the minimum available output space + noutput_items = min_available_space (d, m->output_multiple ()); + LOG(*d_log << " source\n noutput_items = " << noutput_items << std::endl); + if (noutput_items == -1) // we're done + goto were_done; + + if (noutput_items == 0){ // we're output blocked + LOG(*d_log << " BLKD_OUT\n"); + return BLKD_OUT; + } + + goto setup_call_to_work; // jump to common code + } + + else if (d->sink_p ()){ + d_ninput_items_required.resize (d->ninputs ()); + d_ninput_items.resize (d->ninputs ()); + d_input_items.resize (d->ninputs ()); + d_input_done.resize(d->ninputs()); + d_output_items.resize (0); + LOG(*d_log << " sink\n"); + + max_items_avail = 0; + for (int i = 0; i < d->ninputs (); i++){ + { + /* + * Acquire the mutex and grab local copies of items_available and done. + */ + gr_buffer::scoped_lock guard(*d->input(i)->mutex()); + d_ninput_items[i] = d->input(i)->items_available(); + d_input_done[i] = d->input(i)->done(); + } + + LOG(*d_log << " d_ninput_items[" << i << "] = " << d_ninput_items[i] << std::endl); + LOG(*d_log << " d_input_done[" << i << "] = " << d_input_done[i] << std::endl); + + if (d_ninput_items[i] < m->output_multiple() && d_input_done[i]) + goto were_done; + + max_items_avail = std::max (max_items_avail, d_ninput_items[i]); + } + + // take a swag at how much output we can sink + noutput_items = (int) (max_items_avail * m->relative_rate ()); + noutput_items = round_down (noutput_items, m->output_multiple ()); + LOG(*d_log << " max_items_avail = " << max_items_avail << std::endl); + LOG(*d_log << " noutput_items = " << noutput_items << std::endl); + + if (noutput_items == 0){ // we're blocked on input + LOG(*d_log << " BLKD_IN\n"); + return BLKD_IN; + } + + goto try_again; // Jump to code shared with regular case. + } + + else { + // do the regular thing + d_ninput_items_required.resize (d->ninputs ()); + d_ninput_items.resize (d->ninputs ()); + d_input_items.resize (d->ninputs ()); + d_input_done.resize(d->ninputs()); + d_output_items.resize (d->noutputs ()); + + max_items_avail = 0; + for (int i = 0; i < d->ninputs (); i++){ + { + /* + * Acquire the mutex and grab local copies of items_available and done. + */ + gr_buffer::scoped_lock guard(*d->input(i)->mutex()); + d_ninput_items[i] = d->input(i)->items_available (); + d_input_done[i] = d->input(i)->done(); + } + max_items_avail = std::max (max_items_avail, d_ninput_items[i]); + } + + // determine the minimum available output space + noutput_items = min_available_space (d, m->output_multiple ()); + if (ENABLE_LOGGING){ + *d_log << " regular "; + if (m->relative_rate() >= 1.0) + *d_log << "1:" << m->relative_rate() << std::endl; + else + *d_log << 1.0/m->relative_rate() << ":1\n"; + *d_log << " max_items_avail = " << max_items_avail << std::endl; + *d_log << " noutput_items = " << noutput_items << std::endl; + } + if (noutput_items == -1) // we're done + goto were_done; + + if (noutput_items == 0){ // we're output blocked + LOG(*d_log << " BLKD_OUT\n"); + return BLKD_OUT; + } + + try_again: + if (m->fixed_rate()){ + // try to work it forward starting with max_items_avail. + // We want to try to consume all the input we've got. + int reqd_noutput_items = m->fixed_rate_ninput_to_noutput(max_items_avail); + reqd_noutput_items = round_up(reqd_noutput_items, m->output_multiple()); + if (reqd_noutput_items > 0 && reqd_noutput_items <= noutput_items) + noutput_items = reqd_noutput_items; + } + + // ask the block how much input they need to produce noutput_items + m->forecast (noutput_items, d_ninput_items_required); + + // See if we've got sufficient input available + + int i; + for (i = 0; i < d->ninputs (); i++) + if (d_ninput_items_required[i] > d_ninput_items[i]) // not enough + break; + + if (i < d->ninputs ()){ // not enough input on input[i] + // if we can, try reducing the size of our output request + if (noutput_items > m->output_multiple ()){ + noutput_items /= 2; + noutput_items = round_up (noutput_items, m->output_multiple ()); + goto try_again; + } + + // We're blocked on input + LOG(*d_log << " BLKD_IN\n"); + if (d_input_done[i]) // If the upstream block is done, we're done + goto were_done; + + // Is it possible to ever fulfill this request? + if (d_ninput_items_required[i] > d->input(i)->max_possible_items_available ()){ + // Nope, never going to happen... + std::cerr << "\nsched: name() + << " (" << m->unique_id() << ")>" + << " is requesting more input data\n" + << " than we can provide.\n" + << " ninput_items_required = " + << d_ninput_items_required[i] << "\n" + << " max_possible_items_available = " + << d->input(i)->max_possible_items_available() << "\n" + << " If this is a filter, consider reducing the number of taps.\n"; + goto were_done; + } + + return BLKD_IN; + } + + // We've got enough data on each input to produce noutput_items. + // Finish setting up the call to work. + + for (int i = 0; i < d->ninputs (); i++) + d_input_items[i] = d->input(i)->read_pointer(); + + setup_call_to_work: + + for (int i = 0; i < d->noutputs (); i++) + d_output_items[i] = d->output(i)->write_pointer(); + + // Do the actual work of the block + int n = m->general_work (noutput_items, d_ninput_items, + d_input_items, d_output_items); + LOG(*d_log << " general_work: noutput_items = " << noutput_items + << " result = " << n << std::endl); + + if (n == -1) // block is done + goto were_done; + + d->produce_each (n); // advance write pointers + if (n > 0) + return READY; + + // We didn't produce any output even though we called general_work. + // We have (most likely) consumed some input. + + // If this is a source, it's broken. + if (d->source_p()){ + std::cerr << "gr_block_executor: source " << m + << " returned 0 from work. We're marking it DONE.\n"; + // FIXME maybe we ought to raise an exception... + goto were_done; + } + + // Have the caller try again... + return READY_NO_OUTPUT; + } + assert (0); + + were_done: + LOG(*d_log << " were_done\n"); + d->set_done (true); + return DONE; +} diff --git a/gnuradio-core/src/lib/runtime/gr_block_executor.h b/gnuradio-core/src/lib/runtime/gr_block_executor.h new file mode 100644 index 00000000..41b5ede7 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_block_executor.h @@ -0,0 +1,69 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifndef INCLUDED_GR_BLOCK_EXECUTOR_H +#define INCLUDED_GR_BLOCK_EXECUTOR_H + +#include +#include + +//class gr_block_executor; +//typedef boost::shared_ptr gr_block_executor_sptr; + + +/*! + * \brief Manage the execution of a single block. + * \ingroup internal + */ + +class gr_block_executor { +protected: + gr_block_sptr d_block; // The block we're trying to run + std::ofstream *d_log; + + // These are allocated here so we don't have to on each iteration + + gr_vector_int d_ninput_items_required; + gr_vector_int d_ninput_items; + gr_vector_const_void_star d_input_items; + std::vector d_input_done; + gr_vector_void_star d_output_items; + + public: + gr_block_executor(gr_block_sptr block); + ~gr_block_executor (); + + enum state { + READY, // We made progress; everything's cool. + READY_NO_OUTPUT, // We consumed some input, but produced no output. + BLKD_IN, // no progress; we're blocked waiting for input data. + BLKD_OUT, // no progress; we're blocked waiting for output buffer space. + DONE, // we're done; don't call me again. + }; + + /* + * \brief Run one iteration. + */ + state run_one_iteration(); +}; + +#endif /* INCLUDED_GR_BLOCK_EXECUTOR_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.cc b/gnuradio-core/src/lib/runtime/gr_buffer.cc index 77f0c7c4..31a471ea 100644 --- a/gnuradio-core/src/lib/runtime/gr_buffer.cc +++ b/gnuradio-core/src/lib/runtime/gr_buffer.cc @@ -77,10 +77,10 @@ minimum_buffer_items (long type_size, long page_size) } -gr_buffer::gr_buffer (int nitems, size_t sizeof_item) +gr_buffer::gr_buffer (int nitems, size_t sizeof_item, gr_block_sptr link) : d_base (0), d_bufsize (0), d_vmcircbuf (0), - d_sizeof_item (sizeof_item), d_write_index (0), - d_done (false) + d_sizeof_item (sizeof_item), d_link(link), + d_write_index (0), d_done (false) { if (!allocate_buffer (nitems, sizeof_item)) throw std::bad_alloc (); @@ -89,9 +89,9 @@ gr_buffer::gr_buffer (int nitems, size_t sizeof_item) } gr_buffer_sptr -gr_make_buffer (int nitems, size_t sizeof_item) +gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link) { - return gr_buffer_sptr (new gr_buffer (nitems, sizeof_item)); + return gr_buffer_sptr (new gr_buffer (nitems, sizeof_item, link)); } gr_buffer::~gr_buffer () @@ -146,7 +146,7 @@ gr_buffer::allocate_buffer (int nitems, size_t sizeof_item) int -gr_buffer::space_available () const +gr_buffer::space_available () { if (d_readers.empty ()) return d_bufsize - 1; // See comment below @@ -175,18 +175,27 @@ gr_buffer::write_pointer () void gr_buffer::update_write_pointer (int nitems) { + scoped_lock guard(*mutex()); d_write_index = index_add (d_write_index, nitems); } +void +gr_buffer::set_done (bool done) +{ + scoped_lock guard(*mutex()); + d_done = done; +} + gr_buffer_reader_sptr -gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload) +gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link) { if (nzero_preload < 0) throw std::invalid_argument("gr_buffer_add_reader: nzero_preload must be >= 0"); gr_buffer_reader_sptr r (new gr_buffer_reader (buf, buf->index_sub(buf->d_write_index, - nzero_preload))); + nzero_preload), + link)); buf->d_readers.push_back (r.get ()); return r; @@ -214,8 +223,9 @@ gr_buffer_ncurrently_allocated () // ---------------------------------------------------------------------------- -gr_buffer_reader::gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index) - : d_buffer (buffer), d_read_index (read_index) +gr_buffer_reader::gr_buffer_reader(gr_buffer_sptr buffer, unsigned int read_index, + gr_block_sptr link) + : d_buffer(buffer), d_read_index(read_index), d_link(link) { s_buffer_reader_count++; } @@ -241,6 +251,7 @@ gr_buffer_reader::read_pointer () void gr_buffer_reader::update_read_pointer (int nitems) { + scoped_lock guard(*mutex()); d_read_index = d_buffer->index_add (d_read_index, nitems); } diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.h b/gnuradio-core/src/lib/runtime/gr_buffer.h index cbfdc4f1..cb593eea 100644 --- a/gnuradio-core/src/lib/runtime/gr_buffer.h +++ b/gnuradio-core/src/lib/runtime/gr_buffer.h @@ -23,7 +23,9 @@ #ifndef INCLUDED_GR_BUFFER_H #define INCLUDED_GR_BUFFER_H -#include +#include +#include +#include class gr_vmcircbuf; @@ -33,8 +35,12 @@ class gr_vmcircbuf; * The total size of the buffer will be rounded up to a system * dependent boundary. This is typically the system page size, but * under MS windows is 64KB. + * + * \param nitems is the minimum number of items the buffer will hold. + * \param sizeof_item is the size of an item in bytes. + * \param link is the block that writes to this buffer. */ -gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item); +gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link=gr_block_sptr()); /*! @@ -43,12 +49,20 @@ gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item); */ class gr_buffer { public: + + typedef boost::unique_lock scoped_lock; + virtual ~gr_buffer (); /*! * \brief return number of items worth of space available for writing */ - int space_available () const; + int space_available (); + + /*! + * \brief return size of this buffer in items + */ + int bufsize() const { return d_bufsize; } /*! * \brief return pointer to write buffer. @@ -63,17 +77,26 @@ class gr_buffer { */ void update_write_pointer (int nitems); - - void set_done (bool done) { d_done = done; } + void set_done (bool done); bool done () const { return d_done; } + /*! + * \brief Return the block that writes to this buffer. + */ + gr_block_sptr link() { return gr_block_sptr(d_link); } + + size_t nreaders() const { return d_readers.size(); } + gr_buffer_reader* reader(size_t index) { return d_readers[index]; } + + boost::mutex *mutex() { return &d_mutex; } + // ------------------------------------------------------------------------- private: friend class gr_buffer_reader; - friend gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item); - friend gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload); + friend gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); + friend gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link); protected: char *d_base; // base address of buffer @@ -81,8 +104,14 @@ class gr_buffer { private: gr_vmcircbuf *d_vmcircbuf; size_t d_sizeof_item; // in bytes - unsigned int d_write_index; // in items [0,d_bufsize) std::vector d_readers; + boost::weak_ptr d_link; // block that writes to this buffer + + // + // The mutex protects d_write_index, d_done and the d_read_index's in the buffer readers. + // + boost::mutex d_mutex; + unsigned int d_write_index; // in items [0,d_bufsize) bool d_done; unsigned @@ -116,11 +145,15 @@ class gr_buffer { * * Allocate a buffer that holds at least \p nitems of size \p sizeof_item. * + * \param nitems is the minimum number of items the buffer will hold. + * \param sizeof_item is the size of an item in bytes. + * \param link is the block that writes to this buffer. + * * The total size of the buffer will be rounded up to a system * dependent boundary. This is typically the system page size, but * under MS windows is 64KB. */ - gr_buffer (int nitems, size_t sizeof_item); + gr_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); /*! * \brief disassociate \p reader from this buffer @@ -130,10 +163,13 @@ class gr_buffer { }; /*! - * \brief create a new gr_buffer_reader and attach it to buffer \p buf + * \brief Create a new gr_buffer_reader and attach it to buffer \p buf + * \param buf is the buffer the \p gr_buffer_reader reads from. * \param nzero_preload -- number of zero items to "preload" into buffer. + * \param link is the block that reads from the buffer using this gr_buffer_reader. */ -gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload); +gr_buffer_reader_sptr +gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link=gr_block_sptr()); //! returns # of gr_buffers currently allocated long gr_buffer_ncurrently_allocated (); @@ -147,8 +183,10 @@ long gr_buffer_ncurrently_allocated (); */ class gr_buffer_reader { - public: + + typedef gr_buffer::scoped_lock scoped_lock; + ~gr_buffer_reader (); /*! @@ -156,6 +194,12 @@ class gr_buffer_reader { */ int items_available () const; + /*! + * \brief Return buffer this reader reads from. + */ + gr_buffer_sptr buffer () const { return d_buffer; } + + /*! * \brief Return maximum number of items that could ever be available for reading. * This is used as a sanity check in the scheduler to avoid looping forever. @@ -177,19 +221,29 @@ class gr_buffer_reader { void set_done (bool done) { d_buffer->set_done (done); } bool done () const { return d_buffer->done (); } + boost::mutex *mutex() { return d_buffer->mutex(); } + + + /*! + * \brief Return the block that reads via this reader. + */ + gr_block_sptr link() { return gr_block_sptr(d_link); } + // ------------------------------------------------------------------------- private: friend class gr_buffer; - friend gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload); + friend gr_buffer_reader_sptr + gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link); gr_buffer_sptr d_buffer; unsigned int d_read_index; // in items [0,d->buffer.d_bufsize) + boost::weak_ptr d_link; // block that reads via this buffer reader //! constructor is private. Use gr_buffer::add_reader to create instances - gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index); + gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index, gr_block_sptr link); }; //! returns # of gr_buffer_readers currently allocated diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.i b/gnuradio-core/src/lib/runtime/gr_buffer.i index 38e1d945..4c1c5afa 100644 --- a/gnuradio-core/src/lib/runtime/gr_buffer.i +++ b/gnuradio-core/src/lib/runtime/gr_buffer.i @@ -26,14 +26,14 @@ typedef boost::shared_ptr gr_buffer_sptr; %rename(buffer) gr_make_buffer; %ignore gr_buffer; -gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item); +gr_buffer_sptr gr_make_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); class gr_buffer { public: ~gr_buffer (); private: - gr_buffer (int nitems, size_t sizeof_item); + gr_buffer (int nitems, size_t sizeof_item, gr_block_sptr link); }; @@ -43,7 +43,7 @@ typedef boost::shared_ptr gr_buffer_reader_sptr; %ignore gr_buffer_reader; %rename(buffer_add_reader) gr_buffer_add_reader; -gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload); +gr_buffer_reader_sptr gr_buffer_add_reader (gr_buffer_sptr buf, int nzero_preload, gr_block_sptr link); class gr_buffer_reader { public: @@ -51,7 +51,7 @@ class gr_buffer_reader { private: friend class gr_buffer; - gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index); + gr_buffer_reader (gr_buffer_sptr buffer, unsigned int read_index, gr_block_sptr link); }; diff --git a/gnuradio-core/src/lib/runtime/gr_complex.h b/gnuradio-core/src/lib/runtime/gr_complex.h index f705d95d..32e996ee 100644 --- a/gnuradio-core/src/lib/runtime/gr_complex.h +++ b/gnuradio-core/src/lib/runtime/gr_complex.h @@ -38,7 +38,7 @@ inline bool is_complex (short x) { return false;} // this doesn't really belong here, but there are worse places for it... -#define ASSERT_COMPLEXES_EQUAL(expected,actual,delta) \ +#define CPPUNIT_ASSERT_COMPLEXES_EQUAL(expected,actual,delta) \ CPPUNIT_ASSERT_DOUBLES_EQUAL (expected.real(), actual.real(), delta); \ CPPUNIT_ASSERT_DOUBLES_EQUAL (expected.imag(), actual.imag(), delta); diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.cc b/gnuradio-core/src/lib/runtime/gr_dispatcher.cc index 1b0a1d7a..e165361f 100644 --- a/gnuradio-core/src/lib/runtime/gr_dispatcher.cc +++ b/gnuradio-core/src/lib/runtime/gr_dispatcher.cc @@ -27,6 +27,7 @@ #include #include #include +#include #ifdef HAVE_SELECT # ifdef HAVE_SYS_SELECT_H diff --git a/gnuradio-core/src/lib/runtime/gr_dispatcher.h b/gnuradio-core/src/lib/runtime/gr_dispatcher.h index acfc428a..34f82510 100644 --- a/gnuradio-core/src/lib/runtime/gr_dispatcher.h +++ b/gnuradio-core/src/lib/runtime/gr_dispatcher.h @@ -34,6 +34,7 @@ gr_dispatcher_sptr gr_make_dispatcher(); /*! * \brief invoke callbacks based on select. + * \ingroup internal * * \sa gr_select_handler */ diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.cc b/gnuradio-core/src/lib/runtime/gr_error_handler.cc index 4b4cdace..6dbb0a5d 100644 --- a/gnuradio-core/src/lib/runtime/gr_error_handler.cc +++ b/gnuradio-core/src/lib/runtime/gr_error_handler.cc @@ -48,6 +48,7 @@ #include #include #include +#include #ifdef HAVE_IO_H #include diff --git a/gnuradio-core/src/lib/runtime/gr_error_handler.h b/gnuradio-core/src/lib/runtime/gr_error_handler.h index eb69fccb..530a2c23 100644 --- a/gnuradio-core/src/lib/runtime/gr_error_handler.h +++ b/gnuradio-core/src/lib/runtime/gr_error_handler.h @@ -48,6 +48,7 @@ /*! * \brief abstract error handler + * \ingroup base */ class gr_error_handler { public: diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc new file mode 100644 index 00000000..031eb6df --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc @@ -0,0 +1,291 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +#define GR_FLAT_FLOWGRAPH_DEBUG 0 + +// 32Kbyte buffer size between blocks +#define GR_FIXED_BUFFER_SIZE (32*(1L<<10)) + +static const unsigned int s_fixed_buffer_size = GR_FIXED_BUFFER_SIZE; + +gr_flat_flowgraph_sptr +gr_make_flat_flowgraph() +{ + return gr_flat_flowgraph_sptr(new gr_flat_flowgraph()); +} + +gr_flat_flowgraph::gr_flat_flowgraph() +{ +} + +gr_flat_flowgraph::~gr_flat_flowgraph() +{ +} + +void +gr_flat_flowgraph::setup_connections() +{ + gr_basic_block_vector_t blocks = calc_used_blocks(); + + // Assign block details to blocks + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) + cast_to_block_sptr(*p)->set_detail(allocate_block_detail(*p)); + + // Connect inputs to outputs for each block + for(gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) + connect_block_inputs(*p); +} + +gr_block_detail_sptr +gr_flat_flowgraph::allocate_block_detail(gr_basic_block_sptr block) +{ + int ninputs = calc_used_ports(block, true).size(); + int noutputs = calc_used_ports(block, false).size(); + gr_block_detail_sptr detail = gr_make_block_detail(ninputs, noutputs); + + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "Creating block detail for " << block << std::endl; + + for (int i = 0; i < noutputs; i++) { + gr_buffer_sptr buffer = allocate_buffer(block, i); + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "Allocated buffer for output " << block << ":" << i << std::endl; + detail->set_output(i, buffer); + } + + return detail; +} + +gr_buffer_sptr +gr_flat_flowgraph::allocate_buffer(gr_basic_block_sptr block, int port) +{ + gr_block_sptr grblock = cast_to_block_sptr(block); + if (!grblock) + throw std::runtime_error("allocate_buffer found non-gr_block"); + int item_size = block->output_signature()->sizeof_stream_item(port); + + // *2 because we're now only filling them 1/2 way in order to + // increase the available parallelism when using the TPB scheduler. + // (We're double buffering, where we used to single buffer) + int nitems = s_fixed_buffer_size * 2 / item_size; + + // Make sure there are at least twice the output_multiple no. of items + if (nitems < 2*grblock->output_multiple()) // Note: this means output_multiple() + nitems = 2*grblock->output_multiple(); // can't be changed by block dynamically + + // If any downstream blocks are decimators and/or have a large output_multiple, + // ensure we have a buffer at least twice their decimation factor*output_multiple + gr_basic_block_vector_t blocks = calc_downstream_blocks(block, port); + + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { + gr_block_sptr dgrblock = cast_to_block_sptr(*p); + if (!dgrblock) + throw std::runtime_error("allocate_buffer found non-gr_block"); + + double decimation = (1.0/dgrblock->relative_rate()); + int multiple = dgrblock->output_multiple(); + int history = dgrblock->history(); + nitems = std::max(nitems, static_cast(2*(decimation*multiple+history))); + } + + return gr_make_buffer(nitems, item_size, grblock); +} + +void +gr_flat_flowgraph::connect_block_inputs(gr_basic_block_sptr block) +{ + gr_block_sptr grblock = cast_to_block_sptr(block); + if (!grblock) + throw std::runtime_error("connect_block_inputs found non-gr_block"); + + // Get its detail and edges that feed into it + gr_block_detail_sptr detail = grblock->detail(); + gr_edge_vector_t in_edges = calc_upstream_edges(block); + + // For each edge that feeds into it + for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) { + // Set the buffer reader on the destination port to the output + // buffer on the source port + int dst_port = e->dst().port(); + int src_port = e->src().port(); + gr_basic_block_sptr src_block = e->src().block(); + gr_block_sptr src_grblock = cast_to_block_sptr(src_block); + if (!src_grblock) + throw std::runtime_error("connect_block_inputs found non-gr_block"); + gr_buffer_sptr src_buffer = src_grblock->detail()->output(src_port); + + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "Setting input " << dst_port << " from edge " << (*e) << std::endl; + + detail->set_input(dst_port, gr_buffer_add_reader(src_buffer, grblock->history()-1, grblock)); + } +} + +void +gr_flat_flowgraph::merge_connections(gr_flat_flowgraph_sptr old_ffg) +{ + // Allocate block details if needed. Only new blocks that aren't pruned out + // by flattening will need one; existing blocks still in the new flowgraph will + // already have one. + for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { + gr_block_sptr block = cast_to_block_sptr(*p); + + if (!block->detail()) { + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "merge: allocating new detail for block " << (*p) << std::endl; + block->set_detail(allocate_block_detail(block)); + } + else + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "merge: reusing original detail for block " << (*p) << std::endl; + } + + // Calculate the old edges that will be going away, and clear the buffer readers + // on the RHS. + for (gr_edge_viter_t old_edge = old_ffg->d_edges.begin(); old_edge != old_ffg->d_edges.end(); old_edge++) { + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "merge: testing old edge " << (*old_edge) << "..."; + + gr_edge_viter_t new_edge; + for (new_edge = d_edges.begin(); new_edge != d_edges.end(); new_edge++) + if (new_edge->src() == old_edge->src() && + new_edge->dst() == old_edge->dst()) + break; + + if (new_edge == d_edges.end()) { // not found in new edge list + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "not in new edge list" << std::endl; + // zero the buffer reader on RHS of old edge + gr_block_sptr block(cast_to_block_sptr(old_edge->dst().block())); + int port = old_edge->dst().port(); + block->detail()->set_input(port, gr_buffer_reader_sptr()); + } + else { + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "found in new edge list" << std::endl; + } + } + + // Now connect inputs to outputs, reusing old buffer readers if they exist + for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { + gr_block_sptr block = cast_to_block_sptr(*p); + + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "merge: merging " << (*p) << "..."; + + if (old_ffg->has_block_p(*p)) { + // Block exists in old flow graph + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "used in old flow graph" << std::endl; + gr_block_detail_sptr detail = block->detail(); + + // Iterate through the inputs and see what needs to be done + int ninputs = calc_used_ports(block, true).size(); // Might be different now + for (int i = 0; i < ninputs; i++) { + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "Checking input " << block << ":" << i << "..."; + gr_edge edge = calc_upstream_edge(*p, i); + + // Fish out old buffer reader and see if it matches correct buffer from edge list + gr_block_sptr src_block = cast_to_block_sptr(edge.src().block()); + gr_block_detail_sptr src_detail = src_block->detail(); + gr_buffer_sptr src_buffer = src_detail->output(edge.src().port()); + gr_buffer_reader_sptr old_reader; + if (i < detail->ninputs()) // Don't exceed what the original detail has + old_reader = detail->input(i); + + // If there's a match, use it + if (old_reader && (src_buffer == old_reader->buffer())) { + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "matched, reusing" << std::endl; + } + else { + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "needs a new reader" << std::endl; + + // Create new buffer reader and assign + detail->set_input(i, gr_buffer_add_reader(src_buffer, block->history()-1, block)); + } + } + } + else { + // Block is new, it just needs buffer readers at this point + if (GR_FLAT_FLOWGRAPH_DEBUG) + std::cout << "new block" << std::endl; + connect_block_inputs(block); + } + + // Now deal with the fact that the block details might have changed numbers of + // inputs and outputs vs. in the old flowgraph. + } +} + +void gr_flat_flowgraph::dump() +{ + for (gr_edge_viter_t e = d_edges.begin(); e != d_edges.end(); e++) + std::cout << " edge: " << (*e) << std::endl; + + for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { + std::cout << " block: " << (*p) << std::endl; + gr_block_detail_sptr detail = cast_to_block_sptr(*p)->detail(); + std::cout << " detail @" << detail << ":" << std::endl; + + int ni = detail->ninputs(); + int no = detail->noutputs(); + for (int i = 0; i < no; i++) { + gr_buffer_sptr buffer = detail->output(i); + std::cout << " output " << i << ": " << buffer + << " space=" << buffer->space_available() << std::endl; + } + + for (int i = 0; i < ni; i++) { + gr_buffer_reader_sptr reader = detail->input(i); + std::cout << " reader " << i << ": " << reader + << " reading from buffer=" << reader->buffer() + << " avail=" << reader->items_available() << " items" + << std::endl; + } + } + +} + +gr_block_vector_t +gr_flat_flowgraph::make_block_vector(gr_basic_block_vector_t &blocks) +{ + gr_block_vector_t result; + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { + result.push_back(cast_to_block_sptr(*p)); + } + + return result; +} diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h new file mode 100644 index 00000000..8e983433 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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. + */ + +#ifndef INCLUDED_GR_FLAT_FLOWGRAPH_H +#define INCLUDED_GR_FLAT_FLOWGRAPH_H + +#include +#include + +// Create a shared pointer to a heap allocated gr_flat_flowgraph +// (types defined in gr_runtime_types.h) +gr_flat_flowgraph_sptr gr_make_flat_flowgraph(); + +/*! + *\brief Class specializing gr_flat_flowgraph that has all nodes + * as gr_blocks, with no hierarchy + * \ingroup internal + */ +class gr_flat_flowgraph : public gr_flowgraph +{ +public: + friend gr_flat_flowgraph_sptr gr_make_flat_flowgraph(); + + // Destruct an arbitrary gr_flat_flowgraph + ~gr_flat_flowgraph(); + + // Wire gr_blocks together in new flat_flowgraph + void setup_connections(); + + // Merge applicable connections from existing flat flowgraph + void merge_connections(gr_flat_flowgraph_sptr sfg); + + void dump(); + + /*! + * Make a vector of gr_block from a vector of gr_basic_block + */ + static gr_block_vector_t make_block_vector(gr_basic_block_vector_t &blocks); + +private: + gr_flat_flowgraph(); + + gr_block_detail_sptr allocate_block_detail(gr_basic_block_sptr block); + gr_buffer_sptr allocate_buffer(gr_basic_block_sptr block, int port); + void connect_block_inputs(gr_basic_block_sptr block); +}; + +#endif /* INCLUDED_GR_FLAT_FLOWGRAPH_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_flowgraph.cc b/gnuradio-core/src/lib/runtime/gr_flowgraph.cc new file mode 100644 index 00000000..27f6257c --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_flowgraph.cc @@ -0,0 +1,473 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#define GR_FLOWGRAPH_DEBUG 0 + +gr_edge::~gr_edge() +{ +} + +gr_flowgraph_sptr gr_make_flowgraph() +{ + return gr_flowgraph_sptr(new gr_flowgraph()); +} + +gr_flowgraph::gr_flowgraph() +{ +} + +gr_flowgraph::~gr_flowgraph() +{ +} + +// FIXME: move to libgruel as a utility function +template +static +std::vector +unique_vector(std::vector v) +{ + std::vector result; + std::insert_iterator > inserter(result, result.begin()); + + sort(v.begin(), v.end()); + unique_copy(v.begin(), v.end(), inserter); + return result; +} + +void +gr_flowgraph::connect(const gr_endpoint &src, const gr_endpoint &dst) +{ + check_valid_port(src.block()->output_signature(), src.port()); + check_valid_port(dst.block()->input_signature(), dst.port()); + check_dst_not_used(dst); + check_type_match(src, dst); + + // All ist klar, Herr Kommisar + d_edges.push_back(gr_edge(src,dst)); +} + +void +gr_flowgraph::disconnect(const gr_endpoint &src, const gr_endpoint &dst) +{ + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { + if (src == p->src() && dst == p->dst()) { + d_edges.erase(p); + return; + } + } + + std::stringstream msg; + msg << "cannot disconnect edge " << gr_edge(src, dst) << ", not found"; + throw std::invalid_argument(msg.str()); +} + +void +gr_flowgraph::validate() +{ + d_blocks = calc_used_blocks(); + + for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { + std::vector used_ports; + int ninputs, noutputs; + + if (GR_FLOWGRAPH_DEBUG) + std::cout << "Validating block: " << (*p) << std::endl; + + used_ports = calc_used_ports(*p, true); // inputs + ninputs = used_ports.size(); + check_contiguity(*p, used_ports, true); // inputs + + used_ports = calc_used_ports(*p, false); // outputs + noutputs = used_ports.size(); + check_contiguity(*p, used_ports, false); // outputs + + if (!((*p)->check_topology(ninputs, noutputs))) { + std::stringstream msg; + msg << "check topology failed on " << (*p) + << " using ninputs=" << ninputs + << ", noutputs=" << noutputs; + throw std::runtime_error(msg.str()); + } + } +} + +void +gr_flowgraph::clear() +{ + // Boost shared pointers will deallocate as needed + d_blocks.clear(); + d_edges.clear(); +} + +void +gr_flowgraph::check_valid_port(gr_io_signature_sptr sig, int port) +{ + std::stringstream msg; + + if (port < 0) { + msg << "negative port number " << port << " is invalid"; + throw std::invalid_argument(msg.str()); + } + + int max = sig->max_streams(); + if (max != gr_io_signature::IO_INFINITE && port >= max) { + msg << "port number " << port << " exceeds max of "; + if (max == 0) + msg << "(none)"; + else + msg << max-1; + throw std::invalid_argument(msg.str()); + } +} + +void +gr_flowgraph::check_dst_not_used(const gr_endpoint &dst) +{ + // A destination is in use if it is already on the edge list + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) + if (p->dst() == dst) { + std::stringstream msg; + msg << "destination already in use by edge " << (*p); + throw std::invalid_argument(msg.str()); + } +} + +void +gr_flowgraph::check_type_match(const gr_endpoint &src, const gr_endpoint &dst) +{ + int src_size = src.block()->output_signature()->sizeof_stream_item(src.port()); + int dst_size = dst.block()->input_signature()->sizeof_stream_item(dst.port()); + + if (src_size != dst_size) { + std::stringstream msg; + msg << "itemsize mismatch: " << src << " using " << src_size + << ", " << dst << " using " << dst_size; + throw std::invalid_argument(msg.str()); + } +} + +gr_basic_block_vector_t +gr_flowgraph::calc_used_blocks() +{ + gr_basic_block_vector_t tmp; + + // Collect all blocks in the edge list + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { + tmp.push_back(p->src().block()); + tmp.push_back(p->dst().block()); + } + + return unique_vector(tmp); +} + +std::vector +gr_flowgraph::calc_used_ports(gr_basic_block_sptr block, bool check_inputs) +{ + std::vector tmp; + + // Collect all seen ports + gr_edge_vector_t edges = calc_connections(block, check_inputs); + for (gr_edge_viter_t p = edges.begin(); p != edges.end(); p++) { + if (check_inputs == true) + tmp.push_back(p->dst().port()); + else + tmp.push_back(p->src().port()); + } + + return unique_vector(tmp); +} + +gr_edge_vector_t +gr_flowgraph::calc_connections(gr_basic_block_sptr block, bool check_inputs) +{ + gr_edge_vector_t result; + + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { + if (check_inputs) { + if (p->dst().block() == block) + result.push_back(*p); + } + else { + if (p->src().block() == block) + result.push_back(*p); + } + } + + return result; // assumes no duplicates +} + +void +gr_flowgraph::check_contiguity(gr_basic_block_sptr block, + const std::vector &used_ports, + bool check_inputs) +{ + std::stringstream msg; + + gr_io_signature_sptr sig = + check_inputs ? block->input_signature() : block->output_signature(); + + int nports = used_ports.size(); + int min_ports = sig->min_streams(); + int max_ports = sig->max_streams(); + + if (nports == 0 && min_ports == 0) + return; + + if (nports < min_ports) { + msg << block << ": insufficient connected " + << (check_inputs ? "input ports " : "output ports ") + << "(" << min_ports << " needed, " << nports << " connected)"; + throw std::runtime_error(msg.str()); + } + + if (nports > max_ports && max_ports != gr_io_signature::IO_INFINITE) { + msg << block << ": too many connected " + << (check_inputs ? "input ports " : "output ports ") + << "(" << max_ports << " allowed, " << nports << " connected)"; + throw std::runtime_error(msg.str()); + } + + if (used_ports[nports-1]+1 != nports) { + for (int i = 0; i < nports; i++) { + if (used_ports[i] != i) { + msg << block << ": missing connection " + << (check_inputs ? "to input port " : "from output port ") + << i; + throw std::runtime_error(msg.str()); + } + } + } +} + +gr_basic_block_vector_t +gr_flowgraph::calc_downstream_blocks(gr_basic_block_sptr block, int port) +{ + gr_basic_block_vector_t tmp; + + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) + if (p->src() == gr_endpoint(block, port)) + tmp.push_back(p->dst().block()); + + return unique_vector(tmp); +} + +gr_basic_block_vector_t +gr_flowgraph::calc_downstream_blocks(gr_basic_block_sptr block) +{ + gr_basic_block_vector_t tmp; + + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) + if (p->src().block() == block) + tmp.push_back(p->dst().block()); + + return unique_vector(tmp); +} + +gr_edge_vector_t +gr_flowgraph::calc_upstream_edges(gr_basic_block_sptr block) +{ + gr_edge_vector_t result; + + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) + if (p->dst().block() == block) + result.push_back(*p); + + return result; // Assume no duplicates +} + +bool +gr_flowgraph::has_block_p(gr_basic_block_sptr block) +{ + gr_basic_block_viter_t result; + result = std::find(d_blocks.begin(), d_blocks.end(), block); + return (result != d_blocks.end()); +} + +gr_edge +gr_flowgraph::calc_upstream_edge(gr_basic_block_sptr block, int port) +{ + gr_edge result; + + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { + if (p->dst() == gr_endpoint(block, port)) { + result = (*p); + break; + } + } + + return result; +} + +std::vector +gr_flowgraph::partition() +{ + std::vector result; + gr_basic_block_vector_t blocks = calc_used_blocks(); + gr_basic_block_vector_t graph; + + while (blocks.size() > 0) { + graph = calc_reachable_blocks(blocks[0], blocks); + assert(graph.size()); + result.push_back(topological_sort(graph)); + + for (gr_basic_block_viter_t p = graph.begin(); p != graph.end(); p++) + blocks.erase(find(blocks.begin(), blocks.end(), *p)); + } + + return result; +} + +gr_basic_block_vector_t +gr_flowgraph::calc_reachable_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks) +{ + gr_basic_block_vector_t result; + + // Mark all blocks as unvisited + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) + (*p)->set_color(gr_basic_block::WHITE); + + // Recursively mark all reachable blocks + reachable_dfs_visit(block, blocks); + + // Collect all the blocks that have been visited + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) + if ((*p)->color() == gr_basic_block::BLACK) + result.push_back(*p); + + return result; +} + +// Recursively mark all reachable blocks from given block and block list +void +gr_flowgraph::reachable_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks) +{ + // Mark the current one as visited + block->set_color(gr_basic_block::BLACK); + + // Recurse into adjacent vertices + gr_basic_block_vector_t adjacent = calc_adjacent_blocks(block, blocks); + + for (gr_basic_block_viter_t p = adjacent.begin(); p != adjacent.end(); p++) + if ((*p)->color() == gr_basic_block::WHITE) + reachable_dfs_visit(*p, blocks); +} + +// Return a list of block adjacent to a given block along any edge +gr_basic_block_vector_t +gr_flowgraph::calc_adjacent_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks) +{ + gr_basic_block_vector_t tmp; + + // Find any blocks that are inputs or outputs + for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) { + if (p->src().block() == block) + tmp.push_back(p->dst().block()); + if (p->dst().block() == block) + tmp.push_back(p->src().block()); + } + + return unique_vector(tmp); +} + +gr_basic_block_vector_t +gr_flowgraph::topological_sort(gr_basic_block_vector_t &blocks) +{ + gr_basic_block_vector_t tmp; + gr_basic_block_vector_t result; + tmp = sort_sources_first(blocks); + + // Start 'em all white + for (gr_basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) + (*p)->set_color(gr_basic_block::WHITE); + + for (gr_basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) { + if ((*p)->color() == gr_basic_block::WHITE) + topological_dfs_visit(*p, result); + } + + reverse(result.begin(), result.end()); + return result; +} + +gr_basic_block_vector_t +gr_flowgraph::sort_sources_first(gr_basic_block_vector_t &blocks) +{ + gr_basic_block_vector_t sources, nonsources, result; + + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { + if (source_p(*p)) + sources.push_back(*p); + else + nonsources.push_back(*p); + } + + for (gr_basic_block_viter_t p = sources.begin(); p != sources.end(); p++) + result.push_back(*p); + + for (gr_basic_block_viter_t p = nonsources.begin(); p != nonsources.end(); p++) + result.push_back(*p); + + return result; +} + +bool +gr_flowgraph::source_p(gr_basic_block_sptr block) +{ + return (calc_upstream_edges(block).size() == 0); +} + +void +gr_flowgraph::topological_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &output) +{ + block->set_color(gr_basic_block::GREY); + gr_basic_block_vector_t blocks(calc_downstream_blocks(block)); + + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { + switch ((*p)->color()) { + case gr_basic_block::WHITE: + topological_dfs_visit(*p, output); + break; + + case gr_basic_block::GREY: + throw std::runtime_error("flow graph has loops!"); + + case gr_basic_block::BLACK: + continue; + + default: + throw std::runtime_error("invalid color on block!"); + } + } + + block->set_color(gr_basic_block::BLACK); + output.push_back(block); +} + diff --git a/gnuradio-core/src/lib/runtime/gr_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flowgraph.h new file mode 100644 index 00000000..8e988506 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_flowgraph.h @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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. + */ + +#ifndef INCLUDED_GR_FLOWGRAPH_H +#define INCLUDED_GR_FLOWGRAPH_H + +#include +#include + +/*! + * \brief Class representing a specific input or output graph endpoint + * \ingroup internal + */ +class gr_endpoint +{ +private: + gr_basic_block_sptr d_basic_block; + int d_port; + +public: + gr_endpoint() : d_basic_block(), d_port(0) { } + gr_endpoint(gr_basic_block_sptr block, int port) { d_basic_block = block; d_port = port; } + gr_basic_block_sptr block() const { return d_basic_block; } + int port() const { return d_port; } + + bool operator==(const gr_endpoint &other) const; +}; + +inline bool gr_endpoint::operator==(const gr_endpoint &other) const +{ + return (d_basic_block == other.d_basic_block && + d_port == other.d_port); +} + +// Hold vectors of gr_endpoint objects +typedef std::vector gr_endpoint_vector_t; +typedef std::vector::iterator gr_endpoint_viter_t; + +/*! + *\brief Class representing a connection between to graph endpoints + * + */ +class gr_edge +{ +public: + gr_edge() : d_src(), d_dst() { }; + gr_edge(const gr_endpoint &src, const gr_endpoint &dst) : d_src(src), d_dst(dst) { } + ~gr_edge(); + + const gr_endpoint &src() const { return d_src; } + const gr_endpoint &dst() const { return d_dst; } + +private: + gr_endpoint d_src; + gr_endpoint d_dst; +}; + +// Hold vectors of gr_edge objects +typedef std::vector gr_edge_vector_t; +typedef std::vector::iterator gr_edge_viter_t; + + +// Create a shared pointer to a heap allocated flowgraph +// (types defined in gr_runtime_types.h) +gr_flowgraph_sptr gr_make_flowgraph(); + +/*! + * \brief Class representing a directed, acyclic graph of basic blocks + * \ingroup internal + */ +class gr_flowgraph +{ +public: + friend gr_flowgraph_sptr gr_make_flowgraph(); + + // Destruct an arbitrary flowgraph + ~gr_flowgraph(); + + // Connect two endpoints + void connect(const gr_endpoint &src, const gr_endpoint &dst); + + // Disconnect two endpoints + void disconnect(const gr_endpoint &src, const gr_endpoint &dst); + + // Connect an output port to an input port (convenience) + void connect(gr_basic_block_sptr src_block, int src_port, + gr_basic_block_sptr dst_block, int dst_port); + + // Disconnect an input port from an output port (convenience) + void disconnect(gr_basic_block_sptr src_block, int src_port, + gr_basic_block_sptr dst_block, int dst_port); + + // Validate connectivity, raise exception if invalid + void validate(); + + // Clear existing flowgraph + void clear(); + + // Return vector of edges + const gr_edge_vector_t &edges() const { return d_edges; } + + // Return vector of connected blocks + gr_basic_block_vector_t calc_used_blocks(); + + // Return toplogically sorted vector of blocks. All the sources come first. + gr_basic_block_vector_t topological_sort(gr_basic_block_vector_t &blocks); + + // Return vector of vectors of disjointly connected blocks, topologically + // sorted. + std::vector partition(); + +protected: + gr_basic_block_vector_t d_blocks; + gr_edge_vector_t d_edges; + + gr_flowgraph(); + std::vector calc_used_ports(gr_basic_block_sptr block, bool check_inputs); + gr_basic_block_vector_t calc_downstream_blocks(gr_basic_block_sptr block, int port); + gr_edge_vector_t calc_upstream_edges(gr_basic_block_sptr block); + bool has_block_p(gr_basic_block_sptr block); + gr_edge calc_upstream_edge(gr_basic_block_sptr block, int port); + +private: + + void check_valid_port(gr_io_signature_sptr sig, int port); + void check_dst_not_used(const gr_endpoint &dst); + void check_type_match(const gr_endpoint &src, const gr_endpoint &dst); + gr_edge_vector_t calc_connections(gr_basic_block_sptr block, bool check_inputs); // false=use outputs + void check_contiguity(gr_basic_block_sptr block, const std::vector &used_ports, bool check_inputs); + + gr_basic_block_vector_t calc_downstream_blocks(gr_basic_block_sptr block); + gr_basic_block_vector_t calc_reachable_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks); + void reachable_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks); + gr_basic_block_vector_t calc_adjacent_blocks(gr_basic_block_sptr block, gr_basic_block_vector_t &blocks); + gr_basic_block_vector_t sort_sources_first(gr_basic_block_vector_t &blocks); + bool source_p(gr_basic_block_sptr block); + void topological_dfs_visit(gr_basic_block_sptr block, gr_basic_block_vector_t &output); +}; + +// Convenience functions +inline +void gr_flowgraph::connect(gr_basic_block_sptr src_block, int src_port, + gr_basic_block_sptr dst_block, int dst_port) +{ + connect(gr_endpoint(src_block, src_port), + gr_endpoint(dst_block, dst_port)); +} + +inline +void gr_flowgraph::disconnect(gr_basic_block_sptr src_block, int src_port, + gr_basic_block_sptr dst_block, int dst_port) +{ + disconnect(gr_endpoint(src_block, src_port), + gr_endpoint(dst_block, dst_port)); +} + +inline std::ostream& +operator <<(std::ostream &os, const gr_endpoint endp) +{ + os << endp.block() << ":" << endp.port(); + return os; +} + +inline std::ostream& +operator <<(std::ostream &os, const gr_edge edge) +{ + os << edge.src() << "->" << edge.dst(); + return os; +} + +#endif /* INCLUDED_GR_FLOWGRAPH_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.cc b/gnuradio-core/src/lib/runtime/gr_hier_block2.cc new file mode 100644 index 00000000..e3a25e1a --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.cc @@ -0,0 +1,115 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#define GR_HIER_BLOCK2_DEBUG 0 + + +gr_hier_block2_sptr +gr_make_hier_block2(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature) +{ + return gnuradio::get_initial_sptr(new gr_hier_block2(name, input_signature, output_signature)); +} + +gr_hier_block2::gr_hier_block2(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature) + : gr_basic_block(name, input_signature, output_signature), + d_detail(new gr_hier_block2_detail(this)) +{ + // This bit of magic ensures that self() works in the constructors of derived classes. + gnuradio::detail::sptr_magic::create_and_stash_initial_sptr(this); +} + +gr_hier_block2::~gr_hier_block2() +{ + delete d_detail; +} + +gr_hier_block2::opaque_self +gr_hier_block2::self() +{ + return shared_from_this(); +} + + +void +gr_hier_block2::connect(gr_basic_block_sptr block) +{ + d_detail->connect(block); +} + +void +gr_hier_block2::connect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port) +{ + d_detail->connect(src, src_port, dst, dst_port); +} + +void +gr_hier_block2::disconnect(gr_basic_block_sptr block) +{ + d_detail->disconnect(block); +} + +void +gr_hier_block2::disconnect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port) +{ + d_detail->disconnect(src, src_port, dst, dst_port); +} + +void +gr_hier_block2::disconnect_all() +{ + d_detail->disconnect_all(); +} + +void +gr_hier_block2::lock() +{ + d_detail->lock(); +} + +void +gr_hier_block2::unlock() +{ + d_detail->unlock(); +} + +gr_flat_flowgraph_sptr +gr_hier_block2::flatten() const +{ + gr_flat_flowgraph_sptr new_ffg = gr_make_flat_flowgraph(); + d_detail->flatten_aux(new_ffg); + return new_ffg; +} diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h new file mode 100644 index 00000000..f50b1cb9 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.h @@ -0,0 +1,156 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008,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. + */ +#ifndef INCLUDED_GR_HIER_BLOCK2_H +#define INCLUDED_GR_HIER_BLOCK2_H + +#include + +/*! + * \brief public constructor for gr_hier_block2 + + */ +gr_hier_block2_sptr gr_make_hier_block2(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); + +class gr_hier_block2_detail; + +/*! + * \brief Hierarchical container class for gr_block's and gr_hier_block2's + * \ingroup container_blk + * \ingroup base_blk + * + */ +class gr_hier_block2 : public gr_basic_block +{ +private: + friend class gr_hier_block2_detail; + friend gr_hier_block2_sptr gr_make_hier_block2(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); + + /*! + * \brief Private implementation details of gr_hier_block2 + */ + gr_hier_block2_detail *d_detail; + +protected: + gr_hier_block2(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); + +public: + virtual ~gr_hier_block2(); + + /*! + * \brief typedef for object returned from self(). + * + * This type is only guaranteed to be passable to connect and disconnect. + * No other assumptions should be made about it. + */ + typedef gr_basic_block_sptr opaque_self; + + /*! + * \brief Return an object, representing the current block, which can be passed to connect. + * + * The returned object may only be used as an argument to connect or disconnect. + * Any other use of self() results in unspecified (erroneous) behavior. + */ + opaque_self self(); + + /*! + * \brief Add a stand-alone (possibly hierarchical) block to internal graph + * + * This adds a gr-block or hierarchical block to the internal graph + * without wiring it to anything else. + */ + void connect(gr_basic_block_sptr block); + + /*! + * \brief Add gr-blocks or hierarchical blocks to internal graph and wire together + * + * This adds (if not done earlier by another connect) a pair of gr-blocks or + * hierarchical blocks to the internal flowgraph, and wires the specified output + * port to the specified input port. + */ + void connect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port); + + /*! + * \brief Remove a gr-block or hierarchical block from the internal flowgraph. + * + * This removes a gr-block or hierarchical block from the internal flowgraph, + * disconnecting it from other blocks as needed. + * + */ + void disconnect(gr_basic_block_sptr block); + + /*! + * \brief Disconnect a pair of gr-blocks or hierarchical blocks in internal + * flowgraph. + * + * This disconnects the specified input port from the specified output port + * of a pair of gr-blocks or hierarchical blocks. + */ + void disconnect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port); + + /*! + * \brief Disconnect all connections in the internal flowgraph. + * + * This call removes all output port to input port connections in the internal + * flowgraph. + */ + void disconnect_all(); + + /*! + * Lock a flowgraph in preparation for reconfiguration. When an equal + * number of calls to lock() and unlock() have occurred, the flowgraph + * will be reconfigured. + * + * N.B. lock() and unlock() may not be called from a flowgraph thread + * (E.g., gr_block::work method) or deadlock will occur when + * reconfiguration happens. + */ + virtual void lock(); + + /*! + * Unlock a flowgraph in preparation for reconfiguration. When an equal + * number of calls to lock() and unlock() have occurred, the flowgraph + * will be reconfigured. + * + * N.B. lock() and unlock() may not be called from a flowgraph thread + * (E.g., gr_block::work method) or deadlock will occur when + * reconfiguration happens. + */ + virtual void unlock(); + + // This is a public method for ease of code organization, but should be + // ignored by the user. + gr_flat_flowgraph_sptr flatten() const; +}; + +inline gr_hier_block2_sptr cast_to_hier_block2_sptr(gr_basic_block_sptr block) { + return boost::dynamic_pointer_cast(block); +} + +#endif /* INCLUDED_GR_HIER_BLOCK2_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.i b/gnuradio-core/src/lib/runtime/gr_hier_block2.i new file mode 100644 index 00000000..a62f50e8 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.i @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2006,2007 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%include + +class gr_hier_block2; +typedef boost::shared_ptr gr_hier_block2_sptr; +%template(gr_hier_block2_sptr) boost::shared_ptr; + +// Hack to have a Python shim implementation of gr.hier_block2 +// that instantiates one of these and passes through calls +%rename(hier_block2_swig) gr_make_hier_block2; +gr_hier_block2_sptr gr_make_hier_block2(const std::string name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature) + throw (std::runtime_error); + +class gr_hier_block2 : public gr_basic_block +{ +private: + gr_hier_block2(const std::string name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); + +public: + ~gr_hier_block2 (); + + void connect(gr_basic_block_sptr block) + throw (std::invalid_argument); + void connect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port) + throw (std::invalid_argument); + void disconnect(gr_basic_block_sptr block) + throw (std::invalid_argument); + void disconnect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port) + throw (std::invalid_argument); + void disconnect_all(); + void lock(); + void unlock(); +}; diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc new file mode 100644 index 00000000..877e240c --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc @@ -0,0 +1,498 @@ +/* + * Copyright 2006,2007,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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +#define GR_HIER_BLOCK2_DETAIL_DEBUG 0 + +gr_hier_block2_detail::gr_hier_block2_detail(gr_hier_block2 *owner) : + d_owner(owner), + d_parent_detail(0), + d_fg(gr_make_flowgraph()) +{ + int min_inputs = owner->input_signature()->min_streams(); + int max_inputs = owner->input_signature()->max_streams(); + int min_outputs = owner->output_signature()->min_streams(); + int max_outputs = owner->output_signature()->max_streams(); + + if (max_inputs == gr_io_signature::IO_INFINITE || + max_outputs == gr_io_signature::IO_INFINITE || + (min_inputs != max_inputs) ||(min_outputs != max_outputs) ) { + std::stringstream msg; + msg << "Hierarchical blocks do not yet support arbitrary or" + << " variable numbers of inputs or outputs (" << d_owner->name() << ")"; + throw std::runtime_error(msg.str()); + } + + d_inputs = std::vector(max_inputs); + d_outputs = gr_endpoint_vector_t(max_outputs); +} + +gr_hier_block2_detail::~gr_hier_block2_detail() +{ + d_owner = 0; // Don't use delete, we didn't allocate +} + +void +gr_hier_block2_detail::connect(gr_basic_block_sptr block) +{ + std::stringstream msg; + + // Check if duplicate + if (std::find(d_blocks.begin(), d_blocks.end(), block) != d_blocks.end()) { + msg << "Block " << block << " already connected."; + throw std::invalid_argument(msg.str()); + } + + // Check if has inputs or outputs + if (block->input_signature()->max_streams() != 0 || + block->output_signature()->max_streams() != 0) { + msg << "Block " << block << " must not have any input or output ports"; + throw std::invalid_argument(msg.str()); + } + + gr_hier_block2_sptr hblock(cast_to_hier_block2_sptr(block)); + + if (hblock && hblock.get() != d_owner) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "connect: block is hierarchical, setting parent to " << this << std::endl; + hblock->d_detail->d_parent_detail = this; + } + + d_blocks.push_back(block); +} + +void +gr_hier_block2_detail::connect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port) +{ + std::stringstream msg; + + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "connecting: " << gr_endpoint(src, src_port) + << " -> " << gr_endpoint(dst, dst_port) << std::endl; + + if (src.get() == dst.get()) + throw std::invalid_argument("connect: src and destination blocks cannot be the same"); + + gr_hier_block2_sptr src_block(cast_to_hier_block2_sptr(src)); + gr_hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst)); + + if (src_block && src.get() != d_owner) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "connect: src is hierarchical, setting parent to " << this << std::endl; + src_block->d_detail->d_parent_detail = this; + } + + if (dst_block && dst.get() != d_owner) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "connect: dst is hierarchical, setting parent to " << this << std::endl; + dst_block->d_detail->d_parent_detail = this; + } + + // Connections to block inputs or outputs + int max_port; + if (src.get() == d_owner) { + max_port = src->input_signature()->max_streams(); + if ((max_port != -1 && (src_port >= max_port)) || src_port < 0) { + msg << "source port " << src_port << " out of range for " << src; + throw std::invalid_argument(msg.str()); + } + + return connect_input(src_port, dst_port, dst); + } + + if (dst.get() == d_owner) { + max_port = dst->output_signature()->max_streams(); + if ((max_port != -1 && (dst_port >= max_port)) || dst_port < 0) { + msg << "destination port " << dst_port << " out of range for " << dst; + throw std::invalid_argument(msg.str()); + } + + return connect_output(dst_port, src_port, src); + } + + // Internal connections + d_fg->connect(src, src_port, dst, dst_port); + + // TODO: connects to NC +} + +void +gr_hier_block2_detail::disconnect(gr_basic_block_sptr block) +{ + // Check on singleton list + for (gr_basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) { + if (*p == block) { + d_blocks.erase(p); + + gr_hier_block2_sptr hblock(cast_to_hier_block2_sptr(block)); + if (block && block.get() != d_owner) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "disconnect: block is hierarchical, clearing parent" << std::endl; + hblock->d_detail->d_parent_detail = 0; + } + + return; + } + } + + // Otherwise find all edges containing block + gr_edge_vector_t edges, tmp = d_fg->edges(); + gr_edge_vector_t::iterator p; + for (p = tmp.begin(); p != tmp.end(); p++) { + if ((*p).src().block() == block || (*p).dst().block() == block) { + edges.push_back(*p); + + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "disconnect: block found in edge " << (*p) << std::endl; + } + } + + if (edges.size() == 0) { + std::stringstream msg; + msg << "cannot disconnect block " << block << ", not found"; + throw std::invalid_argument(msg.str()); + } + + for (p = edges.begin(); p != edges.end(); p++) { + disconnect((*p).src().block(), (*p).src().port(), + (*p).dst().block(), (*p).dst().port()); + } +} + +void +gr_hier_block2_detail::disconnect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port) +{ + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "disconnecting: " << gr_endpoint(src, src_port) + << " -> " << gr_endpoint(dst, dst_port) << std::endl; + + if (src.get() == dst.get()) + throw std::invalid_argument("disconnect: source and destination blocks cannot be the same"); + + gr_hier_block2_sptr src_block(cast_to_hier_block2_sptr(src)); + gr_hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst)); + + if (src_block && src.get() != d_owner) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "disconnect: src is hierarchical, clearing parent" << std::endl; + src_block->d_detail->d_parent_detail = 0; + } + + if (dst_block && dst.get() != d_owner) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "disconnect: dst is hierarchical, clearing parent" << std::endl; + dst_block->d_detail->d_parent_detail = 0; + } + + if (src.get() == d_owner) + return disconnect_input(src_port, dst_port, dst); + + if (dst.get() == d_owner) + return disconnect_output(dst_port, src_port, src); + + // Internal connections + d_fg->disconnect(src, src_port, dst, dst_port); +} + +void +gr_hier_block2_detail::connect_input(int my_port, int port, gr_basic_block_sptr block) +{ + std::stringstream msg; + + if (my_port < 0 || my_port >= (signed)d_inputs.size()) { + msg << "input port " << my_port << " out of range for " << block; + throw std::invalid_argument(msg.str()); + } + + gr_endpoint_vector_t &endps = d_inputs[my_port]; + gr_endpoint endp(block, port); + + gr_endpoint_viter_t p = std::find(endps.begin(), endps.end(), endp); + if (p != endps.end()) { + msg << "external input port " << my_port << " already wired to " << endp; + throw std::invalid_argument(msg.str()); + } + + endps.push_back(endp); +} + +void +gr_hier_block2_detail::connect_output(int my_port, int port, gr_basic_block_sptr block) +{ + std::stringstream msg; + + if (my_port < 0 || my_port >= (signed)d_outputs.size()) { + msg << "output port " << my_port << " out of range for " << block; + throw std::invalid_argument(msg.str()); + } + + if (d_outputs[my_port].block()) { + msg << "external output port " << my_port << " already connected from " + << d_outputs[my_port]; + throw std::invalid_argument(msg.str()); + } + + d_outputs[my_port] = gr_endpoint(block, port); +} + +void +gr_hier_block2_detail::disconnect_input(int my_port, int port, gr_basic_block_sptr block) +{ + std::stringstream msg; + + if (my_port < 0 || my_port >= (signed)d_inputs.size()) { + msg << "input port number " << my_port << " out of range for " << block; + throw std::invalid_argument(msg.str()); + } + + gr_endpoint_vector_t &endps = d_inputs[my_port]; + gr_endpoint endp(block, port); + + gr_endpoint_viter_t p = std::find(endps.begin(), endps.end(), endp); + if (p == endps.end()) { + msg << "external input port " << my_port << " not connected to " << endp; + throw std::invalid_argument(msg.str()); + } + + endps.erase(p); +} + +void +gr_hier_block2_detail::disconnect_output(int my_port, int port, gr_basic_block_sptr block) +{ + std::stringstream msg; + + if (my_port < 0 || my_port >= (signed)d_outputs.size()) { + msg << "output port number " << my_port << " out of range for " << block; + throw std::invalid_argument(msg.str()); + } + + if (d_outputs[my_port].block() != block) { + msg << "block " << block << " not assigned to output " + << my_port << ", can't disconnect"; + throw std::invalid_argument(msg.str()); + } + + d_outputs[my_port] = gr_endpoint(); +} + +gr_endpoint_vector_t +gr_hier_block2_detail::resolve_port(int port, bool is_input) +{ + std::stringstream msg; + + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "Resolving port " << port << " as an " + << (is_input ? "input" : "output") + << " of " << d_owner->name() << std::endl; + + gr_endpoint_vector_t result; + + if (is_input) { + if (port < 0 || port >= (signed)d_inputs.size()) { + msg << "resolve_port: input " << port << " is out of range"; + throw std::runtime_error(msg.str()); + } + + if (d_inputs[port].empty()) { + msg << "hierarchical block '" << d_owner->name() << "' input " << port + << " is not connected internally"; + throw std::runtime_error(msg.str()); + } + + gr_endpoint_vector_t &endps = d_inputs[port]; + gr_endpoint_viter_t p; + for (p = endps.begin(); p != endps.end(); p++) { + gr_endpoint_vector_t tmp = resolve_endpoint(*p, true); + std::copy(tmp.begin(), tmp.end(), back_inserter(result)); + } + } + else { + if (port < 0 || port >= (signed)d_outputs.size()) { + msg << "resolve_port: output " << port << " is out of range"; + throw std::runtime_error(msg.str()); + } + + if (d_outputs[port] == gr_endpoint()) { + msg << "hierarchical block '" << d_owner->name() << "' output " << port + << " is not connected internally"; + throw std::runtime_error(msg.str()); + } + + result = resolve_endpoint(d_outputs[port], false); + } + + if (result.empty()) { + msg << "unable to resolve " + << (is_input ? "input port " : "output port ") + << port; + throw std::runtime_error(msg.str()); + } + + return result; +} + +void +gr_hier_block2_detail::disconnect_all() +{ + d_fg->clear(); + d_blocks.clear(); + d_inputs.clear(); + d_outputs.clear(); +} + +gr_endpoint_vector_t +gr_hier_block2_detail::resolve_endpoint(const gr_endpoint &endp, bool is_input) const +{ + std::stringstream msg; + gr_endpoint_vector_t result; + + // Check if endpoint is a leaf node + if (cast_to_block_sptr(endp.block())) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "Block " << endp.block() << " is a leaf node, returning." << std::endl; + result.push_back(endp); + return result; + } + + // Check if endpoint is a hierarchical block + gr_hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(endp.block())); + if (hier_block2) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "Resolving endpoint " << endp << " as an " + << (is_input ? "input" : "output") + << ", recursing" << std::endl; + return hier_block2->d_detail->resolve_port(endp.port(), is_input); + } + + msg << "unable to resolve" << (is_input ? " input " : " output ") + << "endpoint " << endp; + throw std::runtime_error(msg.str()); +} + +void +gr_hier_block2_detail::flatten_aux(gr_flat_flowgraph_sptr sfg) const +{ + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "Flattening " << d_owner->name() << std::endl; + + // Add my edges to the flow graph, resolving references to actual endpoints + gr_edge_vector_t edges = d_fg->edges(); + gr_edge_viter_t p; + + for (p = edges.begin(); p != edges.end(); p++) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "Flattening edge " << (*p) << std::endl; + + gr_endpoint_vector_t src_endps = resolve_endpoint(p->src(), false); + gr_endpoint_vector_t dst_endps = resolve_endpoint(p->dst(), true); + + gr_endpoint_viter_t s, d; + for (s = src_endps.begin(); s != src_endps.end(); s++) { + for (d = dst_endps.begin(); d != dst_endps.end(); d++) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << (*s) << "->" << (*d) << std::endl; + sfg->connect(*s, *d); + } + } + } + + // Construct unique list of blocks used either in edges, inputs, + // outputs, or by themselves. I still hate STL. + gr_basic_block_vector_t blocks; // unique list of used blocks + gr_basic_block_vector_t tmp = d_fg->calc_used_blocks(); + + // First add the list of singleton blocks + std::vector::const_iterator b; // Because flatten_aux is const + for (b = d_blocks.begin(); b != d_blocks.end(); b++) + tmp.push_back(*b); + + // Now add the list of connected input blocks + std::stringstream msg; + for (unsigned int i = 0; i < d_inputs.size(); i++) { + if (d_inputs[i].size() == 0) { + msg << "In hierarchical block " << d_owner->name() << ", input " << i + << " is not connected internally"; + throw std::runtime_error(msg.str()); + } + + for (unsigned int j = 0; j < d_inputs[i].size(); j++) + tmp.push_back(d_inputs[i][j].block()); + } + + for (unsigned int i = 0; i < d_outputs.size(); i++) { + gr_basic_block_sptr blk = d_outputs[i].block(); + if (!blk) { + msg << "In hierarchical block " << d_owner->name() << ", output " << i + << " is not connected internally"; + throw std::runtime_error(msg.str()); + } + tmp.push_back(blk); + } + sort(tmp.begin(), tmp.end()); + + std::insert_iterator inserter(blocks, blocks.begin()); + unique_copy(tmp.begin(), tmp.end(), inserter); + + // Recurse hierarchical children + for (gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) { + gr_hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(*p)); + if (hier_block2) { + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "flatten_aux: recursing into hierarchical block " << hier_block2 << std::endl; + hier_block2->d_detail->flatten_aux(sfg); + } + } +} + +void +gr_hier_block2_detail::lock() +{ + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "lock: entered in " << this << std::endl; + + if (d_parent_detail) + d_parent_detail->lock(); + else + d_owner->lock(); +} + +void +gr_hier_block2_detail::unlock() +{ + if (GR_HIER_BLOCK2_DETAIL_DEBUG) + std::cout << "unlock: entered in " << this << std::endl; + + if (d_parent_detail) + d_parent_detail->unlock(); + else + d_owner->unlock(); +} diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h new file mode 100644 index 00000000..6f5384e5 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,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. + */ +#ifndef INCLUDED_GR_HIER_BLOCK2_DETAIL_H +#define INCLUDED_GR_HIER_BLOCK2_DETAIL_H + +#include +#include +#include + +/*! + * \ingroup internal + */ +class gr_hier_block2_detail : boost::noncopyable +{ +public: + gr_hier_block2_detail(gr_hier_block2 *owner); + ~gr_hier_block2_detail(); + + void connect(gr_basic_block_sptr block); + void connect(gr_basic_block_sptr src, int src_port, + gr_basic_block_sptr dst, int dst_port); + void disconnect(gr_basic_block_sptr block); + void disconnect(gr_basic_block_sptr, int src_port, + gr_basic_block_sptr, int dst_port); + void disconnect_all(); + void lock(); + void unlock(); + void flatten_aux(gr_flat_flowgraph_sptr sfg) const; + +private: + + // Private implementation data + gr_hier_block2 *d_owner; + gr_hier_block2_detail *d_parent_detail; + gr_flowgraph_sptr d_fg; + std::vector d_inputs; // Multiple internal endpoints per external input + gr_endpoint_vector_t d_outputs; // Single internal endpoint per external output + gr_basic_block_vector_t d_blocks; + + void connect_input(int my_port, int port, gr_basic_block_sptr block); + void connect_output(int my_port, int port, gr_basic_block_sptr block); + void disconnect_input(int my_port, int port, gr_basic_block_sptr block); + void disconnect_output(int my_port, int port, gr_basic_block_sptr block); + + gr_endpoint_vector_t resolve_port(int port, bool is_input); + gr_endpoint_vector_t resolve_endpoint(const gr_endpoint &endp, bool is_input) const; +}; + +#endif /* INCLUDED_GR_HIER_BLOCK2_DETAIL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.cc b/gnuradio-core/src/lib/runtime/gr_io_signature.cc index 8351202d..1c1b06f0 100644 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.cc +++ b/gnuradio-core/src/lib/runtime/gr_io_signature.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,28 +27,86 @@ #include #include -gr_io_signature::gr_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item) +gr_io_signature_sptr +gr_make_io_signaturev(int min_streams, int max_streams, + const std::vector &sizeof_stream_items) +{ + return gr_io_signature_sptr (new gr_io_signature (min_streams, max_streams, + sizeof_stream_items)); +} + +gr_io_signature_sptr +gr_make_io_signature(int min_streams, int max_streams, + int sizeof_stream_item) +{ + std::vector sizeof_items(1); + sizeof_items[0] = sizeof_stream_item; + return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); +} + +gr_io_signature_sptr +gr_make_io_signature2(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2) +{ + std::vector sizeof_items(2); + sizeof_items[0] = sizeof_stream_item1; + sizeof_items[1] = sizeof_stream_item2; + return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); +} + +gr_io_signature_sptr +gr_make_io_signature3(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2, + int sizeof_stream_item3) +{ + std::vector sizeof_items(3); + sizeof_items[0] = sizeof_stream_item1; + sizeof_items[1] = sizeof_stream_item2; + sizeof_items[2] = sizeof_stream_item3; + return gr_make_io_signaturev(min_streams, max_streams, sizeof_items); +} + +// ------------------------------------------------------------------------ + + +gr_io_signature::gr_io_signature (int min_streams, int max_streams, + const std::vector &sizeof_stream_items) { if (min_streams < 0 || (max_streams != IO_INFINITE && max_streams < min_streams)) - throw std::invalid_argument ("gr_io_signature"); + throw std::invalid_argument ("gr_io_signature(1)"); + if (sizeof_stream_items.size() < 1) + throw std::invalid_argument("gr_io_signature(2)"); + + for (size_t i = 0; i < sizeof_stream_items.size(); i++){ + if (max_streams != 0 && sizeof_stream_items[i] < 1) + throw std::invalid_argument("gr_io_signature(3)"); + } + d_min_streams = min_streams; d_max_streams = max_streams; - d_sizeof_stream_item = sizeof_stream_item; + d_sizeof_stream_item = sizeof_stream_items; } gr_io_signature::~gr_io_signature () { - // NOP for now - // std::cout << "destroying gr_io_signature: " << this << '\n'; } -gr_io_signature_sptr -gr_make_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item) +int +gr_io_signature::sizeof_stream_item (int _index) const { - return gr_io_signature_sptr (new gr_io_signature (min_streams, max_streams, - sizeof_stream_item)); + if (_index < 0) + throw std::invalid_argument ("gr_io_signature::sizeof_stream_item"); + + size_t index = _index; + return d_sizeof_stream_item[std::min(index, d_sizeof_stream_item.size() - 1)]; } - +std::vector +gr_io_signature::sizeof_stream_items() const +{ + return d_sizeof_stream_item; +} diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.h b/gnuradio-core/src/lib/runtime/gr_io_signature.h index cfe07545..5d194cf5 100644 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.h +++ b/gnuradio-core/src/lib/runtime/gr_io_signature.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -23,16 +23,83 @@ #ifndef INCLUDED_IO_SIGNATURE_H #define INCLUDED_IO_SIGNATURE_H -#include +#include /*! - * \brief i/o signature for input and output ports. + * \brief Create an i/o signature + * + * \ingroup internal + * \param min_streams specify minimum number of streams (>= 0) + * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) + * \param sizeof_stream_item specify the size of the items in each stream + */ +gr_io_signature_sptr +gr_make_io_signature(int min_streams, int max_streams, + int sizeof_stream_item); + +/*! + * \brief Create an i/o signature + * + * \param min_streams specify minimum number of streams (>= 0) + * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) + * \param sizeof_stream_item1 specify the size of the items in the first stream + * \param sizeof_stream_item2 specify the size of the items in the second and subsequent streams + */ +gr_io_signature_sptr +gr_make_io_signature2(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2 + ); + +/*! + * \brief Create an i/o signature + * + * \param min_streams specify minimum number of streams (>= 0) + * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) + * \param sizeof_stream_item1 specify the size of the items in the first stream + * \param sizeof_stream_item2 specify the size of the items in the second stream + * \param sizeof_stream_item3 specify the size of the items in the third and subsequent streams + */ +gr_io_signature_sptr +gr_make_io_signature3(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2, + int sizeof_stream_item3 + ); + +/*! + * \brief Create an i/o signature * - * For now, we restrict all streams to be the same type. - * We can fix this later. + * \param min_streams specify minimum number of streams (>= 0) + * \param max_streams specify maximum number of streams (>= min_streams or -1 -> infinite) + * \param sizeof_stream_items specify the size of the items in the streams + * + * If there are more streams than there are entries in sizeof_stream_items, the + * value of the last entry in sizeof_stream_items is used for the missing values. + * sizeof_stream_items must contain at least 1 entry. + */ +gr_io_signature_sptr +gr_make_io_signaturev(int min_streams, int max_streams, + const std::vector &sizeof_stream_items); + + +/*! + * \brief i/o signature for input and output ports. + * \brief misc */ - class gr_io_signature { + int d_min_streams; + int d_max_streams; + std::vector d_sizeof_stream_item; + + gr_io_signature(int min_streams, int max_streams, + const std::vector &sizeof_stream_items); + + friend gr_io_signature_sptr + gr_make_io_signaturev(int min_streams, + int max_streams, + const std::vector &sizeof_stream_items); + public: static const int IO_INFINITE = -1; @@ -41,25 +108,9 @@ class gr_io_signature { int min_streams () const { return d_min_streams; } int max_streams () const { return d_max_streams; } - size_t sizeof_stream_item (int index) const { return d_sizeof_stream_item; } - - // ---------------------------------------------------------------------------- - - private: - - int d_min_streams; - int d_max_streams; - size_t d_sizeof_stream_item; - - gr_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item); - - friend gr_io_signature_sptr gr_make_io_signature (int min_streams, - int max_streams, - size_t sizeof_stream_item); + int sizeof_stream_item (int index) const; + std::vector sizeof_stream_items() const; }; -gr_io_signature_sptr -gr_make_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item); - #endif /* INCLUDED_IO_SIGNATURE_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_io_signature.i b/gnuradio-core/src/lib/runtime/gr_io_signature.i index ea7d6f32..78465b19 100644 --- a/gnuradio-core/src/lib/runtime/gr_io_signature.i +++ b/gnuradio-core/src/lib/runtime/gr_io_signature.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004,2005 Free Software Foundation, Inc. + * Copyright 2004,2005,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -24,14 +24,40 @@ class gr_io_signature; typedef boost::shared_ptr gr_io_signature_sptr; %template(gr_io_signature_sptr) boost::shared_ptr; -%rename(io_signature) gr_make_io_signature; +%rename(io_signature) gr_make_io_signature; +%rename(io_signature2) gr_make_io_signature2; +%rename(io_signature3) gr_make_io_signature3; +%rename(io_signaturev) gr_make_io_signaturev; + +gr_io_signature_sptr +gr_make_io_signature(int min_streams, int max_streams, + int sizeof_stream_item); + +gr_io_signature_sptr +gr_make_io_signature2(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2 + ); +gr_io_signature_sptr +gr_make_io_signature3(int min_streams, int max_streams, + int sizeof_stream_item1, + int sizeof_stream_item2, + int sizeof_stream_item3 + ); gr_io_signature_sptr -gr_make_io_signature (int min_streams, - int max_streams, - size_t sizeof_stream_item); +gr_make_io_signaturev(int min_streams, int max_streams, + const std::vector &sizeof_stream_items); + class gr_io_signature { + gr_io_signature (int min_streams, int max_streams, int sizeof_stream_item); + + friend gr_io_signature_sptr + gr_make_io_signaturev(int min_streams, + int max_streams, + const std::vector &sizeof_stream_item); + public: // disabled. Suspected bug in SWIG 1.3.24 @@ -41,9 +67,7 @@ class gr_io_signature { int min_streams () const { return d_min_streams; } int max_streams () const { return d_max_streams; } - size_t sizeof_stream_item (int index) const { return d_sizeof_stream_item; } - - private: - gr_io_signature (int min_streams, int max_streams, size_t sizeof_stream_item); + int sizeof_stream_item (int index) const; + std::vector sizeof_stream_items() const; }; diff --git a/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc b/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc index c6448f87..adad5579 100644 --- a/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc +++ b/gnuradio-core/src/lib/runtime/gr_local_sighandler.cc @@ -27,6 +27,7 @@ #include #include #include +#include gr_local_sighandler::gr_local_sighandler (int signum, diff --git a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h index bd7acd14..6b60cf09 100644 --- a/gnuradio-core/src/lib/runtime/gr_local_sighandler.h +++ b/gnuradio-core/src/lib/runtime/gr_local_sighandler.h @@ -23,12 +23,16 @@ #ifndef INCLUDED_GR_LOCAL_SIGHANDLER_H #define INCLUDED_GR_LOCAL_SIGHANDLER_H +#ifdef HAVE_SIGNAL_H #include +#endif + #include /*! * \brief Get and set signal handler. * + * \ingroup internal * Constructor installs new handler, destructor reinstalls * original value. */ diff --git a/gnuradio-core/src/lib/runtime/gr_message.cc b/gnuradio-core/src/lib/runtime/gr_message.cc index f14ed9d9..6bef71ed 100644 --- a/gnuradio-core/src/lib/runtime/gr_message.cc +++ b/gnuradio-core/src/lib/runtime/gr_message.cc @@ -25,6 +25,7 @@ #endif #include #include +#include static long s_ncurrently_allocated = 0; diff --git a/gnuradio-core/src/lib/runtime/gr_message.h b/gnuradio-core/src/lib/runtime/gr_message.h index e3c52a58..179f7d9b 100644 --- a/gnuradio-core/src/lib/runtime/gr_message.h +++ b/gnuradio-core/src/lib/runtime/gr_message.h @@ -38,8 +38,9 @@ gr_message_sptr gr_make_message_from_string(const std::string s, long type = 0, double arg1 = 0, double arg2 = 0); /*! - * \brief Message. + * \brief Message class. * + * \ingroup misc * The ideas and method names for adjustable message length were * lifted from the click modular router "Packet" class. */ diff --git a/gnuradio-core/src/lib/runtime/gr_msg_handler.h b/gnuradio-core/src/lib/runtime/gr_msg_handler.h index 44361184..774dce73 100644 --- a/gnuradio-core/src/lib/runtime/gr_msg_handler.h +++ b/gnuradio-core/src/lib/runtime/gr_msg_handler.h @@ -29,6 +29,7 @@ typedef boost::shared_ptr gr_msg_handler_sptr; /*! * \brief abstract class of message handlers + * \ingroup base */ class gr_msg_handler { public: diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.h b/gnuradio-core/src/lib/runtime/gr_msg_queue.h index fc4c2407..f965887e 100644 --- a/gnuradio-core/src/lib/runtime/gr_msg_queue.h +++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.h @@ -23,7 +23,7 @@ #define INCLUDED_GR_MSG_QUEUE_H #include -#include +#include class gr_msg_queue; typedef boost::shared_ptr gr_msg_queue_sptr; @@ -32,6 +32,7 @@ gr_msg_queue_sptr gr_make_msg_queue(unsigned int limit=0); /*! * \brief thread-safe message queue + * \ingroup misc */ class gr_msg_queue : public gr_msg_handler { omni_mutex d_mutex; diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.i b/gnuradio-core/src/lib/runtime/gr_msg_queue.i index 68dbfd64..254a7a94 100644 --- a/gnuradio-core/src/lib/runtime/gr_msg_queue.i +++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.i @@ -39,7 +39,7 @@ class gr_msg_queue : public gr_msg_handler { int d_count; public: - gr_msg_queue(); + gr_msg_queue(unsigned int limit); ~gr_msg_queue(); //! Generic msg_handler method: insert the message. @@ -87,7 +87,7 @@ public: * functions into the gr.msg_queue wrapper class, so that everything * appears normal. (An evil laugh is heard in the distance...) */ -%inline { +%inline %{ gr_message_sptr gr_py_msg_queue__delete_head(gr_msg_queue_sptr q) { gr_message_sptr msg; Py_BEGIN_ALLOW_THREADS; // release global interpreter lock @@ -101,7 +101,7 @@ public: q->insert_tail(msg); // possibly blocking call Py_END_ALLOW_THREADS; // acquire global interpreter lock } -} +%} // smash in new python delete_head and insert_tail methods... %pythoncode %{ diff --git a/gnuradio-core/src/lib/runtime/gr_preferences.cc b/gnuradio-core/src/lib/runtime/gr_preferences.cc index 16c9bcaf..e0be2db6 100644 --- a/gnuradio-core/src/lib/runtime/gr_preferences.cc +++ b/gnuradio-core/src/lib/runtime/gr_preferences.cc @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef MKDIR_TAKES_ONE_ARG diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.cc b/gnuradio-core/src/lib/runtime/gr_realtime.cc index 878411df..b44c4d40 100644 --- a/gnuradio-core/src/lib/runtime/gr_realtime.cc +++ b/gnuradio-core/src/lib/runtime/gr_realtime.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -25,47 +25,8 @@ #endif #include -#ifdef HAVE_SCHED_H -#include -#endif - -#include -#include -#include - -#if defined(HAVE_SCHED_SETSCHEDULER) - -gr_rt_status_t -gr_enable_realtime_scheduling() -{ - int policy = SCHED_FIFO; - int pri = (sched_get_priority_max (policy) + sched_get_priority_min (policy)) / 2; - int pid = 0; // this process - - struct sched_param param; - memset(¶m, 0, sizeof(param)); - param.sched_priority = pri; - int result = sched_setscheduler(pid, policy, ¶m); - if (result != 0){ - if (errno == EPERM) - return RT_NO_PRIVS; - else { - perror ("sched_setscheduler: failed to set real time priority"); - return RT_OTHER_ERROR; - } - } - //printf("SCHED_FIFO enabled with priority = %d\n", pri); - return RT_OK; -} - -// #elif // could try negative niceness - -#else - gr_rt_status_t gr_enable_realtime_scheduling() { - return RT_NOT_IMPLEMENTED; + return gruel::enable_realtime_scheduling(); } - -#endif diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.h b/gnuradio-core/src/lib/runtime/gr_realtime.h index 49a52a0d..830c201d 100644 --- a/gnuradio-core/src/lib/runtime/gr_realtime.h +++ b/gnuradio-core/src/lib/runtime/gr_realtime.h @@ -23,17 +23,14 @@ #ifndef INCLUDED_GR_REALTIME_H #define INCLUDED_GR_REALTIME_H -typedef enum { - RT_OK = 0, - RT_NOT_IMPLEMENTED, - RT_NO_PRIVS, - RT_OTHER_ERROR -} gr_rt_status_t; +#include + +typedef gruel::rt_status_t gr_rt_status_t; /*! * \brief If possible, enable high-priority "real time" scheduling. + * \ingroup misc */ -gr_rt_status_t -gr_enable_realtime_scheduling(); +gr_rt_status_t gr_enable_realtime_scheduling(); #endif /* INCLUDED_GR_REALTIME_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.i b/gnuradio-core/src/lib/runtime/gr_realtime.i index cb43e051..be7f12bf 100644 --- a/gnuradio-core/src/lib/runtime/gr_realtime.i +++ b/gnuradio-core/src/lib/runtime/gr_realtime.i @@ -1,4 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + %rename(enable_realtime_scheduling) gr_enable_realtime_scheduling; -%include +// NOTE: This is duplicated from gruel/src/include/gruel/gr_realtime.h, +// and must be kept in sync with it. This is the least evil workaround +// for allowing 3rd party code builds to work when GNU Radio is +// installed from binary packages into the standard system directories. +// Otherwise, they can't find #include , since +// pkg-config strips -I/usr/include from the --cflags path. + +namespace gruel { + + typedef enum { + RT_OK = 0, + RT_NOT_IMPLEMENTED, + RT_NO_PRIVS, + RT_OTHER_ERROR + } rt_status_t; + +} +typedef gruel::rt_status_t gr_rt_status_t; +gr_rt_status_t gr_enable_realtime_scheduling(); diff --git a/gnuradio-core/src/lib/runtime/gr_runtime.h b/gnuradio-core/src/lib/runtime/gr_runtime.h deleted file mode 100644 index 17c9b91c..00000000 --- a/gnuradio-core/src/lib/runtime/gr_runtime.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_GR_RUNTIME_H -#define INCLUDED_GR_RUNTIME_H - -#include - -/* - * typedefs for smart pointers we use throughout the runtime system - */ - -class gr_block; -class gr_block_detail; -class gr_io_signature; -class gr_buffer; -class gr_buffer_reader; - -typedef boost::shared_ptr gr_block_sptr; -typedef boost::shared_ptr gr_block_detail_sptr; -typedef boost::shared_ptr gr_io_signature_sptr; -typedef boost::shared_ptr gr_buffer_sptr; -typedef boost::shared_ptr gr_buffer_reader_sptr; - -#endif /* INCLUDED_GR_RUNTIME_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_runtime_types.h b/gnuradio-core/src/lib/runtime/gr_runtime_types.h new file mode 100644 index 00000000..74d2614a --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_runtime_types.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007 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. + */ + +#ifndef INCLUDED_GR_RUNTIME_TYPES_H +#define INCLUDED_GR_RUNTIME_TYPES_H + +#include + +/* + * typedefs for smart pointers we use throughout the runtime system + */ + +class gr_basic_block; +class gr_block; +class gr_block_detail; +class gr_hier_block2; +class gr_io_signature; +class gr_buffer; +class gr_buffer_reader; +class gr_flowgraph; +class gr_flat_flowgraph; +class gr_top_block; +class gr_top_block_detail; + +typedef boost::shared_ptr gr_basic_block_sptr; +typedef boost::shared_ptr gr_block_sptr; +typedef boost::shared_ptr gr_block_detail_sptr; +typedef boost::shared_ptr gr_hier_block2_sptr; +typedef boost::shared_ptr gr_io_signature_sptr; +typedef boost::shared_ptr gr_buffer_sptr; +typedef boost::shared_ptr gr_buffer_reader_sptr; +typedef boost::shared_ptr gr_flowgraph_sptr; +typedef boost::shared_ptr gr_flat_flowgraph_sptr; +typedef boost::shared_ptr gr_top_block_sptr; + +#endif /* INCLUDED_GR_RUNTIME_TYPES_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler.cc b/gnuradio-core/src/lib/runtime/gr_scheduler.cc new file mode 100644 index 00000000..e4d8b3dd --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_scheduler.cc @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +gr_scheduler::gr_scheduler(gr_flat_flowgraph_sptr ffg) +{ +} + +gr_scheduler::~gr_scheduler() +{ +} diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler.h b/gnuradio-core/src/lib/runtime/gr_scheduler.h new file mode 100644 index 00000000..13bc1ff1 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_scheduler.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_SCHEDULER_H +#define INCLUDED_GR_SCHEDULER_H + +#include +#include +#include + + +class gr_scheduler; +typedef boost::shared_ptr gr_scheduler_sptr; + + +/*! + * \brief Abstract scheduler that takes a flattened flow graph and runs it. + * + * Preconditions: details, buffers and buffer readers have been assigned. + */ +class gr_scheduler : boost::noncopyable +{ + +public: + /*! + * \brief Construct a scheduler and begin evaluating the graph. + * + * The scheduler will continue running until all blocks until they + * report that they are done or the stop method is called. + */ + gr_scheduler(gr_flat_flowgraph_sptr ffg); + + virtual ~gr_scheduler(); + + /*! + * \brief Tell the scheduler to stop executing. + */ + virtual void stop() = 0; + + /*! + * \brief Block until the graph is done. + */ + virtual void wait() = 0; +}; + +#endif /* INCLUDED_GR_SCHEDULER_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc new file mode 100644 index 00000000..fefc0dc7 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.cc @@ -0,0 +1,87 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + +class sts_container +{ + gr_block_vector_t d_blocks; + +public: + + sts_container(gr_block_vector_t blocks) + : d_blocks(blocks) {} + + void operator()() + { + gr_make_single_threaded_scheduler(d_blocks)->run(); + } +}; + + +gr_scheduler_sptr +gr_scheduler_sts::make(gr_flat_flowgraph_sptr ffg) +{ + return gr_scheduler_sptr(new gr_scheduler_sts(ffg)); +} + +gr_scheduler_sts::gr_scheduler_sts(gr_flat_flowgraph_sptr ffg) + : gr_scheduler(ffg) +{ + // Split the flattened flow graph into discrete partitions, each + // of which is topologically sorted. + + std::vector graphs = ffg->partition(); + + // For each partition, create a thread to evaluate it using + // an instance of the gr_single_threaded_scheduler + + for (std::vector::iterator p = graphs.begin(); + p != graphs.end(); p++) { + + gr_block_vector_t blocks = gr_flat_flowgraph::make_block_vector(*p); + d_threads.create_thread( + gruel::thread_body_wrapper(sts_container(blocks), + "single-threaded-scheduler")); + } +} + +gr_scheduler_sts::~gr_scheduler_sts() +{ + stop(); +} + +void +gr_scheduler_sts::stop() +{ + d_threads.interrupt_all(); +} + +void +gr_scheduler_sts::wait() +{ + d_threads.join_all(); +} diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h new file mode 100644 index 00000000..4cf83515 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_scheduler_sts.h @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_SCHEDULER_STS_H +#define INCLUDED_GR_SCHEDULER_STS_H + +#include +#include + +/*! + * \brief Concrete scheduler that uses the single_threaded_scheduler + */ +class gr_scheduler_sts : public gr_scheduler +{ + gruel::thread_group d_threads; + +protected: + /*! + * \brief Construct a scheduler and begin evaluating the graph. + * + * The scheduler will continue running until all blocks until they + * report that they are done or the stop method is called. + */ + gr_scheduler_sts(gr_flat_flowgraph_sptr ffg); + +public: + static gr_scheduler_sptr make(gr_flat_flowgraph_sptr ffg); + + ~gr_scheduler_sts(); + + /*! + * \brief Tell the scheduler to stop executing. + */ + void stop(); + + /*! + * \brief Block until the graph is done. + */ + void wait(); +}; + + + + +#endif /* INCLUDED_GR_SCHEDULER_STS_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc new file mode 100644 index 00000000..af033857 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.cc @@ -0,0 +1,95 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + +/* + * You know, a lambda expression would be sooo much easier... + */ +class tpb_container +{ + gr_block_sptr d_block; + +public: + tpb_container(gr_block_sptr block) : d_block(block) {} + + void operator()() + { + gr_tpb_thread_body body(d_block); + } +}; + + +gr_scheduler_sptr +gr_scheduler_tpb::make(gr_flat_flowgraph_sptr ffg) +{ + return gr_scheduler_sptr(new gr_scheduler_tpb(ffg)); +} + +gr_scheduler_tpb::gr_scheduler_tpb(gr_flat_flowgraph_sptr ffg) + : gr_scheduler(ffg) +{ + // Get a topologically sorted vector of all the blocks in use. + // Being topologically sorted probably isn't going to matter, but + // there's a non-zero chance it might help... + + gr_basic_block_vector_t used_blocks = ffg->calc_used_blocks(); + used_blocks = ffg->topological_sort(used_blocks); + gr_block_vector_t blocks = gr_flat_flowgraph::make_block_vector(used_blocks); + + // Ensure that the done flag is clear on all blocks + + for (size_t i = 0; i < blocks.size(); i++){ + blocks[i]->detail()->set_done(false); + } + + // Fire off a thead for each block + + for (size_t i = 0; i < blocks.size(); i++){ + std::stringstream name; + name << "thread-per-block[" << i << "]: " << blocks[i]; + d_threads.create_thread( + gruel::thread_body_wrapper(tpb_container(blocks[i]), name.str())); + } +} + +gr_scheduler_tpb::~gr_scheduler_tpb() +{ + stop(); +} + +void +gr_scheduler_tpb::stop() +{ + d_threads.interrupt_all(); +} + +void +gr_scheduler_tpb::wait() +{ + d_threads.join_all(); +} diff --git a/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h new file mode 100644 index 00000000..16a0c020 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_scheduler_tpb.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_SCHEDULER_TPB_H +#define INCLUDED_GR_SCHEDULER_TPB_H + +#include +#include + +/*! + * \brief Concrete scheduler that uses a kernel thread-per-block + */ +class gr_scheduler_tpb : public gr_scheduler +{ + gruel::thread_group d_threads; + +protected: + /*! + * \brief Construct a scheduler and begin evaluating the graph. + * + * The scheduler will continue running until all blocks until they + * report that they are done or the stop method is called. + */ + gr_scheduler_tpb(gr_flat_flowgraph_sptr ffg); + +public: + static gr_scheduler_sptr make(gr_flat_flowgraph_sptr ffg); + + ~gr_scheduler_tpb(); + + /*! + * \brief Tell the scheduler to stop executing. + */ + void stop(); + + /*! + * \brief Block until the graph is done. + */ + void wait(); +}; + + +#endif /* INCLUDED_GR_SCHEDULER_TPB_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_select_handler.h b/gnuradio-core/src/lib/runtime/gr_select_handler.h index cc883dc9..c3808995 100644 --- a/gnuradio-core/src/lib/runtime/gr_select_handler.h +++ b/gnuradio-core/src/lib/runtime/gr_select_handler.h @@ -31,6 +31,7 @@ typedef boost::shared_ptr gr_select_handler_sptr; /*! * \brief Abstract handler for select based notification. + * \ingroup base * * \sa gr_dispatcher */ diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc index 6aaaf954..7f1b4064 100644 --- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc +++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.cc @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -44,14 +45,6 @@ static int which_scheduler = 0; - -std::ostream& -operator << (std::ostream& os, const gr_block *m) -{ - os << "name() << " (" << m->unique_id() << ")>"; - return os; -} - gr_single_threaded_scheduler_sptr gr_make_single_threaded_scheduler (const std::vector &blocks) { @@ -82,10 +75,18 @@ gr_single_threaded_scheduler::~gr_single_threaded_scheduler () void gr_single_threaded_scheduler::run () { - d_enabled = true; + // d_enabled = true; // KLUDGE main_loop (); } +void +gr_single_threaded_scheduler::stop () +{ + if (0) + std::cout << "gr_singled_threaded_scheduler::stop() " + << this << std::endl; + d_enabled = false; +} inline static unsigned int round_up (unsigned int n, unsigned int multiple) @@ -154,6 +155,9 @@ gr_single_threaded_scheduler::main_loop () nalive = d_blocks.size (); while (d_enabled && nalive > 0){ + if (boost::this_thread::interruption_requested()) + break; + gr_block *m = d_blocks[bi].get (); gr_block_detail *d = m->detail().get (); diff --git a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h index cae99f23..060d3017 100644 --- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h +++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.h @@ -23,7 +23,7 @@ #ifndef INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H #define INCLUDED_GR_SINGLE_THREADED_SCHEDULER_H -#include +#include #include class gr_single_threaded_scheduler; @@ -40,7 +40,7 @@ class gr_single_threaded_scheduler { ~gr_single_threaded_scheduler (); void run (); - void stop () { d_enabled = false; } + void stop (); private: const std::vector d_blocks; 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 fb2ff0d7..5e903244 100644 --- a/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i +++ b/gnuradio-core/src/lib/runtime/gr_single_threaded_scheduler.i @@ -42,11 +42,10 @@ class gr_single_threaded_scheduler { gr_single_threaded_scheduler (const std::vector &modules); }; -%inline { +%inline %{ void sts_pyrun (gr_single_threaded_scheduler_sptr s) { Py_BEGIN_ALLOW_THREADS; // release global interpreter lock s->run (); Py_END_ALLOW_THREADS; // acquire global interpreter lock } -} - +%} diff --git a/gnuradio-core/src/lib/runtime/gr_sptr_magic.cc b/gnuradio-core/src/lib/runtime/gr_sptr_magic.cc new file mode 100644 index 00000000..3295f849 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_sptr_magic.cc @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +#if 0 + #include + typedef boost::mutex mutex; + typedef boost::mutex::scoped_lock scoped_lock; +#else + #include + typedef omni_mutex mutex; + typedef omni_mutex_lock scoped_lock; +#endif + +namespace gnuradio { + + static mutex s_mutex; + typedef std::map sptr_map; + static sptr_map s_map; + + void + detail::sptr_magic::create_and_stash_initial_sptr(gr_hier_block2 *p) + { + gr_basic_block_sptr sptr(p); + scoped_lock l(); + s_map.insert(sptr_map::value_type(static_cast(p), sptr)); + } + + + gr_basic_block_sptr + detail::sptr_magic::fetch_initial_sptr(gr_basic_block *p) + { + /* + * If p isn't a subclass of gr_hier_block2, just create the + * shared ptr and return it. + */ + gr_hier_block2 *hb2 = dynamic_cast(p); + if (!hb2){ + return gr_basic_block_sptr(p); + } + + /* + * p is a subclass of gr_hier_block2, thus we've already created the shared pointer + * and stashed it away. Fish it out and return it. + */ + scoped_lock l(); + sptr_map::iterator pos = s_map.find(static_cast(p)); + if (pos == s_map.end()) + throw std::invalid_argument("gr_sptr_magic: invalid pointer!"); + + gr_basic_block_sptr sptr = pos->second; + s_map.erase(pos); + return sptr; + } +}; + diff --git a/gnuradio-core/src/lib/runtime/gr_sptr_magic.h b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h new file mode 100644 index 00000000..872374ab --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_sptr_magic.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_SPTR_MAGIC_H +#define INCLUDED_GR_SPTR_MAGIC_H + +#include + +class gr_basic_block; +class gr_hier_block2; + +namespace gnuradio { + + namespace detail { + + class sptr_magic { + public: + static boost::shared_ptr fetch_initial_sptr(gr_basic_block *p); + static void create_and_stash_initial_sptr(gr_hier_block2 *p); + }; + }; + + /* + * \brief New! Improved! Standard method to get/create the boost::shared_ptr for a block. + */ + template + boost::shared_ptr + get_initial_sptr(T *p) + { + return boost::dynamic_pointer_cast(detail::sptr_magic::fetch_initial_sptr(p)); + } +}; + +#endif /* INCLUDED_GR_SPTR_MAGIC_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_swig_block_magic.i b/gnuradio-core/src/lib/runtime/gr_swig_block_magic.i deleted file mode 100644 index 083d6068..00000000 --- a/gnuradio-core/src/lib/runtime/gr_swig_block_magic.i +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -%define GR_SWIG_BLOCK_MAGIC(PKG, BASE_NAME) -_GR_SWIG_BLOCK_MAGIC_HELPER(PKG, PKG ## _ ## BASE_NAME, BASE_NAME) -%enddef - -%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, NAME, BASE_NAME) -class NAME; -typedef boost::shared_ptr NAME ## _sptr; -%template(NAME ## _sptr) boost::shared_ptr; -%rename(BASE_NAME) PKG ## _make_ ## BASE_NAME; -%inline { - gr_block_sptr NAME ## _block (NAME ## _sptr r) - { - return gr_block_sptr (r); - } -} - -%pythoncode %{ -NAME ## _sptr.block = lambda self: NAME ## _block (self) -NAME ## _sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id ()) -%} - -%ignore NAME; -%enddef diff --git a/gnuradio-core/src/lib/general/gr_sync_block.cc b/gnuradio-core/src/lib/runtime/gr_sync_block.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_sync_block.cc rename to gnuradio-core/src/lib/runtime/gr_sync_block.cc diff --git a/gnuradio-core/src/lib/runtime/gr_sync_block.h b/gnuradio-core/src/lib/runtime/gr_sync_block.h new file mode 100644 index 00000000..3a5d89d1 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_sync_block.h @@ -0,0 +1,65 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_GR_SYNC_BLOCK_H +#define INCLUDED_GR_SYNC_BLOCK_H + +#include + +/*! + * \brief synchronous 1:1 input to output with history + * \ingroup base_blk + * + * Override work to provide the signal processing implementation. + */ +class gr_sync_block : public gr_block +{ + protected: + + gr_sync_block (const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature); + + public: + + /*! + * \brief just like gr_block::general_work, only this arranges to call consume_each for you + * + * The user must override work to define the signal processing code + */ + virtual int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) = 0; + + + // gr_sync_block overrides these to assist work + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + int fixed_rate_ninput_to_noutput(int ninput); + int fixed_rate_noutput_to_ninput(int noutput); +}; + +#endif /* INCLUDED_GR_SYNC_BLOCK_H */ diff --git a/gnuradio-core/src/lib/general/gr_sync_block.i b/gnuradio-core/src/lib/runtime/gr_sync_block.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sync_block.i rename to gnuradio-core/src/lib/runtime/gr_sync_block.i diff --git a/gnuradio-core/src/lib/general/gr_sync_decimator.cc b/gnuradio-core/src/lib/runtime/gr_sync_decimator.cc similarity index 100% rename from gnuradio-core/src/lib/general/gr_sync_decimator.cc rename to gnuradio-core/src/lib/runtime/gr_sync_decimator.cc diff --git a/gnuradio-core/src/lib/runtime/gr_sync_decimator.h b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h new file mode 100644 index 00000000..12cd5419 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_sync_decimator.h @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_GR_SYNC_DECIMATOR_H +#define INCLUDED_GR_SYNC_DECIMATOR_H + +#include + +/*! + * \brief synchronous N:1 input to output with history + * \ingroup base_blk + * + * Override work to provide the signal processing implementation. + */ +class gr_sync_decimator : public gr_sync_block +{ + private: + unsigned d_decimation; + + protected: + + gr_sync_decimator (const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature, + unsigned decimation); + public: + + unsigned decimation () const { return d_decimation; } + void set_decimation (unsigned decimation) + { + d_decimation = decimation; + set_relative_rate (1.0 / decimation); + } + + // gr_sync_decimator overrides these to assist work + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // derived classes should override work + + int fixed_rate_ninput_to_noutput(int ninput); + int fixed_rate_noutput_to_ninput(int noutput); +}; + + +#endif /* INCLUDED_GR_SYNC_DECIMATOR_H */ diff --git a/gnuradio-core/src/lib/general/gr_sync_decimator.i b/gnuradio-core/src/lib/runtime/gr_sync_decimator.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sync_decimator.i rename to gnuradio-core/src/lib/runtime/gr_sync_decimator.i diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc new file mode 100644 index 00000000..d130a5be --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.cc @@ -0,0 +1,70 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +gr_sync_interpolator::gr_sync_interpolator (const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature, + unsigned interpolation) + : gr_sync_block (name, input_signature, output_signature) +{ + set_interpolation (interpolation); +} + +void +gr_sync_interpolator::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size (); + for (unsigned i = 0; i < ninputs; i++) + ninput_items_required[i] = fixed_rate_noutput_to_ninput(noutput_items); +} + +int +gr_sync_interpolator::fixed_rate_noutput_to_ninput(int noutput_items) +{ + return noutput_items / interpolation() + history() - 1; +} + +int +gr_sync_interpolator::fixed_rate_ninput_to_noutput(int ninput_items) +{ + return std::max(0, ninput_items - (int)history() + 1) * interpolation(); +} + +int +gr_sync_interpolator::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int r = work (noutput_items, input_items, output_items); + if (r > 0) + consume_each (r / interpolation ()); + return r; +} + + diff --git a/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h new file mode 100644 index 00000000..0363bc55 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.h @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifndef INCLUDED_GR_SYNC_INTERPOLATOR_H +#define INCLUDED_GR_SYNC_INTERPOLATOR_H + +#include + +/*! + * \brief synchronous 1:N input to output with history + * \ingroup base_blk + * + * Override work to provide the signal processing implementation. + */ +class gr_sync_interpolator : public gr_sync_block +{ + private: + unsigned d_interpolation; + + protected: + gr_sync_interpolator (const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature, + unsigned interpolation); + public: + + unsigned interpolation () const { return d_interpolation; } + void set_interpolation (unsigned interpolation) + { + d_interpolation = interpolation; + set_relative_rate (1.0 * interpolation); + set_output_multiple (interpolation); + } + + // gr_sync_interpolator overrides these to assist work + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + // derived classes should override work + + int fixed_rate_ninput_to_noutput(int ninput); + int fixed_rate_noutput_to_ninput(int noutput); +}; + + +#endif /* INCLUDED_GR_SYNC_INTERPOLATOR_H */ diff --git a/gnuradio-core/src/lib/general/gr_sync_interpolator.i b/gnuradio-core/src/lib/runtime/gr_sync_interpolator.i similarity index 100% rename from gnuradio-core/src/lib/general/gr_sync_interpolator.i rename to gnuradio-core/src/lib/runtime/gr_sync_interpolator.i diff --git a/gnuradio-core/src/lib/runtime/gr_timer.h b/gnuradio-core/src/lib/runtime/gr_timer.h index 2e110603..ff14e315 100644 --- a/gnuradio-core/src/lib/runtime/gr_timer.h +++ b/gnuradio-core/src/lib/runtime/gr_timer.h @@ -33,6 +33,7 @@ typedef void (*gr_timer_hook)(gr_timer *, void *); /*! * \brief create a timeout. * + * \ingroup misc * gr_timer_hook is called when timer fires. */ gr_timer_sptr gr_make_timer (gr_timer_hook, void *); diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.cc b/gnuradio-core/src/lib/runtime/gr_top_block.cc new file mode 100644 index 00000000..09e46dfb --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_top_block.cc @@ -0,0 +1,97 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +gr_top_block_sptr +gr_make_top_block(const std::string &name) +{ + return gnuradio::get_initial_sptr(new gr_top_block(name)); +} + +gr_top_block::gr_top_block(const std::string &name) + : gr_hier_block2(name, + gr_make_io_signature(0,0,0), + gr_make_io_signature(0,0,0)) + +{ + d_impl = new gr_top_block_impl(this); +} + +gr_top_block::~gr_top_block() +{ + stop(); + wait(); + + delete d_impl; +} + +void +gr_top_block::start() +{ + d_impl->start(); +} + +void +gr_top_block::stop() +{ + d_impl->stop(); +} + +void +gr_top_block::wait() +{ + d_impl->wait(); +} + +void +gr_top_block::run() +{ + start(); + wait(); +} + +void +gr_top_block::lock() +{ + d_impl->lock(); +} + +void +gr_top_block::unlock() +{ + d_impl->unlock(); +} + +void +gr_top_block::dump() +{ + d_impl->dump(); +} diff --git a/gnuradio-core/src/lib/runtime/gr_top_block.h b/gnuradio-core/src/lib/runtime/gr_top_block.h new file mode 100644 index 00000000..8052954e --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_top_block.h @@ -0,0 +1,110 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,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. + */ + +#ifndef INCLUDED_GR_TOP_BLOCK_H +#define INCLUDED_GR_TOP_BLOCK_H + +#include + +class gr_top_block_impl; + +gr_top_block_sptr gr_make_top_block(const std::string &name); + +/*! + *\brief Top-level hierarchical block representing a flowgraph + * \ingroup container_blk + * + */ +class gr_top_block : public gr_hier_block2 +{ +private: + friend gr_top_block_sptr gr_make_top_block(const std::string &name); + + gr_top_block_impl *d_impl; + +protected: + gr_top_block(const std::string &name); + +public: + ~gr_top_block(); + + /*! + * \brief The simple interface to running a flowgraph. + * + * Calls start() then wait(). Used to run a flowgraph that will stop + * on its own, or when another thread will call stop(). + */ + void run(); + + /*! + * Start the contained flowgraph. Creates one or more threads to + * execute the flow graph. Returns to the caller once the threads + * are created. Calling start() on a top_block that is already + * started IS an error. + */ + void start(); + + /*! + * Stop the running flowgraph. Notifies each thread created by the + * scheduler to shutdown, then returns to caller. Calling stop() on + * a top_block that is already stopped IS NOT an error. + */ + void stop(); + + /*! + * Wait for a flowgraph to complete. Flowgraphs complete when + * either (1) all blocks indicate that they are done (typically only + * when using gr.file_source, or gr.head, or (2) after stop() has been + * called to request shutdown. Calling wait on a top_block that is + * not running IS NOT an error (wait returns w/o blocking). + */ + void wait(); + + /*! + * Lock a flowgraph in preparation for reconfiguration. When an equal + * number of calls to lock() and unlock() have occurred, the flowgraph + * will be reconfigured. + * + * N.B. lock() and unlock() may not be called from a flowgraph thread + * (E.g., gr_block::work method) or deadlock will occur when + * reconfiguration happens. + */ + virtual void lock(); + + /*! + * Unlock a flowgraph in preparation for reconfiguration. When an equal + * number of calls to lock() and unlock() have occurred, the flowgraph + * will be reconfigured. + * + * N.B. lock() and unlock() may not be called from a flowgraph thread + * (E.g., gr_block::work method) or deadlock will occur when + * reconfiguration happens. + */ + virtual void unlock(); + + /*! + * Displays flattened flowgraph edges and block connectivity + */ + void dump(); +}; + +#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 new file mode 100644 index 00000000..670e5b5e --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_top_block.i @@ -0,0 +1,66 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%include + +class gr_top_block; +typedef boost::shared_ptr gr_top_block_sptr; +%template(gr_top_block_sptr) boost::shared_ptr; + +// Hack to have a Python shim implementation of gr.top_block +// that instantiates one of these and passes through calls +%rename(top_block_swig) gr_make_top_block; +gr_top_block_sptr gr_make_top_block(const std::string name) + throw (std::logic_error); + +class gr_top_block : public gr_hier_block2 +{ +private: + gr_top_block(const std::string &name); + +public: + ~gr_top_block(); + + void start() throw (std::runtime_error); + void stop(); + void wait(); + void run(); + void lock(); + void unlock() throw (std::runtime_error); + void dump(); +}; + +%inline %{ +void top_block_run_unlocked(gr_top_block_sptr r) throw (std::runtime_error) +{ + Py_BEGIN_ALLOW_THREADS; // release global interpreter lock + r->run(); + Py_END_ALLOW_THREADS; // acquire global interpreter lock +} + +void top_block_wait_unlocked(gr_top_block_sptr r) throw (std::runtime_error) +{ + Py_BEGIN_ALLOW_THREADS; // release global interpreter lock + r->wait(); + Py_END_ALLOW_THREADS; // acquire global interpreter lock +} +%} diff --git a/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc b/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc new file mode 100644 index 00000000..50d480d0 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_top_block_impl.cc @@ -0,0 +1,180 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define GR_TOP_BLOCK_IMPL_DEBUG 0 + + +typedef gr_scheduler_sptr (*scheduler_maker)(gr_flat_flowgraph_sptr ffg); + +static struct scheduler_table { + const char *name; + scheduler_maker f; +} scheduler_table[] = { + { "TPB", gr_scheduler_tpb::make }, // first entry is default + { "STS", gr_scheduler_sts::make } +}; + +static gr_scheduler_sptr +make_scheduler(gr_flat_flowgraph_sptr ffg) +{ + static scheduler_maker factory = 0; + + if (factory == 0){ + char *v = getenv("GR_SCHEDULER"); + if (!v) + factory = scheduler_table[0].f; // use default + else { + for (size_t i = 0; i < sizeof(scheduler_table)/sizeof(scheduler_table[0]); i++){ + if (strcmp(v, scheduler_table[i].name) == 0){ + factory = scheduler_table[i].f; + break; + } + } + if (factory == 0){ + std::cerr << "warning: Invalid GR_SCHEDULER environment variable value \"" + << v << "\". Using \"" << scheduler_table[0].name << "\"\n"; + factory = scheduler_table[0].f; + } + } + } + return factory(ffg); +} + + +gr_top_block_impl::gr_top_block_impl(gr_top_block *owner) + : d_owner(owner), d_ffg(), + d_state(IDLE), d_lock_count(0) +{ +} + +gr_top_block_impl::~gr_top_block_impl() +{ + d_owner = 0; +} + +void +gr_top_block_impl::start() +{ + gr_lock_guard l(d_mutex); + + if (d_state != IDLE) + throw std::runtime_error("top_block::start: top block already running or wait() not called after previous stop()"); + + if (d_lock_count > 0) + throw std::runtime_error("top_block::start: can't start with flow graph locked"); + + // Create new flat flow graph by flattening hierarchy + d_ffg = d_owner->flatten(); + + // Validate new simple flow graph and wire it up + d_ffg->validate(); + d_ffg->setup_connections(); + + d_scheduler = make_scheduler(d_ffg); + d_state = RUNNING; +} + +void +gr_top_block_impl::stop() +{ + if (d_scheduler) + d_scheduler->stop(); +} + + +void +gr_top_block_impl::wait() +{ + if (d_scheduler) + d_scheduler->wait(); + + d_state = IDLE; +} + +// N.B. lock() and unlock() cannot be called from a flow graph thread or +// deadlock will occur when reconfiguration happens +void +gr_top_block_impl::lock() +{ + gr_lock_guard lock(d_mutex); + d_lock_count++; +} + +void +gr_top_block_impl::unlock() +{ + gr_lock_guard lock(d_mutex); + + if (d_lock_count <= 0){ + d_lock_count = 0; // fix it, then complain + throw std::runtime_error("unpaired unlock() call"); + } + + d_lock_count--; + if (d_lock_count > 0 || d_state == IDLE) // nothing to do + return; + + restart(); +} + +/* + * restart is called with d_mutex held + */ +void +gr_top_block_impl::restart() +{ + stop(); // Stop scheduler and wait for completion + wait(); + + // Create new simple flow graph + gr_flat_flowgraph_sptr new_ffg = d_owner->flatten(); + new_ffg->validate(); // check consistency, sanity, etc + new_ffg->merge_connections(d_ffg); // reuse buffers, etc + d_ffg = new_ffg; + + // Create a new scheduler to execute it + d_scheduler = make_scheduler(d_ffg); + d_state = RUNNING; +} + +void +gr_top_block_impl::dump() +{ + if (d_ffg) + d_ffg->dump(); +} diff --git a/gnuradio-core/src/lib/runtime/gr_top_block_impl.h b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h new file mode 100644 index 00000000..35fb44ef --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_top_block_impl.h @@ -0,0 +1,80 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifndef INCLUDED_GR_TOP_BLOCK_IMPL_H +#define INCLUDED_GR_TOP_BLOCK_IMPL_H + +#include +#include + +typedef boost::mutex gr_mutex; // FIXME move these elsewhere +typedef boost::lock_guard gr_lock_guard; + +/*! + *\brief Abstract implementation details of gr_top_block + * \ingroup internal + * + * The actual implementation of gr_top_block. Separate class allows + * decoupling of changes from dependent classes. + * + */ +class gr_top_block_impl +{ +public: + gr_top_block_impl(gr_top_block *owner); + ~gr_top_block_impl(); + + // Create and start scheduler threads + void start(); + + // Signal scheduler threads to stop + void stop(); + + // Wait for scheduler threads to exit + void wait(); + + // Lock the top block to allow reconfiguration + void lock(); + + // Unlock the top block at end of reconfiguration + void unlock(); + + // Dump the flowgraph to stdout + void dump(); + +protected: + + enum tb_state { IDLE, RUNNING }; + + gr_top_block *d_owner; + gr_flat_flowgraph_sptr d_ffg; + gr_scheduler_sptr d_scheduler; + + gr_mutex d_mutex; // protects d_state and d_lock_count + tb_state d_state; + int d_lock_count; + +private: + void restart(); +}; + +#endif /* INCLUDED_GR_TOP_BLOCK_IMPL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc b/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc new file mode 100644 index 00000000..02e8deed --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_tpb_detail.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + +/* + * We assume that no worker threads are ever running when the + * graph structure is being manipulated, thus it's safe for us to poke + * around in our neighbors w/o holding any locks. + */ + +void +gr_tpb_detail::notify_upstream(gr_block_detail *d) +{ + // For each of our inputs, tell the guy upstream that we've consumed + // some input, and that he most likely has more output buffer space + // available. + + for (size_t i = 0; i < d->d_input.size(); i++){ + // Can you say, "pointer chasing?" + d->d_input[i]->buffer()->link()->detail()->d_tpb.set_output_changed(); + } +} + +void +gr_tpb_detail::notify_downstream(gr_block_detail *d) +{ + // For each of our outputs, tell the guys downstream that they have + // new input available. + + for (size_t i = 0; i < d->d_output.size(); i++){ + gr_buffer_sptr buf = d->d_output[i]; + for (size_t j = 0, k = buf->nreaders(); j < k; j++) + buf->reader(j)->link()->detail()->d_tpb.set_input_changed(); + } +} + +void +gr_tpb_detail::notify_neighbors(gr_block_detail *d) +{ + notify_downstream(d); + notify_upstream(d); +} diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_detail.h b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h new file mode 100644 index 00000000..9566312d --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_tpb_detail.h @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_TPB_DETAIL_H +#define INCLUDED_GR_TPB_DETAIL_H + +#include + +class gr_block_detail; + +/*! + * \brief used by thread-per-block scheduler + */ +struct gr_tpb_detail { + typedef boost::unique_lock scoped_lock; + + boost::mutex mutex; //< protects all vars + bool input_changed; + boost::condition_variable input_cond; + bool output_changed; + boost::condition_variable output_cond; + + gr_tpb_detail() + : input_changed(false), output_changed(false) {} + + + //! Called by us to tell all our upstream blocks that their output may have changed. + void notify_upstream(gr_block_detail *d); + + //! Called by us to tell all our downstream blocks that their input may have changed. + void notify_downstream(gr_block_detail *d); + + //! Called by us to notify both upstream and downstream + void notify_neighbors(gr_block_detail *d); + + //! Called by us + void clear_changed() + { + scoped_lock guard(mutex); + input_changed = false; + output_changed = false; + } + +private: + + //! Used by notify_downstream + void set_input_changed() + { + scoped_lock guard(mutex); + input_changed = true; + input_cond.notify_one(); + } + + //! Used by notify_upstream + void set_output_changed() + { + scoped_lock guard(mutex); + output_changed = true; + output_cond.notify_one(); + } + +}; + +#endif /* INCLUDED_GR_TPB_DETAIL_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc new file mode 100644 index 00000000..e3abf6d8 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.cc @@ -0,0 +1,79 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + +gr_tpb_thread_body::gr_tpb_thread_body(gr_block_sptr block) + : d_exec(block) +{ + // std::cerr << "gr_tpb_thread_body: " << block << std::endl; + + gr_block_detail *d = block->detail().get(); + gr_block_executor::state s; + + while (1){ + boost::this_thread::interruption_point(); + + d->d_tpb.clear_changed(); + s = d_exec.run_one_iteration(); + + switch(s){ + case gr_block_executor::READY: // Tell neighbors we made progress. + d->d_tpb.notify_neighbors(d); + break; + + case gr_block_executor::READY_NO_OUTPUT: // Notify upstream only + d->d_tpb.notify_upstream(d); + break; + + case gr_block_executor::DONE: // Game over. + d->d_tpb.notify_neighbors(d); + return; + + case gr_block_executor::BLKD_IN: // Wait for input. + { + gr_tpb_detail::scoped_lock guard(d->d_tpb.mutex); + while(!d->d_tpb.input_changed) + d->d_tpb.input_cond.wait(guard); + } + break; + + case gr_block_executor::BLKD_OUT: // Wait for output buffer space. + { + gr_tpb_detail::scoped_lock guard(d->d_tpb.mutex); + while(!d->d_tpb.output_changed) + d->d_tpb.output_cond.wait(guard); + } + break; + + default: + assert(0); + } + } +} + +gr_tpb_thread_body::~gr_tpb_thread_body() +{ +} diff --git a/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h new file mode 100644 index 00000000..a630b1be --- /dev/null +++ b/gnuradio-core/src/lib/runtime/gr_tpb_thread_body.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GR_TPB_THREAD_BODY_H +#define INCLUDED_GR_TPB_THREAD_BODY_H + +#include +#include +#include + +/*! + * \brief The body of each thread-per-block thread. + * + * One of these is instantiated in its own thread for each block. The + * constructor turns into the main loop which returns when the block is + * done or is interrupted. + */ + +class gr_tpb_thread_body { + gr_block_executor d_exec; + +public: + gr_tpb_thread_body(gr_block_sptr block); + ~gr_tpb_thread_body(); +}; + + +#endif /* INCLUDED_GR_TPB_THREAD_BODY_H */ diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc index a7022961..abcf5b2a 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.cc @@ -28,6 +28,7 @@ #include #include #include +#include #include // all the factories we know about diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h index c224b785..a73a1559 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf.h @@ -27,6 +27,7 @@ /*! * \brief abstract class to implement doubly mapped virtual memory circular buffers + * \ingroup internal */ class gr_vmcircbuf { protected: diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h index c866e80e..9276ae98 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_createfilemapping.h @@ -30,6 +30,7 @@ #endif /*! * \brief concrete class to implement circular buffers with mmap and shm_open + * \ingroup internal */ class gr_vmcircbuf_createfilemapping : public gr_vmcircbuf { diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h index 1444a68d..238f4441 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_shm_open.h @@ -27,6 +27,7 @@ /*! * \brief concrete class to implement circular buffers with mmap and shm_open + * \ingroup internal */ class gr_vmcircbuf_mmap_shm_open : public gr_vmcircbuf { public: diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc index 173b3f73..faae4b39 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.cc @@ -41,7 +41,6 @@ #include #include - gr_vmcircbuf_mmap_tmpfile::gr_vmcircbuf_mmap_tmpfile (int size) : gr_vmcircbuf (size) { diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h index 5c84dd69..e5be5276 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_mmap_tmpfile.h @@ -27,6 +27,7 @@ /*! * \brief concrete class to implement circular buffers with mmap and shm_open + * \ingroup internal */ class gr_vmcircbuf_mmap_tmpfile : public gr_vmcircbuf { public: diff --git a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h index d5f739ae..cc87f8fe 100644 --- a/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h +++ b/gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.h @@ -27,6 +27,7 @@ /*! * \brief concrete class to implement circular buffers with mmap and shm_open + * \ingroup internal */ class gr_vmcircbuf_sysv_shm : public gr_vmcircbuf { public: diff --git a/gnuradio-core/src/lib/runtime/qa_gr_block.cc b/gnuradio-core/src/lib/runtime/qa_gr_block.cc index de721e53..ea3f3e14 100644 --- a/gnuradio-core/src/lib/runtime/qa_gr_block.cc +++ b/gnuradio-core/src/lib/runtime/qa_gr_block.cc @@ -25,7 +25,6 @@ #endif #include #include -#include #include #include #include @@ -43,7 +42,7 @@ qa_gr_block::t0 () CPPUNIT_ASSERT_EQUAL (0, src1->input_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL (1, src1->output_signature()->min_streams ()); CPPUNIT_ASSERT_EQUAL (1, src1->output_signature()->max_streams ()); - CPPUNIT_ASSERT_EQUAL (sizeof (int), + CPPUNIT_ASSERT_EQUAL ((int) sizeof(int), src1->output_signature()->sizeof_stream_item (0)); gr_block_sptr src2 (gr_make_null_source (sizeof (short))); @@ -51,7 +50,7 @@ qa_gr_block::t0 () CPPUNIT_ASSERT_EQUAL (0, src2->input_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL (1, src2->output_signature()->min_streams ()); CPPUNIT_ASSERT_EQUAL (1, src2->output_signature()->max_streams ()); - CPPUNIT_ASSERT_EQUAL (sizeof (short), + CPPUNIT_ASSERT_EQUAL ((int) sizeof (short), src2->output_signature()->sizeof_stream_item (0)); } @@ -64,7 +63,7 @@ qa_gr_block::t1 () CPPUNIT_ASSERT_EQUAL (std::string ("null_sink"), dst1->name ()); CPPUNIT_ASSERT_EQUAL (1, dst1->input_signature()->min_streams ()); CPPUNIT_ASSERT_EQUAL (1, dst1->input_signature()->max_streams ()); - CPPUNIT_ASSERT_EQUAL (sizeof (int), + CPPUNIT_ASSERT_EQUAL ((int) sizeof (int), dst1->input_signature()->sizeof_stream_item (0)); CPPUNIT_ASSERT_EQUAL (0, dst1->output_signature()->max_streams ()); @@ -73,7 +72,7 @@ qa_gr_block::t1 () CPPUNIT_ASSERT_EQUAL (std::string ("null_sink"), dst2->name ()); CPPUNIT_ASSERT_EQUAL (1, dst2->input_signature()->min_streams ()); CPPUNIT_ASSERT_EQUAL (1, dst2->input_signature()->max_streams ()); - CPPUNIT_ASSERT_EQUAL (sizeof (short), + CPPUNIT_ASSERT_EQUAL ((int) sizeof (short), dst2->input_signature()->sizeof_stream_item (0)); CPPUNIT_ASSERT_EQUAL (0, dst2->output_signature()->max_streams ()); } diff --git a/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc b/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc index ad40f724..7434cf65 100644 --- a/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc +++ b/gnuradio-core/src/lib/runtime/qa_gr_buffer.cc @@ -52,7 +52,7 @@ t0_body () int nitems = 4000 / sizeof (int); int counter = 0; - gr_buffer_sptr buf (gr_make_buffer (nitems, sizeof (int))); + gr_buffer_sptr buf(gr_make_buffer(nitems, sizeof (int), gr_block_sptr())); int last_sa; int sa; @@ -87,8 +87,8 @@ t1_body () int write_counter = 0; int read_counter = 0; - gr_buffer_sptr buf (gr_make_buffer (nitems, sizeof (int))); - gr_buffer_reader_sptr r1 (gr_buffer_add_reader (buf, 0)); + gr_buffer_sptr buf(gr_make_buffer(nitems, sizeof (int), gr_block_sptr())); + gr_buffer_reader_sptr r1 (gr_buffer_add_reader (buf, 0, gr_block_sptr())); int sa; @@ -162,8 +162,8 @@ t2_body () int nitems = (64 * (1L << 10)) / sizeof (int); // 64K worth of ints - gr_buffer_sptr buf (gr_make_buffer (nitems, sizeof (int))); - gr_buffer_reader_sptr r1 (gr_buffer_add_reader (buf, 0)); + gr_buffer_sptr buf(gr_make_buffer (nitems, sizeof (int), gr_block_sptr())); + gr_buffer_reader_sptr r1 (gr_buffer_add_reader (buf, 0, gr_block_sptr())); int read_counter = 0; int write_counter = 0; @@ -229,7 +229,7 @@ t3_body () int nitems = (64 * (1L << 10)) / sizeof (int); static const int N = 5; - gr_buffer_sptr buf (gr_make_buffer (nitems, sizeof (int))); + gr_buffer_sptr buf(gr_make_buffer(nitems, sizeof (int), gr_block_sptr())); gr_buffer_reader_sptr reader[N]; int read_counter[N]; int write_counter = 0; @@ -237,7 +237,7 @@ t3_body () for (int i = 0; i < N; i++){ read_counter[i] = 0; - reader[i] = gr_buffer_add_reader (buf, 0); + reader[i] = gr_buffer_add_reader (buf, 0, gr_block_sptr()); } for (int lc = 0; lc < 1000; lc++){ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_flowgraph.cc b/gnuradio-core/src/lib/runtime/qa_gr_flowgraph.cc new file mode 100644 index 00000000..c883c167 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_flowgraph.cc @@ -0,0 +1,245 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +void qa_gr_flowgraph::t0() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + CPPUNIT_ASSERT(fg); +} + +void qa_gr_flowgraph::t1_connect() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); +} + +void qa_gr_flowgraph::t2_connect_invalid_src_port_neg() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + CPPUNIT_ASSERT_THROW(fg->connect(nop1, -1, nop2, 0), std::invalid_argument); +} + +void qa_gr_flowgraph::t3_connect_src_port_exceeds() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + CPPUNIT_ASSERT_THROW(fg->connect(src, 1, dst, 0), std::invalid_argument); +} + +void qa_gr_flowgraph::t4_connect_invalid_dst_port_neg() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + CPPUNIT_ASSERT_THROW(fg->connect(nop1, 0, nop2, -1), std::invalid_argument); +} + +void qa_gr_flowgraph::t5_connect_dst_port_exceeds() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + CPPUNIT_ASSERT_THROW(fg->connect(src, 0, dst, 1), std::invalid_argument); +} + +void qa_gr_flowgraph::t6_connect_dst_in_use() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr src1 = gr_make_null_source(sizeof(int)); + gr_block_sptr src2 = gr_make_null_source(sizeof(int)); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + fg->connect(src1, 0, dst, 0); + CPPUNIT_ASSERT_THROW(fg->connect(src2, 0, dst, 0), std::invalid_argument); +} + +void qa_gr_flowgraph::t7_connect_one_src_two_dst() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr dst1 = gr_make_null_sink(sizeof(int)); + gr_block_sptr dst2 = gr_make_null_sink(sizeof(int)); + + fg->connect(src, 0, dst1, 0); + fg->connect(src, 0, dst2, 0); +} + +void qa_gr_flowgraph::t8_connect_type_mismatch() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(char)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + CPPUNIT_ASSERT_THROW(fg->connect(nop1, 0, nop2, 0), std::invalid_argument); +} + +void qa_gr_flowgraph::t9_disconnect() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + fg->disconnect(nop1, 0, nop2, 0); +} + +void qa_gr_flowgraph::t10_disconnect_unconnected_block() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + gr_block_sptr nop3 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + CPPUNIT_ASSERT_THROW(fg->disconnect(nop1, 0, nop3, 0), std::invalid_argument); +} + +void qa_gr_flowgraph::t11_disconnect_unconnected_port() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + CPPUNIT_ASSERT_THROW(fg->disconnect(nop1, 0, nop2, 1), std::invalid_argument); +} + +void qa_gr_flowgraph::t12_validate() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + fg->validate(); +} + +void qa_gr_flowgraph::t13_validate_missing_input_assignment() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + fg->connect(nop1, 0, nop2, 2); + CPPUNIT_ASSERT_THROW(fg->validate(), std::runtime_error); +} + +void qa_gr_flowgraph::t14_validate_missing_output_assignment() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + fg->connect(nop1, 2, nop2, 1); + CPPUNIT_ASSERT_THROW(fg->validate(), std::runtime_error); +} + +void qa_gr_flowgraph::t15_clear() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop1 = gr_make_nop(sizeof(int)); + gr_block_sptr nop2 = gr_make_nop(sizeof(int)); + + fg->connect(nop1, 0, nop2, 0); + + CPPUNIT_ASSERT(fg->edges().size() == 1); + CPPUNIT_ASSERT(fg->calc_used_blocks().size() == 2); + + fg->clear(); + + CPPUNIT_ASSERT(fg->edges().size() == 0); + CPPUNIT_ASSERT(fg->calc_used_blocks().size() == 0); +} + +void qa_gr_flowgraph::t16_partition() +{ + gr_flowgraph_sptr fg = gr_make_flowgraph(); + + gr_block_sptr nop11 = gr_make_nop(sizeof(int)); + gr_block_sptr nop12 = gr_make_nop(sizeof(int)); + gr_block_sptr nop13 = gr_make_nop(sizeof(int)); + gr_block_sptr nop14 = gr_make_nop(sizeof(int)); + + gr_block_sptr nop21 = gr_make_nop(sizeof(int)); + gr_block_sptr nop22 = gr_make_nop(sizeof(int)); + gr_block_sptr nop23 = gr_make_nop(sizeof(int)); + + gr_block_sptr nop31 = gr_make_nop(sizeof(int)); + gr_block_sptr nop32 = gr_make_nop(sizeof(int)); + + // Build disjoint graph #1 + fg->connect(nop11, 0, nop12, 0); + fg->connect(nop12, 0, nop13, 0); + fg->connect(nop13, 0, nop14, 0); + + // Build disjoint graph #2 + fg->connect(nop21, 0, nop22, 0); + fg->connect(nop22, 0, nop23, 0); + + // Build disjoint graph #3 + fg->connect(nop31, 0, nop32, 0); + + std::vector graphs = fg->partition(); + + CPPUNIT_ASSERT(graphs.size() == 3); + CPPUNIT_ASSERT(graphs[0].size() == 4); + CPPUNIT_ASSERT(graphs[1].size() == 3); + CPPUNIT_ASSERT(graphs[2].size() == 2); +} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_flowgraph.h b/gnuradio-core/src/lib/runtime/qa_gr_flowgraph.h new file mode 100644 index 00000000..2253afcc --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_flowgraph.h @@ -0,0 +1,75 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_QA_GR_FLOWGRAPH_H +#define INCLUDED_QA_GR_FLOWGRAPH_H + +#include +#include +#include + +class qa_gr_flowgraph : public CppUnit::TestCase +{ + CPPUNIT_TEST_SUITE(qa_gr_flowgraph); + + CPPUNIT_TEST(t0); + CPPUNIT_TEST(t1_connect); + CPPUNIT_TEST(t2_connect_invalid_src_port_neg); + CPPUNIT_TEST(t3_connect_src_port_exceeds); + CPPUNIT_TEST(t4_connect_invalid_dst_port_neg); + CPPUNIT_TEST(t5_connect_dst_port_exceeds); + CPPUNIT_TEST(t6_connect_dst_in_use); + CPPUNIT_TEST(t7_connect_one_src_two_dst); + CPPUNIT_TEST(t8_connect_type_mismatch); + CPPUNIT_TEST(t9_disconnect); + CPPUNIT_TEST(t10_disconnect_unconnected_block); + CPPUNIT_TEST(t11_disconnect_unconnected_port); + CPPUNIT_TEST(t12_validate); + CPPUNIT_TEST(t13_validate_missing_input_assignment); + CPPUNIT_TEST(t14_validate_missing_output_assignment); + CPPUNIT_TEST(t15_clear); + CPPUNIT_TEST(t16_partition); + + CPPUNIT_TEST_SUITE_END(); + +private: + + void t0(); + void t1_connect(); + void t2_connect_invalid_src_port_neg(); + void t3_connect_src_port_exceeds(); + void t4_connect_invalid_dst_port_neg(); + void t5_connect_dst_port_exceeds(); + void t6_connect_dst_in_use(); + void t7_connect_one_src_two_dst(); + void t8_connect_type_mismatch(); + void t9_disconnect(); + void t10_disconnect_unconnected_block(); + void t11_disconnect_unconnected_port(); + void t12_validate(); + void t13_validate_missing_input_assignment(); + void t14_validate_missing_output_assignment(); + void t15_clear(); + void t16_partition(); +}; + +#endif /* INCLUDED_QA_GR_FLOWGRAPH_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_hier_block2.cc b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2.cc new file mode 100644 index 00000000..d9d89ce2 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2.cc @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008,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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +void qa_gr_hier_block2::test_make() +{ + gr_hier_block2_sptr src1(gr_make_hier_block2("test", + gr_make_io_signature(1, 1, 1 * sizeof(int)), + gr_make_io_signature(1, 1, 1 * sizeof(int)))); + + CPPUNIT_ASSERT(src1); + CPPUNIT_ASSERT_EQUAL(std::string("test"), src1->name()); + + CPPUNIT_ASSERT_EQUAL(1 * (int) sizeof(int), + src1->input_signature()->sizeof_stream_item(0)); + + CPPUNIT_ASSERT_EQUAL(1, src1->input_signature()->min_streams()); + CPPUNIT_ASSERT_EQUAL(1, src1->input_signature()->max_streams()); + + + CPPUNIT_ASSERT_EQUAL(1 * (int) sizeof(int), + src1->output_signature()->sizeof_stream_item(0)); + + CPPUNIT_ASSERT_EQUAL(1, src1->output_signature()->min_streams()); + CPPUNIT_ASSERT_EQUAL(1, src1->output_signature()->max_streams()); + +} + + diff --git a/gnuradio-core/src/lib/runtime/qa_gr_hier_block2.h b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2.h new file mode 100644 index 00000000..3870b9f0 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_QA_GR_HIER_BLOCK2_H +#define INCLUDED_QA_GR_HIER_BLOCK2_H + +#include +#include +#include + +class qa_gr_hier_block2 : public CppUnit::TestCase +{ + CPPUNIT_TEST_SUITE(qa_gr_hier_block2); + + CPPUNIT_TEST(test_make); + + CPPUNIT_TEST_SUITE_END(); + +private: + void test_make(); +}; + +#endif /* INCLUDED_QA_GR_HIER_BLOCK2_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.cc b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.cc new file mode 100644 index 00000000..fe5f3a75 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.cc @@ -0,0 +1,87 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +// Declare a test C++ hierarchical block + +class gr_derived_block; +typedef boost::shared_ptr gr_derived_block_sptr; +gr_derived_block_sptr gr_make_derived_block(); + +class gr_derived_block : public gr_hier_block2 +{ +private: + friend gr_derived_block_sptr gr_make_derived_block(); + gr_derived_block(); + +public: + ~gr_derived_block(); +}; + + +gr_derived_block_sptr +gr_make_derived_block() +{ + return gnuradio::get_initial_sptr(new gr_derived_block()); +} + +gr_derived_block::gr_derived_block() + : gr_hier_block2("gr_derived_block", + gr_make_io_signature(1, 1, sizeof(int)), // Input signature + gr_make_io_signature(1, 1, sizeof(int))) // Output signature +{ + gr_block_sptr copy(gr_make_kludge_copy(sizeof(int))); + + connect(self(), 0, copy, 0); + connect(copy, 0, self(), 0); +} + +gr_derived_block::~gr_derived_block() +{ +} + +void qa_gr_hier_block2_derived::test_1() +{ + gr_top_block_sptr tb(gr_make_top_block("test")); + + gr_block_sptr src(gr_make_null_source(sizeof(int))); + gr_block_sptr head(gr_make_head(sizeof(int), 1000)); + gr_derived_block_sptr blk(gr_make_derived_block()); + gr_block_sptr dst(gr_make_null_sink(sizeof(int))); + + tb->connect(src, 0, head, 0); + tb->connect(head, 0, blk, 0); + tb->connect(blk, 0, dst, 0); + + tb->run(); +} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.h b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.h new file mode 100644 index 00000000..5a27b1b2 --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_hier_block2_derived.h @@ -0,0 +1,41 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifndef INCLUDED_QA_GR_HIER_BLOCK2_DERIVED_H +#define INCLUDED_QA_GR_HIER_BLOCK2_DERIVED_H + +#include +#include +#include + +// Declare a QA test case +class qa_gr_hier_block2_derived : public CppUnit::TestCase +{ + CPPUNIT_TEST_SUITE(qa_gr_hier_block2_derived); + CPPUNIT_TEST(test_1); + CPPUNIT_TEST_SUITE_END(); + +private: + void test_1(); +}; + +#endif /* INCLUDED_QA_GR_HIER_BLOCK2_DERIVED_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc b/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc index f66aafdc..07abe10b 100644 --- a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc +++ b/gnuradio-core/src/lib/runtime/qa_gr_io_signature.cc @@ -45,11 +45,20 @@ qa_gr_io_signature::t2 () gr_make_io_signature (3, gr_io_signature::IO_INFINITE, sizeof (int)); CPPUNIT_ASSERT_EQUAL (p->min_streams (), 3); - CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item (0), sizeof (int)); + CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item (0), (int) sizeof (int)); } void qa_gr_io_signature::t3 () { -} + gr_io_signature_sptr p = + gr_make_io_signature3 (0, 5, 1, 2, 3); + CPPUNIT_ASSERT_EQUAL (p->min_streams (), 0); + CPPUNIT_ASSERT_EQUAL (p->max_streams (), 5); + CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(0), 1); + CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(1), 2); + CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(2), 3); + CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(3), 3); + CPPUNIT_ASSERT_EQUAL (p->sizeof_stream_item(4), 3); +} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h b/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h index dce5ed93..02fc9ddc 100644 --- a/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h +++ b/gnuradio-core/src/lib/runtime/qa_gr_io_signature.h @@ -41,7 +41,6 @@ class qa_gr_io_signature : public CppUnit::TestCase { void t1 (); void t2 (); void t3 (); - }; #endif /* INCLUDED_QA_GR_IO_SIGNATURE_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc b/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc new file mode 100644 index 00000000..52677f0d --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_top_block.cc @@ -0,0 +1,121 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#define VERBOSE 0 + +void qa_gr_top_block::t0() +{ + if (VERBOSE) std::cout << "qa_gr_top_block::t0()\n"; + + gr_top_block_sptr tb = gr_make_top_block("top"); + + CPPUNIT_ASSERT(tb); +} + +void qa_gr_top_block::t1_run() +{ + if (VERBOSE) std::cout << "qa_gr_top_block::t1()\n"; + + gr_top_block_sptr tb = gr_make_top_block("top"); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr head = gr_make_head(sizeof(int), 100000); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + tb->connect(src, 0, head, 0); + tb->connect(head, 0, dst, 0); + tb->run(); +} + +void qa_gr_top_block::t2_start_stop_wait() +{ + if (VERBOSE) std::cout << "qa_gr_top_block::t2()\n"; + + gr_top_block_sptr tb = gr_make_top_block("top"); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr head = gr_make_head(sizeof(int), 100000); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + tb->connect(src, 0, head, 0); + tb->connect(head, 0, dst, 0); + + tb->start(); + tb->stop(); + tb->wait(); +} + +void qa_gr_top_block::t3_lock_unlock() +{ + if (VERBOSE) std::cout << "qa_gr_top_block::t3()\n"; + + gr_top_block_sptr tb = gr_make_top_block("top"); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + tb->connect(src, 0, dst, 0); + + tb->start(); + + tb->lock(); + tb->unlock(); + + tb->stop(); + tb->wait(); +} + +void qa_gr_top_block::t4_reconfigure() +{ + if (VERBOSE) std::cout << "qa_gr_top_block::t4()\n"; + + gr_top_block_sptr tb = gr_make_top_block("top"); + + gr_block_sptr src = gr_make_null_source(sizeof(int)); + gr_block_sptr head = gr_make_head(sizeof(int), 100000); + gr_block_sptr dst = gr_make_null_sink(sizeof(int)); + + // Start infinite flowgraph + tb->connect(src, 0, dst, 0); + tb->start(); + + // Reconfigure with gr_head in the middle + tb->lock(); + tb->disconnect(src, 0, dst, 0); + tb->connect(src, 0, head, 0); + tb->connect(head, 0, dst, 0); + tb->unlock(); + + // Wait for flowgraph to end on its own + tb->wait(); +} diff --git a/gnuradio-core/src/lib/runtime/qa_gr_top_block.h b/gnuradio-core/src/lib/runtime/qa_gr_top_block.h new file mode 100644 index 00000000..278b5ffb --- /dev/null +++ b/gnuradio-core/src/lib/runtime/qa_gr_top_block.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifndef INCLUDED_QA_GR_TOP_BLOCK_H +#define INCLUDED_QA_GR_TOP_BLOCK_H + +#include +#include +#include + +class qa_gr_top_block : public CppUnit::TestCase +{ + CPPUNIT_TEST_SUITE(qa_gr_top_block); + + CPPUNIT_TEST(t0); + CPPUNIT_TEST(t1_run); + CPPUNIT_TEST(t2_start_stop_wait); + CPPUNIT_TEST(t3_lock_unlock); + CPPUNIT_TEST(t4_reconfigure); // triggers 'join never returns' bug + + CPPUNIT_TEST_SUITE_END(); + +private: + + void t0(); + void t1_run(); + void t2_start_stop_wait(); + void t3_lock_unlock(); + void t4_reconfigure(); +}; + +#endif /* INCLUDED_QA_GR_TOP_BLOCK_H */ diff --git a/gnuradio-core/src/lib/runtime/qa_runtime.cc b/gnuradio-core/src/lib/runtime/qa_runtime.cc index 09083ece..31e3a82d 100644 --- a/gnuradio-core/src/lib/runtime/qa_runtime.cc +++ b/gnuradio-core/src/lib/runtime/qa_runtime.cc @@ -1,5 +1,5 @@ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -33,6 +33,10 @@ #include #include #include +#include +#include +#include +#include #include CppUnit::TestSuite * @@ -43,6 +47,10 @@ qa_runtime::suite () s->addTest (qa_gr_vmcircbuf::suite ()); s->addTest (qa_gr_io_signature::suite ()); s->addTest (qa_gr_block::suite ()); + s->addTest (qa_gr_flowgraph::suite ()); + s->addTest (qa_gr_top_block::suite ()); + s->addTest (qa_gr_hier_block2::suite ()); + s->addTest (qa_gr_hier_block2_derived::suite ()); s->addTest (qa_gr_buffer::suite ()); return s; diff --git a/gnuradio-core/src/lib/runtime/runtime.i b/gnuradio-core/src/lib/runtime/runtime.i index 601cd6b0..20cf68a0 100644 --- a/gnuradio-core/src/lib/runtime/runtime.i +++ b/gnuradio-core/src/lib/runtime/runtime.i @@ -21,11 +21,12 @@ */ %{ -#include +#include #include #include #include #include +#include #include #include #include @@ -33,12 +34,18 @@ #include #include #include +#include +#include +#include +#include %} %include %include +%include %include %include +%include %include %include %include @@ -47,3 +54,7 @@ %include %include %include +%include +%include +%include +%include diff --git a/gnuradio-core/src/lib/swig/Makefile.am b/gnuradio-core/src/lib/swig/Makefile.am index f8d9297e..75b152dc 100644 --- a/gnuradio-core/src/lib/swig/Makefile.am +++ b/gnuradio-core/src/lib/swig/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2003,2004,2005 Free Software Foundation, Inc. +# Copyright 2001,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,94 +21,81 @@ include $(top_srcdir)/Makefile.common -# Install this stuff in the gr subdirectory of the python pkg dir. -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio/gr - -grgrpythondir = $(grpythondir)/gr -grgrlibdir = $(grpyexecdir)/gr - - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -I$(srcdir) - +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -I$(srcdir) \ + $(WITH_INCLUDES) EXTRA_DIST = gen-swig-bug-fix - -LOCAL_IFILES = \ +# SWIG headers get installed in ${prefix}/include/gnuradio/swig +swiginclude_HEADERS = \ gnuradio.i \ - shared_ptr.i - -ALL_IFILES = \ - $(LOCAL_IFILES) - - -BUILT_SOURCES = \ - gnuradio_swig_python.cc \ - gnuradio_swig_python.py \ - gnuradio_swig_python.h \ - gnuradio_swig_bug_workaround.h - -grgrpython_PYTHON = \ - gnuradio_swig_python.py - - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(INCLUDES) + gr_swig_block_magic.i \ + gr_shared_ptr.i +# 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 # ---------------------------------------------------------------- -# _gnuradio_swig_python contains all the glue that implements -# the gnuradio.gr python package - -grgrlib_LTLIBRARIES = \ - _gnuradio_swig_python.la - -_gnuradio_swig_python_la_SOURCES = \ - gnuradio_swig_python.cc - - -_gnuradio_swig_python_la_LIBADD = \ - $(GNURADIO_CORE_LA) \ - $(PYTHON_LDFLAGS) \ - -lstdc++ +# FIXME As of swig 1.3.31, this still seems to be required... -_gnuradio_swig_python_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) +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 $@ - -# KLUDGE: Force runtime include of gnuradio_swig_python.d 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@./gnuradio_swig_python.d@am__quote@ - -gnuradio_swig_python.py gnuradio_swig_python.h: gnuradio_swig_python.cc - -gnuradio_swig_python.cc : gnuradio.i - if $(SWIG) $(SWIGPYTHONARGS) -MMD -MF gnuradio_swig_python.Td -module gnuradio_swig_python -o gnuradio_swig_python.cc gnuradio.i ;\ - then if test $(host_os) = mingw32; \ - then sed 's,\\\\,/,g' gnuradio_swig_python.d; rm -f gnuradio_swig_python.Td; \ - else mv -f gnuradio_swig_python.Td gnuradio_swig_python.d; fi \ - else rm -f gnuradio_swig_python.Td; exit 1; fi - - -gnuradio_swig_bug_workaround.h : gnuradio_swig_python.cc $(srcdir)/gen-swig-bug-fix - $(PYTHON) $(srcdir)/gen-swig-bug-fix gnuradio_swig_python.cc $@ - - -# ---------------------------------------------------------------- - -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done - - -grinclude_HEADERS = \ +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ gnuradio_swig_bug_workaround.h -swiginclude_HEADERS = \ - $(LOCAL_IFILES) - -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# ---------------------------------------------------------------- +# 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! +# ---------------------------------------------------------------- -DISTCLEANFILES = gnuradio_swig_python.d +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 + +# 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 + +# 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 + +# 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) + +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gnuradio-core/src/lib/swig/Makefile.in b/gnuradio-core/src/lib/swig/Makefile.in index cffaac44..d2819569 100644 --- a/gnuradio-core/src/lib/swig/Makefile.in +++ b/gnuradio-core/src/lib/swig/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2003,2004,2005 Free Software Foundation, Inc. +# Copyright 2001,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 gnuradio_swig_py_runtime.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,30 +123,53 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grgrpython_PYTHON) $(grinclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(gnuradio_swig_py_filter_python_PYTHON) \ + $(gnuradio_swig_py_filter_swiginclude_HEADERS) \ + $(gnuradio_swig_py_general_python_PYTHON) \ + $(gnuradio_swig_py_general_swiginclude_HEADERS) \ + $(gnuradio_swig_py_gengen_python_PYTHON) \ + $(gnuradio_swig_py_gengen_swiginclude_HEADERS) \ + $(gnuradio_swig_py_hier_python_PYTHON) \ + $(gnuradio_swig_py_hier_swiginclude_HEADERS) \ + $(gnuradio_swig_py_io_python_PYTHON) \ + $(gnuradio_swig_py_io_swiginclude_HEADERS) \ + $(gnuradio_swig_py_runtime_python_PYTHON) \ + $(gnuradio_swig_py_runtime_swiginclude_HEADERS) \ + $(grinclude_HEADERS) $(ourpython_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig subdir = gnuradio-core/src/lib/swig ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +178,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -140,47 +225,156 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(grgrlibdir)" \ - "$(DESTDIR)$(grgrpythondir)" "$(DESTDIR)$(grincludedir)" \ - "$(DESTDIR)$(swigincludedir)" -grgrlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(grgrlib_LTLIBRARIES) -am__DEPENDENCIES_1 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la -am__DEPENDENCIES_2 = -_gnuradio_swig_python_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +am__installdirs = "$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)" \ + "$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)" \ + "$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)" \ + "$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)" \ + "$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)" \ + "$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)" \ + "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)" \ + "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)" \ + "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)" \ + "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)" \ + "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)" \ + "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)" \ + "$(DESTDIR)$(ourpythondir)" \ + "$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)" \ + "$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)" \ + "$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)" \ + "$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)" \ + "$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)" \ + "$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" +gnuradio_swig_py_filter_pylibLTLIBRARIES_INSTALL = $(INSTALL) +gnuradio_swig_py_general_pylibLTLIBRARIES_INSTALL = $(INSTALL) +gnuradio_swig_py_gengen_pylibLTLIBRARIES_INSTALL = $(INSTALL) +gnuradio_swig_py_hier_pylibLTLIBRARIES_INSTALL = $(INSTALL) +gnuradio_swig_py_io_pylibLTLIBRARIES_INSTALL = $(INSTALL) +gnuradio_swig_py_runtime_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(gnuradio_swig_py_filter_pylib_LTLIBRARIES) \ + $(gnuradio_swig_py_general_pylib_LTLIBRARIES) \ + $(gnuradio_swig_py_gengen_pylib_LTLIBRARIES) \ + $(gnuradio_swig_py_hier_pylib_LTLIBRARIES) \ + $(gnuradio_swig_py_io_pylib_LTLIBRARIES) \ + $(gnuradio_swig_py_runtime_pylib_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +_gnuradio_swig_py_filter_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__gnuradio_swig_py_filter_la_OBJECTS = \ + _gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.lo +_gnuradio_swig_py_filter_la_OBJECTS = \ + $(am__gnuradio_swig_py_filter_la_OBJECTS) +_gnuradio_swig_py_filter_la_LINK = $(LIBTOOL) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gnuradio_swig_py_filter_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gnuradio_swig_py_filter_la_LDFLAGS) $(LDFLAGS) -o $@ +_gnuradio_swig_py_general_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__gnuradio_swig_py_general_la_OBJECTS = \ + _gnuradio_swig_py_general_la-gnuradio_swig_py_general.lo +_gnuradio_swig_py_general_la_OBJECTS = \ + $(am__gnuradio_swig_py_general_la_OBJECTS) +_gnuradio_swig_py_general_la_LINK = $(LIBTOOL) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gnuradio_swig_py_general_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gnuradio_swig_py_general_la_LDFLAGS) $(LDFLAGS) -o $@ +_gnuradio_swig_py_gengen_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__gnuradio_swig_py_gengen_la_OBJECTS = \ + _gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.lo +_gnuradio_swig_py_gengen_la_OBJECTS = \ + $(am__gnuradio_swig_py_gengen_la_OBJECTS) +_gnuradio_swig_py_gengen_la_LINK = $(LIBTOOL) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gnuradio_swig_py_gengen_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gnuradio_swig_py_gengen_la_LDFLAGS) $(LDFLAGS) -o $@ +_gnuradio_swig_py_hier_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) -am__gnuradio_swig_python_la_OBJECTS = gnuradio_swig_python.lo -_gnuradio_swig_python_la_OBJECTS = \ - $(am__gnuradio_swig_python_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +am__gnuradio_swig_py_hier_la_OBJECTS = \ + _gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.lo +_gnuradio_swig_py_hier_la_OBJECTS = \ + $(am__gnuradio_swig_py_hier_la_OBJECTS) +_gnuradio_swig_py_hier_la_LINK = $(LIBTOOL) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gnuradio_swig_py_hier_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gnuradio_swig_py_hier_la_LDFLAGS) $(LDFLAGS) -o $@ +_gnuradio_swig_py_io_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__gnuradio_swig_py_io_la_OBJECTS = \ + _gnuradio_swig_py_io_la-gnuradio_swig_py_io.lo +_gnuradio_swig_py_io_la_OBJECTS = \ + $(am__gnuradio_swig_py_io_la_OBJECTS) +_gnuradio_swig_py_io_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gnuradio_swig_py_io_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gnuradio_swig_py_io_la_LDFLAGS) $(LDFLAGS) -o $@ +_gnuradio_swig_py_runtime_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__gnuradio_swig_py_runtime_la_OBJECTS = \ + _gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.lo +_gnuradio_swig_py_runtime_la_OBJECTS = \ + $(am__gnuradio_swig_py_runtime_la_OBJECTS) +_gnuradio_swig_py_runtime_la_LINK = $(LIBTOOL) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gnuradio_swig_py_runtime_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gnuradio_swig_py_runtime_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(_gnuradio_swig_python_la_SOURCES) -DIST_SOURCES = $(_gnuradio_swig_python_la_SOURCES) -grgrpythonPYTHON_INSTALL = $(INSTALL_DATA) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_gnuradio_swig_py_filter_la_SOURCES) \ + $(_gnuradio_swig_py_general_la_SOURCES) \ + $(_gnuradio_swig_py_gengen_la_SOURCES) \ + $(_gnuradio_swig_py_hier_la_SOURCES) \ + $(_gnuradio_swig_py_io_la_SOURCES) \ + $(_gnuradio_swig_py_runtime_la_SOURCES) +DIST_SOURCES = $(_gnuradio_swig_py_filter_la_SOURCES) \ + $(_gnuradio_swig_py_general_la_SOURCES) \ + $(_gnuradio_swig_py_gengen_la_SOURCES) \ + $(_gnuradio_swig_py_hier_la_SOURCES) \ + $(_gnuradio_swig_py_io_la_SOURCES) \ + $(_gnuradio_swig_py_runtime_la_SOURCES) +gnuradio_swig_py_filter_pythonPYTHON_INSTALL = $(INSTALL_DATA) +gnuradio_swig_py_general_pythonPYTHON_INSTALL = $(INSTALL_DATA) +gnuradio_swig_py_gengen_pythonPYTHON_INSTALL = $(INSTALL_DATA) +gnuradio_swig_py_hier_pythonPYTHON_INSTALL = $(INSTALL_DATA) +gnuradio_swig_py_io_pythonPYTHON_INSTALL = $(INSTALL_DATA) +gnuradio_swig_py_runtime_pythonPYTHON_INSTALL = $(INSTALL_DATA) +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +gnuradio_swig_py_filter_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +gnuradio_swig_py_general_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +gnuradio_swig_py_gengen_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +gnuradio_swig_py_hier_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +gnuradio_swig_py_io_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +gnuradio_swig_py_runtime_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +HEADERS = $(gnuradio_swig_py_filter_swiginclude_HEADERS) \ + $(gnuradio_swig_py_general_swiginclude_HEADERS) \ + $(gnuradio_swig_py_gengen_swiginclude_HEADERS) \ + $(gnuradio_swig_py_hier_swiginclude_HEADERS) \ + $(gnuradio_swig_py_io_swiginclude_HEADERS) \ + $(gnuradio_swig_py_runtime_swiginclude_HEADERS) \ + $(grinclude_HEADERS) $(swiginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -188,9 +382,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -198,6 +399,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -210,73 +413,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -286,49 +482,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -336,15 +572,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -354,16 +733,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -372,125 +769,435 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/gnuradio_swig_py_runtime-generate-* \ + $(DEPDIR)/gnuradio_swig_py_general-generate-* \ + $(DEPDIR)/gnuradio_swig_py_gengen-generate-* \ + $(DEPDIR)/gnuradio_swig_py_filter-generate-* \ + $(DEPDIR)/gnuradio_swig_py_io-generate-* \ + $(DEPDIR)/gnuradio_swig_py_hier-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* $(DEPDIR)/*.S* $(DEPDIR)/*.S* \ + $(DEPDIR)/*.S* $(DEPDIR)/*.S* $(DEPDIR)/*.S* +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -I$(srcdir) \ + $(WITH_INCLUDES) -# Install this stuff in the gr subdirectory of the python pkg dir. -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio/gr -grgrpythondir = $(grpythondir)/gr -grgrlibdir = $(grpyexecdir)/gr -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -I$(srcdir) EXTRA_DIST = gen-swig-bug-fix -LOCAL_IFILES = \ + +# SWIG headers get installed in ${prefix}/include/gnuradio/swig +swiginclude_HEADERS = \ gnuradio.i \ - shared_ptr.i + gr_swig_block_magic.i \ + gr_shared_ptr.i -ALL_IFILES = \ - $(LOCAL_IFILES) -BUILT_SOURCES = \ - gnuradio_swig_python.cc \ - gnuradio_swig_python.py \ - gnuradio_swig_python.h \ - gnuradio_swig_bug_workaround.h +# 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 -grgrpython_PYTHON = \ - gnuradio_swig_python.py +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gnuradio_swig_bug_workaround.h -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(INCLUDES) # ---------------------------------------------------------------- -# _gnuradio_swig_python contains all the glue that implements -# the gnuradio.gr python package -grgrlib_LTLIBRARIES = \ - _gnuradio_swig_python.la +# 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 + + +# 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 + +# 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) +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ -_gnuradio_swig_python_la_SOURCES = \ - gnuradio_swig_python.cc +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = gnuradio_swig_py_runtime.py \ + gnuradio_swig_py_runtime.cc gnuradio_swig_py_general.py \ + gnuradio_swig_py_general.cc gnuradio_swig_py_gengen.py \ + gnuradio_swig_py_gengen.cc gnuradio_swig_py_filter.py \ + gnuradio_swig_py_filter.cc gnuradio_swig_py_io.py \ + gnuradio_swig_py_io.cc gnuradio_swig_py_hier.py \ + gnuradio_swig_py_hier.cc +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_swig_py_runtime_swigincludedir = $(swigincludedir) +gnuradio_swig_py_runtime_swiginclude_HEADERS = \ + gnuradio_swig_py_runtime.i \ + $(gnuradio_swig_py_runtime_swiginclude_headers) + +gnuradio_swig_py_runtime_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_runtime.la + +_gnuradio_swig_py_runtime_la_SOURCES = \ + gnuradio_swig_py_runtime.cc \ + $(gnuradio_swig_py_runtime_la_swig_sources) + +_gnuradio_swig_py_runtime_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_runtime_la_swig_libadd) + +_gnuradio_swig_py_runtime_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_runtime_la_swig_ldflags) + +_gnuradio_swig_py_runtime_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_runtime_la_swig_cxxflags) + +gnuradio_swig_py_runtime_python_PYTHON = \ + gnuradio_swig_py_runtime.py \ + $(gnuradio_swig_py_runtime_python) + +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_swig_py_general_swigincludedir = $(swigincludedir) +gnuradio_swig_py_general_swiginclude_HEADERS = \ + gnuradio_swig_py_general.i \ + $(gnuradio_swig_py_general_swiginclude_headers) + +gnuradio_swig_py_general_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_general.la + +_gnuradio_swig_py_general_la_SOURCES = \ + gnuradio_swig_py_general.cc \ + $(gnuradio_swig_py_general_la_swig_sources) + +_gnuradio_swig_py_general_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_general_la_swig_libadd) + +_gnuradio_swig_py_general_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_general_la_swig_ldflags) + +_gnuradio_swig_py_general_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_general_la_swig_cxxflags) + +gnuradio_swig_py_general_python_PYTHON = \ + gnuradio_swig_py_general.py \ + $(gnuradio_swig_py_general_python) + +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_swig_py_gengen_swigincludedir = $(swigincludedir) +gnuradio_swig_py_gengen_swiginclude_HEADERS = \ + gnuradio_swig_py_gengen.i \ + $(gnuradio_swig_py_gengen_swiginclude_headers) + +gnuradio_swig_py_gengen_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_gengen.la + +_gnuradio_swig_py_gengen_la_SOURCES = \ + gnuradio_swig_py_gengen.cc \ + $(gnuradio_swig_py_gengen_la_swig_sources) + +_gnuradio_swig_py_gengen_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_gengen_la_swig_libadd) + +_gnuradio_swig_py_gengen_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_gengen_la_swig_ldflags) + +_gnuradio_swig_py_gengen_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_gengen_la_swig_cxxflags) + +gnuradio_swig_py_gengen_python_PYTHON = \ + gnuradio_swig_py_gengen.py \ + $(gnuradio_swig_py_gengen_python) + +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_swig_py_filter_swigincludedir = $(swigincludedir) +gnuradio_swig_py_filter_swiginclude_HEADERS = \ + gnuradio_swig_py_filter.i \ + $(gnuradio_swig_py_filter_swiginclude_headers) + +gnuradio_swig_py_filter_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_filter.la + +_gnuradio_swig_py_filter_la_SOURCES = \ + gnuradio_swig_py_filter.cc \ + $(gnuradio_swig_py_filter_la_swig_sources) + +_gnuradio_swig_py_filter_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_filter_la_swig_libadd) + +_gnuradio_swig_py_filter_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_filter_la_swig_ldflags) + +_gnuradio_swig_py_filter_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_filter_la_swig_cxxflags) + +gnuradio_swig_py_filter_python_PYTHON = \ + gnuradio_swig_py_filter.py \ + $(gnuradio_swig_py_filter_python) + +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_swig_py_io_swigincludedir = $(swigincludedir) +gnuradio_swig_py_io_swiginclude_HEADERS = \ + gnuradio_swig_py_io.i \ + $(gnuradio_swig_py_io_swiginclude_headers) + +gnuradio_swig_py_io_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_io.la + +_gnuradio_swig_py_io_la_SOURCES = \ + gnuradio_swig_py_io.cc \ + $(gnuradio_swig_py_io_la_swig_sources) + +_gnuradio_swig_py_io_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_io_la_swig_libadd) + +_gnuradio_swig_py_io_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_io_la_swig_ldflags) + +_gnuradio_swig_py_io_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_io_la_swig_cxxflags) + +gnuradio_swig_py_io_python_PYTHON = \ + gnuradio_swig_py_io.py \ + $(gnuradio_swig_py_io_python) + +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_swig_py_hier_swigincludedir = $(swigincludedir) +gnuradio_swig_py_hier_swiginclude_HEADERS = \ + gnuradio_swig_py_hier.i \ + $(gnuradio_swig_py_hier_swiginclude_headers) + +gnuradio_swig_py_hier_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_hier.la -_gnuradio_swig_python_la_LIBADD = \ - $(GNURADIO_CORE_LA) \ - $(PYTHON_LDFLAGS) \ - -lstdc++ +_gnuradio_swig_py_hier_la_SOURCES = \ + gnuradio_swig_py_hier.cc \ + $(gnuradio_swig_py_hier_la_swig_sources) -_gnuradio_swig_python_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) -grinclude_HEADERS = \ - gnuradio_swig_bug_workaround.h +_gnuradio_swig_py_hier_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_hier_la_swig_libadd) -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +_gnuradio_swig_py_hier_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_hier_la_swig_ldflags) + +_gnuradio_swig_py_hier_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_hier_la_swig_cxxflags) + +gnuradio_swig_py_hier_python_PYTHON = \ + gnuradio_swig_py_hier.py \ + $(gnuradio_swig_py_hier_python) -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc -DISTCLEANFILES = gnuradio_swig_python.d +# 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) + + +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -514,35 +1221,180 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-grgrlibLTLIBRARIES: $(grgrlib_LTLIBRARIES) +install-gnuradio_swig_py_filter_pylibLTLIBRARIES: $(gnuradio_swig_py_filter_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_filter_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)" + @list='$(gnuradio_swig_py_filter_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_filter_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_filter_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-gnuradio_swig_py_filter_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_filter_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)/$$p"; \ + done + +clean-gnuradio_swig_py_filter_pylibLTLIBRARIES: + -test -z "$(gnuradio_swig_py_filter_pylib_LTLIBRARIES)" || rm -f $(gnuradio_swig_py_filter_pylib_LTLIBRARIES) + @list='$(gnuradio_swig_py_filter_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-gnuradio_swig_py_general_pylibLTLIBRARIES: $(gnuradio_swig_py_general_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(grgrlibdir)" || $(mkdir_p) "$(DESTDIR)$(grgrlibdir)" - @list='$(grgrlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(gnuradio_swig_py_general_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)" + @list='$(gnuradio_swig_py_general_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(grgrlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(grgrlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(grgrlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(grgrlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_general_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_general_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-grgrlibLTLIBRARIES: +uninstall-gnuradio_swig_py_general_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(grgrlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(gnuradio_swig_py_general_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(grgrlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(grgrlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)/$$p"; \ done -clean-grgrlibLTLIBRARIES: - -test -z "$(grgrlib_LTLIBRARIES)" || rm -f $(grgrlib_LTLIBRARIES) - @list='$(grgrlib_LTLIBRARIES)'; for p in $$list; do \ +clean-gnuradio_swig_py_general_pylibLTLIBRARIES: + -test -z "$(gnuradio_swig_py_general_pylib_LTLIBRARIES)" || rm -f $(gnuradio_swig_py_general_pylib_LTLIBRARIES) + @list='$(gnuradio_swig_py_general_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done -_gnuradio_swig_python.la: $(_gnuradio_swig_python_la_OBJECTS) $(_gnuradio_swig_python_la_DEPENDENCIES) - $(CXXLINK) -rpath $(grgrlibdir) $(_gnuradio_swig_python_la_LDFLAGS) $(_gnuradio_swig_python_la_OBJECTS) $(_gnuradio_swig_python_la_LIBADD) $(LIBS) +install-gnuradio_swig_py_gengen_pylibLTLIBRARIES: $(gnuradio_swig_py_gengen_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_gengen_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)" + @list='$(gnuradio_swig_py_gengen_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_gengen_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_gengen_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-gnuradio_swig_py_gengen_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_gengen_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)/$$p"; \ + done + +clean-gnuradio_swig_py_gengen_pylibLTLIBRARIES: + -test -z "$(gnuradio_swig_py_gengen_pylib_LTLIBRARIES)" || rm -f $(gnuradio_swig_py_gengen_pylib_LTLIBRARIES) + @list='$(gnuradio_swig_py_gengen_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-gnuradio_swig_py_hier_pylibLTLIBRARIES: $(gnuradio_swig_py_hier_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_hier_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)" + @list='$(gnuradio_swig_py_hier_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_hier_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_hier_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-gnuradio_swig_py_hier_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_hier_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)/$$p"; \ + done + +clean-gnuradio_swig_py_hier_pylibLTLIBRARIES: + -test -z "$(gnuradio_swig_py_hier_pylib_LTLIBRARIES)" || rm -f $(gnuradio_swig_py_hier_pylib_LTLIBRARIES) + @list='$(gnuradio_swig_py_hier_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-gnuradio_swig_py_io_pylibLTLIBRARIES: $(gnuradio_swig_py_io_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_io_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)" + @list='$(gnuradio_swig_py_io_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_io_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_io_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-gnuradio_swig_py_io_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_io_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)/$$p"; \ + done + +clean-gnuradio_swig_py_io_pylibLTLIBRARIES: + -test -z "$(gnuradio_swig_py_io_pylib_LTLIBRARIES)" || rm -f $(gnuradio_swig_py_io_pylib_LTLIBRARIES) + @list='$(gnuradio_swig_py_io_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-gnuradio_swig_py_runtime_pylibLTLIBRARIES: $(gnuradio_swig_py_runtime_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_runtime_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)" + @list='$(gnuradio_swig_py_runtime_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_runtime_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gnuradio_swig_py_runtime_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-gnuradio_swig_py_runtime_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_runtime_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)/$$p"; \ + done + +clean-gnuradio_swig_py_runtime_pylibLTLIBRARIES: + -test -z "$(gnuradio_swig_py_runtime_pylib_LTLIBRARIES)" || rm -f $(gnuradio_swig_py_runtime_pylib_LTLIBRARIES) + @list='$(gnuradio_swig_py_runtime_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_gnuradio_swig_py_filter.la: $(_gnuradio_swig_py_filter_la_OBJECTS) $(_gnuradio_swig_py_filter_la_DEPENDENCIES) + $(_gnuradio_swig_py_filter_la_LINK) -rpath $(gnuradio_swig_py_filter_pylibdir) $(_gnuradio_swig_py_filter_la_OBJECTS) $(_gnuradio_swig_py_filter_la_LIBADD) $(LIBS) +_gnuradio_swig_py_general.la: $(_gnuradio_swig_py_general_la_OBJECTS) $(_gnuradio_swig_py_general_la_DEPENDENCIES) + $(_gnuradio_swig_py_general_la_LINK) -rpath $(gnuradio_swig_py_general_pylibdir) $(_gnuradio_swig_py_general_la_OBJECTS) $(_gnuradio_swig_py_general_la_LIBADD) $(LIBS) +_gnuradio_swig_py_gengen.la: $(_gnuradio_swig_py_gengen_la_OBJECTS) $(_gnuradio_swig_py_gengen_la_DEPENDENCIES) + $(_gnuradio_swig_py_gengen_la_LINK) -rpath $(gnuradio_swig_py_gengen_pylibdir) $(_gnuradio_swig_py_gengen_la_OBJECTS) $(_gnuradio_swig_py_gengen_la_LIBADD) $(LIBS) +_gnuradio_swig_py_hier.la: $(_gnuradio_swig_py_hier_la_OBJECTS) $(_gnuradio_swig_py_hier_la_DEPENDENCIES) + $(_gnuradio_swig_py_hier_la_LINK) -rpath $(gnuradio_swig_py_hier_pylibdir) $(_gnuradio_swig_py_hier_la_OBJECTS) $(_gnuradio_swig_py_hier_la_LIBADD) $(LIBS) +_gnuradio_swig_py_io.la: $(_gnuradio_swig_py_io_la_OBJECTS) $(_gnuradio_swig_py_io_la_DEPENDENCIES) + $(_gnuradio_swig_py_io_la_LINK) -rpath $(gnuradio_swig_py_io_pylibdir) $(_gnuradio_swig_py_io_la_OBJECTS) $(_gnuradio_swig_py_io_la_LIBADD) $(LIBS) +_gnuradio_swig_py_runtime.la: $(_gnuradio_swig_py_runtime_la_OBJECTS) $(_gnuradio_swig_py_runtime_la_DEPENDENCIES) + $(_gnuradio_swig_py_runtime_la_LINK) -rpath $(gnuradio_swig_py_runtime_pylibdir) $(_gnuradio_swig_py_runtime_la_OBJECTS) $(_gnuradio_swig_py_runtime_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -550,69 +1402,382 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnuradio_swig_python.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gnuradio_swig_py_general_la-gnuradio_swig_py_general.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gnuradio_swig_py_io_la-gnuradio_swig_py_io.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.lo: gnuradio_swig_py_filter.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_filter_la_CXXFLAGS) $(CXXFLAGS) -MT _gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.lo -MD -MP -MF $(DEPDIR)/_gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.Tpo -c -o _gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.lo `test -f 'gnuradio_swig_py_filter.cc' || echo '$(srcdir)/'`gnuradio_swig_py_filter.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.Tpo $(DEPDIR)/_gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gnuradio_swig_py_filter.cc' object='_gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_filter_la_CXXFLAGS) $(CXXFLAGS) -c -o _gnuradio_swig_py_filter_la-gnuradio_swig_py_filter.lo `test -f 'gnuradio_swig_py_filter.cc' || echo '$(srcdir)/'`gnuradio_swig_py_filter.cc + +_gnuradio_swig_py_general_la-gnuradio_swig_py_general.lo: gnuradio_swig_py_general.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_general_la_CXXFLAGS) $(CXXFLAGS) -MT _gnuradio_swig_py_general_la-gnuradio_swig_py_general.lo -MD -MP -MF $(DEPDIR)/_gnuradio_swig_py_general_la-gnuradio_swig_py_general.Tpo -c -o _gnuradio_swig_py_general_la-gnuradio_swig_py_general.lo `test -f 'gnuradio_swig_py_general.cc' || echo '$(srcdir)/'`gnuradio_swig_py_general.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gnuradio_swig_py_general_la-gnuradio_swig_py_general.Tpo $(DEPDIR)/_gnuradio_swig_py_general_la-gnuradio_swig_py_general.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gnuradio_swig_py_general.cc' object='_gnuradio_swig_py_general_la-gnuradio_swig_py_general.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_general_la_CXXFLAGS) $(CXXFLAGS) -c -o _gnuradio_swig_py_general_la-gnuradio_swig_py_general.lo `test -f 'gnuradio_swig_py_general.cc' || echo '$(srcdir)/'`gnuradio_swig_py_general.cc + +_gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.lo: gnuradio_swig_py_gengen.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_gengen_la_CXXFLAGS) $(CXXFLAGS) -MT _gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.lo -MD -MP -MF $(DEPDIR)/_gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.Tpo -c -o _gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.lo `test -f 'gnuradio_swig_py_gengen.cc' || echo '$(srcdir)/'`gnuradio_swig_py_gengen.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.Tpo $(DEPDIR)/_gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gnuradio_swig_py_gengen.cc' object='_gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_gengen_la_CXXFLAGS) $(CXXFLAGS) -c -o _gnuradio_swig_py_gengen_la-gnuradio_swig_py_gengen.lo `test -f 'gnuradio_swig_py_gengen.cc' || echo '$(srcdir)/'`gnuradio_swig_py_gengen.cc + +_gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.lo: gnuradio_swig_py_hier.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_hier_la_CXXFLAGS) $(CXXFLAGS) -MT _gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.lo -MD -MP -MF $(DEPDIR)/_gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.Tpo -c -o _gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.lo `test -f 'gnuradio_swig_py_hier.cc' || echo '$(srcdir)/'`gnuradio_swig_py_hier.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.Tpo $(DEPDIR)/_gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gnuradio_swig_py_hier.cc' object='_gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_hier_la_CXXFLAGS) $(CXXFLAGS) -c -o _gnuradio_swig_py_hier_la-gnuradio_swig_py_hier.lo `test -f 'gnuradio_swig_py_hier.cc' || echo '$(srcdir)/'`gnuradio_swig_py_hier.cc + +_gnuradio_swig_py_io_la-gnuradio_swig_py_io.lo: gnuradio_swig_py_io.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_io_la_CXXFLAGS) $(CXXFLAGS) -MT _gnuradio_swig_py_io_la-gnuradio_swig_py_io.lo -MD -MP -MF $(DEPDIR)/_gnuradio_swig_py_io_la-gnuradio_swig_py_io.Tpo -c -o _gnuradio_swig_py_io_la-gnuradio_swig_py_io.lo `test -f 'gnuradio_swig_py_io.cc' || echo '$(srcdir)/'`gnuradio_swig_py_io.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gnuradio_swig_py_io_la-gnuradio_swig_py_io.Tpo $(DEPDIR)/_gnuradio_swig_py_io_la-gnuradio_swig_py_io.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gnuradio_swig_py_io.cc' object='_gnuradio_swig_py_io_la-gnuradio_swig_py_io.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_io_la_CXXFLAGS) $(CXXFLAGS) -c -o _gnuradio_swig_py_io_la-gnuradio_swig_py_io.lo `test -f 'gnuradio_swig_py_io.cc' || echo '$(srcdir)/'`gnuradio_swig_py_io.cc + +_gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.lo: gnuradio_swig_py_runtime.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_runtime_la_CXXFLAGS) $(CXXFLAGS) -MT _gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.lo -MD -MP -MF $(DEPDIR)/_gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.Tpo -c -o _gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.lo `test -f 'gnuradio_swig_py_runtime.cc' || echo '$(srcdir)/'`gnuradio_swig_py_runtime.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.Tpo $(DEPDIR)/_gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gnuradio_swig_py_runtime.cc' object='_gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gnuradio_swig_py_runtime_la_CXXFLAGS) $(CXXFLAGS) -c -o _gnuradio_swig_py_runtime_la-gnuradio_swig_py_runtime.lo `test -f 'gnuradio_swig_py_runtime.cc' || echo '$(srcdir)/'`gnuradio_swig_py_runtime.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs +install-gnuradio_swig_py_filter_pythonPYTHON: $(gnuradio_swig_py_filter_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_filter_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)" + @list='$(gnuradio_swig_py_filter_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gnuradio_swig_py_filter_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)/$$f'"; \ + $(gnuradio_swig_py_filter_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gnuradio_swig_py_filter_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gnuradio_swig_py_filter_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-gnuradio_swig_py_filter_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_filter_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)/$${f}o"; \ + done +install-gnuradio_swig_py_general_pythonPYTHON: $(gnuradio_swig_py_general_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_general_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)" + @list='$(gnuradio_swig_py_general_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gnuradio_swig_py_general_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gnuradio_swig_py_general_pythondir)/$$f'"; \ + $(gnuradio_swig_py_general_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gnuradio_swig_py_general_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gnuradio_swig_py_general_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-gnuradio_swig_py_general_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_general_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)/$${f}o"; \ + done +install-gnuradio_swig_py_gengen_pythonPYTHON: $(gnuradio_swig_py_gengen_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_gengen_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)" + @list='$(gnuradio_swig_py_gengen_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gnuradio_swig_py_gengen_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)/$$f'"; \ + $(gnuradio_swig_py_gengen_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gnuradio_swig_py_gengen_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gnuradio_swig_py_gengen_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-gnuradio_swig_py_gengen_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_gengen_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)/$${f}o"; \ + done +install-gnuradio_swig_py_hier_pythonPYTHON: $(gnuradio_swig_py_hier_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_hier_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)" + @list='$(gnuradio_swig_py_hier_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gnuradio_swig_py_hier_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)/$$f'"; \ + $(gnuradio_swig_py_hier_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gnuradio_swig_py_hier_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gnuradio_swig_py_hier_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-gnuradio_swig_py_hier_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_hier_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)/$${f}o"; \ + done +install-gnuradio_swig_py_io_pythonPYTHON: $(gnuradio_swig_py_io_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_io_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)" + @list='$(gnuradio_swig_py_io_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gnuradio_swig_py_io_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gnuradio_swig_py_io_pythondir)/$$f'"; \ + $(gnuradio_swig_py_io_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gnuradio_swig_py_io_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gnuradio_swig_py_io_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-gnuradio_swig_py_io_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_io_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)/$${f}o"; \ + done +install-gnuradio_swig_py_runtime_pythonPYTHON: $(gnuradio_swig_py_runtime_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_runtime_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)" + @list='$(gnuradio_swig_py_runtime_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gnuradio_swig_py_runtime_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)/$$f'"; \ + $(gnuradio_swig_py_runtime_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gnuradio_swig_py_runtime_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gnuradio_swig_py_runtime_pythondir)" $$dlist; \ + fi; \ + else :; fi -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-grgrpythonPYTHON: $(grgrpython_PYTHON) +uninstall-gnuradio_swig_py_runtime_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_runtime_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)/$${f}o"; \ + done +install-ourpythonPYTHON: $(ourpython_PYTHON) @$(NORMAL_INSTALL) - test -z "$(grgrpythondir)" || $(mkdir_p) "$(DESTDIR)$(grgrpythondir)" - @list='$(grgrpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(grgrpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grgrpythondir)/$$f'"; \ - $(grgrpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grgrpythondir)/$$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(grgrpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grgrpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ fi; \ else :; fi -uninstall-grgrpythonPYTHON: +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +install-gnuradio_swig_py_filter_swigincludeHEADERS: $(gnuradio_swig_py_filter_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_filter_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)" + @list='$(gnuradio_swig_py_filter_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gnuradio_swig_py_filter_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)/$$f'"; \ + $(gnuradio_swig_py_filter_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)/$$f"; \ + done + +uninstall-gnuradio_swig_py_filter_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_filter_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)/$$f"; \ + done +install-gnuradio_swig_py_general_swigincludeHEADERS: $(gnuradio_swig_py_general_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_general_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)" + @list='$(gnuradio_swig_py_general_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gnuradio_swig_py_general_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)/$$f'"; \ + $(gnuradio_swig_py_general_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)/$$f"; \ + done + +uninstall-gnuradio_swig_py_general_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_general_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)/$$f"; \ + done +install-gnuradio_swig_py_gengen_swigincludeHEADERS: $(gnuradio_swig_py_gengen_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_gengen_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)" + @list='$(gnuradio_swig_py_gengen_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gnuradio_swig_py_gengen_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)/$$f'"; \ + $(gnuradio_swig_py_gengen_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)/$$f"; \ + done + +uninstall-gnuradio_swig_py_gengen_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_gengen_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)/$$f"; \ + done +install-gnuradio_swig_py_hier_swigincludeHEADERS: $(gnuradio_swig_py_hier_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_hier_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)" + @list='$(gnuradio_swig_py_hier_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gnuradio_swig_py_hier_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)/$$f'"; \ + $(gnuradio_swig_py_hier_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)/$$f"; \ + done + +uninstall-gnuradio_swig_py_hier_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_hier_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)/$$f"; \ + done +install-gnuradio_swig_py_io_swigincludeHEADERS: $(gnuradio_swig_py_io_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_io_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)" + @list='$(gnuradio_swig_py_io_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gnuradio_swig_py_io_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)/$$f'"; \ + $(gnuradio_swig_py_io_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)/$$f"; \ + done + +uninstall-gnuradio_swig_py_io_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gnuradio_swig_py_io_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)/$$f"; \ + done +install-gnuradio_swig_py_runtime_swigincludeHEADERS: $(gnuradio_swig_py_runtime_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gnuradio_swig_py_runtime_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)" + @list='$(gnuradio_swig_py_runtime_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gnuradio_swig_py_runtime_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)/$$f'"; \ + $(gnuradio_swig_py_runtime_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)/$$f"; \ + done + +uninstall-gnuradio_swig_py_runtime_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grgrpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(gnuradio_swig_py_runtime_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(grgrpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(grgrpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(grgrpythondir)/$${f}o"; \ + echo " rm -f '$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)/$$f"; \ done install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -629,7 +1794,7 @@ uninstall-grincludeHEADERS: done install-swigincludeHEADERS: $(swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" @list='$(swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -650,8 +1815,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -663,8 +1828,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -674,13 +1839,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -694,23 +1858,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -729,8 +1891,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(grgrlibdir)" "$(DESTDIR)$(grgrpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(gnuradio_swig_py_filter_pylibdir)" "$(DESTDIR)$(gnuradio_swig_py_general_pylibdir)" "$(DESTDIR)$(gnuradio_swig_py_gengen_pylibdir)" "$(DESTDIR)$(gnuradio_swig_py_hier_pylibdir)" "$(DESTDIR)$(gnuradio_swig_py_io_pylibdir)" "$(DESTDIR)$(gnuradio_swig_py_runtime_pylibdir)" "$(DESTDIR)$(gnuradio_swig_py_filter_pythondir)" "$(DESTDIR)$(gnuradio_swig_py_general_pythondir)" "$(DESTDIR)$(gnuradio_swig_py_gengen_pythondir)" "$(DESTDIR)$(gnuradio_swig_py_hier_pythondir)" "$(DESTDIR)$(gnuradio_swig_py_io_pythondir)" "$(DESTDIR)$(gnuradio_swig_py_runtime_pythondir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(gnuradio_swig_py_filter_swigincludedir)" "$(DESTDIR)$(gnuradio_swig_py_general_swigincludedir)" "$(DESTDIR)$(gnuradio_swig_py_gengen_swigincludedir)" "$(DESTDIR)$(gnuradio_swig_py_hier_swigincludedir)" "$(DESTDIR)$(gnuradio_swig_py_io_swigincludedir)" "$(DESTDIR)$(gnuradio_swig_py_runtime_swigincludedir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -754,7 +1916,6 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -762,14 +1923,19 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-grgrlibLTLIBRARIES clean-libtool \ +clean-am: clean-generic clean-gnuradio_swig_py_filter_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_general_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_gengen_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_hier_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_io_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_runtime_pylibLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -781,15 +1947,41 @@ info: info-am info-am: -install-data-am: install-grgrlibLTLIBRARIES install-grgrpythonPYTHON \ - install-grincludeHEADERS install-swigincludeHEADERS +install-data-am: install-gnuradio_swig_py_filter_pylibLTLIBRARIES \ + install-gnuradio_swig_py_filter_pythonPYTHON \ + install-gnuradio_swig_py_filter_swigincludeHEADERS \ + install-gnuradio_swig_py_general_pylibLTLIBRARIES \ + install-gnuradio_swig_py_general_pythonPYTHON \ + install-gnuradio_swig_py_general_swigincludeHEADERS \ + install-gnuradio_swig_py_gengen_pylibLTLIBRARIES \ + install-gnuradio_swig_py_gengen_pythonPYTHON \ + install-gnuradio_swig_py_gengen_swigincludeHEADERS \ + install-gnuradio_swig_py_hier_pylibLTLIBRARIES \ + install-gnuradio_swig_py_hier_pythonPYTHON \ + install-gnuradio_swig_py_hier_swigincludeHEADERS \ + install-gnuradio_swig_py_io_pylibLTLIBRARIES \ + install-gnuradio_swig_py_io_pythonPYTHON \ + install-gnuradio_swig_py_io_swigincludeHEADERS \ + install-gnuradio_swig_py_runtime_pylibLTLIBRARIES \ + install-gnuradio_swig_py_runtime_pythonPYTHON \ + install-gnuradio_swig_py_runtime_swigincludeHEADERS \ + install-grincludeHEADERS install-ourpythonPYTHON \ + install-swigincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -810,50 +2002,519 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grgrlibLTLIBRARIES uninstall-grgrpythonPYTHON \ - uninstall-grincludeHEADERS uninstall-info-am \ +uninstall-am: uninstall-gnuradio_swig_py_filter_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_filter_pythonPYTHON \ + uninstall-gnuradio_swig_py_filter_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_general_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_general_pythonPYTHON \ + uninstall-gnuradio_swig_py_general_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_gengen_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_gengen_pythonPYTHON \ + uninstall-gnuradio_swig_py_gengen_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_hier_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_hier_pythonPYTHON \ + uninstall-gnuradio_swig_py_hier_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_io_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_io_pythonPYTHON \ + uninstall-gnuradio_swig_py_io_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_runtime_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_runtime_pythonPYTHON \ + uninstall-gnuradio_swig_py_runtime_swigincludeHEADERS \ + uninstall-grincludeHEADERS uninstall-ourpythonPYTHON \ uninstall-swigincludeHEADERS +.MAKE: install-am install-strip + .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-grgrlibLTLIBRARIES clean-libtool ctags dist-hook \ - distclean distclean-compile distclean-generic \ + clean-gnuradio_swig_py_filter_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_general_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_gengen_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_hier_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_io_pylibLTLIBRARIES \ + clean-gnuradio_swig_py_runtime_pylibLTLIBRARIES clean-libtool \ + ctags dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grgrlibLTLIBRARIES install-grgrpythonPYTHON \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-strip install-swigincludeHEADERS \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am \ + install-gnuradio_swig_py_filter_pylibLTLIBRARIES \ + install-gnuradio_swig_py_filter_pythonPYTHON \ + install-gnuradio_swig_py_filter_swigincludeHEADERS \ + install-gnuradio_swig_py_general_pylibLTLIBRARIES \ + install-gnuradio_swig_py_general_pythonPYTHON \ + install-gnuradio_swig_py_general_swigincludeHEADERS \ + install-gnuradio_swig_py_gengen_pylibLTLIBRARIES \ + install-gnuradio_swig_py_gengen_pythonPYTHON \ + install-gnuradio_swig_py_gengen_swigincludeHEADERS \ + install-gnuradio_swig_py_hier_pylibLTLIBRARIES \ + install-gnuradio_swig_py_hier_pythonPYTHON \ + install-gnuradio_swig_py_hier_swigincludeHEADERS \ + install-gnuradio_swig_py_io_pylibLTLIBRARIES \ + install-gnuradio_swig_py_io_pythonPYTHON \ + install-gnuradio_swig_py_io_swigincludeHEADERS \ + install-gnuradio_swig_py_runtime_pylibLTLIBRARIES \ + install-gnuradio_swig_py_runtime_pythonPYTHON \ + install-gnuradio_swig_py_runtime_swigincludeHEADERS \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip install-swigincludeHEADERS \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grgrlibLTLIBRARIES \ - uninstall-grgrpythonPYTHON uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-swigincludeHEADERS + tags uninstall uninstall-am \ + uninstall-gnuradio_swig_py_filter_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_filter_pythonPYTHON \ + uninstall-gnuradio_swig_py_filter_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_general_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_general_pythonPYTHON \ + uninstall-gnuradio_swig_py_general_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_gengen_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_gengen_pythonPYTHON \ + uninstall-gnuradio_swig_py_gengen_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_hier_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_hier_pythonPYTHON \ + uninstall-gnuradio_swig_py_hier_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_io_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_io_pythonPYTHON \ + uninstall-gnuradio_swig_py_io_swigincludeHEADERS \ + uninstall-gnuradio_swig_py_runtime_pylibLTLIBRARIES \ + uninstall-gnuradio_swig_py_runtime_pythonPYTHON \ + uninstall-gnuradio_swig_py_runtime_swigincludeHEADERS \ + uninstall-grincludeHEADERS uninstall-ourpythonPYTHON \ + uninstall-swigincludeHEADERS -# KLUDGE: Force runtime include of gnuradio_swig_python.d 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@./gnuradio_swig_python.d@am__quote@ +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -gnuradio_swig_python.py gnuradio_swig_python.h: gnuradio_swig_python.cc +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; -gnuradio_swig_python.cc : gnuradio.i - if $(SWIG) $(SWIGPYTHONARGS) -MMD -MF gnuradio_swig_python.Td -module gnuradio_swig_python -o gnuradio_swig_python.cc gnuradio.i ;\ - then if test $(host_os) = mingw32; \ - then sed 's,\\\\,/,g' gnuradio_swig_python.d; rm -f gnuradio_swig_python.Td; \ - else mv -f gnuradio_swig_python.Td gnuradio_swig_python.d; fi \ - else rm -f gnuradio_swig_python.Td; exit 1; fi +# ---------------------------------------------------------------- +# 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 $@ + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +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.h gnuradio_swig_py_runtime.py gnuradio_swig_py_runtime.cc: gnuradio_swig_py_runtime.i + trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_runtime-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gnuradio_swig_py_runtime-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gnuradio_swig_py_runtime-generate-lock; \ + else \ + while test -d $(DEPDIR)/gnuradio_swig_py_runtime-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gnuradio_swig_py_runtime-generate-stamp: + 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; + $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.d + cp $(DEPDIR)/gnuradio_swig_py_runtime.Std $(DEPDIR)/gnuradio_swig_py_runtime.d + echo "" >> $(DEPDIR)/gnuradio_swig_py_runtime.d + $(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 + $(RM) $(DEPDIR)/gnuradio_swig_py_runtime.Std + touch $(DEPDIR)/gnuradio_swig_py_runtime-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)/gnuradio_swig_py_runtime.d@am__quote@ -gnuradio_swig_bug_workaround.h : gnuradio_swig_python.cc $(srcdir)/gen-swig-bug-fix - $(PYTHON) $(srcdir)/gen-swig-bug-fix gnuradio_swig_python.cc $@ +# -*- 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 gnuradio_swig_py_general.i + +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.h gnuradio_swig_py_general.py gnuradio_swig_py_general.cc: gnuradio_swig_py_general.i + trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_general-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gnuradio_swig_py_general-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gnuradio_swig_py_general-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_general-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gnuradio_swig_py_general-generate-lock; \ + else \ + while test -d $(DEPDIR)/gnuradio_swig_py_general-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gnuradio_swig_py_general-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gnuradio_swig_py_general-generate-stamp: + 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; + $(RM) $(DEPDIR)/gnuradio_swig_py_general.d + cp $(DEPDIR)/gnuradio_swig_py_general.Std $(DEPDIR)/gnuradio_swig_py_general.d + echo "" >> $(DEPDIR)/gnuradio_swig_py_general.d + $(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 + $(RM) $(DEPDIR)/gnuradio_swig_py_general.Std + touch $(DEPDIR)/gnuradio_swig_py_general-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)/gnuradio_swig_py_general.d@am__quote@ -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# -*- 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 gnuradio_swig_py_gengen.i + +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.h gnuradio_swig_py_gengen.py gnuradio_swig_py_gengen.cc: gnuradio_swig_py_gengen.i + trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_gengen-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gnuradio_swig_py_gengen-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gnuradio_swig_py_gengen-generate-lock; \ + else \ + while test -d $(DEPDIR)/gnuradio_swig_py_gengen-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gnuradio_swig_py_gengen-generate-stamp: + 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; + $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.d + cp $(DEPDIR)/gnuradio_swig_py_gengen.Std $(DEPDIR)/gnuradio_swig_py_gengen.d + echo "" >> $(DEPDIR)/gnuradio_swig_py_gengen.d + $(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 + $(RM) $(DEPDIR)/gnuradio_swig_py_gengen.Std + touch $(DEPDIR)/gnuradio_swig_py_gengen-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)/gnuradio_swig_py_gengen.d@am__quote@ + +# -*- 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 gnuradio_swig_py_filter.i + +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.h gnuradio_swig_py_filter.py gnuradio_swig_py_filter.cc: gnuradio_swig_py_filter.i + trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_filter-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gnuradio_swig_py_filter-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gnuradio_swig_py_filter-generate-lock; \ + else \ + while test -d $(DEPDIR)/gnuradio_swig_py_filter-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gnuradio_swig_py_filter-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gnuradio_swig_py_filter-generate-stamp: + 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; + $(RM) $(DEPDIR)/gnuradio_swig_py_filter.d + cp $(DEPDIR)/gnuradio_swig_py_filter.Std $(DEPDIR)/gnuradio_swig_py_filter.d + echo "" >> $(DEPDIR)/gnuradio_swig_py_filter.d + $(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 + $(RM) $(DEPDIR)/gnuradio_swig_py_filter.Std + touch $(DEPDIR)/gnuradio_swig_py_filter-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)/gnuradio_swig_py_filter.d@am__quote@ + +# -*- 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 gnuradio_swig_py_io.i + +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.h gnuradio_swig_py_io.py gnuradio_swig_py_io.cc: gnuradio_swig_py_io.i + trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_io-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gnuradio_swig_py_io-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gnuradio_swig_py_io-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_io-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gnuradio_swig_py_io-generate-lock; \ + else \ + while test -d $(DEPDIR)/gnuradio_swig_py_io-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gnuradio_swig_py_io-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gnuradio_swig_py_io-generate-stamp: + 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; + $(RM) $(DEPDIR)/gnuradio_swig_py_io.d + cp $(DEPDIR)/gnuradio_swig_py_io.Std $(DEPDIR)/gnuradio_swig_py_io.d + echo "" >> $(DEPDIR)/gnuradio_swig_py_io.d + $(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 + $(RM) $(DEPDIR)/gnuradio_swig_py_io.Std + touch $(DEPDIR)/gnuradio_swig_py_io-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)/gnuradio_swig_py_io.d@am__quote@ + +# -*- 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 gnuradio_swig_py_hier.i + +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.h gnuradio_swig_py_hier.py gnuradio_swig_py_hier.cc: gnuradio_swig_py_hier.i + trap 'rm -rf $(DEPDIR)/gnuradio_swig_py_hier-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gnuradio_swig_py_hier-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gnuradio_swig_py_hier-generate-lock; \ + else \ + while test -d $(DEPDIR)/gnuradio_swig_py_hier-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gnuradio_swig_py_hier-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gnuradio_swig_py_hier-generate-stamp: + 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; + $(RM) $(DEPDIR)/gnuradio_swig_py_hier.d + cp $(DEPDIR)/gnuradio_swig_py_hier.Std $(DEPDIR)/gnuradio_swig_py_hier.d + echo "" >> $(DEPDIR)/gnuradio_swig_py_hier.d + $(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 + $(RM) $(DEPDIR)/gnuradio_swig_py_hier.Std + touch $(DEPDIR)/gnuradio_swig_py_hier-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)/gnuradio_swig_py_hier.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/lib/swig/Makefile.swig.gen b/gnuradio-core/src/lib/swig/Makefile.swig.gen new file mode 100644 index 00000000..e24ba5a9 --- /dev/null +++ b/gnuradio-core/src/lib/swig/Makefile.swig.gen @@ -0,0 +1,1554 @@ +# -*- 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 gnuradio_swig_py_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 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_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) + +## SWIG headers are always installed into the same directory. + +gnuradio_swig_py_runtime_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)/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_swig_py_runtime_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_runtime.la + +_gnuradio_swig_py_runtime_la_SOURCES = \ + gnuradio_swig_py_runtime.cc \ + $(gnuradio_swig_py_runtime_la_swig_sources) + +_gnuradio_swig_py_runtime_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_runtime_la_swig_libadd) + +_gnuradio_swig_py_runtime_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_runtime_la_swig_ldflags) + +_gnuradio_swig_py_runtime_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_runtime_la_swig_cxxflags) + +gnuradio_swig_py_runtime_python_PYTHON = \ + gnuradio_swig_py_runtime.py \ + $(gnuradio_swig_py_runtime_python) + +## Entry rule for running SWIG + +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 + +# 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)/gnuradio_swig_py_runtime.d@am__quote@ + +# -*- 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 gnuradio_swig_py_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 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_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) + +## SWIG headers are always installed into the same directory. + +gnuradio_swig_py_general_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)/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_swig_py_general_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_general.la + +_gnuradio_swig_py_general_la_SOURCES = \ + gnuradio_swig_py_general.cc \ + $(gnuradio_swig_py_general_la_swig_sources) + +_gnuradio_swig_py_general_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_general_la_swig_libadd) + +_gnuradio_swig_py_general_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_general_la_swig_ldflags) + +_gnuradio_swig_py_general_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_general_la_swig_cxxflags) + +gnuradio_swig_py_general_python_PYTHON = \ + gnuradio_swig_py_general.py \ + $(gnuradio_swig_py_general_python) + +## Entry rule for running SWIG + +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 + +# 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)/gnuradio_swig_py_general.d@am__quote@ + +# -*- 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 gnuradio_swig_py_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 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_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) + +## SWIG headers are always installed into the same directory. + +gnuradio_swig_py_gengen_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)/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_swig_py_gengen_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_gengen.la + +_gnuradio_swig_py_gengen_la_SOURCES = \ + gnuradio_swig_py_gengen.cc \ + $(gnuradio_swig_py_gengen_la_swig_sources) + +_gnuradio_swig_py_gengen_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_gengen_la_swig_libadd) + +_gnuradio_swig_py_gengen_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_gengen_la_swig_ldflags) + +_gnuradio_swig_py_gengen_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_gengen_la_swig_cxxflags) + +gnuradio_swig_py_gengen_python_PYTHON = \ + gnuradio_swig_py_gengen.py \ + $(gnuradio_swig_py_gengen_python) + +## Entry rule for running SWIG + +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 + +# 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)/gnuradio_swig_py_gengen.d@am__quote@ + +# -*- 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 gnuradio_swig_py_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 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_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) + +## SWIG headers are always installed into the same directory. + +gnuradio_swig_py_filter_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)/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_swig_py_filter_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_filter.la + +_gnuradio_swig_py_filter_la_SOURCES = \ + gnuradio_swig_py_filter.cc \ + $(gnuradio_swig_py_filter_la_swig_sources) + +_gnuradio_swig_py_filter_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_filter_la_swig_libadd) + +_gnuradio_swig_py_filter_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_filter_la_swig_ldflags) + +_gnuradio_swig_py_filter_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_filter_la_swig_cxxflags) + +gnuradio_swig_py_filter_python_PYTHON = \ + gnuradio_swig_py_filter.py \ + $(gnuradio_swig_py_filter_python) + +## Entry rule for running SWIG + +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 + +# 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)/gnuradio_swig_py_filter.d@am__quote@ + +# -*- 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 gnuradio_swig_py_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 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_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) + +## SWIG headers are always installed into the same directory. + +gnuradio_swig_py_io_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)/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_swig_py_io_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_io.la + +_gnuradio_swig_py_io_la_SOURCES = \ + gnuradio_swig_py_io.cc \ + $(gnuradio_swig_py_io_la_swig_sources) + +_gnuradio_swig_py_io_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_io_la_swig_libadd) + +_gnuradio_swig_py_io_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_io_la_swig_ldflags) + +_gnuradio_swig_py_io_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_io_la_swig_cxxflags) + +gnuradio_swig_py_io_python_PYTHON = \ + gnuradio_swig_py_io.py \ + $(gnuradio_swig_py_io_python) + +## Entry rule for running SWIG + +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 + +# 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)/gnuradio_swig_py_io.d@am__quote@ + +# -*- 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 gnuradio_swig_py_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 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gnuradio_swig_py_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) + +## SWIG headers are always installed into the same directory. + +gnuradio_swig_py_hier_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)/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_swig_py_hier_pylib_LTLIBRARIES = \ + _gnuradio_swig_py_hier.la + +_gnuradio_swig_py_hier_la_SOURCES = \ + gnuradio_swig_py_hier.cc \ + $(gnuradio_swig_py_hier_la_swig_sources) + +_gnuradio_swig_py_hier_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gnuradio_swig_py_hier_la_swig_libadd) + +_gnuradio_swig_py_hier_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gnuradio_swig_py_hier_la_swig_ldflags) + +_gnuradio_swig_py_hier_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gnuradio_swig_py_hier_la_swig_cxxflags) + +gnuradio_swig_py_hier_python_PYTHON = \ + gnuradio_swig_py_hier.py \ + $(gnuradio_swig_py_hier_python) + +## Entry rule for running SWIG + +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 + +# 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)/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 f3d38c1d..7d0241f1 100644 --- a/gnuradio-core/src/lib/swig/gnuradio.i +++ b/gnuradio-core/src/lib/swig/gnuradio.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003,2004 Free Software Foundation, Inc. + * Copyright 2003,2004,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -25,27 +25,24 @@ // SWIG interface definition //////////////////////////////////////////////////////////////////////// - -#ifndef SWIGIMPORTED -// we set the module name on the command line (not any more) -%module(directors="1") gnuradio_swig_python -#endif - //////////////////////////////////////////////////////////////////////// // Headers - %{ +#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include #include // size_t %} %feature("autodoc","1"); -%include +// local file +%include + +// non-local SWIG files %include %include - +%include typedef std::complex gr_complex; typedef std::complex gr_complexd; @@ -60,7 +57,15 @@ namespace std { %template() vector; %template() vector; %template() vector; - %template() vector >; + + %template() vector< std::complex >; + %template() vector< std::vector< unsigned char > >; + %template() vector< std::vector< char > >; + %template() vector< std::vector< short > >; + %template() vector< std::vector< int > >; + %template() vector< std::vector< float > >; + %template() vector< std::vector< double > >; + %template() vector< std::vector< std::complex > >; }; //////////////////////////////////////////////////////////////////////// @@ -74,11 +79,9 @@ namespace std { //////////////////////////////////////////////////////////////////////// -%include -%include -%include -%include - -// %include +#ifndef SW_RUNTIME +// import runtime.i for all but sw_runtime, since it needs to %include +%import +#endif //////////////////////////////////////////////////////////////////////// diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h b/gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h new file mode 100644 index 00000000..8f7eea0b --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_bug_workaround.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H +#define INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H + +/* + * This include files works around a bug in SWIG 1.3.21 and 22 + * where it fails to emit these declarations when doing + * %import "gnuradio.i" + */ + +class gr_base_error_handler; +class gr_basic_block; +class gr_block; +class gr_error_handler; +class gr_file_error_handler; +class gr_hier_block2; +class gr_msg_handler; +class gr_msg_queue; +class gr_sync_block; +class gr_sync_decimator; +class gr_sync_interpolator; +class gr_top_block; + +#endif /* INCLUDED_GNURADIO_SWIG_BUG_WORKAROUND_H */ diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i b/gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i new file mode 100644 index 00000000..6396a97d --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_py_filter.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,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 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 +#endif + + //%feature("autodoc", "1"); // generate python docstrings + +%include "gnuradio.i" // the common stuff + +%include "filter.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i b/gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i new file mode 100644 index 00000000..3ab1b056 --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_py_general.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,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 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 +#endif + + //%feature("autodoc", "1"); // generate python docstrings + +%include "gnuradio.i" // the common stuff + +%include "general.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i b/gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i new file mode 100644 index 00000000..95e85cf6 --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_py_gengen.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,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 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 +#endif + + //%feature("autodoc", "1"); // generate python docstrings + +%include "gnuradio.i" // the common stuff + +%include "gengen.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i b/gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i new file mode 100644 index 00000000..a82b5ae4 --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_py_hier.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * 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 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 +#endif + + //%feature("autodoc", "1"); // generate python docstrings + +%include "gnuradio.i" // the common stuff + +%include "hier.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i b/gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i new file mode 100644 index 00000000..9318f5d8 --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_py_io.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,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 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 +#endif + + //%feature("autodoc", "1"); // generate python docstrings + +%include "gnuradio.i" // the common stuff + +%include "io.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i b/gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i new file mode 100644 index 00000000..8f444f9c --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_py_runtime.i @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef SWIGIMPORTED +%module(directors="1") gnuradio_swig_py_runtime +#endif + + //%feature("autodoc", "1"); // generate python docstrings + +#define SW_RUNTIME +%include "gnuradio.i" // the common stuff + +%include "runtime.i" diff --git a/gnuradio-core/src/lib/swig/gnuradio_swig_python.py b/gnuradio-core/src/lib/swig/gnuradio_swig_python.py new file mode 100644 index 00000000..5324b230 --- /dev/null +++ b/gnuradio-core/src/lib/swig/gnuradio_swig_python.py @@ -0,0 +1,28 @@ +# +# Copyright 2006,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# This file implements the old gnuradio_swig_python 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 * diff --git a/gnuradio-core/src/lib/swig/shared_ptr.i b/gnuradio-core/src/lib/swig/gr_shared_ptr.i similarity index 100% rename from gnuradio-core/src/lib/swig/shared_ptr.i rename to gnuradio-core/src/lib/swig/gr_shared_ptr.i diff --git a/gnuradio-core/src/lib/swig/gr_swig_block_magic.i b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i new file mode 100644 index 00000000..78e83801 --- /dev/null +++ b/gnuradio-core/src/lib/swig/gr_swig_block_magic.i @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +%define GR_SWIG_BLOCK_MAGIC(PKG, BASE_NAME) +_GR_SWIG_BLOCK_MAGIC_HELPER(PKG, PKG ## _ ## BASE_NAME, BASE_NAME) +%enddef + +%define _GR_SWIG_BLOCK_MAGIC_HELPER(PKG, NAME, BASE_NAME) +class NAME; +typedef boost::shared_ptr NAME ## _sptr; +%template(NAME ## _sptr) boost::shared_ptr; +%rename(BASE_NAME) PKG ## _make_ ## BASE_NAME; + +%pythoncode %{ +NAME ## _sptr.block = lambda self: NAME ## _block (self) +NAME ## _sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id ()) +%} + +%ignore NAME; +%enddef diff --git a/gnuradio-core/src/lib/viterbi/Makefile.am b/gnuradio-core/src/lib/viterbi/Makefile.am new file mode 100644 index 00000000..8384c52f --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/Makefile.am @@ -0,0 +1,42 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +LIBS = -lm + +noinst_LTLIBRARIES = libviterbi.la + +libviterbi_la_SOURCES = \ + metrics.c \ + tab.c \ + viterbi.c + +noinst_HEADERS = \ + viterbi.h + +noinst_PROGRAMS = encode decode + +encode_SOURCES = encode.cc + +encode_LDADD = libviterbi.la + +decode_SOURCES = decode.cc + +decode_LDADD = libviterbi.la diff --git a/gnuradio-core/src/lib/viterbi/Makefile.in b/gnuradio-core/src/lib/viterbi/Makefile.in new file mode 100644 index 00000000..68723ed6 --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/Makefile.in @@ -0,0 +1,1050 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 Free Software Foundation, Inc. +# +# 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +noinst_PROGRAMS = encode$(EXEEXT) decode$(EXEEXT) +subdir = gnuradio-core/src/lib/viterbi +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libviterbi_la_LIBADD = +am_libviterbi_la_OBJECTS = metrics.lo tab.lo viterbi.lo +libviterbi_la_OBJECTS = $(am_libviterbi_la_OBJECTS) +PROGRAMS = $(noinst_PROGRAMS) +am_decode_OBJECTS = decode.$(OBJEXT) +decode_OBJECTS = $(am_decode_OBJECTS) +decode_DEPENDENCIES = libviterbi.la +am_encode_OBJECTS = encode.$(OBJEXT) +encode_OBJECTS = $(am_encode_OBJECTS) +encode_DEPENDENCIES = libviterbi.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libviterbi_la_SOURCES) $(decode_SOURCES) $(encode_SOURCES) +DIST_SOURCES = $(libviterbi_la_SOURCES) $(decode_SOURCES) \ + $(encode_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = -lm +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +noinst_LTLIBRARIES = libviterbi.la +libviterbi_la_SOURCES = \ + metrics.c \ + tab.c \ + viterbi.c + +noinst_HEADERS = \ + viterbi.h + +encode_SOURCES = encode.cc +encode_LDADD = libviterbi.la +decode_SOURCES = decode.cc +decode_LDADD = libviterbi.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/lib/viterbi/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-core/src/lib/viterbi/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libviterbi.la: $(libviterbi_la_OBJECTS) $(libviterbi_la_DEPENDENCIES) + $(LINK) $(libviterbi_la_OBJECTS) $(libviterbi_la_LIBADD) $(LIBS) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +decode$(EXEEXT): $(decode_OBJECTS) $(decode_DEPENDENCIES) + @rm -f decode$(EXEEXT) + $(CXXLINK) $(decode_OBJECTS) $(decode_LDADD) $(LIBS) +encode$(EXEEXT): $(encode_OBJECTS) $(encode_DEPENDENCIES) + @rm -f encode$(EXEEXT) + $(CXXLINK) $(encode_OBJECTS) $(encode_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metrics.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tab.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viterbi.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ + ctags dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/lib/viterbi/decode.cc b/gnuradio-core/src/lib/viterbi/decode.cc new file mode 100644 index 00000000..6580e4d6 --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/decode.cc @@ -0,0 +1,88 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +/* + * This is a minimal example demonstrating how to call the Viterbi decoder + * in continuous streaming mode. It accepts data on stdin and writes to + * stdout. + * + */ + +extern "C" { +#include "viterbi.h" +} + +#include +#include + +#define MAXCHUNKSIZE 4096 +#define MAXENCSIZE MAXCHUNKSIZE*16 + +int main() +{ + unsigned char data[MAXCHUNKSIZE]; + signed char syms[MAXENCSIZE]; + int count = 0; + + // Initialize metric table + int mettab[2][256]; + int amp = 100; + float RATE=0.5; + float ebn0 = 12.0; + float esn0 = RATE*pow(10.0, ebn0/10); + gen_met(mettab, amp, esn0, 0.0, 4); + + // Initialize decoder state + struct viterbi_state state0[64]; + struct viterbi_state state1[64]; + unsigned char viterbi_in[16]; + viterbi_chunks_init(state0); + + while (!feof(stdin)) { + unsigned int n = fread(syms, 1, MAXENCSIZE, stdin); + unsigned char *out = data; + + for (unsigned int i = 0; i < n; i++) { + + // FIXME: This implements hard decoding by slicing the input stream + unsigned char sym = syms[i] > 0 ? -amp : amp; + + // Write the symbol to the decoder input + viterbi_in[count % 4] = sym; + + // Every four symbols, perform the butterfly2 operation + if ((count % 4) == 3) { + viterbi_butterfly2(viterbi_in, mettab, state0, state1); + + // Every sixteen symbols, perform the readback operation + if ((count > 64) && (count % 16) == 11) { + viterbi_get_output(state0, out); + fwrite(out++, 1, 1, stdout); + } + } + + count++; + } + } + + return 0; +} diff --git a/gnuradio-core/src/lib/viterbi/encode.cc b/gnuradio-core/src/lib/viterbi/encode.cc new file mode 100644 index 00000000..01acb398 --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/encode.cc @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +/* + * This is a minimal example demonstrating how to call the ECC encoder + * in continuous streaming mode. It accepts data on stdin and writes to + * stdout. + * + * FIXME: This does not flush the final bits out of the encoder. + * + */ + +extern "C" { +#include "viterbi.h" +} + +#include + +#define MAXCHUNKSIZE 4096 +#define MAXENCSIZE MAXCHUNKSIZE*16 + +int main() +{ + unsigned char encoder_state = 0; + unsigned char data[MAXCHUNKSIZE]; + unsigned char syms[MAXENCSIZE]; + + while (!feof(stdin)) { + unsigned int n = fread(data, 1, MAXCHUNKSIZE, stdin); + encoder_state = encode(syms, data, n, encoder_state); + fwrite(syms, 1, n*16, stdout); + } + + return 0; +} diff --git a/gnuradio-core/src/lib/viterbi/metrics.c b/gnuradio-core/src/lib/viterbi/metrics.c new file mode 100644 index 00000000..9f958cab --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/metrics.c @@ -0,0 +1,123 @@ +/* + * Copyright 1995 Phil Karn, KA9Q + * Copyright 2008 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. + */ + +/* + * Generate metric tables for a soft-decision convolutional decoder + * assuming gaussian noise on a PSK channel. + * + * Works from "first principles" by evaluating the normal probability + * function and then computing the log-likelihood function + * for every possible received symbol value + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* Symbols are offset-binary, with 128 corresponding to an erased (no + * information) symbol + */ +#define OFFSET 128 + +#include +#include + +/* Normal function integrated from -Inf to x. Range: 0-1 */ +#define normal(x) (0.5 + 0.5*erf((x)/M_SQRT2)) + +/* Logarithm base 2 */ +#define gr_log2(x) (log(x)*M_LOG2E) + +/* Generate log-likelihood metrics for 8-bit soft quantized channel + * assuming AWGN and BPSK + */ +void +gen_met(int mettab[2][256], /* Metric table, [sent sym][rx symbol] */ + int amp, /* Signal amplitude, units */ + double esn0, /* Es/N0 ratio in dB */ + double bias, /* Metric bias; 0 for viterbi, rate for sequential */ + int scale) /* Scale factor */ +{ + double noise; + int s,bit; + double metrics[2][256]; + double p0,p1; + + /* Es/N0 as power ratio */ + esn0 = pow(10.,esn0/10); + + noise = 0.5/esn0; /* only half the noise for BPSK */ + noise = sqrt(noise); /* noise/signal Voltage ratio */ + + /* Zero is a special value, since this sample includes all + * lower samples that were clipped to this value, i.e., it + * takes the whole lower tail of the curve + */ + p1 = normal(((0-OFFSET+0.5)/amp - 1)/noise); /* P(s|1) */ + + /* Prob of this value occurring for a 0-bit */ /* P(s|0) */ + p0 = normal(((0-OFFSET+0.5)/amp + 1)/noise); + metrics[0][0] = gr_log2(2*p0/(p1+p0)) - bias; + metrics[1][0] = gr_log2(2*p1/(p1+p0)) - bias; + + for(s=1;s<255;s++){ + /* P(s|1), prob of receiving s given 1 transmitted */ + p1 = normal(((s-OFFSET+0.5)/amp - 1)/noise) - + normal(((s-OFFSET-0.5)/amp - 1)/noise); + + /* P(s|0), prob of receiving s given 0 transmitted */ + p0 = normal(((s-OFFSET+0.5)/amp + 1)/noise) - + normal(((s-OFFSET-0.5)/amp + 1)/noise); + +#ifdef notdef + printf("P(%d|1) = %lg, P(%d|0) = %lg\n",s,p1,s,p0); +#endif + metrics[0][s] = gr_log2(2*p0/(p1+p0)) - bias; + metrics[1][s] = gr_log2(2*p1/(p1+p0)) - bias; + } + /* 255 is also a special value */ + /* P(s|1) */ + p1 = 1 - normal(((255-OFFSET-0.5)/amp - 1)/noise); + /* P(s|0) */ + p0 = 1 - normal(((255-OFFSET-0.5)/amp + 1)/noise); + + metrics[0][255] = gr_log2(2*p0/(p1+p0)) - bias; + metrics[1][255] = gr_log2(2*p1/(p1+p0)) - bias; +#ifdef notdef + /* The probability of a raw symbol error is the probability + * that a 1-bit would be received as a sample with value + * 0-128. This is the offset normal curve integrated from -Inf to 0. + */ + printf("symbol Pe = %lg\n",normal(-1/noise)); +#endif + for(bit=0;bit<2;bit++){ + for(s=0;s<256;s++){ + /* Scale and round to nearest integer */ + mettab[bit][s] = floor(metrics[bit][s] * scale + 0.5); +#ifdef notdef + printf("metrics[%d][%d] = %lg, mettab = %d\n", + bit,s,metrics[bit][s],mettab[bit][s]); +#endif + } + } +} diff --git a/gnuradio-core/src/lib/viterbi/tab.c b/gnuradio-core/src/lib/viterbi/tab.c new file mode 100644 index 00000000..1133c630 --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/tab.c @@ -0,0 +1,57 @@ +/* + * Copyright 1995 Phil Karn, KA9Q + * Copyright 2008 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. + */ + +/* 8-bit parity lookup table, generated by partab.c */ +unsigned char Partab[] = { + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 0, 0, 1, + 0, 1, 1, 0, 1, 0, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, +}; diff --git a/gnuradio-core/src/lib/viterbi/viterbi.c b/gnuradio-core/src/lib/viterbi/viterbi.c new file mode 100644 index 00000000..9f5c1e72 --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/viterbi.c @@ -0,0 +1,355 @@ +/* + * Copyright 1995 Phil Karn, KA9Q + * Copyright 2008 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. + */ + +/* + * Viterbi decoder for K=7 rate=1/2 convolutional code + * Some modifications from original Karn code by Matt Ettus + */ + +#include "viterbi.h" + +/* The two generator polynomials for the NASA Standard K=7 code. + * Since these polynomials are known to be optimal for this constraint + * length there is not much point in changing them. But if you do, you + * will have to regenerate the BUTTERFLY macro calls in viterbi() + */ +#define POLYA 0x6d +#define POLYB 0x4f + +/* The basic Viterbi decoder operation, called a "butterfly" + * operation because of the way it looks on a trellis diagram. Each + * butterfly involves an Add-Compare-Select (ACS) operation on the two nodes + * where the 0 and 1 paths from the current node merge at the next step of + * the trellis. + * + * The code polynomials are assumed to have 1's on both ends. Given a + * function encode_state() that returns the two symbols for a given + * encoder state in the low two bits, such a code will have the following + * identities for even 'n' < 64: + * + * encode_state(n) = encode_state(n+65) + * encode_state(n+1) = encode_state(n+64) = (3 ^ encode_state(n)) + * + * Any convolutional code you would actually want to use will have + * these properties, so these assumptions aren't too limiting. + * + * Doing this as a macro lets the compiler evaluate at compile time the + * many expressions that depend on the loop index and encoder state and + * emit them as immediate arguments. + * This makes an enormous difference on register-starved machines such + * as the Intel x86 family where evaluating these expressions at runtime + * would spill over into memory. + */ +#define BUTTERFLY(i,sym) { \ + int m0,m1;\ +\ + /* ACS for 0 branch */\ + m0 = state[i].metric + mets[sym]; /* 2*i */\ + m1 = state[i+32].metric + mets[3^sym]; /* 2*i + 64 */\ + if(m0 > m1){\ + next[2*i].metric = m0;\ + next[2*i].path = state[i].path << 1;\ + } else {\ + next[2*i].metric = m1;\ + next[2*i].path = (state[i+32].path << 1)|1;\ + }\ + /* ACS for 1 branch */\ + m0 = state[i].metric + mets[3^sym]; /* 2*i + 1 */\ + m1 = state[i+32].metric + mets[sym]; /* 2*i + 65 */\ + if(m0 > m1){\ + next[2*i+1].metric = m0;\ + next[2*i+1].path = state[i].path << 1;\ + } else {\ + next[2*i+1].metric = m1;\ + next[2*i+1].path = (state[i+32].path << 1)|1;\ + }\ +} + +extern unsigned char Partab[]; /* Parity lookup table */ + +/* Convolutionally encode data into binary symbols */ +unsigned char +encode(unsigned char *symbols, + unsigned char *data, + unsigned int nbytes, + unsigned char encstate) +{ + int i; + + while(nbytes-- != 0){ + for(i=7;i>=0;i--){ + encstate = (encstate << 1) | ((*data >> i) & 1); + *symbols++ = Partab[encstate & POLYA]; + *symbols++ = Partab[encstate & POLYB]; + } + data++; + } + + return encstate; +} + +/* Viterbi decoder */ +int +viterbi(unsigned long *metric, /* Final path metric (returned value) */ + unsigned char *data, /* Decoded output data */ + unsigned char *symbols, /* Raw deinterleaved input symbols */ + unsigned int nbits, /* Number of output bits */ + int mettab[2][256] /* Metric table, [sent sym][rx symbol] */ + ){ + unsigned int bitcnt = 0; + int mets[4]; + long bestmetric; + int beststate,i; + struct viterbi_state state0[64],state1[64],*state,*next; + + state = state0; + next = state1; + + /* Initialize starting metrics to prefer 0 state */ + state[0].metric = 0; + for(i=1;i<64;i++) + state[i].metric = -999999; + state[0].path = 0; + + for(bitcnt = 0;bitcnt < nbits;bitcnt++){ + /* Read input symbol pair and compute all possible branch + * metrics + */ + mets[0] = mettab[0][symbols[0]] + mettab[0][symbols[1]]; + mets[1] = mettab[0][symbols[0]] + mettab[1][symbols[1]]; + mets[2] = mettab[1][symbols[0]] + mettab[0][symbols[1]]; + mets[3] = mettab[1][symbols[0]] + mettab[1][symbols[1]]; + symbols += 2; + + /* These macro calls were generated by genbut.c */ + BUTTERFLY(0,0); + BUTTERFLY(1,1); + BUTTERFLY(2,3); + BUTTERFLY(3,2); + BUTTERFLY(4,3); + BUTTERFLY(5,2); + BUTTERFLY(6,0); + BUTTERFLY(7,1); + BUTTERFLY(8,0); + BUTTERFLY(9,1); + BUTTERFLY(10,3); + BUTTERFLY(11,2); + BUTTERFLY(12,3); + BUTTERFLY(13,2); + BUTTERFLY(14,0); + BUTTERFLY(15,1); + BUTTERFLY(16,2); + BUTTERFLY(17,3); + BUTTERFLY(18,1); + BUTTERFLY(19,0); + BUTTERFLY(20,1); + BUTTERFLY(21,0); + BUTTERFLY(22,2); + BUTTERFLY(23,3); + BUTTERFLY(24,2); + BUTTERFLY(25,3); + BUTTERFLY(26,1); + BUTTERFLY(27,0); + BUTTERFLY(28,1); + BUTTERFLY(29,0); + BUTTERFLY(30,2); + BUTTERFLY(31,3); + + /* Swap current and next states */ + if(bitcnt & 1){ + state = state0; + next = state1; + } else { + state = state1; + next = state0; + } + // ETTUS + //if(bitcnt > nbits-7){ + /* In tail, poison non-zero nodes */ + //for(i=1;i<64;i += 2) + // state[i].metric = -9999999; + //} + /* Produce output every 8 bits once path memory is full */ + if((bitcnt % 8) == 5 && bitcnt > 32){ + /* Find current best path */ + bestmetric = state[0].metric; + beststate = 0; + for(i=1;i<64;i++){ + if(state[i].metric > bestmetric){ + bestmetric = state[i].metric; + beststate = i; + } + } +#ifdef notdef + printf("metrics[%d] = %d state = %lx\n",beststate, + state[beststate].metric,state[beststate].path); +#endif + *data++ = state[beststate].path >> 24; + } + + } + /* Output remaining bits from 0 state */ + // ETTUS Find best state instead + bestmetric = state[0].metric; + beststate = 0; + for(i=1;i<64;i++){ + if(state[i].metric > bestmetric){ + bestmetric = state[i].metric; + beststate = i; + } + } + if((i = bitcnt % 8) != 6) + state[beststate].path <<= 6-i; + + *data++ = state[beststate].path >> 24; + *data++ = state[beststate].path >> 16; + *data++ = state[beststate].path >> 8; + *data = state[beststate].path; + //printf ("BS = %d\tBSM = %d\tM0 = %d\n",beststate,state[beststate].metric,state[0].metric); + *metric = state[beststate].metric; + return 0; +} + + +void +viterbi_chunks_init(struct viterbi_state* state) { + // Initialize starting metrics to prefer 0 state + int i; + state[0].metric = 0; + state[0].path = 0; + for(i=1;i<64;i++) + state[i].metric = -999999; +} + +void +viterbi_butterfly8(unsigned char *symbols, int mettab[2][256], struct viterbi_state *state0, struct viterbi_state *state1) +{ + unsigned int bitcnt; + int mets[4]; + + struct viterbi_state *state, *next; + state = state0; + next = state1; + // Operate on 16 symbols (8 bits) at a time + for(bitcnt = 0;bitcnt < 8;bitcnt++){ + // Read input symbol pair and compute all possible branch metrics + mets[0] = mettab[0][symbols[0]] + mettab[0][symbols[1]]; + mets[1] = mettab[0][symbols[0]] + mettab[1][symbols[1]]; + mets[2] = mettab[1][symbols[0]] + mettab[0][symbols[1]]; + mets[3] = mettab[1][symbols[0]] + mettab[1][symbols[1]]; + symbols += 2; + + // These macro calls were generated by genbut.c + BUTTERFLY(0,0);BUTTERFLY(1,1);BUTTERFLY(2,3);BUTTERFLY(3,2); + BUTTERFLY(4,3);BUTTERFLY(5,2);BUTTERFLY(6,0);BUTTERFLY(7,1); + BUTTERFLY(8,0);BUTTERFLY(9,1);BUTTERFLY(10,3);BUTTERFLY(11,2); + BUTTERFLY(12,3);BUTTERFLY(13,2);BUTTERFLY(14,0);BUTTERFLY(15,1); + BUTTERFLY(16,2);BUTTERFLY(17,3);BUTTERFLY(18,1);BUTTERFLY(19,0); + BUTTERFLY(20,1);BUTTERFLY(21,0);BUTTERFLY(22,2);BUTTERFLY(23,3); + BUTTERFLY(24,2);BUTTERFLY(25,3);BUTTERFLY(26,1);BUTTERFLY(27,0); + BUTTERFLY(28,1);BUTTERFLY(29,0);BUTTERFLY(30,2);BUTTERFLY(31,3); + + // Swap current and next states + if(bitcnt & 1){ + state = state0; + next = state1; + } else { + state = state1; + next = state0; + } + } +} + +void +viterbi_butterfly2(unsigned char *symbols, int mettab[2][256], struct viterbi_state *state0, struct viterbi_state *state1) +{ + //unsigned int bitcnt; + int mets[4]; + + struct viterbi_state *state, *next; + state = state0; + next = state1; + // Operate on 4 symbols (2 bits) at a time + + // Read input symbol pair and compute all possible branch metrics + mets[0] = mettab[0][symbols[0]] + mettab[0][symbols[1]]; + mets[1] = mettab[0][symbols[0]] + mettab[1][symbols[1]]; + mets[2] = mettab[1][symbols[0]] + mettab[0][symbols[1]]; + mets[3] = mettab[1][symbols[0]] + mettab[1][symbols[1]]; + + // These macro calls were generated by genbut.c + BUTTERFLY(0,0);BUTTERFLY(1,1);BUTTERFLY(2,3);BUTTERFLY(3,2); + BUTTERFLY(4,3);BUTTERFLY(5,2);BUTTERFLY(6,0);BUTTERFLY(7,1); + BUTTERFLY(8,0);BUTTERFLY(9,1);BUTTERFLY(10,3);BUTTERFLY(11,2); + BUTTERFLY(12,3);BUTTERFLY(13,2);BUTTERFLY(14,0);BUTTERFLY(15,1); + BUTTERFLY(16,2);BUTTERFLY(17,3);BUTTERFLY(18,1);BUTTERFLY(19,0); + BUTTERFLY(20,1);BUTTERFLY(21,0);BUTTERFLY(22,2);BUTTERFLY(23,3); + BUTTERFLY(24,2);BUTTERFLY(25,3);BUTTERFLY(26,1);BUTTERFLY(27,0); + BUTTERFLY(28,1);BUTTERFLY(29,0);BUTTERFLY(30,2);BUTTERFLY(31,3); + + state = state1; + next = state0; + + // Read input symbol pair and compute all possible branch metrics + mets[0] = mettab[0][symbols[2]] + mettab[0][symbols[3]]; + mets[1] = mettab[0][symbols[2]] + mettab[1][symbols[3]]; + mets[2] = mettab[1][symbols[2]] + mettab[0][symbols[3]]; + mets[3] = mettab[1][symbols[2]] + mettab[1][symbols[3]]; + + // These macro calls were generated by genbut.c + BUTTERFLY(0,0);BUTTERFLY(1,1);BUTTERFLY(2,3);BUTTERFLY(3,2); + BUTTERFLY(4,3);BUTTERFLY(5,2);BUTTERFLY(6,0);BUTTERFLY(7,1); + BUTTERFLY(8,0);BUTTERFLY(9,1);BUTTERFLY(10,3);BUTTERFLY(11,2); + BUTTERFLY(12,3);BUTTERFLY(13,2);BUTTERFLY(14,0);BUTTERFLY(15,1); + BUTTERFLY(16,2);BUTTERFLY(17,3);BUTTERFLY(18,1);BUTTERFLY(19,0); + BUTTERFLY(20,1);BUTTERFLY(21,0);BUTTERFLY(22,2);BUTTERFLY(23,3); + BUTTERFLY(24,2);BUTTERFLY(25,3);BUTTERFLY(26,1);BUTTERFLY(27,0); + BUTTERFLY(28,1);BUTTERFLY(29,0);BUTTERFLY(30,2);BUTTERFLY(31,3); +} + +unsigned char +viterbi_get_output(struct viterbi_state *state, unsigned char *outbuf) { + // Produce output every 8 bits once path memory is full + // if((bitcnt % 8) == 5 && bitcnt > 32) { + + // Find current best path + unsigned int i,beststate; + int bestmetric; + + bestmetric = state[0].metric; + beststate = 0; + for(i=1;i<64;i++) + if(state[i].metric > bestmetric) { + bestmetric = state[i].metric; + beststate = i; + } + *outbuf = state[beststate].path >> 24; + return bestmetric; +} + + +//printf ("BS = %d\tBSM = %d\tM0 = %d\n",beststate,state[beststate].metric,state[0].metric); +// In tail, poison non-zero nodes +//if(bits_out > packet_size-7) +// for(i=1;i<64;i += 2) +// state[i].metric = -9999999; + diff --git a/gnuradio-core/src/lib/viterbi/viterbi.h b/gnuradio-core/src/lib/viterbi/viterbi.h new file mode 100644 index 00000000..155b0d93 --- /dev/null +++ b/gnuradio-core/src/lib/viterbi/viterbi.h @@ -0,0 +1,49 @@ +/* + * Copyright 2008 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. + */ + +/* The path memory for each state is 32 bits. This is slightly shorter + * than we'd like for K=7, especially since we chain back every 8 bits. + * But it fits so nicely into a 32-bit machine word... + */ +struct viterbi_state { + unsigned long path; /* Decoded path to this state */ + long metric; /* Cumulative metric to this state */ +}; + +int gen_met(int mettab[2][256], /* Metric table */ + int amp, /* Signal amplitude */ + double esn0, /* Es/N0 ratio in dB */ + double bias, /* Metric bias */ + int scale); /* Scale factor */ + +unsigned char +encode(unsigned char *symbols, unsigned char *data, + unsigned int nbytes,unsigned char encstate); + +void +viterbi_chunks_init(struct viterbi_state* state); + +void +viterbi_butterfly2(unsigned char *symbols, int mettab[2][256], + struct viterbi_state *state0, struct viterbi_state *state1); + +unsigned char +viterbi_get_output(struct viterbi_state *state, unsigned char *outbuf); diff --git a/gnuradio-core/src/python/Makefile.in b/gnuradio-core/src/python/Makefile.in index 269b105a..75faae37 100644 --- a/gnuradio-core/src/python/Makefile.in +++ b/gnuradio-core/src/python/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(noinst_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,11 +161,14 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -147,10 +176,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -158,9 +186,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -168,6 +203,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -180,73 +217,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -256,49 +286,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -306,15 +376,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -324,16 +537,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -342,63 +573,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = gnuradio bin noinst_PYTHON = \ build_utils.py \ @@ -411,8 +711,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -443,10 +743,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -478,8 +774,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -523,8 +818,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -549,8 +844,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -560,13 +855,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -580,23 +874,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -610,7 +902,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -618,10 +910,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -642,6 +939,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -657,8 +955,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -672,12 +969,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -696,23 +1001,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/python/bin/Makefile.am b/gnuradio-core/src/python/bin/Makefile.am index 2b905f13..0afd3276 100644 --- a/gnuradio-core/src/python/bin/Makefile.am +++ b/gnuradio-core/src/python/bin/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -24,7 +24,5 @@ include $(top_srcdir)/Makefile.common EXTRA_DIST = microtune.py -bin_SCRIPTS = \ +noinst_SCRIPTS = \ microtune.py - -CLEANFILES = *.pyc diff --git a/gnuradio-core/src/python/bin/Makefile.in b/gnuradio-core/src/python/bin/Makefile.in index 2125a639..e6b71a0b 100644 --- a/gnuradio-core/src/python/bin/Makefile.in +++ b/gnuradio-core/src/python/bin/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/python/bin ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -132,19 +158,16 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -binSCRIPT_INSTALL = $(INSTALL_SCRIPT) -SCRIPTS = $(bin_SCRIPTS) +SCRIPTS = $(noinst_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -152,9 +175,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -162,6 +192,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -174,73 +206,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -250,49 +275,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -300,15 +365,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -318,16 +526,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -336,68 +562,136 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = microtune.py -bin_SCRIPTS = \ +noinst_SCRIPTS = \ microtune.py -CLEANFILES = *.pyc all: all-am .SUFFIXES: @@ -405,8 +699,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -430,35 +724,12 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-binSCRIPTS: $(bin_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_SCRIPTS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f $$d$$p; then \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ - else :; fi; \ - done - -uninstall-binSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(bin_SCRIPTS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -467,23 +738,21 @@ CTAGS: distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -494,13 +763,13 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -516,9 +785,9 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -532,7 +801,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -546,12 +815,20 @@ info-am: install-data-am: -install-exec-am: install-binSCRIPTS +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -570,18 +847,32 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binSCRIPTS uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binSCRIPTS install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-binSCRIPTS uninstall-info-am + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/python/build_utils.py b/gnuradio-core/src/python/build_utils.py index f1c533a2..c7acf6bd 100644 --- a/gnuradio-core/src/python/build_utils.py +++ b/gnuradio-core/src/python/build_utils.py @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -33,6 +33,23 @@ except KeyError, e: srcdir = "." srcdir = srcdir + '/' +# set do_makefile to either true or false dependeing on the environment +try: + if os.environ['do_makefile'] == '0': + do_makefile = False + else: + do_makefile = True +except KeyError, e: + do_makefile = False + +# set do_sources to either true or false dependeing on the environment +try: + if os.environ['do_sources'] == '0': + do_sources = False + else: + do_sources = True +except KeyError, e: + do_sources = True name_dict = {} @@ -44,28 +61,39 @@ def log_output_name (name): entry.append (name) def open_and_log_name (name, dir): - f = open (name, dir) + global do_sources + if do_sources: + f = open (name, dir) + else: + f = None log_output_name (name) return f def expand_template (d, template_filename, extra = ""): '''Given a dictionary D and a TEMPLATE_FILENAME, expand template into output file ''' + global do_sources output_extension = extract_extension (template_filename) template = open_src (template_filename, 'r') output_name = d['NAME'] + extra + '.' + output_extension log_output_name (output_name) - output = open (output_name, 'w') - do_substitution (d, template, output) + if do_sources: + output = open (output_name, 'w') + do_substitution (d, template, output) + output.close () template.close () - output.close () def output_glue (dirname): output_makefile_fragment () output_ifile_include (dirname) - + def output_makefile_fragment (): - f = open ('Makefile.gen', 'w') + global do_makefile + if not do_makefile: + return +# overwrite the source, which must be writable; this should have been +# checked for beforehand in the top-level Makefile.gen.gen . + f = open_src ('Makefile.gen', 'w') f.write ('#\n# This file is machine generated. All edits will be overwritten\n#\n') output_subfrag (f, 'h') output_subfrag (f, 'i') @@ -73,16 +101,18 @@ def output_makefile_fragment (): f.close () def output_ifile_include (dirname): - f = open ('%s_generated.i' % (dirname,), 'w') - f.write ('//\n// This file is machine generated. All edits will be overwritten\n//\n') - files = name_dict.setdefault ('i', []) - files.sort () - f.write ('%{\n') - for file in files: - f.write ('#include <%s>\n' % (file[0:-1] + 'h',)) - f.write ('%}\n\n') - for file in files: - f.write ('%%include <%s>\n' % (file,)) + global do_sources + if do_sources: + f = open ('%s_generated.i' % (dirname,), 'w') + f.write ('//\n// This file is machine generated. All edits will be overwritten\n//\n') + files = name_dict.setdefault ('i', []) + files.sort () + f.write ('%{\n') + for file in files: + f.write ('#include <%s>\n' % (file[0:-1] + 'h',)) + f.write ('%}\n\n') + for file in files: + f.write ('%%include <%s>\n' % (file,)) def output_subfrag (f, ext): files = name_dict.setdefault (ext, []) @@ -91,7 +121,6 @@ def output_subfrag (f, ext): for file in files: f.write (" \\\n\t%s" % (file,)) f.write ("\n\n") - def extract_extension (template_name): # template name is something like: GrFIRfilterXXX.h.t diff --git a/gnuradio-core/src/python/gnuradio/Makefile.am b/gnuradio-core/src/python/gnuradio/Makefile.am index fe15daac..5cc0824b 100644 --- a/gnuradio-core/src/python/gnuradio/Makefile.am +++ b/gnuradio-core/src/python/gnuradio/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,7 +21,7 @@ include $(top_srcdir)/Makefile.common -SUBDIRS = gr gru gruimpl blks blksimpl +SUBDIRS = gr gru gruimpl blks2 blks2impl vocoder grpython_PYTHON = \ __init__.py \ @@ -29,9 +29,8 @@ grpython_PYTHON = \ eng_notation.py \ eng_option.py \ modulation_utils.py \ + ofdm_packet_utils.py \ packet_utils.py \ gr_unittest.py \ optfir.py \ window.py - -CLEANFILES = *.pyc diff --git a/gnuradio-core/src/python/gnuradio/Makefile.in b/gnuradio-core/src/python/gnuradio/Makefile.in index 696714ec..8d4de00d 100644 --- a/gnuradio-core/src/python/gnuradio/Makefile.in +++ b/gnuradio-core/src/python/gnuradio/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(grpython_PYTHON) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/python/gnuradio ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,11 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -148,6 +175,8 @@ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(grpythondir)" grpythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -155,10 +184,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -166,9 +194,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -176,6 +211,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -188,73 +225,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -264,49 +294,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -314,15 +384,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -332,16 +545,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -350,76 +581,145 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -SUBDIRS = gr gru gruimpl blks blksimpl +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = gr gru gruimpl blks2 blks2impl vocoder grpython_PYTHON = \ __init__.py \ audio.py \ eng_notation.py \ eng_option.py \ modulation_utils.py \ + ofdm_packet_utils.py \ packet_utils.py \ gr_unittest.py \ optfir.py \ window.py -CLEANFILES = *.pyc all: all-recursive .SUFFIXES: @@ -427,8 +727,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -458,13 +758,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grpythonPYTHON: $(grpython_PYTHON) @$(NORMAL_INSTALL) - test -z "$(grpythondir)" || $(mkdir_p) "$(DESTDIR)$(grpythondir)" + test -z "$(grpythondir)" || $(MKDIR_P) "$(DESTDIR)$(grpythondir)" @list='$(grpython_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ @@ -522,8 +818,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -567,8 +862,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -593,8 +888,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -604,13 +899,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -624,23 +918,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -654,7 +946,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -662,17 +954,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(grpythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -689,9 +986,9 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -705,8 +1002,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -720,12 +1016,20 @@ info-am: install-data-am: install-grpythonPYTHON +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -744,25 +1048,36 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-grpythonPYTHON uninstall-info-am +uninstall-am: uninstall-grpythonPYTHON -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grpythonPYTHON install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-grpythonPYTHON \ - uninstall-info-am + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grpythonPYTHON install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-grpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/audio.py b/gnuradio-core/src/python/gnuradio/audio.py index 28ed218d..f6e921f0 100644 --- a/gnuradio-core/src/python/gnuradio/audio.py +++ b/gnuradio-core/src/python/gnuradio/audio.py @@ -40,7 +40,7 @@ sink = None known_modules = ( - 'audio_alsa', 'audio_oss', 'audio_osx', 'audio_jack', 'audio_portaudio') + 'audio_alsa', 'audio_oss', 'audio_osx', 'audio_jack', 'audio_portaudio', 'audio_windows') def try_import(name): diff --git a/gnuradio-core/src/python/gnuradio/blks/Makefile.am b/gnuradio-core/src/python/gnuradio/blks/Makefile.am deleted file mode 100644 index 48cfff0e..00000000 --- a/gnuradio-core/src/python/gnuradio/blks/Makefile.am +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -# EXTRA_DIST = run_tests.in -# TESTS = run_tests - -grblkspythondir = $(grpythondir)/blks - -grblkspython_PYTHON = \ - __init__.py - - -noinst_PYTHON = - -CLEANFILES = *.pyc *.pyo diff --git a/gnuradio-core/src/python/gnuradio/blks/Makefile.in b/gnuradio-core/src/python/gnuradio/blks/Makefile.in deleted file mode 100644 index af8c5a02..00000000 --- a/gnuradio-core/src/python/gnuradio/blks/Makefile.in +++ /dev/null @@ -1,607 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2005 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 -*- -# -# Copyright 2004,2006,2007 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -DIST_COMMON = $(grblkspython_PYTHON) $(noinst_PYTHON) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common -subdir = gnuradio-core/src/python/gnuradio/blks -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(grblkspythondir)" -grblkspythonPYTHON_INSTALL = $(INSTALL_DATA) -py_compile = $(top_srcdir)/py-compile -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - -# includes -grincludedir = $(includedir)/gnuradio - -# swig includes -swigincludedir = $(grincludedir)/swig - -# Install this stuff in the appropriate subdirectory -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -grpythondir = $(pythondir)/gnuradio -grpyexecdir = $(pyexecdir)/gnuradio - -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern - -# Where to find gnuradio include files in the current build tree -# top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - - -# How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la - -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i - -# How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include - -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la - -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) - -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f - -# EXTRA_DIST = run_tests.in -# TESTS = run_tests -grblkspythondir = $(grpythondir)/blks -grblkspython_PYTHON = \ - __init__.py - -noinst_PYTHON = -CLEANFILES = *.pyc *.pyo -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blks/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blks/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-grblkspythonPYTHON: $(grblkspython_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(grblkspythondir)" || $(mkdir_p) "$(DESTDIR)$(grblkspythondir)" - @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ - f=$(am__strip_dir) \ - dlist="$$dlist $$f"; \ - echo " $(grblkspythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grblkspythondir)/$$f'"; \ - $(grblkspythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grblkspythondir)/$$f"; \ - else :; fi; \ - done; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(grblkspythondir)" $$dlist; \ - else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grblkspythondir)" $$dlist; \ - fi; \ - else :; fi - -uninstall-grblkspythonPYTHON: - @$(NORMAL_UNINSTALL) - @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ - f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(grblkspythondir)/$$f"; \ - rm -f "$(DESTDIR)$(grblkspythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(grblkspythondir)/$${f}o"; \ - done -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: - for dir in "$(DESTDIR)$(grblkspythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-grblkspythonPYTHON - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-grblkspythonPYTHON uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-grblkspythonPYTHON install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am uninstall uninstall-am uninstall-grblkspythonPYTHON \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/blks/__init__.py b/gnuradio-core/src/python/gnuradio/blks/__init__.py deleted file mode 100644 index 08836bbc..00000000 --- a/gnuradio-core/src/python/gnuradio/blks/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright 2005 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. -# - -import glob -import os.path - -# Semi-hideous kludge to import everything in the blksimpl directory -# into the gnuradio.blks namespace. This keeps us from having to remember -# to manually update this file. - -for p in __path__: - filenames = glob.glob (os.path.join (p, "..", "blksimpl", "*.py")) - for f in filenames: - f = os.path.basename(f).lower() - f = f[:-3] - if f == '__init__': - continue - # print f - exec "from gnuradio.blksimpl.%s import *" % (f,) diff --git a/gnuradio-core/src/python/gnuradio/blks2/Makefile.am b/gnuradio-core/src/python/gnuradio/blks2/Makefile.am new file mode 100644 index 00000000..04b7c650 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2005,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. +# + +include $(top_srcdir)/Makefile.common + +# EXTRA_DIST = run_tests.in +# TESTS = run_tests + +grblks2pythondir = $(grpythondir)/blks2 + +grblks2python_PYTHON = \ + __init__.py diff --git a/gnuradio-core/src/python/gnuradio/blks2/Makefile.in b/gnuradio-core/src/python/gnuradio/blks2/Makefile.in new file mode 100644 index 00000000..19c1e8c4 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2/Makefile.in @@ -0,0 +1,920 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2005,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grblks2python_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gnuradio-core/src/python/gnuradio/blks2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grblks2pythondir)" +grblks2pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# EXTRA_DIST = run_tests.in +# TESTS = run_tests +grblks2pythondir = $(grpythondir)/blks2 +grblks2python_PYTHON = \ + __init__.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blks2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blks2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grblks2pythonPYTHON: $(grblks2python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(grblks2pythondir)" || $(MKDIR_P) "$(DESTDIR)$(grblks2pythondir)" + @list='$(grblks2python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(grblks2pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grblks2pythondir)/$$f'"; \ + $(grblks2pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grblks2pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(grblks2pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grblks2pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-grblks2pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(grblks2python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(grblks2pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(grblks2pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(grblks2pythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(grblks2pythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grblks2pythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grblks2pythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grblks2pythonPYTHON install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-grblks2pythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/blks2/__init__.py b/gnuradio-core/src/python/gnuradio/blks2/__init__.py new file mode 100644 index 00000000..89ebb922 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2/__init__.py @@ -0,0 +1,37 @@ +# +# Copyright 2005 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. +# + +import glob +import os.path + +# Semi-hideous kludge to import everything in the blksimpl2 directory +# into the gnuradio.blks2 namespace. This keeps us from having to remember +# to manually update this file. + +for p in __path__: + filenames = glob.glob (os.path.join (p, "..", "blks2impl", "*.py")) + for f in filenames: + f = os.path.basename(f).lower() + f = f[:-3] + if f == '__init__': + continue + # print f + exec "from gnuradio.blks2impl.%s import *" % (f,) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am new file mode 100644 index 00000000..f07abd4c --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am @@ -0,0 +1,63 @@ +# +# Copyright 2005,2007,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. +# + +include $(top_srcdir)/Makefile.common + +# EXTRA_DIST = run_tests.in +# TESTS = run_tests + +grblkspythondir = $(grpythondir)/blks2impl + +grblkspython_PYTHON = \ + __init__.py \ + am_demod.py \ + channel_model.py \ + dbpsk.py \ + dqpsk.py \ + d8psk.py \ + filterbank.py \ + fm_demod.py \ + fm_emph.py \ + gmsk.py \ + cpm.py \ + logpwrfft.py \ + nbfm_rx.py \ + nbfm_tx.py \ + ofdm.py \ + ofdm_receiver.py \ + ofdm_sync_fixed.py \ + ofdm_sync_pn.py \ + ofdm_sync_pnac.py \ + ofdm_sync_ml.py \ + pkt.py \ + psk.py \ + qam.py \ + qam8.py \ + qam16.py \ + qam64.py \ + qam256.py \ + rational_resampler.py \ + standard_squelch.py \ + stream_to_vector_decimator.py \ + wfm_rcv.py \ + wfm_rcv_fmdet.py \ + wfm_rcv_pll.py \ + wfm_tx.py diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.in b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.in new file mode 100644 index 00000000..322e8ade --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.in @@ -0,0 +1,953 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2005,2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grblkspython_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gnuradio-core/src/python/gnuradio/blks2impl +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grblkspythondir)" +grblkspythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# EXTRA_DIST = run_tests.in +# TESTS = run_tests +grblkspythondir = $(grpythondir)/blks2impl +grblkspython_PYTHON = \ + __init__.py \ + am_demod.py \ + channel_model.py \ + dbpsk.py \ + dqpsk.py \ + d8psk.py \ + filterbank.py \ + fm_demod.py \ + fm_emph.py \ + gmsk.py \ + cpm.py \ + logpwrfft.py \ + nbfm_rx.py \ + nbfm_tx.py \ + ofdm.py \ + ofdm_receiver.py \ + ofdm_sync_fixed.py \ + ofdm_sync_pn.py \ + ofdm_sync_pnac.py \ + ofdm_sync_ml.py \ + pkt.py \ + psk.py \ + qam.py \ + qam8.py \ + qam16.py \ + qam64.py \ + qam256.py \ + rational_resampler.py \ + standard_squelch.py \ + stream_to_vector_decimator.py \ + wfm_rcv.py \ + wfm_rcv_fmdet.py \ + wfm_rcv_pll.py \ + wfm_tx.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blks2impl/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blks2impl/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grblkspythonPYTHON: $(grblkspython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(grblkspythondir)" || $(MKDIR_P) "$(DESTDIR)$(grblkspythondir)" + @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(grblkspythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grblkspythondir)/$$f'"; \ + $(grblkspythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grblkspythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(grblkspythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grblkspythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-grblkspythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(grblkspythondir)/$$f"; \ + rm -f "$(DESTDIR)$(grblkspythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(grblkspythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(grblkspythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grblkspythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grblkspythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grblkspythonPYTHON install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-grblkspythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/__init__.py b/gnuradio-core/src/python/gnuradio/blks2impl/__init__.py similarity index 100% rename from gnuradio-core/src/python/gnuradio/blksimpl/__init__.py rename to gnuradio-core/src/python/gnuradio/blks2impl/__init__.py diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/am_demod.py b/gnuradio-core/src/python/gnuradio/blks2impl/am_demod.py new file mode 100644 index 00000000..b454f094 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/am_demod.py @@ -0,0 +1,76 @@ +# +# Copyright 2006,2007 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 import gr, optfir + +class am_demod_cf(gr.hier_block2): + """ + Generalized AM demodulation block with audio filtering. + + This block demodulates a band-limited, complex down-converted AM + channel into the the original baseband signal, applying low pass + filtering to the audio output. It produces a float stream in the + range [-1.0, +1.0]. + + @param channel_rate: incoming sample rate of the AM baseband + @type sample_rate: integer + @param audio_decim: input to output decimation rate + @type audio_decim: integer + @param audio_pass: audio low pass filter passband frequency + @type audio_pass: float + @param audio_stop: audio low pass filter stop frequency + @type audio_stop: float + """ + def __init__(self, channel_rate, audio_decim, audio_pass, audio_stop): + gr.hier_block2.__init__(self, "am_demod_cf", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Input signature + + MAG = gr.complex_to_mag() + DCR = gr.add_const_ff(-1.0) + + audio_taps = optfir.low_pass(0.5, # Filter gain + channel_rate, # Sample rate + audio_pass, # Audio passband + audio_stop, # Audio stopband + 0.1, # Passband ripple + 60) # Stopband attenuation + LPF = gr.fir_filter_fff(audio_decim, audio_taps) + + self.connect(self, MAG, DCR, LPF, self) + +class demod_10k0a3e_cf(am_demod_cf): + """ + AM demodulation block, 10 KHz channel. + + This block demodulates an AM channel conformant to 10K0A3E emission + standards, such as broadcast band AM transmissions. + + @param channel_rate: incoming sample rate of the AM baseband + @type sample_rate: integer + @param audio_decim: input to output decimation rate + @type audio_decim: integer + """ + def __init__(self, channel_rate, audio_decim): + am_demod_cf.__init__(self, channel_rate, audio_decim, + 5000, # Audio passband + 5500) # Audio stopband + \ No newline at end of file diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/channel_model.py b/gnuradio-core/src/python/gnuradio/blks2impl/channel_model.py new file mode 100644 index 00000000..57487dff --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/channel_model.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# +# 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. +# + +from gnuradio import gr + +# This block is now a C++ hierarchical block, gr.channel_model +channel_model = gr.channel_model diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/cpm.py b/gnuradio-core/src/python/gnuradio/blks2impl/cpm.py new file mode 100644 index 00000000..8f593cd5 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/cpm.py @@ -0,0 +1,249 @@ +# +# CPM modulation and demodulation. +# +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +from gnuradio import gr +from gnuradio import modulation_utils +from math import pi +import numpy +from pprint import pprint +import inspect + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_bits_per_symbol = 1 +_def_h_numerator = 1 +_def_h_denominator = 2 +_def_cpm_type = 0 # 0=CPFSK, 1=GMSK, 2=RC, 3=GENERAL +_def_bt = 0.35 +_def_symbols_per_pulse = 1 +_def_generic_taps = numpy.empty(1) +_def_verbose = False +_def_log = False + + +# ///////////////////////////////////////////////////////////////////////////// +# CPM modulator +# ///////////////////////////////////////////////////////////////////////////// + +class cpm_mod(gr.hier_block2): + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + bits_per_symbol=_def_bits_per_symbol, + h_numerator=_def_h_numerator, + h_denominator=_def_h_denominator, + cpm_type=_def_cpm_type, + bt=_def_bt, + symbols_per_pulse=_def_symbols_per_pulse, + generic_taps=_def_generic_taps, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for Continuous Phase + modulation. + + The input is a byte stream (unsigned char) + representing packed bits and the + output is the complex modulated signal at baseband. + + See Proakis for definition of generic CPM signals: + s(t)=exp(j phi(t)) + phi(t)= 2 pi h int_0^t f(t') dt' + f(t)=sum_k a_k g(t-kT) + (normalizing assumption: int_0^infty g(t) dt = 1/2) + + @param samples_per_symbol: samples per baud >= 2 + @type samples_per_symbol: integer + @param bits_per_symbol: bits per symbol + @type bits_per_symbol: integer + @param h_numerator: numerator of modulation index + @type h_numerator: integer + @param h_denominator: denominator of modulation index (numerator and denominator must be relative primes) + @type h_denominator: integer + @param cpm_type: supported types are: 0=CPFSK, 1=GMSK, 2=RC, 3=GENERAL + @type cpm_type: integer + @param bt: bandwidth symbol time product for GMSK + @type bt: float + @param symbols_per_pulse: shaping pulse duration in symbols + @type symbols_per_pulse: integer + @param generic_taps: define a generic CPM pulse shape (sum = samples_per_symbol/2) + @type generic_taps: array of floats + + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modulation data to files? + @type debug: bool + """ + + gr.hier_block2.__init__("cpm_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._bits_per_symbol = bits_per_symbol + self._h_numerator = h_numerator + self._h_denominator = h_denominator + self._cpm_type = cpm_type + self._bt=bt + if cpm_type == 0 or cpm_type == 2 or cpm_type == 3: # CPFSK, RC, Generic + self._symbols_per_pulse = symbols_per_pulse + elif cpm_type == 1: # GMSK + self._symbols_per_pulse = 4 + else: + raise TypeError, ("cpm_type must be an integer in {0,1,2,3}, is %r" % (cpm_type,)) + + self._generic_taps=numpy.array(generic_taps) + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("samples_per_symbol must be an integer >= 2, is %r" % (samples_per_symbol,)) + + self.nsymbols = 2**bits_per_symbol + self.sym_alphabet=numpy.arange(-(self.nsymbols-1),self.nsymbols,2) + + + self.ntaps = self._symbols_per_pulse * samples_per_symbol + sensitivity = 2 * pi * h_numerator / h_denominator / samples_per_symbol + + # Unpack Bytes into bits_per_symbol groups + self.B2s = gr.packed_to_unpacked_bb(bits_per_symbol,gr.GR_MSB_FIRST) + + + # Turn it into symmetric PAM data. + self.pam = gr.chunks_to_symbols_bf(self.sym_alphabet,1) + + # Generate pulse (sum of taps = samples_per_symbol/2) + if cpm_type == 0: # CPFSK + self.taps= (1.0/self._symbols_per_pulse/2,) * self.ntaps + elif cpm_type == 1: # GMSK + gaussian_taps = gr.firdes.gaussian( + 1.0/2, # gain + samples_per_symbol, # symbol_rate + bt, # bandwidth * symbol time + self.ntaps # number of taps + ) + sqwave = (1,) * samples_per_symbol # rectangular window + self.taps = numpy.convolve(numpy.array(gaussian_taps),numpy.array(sqwave)) + elif cpm_type == 2: # Raised Cosine + # generalize it for arbitrary roll-off factor + self.taps = (1-numpy.cos(2*pi*numpy.arange(0,self.ntaps)/samples_per_symbol/self._symbols_per_pulse))/(2*self._symbols_per_pulse) + elif cpm_type == 3: # Generic CPM + self.taps = generic_taps + else: + raise TypeError, ("cpm_type must be an integer in {0,1,2,3}, is %r" % (cpm_type,)) + + self.filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps) + + # FM modulation + self.fmmod = gr.frequency_modulator_fc(sensitivity) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect + self.connect(self, self.B2s, self.pam, self.filter, self.fmmod, self) + + #def samples_per_symbol(self): + #return self._samples_per_symbol + + #def bits_per_symbol(self): + #return self._bits_per_symbol + + #def h_numerator(self): + #return self._h_numerator + + #def h_denominator(self): + #return self._h_denominator + + #def cpm_type(self): + #return self._cpm_type + + #def bt(self): + #return self._bt + + #def symbols_per_pulse(self): + #return self._symbols_per_pulse + + + def _print_verbage(self): + print "Samples per symbol = %d" % self._samples_per_symbol + print "Bits per symbol = %d" % self._bits_per_symbol + print "h = " , self._h_numerator , " / " , self._h_denominator + print "Symbol alphabet = " , self.sym_alphabet + print "Symbols per pulse = %d" % self._symbols_per_pulse + print "taps = " , self.taps + + print "CPM type = %d" % self._cpm_type + if self._cpm_type == 1: + print "Gaussian filter BT = %.2f" % self._bt + + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.B2s, + gr.file_sink(gr.sizeof_float, "symbols.dat")) + self.connect(self.pam, + gr.file_sink(gr.sizeof_float, "pam.dat")) + self.connect(self.filter, + gr.file_sink(gr.sizeof_float, "filter.dat")) + self.connect(self.fmmod, + gr.file_sink(gr.sizeof_gr_complex, "fmmod.dat")) + + + def add_options(parser): + """ + Adds CPM modulation-specific options to the standard parser + """ + parser.add_option("", "--bt", type="float", default=_def_bt, + help="set bandwidth-time product [default=%default] (GMSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(cpm_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + + +# ///////////////////////////////////////////////////////////////////////////// +# CPM demodulator +# ///////////////////////////////////////////////////////////////////////////// +# +# Not yet implemented +# + + + +# +# Add these to the mod/demod registry +# +modulation_utils.add_type_1_mod('cpm', cpm_mod) +#modulation_utils.add_type_1_demod('cpm', cpm_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/d8psk.py b/gnuradio-core/src/python/gnuradio/blks2impl/d8psk.py new file mode 100644 index 00000000..67cf9f56 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/d8psk.py @@ -0,0 +1,363 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +differential 8PSK modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import psk +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 3 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = 0.175 +_def_gain_mu = 0.175 +_def_mu = 0.5 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# D8PSK modulator +# ///////////////////////////////////////////////////////////////////////////// + +class d8psk_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for RRC-filtered QPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "d8psk_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) + + ntaps = 11 * samples_per_symbol + + arity = pow(2,self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(psk.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(psk.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + rot = 1 + rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) + self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (sps since we're interpolating by sps) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 3 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gray code = %s" % self._gray_code + print "RS roll-off factor = %f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "tx_bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "tx_graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "tx_diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "tx_chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "tx_rrc_filter.dat")) + + def add_options(parser): + """ + Adds 8PSK modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(d8psk_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# ///////////////////////////////////////////////////////////////////////////// +# D8PSK demodulator +# +# Differentially coherent detection of differentially encoded 8psk +# ///////////////////////////////////////////////////////////////////////////// + +class d8psk_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for RRC-filtered DQPSK demodulation + + The input is the complex modulated signal at baseband. + The output is a stream of bits packed 1 bit per byte (LSB) + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: float + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param costas_alpha: loop filter gain + @type costas_alphas: float + @param gain_mu: for M&M block + @type gain_mu: float + @param mu: for M&M block + @type mu: float + @param omega_relative_limit: for M&M block + @type omega_relative_limit: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "d8psk_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._costas_alpha = costas_alpha + self._mm_gain_mu = gain_mu + self._mm_mu = mu + self._mm_omega_relative_limit = omega_relative_limit + self._gray_code = gray_code + + if samples_per_symbol < 2: + raise TypeError, "sbp must be >= 2, is %d" % samples_per_symbol + + arity = pow(2,self.bits_per_symbol()) + + # Automatic gain control + scale = (1.0/16384.0) + self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal from full-range to +-1 + #self.agc = gr.agc_cc(1e-2, 1, 1, 100) + self.agc = gr.agc2_cc(1e-1, 1e-2, 1, 1, 100) + #self.agc = gr.feedforward_agc_cc(16, 1.0) + + # RRC data filter + ntaps = 11 * samples_per_symbol + self.rrc_taps = gr.firdes.root_raised_cosine( + 1.0, # gain + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + self.rrc_filter=gr.interp_fir_filter_ccf(1, self.rrc_taps) + + # symbol clock recovery + self._mm_omega = self._samples_per_symbol + self._mm_gain_omega = .25 * self._mm_gain_mu * self._mm_gain_mu + self._costas_beta = 0.25 * self._costas_alpha * self._costas_alpha + fmin = -0.025 + fmax = 0.025 + + self.receiver=gr.mpsk_receiver_cc(arity, 0, + self._costas_alpha, self._costas_beta, + fmin, fmax, + self._mm_mu, self._mm_gain_mu, + self._mm_omega, self._mm_gain_omega, + self._mm_omega_relative_limit) + + # Perform Differential decoding on the constellation + self.diffdec = gr.diff_phasor_cc() + + # find closest constellation point + rot = 1 + rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) + self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity)) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(psk.gray_to_binary[arity]) + else: + self.symbol_mapper = gr.map_bb(psk.ungray_to_binary[arity]) + + + # unpack the k bit vector into a stream of bits + self.unpack = gr.unpack_k_bits_bb(self.bits_per_symbol()) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect + self.connect(self, self.pre_scaler, self.agc, self.rrc_filter, self.receiver, + self.diffdec, self.slicer, self.symbol_mapper, self.unpack, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 3 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "\nDemodulator:" + print "bits per symbol: %d" % self.bits_per_symbol() + print "Gray code: %s" % self._gray_code + print "RRC roll-off factor: %.2f" % self._excess_bw + print "Costas Loop alpha: %.2e" % self._costas_alpha + print "Costas Loop beta: %.2e" % self._costas_beta + print "M&M mu: %.2f" % self._mm_mu + print "M&M mu gain: %.2e" % self._mm_gain_mu + print "M&M omega: %.2f" % self._mm_omega + print "M&M omega gain: %.2e" % self._mm_gain_omega + print "M&M omega limit: %.2f" % self._mm_omega_relative_limit + + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.pre_scaler, + gr.file_sink(gr.sizeof_gr_complex, "rx_prescaler.dat")) + self.connect(self.agc, + gr.file_sink(gr.sizeof_gr_complex, "rx_agc.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rx_rrc_filter.dat")) + self.connect(self.receiver, + gr.file_sink(gr.sizeof_gr_complex, "rx_receiver.dat")) + self.connect(self.diffdec, + gr.file_sink(gr.sizeof_gr_complex, "rx_diffdec.dat")) + self.connect(self.slicer, + gr.file_sink(gr.sizeof_char, "rx_slicer.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "rx_gray_decoder.dat")) + self.connect(self.unpack, + gr.file_sink(gr.sizeof_char, "rx_unpack.dat")) + + def add_options(parser): + """ + Adds modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + parser.add_option("", "--costas-alpha", type="float", default=_def_costas_alpha, + help="set Costas loop alpha value [default=%default] (PSK)") + parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, + help="set M&M symbol sync loop gain mu value [default=%default] (PSK)") + parser.add_option("", "--mu", type="float", default=_def_mu, + help="set M&M symbol sync loop mu value [default=%default] (PSK)") + add_options=staticmethod(add_options) + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options( + d8psk_demod.__init__, ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# +# Add these to the mod/demod registry +# +# NOT READY TO BE USED YET -- ENABLE AT YOUR OWN RISK +modulation_utils.add_type_1_mod('d8psk', d8psk_mod) +modulation_utils.add_type_1_demod('d8psk', d8psk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk.py b/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk.py new file mode 100644 index 00000000..3147bfa2 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk.py @@ -0,0 +1,363 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +differential BPSK modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import psk +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = 0.1 +_def_gain_mu = None +_def_mu = 0.5 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# DBPSK modulator +# ///////////////////////////////////////////////////////////////////////////// + +class dbpsk_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for RRC-filtered differential BPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per baud >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param log: Log modulation data to files? + @type log: bool + """ + + gr.hier_block2.__init__(self, "dbpsk_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(self._samples_per_symbol, int) or self._samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % self._samples_per_symbol) + + ntaps = 11 * self._samples_per_symbol + + arity = pow(2,self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(psk.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(psk.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + self.chunks2symbols = gr.chunks_to_symbols_bc(psk.constellation[arity]) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (samples_per_symbol since we're + # interpolating by samples_per_symbol) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, + self.rrc_taps) + + # Connect + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # static method that's also callable on an instance + return 1 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def add_options(parser): + """ + Adds DBPSK modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default]") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=True, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(dbpsk_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + + def _print_verbage(self): + print "\nModulator:" + print "bits per symbol: %d" % self.bits_per_symbol() + print "Gray code: %s" % self._gray_code + print "RRC roll-off factor: %.2f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "tx_bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "tx_graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "tx_diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "tx_chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "tx_rrc_filter.dat")) + + +# ///////////////////////////////////////////////////////////////////////////// +# DBPSK demodulator +# +# Differentially coherent detection of differentially encoded BPSK +# ///////////////////////////////////////////////////////////////////////////// + +class dbpsk_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for RRC-filtered differential BPSK demodulation + + The input is the complex modulated signal at baseband. + The output is a stream of bits packed 1 bit per byte (LSB) + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: float + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param costas_alpha: loop filter gain + @type costas_alphas: float + @param gain_mu: for M&M block + @type gain_mu: float + @param mu: for M&M block + @type mu: float + @param omega_relative_limit: for M&M block + @type omega_relative_limit: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "dbpsk_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._costas_alpha = costas_alpha + self._mm_gain_mu = gain_mu + self._mm_mu = mu + self._mm_omega_relative_limit = omega_relative_limit + self._gray_code = gray_code + + if samples_per_symbol < 2: + raise TypeError, "samples_per_symbol must be >= 2, is %r" % (samples_per_symbol,) + + arity = pow(2,self.bits_per_symbol()) + + # Automatic gain control + scale = (1.0/16384.0) + self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal from full-range to +-1 + #self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100) + self.agc = gr.feedforward_agc_cc(16, 2.0) + + # RRC data filter + ntaps = 11 * samples_per_symbol + self.rrc_taps = gr.firdes.root_raised_cosine( + 1.0, # gain + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + self.rrc_filter=gr.interp_fir_filter_ccf(1, self.rrc_taps) + + # symbol clock recovery + if not self._mm_gain_mu: + self._mm_gain_mu = 0.1 + + self._mm_omega = self._samples_per_symbol + self._mm_gain_omega = .25 * self._mm_gain_mu * self._mm_gain_mu + self._costas_beta = 0.25 * self._costas_alpha * self._costas_alpha + fmin = -0.1 + fmax = 0.1 + + self.receiver=gr.mpsk_receiver_cc(arity, 0, + self._costas_alpha, self._costas_beta, + fmin, fmax, + self._mm_mu, self._mm_gain_mu, + self._mm_omega, self._mm_gain_omega, + self._mm_omega_relative_limit) + + # Do differential decoding based on phase change of symbols + self.diffdec = gr.diff_phasor_cc() + + # find closest constellation point + rot = 1 + rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) + self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity)) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(psk.gray_to_binary[arity]) + else: + self.symbol_mapper = gr.map_bb(psk.ungray_to_binary[arity]) + + # unpack the k bit vector into a stream of bits + self.unpack = gr.unpack_k_bits_bb(self.bits_per_symbol()) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect and Initialize base class + self.connect(self, self.pre_scaler, self.agc, self.rrc_filter, self.receiver, + self.diffdec, self.slicer, self.symbol_mapper, self.unpack, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 1 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "\nDemodulator:" + print "bits per symbol: %d" % self.bits_per_symbol() + print "Gray code: %s" % self._gray_code + print "RRC roll-off factor: %.2f" % self._excess_bw + print "Costas Loop alpha: %.2e" % self._costas_alpha + print "Costas Loop beta: %.2e" % self._costas_beta + print "M&M mu: %.2f" % self._mm_mu + print "M&M mu gain: %.2e" % self._mm_gain_mu + print "M&M omega: %.2f" % self._mm_omega + print "M&M omega gain: %.2e" % self._mm_gain_omega + print "M&M omega limit: %.2f" % self._mm_omega_relative_limit + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.pre_scaler, + gr.file_sink(gr.sizeof_gr_complex, "rx_prescaler.dat")) + self.connect(self.agc, + gr.file_sink(gr.sizeof_gr_complex, "rx_agc.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rx_rrc_filter.dat")) + self.connect(self.receiver, + gr.file_sink(gr.sizeof_gr_complex, "rx_receiver.dat")) + self.connect(self.diffdec, + gr.file_sink(gr.sizeof_gr_complex, "rx_diffdec.dat")) + self.connect(self.slicer, + gr.file_sink(gr.sizeof_char, "rx_slicer.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "rx_symbol_mapper.dat")) + self.connect(self.unpack, + gr.file_sink(gr.sizeof_char, "rx_unpack.dat")) + + def add_options(parser): + """ + Adds DBPSK demodulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + parser.add_option("", "--costas-alpha", type="float", default=None, + help="set Costas loop alpha value [default=%default] (PSK)") + parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, + help="set M&M symbol sync loop gain mu value [default=%default] (GMSK/PSK)") + parser.add_option("", "--mu", type="float", default=_def_mu, + help="set M&M symbol sync loop mu value [default=%default] (GMSK/PSK)") + parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit, + help="M&M clock recovery omega relative limit [default=%default] (GMSK/PSK)") + add_options=staticmethod(add_options) + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options( + dbpsk_demod.__init__, ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) +# +# Add these to the mod/demod registry +# +modulation_utils.add_type_1_mod('dbpsk', dbpsk_mod) +modulation_utils.add_type_1_demod('dbpsk', dbpsk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/dqpsk.py b/gnuradio-core/src/python/gnuradio/blks2impl/dqpsk.py new file mode 100644 index 00000000..8c15d217 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/dqpsk.py @@ -0,0 +1,363 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +differential QPSK modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import psk +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = 0.15 +_def_gain_mu = None +_def_mu = 0.5 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# DQPSK modulator +# ///////////////////////////////////////////////////////////////////////////// + +class dqpsk_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for RRC-filtered QPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "dqpsk_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) + + ntaps = 11 * samples_per_symbol + + arity = pow(2,self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(psk.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(psk.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + rot = .707 + .707j + rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) + self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (sps since we're interpolating by sps) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 2 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "\nModulator:" + print "bits per symbol: %d" % self.bits_per_symbol() + print "Gray code: %s" % self._gray_code + print "RRS roll-off factor: %f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "tx_bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "tx_graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "tx_diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "tx_chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "tx_rrc_filter.dat")) + + def add_options(parser): + """ + Adds QPSK modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(dqpsk_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# ///////////////////////////////////////////////////////////////////////////// +# DQPSK demodulator +# +# Differentially coherent detection of differentially encoded qpsk +# ///////////////////////////////////////////////////////////////////////////// + +class dqpsk_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for RRC-filtered DQPSK demodulation + + The input is the complex modulated signal at baseband. + The output is a stream of bits packed 1 bit per byte (LSB) + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: float + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param costas_alpha: loop filter gain + @type costas_alphas: float + @param gain_mu: for M&M block + @type gain_mu: float + @param mu: for M&M block + @type mu: float + @param omega_relative_limit: for M&M block + @type omega_relative_limit: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "dqpsk_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._costas_alpha = costas_alpha + self._mm_gain_mu = gain_mu + self._mm_mu = mu + self._mm_omega_relative_limit = omega_relative_limit + self._gray_code = gray_code + + if samples_per_symbol < 2: + raise TypeError, "sbp must be >= 2, is %d" % samples_per_symbol + + arity = pow(2,self.bits_per_symbol()) + + # Automatic gain control + scale = (1.0/16384.0) + self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal from full-range to +-1 + #self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100) + self.agc = gr.feedforward_agc_cc(16, 2.0) + + # RRC data filter + ntaps = 11 * samples_per_symbol + self.rrc_taps = gr.firdes.root_raised_cosine( + 1.0, # gain + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + self.rrc_filter=gr.interp_fir_filter_ccf(1, self.rrc_taps) + + if not self._mm_gain_mu: + sbs_to_mm = {2: 0.050, 3: 0.075, 4: 0.11, 5: 0.125, 6: 0.15, 7: 0.15} + self._mm_gain_mu = sbs_to_mm[samples_per_symbol] + + self._mm_omega = self._samples_per_symbol + self._mm_gain_omega = .25 * self._mm_gain_mu * self._mm_gain_mu + self._costas_beta = 0.25 * self._costas_alpha * self._costas_alpha + fmin = -0.025 + fmax = 0.025 + + self.receiver=gr.mpsk_receiver_cc(arity, pi/4.0, + self._costas_alpha, self._costas_beta, + fmin, fmax, + self._mm_mu, self._mm_gain_mu, + self._mm_omega, self._mm_gain_omega, + self._mm_omega_relative_limit) + + # Perform Differential decoding on the constellation + self.diffdec = gr.diff_phasor_cc() + + # find closest constellation point + rot = 1 + rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) + self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity)) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(psk.gray_to_binary[arity]) + else: + self.symbol_mapper = gr.map_bb(psk.ungray_to_binary[arity]) + + # unpack the k bit vector into a stream of bits + self.unpack = gr.unpack_k_bits_bb(self.bits_per_symbol()) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.pre_scaler, self.agc, self.rrc_filter, self.receiver, + self.diffdec, self.slicer, self.symbol_mapper, self.unpack, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 2 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "\nDemodulator:" + print "bits per symbol: %d" % self.bits_per_symbol() + print "Gray code: %s" % self._gray_code + print "RRC roll-off factor: %.2f" % self._excess_bw + print "Costas Loop alpha: %.2e" % self._costas_alpha + print "Costas Loop beta: %.2e" % self._costas_beta + print "M&M mu: %.2f" % self._mm_mu + print "M&M mu gain: %.2e" % self._mm_gain_mu + print "M&M omega: %.2f" % self._mm_omega + print "M&M omega gain: %.2e" % self._mm_gain_omega + print "M&M omega limit: %.2f" % self._mm_omega_relative_limit + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.pre_scaler, + gr.file_sink(gr.sizeof_gr_complex, "rx_prescaler.dat")) + self.connect(self.agc, + gr.file_sink(gr.sizeof_gr_complex, "rx_agc.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rx_rrc_filter.dat")) + self.connect(self.receiver, + gr.file_sink(gr.sizeof_gr_complex, "rx_receiver.dat")) + self.connect(self.diffdec, + gr.file_sink(gr.sizeof_gr_complex, "rx_diffdec.dat")) + self.connect(self.slicer, + gr.file_sink(gr.sizeof_char, "rx_slicer.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "rx_gray_decoder.dat")) + self.connect(self.unpack, + gr.file_sink(gr.sizeof_char, "rx_unpack.dat")) + + def add_options(parser): + """ + Adds modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + parser.add_option("", "--costas-alpha", type="float", default=_def_costas_alpha, + help="set Costas loop alpha value [default=%default] (PSK)") + parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, + help="set M&M symbol sync loop gain mu value [default=%default] (PSK)") + parser.add_option("", "--mu", type="float", default=_def_mu, + help="set M&M symbol sync loop mu value [default=%default] (PSK)") + add_options=staticmethod(add_options) + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options( + dqpsk_demod.__init__, ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# +# Add these to the mod/demod registry +# +modulation_utils.add_type_1_mod('dqpsk', dqpsk_mod) +modulation_utils.add_type_1_demod('dqpsk', dqpsk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/filterbank.py b/gnuradio-core/src/python/gnuradio/blks2impl/filterbank.py new file mode 100644 index 00000000..f214da4a --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/filterbank.py @@ -0,0 +1,169 @@ +# +# Copyright 2005,2007 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. +# + +import sys +from gnuradio import gr, gru + +def _generate_synthesis_taps(mpoints): + return [] # FIXME + + +def _split_taps(taps, mpoints): + assert (len(taps) % mpoints) == 0 + result = [list() for x in range(mpoints)] + for i in xrange(len(taps)): + (result[i % mpoints]).append(taps[i]) + return [tuple(x) for x in result] + + +class synthesis_filterbank(gr.hier_block2): + """ + Uniformly modulated polyphase DFT filter bank: synthesis + + See http://cnx.org/content/m10424/latest + """ + def __init__(self, mpoints, taps=None): + """ + Takes M complex streams in, produces single complex stream out + that runs at M times the input sample rate + + @param mpoints: number of freq bins/interpolation factor/subbands + @param taps: filter taps for subband filter + + The channel spacing is equal to the input sample rate. + The total bandwidth and output sample rate are equal the input + sample rate * nchannels. + + Output stream to frequency mapping: + + channel zero is at zero frequency. + + if mpoints is odd: + + Channels with increasing positive frequencies come from + channels 1 through (N-1)/2. + + Channel (N+1)/2 is the maximum negative frequency, and + frequency increases through N-1 which is one channel lower + than the zero frequency. + + if mpoints is even: + + Channels with increasing positive frequencies come from + channels 1 through (N/2)-1. + + Channel (N/2) is evenly split between the max positive and + negative bins. + + Channel (N/2)+1 is the maximum negative frequency, and + frequency increases through N-1 which is one channel lower + than the zero frequency. + + Channels near the frequency extremes end up getting cut + off by subsequent filters and therefore have diminished + utility. + """ + item_size = gr.sizeof_gr_complex + gr.hier_block2.__init__(self, "synthesis_filterbank", + gr.io_signature(mpoints, mpoints, item_size), # Input signature + gr.io_signature(1, 1, item_size)) # Output signature + + + if taps is None: + taps = _generate_synthesis_taps(mpoints) + + # pad taps to multiple of mpoints + r = len(taps) % mpoints + if r != 0: + taps = taps + (mpoints - r) * (0,) + + # split in mpoints separate set of taps + sub_taps = _split_taps(taps, mpoints) + + self.ss2v = gr.streams_to_vector(item_size, mpoints) + self.ifft = gr.fft_vcc(mpoints, False, []) + self.v2ss = gr.vector_to_streams(item_size, mpoints) + # mpoints filters go in here... + self.ss2s = gr.streams_to_stream(item_size, mpoints) + + for i in range(mpoints): + self.connect((self, i), (self.ss2v, i)) + + self.connect(self.ss2v, self.ifft, self.v2ss) + + # build mpoints fir filters... + for i in range(mpoints): + f = gr.fft_filter_ccc(1, sub_taps[i]) + self.connect((self.v2ss, i), f) + self.connect(f, (self.ss2s, i)) + + self.connect(self.ss2s, self) + +class analysis_filterbank(gr.hier_block2): + """ + Uniformly modulated polyphase DFT filter bank: analysis + + See http://cnx.org/content/m10424/latest + """ + def __init__(self, mpoints, taps=None): + """ + Takes 1 complex stream in, produces M complex streams out + that runs at 1/M times the input sample rate + + @param mpoints: number of freq bins/interpolation factor/subbands + @param taps: filter taps for subband filter + + Same channel to frequency mapping as described above. + """ + item_size = gr.sizeof_gr_complex + gr.hier_block2.__init__(self, "analysis_filterbank", + gr.io_signature(1, 1, item_size), # Input signature + gr.io_signature(mpoints, mpoints, item_size)) # Output signature + + if taps is None: + taps = _generate_synthesis_taps(mpoints) + + # pad taps to multiple of mpoints + r = len(taps) % mpoints + if r != 0: + taps = taps + (mpoints - r) * (0,) + + # split in mpoints separate set of taps + sub_taps = _split_taps(taps, mpoints) + + # print >> sys.stderr, "mpoints =", mpoints, "len(sub_taps) =", len(sub_taps) + + self.s2ss = gr.stream_to_streams(item_size, mpoints) + # filters here + self.ss2v = gr.streams_to_vector(item_size, mpoints) + self.fft = gr.fft_vcc(mpoints, True, []) + self.v2ss = gr.vector_to_streams(item_size, mpoints) + + self.connect(self, self.s2ss) + + # build mpoints fir filters... + for i in range(mpoints): + f = gr.fft_filter_ccc(1, sub_taps[mpoints-i-1]) + self.connect((self.s2ss, i), f) + self.connect(f, (self.ss2v, i)) + self.connect((self.v2ss, i), (self, i)) + + self.connect(self.ss2v, self.fft, self.v2ss) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/fm_demod.py b/gnuradio-core/src/python/gnuradio/blks2impl/fm_demod.py new file mode 100644 index 00000000..1910b501 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/fm_demod.py @@ -0,0 +1,111 @@ +# +# Copyright 2006,2007 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 import gr, optfir +from gnuradio.blks2impl.fm_emph import fm_deemph +from math import pi + +class fm_demod_cf(gr.hier_block2): + """ + Generalized FM demodulation block with deemphasis and audio + filtering. + + This block demodulates a band-limited, complex down-converted FM + channel into the the original baseband signal, optionally applying + deemphasis. Low pass filtering is done on the resultant signal. It + produces an output float strem in the range of [-1.0, +1.0]. + + @param channel_rate: incoming sample rate of the FM baseband + @type sample_rate: integer + @param deviation: maximum FM deviation (default = 5000) + @type deviation: float + @param audio_decim: input to output decimation rate + @type audio_decim: integer + @param audio_pass: audio low pass filter passband frequency + @type audio_pass: float + @param audio_stop: audio low pass filter stop frequency + @type audio_stop: float + @param gain: gain applied to audio output (default = 1.0) + @type gain: float + @param tau: deemphasis time constant (default = 75e-6), specify 'None' + to prevent deemphasis + """ + def __init__(self, channel_rate, audio_decim, deviation, + audio_pass, audio_stop, gain=1.0, tau=75e-6): + gr.hier_block2.__init__(self, "fm_demod_cf", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + k = channel_rate/(2*pi*deviation) + QUAD = gr.quadrature_demod_cf(k) + + audio_taps = optfir.low_pass(gain, # Filter gain + channel_rate, # Sample rate + audio_pass, # Audio passband + audio_stop, # Audio stopband + 0.1, # Passband ripple + 60) # Stopband attenuation + LPF = gr.fir_filter_fff(audio_decim, audio_taps) + + if tau is not None: + DEEMPH = fm_deemph(channel_rate, tau) + self.connect(self, QUAD, DEEMPH, LPF, self) + else: + self.connect(self, QUAD, LPF, self) + +class demod_20k0f3e_cf(fm_demod_cf): + """ + NBFM demodulation block, 20 KHz channels + + This block demodulates a complex, downconverted, narrowband FM + channel conforming to 20K0F3E emission standards, outputting + floats in the range [-1.0, +1.0]. + + @param sample_rate: incoming sample rate of the FM baseband + @type sample_rate: integer + @param audio_decim: input to output decimation rate + @type audio_decim: integer + """ + def __init__(self, channel_rate, audio_decim): + fm_demod_cf.__init__(self, channel_rate, audio_decim, + 5000, # Deviation + 3000, # Audio passband frequency + 4000) # Audio stopband frequency + +class demod_200kf3e_cf(fm_demod_cf): + """ + WFM demodulation block, mono. + + This block demodulates a complex, downconverted, wideband FM + channel conforming to 200KF3E emission standards, outputting + floats in the range [-1.0, +1.0]. + + @param sample_rate: incoming sample rate of the FM baseband + @type sample_rate: integer + @param audio_decim: input to output decimation rate + @type audio_decim: integer + """ + def __init__(self, channel_rate, audio_decim): + fm_demod_cf.__init__(self, channel_rate, audio_decim, + 75000, # Deviation + 15000, # Audio passband + 16000, # Audio stopband + 20.0) # Audio gain diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/fm_emph.py b/gnuradio-core/src/python/gnuradio/blks2impl/fm_emph.py new file mode 100644 index 00000000..fd19f5fd --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/fm_emph.py @@ -0,0 +1,151 @@ +# +# Copyright 2005,2007 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 import gr +import math + + +# +# 1 +# H(s) = ------- +# 1 + s +# +# tau is the RC time constant. +# critical frequency: w_p = 1/tau +# +# We prewarp and use the bilinear z-transform to get our IIR coefficients. +# See "Digital Signal Processing: A Practical Approach" by Ifeachor and Jervis +# + +class fm_deemph(gr.hier_block2): + """ + FM Deemphasis IIR filter. + """ + + + def __init__(self, fs, tau=75e-6): + """ + @param fs: sampling frequency in Hz + @type fs: float + @param tau: Time constant in seconds (75us in US, 50us in EUR) + @type tau: float + """ + gr.hier_block2.__init__(self, "fm_deemph", + gr.io_signature(1, 1, gr.sizeof_float), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + w_p = 1/tau + w_pp = math.tan (w_p / (fs * 2)) # prewarped analog freq + + a1 = (w_pp - 1)/(w_pp + 1) + b0 = w_pp/(1 + w_pp) + b1 = b0 + + btaps = [b0, b1] + ataps = [1, a1] + + if 0: + print "btaps =", btaps + print "ataps =", ataps + global plot1 + plot1 = gru.gnuplot_freqz (gru.freqz (btaps, ataps), fs, True) + + deemph = gr.iir_filter_ffd(btaps, ataps) + self.connect(self, deemph, self) + +# +# 1 + s*t1 +# H(s) = ---------- +# 1 + s*t2 +# +# I think this is the right transfer function. +# +# +# This fine ASCII rendition is based on Figure 5-15 +# in "Digital and Analog Communication Systems", Leon W. Couch II +# +# +# R1 +# +-----||------+ +# | | +# o------+ +-----+--------o +# | C1 | | +# +----/\/\/\/--+ \ +# / +# \ R2 +# / +# \ +# | +# o--------------------------+--------o +# +# f1 = 1/(2*pi*t1) = 1/(2*pi*R1*C) +# +# 1 R1 + R2 +# f2 = ------- = ------------ +# 2*pi*t2 2*pi*R1*R2*C +# +# t1 is 75us in US, 50us in EUR +# f2 should be higher than our audio bandwidth. +# +# +# The Bode plot looks like this: +# +# +# /---------------- +# / +# / <-- slope = 20dB/decade +# / +# -------------/ +# f1 f2 +# +# We prewarp and use the bilinear z-transform to get our IIR coefficients. +# See "Digital Signal Processing: A Practical Approach" by Ifeachor and Jervis +# + +class fm_preemph(gr.hier_block2): + """ + FM Preemphasis IIR filter. + """ + def __init__(self, fs, tau=75e-6): + """ + @param fs: sampling frequency in Hz + @type fs: float + @param tau: Time constant in seconds (75us in US, 50us in EUR) + @type tau: float + """ + + gr.hier_block2.__init__(self, "fm_deemph", + gr.io_signature(1, 1, gr.sizeof_float), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + # FIXME make this compute the right answer + + btaps = [1] + ataps = [1] + + if 0: + print "btaps =", btaps + print "ataps =", ataps + global plot2 + plot2 = gru.gnuplot_freqz (gru.freqz (btaps, ataps), fs, True) + + preemph = gr.iir_filter_ffd(btaps, ataps) + self.connect(self, preemph, self) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/gmsk.py b/gnuradio-core/src/python/gnuradio/blks2impl/gmsk.py new file mode 100644 index 00000000..3b6c016a --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/gmsk.py @@ -0,0 +1,292 @@ +# +# GMSK modulation and demodulation. +# +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +from gnuradio import gr +from gnuradio import modulation_utils +from math import pi +import numpy +from pprint import pprint +import inspect + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_bt = 0.35 +_def_verbose = False +_def_log = False + +_def_gain_mu = None +_def_mu = 0.5 +_def_freq_error = 0.0 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# GMSK modulator +# ///////////////////////////////////////////////////////////////////////////// + +class gmsk_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + bt=_def_bt, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for Gaussian Minimum Shift Key (GMSK) + modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per baud >= 2 + @type samples_per_symbol: integer + @param bt: Gaussian filter bandwidth * symbol time + @type bt: float + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "gmsk_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._bt = bt + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("samples_per_symbol must be an integer >= 2, is %r" % (samples_per_symbol,)) + + ntaps = 4 * samples_per_symbol # up to 3 bits in filter at once + sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2 + + # Turn it into NRZ data. + self.nrz = gr.bytes_to_syms() + + # Form Gaussian filter + # Generate Gaussian response (Needs to be convolved with window below). + self.gaussian_taps = gr.firdes.gaussian( + 1, # gain + samples_per_symbol, # symbol_rate + bt, # bandwidth * symbol time + ntaps # number of taps + ) + + self.sqwave = (1,) * samples_per_symbol # rectangular window + self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave)) + self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps) + + # FM modulation + self.fmmod = gr.frequency_modulator_fc(sensitivity) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.nrz, self.gaussian_filter, self.fmmod, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 1 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. + + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gaussian filter bt = %.2f" % self._bt + + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.nrz, + gr.file_sink(gr.sizeof_float, "nrz.dat")) + self.connect(self.gaussian_filter, + gr.file_sink(gr.sizeof_float, "gaussian_filter.dat")) + self.connect(self.fmmod, + gr.file_sink(gr.sizeof_gr_complex, "fmmod.dat")) + + + def add_options(parser): + """ + Adds GMSK modulation-specific options to the standard parser + """ + parser.add_option("", "--bt", type="float", default=_def_bt, + help="set bandwidth-time product [default=%default] (GMSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(gmsk_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + + +# ///////////////////////////////////////////////////////////////////////////// +# GMSK demodulator +# ///////////////////////////////////////////////////////////////////////////// + +class gmsk_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + freq_error=_def_freq_error, + verbose=_def_verbose, + log=_def_log): + """ + Hierarchical block for Gaussian Minimum Shift Key (GMSK) + demodulation. + + The input is the complex modulated signal at baseband. + The output is a stream of bits packed 1 bit per byte (the LSB) + + @param samples_per_symbol: samples per baud + @type samples_per_symbol: integer + @param verbose: Print information about modulator? + @type verbose: bool + @param log: Print modualtion data to files? + @type log: bool + + Clock recovery parameters. These all have reasonble defaults. + + @param gain_mu: controls rate of mu adjustment + @type gain_mu: float + @param mu: fractional delay [0.0, 1.0] + @type mu: float + @param omega_relative_limit: sets max variation in omega + @type omega_relative_limit: float, typically 0.000200 (200 ppm) + @param freq_error: bit rate error as a fraction + @param float + """ + + gr.hier_block2.__init__(self, "gmsk_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._gain_mu = gain_mu + self._mu = mu + self._omega_relative_limit = omega_relative_limit + self._freq_error = freq_error + + if samples_per_symbol < 2: + raise TypeError, "samples_per_symbol >= 2, is %f" % samples_per_symbol + + self._omega = samples_per_symbol*(1+self._freq_error) + + if not self._gain_mu: + self._gain_mu = 0.175 + + self._gain_omega = .25 * self._gain_mu * self._gain_mu # critically damped + + # Demodulate FM + sensitivity = (pi / 2) / samples_per_symbol + self.fmdemod = gr.quadrature_demod_cf(1.0 / sensitivity) + + # the clock recovery block tracks the symbol clock and resamples as needed. + # the output of the block is a stream of soft symbols (float) + self.clock_recovery = gr.clock_recovery_mm_ff(self._omega, self._gain_omega, + self._mu, self._gain_mu, + self._omega_relative_limit) + + # slice the floats at 0, outputting 1 bit (the LSB of the output byte) per sample + self.slicer = gr.binary_slicer_fb() + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect & Initialize base class + self.connect(self, self.fmdemod, self.clock_recovery, self.slicer, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 1 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. + + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "M&M clock recovery omega = %f" % self._omega + print "M&M clock recovery gain mu = %f" % self._gain_mu + print "M&M clock recovery mu = %f" % self._mu + print "M&M clock recovery omega rel. limit = %f" % self._omega_relative_limit + print "frequency error = %f" % self._freq_error + + + def _setup_logging(self): + print "Demodulation logging turned on." + self.connect(self.fmdemod, + gr.file_sink(gr.sizeof_float, "fmdemod.dat")) + self.connect(self.clock_recovery, + gr.file_sink(gr.sizeof_float, "clock_recovery.dat")) + self.connect(self.slicer, + gr.file_sink(gr.sizeof_char, "slicer.dat")) + + def add_options(parser): + """ + Adds GMSK demodulation-specific options to the standard parser + """ + parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, + help="M&M clock recovery gain mu [default=%default] (GMSK/PSK)") + parser.add_option("", "--mu", type="float", default=_def_mu, + help="M&M clock recovery mu [default=%default] (GMSK/PSK)") + parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit, + help="M&M clock recovery omega relative limit [default=%default] (GMSK/PSK)") + parser.add_option("", "--freq-error", type="float", default=_def_freq_error, + help="M&M clock recovery frequency error [default=%default] (GMSK)") + add_options=staticmethod(add_options) + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(gmsk_demod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# +# Add these to the mod/demod registry +# +modulation_utils.add_type_1_mod('gmsk', gmsk_mod) +modulation_utils.add_type_1_demod('gmsk', gmsk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/logpwrfft.py b/gnuradio-core/src/python/gnuradio/blks2impl/logpwrfft.py new file mode 100644 index 00000000..cf8eb1be --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/logpwrfft.py @@ -0,0 +1,153 @@ +# +# Copyright 2008 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 import gr, window +from stream_to_vector_decimator import stream_to_vector_decimator +import math + +class _logpwrfft_base(gr.hier_block2): + """ + Create a log10(abs(fft)) stream chain, with real or complex input. + """ + + def __init__(self, sample_rate, fft_size, ref_scale, frame_rate, avg_alpha, average): + """ + Create an log10(abs(fft)) stream chain. + Provide access to the setting the filter and sample rate. + @param sample_rate Incoming stream sample rate + @param fft_size Number of FFT bins + @param ref_scale Sets 0 dB value input amplitude + @param frame_rate Output frame rate + @param avg_alpha FFT averaging (over time) constant [0.0-1.0] + @param average Whether to average [True, False] + """ + gr.hier_block2.__init__(self, self._name, + gr.io_signature(1, 1, self._item_size), # Input signature + gr.io_signature(1, 1, gr.sizeof_float*fft_size)) # Output signature + + self._sd = stream_to_vector_decimator(item_size=self._item_size, + sample_rate=sample_rate, + vec_rate=frame_rate, + vec_len=fft_size) + + fft_window = window.blackmanharris(fft_size) + fft = self._fft_block[0](fft_size, True, fft_window) + window_power = sum(map(lambda x: x*x, fft_window)) + + c2mag = gr.complex_to_mag(fft_size) + self._avg = gr.single_pole_iir_filter_ff(1.0, fft_size) + self._log = gr.nlog10_ff(20, fft_size, + -10*math.log10(fft_size) # Adjust for number of bins + -10*math.log10(window_power/fft_size) # Adjust for windowing loss + -20*math.log10(ref_scale/2)) # Adjust for reference scale + self.connect(self, self._sd, fft, c2mag, self._avg, self._log, self) + + self._average = average + self._avg_alpha = avg_alpha + self.set_avg_alpha(avg_alpha) + self.set_average(average) + + def set_decimation(self, decim): + """ + Set the decimation on stream decimator. + @param decim the new decimation + """ + self._sd.set_decimation(decim) + + def set_vec_rate(self, vec_rate): + """ + Set the vector rate on stream decimator. + @param vec_rate the new vector rate + """ + self._sd.set_vec_rate(vec_rate) + + def set_sample_rate(self, sample_rate): + """ + Set the new sampling rate + @param sample_rate the new rate + """ + self._sd.set_sample_rate(sample_rate) + + def set_average(self, average): + """ + Set the averaging filter on/off. + @param average true to set averaging on + """ + self._average = average + if self._average: + self._avg.set_taps(self._avg_alpha) + else: + self._avg.set_taps(1.0) + + def set_avg_alpha(self, avg_alpha): + """ + Set the average alpha and set the taps if average was on. + @param avg_alpha the new iir filter tap + """ + self._avg_alpha = avg_alpha + self.set_average(self._average) + + def sample_rate(self): + """ + Return the current sample rate. + """ + return self._sd.sample_rate() + + def decimation(self): + """ + Return the current decimation. + """ + return self._sd.decimation() + + def frame_rate(self): + """ + Return the current frame rate. + """ + return self._sd.frame_rate() + + def average(self): + """ + Return whether or not averaging is being performed. + """ + return self._average + + def avg_alpha(self): + """ + Return averaging filter constant. + """ + return self._avg_alpha + +class logpwrfft_f(_logpwrfft_base): + """ + Create an fft block chain, with real input. + """ + _name = "logpwrfft_f" + _item_size = gr.sizeof_float + _fft_block = (gr.fft_vfc, ) + +class logpwrfft_c(_logpwrfft_base): + """ + Create an fft block chain, with complex input. + """ + _name = "logpwrfft_c" + _item_size = gr.sizeof_gr_complex + _fft_block = (gr.fft_vcc, ) + diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/nbfm_rx.py b/gnuradio-core/src/python/gnuradio/blks2impl/nbfm_rx.py new file mode 100644 index 00000000..dcdd460b --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/nbfm_rx.py @@ -0,0 +1,88 @@ +# +# Copyright 2005 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. +# + +import math +from gnuradio import gr, optfir +from gnuradio.blks2impl.fm_emph import fm_deemph +#from gnuradio.blks2impl.standard_squelch import standard_squelch + +class nbfm_rx(gr.hier_block2): + def __init__(self, audio_rate, quad_rate, tau=75e-6, max_dev=5e3): + """ + Narrow Band FM Receiver. + + Takes a single complex baseband input stream and produces a single + float output stream of audio sample in the range [-1, +1]. + + @param audio_rate: sample rate of audio stream, >= 16k + @type audio_rate: integer + @param quad_rate: sample rate of output stream + @type quad_rate: integer + @param tau: preemphasis time constant (default 75e-6) + @type tau: float + @param max_dev: maximum deviation in Hz (default 5e3) + @type max_dev: float + + quad_rate must be an integer multiple of audio_rate. + + Exported sub-blocks (attributes): + squelch + quad_demod + deemph + audio_filter + """ + + gr.hier_block2.__init__(self, "nbfm_rx", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + # FIXME audio_rate and quad_rate ought to be exact rationals + audio_rate = int(audio_rate) + quad_rate = int(quad_rate) + + if quad_rate % audio_rate != 0: + raise ValueError, "quad_rate is not an integer multiple of audio_rate" + + squelch_threshold = 20 # dB + #self.squelch = gr.simple_squelch_cc(squelch_threshold, 0.001) + + # FM Demodulator input: complex; output: float + k = quad_rate/(2*math.pi*max_dev) + self.quad_demod = gr.quadrature_demod_cf(k) + + # FM Deemphasis IIR filter + self.deemph = fm_deemph (quad_rate, tau=tau) + + # compute FIR taps for audio filter + audio_decim = quad_rate // audio_rate + audio_taps = gr.firdes.low_pass (1.0, # gain + quad_rate, # sampling rate + 2.7e3, # Audio LPF cutoff + 0.5e3, # Transition band + gr.firdes.WIN_HAMMING) # filter type + + print "len(audio_taps) =", len(audio_taps) + + # Decimating audio filter + # input: float; output: float; taps: float + self.audio_filter = gr.fir_filter_fff(audio_decim, audio_taps) + + self.connect(self, self.quad_demod, self.deemph, self.audio_filter, self) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/nbfm_tx.py b/gnuradio-core/src/python/gnuradio/blks2impl/nbfm_tx.py new file mode 100644 index 00000000..15818c20 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/nbfm_tx.py @@ -0,0 +1,92 @@ +# +# Copyright 2005 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. +# + +import math +from gnuradio import gr, optfir +from gnuradio.blks2impl.fm_emph import fm_preemph + +#from gnuradio import ctcss + +class nbfm_tx(gr.hier_block2): + def __init__(self, audio_rate, quad_rate, tau=75e-6, max_dev=5e3): + """ + Narrow Band FM Transmitter. + + Takes a single float input stream of audio samples in the range [-1,+1] + and produces a single FM modulated complex baseband output. + + @param audio_rate: sample rate of audio stream, >= 16k + @type audio_rate: integer + @param quad_rate: sample rate of output stream + @type quad_rate: integer + @param tau: preemphasis time constant (default 75e-6) + @type tau: float + @param max_dev: maximum deviation in Hz (default 5e3) + @type max_dev: float + + quad_rate must be an integer multiple of audio_rate. + """ + + gr.hier_block2.__init__(self, "nbfm_tx", + gr.io_signature(1, 1, gr.sizeof_float), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + # FIXME audio_rate and quad_rate ought to be exact rationals + audio_rate = int(audio_rate) + quad_rate = int(quad_rate) + + if quad_rate % audio_rate != 0: + raise ValueError, "quad_rate is not an integer multiple of audio_rate" + + + do_interp = audio_rate != quad_rate + + if do_interp: + interp_factor = quad_rate / audio_rate + interp_taps = optfir.low_pass (interp_factor, # gain + quad_rate, # Fs + 4500, # passband cutoff + 7000, # stopband cutoff + 0.1, # passband ripple dB + 40) # stopband atten dB + + #print "len(interp_taps) =", len(interp_taps) + self.interpolator = gr.interp_fir_filter_fff (interp_factor, interp_taps) + + self.preemph = fm_preemph (quad_rate, tau=tau) + + k = 2 * math.pi * max_dev / quad_rate + self.modulator = gr.frequency_modulator_fc (k) + + if do_interp: + self.connect (self, self.interpolator, self.preemph, self.modulator, self) + else: + self.connect(self, self.preemph, self.modulator, self) + + +class ctcss_gen_f(gr.hier_block2): + def __init__(self, sample_rate, tone_freq): + gr.hier_block2.__init__(self, "ctcss_gen_f", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + self.plgen = gr.sig_source_f(sample_rate, gr.GR_SIN_WAVE, tone_freq, 0.1, 0.0) + self.connect(self.plgen, self) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py new file mode 100644 index 00000000..2663f7cf --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007,2008 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. +# + +import math +from gnuradio import gr, ofdm_packet_utils +import gnuradio.gr.gr_threading as _threading +import psk, qam + +from gnuradio.blks2impl.ofdm_receiver import ofdm_receiver + + +# ///////////////////////////////////////////////////////////////////////////// +# mod/demod with packets as i/o +# ///////////////////////////////////////////////////////////////////////////// + +class ofdm_mod(gr.hier_block2): + """ + Modulates an OFDM stream. Based on the options fft_length, occupied_tones, and + cp_length, this block creates OFDM symbols using a specified modulation option. + + Send packets by calling send_pkt + """ + def __init__(self, options, msgq_limit=2, pad_for_usrp=True): + """ + Hierarchical block for sending packets + + Packets to be sent are enqueued by calling send_pkt. + The output is the complex modulated signal at baseband. + + @param options: pass modulation options from higher layers (fft length, occupied tones, etc.) + @param msgq_limit: maximum number of messages in message queue + @type msgq_limit: int + @param pad_for_usrp: If true, packets are padded such that they end up a multiple of 128 samples + """ + + gr.hier_block2.__init__(self, "ofdm_mod", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._pad_for_usrp = pad_for_usrp + self._modulation = options.modulation + self._fft_length = options.fft_length + self._occupied_tones = options.occupied_tones + self._cp_length = options.cp_length + + win = [] #[1 for i in range(self._fft_length)] + + # Use freq domain to get doubled-up known symbol for correlation in time domain + zeros_on_left = int(math.ceil((self._fft_length - self._occupied_tones)/2.0)) + ksfreq = known_symbols_4512_3[0:self._occupied_tones] + for i in range(len(ksfreq)): + if((zeros_on_left + i) & 1): + ksfreq[i] = 0 + + # hard-coded known symbols + preambles = (ksfreq,) + + padded_preambles = list() + for pre in preambles: + padded = self._fft_length*[0,] + padded[zeros_on_left : zeros_on_left + self._occupied_tones] = pre + padded_preambles.append(padded) + + symbol_length = options.fft_length + options.cp_length + + mods = {"bpsk": 2, "qpsk": 4, "8psk": 8, "qam8": 8, "qam16": 16, "qam64": 64, "qam256": 256} + arity = mods[self._modulation] + + rot = 1 + if self._modulation == "qpsk": + rot = (0.707+0.707j) + + if(self._modulation.find("psk") >= 0): + rotated_const = map(lambda pt: pt * rot, psk.gray_constellation[arity]) + elif(self._modulation.find("qam") >= 0): + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + #print rotated_const + self._pkt_input = gr.ofdm_mapper_bcv(rotated_const, msgq_limit, + options.occupied_tones, options.fft_length) + + self.preambles = gr.ofdm_insert_preamble(self._fft_length, padded_preambles) + self.ifft = gr.fft_vcc(self._fft_length, False, win, True) + self.cp_adder = gr.ofdm_cyclic_prefixer(self._fft_length, symbol_length) + self.scale = gr.multiply_const_cc(1.0 / math.sqrt(self._fft_length)) + + self.connect((self._pkt_input, 0), (self.preambles, 0)) + self.connect((self._pkt_input, 1), (self.preambles, 1)) + self.connect(self.preambles, self.ifft, self.cp_adder, self.scale, self) + + if options.verbose: + self._print_verbage() + + if options.log: + self.connect(self._pkt_input, gr.file_sink(gr.sizeof_gr_complex*options.fft_length, + "ofdm_mapper_c.dat")) + self.connect(self.preambles, gr.file_sink(gr.sizeof_gr_complex*options.fft_length, + "ofdm_preambles.dat")) + self.connect(self.ifft, gr.file_sink(gr.sizeof_gr_complex*options.fft_length, + "ofdm_ifft_c.dat")) + self.connect(self.cp_adder, gr.file_sink(gr.sizeof_gr_complex, + "ofdm_cp_adder_c.dat")) + + def send_pkt(self, payload='', eof=False): + """ + Send the payload. + + @param payload: data to send + @type payload: string + """ + if eof: + msg = gr.message(1) # tell self._pkt_input we're not sending any more packets + else: + # print "original_payload =", string_to_hex_list(payload) + pkt = ofdm_packet_utils.make_packet(payload, 1, 1, self._pad_for_usrp, whitening=True) + + #print "pkt =", string_to_hex_list(pkt) + msg = gr.message_from_string(pkt) + self._pkt_input.msgq().insert_tail(msg) + + def add_options(normal, expert): + """ + Adds OFDM-specific options to the Options Parser + """ + normal.add_option("-m", "--modulation", type="string", default="bpsk", + help="set modulation type (bpsk, qpsk, 8psk, qam{16,64}) [default=%default]") + expert.add_option("", "--fft-length", type="intx", default=512, + help="set the number of FFT bins [default=%default]") + expert.add_option("", "--occupied-tones", type="intx", default=200, + help="set the number of occupied FFT bins [default=%default]") + expert.add_option("", "--cp-length", type="intx", default=128, + help="set the number of bits in the cyclic prefix [default=%default]") + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + def _print_verbage(self): + """ + Prints information about the OFDM modulator + """ + print "\nOFDM Modulator:" + print "Modulation Type: %s" % (self._modulation) + print "FFT length: %3d" % (self._fft_length) + print "Occupied Tones: %3d" % (self._occupied_tones) + print "CP length: %3d" % (self._cp_length) + + +class ofdm_demod(gr.hier_block2): + """ + Demodulates a received OFDM stream. Based on the options fft_length, occupied_tones, and + cp_length, this block performs synchronization, FFT, and demodulation of incoming OFDM + symbols and passes packets up the a higher layer. + + The input is complex baseband. When packets are demodulated, they are passed to the + app via the callback. + """ + + def __init__(self, options, callback=None): + """ + Hierarchical block for demodulating and deframing packets. + + The input is the complex modulated signal at baseband. + Demodulated packets are sent to the handler. + + @param options: pass modulation options from higher layers (fft length, occupied tones, etc.) + @param callback: function of two args: ok, payload + @type callback: ok: bool; payload: string + """ + gr.hier_block2.__init__(self, "ofdm_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + + self._rcvd_pktq = gr.msg_queue() # holds packets from the PHY + + self._modulation = options.modulation + self._fft_length = options.fft_length + self._occupied_tones = options.occupied_tones + self._cp_length = options.cp_length + self._snr = options.snr + + # Use freq domain to get doubled-up known symbol for correlation in time domain + zeros_on_left = int(math.ceil((self._fft_length - self._occupied_tones)/2.0)) + ksfreq = known_symbols_4512_3[0:self._occupied_tones] + for i in range(len(ksfreq)): + if((zeros_on_left + i) & 1): + ksfreq[i] = 0 + + # hard-coded known symbols + preambles = (ksfreq,) + + symbol_length = self._fft_length + self._cp_length + self.ofdm_recv = ofdm_receiver(self._fft_length, self._cp_length, + self._occupied_tones, self._snr, preambles, + options.log) + + mods = {"bpsk": 2, "qpsk": 4, "8psk": 8, "qam8": 8, "qam16": 16, "qam64": 64, "qam256": 256} + arity = mods[self._modulation] + + rot = 1 + if self._modulation == "qpsk": + rot = (0.707+0.707j) + + if(self._modulation.find("psk") >= 0): + rotated_const = map(lambda pt: pt * rot, psk.gray_constellation[arity]) + elif(self._modulation.find("qam") >= 0): + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + #print rotated_const + + phgain = 0.25 + frgain = phgain*phgain / 4.0 + self.ofdm_demod = gr.ofdm_frame_sink(rotated_const, range(arity), + self._rcvd_pktq, + self._occupied_tones, + phgain, frgain) + + self.connect(self, self.ofdm_recv) + self.connect((self.ofdm_recv, 0), (self.ofdm_demod, 0)) + self.connect((self.ofdm_recv, 1), (self.ofdm_demod, 1)) + + # added output signature to work around bug, though it might not be a bad + # thing to export, anyway + self.connect(self.ofdm_recv.chan_filt, self) + + if options.log: + self.connect(self.ofdm_demod, gr.file_sink(gr.sizeof_gr_complex*self._occupied_tones, "ofdm_frame_sink_c.dat")) + else: + self.connect(self.ofdm_demod, gr.null_sink(gr.sizeof_gr_complex*self._occupied_tones)) + + if options.verbose: + self._print_verbage() + + self._watcher = _queue_watcher_thread(self._rcvd_pktq, callback) + + def add_options(normal, expert): + """ + Adds OFDM-specific options to the Options Parser + """ + normal.add_option("-m", "--modulation", type="string", default="bpsk", + help="set modulation type (bpsk or qpsk) [default=%default]") + expert.add_option("", "--fft-length", type="intx", default=512, + help="set the number of FFT bins [default=%default]") + expert.add_option("", "--occupied-tones", type="intx", default=200, + help="set the number of occupied FFT bins [default=%default]") + expert.add_option("", "--cp-length", type="intx", default=128, + help="set the number of bits in the cyclic prefix [default=%default]") + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + def _print_verbage(self): + """ + Prints information about the OFDM demodulator + """ + print "\nOFDM Demodulator:" + print "Modulation Type: %s" % (self._modulation) + print "FFT length: %3d" % (self._fft_length) + print "Occupied Tones: %3d" % (self._occupied_tones) + print "CP length: %3d" % (self._cp_length) + + + +class _queue_watcher_thread(_threading.Thread): + def __init__(self, rcvd_pktq, callback): + _threading.Thread.__init__(self) + self.setDaemon(1) + self.rcvd_pktq = rcvd_pktq + self.callback = callback + self.keep_running = True + self.start() + + + def run(self): + while self.keep_running: + msg = self.rcvd_pktq.delete_head() + ok, payload = ofdm_packet_utils.unmake_packet(msg.to_string()) + if self.callback: + self.callback(ok, payload) + +# Generating known symbols with: +# i = [2*random.randint(0,1)-1 for i in range(4512)] + +known_symbols_4512_3 = [-1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1] diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py new file mode 100644 index 00000000..56ae0c0f --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python +# +# Copyright 2006, 2007, 2008 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. +# + +import math +from numpy import fft +from gnuradio import gr +from gnuradio.blks2impl.ofdm_sync_ml import ofdm_sync_ml +from gnuradio.blks2impl.ofdm_sync_pn import ofdm_sync_pn +from gnuradio.blks2impl.ofdm_sync_pnac import ofdm_sync_pnac +from gnuradio.blks2impl.ofdm_sync_fixed import ofdm_sync_fixed + +class ofdm_receiver(gr.hier_block2): + """ + Performs receiver synchronization on OFDM symbols. + + The receiver performs channel filtering as well as symbol, frequency, and phase synchronization. + The synchronization routines are available in three flavors: preamble correlator (Schmidl and Cox), + modifid preamble correlator with autocorrelation (not yet working), and cyclic prefix correlator + (Van de Beeks). + """ + + def __init__(self, fft_length, cp_length, occupied_tones, snr, ks, logging=False): + """ + Hierarchical block for receiving OFDM symbols. + + The input is the complex modulated signal at baseband. + Synchronized packets are sent back to the demodulator. + + @param fft_length: total number of subcarriers + @type fft_length: int + @param cp_length: length of cyclic prefix as specified in subcarriers (<= fft_length) + @type cp_length: int + @param occupied_tones: number of subcarriers used for data + @type occupied_tones: int + @param snr: estimated signal to noise ratio used to guide cyclic prefix synchronizer + @type snr: float + @param ks: known symbols used as preambles to each packet + @type ks: list of lists + @param logging: turn file logging on or off + @type logging: bool + """ + + gr.hier_block2.__init__(self, "ofdm_receiver", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature2(2, 2, gr.sizeof_gr_complex*occupied_tones, gr.sizeof_char)) # Output signature + + bw = (float(occupied_tones) / float(fft_length)) / 2.0 + tb = bw*0.08 + chan_coeffs = gr.firdes.low_pass (1.0, # gain + 1.0, # sampling rate + bw+tb, # midpoint of trans. band + tb, # width of trans. band + gr.firdes.WIN_HAMMING) # filter type + self.chan_filt = gr.fft_filter_ccc(1, chan_coeffs) + + win = [1 for i in range(fft_length)] + + zeros_on_left = int(math.ceil((fft_length - occupied_tones)/2.0)) + ks0 = fft_length*[0,] + ks0[zeros_on_left : zeros_on_left + occupied_tones] = ks[0] + + ks0 = fft.ifftshift(ks0) + ks0time = fft.ifft(ks0) + # ADD SCALING FACTOR + ks0time = ks0time.tolist() + + SYNC = "pn" + if SYNC == "ml": + nco_sensitivity = -1.0/fft_length # correct for fine frequency + self.ofdm_sync = ofdm_sync_ml(fft_length, cp_length, snr, ks0time, logging) + elif SYNC == "pn": + nco_sensitivity = -2.0/fft_length # correct for fine frequency + self.ofdm_sync = ofdm_sync_pn(fft_length, cp_length, logging) + elif SYNC == "pnac": + nco_sensitivity = -2.0/fft_length # correct for fine frequency + self.ofdm_sync = ofdm_sync_pnac(fft_length, cp_length, ks0time, logging) + elif SYNC == "fixed": # for testing only; do not user over the air + self.chan_filt = gr.multiply_const_cc(1.0) # remove filter and filter delay for this + nsymbols = 18 # enter the number of symbols per packet + freq_offset = 0.0 # if you use a frequency offset, enter it here + nco_sensitivity = -2.0/fft_length # correct for fine frequency + self.ofdm_sync = ofdm_sync_fixed(fft_length, cp_length, nsymbols, freq_offset, logging) + + # Set up blocks + + self.nco = gr.frequency_modulator_fc(nco_sensitivity) # generate a signal proportional to frequency error of sync block + self.sigmix = gr.multiply_cc() + self.sampler = gr.ofdm_sampler(fft_length, fft_length+cp_length) + self.fft_demod = gr.fft_vcc(fft_length, True, win, True) + self.ofdm_frame_acq = gr.ofdm_frame_acquisition(occupied_tones, fft_length, + cp_length, ks[0]) + + self.connect(self, self.chan_filt) # filter the input channel + self.connect(self.chan_filt, self.ofdm_sync) # into the synchronization alg. + self.connect((self.ofdm_sync,0), self.nco, (self.sigmix,1)) # use sync freq. offset output to derotate input signal + self.connect(self.chan_filt, (self.sigmix,0)) # signal to be derotated + self.connect(self.sigmix, (self.sampler,0)) # sample off timing signal detected in sync alg + self.connect((self.ofdm_sync,1), (self.sampler,1)) # timing signal to sample at + + self.connect((self.sampler,0), self.fft_demod) # send derotated sampled signal to FFT + self.connect(self.fft_demod, (self.ofdm_frame_acq,0)) # find frame start and equalize signal + self.connect((self.sampler,1), (self.ofdm_frame_acq,1)) # send timing signal to signal frame start + self.connect((self.ofdm_frame_acq,0), (self,0)) # finished with fine/coarse freq correction, + self.connect((self.ofdm_frame_acq,1), (self,1)) # frame and symbol timing, and equalization + + if logging: + self.connect(self.chan_filt, gr.file_sink(gr.sizeof_gr_complex, "ofdm_receiver-chan_filt_c.dat")) + self.connect(self.fft_demod, gr.file_sink(gr.sizeof_gr_complex*fft_length, "ofdm_receiver-fft_out_c.dat")) + self.connect(self.ofdm_frame_acq, + gr.file_sink(gr.sizeof_gr_complex*occupied_tones, "ofdm_receiver-frame_acq_c.dat")) + self.connect((self.ofdm_frame_acq,1), gr.file_sink(1, "ofdm_receiver-found_corr_b.dat")) + self.connect(self.sampler, gr.file_sink(gr.sizeof_gr_complex*fft_length, "ofdm_receiver-sampler_c.dat")) + self.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex, "ofdm_receiver-sigmix_c.dat")) + self.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex, "ofdm_receiver-nco_c.dat")) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_fixed.py b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_fixed.py new file mode 100644 index 00000000..9bac789b --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_fixed.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# +# Copyright 2007 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. +# + +import math +from gnuradio import gr + +class ofdm_sync_fixed(gr.hier_block2): + def __init__(self, fft_length, cp_length, nsymbols, freq_offset, logging=False): + + gr.hier_block2.__init__(self, "ofdm_sync_fixed", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature2(2, 2, gr.sizeof_float, gr.sizeof_char)) # Output signature + + # Use a fixed trigger point instead of sync block + symbol_length = fft_length + cp_length + pkt_length = nsymbols*symbol_length + data = (pkt_length)*[0,] + data[(symbol_length)-1] = 1 + self.peak_trigger = gr.vector_source_b(data, True) + + # Use a pre-defined frequency offset + foffset = (pkt_length)*[math.pi*freq_offset,] + self.frequency_offset = gr.vector_source_f(foffset, True) + + self.connect(self, gr.null_sink(gr.sizeof_gr_complex)) + self.connect(self.frequency_offset, (self,0)) + self.connect(self.peak_trigger, (self,1)) + + if logging: + self.connect(self.peak_trigger, gr.file_sink(gr.sizeof_char, "ofdm_sync_fixed-peaks_b.dat")) + diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py new file mode 100644 index 00000000..7c75d7f1 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +import math +from gnuradio import gr + +class ofdm_sync_ml(gr.hier_block2): + def __init__(self, fft_length, cp_length, snr, kstime, logging): + ''' Maximum Likelihood OFDM synchronizer: + J. van de Beek, M. Sandell, and P. O. Borjesson, "ML Estimation + of Time and Frequency Offset in OFDM Systems," IEEE Trans. + Signal Processing, vol. 45, no. 7, pp. 1800-1805, 1997. + ''' + + gr.hier_block2.__init__(self, "ofdm_sync_ml", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature2(2, 2, gr.sizeof_float, gr.sizeof_char)) # Output signature + + self.input = gr.add_const_cc(0) + + SNR = 10.0**(snr/10.0) + rho = SNR / (SNR + 1.0) + symbol_length = fft_length + cp_length + + # ML Sync + + # Energy Detection from ML Sync + + self.connect(self, self.input) + + # Create a delay line + self.delay = gr.delay(gr.sizeof_gr_complex, fft_length) + self.connect(self.input, self.delay) + + # magnitude squared blocks + self.magsqrd1 = gr.complex_to_mag_squared() + self.magsqrd2 = gr.complex_to_mag_squared() + self.adder = gr.add_ff() + + moving_sum_taps = [rho/2 for i in range(cp_length)] + self.moving_sum_filter = gr.fir_filter_fff(1,moving_sum_taps) + + self.connect(self.input,self.magsqrd1) + self.connect(self.delay,self.magsqrd2) + self.connect(self.magsqrd1,(self.adder,0)) + self.connect(self.magsqrd2,(self.adder,1)) + self.connect(self.adder,self.moving_sum_filter) + + + # Correlation from ML Sync + self.conjg = gr.conjugate_cc(); + self.mixer = gr.multiply_cc(); + + movingsum2_taps = [1.0 for i in range(cp_length)] + self.movingsum2 = gr.fir_filter_ccf(1,movingsum2_taps) + + # Correlator data handler + self.c2mag = gr.complex_to_mag() + self.angle = gr.complex_to_arg() + self.connect(self.input,(self.mixer,1)) + self.connect(self.delay,self.conjg,(self.mixer,0)) + self.connect(self.mixer,self.movingsum2,self.c2mag) + self.connect(self.movingsum2,self.angle) + + # ML Sync output arg, need to find maximum point of this + self.diff = gr.sub_ff() + self.connect(self.c2mag,(self.diff,0)) + self.connect(self.moving_sum_filter,(self.diff,1)) + + #ML measurements input to sampler block and detect + self.f2c = gr.float_to_complex() + self.pk_detect = gr.peak_detector_fb(0.2, 0.25, 30, 0.0005) + self.sample_and_hold = gr.sample_and_hold_ff() + + # use the sync loop values to set the sampler and the NCO + # self.diff = theta + # self.angle = epsilon + + self.connect(self.diff, self.pk_detect) + + # The DPLL corrects for timing differences between CP correlations + use_dpll = 0 + if use_dpll: + self.dpll = gr.dpll_bb(float(symbol_length),0.01) + self.connect(self.pk_detect, self.dpll) + self.connect(self.dpll, (self.sample_and_hold,1)) + else: + self.connect(self.pk_detect, (self.sample_and_hold,1)) + + self.connect(self.angle, (self.sample_and_hold,0)) + + ################################ + # correlate against known symbol + # This gives us the same timing signal as the PN sync block only on the preamble + # we don't use the signal generated from the CP correlation because we don't want + # to readjust the timing in the middle of the packet or we ruin the equalizer settings. + kstime = [k.conjugate() for k in kstime] + kstime.reverse() + self.kscorr = gr.fir_filter_ccc(1, kstime) + self.corrmag = gr.complex_to_mag_squared() + self.div = gr.divide_ff() + + # The output signature of the correlation has a few spikes because the rest of the + # system uses the repeated preamble symbol. It needs to work that generically if + # anyone wants to use this against a WiMAX-like signal since it, too, repeats. + # The output theta of the correlator above is multiplied with this correlation to + # identify the proper peak and remove other products in this cross-correlation + self.threshold_factor = 0.1 + self.slice = gr.threshold_ff(self.threshold_factor, self.threshold_factor, 0) + self.f2b = gr.float_to_char() + self.b2f = gr.char_to_float() + self.mul = gr.multiply_ff() + + # Normalize the power of the corr output by the energy. This is not really needed + # and could be removed for performance, but it makes for a cleaner signal. + # if this is removed, the threshold value needs adjustment. + self.connect(self.input, self.kscorr, self.corrmag, (self.div,0)) + self.connect(self.moving_sum_filter, (self.div,1)) + + self.connect(self.div, (self.mul,0)) + self.connect(self.pk_detect, self.b2f, (self.mul,1)) + self.connect(self.mul, self.slice) + + # Set output signals + # Output 0: fine frequency correction value + # Output 1: timing signal + self.connect(self.sample_and_hold, (self,0)) + self.connect(self.slice, self.f2b, (self,1)) + + + if logging: + self.connect(self.moving_sum_filter, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-energy_f.dat")) + self.connect(self.diff, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-theta_f.dat")) + self.connect(self.angle, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-epsilon_f.dat")) + self.connect(self.corrmag, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-corrmag_f.dat")) + self.connect(self.kscorr, gr.file_sink(gr.sizeof_gr_complex, "ofdm_sync_ml-kscorr_c.dat")) + self.connect(self.div, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-div_f.dat")) + self.connect(self.mul, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-mul_f.dat")) + self.connect(self.slice, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-slice_f.dat")) + self.connect(self.pk_detect, gr.file_sink(gr.sizeof_char, "ofdm_sync_ml-peaks_b.dat")) + if use_dpll: + self.connect(self.dpll, gr.file_sink(gr.sizeof_char, "ofdm_sync_ml-dpll_b.dat")) + + self.connect(self.sample_and_hold, gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-sample_and_hold_f.dat")) + self.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, "ofdm_sync_ml-input_c.dat")) + diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pn.py b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pn.py new file mode 100644 index 00000000..05b1de2e --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pn.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +import math +from numpy import fft +from gnuradio import gr + +class ofdm_sync_pn(gr.hier_block2): + def __init__(self, fft_length, cp_length, logging=False): + """ + OFDM synchronization using PN Correlation: + T. M. Schmidl and D. C. Cox, "Robust Frequency and Timing + Synchonization for OFDM," IEEE Trans. Communications, vol. 45, + no. 12, 1997. + """ + + gr.hier_block2.__init__(self, "ofdm_sync_pn", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature2(2, 2, gr.sizeof_float, gr.sizeof_char)) # Output signature + + self.input = gr.add_const_cc(0) + + # PN Sync + + # Create a delay line + self.delay = gr.delay(gr.sizeof_gr_complex, fft_length/2) + + # Correlation from ML Sync + self.conjg = gr.conjugate_cc(); + self.corr = gr.multiply_cc(); + + # Create a moving sum filter for the corr output + if 1: + moving_sum_taps = [1.0 for i in range(fft_length//2)] + self.moving_sum_filter = gr.fir_filter_ccf(1,moving_sum_taps) + else: + moving_sum_taps = [complex(1.0,0.0) for i in range(fft_length//2)] + self.moving_sum_filter = gr.fft_filter_ccc(1,moving_sum_taps) + + # Create a moving sum filter for the input + self.inputmag2 = gr.complex_to_mag_squared() + movingsum2_taps = [1.0 for i in range(fft_length//2)] + + if 1: + self.inputmovingsum = gr.fir_filter_fff(1,movingsum2_taps) + else: + self.inputmovingsum = gr.fft_filter_fff(1,movingsum2_taps) + + self.square = gr.multiply_ff() + self.normalize = gr.divide_ff() + + # Get magnitude (peaks) and angle (phase/freq error) + self.c2mag = gr.complex_to_mag_squared() + self.angle = gr.complex_to_arg() + + self.sample_and_hold = gr.sample_and_hold_ff() + + #ML measurements input to sampler block and detect + self.sub1 = gr.add_const_ff(-1) + self.pk_detect = gr.peak_detector_fb(0.20, 0.20, 30, 0.001) + #self.pk_detect = gr.peak_detector2_fb(9) + + self.connect(self, self.input) + + # Calculate the frequency offset from the correlation of the preamble + self.connect(self.input, self.delay) + self.connect(self.input, (self.corr,0)) + self.connect(self.delay, self.conjg) + self.connect(self.conjg, (self.corr,1)) + self.connect(self.corr, self.moving_sum_filter) + self.connect(self.moving_sum_filter, self.c2mag) + self.connect(self.moving_sum_filter, self.angle) + self.connect(self.angle, (self.sample_and_hold,0)) + + # Get the power of the input signal to normalize the output of the correlation + self.connect(self.input, self.inputmag2, self.inputmovingsum) + self.connect(self.inputmovingsum, (self.square,0)) + self.connect(self.inputmovingsum, (self.square,1)) + self.connect(self.square, (self.normalize,1)) + self.connect(self.c2mag, (self.normalize,0)) + + # Create a moving sum filter for the corr output + matched_filter_taps = [1.0/cp_length for i in range(cp_length)] + self.matched_filter = gr.fir_filter_fff(1,matched_filter_taps) + self.connect(self.normalize, self.matched_filter) + + self.connect(self.matched_filter, self.sub1, self.pk_detect) + #self.connect(self.matched_filter, self.pk_detect) + self.connect(self.pk_detect, (self.sample_and_hold,1)) + + # Set output signals + # Output 0: fine frequency correction value + # Output 1: timing signal + self.connect(self.sample_and_hold, (self,0)) + self.connect(self.pk_detect, (self,1)) + + if logging: + self.connect(self.matched_filter, gr.file_sink(gr.sizeof_float, "ofdm_sync_pn-mf_f.dat")) + self.connect(self.normalize, gr.file_sink(gr.sizeof_float, "ofdm_sync_pn-theta_f.dat")) + self.connect(self.angle, gr.file_sink(gr.sizeof_float, "ofdm_sync_pn-epsilon_f.dat")) + self.connect(self.pk_detect, gr.file_sink(gr.sizeof_char, "ofdm_sync_pn-peaks_b.dat")) + self.connect(self.sample_and_hold, gr.file_sink(gr.sizeof_float, "ofdm_sync_pn-sample_and_hold_f.dat")) + self.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, "ofdm_sync_pn-input_c.dat")) + diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py new file mode 100644 index 00000000..10a12596 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python +# +# Copyright 2007 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. +# + +import math +from numpy import fft +from gnuradio import gr + +class ofdm_sync_pnac(gr.hier_block2): + def __init__(self, fft_length, cp_length, kstime, logging=False): + """ + OFDM synchronization using PN Correlation and initial cross-correlation: + F. Tufvesson, O. Edfors, and M. Faulkner, "Time and Frequency Synchronization for OFDM using + PN-Sequency Preambles," IEEE Proc. VTC, 1999, pp. 2203-2207. + + This implementation is meant to be a more robust version of the Schmidl and Cox receiver design. + By correlating against the preamble and using that as the input to the time-delayed correlation, + this circuit produces a very clean timing signal at the end of the preamble. The timing is + more accurate and does not have the problem associated with determining the timing from the + plateau structure in the Schmidl and Cox. + + This implementation appears to require that the signal is received with a normalized power or signal + scalling factor to reduce ambiguities intorduced from partial correlation of the cyclic prefix and + the peak detection. A better peak detection block might fix this. + + Also, the cross-correlation falls apart as the frequency offset gets larger and completely fails + when an integer offset is introduced. Another thing to look at. + """ + + gr.hier_block2.__init__(self, "ofdm_sync_pnac", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature2(2, 2, gr.sizeof_float, gr.sizeof_char)) # Output signature + + + self.input = gr.add_const_cc(0) + + symbol_length = fft_length + cp_length + + # PN Sync with cross-correlation input + + # cross-correlate with the known symbol + kstime = [k.conjugate() for k in kstime[0:fft_length//2]] + kstime.reverse() + self.crosscorr_filter = gr.fir_filter_ccc(1, kstime) + + # Create a delay line + self.delay = gr.delay(gr.sizeof_gr_complex, fft_length/2) + + # Correlation from ML Sync + self.conjg = gr.conjugate_cc(); + self.corr = gr.multiply_cc(); + + # Create a moving sum filter for the input + self.mag = gr.complex_to_mag_squared() + movingsum_taps = (fft_length//1)*[1.0,] + self.power = gr.fir_filter_fff(1,movingsum_taps) + + # Get magnitude (peaks) and angle (phase/freq error) + self.c2mag = gr.complex_to_mag_squared() + self.angle = gr.complex_to_arg() + self.compare = gr.sub_ff() + + self.sample_and_hold = gr.sample_and_hold_ff() + + #ML measurements input to sampler block and detect + self.threshold = gr.threshold_ff(0,0,0) # threshold detection might need to be tweaked + self.peaks = gr.float_to_char() + + self.connect(self, self.input) + + # Cross-correlate input signal with known preamble + self.connect(self.input, self.crosscorr_filter) + + # use the output of the cross-correlation as input time-shifted correlation + self.connect(self.crosscorr_filter, self.delay) + self.connect(self.crosscorr_filter, (self.corr,0)) + self.connect(self.delay, self.conjg) + self.connect(self.conjg, (self.corr,1)) + self.connect(self.corr, self.c2mag) + self.connect(self.corr, self.angle) + self.connect(self.angle, (self.sample_and_hold,0)) + + # Get the power of the input signal to compare against the correlation + self.connect(self.crosscorr_filter, self.mag, self.power) + + # Compare the power to the correlator output to determine timing peak + # When the peak occurs, it peaks above zero, so the thresholder detects this + self.connect(self.c2mag, (self.compare,0)) + self.connect(self.power, (self.compare,1)) + self.connect(self.compare, self.threshold) + self.connect(self.threshold, self.peaks, (self.sample_and_hold,1)) + + # Set output signals + # Output 0: fine frequency correction value + # Output 1: timing signal + self.connect(self.sample_and_hold, (self,0)) + self.connect(self.peaks, (self,1)) + + if logging: + self.connect(self.compare, gr.file_sink(gr.sizeof_float, "ofdm_sync_pnac-compare_f.dat")) + self.connect(self.c2mag, gr.file_sink(gr.sizeof_float, "ofdm_sync_pnac-theta_f.dat")) + self.connect(self.power, gr.file_sink(gr.sizeof_float, "ofdm_sync_pnac-inputpower_f.dat")) + self.connect(self.angle, gr.file_sink(gr.sizeof_float, "ofdm_sync_pnac-epsilon_f.dat")) + self.connect(self.threshold, gr.file_sink(gr.sizeof_float, "ofdm_sync_pnac-threshold_f.dat")) + self.connect(self.peaks, gr.file_sink(gr.sizeof_char, "ofdm_sync_pnac-peaks_b.dat")) + self.connect(self.sample_and_hold, gr.file_sink(gr.sizeof_float, "ofdm_sync_pnac-sample_and_hold_f.dat")) + self.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, "ofdm_sync_pnac-input_c.dat")) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pkt.py b/gnuradio-core/src/python/gnuradio/blks2impl/pkt.py new file mode 100644 index 00000000..908437ef --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/pkt.py @@ -0,0 +1,164 @@ +# +# Copyright 2005, 2006, 2007 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 math import pi +from gnuradio import gr, packet_utils +import gnuradio.gr.gr_threading as _threading + + +# ///////////////////////////////////////////////////////////////////////////// +# mod/demod with packets as i/o +# ///////////////////////////////////////////////////////////////////////////// + +class mod_pkts(gr.hier_block2): + """ + Wrap an arbitrary digital modulator in our packet handling framework. + + Send packets by calling send_pkt + """ + def __init__(self, modulator, access_code=None, msgq_limit=2, pad_for_usrp=True, use_whitener_offset=False): + """ + Hierarchical block for sending packets + + Packets to be sent are enqueued by calling send_pkt. + The output is the complex modulated signal at baseband. + + @param modulator: instance of modulator class (gr_block or hier_block2) + @type modulator: complex baseband out + @param access_code: AKA sync vector + @type access_code: string of 1's and 0's between 1 and 64 long + @param msgq_limit: maximum number of messages in message queue + @type msgq_limit: int + @param pad_for_usrp: If true, packets are padded such that they end up a multiple of 128 samples + @param use_whitener_offset: If true, start of whitener XOR string is incremented each packet + + See gmsk_mod for remaining parameters + """ + + gr.hier_block2.__init__(self, "mod_pkts", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._modulator = modulator + self._pad_for_usrp = pad_for_usrp + self._use_whitener_offset = use_whitener_offset + self._whitener_offset = 0 + + if access_code is None: + access_code = packet_utils.default_access_code + if not packet_utils.is_1_0_string(access_code): + raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,) + self._access_code = access_code + + # accepts messages from the outside world + self._pkt_input = gr.message_source(gr.sizeof_char, msgq_limit) + self.connect(self._pkt_input, self._modulator, self) + + def send_pkt(self, payload='', eof=False): + """ + Send the payload. + + @param payload: data to send + @type payload: string + """ + if eof: + msg = gr.message(1) # tell self._pkt_input we're not sending any more packets + else: + # print "original_payload =", string_to_hex_list(payload) + pkt = packet_utils.make_packet(payload, + self._modulator.samples_per_symbol(), + self._modulator.bits_per_symbol(), + self._access_code, + self._pad_for_usrp, + self._whitener_offset) + #print "pkt =", string_to_hex_list(pkt) + msg = gr.message_from_string(pkt) + if self._use_whitener_offset is True: + self._whitener_offset = (self._whitener_offset + 1) % 16 + + self._pkt_input.msgq().insert_tail(msg) + + + +class demod_pkts(gr.hier_block2): + """ + Wrap an arbitrary digital demodulator in our packet handling framework. + + The input is complex baseband. When packets are demodulated, they are passed to the + app via the callback. + """ + + def __init__(self, demodulator, access_code=None, callback=None, threshold=-1): + """ + Hierarchical block for demodulating and deframing packets. + + The input is the complex modulated signal at baseband. + Demodulated packets are sent to the handler. + + @param demodulator: instance of demodulator class (gr_block or hier_block2) + @type demodulator: complex baseband in + @param access_code: AKA sync vector + @type access_code: string of 1's and 0's + @param callback: function of two args: ok, payload + @type callback: ok: bool; payload: string + @param threshold: detect access_code with up to threshold bits wrong (-1 -> use default) + @type threshold: int + """ + + gr.hier_block2.__init__(self, "demod_pkts", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + + self._demodulator = demodulator + if access_code is None: + access_code = packet_utils.default_access_code + if not packet_utils.is_1_0_string(access_code): + raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,) + self._access_code = access_code + + if threshold == -1: + threshold = 12 # FIXME raise exception + + self._rcvd_pktq = gr.msg_queue() # holds packets from the PHY + self.correlator = gr.correlate_access_code_bb(access_code, threshold) + + self.framer_sink = gr.framer_sink_1(self._rcvd_pktq) + self.connect(self, self._demodulator, self.correlator, self.framer_sink) + + self._watcher = _queue_watcher_thread(self._rcvd_pktq, callback) + + +class _queue_watcher_thread(_threading.Thread): + def __init__(self, rcvd_pktq, callback): + _threading.Thread.__init__(self) + self.setDaemon(1) + self.rcvd_pktq = rcvd_pktq + self.callback = callback + self.keep_running = True + self.start() + + + def run(self): + while self.keep_running: + msg = self.rcvd_pktq.delete_head() + ok, payload = packet_utils.unmake_packet(msg.to_string(), int(msg.arg1())) + if self.callback: + self.callback(ok, payload) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/psk.py b/gnuradio-core/src/python/gnuradio/blks2impl/psk.py new file mode 100644 index 00000000..acedf3b6 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/psk.py @@ -0,0 +1,94 @@ +# +# Copyright 2005,2006 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 math import pi, sqrt, log10 +import math, cmath + +# The following algorithm generates Gray coded constellations for M-PSK for M=[2,4,8] +def make_gray_constellation(m): + # number of bits/symbol (log2(M)) + k = int(log10(m) / log10(2.0)) + + coeff = 1 + const_map = [] + bits = [0]*3 + for i in range(m): + # get a vector of the k bits to use in this mapping + bits[3-k:3] = [((i&(0x01 << k-j-1)) >> k-j-1) for j in range(k)] + + theta = -(2*bits[0]-1)*(2*pi/m)*(bits[0]+abs(bits[1]-bits[2])+2*bits[1]) + re = math.cos(theta) + im = math.sin(theta) + const_map.append(complex(re, im)) # plug it into the constellation + + # return the constellation; by default, it is normalized + return const_map + +# This makes a constellation that increments around the unit circle +def make_constellation(m): + return [cmath.exp(i * 2 * pi / m * 1j) for i in range(m)] + +# Common definition of constellations for Tx and Rx +constellation = { + 2 : make_constellation(2), # BPSK + 4 : make_constellation(4), # QPSK + 8 : make_constellation(8) # 8PSK + } + +gray_constellation = { + 2 : make_gray_constellation(2), # BPSK + 4 : make_gray_constellation(4), # QPSK + 8 : make_gray_constellation(8) # 8PSK + } + +# ----------------------- +# Do Gray code +# ----------------------- +# binary to gray coding -- constellation does Gray coding +binary_to_gray = { + 2 : range(2), + 4 : [0,1,3,2], + 8 : [0, 1, 3, 2, 7, 6, 4, 5] + } + +# gray to binary +gray_to_binary = { + 2 : range(2), + 4 : [0,1,3,2], + 8 : [0, 1, 3, 2, 6, 7, 5, 4] + } + +# ----------------------- +# Don't Gray code +# ----------------------- +# identity mapping +binary_to_ungray = { + 2 : range(2), + 4 : range(4), + 8 : range(8) + } + +# identity mapping +ungray_to_binary = { + 2 : range(2), + 4 : range(4), + 8 : range(8) + } diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/qam.py b/gnuradio-core/src/python/gnuradio/blks2impl/qam.py new file mode 100644 index 00000000..22b1e1da --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/qam.py @@ -0,0 +1,113 @@ +# +# Copyright 2005,2006 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 math import pi, sqrt +import math + +# These constellations are generated for Gray coding when symbos [1, ..., m] are used +# Mapping to Gray coding is therefore unnecessary + +def make_constellation(m): + # number of bits/symbol (log2(M)) + k = int(math.log10(m) / math.log10(2.0)) + + coeff = 1 + const_map = [] + for i in range(m): + a = (i&(0x01 << k-1)) >> k-1 + b = (i&(0x01 << k-2)) >> k-2 + bits_i = [((i&(0x01 << k-j-1)) >> k-j-1) for j in range(2, k, 2)] + bits_q = [((i&(0x01 << k-j-1)) >> k-j-1) for j in range(3, k, 2)] + + ss = 0 + ll = len(bits_i) + for ii in range(ll): + rr = 0 + for jj in range(ll-ii): + rr = abs(bits_i[jj] - rr) + ss += rr*pow(2.0, ii+1) + re = (2*a-1)*(ss+1) + + ss = 0 + ll = len(bits_q) + for ii in range(ll): + rr = 0 + for jj in range(ll-ii): + rr = abs(bits_q[jj] - rr) + ss += rr*pow(2.0, ii+1) + im = (2*b-1)*(ss+1) + + a = max(re, im) + if a > coeff: + coeff = a + const_map.append(complex(re, im)) + + norm_map = [complex(i.real/coeff, i.imag/coeff) for i in const_map] + return norm_map + +# Common definition of constellations for Tx and Rx +constellation = { + 4 : make_constellation(4), # QAM4 (QPSK) + 8 : make_constellation(8), # QAM8 + 16: make_constellation(16), # QAM16 + 64: make_constellation(64), # QAM64 + 256: make_constellation(256) # QAM256 + } + +# ----------------------- +# Do Gray code +# ----------------------- +# binary to gray coding +binary_to_gray = { + 4 : range(4), + 8 : range(8), + 16: range(16), + 64: range(64), + 256: range(256) + } + +# gray to binary +gray_to_binary = { + 4 : range(4), + 8 : range(8), + 16: range(16), + 64: range(64), + 256: range(256) + } + +# ----------------------- +# Don't Gray code +# ----------------------- +# identity mapping +binary_to_ungray = { + 4 : range(4), + 8 : range(8), + 16: range(16), + 64: range(64) + } + +# identity mapping +ungray_to_binary = { + 4 : range(4), + 8 : range(8), + 16: range(16), + 64: range(64) + } diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/qam16.py b/gnuradio-core/src/python/gnuradio/blks2impl/qam16.py new file mode 100644 index 00000000..0bdb9c6f --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/qam16.py @@ -0,0 +1,208 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +QAM16 modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import qam +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = None +_def_gain_mu = 0.03 +_def_mu = 0.05 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM16 modulator +# ///////////////////////////////////////////////////////////////////////////// + +class qam16_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + """ + Hierarchical block for RRC-filtered QPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "qam16_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) + + ntaps = 11 * samples_per_symbol + + arity = pow(2, self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(qam.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(qam.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + rot = 1.0 + print "constellation with %d arity" % arity + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (sps since we're interpolating by sps) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 4 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gray code = %s" % self._gray_code + print "RRS roll-off factor = %f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) + + def add_options(parser): + """ + Adds QAM modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(qam16_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM16 demodulator +# +# ///////////////////////////////////////////////////////////////////////////// + +class qam16_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + gr.hier_block2.__init__(self, "qam16_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + # do this + pass + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 4 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + +# +# Add these to the mod/demod registry +# +# NOT READY TO BE USED YET -- ENABLE AT YOUR OWN RISK +#modulation_utils.add_type_1_mod('qam16', qam16_mod) +#modulation_utils.add_type_1_demod('qam16', qam16_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/qam256.py b/gnuradio-core/src/python/gnuradio/blks2impl/qam256.py new file mode 100644 index 00000000..fc455f17 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/qam256.py @@ -0,0 +1,209 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +QAM256 modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import qam +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = None +_def_gain_mu = 0.03 +_def_mu = 0.05 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM256 modulator +# ///////////////////////////////////////////////////////////////////////////// + +class qam256_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + """ + Hierarchical block for RRC-filtered QPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "qam256_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) + + ntaps = 11 * samples_per_symbol + + arity = pow(2, self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(qam.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(qam.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + rot = 1.0 + print "constellation with %d arity" % arity + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (sps since we're interpolating by sps) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 8 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gray code = %s" % self._gray_code + print "RRS roll-off factor = %f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) + + def add_options(parser): + """ + Adds QAM modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(qam256_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM256 demodulator +# +# ///////////////////////////////////////////////////////////////////////////// + +class qam256_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + gr.hier_block2.__init__(self, "qam256_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + # do this + pass + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 8 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + +# +# Add these to the mod/demod registry +# +# NOT READY TO BE USED YET -- ENABLE AT YOUR OWN RISK +#modulation_utils.add_type_1_mod('qam256', qam256_mod) +#modulation_utils.add_type_1_demod('qam256', qam256_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/qam64.py b/gnuradio-core/src/python/gnuradio/blks2impl/qam64.py new file mode 100644 index 00000000..5509f374 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/qam64.py @@ -0,0 +1,208 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +differential QPSK modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import qam +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = None +_def_gain_mu = 0.03 +_def_mu = 0.05 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM64 modulator +# ///////////////////////////////////////////////////////////////////////////// + +class qam64_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + """ + Hierarchical block for RRC-filtered QPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "qam64_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) + + ntaps = 11 * samples_per_symbol + + arity = pow(2, self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(qam.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(qam.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + rot = 1.0 + print "constellation with %d arity" % arity + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (sps since we're interpolating by sps) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 6 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gray code = %s" % self._gray_code + print "RRS roll-off factor = %f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) + + def add_options(parser): + """ + Adds QAM modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(qam64_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM16 demodulator +# +# ///////////////////////////////////////////////////////////////////////////// + +class qam64_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + gr.hier_block2.__init__(self, "qam64_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + # do this + pass + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 6 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + +# +# Add these to the mod/demod registry +# +# NOT READY TO BE USED YET -- ENABLE AT YOUR OWN RISK +#modulation_utils.add_type_1_mod('qam64', qam64_mod) +#modulation_utils.add_type_1_demod('qam16', qam16_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/qam8.py b/gnuradio-core/src/python/gnuradio/blks2impl/qam8.py new file mode 100644 index 00000000..6a7b3559 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/qam8.py @@ -0,0 +1,209 @@ +# +# Copyright 2005,2006,2007 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. +# + +# See gnuradio-examples/python/digital for examples + +""" +QAM8 modulation and demodulation. +""" + +from gnuradio import gr, gru, modulation_utils +from math import pi, sqrt +import qam +import cmath +from pprint import pprint + +# default values (used in __init__ and add_options) +_def_samples_per_symbol = 2 +_def_excess_bw = 0.35 +_def_gray_code = True +_def_verbose = False +_def_log = False + +_def_costas_alpha = None +_def_gain_mu = 0.03 +_def_mu = 0.05 +_def_omega_relative_limit = 0.005 + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM8 modulator +# ///////////////////////////////////////////////////////////////////////////// + +class qam8_mod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + """ + Hierarchical block for RRC-filtered QPSK modulation. + + The input is a byte stream (unsigned char) and the + output is the complex modulated signal at baseband. + + @param samples_per_symbol: samples per symbol >= 2 + @type samples_per_symbol: integer + @param excess_bw: Root-raised cosine filter excess bandwidth + @type excess_bw: float + @param gray_code: Tell modulator to Gray code the bits + @type gray_code: bool + @param verbose: Print information about modulator? + @type verbose: bool + @param debug: Print modualtion data to files? + @type debug: bool + """ + + gr.hier_block2.__init__(self, "qam8_mod", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._samples_per_symbol = samples_per_symbol + self._excess_bw = excess_bw + self._gray_code = gray_code + + if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: + raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) + + ntaps = 11 * samples_per_symbol + + arity = pow(2, self.bits_per_symbol()) + + # turn bytes into k-bit vectors + self.bytes2chunks = \ + gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) + + if self._gray_code: + self.symbol_mapper = gr.map_bb(qam.binary_to_gray[arity]) + else: + self.symbol_mapper = gr.map_bb(qam.binary_to_ungray[arity]) + + self.diffenc = gr.diff_encoder_bb(arity) + + rot = 1.0 + print "constellation with %d arity" % arity + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) + + # pulse shaping filter + self.rrc_taps = gr.firdes.root_raised_cosine( + self._samples_per_symbol, # gain (sps since we're interpolating by sps) + self._samples_per_symbol, # sampling rate + 1.0, # symbol rate + self._excess_bw, # excess bandwidth (roll-off factor) + ntaps) + + self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) + + if verbose: + self._print_verbage() + + if log: + self._setup_logging() + + # Connect + self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc, + self.chunks2symbols, self.rrc_filter, self) + + def samples_per_symbol(self): + return self._samples_per_symbol + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 3 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + + def _print_verbage(self): + print "bits per symbol = %d" % self.bits_per_symbol() + print "Gray code = %s" % self._gray_code + print "RRS roll-off factor = %f" % self._excess_bw + + def _setup_logging(self): + print "Modulation logging turned on." + self.connect(self.bytes2chunks, + gr.file_sink(gr.sizeof_char, "bytes2chunks.dat")) + self.connect(self.symbol_mapper, + gr.file_sink(gr.sizeof_char, "graycoder.dat")) + self.connect(self.diffenc, + gr.file_sink(gr.sizeof_char, "diffenc.dat")) + self.connect(self.chunks2symbols, + gr.file_sink(gr.sizeof_gr_complex, "chunks2symbols.dat")) + self.connect(self.rrc_filter, + gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) + + def add_options(parser): + """ + Adds QAM modulation-specific options to the standard parser + """ + parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, + help="set RRC excess bandwith factor [default=%default] (PSK)") + parser.add_option("", "--no-gray-code", dest="gray_code", + action="store_false", default=_def_gray_code, + help="disable gray coding on modulated bits (PSK)") + add_options=staticmethod(add_options) + + + def extract_kwargs_from_options(options): + """ + Given command line options, create dictionary suitable for passing to __init__ + """ + return modulation_utils.extract_kwargs_from_options(qam8_mod.__init__, + ('self',), options) + extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) + + +# ///////////////////////////////////////////////////////////////////////////// +# QAM8 demodulator +# +# ///////////////////////////////////////////////////////////////////////////// + +class qam8_demod(gr.hier_block2): + + def __init__(self, + samples_per_symbol=_def_samples_per_symbol, + excess_bw=_def_excess_bw, + costas_alpha=_def_costas_alpha, + gain_mu=_def_gain_mu, + mu=_def_mu, + omega_relative_limit=_def_omega_relative_limit, + gray_code=_def_gray_code, + verbose=_def_verbose, + log=_def_log): + + gr.hier_block2.__init__(self, "qam8_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + # do this + pass + + def bits_per_symbol(self=None): # staticmethod that's also callable on an instance + return 3 + bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM + +# +# Add these to the mod/demod registry +# +# NOT READY TO BE USED YET -- ENABLE AT YOUR OWN RISK +modulation_utils.add_type_1_mod('qam8', qam8_mod) +#modulation_utils.add_type_1_demod('qam8', qam8_demod) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/rational_resampler.py b/gnuradio-core/src/python/gnuradio/blks2impl/rational_resampler.py new file mode 100644 index 00000000..b7de0de7 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/rational_resampler.py @@ -0,0 +1,131 @@ +# +# Copyright 2005,2007 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 import gr, gru + +_plot = None + +def design_filter(interpolation, decimation, fractional_bw): + """ + Given the interpolation rate, decimation rate and a fractional bandwidth, + design a set of taps. + + @param interpolation: interpolation factor + @type interpolation: integer > 0 + @param decimation: decimation factor + @type decimation: integer > 0 + @param fractional_bw: fractional bandwidth in (0, 0.5) 0.4 works well. + @type fractional_bw: float + @returns: sequence of numbers + """ + + if fractional_bw >= 0.5 or fractional_bw <= 0: + raise ValueError, "Invalid fractional_bandwidth, must be in (0, 0.5)" + + beta = 5.0 + trans_width = 0.5 - fractional_bw + mid_transition_band = 0.5 - trans_width/2 + + taps = gr.firdes.low_pass(interpolation, # gain + 1, # Fs + mid_transition_band/interpolation, # trans mid point + trans_width/interpolation, # transition width + gr.firdes.WIN_KAISER, + beta # beta + ) + + return taps + + + +class _rational_resampler_base(gr.hier_block2): + """ + base class for all rational resampler variants. + """ + def __init__(self, resampler_base, + interpolation, decimation, taps=None, fractional_bw=None): + """ + Rational resampling polyphase FIR filter. + + Either taps or fractional_bw may be specified, but not both. + If neither is specified, a reasonable default, 0.4, is used as + the fractional_bw. + + @param interpolation: interpolation factor + @type interpolation: integer > 0 + @param decimation: decimation factor + @type decimation: integer > 0 + @param taps: optional filter coefficients + @type taps: sequence + @param fractional_bw: fractional bandwidth in (0, 0.5), measured at final freq (use 0.4) + @type fractional_bw: float + """ + + if not isinstance(interpolation, int) or interpolation < 1: + raise ValueError, "interpolation must be an integer >= 1" + + if not isinstance(decimation, int) or decimation < 1: + raise ValueError, "decimation must be an integer >= 1" + + if taps is None and fractional_bw is None: + fractional_bw = 0.4 + + d = gru.gcd(interpolation, decimation) + interpolation = interpolation // d + decimation = decimation // d + + if taps is None: + taps = design_filter(interpolation, decimation, fractional_bw) + + resampler = resampler_base(interpolation, decimation, taps) + gr.hier_block2.__init__(self, "rational_resampler", + gr.io_signature(1, 1, resampler.input_signature().sizeof_stream_item(0)), + gr.io_signature(1, 1, resampler.output_signature().sizeof_stream_item(0))) + + self.connect(self, resampler, self) + + +class rational_resampler_fff(_rational_resampler_base): + def __init__(self, interpolation, decimation, taps=None, fractional_bw=None): + """ + Rational resampling polyphase FIR filter with + float input, float output and float taps. + """ + _rational_resampler_base.__init__(self, gr.rational_resampler_base_fff, + interpolation, decimation, taps, fractional_bw) + +class rational_resampler_ccf(_rational_resampler_base): + def __init__(self, interpolation, decimation, taps=None, fractional_bw=None): + """ + Rational resampling polyphase FIR filter with + complex input, complex output and float taps. + """ + _rational_resampler_base.__init__(self, gr.rational_resampler_base_ccf, + interpolation, decimation, taps, fractional_bw) + +class rational_resampler_ccc(_rational_resampler_base): + def __init__(self, interpolation, decimation, taps=None, fractional_bw=None): + """ + Rational resampling polyphase FIR filter with + complex input, complex output and complex taps. + """ + _rational_resampler_base.__init__(self, gr.rational_resampler_base_ccc, + interpolation, decimation, taps, fractional_bw) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/standard_squelch.py b/gnuradio-core/src/python/gnuradio/blks2impl/standard_squelch.py new file mode 100644 index 00000000..c5fdc01d --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/standard_squelch.py @@ -0,0 +1,76 @@ +# +# Copyright 2005,2007 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. +# + +import math +from gnuradio import gr, optfir + +class standard_squelch(gr.hier_block2): + def __init__(self, audio_rate): + gr.hier_block2.__init__(self, "standard_squelch", + gr.io_signature(1, 1, gr.sizeof_float), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + self.input_node = gr.add_const_ff(0) # FIXME kludge + + self.low_iir = gr.iir_filter_ffd((0.0193,0,-0.0193),(1,1.9524,-0.9615)) + self.low_square = gr.multiply_ff() + self.low_smooth = gr.single_pole_iir_filter_ff(1/(0.01*audio_rate)) # 100ms time constant + + self.hi_iir = gr.iir_filter_ffd((0.0193,0,-0.0193),(1,1.3597,-0.9615)) + self.hi_square = gr.multiply_ff() + self.hi_smooth = gr.single_pole_iir_filter_ff(1/(0.01*audio_rate)) + + self.sub = gr.sub_ff(); + self.add = gr.add_ff(); + self.gate = gr.threshold_ff(0.3,0.43,0) + self.squelch_lpf = gr.single_pole_iir_filter_ff(1/(0.01*audio_rate)) + + self.div = gr.divide_ff() + self.squelch_mult = gr.multiply_ff() + + self.connect (self, self.input_node) + self.connect (self.input_node, (self.squelch_mult, 0)) + + self.connect (self.input_node,self.low_iir) + self.connect (self.low_iir,(self.low_square,0)) + self.connect (self.low_iir,(self.low_square,1)) + self.connect (self.low_square,self.low_smooth,(self.sub,0)) + self.connect (self.low_smooth, (self.add,0)) + + self.connect (self.input_node,self.hi_iir) + self.connect (self.hi_iir,(self.hi_square,0)) + self.connect (self.hi_iir,(self.hi_square,1)) + self.connect (self.hi_square,self.hi_smooth,(self.sub,1)) + self.connect (self.hi_smooth, (self.add,1)) + + self.connect (self.sub, (self.div, 0)) + self.connect (self.add, (self.div, 1)) + self.connect (self.div, self.gate, self.squelch_lpf, (self.squelch_mult,1)) + self.connect (self.squelch_mult, self) + + def set_threshold(self, threshold): + self.gate.set_hi(threshold) + + def threshold(self): + return self.gate.hi() + + def squelch_range(self): + return (0.0, 1.0, 1.0/100) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/stream_to_vector_decimator.py b/gnuradio-core/src/python/gnuradio/blks2impl/stream_to_vector_decimator.py new file mode 100644 index 00000000..39c8b505 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/stream_to_vector_decimator.py @@ -0,0 +1,94 @@ +# +# Copyright 2008 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 import gr + +class stream_to_vector_decimator(gr.hier_block2): + """ + Convert the stream to a vector, decimate the vector stream to achieve the vector rate. + """ + + def __init__(self, item_size, sample_rate, vec_rate, vec_len): + """ + Create the block chain. + @param item_size the number of bytes per sample + @param sample_rate the rate of incoming samples + @param vec_rate the rate of outgoing vectors (same units as sample_rate) + @param vec_len the length of the outgoing vectors in items + """ + self._vec_rate = vec_rate + self._vec_len = vec_len + self._sample_rate = sample_rate + + gr.hier_block2.__init__(self, "stream_to_vector_decimator", + gr.io_signature(1, 1, item_size), # Input signature + gr.io_signature(1, 1, item_size*vec_len)) # Output signature + + s2v = gr.stream_to_vector(item_size, vec_len) + self.one_in_n = gr.keep_one_in_n(item_size*vec_len, 1) + self._update_decimator() + self.connect(self, s2v, self.one_in_n, self) + + def set_sample_rate(self, sample_rate): + """ + Set the new sampling rate and update the decimator. + @param sample_rate the new rate + """ + self._sample_rate = sample_rate + self._update_decimator() + + def set_vec_rate(self, vec_rate): + """ + Set the new vector rate and update the decimator. + @param vec_rate the new rate + """ + self._vec_rate = vec_rate + self._update_decimator() + + def set_decimation(self, decim): + """ + Set the decimation parameter directly. + @param decim the new decimation + """ + self._decim = max(1, int(round(decim))) + self.one_in_n.set_n(self._decim) + + def _update_decimator(self): + self._decim = max(1, int(round(self._sample_rate/self._vec_len/self._vec_rate))) + self.one_in_n.set_n(self._decim) + + def decimation(self): + """ + Returns the actual decimation. + """ + return self._decim + + def sample_rate(self): + """ + Returns configured sample rate. + """ + return self._sample_rate + + def frame_rate(self): + """ + Returns actual frame rate + """ + return self._sample_rate/self._vec_len/self._decim diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv.py b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv.py new file mode 100644 index 00000000..3bdb22cc --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv.py @@ -0,0 +1,69 @@ +# +# Copyright 2005,2007 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 import gr +from gnuradio.blks2impl.fm_emph import fm_deemph +import math + +class wfm_rcv(gr.hier_block2): + def __init__ (self, quad_rate, audio_decimation): + """ + Hierarchical block for demodulating a broadcast FM signal. + + The input is the downconverted complex baseband signal (gr_complex). + The output is the demodulated audio (float). + + @param quad_rate: input sample rate of complex baseband input. + @type quad_rate: float + @param audio_decimation: how much to decimate quad_rate to get to audio. + @type audio_decimation: integer + """ + gr.hier_block2.__init__(self, "wfm_rcv", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + volume = 20. + + max_dev = 75e3 + fm_demod_gain = quad_rate/(2*math.pi*max_dev) + audio_rate = quad_rate / audio_decimation + + + # We assign to self so that outsiders can grab the demodulator + # if they need to. E.g., to plot its output. + # + # input: complex; output: float + self.fm_demod = gr.quadrature_demod_cf (fm_demod_gain) + + # input: float; output: float + self.deemph = fm_deemph (audio_rate) + + # compute FIR filter taps for audio filter + width_of_transition_band = audio_rate / 32 + audio_coeffs = gr.firdes.low_pass (1.0, # gain + quad_rate, # sampling rate + audio_rate/2 - width_of_transition_band, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + # input: float; output: float + self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) + + self.connect (self, self.fm_demod, self.audio_filter, self.deemph, self) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_fmdet.py b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_fmdet.py new file mode 100755 index 00000000..858b9cde --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_fmdet.py @@ -0,0 +1,191 @@ +# +# Copyright 2005,2006 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 import gr +from gnuradio.blks2impl.fm_emph import fm_deemph +import math + +class wfm_rcv_fmdet(gr.hier_block2): + def __init__ (self, demod_rate, audio_decimation): + """ + Hierarchical block for demodulating a broadcast FM signal. + + The input is the downconverted complex baseband signal (gr_complex). + The output is two streams of the demodulated audio (float) 0=Left, 1=Right. + + @param demod_rate: input sample rate of complex baseband input. + @type demod_rate: float + @param audio_decimation: how much to decimate demod_rate to get to audio. + @type audio_decimation: integer + """ + gr.hier_block2.__init__(self, "wfm_rcv_fmdet", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(2, 2, gr.sizeof_float)) # Output signature + lowfreq = -125e3 + highfreq = 125e3 + audio_rate = demod_rate / audio_decimation + + + # We assign to self so that outsiders can grab the demodulator + # if they need to. E.g., to plot its output. + # + # input: complex; output: float + + self.fm_demod = gr.fmdet_cf (demod_rate, lowfreq, highfreq, 0.05) + + # input: float; output: float + self.deemph_Left = fm_deemph (audio_rate) + self.deemph_Right = fm_deemph (audio_rate) + + # compute FIR filter taps for audio filter + width_of_transition_band = audio_rate / 32 + audio_coeffs = gr.firdes.low_pass (1.0 , # gain + demod_rate, # sampling rate + 15000 , + width_of_transition_band, + gr.firdes.WIN_HAMMING) + # input: float; output: float + self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) + if 1: + # Pick off the stereo carrier/2 with this filter. It attenuated 10 dB so apply 10 dB gain + # We pick off the negative frequency half because we want to base band by it! + ## NOTE THIS WAS HACKED TO OFFSET INSERTION LOSS DUE TO DEEMPHASIS + + stereo_carrier_filter_coeffs = gr.firdes.complex_band_pass(10.0, + demod_rate, + -19020, + -18980, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + + #print "len stereo carrier filter = ",len(stereo_carrier_filter_coeffs) + #print "stereo carrier filter ", stereo_carrier_filter_coeffs + #print "width of transition band = ",width_of_transition_band, " audio rate = ", audio_rate + + # Pick off the double side band suppressed carrier Left-Right audio. It is attenuated 10 dB so apply 10 dB gain + + stereo_dsbsc_filter_coeffs = gr.firdes.complex_band_pass(20.0, + demod_rate, + 38000-15000/2, + 38000+15000/2, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + #print "len stereo dsbsc filter = ",len(stereo_dsbsc_filter_coeffs) + #print "stereo dsbsc filter ", stereo_dsbsc_filter_coeffs + # construct overlap add filter system from coefficients for stereo carrier + + self.stereo_carrier_filter = gr.fir_filter_fcc(audio_decimation, stereo_carrier_filter_coeffs) + + # carrier is twice the picked off carrier so arrange to do a commplex multiply + + self.stereo_carrier_generator = gr.multiply_cc(); + + # Pick off the rds signal + + stereo_rds_filter_coeffs = gr.firdes.complex_band_pass(30.0, + demod_rate, + 57000 - 1500, + 57000 + 1500, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + #print "len stereo dsbsc filter = ",len(stereo_dsbsc_filter_coeffs) + #print "stereo dsbsc filter ", stereo_dsbsc_filter_coeffs + # construct overlap add filter system from coefficients for stereo carrier + + self.rds_signal_filter = gr.fir_filter_fcc(audio_decimation, stereo_rds_filter_coeffs) + + + + + + + self.rds_carrier_generator = gr.multiply_cc(); + self.rds_signal_generator = gr.multiply_cc(); + self_rds_signal_processor = gr.null_sink(gr.sizeof_gr_complex); + + + + alpha = 5 * 0.25 * math.pi / (audio_rate) + beta = alpha * alpha / 4.0 + max_freq = -2.0*math.pi*18990/audio_rate; + min_freq = -2.0*math.pi*19010/audio_rate; + + self.stereo_carrier_pll_recovery = gr.pll_refout_cc(alpha,beta,max_freq,min_freq); + #self.stereo_carrier_pll_recovery.squelch_enable(False) #pll_refout does not have squelch yet, so disabled for now + + + # set up mixer (multiplier) to get the L-R signal at baseband + + self.stereo_basebander = gr.multiply_cc(); + + # pick off the real component of the basebanded L-R signal. The imaginary SHOULD be zero + + self.LmR_real = gr.complex_to_real(); + self.Make_Left = gr.add_ff(); + self.Make_Right = gr.sub_ff(); + + self.stereo_dsbsc_filter = gr.fir_filter_fcc(audio_decimation, stereo_dsbsc_filter_coeffs) + + + if 1: + + # send the real signal to complex filter to pick off the carrier and then to one side of a multiplier + self.connect (self, self.fm_demod,self.stereo_carrier_filter,self.stereo_carrier_pll_recovery, (self.stereo_carrier_generator,0)) + # send the already filtered carrier to the otherside of the carrier + self.connect (self.stereo_carrier_pll_recovery, (self.stereo_carrier_generator,1)) + # the resulting signal from this multiplier is the carrier with correct phase but at -38000 Hz. + + # send the new carrier to one side of the mixer (multiplier) + self.connect (self.stereo_carrier_generator, (self.stereo_basebander,0)) + # send the demphasized audio to the DSBSC pick off filter, the complex + # DSBSC signal at +38000 Hz is sent to the other side of the mixer/multiplier + self.connect (self.fm_demod,self.stereo_dsbsc_filter, (self.stereo_basebander,1)) + # the result is BASEBANDED DSBSC with phase zero! + + # Pick off the real part since the imaginary is theoretically zero and then to one side of a summer + self.connect (self.stereo_basebander, self.LmR_real, (self.Make_Left,0)) + #take the same real part of the DSBSC baseband signal and send it to negative side of a subtracter + self.connect (self.LmR_real,(self.Make_Right,1)) + + # Make rds carrier by taking the squared pilot tone and multiplying by pilot tone + self.connect (self.stereo_basebander,(self.rds_carrier_generator,0)) + self.connect (self.stereo_carrier_pll_recovery,(self.rds_carrier_generator,1)) + # take signal, filter off rds, send into mixer 0 channel + self.connect (self.fm_demod,self.rds_signal_filter,(self.rds_signal_generator,0)) + # take rds_carrier_generator output and send into mixer 1 channel + self.connect (self.rds_carrier_generator,(self.rds_signal_generator,1)) + # send basebanded rds signal and send into "processor" which for now is a null sink + self.connect (self.rds_signal_generator,self_rds_signal_processor) + + + if 1: + # pick off the audio, L+R that is what we used to have and send it to the summer + self.connect(self.fm_demod, self.audio_filter, (self.Make_Left, 1)) + # take the picked off L+R audio and send it to the PLUS side of the subtractor + self.connect(self.audio_filter,(self.Make_Right, 0)) + # The result of Make_Left gets (L+R) + (L-R) and results in 2*L + # The result of Make_Right gets (L+R) - (L-R) and results in 2*R + self.connect(self.Make_Left , self.deemph_Left, (self, 0)) + self.connect(self.Make_Right, self.deemph_Right, (self, 1)) + # NOTE: mono support will require variable number of outputs in hier_block2s + # See ticket:174 in Trac database + #else: + # self.connect (self.fm_demod, self.audio_filter, self) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_pll.py b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_pll.py new file mode 100644 index 00000000..dd0fae6e --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_rcv_pll.py @@ -0,0 +1,193 @@ +# +# Copyright 2005,2006 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 import gr +from gnuradio.blks2impl.fm_emph import fm_deemph +import math + +class wfm_rcv_pll(gr.hier_block2): + def __init__ (self, demod_rate, audio_decimation): + """ + Hierarchical block for demodulating a broadcast FM signal. + + The input is the downconverted complex baseband signal (gr_complex). + The output is two streams of the demodulated audio (float) 0=Left, 1=Right. + + @param demod_rate: input sample rate of complex baseband input. + @type demod_rate: float + @param audio_decimation: how much to decimate demod_rate to get to audio. + @type audio_decimation: integer + """ + gr.hier_block2.__init__(self, "wfm_rcv_pll", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(2, 2, gr.sizeof_float)) # Output signature + bandwidth = 250e3 + audio_rate = demod_rate / audio_decimation + + + # We assign to self so that outsiders can grab the demodulator + # if they need to. E.g., to plot its output. + # + # input: complex; output: float + alpha = 0.25*bandwidth * math.pi / demod_rate + beta = alpha * alpha / 4.0 + max_freq = 2.0*math.pi*90e3/demod_rate + + self.fm_demod = gr.pll_freqdet_cf (alpha,beta,max_freq,-max_freq) + + # input: float; output: float + self.deemph_Left = fm_deemph (audio_rate) + self.deemph_Right = fm_deemph (audio_rate) + + # compute FIR filter taps for audio filter + width_of_transition_band = audio_rate / 32 + audio_coeffs = gr.firdes.low_pass (1.0 , # gain + demod_rate, # sampling rate + 15000 , + width_of_transition_band, + gr.firdes.WIN_HAMMING) + # input: float; output: float + self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) + if 1: + # Pick off the stereo carrier/2 with this filter. It attenuated 10 dB so apply 10 dB gain + # We pick off the negative frequency half because we want to base band by it! + ## NOTE THIS WAS HACKED TO OFFSET INSERTION LOSS DUE TO DEEMPHASIS + + stereo_carrier_filter_coeffs = gr.firdes.complex_band_pass(10.0, + demod_rate, + -19020, + -18980, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + + #print "len stereo carrier filter = ",len(stereo_carrier_filter_coeffs) + #print "stereo carrier filter ", stereo_carrier_filter_coeffs + #print "width of transition band = ",width_of_transition_band, " audio rate = ", audio_rate + + # Pick off the double side band suppressed carrier Left-Right audio. It is attenuated 10 dB so apply 10 dB gain + + stereo_dsbsc_filter_coeffs = gr.firdes.complex_band_pass(20.0, + demod_rate, + 38000-15000/2, + 38000+15000/2, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + #print "len stereo dsbsc filter = ",len(stereo_dsbsc_filter_coeffs) + #print "stereo dsbsc filter ", stereo_dsbsc_filter_coeffs + # construct overlap add filter system from coefficients for stereo carrier + + self.stereo_carrier_filter = gr.fir_filter_fcc(audio_decimation, stereo_carrier_filter_coeffs) + + # carrier is twice the picked off carrier so arrange to do a commplex multiply + + self.stereo_carrier_generator = gr.multiply_cc(); + + # Pick off the rds signal + + stereo_rds_filter_coeffs = gr.firdes.complex_band_pass(30.0, + demod_rate, + 57000 - 1500, + 57000 + 1500, + width_of_transition_band, + gr.firdes.WIN_HAMMING) + #print "len stereo dsbsc filter = ",len(stereo_dsbsc_filter_coeffs) + #print "stereo dsbsc filter ", stereo_dsbsc_filter_coeffs + # construct overlap add filter system from coefficients for stereo carrier + + self.rds_signal_filter = gr.fir_filter_fcc(audio_decimation, stereo_rds_filter_coeffs) + + + + + + + self.rds_carrier_generator = gr.multiply_cc(); + self.rds_signal_generator = gr.multiply_cc(); + self_rds_signal_processor = gr.null_sink(gr.sizeof_gr_complex); + + + + alpha = 5 * 0.25 * math.pi / (audio_rate) + beta = alpha * alpha / 4.0 + max_freq = -2.0*math.pi*18990/audio_rate; + min_freq = -2.0*math.pi*19010/audio_rate; + + self.stereo_carrier_pll_recovery = gr.pll_refout_cc(alpha,beta,max_freq,min_freq); + #self.stereo_carrier_pll_recovery.squelch_enable(False) #pll_refout does not have squelch yet, so disabled for now + + + # set up mixer (multiplier) to get the L-R signal at baseband + + self.stereo_basebander = gr.multiply_cc(); + + # pick off the real component of the basebanded L-R signal. The imaginary SHOULD be zero + + self.LmR_real = gr.complex_to_real(); + self.Make_Left = gr.add_ff(); + self.Make_Right = gr.sub_ff(); + + self.stereo_dsbsc_filter = gr.fir_filter_fcc(audio_decimation, stereo_dsbsc_filter_coeffs) + + + if 1: + + # send the real signal to complex filter to pick off the carrier and then to one side of a multiplier + self.connect (self, self.fm_demod,self.stereo_carrier_filter,self.stereo_carrier_pll_recovery, (self.stereo_carrier_generator,0)) + # send the already filtered carrier to the otherside of the carrier + self.connect (self.stereo_carrier_pll_recovery, (self.stereo_carrier_generator,1)) + # the resulting signal from this multiplier is the carrier with correct phase but at -38000 Hz. + + # send the new carrier to one side of the mixer (multiplier) + self.connect (self.stereo_carrier_generator, (self.stereo_basebander,0)) + # send the demphasized audio to the DSBSC pick off filter, the complex + # DSBSC signal at +38000 Hz is sent to the other side of the mixer/multiplier + self.connect (self.fm_demod,self.stereo_dsbsc_filter, (self.stereo_basebander,1)) + # the result is BASEBANDED DSBSC with phase zero! + + # Pick off the real part since the imaginary is theoretically zero and then to one side of a summer + self.connect (self.stereo_basebander, self.LmR_real, (self.Make_Left,0)) + #take the same real part of the DSBSC baseband signal and send it to negative side of a subtracter + self.connect (self.LmR_real,(self.Make_Right,1)) + + # Make rds carrier by taking the squared pilot tone and multiplying by pilot tone + self.connect (self.stereo_basebander,(self.rds_carrier_generator,0)) + self.connect (self.stereo_carrier_pll_recovery,(self.rds_carrier_generator,1)) + # take signal, filter off rds, send into mixer 0 channel + self.connect (self.fm_demod,self.rds_signal_filter,(self.rds_signal_generator,0)) + # take rds_carrier_generator output and send into mixer 1 channel + self.connect (self.rds_carrier_generator,(self.rds_signal_generator,1)) + # send basebanded rds signal and send into "processor" which for now is a null sink + self.connect (self.rds_signal_generator,self_rds_signal_processor) + + + if 1: + # pick off the audio, L+R that is what we used to have and send it to the summer + self.connect(self.fm_demod, self.audio_filter, (self.Make_Left, 1)) + # take the picked off L+R audio and send it to the PLUS side of the subtractor + self.connect(self.audio_filter,(self.Make_Right, 0)) + # The result of Make_Left gets (L+R) + (L-R) and results in 2*L + # The result of Make_Right gets (L+R) - (L-R) and results in 2*R + self.connect(self.Make_Left , self.deemph_Left, (self, 0)) + self.connect(self.Make_Right, self.deemph_Right, (self, 1)) + # NOTE: mono support will require variable number of outputs in hier_block2s + # See ticket:174 in Trac database + #else: + # self.connect (self.fm_demod, self.audio_filter, self) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/wfm_tx.py b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_tx.py new file mode 100644 index 00000000..c7c831ca --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/blks2impl/wfm_tx.py @@ -0,0 +1,79 @@ +# +# Copyright 2005,2007 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. +# + +import math +from gnuradio import gr, optfir +from gnuradio.blks2impl.fm_emph import fm_preemph + +class wfm_tx(gr.hier_block2): + def __init__(self, audio_rate, quad_rate, tau=75e-6, max_dev=75e3): + """ + Wide Band FM Transmitter. + + Takes a single float input stream of audio samples in the range [-1,+1] + and produces a single FM modulated complex baseband output. + + @param audio_rate: sample rate of audio stream, >= 16k + @type audio_rate: integer + @param quad_rate: sample rate of output stream + @type quad_rate: integer + @param tau: preemphasis time constant (default 75e-6) + @type tau: float + @param max_dev: maximum deviation in Hz (default 75e3) + @type max_dev: float + + quad_rate must be an integer multiple of audio_rate. + """ + gr.hier_block2.__init__(self, "wfm_tx", + gr.io_signature(1, 1, gr.sizeof_float), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + # FIXME audio_rate and quad_rate ought to be exact rationals + audio_rate = int(audio_rate) + quad_rate = int(quad_rate) + + if quad_rate % audio_rate != 0: + raise ValueError, "quad_rate is not an integer multiple of audio_rate" + + + do_interp = audio_rate != quad_rate + + if do_interp: + interp_factor = quad_rate / audio_rate + interp_taps = optfir.low_pass (interp_factor, # gain + quad_rate, # Fs + 16000, # passband cutoff + 18000, # stopband cutoff + 0.1, # passband ripple dB + 40) # stopband atten dB + + print "len(interp_taps) =", len(interp_taps) + self.interpolator = gr.interp_fir_filter_fff (interp_factor, interp_taps) + + self.preemph = fm_preemph (quad_rate, tau=tau) + + k = 2 * math.pi * max_dev / quad_rate + self.modulator = gr.frequency_modulator_fc (k) + + if do_interp: + self.connect (self, self.interpolator, self.preemph, self.modulator, self) + else: + self.connect(self, self.preemph, self.modulator, self) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/Makefile.am b/gnuradio-core/src/python/gnuradio/blksimpl/Makefile.am deleted file mode 100644 index 6c45e192..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -# EXTRA_DIST = run_tests.in -# TESTS = run_tests - -grblkspythondir = $(grpythondir)/blksimpl - -grblkspython_PYTHON = \ - __init__.py \ - am_demod.py \ - dbpsk.py \ - dqpsk.py \ - filterbank.py \ - fm_demod.py \ - fm_emph.py \ - gmsk.py \ - nbfm_rx.py \ - nbfm_tx.py \ - pkt.py \ - psk.py \ - rational_resampler.py \ - standard_squelch.py \ - wfm_rcv.py \ - wfm_rcv_pll.py \ - wfm_tx.py - - -noinst_PYTHON = - -CLEANFILES = *.pyc *.pyo diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/Makefile.in b/gnuradio-core/src/python/gnuradio/blksimpl/Makefile.in deleted file mode 100644 index c2c4207a..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/Makefile.in +++ /dev/null @@ -1,623 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2005 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 -*- -# -# Copyright 2004,2006,2007 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -DIST_COMMON = $(grblkspython_PYTHON) $(noinst_PYTHON) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common -subdir = gnuradio-core/src/python/gnuradio/blksimpl -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(grblkspythondir)" -grblkspythonPYTHON_INSTALL = $(INSTALL_DATA) -py_compile = $(top_srcdir)/py-compile -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ - -# includes -grincludedir = $(includedir)/gnuradio - -# swig includes -swigincludedir = $(grincludedir)/swig - -# Install this stuff in the appropriate subdirectory -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -grpythondir = $(pythondir)/gnuradio -grpyexecdir = $(pyexecdir)/gnuradio - -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern - -# Where to find gnuradio include files in the current build tree -# top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - - -# How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la - -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i - -# How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include - -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la - -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) - -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f - -# EXTRA_DIST = run_tests.in -# TESTS = run_tests -grblkspythondir = $(grpythondir)/blksimpl -grblkspython_PYTHON = \ - __init__.py \ - am_demod.py \ - dbpsk.py \ - dqpsk.py \ - filterbank.py \ - fm_demod.py \ - fm_emph.py \ - gmsk.py \ - nbfm_rx.py \ - nbfm_tx.py \ - pkt.py \ - psk.py \ - rational_resampler.py \ - standard_squelch.py \ - wfm_rcv.py \ - wfm_rcv_pll.py \ - wfm_tx.py - -noinst_PYTHON = -CLEANFILES = *.pyc *.pyo -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blksimpl/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/blksimpl/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-grblkspythonPYTHON: $(grblkspython_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(grblkspythondir)" || $(mkdir_p) "$(DESTDIR)$(grblkspythondir)" - @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ - f=$(am__strip_dir) \ - dlist="$$dlist $$f"; \ - echo " $(grblkspythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grblkspythondir)/$$f'"; \ - $(grblkspythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grblkspythondir)/$$f"; \ - else :; fi; \ - done; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(grblkspythondir)" $$dlist; \ - else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grblkspythondir)" $$dlist; \ - fi; \ - else :; fi - -uninstall-grblkspythonPYTHON: - @$(NORMAL_UNINSTALL) - @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ - f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(grblkspythondir)/$$f"; \ - rm -f "$(DESTDIR)$(grblkspythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(grblkspythondir)/$${f}o"; \ - done -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: - for dir in "$(DESTDIR)$(grblkspythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-grblkspythonPYTHON - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-grblkspythonPYTHON uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-grblkspythonPYTHON install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am uninstall uninstall-am uninstall-grblkspythonPYTHON \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/am_demod.py b/gnuradio-core/src/python/gnuradio/blksimpl/am_demod.py deleted file mode 100644 index d449d74f..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/am_demod.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright 2006 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 import gr, optfir - -class am_demod_cf(gr.hier_block): - """ - Generalized AM demodulation block with audio filtering. - - This block demodulates a band-limited, complex down-converted AM - channel into the the original baseband signal, applying low pass - filtering to the audio output. It produces a float stream in the - range [-1.0, +1.0]. - - @param fg: flowgraph - @param channel_rate: incoming sample rate of the AM baseband - @type sample_rate: integer - @param audio_decim: input to output decimation rate - @type audio_decim: integer - @param audio_pass: audio low pass filter passband frequency - @type audio_pass: float - @param audio_stop: audio low pass filter stop frequency - @type audio_stop: float - """ - def __init__(self, fg, channel_rate, audio_decim, audio_pass, audio_stop): - MAG = gr.complex_to_mag() - DCR = gr.add_const_ff(-1.0) - - audio_taps = optfir.low_pass(0.5, # Filter gain - channel_rate, # Sample rate - audio_pass, # Audio passband - audio_stop, # Audio stopband - 0.1, # Passband ripple - 60) # Stopband attenuation - LPF = gr.fir_filter_fff(audio_decim, audio_taps) - - fg.connect(MAG, DCR, LPF) - gr.hier_block.__init__(self, fg, MAG, LPF) - -class demod_10k0a3e_cf(am_demod_cf): - """ - AM demodulation block, 10 KHz channel. - - This block demodulates an AM channel conformant to 10K0A3E emission - standards, such as broadcast band AM transmissions. - - @param fg: flowgraph - @param channel_rate: incoming sample rate of the AM baseband - @type sample_rate: integer - @param audio_decim: input to output decimation rate - @type audio_decim: integer - """ - def __init__(self, fg, channel_rate, audio_decim): - am_demod_cf.__init__(self, fg, channel_rate, audio_decim, - 5000, # Audio passband - 5500) # Audio stopband - \ No newline at end of file diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py b/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py deleted file mode 100644 index 79778189..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py +++ /dev/null @@ -1,381 +0,0 @@ -# -# Copyright 2005,2006 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. -# - -# See gnuradio-examples/python/gmsk2 for examples - -""" -differential BPSK modulation and demodulation. -""" - -from gnuradio import gr, gru, modulation_utils -from math import pi, sqrt -import psk -import cmath -import Numeric -from pprint import pprint - -# default values (used in __init__ and add_options) -_def_samples_per_symbol = 2 -_def_excess_bw = 0.35 -_def_gray_code = True -_def_verbose = False -_def_log = False - -_def_costas_alpha = None -_def_gain_mu = 0.03 -_def_mu = 0.05 -_def_omega_relative_limit = 0.005 - - -# ///////////////////////////////////////////////////////////////////////////// -# DBPSK modulator -# ///////////////////////////////////////////////////////////////////////////// - -class dbpsk_mod(gr.hier_block): - - def __init__(self, fg, - samples_per_symbol=_def_samples_per_symbol, - excess_bw=_def_excess_bw, - gray_code=_def_gray_code, - verbose=_def_verbose, - log=_def_log): - """ - Hierarchical block for RRC-filtered differential BPSK modulation. - - The input is a byte stream (unsigned char) and the - output is the complex modulated signal at baseband. - - @param fg: flow graph - @type fg: flow graph - @param samples_per_symbol: samples per baud >= 2 - @type samples_per_symbol: integer - @param excess_bw: Root-raised cosine filter excess bandwidth - @type excess_bw: float - @param gray_code: Tell modulator to Gray code the bits - @type gray_code: bool - @param verbose: Print information about modulator? - @type verbose: bool - @param log: Log modulation data to files? - @type log: bool - """ - - self._fg = fg - self._samples_per_symbol = samples_per_symbol - self._excess_bw = excess_bw - self._gray_code = gray_code - - if not isinstance(self._samples_per_symbol, int) or self._samples_per_symbol < 2: - raise TypeError, ("sbp must be an integer >= 2, is %d" % self._samples_per_symbol) - - ntaps = 11 * self._samples_per_symbol - - arity = pow(2,self.bits_per_symbol()) - - # turn bytes into k-bit vectors - self.bytes2chunks = \ - gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) - - if self._gray_code: - self.symbol_mapper = gr.map_bb(psk.binary_to_gray[arity]) - else: - self.symbol_mapper = gr.map_bb(psk.binary_to_ungray[arity]) - - self.diffenc = gr.diff_encoder_bb(arity) - - self.chunks2symbols = gr.chunks_to_symbols_bc(psk.constellation[arity]) - - # pulse shaping filter - self.rrc_taps = gr.firdes.root_raised_cosine( - self._samples_per_symbol, # gain (samples_per_symbol since we're - # interpolating by samples_per_symbol) - self._samples_per_symbol, # sampling rate - 1.0, # symbol rate - self._excess_bw, # excess bandwidth (roll-off factor) - ntaps) - - self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, - self.rrc_taps) - - # Connect - fg.connect(self.bytes2chunks, self.symbol_mapper, self.diffenc, - self.chunks2symbols, self.rrc_filter) - - if verbose: - self._print_verbage() - - if log: - self._setup_logging() - - # Initialize base class - gr.hier_block.__init__(self, self._fg, self.bytes2chunks, self.rrc_filter) - - def samples_per_symbol(self): - return self._samples_per_symbol - - def bits_per_symbol(self=None): # static method that's also callable on an instance - return 1 - bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM - - def add_options(parser): - """ - Adds DBPSK modulation-specific options to the standard parser - """ - parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, - help="set RRC excess bandwith factor [default=%default]") - parser.add_option("", "--no-gray-code", dest="gray_code", - action="store_false", default=True, - help="disable gray coding on modulated bits (PSK)") - add_options=staticmethod(add_options) - - def extract_kwargs_from_options(options): - """ - Given command line options, create dictionary suitable for passing to __init__ - """ - return modulation_utils.extract_kwargs_from_options(dbpsk_mod.__init__, - ('self', 'fg'), options) - extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) - - - def _print_verbage(self): - print "bits per symbol = %d" % self.bits_per_symbol() - print "Gray code = %s" % self._gray_code - print "RRC roll-off factor = %.2f" % self._excess_bw - - def _setup_logging(self): - print "Modulation logging turned on." - self._fg.connect(self.bytes2chunks, - gr.file_sink(gr.sizeof_char, "bytes2chunks.dat")) - self._fg.connect(self.symbol_mapper, - gr.file_sink(gr.sizeof_char, "graycoder.dat")) - self._fg.connect(self.diffenc, - gr.file_sink(gr.sizeof_char, "diffenc.dat")) - self._fg.connect(self.chunks2symbols, - gr.file_sink(gr.sizeof_gr_complex, "chunks2symbols.dat")) - self._fg.connect(self.rrc_filter, - gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) - - -# ///////////////////////////////////////////////////////////////////////////// -# DBPSK demodulator -# -# Differentially coherent detection of differentially encoded BPSK -# ///////////////////////////////////////////////////////////////////////////// - -class dbpsk_demod(gr.hier_block): - - def __init__(self, fg, - samples_per_symbol=_def_samples_per_symbol, - excess_bw=_def_excess_bw, - costas_alpha=_def_costas_alpha, - gain_mu=_def_gain_mu, - mu=_def_mu, - omega_relative_limit=_def_omega_relative_limit, - gray_code=_def_gray_code, - verbose=_def_verbose, - log=_def_log): - """ - Hierarchical block for RRC-filtered differential BPSK demodulation - - The input is the complex modulated signal at baseband. - The output is a stream of bits packed 1 bit per byte (LSB) - - @param fg: flow graph - @type fg: flow graph - @param samples_per_symbol: samples per symbol >= 2 - @type samples_per_symbol: float - @param excess_bw: Root-raised cosine filter excess bandwidth - @type excess_bw: float - @param costas_alpha: loop filter gain - @type costas_alphas: float - @param gain_mu: for M&M block - @type gain_mu: float - @param mu: for M&M block - @type mu: float - @param omega_relative_limit: for M&M block - @type omega_relative_limit: float - @param gray_code: Tell modulator to Gray code the bits - @type gray_code: bool - @param verbose: Print information about modulator? - @type verbose: bool - @param debug: Print modualtion data to files? - @type debug: bool - """ - - self._fg = fg - self._samples_per_symbol = samples_per_symbol - self._excess_bw = excess_bw - self._costas_alpha = costas_alpha - self._gain_mu = gain_mu - self._mu = mu - self._omega_relative_limit = omega_relative_limit - self._gray_code = gray_code - - if samples_per_symbol < 2: - raise TypeError, "samples_per_symbol must be >= 2, is %r" % (samples_per_symbol,) - - arity = pow(2,self.bits_per_symbol()) - - # Automatic gain control - scale = (1.0/16384.0) - self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal from full-range to +-1 - #self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100) - self.agc = gr.feedforward_agc_cc(16, 1.0) - - - # Costas loop (carrier tracking) - # The Costas loop is not needed for BPSK, though it can help. Turn the Costas loop on - # by setting an alpha value not None. - if self._costas_alpha is not None: - costas_order = 2 - beta = .25 * self._costas_alpha * self._costas_alpha - self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.002, -0.002, costas_order) - - # RRC data filter - ntaps = 11 * self._samples_per_symbol - self.rrc_taps = gr.firdes.root_raised_cosine( - 1.0, # gain - self._samples_per_symbol, # sampling rate - 1.0, # symbol rate - self._excess_bw, # excess bandwidth (roll-off factor) - ntaps) - - self.rrc_filter=gr.fir_filter_ccf(1, self.rrc_taps) - - # symbol clock recovery - omega = self._samples_per_symbol - gain_omega = .25 * self._gain_mu * self._gain_mu - self.clock_recovery=gr.clock_recovery_mm_cc(omega, gain_omega, - self._mu, self._gain_mu, - self._omega_relative_limit) - - # find closest constellation point - rot = 1 - rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) - #print "rotated_const =", rotated_const - - self.diffdec = gr.diff_phasor_cc() - #self.diffdec = gr.diff_decoder_bb(arity) - - self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity)) - - if self._gray_code: - self.symbol_mapper = gr.map_bb(psk.gray_to_binary[arity]) - else: - self.symbol_mapper = gr.map_bb(psk.ungray_to_binary[arity]) - - # unpack the k bit vector into a stream of bits - self.unpack = gr.unpack_k_bits_bb(self.bits_per_symbol()) - - if verbose: - self._print_verbage() - - if log: - self._setup_logging() - - # Connect and Initialize base class - if self._costas_alpha is not None: # With Costas Loop - self._fg.connect(self.pre_scaler, self.agc, self.costas_loop, - self.rrc_filter, self.clock_recovery, self.diffdec, - self.slicer, self.symbol_mapper, self.unpack) - else: # Without Costas Loop - self._fg.connect(self.pre_scaler, self.agc, - self.rrc_filter, self.clock_recovery, self.diffdec, - self.slicer, self.symbol_mapper, self.unpack) - - gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack) - - def samples_per_symbol(self): - return self._samples_per_symbol - - def bits_per_symbol(self=None): # staticmethod that's also callable on an instance - return 1 - bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM - - def _print_verbage(self): - print "bits per symbol = %d" % self.bits_per_symbol() - print "Gray code = %s" % self._gray_code - print "RRC roll-off factor = %.2f" % self._excess_bw - if self._costas_alpha is not None: - print "Costas Loop alpha = %.5f" % self._costas_alpha - else: - print "Costas Loop is turned off" - print "M&M symbol sync gain = %.5f" % self._gain_mu - print "M&M symbol sync mu = %.5f" % self._mu - print "M&M omega relative limit = %.5f" % self._omega_relative_limit - - def _setup_logging(self): - print "Modulation logging turned on." - self._fg.connect(self.pre_scaler, - gr.file_sink(gr.sizeof_gr_complex, "prescaler.dat")) - self._fg.connect(self.agc, - gr.file_sink(gr.sizeof_gr_complex, "agc.dat")) - if self._costas_alpha is not None: - self._fg.connect(self.costas_loop, - gr.file_sink(gr.sizeof_gr_complex, "costas_loop.dat")) - self._fg.connect((self.costas_loop,1), - gr.file_sink(gr.sizeof_gr_complex, "costas_error.dat")) - self._fg.connect(self.rrc_filter, - gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) - self._fg.connect(self.clock_recovery, - gr.file_sink(gr.sizeof_gr_complex, "clock_recovery.dat")) - self._fg.connect((self.clock_recovery,1), - gr.file_sink(gr.sizeof_gr_complex, "clock_recovery_error.dat")) - self._fg.connect(self.diffdec, - gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat")) - self._fg.connect(self.slicer, - gr.file_sink(gr.sizeof_char, "slicer.dat")) - self._fg.connect(self.symbol_mapper, - gr.file_sink(gr.sizeof_char, "symbol_mapper.dat")) - self._fg.connect(self.unpack, - gr.file_sink(gr.sizeof_char, "unpack.dat")) - - def add_options(parser): - """ - Adds DBPSK demodulation-specific options to the standard parser - """ - parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, - help="set RRC excess bandwith factor [default=%default] (PSK)") - parser.add_option("", "--no-gray-code", dest="gray_code", - action="store_false", default=_def_gray_code, - help="disable gray coding on modulated bits (PSK)") - parser.add_option("", "--costas-alpha", type="float", default=None, - help="set Costas loop alpha value [default=%default] (PSK)") - parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, - help="set M&M symbol sync loop gain mu value [default=%default] (GMSK/PSK)") - parser.add_option("", "--mu", type="float", default=_def_mu, - help="set M&M symbol sync loop mu value [default=%default] (GMSK/PSK)") - parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit, - help="M&M clock recovery omega relative limit [default=%default] (GMSK/PSK)") - add_options=staticmethod(add_options) - - def extract_kwargs_from_options(options): - """ - Given command line options, create dictionary suitable for passing to __init__ - """ - return modulation_utils.extract_kwargs_from_options( - dbpsk_demod.__init__, ('self', 'fg'), options) - extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) - -# -# Add these to the mod/demod registry -# -modulation_utils.add_type_1_mod('dbpsk', dbpsk_mod) -modulation_utils.add_type_1_demod('dbpsk', dbpsk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py b/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py deleted file mode 100644 index b0fb63b0..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py +++ /dev/null @@ -1,374 +0,0 @@ -# -# Copyright 2005,2006 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. -# - -# See gnuradio-examples/python/gmsk2 for examples - -""" -differential QPSK modulation and demodulation. -""" - -from gnuradio import gr, gru, modulation_utils -from math import pi, sqrt -import psk -import cmath -import Numeric -from pprint import pprint - -# default values (used in __init__ and add_options) -_def_samples_per_symbol = 2 -_def_excess_bw = 0.35 -_def_gray_code = True -_def_verbose = False -_def_log = False - -_def_costas_alpha = None -_def_gain_mu = 0.03 -_def_mu = 0.05 -_def_omega_relative_limit = 0.005 - - -# ///////////////////////////////////////////////////////////////////////////// -# DQPSK modulator -# ///////////////////////////////////////////////////////////////////////////// - -class dqpsk_mod(gr.hier_block): - - def __init__(self, fg, - samples_per_symbol=_def_samples_per_symbol, - excess_bw=_def_excess_bw, - gray_code=_def_gray_code, - verbose=_def_verbose, - log=_def_log): - """ - Hierarchical block for RRC-filtered QPSK modulation. - - The input is a byte stream (unsigned char) and the - output is the complex modulated signal at baseband. - - @param fg: flow graph - @type fg: flow graph - @param samples_per_symbol: samples per symbol >= 2 - @type samples_per_symbol: integer - @param excess_bw: Root-raised cosine filter excess bandwidth - @type excess_bw: float - @param gray_code: Tell modulator to Gray code the bits - @type gray_code: bool - @param verbose: Print information about modulator? - @type verbose: bool - @param debug: Print modualtion data to files? - @type debug: bool - """ - - self._fg = fg - self._samples_per_symbol = samples_per_symbol - self._excess_bw = excess_bw - self._gray_code = gray_code - - if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: - raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol) - - ntaps = 11 * samples_per_symbol - - arity = pow(2,self.bits_per_symbol()) - - # turn bytes into k-bit vectors - self.bytes2chunks = \ - gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST) - - if self._gray_code: - self.symbol_mapper = gr.map_bb(psk.binary_to_gray[arity]) - else: - self.symbol_mapper = gr.map_bb(psk.binary_to_ungray[arity]) - - self.diffenc = gr.diff_encoder_bb(arity) - - rot = .707 + .707j - rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) - self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const) - - # pulse shaping filter - self.rrc_taps = gr.firdes.root_raised_cosine( - self._samples_per_symbol, # gain (sps since we're interpolating by sps) - self._samples_per_symbol, # sampling rate - 1.0, # symbol rate - self._excess_bw, # excess bandwidth (roll-off factor) - ntaps) - - self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol, self.rrc_taps) - - if verbose: - self._print_verbage() - - if log: - self._setup_logging() - - # Connect & Initialize base class - self._fg.connect(self.bytes2chunks, self.symbol_mapper, self.diffenc, - self.chunks2symbols, self.rrc_filter) - gr.hier_block.__init__(self, self._fg, self.bytes2chunks, self.rrc_filter) - - def samples_per_symbol(self): - return self._samples_per_symbol - - def bits_per_symbol(self=None): # staticmethod that's also callable on an instance - return 2 - bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM - - def _print_verbage(self): - print "bits per symbol = %d" % self.bits_per_symbol() - print "Gray code = %s" % self._gray_code - print "RRS roll-off factor = %f" % self._excess_bw - - def _setup_logging(self): - print "Modulation logging turned on." - self._fg.connect(self.bytes2chunks, - gr.file_sink(gr.sizeof_char, "bytes2chunks.dat")) - self._fg.connect(self.symbol_mapper, - gr.file_sink(gr.sizeof_char, "graycoder.dat")) - self._fg.connect(self.diffenc, - gr.file_sink(gr.sizeof_char, "diffenc.dat")) - self._fg.connect(self.chunks2symbols, - gr.file_sink(gr.sizeof_gr_complex, "chunks2symbols.dat")) - self._fg.connect(self.rrc_filter, - gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) - - def add_options(parser): - """ - Adds QPSK modulation-specific options to the standard parser - """ - parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, - help="set RRC excess bandwith factor [default=%default] (PSK)") - parser.add_option("", "--no-gray-code", dest="gray_code", - action="store_false", default=_def_gray_code, - help="disable gray coding on modulated bits (PSK)") - add_options=staticmethod(add_options) - - - def extract_kwargs_from_options(options): - """ - Given command line options, create dictionary suitable for passing to __init__ - """ - return modulation_utils.extract_kwargs_from_options(dqpsk_mod.__init__, - ('self', 'fg'), options) - extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) - - -# ///////////////////////////////////////////////////////////////////////////// -# DQPSK demodulator -# -# Differentially coherent detection of differentially encoded qpsk -# ///////////////////////////////////////////////////////////////////////////// - -class dqpsk_demod(gr.hier_block): - - def __init__(self, fg, - samples_per_symbol=_def_samples_per_symbol, - excess_bw=_def_excess_bw, - costas_alpha=_def_costas_alpha, - gain_mu=_def_gain_mu, - mu=_def_mu, - omega_relative_limit=_def_omega_relative_limit, - gray_code=_def_gray_code, - verbose=_def_verbose, - log=_def_log): - """ - Hierarchical block for RRC-filtered DQPSK demodulation - - The input is the complex modulated signal at baseband. - The output is a stream of bits packed 1 bit per byte (LSB) - - @param fg: flow graph - @type fg: flow graph - @param samples_per_symbol: samples per symbol >= 2 - @type samples_per_symbol: float - @param excess_bw: Root-raised cosine filter excess bandwidth - @type excess_bw: float - @param costas_alpha: loop filter gain - @type costas_alphas: float - @param gain_mu: for M&M block - @type gain_mu: float - @param mu: for M&M block - @type mu: float - @param omega_relative_limit: for M&M block - @type omega_relative_limit: float - @param gray_code: Tell modulator to Gray code the bits - @type gray_code: bool - @param verbose: Print information about modulator? - @type verbose: bool - @param debug: Print modualtion data to files? - @type debug: bool - """ - - self._fg = fg - self._samples_per_symbol = samples_per_symbol - self._excess_bw = excess_bw - self._costas_alpha = costas_alpha - self._gain_mu = gain_mu - self._mu = mu - self._omega_relative_limit = omega_relative_limit - self._gray_code = gray_code - - if samples_per_symbol < 2: - raise TypeError, "sbp must be >= 2, is %d" % samples_per_symbol - - arity = pow(2,self.bits_per_symbol()) - - # Automatic gain control - scale = (1.0/16384.0) - self.pre_scaler = gr.multiply_const_cc(scale) # scale the signal from full-range to +-1 - #self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100) - self.agc = gr.feedforward_agc_cc(16, 1.0) - - # Costas loop (carrier tracking) - if self._costas_alpha is None: # If no alpha value was specified by the user - alpha_dir = {2:0.075, 3:0.09, 4:0.09, 5:0.095, 6:0.10, 7:0.105} - self._costas_alpha = alpha_dir[self._samples_per_symbol] - - costas_order = 4 - # The value of beta is now set to be underdamped; this value can have a huge impact on the - # performance of QPSK. Set to 0.25 for critically damped or higher for underdamped responses. - beta = .35 * self._costas_alpha * self._costas_alpha - self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.02, -0.02, costas_order) - - # RRC data filter - ntaps = 11 * samples_per_symbol - self.rrc_taps = gr.firdes.root_raised_cosine( - self._samples_per_symbol, # gain - self._samples_per_symbol, # sampling rate - 1.0, # symbol rate - self._excess_bw, # excess bandwidth (roll-off factor) - ntaps) - - self.rrc_filter=gr.fir_filter_ccf(1, self.rrc_taps) - - # symbol clock recovery - omega = self._samples_per_symbol - gain_omega = .25 * self._gain_mu * self._gain_mu - self.clock_recovery=gr.clock_recovery_mm_cc(omega, gain_omega, - self._mu, self._gain_mu, - self._omega_relative_limit) - - self.diffdec = gr.diff_phasor_cc() - #self.diffdec = gr.diff_decoder_bb(arity) - - # find closest constellation point - rot = 1 - #rot = .707 + .707j - rotated_const = map(lambda pt: pt * rot, psk.constellation[arity]) - #print "rotated_const = %s" % rotated_const - - self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity)) - - if self._gray_code: - self.symbol_mapper = gr.map_bb(psk.gray_to_binary[arity]) - else: - self.symbol_mapper = gr.map_bb(psk.ungray_to_binary[arity]) - - - # unpack the k bit vector into a stream of bits - self.unpack = gr.unpack_k_bits_bb(self.bits_per_symbol()) - - if verbose: - self._print_verbage() - - if log: - self._setup_logging() - - # Connect & Initialize base class - self._fg.connect(self.pre_scaler, self.agc, self.costas_loop, - self.rrc_filter, self.clock_recovery, - self.diffdec, self.slicer, self.symbol_mapper, - self.unpack) - gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack) - - def samples_per_symbol(self): - return self._samples_per_symbol - - def bits_per_symbol(self=None): # staticmethod that's also callable on an instance - return 2 - bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. RTFM - - def _print_verbage(self): - print "bits per symbol = %d" % self.bits_per_symbol() - print "Gray code = %s" % self._gray_code - print "RRC roll-off factor = %.2f" % self._excess_bw - print "Costas Loop alpha = %.5f" % self._costas_alpha - print "M&M symbol sync gain = %.5f" % self._gain_mu - print "M&M symbol sync mu = %.5f" % self._mu - print "M&M omega relative limit = %.5f" % self._omega_relative_limit - - - def _setup_logging(self): - print "Modulation logging turned on." - self._fg.connect(self.pre_scaler, - gr.file_sink(gr.sizeof_gr_complex, "prescaler.dat")) - self._fg.connect(self.agc, - gr.file_sink(gr.sizeof_gr_complex, "agc.dat")) - self._fg.connect(self.costas_loop, - gr.file_sink(gr.sizeof_gr_complex, "costas_loop.dat")) - self._fg.connect((self.costas_loop,1), - gr.file_sink(gr.sizeof_gr_complex, "costas_error.dat")) - self._fg.connect(self.rrc_filter, - gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) - self._fg.connect(self.clock_recovery, - gr.file_sink(gr.sizeof_gr_complex, "clock_recovery.dat")) - self._fg.connect((self.clock_recovery,1), - gr.file_sink(gr.sizeof_gr_complex, "clock_recovery_error.dat")) - self._fg.connect(self.diffdec, - gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat")) - self._fg.connect(self.slicer, - gr.file_sink(gr.sizeof_char, "slicer.dat")) - self._fg.connect(self.symbol_mapper, - gr.file_sink(gr.sizeof_char, "gray_decoder.dat")) - self._fg.connect(self.unpack, - gr.file_sink(gr.sizeof_char, "unpack.dat")) - - def add_options(parser): - """ - Adds modulation-specific options to the standard parser - """ - parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw, - help="set RRC excess bandwith factor [default=%default] (PSK)") - parser.add_option("", "--no-gray-code", dest="gray_code", - action="store_false", default=_def_gray_code, - help="disable gray coding on modulated bits (PSK)") - parser.add_option("", "--costas-alpha", type="float", default=None, - help="set Costas loop alpha value [default=%default] (PSK)") - parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, - help="set M&M symbol sync loop gain mu value [default=%default] (PSK)") - parser.add_option("", "--mu", type="float", default=_def_mu, - help="set M&M symbol sync loop mu value [default=%default] (PSK)") - add_options=staticmethod(add_options) - - def extract_kwargs_from_options(options): - """ - Given command line options, create dictionary suitable for passing to __init__ - """ - return modulation_utils.extract_kwargs_from_options( - dqpsk_demod.__init__, ('self', 'fg'), options) - extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) - - -# -# Add these to the mod/demod registry -# -modulation_utils.add_type_1_mod('dqpsk', dqpsk_mod) -modulation_utils.add_type_1_demod('dqpsk', dqpsk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/filterbank.py b/gnuradio-core/src/python/gnuradio/blksimpl/filterbank.py deleted file mode 100644 index a7ba2459..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/filterbank.py +++ /dev/null @@ -1,160 +0,0 @@ -# -# Copyright 2005 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. -# - -import sys -from gnuradio import gr, gru - -def _generate_synthesis_taps(mpoints): - return [] # FIXME - - -def _split_taps(taps, mpoints): - assert (len(taps) % mpoints) == 0 - result = [list() for x in range(mpoints)] - for i in xrange(len(taps)): - (result[i % mpoints]).append(taps[i]) - return [tuple(x) for x in result] - - -class synthesis_filterbank(gr.hier_block): - """ - Uniformly modulated polyphase DFT filter bank: synthesis - - See http://cnx.rice.edu/content/m10424/latest - """ - def __init__(self, fg, mpoints, taps=None): - """ - Takes M complex streams in, produces single complex stream out - that runs at M times the input sample rate - - @param fg: flow_graph - @param mpoints: number of freq bins/interpolation factor/subbands - @param taps: filter taps for subband filter - - The channel spacing is equal to the input sample rate. - The total bandwidth and output sample rate are equal the input - sample rate * nchannels. - - Output stream to frequency mapping: - - channel zero is at zero frequency. - - if mpoints is odd: - - Channels with increasing positive frequencies come from - channels 1 through (N-1)/2. - - Channel (N+1)/2 is the maximum negative frequency, and - frequency increases through N-1 which is one channel lower - than the zero frequency. - - if mpoints is even: - - Channels with increasing positive frequencies come from - channels 1 through (N/2)-1. - - Channel (N/2) is evenly split between the max positive and - negative bins. - - Channel (N/2)+1 is the maximum negative frequency, and - frequency increases through N-1 which is one channel lower - than the zero frequency. - - Channels near the frequency extremes end up getting cut - off by subsequent filters and therefore have diminished - utility. - """ - item_size = gr.sizeof_gr_complex - - if taps is None: - taps = _generate_synthesis_taps(mpoints) - - # pad taps to multiple of mpoints - r = len(taps) % mpoints - if r != 0: - taps = taps + (mpoints - r) * (0,) - - # split in mpoints separate set of taps - sub_taps = _split_taps(taps, mpoints) - - self.ss2v = gr.streams_to_vector(item_size, mpoints) - self.ifft = gr.fft_vcc(mpoints, False, []) - self.v2ss = gr.vector_to_streams(item_size, mpoints) - # mpoints filters go in here... - self.ss2s = gr.streams_to_stream(item_size, mpoints) - - fg.connect(self.ss2v, self.ifft, self.v2ss) - - # build mpoints fir filters... - for i in range(mpoints): - f = gr.fft_filter_ccc(1, sub_taps[i]) - fg.connect((self.v2ss, i), f) - fg.connect(f, (self.ss2s, i)) - - gr.hier_block.__init__(self, fg, self.ss2v, self.ss2s) - - -class analysis_filterbank(gr.hier_block): - """ - Uniformly modulated polyphase DFT filter bank: analysis - - See http://cnx.rice.edu/content/m10424/latest - """ - def __init__(self, fg, mpoints, taps=None): - """ - Takes 1 complex stream in, produces M complex streams out - that runs at 1/M times the input sample rate - - @param fg: flow_graph - @param mpoints: number of freq bins/interpolation factor/subbands - @param taps: filter taps for subband filter - - Same channel to frequency mapping as described above. - """ - item_size = gr.sizeof_gr_complex - - if taps is None: - taps = _generate_synthesis_taps(mpoints) - - # pad taps to multiple of mpoints - r = len(taps) % mpoints - if r != 0: - taps = taps + (mpoints - r) * (0,) - - # split in mpoints separate set of taps - sub_taps = _split_taps(taps, mpoints) - - # print >> sys.stderr, "mpoints =", mpoints, "len(sub_taps) =", len(sub_taps) - - self.s2ss = gr.stream_to_streams(item_size, mpoints) - # filters here - self.ss2v = gr.streams_to_vector(item_size, mpoints) - self.fft = gr.fft_vcc(mpoints, True, []) - self.v2ss = gr.vector_to_streams(item_size, mpoints) - - # build mpoints fir filters... - for i in range(mpoints): - f = gr.fft_filter_ccc(1, sub_taps[mpoints-i-1]) - fg.connect((self.s2ss, i), f) - fg.connect(f, (self.ss2v, i)) - - fg.connect(self.ss2v, self.fft, self.v2ss) - gr.hier_block.__init__(self, fg, self.s2ss, self.v2ss) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py b/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py deleted file mode 100644 index 344d84d9..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py +++ /dev/null @@ -1,122 +0,0 @@ -# -# Copyright 2006 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 import gr, optfir -from gnuradio.blksimpl.fm_emph import fm_deemph -from math import pi - -class fm_demod_cf(gr.hier_block): - """ - Generalized FM demodulation block with deemphasis and audio - filtering. - - This block demodulates a band-limited, complex down-converted FM - channel into the the original baseband signal, optionally applying - deemphasis. Low pass filtering is done on the resultant signal. It - produces an output float strem in the range of [-1.0, +1.0]. - - @param fg: flowgraph - @param channel_rate: incoming sample rate of the FM baseband - @type sample_rate: integer - @param deviation: maximum FM deviation (default = 5000) - @type deviation: float - @param audio_decim: input to output decimation rate - @type audio_decim: integer - @param audio_pass: audio low pass filter passband frequency - @type audio_pass: float - @param audio_stop: audio low pass filter stop frequency - @type audio_stop: float - @param gain: gain applied to audio output (default = 1.0) - @type gain: float - @param tau: deemphasis time constant (default = 75e-6), specify 'None' - to prevent deemphasis - """ - def __init__(self, fg, channel_rate, audio_decim, deviation, - audio_pass, audio_stop, gain=1.0, tau=75e-6): - - """ - # Equalizer for ~100 us delay - delay = 100e-6 - num_taps = int(channel_rate*delay) - - mu = 1e-4/num_taps - print "CMA: delay =", delay, "n =", num_taps, "mu =", mu - CMA = gr.cma_equalizer_cc(num_taps, 1.0, mu) - """ - k = channel_rate/(2*pi*deviation) - QUAD = gr.quadrature_demod_cf(k) - - audio_taps = optfir.low_pass(gain, # Filter gain - channel_rate, # Sample rate - audio_pass, # Audio passband - audio_stop, # Audio stopband - 0.1, # Passband ripple - 60) # Stopband attenuation - LPF = gr.fir_filter_fff(audio_decim, audio_taps) - - if tau is not None: - DEEMPH = fm_deemph(fg, channel_rate, tau) - fg.connect(QUAD, DEEMPH, LPF) - else: - fg.connect(QUAD, LPF) - - gr.hier_block.__init__(self, fg, QUAD, LPF) - -class demod_20k0f3e_cf(fm_demod_cf): - """ - NBFM demodulation block, 20 KHz channels - - This block demodulates a complex, downconverted, narrowband FM - channel conforming to 20K0F3E emission standards, outputting - floats in the range [-1.0, +1.0]. - - @param fg: flowgraph - @param sample_rate: incoming sample rate of the FM baseband - @type sample_rate: integer - @param audio_decim: input to output decimation rate - @type audio_decim: integer - """ - def __init__(self, fg, channel_rate, audio_decim): - fm_demod_cf.__init__(self, fg, channel_rate, audio_decim, - 5000, # Deviation - 3000, # Audio passband frequency - 4000) # Audio stopband frequency - -class demod_200kf3e_cf(fm_demod_cf): - """ - WFM demodulation block, mono. - - This block demodulates a complex, downconverted, wideband FM - channel conforming to 200KF3E emission standards, outputting - floats in the range [-1.0, +1.0]. - - @param fg: flowgraph - @param sample_rate: incoming sample rate of the FM baseband - @type sample_rate: integer - @param audio_decim: input to output decimation rate - @type audio_decim: integer - """ - def __init__(self, fg, channel_rate, audio_decim): - fm_demod_cf.__init__(self, fg, channel_rate, audio_decim, - 75000, # Deviation - 15000, # Audio passband - 16000, # Audio stopband - 20.0) # Audio gain diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/fm_emph.py b/gnuradio-core/src/python/gnuradio/blksimpl/fm_emph.py deleted file mode 100644 index 473a70af..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/fm_emph.py +++ /dev/null @@ -1,145 +0,0 @@ -# -# Copyright 2005 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 import gr -import math - - -# -# 1 -# H(s) = ------- -# 1 + s -# -# tau is the RC time constant. -# critical frequency: w_p = 1/tau -# -# We prewarp and use the bilinear z-transform to get our IIR coefficients. -# See "Digital Signal Processing: A Practical Approach" by Ifeachor and Jervis -# - -class fm_deemph(gr.hier_block): - """ - FM Deemphasis IIR filter. - """ - def __init__(self, fg, fs, tau=75e-6): - """ - @param fg: flow graph - @type fg: gr.flow_graph - @param fs: sampling frequency in Hz - @type fs: float - @param tau: Time constant in seconds (75us in US, 50us in EUR) - @type tau: float - """ - w_p = 1/tau - w_pp = math.tan (w_p / (fs * 2)) # prewarped analog freq - - a1 = (w_pp - 1)/(w_pp + 1) - b0 = w_pp/(1 + w_pp) - b1 = b0 - - btaps = [b0, b1] - ataps = [1, a1] - - if 0: - print "btaps =", btaps - print "ataps =", ataps - global plot1 - plot1 = gru.gnuplot_freqz (gru.freqz (btaps, ataps), fs, True) - - deemph = gr.iir_filter_ffd(btaps, ataps) - gr.hier_block.__init__(self, fg, deemph, deemph) - -# -# 1 + s*t1 -# H(s) = ---------- -# 1 + s*t2 -# -# I think this is the right transfer function. -# -# -# This fine ASCII rendition is based on Figure 5-15 -# in "Digital and Analog Communication Systems", Leon W. Couch II -# -# -# R1 -# +-----||------+ -# | | -# o------+ +-----+--------o -# | C1 | | -# +----/\/\/\/--+ \ -# / -# \ R2 -# / -# \ -# | -# o--------------------------+--------o -# -# f1 = 1/(2*pi*t1) = 1/(2*pi*R1*C) -# -# 1 R1 + R2 -# f2 = ------- = ------------ -# 2*pi*t2 2*pi*R1*R2*C -# -# t1 is 75us in US, 50us in EUR -# f2 should be higher than our audio bandwidth. -# -# -# The Bode plot looks like this: -# -# -# /---------------- -# / -# / <-- slope = 20dB/decade -# / -# -------------/ -# f1 f2 -# -# We prewarp and use the bilinear z-transform to get our IIR coefficients. -# See "Digital Signal Processing: A Practical Approach" by Ifeachor and Jervis -# - -class fm_preemph(gr.hier_block): - """ - FM Preemphasis IIR filter. - """ - def __init__(self, fg, fs, tau=75e-6): - """ - @param fg: flow graph - @type fg: gr.flow_graph - @param fs: sampling frequency in Hz - @type fs: float - @param tau: Time constant in seconds (75us in US, 50us in EUR) - @type tau: float - """ - - # FIXME make this compute the right answer - - btaps = [1] - ataps = [1] - - if 0: - print "btaps =", btaps - print "ataps =", ataps - global plot2 - plot2 = gru.gnuplot_freqz (gru.freqz (btaps, ataps), fs, True) - - preemph = gr.iir_filter_ffd(btaps, ataps) - gr.hier_block.__init__(self, fg, preemph, preemph) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py b/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py deleted file mode 100644 index e71e516f..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py +++ /dev/null @@ -1,289 +0,0 @@ -# -# GMSK modulation and demodulation. -# -# -# Copyright 2005,2006 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. -# - -# See gnuradio-examples/python/gmsk2 for examples - -from gnuradio import gr -from gnuradio import modulation_utils -from math import pi -import Numeric -from pprint import pprint -import inspect - -# default values (used in __init__ and add_options) -_def_samples_per_symbol = 2 -_def_bt = 0.35 -_def_verbose = False -_def_log = False - -_def_gain_mu = 0.05 -_def_mu = 0.5 -_def_freq_error = 0.0 -_def_omega_relative_limit = 0.005 - - -# ///////////////////////////////////////////////////////////////////////////// -# GMSK modulator -# ///////////////////////////////////////////////////////////////////////////// - -class gmsk_mod(gr.hier_block): - - def __init__(self, fg, - samples_per_symbol=_def_samples_per_symbol, - bt=_def_bt, - verbose=_def_verbose, - log=_def_log): - """ - Hierarchical block for Gaussian Minimum Shift Key (GMSK) - modulation. - - The input is a byte stream (unsigned char) and the - output is the complex modulated signal at baseband. - - @param fg: flow graph - @type fg: flow graph - @param samples_per_symbol: samples per baud >= 2 - @type samples_per_symbol: integer - @param bt: Gaussian filter bandwidth * symbol time - @type bt: float - @param verbose: Print information about modulator? - @type verbose: bool - @param debug: Print modualtion data to files? - @type debug: bool - """ - - self._fg = fg - self._samples_per_symbol = samples_per_symbol - self._bt = bt - - if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2: - raise TypeError, ("samples_per_symbol must be an integer >= 2, is %r" % (samples_per_symbol,)) - - ntaps = 4 * samples_per_symbol # up to 3 bits in filter at once - sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2 - - # Turn it into NRZ data. - self.nrz = gr.bytes_to_syms() - - # Form Gaussian filter - # Generate Gaussian response (Needs to be convolved with window below). - self.gaussian_taps = gr.firdes.gaussian( - 1, # gain - samples_per_symbol, # symbol_rate - bt, # bandwidth * symbol time - ntaps # number of taps - ) - - self.sqwave = (1,) * samples_per_symbol # rectangular window - self.taps = Numeric.convolve(Numeric.array(self.gaussian_taps),Numeric.array(self.sqwave)) - self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps) - - # FM modulation - self.fmmod = gr.frequency_modulator_fc(sensitivity) - - if verbose: - self._print_verbage() - - if log: - self._setup_logging() - - # Connect & Initialize base class - self._fg.connect(self.nrz, self.gaussian_filter, self.fmmod) - gr.hier_block.__init__(self, self._fg, self.nrz, self.fmmod) - - def samples_per_symbol(self): - return self._samples_per_symbol - - def bits_per_symbol(self=None): # staticmethod that's also callable on an instance - return 1 - bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. - - - def _print_verbage(self): - print "bits per symbol = %d" % self.bits_per_symbol() - print "Gaussian filter bt = %.2f" % self._bt - - - def _setup_logging(self): - print "Modulation logging turned on." - self._fg.connect(self.nrz, - gr.file_sink(gr.sizeof_float, "nrz.dat")) - self._fg.connect(self.gaussian_filter, - gr.file_sink(gr.sizeof_float, "gaussian_filter.dat")) - self._fg.connect(self.fmmod, - gr.file_sink(gr.sizeof_gr_complex, "fmmod.dat")) - - - def add_options(parser): - """ - Adds GMSK modulation-specific options to the standard parser - """ - parser.add_option("", "--bt", type="float", default=_def_bt, - help="set bandwidth-time product [default=%default] (GMSK)") - add_options=staticmethod(add_options) - - - def extract_kwargs_from_options(options): - """ - Given command line options, create dictionary suitable for passing to __init__ - """ - return modulation_utils.extract_kwargs_from_options(gmsk_mod.__init__, - ('self', 'fg'), options) - extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) - - - -# ///////////////////////////////////////////////////////////////////////////// -# GMSK demodulator -# ///////////////////////////////////////////////////////////////////////////// - -class gmsk_demod(gr.hier_block): - - def __init__(self, fg, - samples_per_symbol=_def_samples_per_symbol, - gain_mu=_def_gain_mu, - mu=_def_mu, - omega_relative_limit=_def_omega_relative_limit, - freq_error=_def_freq_error, - verbose=_def_verbose, - log=_def_log): - """ - Hierarchical block for Gaussian Minimum Shift Key (GMSK) - demodulation. - - The input is the complex modulated signal at baseband. - The output is a stream of bits packed 1 bit per byte (the LSB) - - @param fg: flow graph - @type fg: flow graph - @param samples_per_symbol: samples per baud - @type samples_per_symbol: integer - @param verbose: Print information about modulator? - @type verbose: bool - @param log: Print modualtion data to files? - @type log: bool - - Clock recovery parameters. These all have reasonble defaults. - - @param gain_mu: controls rate of mu adjustment - @type gain_mu: float - @param mu: fractional delay [0.0, 1.0] - @type mu: float - @param omega_relative_limit: sets max variation in omega - @type omega_relative_limit: float, typically 0.000200 (200 ppm) - @param freq_error: bit rate error as a fraction - @param float - """ - - self._fg = fg - self._samples_per_symbol = samples_per_symbol - self._gain_mu = gain_mu - self._mu = mu - self._omega_relative_limit = omega_relative_limit - self._freq_error = freq_error - - if samples_per_symbol < 2: - raise TypeError, "samples_per_symbol >= 2, is %f" % samples_per_symbol - - self._omega = samples_per_symbol*(1+self._freq_error) - - self._gain_omega = .25 * self._gain_mu * self._gain_mu # critically damped - - # Demodulate FM - sensitivity = (pi / 2) / samples_per_symbol - self.fmdemod = gr.quadrature_demod_cf(1.0 / sensitivity) - - # the clock recovery block tracks the symbol clock and resamples as needed. - # the output of the block is a stream of soft symbols (float) - self.clock_recovery = gr.clock_recovery_mm_ff(self._omega, self._gain_omega, - self._mu, self._gain_mu, - self._omega_relative_limit) - - # slice the floats at 0, outputting 1 bit (the LSB of the output byte) per sample - self.slicer = gr.binary_slicer_fb() - - if verbose: - self._print_verbage() - - if log: - self._setup_logging() - - # Connect & Initialize base class - self._fg.connect(self.fmdemod, self.clock_recovery, self.slicer) - gr.hier_block.__init__(self, self._fg, self.fmdemod, self.slicer) - - def samples_per_symbol(self): - return self._samples_per_symbol - - def bits_per_symbol(self=None): # staticmethod that's also callable on an instance - return 1 - bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method. - - - def _print_verbage(self): - print "bits per symbol = %d" % self.bits_per_symbol() - print "M&M clock recovery omega = %f" % self._omega - print "M&M clock recovery gain mu = %f" % self._gain_mu - print "M&M clock recovery mu = %f" % self._mu - print "M&M clock recovery omega rel. limit = %f" % self._omega_relative_limit - print "frequency error = %f" % self._freq_error - - - def _setup_logging(self): - print "Demodulation logging turned on." - self._fg.connect(self.fmdemod, - gr.file_sink(gr.sizeof_float, "fmdemod.dat")) - self._fg.connect(self.clock_recovery, - gr.file_sink(gr.sizeof_float, "clock_recovery.dat")) - self._fg.connect(self.slicer, - gr.file_sink(gr.sizeof_char, "slicer.dat")) - - def add_options(parser): - """ - Adds GMSK demodulation-specific options to the standard parser - """ - parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu, - help="M&M clock recovery gain mu [default=%default] (GMSK/PSK)") - parser.add_option("", "--mu", type="float", default=_def_mu, - help="M&M clock recovery mu [default=%default] (GMSK/PSK)") - parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit, - help="M&M clock recovery omega relative limit [default=%default] (GMSK/PSK)") - parser.add_option("", "--freq-error", type="float", default=_def_freq_error, - help="M&M clock recovery frequency error [default=%default] (GMSK)") - add_options=staticmethod(add_options) - - def extract_kwargs_from_options(options): - """ - Given command line options, create dictionary suitable for passing to __init__ - """ - return modulation_utils.extract_kwargs_from_options(gmsk_demod.__init__, - ('self', 'fg'), options) - extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) - - -# -# Add these to the mod/demod registry -# -modulation_utils.add_type_1_mod('gmsk', gmsk_mod) -modulation_utils.add_type_1_demod('gmsk', gmsk_demod) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/nbfm_rx.py b/gnuradio-core/src/python/gnuradio/blksimpl/nbfm_rx.py deleted file mode 100644 index 6ec06356..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/nbfm_rx.py +++ /dev/null @@ -1,87 +0,0 @@ -# -# Copyright 2005 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. -# - -import math -from gnuradio import gr, optfir -from gnuradio.blksimpl.fm_emph import fm_deemph -from gnuradio.blksimpl.standard_squelch import standard_squelch - -class nbfm_rx(gr.hier_block): - def __init__(self, fg, audio_rate, quad_rate, tau=75e-6, max_dev=5e3): - """ - Narrow Band FM Receiver. - - Takes a single complex baseband input stream and produces a single - float output stream of audio sample in the range [-1, +1]. - - @param fg: flow graph - @param audio_rate: sample rate of audio stream, >= 16k - @type audio_rate: integer - @param quad_rate: sample rate of output stream - @type quad_rate: integer - @param tau: preemphasis time constant (default 75e-6) - @type tau: float - @param max_dev: maximum deviation in Hz (default 5e3) - @type max_dev: float - - quad_rate must be an integer multiple of audio_rate. - - Exported sub-blocks (attributes): - squelch - quad_demod - deemph - audio_filter - """ - - # FIXME audio_rate and quad_rate ought to be exact rationals - audio_rate = int(audio_rate) - quad_rate = int(quad_rate) - - if quad_rate % audio_rate != 0: - raise ValueError, "quad_rate is not an integer multiple of audio_rate" - - squelch_threshold = 20 # dB - #self.squelch = gr.simple_squelch_cc(squelch_threshold, 0.001) - - # FM Demodulator input: complex; output: float - k = quad_rate/(2*math.pi*max_dev) - self.quad_demod = gr.quadrature_demod_cf(k) - - # FM Deemphasis IIR filter - self.deemph = fm_deemph (fg, quad_rate, tau=tau) - - # compute FIR taps for audio filter - audio_decim = quad_rate // audio_rate - audio_taps = gr.firdes.low_pass (1.0, # gain - quad_rate, # sampling rate - 4.5e3, # Audio LPF cutoff - 2.5e3, # Transition band - gr.firdes.WIN_HAMMING) # filter type - - print "len(audio_taps) =", len(audio_taps) - - # Decimating audio filter - # input: float; output: float; taps: float - self.audio_filter = gr.fir_filter_fff(audio_decim, audio_taps) - - fg.connect(self.quad_demod, self.deemph, self.audio_filter) - - gr.hier_block.__init__(self, fg, self.quad_demod, self.audio_filter) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/nbfm_tx.py b/gnuradio-core/src/python/gnuradio/blksimpl/nbfm_tx.py deleted file mode 100644 index 49b052bc..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/nbfm_tx.py +++ /dev/null @@ -1,95 +0,0 @@ -# -# Copyright 2005 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. -# - -import math -from gnuradio import gr, optfir -from gnuradio.blksimpl.fm_emph import fm_preemph - -#from gnuradio import ctcss - -class nbfm_tx(gr.hier_block): - def __init__(self, fg, audio_rate, quad_rate, tau=75e-6, max_dev=5e3): - """ - Narrow Band FM Transmitter. - - Takes a single float input stream of audio samples in the range [-1,+1] - and produces a single FM modulated complex baseband output. - - @param fg: flow graph - @param audio_rate: sample rate of audio stream, >= 16k - @type audio_rate: integer - @param quad_rate: sample rate of output stream - @type quad_rate: integer - @param tau: preemphasis time constant (default 75e-6) - @type tau: float - @param max_dev: maximum deviation in Hz (default 5e3) - @type max_dev: float - - quad_rate must be an integer multiple of audio_rate. - """ - - # FIXME audio_rate and quad_rate ought to be exact rationals - audio_rate = int(audio_rate) - quad_rate = int(quad_rate) - - if quad_rate % audio_rate != 0: - raise ValueError, "quad_rate is not an integer multiple of audio_rate" - - - do_interp = audio_rate != quad_rate - - if do_interp: - interp_factor = quad_rate / audio_rate - interp_taps = optfir.low_pass (interp_factor, # gain - quad_rate, # Fs - 4500, # passband cutoff - 7000, # stopband cutoff - 0.1, # passband ripple dB - 40) # stopband atten dB - - #print "len(interp_taps) =", len(interp_taps) - self.interpolator = gr.interp_fir_filter_fff (interp_factor, interp_taps) - - self.preemph = fm_preemph (fg, quad_rate, tau=tau) - - k = 2 * math.pi * max_dev / quad_rate - self.modulator = gr.frequency_modulator_fc (k) - - if do_interp: - fg.connect (self.interpolator, self.preemph, self.modulator) - gr.hier_block.__init__(self, fg, self.interpolator, self.modulator) - else: - fg.connect(self.preemph, self.modulator) - gr.hier_block.__init__(self, fg, self.preemph, self.modulator) - - -#class ctcss_gen_f(gr.sig_source_f): -# def __init__(self, sample_rate, tone_freq): -# gr.sig_source_f.__init__(self, sample_rate, gr.SIN_WAVE, tone_freq, 0.1, 0.0) -# -# def set_tone (self, tone): -# gr.sig_source_f.set_frequency(self,tone) - -class ctcss_gen_f(gr.hier_block): - def __init__(self, fg, sample_rate, tone_freq): - self.plgen = gr.sig_source_f(sample_rate, gr.GR_SIN_WAVE, tone_freq, 0.1, 0.0) - - gr.hier_block.__init__(self, fg, self.plgen, self.plgen) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/pkt.py b/gnuradio-core/src/python/gnuradio/blksimpl/pkt.py deleted file mode 100644 index a7b4b591..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/pkt.py +++ /dev/null @@ -1,156 +0,0 @@ -# -# Copyright 2005,2006 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 math import pi -import Numeric - -from gnuradio import gr, packet_utils -import gnuradio.gr.gr_threading as _threading - - -# ///////////////////////////////////////////////////////////////////////////// -# mod/demod with packets as i/o -# ///////////////////////////////////////////////////////////////////////////// - -class mod_pkts(gr.hier_block): - """ - Wrap an arbitrary digital modulator in our packet handling framework. - - Send packets by calling send_pkt - """ - def __init__(self, fg, modulator, access_code=None, msgq_limit=2, pad_for_usrp=True): - """ - Hierarchical block for sending packets - - Packets to be sent are enqueued by calling send_pkt. - The output is the complex modulated signal at baseband. - - @param fg: flow graph - @type fg: flow graph - @param modulator: instance of modulator class (gr_block or hier_block) - @type modulator: complex baseband out - @param access_code: AKA sync vector - @type access_code: string of 1's and 0's between 1 and 64 long - @param msgq_limit: maximum number of messages in message queue - @type msgq_limit: int - @param pad_for_usrp: If true, packets are padded such that they end up a multiple of 128 samples - - See gmsk_mod for remaining parameters - """ - self._modulator = modulator - self._pad_for_usrp = pad_for_usrp - - if access_code is None: - access_code = packet_utils.default_access_code - if not packet_utils.is_1_0_string(access_code): - raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,) - self._access_code = access_code - - # accepts messages from the outside world - self._pkt_input = gr.message_source(gr.sizeof_char, msgq_limit) - fg.connect(self._pkt_input, self._modulator) - gr.hier_block.__init__(self, fg, None, self._modulator) - - def send_pkt(self, payload='', eof=False): - """ - Send the payload. - - @param payload: data to send - @type payload: string - """ - if eof: - msg = gr.message(1) # tell self._pkt_input we're not sending any more packets - else: - # print "original_payload =", string_to_hex_list(payload) - pkt = packet_utils.make_packet(payload, - self._modulator.samples_per_symbol(), - self._modulator.bits_per_symbol(), - self._access_code, - self._pad_for_usrp) - #print "pkt =", string_to_hex_list(pkt) - msg = gr.message_from_string(pkt) - self._pkt_input.msgq().insert_tail(msg) - - - -class demod_pkts(gr.hier_block): - """ - Wrap an arbitrary digital demodulator in our packet handling framework. - - The input is complex baseband. When packets are demodulated, they are passed to the - app via the callback. - """ - - def __init__(self, fg, demodulator, access_code=None, callback=None, threshold=-1): - """ - Hierarchical block for demodulating and deframing packets. - - The input is the complex modulated signal at baseband. - Demodulated packets are sent to the handler. - - @param fg: flow graph - @type fg: flow graph - @param demodulator: instance of demodulator class (gr_block or hier_block) - @type demodulator: complex baseband in - @param access_code: AKA sync vector - @type access_code: string of 1's and 0's - @param callback: function of two args: ok, payload - @type callback: ok: bool; payload: string - @param threshold: detect access_code with up to threshold bits wrong (-1 -> use default) - @type threshold: int - """ - - self._demodulator = demodulator - if access_code is None: - access_code = packet_utils.default_access_code - if not packet_utils.is_1_0_string(access_code): - raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,) - self._access_code = access_code - - if threshold == -1: - threshold = 12 # FIXME raise exception - - self._rcvd_pktq = gr.msg_queue() # holds packets from the PHY - self.correlator = gr.correlate_access_code_bb(access_code, threshold) - - self.framer_sink = gr.framer_sink_1(self._rcvd_pktq) - fg.connect(self._demodulator, self.correlator, self.framer_sink) - - gr.hier_block.__init__(self, fg, self._demodulator, None) - self._watcher = _queue_watcher_thread(self._rcvd_pktq, callback) - - -class _queue_watcher_thread(_threading.Thread): - def __init__(self, rcvd_pktq, callback): - _threading.Thread.__init__(self) - self.setDaemon(1) - self.rcvd_pktq = rcvd_pktq - self.callback = callback - self.keep_running = True - self.start() - - - def run(self): - while self.keep_running: - msg = self.rcvd_pktq.delete_head() - ok, payload = packet_utils.unmake_packet(msg.to_string()) - if self.callback: - self.callback(ok, payload) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/psk.py b/gnuradio-core/src/python/gnuradio/blksimpl/psk.py deleted file mode 100644 index 92b330f0..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/psk.py +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright 2005,2006 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 math import pi, sqrt -import cmath - -def make_constellation(m): - return [cmath.exp(i * 2 * pi / m * 1j) for i in range(m)] - -# Common definition of constellations for Tx and Rx -constellation = { - 2 : make_constellation(2), # BPSK - 4 : make_constellation(4), # QPSK - 8 : make_constellation(8) # 8PSK - } - -# ----------------------- -# Do Gray code -# ----------------------- -# binary to gray coding -binary_to_gray = { - 2 : (0, 1), - 4 : (0, 1, 3, 2), - 8 : (0, 1, 3, 2, 7, 6, 4, 5) - } - -# gray to binary -gray_to_binary = { - 2 : (0, 1), - 4 : (0, 1, 3, 2), - 8 : (0, 1, 3, 2, 6, 7, 5, 4) - } - -# ----------------------- -# Don't Gray code -# ----------------------- -# identity mapping -binary_to_ungray = { - 2 : (0, 1), - 4 : (0, 1, 2, 3), - 8 : (0, 1, 2, 3, 4, 5, 6, 7) - } - -# identity mapping -ungray_to_binary = { - 2 : (0, 1), - 4 : (0, 1, 2, 3), - 8 : (0, 1, 2, 3, 4, 5, 6, 7) - } diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/rational_resampler.py b/gnuradio-core/src/python/gnuradio/blksimpl/rational_resampler.py deleted file mode 100644 index b3e8ad7a..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/rational_resampler.py +++ /dev/null @@ -1,137 +0,0 @@ -# -# Copyright 2005 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 import gr, gru - -_plot = None - -def design_filter(interpolation, decimation, fractional_bw): - """ - Given the interpolation rate, decimation rate and a fractional bandwidth, - design a set of taps. - - @param interpolation: interpolation factor - @type interpolation: integer > 0 - @param decimation: decimation factor - @type decimation: integer > 0 - @param fractional_bw: fractional bandwidth in (0, 0.5) 0.4 works well. - @type fractional_bw: float - @returns: sequence of numbers - """ - - global _plot - - if fractional_bw >= 0.5 or fractional_bw <= 0: - raise ValueError, "Invalid fractional_bandwidth, must be in (0, 0.5)" - - beta = 5.0 - trans_width = 0.5 - fractional_bw - mid_transition_band = 0.5 - trans_width/2 - - taps = gr.firdes.low_pass(interpolation, # gain - 1, # Fs - mid_transition_band/interpolation, # trans mid point - trans_width/interpolation, # transition width - gr.firdes.WIN_KAISER, - beta # beta - ) - # print "len(resampler_taps) =", len(taps) - # _plot = gru.gnuplot_freqz(gru.freqz(taps, 1), 1) - - return taps - - - -class _rational_resampler_base(gr.hier_block): - """ - base class for all rational resampler variants. - """ - def __init__(self, resampler_base, fg, - interpolation, decimation, taps=None, fractional_bw=None): - """ - Rational resampling polyphase FIR filter. - - Either taps or fractional_bw may be specified, but not both. - If neither is specified, a reasonable default, 0.4, is used as - the fractional_bw. - - @param fg: flow graph - @param interpolation: interpolation factor - @type interpolation: integer > 0 - @param decimation: decimation factor - @type decimation: integer > 0 - @param taps: optional filter coefficients - @type taps: sequence - @param fractional_bw: fractional bandwidth in (0, 0.5), measured at final freq (use 0.4) - @type fractional_bw: float - """ - - if not isinstance(interpolation, int) or interpolation < 1: - raise ValueError, "interpolation must be an integer >= 1" - - if not isinstance(decimation, int) or decimation < 1: - raise ValueError, "decimation must be an integer >= 1" - - if taps is None and fractional_bw is None: - fractional_bw = 0.4 - - d = gru.gcd(interpolation, decimation) - interpolation = interpolation // d - decimation = decimation // d - - if taps is None: - taps = design_filter(interpolation, decimation, fractional_bw) - - resampler = resampler_base(interpolation, decimation, taps) - gr.hier_block.__init__(self, fg, resampler, resampler) - - - -class rational_resampler_fff(_rational_resampler_base): - def __init__(self, fg, interpolation, decimation, taps=None, fractional_bw=None): - """ - Rational resampling polyphase FIR filter with - float input, float output and float taps. - """ - _rational_resampler_base.__init__(self, gr.rational_resampler_base_fff, fg, - interpolation, decimation, - taps, fractional_bw) - -class rational_resampler_ccf(_rational_resampler_base): - def __init__(self, fg, interpolation, decimation, taps=None, fractional_bw=None): - """ - Rational resampling polyphase FIR filter with - complex input, complex output and float taps. - """ - _rational_resampler_base.__init__(self, gr.rational_resampler_base_ccf, fg, - interpolation, decimation, - taps, fractional_bw) - -class rational_resampler_ccc(_rational_resampler_base): - def __init__(self, fg, interpolation, decimation, taps=None, fractional_bw=None): - """ - Rational resampling polyphase FIR filter with - complex input, complex output and complex taps. - """ - _rational_resampler_base.__init__(self, gr.rational_resampler_base_ccc, fg, - interpolation, decimation, - taps, fractional_bw) - diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/standard_squelch.py b/gnuradio-core/src/python/gnuradio/blksimpl/standard_squelch.py deleted file mode 100644 index b2b9451c..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/standard_squelch.py +++ /dev/null @@ -1,73 +0,0 @@ -# -# Copyright 2005 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. -# - -import math -from gnuradio import gr, optfir - -class standard_squelch(gr.hier_block): - def __init__(self, fg, audio_rate): - - self.input_node = gr.add_const_ff(0) # FIXME kludge - - self.low_iir = gr.iir_filter_ffd((0.0193,0,-0.0193),(1,1.9524,-0.9615)) - self.low_square = gr.multiply_ff() - self.low_smooth = gr.single_pole_iir_filter_ff(1/(0.01*audio_rate)) # 100ms time constant - - self.hi_iir = gr.iir_filter_ffd((0.0193,0,-0.0193),(1,1.3597,-0.9615)) - self.hi_square = gr.multiply_ff() - self.hi_smooth = gr.single_pole_iir_filter_ff(1/(0.01*audio_rate)) - - self.sub = gr.sub_ff(); - self.add = gr.add_ff(); - self.gate = gr.threshold_ff(0.3,0.43,0) - self.squelch_lpf = gr.single_pole_iir_filter_ff(1/(0.01*audio_rate)) - - self.div = gr.divide_ff() - self.squelch_mult = gr.multiply_ff() - - fg.connect (self.input_node, (self.squelch_mult, 0)) - - fg.connect (self.input_node,self.low_iir) - fg.connect (self.low_iir,(self.low_square,0)) - fg.connect (self.low_iir,(self.low_square,1)) - fg.connect (self.low_square,self.low_smooth,(self.sub,0)) - fg.connect (self.low_smooth, (self.add,0)) - - fg.connect (self.input_node,self.hi_iir) - fg.connect (self.hi_iir,(self.hi_square,0)) - fg.connect (self.hi_iir,(self.hi_square,1)) - fg.connect (self.hi_square,self.hi_smooth,(self.sub,1)) - fg.connect (self.hi_smooth, (self.add,1)) - - fg.connect (self.sub, (self.div, 0)) - fg.connect (self.add, (self.div, 1)) - fg.connect (self.div, self.gate, self.squelch_lpf, (self.squelch_mult,1)) - - gr.hier_block.__init__(self, fg, self.input_node, self.squelch_mult) - - def set_threshold(self, threshold): - self.gate.set_hi(threshold) - - def threshold(self): - return self.gate.hi() - - def squelch_range(self): - return (0.0, 1.0, 1.0/100) diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv.py b/gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv.py deleted file mode 100644 index ffcdc144..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv.py +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright 2005 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 import gr -from gnuradio.blksimpl.fm_emph import fm_deemph -import math - -class wfm_rcv(gr.hier_block): - def __init__ (self, fg, quad_rate, audio_decimation): - """ - Hierarchical block for demodulating a broadcast FM signal. - - The input is the downconverted complex baseband signal (gr_complex). - The output is the demodulated audio (float). - - @param fg: flow graph. - @type fg: flow graph - @param quad_rate: input sample rate of complex baseband input. - @type quad_rate: float - @param audio_decimation: how much to decimate quad_rate to get to audio. - @type audio_decimation: integer - """ - volume = 20. - - max_dev = 75e3 - fm_demod_gain = quad_rate/(2*math.pi*max_dev) - audio_rate = quad_rate / audio_decimation - - - # We assign to self so that outsiders can grab the demodulator - # if they need to. E.g., to plot its output. - # - # input: complex; output: float - self.fm_demod = gr.quadrature_demod_cf (fm_demod_gain) - - # input: float; output: float - self.deemph = fm_deemph (fg, audio_rate) - - # compute FIR filter taps for audio filter - width_of_transition_band = audio_rate / 32 - audio_coeffs = gr.firdes.low_pass (1.0, # gain - quad_rate, # sampling rate - audio_rate/2 - width_of_transition_band, - width_of_transition_band, - gr.firdes.WIN_HAMMING) - # input: float; output: float - self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) - - fg.connect (self.fm_demod, self.audio_filter, self.deemph) - - gr.hier_block.__init__(self, - fg, - self.fm_demod, # head of the pipeline - self.deemph) # tail of the pipeline diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv_pll.py b/gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv_pll.py deleted file mode 100644 index 5ee49cea..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/wfm_rcv_pll.py +++ /dev/null @@ -1,206 +0,0 @@ -# -# Copyright 2005,2006 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 import gr -from gnuradio.blksimpl.fm_emph import fm_deemph -import math - -class wfm_rcv_pll(gr.hier_block): - def __init__ (self, fg, demod_rate, audio_decimation): - """ - Hierarchical block for demodulating a broadcast FM signal. - - The input is the downconverted complex baseband signal (gr_complex). - The output is two streams of the demodulated audio (float) 0=Left, 1=Right. - - @param fg: flow graph. - @type fg: flow graph - @param demod_rate: input sample rate of complex baseband input. - @type demod_rate: float - @param audio_decimation: how much to decimate demod_rate to get to audio. - @type audio_decimation: integer - """ - - bandwidth = 200e3 - audio_rate = demod_rate / audio_decimation - - - # We assign to self so that outsiders can grab the demodulator - # if they need to. E.g., to plot its output. - # - # input: complex; output: float - alpha = 0.25*bandwidth * math.pi / demod_rate - beta = alpha * alpha / 4.0 - max_freq = 2.0*math.pi*100e3/demod_rate - - self.fm_demod = gr.pll_freqdet_cf (alpha,beta,max_freq,-max_freq) - - # input: float; output: float - self.deemph_Left = fm_deemph (fg, audio_rate) - self.deemph_Right = fm_deemph (fg, audio_rate) - - # compute FIR filter taps for audio filter - width_of_transition_band = audio_rate / 32 - audio_coeffs = gr.firdes.low_pass (1.0 , # gain - demod_rate, # sampling rate - 15000 , - width_of_transition_band, - gr.firdes.WIN_HAMMING) - # input: float; output: float - self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) - if 1: - # Pick off the stereo carrier/2 with this filter. It attenuated 10 dB so apply 10 dB gain - # We pick off the negative frequency half because we want to base band by it! - ## NOTE THIS WAS HACKED TO OFFSET INSERTION LOSS DUE TO DEEMPHASIS - - stereo_carrier_filter_coeffs = gr.firdes.complex_band_pass(10.0, - demod_rate, - -19020, - -18980, - width_of_transition_band, - gr.firdes.WIN_HAMMING) - - #print "len stereo carrier filter = ",len(stereo_carrier_filter_coeffs) - #print "stereo carrier filter ", stereo_carrier_filter_coeffs - #print "width of transition band = ",width_of_transition_band, " audio rate = ", audio_rate - - # Pick off the double side band suppressed carrier Left-Right audio. It is attenuated 10 dB so apply 10 dB gain - - stereo_dsbsc_filter_coeffs = gr.firdes.complex_band_pass(20.0, - demod_rate, - 38000-15000/2, - 38000+15000/2, - width_of_transition_band, - gr.firdes.WIN_HAMMING) - #print "len stereo dsbsc filter = ",len(stereo_dsbsc_filter_coeffs) - #print "stereo dsbsc filter ", stereo_dsbsc_filter_coeffs - # construct overlap add filter system from coefficients for stereo carrier - - self.stereo_carrier_filter = gr.fir_filter_fcc(audio_decimation, stereo_carrier_filter_coeffs) - - # carrier is twice the picked off carrier so arrange to do a commplex multiply - - self.stereo_carrier_generator = gr.multiply_cc(); - - # Pick off the rds signal - - stereo_rds_filter_coeffs = gr.firdes.complex_band_pass(30.0, - demod_rate, - 57000 - 1500, - 57000 + 1500, - width_of_transition_band, - gr.firdes.WIN_HAMMING) - #print "len stereo dsbsc filter = ",len(stereo_dsbsc_filter_coeffs) - #print "stereo dsbsc filter ", stereo_dsbsc_filter_coeffs - # construct overlap add filter system from coefficients for stereo carrier - - self.stereo_carrier_filter = gr.fir_filter_fcc(audio_decimation, stereo_carrier_filter_coeffs) - self.rds_signal_filter = gr.fir_filter_fcc(audio_decimation, stereo_rds_filter_coeffs) - - - - - - - self.rds_carrier_generator = gr.multiply_cc(); - self.rds_signal_generator = gr.multiply_cc(); - self_rds_signal_processor = gr.null_sink(gr.sizeof_gr_complex); - - - - alpha = 5 * 0.25 * math.pi / (audio_rate) - beta = alpha * alpha / 4.0 - max_freq = -2.0*math.pi*18990/audio_rate; - min_freq = -2.0*math.pi*19010/audio_rate; - - self.stereo_carrier_pll_recovery = gr.pll_refout_cc(alpha,beta,max_freq,min_freq); - #self.stereo_carrier_pll_recovery.squelch_enable(False) #pll_refout does not have squelch yet, so disabled for now - - - # set up mixer (multiplier) to get the L-R signal at baseband - - self.stereo_basebander = gr.multiply_cc(); - - # pick off the real component of the basebanded L-R signal. The imaginary SHOULD be zero - - self.LmR_real = gr.complex_to_real(); - self.Make_Left = gr.add_ff(); - self.Make_Right = gr.sub_ff(); - - self.stereo_dsbsc_filter = gr.fir_filter_fcc(audio_decimation, stereo_dsbsc_filter_coeffs) - - - if 1: - - # send the real signal to complex filter to pick off the carrier and then to one side of a multiplier - fg.connect (self.fm_demod,self.stereo_carrier_filter,self.stereo_carrier_pll_recovery, (self.stereo_carrier_generator,0)) - # send the already filtered carrier to the otherside of the carrier - fg.connect (self.stereo_carrier_pll_recovery, (self.stereo_carrier_generator,1)) - # the resulting signal from this multiplier is the carrier with correct phase but at -38000 Hz. - - # send the new carrier to one side of the mixer (multiplier) - fg.connect (self.stereo_carrier_generator, (self.stereo_basebander,0)) - # send the demphasized audio to the DSBSC pick off filter, the complex - # DSBSC signal at +38000 Hz is sent to the other side of the mixer/multiplier - fg.connect (self.fm_demod,self.stereo_dsbsc_filter, (self.stereo_basebander,1)) - # the result is BASEBANDED DSBSC with phase zero! - - # Pick off the real part since the imaginary is theoretically zero and then to one side of a summer - fg.connect (self.stereo_basebander, self.LmR_real, (self.Make_Left,0)) - #take the same real part of the DSBSC baseband signal and send it to negative side of a subtracter - fg.connect (self.LmR_real,(self.Make_Right,1)) - - # Make rds carrier by taking the squared pilot tone and multiplying by pilot tone - fg.connect (self.stereo_basebander,(self.rds_carrier_generator,0)) - fg.connect (self.stereo_carrier_pll_recovery,(self.rds_carrier_generator,1)) - # take signal, filter off rds, send into mixer 0 channel - fg.connect (self.fm_demod,self.rds_signal_filter,(self.rds_signal_generator,0)) - # take rds_carrier_generator output and send into mixer 1 channel - fg.connect (self.rds_carrier_generator,(self.rds_signal_generator,1)) - # send basebanded rds signal and send into "processor" which for now is a null sink - fg.connect (self.rds_signal_generator,self_rds_signal_processor) - - - if 1: - # pick off the audio, L+R that is what we used to have and send it to the summer - fg.connect(self.fm_demod, self.audio_filter, (self.Make_Left, 1)) - # take the picked off L+R audio and send it to the PLUS side of the subtractor - fg.connect(self.audio_filter,(self.Make_Right, 0)) - # The result of Make_Left gets (L+R) + (L-R) and results in 2*L - # The result of Make_Right gets (L+R) - (L-R) and results in 2*R - - - # kludge the signals into a stereo channel - kludge = gr.kludge_copy(gr.sizeof_float) - fg.connect(self.Make_Left , self.deemph_Left, (kludge, 0)) - fg.connect(self.Make_Right, self.deemph_Right, (kludge, 1)) - - #send it to the audio system - gr.hier_block.__init__(self, - fg, - self.fm_demod, # head of the pipeline - kludge) # tail of the pipeline - else: - fg.connect (self.fm_demod, self.audio_filter) - gr.hier_block.__init__(self, - fg, - self.fm_demod, # head of the pipeline - self.audio_filter) # tail of the pipeline diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/wfm_tx.py b/gnuradio-core/src/python/gnuradio/blksimpl/wfm_tx.py deleted file mode 100644 index 89528a82..00000000 --- a/gnuradio-core/src/python/gnuradio/blksimpl/wfm_tx.py +++ /dev/null @@ -1,79 +0,0 @@ -# -# Copyright 2005 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. -# - -import math -from gnuradio import gr, optfir -from gnuradio.blksimpl.fm_emph import fm_preemph - -class wfm_tx(gr.hier_block): - def __init__(self, fg, audio_rate, quad_rate, tau=75e-6, max_dev=75e3): - """ - Wide Band FM Transmitter. - - Takes a single float input stream of audio samples in the range [-1,+1] - and produces a single FM modulated complex baseband output. - - @param fg: flow graph - @param audio_rate: sample rate of audio stream, >= 16k - @type audio_rate: integer - @param quad_rate: sample rate of output stream - @type quad_rate: integer - @param tau: preemphasis time constant (default 75e-6) - @type tau: float - @param max_dev: maximum deviation in Hz (default 75e3) - @type max_dev: float - - quad_rate must be an integer multiple of audio_rate. - """ - - # FIXME audio_rate and quad_rate ought to be exact rationals - audio_rate = int(audio_rate) - quad_rate = int(quad_rate) - - if quad_rate % audio_rate != 0: - raise ValueError, "quad_rate is not an integer multiple of audio_rate" - - - do_interp = audio_rate != quad_rate - - if do_interp: - interp_factor = quad_rate / audio_rate - interp_taps = optfir.low_pass (interp_factor, # gain - quad_rate, # Fs - 16000, # passband cutoff - 18000, # stopband cutoff - 0.1, # passband ripple dB - 40) # stopband atten dB - - print "len(interp_taps) =", len(interp_taps) - self.interpolator = gr.interp_fir_filter_fff (interp_factor, interp_taps) - - self.preemph = fm_preemph (fg, quad_rate, tau=tau) - - k = 2 * math.pi * max_dev / quad_rate - self.modulator = gr.frequency_modulator_fc (k) - - if do_interp: - fg.connect (self.interpolator, self.preemph, self.modulator) - gr.hier_block.__init__(self, fg, self.interpolator, self.modulator) - else: - fg.connect(self.preemph, self.modulator) - gr.hier_block.__init__(self, fg, self.preemph, self.modulator) diff --git a/gnuradio-core/src/python/gnuradio/eng_option.py b/gnuradio-core/src/python/gnuradio/eng_option.py index 40367d0d..09c3e1d8 100644 --- a/gnuradio-core/src/python/gnuradio/eng_option.py +++ b/gnuradio-core/src/python/gnuradio/eng_option.py @@ -63,13 +63,13 @@ def check_subdev (option, opt, value): @returns a 2-tuple (0|1, 0|1) """ - d = { 'A' : (0, 0), 'A:0' : (0, 0), 'A:1' : (0, 1), - 'B' : (1, 0), 'B:0' : (1, 0), 'B:1' : (1, 1) } + d = { 'A' : (0, 0), 'A:0' : (0, 0), 'A:1' : (0, 1), 'A:2' : (0, 2), + 'B' : (1, 0), 'B:0' : (1, 0), 'B:1' : (1, 1), 'B:2' : (1, 2) } try: return d[value.upper()] except: raise OptionValueError( - "option %s: invalid subdev: '%r', must be one of A, B, A:0, A:1, B:0, B:1" % (opt, value)) + "option %s: invalid subdev: '%r', must be one of %s" % (opt, value, ', '.join(sorted(d.keys())))) class eng_option (Option): TYPES = Option.TYPES + ("eng_float", "intx", "subdev") diff --git a/gnuradio-core/src/python/gnuradio/gr/Makefile.am b/gnuradio-core/src/python/gnuradio/gr/Makefile.am index 1e6d3dd0..41ef5224 100644 --- a/gnuradio-core/src/python/gnuradio/gr/Makefile.am +++ b/gnuradio-core/src/python/gnuradio/gr/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,8 +21,9 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = run_tests.in - +EXTRA_DIST = \ + run_tests.in \ + test_16bit_1chunk.wav TESTS = \ run_tests @@ -32,53 +33,67 @@ grgrpythondir = $(grpythondir)/gr grgrpython_PYTHON = \ __init__.py \ - basic_flow_graph.py \ exceptions.py \ - flow_graph.py \ gr_threading.py \ gr_threading_23.py \ gr_threading_24.py \ - hier_block.py \ + hier_block2.py \ prefs.py \ - scheduler.py + scheduler.py \ + top_block.py \ + pubsub.py noinst_PYTHON = \ benchmark_filters.py \ qa_add_and_friends.py \ qa_add_v_and_friends.py \ qa_agc.py \ - qa_basic_flow_graph.py \ + qa_argmax.py \ + qa_bin_statistics.py \ + qa_classify.py \ qa_cma_equalizer.py \ qa_complex_to_xxx.py \ qa_constellation_decoder_cb.py \ qa_correlate_access_code.py \ + qa_delay.py \ qa_diff_encoder.py \ qa_diff_phasor_cc.py \ + qa_ecc_ccsds_27.py \ qa_feval.py \ + qa_fft.py \ qa_fft_filter.py \ qa_filter_delay_fc.py \ - qa_flow_graph.py \ + qa_fractional_interpolator.py \ qa_frequency_modulator.py \ qa_fsk_stuff.py \ + qa_glfsr_source.py \ qa_goertzel.py \ qa_head.py \ + qa_hier_block2.py \ qa_hilbert.py \ qa_iir.py \ qa_interleave.py \ qa_interp_fir_filter.py \ qa_kludge_copy.py \ qa_kludged_imports.py \ + qa_max.py \ qa_message.py \ qa_mute.py \ qa_nlog10.py \ qa_noise.py \ + qa_ofdm_insert_preamble.py \ qa_packed_to_unpacked.py \ qa_pipe_fittings.py \ + qa_pll_carriertracking.py \ + qa_pll_freqdet.py \ + qa_pll_refout.py \ + qa_pn_correlator_cc.py \ qa_rational_resampler.py \ qa_sig_source.py \ qa_single_pole_iir.py \ qa_single_pole_iir_cc.py \ - qa_unpack_k_bits.py - - -CLEANFILES = *.pyc + qa_skiphead.py \ + qa_unpack_k_bits.py \ + qa_repeat.py \ + qa_scrambler.py \ + qa_vector_sink_source.py diff --git a/gnuradio-core/src/python/gnuradio/gr/Makefile.in b/gnuradio-core/src/python/gnuradio/gr/Makefile.in index de23998a..7a3132b5 100644 --- a/gnuradio-core/src/python/gnuradio/gr/Makefile.in +++ b/gnuradio-core/src/python/gnuradio/gr/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = $(grgrpython_PYTHON) $(noinst_PYTHON) \ $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/python/gnuradio/gr ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -147,10 +173,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -158,9 +183,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -168,6 +200,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -180,73 +214,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -256,49 +283,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -306,15 +373,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -324,16 +534,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -342,119 +570,207 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = run_tests.in +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + run_tests.in \ + test_16bit_1chunk.wav + TESTS = \ run_tests grgrpythondir = $(grpythondir)/gr grgrpython_PYTHON = \ __init__.py \ - basic_flow_graph.py \ exceptions.py \ - flow_graph.py \ gr_threading.py \ gr_threading_23.py \ gr_threading_24.py \ - hier_block.py \ + hier_block2.py \ prefs.py \ - scheduler.py + scheduler.py \ + top_block.py \ + pubsub.py noinst_PYTHON = \ benchmark_filters.py \ qa_add_and_friends.py \ qa_add_v_and_friends.py \ qa_agc.py \ - qa_basic_flow_graph.py \ + qa_argmax.py \ + qa_bin_statistics.py \ + qa_classify.py \ qa_cma_equalizer.py \ qa_complex_to_xxx.py \ qa_constellation_decoder_cb.py \ qa_correlate_access_code.py \ + qa_delay.py \ qa_diff_encoder.py \ qa_diff_phasor_cc.py \ + qa_ecc_ccsds_27.py \ qa_feval.py \ + qa_fft.py \ qa_fft_filter.py \ qa_filter_delay_fc.py \ - qa_flow_graph.py \ + qa_fractional_interpolator.py \ qa_frequency_modulator.py \ qa_fsk_stuff.py \ + qa_glfsr_source.py \ qa_goertzel.py \ qa_head.py \ + qa_hier_block2.py \ qa_hilbert.py \ qa_iir.py \ qa_interleave.py \ qa_interp_fir_filter.py \ qa_kludge_copy.py \ qa_kludged_imports.py \ + qa_max.py \ qa_message.py \ qa_mute.py \ qa_nlog10.py \ qa_noise.py \ + qa_ofdm_insert_preamble.py \ qa_packed_to_unpacked.py \ qa_pipe_fittings.py \ + qa_pll_carriertracking.py \ + qa_pll_freqdet.py \ + qa_pll_refout.py \ + qa_pn_correlator_cc.py \ qa_rational_resampler.py \ qa_sig_source.py \ qa_single_pole_iir.py \ qa_single_pole_iir_cc.py \ - qa_unpack_k_bits.py + qa_skiphead.py \ + qa_unpack_k_bits.py \ + qa_repeat.py \ + qa_scrambler.py \ + qa_vector_sink_source.py -CLEANFILES = *.pyc all: all-am .SUFFIXES: @@ -462,8 +778,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -495,13 +811,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-grgrpythonPYTHON: $(grgrpython_PYTHON) @$(NORMAL_INSTALL) - test -z "$(grgrpythondir)" || $(mkdir_p) "$(DESTDIR)$(grgrpythondir)" + test -z "$(grgrpythondir)" || $(MKDIR_P) "$(DESTDIR)$(grgrpythondir)" @list='$(grgrpython_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ @@ -537,7 +849,7 @@ CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -546,7 +858,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -558,7 +870,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -572,23 +884,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -608,23 +933,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -635,13 +958,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: for dir in "$(DESTDIR)$(grgrpythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -658,9 +984,9 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -674,7 +1000,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -688,12 +1014,20 @@ info-am: install-data-am: install-grgrpythonPYTHON +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -712,19 +1046,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grgrpythonPYTHON uninstall-info-am +uninstall-am: uninstall-grgrpythonPYTHON + +.MAKE: install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ - clean-libtool distclean distclean-generic distclean-libtool \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-exec \ - install-exec-am install-grgrpythonPYTHON install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ + clean-libtool dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grgrpythonPYTHON install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-grgrpythonPYTHON uninstall-info-am + uninstall-grgrpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/gr/__init__.py b/gnuradio-core/src/python/gnuradio/gr/__init__.py index 60e547c3..6f939c47 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 Free Software Foundation, Inc. +# Copyright 2003,2004,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -24,12 +24,29 @@ # This is the main GNU Radio python module. # We pull the swig output and the other modules into the gnuradio.gr namespace +# Temporary workaround for ticket:181. +# Use leading underscores to avoid namespace pollution +import sys +_RTLD_GLOBAL = 0 +try: + from dl import RTLD_GLOBAL as _RTLD_GLOBAL +except ImportError: + try: + from DLFCN import RTLD_GLOBAL as _RTLD_GLOBAL + except ImportError: + pass + +if _RTLD_GLOBAL != 0: + _dlopenflags = sys.getdlopenflags() + sys.setdlopenflags(_dlopenflags|_RTLD_GLOBAL) + from gnuradio_swig_python import * -from basic_flow_graph import * -from flow_graph import * from exceptions import * -from hier_block import * +from hier_block2 import * +from top_block import * +if _RTLD_GLOBAL != 0: + sys.setdlopenflags(_dlopenflags) # Restore original flags # create a couple of aliases serial_to_parallel = stream_to_vector @@ -38,3 +55,12 @@ parallel_to_serial = vector_to_stream # Force the preference database to be initialized from prefs import prefs +#alias old gr_add_vXX and gr_multiply_vXX +add_vcc = add_cc +add_vff = add_ff +add_vii = add_ii +add_vss = add_ss +multiply_vcc = multiply_cc +multiply_vff = multiply_ff +multiply_vii = multiply_ii +multiply_vss = multiply_ss diff --git a/gnuradio-core/src/python/gnuradio/gr/basic_flow_graph.py b/gnuradio-core/src/python/gnuradio/gr/basic_flow_graph.py deleted file mode 100644 index 13152dd2..00000000 --- a/gnuradio-core/src/python/gnuradio/gr/basic_flow_graph.py +++ /dev/null @@ -1,270 +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_swig_python import gr_block_sptr -import types -import hier_block - -def remove_duplicates (seq): - new = [] - for x in seq: - if not x in new: - new.append (x) - return new - - -class endpoint (object): - __slots__ = ['block', 'port'] - def __init__ (self, block, port): - self.block = block - self.port = port - - def __cmp__ (self, other): - if self.block == other.block and self.port == other.port: - return 0 - return 1 - - def __str__ (self): - return '' % (self.block, self.port) - -def expand_src_endpoint (src_endpoint): - # A src_endpoint is an output of a block - src_endpoint = coerce_endpoint (src_endpoint) - if isinstance (src_endpoint.block, hier_block.hier_block_base): - return expand_src_endpoint ( - coerce_endpoint (src_endpoint.block.resolve_output_port(src_endpoint.port))) - else: - return src_endpoint - -def expand_dst_endpoint (dst_endpoint): - # a dst_endpoint is the input to a block - dst_endpoint = coerce_endpoint (dst_endpoint) - if isinstance (dst_endpoint.block, hier_block.hier_block_base): - exp = [coerce_endpoint(x) for x in - dst_endpoint.block.resolve_input_port(dst_endpoint.port)] - return expand_dst_endpoints (exp) - else: - return [dst_endpoint] - -def expand_dst_endpoints (endpoint_list): - r = [] - for e in endpoint_list: - r.extend (expand_dst_endpoint (e)) - return r - - -def coerce_endpoint (x): - if isinstance (x, endpoint): - return x - elif isinstance (x, types.TupleType) and len (x) == 2: - return endpoint (x[0], x[1]) - elif hasattr (x, 'block'): # assume it's a block - return endpoint (x, 0) - elif isinstance(x, hier_block.hier_block_base): - return endpoint (x, 0) - else: - raise ValueError, "Not coercible to endpoint: %s" % (x,) - - -class edge (object): - __slots__ = ['src', 'dst'] - def __init__ (self, src_endpoint, dst_endpoint): - self.src = src_endpoint - self.dst = dst_endpoint - - def __cmp__ (self, other): - if self.src == other.src and self.dst == other.dst: - return 0 - return 1 - - def __repr__ (self): - return '' % (self.src, self.dst) - -class basic_flow_graph (object): - '''basic_flow_graph -- describe connections between blocks''' - # __slots__ is incompatible with weakrefs (for some reason!) - # __slots__ = ['edge_list'] - def __init__ (self): - self.edge_list = [] - - def connect (self, *points): - '''connect requires two or more arguments that can be coerced to endpoints. - If more than two arguments are provided, they are connected together successively. - ''' - if len (points) < 2: - raise ValueError, ("connect requires at least two endpoints; %d provided." % (len (points),)) - for i in range (1, len (points)): - self._connect (points[i-1], points[i]) - - def _connect (self, src_endpoint, dst_endpoint): - s = expand_src_endpoint (src_endpoint) - for d in expand_dst_endpoint (dst_endpoint): - self._connect_prim (s, d) - - def _connect_prim (self, src_endpoint, dst_endpoint): - src_endpoint = coerce_endpoint (src_endpoint) - dst_endpoint = coerce_endpoint (dst_endpoint) - self._check_valid_src_port (src_endpoint) - self._check_valid_dst_port (dst_endpoint) - self._check_dst_in_use (dst_endpoint) - self._check_type_match (src_endpoint, dst_endpoint) - self.edge_list.append (edge (src_endpoint, dst_endpoint)) - - def disconnect (self, src_endpoint, dst_endpoint): - s = expand_src_endpoint (src_endpoint) - for d in expand_dst_endpoint (dst_endpoint): - self._disconnect_prim (s, d) - - def _disconnect_prim (self, src_endpoint, dst_endpoint): - src_endpoint = coerce_endpoint (src_endpoint) - dst_endpoint = coerce_endpoint (dst_endpoint) - e = edge (src_endpoint, dst_endpoint) - self.edge_list.remove (e) - - def disconnect_all (self): - self.edge_list = [] - - def validate (self): - # check all blocks to ensure: - # (1a) their input ports are contiguously assigned - # (1b) the number of input ports is between min and max - # (2a) their output ports are contiguously assigned - # (2b) the number of output ports is between min and max - # (3) check_topology returns true - - for m in self.all_blocks (): - # print m - - edges = self.in_edges (m) - used_ports = [e.dst.port for e in edges] - ninputs = self._check_contiguity (m, m.input_signature (), used_ports, "input") - - edges = self.out_edges (m) - used_ports = [e.src.port for e in edges] - noutputs = self._check_contiguity (m, m.output_signature (), used_ports, "output") - - if not m.check_topology (ninputs, noutputs): - raise ValueError, ("%s::check_topology (%d, %d) failed" % (m, ninputs, noutputs)) - - - # --- public utilities --- - - def all_blocks (self): - '''return list of all blocks in the graph''' - all_blocks = [] - for edge in self.edge_list: - m = edge.src.block - if not m in all_blocks: - all_blocks.append (m) - m = edge.dst.block - if not m in all_blocks: - all_blocks.append (m) - return all_blocks - - def in_edges (self, m): - '''return list of all edges that have M as a destination''' - return [e for e in self.edge_list if e.dst.block == m] - - def out_edges (self, m): - '''return list of all edges that have M as a source''' - return [e for e in self.edge_list if e.src.block == m] - - def downstream_verticies (self, m): - return [e.dst.block for e in self.out_edges (m)] - - def downstream_verticies_port (self, m, port): - return [e.dst.block for e in self.out_edges(m) if e.src.port == port] - - def upstream_verticies (self, m): - return [e.src.block for e in self.in_edges (m)] - - def adjacent_verticies (self, m): - '''return list of all verticies adjacent to M''' - return self.downstream_verticies (m) + self.upstream_verticies (m) - - def sink_p (self, m): - '''return True iff this block is a sink''' - e = self.out_edges (m) - return len (e) == 0 - - def source_p (self, m): - '''return True iff this block is a source''' - e = self.in_edges (m) - return len (e) == 0 - - # --- internal methods --- - - def _check_dst_in_use (self, dst_endpoint): - '''Ensure that there is not already an endpoint that terminates at dst_endpoint.''' - x = [ep for ep in self.edge_list if ep.dst == dst_endpoint] - if x: # already in use - raise ValueError, ("destination endpoint already in use: %s" % (dst_endpoint)) - - def _check_valid_src_port (self, src_endpoint): - self._check_port (src_endpoint.block.output_signature(), src_endpoint.port) - - def _check_valid_dst_port (self, dst_endpoint): - self._check_port (dst_endpoint.block.input_signature(), dst_endpoint.port) - - def _check_port (self, signature, port): - if port < 0: - raise ValueError, 'port number out of range.' - if signature.max_streams () == -1: # infinite - return # OK - if port >= signature.max_streams (): - raise ValueError, 'port number out of range.' - - def _check_type_match (self, src_endpoint, dst_endpoint): - # for now, we just ensure that the stream item sizes match - src_sig = src_endpoint.block.output_signature () - dst_sig = dst_endpoint.block.input_signature () - src_size = src_sig.sizeof_stream_item (src_endpoint.port) - dst_size = dst_sig.sizeof_stream_item (dst_endpoint.port) - if src_size != dst_size: - raise ValueError, ( -' '.join(('source and destination data sizes are different:', -src_endpoint.block.name(), -dst_endpoint.block.name()))) - - def _check_contiguity (self, m, sig, used_ports, dir): - used_ports.sort () - used_ports = remove_duplicates (used_ports) - min_s = sig.min_streams () - - l = len (used_ports) - if l == 0: - if min_s == 0: - return l - raise ValueError, ("%s requires %d %s connections. It has none." % - (m, min_s, dir)) - - if used_ports[-1] + 1 < min_s: - raise ValueError, ("%s requires %d %s connections. It has %d." % - (m, min_s, dir, used_ports[-1] + 1)) - - if used_ports[-1] + 1 != l: - for i in range (l): - if used_ports[i] != i: - raise ValueError, ("%s %s port %d is not connected" % - (m, dir, i)) - - # print "%s ports: %s" % (dir, used_ports) - return l diff --git a/gnuradio-core/src/python/gnuradio/gr/benchmark_filters.py b/gnuradio-core/src/python/gnuradio/gr/benchmark_filters.py index 7b2f44c4..4d99a397 100755 --- a/gnuradio-core/src/python/gnuradio/gr/benchmark_filters.py +++ b/gnuradio-core/src/python/gnuradio/gr/benchmark_filters.py @@ -1,4 +1,24 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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. +# import time import random @@ -16,15 +36,15 @@ def make_random_complex_tuple(L): def benchmark(name, creator, dec, ntaps, total_test_size, block_size): block_size = 32768 - fg = gr.flow_graph() + tb = gr.top_block() taps = make_random_complex_tuple(ntaps) src = gr.vector_source_c(make_random_complex_tuple(block_size), True) head = gr.head(gr.sizeof_gr_complex, int(total_test_size)) op = creator(dec, taps) dst = gr.null_sink(gr.sizeof_gr_complex) - fg.connect(src, head, op, dst) + tb.connect(src, head, op, dst) start = time.time() - fg.run() + tb.run() stop = time.time() delta = stop - start print "%16s: taps: %4d input: %4g, time: %6.3f taps/sec: %10.4g" % ( diff --git a/gnuradio-core/src/python/gnuradio/gr/flow_graph.py b/gnuradio-core/src/python/gnuradio/gr/flow_graph.py deleted file mode 100644 index 39e479b2..00000000 --- a/gnuradio-core/src/python/gnuradio/gr/flow_graph.py +++ /dev/null @@ -1,234 +0,0 @@ -# -# Copyright 2004,2006 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.basic_flow_graph import remove_duplicates, endpoint, edge, \ - basic_flow_graph - -from gnuradio.gr.exceptions import * -from gnuradio_swig_python import buffer, buffer_add_reader, block_detail, \ - single_threaded_scheduler - -from gnuradio.gr.scheduler import scheduler - -_WHITE = 0 # graph coloring tags -_GRAY = 1 -_BLACK = 2 - -_flow_graph_debug = False - -def set_flow_graph_debug(on): - global _flow_graph_debug - _flow_graph_debug = on - - -class buffer_sizes (object): - """compute buffer sizes to use""" - def __init__ (self, flow_graph): - # We could scan the graph here and determine individual sizes - # based on relative_rate, number of readers, etc. - - # The simplest thing that could possibly work: all buffers same size - self.flow_graph = flow_graph - self.fixed_buffer_size = 32*1024 - - def allocate (self, m, index): - """allocate buffer for output index of block m""" - item_size = m.output_signature().sizeof_stream_item (index) - nitems = self.fixed_buffer_size / item_size - if nitems < 2 * m.output_multiple (): - nitems = 2 * m.output_multiple () - - # if any downstream blocks is a decimator and/or has a large output_multiple, - # ensure that we have a buffer at least 2 * their decimation_factor*output_multiple - for mdown in self.flow_graph.downstream_verticies_port(m, index): - decimation = int(1.0 / mdown.relative_rate()) - nitems = max(nitems, 2 * (decimation * mdown.output_multiple() + mdown.history())) - - return buffer (nitems, item_size) - - -class flow_graph (basic_flow_graph): - """add physical connection info to simple_flow_graph - """ - # __slots__ is incompatible with weakrefs (for some reason!) - # __slots__ = ['blocks', 'scheduler'] - - def __init__ (self): - basic_flow_graph.__init__ (self); - self.blocks = None - self.scheduler = None - - def __del__(self): - # print "\nflow_graph.__del__" - # this ensures that i/o devices such as the USRP get shutdown gracefully - self.stop() - - def start (self): - '''start graph, forking thread(s), return immediately''' - if self.scheduler: - raise RuntimeError, "Scheduler already running" - self._setup_connections () - - # cast down to gr_module_sptr - # t = [x.block () for x in self.topological_sort (self.blocks)] - self.scheduler = scheduler (self) - self.scheduler.start () - - def stop (self): - '''tells scheduler to stop and waits for it to happen''' - if self.scheduler: - self.scheduler.stop () - self.scheduler = None - - def wait (self): - '''waits for scheduler to stop''' - if self.scheduler: - self.scheduler.wait () - self.scheduler = None - - def is_running (self): - return not not self.scheduler - - def run (self): - '''start graph, wait for completion''' - self.start () - self.wait () - - def _setup_connections (self): - """given the basic flow graph, setup all the physical connections""" - self.validate () - self.blocks = self.all_blocks () - self._assign_details () - self._assign_buffers () - self._connect_inputs () - - def _assign_details (self): - for m in self.blocks: - edges = self.in_edges (m) - used_ports = remove_duplicates ([e.dst.port for e in edges]) - ninputs = len (used_ports) - - edges = self.out_edges (m) - used_ports = remove_duplicates ([e.src.port for e in edges]) - noutputs = len (used_ports) - - m.set_detail (block_detail (ninputs, noutputs)) - - def _assign_buffers (self): - """determine the buffer sizes to use, allocate them and attach to detail""" - sizes = buffer_sizes (self) - for m in self.blocks: - d = m.detail () - for index in range (d.noutputs ()): - d.set_output (index, sizes.allocate (m, index)) - - def _connect_inputs (self): - """connect all block inputs to appropriate upstream buffers""" - for m in self.blocks: - d = m.detail () - # print "%r history = %d" % (m, m.history()) - for e in self.in_edges(m): - # FYI, sources don't have any in_edges - our_port = e.dst.port - upstream_block = e.src.block - upstream_port = e.src.port - upstream_buffer = upstream_block.detail().output(upstream_port) - d.set_input(our_port, buffer_add_reader(upstream_buffer, m.history()-1)) - - - def topological_sort (self, all_v): - ''' - Return a topologically sorted list of vertices. - This is basically a depth-first search with checks - for back edges (the non-DAG condition) - - ''' - - # it's correct without this sort, but this - # should give better ordering for cache utilization - all_v = self._sort_sources_first (all_v) - - output = [] - for v in all_v: - v.ts_color = _WHITE - for v in all_v: - if v.ts_color == _WHITE: - self._dfs_visit (v, output) - output.reverse () - return output - - def _dfs_visit (self, u, output): - # print "dfs_visit (enter): ", u - u.ts_color = _GRAY - for v in self.downstream_verticies (u): - if v.ts_color == _WHITE: # (u, v) is a tree edge - self._dfs_visit (v, output) - elif v.ts_color == _GRAY: # (u, v) is a back edge - raise NotDAG, "The graph is not an acyclic graph (It's got a loop)" - elif v.ts_color == _BLACK: # (u, v) is a cross or forward edge - pass - else: - raise CantHappen, "Invalid color on vertex" - u.ts_color = _BLACK - output.append (u) - # print "dfs_visit (exit): ", u, output - - def _sort_sources_first (self, all_v): - # the sort function is not guaranteed to be stable. - # We add the unique_id in to the key so we're guaranteed - # of reproducible results. This is important for the test - # code. There is often more than one valid topological sort. - # We want to force a reproducible choice. - x = [(not self.source_p(v), v.unique_id(), v) for v in all_v] - x.sort () - x = [v[2] for v in x] - # print "sorted: ", x - return x - - def partition_graph (self, all_v): - '''Return a list of lists of nodes that are connected. - The result is a list of disjoint graphs. - The sublists are topologically sorted. - ''' - result = [] - working_v = all_v[:] # make copy - while working_v: - rv = self._reachable_verticies (working_v[0], working_v) - result.append (self.topological_sort (rv)) - for v in rv: - working_v.remove (v) - if _flow_graph_debug: - print "partition_graph:", result - return result - - def _reachable_verticies (self, start, all_v): - for v in all_v: - v.ts_color = _WHITE - - self._reachable_dfs_visit (start) - return [v for v in all_v if v.ts_color == _BLACK] - - def _reachable_dfs_visit (self, u): - u.ts_color = _BLACK - for v in self.adjacent_verticies (u): - if v.ts_color == _WHITE: - self._reachable_dfs_visit (v) - return None diff --git a/gnuradio-core/src/python/gnuradio/gr/hier_block.py b/gnuradio-core/src/python/gnuradio/gr/hier_block.py deleted file mode 100644 index 8bcf6421..00000000 --- a/gnuradio-core/src/python/gnuradio/gr/hier_block.py +++ /dev/null @@ -1,132 +0,0 @@ -# -# Copyright 2005 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_swig_python import io_signature -import weakref - -class hier_block_base(object): - """ - Abstract base class for hierarchical signal processing blocks. - """ - def __init__(self, fg): - """ - @param fg: The flow graph that contains this hierarchical block. - @type fg: gr.flow_graph - """ - self.fg = weakref.proxy(fg) - - def input_signature(self): - """ - @return input signature of hierarchical block. - @rtype gr.io_signature - """ - raise NotImplemented - - def output_signature(self): - """ - @return output signature of hierarchical block. - @rtype gr.io_signature - """ - raise NotImplemented - - def resolve_input_port(self, port_number): - """ - @param port_number: which input port number to resolve to an endpoint. - @type port_number: int - @return: sequence of endpoints - @rtype: sequence of endpoint - - Note that an input port can resolve to more than one endpoint. - """ - raise NotImplemented - - def resolve_output_port(self, port_number): - """ - @param port_number: which output port number to resolve to an endpoint. - @type port_number: int - @return: endpoint - @rtype: endpoint - - Output ports resolve to a single endpoint. - """ - raise NotImplemented - - -class hier_block(hier_block_base): - """ - Simple concrete class for building hierarchical blocks. - - This class assumes that there is at most a single block at the - head of the chain and a single block at the end of the chain. - Either head or tail may be None indicating a sink or source respectively. - - If you needs something more elaborate than this, derive a new class from - hier_block_base. - """ - def __init__(self, fg, head_block, tail_block): - """ - @param fg: The flow graph that contains this hierarchical block. - @type fg: flow_graph - @param head_block: the first block in the signal processing chain. - @type head_block: None or subclass of gr.block or gr.hier_block_base - @param tail_block: the last block in the signal processing chain. - @type tail_block: None or subclass of gr.block or gr.hier_block_base - """ - hier_block_base.__init__(self, fg) - # FIXME add type checks here for easier debugging of misuse - self.head = head_block - self.tail = tail_block - - def input_signature(self): - if self.head: - return self.head.input_signature() - else: - return io_signature(0,0,0) - - def output_signature(self): - if self.tail: - return self.tail.output_signature() - else: - return io_signature(0,0,0) - - def resolve_input_port(self, port_number): - return ((self.head, port_number),) - - def resolve_output_port(self, port_number): - return (self.tail, port_number) - - -class compose(hier_block): - """ - Compose one or more blocks (primitive or hierarchical) into a new hierarchical block. - """ - def __init__(self, fg, *blocks): - """ - @param fg: flow graph - @type fg: gr.flow_graph - @param *blocks: list of blocks - @type *blocks: list of blocks - """ - if len(blocks) < 1: - raise ValueError, ("compose requires at least one block; none provided.") - if len(blocks) > 1: - fg.connect(*blocks) - hier_block.__init__(self, fg, blocks[0], blocks[-1]) diff --git a/gnuradio-core/src/python/gnuradio/gr/hier_block2.py b/gnuradio-core/src/python/gnuradio/gr/hier_block2.py new file mode 100644 index 00000000..b43c5fed --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/hier_block2.py @@ -0,0 +1,113 @@ +# +# Copyright 2006,2007 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_swig_python import hier_block2_swig + +# +# This hack forces a 'has-a' relationship to look like an 'is-a' one. +# +# It allows Python classes to subclass this one, while passing through +# method calls to the C++ class shared pointer from SWIG. +# +# It also allows us to intercept method calls if needed +# +class hier_block2(object): + """ + Python wrapper around the C++ hierarchical block implementation. + Provides convenience functions and allows proper Python subclassing. + """ + + def __init__(self, name, input_signature, output_signature): + """ + Create a hierarchical block with a given name and I/O signatures. + """ + self._hb = hier_block2_swig(name, input_signature, output_signature) + + def __getattr__(self, name): + """ + Pass-through member requests to the C++ object. + """ + if not hasattr(self, "_hb"): + raise RuntimeError("hier_block2: invalid state--did you forget to call gr.hier_block2.__init__ in a derived class?") + return getattr(self._hb, name) + + def connect(self, *points): + """ + Connect two or more block endpoints. An endpoint is either a (block, port) + tuple or a block instance. In the latter case, the port number is assumed + to be zero. + + To connect the hierarchical block external inputs or outputs to internal block + inputs or outputs, use 'self' in the connect call. + + If multiple arguments are provided, connect will attempt to wire them in series, + interpreting the endpoints as inputs or outputs as appropriate. + """ + + if len (points) < 1: + raise ValueError, ("connect requires at least one endpoint; %d provided." % (len (points),)) + else: + if len(points) == 1: + self._hb.connect(points[0].basic_block()) + else: + for i in range (1, len (points)): + self._connect(points[i-1], points[i]) + + 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) + + def _coerce_endpoint(self, endp): + if hasattr(endp, 'basic_block'): + return (endp, 0) + else: + if hasattr(endp, "__getitem__") and len(endp) == 2: + return endp # Assume user put (block, port) + else: + raise ValueError("unable to coerce endpoint") + + def disconnect(self, *points): + """ + Disconnect two endpoints in the flowgraph. + + To disconnect the hierarchical block external inputs or outputs to internal block + inputs or outputs, use 'self' in the connect call. + + 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),)) + else: + if len (points) == 1: + self._hb.disconnect(points[0].basic_block()) + else: + for i in range (1, len (points)): + self._disconnect(points[i-1], points[i]) + + 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) + diff --git a/gnuradio-core/src/python/gnuradio/gr/prefs.py b/gnuradio-core/src/python/gnuradio/gr/prefs.py index 9e4e7e08..52f1ff64 100644 --- a/gnuradio-core/src/python/gnuradio/gr/prefs.py +++ b/gnuradio-core/src/python/gnuradio/gr/prefs.py @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -53,8 +53,9 @@ class _prefs(_prefs_base): invoke the methods in this python class. """ def __init__(self): - _prefs_base.__init__(self) - self.cp = ConfigParser.RawConfigParser() + _prefs_base.__init__(self) + self.cp = ConfigParser.RawConfigParser() + self.__getattr__ = lambda self, name: getattr(self.cp, name) def _sys_prefs_filenames(self): dir = _sys_prefs_dirname() @@ -65,16 +66,12 @@ class _prefs(_prefs_base): fnames.sort() return [os.path.join(dir, f) for f in fnames] - def _read_files(self): filenames = self._sys_prefs_filenames() filenames.append(_user_prefs_filename()) #print "filenames: ", filenames self.cp.read(filenames) - def __getattr__(self, name): - return getattr(self.cp, name) - # ---------------------------------------------------------------- # These methods override the C++ virtual methods of the same name # ---------------------------------------------------------------- diff --git a/gnuradio-core/src/python/gnuradio/gr/pubsub.py b/gnuradio-core/src/python/gnuradio/gr/pubsub.py new file mode 100644 index 00000000..8fb7a851 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/pubsub.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python +# +# Copyright 2008,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. +# + +""" +Abstract GNU Radio publisher/subscriber interface + +This is a proof of concept implementation, will likely change significantly. +""" + +class pubsub(dict): + def __init__(self): + self._publishers = { } + self._subscribers = { } + self._proxies = { } + + def __missing__(self, key, value=None): + dict.__setitem__(self, key, value) + self._publishers[key] = None + self._subscribers[key] = [] + self._proxies[key] = None + + def __setitem__(self, key, val): + if not self.has_key(key): + self.__missing__(key, val) + elif self._proxies[key] is not None: + (p, newkey) = self._proxies[key] + p[newkey] = val + else: + dict.__setitem__(self, key, val) + for sub in self._subscribers[key]: + # Note this means subscribers will get called in the thread + # context of the 'set' caller. + sub(val) + + def __getitem__(self, key): + if not self.has_key(key): self.__missing__(key) + if self._proxies[key] is not None: + (p, newkey) = self._proxies[key] + return p[newkey] + elif self._publishers[key] is not None: + return self._publishers[key]() + else: + return dict.__getitem__(self, key) + + def publish(self, key, publisher): + if not self.has_key(key): self.__missing__(key) + if self._proxies[key] is not None: + (p, newkey) = self._proxies[key] + p.publish(newkey, publisher) + else: + self._publishers[key] = publisher + + def subscribe(self, key, subscriber): + if not self.has_key(key): self.__missing__(key) + if self._proxies[key] is not None: + (p, newkey) = self._proxies[key] + p.subscribe(newkey, subscriber) + else: + self._subscribers[key].append(subscriber) + + def unpublish(self, key): + if self._proxies[key] is not None: + (p, newkey) = self._proxies[key] + p.unpublish(newkey) + else: + self._publishers[key] = None + + def unsubscribe(self, key, subscriber): + if self._proxies[key] is not None: + (p, newkey) = self._proxies[key] + p.unsubscribe(newkey, subscriber) + else: + self._subscribers[key].remove(subscriber) + + def proxy(self, key, p, newkey=None): + if not self.has_key(key): self.__missing__(key) + if newkey is None: newkey = key + self._proxies[key] = (p, newkey) + + def unproxy(self, key): + self._proxies[key] = None + +# Test code +if __name__ == "__main__": + import sys + o = pubsub() + + # Non-existent key gets auto-created with None value + print "Auto-created key 'foo' value:", o['foo'] + + # Add some subscribers + # First is a bare function + def print_len(x): + print "len=%i" % (len(x), ) + o.subscribe('foo', print_len) + + # The second is a class member function + class subber(object): + def __init__(self, param): + self._param = param + def printer(self, x): + print self._param, `x` + s = subber('param') + o.subscribe('foo', s.printer) + + # The third is a lambda function + o.subscribe('foo', lambda x: sys.stdout.write('val='+`x`+'\n')) + + # Update key 'foo', will notify subscribers + print "Updating 'foo' with three subscribers:" + o['foo'] = 'bar'; + + # Remove first subscriber + o.unsubscribe('foo', print_len) + + # Update now will only trigger second and third subscriber + print "Updating 'foo' after removing a subscriber:" + o['foo'] = 'bar2'; + + # Publish a key as a function, in this case, a lambda function + o.publish('baz', lambda : 42) + print "Published value of 'baz':", o['baz'] + + # Unpublish the key + o.unpublish('baz') + + # This will return None, as there is no publisher + print "Value of 'baz' with no publisher:", o['baz'] + + # Set 'baz' key, it gets cached + o['baz'] = 'bazzz' + + # Now will return cached value, since no provider + print "Cached value of 'baz' after being set:", o['baz'] diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_add_and_friends.py b/gnuradio-core/src/python/gnuradio/gr/qa_add_and_friends.py index e65773bc..2fa97fad 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_add_and_friends.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_add_and_friends.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,38 +25,38 @@ from gnuradio import gr, gr_unittest class test_head (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def help_ii (self, src_data, exp_data, op): for s in zip (range (len (src_data)), src_data): src = gr.vector_source_i (s[1]) - self.fg.connect (src, (op, s[0])) + self.tb.connect (src, (op, s[0])) dst = gr.vector_sink_i () - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (exp_data, result_data) def help_ff (self, src_data, exp_data, op): for s in zip (range (len (src_data)), src_data): src = gr.vector_source_f (s[1]) - self.fg.connect (src, (op, s[0])) + self.tb.connect (src, (op, s[0])) dst = gr.vector_sink_f () - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (exp_data, result_data) def help_cc (self, src_data, exp_data, op): for s in zip (range (len (src_data)), src_data): src = gr.vector_source_c (s[1]) - self.fg.connect (src, (op, s[0])) + self.tb.connect (src, (op, s[0])) dst = gr.vector_sink_c () - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (exp_data, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_add_v_and_friends.py b/gnuradio-core/src/python/gnuradio/gr/qa_add_v_and_friends.py index b2ee98a2..215e0cac 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_add_v_and_friends.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_add_v_and_friends.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,21 +25,21 @@ from gnuradio import gr, gr_unittest class test_add_v_and_friends(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph() + self.tb = gr.top_block() def tearDown(self): - self.fg = None + self.tb = None def help_ss(self, size, src_data, exp_data, op): for s in zip(range (len (src_data)), src_data): src = gr.vector_source_s(s[1]) srcv = gr.stream_to_vector(gr.sizeof_short, size) - self.fg.connect(src, srcv) - self.fg.connect(srcv, (op, s[0])) + self.tb.connect(src, srcv) + self.tb.connect(srcv, (op, s[0])) rhs = gr.vector_to_stream(gr.sizeof_short, size) dst = gr.vector_sink_s() - self.fg.connect(op, rhs, dst) - self.fg.run() + self.tb.connect(op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -47,12 +47,12 @@ class test_add_v_and_friends(gr_unittest.TestCase): for s in zip(range (len (src_data)), src_data): src = gr.vector_source_i(s[1]) srcv = gr.stream_to_vector(gr.sizeof_int, size) - self.fg.connect(src, srcv) - self.fg.connect(srcv, (op, s[0])) + self.tb.connect(src, srcv) + self.tb.connect(srcv, (op, s[0])) rhs = gr.vector_to_stream(gr.sizeof_int, size) dst = gr.vector_sink_i() - self.fg.connect(op, rhs, dst) - self.fg.run() + self.tb.connect(op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -60,12 +60,12 @@ class test_add_v_and_friends(gr_unittest.TestCase): for s in zip(range (len (src_data)), src_data): src = gr.vector_source_f(s[1]) srcv = gr.stream_to_vector(gr.sizeof_float, size) - self.fg.connect(src, srcv) - self.fg.connect(srcv, (op, s[0])) + self.tb.connect(src, srcv) + self.tb.connect(srcv, (op, s[0])) rhs = gr.vector_to_stream(gr.sizeof_float, size) dst = gr.vector_sink_f() - self.fg.connect(op, rhs, dst) - self.fg.run() + self.tb.connect(op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -73,12 +73,12 @@ class test_add_v_and_friends(gr_unittest.TestCase): for s in zip(range (len (src_data)), src_data): src = gr.vector_source_c(s[1]) srcv = gr.stream_to_vector(gr.sizeof_gr_complex, size) - self.fg.connect(src, srcv) - self.fg.connect(srcv, (op, s[0])) + self.tb.connect(src, srcv) + self.tb.connect(srcv, (op, s[0])) rhs = gr.vector_to_stream(gr.sizeof_gr_complex, size) dst = gr.vector_sink_c() - self.fg.connect(op, rhs, dst) - self.fg.run() + self.tb.connect(op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -87,8 +87,8 @@ class test_add_v_and_friends(gr_unittest.TestCase): srcv = gr.stream_to_vector(gr.sizeof_short, len(src_data)) rhs = gr.vector_to_stream(gr.sizeof_short, len(src_data)) dst = gr.vector_sink_s() - self.fg.connect(src, srcv, op, rhs, dst) - self.fg.run() + self.tb.connect(src, srcv, op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -97,8 +97,8 @@ class test_add_v_and_friends(gr_unittest.TestCase): srcv = gr.stream_to_vector(gr.sizeof_int, len(src_data)) rhs = gr.vector_to_stream(gr.sizeof_int, len(src_data)) dst = gr.vector_sink_i() - self.fg.connect(src, srcv, op, rhs, dst) - self.fg.run() + self.tb.connect(src, srcv, op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -107,8 +107,8 @@ class test_add_v_and_friends(gr_unittest.TestCase): srcv = gr.stream_to_vector(gr.sizeof_float, len(src_data)) rhs = gr.vector_to_stream(gr.sizeof_float, len(src_data)) dst = gr.vector_sink_f() - self.fg.connect(src, srcv, op, rhs, dst) - self.fg.run() + self.tb.connect(src, srcv, op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) @@ -117,8 +117,8 @@ class test_add_v_and_friends(gr_unittest.TestCase): srcv = gr.stream_to_vector(gr.sizeof_gr_complex, len(src_data)) rhs = gr.vector_to_stream(gr.sizeof_gr_complex, len(src_data)) dst = gr.vector_sink_c() - self.fg.connect(src, srcv, op, rhs, dst) - self.fg.run() + self.tb.connect(src, srcv, op, rhs, dst) + self.tb.run() result_data = dst.data() self.assertEqual(exp_data, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_agc.py b/gnuradio-core/src/python/gnuradio/gr/qa_agc.py index dbeb647b..bb3ddb11 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_agc.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_agc.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,15 +28,15 @@ test_output = False class test_sig_source (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001(self): ''' Test the complex AGC loop (single rate input) ''' - fg = self.fg + tb = self.tb expected_result = ( (100.000244140625+7.2191943445432116e-07j), @@ -98,20 +98,20 @@ class test_sig_source (gr_unittest.TestCase): agc = gr.agc_cc(1e-3, 1, 1, 1000) - fg.connect (src1, head) - fg.connect (head, agc) - fg.connect (agc, dst1) + tb.connect (src1, head) + tb.connect (head, agc) + tb.connect (agc, dst1) if test_output == True: - fg.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_agc_cc.dat")) + tb.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_agc_cc.dat")) - fg.run () + tb.run () dst_data = dst1.data () self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 4) def test_002(self): ''' Test the floating point AGC loop (single rate input) ''' - fg = self.fg + tb = self.tb expected_result = ( 7.2191943445432116e-07, @@ -173,20 +173,20 @@ class test_sig_source (gr_unittest.TestCase): agc = gr.agc_ff(1e-3, 1, 1, 1000) - fg.connect (src1, head) - fg.connect (head, agc) - fg.connect (agc, dst1) + tb.connect (src1, head) + tb.connect (head, agc) + tb.connect (agc, dst1) if test_output == True: - fg.connect (agc, gr.file_sink(gr.sizeof_float, "test_agc_ff.dat")) + tb.connect (agc, gr.file_sink(gr.sizeof_float, "test_agc_ff.dat")) - fg.run () + tb.run () dst_data = dst1.data () self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 4) def test_003(self): ''' Test the complex AGC loop (attack and decay rate inputs) ''' - fg = self.fg + tb = self.tb expected_result = \ ((100.000244140625+7.2191943445432116e-07j), @@ -248,20 +248,20 @@ class test_sig_source (gr_unittest.TestCase): agc = gr.agc2_cc(1e-2, 1e-3, 1, 1, 1000) - fg.connect (src1, head) - fg.connect (head, agc) - fg.connect (agc, dst1) + tb.connect (src1, head) + tb.connect (head, agc) + tb.connect (agc, dst1) if test_output == True: - fg.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_agc2_cc.dat")) + tb.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_agc2_cc.dat")) - fg.run () + tb.run () dst_data = dst1.data () self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 4) def test_004(self): ''' Test the floating point AGC loop (attack and decay rate inputs) ''' - fg = self.fg + tb = self.tb expected_result = \ (7.2191943445432116e-07, @@ -323,21 +323,21 @@ class test_sig_source (gr_unittest.TestCase): agc = gr.agc2_ff(1e-2, 1e-3, 1, 1, 1000) - fg.connect (src1, head) - fg.connect (head, agc) - fg.connect (agc, dst1) + tb.connect (src1, head) + tb.connect (head, agc) + tb.connect (agc, dst1) if test_output == True: - fg.connect (agc, gr.file_sink(gr.sizeof_float, "test_agc2_ff.dat")) + tb.connect (agc, gr.file_sink(gr.sizeof_float, "test_agc2_ff.dat")) - fg.run () + tb.run () dst_data = dst1.data () self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 4) def test_005(self): ''' Test the complex AGC loop (attack and decay rate inputs) ''' - fg = self.fg + tb = self.tb expected_result = \ ((100.000244140625+7.2191943445432116e-07j), @@ -399,14 +399,14 @@ class test_sig_source (gr_unittest.TestCase): agc = gr.agc2_cc(1e-2, 1e-3, 1, 1, 1000) - fg.connect (src1, head) - fg.connect (head, agc) - fg.connect (agc, dst1) + tb.connect (src1, head) + tb.connect (head, agc) + tb.connect (agc, dst1) if test_output == True: - fg.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_agc2_cc.dat")) + tb.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_agc2_cc.dat")) - fg.run () + tb.run () dst_data = dst1.data () self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 4) @@ -419,12 +419,12 @@ class test_sig_source (gr_unittest.TestCase): src = gr.vector_source_c(input_data) agc = gr.feedforward_agc_cc(16, 2.0) dst = gr.vector_sink_c () - self.fg.connect (src, agc, dst) + self.tb.connect (src, agc, dst) if test_output == True: - self.fg.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_feedforward_cc.dat")) + self.tb.connect (agc, gr.file_sink(gr.sizeof_gr_complex, "test_feedforward_cc.dat")) - self.fg.run () + self.tb.run () dst_data = dst.data () #self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 4) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_argmax.py b/gnuradio-core/src/python/gnuradio/gr/qa_argmax.py new file mode 100644 index 00000000..2e16d879 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_argmax.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest +import math + + +class test_sig_source (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + + def tearDown (self): + self.tb = None + + + def test_001(self): + tb = self.tb + + src1_data = (0,0.2,-0.3,0,12,0) + src2_data = (0,0.0,3.0,0,10,0) + src3_data = (0,0.0,3.0,0,1,0) + + src1 = gr.vector_source_f (src1_data) + s2v1 = gr.stream_to_vector(gr.sizeof_float, len(src1_data)) + tb.connect( src1, s2v1 ) + + src2 = gr.vector_source_f (src2_data) + s2v2 = gr.stream_to_vector(gr.sizeof_float, len(src1_data)) + tb.connect( src2, s2v2 ) + + src3 = gr.vector_source_f (src3_data) + s2v3 = gr.stream_to_vector(gr.sizeof_float, len(src1_data)) + tb.connect( src3, s2v3 ) + + dst1 = gr.vector_sink_s () + dst2 = gr.vector_sink_s () + argmax = gr.argmax_fs (len(src1_data)) + + tb.connect (s2v1, (argmax, 0)) + tb.connect (s2v2, (argmax, 1)) + tb.connect (s2v3, (argmax, 2)) + + tb.connect ((argmax,0), dst1) + tb.connect ((argmax,1), dst2) + + tb.run () + index = dst1.data () + source = dst2.data () + self.assertEqual ( index, (4,)) + self.assertEqual ( source, (0,)) + + + +if __name__ == '__main__': + gr_unittest.main () + diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_basic_flow_graph.py b/gnuradio-core/src/python/gnuradio/gr/qa_basic_flow_graph.py deleted file mode 100755 index 0799c72e..00000000 --- a/gnuradio-core/src/python/gnuradio/gr/qa_basic_flow_graph.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gr_unittest - - -# ---------------------------------------------------------------- - - -class test_basic_flow_graph (gr_unittest.TestCase): - - def setUp (self): - self.fg = gr.basic_flow_graph () - - def tearDown (self): - self.fg = None - - def test_000_create_delete (self): - pass - - def test_001a_insert_1 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (gr.endpoint (src1, 0), gr.endpoint (dst1, 0)) - - def test_001b_insert_1 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (src1, gr.endpoint (dst1, 0)) - - def test_001c_insert_1 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (gr.endpoint (src1, 0), dst1) - - def test_001d_insert_1 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (src1, dst1) - - def test_001e_insert_1 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (dst1, 0)) - - def test_002_dst_in_use (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - src2 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (dst1, 0)) - self.assertRaises (ValueError, - lambda : fg.connect ((src2, 0), - (dst1, 0))) - - def test_003_no_such_src_port (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - self.assertRaises (ValueError, - lambda : fg.connect ((src1, 1), - (dst1, 0))) - - def test_004_no_such_dst_port (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - self.assertRaises (ValueError, - lambda : fg.connect ((src1, 0), - (dst1, 1))) - - def test_005_one_src_two_dst (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (dst1, 0)) - fg.connect ((src1, 0), (dst2, 0)) - - def test_006_check_item_sizes (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_char) - self.assertRaises (ValueError, - lambda : fg.connect ((src1, 0), - (dst1, 0))) - - def test_007_validate (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (dst1, 0)) - fg.connect ((src1, 0), (dst2, 0)) - fg.validate () - - def test_008_validate (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (nop1, 0)) - fg.connect ((src1, 0), (nop1, 1)) - fg.connect ((nop1, 0), (dst1, 0)) - fg.connect ((nop1, 1), (dst2, 0)) - fg.validate () - - def test_009_validate (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (nop1, 0)) - fg.connect ((src1, 0), (nop1, 2)) - fg.connect ((nop1, 0), (dst1, 0)) - fg.connect ((nop1, 1), (dst2, 0)) - self.assertRaises (ValueError, - lambda : fg.validate ()) - - - def test_010_validate (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (nop1, 0)) - fg.connect ((src1, 0), (nop1, 1)) - fg.connect ((nop1, 0), (dst1, 0)) - fg.connect ((nop1, 2), (dst2, 0)) - self.assertRaises (ValueError, - lambda : fg.validate ()) - - - def test_011_disconnect (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (nop1, 0)) - fg.connect ((src1, 0), (nop1, 1)) - fg.connect ((nop1, 0), (dst1, 0)) - fg.connect ((nop1, 1), (dst2, 0)) - fg.validate () - fg.disconnect ((src1, 0), (nop1, 1)) - fg.validate () - self.assertRaises (ValueError, - lambda : fg.disconnect ((src1, 0), - (nop1, 1))) - - def test_012_connect (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (2, 3, 4, 5) - src1 = gr.vector_source_i (src_data) - op = gr.add_const_ii (2) - dst1 = gr.vector_sink_i () - fg.connect (src1, op) - fg.connect (op, dst1) - # print "edge_list:", fg.edge_list - fg.validate () - - def test_013_connect_varargs (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - self.assertRaises (ValueError, - lambda : fg.connect ()) - self.assertRaises (ValueError, - lambda : fg.connect (src1)) - - def test_014_connect_varargs (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (src1, nop1, dst1) - fg.validate () - -if __name__ == '__main__': - gr_unittest.main () - diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_bin_statistics.py b/gnuradio-core/src/python/gnuradio/gr/qa_bin_statistics.py new file mode 100755 index 00000000..29b9796c --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_bin_statistics.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 import gr, gr_unittest +import random +import struct + +#import os +#print "pid =", os.getpid() +#raw_input("Attach gdb and press return...") + +""" +Note: The QA tests below have been disabled by renaming them from test_* +to xtest_*. See ticket:199 on http://gnuradio.org/trac/ticket/199 +""" + +class counter(gr.feval_dd): + def __init__(self, step_size=1): + gr.feval_dd.__init__(self) + self.step_size = step_size + self.count = 0 + + def eval(self, input): + #print "eval: self.count =", self.count + t = self.count + self.count = self.count + self.step_size + return t + + +class counter3(gr.feval_dd): + def __init__(self, f, step_size): + gr.feval_dd.__init__(self) + self.f = f + self.step_size = step_size + self.count = 0 + + def eval(self, input): + try: + #print "eval: self.count =", self.count + t = self.count + self.count = self.count + self.step_size + self.f(self.count) + except Exception, e: + print "Exception: ", e + return t + +def foobar3(new_t): + #print "foobar3: new_t =", new_t + pass + + +class counter4(gr.feval_dd): + def __init__(self, obj_instance, step_size): + gr.feval_dd.__init__(self) + self.obj_instance = obj_instance + self.step_size = step_size + self.count = 0 + + def eval(self, input): + try: + #print "eval: self.count =", self.count + t = self.count + self.count = self.count + self.step_size + self.obj_instance.foobar4(self.count) + except Exception, e: + print "Exception: ", e + return t + + +class parse_msg(object): + def __init__(self, msg): + self.center_freq = msg.arg1() + self.vlen = int(msg.arg2()) + assert(msg.length() == self.vlen * gr.sizeof_float) + self.data = struct.unpack('%df' % (self.vlen,), msg.to_string()) + +# FIXME: see ticket:199 +class xtest_bin_statistics(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block () + + def tearDown(self): + self.tb = None + + def xtest_001(self): + vlen = 4 + tune = counter(1) + tune_delay = 0 + dwell_delay = 1 + msgq = gr.msg_queue() + + src_data = tuple([float(x) for x in + ( 1, 2, 3, 4, + 5, 6, 7, 8, + 9, 10, 11, 12, + 13, 14, 15, 16 + )]) + + expected_results = tuple([float(x) for x in + ( 1, 2, 3, 4, + 5, 6, 7, 8, + 9, 10, 11, 12, + 13, 14, 15, 16 + )]) + + src = gr.vector_source_f(src_data, False) + s2v = gr.stream_to_vector(gr.sizeof_float, vlen) + stats = gr.bin_statistics_f(vlen, msgq, tune, tune_delay, dwell_delay) + self.tb.connect(src, s2v, stats) + self.tb.run() + self.assertEqual(4, msgq.count()) + for i in range(4): + m = parse_msg(msgq.delete_head()) + #print "m =", m.center_freq, m.data + self.assertEqual(expected_results[vlen*i:vlen*i + vlen], m.data) + + def xtest_002(self): + vlen = 4 + tune = counter(1) + tune_delay = 1 + dwell_delay = 2 + msgq = gr.msg_queue() + + src_data = tuple([float(x) for x in + ( 1, 2, 3, 4, + 9, 6, 11, 8, + 5, 10, 7, 12, + 13, 14, 15, 16 + )]) + + expected_results = tuple([float(x) for x in + ( 9, 10, 11, 12)]) + + src = gr.vector_source_f(src_data, False) + s2v = gr.stream_to_vector(gr.sizeof_float, vlen) + stats = gr.bin_statistics_f(vlen, msgq, tune, tune_delay, dwell_delay) + self.tb.connect(src, s2v, stats) + self.tb.run() + self.assertEqual(1, msgq.count()) + for i in range(1): + m = parse_msg(msgq.delete_head()) + #print "m =", m.center_freq, m.data + self.assertEqual(expected_results[vlen*i:vlen*i + vlen], m.data) + + + + def xtest_003(self): + vlen = 4 + tune = counter3(foobar3, 1) + tune_delay = 1 + dwell_delay = 2 + msgq = gr.msg_queue() + + src_data = tuple([float(x) for x in + ( 1, 2, 3, 4, + 9, 6, 11, 8, + 5, 10, 7, 12, + 13, 14, 15, 16 + )]) + + expected_results = tuple([float(x) for x in + ( 9, 10, 11, 12)]) + + src = gr.vector_source_f(src_data, False) + s2v = gr.stream_to_vector(gr.sizeof_float, vlen) + stats = gr.bin_statistics_f(vlen, msgq, tune, tune_delay, dwell_delay) + self.tb.connect(src, s2v, stats) + self.tb.run() + self.assertEqual(1, msgq.count()) + for i in range(1): + m = parse_msg(msgq.delete_head()) + #print "m =", m.center_freq, m.data + self.assertEqual(expected_results[vlen*i:vlen*i + vlen], m.data) + + + def foobar4(self, new_t): + #print "foobar4: new_t =", new_t + pass + + def xtest_004(self): + vlen = 4 + tune = counter4(self, 1) + tune_delay = 1 + dwell_delay = 2 + msgq = gr.msg_queue() + + src_data = tuple([float(x) for x in + ( 1, 2, 3, 4, + 9, 6, 11, 8, + 5, 10, 7, 12, + 13, 14, 15, 16 + )]) + + expected_results = tuple([float(x) for x in + ( 9, 10, 11, 12)]) + + src = gr.vector_source_f(src_data, False) + s2v = gr.stream_to_vector(gr.sizeof_float, vlen) + stats = gr.bin_statistics_f(vlen, msgq, tune, tune_delay, dwell_delay) + self.tb.connect(src, s2v, stats) + self.tb.run() + self.assertEqual(1, msgq.count()) + for i in range(1): + m = parse_msg(msgq.delete_head()) + #print "m =", m.center_freq, m.data + self.assertEqual(expected_results[vlen*i:vlen*i + vlen], m.data) + + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_classify.py b/gnuradio-core/src/python/gnuradio/gr/qa_classify.py new file mode 100755 index 00000000..ac17aff2 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_classify.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +import numpy +from gnuradio import gr, gr_unittest +import copy +#import pygsl.wavelet as wavelet # FIXME: pygsl not checked for in config +import math + + +def sqr(x): + return x*x + +def np2(k): + m = 0 + n = k - 1 + while n > 0: + m += 1 + return m + + +class qa_classify(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + +# def test_000_(self): +# src_data = numpy.zeros(10) +# trg_data = numpy.zeros(10) +# src = gr.vector_source_f(src_data) +# dst = gr.vector_sink_f() +# self.tb.connect(src, dst) +# self.tb.run() +# rsl_data = dst.data() +# sum = 0 +# for (u,v) in zip(trg_data, rsl_data): +# w = u - v +# sum += w * w +# sum /= float(len(trg_data)) +# assert sum < 1e-6 + + def test_001_(self): + src_data = numpy.array([-1.0, 1.0, -1.0, 1.0]) + trg_data = src_data * 0.5 + src = gr.vector_source_f(src_data) + dst = gr.vector_sink_f() + rail = gr.rail_ff(-0.5, 0.5) + self.tb.connect(src, rail) + self.tb.connect(rail, dst) + self.tb.run() + rsl_data = dst.data() + sum = 0 + for (u, v) in zip(trg_data, rsl_data): + w = u - v + sum += w * w + sum /= float(len(trg_data)) + assert sum < 1e-6 + + def test_002_(self): + src_data = numpy.array([-1.0, + -1.0/2.0, + -1.0/3.0, + -1.0/4.0, + -1.0/5.0]) + trg_data = copy.deepcopy(src_data) + + src = gr.vector_source_f(src_data, False, len(src_data)) + st = gr.stretch_ff(-1.0/5.0, len(src_data)) + dst = gr.vector_sink_f(len(src_data)) + self.tb.connect(src, st) + self.tb.connect(st, dst) + self.tb.run() + rsl_data = dst.data() + sum = 0 + for (u, v) in zip(trg_data, rsl_data): + w = u - v + sum += w * w + sum /= float(len(trg_data)) + assert sum < 1e-6 + + def test_003_(self): + src_grid = (0.0, 1.0, 2.0, 3.0, 4.0) + trg_grid = copy.deepcopy(src_grid) + src_data = (0.0, 1.0, 0.0, 1.0, 0.0) + + src = gr.vector_source_f(src_data, False, len(src_grid)) + sq = gr.squash_ff(src_grid, trg_grid) + dst = gr.vector_sink_f(len(trg_grid)) + self.tb.connect(src, sq) + self.tb.connect(sq, dst) + self.tb.run() + rsl_data = dst.data() + sum = 0 + for (u, v) in zip(src_data, rsl_data): + w = u - v + sum += w * w + sum /= float(len(src_data)) + assert sum < 1e-6 + +# def test_004_(self): # FIXME: requires pygsl +# +# n = 256 +# o = 4 +# ws = wavelet.workspace(n) +# w = wavelet.daubechies(o) +# +# a = numpy.arange(n) +# b = numpy.sin(a*numpy.pi/16.0) +# c = w.transform_forward(b, ws) +# d = w.transform_inverse(c, ws) +# +# src = gr.vector_source_f(b, False, n) +# wv = gr.wavelet_ff(n, o, True) +# +# dst = gr.vector_sink_f(n) +# self.tb.connect(src, wv) +# self.tb.connect(wv, dst) +# self.tb.run() +# e = dst.data() +# +# sum = 0 +# for (u, v) in zip(c, e): +# w = u - v +# sum += w * w +# sum /= float(len(c)) +# assert sum < 1e-6 + + def test_005_(self): + + src_data = (1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0) + + dwav = numpy.array(src_data) + wvps = numpy.zeros(3) + # wavelet power spectrum + scl = 1.0/sqr(dwav[0]) + k = 1 + for e in range(len(wvps)): + wvps[e] = scl*sqr(dwav[k:k+(01< C++ -> python and back again + f = my_feval() + gr.feval_example(f) + self.assertEqual(True, f.fired) + if __name__ == '__main__': gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_fft.py b/gnuradio-core/src/python/gnuradio/gr/qa_fft.py new file mode 100755 index 00000000..412c4c48 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_fft.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +from gnuradio import gr, gr_unittest +import sys +import random + +primes = (2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53, + 59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131, + 137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223, + 227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311) + + +class test_fft_filter(gr_unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def assert_fft_ok2(self, expected_result, result_data): + expected_result = expected_result[:len(result_data)] + self.assertComplexTuplesAlmostEqual2 (expected_result, result_data, + abs_eps=1e-9, rel_eps=4e-4) + + def assert_fft_float_ok2(self, expected_result, result_data, abs_eps=1e-9, rel_eps=4e-4): + expected_result = expected_result[:len(result_data)] + self.assertFloatTuplesAlmostEqual2 (expected_result, result_data, + abs_eps, rel_eps) + + def test_001(self): + tb = gr.top_block() + fft_size = 32 + src_data = tuple([complex(primes[2*i], primes[2*i+1]) for i in range(fft_size)]) + + expected_result = ((4377+4516j), + (-1706.1268310546875+1638.4256591796875j), + (-915.2083740234375+660.69427490234375j), + (-660.370361328125+381.59600830078125j), + (-499.96044921875+238.41630554199219j), + (-462.26748657226562+152.88948059082031j), + (-377.98440551757812+77.5928955078125j), + (-346.85821533203125+47.152004241943359j), + (-295+20j), + (-286.33609008789062-22.257017135620117j), + (-271.52999877929688-33.081821441650391j), + (-224.6358642578125-67.019538879394531j), + (-244.24473571777344-91.524826049804688j), + (-203.09068298339844-108.54627227783203j), + (-198.45195007324219-115.90768432617188j), + (-182.97744750976562-128.12318420410156j), + (-167-180j), + (-130.33688354492188-173.83778381347656j), + (-141.19784545898438-190.28807067871094j), + (-111.09677124023438-214.48896789550781j), + (-70.039543151855469-242.41630554199219j), + (-68.960540771484375-228.30015563964844j), + (-53.049201965332031-291.47097778320312j), + (-28.695289611816406-317.64553833007812j), + (57-300j), + (45.301143646240234-335.69509887695312j), + (91.936195373535156-373.32437133789062j), + (172.09465026855469-439.275146484375j), + (242.24473571777344-504.47515869140625j), + (387.81732177734375-666.6788330078125j), + (689.48553466796875-918.2142333984375j), + (1646.539306640625-1694.1956787109375j)) + + src = gr.vector_source_c(src_data) + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size) + fft = gr.fft_vcc(fft_size, True, [], False) + v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size) + dst = gr.vector_sink_c() + tb.connect(src, s2v, fft, v2s, dst) + tb.run() + result_data = dst.data() + #print 'expected:', expected_result + #print 'results: ', result_data + #self.assertComplexTuplesAlmostEqual (expected_result, result_data, 5) + self.assert_fft_ok2(expected_result, result_data) + + def test_002(self): + tb = gr.top_block() + fft_size = 32 + + tmp_data = ((4377+4516j), + (-1706.1268310546875+1638.4256591796875j), + (-915.2083740234375+660.69427490234375j), + (-660.370361328125+381.59600830078125j), + (-499.96044921875+238.41630554199219j), + (-462.26748657226562+152.88948059082031j), + (-377.98440551757812+77.5928955078125j), + (-346.85821533203125+47.152004241943359j), + (-295+20j), + (-286.33609008789062-22.257017135620117j), + (-271.52999877929688-33.081821441650391j), + (-224.6358642578125-67.019538879394531j), + (-244.24473571777344-91.524826049804688j), + (-203.09068298339844-108.54627227783203j), + (-198.45195007324219-115.90768432617188j), + (-182.97744750976562-128.12318420410156j), + (-167-180j), + (-130.33688354492188-173.83778381347656j), + (-141.19784545898438-190.28807067871094j), + (-111.09677124023438-214.48896789550781j), + (-70.039543151855469-242.41630554199219j), + (-68.960540771484375-228.30015563964844j), + (-53.049201965332031-291.47097778320312j), + (-28.695289611816406-317.64553833007812j), + (57-300j), + (45.301143646240234-335.69509887695312j), + (91.936195373535156-373.32437133789062j), + (172.09465026855469-439.275146484375j), + (242.24473571777344-504.47515869140625j), + (387.81732177734375-666.6788330078125j), + (689.48553466796875-918.2142333984375j), + (1646.539306640625-1694.1956787109375j)) + + src_data = tuple([x/fft_size for x in tmp_data]) + + expected_result = tuple([complex(primes[2*i], primes[2*i+1]) for i in range(fft_size)]) + + src = gr.vector_source_c(src_data) + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size) + fft = gr.fft_vcc(fft_size, False, [], False) + v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size) + dst = gr.vector_sink_c() + tb.connect(src, s2v, fft, v2s, dst) + tb.run() + result_data = dst.data() + #print 'expected:', expected_result + #print 'results: ', result_data + #self.assertComplexTuplesAlmostEqual (expected_result, result_data, 5) + self.assert_fft_ok2(expected_result, result_data) + + +if __name__ == '__main__': + gr_unittest.main () + diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_fft_filter.py b/gnuradio-core/src/python/gnuradio/gr/qa_fft_filter.py index bc24fe86..d4106ee4 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_fft_filter.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_fft_filter.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -42,26 +42,26 @@ def reference_filter_ccc(dec, taps, input): """ compute result using conventional fir filter """ - fg = gr.flow_graph() + tb = gr.top_block() #src = gr.vector_source_c(((0,) * (len(taps) - 1)) + input) src = gr.vector_source_c(input) op = gr.fir_filter_ccc(dec, taps) dst = gr.vector_sink_c() - fg.connect(src, op, dst) - fg.run() + tb.connect(src, op, dst) + tb.run() return dst.data() def reference_filter_fff(dec, taps, input): """ compute result using conventional fir filter """ - fg = gr.flow_graph() + tb = gr.top_block() #src = gr.vector_source_f(((0,) * (len(taps) - 1)) + input) src = gr.vector_source_f(input) op = gr.fir_filter_fff(dec, taps) dst = gr.vector_sink_f() - fg.connect(src, op, dst) - fg.run() + tb.connect(src, op, dst) + tb.run() return dst.data() @@ -75,10 +75,10 @@ def print_complex(x): class test_fft_filter(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph () + pass def tearDown(self): - self.fg = None + pass def assert_fft_ok2(self, expected_result, result_data): expected_result = expected_result[:len(result_data)] @@ -94,14 +94,15 @@ class test_fft_filter(gr_unittest.TestCase): # self.assertRaises (RuntimeError, gr.fft_filter_ccc, 2, (1,)) def test_ccc_001(self): + tb = gr.top_block() src_data = (0,1,2,3,4,5,6,7) taps = (1,) expected_result = tuple([complex(x) for x in (0,1,2,3,4,5,6,7)]) src = gr.vector_source_c(src_data) op = gr.fft_filter_ccc(1, taps) dst = gr.vector_sink_c() - self.fg.connect(src, op, dst) - self.fg.run() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() #print 'expected:', expected_result #print 'results: ', result_data @@ -109,14 +110,15 @@ class test_fft_filter(gr_unittest.TestCase): def test_ccc_002(self): + tb = gr.top_block() src_data = (0,1,2,3,4,5,6,7) taps = (2,) expected_result = tuple([2 * complex(x) for x in (0,1,2,3,4,5,6,7)]) src = gr.vector_source_c(src_data) op = gr.fft_filter_ccc(1, taps) dst = gr.vector_sink_c() - self.fg.connect(src, op, dst) - self.fg.run() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() #print 'expected:', expected_result #print 'results: ', result_data @@ -135,10 +137,12 @@ class test_fft_filter(gr_unittest.TestCase): src = gr.vector_source_c(src_data) op = gr.fft_filter_ccc(1, taps) dst = gr.vector_sink_c() - self.fg.connect(src, op, dst) - self.fg.run() + tb = gr.top_block() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() - + del tb + self.assert_fft_ok2(expected_result, result_data) def test_ccc_005(self): @@ -155,9 +159,11 @@ class test_fft_filter(gr_unittest.TestCase): src = gr.vector_source_c(src_data) op = gr.fft_filter_ccc(dec, taps) dst = gr.vector_sink_c() - self.fg.connect(src, op, dst) - self.fg.run() - result_data = dst.data() + tb = gr.top_block() + tb.connect(src, op, dst) + tb.run() + del tb + result_data = dst.data() self.assert_fft_ok2(expected_result, result_data) @@ -166,14 +172,15 @@ class test_fft_filter(gr_unittest.TestCase): # ---------------------------------------------------------------- def test_fff_001(self): + tb = gr.top_block() src_data = (0,1,2,3,4,5,6,7) taps = (1,) expected_result = tuple([float(x) for x in (0,1,2,3,4,5,6,7)]) src = gr.vector_source_f(src_data) op = gr.fft_filter_fff(1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op, dst) - self.fg.run() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() #print 'expected:', expected_result #print 'results: ', result_data @@ -181,14 +188,15 @@ class test_fft_filter(gr_unittest.TestCase): def test_fff_002(self): + tb = gr.top_block() src_data = (0,1,2,3,4,5,6,7) taps = (2,) expected_result = tuple([2 * float(x) for x in (0,1,2,3,4,5,6,7)]) src = gr.vector_source_f(src_data) op = gr.fft_filter_fff(1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op, dst) - self.fg.run() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() #print 'expected:', expected_result #print 'results: ', result_data @@ -207,8 +215,9 @@ class test_fft_filter(gr_unittest.TestCase): src = gr.vector_source_f(src_data) op = gr.fft_filter_fff(1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op, dst) - self.fg.run() + tb = gr.top_block() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() #print "src_len =", src_len, " ntaps =", ntaps @@ -236,8 +245,9 @@ class test_fft_filter(gr_unittest.TestCase): src = gr.vector_source_f(src_data) op = gr.fft_filter_fff(1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op, dst) - self.fg.run() + tb = gr.top_block() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() self.assert_fft_float_ok2(expected_result, result_data, abs_eps=2.0) @@ -256,8 +266,9 @@ class test_fft_filter(gr_unittest.TestCase): src = gr.vector_source_f(src_data) op = gr.fft_filter_fff(dec, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op, dst) - self.fg.run() + tb = gr.top_block() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() self.assert_fft_float_ok2(expected_result, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_filter_delay_fc.py b/gnuradio-core/src/python/gnuradio/gr/qa_filter_delay_fc.py index 895c65d1..b92f143d 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_filter_delay_fc.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_filter_delay_fc.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import math class qa_filter_delay_fc (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001_filter_delay_one_input (self): @@ -96,7 +96,7 @@ class qa_filter_delay_fc (gr_unittest.TestCase): (0.5877838134765625 +0.80908381938934326j), (3.218399768911695e-08 +1.0000815391540527j)) - fg = self.fg + tb = self.tb sampling_freq = 100 @@ -110,11 +110,11 @@ class qa_filter_delay_fc (gr_unittest.TestCase): taps = gr.firdes_hilbert (ntaps) hd = gr.filter_delay_fc (taps) - fg.connect (src1, head) - fg.connect (head, hd) - fg.connect (hd,dst2) + tb.connect (src1, head) + tb.connect (head, hd) + tb.connect (hd,dst2) - fg.run () + tb.run () # get output result_data = dst2.data () @@ -189,7 +189,7 @@ class qa_filter_delay_fc (gr_unittest.TestCase): (3.218399768911695e-08 +1.0000815391540527j)) - fg = self.fg + tb = self.tb sampling_freq = 100 ntaps = 51 @@ -203,11 +203,11 @@ class qa_filter_delay_fc (gr_unittest.TestCase): taps = gr.firdes_hilbert (ntaps) hd = gr.filter_delay_fc (taps) - fg.connect (src1, head) - fg.connect (head, (hd,0)) - fg.connect (head, (hd,1)) - fg.connect (hd,dst2) - fg.run () + tb.connect (src1, head) + tb.connect (head, (hd,0)) + tb.connect (head, (hd,1)) + tb.connect (hd,dst2) + tb.run () # get output result_data = dst2.data () @@ -282,7 +282,7 @@ class qa_filter_delay_fc (gr_unittest.TestCase): (0.5877838134765625 +0.58783560991287231j), (3.218399768911695e-08 +1.1920928955078125e-07j)) - fg = self.fg + tb = self.tb sampling_freq = 100 ntaps = 51 @@ -298,14 +298,14 @@ class qa_filter_delay_fc (gr_unittest.TestCase): dst2 = gr.vector_sink_c () - fg.connect (src1, head1) - fg.connect (src2, head2) + tb.connect (src1, head1) + tb.connect (src2, head2) - fg.connect (head1, (hd,0)) - fg.connect (head2, (hd,1)) - fg.connect (hd, dst2) + tb.connect (head1, (hd,0)) + tb.connect (head2, (hd,1)) + tb.connect (hd, dst2) - fg.run () + tb.run () # get output result_data = dst2.data () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_flow_graph.py b/gnuradio-core/src/python/gnuradio/gr/qa_flow_graph.py deleted file mode 100755 index 5c84d5fe..00000000 --- a/gnuradio-core/src/python/gnuradio/gr/qa_flow_graph.py +++ /dev/null @@ -1,356 +0,0 @@ -#!/usr/bin/env python -# -# 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 import gr, gr_unittest -import qa_basic_flow_graph - - -def all_counts (): - return (gr.block_ncurrently_allocated (), - gr.block_detail_ncurrently_allocated (), - gr.buffer_ncurrently_allocated (), - gr.buffer_reader_ncurrently_allocated ()) - - -class wrap_add(gr.hier_block): - def __init__(self, fg, a): - add = gr.add_const_ii (a) - gr.hier_block.__init__ (self, fg, add, add) - -class mult_add(gr.hier_block): - def __init__(self, fg, m, a): - mult = gr.multiply_const_ii (m) - add = gr.add_const_ii (a) - fg.connect (mult, add) - gr.hier_block.__init__ (self, fg, mult, add) - - -class test_flow_graph (qa_basic_flow_graph.test_basic_flow_graph): - - def setUp (self): - ''' override qa_basic_flow_graph setUp in order to use our class''' - self.fg = gr.flow_graph () - - def tearDown (self): - qa_basic_flow_graph.test_basic_flow_graph.tearDown (self) - - - # we inherit all their tests, so we can be sure we don't break - # any of the underlying code - - - def leak_check (self, fct): - begin = all_counts () - fct () - # tear down early so we can check for leaks - self.tearDown () - end = all_counts () - self.assertEqual (begin, end) - - def test_100_tsort_null (self): - self.assertEqual ([], self.fg.topological_sort (self.fg.all_blocks ())) - - def test_101_tsort_two (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect ((src1, 0), (dst1, 0)) - fg.validate () - self.assertEqual ([src1, dst1], fg.topological_sort (fg.all_blocks ())) - - def test_102_tsort_three_a (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (src1, nop1) - fg.connect (nop1, dst1) - fg.validate () - self.assertEqual ([src1, nop1, dst1], fg.topological_sort (fg.all_blocks ())) - - def test_103_tsort_three_b (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (nop1, dst1) - fg.connect (src1, nop1) - fg.validate () - self.assertEqual ([src1, nop1, dst1], fg.topological_sort (fg.all_blocks ())) - - def test_104_trivial_dag_check (self): - fg = self.fg - nop1 = gr.nop (gr.sizeof_int) - fg.connect (nop1, nop1) - fg.validate () - self.assertRaises (gr.NotDAG, - lambda : fg.topological_sort (fg.all_blocks ())) - - def test_105 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - src2 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - nop3 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - - fg.connect (src1, nop1) - fg.connect (src2, nop2) - fg.connect (nop1, (nop3, 0)) - fg.connect (nop2, (nop3, 1)) - fg.connect (nop3, dst1) - fg.validate () - ts = fg.topological_sort (fg.all_blocks ()) - self.assertEqual ([src2, nop2, src1, nop1, nop3, dst1], ts) - - - def test_106 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - src2 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - nop3 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - - fg.connect (nop3, dst1) - fg.connect (nop2, (nop3, 1)) - fg.connect (nop1, (nop3, 0)) - fg.connect (src2, nop2) - fg.connect (src1, nop1) - fg.validate () - ts = fg.topological_sort (fg.all_blocks ()) - self.assertEqual ([src2, nop2, src1, nop1, nop3, dst1], ts) - - def test_107 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - src2 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - - fg.connect (src1, nop1) - fg.connect (nop1, dst1) - fg.connect (src2, nop2) - fg.connect (nop2, dst2) - fg.validate () - ts = fg.topological_sort (fg.all_blocks ()) - self.assertEqual ([src2, nop2, dst2, src1, nop1, dst1], ts) - - def test_108 (self): - self.leak_check (self.body_108) - - def body_108 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - src2 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - - fg.connect (nop2, dst2) - fg.connect (src1, nop1) - fg.connect (src2, nop2) - fg.connect (nop1, dst1) - fg.validate () - ts = fg.topological_sort (fg.all_blocks ()) - self.assertEqual ([src2, nop2, dst2, src1, nop1, dst1], ts) - self.assertEqual ((6,0,0,0), all_counts ()) - - def test_109__setup_connections (self): - self.leak_check (self.body_109) - - def body_109 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (src1, dst1) - fg._setup_connections () - self.assertEqual ((2,2,1,1), all_counts ()) - - def test_110_scheduler (self): - self.leak_check (self.body_110) - - def body_110 (self): - fg = self.fg - src_data = (0, 1, 2, 3) - src1 = gr.vector_source_i (src_data) - dst1 = gr.vector_sink_i () - fg.connect ((src1, 0), (dst1, 0)) - fg.run () - dst_data = dst1.data () - self.assertEqual (src_data, dst_data) - - def test_111_scheduler (self): - self.leak_check (self.body_111) - - def body_111 (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (2, 3, 4, 5) - src1 = gr.vector_source_i (src_data) - op = gr.add_const_ii (2) - dst1 = gr.vector_sink_i () - fg.connect (src1, op) - fg.connect (op, dst1) - fg.run () - dst_data = dst1.data () - self.assertEqual (expected_result, dst_data) - - def test_111v_scheduler (self): - self.leak_check (self.body_111v) - - def body_111v (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (2, 3, 4, 5) - src1 = gr.vector_source_i (src_data) - op = gr.add_const_ii (2) - dst1 = gr.vector_sink_i () - fg.connect (src1, op, dst1) - fg.run () - dst_data = dst1.data () - self.assertEqual (expected_result, dst_data) - - def test_112 (self): - fg = self.fg - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - nop3 = gr.nop (gr.sizeof_int) - fg.connect ((nop1, 0), (nop2, 0)) - fg.connect ((nop1, 1), (nop3, 0)) - fg._setup_connections () - self.assertEqual (2, nop1.detail().noutputs()) - - def test_113 (self): - fg = self.fg - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - nop3 = gr.nop (gr.sizeof_int) - fg.connect ((nop1, 0), (nop2, 0)) - fg.connect ((nop1, 0), (nop3, 0)) - fg._setup_connections () - self.assertEqual (1, nop1.detail().noutputs()) - - def test_200_partition (self): - self.leak_check (self.body_200) - - def body_200 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - fg.connect (nop1, dst1) - fg.connect (src1, nop1) - fg.validate () - p = fg.partition_graph (fg.all_blocks ()) - self.assertEqual ([[src1, nop1, dst1]], p) - self.assertEqual ((3,0,0,0), all_counts ()) - - def test_201_partition (self): - self.leak_check (self.body_201) - - def body_201 (self): - fg = self.fg - src1 = gr.null_source (gr.sizeof_int) - src2 = gr.null_source (gr.sizeof_int) - nop1 = gr.nop (gr.sizeof_int) - nop2 = gr.nop (gr.sizeof_int) - dst1 = gr.null_sink (gr.sizeof_int) - dst2 = gr.null_sink (gr.sizeof_int) - - fg.connect (nop2, dst2) - fg.connect (src1, nop1) - fg.connect (src2, nop2) - fg.connect (nop1, dst1) - fg.validate () - p = fg.partition_graph (fg.all_blocks ()) - self.assertEqual ([[src2, nop2, dst2], [src1, nop1, dst1]], p) - self.assertEqual ((6,0,0,0), all_counts ()) - - def test_300_hier (self): - self.leak_check (self.body_300_hier) - - def body_300_hier (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (10, 11, 12, 13) - src1 = gr.vector_source_i (src_data) - op = wrap_add (fg, 10) - dst1 = gr.vector_sink_i () - fg.connect (src1, op, dst1) - fg.run () - dst_data = dst1.data () - self.assertEqual (expected_result, dst_data) - - def test_301_hier (self): - self.leak_check (self.body_301_hier) - - def body_301_hier (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (5, 8, 11, 14) - src1 = gr.vector_source_i (src_data) - op = mult_add (fg, 3, 5) - dst1 = gr.vector_sink_i () - fg.connect (src1, op, dst1) - fg.run () - dst_data = dst1.data () - self.assertEqual (expected_result, dst_data) - - def test_302_hier (self): - self.leak_check (self.body_302_hier) - - def body_302_hier (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (10, 11, 12, 13) - src1 = gr.vector_source_i (src_data) - op = gr.compose (fg, gr.add_const_ii (10)) - dst1 = gr.vector_sink_i () - fg.connect (src1, op, dst1) - fg.run () - dst_data = dst1.data () - self.assertEqual (expected_result, dst_data) - - def test_303_hier (self): - self.leak_check (self.body_303_hier) - - def body_303_hier (self): - fg = self.fg - src_data = (0, 1, 2, 3) - expected_result = (35, 38, 41, 44) - src1 = gr.vector_source_i (src_data) - op = gr.compose (fg, gr.add_const_ii (10), mult_add (fg, 3, 5)) - dst1 = gr.vector_sink_i () - fg.connect (src1, op, dst1) - fg.run () - dst_data = dst1.data () - self.assertEqual (expected_result, dst_data) - - -if __name__ == '__main__': - gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_fractional_interpolator.py b/gnuradio-core/src/python/gnuradio/gr/qa_fractional_interpolator.py new file mode 100755 index 00000000..4466e8aa --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_fractional_interpolator.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest + +class test_fractional_resampler (gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_000_make(self): + op = gr.fractional_interpolator_ff(0.0, 1.0) + op2 = gr.fractional_interpolator_cc(0.0, 1.0) + +if __name__ == '__main__': + gr_unittest.main() + diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py b/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py index f1b4b3b7..53d1a89b 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_frequency_modulator.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -30,10 +30,10 @@ def sincos(x): class test_frequency_modulator (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_fm_001 (self): pi = math.pi @@ -44,9 +44,9 @@ class test_frequency_modulator (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.frequency_modulator_fc (sensitivity) dst = gr.vector_sink_c () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertComplexTuplesAlmostEqual (expected_result, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_fsk_stuff.py b/gnuradio-core/src/python/gnuradio/gr/qa_fsk_stuff.py index c85983b9..b506e3ed 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_fsk_stuff.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_fsk_stuff.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -29,10 +29,10 @@ def sincos(x): class test_bytes_to_syms (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_bytes_to_syms_001 (self): src_data = (0x01, 0x80, 0x03) @@ -42,9 +42,9 @@ class test_bytes_to_syms (gr_unittest.TestCase): src = gr.vector_source_b (src_data) op = gr.bytes_to_syms () dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (expected_result, result_data) @@ -63,9 +63,9 @@ class test_bytes_to_syms (gr_unittest.TestCase): src = gr.vector_source_b (src_data) op = gr.simple_framer (4) dst = gr.vector_sink_b () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (expected_result, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_glfsr_source.py b/gnuradio-core/src/python/gnuradio/gr/qa_glfsr_source.py new file mode 100755 index 00000000..fc211657 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_glfsr_source.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest + +class test_glfsr_source(gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + def tearDown (self): + self.tb = None + + def test_000_make_b(self): + src = gr.glfsr_source_b(16) + self.assertEquals(src.mask(), 0x8016) + self.assertEquals(src.period(), 2**16-1) + + def test_001_degree_b(self): + self.assertRaises(RuntimeError, + lambda: gr.glfsr_source_b(0)) + self.assertRaises(RuntimeError, + lambda: gr.glfsr_source_b(33)) + + def test_002_correlation_b(self): + for degree in range(1,11): # Higher degrees take too long to correlate + src = gr.glfsr_source_b(degree, False) + b2f = gr.chunks_to_symbols_bf((-1.0,1.0), 1) + dst = gr.vector_sink_f() + del self.tb # Discard existing top block + self.tb = gr.top_block() + self.tb.connect(src, b2f, dst) + self.tb.run() + self.tb.disconnect_all() + actual_result = dst.data() + R = auto_correlate(actual_result) + self.assertEqual(R[0], float(len(R))) # Auto-correlation peak at origin + for i in range(len(R)-1): + self.assertEqual(R[i+1], -1.0) # Auto-correlation minimum everywhere else + + def test_003_make_f(self): + src = gr.glfsr_source_f(16) + self.assertEquals(src.mask(), 0x8016) + self.assertEquals(src.period(), 2**16-1) + + def test_004_degree_f(self): + self.assertRaises(RuntimeError, + lambda: gr.glfsr_source_f(0)) + self.assertRaises(RuntimeError, + lambda: gr.glfsr_source_f(33)) + def test_005_correlation_f(self): + for degree in range(1,11): # Higher degrees take too long to correlate + src = gr.glfsr_source_f(degree, False) + dst = gr.vector_sink_f() + del self.tb # Discard existing top block + self.tb = gr.top_block() + self.tb.connect(src, dst) + self.tb.run() + + actual_result = dst.data() + R = auto_correlate(actual_result) + self.assertEqual(R[0], float(len(R))) # Auto-correlation peak at origin + for i in range(len(R)-1): + self.assertEqual(R[i+1], -1.0) # Auto-correlation minimum everywhere else + +def auto_correlate(data): + l = len(data) + R = [0,]*l + for lag in range(l): + for i in range(l): + R[lag] += data[i]*data[i-lag] + return R + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_goertzel.py b/gnuradio-core/src/python/gnuradio/gr/qa_goertzel.py index 7371677d..d5dc595c 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_goertzel.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_goertzel.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ from math import pi, cos class test_goertzel(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph() + self.tb = gr.top_block() def tearDown(self): - self.fg = None + self.tb = None def make_tone_data(self, rate, freq): return [cos(2*pi*x*freq/rate) for x in range(rate)] @@ -38,8 +38,8 @@ class test_goertzel(gr_unittest.TestCase): src = gr.vector_source_f(src_data, False) dft = gr.goertzel_fc(rate, rate, freq) dst = gr.vector_sink_c() - self.fg.connect(src, dft, dst) - self.fg.run() + self.tb.connect(src, dft, dst) + self.tb.run() return dst.data() def test_001(self): # Measure single tone magnitude @@ -49,7 +49,7 @@ class test_goertzel(gr_unittest.TestCase): src_data = self.make_tone_data(rate, freq) expected_result = 0.5 actual_result = abs(self.transform(src_data, rate, bin)[0]) - self.assertAlmostEqual(expected_result, actual_result, places=5) + self.assertAlmostEqual(expected_result, actual_result, places=4) def test_002(self): # Measure off frequency magnitude rate = 8000 @@ -58,7 +58,7 @@ class test_goertzel(gr_unittest.TestCase): src_data = self.make_tone_data(rate, freq) expected_result = 0.0 actual_result = abs(self.transform(src_data, rate, bin)[0]) - self.assertAlmostEqual(expected_result, actual_result, places=5) + self.assertAlmostEqual(expected_result, actual_result, places=4) if __name__ == '__main__': gr_unittest.main() diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_head.py b/gnuradio-core/src/python/gnuradio/gr/qa_head.py index aae8328f..b7a60597 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_head.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_head.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import gr, gr_unittest class test_head (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_head (self): src_data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) @@ -36,9 +36,9 @@ class test_head (gr_unittest.TestCase): src1 = gr.vector_source_i (src_data) op = gr.head (gr.sizeof_int, 4) dst1 = gr.vector_sink_i () - self.fg.connect (src1, op) - self.fg.connect (op, dst1) - self.fg.run () + self.tb.connect (src1, op) + self.tb.connect (op, dst1) + self.tb.run () dst_data = dst1.data () self.assertEqual (expected_result, dst_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py b/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py new file mode 100755 index 00000000..cc336a4d --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py @@ -0,0 +1,369 @@ +#!/usr/bin/env python + +from gnuradio import gr, gr_unittest + +class test_hier_block2(gr_unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_001_make(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + self.assertEqual("test_block", hblock.name()) + self.assertEqual(1, hblock.input_signature().max_streams()) + self.assertEqual(1, hblock.output_signature().min_streams()) + self.assertEqual(1, hblock.output_signature().max_streams()) + self.assertEqual(gr.sizeof_int, hblock.output_signature().sizeof_stream_item(0)) + + def test_002_connect_input(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(hblock, nop1) + + def test_004_connect_output(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(nop1, hblock) + + def test_005_connect_output_in_use(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + nop2 = gr.nop(gr.sizeof_int) + hblock.connect(nop1, hblock) + self.assertRaises(ValueError, + lambda: hblock.connect(nop2, hblock)) + + def test_006_connect_invalid_src_port_neg(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + self.assertRaises(ValueError, + lambda: hblock.connect((hblock, -1), nop1)) + + def test_005_connect_invalid_src_port_exceeds(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + self.assertRaises(ValueError, + lambda: hblock.connect((hblock, 1), nop1)) + + def test_007_connect_invalid_dst_port_neg(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + nop2 = gr.nop(gr.sizeof_int) + self.assertRaises(ValueError, + lambda: hblock.connect(nop1, (nop2, -1))) + + def test_008_connect_invalid_dst_port_exceeds(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.null_sink(gr.sizeof_int) + nop2 = gr.null_sink(gr.sizeof_int) + self.assertRaises(ValueError, + lambda: hblock.connect(nop1, (nop2, 1))) + + def test_009_check_topology(self): + hblock = gr.top_block("test_block") + hblock.check_topology(0, 0) + + def test_010_run(self): + expected = (1.0, 2.0, 3.0, 4.0) + hblock = gr.top_block("test_block") + src = gr.vector_source_f(expected, False) + sink1 = gr.vector_sink_f() + sink2 = gr.vector_sink_f() + hblock.connect(src, sink1) + hblock.connect(src, sink2) + hblock.run() + actual1 = sink1.data() + actual2 = sink2.data() + self.assertEquals(expected, actual1) + self.assertEquals(expected, actual2) + + def test_012_disconnect_input(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(hblock, nop1) + hblock.disconnect(hblock, nop1) + + def test_013_disconnect_input_not_connected(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + nop2 = gr.nop(gr.sizeof_int) + hblock.connect(hblock, nop1) + self.assertRaises(ValueError, + lambda: hblock.disconnect(hblock, nop2)) + + def test_014_disconnect_input_neg(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(hblock, nop1) + self.assertRaises(ValueError, + lambda: hblock.disconnect((hblock, -1), nop1)) + + def test_015_disconnect_input_exceeds(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(hblock, nop1) + self.assertRaises(ValueError, + lambda: hblock.disconnect((hblock, 1), nop1)) + + def test_016_disconnect_output(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(nop1, hblock) + hblock.disconnect(nop1, hblock) + + def test_017_disconnect_output_not_connected(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + nop2 = gr.nop(gr.sizeof_int) + hblock.connect(nop1, hblock) + self.assertRaises(ValueError, + lambda: hblock.disconnect(nop2, hblock)) + + def test_018_disconnect_output_neg(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(hblock, nop1) + self.assertRaises(ValueError, + lambda: hblock.disconnect(nop1, (hblock, -1))) + + def test_019_disconnect_output_exceeds(self): + hblock = gr.hier_block2("test_block", + gr.io_signature(1,1,gr.sizeof_int), + gr.io_signature(1,1,gr.sizeof_int)) + nop1 = gr.nop(gr.sizeof_int) + hblock.connect(nop1, hblock) + self.assertRaises(ValueError, + lambda: hblock.disconnect(nop1, (hblock, 1))) + + def test_020_run(self): + hblock = gr.top_block("test_block") + data = (1.0, 2.0, 3.0, 4.0) + src = gr.vector_source_f(data, False) + dst = gr.vector_sink_f() + hblock.connect(src, dst) + hblock.run() + self.assertEquals(data, dst.data()) + + def test_021_connect_single(self): + hblock = gr.top_block("test_block") + blk = gr.hier_block2("block", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0)) + hblock.connect(blk) + + def test_022_connect_single_with_ports(self): + hblock = gr.top_block("test_block") + blk = gr.hier_block2("block", + gr.io_signature(1, 1, 1), + gr.io_signature(1, 1, 1)) + self.assertRaises(ValueError, + lambda: hblock.connect(blk)) + + def test_023_connect_single_twice(self): + hblock = gr.top_block("test_block") + blk = gr.hier_block2("block", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0)) + hblock.connect(blk) + self.assertRaises(ValueError, + lambda: hblock.connect(blk)) + + def test_024_disconnect_single(self): + hblock = gr.top_block("test_block") + blk = gr.hier_block2("block", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0)) + hblock.connect(blk) + hblock.disconnect(blk) + + def test_025_disconnect_single_not_connected(self): + hblock = gr.top_block("test_block") + blk = gr.hier_block2("block", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0)) + self.assertRaises(ValueError, + lambda: hblock.disconnect(blk)) + + def test_026_run_single(self): + expected_data = (1.0,) + tb = gr.top_block("top_block") + hb = gr.hier_block2("block", + gr.io_signature(0, 0, 0), + gr.io_signature(0, 0, 0)) + src = gr.vector_source_f(expected_data) + dst = gr.vector_sink_f() + hb.connect(src, dst) + tb.connect(hb) + tb.run() + self.assertEquals(expected_data, dst.data()) + + def test_027a_internally_unconnected_input(self): + tb = gr.top_block() + hb = gr.hier_block2("block", + gr.io_signature(1, 1, 1), + gr.io_signature(1, 1, 1)) + hsrc = gr.vector_source_b([1,]) + hb.connect(hsrc, hb) # wire output internally + src = gr.vector_source_b([1, ]) + dst = gr.vector_sink_b() + tb.connect(src, hb, dst) # hb's input is not connected internally + self.assertRaises(RuntimeError, + lambda: tb.run()) + + def test_027b_internally_unconnected_output(self): + tb = gr.top_block() + + hb = gr.hier_block2("block", + gr.io_signature(1, 1, 1), + gr.io_signature(1, 1, 1)) + hdst = gr.vector_sink_b() + hb.connect(hb, hdst) # wire input internally + src = gr.vector_source_b([1, ]) + dst = gr.vector_sink_b() + tb.connect(src, hb, dst) # hb's output is not connected internally + self.assertRaises(RuntimeError, + lambda: tb.run()) + + def test_027c_fully_unconnected_output(self): + tb = gr.top_block() + hb = gr.hier_block2("block", + gr.io_signature(1, 1, 1), + gr.io_signature(1, 1, 1)) + hsrc = gr.vector_sink_b() + hb.connect(hb, hsrc) # wire input internally + src = gr.vector_source_b([1, ]) + dst = gr.vector_sink_b() + tb.connect(src, hb) # hb's output is not connected internally or externally + self.assertRaises(RuntimeError, + lambda: tb.run()) + + def test_027d_fully_unconnected_input(self): + tb = gr.top_block() + hb = gr.hier_block2("block", + gr.io_signature(1, 1, 1), + gr.io_signature(1, 1, 1)) + hdst = gr.vector_source_b([1,]) + hb.connect(hdst, hb) # wire output internally + dst = gr.vector_sink_b() + tb.connect(hb, dst) # hb's input is not connected internally or externally + self.assertRaises(RuntimeError, + lambda: tb.run()) + + def test_028_singleton_reconfigure(self): + tb = gr.top_block() + hb = gr.hier_block2("block", + gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) + src = gr.vector_source_b([1, ]) + dst = gr.vector_sink_b() + hb.connect(src, dst) + tb.connect(hb) # Singleton connect + tb.lock() + tb.disconnect_all() + tb.connect(src, dst) + tb.unlock() + + def test_029_singleton_disconnect(self): + tb = gr.top_block() + src = gr.vector_source_b([1, ]) + dst = gr.vector_sink_b() + tb.connect(src, dst) + tb.disconnect(src) # Singleton disconnect + tb.connect(src, dst) + tb.run() + self.assertEquals(dst.data(), (1,)) + + def test_030_nested_input(self): + tb = gr.top_block() + src = gr.vector_source_b([1,]) + hb1 = gr.hier_block2("hb1", + gr.io_signature(1, 1, gr.sizeof_char), + gr.io_signature(0, 0, 0)) + hb2 = gr.hier_block2("hb2", + gr.io_signature(1, 1, gr.sizeof_char), + gr.io_signature(0, 0, 0)) + dst = gr.vector_sink_b() + tb.connect(src, hb1) + hb1.connect(hb1, hb2) + hb2.connect(hb2, gr.kludge_copy(gr.sizeof_char), dst) + tb.run() + self.assertEquals(dst.data(), (1,)) + + def test_031_multiple_internal_inputs(self): + tb = gr.top_block() + src = gr.vector_source_f([1.0,]) + hb = gr.hier_block2("hb", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(1, 1, gr.sizeof_float)) + m1 = gr.multiply_const_ff(1.0) + m2 = gr.multiply_const_ff(2.0) + add = gr.add_ff() + hb.connect(hb, m1) # m1 is connected to hb external input #0 + hb.connect(hb, m2) # m2 is also connected to hb external input #0 + hb.connect(m1, (add, 0)) + hb.connect(m2, (add, 1)) + hb.connect(add, hb) # add is connected to hb external output #0 + dst = gr.vector_sink_f() + tb.connect(src, hb, dst) + tb.run() + self.assertEquals(dst.data(), (3.0,)) + + def test_032_nested_multiple_internal_inputs(self): + tb = gr.top_block() + src = gr.vector_source_f([1.0,]) + hb = gr.hier_block2("hb", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(1, 1, gr.sizeof_float)) + hb2 = gr.hier_block2("hb", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(1, 1, gr.sizeof_float)) + + m1 = gr.multiply_const_ff(1.0) + m2 = gr.multiply_const_ff(2.0) + add = gr.add_ff() + hb2.connect(hb2, m1) # m1 is connected to hb2 external input #0 + hb2.connect(hb2, m2) # m2 is also connected to hb2 external input #0 + hb2.connect(m1, (add, 0)) + hb2.connect(m2, (add, 1)) + hb2.connect(add, hb2) # add is connected to hb2 external output #0 + hb.connect(hb, hb2, hb) # hb as hb2 as nested internal block + dst = gr.vector_sink_f() + tb.connect(src, hb, dst) + tb.run() + self.assertEquals(dst.data(), (3.0,)) + + +if __name__ == "__main__": + gr_unittest.main() diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_hilbert.py b/gnuradio-core/src/python/gnuradio/gr/qa_hilbert.py index a06ae154..817ba940 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_hilbert.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_hilbert.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,13 +26,13 @@ import math class test_sig_source (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_hilbert (self): - fg = self.fg + tb = self.tb ntaps = 51 sampling_freq = 100 @@ -105,10 +105,10 @@ class test_sig_source (gr_unittest.TestCase): head = gr.head (gr.sizeof_float, int (ntaps + sampling_freq * 0.10)) hilb = gr.hilbert_fc (ntaps) dst1 = gr.vector_sink_c () - fg.connect (src1, head) - fg.connect (head, hilb) - fg.connect (hilb, dst1) - fg.run () + tb.connect (src1, head) + tb.connect (head, hilb) + tb.connect (hilb, dst1) + tb.run () dst_data = dst1.data () self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 5) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_iir.py b/gnuradio-core/src/python/gnuradio/gr/qa_iir.py index 2131d8c7..83328507 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_iir.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_iir.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import gr, gr_unittest class test_iir (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_iir_direct_001 (self): src_data = (1, 2, 3, 4, 5, 6, 7, 8) @@ -38,9 +38,9 @@ class test_iir (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.iir_filter_ffd (fftaps, fbtaps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) @@ -52,9 +52,9 @@ class test_iir (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.iir_filter_ffd (fftaps, fbtaps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) @@ -66,9 +66,9 @@ class test_iir (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.iir_filter_ffd (fftaps, fbtaps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) @@ -80,9 +80,9 @@ class test_iir (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.iir_filter_ffd (fftaps, fbtaps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) @@ -94,18 +94,13 @@ class test_iir (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.iir_filter_ffd (fftaps, fbtaps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) def test_iir_direct_006 (self): - fftaps = (2, 11, 0) - fbtaps = (0, -1) - self.assertRaises ((RuntimeError, ValueError), gr.iir_filter_ffd, fftaps, fbtaps) - - def test_iir_direct_007 (self): src_data = (1, 2, 3, 4, 5, 6, 7, 8) expected_result = (2, 13, 21, 59, 58, 186, 68, 583) fftaps = (2, 1) @@ -116,19 +111,48 @@ class test_iir (gr_unittest.TestCase): fbtaps = (0, -1, 3) op.set_taps (fftaps, fbtaps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) - def test_iir_direct_008 (self): + def test_iir_direct_007 (self): + src_data = (1, 2, 3, 4, 5, 6, 7, 8) + expected_result = (2,2,5,5,8,8,11,11) fftaps = (2, 1) fbtaps = (0, -1) + src = gr.vector_source_f (src_data) op = gr.iir_filter_ffd (fftaps, fbtaps) - fftaps = (2, 11) - fbtaps = (0, -1, 3) - self.assertRaises ((RuntimeError, ValueError), op.set_taps, fftaps, fbtaps) + fftaps = (2,0,1) + fbtaps = (0, -1) + op.set_taps (fftaps, fbtaps) + dst = gr.vector_sink_f () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () + result_data = dst.data () + self.assertFloatTuplesAlmostEqual (expected_result, result_data) + + def test_iir_direct_008 (self): + src_data = (1, 2, 3, 4, 5, 6, 7, 8) + expected_result = (2,4,4,10,18,14,26,56) + fftaps = (2,) + fbtaps = (0, 1) + src = gr.vector_source_f (src_data) + op = gr.iir_filter_ffd (fftaps, fbtaps) + fftaps_data = (1) + fbtaps = (0,0, -1,3) + op.set_taps (fftaps, fbtaps) + dst = gr.vector_sink_f () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () + result_data = dst.data () + self.assertFloatTuplesAlmostEqual (expected_result, result_data) + + + if __name__ == '__main__': gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_interleave.py b/gnuradio-core/src/python/gnuradio/gr/qa_interleave.py index ee896c62..3e0b6c5f 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_interleave.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_interleave.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import math class test_interleave (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_int_001 (self): lenx = 64 @@ -40,12 +40,12 @@ class test_interleave (gr_unittest.TestCase): op = gr.interleave (gr.sizeof_float) dst = gr.vector_sink_f () - self.fg.connect (src0, (op, 0)) - self.fg.connect (src1, (op, 1)) - self.fg.connect (src2, (op, 2)) - self.fg.connect (src3, (op, 3)) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src0, (op, 0)) + self.tb.connect (src1, (op, 1)) + self.tb.connect (src2, (op, 2)) + self.tb.connect (src3, (op, 3)) + self.tb.connect (op, dst) + self.tb.run () expected_result = tuple (range (lenx)) result_data = dst.data () self.assertFloatTuplesAlmostEqual (expected_result, result_data) @@ -59,12 +59,12 @@ class test_interleave (gr_unittest.TestCase): dst2 = gr.vector_sink_f () dst3 = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect ((op, 0), dst0) - self.fg.connect ((op, 1), dst1) - self.fg.connect ((op, 2), dst2) - self.fg.connect ((op, 3), dst3) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect ((op, 0), dst0) + self.tb.connect ((op, 1), dst1) + self.tb.connect ((op, 2), dst2) + self.tb.connect ((op, 3), dst3) + self.tb.run () expected_result0 = tuple (range (0, lenx, 4)) expected_result1 = tuple (range (1, lenx, 4)) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_interp_fir_filter.py b/gnuradio-core/src/python/gnuradio/gr/qa_interp_fir_filter.py index b459b3e8..ea326ce4 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_interp_fir_filter.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_interp_fir_filter.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import math class test_interp_fir_filter (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_fff (self): taps = [1, 10, 100, 1000, 10000] @@ -41,9 +41,9 @@ class test_interp_fir_filter (gr_unittest.TestCase): src = gr.vector_source_f (src_data) op = gr.interp_fir_filter_fff (interpolation, taps) dst = gr.vector_sink_f () - self.fg.connect (src, op) - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (src, op) + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () L = min(len(result_data), len(expected_result)) self.assertEqual (expected_result[0:L], result_data[0:L]) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_kludge_copy.py b/gnuradio-core/src/python/gnuradio/gr/qa_kludge_copy.py index 5c4acb0d..cc25d180 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_kludge_copy.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_kludge_copy.py @@ -28,13 +28,13 @@ import random class test_kludge_copy(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph() + self.tb = gr.top_block() self.rng = random.Random() self.rng.seed(0) def tearDown(self): - self.fg = None - self.rng = None + del self.tb + del self.rng def make_random_int_tuple(self, L): result = [] @@ -49,11 +49,11 @@ class test_kludge_copy(gr_unittest.TestCase): src0 = gr.vector_source_i(src0_data) op = gr.kludge_copy(gr.sizeof_int) dst0 = gr.vector_sink_i() - self.fg.connect(src0, op, dst0) - self.fg.run() + self.tb.connect(src0, op, dst0) + self.tb.run() dst0_data = dst0.data() self.assertEqual(src0_data, dst0_data) - + def test_002(self): # 2 input streams; 2 output streams src0_data = self.make_random_int_tuple(16000) @@ -63,15 +63,17 @@ class test_kludge_copy(gr_unittest.TestCase): op = gr.kludge_copy(gr.sizeof_int) dst0 = gr.vector_sink_i() dst1 = gr.vector_sink_i() - self.fg.connect(src0, (op, 0), dst0) - self.fg.connect(src1, (op, 1), dst1) - self.fg.run() + self.tb.connect(src0, (op, 0), dst0) + self.tb.connect(src1, (op, 1), dst1) + self.tb.run() dst0_data = dst0.data() dst1_data = dst1.data() self.assertEqual(src0_data, dst0_data) self.assertEqual(src1_data, dst1_data) - - def test_003(self): + + # Note: this is disabled due to triggering bug in ticket:181 + # It only occurs with new top block code + def xtest_003(self): # number of input streams != number of output streams src0_data = self.make_random_int_tuple(16000) src1_data = self.make_random_int_tuple(16000) @@ -80,9 +82,9 @@ class test_kludge_copy(gr_unittest.TestCase): op = gr.kludge_copy(gr.sizeof_int) dst0 = gr.vector_sink_i() dst1 = gr.vector_sink_i() - self.fg.connect(src0, (op, 0), dst0) - self.fg.connect(src1, (op, 1)) - self.assertRaises(ValueError, self.fg.run) + self.tb.connect(src0, (op, 0), dst0) + self.tb.connect(src1, (op, 1)) + self.assertRaises(ValueError, self.tb.run) if __name__ == '__main__': gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_kludged_imports.py b/gnuradio-core/src/python/gnuradio/gr/qa_kludged_imports.py index c2f1698c..91ddf7cd 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_kludged_imports.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_kludged_imports.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -32,7 +32,7 @@ class test_head (gr_unittest.TestCase): def test_blks_import(self): # make sure that this somewhat magic import works - from gnuradio import blks + from gnuradio import blks2 def test_gru_import(self): # make sure that this somewhat magic import works diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_max.py b/gnuradio-core/src/python/gnuradio/gr/qa_max.py new file mode 100755 index 00000000..0171c93d --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_max.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest +import math + + +class test_sig_source (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + + def tearDown (self): + self.tb = None + + + def test_001(self): + + src_data = (0,0.2,-0.3,0,12,0) + expected_result = (float(max(src_data)), ) + + src = gr.vector_source_f(src_data) + s2v = gr.stream_to_vector(gr.sizeof_float, len(src_data)) + op = gr.max_ff( len(src_data) ) + dst = gr.vector_sink_f() + + + self.tb.connect(src, s2v, op, dst) + self.tb.run() + result_data = dst.data() + self.assertEqual(expected_result, result_data) + + def test_002(self): + + src_data=(-100,-99,-98,-97,-96,-1) + expected_result = (float(max(src_data)), ) + + src = gr.vector_source_f(src_data) + s2v = gr.stream_to_vector(gr.sizeof_float, len(src_data)) + op = gr.max_ff( len(src_data) ) + dst = gr.vector_sink_f() + + self.tb.connect(src, s2v, op, dst) + self.tb.run() + result_data = dst.data() + self.assertEqual(expected_result, result_data) + +if __name__ == '__main__': + gr_unittest.main () + diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_message.py b/gnuradio-core/src/python/gnuradio/gr/qa_message.py index 9175708e..6e85083b 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_message.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_message.py @@ -21,7 +21,6 @@ # from gnuradio import gr, gr_unittest -import qa_basic_flow_graph def all_counts (): @@ -35,11 +34,9 @@ def all_counts (): class test_message (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph() self.msgq = gr.msg_queue () def tearDown (self): - self.fg = None self.msgq = None def leak_check (self, fct): @@ -96,20 +93,22 @@ class test_message (gr_unittest.TestCase): input_data = (0,1,2,3,4,5,6,7,8,9) src = gr.vector_source_b(input_data) dst = gr.vector_sink_b() - self.fg.connect(src, dst) - self.fg.run() + tb = gr.top_block() + tb.connect(src, dst) + tb.run() self.assertEquals(input_data, dst.data()) def test_301(self): src = gr.message_source(gr.sizeof_char) dst = gr.vector_sink_b() - self.fg.connect(src, dst) + tb = gr.top_block() + tb.connect(src, dst) src.msgq().insert_tail(gr.message_from_string('01234')) src.msgq().insert_tail(gr.message_from_string('5')) src.msgq().insert_tail(gr.message_from_string('')) src.msgq().insert_tail(gr.message_from_string('6789')) src.msgq().insert_tail(gr.message(1)) # send EOF - self.fg.run() + tb.run() self.assertEquals(tuple(map(ord, '0123456789')), dst.data()) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_mute.py b/gnuradio-core/src/python/gnuradio/gr/qa_mute.py index 011d6cb6..646f495c 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_mute.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_mute.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,38 +25,38 @@ from gnuradio import gr, gr_unittest class test_head (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def help_ii (self, src_data, exp_data, op): for s in zip (range (len (src_data)), src_data): src = gr.vector_source_i (s[1]) - self.fg.connect (src, (op, s[0])) + self.tb.connect (src, (op, s[0])) dst = gr.vector_sink_i () - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (exp_data, result_data) def help_ff (self, src_data, exp_data, op): for s in zip (range (len (src_data)), src_data): src = gr.vector_source_f (s[1]) - self.fg.connect (src, (op, s[0])) + self.tb.connect (src, (op, s[0])) dst = gr.vector_sink_f () - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (exp_data, result_data) def help_cc (self, src_data, exp_data, op): for s in zip (range (len (src_data)), src_data): src = gr.vector_source_c (s[1]) - self.fg.connect (src, (op, s[0])) + self.tb.connect (src, (op, s[0])) dst = gr.vector_sink_c () - self.fg.connect (op, dst) - self.fg.run () + self.tb.connect (op, dst) + self.tb.run () result_data = dst.data () self.assertEqual (exp_data, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_nlog10.py b/gnuradio-core/src/python/gnuradio/gr/qa_nlog10.py index d24cd2bf..4dca67b2 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_nlog10.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_nlog10.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import gr, gr_unittest class test_single_pole_iir(gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001(self): src_data = (-10, 0, 10, 100, 1000, 10000, 100000) @@ -36,8 +36,8 @@ class test_single_pole_iir(gr_unittest.TestCase): src = gr.vector_source_f(src_data) op = gr.nlog10_ff(10) dst = gr.vector_sink_f() - self.fg.connect (src, op, dst) - self.fg.run() + self.tb.connect (src, op, dst) + self.tb.run() result_data = dst.data() self.assertFloatTuplesAlmostEqual (expected_result, result_data) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_noise.py b/gnuradio-core/src/python/gnuradio/gr/qa_noise.py index 77fb789a..f8ed739a 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_noise.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_noise.py @@ -25,10 +25,10 @@ from gnuradio import gr, gr_unittest class test_noise_source(gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001(self): # Just confirm that we can instantiate a noise source diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_ofdm_insert_preamble.py b/gnuradio-core/src/python/gnuradio/gr/qa_ofdm_insert_preamble.py new file mode 100755 index 00000000..d45560d3 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_ofdm_insert_preamble.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest +from pprint import pprint + +class testing (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + def tearDown (self): + self.tb = None + + def helper(self, v0, v1, fft_length, preamble): + tb = self.tb + src0 = gr.vector_source_c(v0) + src1 = gr.vector_source_b(v1) + + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_length) + + # print "len(v) = %d" % (len(v)) + + op = gr.ofdm_insert_preamble(fft_length, preamble) + + v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_length) + dst0 = gr.vector_sink_c() + dst1 = gr.vector_sink_b() + + tb.connect(src0, s2v, (op, 0)) + tb.connect(src1, (op, 1)) + tb.connect((op, 0), v2s, dst0) + tb.connect((op, 1), dst1) + + tb.run() + r0 = dst0.data() + r0v = [] + for i in range(len(r0)//fft_length): + r0v.append(r0[i*fft_length:(i+1)*fft_length]) + + r1 = dst1.data() + self.assertEqual(len(r0v), len(r1)) + return (r1, r0v) + + def check_match(self, actual, expected_list): + lst = [] + map(lambda x: lst.append(x), expected_list) + self.assertEqual(actual, lst) + + + # ---------------------------------------------------------------- + + def test_000(self): + # no preamble, 1 symbol payloads + + preamble = () + fft_length = 8 + npayloads = 8 + v = [] + p = [] + for i in range(npayloads): + t = fft_length*[(i + i*1j)] + p.append(tuple(t)) + v += t + + p = tuple(p) + + r = self.helper(v, npayloads*[1], fft_length, preamble) + # pprint(r) + + self.assertEqual(r[0], tuple(npayloads*[1])) + self.check_match(r[1], (p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7])) + + + def test_001(self): + # 1 symbol preamble, 1 symbol payloads + preamble = ((100, 101, 102, 103, 104, 105, 106, 107),) + p0 = preamble[0] + fft_length = 8 + npayloads = 8 + v = [] + p = [] + for i in range(npayloads): + t = fft_length*[(i + i*1j)] + p.append(tuple(t)) + v += t + + + r = self.helper(v, npayloads*[1], fft_length, preamble) + + self.assertEqual(r[0], tuple(npayloads*[1, 0])) + self.check_match(r[1], (p0, p[0], + p0, p[1], + p0, p[2], + p0, p[3], + p0, p[4], + p0, p[5], + p0, p[6], + p0, p[7])) + + def test_002(self): + # 2 symbol preamble, 1 symbol payloads + preamble = ((100, 101, 102, 103, 104, 105, 106, 107), + (200, 201, 202, 203, 204, 205, 206, 207)) + p0 = preamble[0] + p1 = preamble[1] + + fft_length = 8 + npayloads = 8 + v = [] + p = [] + for i in range(npayloads): + t = fft_length*[(i + i*1j)] + p.append(tuple(t)) + v += t + + r = self.helper(v, npayloads*[1], fft_length, preamble) + + self.assertEqual(r[0], tuple(npayloads*[1, 0, 0])) + self.check_match(r[1], (p0, p1, p[0], + p0, p1, p[1], + p0, p1, p[2], + p0, p1, p[3], + p0, p1, p[4], + p0, p1, p[5], + p0, p1, p[6], + p0, p1, p[7])) + + + def xtest_003_preamble(self): + # 2 symbol preamble, 2 symbol payloads + preamble = ((100, 101, 102, 103, 104, 105, 106, 107), + (200, 201, 202, 203, 204, 205, 206, 207)) + p0 = preamble[0] + p1 = preamble[1] + + fft_length = 8 + npayloads = 8 + v = [] + p = [] + for i in range(npayloads * 2): + t = fft_length*[(i + i*1j)] + p.append(tuple(t)) + v += t + + r = self.helper(v, npayloads*[1, 0], fft_length, preamble) + + self.assertEqual(r[0], tuple(npayloads*[1, 0, 0, 0])) + self.check_match(r[1], (p0, p1, p[0], p[1], + p0, p1, p[2], p[3], + p0, p1, p[4], p[5], + p0, p1, p[6], p[7], + p0, p1, p[8], p[9], + p0, p1, p[10], p[11], + p0, p1, p[12], p[13], + p0, p1, p[14], p[15])) + + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_packed_to_unpacked.py b/gnuradio-core/src/python/gnuradio/gr/qa_packed_to_unpacked.py index d262eee3..b1b3a971 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_packed_to_unpacked.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_packed_to_unpacked.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import random class test_packing(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown(self): - self.fg = None + self.tb = None def test_001(self): """ @@ -39,12 +39,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (1,0,0,0,0,0,0,0) src = gr.vector_source_b(src_data,False) op = gr.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -56,12 +56,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (0,0,0,0,0,0,0, 1) src = gr.vector_source_b(src_data,False) op = gr.packed_to_unpacked_bb(1, gr.GR_LSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -73,12 +73,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (4, 2) src = gr.vector_source_b(src_data,False) op = gr.packed_to_unpacked_bb(3, gr.GR_LSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -90,12 +90,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (0, 4) src = gr.vector_source_b(src_data,False) op = gr.packed_to_unpacked_bb(3, gr.GR_MSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -107,12 +107,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (0x82,0x5a) src = gr.vector_source_b(src_data,False) op = gr.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -124,12 +124,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (0x82,0x5a) src = gr.vector_source_b(src_data,False) op = gr.unpacked_to_packed_bb(1, gr.GR_LSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -142,12 +142,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (0x11,) src = gr.vector_source_b(src_data,False) op = gr.unpacked_to_packed_bb(3, gr.GR_LSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -159,12 +159,12 @@ class test_packing(gr_unittest.TestCase): expected_results = (0x11,) src = gr.vector_source_b(src_data,False) op = gr.unpacked_to_packed_bb(3, gr.GR_MSB_FIRST) - self.fg.connect(src, op) + self.tb.connect(src, op) dst = gr.vector_sink_b() - self.fg.connect(op, dst) + self.tb.connect(op, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) @@ -183,12 +183,12 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_b(tuple(src_data),False) op1 = gr.packed_to_unpacked_bb(3, gr.GR_MSB_FIRST) op2 = gr.unpacked_to_packed_bb(3, gr.GR_MSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_b() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results[0:201], dst.data()) @@ -206,11 +206,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_b(tuple(src_data),False) op1 = gr.packed_to_unpacked_bb(7, gr.GR_MSB_FIRST) op2 = gr.unpacked_to_packed_bb(7, gr.GR_MSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_b() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results[0:201], dst.data()) def test_011(self): @@ -227,11 +227,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_b(tuple(src_data),False) op1 = gr.packed_to_unpacked_bb(7, gr.GR_LSB_FIRST) op2 = gr.unpacked_to_packed_bb(7, gr.GR_LSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_b() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results[0:201], dst.data()) @@ -250,11 +250,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_s(tuple(src_data),False) op1 = gr.packed_to_unpacked_ss(1, gr.GR_MSB_FIRST) op2 = gr.unpacked_to_packed_ss(1, gr.GR_MSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_s() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_100b(self): @@ -270,11 +270,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_s(tuple(src_data),False) op1 = gr.packed_to_unpacked_ss(1, gr.GR_LSB_FIRST) op2 = gr.unpacked_to_packed_ss(1, gr.GR_LSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_s() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_101a(self): @@ -290,11 +290,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_s(tuple(src_data),False) op1 = gr.packed_to_unpacked_ss(8, gr.GR_MSB_FIRST) op2 = gr.unpacked_to_packed_ss(8, gr.GR_MSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_s() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_101b(self): @@ -310,11 +310,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_s(tuple(src_data),False) op1 = gr.packed_to_unpacked_ss(8, gr.GR_LSB_FIRST) op2 = gr.unpacked_to_packed_ss(8, gr.GR_LSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_s() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) # tests on ints @@ -332,11 +332,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_i(tuple(src_data),False) op1 = gr.packed_to_unpacked_ii(1, gr.GR_MSB_FIRST) op2 = gr.unpacked_to_packed_ii(1, gr.GR_MSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_i() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_200b(self): @@ -352,11 +352,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_i(tuple(src_data),False) op1 = gr.packed_to_unpacked_ii(1, gr.GR_LSB_FIRST) op2 = gr.unpacked_to_packed_ii(1, gr.GR_LSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_i() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_201a(self): @@ -372,11 +372,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_i(tuple(src_data),False) op1 = gr.packed_to_unpacked_ii(8, gr.GR_MSB_FIRST) op2 = gr.unpacked_to_packed_ii(8, gr.GR_MSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_i() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_201b(self): @@ -392,11 +392,11 @@ class test_packing(gr_unittest.TestCase): src = gr.vector_source_i(tuple(src_data),False) op1 = gr.packed_to_unpacked_ii(8, gr.GR_LSB_FIRST) op2 = gr.unpacked_to_packed_ii(8, gr.GR_LSB_FIRST) - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) dst = gr.vector_sink_i() - self.fg.connect(op2, dst) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pipe_fittings.py b/gnuradio-core/src/python/gnuradio/gr/qa_pipe_fittings.py index a97d9d88..533f4f05 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_pipe_fittings.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_pipe_fittings.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -40,10 +40,10 @@ def calc_expected_result(src_data, n): class test_pipe_fittings(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown(self): - self.fg = None + self.tb = None def test_001(self): """ @@ -57,15 +57,15 @@ class test_pipe_fittings(gr_unittest.TestCase): #print "expected results: ", expected_results src = gr.vector_source_i(src_data) op = gr.stream_to_streams(gr.sizeof_int, n) - self.fg.connect(src, op) + self.tb.connect(src, op) dsts = [] for i in range(n): dst = gr.vector_sink_i() - self.fg.connect((op, i), (dst, 0)) + self.tb.connect((op, i), (dst, 0)) dsts.append(dst) - self.fg.run() + self.tb.run() for d in range(n): self.assertEqual(expected_results[d], dsts[d].data()) @@ -84,12 +84,12 @@ class test_pipe_fittings(gr_unittest.TestCase): op2 = gr.streams_to_stream(gr.sizeof_int, n) dst = gr.vector_sink_i() - self.fg.connect(src, op1) + self.tb.connect(src, op1) for i in range(n): - self.fg.connect((op1, i), (op2, i)) - self.fg.connect(op2, dst) + self.tb.connect((op1, i), (op2, i)) + self.tb.connect(op2, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_003(self): @@ -107,12 +107,12 @@ class test_pipe_fittings(gr_unittest.TestCase): op3 = gr.vector_to_stream(gr.sizeof_int, n) dst = gr.vector_sink_i() - self.fg.connect(src, op1) + self.tb.connect(src, op1) for i in range(n): - self.fg.connect((op1, i), (op2, i)) - self.fg.connect(op2, op3, dst) + self.tb.connect((op1, i), (op2, i)) + self.tb.connect(op2, op3, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_004(self): @@ -130,12 +130,12 @@ class test_pipe_fittings(gr_unittest.TestCase): op3 = gr.streams_to_stream(gr.sizeof_int, n) dst = gr.vector_sink_i() - self.fg.connect(src, op1, op2) + self.tb.connect(src, op1, op2) for i in range(n): - self.fg.connect((op2, i), (op3, i)) - self.fg.connect(op3, dst) + self.tb.connect((op2, i), (op3, i)) + self.tb.connect(op3, dst) - self.fg.run() + self.tb.run() self.assertEqual(expected_results, dst.data()) if __name__ == '__main__': diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pll_carriertracking.py b/gnuradio-core/src/python/gnuradio/gr/qa_pll_carriertracking.py new file mode 100755 index 00000000..4a109663 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_pll_carriertracking.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# +# Copyright 2004,2007 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 import gr, gr_unittest +import math + +class test_sig_source (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown (self): + self.tb = None + + def test_pll_carriertracking (self): + expected_result = ((1.00000238419+6.47922693275e-09j), + (0.998399555683+0.0565364062786j), + (0.994261980057+0.10695001483j), + (0.98843306303+0.151648163795j), + (0.981579363346+0.191063538194j), + (0.974212288857+0.225630432367j), + (0.966734290123+0.255773901939j), + (0.959442555904+0.281897842884j), + (0.952551782131+0.304379671812j), + (0.946205317974+0.323566257954j), + (0.940503358841+0.339778244495j), + (0.935505151749+0.353307723999j), + (0.931235432625+0.364419162273j), + (0.927616357803+0.373535633087j), + (0.924710214138+0.380666583776j), + (0.922494113445+0.386005342007j), + (0.92093116045+0.389725029469j), + (0.919974088669+0.391981720924j), + (0.919572234154+0.392916500568j), + (0.919680893421+0.392660915852j), + (0.920248389244+0.39133310318j), + (0.921222627163+0.389039844275j), + (0.922548472881+0.385877460241j), + (0.924184799194+0.381939411163j), + (0.926086127758+0.377309292555j), + (0.928135097027+0.37224984169j), + (0.930293083191+0.366814315319j), + (0.932614028454+0.360868781805j), + (0.935064375401+0.354473829269j), + (0.937613248825+0.347684770823j), + (0.940225422382+0.340550601482j), + (0.942881464958+0.33312189579j), + (0.945559620857+0.325443327427j), + (0.948240220547+0.31755694747j), + (0.950899422169+0.309499144554j), + (0.953524827957+0.301307469606j), + (0.956105649471+0.293015599251j), + (0.958630502224+0.284654557705j), + (0.96103054285+0.276443749666j), + (0.963361799717+0.26819768548j), + (0.965623259544+0.259936869144j), + (0.967810571194+0.251679092646j), + (0.969916880131+0.243440493941j), + (0.971936583519+0.235235646367j), + (0.97387367487+0.227080151439j), + (0.975726902485+0.218987599015j), + (0.977494239807+0.210969462991j), + (0.979169845581+0.203035995364j), + (0.980761289597+0.195199295878j), + (0.982269346714+0.187469303608j), + (0.983659446239+0.180052131414j), + (0.984931468964+0.1729388237j), + (0.986136198044+0.165923252702j), + (0.987275123596+0.159012272954j), + (0.988349795341+0.15221118927j), + (0.989354014397+0.145524248481j), + (0.990296065807+0.138957872987j), + (0.991178870201+0.132516458631j), + (0.992005050182+0.126204773784j), + (0.992770493031+0.120025672019j), + (0.993480443954+0.113984130323j), + (0.994139909744+0.108083210886j), + (0.994751393795+0.102326385677j), + (0.995293080807+0.0969148278236j), + (0.995791256428+0.091630294919j), + (0.996252119541+0.0864710733294j), + (0.996678769588+0.0814334899187j), + (0.997069239616+0.0765165910125j), + (0.997423350811+0.071716658771j), + (0.997748315334+0.0670333206654j), + (0.998046517372+0.0624645166099j), + (0.998317599297+0.058009263128j), + (0.998557567596+0.053665690124j), + (0.998775064945+0.0494344644248j), + (0.998971700668+0.0453144386411j), + (0.999140620232+0.0415064357221j), + (0.99927687645+0.0379924885929j), + (0.999400436878+0.0345549099147j), + (0.999511957169+0.0311931278557j), + (0.99961233139+0.0279070306569j), + (0.999694347382+0.0246965941042j), + (0.999765276909+0.0215622838587j), + (0.999826848507+0.0185046810657j), + (0.999880313873+0.0155246723443j), + (0.999920129776+0.0126227736473j), + (0.999949812889+0.00980060640723j), + (0.99997317791+0.00705910893157j), + (0.999990820885+0.00439921114594j), + (0.999998450279+0.00202245195396j), + (0.999998092651-0.00029227725463j), + (0.999994516373-0.00254815118387j), + (0.999988794327-0.00474932929501j), + (0.999977111816-0.00689708162099j), + (0.999957799911-0.00899503659457j), + (0.999936699867-0.0110441967845j), + (0.999914228916-0.0130464555696j), + (0.999889075756-0.0150024276227j), + (0.999855577946-0.0169130507857j), + (0.999821305275-0.0187777336687j), + (0.999786794186-0.0205969288945j)) + + sampling_freq = 10e3 + freq = sampling_freq / 100 + + alpha = 0.1 + beta = alpha * alpha / 4.0 + maxf = 1 + minf = -1 + + src = gr.sig_source_c (sampling_freq, gr.GR_COS_WAVE, freq, 1.0) + pll = gr.pll_carriertracking_cc(alpha, beta, maxf, minf) + head = gr.head (gr.sizeof_gr_complex, int (freq)) + dst = gr.vector_sink_c () + + self.tb.connect (src, pll, head) + self.tb.connect (head, dst) + + self.tb.run () + dst_data = dst.data () + + self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 5) + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pll_freqdet.py b/gnuradio-core/src/python/gnuradio/gr/qa_pll_freqdet.py new file mode 100755 index 00000000..ac9c1844 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_pll_freqdet.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python +# +# Copyright 2004,2007 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 import gr, gr_unittest +import math + +class test_sig_source (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown (self): + self.tb = None + + def test_pll_refout (self): + expected_result = (1.1489677586e-07, + 0.972821060568, + 2.74556447638, + 5.14063078448, + 8.00965819311, + 11.2291393027, + 14.6967068752, + 18.3279143967, + 22.0534772463, + 25.8170093072, + 29.5729107661, + 33.284774699, + 36.923857393, + 40.4367950308, + 43.8452195091, + 47.1363835133, + 50.3011949468, + 53.3336447847, + 56.2301489564, + 58.9891659262, + 61.6107668417, + 64.0962975824, + 66.4481356707, + 68.6694531128, + 70.7640326003, + 72.7048735417, + 74.5033180826, + 76.2012544926, + 77.8019199967, + 79.3088126954, + 80.7255907715, + 82.0560369166, + 83.3039516093, + 84.47312347, + 85.5673411194, + 86.5902864563, + 87.5456117346, + 88.4368565575, + 89.2363918613, + 89.9860999864, + 90.688880206, + 91.3474598523, + 91.9644654653, + 92.5423042123, + 93.0832706099, + 93.5894872344, + 94.0629225081, + 94.5054203452, + 94.9186882929, + 95.3043331057, + 95.6326268597, + 95.9117515522, + 96.1801447842, + 96.437391527, + 96.6831953314, + 96.9173605408, + 97.1397982206, + 97.3504727968, + 97.5493842694, + 97.7366275022, + 97.9123092169, + 98.0766013539, + 98.2297054988, + 98.3408087235, + 98.448722155, + 98.5534457933, + 98.6549322065, + 98.7531932527, + 98.8481459259, + 98.9397487233, + 99.0279067813, + 99.1125074491, + 99.193438076, + 99.2705800823, + 99.3438030304, + 99.3817663128, + 99.3911400359, + 99.4089388448, + 99.4334136894, + 99.4630408207, + 99.4964684305, + 99.5325166512, + 99.5701538394, + 99.6084432158, + 99.6466021546, + 99.6839073198, + 99.7197895289, + 99.7537270313, + 99.7542606398, + 99.7595848672, + 99.7691186729, + 99.7822928746, + 99.7986331535, + 99.8175940432, + 99.838713083, + 99.8614922382, + 99.8854571901, + 99.9101454781, + 99.9351302152, + 99.9599845147) + + sampling_freq = 10e3 + freq = sampling_freq / 100 + + alpha = 0.2 + beta = alpha * alpha / 4.0 + maxf = 1 + minf = -1 + + src = gr.sig_source_c (sampling_freq, gr.GR_COS_WAVE, freq, 1.0) + pll = gr.pll_freqdet_cf(alpha, beta, maxf, minf) + head = gr.head (gr.sizeof_float, int (freq)) + dst = gr.vector_sink_f () + + self.tb.connect (src, pll, head) + self.tb.connect (head, dst) + + self.tb.run () + dst_data = dst.data () + + # convert it from normalized frequency to absolute frequency (Hz) + dst_data = [i*(sampling_freq/(2*math.pi)) for i in dst_data] + + self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 3) + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pll_refout.py b/gnuradio-core/src/python/gnuradio/gr/qa_pll_refout.py new file mode 100755 index 00000000..9cafa61e --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_pll_refout.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +# +# 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 import gr, gr_unittest +import math + +class test_sig_source (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown (self): + self.tb = None + + def test_pll_refout (self): + expected_result = ((1+7.39965699825e-10j), + (0.999980390072+0.00626518437639j), + (0.999828696251+0.0185074284673j), + (0.999342679977+0.0362518876791j), + (0.998255133629+0.0590478181839j), + (0.996255218983+0.0864609107375j), + (0.993005692959+0.118066303432j), + (0.988157629967+0.153442293406j), + (0.981362581253+0.192165210843j), + (0.972283244133+0.233806177974j), + (0.960601866245+0.277928203344j), + (0.946027755737+0.324085712433j), + (0.928303182125+0.371824204922j), + (0.907292485237+0.420500129461j), + (0.882742881775+0.469856351614j), + (0.854515135288+0.519426465034j), + (0.822515428066+0.568742752075j), + (0.786696314812+0.617340147495j), + (0.747057616711+0.664759278297j), + (0.703645646572+0.710551083088j), + (0.656552672386+0.754280209541j), + (0.605915129185+0.795529305935j), + (0.551911592484+0.833902597427j), + (0.494760006666+0.869029641151j), + (0.43471455574+0.900568306446j), + (0.37224894762+0.928132891655j), + (0.30767711997+0.951490819454j), + (0.241136431694+0.970491230488j), + (0.172981828451+0.984925031662j), + (0.103586450219+0.99462044239j), + (0.0333373323083+0.999444127083j), + (-0.0373690575361+0.999301552773j), + (-0.108130030334+0.994136750698j), + (-0.178540825844+0.983932495117j), + (-0.248198583722+0.968709170818j), + (-0.316705673933+0.948523879051j), + (-0.383672952652+0.923469007015j), + (-0.448723316193+0.893670737743j), + (-0.51132196188+0.85938924551j), + (-0.571328520775+0.820721447468j), + (-0.628420114517+0.777874112129j), + (-0.682293117046+0.73107868433j), + (-0.732665538788+0.680588841438j), + (-0.779277384281+0.626679122448j), + (-0.821892917156+0.569642007351j), + (-0.860301196575+0.509786069393j), + (-0.894317150116+0.447433561087j), + (-0.923782229424+0.382918298244j), + (-0.948564887047+0.316582858562j), + (-0.968560874462+0.248776733875j), + (-0.983657121658+0.180051699281j), + (-0.993847966194+0.110753215849j), + (-0.999158322811+0.0410195216537j), + (-0.999585151672-0.0288011860102j), + (-0.995150566101-0.0983632653952j), + (-0.985901713371-0.16732545197j), + (-0.971909940243-0.235353127122j), + (-0.953270018101-0.302119642496j), + (-0.9300994277-0.367307811975j), + (-0.902537107468-0.430612027645j), + (-0.870742559433-0.49173912406j), + (-0.834894418716-0.550410091877j), + (-0.795189499855-0.606360971928j), + (-0.751972675323-0.659194231033j), + (-0.705345034599-0.708864152431j), + (-0.65554022789-0.755160272121j), + (-0.602804005146-0.79788929224j), + (-0.547393083572-0.836875617504j), + (-0.489574223757-0.871961653233j), + (-0.429622590542-0.903008520603j), + (-0.367820799351-0.929896712303j), + (-0.30445766449-0.952525854111j), + (-0.239826664329-0.970815718174j), + (-0.174224823713-0.984705924988j), + (-0.107951194048-0.994156181812j), + (-0.0415063276887-0.999138236046j), + (0.0248276274651-0.999691724777j), + (0.0909758731723-0.995853126049j), + (0.156649470329-0.987654268742j), + (0.221562758088-0.975146114826j), + (0.285434871912-0.958398103714j), + (0.347990810871-0.937497973442j), + (0.408962905407-0.912550985813j), + (0.468091338873-0.883680105209j), + (0.525126338005-0.851024270058j), + (0.57982814312-0.814738810062j), + (0.631968915462-0.77499371767j), + (0.681333422661-0.731973171234j), + (0.727582573891-0.68602013588j), + (0.770699381828-0.637198925018j), + (0.810512244701-0.585721731186j), + (0.846863090992-0.531810998917j), + (0.879608631134-0.475698113441j), + (0.908620357513-0.417623132467j), + (0.933785498142-0.357833325863j), + (0.955007195473-0.296582698822j), + (0.972205162048-0.234130680561j), + (0.985315918922-0.170741200447j), + (0.994293272495-0.106681488454j), + (0.999108314514-0.0422209985554j)) + + sampling_freq = 10e3 + freq = sampling_freq / 100 + + alpha = 0.1 + beta = alpha * alpha / 4.0 + maxf = 1 + minf = -1 + + src = gr.sig_source_c (sampling_freq, gr.GR_COS_WAVE, freq, 1.0) + pll = gr.pll_refout_cc(alpha, beta, maxf, minf) + head = gr.head (gr.sizeof_gr_complex, int (freq)) + dst = gr.vector_sink_c () + + self.tb.connect (src, pll, head) + self.tb.connect (head, dst) + + self.tb.run () + dst_data = dst.data () + + self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 5) + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py b/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py new file mode 100755 index 00000000..01d01bde --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_pn_correlator_cc.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest + +class test_pn_correlator_cc(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block () + + def tearDown(self): + self.tb = None + + def test_000_make(self): + c = gr.pn_correlator_cc(10) + + def test_001_correlate(self): + degree = 10 + length = 2**degree-1 + src = gr.glfsr_source_f(degree) + head = gr.head(gr.sizeof_float, length*length) + f2c = gr.float_to_complex() + corr = gr.pn_correlator_cc(degree) + dst = gr.vector_sink_c() + self.tb.connect(src, head, f2c, corr, dst) + self.tb.run() + data = dst.data() + self.assertEqual(data[-1], (1.0+0j)) + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_rational_resampler.py b/gnuradio-core/src/python/gnuradio/gr/qa_rational_resampler.py index c81d0333..f8bf4b12 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_rational_resampler.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_rational_resampler.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,7 +21,7 @@ # from gnuradio import gr, gr_unittest -from gnuradio import blks +from gnuradio import blks2 import math import random import sys @@ -39,48 +39,48 @@ def random_floats(n): def reference_dec_filter(src_data, decim, taps): - fg = gr.flow_graph() + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.fir_filter_fff(decim, taps) dst = gr.vector_sink_f() - fg.connect(src, op, dst) - fg.run() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() - fg = None + tb = None return result_data def reference_interp_filter(src_data, interp, taps): - fg = gr.flow_graph() + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.interp_fir_filter_fff(interp, taps) dst = gr.vector_sink_f() - fg.connect(src, op, dst) - fg.run() + tb.connect(src, op, dst) + tb.run() result_data = dst.data() - fg = None + tb = None return result_data def reference_interp_dec_filter(src_data, interp, decim, taps): - fg = gr.flow_graph() + tb = gr.top_block() src = gr.vector_source_f(src_data) up = gr.interp_fir_filter_fff(interp, (1,)) dn = gr.fir_filter_fff(decim, taps) dst = gr.vector_sink_f() - fg.connect(src, up, dn, dst) - fg.run() + tb.connect(src, up, dn, dst) + tb.run() result_data = dst.data() - fg = None + tb = None return result_data class test_rational_resampler (gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph() + pass def tearDown(self): - self.fg = None - + pass + # # test the gr.rational_resampler_base primitives... # @@ -91,12 +91,13 @@ class test_rational_resampler (gr_unittest.TestCase): xr = (-936, 1186, -112, 339, -460, -167, 582) expected_result = tuple([float(x) for x in xr]) + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(1, 1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op) - self.fg.connect(op, dst) - self.fg.run() + tb.connect(src, op) + tb.connect(op, dst) + tb.run() result_data = dst.data() self.assertEqual(expected_result, result_data) @@ -107,12 +108,13 @@ class test_rational_resampler (gr_unittest.TestCase): xr = (0,0,0,0,2,20,200,2003,20030,300,3005,30050,500,5007,50070,700,7011,70110,1100,11013,110130,1300,13017,130170,1700.0,17000.0,170000.0) expected_result = tuple([float(x) for x in xr]) + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(interpolation, 1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op) - self.fg.connect(op, dst) - self.fg.run() + tb.connect(src, op) + tb.connect(op, dst) + tb.run() result_data = dst.data() self.assertEqual(expected_result, result_data) @@ -124,12 +126,13 @@ class test_rational_resampler (gr_unittest.TestCase): expected_result = reference_interp_filter(src_data, interpolation, taps) + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(interpolation, 1, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op) - self.fg.connect(op, dst) - self.fg.run() + tb.connect(src, op) + tb.connect(op, dst) + tb.run() result_data = dst.data() L1 = len(result_data) @@ -151,12 +154,13 @@ class test_rational_resampler (gr_unittest.TestCase): expected_result = reference_dec_filter(src_data, decimation, taps) + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(1, decimation, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op) - self.fg.connect(op, dst) - self.fg.run() + tb.connect(src, op) + tb.connect(op, dst) + tb.run() result_data = dst.data() L1 = len(result_data) @@ -184,13 +188,13 @@ class test_rational_resampler (gr_unittest.TestCase): taps = random_floats(ntaps) expected_result = reference_dec_filter(src_data, decim, taps) - fg = gr.flow_graph() + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(1, decim, taps) dst = gr.vector_sink_f() - fg.connect(src, op, dst) - fg.run() - fg = None + tb.connect(src, op, dst) + tb.run() + tb = None result_data = dst.data() L1 = len(result_data) L2 = len(expected_result) @@ -217,13 +221,13 @@ class test_rational_resampler (gr_unittest.TestCase): taps = random_floats(ntaps) expected_result = reference_interp_filter(src_data, interp, taps) - fg = gr.flow_graph() + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(interp, 1, taps) dst = gr.vector_sink_f() - fg.connect(src, op, dst) - fg.run() - fg = None + tb.connect(src, op, dst) + tb.run() + tb = None result_data = dst.data() L1 = len(result_data) L2 = len(expected_result) @@ -246,12 +250,13 @@ class test_rational_resampler (gr_unittest.TestCase): expected_result = reference_interp_dec_filter(src_data, interp, decimation, taps) + tb = gr.top_block() src = gr.vector_source_f(src_data) op = gr.rational_resampler_base_fff(interp, decimation, taps) dst = gr.vector_sink_f() - self.fg.connect(src, op) - self.fg.connect(op, dst) - self.fg.run() + tb.connect(src, op) + tb.connect(op, dst) + tb.run() result_data = dst.data() L1 = len(result_data) @@ -265,7 +270,7 @@ class test_rational_resampler (gr_unittest.TestCase): self.assertEqual(expected_result[1:L], result_data[1:L]) # - # test the blks.rational_resampler_??? primitives... + # test the blks2.rational_resampler_??? primitives... # def test_101_interp(self): @@ -275,16 +280,19 @@ class test_rational_resampler (gr_unittest.TestCase): xr = (0,0,0,0,2,20,200,2003,20030,300,3005,30050,500,5007,50070,700,7011,70110,1100,11013,110130,1300,13017,130170,1700.0,17000.0,170000.0) expected_result = tuple([float(x) for x in xr]) + tb = gr.top_block() src = gr.vector_source_f(src_data) - op = blks.rational_resampler_fff(self.fg, interpolation, 1, taps=taps) + op = blks2.rational_resampler_fff(interpolation, 1, taps=taps) dst = gr.vector_sink_f() - self.fg.connect(src, op) - self.fg.connect(op, dst) - self.fg.run() + tb.connect(src, op) + tb.connect(op, dst) + tb.run() result_data = dst.data() self.assertEqual(expected_result, result_data) if __name__ == '__main__': - gr_unittest.main() + pass + # FIXME: Disabled, see ticket:210 + # gr_unittest.main() diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_repeat.py b/gnuradio-core/src/python/gnuradio/gr/qa_repeat.py new file mode 100755 index 00000000..1ecc7ead --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_repeat.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 import gr, gr_unittest +import math + +class test_repeat (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + def tearDown (self): + self.tb = None + + def test_001_float(self): + src_data = [n*1.0 for n in range(100)]; + dst_data = [] + for n in range(100): + dst_data += [1.0*n, 1.0*n, 1.0*n] + + src = gr.vector_source_f(src_data) + rpt = gr.repeat(gr.sizeof_float, 3) + dst = gr.vector_sink_f() + self.tb.connect(src, rpt, dst) + self.tb.run() + self.assertFloatTuplesAlmostEqual(dst_data, dst.data(), 6) + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_scrambler.py b/gnuradio-core/src/python/gnuradio/gr/qa_scrambler.py new file mode 100755 index 00000000..76b0e62f --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_scrambler.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 import gr, gr_unittest + +class test_scrambler(gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_scrambler_descrambler(self): + src_data = (1,)*1000 + src = gr.vector_source_b(src_data, False) + scrambler = gr.scrambler_bb(0x8a, 0x7F, 7) # CCSDS 7-bit scrambler + descrambler = gr.descrambler_bb(0x8a, 0x7F, 7) + dst = gr.vector_sink_b() + self.tb.connect(src, scrambler, descrambler, dst) + self.tb.run() + self.assertEqual(tuple(src_data[:-8]), dst.data()[8:]) # skip garbage during synchronization + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_sig_source.py b/gnuradio-core/src/python/gnuradio/gr/qa_sig_source.py index 2fa694c7..058890c4 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_sig_source.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_sig_source.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,58 +26,130 @@ import math class test_sig_source (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_const_f (self): - fg = self.fg + tb = self.tb expected_result = (1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5) src1 = gr.sig_source_f (1e6, gr.GR_CONST_WAVE, 0, 1.5) op = gr.head (gr.sizeof_float, 10) dst1 = gr.vector_sink_f () - fg.connect (src1, op) - fg.connect (op, dst1) - fg.run () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () dst_data = dst1.data () self.assertEqual (expected_result, dst_data) def test_const_i (self): - fg = self.fg + tb = self.tb expected_result = (1, 1, 1, 1) src1 = gr.sig_source_i (1e6, gr.GR_CONST_WAVE, 0, 1) op = gr.head (gr.sizeof_int, 4) dst1 = gr.vector_sink_i () - fg.connect (src1, op) - fg.connect (op, dst1) - fg.run () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () dst_data = dst1.data () self.assertEqual (expected_result, dst_data) def test_sine_f (self): - fg = self.fg + tb = self.tb sqrt2 = math.sqrt(2) / 2 expected_result = (0, sqrt2, 1, sqrt2, 0, -sqrt2, -1, -sqrt2, 0) src1 = gr.sig_source_f (8, gr.GR_SIN_WAVE, 1.0, 1.0) op = gr.head (gr.sizeof_float, 9) dst1 = gr.vector_sink_f () - fg.connect (src1, op) - fg.connect (op, dst1) - fg.run () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () dst_data = dst1.data () self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 5) def test_cosine_f (self): - fg = self.fg + tb = self.tb sqrt2 = math.sqrt(2) / 2 expected_result = (1, sqrt2, 0, -sqrt2, -1, -sqrt2, 0, sqrt2, 1) src1 = gr.sig_source_f (8, gr.GR_COS_WAVE, 1.0, 1.0) op = gr.head (gr.sizeof_float, 9) dst1 = gr.vector_sink_f () - fg.connect (src1, op) - fg.connect (op, dst1) - fg.run () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () + dst_data = dst1.data () + self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 5) + + def test_sqr_c (self): + tb = self.tb #arg6 is a bit before -PI/2 + expected_result = (1j, 1j, 0, 0, 1, 1, 1+0j, 1+1j, 1j) + src1 = gr.sig_source_c (8, gr.GR_SQR_WAVE, 1.0, 1.0) + op = gr.head (gr.sizeof_gr_complex, 9) + dst1 = gr.vector_sink_c () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_tri_c (self): + tb = self.tb + expected_result = (1+.5j, .75+.75j, .5+1j, .25+.75j, 0+.5j, .25+.25j, .5+0j, .75+.25j, 1+.5j) + src1 = gr.sig_source_c (8, gr.GR_TRI_WAVE, 1.0, 1.0) + op = gr.head (gr.sizeof_gr_complex, 9) + dst1 = gr.vector_sink_c () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () + dst_data = dst1.data () + self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 5) + + def test_saw_c (self): + tb = self.tb + expected_result = (.5+.25j, .625+.375j, .75+.5j, .875+.625j, 0+.75j, .125+.875j, .25+1j, .375+.125j, .5+.25j) + src1 = gr.sig_source_c (8, gr.GR_SAW_WAVE, 1.0, 1.0) + op = gr.head (gr.sizeof_gr_complex, 9) + dst1 = gr.vector_sink_c () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () + dst_data = dst1.data () + self.assertComplexTuplesAlmostEqual (expected_result, dst_data, 5) + + def test_sqr_f (self): + tb = self.tb + expected_result = (0, 0, 0, 0, 1, 1, 1, 1, 0) + src1 = gr.sig_source_f (8, gr.GR_SQR_WAVE, 1.0, 1.0) + op = gr.head (gr.sizeof_float, 9) + dst1 = gr.vector_sink_f () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_tri_f (self): + tb = self.tb + expected_result = (1, .75, .5, .25, 0, .25, .5, .75, 1) + src1 = gr.sig_source_f (8, gr.GR_TRI_WAVE, 1.0, 1.0) + op = gr.head (gr.sizeof_float, 9) + dst1 = gr.vector_sink_f () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () + dst_data = dst1.data () + self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 5) + + def test_saw_f (self): + tb = self.tb + expected_result = (.5, .625, .75, .875, 0, .125, .25, .375, .5) + src1 = gr.sig_source_f (8, gr.GR_SAW_WAVE, 1.0, 1.0) + op = gr.head (gr.sizeof_float, 9) + dst1 = gr.vector_sink_f () + tb.connect (src1, op) + tb.connect (op, dst1) + tb.run () dst_data = dst1.data () self.assertFloatTuplesAlmostEqual (expected_result, dst_data, 5) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir.py b/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir.py index bd78f505..8ad0a9bb 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import gr, gr_unittest class test_single_pole_iir(gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001(self): src_data = (0, 1000, 2000, 3000, 4000, 5000) @@ -36,8 +36,8 @@ class test_single_pole_iir(gr_unittest.TestCase): src = gr.vector_source_f(src_data) op = gr.single_pole_iir_filter_ff (1.0) dst = gr.vector_sink_f() - self.fg.connect (src, op, dst) - self.fg.run() + self.tb.connect (src, op, dst) + self.tb.run() result_data = dst.data() self.assertFloatTuplesAlmostEqual (expected_result, result_data) @@ -47,8 +47,8 @@ class test_single_pole_iir(gr_unittest.TestCase): src = gr.vector_source_f(src_data) op = gr.single_pole_iir_filter_ff (0.125) dst = gr.vector_sink_f() - self.fg.connect (src, op, dst) - self.fg.run() + self.tb.connect (src, op, dst) + self.tb.run() result_data = dst.data() self.assertFloatTuplesAlmostEqual (expected_result, result_data, 3) @@ -61,8 +61,8 @@ class test_single_pole_iir(gr_unittest.TestCase): op = gr.single_pole_iir_filter_ff (0.125, block_size) p2s = gr.parallel_to_serial(gr.sizeof_float, block_size) dst = gr.vector_sink_f() - self.fg.connect (src, s2p, op, p2s, dst) - self.fg.run() + self.tb.connect (src, s2p, op, p2s, dst) + self.tb.run() result_data = dst.data() self.assertFloatTuplesAlmostEqual (expected_result, result_data, 3) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir_cc.py b/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir_cc.py index fe41a540..865c7c90 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir_cc.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_single_pole_iir_cc.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import gr, gr_unittest class test_single_pole_iir_cc(gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001(self): src_data = (0+0j, 1000+1000j, 2000+2000j, 3000+3000j, 4000+4000j, 5000+5000j) @@ -36,8 +36,8 @@ class test_single_pole_iir_cc(gr_unittest.TestCase): src = gr.vector_source_c(src_data) op = gr.single_pole_iir_filter_cc (1.0) dst = gr.vector_sink_c() - self.fg.connect (src, op, dst) - self.fg.run() + self.tb.connect (src, op, dst) + self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual (expected_result, result_data) @@ -47,8 +47,8 @@ class test_single_pole_iir_cc(gr_unittest.TestCase): src = gr.vector_source_c(src_data) op = gr.single_pole_iir_filter_cc (0.125) dst = gr.vector_sink_c() - self.fg.connect (src, op, dst) - self.fg.run() + self.tb.connect (src, op, dst) + self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual (expected_result, result_data, 3) @@ -61,8 +61,8 @@ class test_single_pole_iir_cc(gr_unittest.TestCase): op = gr.single_pole_iir_filter_cc (0.125, block_size) p2s = gr.parallel_to_serial(gr.sizeof_gr_complex, block_size) dst = gr.vector_sink_c() - self.fg.connect (src, s2p, op, p2s, dst) - self.fg.run() + self.tb.connect (src, s2p, op, p2s, dst) + self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual (expected_result, result_data, 3) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_skiphead.py b/gnuradio-core/src/python/gnuradio/gr/qa_skiphead.py new file mode 100755 index 00000000..106e9731 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_skiphead.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest + +class test_skiphead (gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block () + self.src_data = [int(x) for x in range(65536)] + + def tearDown(self): + self.tb = None + + def test_skip_0(self): + skip_cnt = 0 + expected_result = tuple(self.src_data[skip_cnt:]) + src1 = gr.vector_source_i (self.src_data) + op = gr.skiphead (gr.sizeof_int, skip_cnt) + dst1 = gr.vector_sink_i () + self.tb.connect (src1, op, dst1) + self.tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_skip_1(self): + skip_cnt = 1 + expected_result = tuple(self.src_data[skip_cnt:]) + src1 = gr.vector_source_i (self.src_data) + op = gr.skiphead (gr.sizeof_int, skip_cnt) + dst1 = gr.vector_sink_i () + self.tb.connect (src1, op, dst1) + self.tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_skip_1023(self): + skip_cnt = 1023 + expected_result = tuple(self.src_data[skip_cnt:]) + src1 = gr.vector_source_i (self.src_data) + op = gr.skiphead (gr.sizeof_int, skip_cnt) + dst1 = gr.vector_sink_i () + self.tb.connect (src1, op, dst1) + self.tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_skip_6339(self): + skip_cnt = 6339 + expected_result = tuple(self.src_data[skip_cnt:]) + src1 = gr.vector_source_i (self.src_data) + op = gr.skiphead (gr.sizeof_int, skip_cnt) + dst1 = gr.vector_sink_i () + self.tb.connect (src1, op, dst1) + self.tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_skip_12678(self): + skip_cnt = 12678 + expected_result = tuple(self.src_data[skip_cnt:]) + src1 = gr.vector_source_i (self.src_data) + op = gr.skiphead (gr.sizeof_int, skip_cnt) + dst1 = gr.vector_sink_i () + self.tb.connect (src1, op, dst1) + self.tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + def test_skip_all(self): + skip_cnt = len(self.src_data) + expected_result = tuple(self.src_data[skip_cnt:]) + src1 = gr.vector_source_i (self.src_data) + op = gr.skiphead (gr.sizeof_int, skip_cnt) + dst1 = gr.vector_sink_i () + self.tb.connect (src1, op, dst1) + self.tb.run () + dst_data = dst1.data () + self.assertEqual (expected_result, dst_data) + + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py b/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py index 3c1a25dc..edb263ad 100755 --- a/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py +++ b/gnuradio-core/src/python/gnuradio/gr/qa_unpack_k_bits.py @@ -26,10 +26,10 @@ import random class test_unpack(gr_unittest.TestCase): def setUp(self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown(self): - self.fg = None + self.tb = None def test_001(self): src_data = (1,0,1,1,0,1,1,0) @@ -37,8 +37,8 @@ class test_unpack(gr_unittest.TestCase): src = gr.vector_source_b(src_data,False) op = gr.unpack_k_bits_bb(1) dst = gr.vector_sink_b() - self.fg.connect(src, op, dst) - self.fg.run() + self.tb.connect(src, op, dst) + self.tb.run() self.assertEqual(expected_results, dst.data()) def test_002(self): @@ -47,8 +47,8 @@ class test_unpack(gr_unittest.TestCase): src = gr.vector_source_b(src_data,False) op = gr.unpack_k_bits_bb(2) dst = gr.vector_sink_b() - self.fg.connect(src, op, dst) - self.fg.run() + self.tb.connect(src, op, dst) + self.tb.run() self.assertEqual(expected_results, dst.data()) diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_vector_sink_source.py b/gnuradio-core/src/python/gnuradio/gr/qa_vector_sink_source.py new file mode 100755 index 00000000..149c6690 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_vector_sink_source.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 import gr, gr_unittest +import math + +class test_sink_source(gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + def tearDown (self): + self.tb = None + + def test_001(self): + src_data = [float(x) for x in range(16)] + expected_result = tuple(src_data) + + src = gr.vector_source_f(src_data) + dst = gr.vector_sink_f() + + self.tb.connect(src, dst) + self.tb.run() + result_data = dst.data() + self.assertEqual(expected_result, result_data) + + def test_002(self): + src_data = [float(x) for x in range(16)] + expected_result = tuple(src_data) + + src = gr.vector_source_f(src_data, False, 2) + dst = gr.vector_sink_f(2) + + self.tb.connect(src, dst) + self.tb.run() + result_data = dst.data() + self.assertEqual(expected_result, result_data) + + def test_003(self): + src_data = [float(x) for x in range(16)] + expected_result = tuple(src_data) + self.assertRaises(ValueError, lambda : gr.vector_source_f(src_data, False, 3)) + +if __name__ == '__main__': + gr_unittest.main () + diff --git a/gnuradio-core/src/python/gnuradio/gr/test_16bit_1chunk.wav b/gnuradio-core/src/python/gnuradio/gr/test_16bit_1chunk.wav new file mode 100644 index 0000000000000000000000000000000000000000..0fe12a7a1336e46ae73518908ab45d9352bbf819 GIT binary patch literal 52 zcmWIYbaT^TU|I", hexint(crc)) + return s + struct.pack(">I", hexint(crc) & 0xFFFFFFFF) def check_crc32(s): + if len(s) < 4: + return (False, '') msg = s[:-4] #print "msg = '%s'" % (msg,) actual = gr.crc32(msg) diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/daemon.py b/gnuradio-core/src/python/gnuradio/gruimpl/daemon.py new file mode 100644 index 00000000..4fa972ad --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gruimpl/daemon.py @@ -0,0 +1,102 @@ +# +# Copyright 2008 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. +# +import os, sys, signal + +# Turn application into a background daemon process. +# +# When this function returns: +# +# 1) The calling process is disconnected from its controlling terminal +# and will not exit when the controlling session exits +# 2) If a pidfile name is provided, it is created and the new pid is +# written into it. +# 3) If a logfile name is provided, it is opened and stdout/stderr are +# redirected to it. +# 4) The process current working directory is changed to '/' to avoid +# pinning any filesystem mounts. +# 5) The process umask is set to 0111. +# +# The return value is the new pid. +# +# To create GNU Radio applications that operate as daemons, add a call to this +# function after all initialization but just before calling gr.top_block.run() +# or .start(). +# +# Daemonized GNU Radio applications may be stopped by sending them a +# SIGINT, SIGKILL, or SIGTERM, e.g., using 'kill pid' from the command line. +# +# If your application uses gr.top_block.run(), the flowgraph will be stopped +# and the function will return. You should allow your daemon program to exit +# at this point. +# +# If your application uses gr.top_block.start(), you are responsible for hooking +# the Python signal handler (see 'signal' module) and calling gr.top_block.stop() +# on your top block, and otherwise causing your daemon process to exit. +# + +def daemonize(pidfile=None, logfile=None): + # fork() into background + try: + pid = os.fork() + except OSError, e: + raise Exception, "%s [%d]" % (e.strerror, e.errno) + + if pid == 0: # First child of first fork() + # Become session leader of new session + os.setsid() + + # fork() into background again + try: + pid = os.fork() + except OSError, e: + raise Exception, "%s [%d]" % (e.strerror, e.errno) + + if pid != 0: + os._exit(0) # Second child of second fork() + + else: # Second child of first fork() + os._exit(0) + + os.umask(0111) + + # Write pid + pid = os.getpid() + if pidfile is not None: + open(pidfile, 'w').write('%d\n'%pid) + + # Redirect streams + if logfile is not None: + lf = open(logfile, 'a+') + sys.stdout = lf + sys.stderr = lf + + # Prevent pinning any filesystem mounts + os.chdir('/') + + # Tell caller what pid to send future signals to + return pid + +if __name__ == "__main__": + import time + daemonize() + print "Hello, world, from daemon process." + time.sleep(20) + print "Goodbye, world, from daemon process." diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/freqz.py b/gnuradio-core/src/python/gnuradio/gruimpl/freqz.py index 2dc92f20..46696a50 100644 --- a/gnuradio-core/src/python/gnuradio/gruimpl/freqz.py +++ b/gnuradio-core/src/python/gnuradio/gruimpl/freqz.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -54,9 +54,9 @@ __all__ = ['freqz'] -import Numeric -from Numeric import * -Num=Numeric +import numpy +from numpy import * +Num=numpy def atleast_1d(*arys): """ Force a sequence of arrays to each be at least 1D. @@ -74,7 +74,7 @@ def atleast_1d(*arys): for ary in arys: ary = asarray(ary) if len(ary.shape) == 0: - result = Numeric.array([ary[0]]) + result = numpy.array([ary[0]]) else: result = ary res.append(result) @@ -101,7 +101,7 @@ def polyval(p,x): y = 0 else: x = asarray(x) - y = Numeric.zeros(x.shape,x.typecode()) + y = numpy.zeros(x.shape,x.typecode()) for i in range(len(p)): y = x * y + p[i] return y @@ -135,7 +135,7 @@ class poly1d: raise ValueError, "Polynomial must be 1d only." c_or_r = trim_zeros(c_or_r, trim='f') if len(c_or_r) == 0: - c_or_r = Numeric.array([0]) + c_or_r = numpy.array([0]) self.__dict__['coeffs'] = c_or_r self.__dict__['order'] = len(c_or_r) - 1 @@ -281,8 +281,8 @@ class poly1d: if key < 0: raise ValueError, "Does not support negative powers." if key > self.order: - zr = Numeric.zeros(key-self.order,self.coeffs.typecode()) - self.__dict__['coeffs'] = Numeric.concatenate((zr,self.coeffs)) + zr = numpy.zeros(key-self.order,self.coeffs.typecode()) + self.__dict__['coeffs'] = numpy.concatenate((zr,self.coeffs)) self.__dict__['order'] = key ind = 0 self.__dict__['coeffs'][ind] = val diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/gnuplot_freqz.py b/gnuradio-core/src/python/gnuradio/gruimpl/gnuplot_freqz.py index daa3112e..2c2a0684 100755 --- a/gnuradio-core/src/python/gnuradio/gruimpl/gnuplot_freqz.py +++ b/gnuradio-core/src/python/gnuradio/gruimpl/gnuplot_freqz.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,7 +25,7 @@ __all__ = ['gnuplot_freqz'] import tempfile import os import math -import Numeric +import numpy from gnuradio import gr from gnuradio.gruimpl.freqz import freqz @@ -45,7 +45,7 @@ def gnuplot_freqz (hw, Fs=None, logfreq=False): cmd_file = os.popen ('gnuplot', 'w') h, w = hw - ampl = 20 * Numeric.log10 (Numeric.absolute (h) + 1e-9) + ampl = 20 * numpy.log10 (numpy.absolute (h) + 1e-9) phase = map (lambda x: math.atan2 (x.imag, x.real), h) if Fs: diff --git a/gnuradio-core/src/python/gnuradio/gruimpl/msgq_runner.py b/gnuradio-core/src/python/gnuradio/gruimpl/msgq_runner.py new file mode 100644 index 00000000..767a74a7 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gruimpl/msgq_runner.py @@ -0,0 +1,82 @@ +# +# 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. +# + +""" +Convenience class for dequeuing messages from a gr.msg_queue and +invoking a callback. + +Creates a Python thread that does a blocking read on the supplied +gr.msg_queue, then invokes callback each time a msg is received. + +If the msg type is not 0, then it is treated as a signal to exit +its loop. + +If the callback raises an exception, and the runner was created +with 'exit_on_error' equal to True, then the runner will store the +exception and exit its loop, otherwise the exception is ignored. + +To get the exception that the callback raised, if any, call +exit_error() on the object. + +To manually stop the runner, call stop() on the object. + +To determine if the runner has exited, call exited() on the object. +""" + +from gnuradio import gr +import gnuradio.gr.gr_threading as _threading + +class msgq_runner(_threading.Thread): + + def __init__(self, msgq, callback, exit_on_error=False): + _threading.Thread.__init__(self) + + self._msgq = msgq + self._callback = callback + self._exit_on_error = exit_on_error + self._done = False + self._exited = False + self._exit_error = None + self.setDaemon(1) + self.start() + + def run(self): + while not self._done: + msg = self._msgq.delete_head() + if msg.type() != 0: + self.stop() + else: + try: + self._callback(msg) + except Exception, e: + if self._exit_on_error: + self._exit_error = e + self.stop() + self._exited = True + + def stop(self): + self._done = True + + def exited(self): + return self._exited + + def exit_error(self): + return self._exit_error diff --git a/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py b/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py new file mode 100644 index 00000000..f151ffe7 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py @@ -0,0 +1,453 @@ +# +# Copyright 2007 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. +# + +import struct +import numpy +from gnuradio import gru + +def conv_packed_binary_string_to_1_0_string(s): + """ + '\xAF' --> '10101111' + """ + r = [] + for ch in s: + x = ord(ch) + for i in range(7,-1,-1): + t = (x >> i) & 0x1 + r.append(t) + + return ''.join(map(lambda x: chr(x + ord('0')), r)) + +def conv_1_0_string_to_packed_binary_string(s): + """ + '10101111' -> ('\xAF', False) + + Basically the inverse of conv_packed_binary_string_to_1_0_string, + but also returns a flag indicating if we had to pad with leading zeros + to get to a multiple of 8. + """ + if not is_1_0_string(s): + raise ValueError, "Input must be a string containing only 0's and 1's" + + # pad to multiple of 8 + padded = False + rem = len(s) % 8 + if rem != 0: + npad = 8 - rem + s = '0' * npad + s + padded = True + + assert len(s) % 8 == 0 + + r = [] + i = 0 + while i < len(s): + t = 0 + for j in range(8): + t = (t << 1) | (ord(s[i + j]) - ord('0')) + r.append(chr(t)) + i += 8 + return (''.join(r), padded) + + +def is_1_0_string(s): + if not isinstance(s, str): + return False + for ch in s: + if not ch in ('0', '1'): + return False + return True + +def string_to_hex_list(s): + return map(lambda x: hex(ord(x)), s) + + +def whiten(s, o): + sa = numpy.fromstring(s, numpy.uint8) + z = sa ^ random_mask_vec8[o:len(sa)+o] + return z.tostring() + +def dewhiten(s, o): + return whiten(s, o) # self inverse + + +def make_header(payload_len, whitener_offset=0): + # Upper nibble is offset, lower 12 bits is len + val = ((whitener_offset & 0xf) << 12) | (payload_len & 0x0fff) + #print "offset =", whitener_offset, " len =", payload_len, " val=", val + return struct.pack('!HH', val, val) + +def make_packet(payload, samples_per_symbol, bits_per_symbol, + pad_for_usrp=True, whitener_offset=0, whitening=True): + """ + Build a packet, given access code, payload, and whitener offset + + @param payload: packet payload, len [0, 4096] + @param samples_per_symbol: samples per symbol (needed for padding calculation) + @type samples_per_symbol: int + @param bits_per_symbol: (needed for padding calculation) + @type bits_per_symbol: int + @param whitener_offset offset into whitener string to use [0-16) + @param whitening: Turn whitener on or off + @type whitening: bool + + Packet will have access code at the beginning, followed by length, payload + and finally CRC-32. + """ + + if not whitener_offset >=0 and whitener_offset < 16: + raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,) + + payload_with_crc = gru.gen_and_append_crc32(payload) + #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:]) + + L = len(payload_with_crc) + MAXLEN = len(random_mask_tuple) + if L > MAXLEN: + raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,) + + pkt_hd = make_header(L, whitener_offset) + pkt_dt = ''.join((payload_with_crc, '\x55')) + packet_length = len(pkt_hd) + len(pkt_dt) + + if pad_for_usrp: + usrp_packing = _npadding_bytes(packet_length, samples_per_symbol, bits_per_symbol) * '\x55' + pkt_dt = pkt_dt + usrp_packing + + if(whitening): + pkt = pkt_hd + whiten(pkt_dt, whitener_offset) + else: + pkt = pkt_hd + pkt_dt + + #print "make_packet: len(pkt) =", len(pkt) + + return pkt + +def _npadding_bytes(pkt_byte_len, samples_per_symbol, bits_per_symbol): + """ + Generate sufficient padding such that each packet ultimately ends + up being a multiple of 512 bytes when sent across the USB. We + send 4-byte samples across the USB (16-bit I and 16-bit Q), thus + we want to pad so that after modulation the resulting packet + is a multiple of 128 samples. + + @param ptk_byte_len: len in bytes of packet, not including padding. + @param samples_per_symbol: samples per bit (1 bit / symbolwidth GMSK) + @type samples_per_symbol: int + @param bits_per_symbol: bits per symbol (log2(modulation order)) + @type bits_per_symbol: int + + @returns number of bytes of padding to append. + """ + modulus = 128 + byte_modulus = gru.lcm(modulus/8, samples_per_symbol) * bits_per_symbol / samples_per_symbol + r = pkt_byte_len % byte_modulus + if r == 0: + return 0 + return byte_modulus - r + + +def unmake_packet(whitened_payload_with_crc, whitener_offset=0, dewhitening=1): + """ + Return (ok, payload) + + @param whitened_payload_with_crc: string + @param whitener_offset offset into whitener string to use [0-16) + @param dewhitening: Turn whitener on or off + @type dewhitening: bool + """ + + if dewhitening: + payload_with_crc = dewhiten(whitened_payload_with_crc, whitener_offset) + else: + payload_with_crc = whitened_payload_with_crc + + ok, payload = gru.check_crc32(payload_with_crc) + + if 0: + print "payload_with_crc =", string_to_hex_list(payload_with_crc) + print "ok = %r, len(payload) = %d" % (ok, len(payload)) + print "payload =", string_to_hex_list(payload) + + return ok, payload + + +# FYI, this PN code is the output of a 15-bit LFSR +random_mask_tuple = ( + 255, 63, 0, 16, 0, 12, 0, 5, 192, 3, 16, 1, 204, 0, 85, 192, + 63, 16, 16, 12, 12, 5, 197, 195, 19, 17, 205, 204, 85, 149, 255, 47, + 0, 28, 0, 9, 192, 6, 208, 2, 220, 1, 153, 192, 106, 208, 47, 28, + 28, 9, 201, 198, 214, 210, 222, 221, 152, 89, 170, 186, 255, 51, 0, 21, + 192, 15, 16, 4, 12, 3, 69, 193, 243, 16, 69, 204, 51, 21, 213, 207, + 31, 20, 8, 15, 70, 132, 50, 227, 85, 137, 255, 38, 192, 26, 208, 11, + 28, 7, 73, 194, 182, 209, 182, 220, 118, 217, 230, 218, 202, 219, 23, 27, + 78, 139, 116, 103, 103, 106, 170, 175, 63, 60, 16, 17, 204, 12, 85, 197, + 255, 19, 0, 13, 192, 5, 144, 3, 44, 1, 221, 192, 89, 144, 58, 236, + 19, 13, 205, 197, 149, 147, 47, 45, 220, 29, 153, 201, 170, 214, 255, 30, + 192, 8, 80, 6, 188, 2, 241, 193, 132, 80, 99, 124, 41, 225, 222, 200, + 88, 86, 186, 190, 243, 48, 69, 212, 51, 31, 85, 200, 63, 22, 144, 14, + 236, 4, 77, 195, 117, 145, 231, 44, 74, 157, 247, 41, 134, 158, 226, 232, + 73, 142, 182, 228, 118, 203, 102, 215, 106, 222, 175, 24, 124, 10, 161, 199, + 56, 82, 146, 189, 173, 177, 189, 180, 113, 183, 100, 118, 171, 102, 255, 106, + 192, 47, 16, 28, 12, 9, 197, 198, 211, 18, 221, 205, 153, 149, 170, 239, + 63, 12, 16, 5, 204, 3, 21, 193, 207, 16, 84, 12, 63, 69, 208, 51, + 28, 21, 201, 207, 22, 212, 14, 223, 68, 88, 51, 122, 149, 227, 47, 9, + 220, 6, 217, 194, 218, 209, 155, 28, 107, 73, 239, 118, 204, 38, 213, 218, + 223, 27, 24, 11, 74, 135, 119, 34, 166, 153, 186, 234, 243, 15, 5, 196, + 3, 19, 65, 205, 240, 85, 132, 63, 35, 80, 25, 252, 10, 193, 199, 16, + 82, 140, 61, 165, 209, 187, 28, 115, 73, 229, 246, 203, 6, 215, 66, 222, + 177, 152, 116, 106, 167, 111, 58, 172, 19, 61, 205, 209, 149, 156, 111, 41, + 236, 30, 205, 200, 85, 150, 191, 46, 240, 28, 68, 9, 243, 70, 197, 242, + 211, 5, 157, 195, 41, 145, 222, 236, 88, 77, 250, 181, 131, 55, 33, 214, + 152, 94, 234, 184, 79, 50, 180, 21, 183, 79, 54, 180, 22, 247, 78, 198, + 180, 82, 247, 125, 134, 161, 162, 248, 121, 130, 162, 225, 185, 136, 114, 230, + 165, 138, 251, 39, 3, 90, 129, 251, 32, 67, 88, 49, 250, 148, 67, 47, + 113, 220, 36, 89, 219, 122, 219, 99, 27, 105, 203, 110, 215, 108, 94, 173, + 248, 125, 130, 161, 161, 184, 120, 114, 162, 165, 185, 187, 50, 243, 85, 133, + 255, 35, 0, 25, 192, 10, 208, 7, 28, 2, 137, 193, 166, 208, 122, 220, + 35, 25, 217, 202, 218, 215, 27, 30, 139, 72, 103, 118, 170, 166, 255, 58, + 192, 19, 16, 13, 204, 5, 149, 195, 47, 17, 220, 12, 89, 197, 250, 211, + 3, 29, 193, 201, 144, 86, 236, 62, 205, 208, 85, 156, 63, 41, 208, 30, + 220, 8, 89, 198, 186, 210, 243, 29, 133, 201, 163, 22, 249, 206, 194, 212, + 81, 159, 124, 104, 33, 238, 152, 76, 106, 181, 239, 55, 12, 22, 133, 206, + 227, 20, 73, 207, 118, 212, 38, 223, 90, 216, 59, 26, 147, 75, 45, 247, + 93, 134, 185, 162, 242, 249, 133, 130, 227, 33, 137, 216, 102, 218, 170, 219, + 63, 27, 80, 11, 124, 7, 97, 194, 168, 81, 190, 188, 112, 113, 228, 36, + 75, 91, 119, 123, 102, 163, 106, 249, 239, 2, 204, 1, 149, 192, 111, 16, + 44, 12, 29, 197, 201, 147, 22, 237, 206, 205, 148, 85, 175, 127, 60, 32, + 17, 216, 12, 90, 133, 251, 35, 3, 89, 193, 250, 208, 67, 28, 49, 201, + 212, 86, 223, 126, 216, 32, 90, 152, 59, 42, 147, 95, 45, 248, 29, 130, + 137, 161, 166, 248, 122, 194, 163, 17, 185, 204, 114, 213, 229, 159, 11, 40, + 7, 94, 130, 184, 97, 178, 168, 117, 190, 167, 48, 122, 148, 35, 47, 89, + 220, 58, 217, 211, 26, 221, 203, 25, 151, 74, 238, 183, 12, 118, 133, 230, + 227, 10, 201, 199, 22, 210, 142, 221, 164, 89, 187, 122, 243, 99, 5, 233, + 195, 14, 209, 196, 92, 83, 121, 253, 226, 193, 137, 144, 102, 236, 42, 205, + 223, 21, 152, 15, 42, 132, 31, 35, 72, 25, 246, 138, 198, 231, 18, 202, + 141, 151, 37, 174, 155, 60, 107, 81, 239, 124, 76, 33, 245, 216, 71, 26, + 178, 139, 53, 167, 87, 58, 190, 147, 48, 109, 212, 45, 159, 93, 168, 57, + 190, 146, 240, 109, 132, 45, 163, 93, 185, 249, 178, 194, 245, 145, 135, 44, + 98, 157, 233, 169, 142, 254, 228, 64, 75, 112, 55, 100, 22, 171, 78, 255, + 116, 64, 39, 112, 26, 164, 11, 59, 71, 83, 114, 189, 229, 177, 139, 52, + 103, 87, 106, 190, 175, 48, 124, 20, 33, 207, 88, 84, 58, 191, 83, 48, + 61, 212, 17, 159, 76, 104, 53, 238, 151, 12, 110, 133, 236, 99, 13, 233, + 197, 142, 211, 36, 93, 219, 121, 155, 98, 235, 105, 143, 110, 228, 44, 75, + 93, 247, 121, 134, 162, 226, 249, 137, 130, 230, 225, 138, 200, 103, 22, 170, + 142, 255, 36, 64, 27, 112, 11, 100, 7, 107, 66, 175, 113, 188, 36, 113, + 219, 100, 91, 107, 123, 111, 99, 108, 41, 237, 222, 205, 152, 85, 170, 191, + 63, 48, 16, 20, 12, 15, 69, 196, 51, 19, 85, 205, 255, 21, 128, 15, + 32, 4, 24, 3, 74, 129, 247, 32, 70, 152, 50, 234, 149, 143, 47, 36, + 28, 27, 73, 203, 118, 215, 102, 222, 170, 216, 127, 26, 160, 11, 56, 7, + 82, 130, 189, 161, 177, 184, 116, 114, 167, 101, 186, 171, 51, 63, 85, 208, + 63, 28, 16, 9, 204, 6, 213, 194, 223, 17, 152, 12, 106, 133, 239, 35, + 12, 25, 197, 202, 211, 23, 29, 206, 137, 148, 102, 239, 106, 204, 47, 21, + 220, 15, 25, 196, 10, 211, 71, 29, 242, 137, 133, 166, 227, 58, 201, 211, + 22, 221, 206, 217, 148, 90, 239, 123, 12, 35, 69, 217, 243, 26, 197, 203, + 19, 23, 77, 206, 181, 148, 119, 47, 102, 156, 42, 233, 223, 14, 216, 4, + 90, 131, 123, 33, 227, 88, 73, 250, 182, 195, 54, 209, 214, 220, 94, 217, + 248, 90, 194, 187, 17, 179, 76, 117, 245, 231, 7, 10, 130, 135, 33, 162, + 152, 121, 170, 162, 255, 57, 128, 18, 224, 13, 136, 5, 166, 131, 58, 225, + 211, 8, 93, 198, 185, 146, 242, 237, 133, 141, 163, 37, 185, 219, 50, 219, + 85, 155, 127, 43, 96, 31, 104, 8, 46, 134, 156, 98, 233, 233, 142, 206, + 228, 84, 75, 127, 119, 96, 38, 168, 26, 254, 139, 0, 103, 64, 42, 176, + 31, 52, 8, 23, 70, 142, 178, 228, 117, 139, 103, 39, 106, 154, 175, 43, + 60, 31, 81, 200, 60, 86, 145, 254, 236, 64, 77, 240, 53, 132, 23, 35, + 78, 153, 244, 106, 199, 111, 18, 172, 13, 189, 197, 177, 147, 52, 109, 215, + 109, 158, 173, 168, 125, 190, 161, 176, 120, 116, 34, 167, 89, 186, 186, 243, + 51, 5, 213, 195, 31, 17, 200, 12, 86, 133, 254, 227, 0, 73, 192, 54, + 208, 22, 220, 14, 217, 196, 90, 211, 123, 29, 227, 73, 137, 246, 230, 198, + 202, 210, 215, 29, 158, 137, 168, 102, 254, 170, 192, 127, 16, 32, 12, 24, + 5, 202, 131, 23, 33, 206, 152, 84, 106, 191, 111, 48, 44, 20, 29, 207, + 73, 148, 54, 239, 86, 204, 62, 213, 208, 95, 28, 56, 9, 210, 134, 221, + 162, 217, 185, 154, 242, 235, 5, 143, 67, 36, 49, 219, 84, 91, 127, 123, + 96, 35, 104, 25, 238, 138, 204, 103, 21, 234, 143, 15, 36, 4, 27, 67, + 75, 113, 247, 100, 70, 171, 114, 255, 101, 128, 43, 32, 31, 88, 8, 58, + 134, 147, 34, 237, 217, 141, 154, 229, 171, 11, 63, 71, 80, 50, 188, 21, + 177, 207, 52, 84, 23, 127, 78, 160, 52, 120, 23, 98, 142, 169, 164, 126, + 251, 96, 67, 104, 49, 238, 148, 76, 111, 117, 236, 39, 13, 218, 133, 155, + 35, 43, 89, 223, 122, 216, 35, 26, 153, 203, 42, 215, 95, 30, 184, 8, + 114, 134, 165, 162, 251, 57, 131, 82, 225, 253, 136, 65, 166, 176, 122, 244, + 35, 7, 89, 194, 186, 209, 179, 28, 117, 201, 231, 22, 202, 142, 215, 36, + 94, 155, 120, 107, 98, 175, 105, 188, 46, 241, 220, 68, 89, 243, 122, 197, + 227, 19, 9, 205, 198, 213, 146, 223, 45, 152, 29, 170, 137, 191, 38, 240, + 26, 196, 11, 19, 71, 77, 242, 181, 133, 183, 35, 54, 153, 214, 234, 222, + 207, 24, 84, 10, 191, 71, 48, 50, 148, 21, 175, 79, 60, 52, 17, 215, + 76, 94, 181, 248, 119, 2, 166, 129, 186, 224, 115, 8, 37, 198, 155, 18, + 235, 77, 143, 117, 164, 39, 59, 90, 147, 123, 45, 227, 93, 137, 249, 166, + 194, 250, 209, 131, 28, 97, 201, 232, 86, 206, 190, 212, 112, 95, 100, 56, + 43, 82, 159, 125, 168, 33, 190, 152, 112, 106, 164, 47, 59, 92, 19, 121, + 205, 226, 213, 137, 159, 38, 232, 26, 206, 139, 20, 103, 79, 106, 180, 47, + 55, 92, 22, 185, 206, 242, 212, 69, 159, 115, 40, 37, 222, 155, 24, 107, + 74, 175, 119, 60, 38, 145, 218, 236, 91, 13, 251, 69, 131, 115, 33, 229, + 216, 75, 26, 183, 75, 54, 183, 86, 246, 190, 198, 240, 82, 196, 61, 147, + 81, 173, 252, 125, 129, 225, 160, 72, 120, 54, 162, 150, 249, 174, 194, 252, + 81, 129, 252, 96, 65, 232, 48, 78, 148, 52, 111, 87, 108, 62, 173, 208, + 125, 156, 33, 169, 216, 126, 218, 160, 91, 56, 59, 82, 147, 125, 173, 225, + 189, 136, 113, 166, 164, 122, 251, 99, 3, 105, 193, 238, 208, 76, 92, 53, + 249, 215, 2, 222, 129, 152, 96, 106, 168, 47, 62, 156, 16, 105, 204, 46, + 213, 220, 95, 25, 248, 10, 194, 135, 17, 162, 140, 121, 165, 226, 251, 9, + 131, 70, 225, 242, 200, 69, 150, 179, 46, 245, 220, 71, 25, 242, 138, 197, + 167, 19, 58, 141, 211, 37, 157, 219, 41, 155, 94, 235, 120, 79, 98, 180, + 41, 183, 94, 246, 184, 70, 242, 178, 197, 181, 147, 55, 45, 214, 157, 158, + 233, 168, 78, 254, 180, 64, 119, 112, 38, 164, 26, 251, 75, 3, 119, 65, + 230, 176, 74, 244, 55, 7, 86, 130, 190, 225, 176, 72, 116, 54, 167, 86, + 250, 190, 195, 48, 81, 212, 60, 95, 81, 248, 60, 66, 145, 241, 172, 68, + 125, 243, 97, 133, 232, 99, 14, 169, 196, 126, 211, 96, 93, 232, 57, 142, + 146, 228, 109, 139, 109, 167, 109, 186, 173, 179, 61, 181, 209, 183, 28, 118, + 137, 230, 230, 202, 202, 215, 23, 30, 142, 136, 100, 102, 171, 106, 255, 111, + 0, 44, 0, 29, 192, 9, 144, 6, 236, 2, 205, 193, 149, 144, 111, 44, + 44, 29, 221, 201, 153, 150, 234, 238, 207, 12, 84, 5, 255, 67, 0, 49, + 192, 20, 80, 15, 124, 4, 33, 195, 88, 81, 250, 188, 67, 49, 241, 212, + 68, 95, 115, 120, 37, 226, 155, 9, 171, 70, 255, 114, 192, 37, 144, 27, + 44, 11, 93, 199, 121, 146, 162, 237, 185, 141, 178, 229, 181, 139, 55, 39, + 86, 154, 190, 235, 48, 79, 84, 52, 63, 87, 80, 62, 188, 16, 113, 204, + 36, 85, 219, 127, 27, 96, 11, 104, 7, 110, 130, 172, 97, 189, 232, 113, + 142, 164, 100, 123, 107, 99, 111, 105, 236, 46, 205, 220, 85, 153, 255, 42, + 192, 31, 16, 8, 12, 6, 133, 194, 227, 17, 137, 204, 102, 213, 234, 223, + 15, 24, 4, 10, 131, 71, 33, 242, 152, 69, 170, 179, 63, 53, 208, 23, + 28, 14, 137, 196, 102, 211, 106, 221, 239, 25, 140, 10, 229, 199, 11, 18, + 135, 77, 162, 181, 185, 183, 50, 246, 149, 134, 239, 34, 204, 25, 149, 202, + 239, 23, 12, 14, 133, 196, 99, 19, 105, 205, 238, 213, 140, 95, 37, 248, + 27, 2, 139, 65, 167, 112, 122, 164, 35, 59, 89, 211, 122, 221, 227, 25, + 137, 202, 230, 215, 10, 222, 135, 24, 98, 138, 169, 167, 62, 250, 144, 67, + 44, 49, 221, 212, 89, 159, 122, 232, 35, 14, 153, 196, 106, 211, 111, 29, + 236, 9, 141, 198, 229, 146, 203, 45, 151, 93, 174, 185, 188, 114, 241, 229, + 132, 75, 35, 119, 89, 230, 186, 202, 243, 23, 5, 206, 131, 20, 97, 207, + 104, 84, 46, 191, 92, 112, 57, 228, 18, 203, 77, 151, 117, 174, 167, 60, + 122, 145, 227, 44, 73, 221, 246, 217, 134, 218, 226, 219, 9, 155, 70, 235, + 114, 207, 101, 148, 43, 47, 95, 92, 56, 57, 210, 146, 221, 173, 153, 189, + 170, 241, 191, 4, 112, 3, 100, 1, 235, 64, 79, 112, 52, 36, 23, 91, + 78, 187, 116, 115, 103, 101, 234, 171, 15, 63, 68, 16, 51, 76, 21, 245, + 207, 7, 20, 2, 143, 65, 164, 48, 123, 84, 35, 127, 89, 224, 58, 200, + 19, 22, 141, 206, 229, 148, 75, 47, 119, 92, 38, 185, 218, 242, 219, 5, + 155, 67, 43, 113, 223, 100, 88, 43, 122, 159, 99, 40, 41, 222, 158, 216, + 104, 90, 174, 187, 60, 115, 81, 229, 252, 75, 1, 247, 64, 70, 176, 50, + 244, 21, 135, 79, 34, 180, 25, 183, 74, 246, 183, 6, 246, 130, 198, 225, + 146, 200, 109, 150, 173, 174, 253, 188, 65, 177, 240, 116, 68, 39, 115, 90, + 165, 251, 59, 3, 83, 65, 253, 240, 65, 132, 48, 99, 84, 41, 255, 94, + 192, 56, 80, 18, 188, 13, 177, 197, 180, 83, 55, 125, 214, 161, 158, 248, + 104, 66, 174, 177, 188, 116, 113, 231, 100, 74, 171, 119, 63, 102, 144, 42, + 236, 31, 13, 200, 5, 150, 131, 46, 225, 220, 72, 89, 246, 186, 198, 243, + 18, 197, 205, 147, 21, 173, 207, 61, 148, 17, 175, 76, 124, 53, 225, 215, + 8, 94, 134, 184, 98, 242, 169, 133, 190, 227, 48, 73, 212, 54, 223, 86, + 216, 62, 218, 144, 91, 44, 59, 93, 211, 121, 157, 226, 233, 137, 142, 230, + 228, 74, 203, 119, 23, 102, 142, 170, 228, 127, 11, 96, 7, 104, 2, 174, + 129, 188, 96, 113, 232, 36, 78, 155, 116, 107, 103, 111, 106, 172, 47, 61, + 220, 17, 153, 204, 106, 213, 239, 31, 12, 8, 5, 198, 131, 18, 225, 205, + 136, 85, 166, 191, 58, 240, 19, 4, 13, 195, 69, 145, 243, 44, 69, 221, + 243, 25, 133, 202, 227, 23, 9, 206, 134, 212, 98, 223, 105, 152, 46, 234, + 156, 79, 41, 244, 30, 199, 72, 82, 182, 189, 182, 241, 182, 196, 118, 211, + 102, 221, 234, 217, 143, 26, 228, 11, 11, 71, 71, 114, 178, 165, 181, 187, + 55, 51, 86, 149, 254, 239, 0, 76, 0, 53, 192, 23, 16, 14, 140, 4, + 101, 195, 107, 17, 239, 76, 76, 53, 245, 215, 7, 30, 130, 136, 97, 166, + 168, 122, 254, 163, 0, 121, 192, 34, 208, 25, 156, 10, 233, 199, 14, 210, + 132, 93, 163, 121, 185, 226, 242, 201, 133, 150, 227, 46, 201, 220, 86, 217, + 254, 218, 192, 91, 16, 59, 76, 19, 117, 205, 231, 21, 138, 143, 39, 36, + 26, 155, 75, 43, 119, 95, 102, 184, 42, 242, 159, 5, 168, 3, 62, 129, + 208, 96, 92, 40, 57, 222, 146, 216, 109, 154, 173, 171, 61, 191, 81, 176, + 60, 116, 17, 231, 76, 74, 181, 247, 55, 6, 150, 130, 238, 225, 140, 72, + 101, 246, 171, 6, 255, 66, 192, 49, 144, 20, 108, 15, 109, 196, 45, 147, + 93, 173, 249, 189, 130, 241, 161, 132, 120, 99, 98, 169, 233, 190, 206, 240, + 84, 68, 63, 115, 80, 37, 252, 27, 1, 203, 64, 87, 112, 62, 164, 16, + 123, 76, 35, 117, 217, 231, 26, 202, 139, 23, 39, 78, 154, 180, 107, 55, + 111, 86, 172, 62, 253, 208, 65, 156, 48, 105, 212, 46, 223, 92, 88, 57, + 250, 146, 195, 45, 145, 221, 172, 89, 189, 250, 241, 131, 4, 97, 195, 104, + 81, 238, 188, 76, 113, 245, 228, 71, 11, 114, 135, 101, 162, 171, 57, 191, + 82, 240, 61, 132, 17, 163, 76, 121, 245, 226, 199, 9, 146, 134, 237, 162, + 205, 185, 149, 178, 239, 53, 140, 23, 37, 206, 155, 20, 107, 79, 111, 116, + 44, 39, 93, 218, 185, 155, 50, 235, 85, 143, 127, 36, 32, 27, 88, 11, + 122, 135, 99, 34, 169, 217, 190, 218, 240, 91, 4, 59, 67, 83, 113, 253, + 228, 65, 139, 112, 103, 100, 42, 171, 95, 63, 120, 16, 34, 140, 25, 165, + 202, 251, 23, 3, 78, 129, 244, 96, 71, 104, 50, 174, 149, 188, 111, 49, + 236, 20, 77, 207, 117, 148, 39, 47, 90, 156, 59, 41, 211, 94, 221, 248, + 89, 130, 186, 225, 179, 8, 117, 198, 167, 18, 250, 141, 131, 37, 161, 219, + 56, 91, 82, 187, 125, 179, 97, 181, 232, 119, 14, 166, 132, 122, 227, 99, + 9, 233, 198, 206, 210, 212, 93, 159, 121, 168, 34, 254, 153, 128, 106, 224, + 47, 8, 28, 6, 137, 194, 230, 209, 138, 220, 103, 25, 234, 138, 207, 39, + 20, 26, 143, 75, 36, 55, 91, 86, 187, 126, 243, 96, 69, 232, 51, 14, + 149, 196, 111, 19, 108, 13, 237, 197, 141, 147, 37, 173, 219, 61, 155, 81, + 171, 124, 127, 97, 224, 40, 72, 30, 182, 136, 118, 230, 166, 202, 250, 215, + 3, 30, 129, 200, 96, 86, 168, 62, 254, 144, 64, 108, 48, 45, 212, 29, + 159, 73, 168, 54, 254, 150, 192, 110, 208, 44, 92, 29, 249, 201, 130, 214, + 225, 158, 200, 104, 86, 174, 190, 252, 112, 65, 228, 48, 75, 84, 55, 127, + 86, 160, 62, 248, 16, 66, 140, 49, 165, 212, 123, 31, 99, 72, 41, 246, + 158, 198, 232, 82, 206, 189, 148, 113, 175, 100, 124, 43, 97, 223, 104, 88, + 46, 186, 156, 115, 41, 229, 222, 203, 24, 87, 74, 190, 183, 48, 118, 148, + 38, 239, 90, 204, 59, 21, 211, 79, 29, 244, 9, 135, 70, 226, 178, 201, + 181, 150, 247, 46, 198, 156, 82, 233, 253, 142, 193, 164, 80, 123, 124, 35, + 97, 217, 232, 90, 206, 187, 20, 115, 79, 101, 244, 43, 7, 95, 66, 184, + 49, 178, 148, 117, 175, 103, 60, 42, 145, 223, 44, 88, 29, 250, 137, 131, + 38, 225, 218, 200, 91, 22, 187, 78, 243, 116, 69, 231, 115, 10, 165, 199, + 59, 18, 147, 77, 173, 245, 189, 135, 49, 162, 148, 121, 175, 98, 252, 41, + 129, 222, 224, 88, 72, 58, 182, 147, 54, 237, 214, 205, 158, 213, 168, 95, + 62, 184, 16, 114, 140, 37, 165, 219, 59, 27, 83, 75, 125, 247, 97, 134, + 168, 98, 254, 169, 128, 126, 224, 32, 72, 24, 54, 138, 150, 231, 46, 202, + 156, 87, 41, 254, 158, 192, 104, 80, 46, 188, 28, 113, 201, 228, 86, 203, + 126, 215, 96, 94, 168, 56, 126, 146, 160, 109, 184, 45, 178, 157, 181, 169, + 183, 62, 246, 144, 70, 236, 50, 205, 213, 149, 159, 47, 40, 28, 30, 137, + 200, 102, 214, 170, 222, 255, 24, 64, 10, 176, 7, 52, 2, 151, 65, 174, + 176, 124, 116, 33, 231, 88, 74, 186, 183, 51, 54, 149, 214, 239, 30, 204, + 8, 85, 198, 191, 18, 240, 13, 132, 5, 163, 67, 57, 241, 210, 196, 93, + 147, 121, 173, 226, 253, 137, 129, 166, 224, 122, 200, 35, 22, 153, 206, 234, + 212, 79, 31, 116, 8, 39, 70, 154, 178, 235, 53, 143, 87, 36, 62, 155, + 80, 107, 124, 47, 97, 220, 40, 89, 222, 186, 216, 115, 26, 165, 203, 59, + 23, 83, 78, 189, 244, 113, 135, 100, 98, 171, 105, 191, 110, 240, 44, 68, + 29, 243, 73, 133, 246, 227, 6, 201, 194, 214, 209, 158, 220, 104, 89, 238, + 186, 204, 115, 21, 229, 207, 11, 20, 7, 79, 66, 180, 49, 183, 84, 118, + 191, 102, 240, 42, 196, 31, 19, 72, 13, 246, 133, 134, 227, 34, 201, 217, + 150, 218, 238, 219, 12, 91, 69, 251, 115, 3, 101, 193, 235, 16, 79, 76, + 52, 53, 215, 87, 30, 190, 136, 112, 102, 164, 42, 251, 95, 3, 120, 1, + 226, 128, 73, 160, 54, 248, 22, 194, 142, 209, 164, 92, 123, 121, 227, 98, + 201, 233, 150, 206, 238, 212, 76, 95, 117, 248, 39, 2, 154, 129, 171, 32, + 127, 88, 32, 58, 152, 19, 42, 141, 223, 37, 152, 27, 42, 139, 95, 39, + 120, 26, 162, 139, 57, 167, 82, 250, 189, 131, 49, 161, 212, 120, 95, 98, + 184, 41, 178, 158, 245, 168, 71, 62, 178, 144, 117, 172, 39, 61, 218, 145, + 155, 44, 107, 93, 239, 121, 140, 34, 229, 217, 139, 26, 231, 75, 10, 183, + 71, 54, 178, 150, 245, 174, 199, 60, 82, 145, 253, 172, 65, 189, 240, 113, + 132, 36, 99, 91, 105, 251, 110, 195, 108, 81, 237, 252, 77, 129, 245, 160, + 71, 56, 50, 146, 149, 173, 175, 61, 188, 17, 177, 204, 116, 85, 231, 127, + 10, 160, 7, 56, 2, 146, 129, 173, 160, 125, 184, 33, 178, 152, 117, 170, + 167, 63, 58, 144, 19, 44, 13, 221, 197, 153, 147, 42, 237, 223, 13, 152, + 5, 170, 131, 63, 33, 208, 24, 92, 10, 185, 199, 50, 210, 149, 157, 175, + 41, 188, 30, 241, 200, 68, 86, 179, 126, 245, 224, 71, 8, 50, 134, 149, + 162, 239, 57, 140, 18, 229, 205, 139, 21, 167, 79, 58, 180, 19, 55, 77, + 214, 181, 158, 247, 40, 70, 158, 178, 232, 117, 142, 167, 36, 122, 155, 99, + 43, 105, 223, 110, 216, 44, 90, 157, 251, 41, 131, 94, 225, 248, 72, 66, + 182, 177, 182, 244, 118, 199, 102, 210, 170, 221, 191, 25, 176, 10, 244, 7, + 7, 66, 130, 177, 161, 180, 120, 119, 98, 166, 169, 186, 254, 243, 0, 69, + 192, 51, 16, 21, 204, 15, 21, 196, 15, 19, 68, 13, 243, 69, 133, 243, + 35, 5, 217, 195, 26, 209, 203, 28, 87, 73, 254, 182, 192, 118, 208, 38, + 220, 26, 217, 203, 26, 215, 75, 30, 183, 72, 118, 182, 166, 246, 250, 198, + 195, 18, 209, 205, 156, 85, 169, 255, 62, 192, 16, 80, 12, 60, 5, 209, + 195, 28, 81, 201, 252, 86, 193, 254, 208, 64, 92, 48, 57, 212, 18, 223, + 77, 152, 53, 170, 151, 63, 46, 144, 28, 108, 9, 237, 198, 205, 146, 213, + 173, 159, 61, 168, 17, 190, 140, 112, 101, 228, 43, 11, 95, 71, 120, 50, + 162, 149, 185, 175, 50, 252, 21, 129, 207, 32, 84, 24, 63, 74, 144, 55, + 44, 22, 157, 206, 233, 148, 78, 239, 116, 76, 39, 117, 218, 167, 27, 58, + 139, 83, 39, 125, 218, 161, 155, 56, 107, 82, 175, 125, 188, 33, 177, 216, + 116, 90, 167, 123, 58, 163, 83, 57, 253, 210, 193, 157, 144, 105, 172, 46, + 253, 220, 65, 153, 240, 106, 196, 47, 19, 92, 13, 249, 197, 130, 211, 33, + 157, 216, 105, 154, 174, 235, 60, 79, 81, 244, 60, 71, 81, 242, 188, 69, + 177, 243, 52, 69, 215, 115, 30, 165, 200, 123, 22, 163, 78, 249, 244, 66, + 199, 113, 146, 164, 109, 187, 109, 179, 109, 181, 237, 183, 13, 182, 133, 182, + 227, 54, 201, 214, 214, 222, 222, 216, 88, 90, 186, 187, 51, 51, 255, 63 ) + +random_mask_vec8 = numpy.array(random_mask_tuple, numpy.uint8) + diff --git a/gnuradio-core/src/python/gnuradio/packet_utils.py b/gnuradio-core/src/python/gnuradio/packet_utils.py index 2602f1fe..1417c17f 100644 --- a/gnuradio-core/src/python/gnuradio/packet_utils.py +++ b/gnuradio-core/src/python/gnuradio/packet_utils.py @@ -1,5 +1,5 @@ # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,7 +20,7 @@ # import struct -import Numeric +import numpy from gnuradio import gru @@ -72,7 +72,7 @@ def conv_1_0_string_to_packed_binary_string(s): default_access_code = \ conv_packed_binary_string_to_1_0_string('\xAC\xDD\xA4\xE2\xF2\x8C\x20\xFC') preamble = \ - conv_packed_binary_string_to_1_0_string('\xAA\xAA\xAA\xAB') + conv_packed_binary_string_to_1_0_string('\xA4\xF2') def is_1_0_string(s): if not isinstance(s, str): @@ -86,22 +86,26 @@ def string_to_hex_list(s): return map(lambda x: hex(ord(x)), s) -def whiten(s): - sa = Numeric.fromstring(s, Numeric.UnsignedInt8) - z = sa ^ random_mask_vec8[0:len(sa)] +def whiten(s, o): + sa = numpy.fromstring(s, numpy.uint8) + z = sa ^ random_mask_vec8[o:len(sa)+o] return z.tostring() -def dewhiten(s): - return whiten(s) # self inverse +def dewhiten(s, o): + return whiten(s, o) # self inverse -def make_header(payload_len): - return struct.pack('!HH', payload_len, payload_len) +def make_header(payload_len, whitener_offset=0): + # Upper nibble is offset, lower 12 bits is len + val = ((whitener_offset & 0xf) << 12) | (payload_len & 0x0fff) + #print "offset =", whitener_offset, " len =", payload_len, " val=", val + return struct.pack('!HH', val, val) def make_packet(payload, samples_per_symbol, bits_per_symbol, - access_code=default_access_code, pad_for_usrp=True): + access_code=default_access_code, pad_for_usrp=True, + whitener_offset=0, whitening=True): """ - Build a packet, given access code and payload. + Build a packet, given access code, payload, and whitener offset @param payload: packet payload, len [0, 4096] @param samples_per_symbol: samples per symbol (needed for padding calculation) @@ -109,6 +113,7 @@ def make_packet(payload, samples_per_symbol, bits_per_symbol, @param bits_per_symbol: (needed for padding calculation) @type bits_per_symbol: int @param access_code: string of ascii 0's and 1's + @param whitener_offset offset into whitener string to use [0-16) Packet will have access code at the beginning, followed by length, payload and finally CRC-32. @@ -116,6 +121,9 @@ def make_packet(payload, samples_per_symbol, bits_per_symbol, if not is_1_0_string(access_code): raise ValueError, "access_code must be a string containing only 0's and 1's (%r)" % (access_code,) + if not whitener_offset >=0 and whitener_offset < 16: + raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,) + (packed_access_code, padded) = conv_1_0_string_to_packed_binary_string(access_code) (packed_preamble, ignore) = conv_1_0_string_to_packed_binary_string(preamble) @@ -127,7 +135,13 @@ def make_packet(payload, samples_per_symbol, bits_per_symbol, if L > MAXLEN: raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,) - pkt = ''.join((packed_preamble, packed_access_code, make_header(L), whiten(payload_with_crc), '\x55')) + if whitening: + pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset), + whiten(payload_with_crc, whitener_offset), '\x55')) + else: + pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset), + (payload_with_crc), '\x55')) + if pad_for_usrp: pkt = pkt + (_npadding_bytes(len(pkt), samples_per_symbol, bits_per_symbol) * '\x55') @@ -143,8 +157,10 @@ def _npadding_bytes(pkt_byte_len, samples_per_symbol, bits_per_symbol): is a multiple of 128 samples. @param ptk_byte_len: len in bytes of packet, not including padding. - @param samples_per_symbol: samples per bit (1 bit / symbolwith GMSK) + @param samples_per_symbol: samples per bit (1 bit / symbolwidth GMSK) @type samples_per_symbol: int + @param bits_per_symbol: bits per symbol (log2(modulation order)) + @type bits_per_symbol: int @returns number of bytes of padding to append. """ @@ -156,13 +172,18 @@ def _npadding_bytes(pkt_byte_len, samples_per_symbol, bits_per_symbol): return byte_modulus - r -def unmake_packet(whitened_payload_with_crc): +def unmake_packet(whitened_payload_with_crc, whitener_offset=0, dewhitening=True): """ Return (ok, payload) @param whitened_payload_with_crc: string """ - payload_with_crc = dewhiten(whitened_payload_with_crc) + + if dewhitening: + payload_with_crc = dewhiten(whitened_payload_with_crc, whitener_offset) + else: + payload_with_crc = (whitened_payload_with_crc) + ok, payload = gru.check_crc32(payload_with_crc) if 0: @@ -432,5 +453,5 @@ random_mask_tuple = ( 199, 113, 146, 164, 109, 187, 109, 179, 109, 181, 237, 183, 13, 182, 133, 182, 227, 54, 201, 214, 214, 222, 222, 216, 88, 90, 186, 187, 51, 51, 255, 63 ) -random_mask_vec8 = Numeric.array(random_mask_tuple, Numeric.UnsignedInt8) +random_mask_vec8 = numpy.array(random_mask_tuple, numpy.uint8) diff --git a/gnuradio-core/src/python/gnuradio/vocoder/Makefile.am b/gnuradio-core/src/python/gnuradio/vocoder/Makefile.am new file mode 100644 index 00000000..69c140c1 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/vocoder/Makefile.am @@ -0,0 +1,26 @@ +# +# Copyright 2004,2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +grvocoderpythondir = $(grpythondir)/vocoder +grvocoderpython_PYTHON = \ + __init__.py diff --git a/gnuradio-core/src/python/gnuradio/vocoder/Makefile.in b/gnuradio-core/src/python/gnuradio/vocoder/Makefile.in new file mode 100644 index 00000000..12a8c5b5 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/vocoder/Makefile.in @@ -0,0 +1,917 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grvocoderpython_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gnuradio-core/src/python/gnuradio/vocoder +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grvocoderpythondir)" +grvocoderpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grvocoderpythondir = $(grpythondir)/vocoder +grvocoderpython_PYTHON = \ + __init__.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/vocoder/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-core/src/python/gnuradio/vocoder/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grvocoderpythonPYTHON: $(grvocoderpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(grvocoderpythondir)" || $(MKDIR_P) "$(DESTDIR)$(grvocoderpythondir)" + @list='$(grvocoderpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(grvocoderpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grvocoderpythondir)/$$f'"; \ + $(grvocoderpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grvocoderpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(grvocoderpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grvocoderpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-grvocoderpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(grvocoderpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(grvocoderpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(grvocoderpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(grvocoderpythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(grvocoderpythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grvocoderpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grvocoderpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grvocoderpythonPYTHON install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-grvocoderpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/python/gnuradio/vocoder/__init__.py b/gnuradio-core/src/python/gnuradio/vocoder/__init__.py new file mode 100644 index 00000000..a4917cf6 --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/vocoder/__init__.py @@ -0,0 +1 @@ +# make this a package diff --git a/gnuradio-core/src/tests/Makefile.am b/gnuradio-core/src/tests/Makefile.am index e120ae3f..2bf7cb4e 100644 --- a/gnuradio-core/src/tests/Makefile.am +++ b/gnuradio-core/src/tests/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001 Free Software Foundation, Inc. +# Copyright 2001,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,7 +21,7 @@ include $(top_srcdir)/Makefile.common -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) # list of programs run by "make check" and "make distcheck" @@ -32,10 +32,12 @@ TESTS = test_all #Test program to test setting up buffers using gr_test which can be run manually EXTRA_DIST = \ - test_buffers.py + test_buffers.py \ + benchmark_dotprod + noinst_PROGRAMS = \ - benchmark_dotprod \ + benchmark_dotprod_fff \ benchmark_dotprod_fsf \ benchmark_dotprod_fcc \ benchmark_dotprod_scc \ @@ -43,18 +45,25 @@ noinst_PROGRAMS = \ benchmark_dotprod_ccf \ benchmark_nco \ benchmark_vco \ + test_all \ test_runtime \ test_general \ - test_all \ test_filter \ test_vmcircbuf +#bin_PROGRAMS = \ +# test_all + + +noinst_SCRIPTS = \ + benchmark_dotprod + LIBGNURADIO = $(GNURADIO_CORE_LA) LIBGNURADIOQA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core-qa.la $(LIBGNURADIO) -benchmark_dotprod_SOURCES = benchmark_dotprod.cc -benchmark_dotprod_LDADD = $(LIBGNURADIO) +benchmark_dotprod_fff_SOURCES = benchmark_dotprod_fff.cc +benchmark_dotprod_fff_LDADD = $(LIBGNURADIO) benchmark_dotprod_fsf_SOURCES = benchmark_dotprod_fsf.cc benchmark_dotprod_fsf_LDADD = $(LIBGNURADIO) diff --git a/gnuradio-core/src/tests/Makefile.in b/gnuradio-core/src/tests/Makefile.in index 00c51562..b2ae18a5 100644 --- a/gnuradio-core/src/tests/Makefile.in +++ b/gnuradio-core/src/tests/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001 Free Software Foundation, Inc. +# Copyright 2001,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,12 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -82,34 +79,45 @@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common -noinst_PROGRAMS = benchmark_dotprod$(EXEEXT) \ +TESTS = test_all$(EXEEXT) +noinst_PROGRAMS = benchmark_dotprod_fff$(EXEEXT) \ benchmark_dotprod_fsf$(EXEEXT) benchmark_dotprod_fcc$(EXEEXT) \ benchmark_dotprod_scc$(EXEEXT) benchmark_dotprod_ccc$(EXEEXT) \ benchmark_dotprod_ccf$(EXEEXT) benchmark_nco$(EXEEXT) \ - benchmark_vco$(EXEEXT) test_runtime$(EXEEXT) \ - test_general$(EXEEXT) test_all$(EXEEXT) test_filter$(EXEEXT) \ + benchmark_vco$(EXEEXT) test_all$(EXEEXT) test_runtime$(EXEEXT) \ + test_general$(EXEEXT) test_filter$(EXEEXT) \ test_vmcircbuf$(EXEEXT) subdir = gnuradio-core/src/tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -118,15 +126,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -140,14 +168,10 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) -am_benchmark_dotprod_OBJECTS = benchmark_dotprod.$(OBJEXT) -benchmark_dotprod_OBJECTS = $(am_benchmark_dotprod_OBJECTS) -am__DEPENDENCIES_1 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la -am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) -benchmark_dotprod_DEPENDENCIES = $(am__DEPENDENCIES_2) am_benchmark_dotprod_ccc_OBJECTS = benchmark_dotprod_ccc.$(OBJEXT) benchmark_dotprod_ccc_OBJECTS = $(am_benchmark_dotprod_ccc_OBJECTS) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) benchmark_dotprod_ccc_DEPENDENCIES = $(am__DEPENDENCIES_2) am_benchmark_dotprod_ccf_OBJECTS = benchmark_dotprod_ccf.$(OBJEXT) benchmark_dotprod_ccf_OBJECTS = $(am_benchmark_dotprod_ccf_OBJECTS) @@ -155,6 +179,9 @@ benchmark_dotprod_ccf_DEPENDENCIES = $(am__DEPENDENCIES_2) am_benchmark_dotprod_fcc_OBJECTS = benchmark_dotprod_fcc.$(OBJEXT) benchmark_dotprod_fcc_OBJECTS = $(am_benchmark_dotprod_fcc_OBJECTS) benchmark_dotprod_fcc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_benchmark_dotprod_fff_OBJECTS = benchmark_dotprod_fff.$(OBJEXT) +benchmark_dotprod_fff_OBJECTS = $(am_benchmark_dotprod_fff_OBJECTS) +benchmark_dotprod_fff_DEPENDENCIES = $(am__DEPENDENCIES_2) am_benchmark_dotprod_fsf_OBJECTS = benchmark_dotprod_fsf.$(OBJEXT) benchmark_dotprod_fsf_OBJECTS = $(am_benchmark_dotprod_fsf_OBJECTS) benchmark_dotprod_fsf_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -185,30 +212,32 @@ test_runtime_DEPENDENCIES = $(am__DEPENDENCIES_3) am_test_vmcircbuf_OBJECTS = test_vmcircbuf.$(OBJEXT) test_vmcircbuf_OBJECTS = $(am_test_vmcircbuf_OBJECTS) test_vmcircbuf_DEPENDENCIES = $(am__DEPENDENCIES_3) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +SCRIPTS = $(noinst_SCRIPTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(benchmark_dotprod_SOURCES) \ - $(benchmark_dotprod_ccc_SOURCES) \ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(benchmark_dotprod_ccc_SOURCES) \ $(benchmark_dotprod_ccf_SOURCES) \ $(benchmark_dotprod_fcc_SOURCES) \ + $(benchmark_dotprod_fff_SOURCES) \ $(benchmark_dotprod_fsf_SOURCES) \ $(benchmark_dotprod_scc_SOURCES) $(benchmark_nco_SOURCES) \ $(benchmark_vco_SOURCES) $(test_all_SOURCES) \ $(test_filter_SOURCES) $(test_general_SOURCES) \ $(test_runtime_SOURCES) $(test_vmcircbuf_SOURCES) -DIST_SOURCES = $(benchmark_dotprod_SOURCES) \ - $(benchmark_dotprod_ccc_SOURCES) \ +DIST_SOURCES = $(benchmark_dotprod_ccc_SOURCES) \ $(benchmark_dotprod_ccf_SOURCES) \ $(benchmark_dotprod_fcc_SOURCES) \ + $(benchmark_dotprod_fff_SOURCES) \ $(benchmark_dotprod_fsf_SOURCES) \ $(benchmark_dotprod_scc_SOURCES) $(benchmark_nco_SOURCES) \ $(benchmark_vco_SOURCES) $(test_all_SOURCES) \ @@ -220,10 +249,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -231,9 +259,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -241,6 +276,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -253,73 +290,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -329,49 +359,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -379,15 +449,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -397,16 +610,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -415,78 +646,151 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# list of programs run by "make check" and "make distcheck" -TESTS = test_all +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) # test_atsc #Test program to test setting up buffers using gr_test which can be run manually EXTRA_DIST = \ - test_buffers.py + test_buffers.py \ + benchmark_dotprod + + +#bin_PROGRAMS = \ +# test_all +noinst_SCRIPTS = \ + benchmark_dotprod LIBGNURADIO = $(GNURADIO_CORE_LA) LIBGNURADIOQA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core-qa.la $(LIBGNURADIO) -benchmark_dotprod_SOURCES = benchmark_dotprod.cc -benchmark_dotprod_LDADD = $(LIBGNURADIO) +benchmark_dotprod_fff_SOURCES = benchmark_dotprod_fff.cc +benchmark_dotprod_fff_LDADD = $(LIBGNURADIO) benchmark_dotprod_fsf_SOURCES = benchmark_dotprod_fsf.cc benchmark_dotprod_fsf_LDADD = $(LIBGNURADIO) benchmark_dotprod_ccf_SOURCES = benchmark_dotprod_ccf.cc @@ -522,8 +826,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -554,45 +858,45 @@ clean-noinstPROGRAMS: echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done -benchmark_dotprod$(EXEEXT): $(benchmark_dotprod_OBJECTS) $(benchmark_dotprod_DEPENDENCIES) - @rm -f benchmark_dotprod$(EXEEXT) - $(CXXLINK) $(benchmark_dotprod_LDFLAGS) $(benchmark_dotprod_OBJECTS) $(benchmark_dotprod_LDADD) $(LIBS) benchmark_dotprod_ccc$(EXEEXT): $(benchmark_dotprod_ccc_OBJECTS) $(benchmark_dotprod_ccc_DEPENDENCIES) @rm -f benchmark_dotprod_ccc$(EXEEXT) - $(CXXLINK) $(benchmark_dotprod_ccc_LDFLAGS) $(benchmark_dotprod_ccc_OBJECTS) $(benchmark_dotprod_ccc_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_dotprod_ccc_OBJECTS) $(benchmark_dotprod_ccc_LDADD) $(LIBS) benchmark_dotprod_ccf$(EXEEXT): $(benchmark_dotprod_ccf_OBJECTS) $(benchmark_dotprod_ccf_DEPENDENCIES) @rm -f benchmark_dotprod_ccf$(EXEEXT) - $(CXXLINK) $(benchmark_dotprod_ccf_LDFLAGS) $(benchmark_dotprod_ccf_OBJECTS) $(benchmark_dotprod_ccf_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_dotprod_ccf_OBJECTS) $(benchmark_dotprod_ccf_LDADD) $(LIBS) benchmark_dotprod_fcc$(EXEEXT): $(benchmark_dotprod_fcc_OBJECTS) $(benchmark_dotprod_fcc_DEPENDENCIES) @rm -f benchmark_dotprod_fcc$(EXEEXT) - $(CXXLINK) $(benchmark_dotprod_fcc_LDFLAGS) $(benchmark_dotprod_fcc_OBJECTS) $(benchmark_dotprod_fcc_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_dotprod_fcc_OBJECTS) $(benchmark_dotprod_fcc_LDADD) $(LIBS) +benchmark_dotprod_fff$(EXEEXT): $(benchmark_dotprod_fff_OBJECTS) $(benchmark_dotprod_fff_DEPENDENCIES) + @rm -f benchmark_dotprod_fff$(EXEEXT) + $(CXXLINK) $(benchmark_dotprod_fff_OBJECTS) $(benchmark_dotprod_fff_LDADD) $(LIBS) benchmark_dotprod_fsf$(EXEEXT): $(benchmark_dotprod_fsf_OBJECTS) $(benchmark_dotprod_fsf_DEPENDENCIES) @rm -f benchmark_dotprod_fsf$(EXEEXT) - $(CXXLINK) $(benchmark_dotprod_fsf_LDFLAGS) $(benchmark_dotprod_fsf_OBJECTS) $(benchmark_dotprod_fsf_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_dotprod_fsf_OBJECTS) $(benchmark_dotprod_fsf_LDADD) $(LIBS) benchmark_dotprod_scc$(EXEEXT): $(benchmark_dotprod_scc_OBJECTS) $(benchmark_dotprod_scc_DEPENDENCIES) @rm -f benchmark_dotprod_scc$(EXEEXT) - $(CXXLINK) $(benchmark_dotprod_scc_LDFLAGS) $(benchmark_dotprod_scc_OBJECTS) $(benchmark_dotprod_scc_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_dotprod_scc_OBJECTS) $(benchmark_dotprod_scc_LDADD) $(LIBS) benchmark_nco$(EXEEXT): $(benchmark_nco_OBJECTS) $(benchmark_nco_DEPENDENCIES) @rm -f benchmark_nco$(EXEEXT) - $(CXXLINK) $(benchmark_nco_LDFLAGS) $(benchmark_nco_OBJECTS) $(benchmark_nco_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_nco_OBJECTS) $(benchmark_nco_LDADD) $(LIBS) benchmark_vco$(EXEEXT): $(benchmark_vco_OBJECTS) $(benchmark_vco_DEPENDENCIES) @rm -f benchmark_vco$(EXEEXT) - $(CXXLINK) $(benchmark_vco_LDFLAGS) $(benchmark_vco_OBJECTS) $(benchmark_vco_LDADD) $(LIBS) + $(CXXLINK) $(benchmark_vco_OBJECTS) $(benchmark_vco_LDADD) $(LIBS) test_all$(EXEEXT): $(test_all_OBJECTS) $(test_all_DEPENDENCIES) @rm -f test_all$(EXEEXT) - $(CXXLINK) $(test_all_LDFLAGS) $(test_all_OBJECTS) $(test_all_LDADD) $(LIBS) + $(CXXLINK) $(test_all_OBJECTS) $(test_all_LDADD) $(LIBS) test_filter$(EXEEXT): $(test_filter_OBJECTS) $(test_filter_DEPENDENCIES) @rm -f test_filter$(EXEEXT) - $(CXXLINK) $(test_filter_LDFLAGS) $(test_filter_OBJECTS) $(test_filter_LDADD) $(LIBS) + $(CXXLINK) $(test_filter_OBJECTS) $(test_filter_LDADD) $(LIBS) test_general$(EXEEXT): $(test_general_OBJECTS) $(test_general_DEPENDENCIES) @rm -f test_general$(EXEEXT) - $(CXXLINK) $(test_general_LDFLAGS) $(test_general_OBJECTS) $(test_general_LDADD) $(LIBS) + $(CXXLINK) $(test_general_OBJECTS) $(test_general_LDADD) $(LIBS) test_runtime$(EXEEXT): $(test_runtime_OBJECTS) $(test_runtime_DEPENDENCIES) @rm -f test_runtime$(EXEEXT) - $(CXXLINK) $(test_runtime_LDFLAGS) $(test_runtime_OBJECTS) $(test_runtime_LDADD) $(LIBS) + $(CXXLINK) $(test_runtime_OBJECTS) $(test_runtime_LDADD) $(LIBS) test_vmcircbuf$(EXEEXT): $(test_vmcircbuf_OBJECTS) $(test_vmcircbuf_DEPENDENCIES) @rm -f test_vmcircbuf$(EXEEXT) - $(CXXLINK) $(test_vmcircbuf_LDFLAGS) $(test_vmcircbuf_OBJECTS) $(test_vmcircbuf_LDADD) $(LIBS) + $(CXXLINK) $(test_vmcircbuf_OBJECTS) $(test_vmcircbuf_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -600,10 +904,10 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod_ccc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod_ccf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod_fcc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod_fff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod_fsf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_dotprod_scc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_nco.Po@am__quote@ @@ -615,22 +919,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_vmcircbuf.Po@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -641,17 +945,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -663,8 +963,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -674,13 +974,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -696,7 +995,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -705,7 +1004,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -717,7 +1016,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -731,23 +1030,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -767,23 +1079,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -794,10 +1104,13 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am -all-am: Makefile $(PROGRAMS) +all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: install: install-am install-exec: install-exec-am @@ -814,6 +1127,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -832,7 +1146,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -846,12 +1160,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -872,20 +1194,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS ctags \ - distclean distclean-compile distclean-generic \ + dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/tests/benchmark_dotprod b/gnuradio-core/src/tests/benchmark_dotprod new file mode 100755 index 00000000..69489e46 --- /dev/null +++ b/gnuradio-core/src/tests/benchmark_dotprod @@ -0,0 +1,46 @@ +#!/bin/sh +# +# Copyright 2008 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. +# + +DIR=. + +tests=" +benchmark_dotprod_fff +benchmark_dotprod_ccf +benchmark_dotprod_ccc +benchmark_dotprod_fcc +benchmark_dotprod_scc +benchmark_dotprod_fsf +" + +echo "uname -a" +uname -a + +if test -e /proc/cpuinfo +then + cat /proc/cpuinfo +fi + +for t in $tests +do + echo + echo "$t": + $DIR/$t +done diff --git a/gnuradio-core/src/tests/benchmark_dotprod.cc b/gnuradio-core/src/tests/benchmark_dotprod_fff.cc similarity index 100% rename from gnuradio-core/src/tests/benchmark_dotprod.cc rename to gnuradio-core/src/tests/benchmark_dotprod_fff.cc diff --git a/gnuradio-core/src/tests/benchmark_nco.cc b/gnuradio-core/src/tests/benchmark_nco.cc index 961442fc..9c4eff34 100644 --- a/gnuradio-core/src/tests/benchmark_nco.cc +++ b/gnuradio-core/src/tests/benchmark_nco.cc @@ -30,6 +30,7 @@ #include #include #include +#include #define ITERATIONS 20000000 #define BLOCK_SIZE (10 * 1000) // fits in cache diff --git a/gnuradio-core/src/tests/benchmark_vco.cc b/gnuradio-core/src/tests/benchmark_vco.cc index 5b39bf15..ed0ae3b6 100644 --- a/gnuradio-core/src/tests/benchmark_vco.cc +++ b/gnuradio-core/src/tests/benchmark_vco.cc @@ -30,6 +30,7 @@ #include #include #include +#include #define ITERATIONS 5000000 #define BLOCK_SIZE (10 * 1000) // fits in cache diff --git a/gnuradio-core/src/tests/test_buffers.py b/gnuradio-core/src/tests/test_buffers.py index 49250ad9..186a60bb 100755 --- a/gnuradio-core/src/tests/test_buffers.py +++ b/gnuradio-core/src/tests/test_buffers.py @@ -43,10 +43,10 @@ import sys #$ cat /proc/sys/kernel/shmmax #300000000 -class my_graph(gr.flow_graph): +class my_graph(gr.top_block): def __init__(self, seconds,history,output_multiple): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", type="string", default="", diff --git a/gnuradio-core/src/utils/Makefile.am b/gnuradio-core/src/utils/Makefile.am index a81e3ee9..07960a07 100644 --- a/gnuradio-core/src/utils/Makefile.am +++ b/gnuradio-core/src/utils/Makefile.am @@ -22,6 +22,7 @@ include $(top_srcdir)/Makefile.common EXTRA_DIST = \ + cic_comp_taps.m \ db_width.m \ filter_tools.m \ plot_freq_response.m \ @@ -38,6 +39,7 @@ EXTRA_DIST = \ read_float_binary.m \ read_int_binary.m \ read_short_binary.m \ + read_cshort_binary.m \ single_pole_iir.m \ write_float_binary.m \ write_short_binary.m diff --git a/gnuradio-core/src/utils/Makefile.in b/gnuradio-core/src/utils/Makefile.in index 1b8ad5b8..74a1aca7 100644 --- a/gnuradio-core/src/utils/Makefile.in +++ b/gnuradio-core/src/utils/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gnuradio-core/src/utils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -137,10 +163,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -148,9 +173,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -158,6 +190,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -170,73 +204,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -246,49 +273,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -296,15 +363,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -314,16 +524,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -332,64 +560,134 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = \ + cic_comp_taps.m \ db_width.m \ filter_tools.m \ plot_freq_response.m \ @@ -406,6 +704,7 @@ EXTRA_DIST = \ read_float_binary.m \ read_int_binary.m \ read_short_binary.m \ + read_cshort_binary.m \ single_pole_iir.m \ write_float_binary.m \ write_short_binary.m @@ -417,8 +716,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -448,10 +747,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -460,23 +755,21 @@ CTAGS: distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -487,6 +780,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile @@ -506,6 +802,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -521,7 +818,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -535,12 +832,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -559,18 +864,32 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-core/src/utils/cic_comp_taps.m b/gnuradio-core/src/utils/cic_comp_taps.m new file mode 100644 index 00000000..e0e0c2eb --- /dev/null +++ b/gnuradio-core/src/utils/cic_comp_taps.m @@ -0,0 +1,45 @@ +# +# Copyright 2008 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. +# + +# See Altera Application Note AN455 +# +# R = decimation factor, 8-256 +# Fc = passband (one-sided) cutoff frequency +# L = number of taps + +function taps = cic_comp_taps(R, Fc, L) + M = 1; %% Differential delay + N = 4; %% Number of stages + B = 18; %% Coeffi. Bit-width + Fs = 64e6; %% (High) Sampling freq in Hz before decimation + Fo = R*Fc/Fs; %% Normalized Cutoff freq; 0 - - * python/gmsk2/receive_path.py, python/gmsk2/transmit_path.py, - benchmark_gmsk_{tx,rx}.py: refactored to use modulation - independent pkt.py code. Lays the foundation for a single set of - tools that can exercise all modulations. More work required to - meet that goal, but we're closing in. - - * python/gmsk2/tunnel.py: refactored version of - tunnel_ip_null_mac. This creates a virtual ethernet inteface - using the TAP driver, and then tunnels packets across the air - using GMSK and a simple carrier sense MAC. Fixed problem with - truncation of large packets which was leading to stalls. - - * python/gmsk2/tunnel_ip_null_mac.py: removed. Replaced with - tunnel.py - -2006-06-15 Eric Blossom - - * python/usrp/usrp_fft.py (app_flow_graph.set_decim): added - missing return value. - - * python/usrp/usrp_oscope.py, python/usrp/usrp_fft.py: you can now - change the decimation factor in the GUI. - -2006-06-06 Eric Blossom - - * python/gmsk2/mpsk.py: Lots of rework. QPSK is now - working with mpsk_test.py. Need to confirm it on the air, and then - make BPSK work again. - - -2006-05-30 Eric Blossom - - Standardized on mpsk as the prefix. Renamed a bunch of stuff to - restore sanity: - * python/gmsk2/benchmark_xpsk_rx.py -> python/gmsk2/benchmark_mpsk_rx.py - * python/gmsk2/benchmark_xpsk_tx.py -> python/gmsk2/benchmark_mpsk_tx.py - * python/gmsk2/psk_receive_path.py -> python/gmsk2/mpsk_receive_path.py - * python/gmsk2/psk_transmit_path.py -> python/gmsk2/mpsk_transmit_path.py - * python/gmsk2/xpsk.py -> python/gmsk2/mpsk.py - * python/gmsk2/xpsk_pkt.py -> python/gmsk2/mpsk_pkt.py - * python/gmsk2/xpsk_test.py -> python/gmsk2/mpsk_test.py - -2006-05-29 Eric Blossom - - * python/gmsk2/qpsk_tester.py, python/gmsk2/qpsk_usrp_tester.py: - new. Test benches for qpsk code. Thanks Tom! - -2005-12-19 Martin Dvh - - updated multi_usrp examples which should now work 'out-of-the-box' with current cvs - (you need updated usrp,gr-usrp, gnuradio-core and gnuradio-examples) - - * configure.ac: added python/usrp_multi/Makefile - * python/Makefile.am: added multi_usrp - * python/multi_usrp/.cvsignore: new - * python/multi_usrp/Makefile.am: new - * python/multi_usrp/README: Made this into a real readme - * python/multi_usrp/multi_usrp_oscope.py: changed to work with current usrp_multi code in cvs - * python/multi_usrp/multi_usrp_rx_cfile.py: changed to work with current usrp_multi code in cvs - * python/multi_usrp/multi_usrp.py: removed - * python/multi_usrp/multi_usrp_oscope_showcounters.py: removed - * python/multi_usrp/multi_usrp_oscope_simple.py: removed - * python/multi_usrp/multi_usrp_oscope_standalone.py: removed - * python/multi_usrp/multi_usrp_rx_tofile.py: removed - * python/multi_usrp/multi_usrp_rx_tofile_standalone.py: removed - * python/multi_usrp/multi_usrp_test_counting.py: removed - -2006-05-10 Eric Blossom - - * python/gmsk2/psk_transmit_path.py: add diff=False per Bob Vincent. - -2006-04-06 Eric Blossom - - * python/usrp/usrp_fft.py: removed explicit setting of fft_rate. - The code will now pick it up from config files. - -2006-03-12 Eric Blossom - - * python/usrp/usrp_siggen.py: added daughterboard support. - * python/usrp/usrp_oscope.py, python/usrp/usrp_fft.py: fixed so - frequency can be set even after an invalid frequency is passed on - the command line. - -2006-03-10 Eric Blossom - - * python/gmsk2/xpsk.py: doc fixes. - -2006-03-08 Eric Blossom - - * python/usrp/fm_tx_2_daughterboards.py: example that transmits - different signals out two daughterboards. - -2006-02-02 Eric Blossom - - * python/usrp/usrp_oscope.py: support manual scaling of - Y-axis. Smarter defaulting of rx_subdev_spec if user doesn't pick. - * python/usrp/usrp_fft.py: Smarter defaulting of rx_subdev_spec if user doesn't pick. - -2006-02-01 Eric Blossom - - * python/gmsk2/transmit_path.py: fixed so it works on both A and B sides. - -2006-01-30 Eric Blossom - - * python/gmsk2/receive_path.py (receive_path.set_auto_tr): added - set_auto_tr to the receive path to have it work properly with - changes in auto t/r switching semantics. - - * python/usrp/fm_tx4.py (fm_tx_graph.__init__): changes to have it - work in both A and B sides. - -2005-12-19 Martin Dvh - - * multi_usrp/README, multi_usrp/multi_usrp.py, multi_usrp/multi_usrp_oscope.py, - multi_usrp/multi_usrp_oscope_showcounters.py, multi_usrp/multi_usrp_oscope_simple.py, - multi_usrp/multi_usrp_oscope_standalone.py, multi_usrp/multi_usrp_rx_tofile.py, - multi_usrp/multi_usrp_rx_tofile_standalone.py, multi_usrp/multi_usrp_test_counting.py: - new directory and examples to exercise multiple usrps coherently - connected together. These require additional code that is not yet - in the repository. - -2005-12-13 Eric Blossom - - * python/usrp/usrp_wfm_rcv2_nogui.py: new: receive two FM stations - simultaneously. - -2005-12-09 Eric Blossom - - * python/gmsk2/tunnel_ip_null_mac.py: cleaned up. gathered mac - functions together. - - * python/usrp/usrp_wfm_rcv_pll.py (pick_subdevice), - python/usrp/usrp_wfm_rcv_nogui.py (pick_subdevice): use library version. - * python/usrp/fm_tx4.py: explicity call set_enable(True) to turn - on transmitter (required due to policy change). Also removed - pick_tx_subdevice. Now use version in usrp library. - -2005-12-09 Eric Blossom - - Made release 2.6 - -2005-12-08 Eric Blossom - - * python/gmsk/rx.py, python/gmsk/rx2.py, python/gmsk/tx.py, - python/gmsk/tx2.py, python/gmsk/xcvr.py, python/gmsk/xcvr2.py, - ggmsk-test.py, gmsk-test.py: removed. Use the code in ../gmsk2 instead. - - * python/gmsk2/receive_path.py, python/gmsk2/transmit_path.py: - New. Extracted hierarchical blocks from benchmark_gmsk_{tx,rx}.py - -2005-12-06 Eric Blossom - - * python/gmsk2/benchmark_gmsk_tx.py, - python/gmsk2/benchmark_gmsk_rx.py: now support "--bitrate" command - line arg. - * python/gmsk2/pick_bitrate.py: given a bitrate, determine - samples/baud and interp/decim ratio. - -2005-11-11 Eric Blossom - - * python/usrp/usrp_nbfm_ptt.py, python/usrp/usrp_wfm_rcv.py: moved - pick_xx_subdev to library. - -2005-11-01 Eric Blossom - - * python/usrp/dbs_nbfm.py: removed. Use usrp_nbfm_rcv.py instead. - -2005-10-24 Eric Blossom - - * python/usrp/usrp_oscope.py: basically identical to usrp_fft.py, - but uses oscope sink. - - * python/usrp/usrp_wfm_rcv_nogui.py, python/usr/usrp_wfm_rcv.py: - increased usrp decimation factor to 200 reduce host cpu - requirements. With the half-band in the FPGA, good decimation - factors are even values in [8,256]. - -2005-10-14 Eric Blossom - - * python/usrp/usrp_fft.py: gui mods. - * python/usrp/usrp_wfm_rcv.py: reworked gui. - -2005-10-11 Eric Blossom - - * python/usrp/usrp_waterfall.py: removed. Use usrp_fft.py -W instead. - -2005-10-10 Eric Blossom - - * python/audio/audio_copy.py, python/audio/audio_play.py, - python/audio/audio_to_file.py, python/audio/dial_tone.py, - python/audio/mono_tone.py, python/audio/multi_tone.py, - python/audio/spectrum_inversion.py: revised to use standard - command line args and canonical structure. - -2005-09-21 Eric Blossom - - * python/usrp/usrp_fft.py: extensively reworked to use new - daughterboard auto-instantiation framework. - -2005-07-30 Martin Dvh - - * python/usrp/tvrx_tv_rcv.py: PAL/NTSC TV demod. Work in progress. - -2005-07-21 Eric Blossom - - * python/usrp/benchmark_usb.py, python/usrp/usrp_rx_cfile.py, - python/usrp/usrp_oscope.py, python/usrp/dbs_debug: doc fix. - -2005-07-19 Eric Blossom - - * python/usrp/ayfabtu.py: new. Transmit on 25 frequencies simultaneously! - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac: mods for x86_64, $(NO_UNDEFINED) - - * python/usrp/usrp_waterfall.py, python/usrp/dbs_debug.py, - python/usrp/flexrf_debug.py, python/usrp/flexrf_siggen.py, - python/usrp/usrp_fft.py, python/usrp/usrp_oscope.py, - python/usrp/usrp_rx_cfile.py, python/usrp/usrp_rx_file.py, - python/usrp/usrp_siggen.py, python/usrp/usrp_waterfall.py: - gru.hexint fix for python 2.4. - -2005-06-17 Eric Blossom - - * python/apps/README: new directory for applications. - -2005-06-16 Eric Blossom - - * python/usrp/tvrx_wfm_rcv_gui.py: add -d audio_device option; fix - volume increment so up == 1.0/down; fix default range of bottom FFT. - -2005-06-13 Eric Blossom - - * python/usrp/tvrx_wfm_rcv_gui.py: removed limit on what frequency - can be set. - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - -2005-04-27 Eric Blossom - - * python/digital_voice/encdec.py: simulate gsm voice encode / - gmsk mod / gmsk demod / gsm voice decode. - -2005-03-29 Eric Blossom - - * python/gmsk/ggmsk-test.py, python/gmsk/gmsk-test.py: new GMSK - test code from Joshua Lackey - - * python/gmsk/tx.py, python/gmsk/rx.py: new tx and rx modules that - depending on command line options do either FSK or GMSK and use - either files, sockets, named pipes or a USRP for their inputs and - outputs. From Bob Vincent - -2005-03-29 Eric Blossom - - * python/audio/audio_copy.py, python/audio/multi_tone.py, - python/audio/mono_tone.py: replace ALSA specific default argument - with "" - -2005-03-04 Eric Blossom - - * python/usrp/nbfm_ptt_quick_and_dirty.py: simple NBFM - push-to-talk transceiver. (Works, but has a latency problem that - needs to be fixed) - -2005-02-28 Eric Blossom - - * python/usrp/fsk_tx.py: reduced gain, added -N (no gui) flag. - * python/usrp/fsk_rx.py: added -N (no gui) flag. - Running Tx and Rx on same machine (1.4 GHz Pentium M) 100kb/sec - burns up about 70% of CPU with -N options on both. - -2005-02-25 Eric Blossom - - Removed usrp0 directory. - Moved contents of usrp1 directory into usrp directory. - -2005-02-22 Eric Blossom - - * python/usrp1/nbfm_rcv.py: added squelch. - -2004-10-13 Eric Blossom - - * configure.ac: upped rev to 0.2cvs - -2004-10-11 Eric Blossom - - * Makefile.am (EXTRA_DIST): added config.h.in - -2004-10-07 Chuck Swiger - - * python/audio/audio_to_file.py: coerce audio sample rate to int. - -2004-10-07 Eric Blossom - - * python/usrp1/wfm_rcv.py: new. Single channel broadcast FM - receiver for usrp1 + microtune 4937. - -2004-09-23 Eric Blossom - - * config/usrp_fusb_tech.m4, config/bnv_have_qt.m4, config/cppunit.m4, - config/gr_check_mc4020.m4, config/gr_check_usrp.m4, config/gr_doxygen.m4, - config/gr_gprof.m4, config/gr_scripting.m4, config/gr_set_md_cpu.m4, - config/pkg.m4, config/usrp_fusb_tech.m4: added additional quoting - to first arg of AC_DEFUN to silence automake warning. - -2004-09-18 Eric Blossom - - These changes happened somewhere around DCC - - * python/usrp/usrp_fft.py: new - * python/usrp1/dsb_tx.py: new double sideband AM transmitter - * python/usrp1/fm_tx4.py: simultaneous 4 channel narrow band FM transmitter - * python/usrp1/fsk_rx.py: FSK Rx module. Needs some work. - * python/usrp1/fsk_tx.py: FSK Tx module. Needs some work. - -2004-08-19 Eric Blossom - - * python/usrp/usrp_rx_file.py (main): added command line parsing. - * python/usrp/usrp_siggen.py: added command line parsing. - - * python/usrp1/test_digital_loopback_lfsr.py, - python/usrp1/test_digital_loopback_counting.py, - python/usrp1/test_digital_counting.py: new. Take advantage of - scheduler fix to implement both the tx and rx path's in the same - flow graph. - - -2004-07-31 Eric Blossom - - * python/usrp0, python/usrp1: new directories for rev specific examples. - * python/usrp1/loopback.py (main): new. - -2004-07-30 Eric Blossom - - * python/usrp/usrp_siggen.py: now directly queries hardware for dac freq. - * python/usrp/usrp_rx_file.py: now directly queries hardware for dac freq. - -2004-07-17 Eric Blossom - - * python/mc4020/fm_demod.py: updated to use new mc4020 block, formatting - -2004-07-12 Eric Blossom - - * configure.ac: upped rev to 0.1cvs - -2004-07-03 Eric Blossom - - * python/usrp/usrp_siggen.py: Yeah! The first demo program that - reconfigures the flow graph on the fly! - -# -# 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. -# diff --git a/gnuradio-examples/Makefile.am b/gnuradio-examples/Makefile.am index b6207ff0..41e9ee4d 100644 --- a/gnuradio-examples/Makefile.am +++ b/gnuradio-examples/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,4 +21,4 @@ include $(top_srcdir)/Makefile.common -SUBDIRS = python +SUBDIRS = python c++ diff --git a/gnuradio-examples/Makefile.in b/gnuradio-examples/Makefile.in index 6ed234c5..0120bb9a 100644 --- a/gnuradio-examples/Makefile.in +++ b/gnuradio-examples/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common ChangeLog + $(top_srcdir)/Makefile.common subdir = gnuradio-examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,64 +572,133 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -SUBDIRS = python +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = python c++ all: all-recursive .SUFFIXES: @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/c++/Makefile.am b/gnuradio-examples/c++/Makefile.am new file mode 100644 index 00000000..43c63847 --- /dev/null +++ b/gnuradio-examples/c++/Makefile.am @@ -0,0 +1,23 @@ +# +# Copyright 2006,2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common +#SUBDIRS = dial_tone diff --git a/gnuradio-examples/c++/Makefile.in b/gnuradio-examples/c++/Makefile.in new file mode 100644 index 00000000..406e8b50 --- /dev/null +++ b/gnuradio-examples/c++/Makefile.in @@ -0,0 +1,874 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2006,2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gnuradio-examples/c++ +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/c++/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-examples/c++/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +#SUBDIRS = dial_tone +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/Makefile.am b/gnuradio-examples/python/Makefile.am index f0992784..3a1acf51 100644 --- a/gnuradio-examples/python/Makefile.am +++ b/gnuradio-examples/python/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,5 +19,18 @@ # Boston, MA 02110-1301, USA. # -SUBDIRS = apps audio channel-coding digital_voice digital multi-antenna \ - multi_usrp networking usrp +include $(top_srcdir)/Makefile.common + +SUBDIRS = \ + apps \ + audio \ + digital \ + digital-bert \ + digital_voice \ + mp-sched \ + multi-antenna \ + multi_usrp \ + network \ + ofdm \ + usrp \ + usrp2 diff --git a/gnuradio-examples/python/Makefile.in b/gnuradio-examples/python/Makefile.in index bbf1eb6d..bb19fada 100644 --- a/gnuradio-examples/python/Makefile.in +++ b/gnuradio-examples/python/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,29 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007,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 -*- +# +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +75,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,24 +572,155 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -SUBDIRS = apps audio channel-coding digital_voice digital multi-antenna \ - multi_usrp networking usrp +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = \ + apps \ + audio \ + digital \ + digital-bert \ + digital_voice \ + mp-sched \ + multi-antenna \ + multi_usrp \ + network \ + ofdm \ + usrp \ + usrp2 all: all-recursive .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -366,10 +751,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -401,8 +782,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -446,8 +826,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -472,8 +852,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -483,13 +863,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -503,22 +882,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -532,7 +910,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -540,10 +918,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -564,6 +947,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -579,8 +963,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -594,12 +977,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -618,23 +1009,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/apps/Makefile.in b/gnuradio-examples/python/apps/Makefile.in index 28eb8be4..c13a446b 100644 --- a/gnuradio-examples/python/apps/Makefile.in +++ b/gnuradio-examples/python/apps/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = gnuradio-examples/python/apps DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,12 +549,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = hf_explorer hf_radio EXTRA_DIST = README all: all-recursive @@ -333,8 +587,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -365,10 +619,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -400,8 +650,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -445,8 +694,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -471,8 +720,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -482,13 +731,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -502,22 +750,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -531,7 +778,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -539,6 +786,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -578,8 +827,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -593,12 +841,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -617,22 +873,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/gnuradio-examples/python/apps/hf_explorer/Makefile.am b/gnuradio-examples/python/apps/hf_explorer/Makefile.am index 49aac101..88ad5212 100644 --- a/gnuradio-examples/python/apps/hf_explorer/Makefile.am +++ b/gnuradio-examples/python/apps/hf_explorer/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,8 +19,13 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ - README \ - hfx2.py \ +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/hf_explorer + +dist_ourdata_DATA = \ + README \ hfx_help +dist_ourdata_SCRIPTS = \ + hfx2.py diff --git a/gnuradio-examples/python/apps/hf_explorer/Makefile.in b/gnuradio-examples/python/apps/hf_explorer/Makefile.in index cc7ae310..6912eaa4 100644 --- a/gnuradio-examples/python/apps/hf_explorer/Makefile.in +++ b/gnuradio-examples/python/apps/hf_explorer/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,35 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +77,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = README $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/apps/hf_explorer -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +160,26 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +187,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +204,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +218,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +287,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +377,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +538,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,26 +574,149 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ - README \ - hfx2.py \ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/hf_explorer +dist_ourdata_DATA = \ + README \ hfx_help +dist_ourdata_SCRIPTS = \ + hfx2.py + all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -352,16 +740,48 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done tags: TAGS TAGS: @@ -370,22 +790,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -396,10 +815,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) $(DATA) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -415,6 +840,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -430,7 +856,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -442,14 +868,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -468,18 +902,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/apps/hf_explorer/hfx2.py b/gnuradio-examples/python/apps/hf_explorer/hfx2.py index 697f054e..00a3b904 100755 --- a/gnuradio-examples/python/apps/hf_explorer/hfx2.py +++ b/gnuradio-examples/python/apps/hf_explorer/hfx2.py @@ -66,6 +66,9 @@ # added more comments. # # 2.4.1 updates usrp interface to support auto subdev +# +# 2.8.1 changed saved file format from 8-byte complex to +# 4-byte short for obvious storage space savings. # Web server control disabled by default. Do not enable # until directory structure and scripts are in place. @@ -77,7 +80,7 @@ AM_SYNC_DISPLAY = False import os, wx, sys, math import wx.lib.evtmgr as em -from gnuradio.wxgui import powermate, fftsink +from gnuradio.wxgui import powermate, fftsink2 from gnuradio import gr, audio, eng_notation, usrp, gru from gnuradio.eng_option import eng_option from optparse import OptionParser @@ -115,9 +118,9 @@ def pick_subdevice(u): If there's a daughterboard on B, select B. Otherwise, select A. """ - if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + if u.db(0, 0).dbid() >= 0: # dbid is < 0 if there's no d'board or a problem return (0, 0) - if u.db[1][0].dbid() >= 0: + if u.db(1, 0).dbid() >= 0: return (1, 0) return (0, 0) @@ -206,7 +209,7 @@ class MyFrame(wx.Frame): self.xdata = [] self.ydata = [] - self.fg = gr.flow_graph() + self.tb = gr.top_block() # radio variables, initial conditions self.frequency = self.usrp_center @@ -242,7 +245,7 @@ class MyFrame(wx.Frame): else: self.PLAY_FROM_USRP = False if self.PLAY_FROM_USRP: - self.src = usrp.source_c(decim_rate=options.decim) + self.src = usrp.source_s(decim_rate=options.decim) if options.rx_subdev_spec is None: options.rx_subdev_spec = pick_subdevice(self.src) self.src.set_mux(usrp.determine_rx_mux_value(self.src, options.rx_subdev_spec)) @@ -251,13 +254,13 @@ class MyFrame(wx.Frame): self.tune_offset = 0 # -self.usrp_center - self.src.rx_freq(0) else: - self.src = gr.file_source (gr.sizeof_gr_complex,options.input_file) + self.src = gr.file_source (gr.sizeof_short,options.input_file) self.tune_offset = 2200 # 2200 works for 3.5-4Mhz band # save radio data to a file if SAVE_RADIO_TO_FILE: - file = gr.file_sink(gr.sizeof_gr_complex, options.radio_file) - self.fg.connect (self.src, file) + file = gr.file_sink(gr.sizeof_short, options.radio_file) + self.tb.connect (self.src, file) # 2nd DDC xlate_taps = gr.firdes.low_pass ( \ @@ -265,6 +268,18 @@ class MyFrame(wx.Frame): self.xlate = gr.freq_xlating_fir_filter_ccf ( \ fir_decim, xlate_taps, self.tune_offset, usb_rate ) + # convert rf data in interleaved short int form to complex + s2ss = gr.stream_to_streams(gr.sizeof_short,2) + s2f1 = gr.short_to_float() + s2f2 = gr.short_to_float() + src_f2c = gr.float_to_complex() + self.tb.connect(self.src,s2ss) + self.tb.connect((s2ss,0),s2f1) + self.tb.connect((s2ss,1),s2f2) + self.tb.connect(s2f1,(src_f2c,0)) + self.tb.connect(s2f2,(src_f2c,1)) + + # Complex Audio filter audio_coeffs = gr.firdes.complex_band_pass ( 1.0, # gain @@ -279,11 +294,11 @@ class MyFrame(wx.Frame): self.audio_filter = gr.fir_filter_ccc ( 1, audio_coeffs) # Main +/- 16Khz spectrum display - self.fft = fftsink.fft_sink_c (self.fg, self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240)) + self.fft = fftsink2.fft_sink_c (self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240)) # AM Sync carrier if AM_SYNC_DISPLAY: - self.fft2 = fftsink.fft_sink_c (self.fg, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240)) + self.fft2 = fftsink.fft_sink_c (self.tb, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240)) c2f = gr.complex_to_float() @@ -327,30 +342,30 @@ class MyFrame(wx.Frame): self.scale = gr.multiply_const_ff(0.00001) dst = audio.sink(long(self.af_sample_rate)) - self.fg.connect(self.src,self.xlate,self.fft) - self.fg.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0)) - self.fg.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3) - self.fg.connect((c2f3,0),phaser1,(f2c,0)) - self.fg.connect((c2f3,1),phaser2,(f2c,1)) - self.fg.connect(f2c,(am_det,1)) - self.fg.connect(am_det,c2f2,(combine,0)) - self.fg.connect(self.audio_filter,c2f,self.sel_sb,(combine,1)) + self.tb.connect(src_f2c,self.xlate,self.fft) + self.tb.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0)) + self.tb.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3) + self.tb.connect((c2f3,0),phaser1,(f2c,0)) + self.tb.connect((c2f3,1),phaser2,(f2c,1)) + self.tb.connect(f2c,(am_det,1)) + self.tb.connect(am_det,c2f2,(combine,0)) + self.tb.connect(self.audio_filter,c2f,self.sel_sb,(combine,1)) if AM_SYNC_DISPLAY: - self.fg.connect(self.pll_carrier_filter,self.fft2) - self.fg.connect(combine,self.scale) - self.fg.connect(self.scale,(sqr1,0)) - self.fg.connect(self.scale,(sqr1,1)) - self.fg.connect(sqr1, intr, offset, (agc, 1)) - self.fg.connect(self.scale,(agc, 0)) - self.fg.connect(agc,dst) + self.tb.connect(self.pll_carrier_filter,self.fft2) + self.tb.connect(combine,self.scale) + self.tb.connect(self.scale,(sqr1,0)) + self.tb.connect(self.scale,(sqr1,1)) + self.tb.connect(sqr1, intr, offset, (agc, 1)) + self.tb.connect(self.scale,(agc, 0)) + self.tb.connect(agc,dst) if SAVE_AUDIO_TO_FILE: f_out = gr.file_sink(gr.sizeof_short,options.audio_file) sc1 = gr.multiply_const_ff(64000) f2s1 = gr.float_to_short() - self.fg.connect(agc,sc1,f2s1,f_out) + self.tb.connect(agc,sc1,f2s1,f_out) - self.fg.start() + self.tb.start() # for mouse position reporting on fft display em.eventManager.Register(self.Mouse, wx.EVT_MOTION, self.fft.win) @@ -467,7 +482,7 @@ class MyFrame(wx.Frame): # Menu exit def TimeToQuit(self, event): - self.fg.stop() + self.tb.stop() self.Close(True) # Powermate being turned diff --git a/gnuradio-examples/python/apps/hf_radio/Makefile.am b/gnuradio-examples/python/apps/hf_radio/Makefile.am index 3f7340ef..e514076f 100644 --- a/gnuradio-examples/python/apps/hf_radio/Makefile.am +++ b/gnuradio-examples/python/apps/hf_radio/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,16 +19,21 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/hf_radio + +dist_ourdata_DATA = \ hfir.sci \ + radio.xml \ input.py \ output.py \ - radio.py \ - radio.xml \ README.TXT \ ssbagc.py \ ssbdemod.py \ - ssb_taps \ startup.py \ - ui.py + ssb_taps +dist_ourdata_SCRIPTS = \ + radio.py \ + ui.py diff --git a/gnuradio-examples/python/apps/hf_radio/Makefile.in b/gnuradio-examples/python/apps/hf_radio/Makefile.in index d2736228..26627a1e 100644 --- a/gnuradio-examples/python/apps/hf_radio/Makefile.in +++ b/gnuradio-examples/python/apps/hf_radio/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,35 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +77,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/apps/hf_radio -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +160,26 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +187,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +204,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +218,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +287,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +377,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +538,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,34 +574,157 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/hf_radio +dist_ourdata_DATA = \ hfir.sci \ + radio.xml \ input.py \ output.py \ - radio.py \ - radio.xml \ README.TXT \ ssbagc.py \ ssbdemod.py \ - ssb_taps \ startup.py \ + ssb_taps + +dist_ourdata_SCRIPTS = \ + radio.py \ ui.py all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -360,16 +748,48 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done tags: TAGS TAGS: @@ -378,22 +798,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -404,10 +823,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) $(DATA) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -423,6 +848,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -438,7 +864,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -450,14 +876,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -476,18 +910,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/apps/hf_radio/README.TXT b/gnuradio-examples/python/apps/hf_radio/README.TXT index df8a901e..7c7edf5e 100644 --- a/gnuradio-examples/python/apps/hf_radio/README.TXT +++ b/gnuradio-examples/python/apps/hf_radio/README.TXT @@ -1,3 +1,10 @@ +# 2008-02-07 +# +# These files have not yet been update to use the new top_block/hier_block2 +# interfaces. Until someone does that, this files will no longer run. +# + + The files in this directory implement a fairly simple HF radio that works with the basic rx daughter board on the USRP. diff --git a/gnuradio-examples/python/apps/hf_radio/input.py b/gnuradio-examples/python/apps/hf_radio/input.py index 3a62a68c..a7c87128 100644 --- a/gnuradio-examples/python/apps/hf_radio/input.py +++ b/gnuradio-examples/python/apps/hf_radio/input.py @@ -7,7 +7,7 @@ from gnuradio import gr, gru, optfir from gnuradio import usrp -import usrp_dbid +from usrpm import usrp_dbid import math # Put special knowlege of usrp here. diff --git a/gnuradio-examples/python/audio/Makefile.am b/gnuradio-examples/python/audio/Makefile.am index a054d28f..356b5155 100644 --- a/gnuradio-examples/python/audio/Makefile.am +++ b/gnuradio-examples/python/audio/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,15 +19,20 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/audio + +dist_ourdata_SCRIPTS = \ audio_copy.py \ audio_fft.py \ audio_play.py \ audio_to_file.py \ - dial_squelch.py \ dial_tone.py \ - dialtone_v.py \ + dial_tone_daemon.py \ + dial_tone_wav.py \ mono_tone.py \ multi_tone.py \ + noise.py \ spectrum_inversion.py \ - test_resampler.py + test_resampler.py diff --git a/gnuradio-examples/python/audio/Makefile.in b/gnuradio-examples/python/audio/Makefile.in index a1a6db4c..e2e6d9a0 100644 --- a/gnuradio-examples/python/audio/Makefile.in +++ b/gnuradio-examples/python/audio/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,34 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/audio -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +158,18 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +177,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +194,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +208,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +277,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +367,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +528,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,34 +564,156 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/audio +dist_ourdata_SCRIPTS = \ audio_copy.py \ audio_fft.py \ audio_play.py \ audio_to_file.py \ - dial_squelch.py \ dial_tone.py \ - dialtone_v.py \ + dial_tone_daemon.py \ + dial_tone_wav.py \ mono_tone.py \ multi_tone.py \ + noise.py \ spectrum_inversion.py \ - test_resampler.py + test_resampler.py all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -360,16 +737,31 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -378,22 +770,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -404,10 +795,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -423,6 +820,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -438,7 +836,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -450,14 +848,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -476,18 +882,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/audio/audio_copy.py b/gnuradio-examples/python/audio/audio_copy.py index 88dd0883..3094c9f7 100755 --- a/gnuradio-examples/python/audio/audio_copy.py +++ b/gnuradio-examples/python/audio/audio_copy.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-I", "--audio-input", type="string", default="", @@ -58,7 +58,7 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/audio_fft.py b/gnuradio-examples/python/audio/audio_fft.py index 7c54dd55..960e0f94 100755 --- a/gnuradio-examples/python/audio/audio_fft.py +++ b/gnuradio-examples/python/audio/audio_fft.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -23,14 +23,14 @@ from gnuradio import gr, gru, audio from gnuradio import eng_notation from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider +from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider from optparse import OptionParser import wx import sys -class app_flow_graph(stdgui.gui_flow_graph): +class app_top_block(stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) self.frame = frame self.panel = panel @@ -57,11 +57,12 @@ class app_flow_graph(stdgui.gui_flow_graph): # build the graph if options.waterfall: self.scope = \ - waterfallsink.waterfall_sink_f (self, panel, fft_size=1024, sample_rate=sample_rate) + waterfallsink2.waterfall_sink_f (panel, fft_size=1024, sample_rate=sample_rate) elif options.oscilloscope: - self.scope = scopesink.scope_sink_f(self, panel, sample_rate=sample_rate) + self.scope = scopesink2.scope_sink_f(panel, sample_rate=sample_rate) else: - self.scope = fftsink.fft_sink_f (self, panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30) + self.scope = fftsink2.fft_sink_f (panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30, + ref_scale=1.0, ref_level=0, y_divs=12) self.src = audio.source (sample_rate, options.audio_input) @@ -130,7 +131,7 @@ class app_flow_graph(stdgui.gui_flow_graph): def main (): - app = stdgui.stdapp(app_flow_graph, "Audio FFT", nstatus=1) + app = stdgui2.stdapp(app_top_block, "Audio FFT", nstatus=1) app.MainLoop() if __name__ == '__main__': diff --git a/gnuradio-examples/python/audio/audio_play.py b/gnuradio-examples/python/audio/audio_play.py index 37b2abda..f9520c7c 100755 --- a/gnuradio-examples/python/audio/audio_play.py +++ b/gnuradio-examples/python/audio/audio_play.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-F", "--filename", type="string", default="audio.dat", @@ -52,6 +52,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/audio_to_file.py b/gnuradio-examples/python/audio/audio_to_file.py index 7aa49e7f..0d54f7bd 100755 --- a/gnuradio-examples/python/audio/audio_to_file.py +++ b/gnuradio-examples/python/audio/audio_to_file.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) usage="%prog: [options] output_filename" parser = OptionParser(option_class=eng_option, usage=usage) @@ -58,6 +58,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/dial_squelch.py b/gnuradio-examples/python/audio/dial_squelch.py deleted file mode 100755 index 8a0c3f56..00000000 --- a/gnuradio-examples/python/audio/dial_squelch.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python - -# Copyright 2006 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 import gr, audio, eng_option -from gnuradio.eng_option import eng_option -from math import pi, cos -from optparse import OptionParser - -""" -This script generates a standard dial tone and then applies a sinusoidal -envelope to vary it's loudness. The audio is then passed through the -power squelch block before it gets sent to the sound card. By varying -the command line parameters, one can see the effect of differing -amounts of power averaging, threshold, and attack/decay ramping. -""" - -class app_flow_graph(gr.flow_graph): - def __init__(self, options, args): - gr.flow_graph.__init__(self) - - # Create dial tone by adding two sine waves - SRC1 = gr.sig_source_f(options.rate, gr.GR_SIN_WAVE, 350, 0.5, 0.0) - SRC2 = gr.sig_source_f(options.rate, gr.GR_SIN_WAVE, 440, 0.5, 0.0) - ADD = gr.add_ff() - - # Convert to vector stream (and back) to apply raised cosine envelope - # You could also do this with a vector_source_f block that repeats. - S2V = gr.stream_to_vector(gr.sizeof_float, options.rate) - ENV = [0.5-cos(2*pi*x/options.rate)/2 for x in range(options.rate)] - MLT = gr.multiply_const_vff(ENV) - V2S = gr.vector_to_stream(gr.sizeof_float, options.rate) - - # Run through power squelch with user supplied or default options - # Zero output when squelch is invoked - SQL = gr.pwr_squelch_ff(options.threshold, options.alpha, options.ramp, False) - DST = audio.sink(options.rate) - - # Solder it all together - self.connect(SRC1, (ADD, 0)) - self.connect(SRC2, (ADD, 1)) - self.connect(ADD, S2V, MLT, V2S, SQL, DST) - -def main(): - parser = OptionParser(option_class=eng_option) - parser.add_option("-r", "--rate", type="int", default=8000, help="set audio output sample rate to RATE", metavar="RATE") - parser.add_option("-t", "--threshold", type="eng_float", default=-10.0, help="set power squelch to DB", metavar="DB") - parser.add_option("-a", "--alpha", type="eng_float", default=None, help="set alpha to ALPHA", metavar="ALPHA") - parser.add_option("-m", "--ramp", type="int", default=None, help="set attack/decay ramp to SAMPLES", metavar="SAMPLES") - (options, args) = parser.parse_args() - - if options.alpha == None: - options.alpha = 50.0/options.rate - - if options.ramp == None: - options.ramp = options.rate/50 # ~ 20 ms - - print "Using audio rate of", options.rate - print "Using threshold of", options.threshold, "db" - print "Using alpha of", options.alpha - print "Using ramp of", options.ramp, "samples" - - fg = app_flow_graph(options, args) - - try: - fg.run() - except KeyboardInterrupt: - pass - -if __name__ == "__main__": - main() diff --git a/gnuradio-examples/python/audio/dial_tone.py b/gnuradio-examples/python/audio/dial_tone.py index 1ec1b000..65c5e50b 100755 --- a/gnuradio-examples/python/audio/dial_tone.py +++ b/gnuradio-examples/python/audio/dial_tone.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,10 +25,10 @@ from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", type="string", default="", @@ -52,6 +52,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/dial_tone_daemon.py b/gnuradio-examples/python/audio/dial_tone_daemon.py new file mode 100755 index 00000000..d30d0e11 --- /dev/null +++ b/gnuradio-examples/python/audio/dial_tone_daemon.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008 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 import gr, gru +from gnuradio import audio +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import os + +class my_top_block(gr.top_block): + + def __init__(self): + gr.top_block.__init__(self) + + parser = OptionParser(option_class=eng_option) + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm output device name. E.g., hw:0,0 or /dev/dsp") + parser.add_option("-r", "--sample-rate", type="eng_float", default=48000, + help="set sample rate to RATE (48000)") + (options, args) = parser.parse_args () + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + sample_rate = int(options.sample_rate) + ampl = 0.1 + + 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) + dst = audio.sink (sample_rate, options.audio_output) + self.connect (src0, (dst, 0)) + self.connect (src1, (dst, 1)) + + +if __name__ == '__main__': + pid = gru.daemonize() + print "To stop this program, enter 'kill %d'" % pid + my_top_block().run() diff --git a/gnuradio-examples/python/audio/dial_tone_wav.py b/gnuradio-examples/python/audio/dial_tone_wav.py new file mode 100755 index 00000000..6e87b2a4 --- /dev/null +++ b/gnuradio-examples/python/audio/dial_tone_wav.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008 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. +# + +# GNU Radio example program to record a dial tone to a WAV file + +from gnuradio import gr +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class my_top_block(gr.top_block): + + def __init__(self): + gr.top_block.__init__(self) + + usage = "%prog: [options] filename" + parser = OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-r", "--sample-rate", type="eng_float", default=48000, + help="set sample rate to RATE (48000)") + parser.add_option("-N", "--samples", type="eng_float", default=None, + help="number of samples to record") + (options, args) = parser.parse_args () + if len(args) != 1 or options.samples is None: + parser.print_help() + raise SystemExit, 1 + + sample_rate = int(options.sample_rate) + ampl = 0.1 + + 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) + head0 = gr.head(gr.sizeof_float, int(options.samples)) + head1 = gr.head(gr.sizeof_float, int(options.samples)) + dst = gr.wavfile_sink(args[0], 2, int(options.sample_rate), 16) + + self.connect(src0, head0, (dst, 0)) + self.connect(src1, head1, (dst, 1)) + +if __name__ == '__main__': + try: + my_top_block().run() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/audio/dialtone_v.py b/gnuradio-examples/python/audio/dialtone_v.py deleted file mode 100755 index ab1ca2a6..00000000 --- a/gnuradio-examples/python/audio/dialtone_v.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python - -# Copyright 2006 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 import gr, audio -from math import pi, sin - -""" -This test script demonstrates the use of element-wise vector processing -vs. stream processing. The example is artificial in that the stream -version in dial_tone.py is the normal way to do it; in addition, the -envelope processing here is just for demo purposes and isn't needed. -""" - -# For testing different buffer sizes -rate = 48000 - -fg = gr.flow_graph() - -# Two streams of floats -a = gr.sig_source_f(rate, gr.GR_SIN_WAVE, 350, 0.5, 0.0); -b = gr.sig_source_f(rate, gr.GR_SIN_WAVE, 440, 0.5, 0.0); - -# Turn them into vectors of length 'size' -av = gr.stream_to_vector(gr.sizeof_float, rate) -bv = gr.stream_to_vector(gr.sizeof_float, rate) - -# Make a vector adder for float vectors -adder = gr.add_vff(rate) - -# Make a 1 Hz sine envelope -envelope = [sin(2*pi*x/rate)*0.5 for x in range(rate)] -multiplier = gr.multiply_const_vff(envelope) - -# Make an offset adder -offset = gr.add_const_vff((0.5,)*rate) - -# Turn the vector back into a stream of floats -result = gr.vector_to_stream(gr.sizeof_float, rate) - -# Play it -sink = audio.sink(rate) - -fg.connect(a, av) -fg.connect(b, bv) -fg.connect(av, (adder, 0)) -fg.connect(bv, (adder, 1)) -fg.connect(adder, multiplier, offset, result, sink) - -try: - fg.run() -except KeyboardInterrupt: - pass diff --git a/gnuradio-examples/python/audio/mono_tone.py b/gnuradio-examples/python/audio/mono_tone.py index d5c7e638..869c2e5f 100755 --- a/gnuradio-examples/python/audio/mono_tone.py +++ b/gnuradio-examples/python/audio/mono_tone.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -29,10 +29,10 @@ from optparse import OptionParser #print os.getpid() #raw_input('Attach gdb and press Enter: ') -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", type="string", default="", @@ -61,6 +61,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/multi_tone.py b/gnuradio-examples/python/audio/multi_tone.py index 4cf99338..7d47dd5d 100755 --- a/gnuradio-examples/python/audio/multi_tone.py +++ b/gnuradio-examples/python/audio/multi_tone.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -29,10 +29,10 @@ from optparse import OptionParser #print os.getpid() #raw_input('Attach gdb and press Enter: ') -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", type="string", default="", @@ -85,6 +85,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/noise.py b/gnuradio-examples/python/audio/noise.py new file mode 100755 index 00000000..75f74108 --- /dev/null +++ b/gnuradio-examples/python/audio/noise.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr +from gnuradio import audio +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class my_top_block(gr.top_block): + + def __init__(self): + gr.top_block.__init__(self) + + parser = OptionParser(option_class=eng_option) + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm output device name. E.g., hw:0,0 or /dev/dsp") + parser.add_option("-r", "--sample-rate", type="eng_float", default=48000, + help="set sample rate to RATE (48000)") + (options, args) = parser.parse_args () + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + sample_rate = int(options.sample_rate) + ampl = 0.1 + + src = gr.glfsr_source_b(32) # Pseudorandom noise source + b2f = gr.chunks_to_symbols_bf([ampl, -ampl], 1) + dst = audio.sink(sample_rate, options.audio_output) + self.connect(src, b2f, dst) + +if __name__ == '__main__': + try: + my_top_block().run() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/audio/spectrum_inversion.py b/gnuradio-examples/python/audio/spectrum_inversion.py index 9bb87aa4..021e23f2 100755 --- a/gnuradio-examples/python/audio/spectrum_inversion.py +++ b/gnuradio-examples/python/audio/spectrum_inversion.py @@ -1,4 +1,24 @@ #!/usr/bin/env python +# +# Copyright 2004,2005,2007 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. + # # Gang - Here's a simple script that demonstrates spectrum inversion # using the multiply by [1,-1] method (mixing with Nyquist frequency). @@ -11,10 +31,10 @@ from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-I", "--audio-input", type="string", default="", @@ -43,6 +63,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/audio/test_resampler.py b/gnuradio-examples/python/audio/test_resampler.py index 710b0fa6..4644c5e2 100755 --- a/gnuradio-examples/python/audio/test_resampler.py +++ b/gnuradio-examples/python/audio/test_resampler.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,16 +20,16 @@ # Boston, MA 02110-1301, USA. # -from gnuradio import gr, gru, blks +from gnuradio import gr, gru, blks2 from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", type="string", default="", @@ -54,13 +54,13 @@ class my_graph(gr.flow_graph): ampl = 0.1 src0 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 650, ampl) - rr = blks.rational_resampler_fff(self, interp, decim) + rr = blks2.rational_resampler_fff(interp, decim) dst = audio.sink (output_rate, options.audio_output) self.connect (src0, rr, (dst, 0)) if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/channel-coding/Makefile.am b/gnuradio-examples/python/channel-coding/Makefile.am deleted file mode 100644 index 3a6c3382..00000000 --- a/gnuradio-examples/python/channel-coding/Makefile.am +++ /dev/null @@ -1,41 +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. -# - -EXTRA_DIST = \ - README \ - fsm_utils.py \ - test_tcm.py \ - test_tcm1.py \ - test_tcm2.py \ - test_tcm_parallel.py \ - test_tcm_combined.py \ - test_sccc_hard.py \ - test_sccc_soft.py \ - test_sccc_turbo.py \ - test_viterbi_equalization1.py \ - test_viterbi_equalization.py \ - test_turbo_equalization.py \ - test_turbo_equalization1.py \ - test_turbo_equalization2.py - -SUBDIRS = fsm_files - -MOSTLYCLEANFILES = *.pyc diff --git a/gnuradio-examples/python/channel-coding/Makefile.in b/gnuradio-examples/python/channel-coding/Makefile.in deleted file mode 100644 index ebda0621..00000000 --- a/gnuradio-examples/python/channel-coding/Makefile.in +++ /dev/null @@ -1,657 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = gnuradio-examples/python/channel-coding -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = \ - README \ - fsm_utils.py \ - test_tcm.py \ - test_tcm1.py \ - test_tcm2.py \ - test_tcm_parallel.py \ - test_tcm_combined.py \ - test_sccc_hard.py \ - test_sccc_soft.py \ - test_sccc_turbo.py \ - test_viterbi_equalization1.py \ - test_viterbi_equalization.py \ - test_turbo_equalization.py \ - test_turbo_equalization1.py \ - test_turbo_equalization2.py - -SUBDIRS = fsm_files -MOSTLYCLEANFILES = *.pyc -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/channel-coding/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-examples/python/channel-coding/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-recursive - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-examples/python/channel-coding/fsm_files/Makefile.am b/gnuradio-examples/python/channel-coding/fsm_files/Makefile.am deleted file mode 100644 index 081f62fc..00000000 --- a/gnuradio-examples/python/channel-coding/fsm_files/Makefile.am +++ /dev/null @@ -1,37 +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. -# - -EXTRA_DIST = \ - awgn1o2_128.fsm \ - awgn1o2_16.fsm \ - awgn1o2_4.fsm \ - awgn1o2_8.fsm \ - awgn2o3_16.fsm \ - awgn2o3_4.fsm \ - awgn2o3_4_msb.fsm \ - awgn2o3_4_msbG.fsm \ - awgn2o3_8.fsm \ - awgn2o4_4.fsm \ - disconnected.fsm \ - rep3.fsm \ - rep5.fsm \ - simple.fsm - diff --git a/gnuradio-examples/python/channel-coding/fsm_files/Makefile.in b/gnuradio-examples/python/channel-coding/fsm_files/Makefile.in deleted file mode 100644 index 45c99565..00000000 --- a/gnuradio-examples/python/channel-coding/fsm_files/Makefile.in +++ /dev/null @@ -1,496 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = gnuradio-examples/python/channel-coding/fsm_files -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = \ - awgn1o2_128.fsm \ - awgn1o2_16.fsm \ - awgn1o2_4.fsm \ - awgn1o2_8.fsm \ - awgn2o3_16.fsm \ - awgn2o3_4.fsm \ - awgn2o3_4_msb.fsm \ - awgn2o3_4_msbG.fsm \ - awgn2o3_8.fsm \ - awgn2o4_4.fsm \ - disconnected.fsm \ - rep3.fsm \ - rep5.fsm \ - simple.fsm - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/channel-coding/fsm_files/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-examples/python/channel-coding/fsm_files/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-examples/python/channel-coding/fsm_files/rep5.fsm b/gnuradio-examples/python/channel-coding/fsm_files/rep5.fsm deleted file mode 100644 index 581858ec..00000000 --- a/gnuradio-examples/python/channel-coding/fsm_files/rep5.fsm +++ /dev/null @@ -1,7 +0,0 @@ -2 1 8 - -0 0 - -0 7 - -1/3 repetiotion code diff --git a/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm b/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm deleted file mode 100644 index 07fb0852..00000000 --- a/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm +++ /dev/null @@ -1,13 +0,0 @@ -1 4 1 - -1 -2 -3 -0 - -0 -0 -0 -0 - -essentially this fsm has no inputs and no outputs; it ijust cycles through all 4 states. diff --git a/gnuradio-examples/python/channel-coding/fsm_utils.py b/gnuradio-examples/python/channel-coding/fsm_utils.py deleted file mode 100755 index c5968e85..00000000 --- a/gnuradio-examples/python/channel-coding/fsm_utils.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# - - -import re -import math -import sys -import operator - - - - -###################################################################### -# Decimal to any base conversion. -# Convert 'num' to a list of 'l' numbers representing 'num' -# to base 'base' (most significant symbol first). -###################################################################### -def dec2base(num,base,l): - s=range(l) - n=num - for i in range(l): - s[l-i-1]=n%base - n=int(n/base) - if n!=0: - print 'Number ', num, ' requires more than ', l, 'digits.' - return s - - -###################################################################### -# Conversion from any base to decimal. -# Convert a list 's' of symbols to a decimal number -# (most significant symbol first) -###################################################################### -def base2dec(s,base): - num=0 - for i in range(len(s)): - num=num*base+s[i] - return num - - - - - -###################################################################### -# Automatically generate the lookup table that maps the FSM outputs -# to channel inputs corresponding to a channel 'channel' and a modulation -# 'mod'. Optional normalization of channel to unit energy. -# This table is used by the 'metrics' block to translate -# channel outputs to metrics for use with the Viterbi algorithm. -# Limitations: currently supports only one-dimensional modulations. -###################################################################### -def make_isi_lookup(mod,channel,normalize): - dim=mod[0] - constellation = mod[1] - - if normalize: - p = 0 - for i in range(len(channel)): - p = p + channel[i]**2 - for i in range(len(channel)): - channel[i] = channel[i]/math.sqrt(p) - - lookup=range(len(constellation)**len(channel)) - for o in range(len(constellation)**len(channel)): - ss=dec2base(o,len(constellation),len(channel)) - ll=0 - for i in range(len(channel)): - ll=ll+constellation[ss[i]]*channel[i] - lookup[o]=ll - return (1,lookup) - - - - - - -###################################################################### -# A list of common modulations. -# Format: (dimensionality,constellation) -###################################################################### -pam2 = (1,[-1, 1]) -pam4 = (1,[-3, -1, 3, 1]) # includes Gray mapping -pam8 = (1,[-7, -5, -3, -1, 1, 3, 5, 7]) - -psk4=(2,[1, 0, \ - 0, 1, \ - 0, -1,\ - -1, 0]) # includes Gray mapping -psk8=(2,[math.cos(2*math.pi*0/8), math.sin(2*math.pi*0/8), \ - math.cos(2*math.pi*1/8), math.sin(2*math.pi*1/8), \ - math.cos(2*math.pi*2/8), math.sin(2*math.pi*2/8), \ - math.cos(2*math.pi*3/8), math.sin(2*math.pi*3/8), \ - math.cos(2*math.pi*4/8), math.sin(2*math.pi*4/8), \ - math.cos(2*math.pi*5/8), math.sin(2*math.pi*5/8), \ - math.cos(2*math.pi*6/8), math.sin(2*math.pi*6/8), \ - math.cos(2*math.pi*7/8), math.sin(2*math.pi*7/8)]) - -orth2 = (2,[1, 0, \ - 0, 1]) -orth4=(4,[1, 0, 0, 0, \ - 0, 1, 0, 0, \ - 0, 0, 1, 0, \ - 0, 0, 0, 1]) - -###################################################################### -# A list of channels to be tested -###################################################################### - -# C test channel (J. Proakis, Digital Communications, McGraw-Hill Inc., 2001) -c_channel = [0.227, 0.460, 0.688, 0.460, 0.227] - - - - - - - - - - -if __name__ == '__main__': - make_fsm_bin_cc_ff (1,2,[[7,5]]) - print "----------\n" - make_fsm_bin_cc_ff (2,3,[[1,0,2],[0,1,6]]) - diff --git a/gnuradio-examples/python/channel-coding/test_sccc_hard.py b/gnuradio-examples/python/channel-coding/test_sccc_hard.py deleted file mode 100755 index d634282f..00000000 --- a/gnuradio-examples/python/channel-coding/test_sccc_hard.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () - - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi - va_in = trellis.viterbi_s(fi,K,0,-1) # Put -1 if the Initial/Final states are not set. - deinter = trellis.permutation(interleaver.K(),interleaver.DEINTER(),1,gr.sizeof_short) - metrics_out = trellis.metrics_s(fo.O(),1,[0,1,2,3],trellis.TRELLIS_HARD_SYMBOL) # data preprocessing to generate metrics for outer Viterbi (hard decisions) - va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s() - - fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics_in) - fg.connect (metrics_in,va_in,deinter,metrics_out,va_out,fsmi2s,dst) - - fg.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 4: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - rep=int(args[3]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/channel-coding/test_sccc_soft.py b/gnuradio-examples/python/channel-coding/test_sccc_soft.py deleted file mode 100755 index 23e6553c..00000000 --- a/gnuradio-examples/python/channel-coding/test_sccc_soft.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - - - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () - - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi - gnd = gr.vector_source_f([0],True); - siso_in = trellis.siso_f(fi,K,0,-1,True,False,trellis.TRELLIS_MIN_SUM) # Put -1 if the Initial/Final states are not set. - deinter = trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) - va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s() - - fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics_in) - fg.connect (gnd,(siso_in,0)) - fg.connect (metrics_in,(siso_in,1)) - fg.connect (siso_in,deinter,va_out,fsmi2s,dst) - - fg.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 4: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - rep=int(args[3]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/channel-coding/test_sccc_turbo.py b/gnuradio-examples/python/channel-coding/test_sccc_turbo.py deleted file mode 100755 index f67fb092..00000000 --- a/gnuradio-examples/python/channel-coding/test_sccc_turbo.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - - - -def make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type): - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi - scale = gr.multiply_const_ff(1.0/N0) - gnd = gr.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - fg.connect (gnd,inter[0]) - fg.connect (metrics_in,scale) - fg.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - fg.connect (metrics_in,(siso_in[it+1],1)) - fg.connect (siso_in[it],deinter[it],(siso_out[it],1)) - fg.connect (gnd,(siso_out[it],0)) - fg.connect (siso_out[it],inter[it+1]) - fg.connect (inter[it],(siso_in[it],0)) - else: - fg.connect (siso_in[it],deinter[it],siso_out[it]) - fg.connect (inter[it],(siso_in[it],0)) - - return (metrics_in,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed): - fg = gr.flow_graph () - - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - #(head,tail) = make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT) - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s() - - fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,head) - fg.connect (tail,fsmi2s,dst) - - fg.run() - - #print enc_out.ST(), enc_in.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 4: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - rep=int(args[3]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0): # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/channel-coding/test_tcm.py b/gnuradio-examples/python/channel-coding/test_tcm.py deleted file mode 100755 index f2250155..00000000 --- a/gnuradio-examples/python/channel-coding/test_tcm.py +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () - - - # TX - #packet = [0]*Kb - #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 - #packet[i] = random.randint(0, 1) # random 0s and 1s - #src = gr.vector_source_s(packet,False) - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - #b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - #s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits - #dst = gr.vector_sink_s(); - dst = gr.check_lfsr_32k_s() - - - fg.connect (src,src_head,s2fsmi,enc,mod) - #fg.connect (src,b2s,s2fsmi,enc,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics) - fg.connect (metrics,va,fsmi2s,dst) - #fg.connect (metrics,va,fsmi2s,s2b,dst) - - - fg.run() - - # A bit of cheating: run the program once and print the - # final encoder state.. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #ntotal = len(packet) - #if len(dst.data()) != ntotal: - #print "Error: not enough data\n" - #nright = 0; - #for i in range(ntotal): - #if packet[i]==dst.data()[i]: - #nright=nright+1 - #else: - #print "Error in ", i - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname=args[0] - esn0_db=float(args[1]) # Es/No in dB - rep=int(args[2]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_fname Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/channel-coding/test_tcm1.py b/gnuradio-examples/python/channel-coding/test_tcm1.py deleted file mode 100755 index 66d7131e..00000000 --- a/gnuradio-examples/python/channel-coding/test_tcm1.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () - - # TX - packet = [0]*Kb - # this for loop is TOO slow!!! - for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 - packet[i] = random.randint(0, 1) # random 0s and 1s - src = gr.vector_source_s(packet,False) - #src = gr.lfsr_32k_source_s() - #src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits - dst = gr.vector_sink_s(); - #dst = gr.check_lfsr_32k_s(); - - - #fg.connect (src,src_head,s2fsmi,enc,mod) - fg.connect (src,b2s,s2fsmi,enc,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics) - #fg.connect (metrics,va,fsmi2s,dst) - fg.connect (metrics,va,fsmi2s,s2b,dst) - - - fg.run() - - # A bit of cheating: run the program once and print the - # final encoder state.. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - #ntotal = dst.ntotal () - #nright = dst.nright () - #runlength = dst.runlength () - ntotal = len(packet) - if len(dst.data()) != ntotal: - print "Error: not enough data\n" - nright = 0; - # this for loop is TOO slow!!! - for i in range(ntotal): - if packet[i]==dst.data()[i]: - nright=nright+1 - #else: - #print "Error in ", i - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname=args[0] - esn0_db=float(args[1]) # Es/No in dB - rep=int(args[2]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_fname Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%1==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/channel-coding/test_tcm2.py b/gnuradio-examples/python/channel-coding/test_tcm2.py deleted file mode 100755 index 9680909e..00000000 --- a/gnuradio-examples/python/channel-coding/test_tcm2.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () - - - # TX - #packet = [0]*Kb - #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 - #packet[i] = random.randint(0, 1) # random 0s and 1s - #src = gr.vector_source_s(packet,False) - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - #b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - #s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits - #dst = gr.vector_sink_s(); - dst = gr.check_lfsr_32k_s() - - - fg.connect (src,src_head,s2fsmi,enc,mod) - #fg.connect (src,b2s,s2fsmi,enc,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics) - fg.connect (metrics,va,fsmi2s,dst) - #fg.connect (metrics,va,fsmi2s,s2b,dst) - - - fg.run() - - # A bit of cheating: run the program once and print the - # final encoder state.. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #ntotal = len(packet) - #if len(dst.data()) != ntotal: - #print "Error: not enough data\n" - #nright = 0; - #for i in range(ntotal): - #if packet[i]==dst.data()[i]: - #nright=nright+1 - #else: - #print "Error in ", i - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 2: - esn0_db=float(args[0]) # Es/No in dB - rep=int(args[1]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm2.py Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - f=trellis.fsm(1,2,[5,7]) # generate FSM specification from the generator matrix - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/channel-coding/test_tcm_combined.py b/gnuradio-examples/python/channel-coding/test_tcm_combined.py deleted file mode 100755 index e286f88f..00000000 --- a/gnuradio-examples/python/channel-coding/test_tcm_combined.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - - # RX - va = trellis.viterbi_combined_s(f,K,0,-1,dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s(); - - - fg.connect (src,src_head,s2fsmi,enc,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,va,fsmi2s,dst) - - - fg.run() - - # A bit of cheating: run the program once and print the - # final encoder state.. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname=args[0] - esn0_db=float(args[1]) # Es/No in dB - rep=int(args[2]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm_combined.py fsm_fname Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file (will hopefully be automated in the future...) - Kb=1024*16 # packet size in bits (make it multiple of 16) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utils.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gnuradio-examples/python/channel-coding/test_tcm_parallel.py b/gnuradio-examples/python/channel-coding/test_tcm_parallel.py deleted file mode 100755 index f9dcb585..00000000 --- a/gnuradio-examples/python/channel-coding/test_tcm_parallel.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed,P): - fg = gr.flow_graph () - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16*P) # packet size in shorts - s2fsmi=gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - s2p = gr.stream_to_streams(gr.sizeof_short,P) # serial to parallel - enc = trellis.encoder_ss(f,0) # initiali state = 0 - mod = gr.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add=[] - noise=[] - for i in range(P): - add.append(gr.add_ff()) - noise.append(gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)) - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - p2s = gr.streams_to_stream(gr.sizeof_short,P) # parallel to serial - fsmi2s=gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s() - - fg.connect (src,src_head,s2fsmi,s2p) - for i in range(P): - fg.connect ((s2p,i),(enc,i),(mod,i)) - fg.connect ((mod,i),(add[i],0)) - fg.connect (noise[i],(add[i],1)) - fg.connect (add[i],(metrics,i)) - fg.connect ((metrics,i),(va,i),(p2s,i)) - fg.connect (p2s,fsmi2s,dst) - - - fg.run() - - # A bit of cheating: run the program once and print the - # final encoder state. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - - return (ntotal,ntotal-nright) - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname=args[0] - esn0_db=float(args[1]) # Es/No in dB - rep=int(args[2]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_fname Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file - P=4 # how many parallel streams? - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i),P) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gnuradio-examples/python/channel-coding/test_turbo_equalization.py b/gnuradio-examples/python/channel-coding/test_turbo_equalization.py deleted file mode 100755 index 11382623..00000000 --- a/gnuradio-examples/python/channel-coding/test_turbo_equalization.py +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import fsm_utils - - -def make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): - metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO - scale = gr.multiply_const_ff(1.0/N0) - gnd = gr.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - fg.connect (gnd,inter[0]) - fg.connect (metrics_in,scale) - fg.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - fg.connect (metrics_in,(siso_in[it+1],1)) - fg.connect (siso_in[it],deinter[it],(siso_out[it],1)) - fg.connect (gnd,(siso_out[it],0)) - fg.connect (siso_out[it],inter[it+1]) - fg.connect (inter[it],(siso_in[it],0)) - else: - fg.connect (siso_in[it],deinter[it],siso_out[it]) - fg.connect (inter[it],(siso_in[it],0)) - - return (metrics_in,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,Es,N0,IT,seed): - fg = gr.flow_graph () - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the iouter FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - # essentially here we implement the combination of modulation and channel as a memoryless modulation (the memory induced by the channel is hidden in the innner FSM) - mod = gr.chunks_to_symbols_sf(tot_constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s(); - - fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,head) - fg.connect (tail,fsmi2s,dst) - - fg.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #print ntotal,nright,runlength - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname_out=args[0] - esn0_db=float(args[1]) - rep=int(args[2]) - else: - sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=64*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - if len(tot_constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - N0=pow(10.0,-esn0_db/10.0); # noise variance - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gnuradio-examples/python/channel-coding/test_turbo_equalization1.py b/gnuradio-examples/python/channel-coding/test_turbo_equalization1.py deleted file mode 100755 index 5afd5ba6..00000000 --- a/gnuradio-examples/python/channel-coding/test_turbo_equalization1.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): - metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO - scale = gr.multiply_const_ff(1.0/N0) - gnd = gr.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - fg.connect (gnd,inter[0]) - fg.connect (metrics_in,scale) - fg.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - fg.connect (scale,(siso_in[it+1],1)) - fg.connect (siso_in[it],deinter[it],(siso_out[it],1)) - fg.connect (gnd,(siso_out[it],0)) - fg.connect (siso_out[it],inter[it+1]) - fg.connect (inter[it],(siso_in[it],0)) - else: - fg.connect (siso_in[it],deinter[it],siso_out[it]) - fg.connect (inter[it],(siso_in[it],0)) - - return (metrics_in,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed): - fg = gr.flow_graph () - L = len(channel) - - # TX - # this for loop is TOO slow in python!!! - packet = [0]*(K) - random.seed(seed) - for i in range(len(packet)): - packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols - src = gr.vector_source_s(packet,False) - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - mod = gr.chunks_to_symbols_sf(modulation[1],modulation[0]) - - # CHANNEL - isi = gr.fir_filter_fff(1,channel) - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - dst = gr.vector_sink_s(); - - fg.connect (src,enc_out,inter,mod) - fg.connect (mod,isi,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,head) - fg.connect (tail,dst) - - fg.run() - - data = dst.data() - ntotal = len(data) - nright=0 - for i in range(ntotal): - if packet[i]==data[i]: - nright=nright+1 - #else: - #print "Error in ", i - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname_out=args[0] - esn0_db=float(args[1]) - rep=int(args[2]) - else: - sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=64*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - if len(tot_constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - N0=pow(10.0,-esn0_db/10.0); # noise variance - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gnuradio-examples/python/channel-coding/test_turbo_equalization2.py b/gnuradio-examples/python/channel-coding/test_turbo_equalization2.py deleted file mode 100755 index 7e252d6d..00000000 --- a/gnuradio-examples/python/channel-coding/test_turbo_equalization2.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): - scale = gr.multiply_const_ff(math.sqrt(1.0/N0)) - gnd = gr.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_combined_f(fi,K,0,-1,True,False,type,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - fg.connect (gnd,inter[0]) - fg.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - fg.connect (scale,(siso_in[it+1],1)) - fg.connect (siso_in[it],deinter[it],(siso_out[it],1)) - fg.connect (gnd,(siso_out[it],0)) - fg.connect (siso_out[it],inter[it+1]) - fg.connect (inter[it],(siso_in[it],0)) - else: - fg.connect (siso_in[it],deinter[it],siso_out[it]) - fg.connect (inter[it],(siso_in[it],0)) - - return (scale,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed): - fg = gr.flow_graph () - L = len(channel) - - # TX - # this for loop is TOO slow in python!!! - packet = [0]*(K) - random.seed(seed) - for i in range(len(packet)): - packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols - src = gr.vector_source_s(packet,False) - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - mod = gr.chunks_to_symbols_sf(modulation[1],modulation[0]) - - # CHANNEL - isi = gr.fir_filter_fff(1,channel) - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(fg,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - dst = gr.vector_sink_s(); - - fg.connect (src,enc_out,inter,mod) - fg.connect (mod,isi,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,head) - fg.connect (tail,dst) - - fg.run() - - data = dst.data() - ntotal = len(data) - nright=0 - for i in range(ntotal): - if packet[i]==data[i]: - nright=nright+1 - #else: - #print "Error in ", i - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname_out=args[0] - esn0_db=float(args[1]) - rep=int(args[2]) - else: - sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=64*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - N0=pow(10.0,-esn0_db/10.0); # noise variance - tot_constellation =[0]*len(tot_channel[1]) - for i in range(len(tot_channel[1])): - tot_constellation[i] = tot_channel[1][i] * math.sqrt(1.0/N0) - if len(tot_constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gnuradio-examples/python/channel-coding/test_viterbi_equalization.py b/gnuradio-examples/python/channel-coding/test_viterbi_equalization.py deleted file mode 100755 index 24545e3b..00000000 --- a/gnuradio-examples/python/channel-coding/test_viterbi_equalization.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,seed): - fg = gr.flow_graph () - - # TX - src = gr.lfsr_32k_source_s() - src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - # essentially here we implement the combination of modulation and channel as a memoryless modulation (the memory induced by the channel is hidden in the FSM) - mod = gr.chunks_to_symbols_sf(tot_constellation,dimensionality) - - # CHANNEL - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = gr.check_lfsr_32k_s(); - - fg.connect (src,src_head,s2fsmi,enc,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics) - fg.connect (metrics,va,fsmi2s,dst) - - fg.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #print ntotal,nright,runlength - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 2: - esn0_db=float(args[0]) - rep=int(args[1]) - else: - sys.stderr.write ('usage: test_viterbi_equalization.py Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=128*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - N0=pow(10.0,-esn0_db/10.0); # noise variance - if len(tot_constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gnuradio-examples/python/channel-coding/test_viterbi_equalization1.py b/gnuradio-examples/python/channel-coding/test_viterbi_equalization1.py deleted file mode 100755 index 8e197cae..00000000 --- a/gnuradio-examples/python/channel-coding/test_viterbi_equalization1.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import audio -from gnuradio import trellis -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed): - fg = gr.flow_graph () - L = len(channel) - - # TX - # this for loop is TOO slow in python!!! - packet = [0]*(K+2*L) - random.seed(seed) - for i in range(len(packet)): - packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols - for i in range(L): # first/last L symbols set to 0 - packet[i] = 0 - packet[len(packet)-i-1] = 0 - src = gr.vector_source_s(packet,False) - mod = gr.chunks_to_symbols_sf(modulation[1],modulation[0]) - - # CHANNEL - isi = gr.fir_filter_fff(1,channel) - add = gr.add_ff() - noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - skip = gr.skiphead(gr.sizeof_float, L) # skip the first L samples since you know they are coming from the L zero symbols - #metrics = trellis.metrics_f(f.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - #va = trellis.viterbi_s(f,K+L,-1,0) # Put -1 if the Initial/Final states are not set. - va = trellis.viterbi_combined_s(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_s instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application... - dst = gr.vector_sink_s() - - fg.connect (src,mod) - fg.connect (mod,isi,(add,0)) - fg.connect (noise,(add,1)) - #fg.connect (add,metrics) - #fg.connect (metrics,va,dst) - fg.connect (add,skip,va,dst) - - fg.run() - - data = dst.data() - ntotal = len(data) - L - nright=0 - for i in range(ntotal): - if packet[i+L]==data[i]: - nright=nright+1 - #else: - #print "Error in ", i - - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 2: - esn0_db=float(args[0]) - rep=int(args[1]) - else: - sys.stderr.write ('usage: test_viterbi_equalization1.py Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=128*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - N0=pow(10.0,-esn0_db/10.0); # noise variance - if len(tot_constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or symbol) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gnuradio-examples/python/digital-bert/Makefile.am b/gnuradio-examples/python/digital-bert/Makefile.am new file mode 100644 index 00000000..eac013f0 --- /dev/null +++ b/gnuradio-examples/python/digital-bert/Makefile.am @@ -0,0 +1,33 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/digital-bert + +dist_ourdata_DATA = \ + README \ + receive_path.py \ + transmit_path.py + +dist_ourdata_SCRIPTS = \ + benchmark_rx.py \ + benchmark_tx.py \ No newline at end of file diff --git a/gnuradio-examples/python/digital-bert/Makefile.in b/gnuradio-examples/python/digital-bert/Makefile.in new file mode 100644 index 00000000..219d0ac2 --- /dev/null +++ b/gnuradio-examples/python/digital-bert/Makefile.in @@ -0,0 +1,937 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gnuradio-examples/python/digital-bert +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/digital-bert +dist_ourdata_DATA = \ + README \ + receive_path.py \ + transmit_path.py + +dist_ourdata_SCRIPTS = \ + benchmark_rx.py \ + benchmark_tx.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/digital-bert/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-examples/python/digital-bert/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/digital-bert/README b/gnuradio-examples/python/digital-bert/README new file mode 100644 index 00000000..83f52f4f --- /dev/null +++ b/gnuradio-examples/python/digital-bert/README @@ -0,0 +1,63 @@ +BERT testing example scripts + + +benchmark_tx.py + +This sets up a BPSK transmitter that is modulated with a pseudorandom +sequence of bits. The PN code is generated by sending an all 1s +sequence through a 7-bit scrambler. The transmitter performs the BPSK +modulation, then passes the complex baseband waveform through a +root-raised-cosine filter and onto the USRP. + +The --sps parameter controls how many baseband samples per symbol +are created and passed through the RRC filter, prior to going to the +USRP over the USB for interpolation to the final DAC rate. + +The baseband bit rate is controlled by -r or --rate. This value, when +multiplied by the --sps parameter, must result in valid interpolation +rate for the USRP. For example, if the baseband rate is 250k bits/sec, +and the samples per symbol is 4, then the final rate is 1M samples/sec, +which results in an interpolation rate of 128. The valid interpolation +rates for the USRP are multiples of 4 between 16 and 512. + +Finally, the RRC excess bandwidth may be specified by --excess-bw. +(See ./benchmark_tx.py -h for additional parameters.) + + +benchmark_rx.py + +This sets up a BPSK receiver to demodulate the received waveform. It +accepts a similar set of parameters as the transmitter, except that one +specifies the USRP decimation rate desired. The resulting sample stream +rate must be an integral number of baseband symbols. For example, the +parameters corresponding to the above transmitter would be to use a +decimation rate of 8 (32 sps), 16 (16 sps), 32 (8 sps), 64, (4 sps), or +128 (2 sps). The lower the USRP decimation, the more CPU is required to +demodulate the signal, so not all valid decimation rates will work. + +The baseband signal from the USRP is first passed through an AGC to +establish an average power of 1.0. It is then passed through a matched +filter (another RRC), a Costas phase-locked loop, and a Mueller and +Muller bit timing recovery loop. The resulting constellation has an SNR +estimation probe attached, and is then sliced into a bit stream. + +The recovered bits are then passed through a 7-bit descrambler. If +there are no channel errors, the all 1s sequence is recovered. In the +event of a channel error, there will be a 0 in the bit stream for each +feedback tap in the descrambler. In this case, the CCSDS descrambler is +using 3 feedback taps. + +Finally, the signal is passed into a bit density measurement probe. The +channel BER is measured by dividing the 0s density by three. This +measurement is inaccurate at high BER rates (>10%) as the error 0s +begin to overlap. + +The benchmark script will, once per second, output the Costas loop +frequency offset, the recovered timing error, the estimated SNR, and the +average BER. + +NOTE: The particular SNR estimator used is inaccurate below about 7dB, +and will report erroneously high values even for random noise. + +There are a variety of Costas and M&M loop parameters one can adjust. +See ./benchmark_rx.py -h for the full set. diff --git a/gnuradio-examples/python/digital-bert/benchmark_rx.py b/gnuradio-examples/python/digital-bert/benchmark_rx.py new file mode 100755 index 00000000..1e00dbd7 --- /dev/null +++ b/gnuradio-examples/python/digital-bert/benchmark_rx.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 import gr, eng_notation, usrp +from optparse import OptionParser +from gnuradio.eng_option import eng_option +from receive_path import receive_path +import gnuradio.gr.gr_threading as _threading +import sys, time + +n2s = eng_notation.num_to_str + +class status_thread(_threading.Thread): + def __init__(self, tb): + _threading.Thread.__init__(self) + self.setDaemon(1) + self.tb = tb + self.done = False + self.start() + + def run(self): + while not self.done: + print "Freq. Offset: %5.0f Hz Timing Offset: %5.1f ppm Estimated SNR: %4.1f dB BER: %g" % ( + tb.frequency_offset(), tb.timing_offset()*1e6, tb.snr(), tb.ber()) + try: + time.sleep(1.0) + except KeyboardInterrupt: + self.done = True + +class rx_bpsk_block(gr.top_block): + def __init__(self, options): + + gr.top_block.__init__(self, "rx_mpsk") + + print "USRP decimation rate", options.decim_rate + + # Create a USRP source at desired board, sample rate, frequency, and gain + self._setup_usrp(options.which, + options.decim_rate, + options.rx_subdev_spec, + options.freq, + options.gain) + + # Create the BERT receiver + if_rate = self._usrp.adc_rate()/options.decim_rate + self._receiver = receive_path(if_rate, + options.rate, + options.excess_bw, + options.costas_alpha, + options.costas_beta, + options.costas_max, + options.mm_gain_mu, + options.mm_gain_omega, + options.mm_omega_limit) + + self.connect(self._usrp, self._receiver) + + + def _setup_usrp(self, which, decim, subdev_spec, freq, gain): + self._usrp = usrp.source_c(which=which, decim_rate=decim) + if subdev_spec is None: + subdev_spec = usrp.pick_rx_subdevice(self._usrp) + self._subdev = usrp.selected_subdev(self._usrp, subdev_spec) + mux = usrp.determine_rx_mux_value(self._usrp, subdev_spec) + self._usrp.set_mux(mux) + tr = self._usrp.tune(0, self._subdev, freq) + if not (tr): + print "Failed to tune to center frequency!" + else: + print "Center frequency:", n2s(freq) + if gain is None: + g = self._subdev.gain_range(); + gain = float(g[0]+g[1])/2.0 + self._subdev.set_gain(gain) + print "RX d'board:", self._subdev.side_and_name() + + def snr(self): + return self._receiver.snr() + + def mag(self): + return self._receiver.signal_mean() + + def var(self): + return self._receiver.noise_variance() + + def ber(self): + return self._receiver.ber() + + def frequency_offset(self): + return self._receiver.frequency_offset() + + def timing_offset(self): + return self._receiver.timing_offset() + +def get_options(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-w", "--which", type="int", default=0, + help="select which USRP (0, 1, ...) (default is %default)", + metavar="NUM") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=first one with a daughterboard)") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set Rx gain (default is mid-point)") + parser.add_option("-r", "--rate", type="eng_float", default=250e3, + help="Select modulation symbol rate (default=%default)") + parser.add_option("-d", "--decim-rate", type="int", default=8, + help="Select USRP decimation rate (default=%default)") + parser.add_option("", "--excess-bw", type="eng_float", default=0.35, + help="Select RRC excess bandwidth (default=%default)") + parser.add_option("", "--costas-alpha", type="eng_float", default=0.05, + help="set Costas loop 1st order gain, (default=%default)") + parser.add_option("", "--costas-beta", type="eng_float", default=0.00025, + help="set Costas loop 2nd order gain, (default=%default)") + parser.add_option("", "--costas-max", type="eng_float", default=0.05, + help="set Costas loop max freq (rad/sample) (default=%default)") + parser.add_option("", "--mm-gain-mu", type="eng_float", default=0.001, + help="set M&M loop 1st order gain, (default=%default)") + parser.add_option("", "--mm-gain-omega", type="eng_float", default=0.000001, + help="set M&M loop 2nd order gain, (default=%default)") + parser.add_option("", "--mm-omega-limit", type="eng_float", default=0.0001, + help="set M&M max timing error, (default=%default)") + + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + if options.freq == None: + print "You must supply a frequency with -f or --freq" + sys.exit(1) + + return (options, args) + + +if __name__ == "__main__": + (options, args) = get_options() + + tb = rx_bpsk_block(options) + + print "\n*** SNR estimator is inaccurate below about 7dB" + print "*** BER estimator is inaccurate above about 10%\n" + updater = status_thread(tb) + + try: + tb.run() + except KeyboardInterrupt: + updater.done = True + updater = None diff --git a/gnuradio-examples/python/digital-bert/benchmark_tx.py b/gnuradio-examples/python/digital-bert/benchmark_tx.py new file mode 100755 index 00000000..000f4bca --- /dev/null +++ b/gnuradio-examples/python/digital-bert/benchmark_tx.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 import gr, eng_notation, usrp +from gnuradio.eng_option import eng_option +from optparse import OptionParser +from transmit_path import transmit_path +import sys + +_dac_rate = 128e6 + +n2s = eng_notation.num_to_str + +class tx_bpsk_block(gr.top_block): + def __init__(self, options): + gr.top_block.__init__(self, "tx_mpsk") + + self._transmitter = transmit_path(options.sps, + options.excess_bw, + options.amplitude) + + if_rate = options.rate*options.sps + interp = int(_dac_rate/if_rate) + + print "Modulation:", n2s(options.rate), "bits/sec" + print "TX IF rate:", n2s(if_rate), "samples/sec" + print "USRP interpolation:", interp + print "DAC amplitude:", options.amplitude + + self._setup_usrp(options.which, + interp, + options.tx_subdev_spec, + options.freq) + + self.connect(self._transmitter, self._usrp) + + + def _setup_usrp(self, which, interp, subdev_spec, freq): + self._usrp = usrp.sink_c(which=which, interp_rate=interp) + if subdev_spec is None: + subdev_spec = usrp.pick_tx_subdevice(self._usrp) + self._usrp.set_mux(usrp.determine_tx_mux_value(self._usrp, subdev_spec)) + self._subdev = usrp.selected_subdev(self._usrp, subdev_spec) + tr = usrp.tune(self._usrp, self._subdev.which(), self._subdev, freq) + if not (tr): + print "Failed to tune to center frequency!" + else: + print "Center frequency:", n2s(freq) + gain = float(self._subdev.gain_range()[1]) # Max TX gain + self._subdev.set_gain(gain) + self._subdev.set_enable(True) + print "TX d'board:", self._subdev.side_and_name() + + +def get_options(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-w", "--which", type="int", default=0, + help="select which USRP (0, 1, ...) default is %default", + metavar="NUM") + parser.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, + help="select USRP Tx side A or B (default=first one with a daughterboard)") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-a", "--amplitude", type="eng_float", default=2000, + help="set Tx amplitude (0-32767) (default=%default)") + parser.add_option("-r", "--rate", type="eng_float", default=250e3, + help="Select modulation symbol rate (default=%default)") + parser.add_option("", "--sps", type="int", default=2, + help="Select samples per symbol (default=%default)") + parser.add_option("", "--excess-bw", type="eng_float", default=0.35, + help="Select RRC excess bandwidth (default=%default)") + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + if options.freq == None: + print "Must supply frequency as -f or --freq" + sys.exit(1) + + return (options, args) + +if __name__ == "__main__": + (options, args) = get_options() + + tb = tx_bpsk_block(options) + + try: + tb.run() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/digital-bert/receive_path.py b/gnuradio-examples/python/digital-bert/receive_path.py new file mode 100644 index 00000000..e273923a --- /dev/null +++ b/gnuradio-examples/python/digital-bert/receive_path.py @@ -0,0 +1,118 @@ +# +# Copyright 2008 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 import gr, eng_notation +import math + +n2s = eng_notation.num_to_str + +class receive_path(gr.hier_block2): + def __init__(self, + if_rate, # Incoming sample rate + symbol_rate, # Original symbol rate + excess_bw, # RRC excess bandwidth, typically 0.35-0.5 + costas_alpha, # Costas loop 1st order gain, typically 0.01-0.2 + costas_beta, # Costas loop 2nd order gain, typically alpha^2/4.0 + costas_max, # Costas loop max frequency offset in radians/sample + mm_gain_mu, # M&M loop 1st order gain, typically 0.001-0.2 + mm_gain_omega, # M&M loop 2nd order gain, typically alpha^2/4.0 + mm_omega_limit, # M&M loop max timing error + ): + + gr.hier_block2.__init__(self, "receive_path", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + + self._if_rate = if_rate + self._sps = int(self._if_rate/symbol_rate) + print "IF sample rate:", n2s(self._if_rate) + print "Symbol rate:", n2s(symbol_rate) + print "Samples/symbol:", self._sps + print "RRC bandwidth:", excess_bw + + # Create AGC to scale input to unity + self._agc = gr.agc_cc(1e-5, 1.0, 1.0, 1.0) + + # Create RRC with specified excess bandwidth + taps = gr.firdes.root_raised_cosine(1.0, # Gain + self._sps, # Sampling rate + 1.0, # Symbol rate + excess_bw, # Roll-off factor + 11*self._sps) # Number of taps + + self._rrc = gr.fir_filter_ccf(1, taps) + + # Create a Costas loop frequency/phase recovery block + + print "Costas alpha:", costas_alpha + print "Costas beta:", costas_beta + print "Costas max:", costas_max + + self._costas = gr.costas_loop_cc(costas_alpha, # PLL first order gain + costas_beta, # PLL second order gain + costas_max, # Max frequency offset rad/sample + -costas_max, # Min frequency offset rad/sample + 2) # BPSK + + # Create a M&M bit synchronization retiming block + mm_mu = 0.5 + mm_omega = self._sps + + print "MM gain mu:", mm_gain_mu + print "MM gain omega:", mm_gain_omega + print "MM omega limit:", mm_omega_limit + + self._mm = gr.clock_recovery_mm_cc(mm_omega, # Initial samples/symbol + mm_gain_omega, # Second order gain + mm_mu, # Initial symbol phase + mm_gain_mu, # First order gain + mm_omega_limit) # Maximum timing offset + + # Add an SNR probe on the demodulated constellation + self._snr_probe = gr.probe_mpsk_snr_c(10.0/symbol_rate) + self.connect(self._mm, self._snr_probe) + + # Slice the resulting constellation into bits. + # Get inphase channel and make decision about 0 + self._c2r = gr.complex_to_real() + self._slicer = gr.binary_slicer_fb() + + # Descramble BERT sequence. A channel error will create 3 incorrect bits + self._descrambler = gr.descrambler_bb(0x8A, 0x7F, 7) # CCSDS 7-bit descrambler + + # Measure BER by the density of 0s in the stream + self._ber = gr.probe_density_b(1.0/symbol_rate) + + self.connect(self, self._agc, self._rrc, self._costas, self._mm, + self._c2r, self._slicer, self._descrambler, self._ber) + + def frequency_offset(self): + return self._costas.freq()*self._if_rate/(2*math.pi) + + def timing_offset(self): + return self._mm.omega()/self._sps-1.0 + + def snr(self): + return self._snr_probe.snr() + + def ber(self): + return (1.0-self._ber.density())/3.0 + diff --git a/gnuradio-examples/python/digital-bert/transmit_path.py b/gnuradio-examples/python/digital-bert/transmit_path.py new file mode 100644 index 00000000..96834b39 --- /dev/null +++ b/gnuradio-examples/python/digital-bert/transmit_path.py @@ -0,0 +1,61 @@ +# +# Copyright 2008 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 import gr +from math import pi, log10 +import cmath + +class transmit_path(gr.hier_block2): + """ + This transmits a BERT sequence of bits using filtered BPSK and + outputs the complex baseband waveform. + """ + def __init__(self, + sps, # Samples per symbol + excess_bw, # RRC filter excess bandwidth (typically 0.35-0.5) + amplitude # DAC output level, 0-32767, typically 2000-8000 + ): + + gr.hier_block2.__init__(self, "transmit_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + # Create BERT data bit stream + self._bits = gr.vector_source_b([1,], True) # Infinite stream of ones + self._scrambler = gr.scrambler_bb(0x8A, 0x7F, 7) # CCSDS 7-bit scrambler + + # Map to constellation + self._constellation = [-1+0j, 1+0j] + self._mapper = gr.chunks_to_symbols_bc(self._constellation) + + # Create RRC with specified excess bandwidth + taps = gr.firdes.root_raised_cosine(sps*amplitude, # Gain + sps, # Sampling rate + 1.0, # Symbol rate + excess_bw, # Roll-off factor + 11*sps) # Number of taps + + self._rrc = gr.interp_fir_filter_ccf(sps, # Interpolation rate + taps) # FIR taps + + # Wire block inputs and outputs + self.connect(self._bits, self._scrambler, self._mapper, self._rrc, self) + diff --git a/gnuradio-examples/python/digital/Makefile.am b/gnuradio-examples/python/digital/Makefile.am index 17cc4fee..64ce4ec4 100644 --- a/gnuradio-examples/python/digital/Makefile.am +++ b/gnuradio-examples/python/digital/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,15 +19,32 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/digital + +dist_ourdata_DATA = \ README \ + generic_usrp.py \ + pick_bitrate.py \ + qt_digital_window.ui \ + qt_digital_window.py \ + qt_rx_window.ui \ + qt_rx_window.py \ + receive_path.py \ + transmit_path.py \ + usrp_options.py \ + usrp_receive_path.py \ + usrp_transmit_path.py + +dist_ourdata_SCRIPTS = \ + benchmark_loopback.py \ benchmark_rx.py \ benchmark_tx.py \ - fusb_options.py \ + benchmark_qt_rx.py \ + benchmark_qt_loopback.py\ gen_whitener.py \ - pick_bitrate.py \ - receive_path.py \ rx_voice.py \ - transmit_path.py \ + run_length.py \ tunnel.py \ - tx_voice.py + tx_voice.py diff --git a/gnuradio-examples/python/digital/Makefile.in b/gnuradio-examples/python/digital/Makefile.in index e964ea3f..48f3023d 100644 --- a/gnuradio-examples/python/digital/Makefile.in +++ b/gnuradio-examples/python/digital/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,35 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +77,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = README $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/digital -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +160,26 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +187,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +204,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +218,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +287,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +377,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +538,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,34 +574,168 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/digital +dist_ourdata_DATA = \ README \ + generic_usrp.py \ + pick_bitrate.py \ + qt_digital_window.ui \ + qt_digital_window.py \ + qt_rx_window.ui \ + qt_rx_window.py \ + receive_path.py \ + transmit_path.py \ + usrp_options.py \ + usrp_receive_path.py \ + usrp_transmit_path.py + +dist_ourdata_SCRIPTS = \ + benchmark_loopback.py \ benchmark_rx.py \ benchmark_tx.py \ - fusb_options.py \ + benchmark_qt_rx.py \ + benchmark_qt_loopback.py\ gen_whitener.py \ - pick_bitrate.py \ - receive_path.py \ rx_voice.py \ - transmit_path.py \ + run_length.py \ tunnel.py \ - tx_voice.py + tx_voice.py all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -360,16 +759,48 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done tags: TAGS TAGS: @@ -378,22 +809,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -404,10 +834,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) $(DATA) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -423,6 +859,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -438,7 +875,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -450,14 +887,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -476,18 +921,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/digital/README b/gnuradio-examples/python/digital/README index 9d8a4049..904a6489 100644 --- a/gnuradio-examples/python/digital/README +++ b/gnuradio-examples/python/digital/README @@ -75,3 +75,10 @@ Likewise, on machine B: This now uses a carrier sense MAC, so you should be able to ssh between the machines, web browse, etc. + +* run_length.py: This program takes a single argument '-f FILE' and +outputs the number of runs of similar bits within the file. It is +useful as a diagnostic tool when experimenting with line coding or +whitening algorithms. + + diff --git a/gnuradio-examples/python/digital/benchmark_loopback.py b/gnuradio-examples/python/digital/benchmark_loopback.py new file mode 100755 index 00000000..4cc4a7be --- /dev/null +++ b/gnuradio-examples/python/digital/benchmark_loopback.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python +# +# Copyright 2005, 2006, 2007, 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. +# + +from gnuradio import gr, gru, modulation_utils +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import random, time, struct, sys, math + +# from current dir +from transmit_path import transmit_path +from receive_path import receive_path + +class my_top_block(gr.top_block): + def __init__(self, mod_class, demod_class, rx_callback, options): + gr.top_block.__init__(self) + + channelon = True; + + SNR = 10.0**(options.snr/10.0) + frequency_offset = options.frequency_offset + + power_in_signal = abs(options.tx_amplitude)**2 + noise_power = power_in_signal/SNR + noise_voltage = math.sqrt(noise_power) + + self.txpath = transmit_path(mod_class, options) + self.throttle = gr.throttle(gr.sizeof_gr_complex, options.sample_rate) + self.rxpath = receive_path(demod_class, rx_callback, options) + + if channelon: + self.channel = gr.channel_model(noise_voltage, frequency_offset, 1.01) + + if options.discontinuous: + z = 20000*[0,] + self.zeros = gr.vector_source_c(z, True) + packet_size = 5*((4+8+4+1500+4) * 8) + self.mux = gr.stream_mux(gr.sizeof_gr_complex, [packet_size-0, int(9e5)]) + + # Connect components + self.connect(self.txpath, (self.mux,0)) + self.connect(self.zeros, (self.mux,1)) + self.connect(self.mux, self.channel, self.rxpath) + + else: + self.connect(self.txpath, self.channel, self.rxpath) + + else: + # Connect components + self.connect(self.txpath, self.throttle, self.rxpath) + + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +def main(): + + global n_rcvd, n_right + + n_rcvd = 0 + n_right = 0 + + def rx_callback(ok, payload): + global n_rcvd, n_right + (pktno,) = struct.unpack('!H', payload[0:2]) + n_rcvd += 1 + if ok: + n_right += 1 + + print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % ( + ok, pktno, n_rcvd, n_right) + # print payload[2:len(payload)] + + def send_pkt(payload='', eof=False): + return tb.txpath.send_pkt(payload, eof) + + + mods = modulation_utils.type_1_mods() + demods = modulation_utils.type_1_demods() + + parser = OptionParser(option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + channel_grp = parser.add_option_group("Channel") + + parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(), + default='dbpsk', + help="Select modulation from: %s [default=%%default]" + % (', '.join(mods.keys()),)) + + parser.add_option("-s", "--size", type="eng_float", default=1500, + help="set packet size [default=%default]") + parser.add_option("-M", "--megabytes", type="eng_float", default=1.0, + help="set megabytes to transmit [default=%default]") + parser.add_option("","--discontinuous", action="store_true", default=False, + help="enable discontinous transmission (bursts of 5 packets)") + + channel_grp.add_option("", "--sample-rate", type="eng_float", default=1e5, + help="set speed of channel/simulation rate to RATE [default=%default]") + channel_grp.add_option("", "--snr", type="eng_float", default=30, + help="set the SNR of the channel in dB [default=%default]") + channel_grp.add_option("", "--frequency-offset", type="eng_float", default=0, + help="set frequency offset introduced by channel [default=%default]") + channel_grp.add_option("", "--seed", action="store_true", default=False, + help="use a random seed for AWGN noise [default=%default]") + + transmit_path.add_options(parser, expert_grp) + receive_path.add_options(parser, expert_grp) + + for mod in mods.values(): + mod.add_options(expert_grp) + for demod in demods.values(): + demod.add_options(expert_grp) + + (options, args) = parser.parse_args () + + if len(args) != 0: + parser.print_help() + sys.exit(1) + + r = gr.enable_realtime_scheduling() + if r != gr.RT_OK: + print "Warning: failed to enable realtime scheduling" + + # Create an instance of a hierarchical block + tb = my_top_block(mods[options.modulation], demods[options.modulation], rx_callback, options) + tb.start() + + # generate and send packets + nbytes = int(1e6 * options.megabytes) + n = 0 + pktno = 0 + pkt_size = int(options.size) + + while n < nbytes: + send_pkt(struct.pack('!H', pktno & 0xffff) + (pkt_size - 2) * chr(pktno & 0xff)) + n += pkt_size + pktno += 1 + + send_pkt(eof=True) + + tb.wait() + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/digital/benchmark_qt_loopback.py b/gnuradio-examples/python/digital/benchmark_qt_loopback.py new file mode 100755 index 00000000..cd77f074 --- /dev/null +++ b/gnuradio-examples/python/digital/benchmark_qt_loopback.py @@ -0,0 +1,464 @@ +#!/usr/bin/env python + +from gnuradio import gr, gru, modulation_utils +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import random, time, struct, sys, os, math + +from threading import Thread + +# from current dir +from transmit_path import transmit_path +from receive_path import receive_path + +try: + from gnuradio.qtgui import qtgui + from PyQt4 import QtGui, QtCore + import sip +except ImportError: + print "Please install gr-qtgui." + sys.exit(1) + +try: + from qt_digital_window import Ui_DigitalWindow +except ImportError: + print "Error: could not find qt_digital_window.py:" + print "\t\"pyuic4 qt_digital_window.ui -o qt_digital_window.py\"" + sys.exit(1) + + +#print os.getpid() +#raw_input() + + +# //////////////////////////////////////////////////////////////////// +# Define the QT Interface and Control Dialog +# //////////////////////////////////////////////////////////////////// + + +class dialog_box(QtGui.QMainWindow): + def __init__(self, snkTx, snkRx, fg, parent=None): + + QtGui.QWidget.__init__(self, parent) + self.gui = Ui_DigitalWindow() + self.gui.setupUi(self) + + self.fg = fg + + self.set_sample_rate(self.fg.sample_rate()) + + self.set_snr(self.fg.snr()) + self.set_frequency(self.fg.frequency_offset()) + self.set_time_offset(self.fg.timing_offset()) + + self.set_gain_mu(self.fg.rx_gain_mu()) + self.set_alpha(self.fg.rx_alpha()) + + # Add the qtsnk widgets to the hlayout box + self.gui.sinkLayout.addWidget(snkTx) + self.gui.sinkLayout.addWidget(snkRx) + + + # Connect up some signals + self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"), + self.pauseFg) + + self.connect(self.gui.sampleRateEdit, QtCore.SIGNAL("editingFinished()"), + self.sampleRateEditText) + + self.connect(self.gui.snrEdit, QtCore.SIGNAL("editingFinished()"), + self.snrEditText) + self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"), + self.freqEditText) + self.connect(self.gui.timeEdit, QtCore.SIGNAL("editingFinished()"), + self.timeEditText) + + self.connect(self.gui.gainMuEdit, QtCore.SIGNAL("editingFinished()"), + self.gainMuEditText) + self.connect(self.gui.alphaEdit, QtCore.SIGNAL("editingFinished()"), + self.alphaEditText) + + # Build a timer to update the packet number and PER fields + self.update_delay = 250 # time between updating packet rate fields + self.pkt_timer = QtCore.QTimer(self) + self.connect(self.pkt_timer, QtCore.SIGNAL("timeout()"), + self.updatePacketInfo) + self.pkt_timer.start(self.update_delay) + + def pauseFg(self): + if(self.gui.pauseButton.text() == "Pause"): + self.fg.stop() + self.fg.wait() + self.gui.pauseButton.setText("Unpause") + else: + self.fg.start() + self.gui.pauseButton.setText("Pause") + + # Accessor functions for Gui to manipulate system parameters + def set_sample_rate(self, sr): + ssr = eng_notation.num_to_str(sr) + self.gui.sampleRateEdit.setText(QtCore.QString("%1").arg(ssr)) + + def sampleRateEditText(self): + try: + rate = self.gui.sampleRateEdit.text().toAscii() + srate = eng_notation.str_to_num(rate) + #self.fg.set_sample_rate(srate) + except RuntimeError: + pass + + + # Accessor functions for Gui to manipulate channel model + def set_snr(self, snr): + self.gui.snrEdit.setText(QtCore.QString("%1").arg(snr)) + + def set_frequency(self, fo): + self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo)) + + def set_time_offset(self, to): + self.gui.timeEdit.setText(QtCore.QString("%1").arg(to)) + + def snrEditText(self): + try: + snr = self.gui.snrEdit.text().toDouble()[0] + self.fg.set_snr(snr) + except RuntimeError: + pass + + def freqEditText(self): + try: + freq = self.gui.freqEdit.text().toDouble()[0] + self.fg.set_frequency_offset(freq) + except RuntimeError: + pass + + def timeEditText(self): + try: + to = self.gui.timeEdit.text().toDouble()[0] + self.fg.set_timing_offset(to) + except RuntimeError: + pass + + + # Accessor functions for Gui to manipulate receiver parameters + def set_gain_mu(self, gain): + self.gui.gainMuEdit.setText(QtCore.QString("%1").arg(gain)) + + def set_alpha(self, alpha): + self.gui.alphaEdit.setText(QtCore.QString("%1").arg(alpha)) + + def alphaEditText(self): + try: + alpha = self.gui.alphaEdit.text().toDouble()[0] + self.fg.set_rx_alpha(alpha) + except RuntimeError: + pass + + def gainMuEditText(self): + try: + gain = self.gui.gainMuEdit.text().toDouble()[0] + self.fg.set_rx_gain_mu(gain) + except RuntimeError: + pass + + # Accessor functions for packet error reporting + def updatePacketInfo(self): + # Pull these globals in from the main thread + global n_rcvd, n_right, pktno + + per = float(n_rcvd - n_right)/float(pktno) + self.gui.pktsRcvdEdit.setText(QtCore.QString("%1").arg(n_rcvd)) + self.gui.pktsCorrectEdit.setText(QtCore.QString("%1").arg(n_right)) + self.gui.perEdit.setText(QtCore.QString("%1").arg(per)) + + + +# //////////////////////////////////////////////////////////////////// +# Define the GNU Radio Top Block +# //////////////////////////////////////////////////////////////////// + + + +class my_top_block(gr.top_block): + def __init__(self, mod_class, demod_class, rx_callback, options): + gr.top_block.__init__(self) + + self._sample_rate = options.sample_rate + + channelon = True; + + self.gui_on = options.gui + + self._frequency_offset = options.frequency_offset + self._timing_offset = options.timing_offset + self._tx_amplitude = options.tx_amplitude + self._snr_dB = options.snr + + self._noise_voltage = self.get_noise_voltage(self._snr_dB) + + self.txpath = transmit_path(mod_class, options) + self.throttle = gr.throttle(gr.sizeof_gr_complex, self.sample_rate()) + self.rxpath = receive_path(demod_class, rx_callback, options) + + # FIXME: do better exposure to lower issues for control + self._gain_mu = self.rxpath.packet_receiver._demodulator._mm_gain_mu + self._alpha = self.rxpath.packet_receiver._demodulator._costas_alpha + + if channelon: + self.channel = gr.channel_model(self._noise_voltage, + self.frequency_offset(), + self.timing_offset()) + + if options.discontinuous: + z = 20000*[0,] + self.zeros = gr.vector_source_c(z, True) + packet_size = 5*((4+8+4+1500+4) * 8) + self.mux = gr.stream_mux(gr.sizeof_gr_complex, [packet_size-0, int(9e5)]) + + # Connect components + self.connect(self.txpath, self.throttle, (self.mux,0)) + self.connect(self.zeros, (self.mux,1)) + self.connect(self.mux, self.channel, self.rxpath) + + else: + self.connect(self.txpath, self.throttle, self.channel, self.rxpath) + + if self.gui_on: + self.qapp = QtGui.QApplication(sys.argv) + fftsize = 2048 + + self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + 0, 1, + "Tx", True, True, False, True, True) + self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + 0, 1, + "Rx", True, True, False, True, True) + + self.snk_tx.set_frequency_axis(-80, 0) + self.snk_rx.set_frequency_axis(-60, 20) + + # Connect to the QT sinks + # FIXME: make better exposure to receiver from rxpath + self.receiver = self.rxpath.packet_receiver._demodulator.receiver + self.connect(self.channel, self.snk_tx) + self.connect(self.receiver, self.snk_rx) + + pyTxQt = self.snk_tx.pyqwidget() + pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget) + + pyRxQt = self.snk_rx.pyqwidget() + pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget) + + self.main_box = dialog_box(pyTx, pyRx, self) + self.main_box.show() + + else: + # Connect components + self.connect(self.txpath, self.throttle, self.rxpath) + + + + # System Parameters + def sample_rate(self): + return self._sample_rate + + def set_sample_rate(self, sr): + self._sample_rate = sr + #self.throttle.set_samples_per_second(self._sample_rate) + + # Channel Model Parameters + def snr(self): + return self._snr_dB + + def set_snr(self, snr): + self._snr_dB = snr + self._noise_voltage = self.get_noise_voltage(self._snr_dB) + self.channel.set_noise_voltage(self._noise_voltage) + + def get_noise_voltage(self, SNR): + snr = 10.0**(SNR/10.0) + power_in_signal = abs(self._tx_amplitude)**2 + noise_power = power_in_signal/SNR + noise_voltage = math.sqrt(noise_power) + return noise_voltage + + def frequency_offset(self): + return self._frequency_offset * self.sample_rate() + + def set_frequency_offset(self, fo): + self._frequency_offset = fo / self.sample_rate() + self.channel.set_frequency_offset(self._frequency_offset) + + def timing_offset(self): + return self._timing_offset + + def set_timing_offset(self, to): + self._timing_offset = to + self.channel.set_timing_offset(self._timing_offset) + + + # Receiver Parameters + def rx_gain_mu(self): + return self._gain_mu + + def rx_gain_omega(self): + return self.gain_omega + + def set_rx_gain_mu(self, gain): + self._gain_mu = gain + self.gain_omega = .25 * self._gain_mu * self._gain_mu + self.receiver.set_gain_mu(self._gain_mu) + self.receiver.set_gain_omega(self.gain_omega) + + def rx_alpha(self): + return self._alpha + + def rx_beta(self): + return self.beta + + def set_rx_alpha(self, alpha): + self._alpha = alpha + self.beta = .25 * self._alpha * self._alpha + self.receiver.set_alpha(self._alpha) + self.receiver.set_beta(self.beta) + + + +# ///////////////////////////////////////////////////////////////////////////// +# Thread to handle the packet sending procedure +# Operates in parallel with qApp.exec_() +# ///////////////////////////////////////////////////////////////////////////// + + + +class th_send(Thread): + def __init__(self, send_fnc, megs, sz): + Thread.__init__(self) + self.send = send_fnc + self.nbytes = int(1e6 * megs) + self.pkt_size = int(sz) + + def run(self): + # generate and send packets + n = 0 + pktno = 0 + + while n < self.nbytes: + self.send(struct.pack('!H', pktno & 0xffff) + + (self.pkt_size - 2) * chr(pktno & 0xff)) + n += self.pkt_size + pktno += 1 + + self.send(eof=True) + + def stop(self): + self.nbytes = 0 + + + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + + + +def main(): + + global n_rcvd, n_right, pktno + + n_rcvd = 0 + n_right = 0 + pktno = 0 + + def rx_callback(ok, payload): + global n_rcvd, n_right, pktno + (pktno,) = struct.unpack('!H', payload[0:2]) + n_rcvd += 1 + if ok: + n_right += 1 + + if not options.gui: + print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % ( + ok, pktno, n_rcvd, n_right) + + + def send_pkt(payload='', eof=False): + return tb.txpath.send_pkt(payload, eof) + + mods = modulation_utils.type_1_mods() + demods = modulation_utils.type_1_demods() + + parser = OptionParser(option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + channel_grp = parser.add_option_group("Channel") + + parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(), + default='dbpsk', + help="Select modulation from: %s [default=%%default]" + % (', '.join(mods.keys()),)) + + parser.add_option("-s", "--size", type="eng_float", default=1500, + help="set packet size [default=%default]") + parser.add_option("-M", "--megabytes", type="eng_float", default=1.0, + help="set megabytes to transmit [default=%default]") + parser.add_option("","--discontinuous", action="store_true", default=False, + help="enable discontinous transmission (bursts of 5 packets)") + parser.add_option("-G", "--gui", action="store_true", default=False, + help="Turn on the GUI [default=%default]") + + channel_grp.add_option("", "--sample-rate", type="eng_float", default=1e5, + help="set speed of channel/simulation rate to RATE [default=%default]") + channel_grp.add_option("", "--snr", type="eng_float", default=30, + help="set the SNR of the channel in dB [default=%default]") + channel_grp.add_option("", "--frequency-offset", type="eng_float", default=0, + help="set frequency offset introduced by channel [default=%default]") + channel_grp.add_option("", "--timing-offset", type="eng_float", default=1.0, + help="set timing offset introduced by channel [default=%default]") + channel_grp.add_option("", "--seed", action="store_true", default=False, + help="use a random seed for AWGN noise [default=%default]") + + transmit_path.add_options(parser, expert_grp) + receive_path.add_options(parser, expert_grp) + + for mod in mods.values(): + mod.add_options(expert_grp) + for demod in demods.values(): + demod.add_options(expert_grp) + + (options, args) = parser.parse_args () + + if len(args) != 0: + parser.print_help() + sys.exit(1) + + r = gr.enable_realtime_scheduling() + if r != gr.RT_OK: + print "Warning: failed to enable realtime scheduling" + + # Create an instance of a hierarchical block + tb = my_top_block(mods[options.modulation], + demods[options.modulation], + rx_callback, options) + tb.start() + + packet_sender = th_send(send_pkt, options.megabytes, options.size) + packet_sender.start() + + if(options.gui): + tb.qapp.exec_() + packet_sender.stop() + else: + # Process until done; hack in to the join to stop on an interrupt + while(packet_sender.isAlive()): + try: + packet_sender.join(1) + except KeyboardInterrupt: + packet_sender.stop() + + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/digital/benchmark_qt_rx.py b/gnuradio-examples/python/digital/benchmark_qt_rx.py new file mode 100755 index 00000000..33cf94a5 --- /dev/null +++ b/gnuradio-examples/python/digital/benchmark_qt_rx.py @@ -0,0 +1,443 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2007,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. +# + +from gnuradio import gr, gru, modulation_utils +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import random +import struct +import sys + +# from current dir +from receive_path import receive_path +from pick_bitrate import pick_rx_bitrate +import usrp_options + +try: + from gnuradio.qtgui import qtgui + from PyQt4 import QtGui, QtCore + import sip +except ImportError: + print "Please install gr-qtgui." + sys.exit(1) + +try: + from qt_rx_window import Ui_DigitalWindow +except ImportError: + print "Error: could not find qt_rx_window.py:" + print "\tYou must first build this from qt_rx_window.ui with the following command:" + print "\t\"pyuic4 qt_rx_window.ui -o qt_rx_window.py\"" + sys.exit(1) + +#import os +#print os.getpid() +#raw_input('Attach and press enter: ') + +# //////////////////////////////////////////////////////////////////// +# Define the QT Interface and Control Dialog +# //////////////////////////////////////////////////////////////////// + + +class dialog_box(QtGui.QMainWindow): + def __init__(self, snkRxIn, snkRx, fg, parent=None): + + QtGui.QWidget.__init__(self, parent) + self.gui = Ui_DigitalWindow() + self.gui.setupUi(self) + + self.fg = fg + + self.set_frequency(self.fg.frequency()) + self.set_gain(self.fg.gain()) + self.set_decim(self.fg.decim()) + self.set_gain_mu(self.fg.rx_gain_mu()) + self.set_alpha(self.fg.rx_alpha()) + + # Add the qtsnk widgets to the hlayout box + self.gui.sinkLayout.addWidget(snkRxIn) + self.gui.sinkLayout.addWidget(snkRx) + + + # Connect up some signals + self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"), + self.freqEditText) + self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"), + self.gainEditText) + self.connect(self.gui.decimEdit, QtCore.SIGNAL("editingFinished()"), + self.decimEditText) + self.connect(self.gui.gainMuEdit, QtCore.SIGNAL("editingFinished()"), + self.gainMuEditText) + self.connect(self.gui.alphaEdit, QtCore.SIGNAL("editingFinished()"), + self.alphaEditText) + + # Build a timer to update the packet number and PER fields + self.update_delay = 250 # time between updating packet rate fields + self.pkt_timer = QtCore.QTimer(self) + self.connect(self.pkt_timer, QtCore.SIGNAL("timeout()"), + self.updatePacketInfo) + self.pkt_timer.start(self.update_delay) + + + # Accessor functions for Gui to manipulate receiver parameters + def set_frequency(self, fo): + self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo)) + + def set_gain(self, gain): + self.gui.gainEdit.setText(QtCore.QString("%1").arg(gain)) + + def set_decim(self, decim): + self.gui.decimEdit.setText(QtCore.QString("%1").arg(decim)) + + def set_gain_mu(self, gain): + self.gui.gainMuEdit.setText(QtCore.QString("%1").arg(gain)) + + def set_alpha(self, alpha): + self.gui.alphaEdit.setText(QtCore.QString("%1").arg(alpha)) + + def freqEditText(self): + try: + freq = self.gui.freqEdit.text().toDouble()[0] + self.fg.set_freq(freq) + except RuntimeError: + pass + + def gainEditText(self): + try: + gain = self.gui.gainEdit.text().toDouble()[0] + self.fg.set_gain(gain) + except RuntimeError: + pass + + def decimEditText(self): + try: + decim = self.gui.decimEdit.text().toInt()[0] + self.fg.set_decim(decim) + except RuntimeError: + pass + + def alphaEditText(self): + try: + alpha = self.gui.alphaEdit.text().toDouble()[0] + self.fg.set_rx_alpha(alpha) + except RuntimeError: + pass + + def gainMuEditText(self): + try: + gain = self.gui.gainMuEdit.text().toDouble()[0] + self.fg.set_rx_gain_mu(gain) + except RuntimeError: + pass + + + # Accessor function for packet error reporting + def updatePacketInfo(self): + # Pull these globals in from the main thread + global n_rcvd, n_right, pktno + + per = float(n_rcvd - n_right)/float(pktno) + self.gui.pktsRcvdEdit.setText(QtCore.QString("%1").arg(n_rcvd)) + self.gui.pktsCorrectEdit.setText(QtCore.QString("%1").arg(n_right)) + self.gui.perEdit.setText(QtCore.QString("%1").arg(per)) + + + +# //////////////////////////////////////////////////////////////////// +# Define the GNU Radio Top Block +# //////////////////////////////////////////////////////////////////// + + +class my_top_block(gr.top_block): + def __init__(self, demodulator, rx_callback, options): + gr.top_block.__init__(self) + + self._rx_freq = options.rx_freq # receiver's center frequency + self._rx_gain = options.rx_gain # receiver's gain + self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use + self._decim = options.decim # Decimating rate for the USRP (prelim) + self._bitrate = options.bitrate + self._samples_per_symbol = options.samples_per_symbol + self._demod_class = demodulator + self.gui_on = options.gui + + if self._rx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n") + raise SystemExit + + # Set up USRP source + self._setup_usrp_source(options) + + # copy the final answers back into options for use by demodulator + options.samples_per_symbol = self._samples_per_symbol + options.bitrate = self._bitrate + options.decim = self._decim + + ok = self.set_freq(self._rx_freq) + if not ok: + print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq)) + raise ValueError, eng_notation.num_to_str(self._rx_freq) + + self.set_gain(options.rx_gain) + + # Set up receive path + self.rxpath = receive_path(demodulator, rx_callback, options) + + # FIXME: do better exposure to lower issues for control + self._gain_mu = self.rxpath.packet_receiver._demodulator._mm_gain_mu + self._alpha = self.rxpath.packet_receiver._demodulator._costas_alpha + + self.connect(self.u, self.rxpath) + + if self.gui_on: + self.qapp = QtGui.QApplication(sys.argv) + fftsize = 2048 + + bw_in = self.u.adc_rate() / self.decim() + self.snk_rxin = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + self._rx_freq, bw_in, + "Received", True, True, False, True, True, False) + self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + 0, self._bitrate, + "Post-Synchronizer", True, True, False, True, True, False) + + self.snk_rxin.set_frequency_axis(-60, 60) + self.snk_rx.set_frequency_axis(-60, 20) + self.snk_rxin.set_time_domain_axis(-2000,2000) + + # Connect to the QT sinks + # FIXME: make better exposure to receiver from rxpath + self.receiver = self.rxpath.packet_receiver._demodulator.receiver + self.connect(self.u, self.snk_rxin) + self.connect(self.receiver, self.snk_rx) + + pyRxInQt = self.snk_rxin.pyqwidget() + pyRxIn = sip.wrapinstance(pyRxInQt, QtGui.QWidget) + + pyRxQt = self.snk_rx.pyqwidget() + pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget) + + self.main_box = dialog_box(pyRxIn, pyRx, self) + self.main_box.show() + + def _setup_usrp_source(self, options): + self.u = usrp_options.create_usrp_source(options) + adc_rate = self.u.adc_rate() + + self.u.set_decim(self._decim) + + (self._bitrate, self._samples_per_symbol, self._decim) = \ + pick_rx_bitrate(self._bitrate, self._demod_class.bits_per_symbol(), \ + self._samples_per_symbol, self._decim, adc_rate, \ + self.u.get_decim_rates()) + + self.u.set_decim(self._decim) + self.set_auto_tr(True) # enable Auto Transmit/Receive switching + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital up converter. + """ + return self.u.set_center_freq(target_freq) + + def set_gain(self, gain): + """ + Sets the analog gain in the USRP + """ + if gain is None: + r = self.u.gain_range() + gain = (r[0] + r[1])/2 # set gain to midpoint + self._rx_gain = gain + return self.u.set_gain(self._rx_gain) + + def set_auto_tr(self, enable): + return self.u.set_auto_tr(enable) + + def set_decim(self, decim): + self._decim = decim + self.u.set_decim(self._decim) + + if(self.gui_on): + bw_in = self.u.adc_rate() / self._decim + self._bitrate = bw_in / self._samples_per_symbol + self.snk_rxin.set_frequency_range(0, -bw_in/2.0, bw_in/2.0) + self.snk_rx.set_frequency_range(0, -self._bitrate/2.0, self._bitrate/2.0) + + def frequency(self): + return self._rx_freq + + def gain(self): + return self._rx_gain + + def decim(self): + return self._decim + + def rx_gain_mu(self): + return self._gain_mu + + def rx_gain_omega(self): + return self.gain_omega + + def set_rx_gain_mu(self, gain): + self._gain_mu = gain + self.gain_omega = .25 * self._gain_mu * self._gain_mu + self.receiver.set_gain_mu(self._gain_mu) + self.receiver.set_gain_omega(self.gain_omega) + + def rx_alpha(self): + return self._alpha + + def rx_beta(self): + return self.beta + + def set_rx_alpha(self, alpha): + self._alpha = alpha + self.beta = .25 * self._alpha * self._alpha + self.receiver.set_alpha(self._alpha) + self.receiver.set_beta(self.beta) + + def add_options(normal, expert): + """ + Adds usrp-specific options to the Options Parser + """ + add_freq_option(normal) + normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B") + normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN", + help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range") + normal.add_option("", "--show-rx-gain-range", action="store_true", default=False, + help="print min and max Rx gain available on selected daughterboard") + normal.add_option("-v", "--verbose", action="store_true", default=False) + normal.add_option("-G", "--gui", action="store_true", default=False, + help="Turn on the GUI [default=%default]") + + expert.add_option("", "--rx-freq", type="eng_float", default=None, + help="set Rx frequency to FREQ [default=%default]", metavar="FREQ") + expert.add_option("-d", "--decim", type="intx", default=128, + help="set fpga decimation rate to DECIM [default=%default]") + expert.add_option("", "--snr", type="eng_float", default=30, + help="set the SNR of the channel in dB [default=%default]") + + + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + +def add_freq_option(parser): + """ + Hackery that has the -f / --freq option set both tx_freq and rx_freq + """ + def freq_callback(option, opt_str, value, parser): + parser.values.rx_freq = value + parser.values.tx_freq = value + + if not parser.has_option('--freq'): + parser.add_option('-f', '--freq', type="eng_float", + action="callback", callback=freq_callback, + help="set Tx and/or Rx frequency to FREQ [default=%default]", + metavar="FREQ") + + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +global n_rcvd, n_right + +def main(): + global n_rcvd, n_right, pktno + + n_rcvd = 0 + n_right = 0 + pktno = 1 + + def rx_callback(ok, payload): + global n_rcvd, n_right, pktno + (pktno,) = struct.unpack('!H', payload[0:2]) + n_rcvd += 1 + if ok: + n_right += 1 + + if not options.gui: + print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % ( + ok, pktno, n_rcvd, n_right) + + + demods = modulation_utils.type_1_demods() + + # Create Options Parser: + parser = OptionParser (option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + + parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(), + default='dbpsk', + help="Select modulation from: %s [default=%%default]" + % (', '.join(demods.keys()),)) + + my_top_block.add_options(parser, expert_grp) + receive_path.add_options(parser, expert_grp) + usrp_options.add_rx_options(parser) + + for mod in demods.values(): + mod.add_options(expert_grp) + + (options, args) = parser.parse_args () + + if len(args) != 0: + parser.print_help(sys.stderr) + sys.exit(1) + + if options.rx_freq is None: + sys.stderr.write("You must specify -f FREQ or --freq FREQ\n") + parser.print_help(sys.stderr) + sys.exit(1) + + + # build the graph + tb = my_top_block(demods[options.modulation], rx_callback, options) + + r = gr.enable_realtime_scheduling() + if r != gr.RT_OK: + print "Warning: Failed to enable realtime scheduling." + + tb.start() # start flow graph + + if(options.gui): + tb.qapp.exec_() + else: + tb.wait() # wait for it to finish + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/digital/benchmark_rx.py b/gnuradio-examples/python/digital/benchmark_rx.py index e375bc0f..ccb0c896 100755 --- a/gnuradio-examples/python/digital/benchmark_rx.py +++ b/gnuradio-examples/python/digital/benchmark_rx.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -31,19 +31,20 @@ import struct import sys # from current dir -from receive_path import receive_path -import fusb_options +import usrp_receive_path #import os #print os.getpid() #raw_input('Attach and press enter: ') +class my_top_block(gr.top_block): + def __init__(self, demodulator, rx_callback, options): + gr.top_block.__init__(self) -class my_graph(gr.flow_graph): + # Set up receive path + self.rxpath = usrp_receive_path.usrp_receive_path(demodulator, rx_callback, options) - def __init__(self, demod_class, rx_callback, options): - gr.flow_graph.__init__(self) - self.rxpath = receive_path(self, demod_class, rx_callback, options) + self.connect(self.rxpath) # ///////////////////////////////////////////////////////////////////////////// # main @@ -79,12 +80,11 @@ def main(): help="Select modulation from: %s [default=%%default]" % (', '.join(demods.keys()),)) - receive_path.add_options(parser, expert_grp) + usrp_receive_path.add_options(parser, expert_grp) for mod in demods.values(): mod.add_options(expert_grp) - fusb_options.add_options(expert_grp) (options, args) = parser.parse_args () if len(args) != 0: @@ -98,14 +98,14 @@ def main(): # build the graph - fg = my_graph(demods[options.modulation], rx_callback, options) + tb = my_top_block(demods[options.modulation], rx_callback, options) r = gr.enable_realtime_scheduling() if r != gr.RT_OK: print "Warning: Failed to enable realtime scheduling." - fg.start() # start flow graph - fg.wait() # wait for it to finish + tb.start() # start flow graph + tb.wait() # wait for it to finish if __name__ == '__main__': try: diff --git a/gnuradio-examples/python/digital/benchmark_tx.py b/gnuradio-examples/python/digital/benchmark_tx.py index d683a70c..73c4a390 100755 --- a/gnuradio-examples/python/digital/benchmark_tx.py +++ b/gnuradio-examples/python/digital/benchmark_tx.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005, 2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -29,19 +29,19 @@ from optparse import OptionParser import random, time, struct, sys # from current dir -from transmit_path import transmit_path -import fusb_options +import usrp_transmit_path #import os #print os.getpid() #raw_input('Attach and press enter') +class my_top_block(gr.top_block): + def __init__(self, modulator, options): + gr.top_block.__init__(self) -class my_graph(gr.flow_graph): - def __init__(self, modulator_class, options): - gr.flow_graph.__init__(self) - self.txpath = transmit_path(self, modulator_class, options) + self.txpath = usrp_transmit_path.usrp_transmit_path(modulator, options) + self.connect(self.txpath) # ///////////////////////////////////////////////////////////////////////////// # main @@ -50,7 +50,7 @@ class my_graph(gr.flow_graph): def main(): def send_pkt(payload='', eof=False): - return fg.txpath.send_pkt(payload, eof) + return tb.txpath.send_pkt(payload, eof) def rx_callback(ok, payload): print "ok = %r, payload = '%s'" % (ok, payload) @@ -71,13 +71,14 @@ def main(): help="set megabytes to transmit [default=%default]") parser.add_option("","--discontinuous", action="store_true", default=False, help="enable discontinous transmission (bursts of 5 packets)") + parser.add_option("","--from-file", default=None, + help="use file for packet contents") - transmit_path.add_options(parser, expert_grp) + usrp_transmit_path.add_options(parser, expert_grp) for mod in mods.values(): mod.add_options(expert_grp) - fusb_options.add_options(expert_grp) (options, args) = parser.parse_args () if len(args) != 0: @@ -89,16 +90,18 @@ def main(): parser.print_help(sys.stderr) sys.exit(1) + if options.from_file is not None: + source_file = open(options.from_file, 'r') + # build the graph - fg = my_graph(mods[options.modulation], options) + tb = my_top_block(mods[options.modulation], options) r = gr.enable_realtime_scheduling() if r != gr.RT_OK: print "Warning: failed to enable realtime scheduling" - fg.start() # start flow graph - - + tb.start() # start flow graph + # generate and send packets nbytes = int(1e6 * options.megabytes) n = 0 @@ -106,15 +109,24 @@ def main(): pkt_size = int(options.size) while n < nbytes: - send_pkt(struct.pack('!H', pktno) + (pkt_size - 2) * chr(pktno & 0xff)) - n += pkt_size + if options.from_file is None: + data = (pkt_size - 2) * chr(pktno & 0xff) + else: + data = source_file.read(pkt_size - 2) + if data == '': + break; + + payload = struct.pack('!H', pktno & 0xffff) + data + send_pkt(payload) + n += len(payload) sys.stderr.write('.') if options.discontinuous and pktno % 5 == 4: time.sleep(1) pktno += 1 send_pkt(eof=True) - fg.wait() # wait for it to finish + + tb.wait() # wait for it to finish if __name__ == '__main__': try: diff --git a/gnuradio-examples/python/digital/gen_whitener.py b/gnuradio-examples/python/digital/gen_whitener.py index 93aea2b8..9a81e4ea 100755 --- a/gnuradio-examples/python/digital/gen_whitener.py +++ b/gnuradio-examples/python/digital/gen_whitener.py @@ -5,10 +5,10 @@ from gnuradio.eng_option import eng_option from optparse import OptionParser import sys -class my_graph(gr.flow_graph): +class my_graph(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) (options, args) = parser.parse_args () @@ -23,11 +23,11 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - fg = my_graph() - fg.run() + tb = my_graph() + tb.run() f = sys.stdout i = 0 - for s in fg.dst.data(): + for s in tb.dst.data(): f.write("%3d, " % (s & 0xff,)) f.write("%3d, " % ((s >> 8) & 0xff,)) i = i+2 diff --git a/gnuradio-examples/python/digital/generic_usrp.py b/gnuradio-examples/python/digital/generic_usrp.py new file mode 100644 index 00000000..c7ccbe53 --- /dev/null +++ b/gnuradio-examples/python/digital/generic_usrp.py @@ -0,0 +1,239 @@ +# +# 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. +# + +USRP1_TYPE = 'usrp1' +USRP2_TYPE = 'usrp2' +DUMMY_TYPE = 'dummy' +#usrp2 rates common for decim and interp +_USRP2_RATES = range(4, 128+1, 1) + range(130, 256+1, 2) + range(260, 512+1, 4) +#dummy common rates +_DUMMY_XRATES = range(4, 512, 2) +_DUMMY_CONVERTER_RATE = 100e6 +#dummy freq result +class _dummy_freq_result(object): + def __init__(self, target_freq): + self.baseband_freq = target_freq + self.dxc_freq = 0 + self.residual_freq = 0 +from gnuradio import gr, usrp, usrp2 + +######################################################################## +# generic usrp common stuff +######################################################################## +class _generic_usrp_base(object): + + def __init__(self, which=0, subdev_spec=None, interface="", mac_addr="", + fusb_block_size=0, fusb_nblocks=0, usrpx=None, lo_offset=None, gain=None): + self._lo_offset = lo_offset + #usrp options + self._which = which + self._subdev_spec = subdev_spec + #usrp2 options + self._interface = interface + self._mac_addr = mac_addr + #fusb options + self._fusb_block_size = fusb_block_size + self._fusb_nblocks = fusb_nblocks + #pick which usrp model + if usrpx == '0': self._setup_usrpx(DUMMY_TYPE) + elif usrpx == '1' or self._subdev_spec: self._setup_usrpx(USRP1_TYPE) + elif usrpx == '2' or self._mac_addr: self._setup_usrpx(USRP2_TYPE) + else: #automatic + try: self._setup_usrpx(USRP2_TYPE) + except: + try: self._setup_usrpx(USRP1_TYPE) + except: raise Exception, 'Failed to automatically setup a usrp device.' + #post usrp setup + if self._lo_offset is not None: + self.set_lo_offset(self._lo_offset) + self.set_gain(gain) + self.set_auto_tr(True) + + def _setup_usrpx(self, type): + """ + Call the appropriate setup method. + @param type the usrp type constant + """ + self._type = type + if self._type == USRP1_TYPE: self._setup_usrp1() + elif self._type == USRP2_TYPE: self._setup_usrp2() + elif self._type == DUMMY_TYPE: self._setup_dummy() + + def __str__(self): + if self._type == USRP1_TYPE: return self._subdev.side_and_name() + elif self._type == USRP2_TYPE: + return 'Interface: %s MAC Address: %s D-Board ID: 0x%.2x'%( + self._u.interface_name(), self._u.mac_addr(), self._u.daughterboard_id()) + elif self._type == DUMMY_TYPE: return 'Dummy USRP Device' + + def gain(self): return self._gain + + def set_gain(self, gain=None): + #automatic gain calculation + r = self.gain_range() + if gain is None: gain = (r[0] + r[1])/2 # set gain to midpoint + #set gain for usrp + self._gain = gain + if self._type == USRP1_TYPE: return self._subdev.set_gain(gain) + elif self._type == USRP2_TYPE: return self._u.set_gain(gain) + elif self._type == DUMMY_TYPE: return True + + def gain_range(self): + if self._type == USRP1_TYPE: return self._subdev.gain_range() + elif self._type == USRP2_TYPE: return self._u.gain_range() + elif self._type == DUMMY_TYPE: return (0, 0, 0) + + def set_center_freq(self, target_freq): + if self._type == USRP1_TYPE: + return self._u.tune(self._dxc, self._subdev, target_freq) + elif self._type == USRP2_TYPE: + return self._u.set_center_freq(target_freq) + elif self._type == DUMMY_TYPE: return _dummy_freq_result(target_freq) + + def freq_range(self): + if self._type == USRP1_TYPE: return self._subdev.freq_range() + elif self._type == USRP2_TYPE: return self._u.freq_range() + elif self._type == DUMMY_TYPE: return (-10e9, 10e9, 100e3) + + def set_lo_offset(self, lo_offset): + if self._type == USRP1_TYPE: return self._subdev.set_lo_offset(lo_offset) + elif self._type == USRP2_TYPE: return self._u.set_lo_offset(lo_offset) + elif self._type == DUMMY_TYPE: return True + + def set_auto_tr(self, enable): + if self._type == USRP1_TYPE: return self._subdev.set_auto_tr(enable) + + def __del__(self): + try: # Avoid weak reference error + del self._u + del self._subdev + except: pass + +######################################################################## +# generic usrp source +######################################################################## +class generic_usrp_source_c(_generic_usrp_base, gr.hier_block2): + """ + Create a generic usrp source that represents usrp and usrp2. + Take usrp and usrp2 constructor arguments and try to figure out usrp or usrp2. + Provide generic access methods so the API looks the same for both. + """ + + def __init__(self, **kwargs): + gr.hier_block2.__init__(self, "generic_usrp_source", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + _generic_usrp_base.__init__(self, **kwargs) + self.connect(self._u, self) + + #################################################################### + # generic access methods + #################################################################### + def set_decim(self, decim): + if decim not in self.get_decim_rates(): return False + if self._type == USRP1_TYPE: return self._u.set_decim_rate(decim) + elif self._type == USRP2_TYPE: return self._u.set_decim(decim) + elif self._type == DUMMY_TYPE: return True + + def get_decim_rates(self): + if self._type == USRP1_TYPE: return range(8, 256+1, 2) #default firmware w/ hb filters + if self._type == USRP2_TYPE: return _USRP2_RATES + elif self._type == DUMMY_TYPE: return _DUMMY_XRATES + + def adc_rate(self): + if self._type == USRP1_TYPE: return self._u.adc_rate() + if self._type == USRP2_TYPE: return self._u.adc_rate() + elif self._type == DUMMY_TYPE: return _DUMMY_CONVERTER_RATE + + #################################################################### + # setup usrp methods + #################################################################### + def _setup_usrp1(self): + self._u = usrp.source_c (self._which, + fusb_block_size=self._fusb_block_size, + fusb_nblocks=self._fusb_nblocks) + # determine the daughterboard subdevice we're using + if self._subdev_spec is None: + self._subdev_spec = usrp.pick_rx_subdevice(self._u) + self._subdev = usrp.selected_subdev(self._u, self._subdev_spec) + self._u.set_mux(usrp.determine_rx_mux_value(self._u, self._subdev_spec)) + self._dxc = 0 + + def _setup_usrp2(self): + self._u = usrp2.source_32fc(self._interface, self._mac_addr) + + def _setup_dummy(self): self._u = gr.null_source(gr.sizeof_gr_complex) + +######################################################################## +# generic usrp sink +######################################################################## +class generic_usrp_sink_c(_generic_usrp_base, gr.hier_block2): + """ + Create a generic usrp sink that represents usrp and usrp2. + Take usrp and usrp2 constructor arguments and try to figure out usrp or usrp2. + Provide generic access methods so the API looks the same for both. + """ + + def __init__(self, **kwargs): + gr.hier_block2.__init__(self, "generic_usrp_sink", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + _generic_usrp_base.__init__(self, **kwargs) + if self._type == USRP1_TYPE: #scale 0.0 to 1.0 input for usrp1 + self.connect(self, gr.multiply_const_cc((2**15)-1), self._u) + else: self.connect(self, self._u) + + #################################################################### + # generic access methods + #################################################################### + def set_interp(self, interp): + if interp not in self.get_interp_rates(): return False + if self._type == USRP1_TYPE: return self._u.set_interp_rate(interp) + elif self._type == USRP2_TYPE: return self._u.set_interp(interp) + elif self._type == DUMMY_TYPE: return True + + def get_interp_rates(self): + if self._type == USRP1_TYPE: return range(16, 512+1, 4) + if self._type == USRP2_TYPE: return _USRP2_RATES + elif self._type == DUMMY_TYPE: return _DUMMY_XRATES + + def dac_rate(self): + if self._type == USRP1_TYPE: return self._u.dac_rate() + if self._type == USRP2_TYPE: return self._u.dac_rate() + elif self._type == DUMMY_TYPE: return _DUMMY_CONVERTER_RATE + + #################################################################### + # setup usrp methods + #################################################################### + def _setup_usrp1(self): + self._u = usrp.sink_c (self._which, + fusb_block_size=self._fusb_block_size, + fusb_nblocks=self._fusb_nblocks) + # determine the daughterboard subdevice we're using + if self._subdev_spec is None: + self._subdev_spec = usrp.pick_tx_subdevice(self._u) + self._subdev = usrp.selected_subdev(self._u, self._subdev_spec) + self._u.set_mux(usrp.determine_tx_mux_value(self._u, self._subdev_spec)) + self._dxc = self._subdev.which() + + def _setup_usrp2(self): self._u = usrp2.sink_32fc(self._interface, self._mac_addr) + + def _setup_dummy(self): self._u = gr.null_sink(gr.sizeof_gr_complex) diff --git a/gnuradio-examples/python/digital/pick_bitrate.py b/gnuradio-examples/python/digital/pick_bitrate.py index 82a47688..ce1e021c 100644 --- a/gnuradio-examples/python/digital/pick_bitrate.py +++ b/gnuradio-examples/python/digital/pick_bitrate.py @@ -19,23 +19,25 @@ # Boston, MA 02110-1301, USA. # +from gnuradio import eng_notation + _default_bitrate = 500e3 _valid_samples_per_symbol = (2,3,4,5,6,7) -def _gen_tx_info(converter_rate): +def _gen_tx_info(converter_rate, xrates): results = [] for samples_per_symbol in _valid_samples_per_symbol: - for interp in range(16, 512 + 1, 4): + for interp in xrates: bitrate = converter_rate / interp / samples_per_symbol results.append((bitrate, samples_per_symbol, interp)) results.sort() return results -def _gen_rx_info(converter_rate): +def _gen_rx_info(converter_rate, xrates): results = [] for samples_per_symbol in _valid_samples_per_symbol: - for decim in range(8, 256 + 1, 2): + for decim in xrates: bitrate = converter_rate / decim / samples_per_symbol results.append((bitrate, samples_per_symbol, decim)) results.sort() @@ -77,7 +79,7 @@ def _pick_best(target_bitrate, bits_per_symbol, info): return ((best[0] * bits_per_symbol),) + best[1:] def _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, - xrate, converter_rate, gen_info): + xrate, converter_rate, xrates, gen_info): """ @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate) """ @@ -94,13 +96,15 @@ def _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, # now we have a target bitrate and possibly an xrate or # samples_per_symbol constraint, but not both of them. - return _pick_best(bitrate, bits_per_symbol, - _filter_info(gen_info(converter_rate), samples_per_symbol, xrate)) + ret = _pick_best(bitrate, bits_per_symbol, + _filter_info(gen_info(converter_rate, xrates), samples_per_symbol, xrate)) + print "Actual Bitrate:", eng_notation.num_to_str(ret[0]) + return ret # --------------------------------------------------------------------------------------- def pick_tx_bitrate(bitrate, bits_per_symbol, samples_per_symbol, - interp_rate, converter_rate=128e6): + interp_rate, converter_rate, possible_interps): """ Given the 4 input parameters, return at configuration that matches @@ -114,15 +118,18 @@ def pick_tx_bitrate(bitrate, bits_per_symbol, samples_per_symbol, @type interp_rate: integer or None @param converter_rate: converter sample rate in Hz @type converter_rate: number + @param possible_interps: a list of possible rates + @type possible_interps: a list of integers @returns tuple (bitrate, samples_per_symbol, interp_rate) """ + print "Requested TX Bitrate:", bitrate and eng_notation.num_to_str(bitrate) or 'Auto', return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, - interp_rate, converter_rate, _gen_tx_info) + interp_rate, converter_rate, possible_interps, _gen_tx_info) def pick_rx_bitrate(bitrate, bits_per_symbol, samples_per_symbol, - decim_rate, converter_rate=64e6): + decim_rate, converter_rate, possible_decims): """ Given the 4 input parameters, return at configuration that matches @@ -136,8 +143,11 @@ def pick_rx_bitrate(bitrate, bits_per_symbol, samples_per_symbol, @type decim_rate: integer or None @param converter_rate: converter sample rate in Hz @type converter_rate: number + @param possible_decims: a list of possible rates + @type possible_decims: a list of integers @returns tuple (bitrate, samples_per_symbol, decim_rate) """ + print "Requested RX Bitrate:", bitrate and eng_notation.num_to_str(bitrate) or 'Auto' return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, - decim_rate, converter_rate, _gen_rx_info) + decim_rate, converter_rate, possible_decims, _gen_rx_info) diff --git a/gnuradio-examples/python/digital/qt_digital_window.py b/gnuradio-examples/python/digital/qt_digital_window.py new file mode 100644 index 00000000..e3feb57c --- /dev/null +++ b/gnuradio-examples/python/digital/qt_digital_window.py @@ -0,0 +1,257 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'qt_digital_window.ui' +# +# Created: Fri Jul 3 10:03:54 2009 +# by: PyQt4 UI code generator 4.4.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DigitalWindow(object): + def setupUi(self, DigitalWindow): + DigitalWindow.setObjectName("DigitalWindow") + DigitalWindow.resize(1050, 752) + self.centralwidget = QtGui.QWidget(DigitalWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout = QtGui.QGridLayout(self.centralwidget) + self.gridLayout.setObjectName("gridLayout") + self.verticalLayout_2 = QtGui.QVBoxLayout() + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.sysBox = QtGui.QGroupBox(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.sysBox.sizePolicy().hasHeightForWidth()) + self.sysBox.setSizePolicy(sizePolicy) + self.sysBox.setMinimumSize(QtCore.QSize(240, 60)) + self.sysBox.setMaximumSize(QtCore.QSize(240, 16777215)) + self.sysBox.setObjectName("sysBox") + self.formLayoutWidget = QtGui.QWidget(self.sysBox) + self.formLayoutWidget.setGeometry(QtCore.QRect(10, 20, 221, 31)) + self.formLayoutWidget.setObjectName("formLayoutWidget") + self.formLayout = QtGui.QFormLayout(self.formLayoutWidget) + self.formLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) + self.formLayout.setVerticalSpacing(20) + self.formLayout.setObjectName("formLayout") + self.sampleRateEdit = QtGui.QLineEdit(self.formLayoutWidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.sampleRateEdit.sizePolicy().hasHeightForWidth()) + self.sampleRateEdit.setSizePolicy(sizePolicy) + self.sampleRateEdit.setMinimumSize(QtCore.QSize(100, 26)) + self.sampleRateEdit.setMaximumSize(QtCore.QSize(100, 26)) + self.sampleRateEdit.setObjectName("sampleRateEdit") + self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.sampleRateEdit) + self.sampleRateLabel = QtGui.QLabel(self.formLayoutWidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.sampleRateLabel.sizePolicy().hasHeightForWidth()) + self.sampleRateLabel.setSizePolicy(sizePolicy) + self.sampleRateLabel.setMinimumSize(QtCore.QSize(0, 20)) + self.sampleRateLabel.setMaximumSize(QtCore.QSize(16777215, 20)) + self.sampleRateLabel.setObjectName("sampleRateLabel") + self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.sampleRateLabel) + self.verticalLayout_2.addWidget(self.sysBox) + spacerItem = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.verticalLayout_2.addItem(spacerItem) + self.gridLayout.addLayout(self.verticalLayout_2, 2, 0, 1, 1) + self.channelModeBox = QtGui.QGroupBox(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.channelModeBox.sizePolicy().hasHeightForWidth()) + self.channelModeBox.setSizePolicy(sizePolicy) + self.channelModeBox.setMinimumSize(QtCore.QSize(245, 130)) + self.channelModeBox.setMaximumSize(QtCore.QSize(245, 16777215)) + self.channelModeBox.setObjectName("channelModeBox") + self.formLayoutWidget_2 = QtGui.QWidget(self.channelModeBox) + self.formLayoutWidget_2.setGeometry(QtCore.QRect(10, 20, 231, 98)) + self.formLayoutWidget_2.setObjectName("formLayoutWidget_2") + self.formLayout_2 = QtGui.QFormLayout(self.formLayoutWidget_2) + self.formLayout_2.setSizeConstraint(QtGui.QLayout.SetFixedSize) + self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow) + self.formLayout_2.setObjectName("formLayout_2") + self.snrLabel = QtGui.QLabel(self.formLayoutWidget_2) + self.snrLabel.setObjectName("snrLabel") + self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.snrLabel) + self.snrEdit = QtGui.QLineEdit(self.formLayoutWidget_2) + self.snrEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.snrEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.snrEdit.setObjectName("snrEdit") + self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.snrEdit) + self.freqLabel = QtGui.QLabel(self.formLayoutWidget_2) + self.freqLabel.setObjectName("freqLabel") + self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.freqLabel) + self.freqEdit = QtGui.QLineEdit(self.formLayoutWidget_2) + self.freqEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.freqEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.freqEdit.setObjectName("freqEdit") + self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.freqEdit) + self.timeLabel = QtGui.QLabel(self.formLayoutWidget_2) + self.timeLabel.setObjectName("timeLabel") + self.formLayout_2.setWidget(2, QtGui.QFormLayout.LabelRole, self.timeLabel) + self.timeEdit = QtGui.QLineEdit(self.formLayoutWidget_2) + self.timeEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.timeEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.timeEdit.setObjectName("timeEdit") + self.formLayout_2.setWidget(2, QtGui.QFormLayout.FieldRole, self.timeEdit) + self.gridLayout.addWidget(self.channelModeBox, 2, 1, 1, 1) + self.verticalLayout_5 = QtGui.QVBoxLayout() + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.sinkFrame = QtGui.QFrame(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.sinkFrame.sizePolicy().hasHeightForWidth()) + self.sinkFrame.setSizePolicy(sizePolicy) + self.sinkFrame.setMinimumSize(QtCore.QSize(1000, 550)) + self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel) + self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised) + self.sinkFrame.setObjectName("sinkFrame") + self.gridLayout_2 = QtGui.QGridLayout(self.sinkFrame) + self.gridLayout_2.setObjectName("gridLayout_2") + self.sinkLayout = QtGui.QHBoxLayout() + self.sinkLayout.setObjectName("sinkLayout") + self.gridLayout_2.addLayout(self.sinkLayout, 1, 0, 1, 1) + self.verticalLayout_5.addWidget(self.sinkFrame) + self.gridLayout.addLayout(self.verticalLayout_5, 0, 0, 1, 6) + self.verticalLayout_3 = QtGui.QVBoxLayout() + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.rxBox = QtGui.QGroupBox(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth()) + self.rxBox.setSizePolicy(sizePolicy) + self.rxBox.setMinimumSize(QtCore.QSize(180, 90)) + self.rxBox.setMaximumSize(QtCore.QSize(180, 16777215)) + self.rxBox.setObjectName("rxBox") + self.formLayoutWidget_3 = QtGui.QWidget(self.rxBox) + self.formLayoutWidget_3.setGeometry(QtCore.QRect(10, 20, 161, 61)) + self.formLayoutWidget_3.setObjectName("formLayoutWidget_3") + self.formLayout_3 = QtGui.QFormLayout(self.formLayoutWidget_3) + self.formLayout_3.setSizeConstraint(QtGui.QLayout.SetFixedSize) + self.formLayout_3.setObjectName("formLayout_3") + self.gainMuLabel = QtGui.QLabel(self.formLayoutWidget_3) + self.gainMuLabel.setObjectName("gainMuLabel") + self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.gainMuLabel) + self.alphaLabel = QtGui.QLabel(self.formLayoutWidget_3) + self.alphaLabel.setObjectName("alphaLabel") + self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.alphaLabel) + self.gainMuEdit = QtGui.QLineEdit(self.formLayoutWidget_3) + self.gainMuEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.gainMuEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.gainMuEdit.setObjectName("gainMuEdit") + self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.gainMuEdit) + self.alphaEdit = QtGui.QLineEdit(self.formLayoutWidget_3) + self.alphaEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.alphaEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.alphaEdit.setObjectName("alphaEdit") + self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.alphaEdit) + self.verticalLayout_3.addWidget(self.rxBox) + spacerItem1 = QtGui.QSpacerItem(20, 30, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.verticalLayout_3.addItem(spacerItem1) + self.gridLayout.addLayout(self.verticalLayout_3, 2, 2, 1, 1) + self.rxBox_2 = QtGui.QGroupBox(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.rxBox_2.sizePolicy().hasHeightForWidth()) + self.rxBox_2.setSizePolicy(sizePolicy) + self.rxBox_2.setMinimumSize(QtCore.QSize(220, 125)) + self.rxBox_2.setMaximumSize(QtCore.QSize(265, 125)) + self.rxBox_2.setObjectName("rxBox_2") + self.formLayoutWidget_4 = QtGui.QWidget(self.rxBox_2) + self.formLayoutWidget_4.setGeometry(QtCore.QRect(10, 20, 201, 92)) + self.formLayoutWidget_4.setObjectName("formLayoutWidget_4") + self.formLayout_4 = QtGui.QFormLayout(self.formLayoutWidget_4) + self.formLayout_4.setSizeConstraint(QtGui.QLayout.SetFixedSize) + self.formLayout_4.setObjectName("formLayout_4") + self.pktsRcvdLabel = QtGui.QLabel(self.formLayoutWidget_4) + self.pktsRcvdLabel.setObjectName("pktsRcvdLabel") + self.formLayout_4.setWidget(0, QtGui.QFormLayout.LabelRole, self.pktsRcvdLabel) + self.pktsCorrectLabel = QtGui.QLabel(self.formLayoutWidget_4) + self.pktsCorrectLabel.setObjectName("pktsCorrectLabel") + self.formLayout_4.setWidget(1, QtGui.QFormLayout.LabelRole, self.pktsCorrectLabel) + self.perLabel = QtGui.QLabel(self.formLayoutWidget_4) + self.perLabel.setObjectName("perLabel") + self.formLayout_4.setWidget(2, QtGui.QFormLayout.LabelRole, self.perLabel) + self.pktsRcvdEdit = QtGui.QLineEdit(self.formLayoutWidget_4) + self.pktsRcvdEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.pktsRcvdEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.pktsRcvdEdit.setObjectName("pktsRcvdEdit") + self.formLayout_4.setWidget(0, QtGui.QFormLayout.FieldRole, self.pktsRcvdEdit) + self.pktsCorrectEdit = QtGui.QLineEdit(self.formLayoutWidget_4) + self.pktsCorrectEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.pktsCorrectEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.pktsCorrectEdit.setObjectName("pktsCorrectEdit") + self.formLayout_4.setWidget(1, QtGui.QFormLayout.FieldRole, self.pktsCorrectEdit) + self.perEdit = QtGui.QLineEdit(self.formLayoutWidget_4) + self.perEdit.setMinimumSize(QtCore.QSize(100, 0)) + self.perEdit.setMaximumSize(QtCore.QSize(100, 16777215)) + self.perEdit.setObjectName("perEdit") + self.formLayout_4.setWidget(2, QtGui.QFormLayout.FieldRole, self.perEdit) + self.gridLayout.addWidget(self.rxBox_2, 2, 3, 1, 1) + spacerItem2 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem2, 2, 4, 1, 1) + self.verticalLayout = QtGui.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.pauseButton = QtGui.QPushButton(self.centralwidget) + self.pauseButton.setMinimumSize(QtCore.QSize(80, 0)) + self.pauseButton.setMaximumSize(QtCore.QSize(80, 16777215)) + self.pauseButton.setObjectName("pauseButton") + self.verticalLayout.addWidget(self.pauseButton) + spacerItem3 = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.verticalLayout.addItem(spacerItem3) + self.closeButton = QtGui.QPushButton(self.centralwidget) + self.closeButton.setMinimumSize(QtCore.QSize(80, 0)) + self.closeButton.setMaximumSize(QtCore.QSize(80, 16777215)) + self.closeButton.setObjectName("closeButton") + self.verticalLayout.addWidget(self.closeButton) + self.gridLayout.addLayout(self.verticalLayout, 2, 5, 1, 1) + DigitalWindow.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(DigitalWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1050, 24)) + self.menubar.setObjectName("menubar") + self.menuFile = QtGui.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + DigitalWindow.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(DigitalWindow) + self.statusbar.setObjectName("statusbar") + DigitalWindow.setStatusBar(self.statusbar) + self.actionExit = QtGui.QAction(DigitalWindow) + self.actionExit.setObjectName("actionExit") + self.menuFile.addAction(self.actionExit) + self.menubar.addAction(self.menuFile.menuAction()) + + self.retranslateUi(DigitalWindow) + QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close) + QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close) + QtCore.QMetaObject.connectSlotsByName(DigitalWindow) + DigitalWindow.setTabOrder(self.snrEdit, self.freqEdit) + DigitalWindow.setTabOrder(self.freqEdit, self.timeEdit) + + def retranslateUi(self, DigitalWindow): + DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) + self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8)) + self.channelModeBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Channel Model Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.snrLabel.setText(QtGui.QApplication.translate("DigitalWindow", "SNR (dB)", None, QtGui.QApplication.UnicodeUTF8)) + self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency Offset (Hz)", None, QtGui.QApplication.UnicodeUTF8)) + self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8)) + self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain mu", None, QtGui.QApplication.UnicodeUTF8)) + self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8)) + self.rxBox_2.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8)) + self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8)) + self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8)) + self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8)) + self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8)) + self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8)) + self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) + self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8)) + diff --git a/gnuradio-examples/python/digital/qt_digital_window.ui b/gnuradio-examples/python/digital/qt_digital_window.ui new file mode 100644 index 00000000..413801ec --- /dev/null +++ b/gnuradio-examples/python/digital/qt_digital_window.ui @@ -0,0 +1,633 @@ + + DigitalWindow + + + + 0 + 0 + 1050 + 752 + + + + MainWindow + + + + + + + + + + 0 + 0 + + + + + 240 + 60 + + + + + 240 + 16777215 + + + + System Parameters + + + + + 10 + 20 + 221 + 31 + + + + + QLayout::SetFixedSize + + + 20 + + + + + + 0 + 0 + + + + + 100 + 26 + + + + + 100 + 26 + + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + Sample Rate (sps) + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 60 + + + + + + + + + + + 0 + 0 + + + + + 245 + 130 + + + + + 245 + 16777215 + + + + Channel Model Parameters + + + + + 10 + 20 + 231 + 98 + + + + + QLayout::SetFixedSize + + + QFormLayout::AllNonFixedFieldsGrow + + + + + SNR (dB) + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + Frequency Offset (Hz) + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + Timing Offset + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + + + + + + + + 0 + 0 + + + + + 1000 + 550 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + verticalLayoutWidget + verticalLayoutWidget + + + + + + + + + + + 0 + 0 + + + + + 180 + 90 + + + + + 180 + 16777215 + + + + Receiver Parameters + + + + + 10 + 20 + 161 + 61 + + + + + QLayout::SetFixedSize + + + + + Gain mu + + + + + + + Alpha + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 30 + + + + + + + + + + + 0 + 0 + + + + + 220 + 125 + + + + + 265 + 125 + + + + Received Packet Info + + + + + 10 + 20 + 201 + 92 + + + + + QLayout::SetFixedSize + + + + + Packets Rcvd. + + + + + + + Packets Correct + + + + + + + PER + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + + 100 + 0 + + + + + 100 + 16777215 + + + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + Pause + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 60 + + + + + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + Close + + + + + + + sinkFrame + channelModeBox + verticalLayoutWidget + verticalLayoutWidget + rxBox + + rxBox_2 + horizontalSpacer + + + + + + 0 + 0 + 1050 + 24 + + + + + &File + + + + + + + + + E&xit + + + + + snrEdit + freqEdit + timeEdit + + + + + closeButton + clicked() + DigitalWindow + close() + + + 322 + 623 + + + 66 + 561 + + + + + actionExit + triggered() + DigitalWindow + close() + + + -1 + -1 + + + 617 + 327 + + + + + diff --git a/gnuradio-examples/python/digital/qt_rx_window.py b/gnuradio-examples/python/digital/qt_rx_window.py new file mode 100644 index 00000000..60e1a6e3 --- /dev/null +++ b/gnuradio-examples/python/digital/qt_rx_window.py @@ -0,0 +1,172 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'qt_rx_window.ui' +# +# Created: Fri Jul 3 01:03:19 2009 +# by: PyQt4 UI code generator 4.4.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DigitalWindow(object): + def setupUi(self, DigitalWindow): + DigitalWindow.setObjectName("DigitalWindow") + DigitalWindow.resize(1000, 816) + self.centralwidget = QtGui.QWidget(DigitalWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout = QtGui.QGridLayout(self.centralwidget) + self.gridLayout.setObjectName("gridLayout") + self.sinkFrame = QtGui.QFrame(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(1) + sizePolicy.setHeightForWidth(self.sinkFrame.sizePolicy().hasHeightForWidth()) + self.sinkFrame.setSizePolicy(sizePolicy) + self.sinkFrame.setMinimumSize(QtCore.QSize(800, 500)) + self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel) + self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised) + self.sinkFrame.setObjectName("sinkFrame") + self.horizontalLayout_2 = QtGui.QHBoxLayout(self.sinkFrame) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.sinkLayout = QtGui.QHBoxLayout() + self.sinkLayout.setObjectName("sinkLayout") + self.horizontalLayout_2.addLayout(self.sinkLayout) + self.gridLayout.addWidget(self.sinkFrame, 0, 0, 1, 1) + spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) + self.horizontalLayout = QtGui.QHBoxLayout() + self.horizontalLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize) + self.horizontalLayout.setObjectName("horizontalLayout") + self.rxBox = QtGui.QGroupBox(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth()) + self.rxBox.setSizePolicy(sizePolicy) + self.rxBox.setMinimumSize(QtCore.QSize(250, 190)) + self.rxBox.setMaximumSize(QtCore.QSize(250, 190)) + self.rxBox.setObjectName("rxBox") + self.gainMuEdit = QtGui.QLineEdit(self.rxBox) + self.gainMuEdit.setGeometry(QtCore.QRect(120, 120, 113, 23)) + self.gainMuEdit.setObjectName("gainMuEdit") + self.gainMuLabel = QtGui.QLabel(self.rxBox) + self.gainMuLabel.setGeometry(QtCore.QRect(10, 120, 111, 20)) + self.gainMuLabel.setObjectName("gainMuLabel") + self.alphaEdit = QtGui.QLineEdit(self.rxBox) + self.alphaEdit.setGeometry(QtCore.QRect(120, 150, 113, 23)) + self.alphaEdit.setObjectName("alphaEdit") + self.alphaLabel = QtGui.QLabel(self.rxBox) + self.alphaLabel.setGeometry(QtCore.QRect(10, 150, 111, 20)) + self.alphaLabel.setObjectName("alphaLabel") + self.gainLabel = QtGui.QLabel(self.rxBox) + self.gainLabel.setGeometry(QtCore.QRect(10, 60, 101, 17)) + self.gainLabel.setObjectName("gainLabel") + self.freqEdit = QtGui.QLineEdit(self.rxBox) + self.freqEdit.setGeometry(QtCore.QRect(120, 30, 113, 23)) + self.freqEdit.setObjectName("freqEdit") + self.freqLabel = QtGui.QLabel(self.rxBox) + self.freqLabel.setGeometry(QtCore.QRect(10, 30, 141, 17)) + self.freqLabel.setObjectName("freqLabel") + self.gainEdit = QtGui.QLineEdit(self.rxBox) + self.gainEdit.setGeometry(QtCore.QRect(120, 60, 113, 23)) + self.gainEdit.setObjectName("gainEdit") + self.decimLabel = QtGui.QLabel(self.rxBox) + self.decimLabel.setGeometry(QtCore.QRect(10, 90, 101, 17)) + self.decimLabel.setObjectName("decimLabel") + self.decimEdit = QtGui.QLineEdit(self.rxBox) + self.decimEdit.setGeometry(QtCore.QRect(120, 90, 113, 23)) + self.decimEdit.setObjectName("decimEdit") + self.horizontalLayout.addWidget(self.rxBox) + self.verticalLayout_3 = QtGui.QVBoxLayout() + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.rxPacketBox = QtGui.QGroupBox(self.centralwidget) + self.rxPacketBox.setEnabled(True) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.rxPacketBox.sizePolicy().hasHeightForWidth()) + self.rxPacketBox.setSizePolicy(sizePolicy) + self.rxPacketBox.setMinimumSize(QtCore.QSize(250, 130)) + self.rxPacketBox.setMaximumSize(QtCore.QSize(250, 130)) + font = QtGui.QFont() + font.setWeight(50) + font.setBold(False) + self.rxPacketBox.setFont(font) + self.rxPacketBox.setObjectName("rxPacketBox") + self.pktsRcvdEdit = QtGui.QLineEdit(self.rxPacketBox) + self.pktsRcvdEdit.setGeometry(QtCore.QRect(120, 30, 113, 23)) + self.pktsRcvdEdit.setObjectName("pktsRcvdEdit") + self.pktsRcvdLabel = QtGui.QLabel(self.rxPacketBox) + self.pktsRcvdLabel.setGeometry(QtCore.QRect(10, 30, 111, 20)) + self.pktsRcvdLabel.setObjectName("pktsRcvdLabel") + self.pktsCorrectEdit = QtGui.QLineEdit(self.rxPacketBox) + self.pktsCorrectEdit.setGeometry(QtCore.QRect(120, 60, 113, 23)) + self.pktsCorrectEdit.setObjectName("pktsCorrectEdit") + self.pktsCorrectLabel = QtGui.QLabel(self.rxPacketBox) + self.pktsCorrectLabel.setGeometry(QtCore.QRect(10, 60, 111, 20)) + self.pktsCorrectLabel.setObjectName("pktsCorrectLabel") + self.perLabel = QtGui.QLabel(self.rxPacketBox) + self.perLabel.setGeometry(QtCore.QRect(10, 90, 111, 20)) + self.perLabel.setObjectName("perLabel") + self.perEdit = QtGui.QLineEdit(self.rxPacketBox) + self.perEdit.setGeometry(QtCore.QRect(120, 90, 113, 23)) + self.perEdit.setObjectName("perEdit") + self.verticalLayout_3.addWidget(self.rxPacketBox) + spacerItem1 = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) + self.verticalLayout_3.addItem(spacerItem1) + self.horizontalLayout.addLayout(self.verticalLayout_3) + spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem2) + self.verticalLayout_5 = QtGui.QVBoxLayout() + self.verticalLayout_5.setObjectName("verticalLayout_5") + spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.verticalLayout_5.addItem(spacerItem3) + self.closeButton = QtGui.QPushButton(self.centralwidget) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth()) + self.closeButton.setSizePolicy(sizePolicy) + self.closeButton.setMinimumSize(QtCore.QSize(80, 30)) + self.closeButton.setMaximumSize(QtCore.QSize(80, 30)) + self.closeButton.setObjectName("closeButton") + self.verticalLayout_5.addWidget(self.closeButton) + self.horizontalLayout.addLayout(self.verticalLayout_5) + self.gridLayout.addLayout(self.horizontalLayout, 2, 0, 1, 1) + DigitalWindow.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(DigitalWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 24)) + self.menubar.setObjectName("menubar") + self.menuFile = QtGui.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + DigitalWindow.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(DigitalWindow) + self.statusbar.setObjectName("statusbar") + DigitalWindow.setStatusBar(self.statusbar) + self.actionExit = QtGui.QAction(DigitalWindow) + self.actionExit.setObjectName("actionExit") + self.menuFile.addAction(self.actionExit) + self.menubar.addAction(self.menuFile.menuAction()) + + self.retranslateUi(DigitalWindow) + QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close) + QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close) + QtCore.QMetaObject.connectSlotsByName(DigitalWindow) + + def retranslateUi(self, DigitalWindow): + DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) + self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "mu\'s gain", None, QtGui.QApplication.UnicodeUTF8)) + self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8)) + self.gainLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain (dB)", None, QtGui.QApplication.UnicodeUTF8)) + self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency (Hz)", None, QtGui.QApplication.UnicodeUTF8)) + self.decimLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Decimation", None, QtGui.QApplication.UnicodeUTF8)) + self.rxPacketBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8)) + self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8)) + self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8)) + self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8)) + self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8)) + self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) + self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8)) + diff --git a/gnuradio-examples/python/digital/qt_rx_window.ui b/gnuradio-examples/python/digital/qt_rx_window.ui new file mode 100644 index 00000000..4631b778 --- /dev/null +++ b/gnuradio-examples/python/digital/qt_rx_window.ui @@ -0,0 +1,461 @@ + + DigitalWindow + + + + 0 + 0 + 1000 + 816 + + + + MainWindow + + + + + + + + 0 + 1 + + + + + 800 + 500 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + QLayout::SetFixedSize + + + + + + 0 + 0 + + + + + 250 + 190 + + + + + 250 + 190 + + + + Receiver Parameters + + + + + 120 + 120 + 113 + 23 + + + + + + + 10 + 120 + 111 + 20 + + + + mu's gain + + + + + + 120 + 150 + 113 + 23 + + + + + + + 10 + 150 + 111 + 20 + + + + Alpha + + + + + + 10 + 60 + 101 + 17 + + + + Gain (dB) + + + + + + 120 + 30 + 113 + 23 + + + + + + + 10 + 30 + 141 + 17 + + + + Frequency (Hz) + + + + + + 120 + 60 + 113 + 23 + + + + + + + 10 + 90 + 101 + 17 + + + + Decimation + + + + + + 120 + 90 + 113 + 23 + + + + + + + + + + + true + + + + 0 + 0 + + + + + 250 + 130 + + + + + 250 + 130 + + + + + 50 + false + + + + Received Packet Info + + + + + 120 + 30 + 113 + 23 + + + + + + + 10 + 30 + 111 + 20 + + + + Packets Rcvd. + + + + + + 120 + 60 + 113 + 23 + + + + + + + 10 + 60 + 111 + 20 + + + + Packets Correct + + + + + + 10 + 90 + 111 + 20 + + + + PER + + + + + + 120 + 90 + 113 + 23 + + + + pktsRcvdEdit + pktsRcvdLabel + pktsCorrectEdit + pktsCorrectLabel + perLabel + perEdit + rxBox + verticalLayoutWidget + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 60 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 0 + 0 + + + + + 80 + 30 + + + + + 80 + 30 + + + + Close + + + + + + + + + closeButton + sinkFrame + rxBox + rxPacketBox + verticalLayoutWidget + verticalSpacer + horizontalLayoutWidget_2 + + + + + 0 + 0 + 1000 + 24 + + + + + &File + + + + + + + + + E&xit + + + + + + + actionExit + triggered() + DigitalWindow + close() + + + -1 + -1 + + + 617 + 327 + + + + + closeButton + clicked() + DigitalWindow + close() + + + 960 + 694 + + + 66 + 561 + + + + + diff --git a/gnuradio-examples/python/digital/receive_path.py b/gnuradio-examples/python/digital/receive_path.py index 035f52e3..c229aa9e 100644 --- a/gnuradio-examples/python/digital/receive_path.py +++ b/gnuradio-examples/python/digital/receive_path.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,49 +20,31 @@ # Boston, MA 02110-1301, USA. # -from gnuradio import gr, gru, blks -from gnuradio import usrp +from gnuradio import gr, gru, blks2 from gnuradio import eng_notation import copy import sys -# from current dir -from pick_bitrate import pick_rx_bitrate - # ///////////////////////////////////////////////////////////////////////////// # receive path # ///////////////////////////////////////////////////////////////////////////// -class receive_path(gr.hier_block): - def __init__(self, fg, demod_class, rx_callback, options): +class receive_path(gr.hier_block2): + def __init__(self, demod_class, rx_callback, options): + gr.hier_block2.__init__(self, "receive_path", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + options = copy.copy(options) # make a copy so we can destructively modify self._verbose = options.verbose - self._rx_freq = options.rx_freq # receiver's center frequency - self._rx_gain = options.rx_gain # receiver's gain - self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use self._bitrate = options.bitrate # desired bit rate - self._decim = options.decim # Decimating rate for the USRP (prelim) self._samples_per_symbol = options.samples_per_symbol # desired samples/symbol - self._fusb_block_size = options.fusb_block_size # usb info for USRP - self._fusb_nblocks = options.fusb_nblocks # usb info for USRP self._rx_callback = rx_callback # this callback is fired when there's a packet available self._demod_class = demod_class # the demodulator_class we're using - if self._rx_freq is None: - sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n") - raise SystemExit - - # Set up USRP source; also adjusts decim, samples_per_symbol, and bitrate - self._setup_usrp_source() - - # copy the final answers back into options for use by demodulator - options.samples_per_symbol = self._samples_per_symbol - options.bitrate = self._bitrate - options.decim = self._decim - # Get demod_kwargs demod_kwargs = self._demod_class.extract_kwargs_from_options(options) @@ -71,108 +53,41 @@ class receive_path(gr.hier_block): chan_coeffs = gr.firdes.low_pass (1.0, # gain sw_decim * self._samples_per_symbol, # sampling rate 1.0, # midpoint of trans. band - 0.1, # width of trans. band - gr.firdes.WIN_HANN) # filter type - - # Decimating channel filter - # complex in and out, float taps - self.chan_filt = gr.fft_filter_ccc(sw_decim, chan_coeffs) - #self.chan_filt = gr.fir_filter_ccf(sw_decim, chan_coeffs) - + 0.5, # width of trans. band + gr.firdes.WIN_HANN) # filter type + self.channel_filter = gr.fft_filter_ccc(sw_decim, chan_coeffs) + # receiver self.packet_receiver = \ - blks.demod_pkts(fg, - self._demod_class(fg, **demod_kwargs), - access_code=None, - callback=self._rx_callback, - threshold=-1) - - ok = self.set_freq(self._rx_freq) - if not ok: - print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq)) - raise ValueError, eng_notation.num_to_str(self._rx_freq) - - g = self.subdev.gain_range() - if options.show_rx_gain_range: - print "Rx Gain Range: minimum = %g, maximum = %g, step size = %g" \ - % (g[0], g[1], g[2]) - - self.set_gain(options.rx_gain) - - self.set_auto_tr(True) # enable Auto Transmit/Receive switching + blks2.demod_pkts(self._demod_class(**demod_kwargs), + access_code=None, + callback=self._rx_callback, + threshold=-1) # Carrier Sensing Blocks alpha = 0.001 thresh = 30 # in dB, will have to adjust self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha) - fg.connect(self.chan_filt, self.probe) # Display some information about the setup if self._verbose: self._print_verbage() - - fg.connect(self.u, self.chan_filt, self.packet_receiver) - gr.hier_block.__init__(self, fg, None, None) - - def _setup_usrp_source(self): - self.u = usrp.source_c (fusb_block_size=self._fusb_block_size, - fusb_nblocks=self._fusb_nblocks) - adc_rate = self.u.adc_rate() - # derive values of bitrate, samples_per_symbol, and decim from desired info - (self._bitrate, self._samples_per_symbol, self._decim) = \ - pick_rx_bitrate(self._bitrate, self._demod_class.bits_per_symbol(), \ - self._samples_per_symbol, self._decim, adc_rate) + # connect block input to channel filter + self.connect(self, self.channel_filter) - self.u.set_decim_rate(self._decim) + # connect the channel input filter to the carrier power detector + self.connect(self.channel_filter, self.probe) - # determine the daughterboard subdevice we're using - if self._rx_subdev_spec is None: - self._rx_subdev_spec = usrp.pick_rx_subdevice(self.u) - self.subdev = usrp.selected_subdev(self.u, self._rx_subdev_spec) + # connect channel filter to the packet receiver + self.connect(self.channel_filter, self.packet_receiver) - self.u.set_mux(usrp.determine_rx_mux_value(self.u, self._rx_subdev_spec)) - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital up converter. - """ - r = self.u.tune(0, self.subdev, target_freq) - if r: - return True - - return False - - def set_gain(self, gain): - """ - Sets the analog gain in the USRP - """ - if gain is None: - r = self.subdev.gain_range() - gain = (r[0] + r[1])/2 # set gain to midpoint - self.gain = gain - return self.subdev.set_gain(gain) - - def set_auto_tr(self, enable): - return self.subdev.set_auto_tr(enable) - def bitrate(self): return self._bitrate def samples_per_symbol(self): return self._samples_per_symbol - def decim(self): - return self._decim - def carrier_sensed(self): """ Return True if we think carrier is present. @@ -200,23 +115,12 @@ class receive_path(gr.hier_block): """ Adds receiver-specific options to the Options Parser """ - add_freq_option(normal) if not normal.has_option("--bitrate"): - normal.add_option("-r", "--bitrate", type="eng_float", default=None, - help="specify bitrate. samples-per-symbol and interp/decim will be derived.") - normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, - help="select USRP Rx side A or B") - normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN", - help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range") - normal.add_option("", "--show-rx-gain-range", action="store_true", default=False, - help="print min and max Rx gain available on selected daughterboard") + normal.add_option("-r", "--bitrate", type="eng_float", default=100e3, + help="specify bitrate [default=%default].") normal.add_option("-v", "--verbose", action="store_true", default=False) - expert.add_option("-S", "--samples-per-symbol", type="int", default=None, + expert.add_option("-S", "--samples-per-symbol", type="int", default=2, help="set samples/symbol [default=%default]") - expert.add_option("", "--rx-freq", type="eng_float", default=None, - help="set Rx frequency to FREQ [default=%default]", metavar="FREQ") - expert.add_option("-d", "--decim", type="intx", default=None, - help="set fpga decimation rate to DECIM [default=%default]") expert.add_option("", "--log", action="store_true", default=False, help="Log all parts of flow graph to files (CAUTION: lots of data)") @@ -228,25 +132,7 @@ class receive_path(gr.hier_block): """ Prints information about the receive path """ - print "Using RX d'board %s" % (self.subdev.side_and_name(),) - print "Rx gain: %g" % (self.gain,) + print "\nReceive Path:" print "modulation: %s" % (self._demod_class.__name__) print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate)) print "samples/symbol: %3d" % (self._samples_per_symbol) - print "decim: %3d" % (self._decim) - print "Rx Frequency: %s" % (eng_notation.num_to_str(self._rx_freq)) - # print "Rx Frequency: %f" % (self._rx_freq) - -def add_freq_option(parser): - """ - Hackery that has the -f / --freq option set both tx_freq and rx_freq - """ - def freq_callback(option, opt_str, value, parser): - parser.values.rx_freq = value - parser.values.tx_freq = value - - if not parser.has_option('--freq'): - parser.add_option('-f', '--freq', type="eng_float", - action="callback", callback=freq_callback, - help="set Tx and/or Rx frequency to FREQ [default=%default]", - metavar="FREQ") diff --git a/gnuradio-examples/python/digital/run_length.py b/gnuradio-examples/python/digital/run_length.py new file mode 100755 index 00000000..5020655d --- /dev/null +++ b/gnuradio-examples/python/digital/run_length.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 optparse import OptionParser +import sys + +def main(): + parser = OptionParser() + parser.add_option("-f", "--file", default=None, + help="Choose file to read data from.") + (options, args) = parser.parse_args() + + if options.file == None: + print "Must specify file to read from using '-f'." + sys.exit(1) + print "Using", options.file, "for data." + + f = open(options.file, 'r') + runs = [] + count = 0 + current = 0 + bytes = 0 + bits = 0 + + for ch in f.read(): + x = ord(ch) + bytes = bytes + 1 + for i in range(7,-1,-1): + bits = bits + 1 + t = (x >> i) & 0x1 + if t == current: + count = count + 1 + else: + if count > 0: + if len(runs) < count: + for j in range(count - len(runs)): + runs.append(0); + runs[count-1] = runs[count-1] + 1 + + current = 1-current; + count = 1 + + # Deal with last run at EOF + if len(runs) < count and count > 0: + for j in range(count - len(runs)): + runs.append(0); + runs[count-1] = runs[count-1] + 1 + + chk = 0 + print "Bytes read: ", bytes + print "Bits read: ", bits + print + for i in range(len(runs)): + chk = chk + runs[i]*(i+1) + print "Runs of length", i+1, ":", runs[i] + print + print "Sum of runs:", chk, "bits" + print + print "Maximum run length is", len(runs), "bits" + +if __name__ == "__main__": + main() + + diff --git a/gnuradio-examples/python/digital/rx_voice.py b/gnuradio-examples/python/digital/rx_voice.py index c9c33c3d..1aad1ff8 100755 --- a/gnuradio-examples/python/digital/rx_voice.py +++ b/gnuradio-examples/python/digital/rx_voice.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -31,37 +31,40 @@ from gnuradio.vocoder import gsm_full_rate import random import struct +import sys # from current dir -from receive_path import receive_path -import fusb_options +import usrp_receive_path #import os #print os.getpid() #raw_input('Attach and press enter') -class audio_tx(gr.hier_block): - def __init__(self, fg, audio_output_dev): +class audio_tx(gr.hier_block2): + def __init__(self, audio_output_dev): + gr.hier_block2.__init__(self, "audio_tx", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + self.packet_src = gr.message_source(33) voice_decoder = gsm_full_rate.decode_ps() s2f = gr.short_to_float () sink_scale = gr.multiply_const_ff(1.0/32767.) audio_sink = audio.sink(8000, audio_output_dev) - fg.connect(self.packet_src, voice_decoder, s2f, sink_scale, audio_sink) - gr.hier_block.__init__(self, fg, self.packet_src, audio_sink) + self.connect(self.packet_src, voice_decoder, s2f, sink_scale, audio_sink) def msgq(self): return self.packet_src.msgq() -class my_graph(gr.flow_graph): - +class my_top_block(gr.top_block): def __init__(self, demod_class, rx_callback, options): - gr.flow_graph.__init__(self) - self.rxpath = receive_path(self, demod_class, rx_callback, options) - self.audio_tx = audio_tx(self, options.audio_output) - + gr.top_block.__init__(self) + self.rxpath = usrp_receive_path.usrp_receive_path(demod_class, rx_callback, options) + self.audio_tx = audio_tx(options.audio_output) + self.connect(self.rxpath) + self.connect(self.audio_tx) # ///////////////////////////////////////////////////////////////////////////// # main @@ -81,7 +84,7 @@ def main(): if ok: n_right += 1 - fg.audio_tx.msgq().insert_tail(gr.message_from_string(payload)) + tb.audio_tx.msgq().insert_tail(gr.message_from_string(payload)) print "ok = %r n_rcvd = %4d n_right = %4d" % ( ok, n_rcvd, n_right) @@ -98,14 +101,11 @@ def main(): % (', '.join(demods.keys()),)) parser.add_option("-O", "--audio-output", type="string", default="", help="pcm output device name. E.g., hw:0,0 or /dev/dsp") - - receive_path.add_options(parser, expert_grp) + usrp_receive_path.add_options(parser, expert_grp) for mod in demods.values(): mod.add_options(expert_grp) - fusb_options.add_options(expert_grp) - parser.set_defaults(bitrate=50e3) # override default bitrate default (options, args) = parser.parse_args () @@ -120,14 +120,13 @@ def main(): # build the graph - fg = my_graph(demods[options.modulation], rx_callback, options) + tb = my_top_block(demods[options.modulation], rx_callback, options) r = gr.enable_realtime_scheduling() if r != gr.RT_OK: print "Warning: Failed to enable realtime scheduling." - fg.start() # start flow graph - fg.wait() # wait for it to finish + tb.run() if __name__ == '__main__': try: diff --git a/gnuradio-examples/python/digital/transmit_path.py b/gnuradio-examples/python/digital/transmit_path.py index b89af46d..9badcdc0 100644 --- a/gnuradio-examples/python/digital/transmit_path.py +++ b/gnuradio-examples/python/digital/transmit_path.py @@ -1,5 +1,5 @@ # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005, 2006, 2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,150 +19,63 @@ # Boston, MA 02110-1301, USA. # -from gnuradio import gr, gru, blks -from gnuradio import usrp +from gnuradio import gr, gru, blks2 from gnuradio import eng_notation import copy import sys -# from current dir -from pick_bitrate import pick_tx_bitrate - # ///////////////////////////////////////////////////////////////////////////// # transmit path # ///////////////////////////////////////////////////////////////////////////// -class transmit_path(gr.hier_block): - def __init__(self, fg, modulator_class, options): +class transmit_path(gr.hier_block2): + def __init__(self, modulator_class, options): ''' See below for what options should hold ''' - + gr.hier_block2.__init__(self, "transmit_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + options = copy.copy(options) # make a copy so we can destructively modify self._verbose = options.verbose - self._tx_freq = options.tx_freq # tranmitter's center frequency self._tx_amplitude = options.tx_amplitude # digital amplitude sent to USRP - self._tx_subdev_spec = options.tx_subdev_spec # daughterboard to use self._bitrate = options.bitrate # desired bit rate - self._interp = options.interp # interpolating rate for the USRP (prelim) self._samples_per_symbol = options.samples_per_symbol # desired samples/baud - self._fusb_block_size = options.fusb_block_size # usb info for USRP - self._fusb_nblocks = options.fusb_nblocks # usb info for USRP self._modulator_class = modulator_class # the modulator_class we are using - - if self._tx_freq is None: - sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n") - raise SystemExit - - # Set up USRP sink; also adjusts interp, samples_per_symbol, and bitrate - self._setup_usrp_sink() - - # copy the final answers back into options for use by modulator - options.samples_per_symbol = self._samples_per_symbol - options.bitrate = self._bitrate - options.interp = self._interp # Get mod_kwargs mod_kwargs = self._modulator_class.extract_kwargs_from_options(options) - - # Set center frequency of USRP - ok = self.set_freq(self._tx_freq) - if not ok: - print "Failed to set Tx frequency to %s" % (eng_notation.num_to_str(self._tx_freq),) - raise ValueError # transmitter + modulator = self._modulator_class(**mod_kwargs) self.packet_transmitter = \ - blks.mod_pkts(fg, - self._modulator_class(fg, **mod_kwargs), - access_code=None, - msgq_limit=4, - pad_for_usrp=True) - - - # Set the USRP for maximum transmit gain - # (Note that on the RFX cards this is a nop.) - self.set_gain(self.subdev.gain_range()[1]) + blks2.mod_pkts(modulator, + access_code=None, + msgq_limit=4, + pad_for_usrp=True) self.amp = gr.multiply_const_cc(1) self.set_tx_amplitude(self._tx_amplitude) - # enable Auto Transmit/Receive switching - self.set_auto_tr(True) - # Display some information about the setup if self._verbose: self._print_verbage() - # Create and setup transmit path flow graph - fg.connect(self.packet_transmitter, self.amp, self.u) - gr.hier_block.__init__(self, fg, None, None) - - def _setup_usrp_sink(self): - """ - Creates a USRP sink, determines the settings for best bitrate, - and attaches to the transmitter's subdevice. - """ - self.u = usrp.sink_c(fusb_block_size=self._fusb_block_size, - fusb_nblocks=self._fusb_nblocks) - dac_rate = self.u.dac_rate(); - - # derive values of bitrate, samples_per_symbol, and interp from desired info - (self._bitrate, self._samples_per_symbol, self._interp) = \ - pick_tx_bitrate(self._bitrate, self._modulator_class.bits_per_symbol(), - self._samples_per_symbol, self._interp, dac_rate) - - self.u.set_interp_rate(self._interp) - - # determine the daughterboard subdevice we're using - if self._tx_subdev_spec is None: - self._tx_subdev_spec = usrp.pick_tx_subdevice(self.u) - self.u.set_mux(usrp.determine_tx_mux_value(self.u, self._tx_subdev_spec)) - self.subdev = usrp.selected_subdev(self.u, self._tx_subdev_spec) - - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital up converter. - """ - r = self.u.tune(self.subdev._which, self.subdev, target_freq) - if r: - return True - - return False - - def set_gain(self, gain): - """ - Sets the analog gain in the USRP - """ - self.gain = gain - self.subdev.set_gain(gain) + # Connect components in the flowgraph + self.connect(self.packet_transmitter, self.amp, self) def set_tx_amplitude(self, ampl): """ - Sets the transmit amplitude sent to the USRP - @param: ampl 0 <= ampl < 32768. Try 8000 + Sets the transmit amplitude sent to the USRP in volts + @param: ampl 0 <= ampl < 1. """ - self._tx_amplitude = max(0.0, min(ampl, 32767.0)) + self._tx_amplitude = max(0.0, min(ampl, 1)) self.amp.set_k(self._tx_amplitude) - def set_auto_tr(self, enable): - """ - Turns on auto transmit/receive of USRP daughterboard (if exits; else ignored) - """ - return self.subdev.set_auto_tr(enable) - def send_pkt(self, payload='', eof=False): """ Calls the transmitter method to send a packet @@ -175,29 +88,19 @@ class transmit_path(gr.hier_block): def samples_per_symbol(self): return self._samples_per_symbol - def interp(self): - return self._interp - def add_options(normal, expert): """ Adds transmitter-specific options to the Options Parser """ - add_freq_option(normal) if not normal.has_option('--bitrate'): - normal.add_option("-r", "--bitrate", type="eng_float", default=None, - help="specify bitrate. samples-per-symbol and interp/decim will be derived.") - normal.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, - help="select USRP Tx side A or B") - normal.add_option("", "--tx-amplitude", type="eng_float", default=12000, metavar="AMPL", - help="set transmitter digital amplitude: 0 <= AMPL < 32768 [default=%default]") + normal.add_option("-r", "--bitrate", type="eng_float", default=100e3, + help="specify bitrate [default=%default].") + normal.add_option("", "--tx-amplitude", type="eng_float", default=0.250, metavar="AMPL", + help="set transmitter digital amplitude: 0 <= AMPL < 1 [default=%default]") normal.add_option("-v", "--verbose", action="store_true", default=False) - expert.add_option("-S", "--samples-per-symbol", type="int", default=None, + expert.add_option("-S", "--samples-per-symbol", type="int", default=2, help="set samples/symbol [default=%default]") - expert.add_option("", "--tx-freq", type="eng_float", default=None, - help="set transmit frequency to FREQ [default=%default]", metavar="FREQ") - expert.add_option("-i", "--interp", type="intx", default=None, - help="set fpga interpolation rate to INTERP [default=%default]") expert.add_option("", "--log", action="store_true", default=False, help="Log all parts of flow graph to file (CAUTION: lots of data)") @@ -208,25 +111,8 @@ class transmit_path(gr.hier_block): """ Prints information about the transmit path """ - print "Using TX d'board %s" % (self.subdev.side_and_name(),) print "Tx amplitude %s" % (self._tx_amplitude) print "modulation: %s" % (self._modulator_class.__name__) print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate)) print "samples/symbol: %3d" % (self._samples_per_symbol) - print "interp: %3d" % (self._interp) - print "Tx Frequency: %s" % (eng_notation.num_to_str(self._tx_freq)) - -def add_freq_option(parser): - """ - Hackery that has the -f / --freq option set both tx_freq and rx_freq - """ - def freq_callback(option, opt_str, value, parser): - parser.values.rx_freq = value - parser.values.tx_freq = value - - if not parser.has_option('--freq'): - parser.add_option('-f', '--freq', type="eng_float", - action="callback", callback=freq_callback, - help="set Tx and/or Rx frequency to FREQ [default=%default]", - metavar="FREQ") diff --git a/gnuradio-examples/python/digital/tunnel.py b/gnuradio-examples/python/digital/tunnel.py index 7d17ff95..b0af721d 100755 --- a/gnuradio-examples/python/digital/tunnel.py +++ b/gnuradio-examples/python/digital/tunnel.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -46,9 +46,8 @@ import sys import os # from current dir -from transmit_path import transmit_path -from receive_path import receive_path -import fusb_options +import usrp_transmit_path +import usrp_receive_path #print os.getpid() #raw_input('Attach and press enter') @@ -86,14 +85,16 @@ def open_tun_interface(tun_device_filename): # the flow graph # ///////////////////////////////////////////////////////////////////////////// -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self, mod_class, demod_class, rx_callback, options): - gr.flow_graph.__init__(self) - self.txpath = transmit_path(self, mod_class, options) - self.rxpath = receive_path(self, demod_class, rx_callback, options) + gr.top_block.__init__(self) + self.txpath = usrp_transmit_path.usrp_transmit_path(mod_class, options) + self.rxpath = usrp_receive_path.usrp_receive_path(demod_class, rx_callback, options) + self.connect(self.txpath) + self.connect(self.rxpath) def send_pkt(self, payload='', eof=False): return self.txpath.send_pkt(payload, eof) @@ -123,10 +124,10 @@ class cs_mac(object): def __init__(self, tun_fd, verbose=False): self.tun_fd = tun_fd # file descriptor for TUN/TAP interface self.verbose = verbose - self.fg = None # flow graph (access to PHY) + self.tb = None # top block (access to PHY) - def set_flow_graph(self, fg): - self.fg = fg + def set_top_block(self, tb): + self.tb = tb def phy_rx_callback(self, ok, payload): """ @@ -152,20 +153,20 @@ class cs_mac(object): while 1: payload = os.read(self.tun_fd, 10*1024) if not payload: - self.fg.send_pkt(eof=True) + self.tb.send_pkt(eof=True) break if self.verbose: print "Tx: len(payload) = %4d" % (len(payload),) delay = min_delay - while self.fg.carrier_sensed(): + while self.tb.carrier_sensed(): sys.stderr.write('B') time.sleep(delay) if delay < 0.050: delay = delay * 2 # exponential back-off - self.fg.send_pkt(payload) + self.tb.send_pkt(payload) # ///////////////////////////////////////////////////////////////////////////// @@ -179,7 +180,10 @@ def main(): parser = OptionParser (option_class=eng_option, conflict_handler="resolve") expert_grp = parser.add_option_group("Expert") - + expert_grp.add_option("", "--rx-freq", type="eng_float", default=None, + help="set Rx frequency to FREQ [default=%default]", metavar="FREQ") + expert_grp.add_option("", "--tx-freq", type="eng_float", default=None, + help="set transmit frequency to FREQ [default=%default]", metavar="FREQ") parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(), default='gmsk', help="Select modulation from: %s [default=%%default]" @@ -191,8 +195,8 @@ def main(): expert_grp.add_option("","--tun-device-filename", default="/dev/net/tun", help="path to tun device file [default=%default]") - transmit_path.add_options(parser, expert_grp) - receive_path.add_options(parser, expert_grp) + usrp_transmit_path.add_options(parser, expert_grp) + usrp_receive_path.add_options(parser, expert_grp) for mod in mods.values(): mod.add_options(expert_grp) @@ -200,18 +204,11 @@ def main(): for demod in demods.values(): demod.add_options(expert_grp) - fusb_options.add_options(expert_grp) - (options, args) = parser.parse_args () if len(args) != 0: parser.print_help(sys.stderr) sys.exit(1) - if options.rx_freq is None or options.tx_freq is None: - sys.stderr.write("You must specify -f FREQ or --freq FREQ\n") - parser.print_help(sys.stderr) - sys.exit(1) - # open the TUN/TAP interface (tun_fd, tun_ifname) = open_tun_interface(options.tun_device_filename) @@ -243,26 +240,26 @@ def main(): # build the graph (PHY) - fg = my_graph(mods[options.modulation], - demods[options.modulation], - mac.phy_rx_callback, - options) + tb = my_top_block(mods[options.modulation], + demods[options.modulation], + mac.phy_rx_callback, + options) - mac.set_flow_graph(fg) # give the MAC a handle for the PHY + mac.set_top_block(tb) # give the MAC a handle for the PHY - if fg.txpath.bitrate() != fg.rxpath.bitrate(): + if tb.txpath.bitrate() != tb.rxpath.bitrate(): print "WARNING: Transmit bitrate = %sb/sec, Receive bitrate = %sb/sec" % ( - eng_notation.num_to_str(fg.txpath.bitrate()), - eng_notation.num_to_str(fg.rxpath.bitrate())) + eng_notation.num_to_str(tb.txpath.bitrate()), + eng_notation.num_to_str(tb.rxpath.bitrate())) print "modulation: %s" % (options.modulation,) print "freq: %s" % (eng_notation.num_to_str(options.tx_freq)) - print "bitrate: %sb/sec" % (eng_notation.num_to_str(fg.txpath.bitrate()),) - print "samples/symbol: %3d" % (fg.txpath.samples_per_symbol(),) - #print "interp: %3d" % (fg.txpath.interp(),) - #print "decim: %3d" % (fg.rxpath.decim(),) + print "bitrate: %sb/sec" % (eng_notation.num_to_str(tb.txpath.bitrate()),) + print "samples/symbol: %3d" % (tb.txpath.samples_per_symbol(),) + #print "interp: %3d" % (tb.txpath.interp(),) + #print "decim: %3d" % (tb.rxpath.decim(),) - fg.rxpath.set_carrier_threshold(options.carrier_threshold) + tb.rxpath.set_carrier_threshold(options.carrier_threshold) print "Carrier sense threshold:", options.carrier_threshold, "dB" print @@ -275,12 +272,12 @@ def main(): print - fg.start() # Start executing the flow graph (runs in separate threads) + tb.start() # Start executing the flow graph (runs in separate threads) mac.main_loop() # don't expect this to return... - fg.stop() # but if it does, tell flow graph to stop. - fg.wait() # wait for it to finish + tb.stop() # but if it does, tell flow graph to stop. + tb.wait() # wait for it to finish if __name__ == '__main__': diff --git a/gnuradio-examples/python/digital/tx_voice.py b/gnuradio-examples/python/digital/tx_voice.py index 09b1c584..d8692beb 100755 --- a/gnuradio-examples/python/digital/tx_voice.py +++ b/gnuradio-examples/python/digital/tx_voice.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2007,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -35,16 +35,18 @@ import struct import sys # from current dir -from transmit_path import transmit_path -import fusb_options +import usrp_transmit_path #import os #print os.getpid() #raw_input('Attach and press enter') -class audio_rx(gr.hier_block): - def __init__(self, fg, audio_input_dev): +class audio_rx(gr.hier_block2): + def __init__(self, audio_input_dev): + gr.hier_block2.__init__(self, "audio_rx", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature sample_rate = 8000 src = audio.source(sample_rate, audio_input_dev) src_scale = gr.multiply_const_ff(32767) @@ -52,20 +54,20 @@ class audio_rx(gr.hier_block): voice_coder = gsm_full_rate.encode_sp() self.packets_from_encoder = gr.msg_queue() packet_sink = gr.message_sink(33, self.packets_from_encoder, False) - fg.connect(src, src_scale, f2s, voice_coder, packet_sink) - gr.hier_block.__init__(self, fg, src, packet_sink) + self.connect(src, src_scale, f2s, voice_coder, packet_sink) def get_encoded_voice_packet(self): return self.packets_from_encoder.delete_head() -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self, modulator_class, options): - gr.flow_graph.__init__(self) - self.txpath = transmit_path(self, modulator_class, options) - self.audio_rx = audio_rx(self, options.audio_input) - + gr.top_block.__init__(self) + self.txpath = usrp_transmit_path.usrp_transmit_path(modulator_class, options) + self.audio_rx = audio_rx(options.audio_input) + self.connect(self.txpath) + self.connect(self.audio_rx) # ///////////////////////////////////////////////////////////////////////////// @@ -75,7 +77,7 @@ class my_graph(gr.flow_graph): def main(): def send_pkt(payload='', eof=False): - return fg.txpath.send_pkt(payload, eof) + return tb.txpath.send_pkt(payload, eof) def rx_callback(ok, payload): print "ok = %r, payload = '%s'" % (ok, payload) @@ -93,14 +95,11 @@ def main(): help="set megabytes to transmit [default=inf]") parser.add_option("-I", "--audio-input", type="string", default="", help="pcm input device name. E.g., hw:0,0 or /dev/dsp") - - transmit_path.add_options(parser, expert_grp) + usrp_transmit_path.add_options(parser, expert_grp) for mod in mods.values(): mod.add_options(expert_grp) - fusb_options.add_options(expert_grp) - parser.set_defaults(bitrate=50e3) # override default bitrate default (options, args) = parser.parse_args () @@ -115,14 +114,14 @@ def main(): # build the graph - fg = my_graph(mods[options.modulation], options) + tb = my_top_block(mods[options.modulation], options) r = gr.enable_realtime_scheduling() if r != gr.RT_OK: print "Warning: failed to enable realtime scheduling" - fg.start() # start flow graph + tb.start() # start flow graph # generate and send packets nbytes = int(1e6 * options.megabytes) @@ -130,7 +129,7 @@ def main(): pktno = 0 while nbytes == 0 or n < nbytes: - packet = fg.audio_rx.get_encoded_voice_packet() + packet = tb.audio_rx.get_encoded_voice_packet() s = packet.to_string() send_pkt(s) n += len(s) @@ -138,12 +137,11 @@ def main(): pktno += 1 send_pkt(eof=True) - fg.wait() # wait for it to finish - fg.txpath.set_auto_tr(False) + tb.wait() # wait for it to finish if __name__ == '__main__': try: main() except KeyboardInterrupt: - pass + pass diff --git a/gnuradio-examples/python/digital/usrp_options.py b/gnuradio-examples/python/digital/usrp_options.py new file mode 100644 index 00000000..380ef60f --- /dev/null +++ b/gnuradio-examples/python/digital/usrp_options.py @@ -0,0 +1,123 @@ +# +# 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. +# + +_parser_to_groups_dict = dict() +class _parser_groups(object): + def __init__(self, parser): + self.usrpx_grp = parser.add_option_group("General USRP Options") + self.usrp1_grp = parser.add_option_group("USRP1 Specific Options") + self.usrp1exp_grp = parser.add_option_group("USRP1 Expert Options") + self.usrp2_grp = parser.add_option_group("USRP2 Specific Options") + +import generic_usrp + +def _add_options(parser): + """ + Add options to manually choose between usrp or usrp2. + Add options for usb. Add options common to source and sink. + @param parser: instance of OptionParser + @return the parser group + """ + #cache groups so they dont get added twice on tranceiver apps + if not _parser_to_groups_dict.has_key(parser): _parser_to_groups_dict[parser] = _parser_groups(parser) + pg = _parser_to_groups_dict[parser] + #pick usrp or usrp2 + pg.usrpx_grp.add_option("-u", "--usrpx", type="string", default=None, + help="specify which usrp model: 1 for USRP, 2 for USRP2 [default=auto]") + #fast usb options + pg.usrp1exp_grp.add_option("-B", "--fusb-block-size", type="int", default=0, + help="specify fast usb block size [default=%default]") + pg.usrp1exp_grp.add_option("-N", "--fusb-nblocks", type="int", default=0, + help="specify number of fast usb blocks [default=%default]") + #lo offset + pg.usrpx_grp.add_option("--lo-offset", type="eng_float", default=None, + help="set LO Offset in Hz [default=automatic].") + #usrp options + pg.usrp1_grp.add_option("-w", "--which", type="int", default=0, + help="select USRP board [default=%default]") + #usrp2 options + pg.usrp2_grp.add_option("-e", "--interface", type="string", default="eth0", + help="Use USRP2 at specified Ethernet interface [default=%default]") + pg.usrp2_grp.add_option("-a", "--mac-addr", type="string", default="", + help="Use USRP2 at specified MAC address [default=None]") + return pg + +def add_rx_options(parser): + """ + Add receive specific usrp options. + @param parser: instance of OptionParser + """ + pg = _add_options(parser) + pg.usrp1_grp.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B") + pg.usrpx_grp.add_option("--rx-gain", type="eng_float", default=None, metavar="GAIN", + help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range") + pg.usrpx_grp.add_option("--show-rx-gain-range", action="store_true", default=False, + help="print min and max Rx gain available on selected daughterboard") + pg.usrpx_grp.add_option("-d", "--decim", type="intx", default=None, + help="set fpga decimation rate to DECIM [default=%default]") + +def create_usrp_source(options): + u = generic_usrp.generic_usrp_source_c( + usrpx=options.usrpx, + which=options.which, + subdev_spec=options.rx_subdev_spec, + interface=options.interface, + mac_addr=options.mac_addr, + fusb_block_size=options.fusb_block_size, + fusb_nblocks=options.fusb_nblocks, + lo_offset=options.lo_offset, + gain=options.rx_gain, + ) + if options.show_rx_gain_range: + print "Rx Gain Range: minimum = %g, maximum = %g, step size = %g"%tuple(u.gain_range()) + return u + +def add_tx_options(parser): + """ + Add transmit specific usrp options. + @param parser: instance of OptionParser + """ + pg = _add_options(parser) + pg.usrp1_grp.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B") + pg.usrpx_grp.add_option("--tx-gain", type="eng_float", default=None, metavar="GAIN", + help="set transmitter gain in dB [default=midpoint]. See also --show-tx-gain-range") + pg.usrpx_grp.add_option("--show-tx-gain-range", action="store_true", default=False, + help="print min and max Tx gain available on selected daughterboard") + pg.usrpx_grp.add_option("-i", "--interp", type="intx", default=None, + help="set fpga interpolation rate to INTERP [default=%default]") + +def create_usrp_sink(options): + u = generic_usrp.generic_usrp_sink_c( + usrpx=options.usrpx, + which=options.which, + subdev_spec=options.tx_subdev_spec, + interface=options.interface, + mac_addr=options.mac_addr, + fusb_block_size=options.fusb_block_size, + fusb_nblocks=options.fusb_nblocks, + lo_offset=options.lo_offset, + gain=options.tx_gain, + ) + if options.show_tx_gain_range: + print "Tx Gain Range: minimum = %g, maximum = %g, step size = %g"%tuple(u.gain_range()) + return u diff --git a/gnuradio-examples/python/digital/usrp_receive_path.py b/gnuradio-examples/python/digital/usrp_receive_path.py new file mode 100644 index 00000000..fd47c272 --- /dev/null +++ b/gnuradio-examples/python/digital/usrp_receive_path.py @@ -0,0 +1,86 @@ +# +# 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. +# + +from gnuradio import gr +import usrp_options +import receive_path +from pick_bitrate import pick_rx_bitrate +from gnuradio import eng_notation + +def add_freq_option(parser): + """ + Hackery that has the -f / --freq option set both tx_freq and rx_freq + """ + def freq_callback(option, opt_str, value, parser): + parser.values.rx_freq = value + parser.values.tx_freq = value + + if not parser.has_option('--freq'): + parser.add_option('-f', '--freq', type="eng_float", + action="callback", callback=freq_callback, + help="set Tx and/or Rx frequency to FREQ [default=%default]", + metavar="FREQ") + +def add_options(parser, expert): + add_freq_option(parser) + usrp_options.add_rx_options(parser) + receive_path.receive_path.add_options(parser, expert) + expert.add_option("", "--rx-freq", type="eng_float", default=None, + help="set Rx frequency to FREQ [default=%default]", metavar="FREQ") + parser.add_option("-v", "--verbose", action="store_true", default=False) + +class usrp_receive_path(gr.hier_block2): + + def __init__(self, demod_class, rx_callback, options): + ''' + See below for what options should hold + ''' + gr.hier_block2.__init__(self, "usrp_receive_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + if options.rx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n") + raise SystemExit + rx_path = receive_path.receive_path(demod_class, rx_callback, options) + for attr in dir(rx_path): #forward the methods + if not attr.startswith('_') and not hasattr(self, attr): + setattr(self, attr, getattr(rx_path, attr)) + #setup usrp + self._demod_class = demod_class + self._setup_usrp_source(options) + #connect + self.connect(self.u, rx_path) + + def _setup_usrp_source(self, options): + self.u = usrp_options.create_usrp_source(options) + adc_rate = self.u.adc_rate() + if options.verbose: + print 'USRP Source:', self.u + (self._bitrate, self._samples_per_symbol, self._decim) = \ + pick_rx_bitrate(options.bitrate, self._demod_class.bits_per_symbol(), \ + options.samples_per_symbol, options.decim, adc_rate, \ + self.u.get_decim_rates()) + + self.u.set_decim(self._decim) + + if not self.u.set_center_freq(options.rx_freq): + print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(options.rx_freq)) + raise ValueError, eng_notation.num_to_str(options.rx_freq) diff --git a/gnuradio-examples/python/digital/usrp_transmit_path.py b/gnuradio-examples/python/digital/usrp_transmit_path.py new file mode 100644 index 00000000..ed2603fa --- /dev/null +++ b/gnuradio-examples/python/digital/usrp_transmit_path.py @@ -0,0 +1,90 @@ +# +# 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. +# + +from gnuradio import gr +import usrp_options +import transmit_path +from pick_bitrate import pick_tx_bitrate +from gnuradio import eng_notation + +def add_freq_option(parser): + """ + Hackery that has the -f / --freq option set both tx_freq and rx_freq + """ + def freq_callback(option, opt_str, value, parser): + parser.values.rx_freq = value + parser.values.tx_freq = value + + if not parser.has_option('--freq'): + parser.add_option('-f', '--freq', type="eng_float", + action="callback", callback=freq_callback, + help="set Tx and/or Rx frequency to FREQ [default=%default]", + metavar="FREQ") + +def add_options(parser, expert): + add_freq_option(parser) + usrp_options.add_tx_options(parser) + transmit_path.transmit_path.add_options(parser, expert) + expert.add_option("", "--tx-freq", type="eng_float", default=None, + help="set transmit frequency to FREQ [default=%default]", metavar="FREQ") + parser.add_option("-v", "--verbose", action="store_true", default=False) + +class usrp_transmit_path(gr.hier_block2): + def __init__(self, modulator_class, options): + ''' + See below for what options should hold + ''' + gr.hier_block2.__init__(self, "usrp_transmit_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + if options.tx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n") + raise SystemExit + tx_path = transmit_path.transmit_path(modulator_class, options) + for attr in dir(tx_path): #forward the methods + if not attr.startswith('_') and not hasattr(self, attr): + setattr(self, attr, getattr(tx_path, attr)) + #setup usrp + self._modulator_class = modulator_class + self._setup_usrp_sink(options) + #connect + self.connect(tx_path, self.u) + + def _setup_usrp_sink(self, options): + """ + Creates a USRP sink, determines the settings for best bitrate, + and attaches to the transmitter's subdevice. + """ + self.u = usrp_options.create_usrp_sink(options) + dac_rate = self.u.dac_rate() + if options.verbose: + print 'USRP Sink:', self.u + (self._bitrate, self._samples_per_symbol, self._interp) = \ + pick_tx_bitrate(options.bitrate, self._modulator_class.bits_per_symbol(), \ + options.samples_per_symbol, options.interp, dac_rate, \ + self.u.get_interp_rates()) + + self.u.set_interp(self._interp) + self.u.set_auto_tr(True) + + if not self.u.set_center_freq(options.tx_freq): + print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(options.tx_freq)) + raise ValueError, eng_notation.num_to_str(options.tx_freq) diff --git a/gnuradio-examples/python/digital_voice/Makefile.am b/gnuradio-examples/python/digital_voice/Makefile.am index 5dfa8fb2..60f363b9 100644 --- a/gnuradio-examples/python/digital_voice/Makefile.am +++ b/gnuradio-examples/python/digital_voice/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,5 +19,10 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ - encdec.py +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/digital_voice + +dist_ourdata_SCRIPTS = \ + encdec.py \ + cvsd_test.py diff --git a/gnuradio-examples/python/digital_voice/Makefile.in b/gnuradio-examples/python/digital_voice/Makefile.in index 8e2a665d..62f60f43 100644 --- a/gnuradio-examples/python/digital_voice/Makefile.in +++ b/gnuradio-examples/python/digital_voice/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,34 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/digital_voice -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +158,18 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +177,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +194,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +208,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +277,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +367,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +528,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,24 +564,146 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ - encdec.py +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/digital_voice +dist_ourdata_SCRIPTS = \ + encdec.py \ + cvsd_test.py all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -350,16 +727,31 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -368,22 +760,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -394,10 +785,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -413,6 +810,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -428,7 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -440,14 +838,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -466,18 +872,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/digital_voice/cvsd_test.py b/gnuradio-examples/python/digital_voice/cvsd_test.py new file mode 100755 index 00000000..f8f1b9cc --- /dev/null +++ b/gnuradio-examples/python/digital_voice/cvsd_test.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, blks2 +from gnuradio import audio +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +def main(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-I", "--audio-input", type="string", default="", + help="pcm input device name. E.g., hw:0,0 or /dev/dsp") + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm output device name. E.g., hw:0,0 or /dev/dsp") + parser.add_option("-r", "--sample-rate", type="eng_float", default="32000", + help="Audio sampling rate [defaul=%default]") + parser.add_option("-S", "--resample-rate", type="int", default="8", + help="Resampling rate in CVSD [default=%default]") + (options, args) = parser.parse_args () + + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + tb = gr.top_block() + + src = audio.source(int(options.sample_rate), options.audio_input) + tx = blks2.cvsd_encode(options.resample_rate) + + # todo: add noise + + rx = blks2.cvsd_decode(options.resample_rate) + dst = audio.sink(int(options.sample_rate), options.audio_output) + + tb.connect(src, tx, rx, dst) + tb.run() + +if __name__ == '__main__': + print "Enter CTRL-C to exit" + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gnuradio-examples/python/digital_voice/encdec.py b/gnuradio-examples/python/digital_voice/encdec.py index a2e9d1e4..e87d57e2 100755 --- a/gnuradio-examples/python/digital_voice/encdec.py +++ b/gnuradio-examples/python/digital_voice/encdec.py @@ -20,15 +20,15 @@ # Boston, MA 02110-1301, USA. # -from gnuradio import gr, blks +from gnuradio import gr, blks2 from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-I", "--audio-input", type="string", default="", @@ -42,10 +42,10 @@ class my_graph(gr.flow_graph): sample_rate = 8000 src = audio.source(sample_rate, options.audio_input) - tx = blks.digital_voice_tx(self) + tx = blks2.digital_voice_tx(self) if_gain = gr.multiply_const_cc(10000) # channel simulator here... - rx = blks.digital_voice_rx(self) + rx = blks2.digital_voice_rx(self) dst = audio.sink(sample_rate, options.audio_output) self.connect(src, tx, if_gain, rx, dst) @@ -53,6 +53,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/mp-sched/Makefile.am b/gnuradio-examples/python/mp-sched/Makefile.am new file mode 100644 index 00000000..98fa283e --- /dev/null +++ b/gnuradio-examples/python/mp-sched/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/mp-sched + +dist_ourdata_DATA = \ + README + +dist_ourdata_SCRIPTS = \ + plot_flops.py \ + run_synthetic.py \ + synthetic.py \ + wfm_rcv_pll_to_wav.py diff --git a/gnuradio-examples/python/mp-sched/Makefile.in b/gnuradio-examples/python/mp-sched/Makefile.in new file mode 100644 index 00000000..166b5e07 --- /dev/null +++ b/gnuradio-examples/python/mp-sched/Makefile.in @@ -0,0 +1,936 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gnuradio-examples/python/mp-sched +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/mp-sched +dist_ourdata_DATA = \ + README + +dist_ourdata_SCRIPTS = \ + plot_flops.py \ + run_synthetic.py \ + synthetic.py \ + wfm_rcv_pll_to_wav.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/mp-sched/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-examples/python/mp-sched/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/mp-sched/README b/gnuradio-examples/python/mp-sched/README new file mode 100644 index 00000000..ae575437 --- /dev/null +++ b/gnuradio-examples/python/mp-sched/README @@ -0,0 +1,2 @@ +These are pieces of code used to test and benchmark the +multi-processor scheduler. diff --git a/gnuradio-examples/python/mp-sched/plot_flops.py b/gnuradio-examples/python/mp-sched/plot_flops.py new file mode 100755 index 00000000..b3f81939 --- /dev/null +++ b/gnuradio-examples/python/mp-sched/plot_flops.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +""" +Reads output from run_synthetic.py and runs gnuplot showing +GFLOPS as f(npipes, nstages) +""" + +import re +import sys +import os +import tempfile +from optparse import OptionParser + + +def parse_file(input_filename, output): + last = None + desc = '' + for line in open(input_filename, 'r'): + s = line.strip() + if s.startswith('>>>'): # ignore ">>> using SSE cruft" + continue + + if s.startswith('#D'): # machine description + desc = s[2:].strip() + continue + + fields = s.split() + npipes, nstages, flops = fields[0], fields[1], fields[8] + + if last is not None and npipes != last: + output.write('\n') + last = npipes + + output.write(' '.join((npipes, nstages, flops))) + output.write('\n') + + output.flush() + return desc + + +def handle_file(input_filename): + cmd_file = tempfile.NamedTemporaryFile(mode='w+', prefix='pf', suffix='.cmd') + cmd_file_name = cmd_file.name + data_file = tempfile.NamedTemporaryFile(mode='w+', prefix='pf', suffix='.dat') + data_file_name = data_file.name + desc = parse_file(input_filename, data_file) + if len(desc) > 0: + cmd_file.write("set title '%s'\n" % (desc,)) + cmd_file.write("set xlabel 'N pipes'\n") + cmd_file.write("set ylabel 'N stages'\n") + cmd_file.write("set zlabel 'GFLOPS'\n") + cmd_file.write("set key off\n") + cmd_file.write("set view 60, 312\n") + cmd_file.write("set pm3d\n") + cmd_file.write("splot '%s' using 1:2:($3*1e-9) with pm3d at b, '%s' using 1:2:($3*1e-9) with pm3d\n" % ( + data_file_name, data_file_name)) + + cmd_file.flush() + data_file.flush() + + os.system("gnuplot " + cmd_file_name + " -") + + #sys.stdout.write(open(cmd_file_name,'r').read()) + #sys.stdout.write(open(data_file_name,'r').read()) + + +def main(): + usage = "usage: %prog [options] file.dat" + parser = OptionParser(usage=usage) + (options, args) = parser.parse_args() + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + + handle_file(args[0]) + + +if __name__ == '__main__': + main() diff --git a/gnuradio-examples/python/mp-sched/run_synthetic.py b/gnuradio-examples/python/mp-sched/run_synthetic.py new file mode 100755 index 00000000..565e6c5c --- /dev/null +++ b/gnuradio-examples/python/mp-sched/run_synthetic.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +""" +Run synthetic.py for npipes in [1,16], nstages in [1,16] +""" + +import re +import sys +import os +import tempfile +from optparse import OptionParser + + +def write_shell_script(f, data_filename, description, ncores, gflops, max_pipes_and_stages): + """ + f is the file to write the script to + data_filename is the where the data ends up + description describes the machine + ncores is the number of cores (used to size the workload) + gflops is the estimated GFLOPS per core (used to size the workload) + """ + + f.write("#!/bin/sh\n") + f.write("(\n") + if description: + f.write("echo '#D %s'\n" % (description,)) + + for npipes in range(1, max_pipes_and_stages + 1): + for nstages in range(1, max_pipes_and_stages + 1): + # We'd like each run of synthetic to take ~10 seconds + desired_time_per_run = 10 + est_gflops_avail = min(nstages * npipes, ncores) * gflops + nsamples = (est_gflops_avail * desired_time_per_run)/(512.0 * nstages * npipes) + nsamples = int(nsamples * 1e9) + + cmd = "./synthetic.py -m -s %d -p %d -N %d\n" % (nstages, npipes, nsamples) + f.write(cmd) + f.write('if test $? -ge 128; then exit 128; fi\n') + + f.write(") 2>&1 | grep --line-buffered -v '^>>>' | tee %s\n" % (data_filename,)) + f.flush() + + + +def main(): + description = """%prog gathers multiprocessor scaling data using the ./synthetic.py benchmark. +All combinations of npipes and nstages between 1 and --max-pipes-and-stages are tried. +The -n and -f options provides hints used to size the workload. We'd like each run +of synthetic to take about 10 seconds. For the full 16x16 case this results in a +total runtime of about 43 minutes, assuming that your values for -n and -f are reasonable. +For x86 machines, assume 3 FLOPS per processor Hz. E.g., 3 GHz machine -> 9 GFLOPS. +plot_flops.py will make pretty graphs from the output data generated by %prog. +""" + usage = "usage: %prog [options] output.dat" + parser = OptionParser(usage=usage, description=description) + parser.add_option("-d", "--description", metavar="DESC", + help="machine description, e.g., \"Dual quad-core Xeon 3 GHz\"", default=None) + parser.add_option("-n", "--ncores", type="int", default=1, + help="number of processor cores [default=%default]") + parser.add_option("-g", "--gflops", metavar="GFLOPS", type="float", default=3.0, + help="estimated GFLOPS per core [default=%default]") + parser.add_option("-m", "--max-pipes-and-stages", metavar="MAX", type="int", default=16, + help="maximum number of pipes and stages to use [default=%default]") + (options, args) = parser.parse_args() + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + + output_filename = args[0] + + shell = os.popen("/bin/sh", "w") + + write_shell_script(shell, + output_filename, + options.description, + options.ncores, + options.gflops, + options.max_pipes_and_stages) + +if __name__ == '__main__': + main() + diff --git a/gnuradio-examples/python/mp-sched/synthetic.py b/gnuradio-examples/python/mp-sched/synthetic.py new file mode 100755 index 00000000..e1fcb20b --- /dev/null +++ b/gnuradio-examples/python/mp-sched/synthetic.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +from gnuradio import gr, gru, eng_notation, blks2 +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import os + + +class pipeline(gr.hier_block2): + def __init__(self, nstages, ntaps=256): + """ + Create a pipeline of nstages of gr.fir_filter_fff's connected in serial + terminating in a gr.null_sink. + """ + gr.hier_block2.__init__(self, "pipeline", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0, 0, 0)) + taps = ntaps*[1.0/ntaps] + upstream = self + for i in range(nstages): + op = gr.fir_filter_fff(1, taps) + self.connect(upstream, op) + upstream = op + + self.connect(upstream, gr.null_sink(gr.sizeof_float)) + + +class top(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + default_nsamples = 10e6 + parser=OptionParser(option_class=eng_option) + parser.add_option("-p", "--npipelines", type="intx", default=1, + metavar="NPIPES", help="the number of pipelines to create (default=%default)") + parser.add_option("-s", "--nstages", type="intx", default=1, + metavar="NSTAGES", help="the number of stages in each pipeline (default=%default)") + parser.add_option("-N", "--nsamples", type="eng_float", default=default_nsamples, + help=("the number of samples to run through the graph (default=%s)" % + (eng_notation.num_to_str(default_nsamples)))) + parser.add_option("-m", "--machine-readable", action="store_true", default=False, + help="enable machine readable output") + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + self.npipes = options.npipelines + self.nstages = options.nstages + self.nsamples = options.nsamples + self.machine_readable = options.machine_readable + + ntaps = 256 + + # Something vaguely like floating point ops + self.flop = 2 * ntaps * options.npipelines * options.nstages * options.nsamples + + src = gr.null_source(gr.sizeof_float) + head = gr.head(gr.sizeof_float, int(options.nsamples)) + self.connect(src, head) + + for n in range(options.npipelines): + self.connect(head, pipeline(options.nstages, ntaps)) + + +def time_it(tb): + start = os.times() + tb.run() + stop = os.times() + delta = map((lambda a, b: a-b), stop, start) + user, sys, childrens_user, childrens_sys, real = delta + total_user = user + childrens_user + total_sys = sys + childrens_sys + if tb.machine_readable: + print "%3d %3d %.3e %7.3f %7.3f %7.3f %7.3f %.6e %.3e" % ( + tb.npipes, tb.nstages, tb.nsamples, real, total_user, total_sys, (total_user+total_sys)/real, tb.flop, tb.flop/real) + else: + print "npipes %7d" % (tb.npipes,) + print "nstages %7d" % (tb.nstages,) + print "nsamples %s" % (eng_notation.num_to_str(tb.nsamples),) + print "real %7.3f" % (real,) + print "user %7.3f" % (total_user,) + print "sys %7.3f" % (total_sys,) + print "(user+sys)/real %7.3f" % ((total_user + total_sys)/real,) + print "pseudo_flop %s" % (eng_notation.num_to_str(tb.flop),) + print "pseudo_flop/real %s" % (eng_notation.num_to_str(tb.flop/real),) + + +if __name__ == "__main__": + try: + tb = top() + time_it(tb) + except KeyboardInterrupt: + raise SystemExit, 128 + + + + diff --git a/gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py b/gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py new file mode 100755 index 00000000..3971d8b7 --- /dev/null +++ b/gnuradio-examples/python/mp-sched/wfm_rcv_pll_to_wav.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir +from gnuradio import audio +from gnuradio import blks2 +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys +import math + +class wfm_rx_block (gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + usage = "usage: %prog [options] input-samples-320kS.dat output.wav" + parser=OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-V", "--volume", type="eng_float", default=None, + help="set volume (default is midpoint)") + + (options, args) = parser.parse_args() + if len(args) != 2: + parser.print_help() + sys.exit(1) + + input_filename = args[0] + output_filename = args[1] + + self.vol = 0 + + # build graph + + self.src = gr.file_source(gr.sizeof_gr_complex, input_filename, False) + + adc_rate = 64e6 # 64 MS/s + usrp_decim = 200 + usrp_rate = adc_rate / usrp_decim # 320 kS/s + chanfilt_decim = 1 + demod_rate = usrp_rate / chanfilt_decim + audio_decimation = 10 + audio_rate = demod_rate / audio_decimation # 32 kHz + + + chan_filt_coeffs = optfir.low_pass (1, # gain + usrp_rate, # sampling rate + 80e3, # passband cutoff + 115e3, # stopband cutoff + 0.1, # passband ripple + 60) # stopband attenuation + #print len(chan_filt_coeffs) + chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + + + #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) + self.guts = blks2.wfm_rcv_pll (demod_rate, audio_decimation) + + # FIXME rework {add,multiply}_const_* to handle multiple streams + self.volume_control_l = gr.multiply_const_ff(self.vol) + self.volume_control_r = gr.multiply_const_ff(self.vol) + + # wave file as final sink + if 1: + sink = gr.wavfile_sink(output_filename, 2, int(audio_rate), 16) + else: + sink = audio.sink (int (audio_rate), + options.audio_output, + False) # ok_to_block + + # now wire it all together + self.connect (self.src, chan_filt, self.guts) + self.connect ((self.guts, 0), self.volume_control_l, (sink, 0)) + self.connect ((self.guts, 1), self.volume_control_r, (sink, 1)) + try: + self.guts.stereo_carrier_pll_recovery.squelch_enable(True) + except: + pass + #print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet" + + if options.volume is None: + g = self.volume_range() + options.volume = float(g[0]+g[1])/2 + + # set initial values + + self.set_vol(options.volume) + try: + self.guts.stereo_carrier_pll_recovery.set_lock_threshold(options.squelch) + except: + pass + #print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet" + + + def set_vol (self, vol): + g = self.volume_range() + self.vol = max(g[0], min(g[1], vol)) + self.volume_control_l.set_k(10**(self.vol/10)) + self.volume_control_r.set_k(10**(self.vol/10)) + + def volume_range(self): + return (-20.0, 0.0, 0.5) + + +if __name__ == '__main__': + tb = wfm_rx_block() + try: + tb.run() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/multi-antenna/Makefile.am b/gnuradio-examples/python/multi-antenna/Makefile.am index 0172eac3..0cb94458 100644 --- a/gnuradio-examples/python/multi-antenna/Makefile.am +++ b/gnuradio-examples/python/multi-antenna/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,7 +19,11 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/multi-antenna + +dist_ourdata_SCRIPTS = \ multi_fft.py \ multi_file.py \ multi_scope.py diff --git a/gnuradio-examples/python/multi-antenna/Makefile.in b/gnuradio-examples/python/multi-antenna/Makefile.in index 8a463c66..d001a3ff 100644 --- a/gnuradio-examples/python/multi-antenna/Makefile.in +++ b/gnuradio-examples/python/multi-antenna/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,34 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/multi-antenna -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +158,18 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +177,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +194,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +208,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +277,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +367,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +528,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,13 +564,134 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/multi-antenna +dist_ourdata_SCRIPTS = \ multi_fft.py \ multi_file.py \ multi_scope.py @@ -323,12 +699,12 @@ EXTRA_DIST = \ all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -352,16 +728,31 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -370,22 +761,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -396,10 +786,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -415,6 +811,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -430,7 +827,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -442,14 +839,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -468,18 +873,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/multi-antenna/multi_fft.py b/gnuradio-examples/python/multi-antenna/multi_fft.py index ca9c614a..54444586 100755 --- a/gnuradio-examples/python/multi-antenna/multi_fft.py +++ b/gnuradio-examples/python/multi-antenna/multi_fft.py @@ -6,9 +6,9 @@ from gnuradio.eng_option import eng_option from gnuradio import eng_notation from gnuradio import optfir from optparse import OptionParser -from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider +from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider import wx -import usrp_dbid +from usrpm import usrp_dbid import time import os.path import sys @@ -16,10 +16,10 @@ import sys # required FPGA that can do 4 rx channels. -class my_graph(stdgui.gui_flow_graph): +class my_graph(stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) self.frame = frame self.panel = panel @@ -49,9 +49,9 @@ class my_graph(stdgui.gui_flow_graph): sw_decim = 1 self.u = usrp.source_c(0, options.decim, fpga_filename="std_4rx_0tx.rbf") - if self.u.nddc() < nchan: + if self.u.nddcs() < nchan: sys.stderr.write('This code requires an FPGA build with %d DDCs. This FPGA has only %d.\n' % ( - nchan, self.u.nddc())) + nchan, self.u.nddcs())) raise SystemExit if not self.u.set_nchannels(nchan): @@ -62,11 +62,11 @@ class my_graph(stdgui.gui_flow_graph): print "USB data rate = %s" % (eng_notation.num_to_str(input_rate),) print "Scope data rate = %s" % (eng_notation.num_to_str(input_rate/sw_decim),) - self.subdev = self.u.db[0] + self.u.db[1] + self.subdev = self.u.db(0) + self.u.db(1) - if (len (self.subdev) != 4 or - self.u.db[0][0].dbid() != usrp_dbid.BASIC_RX or - self.u.db[1][0].dbid() != usrp_dbid.BASIC_RX): + if (len (self.subdev) < 4 or + self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX or + self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX): sys.stderr.write('This code requires a Basic Rx board on Sides A & B\n') sys.exit(1) @@ -89,9 +89,9 @@ class my_graph(stdgui.gui_flow_graph): #print len(chan_filt_coeffs) for i in range(nchan): - scope = fftsink.fft_sink_c(self, panel, sample_rate=input_rate/sw_decim, - title="Input %d" % (i,), - ref_level=80, y_per_div=20) + scope = fftsink2.fft_sink_c(panel, sample_rate=input_rate/sw_decim, + title="Input %d" % (i,), + ref_level=80, y_per_div=20) vbox.Add(scope.win, 10, wx.EXPAND) if options.filter: @@ -121,7 +121,7 @@ class my_graph(stdgui.gui_flow_graph): def main (): - app = stdgui.stdapp(my_graph, "Multi Scope", nstatus=1) + app = stdgui2.stdapp(my_graph, "Multi Scope", nstatus=1) app.MainLoop() if __name__ == '__main__': diff --git a/gnuradio-examples/python/multi-antenna/multi_file.py b/gnuradio-examples/python/multi-antenna/multi_file.py index e2a6e04f..87d9085e 100755 --- a/gnuradio-examples/python/multi-antenna/multi_file.py +++ b/gnuradio-examples/python/multi-antenna/multi_file.py @@ -6,9 +6,7 @@ from gnuradio.eng_option import eng_option from gnuradio import eng_notation from gnuradio import optfir from optparse import OptionParser -from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider -import wx -import usrp_dbid +from usrpm import usrp_dbid import time import os.path import sys @@ -16,10 +14,10 @@ import sys # required FPGA that can do 4 rx channels. -class my_graph(gr.flow_graph): +class my_graph(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser (option_class=eng_option) #parser.add_option("-S", "--subdev", type="subdev", default=(0, None), @@ -56,9 +54,9 @@ class my_graph(gr.flow_graph): sw_decim = 1 self.u = usrp.source_c(0, options.decim, fpga_filename="std_4rx_0tx.rbf") - if self.u.nddc() < nchan: + if self.u.nddcs() < nchan: sys.stderr.write('This code requires an FPGA build with %d DDCs. This FPGA has only %d.\n' % ( - nchan, self.u.nddc())) + nchan, self.u.nddcs())) raise SystemExit if not self.u.set_nchannels(nchan): @@ -70,11 +68,11 @@ class my_graph(gr.flow_graph): sink_data_rate = input_rate/sw_decim print "Scope data rate = %s" % (eng_notation.num_to_str(sink_data_rate),) - self.subdev = self.u.db[0] + self.u.db[1] + self.subdev = self.u.db(0) + self.u.db(1) - if (len(self.subdev) != 4 or - self.u.db[0][0].dbid() != usrp_dbid.BASIC_RX or - self.u.db[1][0].dbid() != usrp_dbid.BASIC_RX): + if (len(self.subdev) < 4 or + self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX or + self.u.db(1, 0).dbid() != usrp_dbid.BASIC_RX): sys.stderr.write('This code requires a Basic Rx board on Sides A & B\n') sys.exit(1) diff --git a/gnuradio-examples/python/multi-antenna/multi_scope.py b/gnuradio-examples/python/multi-antenna/multi_scope.py index 43aa77b0..d1e28ad1 100755 --- a/gnuradio-examples/python/multi-antenna/multi_scope.py +++ b/gnuradio-examples/python/multi-antenna/multi_scope.py @@ -6,9 +6,9 @@ from gnuradio.eng_option import eng_option from gnuradio import eng_notation from gnuradio import optfir from optparse import OptionParser -from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider +from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider import wx -import usrp_dbid +from usrpm import usrp_dbid import time import os.path import sys @@ -16,10 +16,10 @@ import sys # required FPGA that can do 4 rx channels. -class my_graph(stdgui.gui_flow_graph): +class my_top_block(stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) self.frame = frame self.panel = panel @@ -49,9 +49,9 @@ class my_graph(stdgui.gui_flow_graph): sw_decim = 1 self.u = usrp.source_c(0, options.decim, fpga_filename="std_4rx_0tx.rbf") - if self.u.nddc() < nchan: + if self.u.nddcs() < nchan: sys.stderr.write('This code requires an FPGA build with %d DDCs. This FPGA has only %d.\n' % ( - nchan, self.u.nddc())) + nchan, self.u.nddcs())) raise SystemExit if not self.u.set_nchannels(nchan): @@ -62,11 +62,11 @@ class my_graph(stdgui.gui_flow_graph): print "USB data rate = %s" % (eng_notation.num_to_str(input_rate),) print "Scope data rate = %s" % (eng_notation.num_to_str(input_rate/sw_decim),) - self.subdev = self.u.db[0] + self.u.db[1] + self.subdev = self.u.db(0) + self.u.db(1) - if (len(self.subdev) != 4 or - self.u.db[0][0].dbid() != usrp_dbid.BASIC_RX or - self.u.db[1][0].dbid() != usrp_dbid.BASIC_RX): + if (len(self.subdev) < 4 or + self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX or + self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX): sys.stderr.write('This code requires a Basic Rx board on Sides A & B\n') sys.exit(1) @@ -78,7 +78,8 @@ class my_graph(stdgui.gui_flow_graph): self.connect(self.u, di) # our destination (8 float inputs) - self.scope = scopesink.scope_sink_f(self, panel, sample_rate=input_rate/sw_decim) + self.scope = scopesink2.scope_sink_f(panel, sample_rate=input_rate/sw_decim, + num_inputs=2*nchan) # taps for channel filter chan_filt_coeffs = optfir.low_pass (1, # gain @@ -131,7 +132,7 @@ class my_graph(stdgui.gui_flow_graph): def main (): - app = stdgui.stdapp(my_graph, "Multi Scope", nstatus=1) + app = stdgui2.stdapp(my_top_block, "Multi Scope", nstatus=1) app.MainLoop() if __name__ == '__main__': diff --git a/gnuradio-examples/python/multi_usrp/Makefile.am b/gnuradio-examples/python/multi_usrp/Makefile.am index 1f51f23a..2ef10b6e 100644 --- a/gnuradio-examples/python/multi_usrp/Makefile.am +++ b/gnuradio-examples/python/multi_usrp/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,10 +19,13 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ - README \ - multi_usrp_oscope.py \ - multi_usrp_rx_cfile.py +include $(top_srcdir)/Makefile.common +ourdatadir = $(exampledir)/multi_usrp +dist_ourdata_DATA = \ + README +dist_ourdata_SCRIPTS = \ + multi_usrp_oscope.py \ + multi_usrp_rx_cfile.py diff --git a/gnuradio-examples/python/multi_usrp/Makefile.in b/gnuradio-examples/python/multi_usrp/Makefile.in index 764a2f67..16cd3a54 100644 --- a/gnuradio-examples/python/multi_usrp/Makefile.in +++ b/gnuradio-examples/python/multi_usrp/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,35 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +77,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = README $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/multi_usrp -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +160,26 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +187,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +204,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +218,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +287,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +377,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +538,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,26 +574,149 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ - README \ - multi_usrp_oscope.py \ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/multi_usrp +dist_ourdata_DATA = \ + README + +dist_ourdata_SCRIPTS = \ + multi_usrp_oscope.py \ multi_usrp_rx_cfile.py all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -352,16 +740,48 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done tags: TAGS TAGS: @@ -370,22 +790,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -396,10 +815,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) $(DATA) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -415,6 +840,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -430,7 +856,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -442,14 +868,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -468,18 +902,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/multi_usrp/README b/gnuradio-examples/python/multi_usrp/README index c93d7736..05723910 100644 --- a/gnuradio-examples/python/multi_usrp/README +++ b/gnuradio-examples/python/multi_usrp/README @@ -1,3 +1,9 @@ +# +# N.B., these files have not been converted to top_block/hier_block2 because +# those of doing the conversion don't have the setup to test this. +# As a result, these programs will no longer run until updated. +# + Quick start multi-usrp: Unpack, build and install usrp, gnuradio-core and gr-usrp @@ -23,7 +29,7 @@ You can do without a serial but then you never know which usrp is the master and CONNECTING THE CABLES Now connect the 64MHz clocks between the boards with a short sma coax cable. (See the wiki on how to enable clock-out and clock-in -http://comsec.com/wiki?USRPClockingNotes ) +http://gnuradio.org/trac/wiki/USRPClockingNotes ) You need one board with a clock out and one board with a clock in. diff --git a/gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py b/gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py index 3d426b45..512b125a 100755 --- a/gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py +++ b/gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py @@ -42,9 +42,9 @@ def pick_subdevice(u): If there's a daughterboard on B, select B. Otherwise, select A. """ - if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + if u.db(0, 0).dbid() >= 0: # dbid is < 0 if there's no d'board or a problem return (0, 0) - if u.db[1][0].dbid() >= 0: + if u.db(0, 0).dbid() >= 0: return (1, 0) return (0, 0) diff --git a/gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py b/gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py index 6084aba3..ca0ec97c 100755 --- a/gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py +++ b/gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py @@ -17,10 +17,10 @@ import sys import time from gnuradio import usrp_multi -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) usage="%prog: [options] output_filename" parser = OptionParser(option_class=eng_option, usage=usage) @@ -118,12 +118,12 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': - fg=my_graph() - fg.start() + tb=my_top_block() + tb.start() #time.sleep(0.5) - fg.sync_usrps() + tb.sync_usrps() raw_input ('Press Enter to quit: ') - fg.stop() + tb.stop() #try: # fg.start() # fg.sync_usrps() diff --git a/gnuradio-examples/python/network/Makefile.am b/gnuradio-examples/python/network/Makefile.am new file mode 100644 index 00000000..77cacbfd --- /dev/null +++ b/gnuradio-examples/python/network/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/network + +dist_ourdata_SCRIPTS = \ + audio_sink.py \ + audio_source.py \ + dial_tone_sink.py \ + dial_tone_source.py \ + vector_sink.py \ + vector_source.py diff --git a/gnuradio-examples/python/network/Makefile.in b/gnuradio-examples/python/network/Makefile.in new file mode 100644 index 00000000..0703358e --- /dev/null +++ b/gnuradio-examples/python/network/Makefile.in @@ -0,0 +1,908 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gnuradio-examples/python/network +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/network +dist_ourdata_SCRIPTS = \ + audio_sink.py \ + audio_source.py \ + dial_tone_sink.py \ + dial_tone_source.py \ + vector_sink.py \ + vector_source.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/network/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-examples/python/network/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/network/audio_sink.py b/gnuradio-examples/python/network/audio_sink.py new file mode 100755 index 00000000..e59d5083 --- /dev/null +++ b/gnuradio-examples/python/network/audio_sink.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 import gr, audio +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class audio_sink(gr.top_block): + def __init__(self, src, port, pkt_size, sample_rate): + gr.top_block.__init__(self, "audio_sink") + src = gr.udp_source(gr.sizeof_float, src, port, pkt_size) + dst = audio.sink(sample_rate) + self.connect(src, dst) + +if __name__ == '__main__': + parser = OptionParser(option_class=eng_option) + parser.add_option("", "--src-name", type="string", default="localhost", + help="local host name (domain name or IP address)") + parser.add_option("", "--src-port", type="int", default=65500, + help="port value to listen to for connection") + parser.add_option("", "--packet-size", type="int", default=1472, + help="packet size.") + parser.add_option("-r", "--sample-rate", type="int", default=32000, + help="audio signal sample rate [default=%default]") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + # Create an instance of a hierarchical block + top_block = audio_sink(options.src_name, options.src_port, + options.packet_size, options.sample_rate) + + try: + # Run forever + top_block.run() + except KeyboardInterrupt: + # Ctrl-C exits + pass + diff --git a/gnuradio-examples/python/network/audio_source.py b/gnuradio-examples/python/network/audio_source.py new file mode 100755 index 00000000..d7f4f6d9 --- /dev/null +++ b/gnuradio-examples/python/network/audio_source.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 import gr, audio +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class audio_source(gr.top_block): + def __init__(self, src, dst, port, pkt_size, sample_rate): + gr.top_block.__init__(self, "audio_source") + self.audio = audio.source(sample_rate) + self.sink = gr.udp_sink(gr.sizeof_float, src, 0, dst, port, pkt_size) + self.connect(self.audio, self.sink) + +if __name__ == '__main__': + parser = OptionParser(option_class=eng_option) + parser.add_option("", "--src-name", type="string", default="localhost", + help="local host name (domain name or IP address)") + parser.add_option("", "--dst-name", type="string", default="localhost", + help="Remote host name (domain name or IP address") + parser.add_option("", "--dst-port", type="int", default=65500, + help="port value to connect to") + parser.add_option("", "--packet-size", type="int", default=1472, + help="packet size.") + parser.add_option("-r", "--sample-rate", type="int", default=32000 , + help="audio signal sample rate [default=%default]") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + # Create an instance of a hierarchical block + top_block = audio_source(options.src_name, options.dst_name, options.dst_port, + options.packet_size, options.sample_rate) + + try: + # Run forever + top_block.run() + except KeyboardInterrupt: + # Ctrl-C exits + pass + diff --git a/gnuradio-examples/python/network/dial_tone_sink.py b/gnuradio-examples/python/network/dial_tone_sink.py new file mode 100755 index 00000000..47d24b9b --- /dev/null +++ b/gnuradio-examples/python/network/dial_tone_sink.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 import gr, audio +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class dial_tone_sink(gr.top_block): + def __init__(self, src, port, pkt_size, sample_rate): + gr.top_block.__init__(self, "dial_tone_sink") + udp = gr.udp_source(gr.sizeof_float, src, port, pkt_size) + sink = audio.sink(sample_rate) + self.connect(udp, sink) + +if __name__ == '__main__': + parser = OptionParser(option_class=eng_option) + parser.add_option("", "--src-name", type="string", default="localhost", + help="local host name (domain name or IP address)") + parser.add_option("", "--src-port", type="int", default=65500, + help="port value to listen to for connection") + parser.add_option("", "--packet-size", type="int", default=1472, + help="packet size.") + parser.add_option("-r", "--sample-rate", type="int", default=8000, + help="audio signal sample rate [default=%default]") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + # Create an instance of a hierarchical block + top_block = dial_tone_sink(options.src_name, options.src_port, + options.packet_size, options.sample_rate) + + try: + # Run forever + top_block.run() + except KeyboardInterrupt: + # Ctrl-C exits + pass + diff --git a/gnuradio-examples/python/network/dial_tone_source.py b/gnuradio-examples/python/network/dial_tone_source.py new file mode 100755 index 00000000..835f9aaf --- /dev/null +++ b/gnuradio-examples/python/network/dial_tone_source.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 import gr +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class dial_tone_source(gr.top_block): + def __init__(self, src, dst, port, pkt_size, sample_rate): + gr.top_block.__init__(self, "dial_tone_source") + + amplitude = 0.3 + src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 350, amplitude) + src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_WAVE, 440, amplitude) + add = gr.add_ff() + + # Throttle needed here to account for the other side's audio card sampling rate + thr = gr.throttle(gr.sizeof_float, sample_rate) + sink = gr.udp_sink(gr.sizeof_float, src, 0, dst, port, pkt_size) + self.connect(src0, (add, 0)) + self.connect(src1, (add, 1)) + self.connect(add, thr, sink) + +if __name__ == '__main__': + parser = OptionParser(option_class=eng_option) + parser.add_option("", "--src-name", type="string", default="localhost", + help="local host name (domain name or IP address)") + parser.add_option("", "--dst-name", type="string", default="localhost", + help="Remote host name (domain name or IP address") + parser.add_option("", "--dst-port", type="int", default=65500, + help="port value to connect to") + parser.add_option("", "--packet-size", type="int", default=1472, + help="packet size.") + parser.add_option("-r", "--sample-rate", type="int", default=8000, + help="audio signal sample rate [default=%default]") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + # Create an instance of a hierarchical block + top_block = dial_tone_source(options.src_name, options.dst_name, options.dst_port, + options.packet_size, options.sample_rate) + + try: + # Run forever + top_block.run() + except KeyboardInterrupt: + # Ctrl-C exits + pass + diff --git a/gnuradio-examples/python/network/vector_sink.py b/gnuradio-examples/python/network/vector_sink.py new file mode 100755 index 00000000..981cc598 --- /dev/null +++ b/gnuradio-examples/python/network/vector_sink.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# +# Copyright 2006 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 import gr +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class vector_sink(gr.top_block): + def __init__(self, src, port, pkt_size): + gr.top_block.__init__(self, "vector_sink") + + udp = gr.udp_source(gr.sizeof_float, src, port, pkt_size) + sink = gr.file_sink(gr.sizeof_float, "received.dat") + self.connect(udp, sink) + +if __name__ == "__main__": + parser = OptionParser(option_class=eng_option) + parser.add_option("", "--src-name", type="string", default="localhost", + help="local host name (domain name or IP address)") + parser.add_option("", "--src-port", type="int", default=65500, + help="port value to listen to for connection") + parser.add_option("", "--packet-size", type="int", default=1471, + help="packet size.") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + + # Create an instance of a hierarchical block + top_block = vector_sink(options.src_name, options.src_port, options.packet_size) + + try: + # Run forever + top_block.run() + except KeyboardInterrupt: + # Ctrl-C exits + pass + diff --git a/gnuradio-examples/python/network/vector_source.py b/gnuradio-examples/python/network/vector_source.py new file mode 100755 index 00000000..e7ec2a46 --- /dev/null +++ b/gnuradio-examples/python/network/vector_source.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# +# Copyright 2006 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 import gr +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class vector_source(gr.top_block): + def __init__(self, src, dst, port, pkt_size): + gr.top_block.__init__(self, "vector_source") + data = [i*0.01 for i in range(1000)] + vec = gr.vector_source_f(data, True) + udp = gr.udp_sink(gr.sizeof_float, src, 0, dst, port, pkt_size) + self.connect(vec, udp) + +if __name__ == '__main__': + parser = OptionParser(option_class=eng_option) + parser.add_option("", "--src-name", type="string", default="localhost", + help="local host name (domain name or IP address)") + parser.add_option("", "--dst-name", type="string", default="localhost", + help="Remote host name (domain name or IP address") + parser.add_option("", "--dst-port", type="int", default=65500, + help="port value to connect to") + parser.add_option("", "--packet-size", type="int", default=1471, + help="packet size.") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + raise SystemExit, 1 + +# Create an instance of a hierarchical block + top_block = vector_source(options.src_name, options.dst_name, + options.dst_port, options.packet_size) + + try: + # Run forever + top_block.run() + except KeyboardInterrupt: + # Ctrl-C exits + pass + diff --git a/gnuradio-examples/python/networking/Makefile.am b/gnuradio-examples/python/networking/Makefile.am deleted file mode 100644 index d3029453..00000000 --- a/gnuradio-examples/python/networking/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright 2006 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. -# - -EXTRA_DIST = \ - measurement_slave.py \ No newline at end of file diff --git a/gnuradio-examples/python/networking/Makefile.in b/gnuradio-examples/python/networking/Makefile.in deleted file mode 100644 index df64aa2b..00000000 --- a/gnuradio-examples/python/networking/Makefile.in +++ /dev/null @@ -1,483 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# -# Copyright 2006 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = gnuradio-examples/python/networking -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ - $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ - $(top_srcdir)/config/gr_check_createfilemapping.m4 \ - $(top_srcdir)/config/gr_check_shm_open.m4 \ - $(top_srcdir)/config/gr_doxygen.m4 \ - $(top_srcdir)/config/gr_fortran.m4 \ - $(top_srcdir)/config/gr_gprof.m4 \ - $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ - $(top_srcdir)/config/gr_no_undefined.m4 \ - $(top_srcdir)/config/gr_omnithread.m4 \ - $(top_srcdir)/config/gr_pwin32.m4 \ - $(top_srcdir)/config/gr_python.m4 \ - $(top_srcdir)/config/gr_scripting.m4 \ - $(top_srcdir)/config/gr_set_md_cpu.m4 \ - $(top_srcdir)/config/gr_swig.m4 \ - $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ - $(top_srcdir)/config/grc_build.m4 \ - $(top_srcdir)/config/grc_gnuradio_core.m4 \ - $(top_srcdir)/config/grc_gnuradio_examples.m4 \ - $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ - $(top_srcdir)/config/grc_gr_audio_jack.m4 \ - $(top_srcdir)/config/grc_gr_audio_oss.m4 \ - $(top_srcdir)/config/grc_gr_audio_osx.m4 \ - $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ - $(top_srcdir)/config/grc_gr_audio_windows.m4 \ - $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ - $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ - $(top_srcdir)/config/grc_gr_trellis.m4 \ - $(top_srcdir)/config/grc_gr_usrp.m4 \ - $(top_srcdir)/config/grc_gr_video_sdl.m4 \ - $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ - $(top_srcdir)/config/lf_warnings.m4 \ - $(top_srcdir)/config/macosx_audiounit.m4 \ - $(top_srcdir)/config/mkstemp.m4 \ - $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ - $(top_srcdir)/config/sdl.m4 \ - $(top_srcdir)/config/usrp_fusb_tech.m4 \ - $(top_srcdir)/config/usrp_libusb.m4 \ - $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ -ALSA_CFLAGS = @ALSA_CFLAGS@ -ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ -ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_FOR_BUILD = @CXX_FOR_BUILD@ -CYGPATH_W = @CYGPATH_W@ -DEFINES = @DEFINES@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ -DOT = @DOT@ -DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ -FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ -FFTW3F_LIBS = @FFTW3F_LIBS@ -FLIBS = @FLIBS@ -FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ -GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ -HAVE_DOT = @HAVE_DOT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -IPC_LIBS = @IPC_LIBS@ -JACK_CFLAGS = @JACK_CFLAGS@ -JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ -JACK_LIBS = @JACK_LIBS@ -LDFLAGS = @LDFLAGS@ -LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ -MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ -NO_UNDEFINED = @NO_UNDEFINED@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ -OSS_LIBS = @OSS_LIBS@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ -PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ -PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -PYTHON = @PYTHON@ -PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -RM_PROG = @RM_PROG@ -SDL_CFLAGS = @SDL_CFLAGS@ -SDL_CONFIG = @SDL_CONFIG@ -SDL_LIBS = @SDL_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ -STRIP = @STRIP@ -SWIG = @SWIG@ -SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ -SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -USB_LIBS = @USB_LIBS@ -VERSION = @VERSION@ -WINAUDIO_LIBS = @WINAUDIO_LIBS@ -XAS = @XAS@ -XCC = @XCC@ -XMLTO = @XMLTO@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_dirs = @build_dirs@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -enable_dot = @enable_dot@ -enable_html_docs = @enable_html_docs@ -enable_latex_docs = @enable_latex_docs@ -exec_prefix = @exec_prefix@ -generate_docs = @generate_docs@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -skipped_dirs = @skipped_dirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -EXTRA_DIST = \ - measurement_slave.py - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/networking/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu gnuradio-examples/python/networking/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/gnuradio-examples/python/networking/measurement_slave.py b/gnuradio-examples/python/networking/measurement_slave.py deleted file mode 100755 index a2b04151..00000000 --- a/gnuradio-examples/python/networking/measurement_slave.py +++ /dev/null @@ -1,241 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2006 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. -# - -import struct -import socket -import asyncore -import sys -import optparse -import random -from gnuradio.eng_option import eng_option -import gnuradio.gr.gr_threading as _threading - -LOOP_TIMEOUT = 0.001 -BROADCAST_ADDR = '255.255.255.255' - -BROADCAST_PORT = 27010 # UDP -CONTROL_PORT = 27011 # TCP - -PKT_HEADER_SIZE = 4 # 32-bit int - -logfile = None - -def unpack_header(s): - (len,) = struct.unpack('!i', s) - return (len,) - -def pack_header(len): - return struct.pack('!i', len) - - -class control_port_listener(asyncore.dispatcher): - def __init__(self, port=CONTROL_PORT, udp_socket=None, verbose=False): - """ - @param port: TCP port to listen on. - @type port: int - """ - asyncore.dispatcher.__init__(self) - - self._verbose = verbose - self._udp_socket = udp_socket - - host = '' # symbolic name for localhost - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - self.set_reuse_addr() - - try: - self.bind((host, port)) - except socket.error, err: - sys.stderr.write('Failed to bind to %s: %s\n' % - ((host, port), os.strerror (err.args[0]),)) - sys.exit(1) - - self.listen(3) - - def handle_accept(self): - socket, addr = self.accept() - sys.stderr.write("handle_accept: %r\n" % (addr,)) - if not(socket is None): - # instantiate a server - s = control_server(socket, addr, self._udp_socket, self._verbose) - - -class gr_dispatcher(asyncore.dispatcher): - def __init__(self, sock=None, map=None): - asyncore.dispatcher.__init__(self, sock=sock, map=map) - - def read_packet(self): - """ - Returns None or packet - """ - s = self.recvall(PKT_HEADER_SIZE) - if s == '': - return None - - (payload_len,) = unpack_header(s) - - payload_len = int(payload_len) - - if payload_len == 0: - payload = '' - else: - payload = self.recvall(payload_len) - if len(payload) != payload_len: - sys.stderr.write ('short recv, expected %d bytes, got %d\n' % ( - payload_len, len(payload))) - raise RuntimeError, "short recv" - - return payload - - def recvall(self, buffer_size): - result = '' - while len(result) < buffer_size: - data = self.recv(buffer_size - len(result)) - if not data: - return '' - result += data - return result - - -class pkt_receiver_thread(_threading.Thread): - def __init__(self, socket): - _threading.Thread.__init__(self) - self.setDaemon(1) - self.socket = socket - self.keep_running = True - self.start() - - def run(self): - while self.keep_running: - pkt, sender = self.socket.recvfrom(10000) - if pkt: - if len(pkt) > 2: - t = struct.unpack('!H', pkt[0:2]) - seqno = t[0] - else: - seqno = -1 - - logfile.write('RCVD seqno %4d len %4d from %s\n' % (seqno, len(pkt), sender)) - logfile.flush() - - -class control_server(gr_dispatcher): - def __init__(self, socket, addr, udp_socket, verbose=False): - gr_dispatcher.__init__(self, sock=socket) - - self._udp_socket = udp_socket - self.verbose = verbose - self.setblocking(1) - - def writable(self): - return False - - def handle_read(self): - pkt = self.read_packet() - if pkt: - annotate = 'ANNOTATE' - if pkt.startswith(annotate): - logfile.write(pkt[len(annotate)+1:]) - logfile.write('\n') - logfile.flush() - elif pkt.startswith('SEND'): - tokens = pkt.split() - if len(tokens) < 4: - invalid_packet(pkt) - else: - npkts = int(tokens[1]) - size = int(tokens[2]) - power = float(tokens[3]) - send_test_packets(self._udp_socket, npkts, size, power) - else: - invalid_packet(pkt) - - def handle_close(self): - self.close() - - -def invalid_packet(pkt): - sys.stderr.write('received unrecognized packet: %s\n' % (pkt,)) - - -def make_random_payload(size): - p = [0] * size - if 1: - for i in range(size): - p[i] = chr(random.randint(0, 255)) - else: - for i in range(size): - p[i] = chr(i % 256) - return ''.join(p) - - -def send_test_packets(udp_socket, npkts, size, power): - # we ignore power for now... - size = max(2, size) - payload = make_random_payload(size - 2) - for n in range(npkts): - pkt = struct.pack('!H', n) + payload - udp_socket.sendto(pkt, (BROADCAST_ADDR, BROADCAST_PORT)) - #udp_socket.sendall(pkt) - - -def open_udp_broadcast_socket(gr0_host_ip, port): - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -# s.bind((gr0_host_ip, port)) - s.bind(('', port)) - s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) -# s.connect((BROADCAST_ADDR, port)) - return s - - -def main(): - global logfile - - usage = 'usage: %prog [options] gr0-ip-addr' - parser = optparse.OptionParser (option_class=eng_option, usage=usage) - parser.add_option('-l', '--logfile', type='string', default=None, - help="specify log file name [default=]") - parser.add_option('-v', '--verbose', action="store_true", default=False, - help="enable verbose diagnostics") - - (options, args) = parser.parse_args () - if len(args) != 1: - parser.print_help() - sys.exit(1) - - gr0_ip_addr = args[0] - if options.logfile is None: - logfile = sys.stdout - else: - logfile = file(options.logfile, 'w') - - udp_socket = open_udp_broadcast_socket(gr0_ip_addr, BROADCAST_PORT) - R = pkt_receiver_thread(udp_socket) - L = control_port_listener(CONTROL_PORT, udp_socket=udp_socket, verbose=options.verbose) - asyncore.loop(LOOP_TIMEOUT) - - -if __name__ == '__main__': - try: - main() - except KeyboardInterrupt: - pass diff --git a/gnuradio-examples/python/ofdm/Makefile.am b/gnuradio-examples/python/ofdm/Makefile.am new file mode 100644 index 00000000..fc7156b4 --- /dev/null +++ b/gnuradio-examples/python/ofdm/Makefile.am @@ -0,0 +1,42 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/ofdm + +dist_ourdata_DATA = \ + ofdm_sync.m \ + ofdm_sync_pn.m \ + fusb_options.py \ + plot_ofdm.m \ + pick_bitrate.py \ + receive_path.py \ + transmit_path.py + +dist_ourdata_SCRIPTS = \ + benchmark_ofdm.py \ + benchmark_ofdm_rx.py \ + benchmark_ofdm_tx.py \ + fftshift.py \ + ofdm_mod_demod_test.py \ + tunnel.py + diff --git a/gnuradio-examples/python/ofdm/Makefile.in b/gnuradio-examples/python/ofdm/Makefile.in new file mode 100644 index 00000000..0455e921 --- /dev/null +++ b/gnuradio-examples/python/ofdm/Makefile.in @@ -0,0 +1,945 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gnuradio-examples/python/ofdm +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/ofdm +dist_ourdata_DATA = \ + ofdm_sync.m \ + ofdm_sync_pn.m \ + fusb_options.py \ + plot_ofdm.m \ + pick_bitrate.py \ + receive_path.py \ + transmit_path.py + +dist_ourdata_SCRIPTS = \ + benchmark_ofdm.py \ + benchmark_ofdm_rx.py \ + benchmark_ofdm_tx.py \ + fftshift.py \ + ofdm_mod_demod_test.py \ + tunnel.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/ofdm/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-examples/python/ofdm/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/ofdm/benchmark_ofdm.py b/gnuradio-examples/python/ofdm/benchmark_ofdm.py new file mode 100755 index 00000000..6d6ca9f2 --- /dev/null +++ b/gnuradio-examples/python/ofdm/benchmark_ofdm.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python +# +# Copyright 2006, 2007, 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. +# + +from gnuradio import gr, blks2 +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import random, time, struct, sys, math, os + +# from current dir +from transmit_path import transmit_path +from receive_path import receive_path + + +class my_top_block(gr.top_block): + def __init__(self, callback, options): + gr.top_block.__init__(self) + + if not options.channel_off: + SNR = 10.0**(options.snr/10.0) + power_in_signal = abs(options.tx_amplitude)**2.0 + noise_power_in_channel = power_in_signal/SNR + noise_voltage = math.sqrt(noise_power_in_channel/2.0) + print "Noise voltage: ", noise_voltage + + frequency_offset = options.frequency_offset / options.fft_length + print "Frequency offset: ", frequency_offset + + if options.multipath_on: + taps = [1.0, .2, 0.0, .1, .08, -.4, .12, -.2, 0, 0, 0, .3] + else: + taps = [1.0, 0.0] + + else: + noise_voltage = 0.0 + frequency_offset = 0.0 + taps = [1.0, 0.0] + + symbols_per_packet = math.ceil(((4+options.size+4) * 8) / options.occupied_tones) + samples_per_packet = (symbols_per_packet+2) * (options.fft_length+options.cp_length) + print "Symbols per Packet: ", symbols_per_packet + print "Samples per Packet: ", samples_per_packet + if options.discontinuous: + stream_size = [100000, int(options.discontinuous*samples_per_packet)] + else: + stream_size = [0, 100000] + + z = [0,] + self.zeros = gr.vector_source_c(z, True) + self.txpath = transmit_path(options) + + #self.mux = gr.stream_mux(gr.sizeof_gr_complex, stream_size) + self.throttle = gr.throttle(gr.sizeof_gr_complex, options.sample_rate) + self.channel = gr.channel_model(noise_voltage, frequency_offset, + options.clockrate_ratio, taps) + self.rxpath = receive_path(callback, options) + + #self.connect(self.zeros, (self.mux,0)) + #self.connect(self.txpath, (self.mux,1)) + #self.connect(self.mux, self.throttle, self.channel, self.rxpath) + #self.connect(self.mux, self.throttle, self.rxpath) + self.connect(self.txpath, self.throttle, self.channel, self.rxpath) + + if options.log: + self.connect(self.txpath, gr.file_sink(gr.sizeof_gr_complex, "txpath.dat")) + #self.connect(self.mux, gr.file_sink(gr.sizeof_gr_complex, "mux.dat")) + #self.connect(self.channel, gr.file_sink(gr.sizeof_gr_complex, "channel.dat")) + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +def main(): + global n_rcvd, n_right + + n_rcvd = 0 + n_right = 0 + + def send_pkt(payload='', eof=False): + return tb.txpath.send_pkt(payload, eof) + + def rx_callback(ok, payload): + global n_rcvd, n_right + n_rcvd += 1 + (pktno,) = struct.unpack('!H', payload[0:2]) + if ok: + n_right += 1 + print "ok: %r \t pktno: %d \t n_rcvd: %d \t n_right: %d" % (ok, pktno, n_rcvd, n_right) + + printlst = list() + for x in payload[2:]: + t = hex(ord(x)).replace('0x', '') + if(len(t) == 1): + t = '0' + t + printlst.append(t) + printable = ''.join(printlst) + + print printable + print "\n" + + parser = OptionParser(option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + parser.add_option("-s", "--size", type="eng_float", default=400, + help="set packet size [default=%default]") + parser.add_option("-M", "--megabytes", type="eng_float", default=1.0, + help="set megabytes to transmit [default=%default]") + parser.add_option("-r", "--sample-rate", type="eng_float", default=1e5, + help="limit sample rate to RATE in throttle (%default)") + parser.add_option("", "--snr", type="eng_float", default=30, + help="set the SNR of the channel in dB [default=%default]") + parser.add_option("", "--frequency-offset", type="eng_float", default=0, + help="set frequency offset introduced by channel [default=%default]") + parser.add_option("", "--clockrate-ratio", type="eng_float", default=1.0, + help="set clock rate ratio (sample rate difference) between two systems [default=%default]") + parser.add_option("","--discontinuous", type="int", default=0, + help="enable discontinous transmission, burst of N packets [Default is continuous]") + parser.add_option("","--channel-off", action="store_true", default=False, + help="Turns AWGN, freq offset channel off") + parser.add_option("","--multipath-on", action="store_true", default=False, + help="enable multipath") + + transmit_path.add_options(parser, expert_grp) + receive_path.add_options(parser, expert_grp) + blks2.ofdm_mod.add_options(parser, expert_grp) + blks2.ofdm_demod.add_options(parser, expert_grp) + + (options, args) = parser.parse_args () + + # build the graph + tb = my_top_block(rx_callback, options) + + r = gr.enable_realtime_scheduling() + # if r != gr.RT_OK: + # print "Warning: failed to enable realtime scheduling" + + tb.start() # start flow graph + + # generate and send packets + nbytes = int(1e6 * options.megabytes) + n = 0 + pktno = 0 + pkt_size = int(options.size) + + while n < nbytes: + #r = ''.join([chr(random.randint(0,255)) for i in range(pkt_size-2)]) + #pkt_contents = struct.pack('!H', pktno) + r + + pkt_contents = struct.pack('!H', pktno) + (pkt_size - 2) * chr(pktno & 0xff) + + send_pkt(pkt_contents) + n += pkt_size + #sys.stderr.write('.') + #if options.discontinuous and pktno % 5 == 4: + # time.sleep(1) + pktno += 1 + + send_pkt(eof=True) + tb.wait() # wait for it to finish + + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass + + diff --git a/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py b/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py new file mode 100755 index 00000000..cb9649a6 --- /dev/null +++ b/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python +# +# Copyright 2006, 2007 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 import gr, blks2 +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import struct, sys + +# from current dir +from receive_path import receive_path +import fusb_options + +class my_top_block(gr.top_block): + def __init__(self, callback, options): + gr.top_block.__init__(self) + + self._rx_freq = options.rx_freq # receiver's center frequency + self._rx_gain = options.rx_gain # receiver's gain + self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use + self._decim = options.decim # Decimating rate for the USRP (prelim) + self._fusb_block_size = options.fusb_block_size # usb info for USRP + self._fusb_nblocks = options.fusb_nblocks # usb info for USRP + + if self._rx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n") + raise SystemExit + + # Set up USRP source + self._setup_usrp_source() + ok = self.set_freq(self._rx_freq) + if not ok: + print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq)) + raise ValueError, eng_notation.num_to_str(self._rx_freq) + g = self.subdev.gain_range() + if options.show_rx_gain_range: + print "Rx Gain Range: minimum = %g, maximum = %g, step size = %g" \ + % (g[0], g[1], g[2]) + self.set_gain(options.rx_gain) + self.set_auto_tr(True) # enable Auto Transmit/Receive switching + + # Set up receive path + self.rxpath = receive_path(callback, options) + + self.connect(self.u, self.rxpath) + + def _setup_usrp_source(self): + self.u = usrp.source_c (fusb_block_size=self._fusb_block_size, + fusb_nblocks=self._fusb_nblocks) + adc_rate = self.u.adc_rate() + + self.u.set_decim_rate(self._decim) + + # determine the daughterboard subdevice we're using + if self._rx_subdev_spec is None: + self._rx_subdev_spec = usrp.pick_rx_subdevice(self.u) + self.subdev = usrp.selected_subdev(self.u, self._rx_subdev_spec) + + self.u.set_mux(usrp.determine_rx_mux_value(self.u, self._rx_subdev_spec)) + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital up converter. + """ + r = self.u.tune(0, self.subdev, target_freq) + if r: + return True + + return False + + def set_gain(self, gain): + """ + Sets the analog gain in the USRP + """ + if gain is None: + r = self.subdev.gain_range() + gain = (r[0] + r[1])/2 # set gain to midpoint + self.gain = gain + return self.subdev.set_gain(gain) + + def set_auto_tr(self, enable): + return self.subdev.set_auto_tr(enable) + + def decim(self): + return self._decim + + def add_options(normal, expert): + """ + Adds usrp-specific options to the Options Parser + """ + add_freq_option(normal) + normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B") + normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN", + help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range") + normal.add_option("", "--show-rx-gain-range", action="store_true", default=False, + help="print min and max Rx gain available on selected daughterboard") + normal.add_option("-v", "--verbose", action="store_true", default=False) + + expert.add_option("", "--rx-freq", type="eng_float", default=None, + help="set Rx frequency to FREQ [default=%default]", metavar="FREQ") + expert.add_option("-d", "--decim", type="intx", default=128, + help="set fpga decimation rate to DECIM [default=%default]") + expert.add_option("", "--snr", type="eng_float", default=30, + help="set the SNR of the channel in dB [default=%default]") + + + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + +def add_freq_option(parser): + """ + Hackery that has the -f / --freq option set both tx_freq and rx_freq + """ + def freq_callback(option, opt_str, value, parser): + parser.values.rx_freq = value + parser.values.tx_freq = value + + if not parser.has_option('--freq'): + parser.add_option('-f', '--freq', type="eng_float", + action="callback", callback=freq_callback, + help="set Tx and/or Rx frequency to FREQ [default=%default]", + metavar="FREQ") + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +def main(): + + global n_rcvd, n_right + + n_rcvd = 0 + n_right = 0 + + def rx_callback(ok, payload): + global n_rcvd, n_right + n_rcvd += 1 + (pktno,) = struct.unpack('!H', payload[0:2]) + if ok: + n_right += 1 + print "ok: %r \t pktno: %d \t n_rcvd: %d \t n_right: %d" % (ok, pktno, n_rcvd, n_right) + + if 0: + printlst = list() + for x in payload[2:]: + t = hex(ord(x)).replace('0x', '') + if(len(t) == 1): + t = '0' + t + printlst.append(t) + printable = ''.join(printlst) + + print printable + print "\n" + + parser = OptionParser(option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + parser.add_option("","--discontinuous", action="store_true", default=False, + help="enable discontinuous") + + my_top_block.add_options(parser, expert_grp) + receive_path.add_options(parser, expert_grp) + blks2.ofdm_mod.add_options(parser, expert_grp) + blks2.ofdm_demod.add_options(parser, expert_grp) + fusb_options.add_options(expert_grp) + + (options, args) = parser.parse_args () + + # build the graph + tb = my_top_block(rx_callback, options) + + r = gr.enable_realtime_scheduling() + if r != gr.RT_OK: + print "Warning: failed to enable realtime scheduling" + + tb.start() # start flow graph + tb.wait() # wait for it to finish + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py b/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py new file mode 100755 index 00000000..918ff084 --- /dev/null +++ b/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python +# +# Copyright 2005, 2006 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 import gr, blks2 +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import time, struct, sys + +# from current dir +from transmit_path import transmit_path +from pick_bitrate import pick_tx_bitrate +import fusb_options + +class my_top_block(gr.top_block): + def __init__(self, options): + gr.top_block.__init__(self) + + self._tx_freq = options.tx_freq # tranmitter's center frequency + self._tx_subdev_spec = options.tx_subdev_spec # daughterboard to use + self._interp = options.interp # interpolating rate for the USRP (prelim) + self._fusb_block_size = options.fusb_block_size # usb info for USRP + self._fusb_nblocks = options.fusb_nblocks # usb info for USRP + + if self._tx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n") + raise SystemExit + + # Set up USRP sink; also adjusts interp, and bitrate + self._setup_usrp_sink() + + # copy the final answers back into options for use by modulator + #options.bitrate = self._bitrate + + self.txpath = transmit_path(options) + + self.connect(self.txpath, self.u) + + def _setup_usrp_sink(self): + """ + Creates a USRP sink, determines the settings for best bitrate, + and attaches to the transmitter's subdevice. + """ + self.u = usrp.sink_c(fusb_block_size=self._fusb_block_size, + fusb_nblocks=self._fusb_nblocks) + + self.u.set_interp_rate(self._interp) + + # determine the daughterboard subdevice we're using + if self._tx_subdev_spec is None: + self._tx_subdev_spec = usrp.pick_tx_subdevice(self.u) + self.u.set_mux(usrp.determine_tx_mux_value(self.u, self._tx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u, self._tx_subdev_spec) + + # Set center frequency of USRP + ok = self.set_freq(self._tx_freq) + if not ok: + print "Failed to set Tx frequency to %s" % (eng_notation.num_to_str(self._tx_freq),) + raise ValueError + + # Set the USRP for maximum transmit gain + # (Note that on the RFX cards this is a nop.) + self.set_gain(self.subdev.gain_range()[1]) + + # enable Auto Transmit/Receive switching + self.set_auto_tr(True) + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital up converter. + """ + r = self.u.tune(self.subdev.which(), self.subdev, target_freq) + if r: + return True + + return False + + def set_gain(self, gain): + """ + Sets the analog gain in the USRP + """ + self.gain = gain + self.subdev.set_gain(gain) + + def set_auto_tr(self, enable): + """ + Turns on auto transmit/receive of USRP daughterboard (if exits; else ignored) + """ + return self.subdev.set_auto_tr(enable) + + def interp(self): + return self._interp + + def add_options(normal, expert): + """ + Adds usrp-specific options to the Options Parser + """ + add_freq_option(normal) + normal.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, + help="select USRP Tx side A or B") + normal.add_option("-v", "--verbose", action="store_true", default=False) + + expert.add_option("", "--tx-freq", type="eng_float", default=None, + help="set transmit frequency to FREQ [default=%default]", metavar="FREQ") + expert.add_option("-i", "--interp", type="intx", default=256, + help="set fpga interpolation rate to INTERP [default=%default]") + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + def _print_verbage(self): + """ + Prints information about the transmit path + """ + print "Using TX d'board %s" % (self.subdev.side_and_name(),) + print "modulation: %s" % (self._modulator_class.__name__) + print "interp: %3d" % (self._interp) + print "Tx Frequency: %s" % (eng_notation.num_to_str(self._tx_freq)) + + +def add_freq_option(parser): + """ + Hackery that has the -f / --freq option set both tx_freq and rx_freq + """ + def freq_callback(option, opt_str, value, parser): + parser.values.rx_freq = value + parser.values.tx_freq = value + + if not parser.has_option('--freq'): + parser.add_option('-f', '--freq', type="eng_float", + action="callback", callback=freq_callback, + help="set Tx and/or Rx frequency to FREQ [default=%default]", + metavar="FREQ") + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +def main(): + + def send_pkt(payload='', eof=False): + return tb.txpath.send_pkt(payload, eof) + + parser = OptionParser(option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + parser.add_option("-s", "--size", type="eng_float", default=400, + help="set packet size [default=%default]") + parser.add_option("-M", "--megabytes", type="eng_float", default=1.0, + help="set megabytes to transmit [default=%default]") + parser.add_option("","--discontinuous", action="store_true", default=False, + help="enable discontinuous mode") + + my_top_block.add_options(parser, expert_grp) + transmit_path.add_options(parser, expert_grp) + blks2.ofdm_mod.add_options(parser, expert_grp) + blks2.ofdm_demod.add_options(parser, expert_grp) + fusb_options.add_options(expert_grp) + + (options, args) = parser.parse_args () + + # build the graph + tb = my_top_block(options) + + r = gr.enable_realtime_scheduling() + if r != gr.RT_OK: + print "Warning: failed to enable realtime scheduling" + + tb.start() # start flow graph + + # generate and send packets + nbytes = int(1e6 * options.megabytes) + n = 0 + pktno = 0 + pkt_size = int(options.size) + + while n < nbytes: + send_pkt(struct.pack('!H', pktno) + (pkt_size - 2) * chr(pktno & 0xff)) + n += pkt_size + sys.stderr.write('.') + if options.discontinuous and pktno % 5 == 1: + time.sleep(1) + pktno += 1 + + send_pkt(eof=True) + tb.wait() # wait for it to finish + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/ofdm/fftshift.py b/gnuradio-examples/python/ofdm/fftshift.py new file mode 100755 index 00000000..98abf5d4 --- /dev/null +++ b/gnuradio-examples/python/ofdm/fftshift.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +from gnuradio import gr + +class my_top_block(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + length = 101 + + data_r = range(length) + data_i = range(length,2*length) + src_r = gr.vector_source_s(data_r, False) + src_i = gr.vector_source_s(data_i, False) + s2f_r = gr.short_to_float() + s2f_i = gr.short_to_float() + f2c = gr.float_to_complex() + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, length) + + shift = True + ifft = gr.fft_vcc(length, False, [], shift) + fft = gr.fft_vcc(length, True, [], shift) + + v2s = gr.vector_to_stream(gr.sizeof_gr_complex, length) + snk_in = gr.file_sink(gr.sizeof_gr_complex, "fftshift.in") + snk_out = gr.file_sink(gr.sizeof_gr_complex, "fftshift.out") + + self.connect(src_r, s2f_r, (f2c,0)) + self.connect(src_i, s2f_i, (f2c,1)) + self.connect(f2c, snk_in) + self.connect(f2c, s2v, ifft, fft, v2s, snk_out) + + +def main(): + tb = my_top_block() + tb.start() + tb.wait() + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gnuradio-examples/python/digital/fusb_options.py b/gnuradio-examples/python/ofdm/fusb_options.py similarity index 100% rename from gnuradio-examples/python/digital/fusb_options.py rename to gnuradio-examples/python/ofdm/fusb_options.py diff --git a/gnuradio-examples/python/ofdm/ofdm_mod_demod_test.py b/gnuradio-examples/python/ofdm/ofdm_mod_demod_test.py new file mode 100755 index 00000000..b1521da6 --- /dev/null +++ b/gnuradio-examples/python/ofdm/ofdm_mod_demod_test.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2008 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 import gr, ofdm_packet_utils +import gnuradio.gr.gr_threading as _threading +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import random, time, struct, sys, math, os + +class my_top_block(gr.top_block): + def __init__(self, callback, options): + gr.top_block.__init__(self) + + # hard-coded known symbol + ks1 = known_symbols_4512_1[0:options.occupied_tones] + ks2 = known_symbols_4512_2[0:options.occupied_tones] + + self._rcvd_pktq = gr.msg_queue() + + # accepts messages from the outside world + self.ofdm_mapper = gr.ofdm_bpsk_mapper(4, options.occupied_tones, options.fft_length, ks1, ks2) + self.ofdm_corr = gr.ofdm_correlator(options.occupied_tones, options.fft_length, 0, ks1, ks2) + self.ofdm_framer = gr.ofdm_frame_sink(self._rcvd_pktq, options.occupied_tones) + + if 0: # set to 1 to put the correlator in the path to take over the signalling + self.connect((self.ofdm_mapper, 0), (self.ofdm_corr, 0)) + self.connect((self.ofdm_corr, 0), (self.ofdm_framer, 0)) + self.connect((self.ofdm_corr, 1), (self.ofdm_framer, 1)) + + self.connect((self.ofdm_mapper,0), gr.file_sink(gr.sizeof_gr_complex*options.fft_length, "ofdm_mapper.dat")) + self.connect((self.ofdm_corr,0), gr.file_sink(gr.sizeof_gr_complex*options.occupied_tones, "ofdm_corr.dat")) + self.connect((self.ofdm_corr,1), gr.file_sink(gr.sizeof_char, "ofdm_sig.dat")) + + else: + self.connect((self.ofdm_mapper, 0), (self.ofdm_framer, 0)) + self.connect((self.ofdm_mapper, 1), (self.ofdm_framer, 1)) + + self.connect((self.ofdm_mapper,0), gr.file_sink(gr.sizeof_gr_complex*options.fft_length, "ofdm_mapper.dat")) + self.connect((self.ofdm_mapper,1), gr.file_sink(gr.sizeof_char, "ofdm_sig.dat")) + + self._watcher = _queue_watcher_thread(self._rcvd_pktq, callback) + + def send_pkt(self, payload='', eof=False): + if eof: + msg = gr.message(1) + else: + pkt = ofdm_packet_utils.make_packet(payload, 1, 1, False, whiten=False) + msg = gr.message_from_string(pkt) + self.ofdm_mapper.msgq().insert_tail(msg) + +class _queue_watcher_thread(_threading.Thread): + def __init__(self, rcvd_pktq, callback): + _threading.Thread.__init__(self) + self.setDaemon(1) + self.rcvd_pktq = rcvd_pktq + self.callback = callback + self.keep_running = True + self.start() + + def run(self): + while self.keep_running: + msg = self.rcvd_pktq.delete_head() + ok, payload = ofdm_packet_utils.unmake_packet(msg.to_string(), whiten=False) + if self.callback: + self.callback(ok, payload) + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +def main(): + ''' Use this program to tie the OFDM modulators straight into the frame sink, with or without + the correlator in between. This is for testing of the modulators and demodulators only without + receiver and sync functionality.''' + + global n_rcvd, n_right + + n_rcvd = 0 + n_right = 0 + + def send_pkt(payload='', eof=False): + return fg.send_pkt(payload, eof) + + def rx_callback(ok, payload): + global n_rcvd, n_right + n_rcvd += 1 + (pktno,) = struct.unpack('!H', payload[0:2]) + if ok: + n_right += 1 + print "ok: %r \t pktno: %d \t n_rcvd: %d \t n_right: %d" % (ok, pktno, n_rcvd, n_right) + + printlst = list() + for x in payload[2:]: + t = hex(ord(x)).replace('0x', '') + if(len(t) == 1): + t = '0' + t + printlst.append(t) + printable = ''.join(printlst) + + print printable + print "\n" + + parser = OptionParser(option_class=eng_option, conflict_handler="resolve") + expert = parser.add_option_group("Expert") + parser.add_option("-s", "--size", type="eng_float", default=1450, + help="set packet size [default=%default]") + parser.add_option("-M", "--megabytes", type="eng_float", default=1.0, + help="set megabytes to transmit [default=%default]") + expert.add_option("", "--fft-length", type="intx", default=512, + help="set the number of FFT bins [default=%default]") + expert.add_option("", "--occupied-tones", type="intx", default=200, + help="set the number of occupied FFT bins [default=%default]") + expert.add_option("", "--cp-length", type="intx", default=128, + help="set the number of bits in the cyclic prefix [default=%default]") + expert.add_option("", "--fft-length", type="intx", default=512, + help="set the number of FFT bins [default=%default]") + expert.add_option("", "--occupied-tones", type="intx", default=200, + help="set the number of occupied FFT bins [default=%default]") + expert.add_option("", "--cp-length", type="intx", default=128, + help="set the number of bits in the cyclic prefix [default=%default]") + + (options, args) = parser.parse_args () + + # build the graph + tb = my_top_block(rx_callback, options) + + tb.start() # start flow graph + + # generate and send packets + nbytes = int(1e6 * options.megabytes) + n = 0 + pktno = 0 + pkt_size = int(options.size) + + while n < nbytes: + #r = ''.join([chr(random.randint(0,255)) for i in range(pkt_size-2)]) + #pkt_contents = struct.pack('!H', pktno) + r + + pkt_contents = struct.pack('!H', pktno) + (pkt_size - 2) * chr(pktno & 0xff) + + send_pkt(pkt_contents) + n += pkt_size + pktno += 1 + + send_pkt(eof=True) + tb.wait() # wait for it to finish + +known_symbols_4512_1 = [-1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1] + +known_symbols_4512_2 = [1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, 1, 1, 1, -1, -1] + + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gnuradio-examples/python/ofdm/ofdm_sync.m b/gnuradio-examples/python/ofdm/ofdm_sync.m new file mode 100644 index 00000000..d5df4213 --- /dev/null +++ b/gnuradio-examples/python/ofdm/ofdm_sync.m @@ -0,0 +1,28 @@ +% + +function [theta, g, g1, k, h] = ofdm_sync(signal,SNR,FFTSIZE,CPLEN) + + rho = SNR/(SNR+1); + + d = abs(signal).^2; + g = [ zeros(1,FFTSIZE) signal(1:max(size(signal))-FFTSIZE) ]; + g1 = conj(g); + f = abs(g).^2; + c = d + f; + moving_sum_taps = rho/2 * ones(1,CPLEN); + b = conv(c,moving_sum_taps); + b = b(1:max(size(signal))); + %b = b(CPLEN:max(size(b))); + + k = g1 .* signal; + + moving_sum_taps2 = ones(1, CPLEN); + h = conv(k,moving_sum_taps2); + h = h(1:max(size(signal))); + %h = h(CPLEN:max(size(h))); + + a = abs(h); + + theta = a-b; + +endfunction diff --git a/gnuradio-examples/python/ofdm/ofdm_sync_pn.m b/gnuradio-examples/python/ofdm/ofdm_sync_pn.m new file mode 100644 index 00000000..d93c0ca9 --- /dev/null +++ b/gnuradio-examples/python/ofdm/ofdm_sync_pn.m @@ -0,0 +1,21 @@ +mf = read_float_binary('ofdm_sync_pn-mf_f.dat'); +theta_pn = read_float_binary('ofdm_sync_pn-theta_f.dat'); +peaks_pn = read_char_binary('ofdm_sync_pn-peaks_b.dat'); +regen_pn = read_char_binary('ofdm_sync_pn-regen_b.dat'); +angle_pn = read_float_binary('ofdm_sync_pn-epsilon_f.dat'); + +plot(mf, 'k') +hold +plot(theta_pn, 'g'); +plot(peaks_pn, 'r'); +plot(regen_pn, 'b'); +xlim([100, 50000]); +ylim([0, 1]) +i = find(peaks_pn); +i(100:200) +hold off + +ipeaks = find(peaks_pn); +dpeaks = diff(ipeaks); +hist(dpeaks, 30) +set(gca, 'FontSize', 30, 'FontWeight', 'Bold'); diff --git a/gnuradio-examples/python/ofdm/pick_bitrate.py b/gnuradio-examples/python/ofdm/pick_bitrate.py new file mode 100644 index 00000000..82a47688 --- /dev/null +++ b/gnuradio-examples/python/ofdm/pick_bitrate.py @@ -0,0 +1,143 @@ +# +# Copyright 2005,2006 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. +# + +_default_bitrate = 500e3 + +_valid_samples_per_symbol = (2,3,4,5,6,7) + +def _gen_tx_info(converter_rate): + results = [] + for samples_per_symbol in _valid_samples_per_symbol: + for interp in range(16, 512 + 1, 4): + bitrate = converter_rate / interp / samples_per_symbol + results.append((bitrate, samples_per_symbol, interp)) + results.sort() + return results + +def _gen_rx_info(converter_rate): + results = [] + for samples_per_symbol in _valid_samples_per_symbol: + for decim in range(8, 256 + 1, 2): + bitrate = converter_rate / decim / samples_per_symbol + results.append((bitrate, samples_per_symbol, decim)) + results.sort() + return results + +def _filter_info(info, samples_per_symbol, xrate): + if samples_per_symbol is not None: + info = [x for x in info if x[1] == samples_per_symbol] + if xrate is not None: + info = [x for x in info if x[2] == xrate] + return info + +def _pick_best(target_bitrate, bits_per_symbol, info): + """ + @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate) + """ + if len(info) == 0: + raise RuntimeError, "info is zero length!" + + if target_bitrate is None: # return the fastest one + return info[-1] + + # convert bit rate to symbol rate + target_symbolrate = target_bitrate / bits_per_symbol + + # Find the closest matching symbol rate. + # In the event of a tie, the one with the lowest samples_per_symbol wins. + # (We already sorted them, so the first one is the one we take) + + best = info[0] + best_delta = abs(target_symbolrate - best[0]) + for x in info[1:]: + delta = abs(target_symbolrate - x[0]) + if delta < best_delta: + best_delta = delta + best = x + + # convert symbol rate back to bit rate + return ((best[0] * bits_per_symbol),) + best[1:] + +def _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, + xrate, converter_rate, gen_info): + """ + @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate) + """ + if not isinstance(bits_per_symbol, int) or bits_per_symbol < 1: + raise ValueError, "bits_per_symbol must be an int >= 1" + + if samples_per_symbol is not None and xrate is not None: # completely determined + return (float(converter_rate) / xrate / samples_per_symbol, + samples_per_symbol, xrate) + + if bitrate is None and samples_per_symbol is None and xrate is None: + bitrate = _default_bitrate + + # now we have a target bitrate and possibly an xrate or + # samples_per_symbol constraint, but not both of them. + + return _pick_best(bitrate, bits_per_symbol, + _filter_info(gen_info(converter_rate), samples_per_symbol, xrate)) + +# --------------------------------------------------------------------------------------- + +def pick_tx_bitrate(bitrate, bits_per_symbol, samples_per_symbol, + interp_rate, converter_rate=128e6): + """ + Given the 4 input parameters, return at configuration that matches + + @param bitrate: desired bitrate or None + @type bitrate: number or None + @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3 + @type bits_per_symbol: integer >= 1 + @param samples_per_symbol: samples/baud (aka samples/symbol) + @type samples_per_symbol: number or None + @param interp_rate: USRP interpolation factor + @type interp_rate: integer or None + @param converter_rate: converter sample rate in Hz + @type converter_rate: number + + @returns tuple (bitrate, samples_per_symbol, interp_rate) + """ + return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, + interp_rate, converter_rate, _gen_tx_info) + + +def pick_rx_bitrate(bitrate, bits_per_symbol, samples_per_symbol, + decim_rate, converter_rate=64e6): + """ + Given the 4 input parameters, return at configuration that matches + + @param bitrate: desired bitrate or None + @type bitrate: number or None + @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3 + @type bits_per_symbol: integer >= 1 + @param samples_per_symbol: samples/baud (aka samples/symbol) + @type samples_per_symbol: number or None + @param decim_rate: USRP decimation factor + @type decim_rate: integer or None + @param converter_rate: converter sample rate in Hz + @type converter_rate: number + + @returns tuple (bitrate, samples_per_symbol, decim_rate) + """ + return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol, + decim_rate, converter_rate, _gen_rx_info) diff --git a/gnuradio-examples/python/ofdm/plot_ofdm.m b/gnuradio-examples/python/ofdm/plot_ofdm.m new file mode 100755 index 00000000..2a649b5f --- /dev/null +++ b/gnuradio-examples/python/ofdm/plot_ofdm.m @@ -0,0 +1,74 @@ +function plot_ofdm(fft_size, occ_tones) + +ofdm = read_complex_binary('ofdm_frame_acq_c.dat'); +ofdm_split = split_vect(ofdm, occ_tones); + +ofdm_derot = read_complex_binary('ofdm_frame_sink_c.dat'); +ofdm_derot_split = split_vect(ofdm_derot, occ_tones); + +fftc = read_complex_binary('fft_out_c.dat'); +fftc_split = split_vect(fftc, fft_size); + +size(ofdm_split) +size(ofdm_derot_split) +disp "DEROTATED SPLIT" +ofdm_derot(1:100) + + +figure(1) +#set(gcf, 'Position', [50 50 1000 600]); + +a = size(ofdm_split); +if nargin == 3 + maxcount = count; + if maxcount > a(1) + error('plot_ofdm:tolong', 'Requested count size exceeds size of vectors'); + end +else + maxcount = a(1); +end + +for i = 1:size(ofdm_split)[0] + x = ofdm_split(i,:); + y = fftc_split(i+1,:); + + subplot(2,2,1); + plot(real(x), imag(x), 'bo'); + #set(gca, 'FontSize', 30, 'FontWeight', 'Bold'); + axis([-1.5, 1.5, -1.5, 1.5]) + #title('I&Q Constellation', 'FontSize', 36); + #xlabel('Inphase', 'FontSize', 32); + #ylabel('Quadrature', 'FontSize', 32); + + subplot(2,2,3); + plot(angle(x*j), 'bo'); + #set(gca, 'FontSize', 30, 'FontWeight', 'Bold'); + axis([0, occ_tones, -3.5, 3.5]) + #title('Equalized Symbol Angle', 'FontSize', 36); + #xlabel('Bin Number (Occ. Tones)', 'FontSize', 32); + #ylabel('Symbol Angle', 'FontSize', 32); + + subplot(2,2,2); + plot(angle(y*j), 'bo'); + #set(gca, 'FontSize', 30, 'FontWeight', 'Bold'); + axis([0, fft_size, -3.5, 3.5]) + #title('Unequalized Symbol Angle', 'FontSize', 36); + #xlabel('Bin Number (FFT Size)', 'FontSize', 32); + #ylabel('Symbol Angle', 'FontSize', 32); + + Y = 20*log10(abs(y) ./ max(abs(y))); + subplot(2,2,4); + plot(Y, 'b-'); + #set(gca, 'FontSize', 30, 'FontWeight', 'Bold'); + axis([0, fft_size, -50, 1]); + #title('Frequency Domain of Unequalized Rx', 'FontSize', 36); + #xlabel('Bin Number (FFT Size)', 'FontSize', 32); + #ylabel('Power (dB)', 'FontSize', 32); + + #N = 20*log10(var(abs(x)-1)); + + disp(sprintf('Symbol Number: %d\n', i)) + #disp(sprintf('\tFreq Error: %f\n', anglesh_pn(1+(i-1)*fft_size))) + pause + +end diff --git a/gnuradio-examples/python/ofdm/receive_path.py b/gnuradio-examples/python/ofdm/receive_path.py new file mode 100644 index 00000000..b758bc4d --- /dev/null +++ b/gnuradio-examples/python/ofdm/receive_path.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006 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 import gr, gru, blks2 +from gnuradio import usrp +from gnuradio import eng_notation +import copy +import sys + +# from current dir +from pick_bitrate import pick_rx_bitrate + +# ///////////////////////////////////////////////////////////////////////////// +# receive path +# ///////////////////////////////////////////////////////////////////////////// + +class receive_path(gr.hier_block2): + def __init__(self, rx_callback, options): + + gr.hier_block2.__init__(self, "receive_path", + gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + + + options = copy.copy(options) # make a copy so we can destructively modify + + self._verbose = options.verbose + self._log = options.log + self._rx_callback = rx_callback # this callback is fired when there's a packet available + + # receiver + self.ofdm_rx = \ + blks2.ofdm_demod(options, callback=self._rx_callback) + + # Carrier Sensing Blocks + alpha = 0.001 + thresh = 30 # in dB, will have to adjust + self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha) + + self.connect(self, self.ofdm_rx) + self.connect(self.ofdm_rx, self.probe) + + # Display some information about the setup + if self._verbose: + self._print_verbage() + + def carrier_sensed(self): + """ + Return True if we think carrier is present. + """ + #return self.probe.level() > X + return self.probe.unmuted() + + def carrier_threshold(self): + """ + Return current setting in dB. + """ + return self.probe.threshold() + + def set_carrier_threshold(self, threshold_in_db): + """ + Set carrier threshold. + + @param threshold_in_db: set detection threshold + @type threshold_in_db: float (dB) + """ + self.probe.set_threshold(threshold_in_db) + + + def add_options(normal, expert): + """ + Adds receiver-specific options to the Options Parser + """ + normal.add_option("-v", "--verbose", action="store_true", default=False) + expert.add_option("", "--log", action="store_true", default=False, + help="Log all parts of flow graph to files (CAUTION: lots of data)") + + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + + def _print_verbage(self): + """ + Prints information about the receive path + """ + pass diff --git a/gnuradio-examples/python/ofdm/transmit_path.py b/gnuradio-examples/python/ofdm/transmit_path.py new file mode 100644 index 00000000..44c7331b --- /dev/null +++ b/gnuradio-examples/python/ofdm/transmit_path.py @@ -0,0 +1,93 @@ +# +# Copyright 2005,2006 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 import gr, gru, blks2 +from gnuradio import usrp +from gnuradio import eng_notation + +import copy +import sys + +# ///////////////////////////////////////////////////////////////////////////// +# transmit path +# ///////////////////////////////////////////////////////////////////////////// + +class transmit_path(gr.hier_block2): + def __init__(self, options): + ''' + See below for what options should hold + ''' + + gr.hier_block2.__init__(self, "transmit_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + options = copy.copy(options) # make a copy so we can destructively modify + + self._verbose = options.verbose # turn verbose mode on/off + self._tx_amplitude = options.tx_amplitude # digital amplitude sent to USRP + + self.ofdm_tx = \ + blks2.ofdm_mod(options, msgq_limit=4, pad_for_usrp=False) + + self.amp = gr.multiply_const_cc(1) + self.set_tx_amplitude(self._tx_amplitude) + + # Display some information about the setup + if self._verbose: + self._print_verbage() + + # Create and setup transmit path flow graph + self.connect(self.ofdm_tx, self.amp, self) + + def set_tx_amplitude(self, ampl): + """ + Sets the transmit amplitude sent to the USRP + @param: ampl 0 <= ampl < 32768. Try 8000 + """ + self._tx_amplitude = max(0.0, min(ampl, 32767.0)) + self.amp.set_k(self._tx_amplitude) + + def send_pkt(self, payload='', eof=False): + """ + Calls the transmitter method to send a packet + """ + return self.ofdm_tx.send_pkt(payload, eof) + + def add_options(normal, expert): + """ + Adds transmitter-specific options to the Options Parser + """ + normal.add_option("", "--tx-amplitude", type="eng_float", default=200, metavar="AMPL", + help="set transmitter digital amplitude: 0 <= AMPL < 32768 [default=%default]") + normal.add_option("-v", "--verbose", action="store_true", default=False) + expert.add_option("", "--log", action="store_true", default=False, + help="Log all parts of flow graph to file (CAUTION: lots of data)") + + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + def _print_verbage(self): + """ + Prints information about the transmit path + """ + print "Tx amplitude %s" % (self._tx_amplitude) + diff --git a/gnuradio-examples/python/ofdm/tunnel.py b/gnuradio-examples/python/ofdm/tunnel.py new file mode 100755 index 00000000..7e75c3ee --- /dev/null +++ b/gnuradio-examples/python/ofdm/tunnel.py @@ -0,0 +1,435 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006 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 2, 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. +# + + +# ///////////////////////////////////////////////////////////////////////////// +# +# This code sets up up a virtual ethernet interface (typically gr0), +# and relays packets between the interface and the GNU Radio PHY+MAC +# +# What this means in plain language, is that if you've got a couple +# of USRPs on different machines, and if you run this code on those +# machines, you can talk between them using normal TCP/IP networking. +# +# ///////////////////////////////////////////////////////////////////////////// + + +from gnuradio import gr, gru, blks2 +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +import random +import time +import struct +import sys +import os + +# from current dir +from transmit_path import transmit_path +from receive_path import receive_path +import fusb_options + +#print os.getpid() +#raw_input('Attach and press enter') + + +# ///////////////////////////////////////////////////////////////////////////// +# +# Use the Universal TUN/TAP device driver to move packets to/from kernel +# +# See /usr/src/linux/Documentation/networking/tuntap.txt +# +# ///////////////////////////////////////////////////////////////////////////// + +# Linux specific... +# TUNSETIFF ifr flags from + +IFF_TUN = 0x0001 # tunnel IP packets +IFF_TAP = 0x0002 # tunnel ethernet frames +IFF_NO_PI = 0x1000 # don't pass extra packet info +IFF_ONE_QUEUE = 0x2000 # beats me ;) + +def open_tun_interface(tun_device_filename): + from fcntl import ioctl + + mode = IFF_TAP | IFF_NO_PI + TUNSETIFF = 0x400454ca + + tun = os.open(tun_device_filename, os.O_RDWR) + ifs = ioctl(tun, TUNSETIFF, struct.pack("16sH", "gr%d", mode)) + ifname = ifs[:16].strip("\x00") + return (tun, ifname) + + +# ///////////////////////////////////////////////////////////////////////////// +# the flow graph +# ///////////////////////////////////////////////////////////////////////////// + +class usrp_graph(gr.top_block): + def __init__(self, callback, options): + gr.top_block.__init__(self) + + self._tx_freq = options.tx_freq # tranmitter's center frequency + self._tx_subdev_spec = options.tx_subdev_spec # daughterboard to use + self._interp = options.interp # interpolating rate for the USRP (prelim) + self._rx_freq = options.rx_freq # receiver's center frequency + self._rx_gain = options.rx_gain # receiver's gain + self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use + self._decim = options.decim # Decimating rate for the USRP (prelim) + self._fusb_block_size = options.fusb_block_size # usb info for USRP + self._fusb_nblocks = options.fusb_nblocks # usb info for USRP + + if self._tx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n") + raise SystemExit + + if self._rx_freq is None: + sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n") + raise SystemExit + + # Set up USRP sink and source + self._setup_usrp_sink() + self._setup_usrp_source() + + # Set center frequency of USRP + ok = self.set_freq(self._tx_freq) + if not ok: + print "Failed to set Tx frequency to %s" % (eng_notation.num_to_str(self._tx_freq),) + raise ValueError + + # copy the final answers back into options for use by modulator + #options.bitrate = self._bitrate + + self.txpath = transmit_path(options) + self.rxpath = receive_path(callback, options) + + self.connect(self.txpath, self.u_snk) + self.connect(self.u_src, self.rxpath) + + def carrier_sensed(self): + """ + Return True if the receive path thinks there's carrier + """ + return self.rxpath.carrier_sensed() + + def _setup_usrp_sink(self): + """ + Creates a USRP sink, determines the settings for best bitrate, + and attaches to the transmitter's subdevice. + """ + self.u_snk = usrp.sink_c(fusb_block_size=self._fusb_block_size, + fusb_nblocks=self._fusb_nblocks) + + self.u_snk.set_interp_rate(self._interp) + + # determine the daughterboard subdevice we're using + if self._tx_subdev_spec is None: + self._tx_subdev_spec = usrp.pick_tx_subdevice(self.u_snk) + self.u_snk.set_mux(usrp.determine_tx_mux_value(self.u_snk, self._tx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u_snk, self._tx_subdev_spec) + + # Set the USRP for maximum transmit gain + # (Note that on the RFX cards this is a nop.) + self.set_gain(self.subdev.gain_range()[1]) + + # enable Auto Transmit/Receive switching + self.set_auto_tr(True) + + def _setup_usrp_source(self): + self.u_src = usrp.source_c (fusb_block_size=self._fusb_block_size, + fusb_nblocks=self._fusb_nblocks) + adc_rate = self.u_src.adc_rate() + + self.u_src.set_decim_rate(self._decim) + + # determine the daughterboard subdevice we're using + if self._rx_subdev_spec is None: + self._rx_subdev_spec = usrp.pick_rx_subdevice(self.u_src) + self.subdev = usrp.selected_subdev(self.u_src, self._rx_subdev_spec) + + self.u_src.set_mux(usrp.determine_rx_mux_value(self.u_src, self._rx_subdev_spec)) + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital up converter. + """ + r_snk = self.u_snk.tune(self.subdev.which(), self.subdev, target_freq) + r_src = self.u_src.tune(self.subdev.which(), self.subdev, target_freq) + if r_snk and r_src: + return True + + return False + + def set_gain(self, gain): + """ + Sets the analog gain in the USRP + """ + self.gain = gain + self.subdev.set_gain(gain) + + def set_auto_tr(self, enable): + """ + Turns on auto transmit/receive of USRP daughterboard (if exits; else ignored) + """ + return self.subdev.set_auto_tr(enable) + + def interp(self): + return self._interp + + def add_options(normal, expert): + """ + Adds usrp-specific options to the Options Parser + """ + add_freq_option(normal) + normal.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, + help="select USRP Tx side A or B") + normal.add_option("-v", "--verbose", action="store_true", default=False) + + expert.add_option("", "--tx-freq", type="eng_float", default=None, + help="set transmit frequency to FREQ [default=%default]", metavar="FREQ") + expert.add_option("-i", "--interp", type="intx", default=256, + help="set fpga interpolation rate to INTERP [default=%default]") + normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B") + normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN", + help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range") + normal.add_option("", "--show-rx-gain-range", action="store_true", default=False, + help="print min and max Rx gain available on selected daughterboard") + normal.add_option("-v", "--verbose", action="store_true", default=False) + + expert.add_option("", "--rx-freq", type="eng_float", default=None, + help="set Rx frequency to FREQ [default=%default]", metavar="FREQ") + expert.add_option("-d", "--decim", type="intx", default=128, + help="set fpga decimation rate to DECIM [default=%default]") + expert.add_option("", "--snr", type="eng_float", default=30, + help="set the SNR of the channel in dB [default=%default]") + + # Make a static method to call before instantiation + add_options = staticmethod(add_options) + + def _print_verbage(self): + """ + Prints information about the transmit path + """ + print "Using TX d'board %s" % (self.subdev.side_and_name(),) + print "modulation: %s" % (self._modulator_class.__name__) + print "interp: %3d" % (self._interp) + print "Tx Frequency: %s" % (eng_notation.num_to_str(self._tx_freq)) + +def add_freq_option(parser): + """ + Hackery that has the -f / --freq option set both tx_freq and rx_freq + """ + def freq_callback(option, opt_str, value, parser): + parser.values.rx_freq = value + parser.values.tx_freq = value + + if not parser.has_option('--freq'): + parser.add_option('-f', '--freq', type="eng_float", + action="callback", callback=freq_callback, + help="set Tx and/or Rx frequency to FREQ [default=%default]", + metavar="FREQ") + + +# ///////////////////////////////////////////////////////////////////////////// +# Carrier Sense MAC +# ///////////////////////////////////////////////////////////////////////////// + +class cs_mac(object): + """ + Prototype carrier sense MAC + + Reads packets from the TUN/TAP interface, and sends them to the PHY. + Receives packets from the PHY via phy_rx_callback, and sends them + into the TUN/TAP interface. + + Of course, we're not restricted to getting packets via TUN/TAP, this + is just an example. + """ + def __init__(self, tun_fd, verbose=False): + self.tun_fd = tun_fd # file descriptor for TUN/TAP interface + self.verbose = verbose + self.tb = None # top block (access to PHY) + + def set_flow_graph(self, tb): + self.tb = tb + + def phy_rx_callback(self, ok, payload): + """ + Invoked by thread associated with PHY to pass received packet up. + + @param ok: bool indicating whether payload CRC was OK + @param payload: contents of the packet (string) + """ + if self.verbose: + print "Rx: ok = %r len(payload) = %4d" % (ok, len(payload)) + if ok: + os.write(self.tun_fd, payload) + + def main_loop(self): + """ + Main loop for MAC. + Only returns if we get an error reading from TUN. + + FIXME: may want to check for EINTR and EAGAIN and reissue read + """ + min_delay = 0.001 # seconds + + while 1: + payload = os.read(self.tun_fd, 10*1024) + if not payload: + self.tb.txpath.send_pkt(eof=True) + break + + if self.verbose: + print "Tx: len(payload) = %4d" % (len(payload),) + + delay = min_delay + while self.tb.carrier_sensed(): + sys.stderr.write('B') + time.sleep(delay) + if delay < 0.050: + delay = delay * 2 # exponential back-off + + self.tb.txpath.send_pkt(payload) + + +# ///////////////////////////////////////////////////////////////////////////// +# main +# ///////////////////////////////////////////////////////////////////////////// + +def main(): + + parser = OptionParser (option_class=eng_option, conflict_handler="resolve") + expert_grp = parser.add_option_group("Expert") + + parser.add_option("-m", "--modulation", type="choice", choices=['bpsk', 'qpsk'], + default='bpsk', + help="Select modulation from: bpsk, qpsk [default=%%default]") + + parser.add_option("-v","--verbose", action="store_true", default=False) + expert_grp.add_option("-c", "--carrier-threshold", type="eng_float", default=30, + help="set carrier detect threshold (dB) [default=%default]") + expert_grp.add_option("","--tun-device-filename", default="/dev/net/tun", + help="path to tun device file [default=%default]") + + usrp_graph.add_options(parser, expert_grp) + transmit_path.add_options(parser, expert_grp) + receive_path.add_options(parser, expert_grp) + blks2.ofdm_mod.add_options(parser, expert_grp) + blks2.ofdm_demod.add_options(parser, expert_grp) + + fusb_options.add_options(expert_grp) + + (options, args) = parser.parse_args () + if len(args) != 0: + parser.print_help(sys.stderr) + sys.exit(1) + + if options.rx_freq is None or options.tx_freq is None: + sys.stderr.write("You must specify -f FREQ or --freq FREQ\n") + parser.print_help(sys.stderr) + sys.exit(1) + + # open the TUN/TAP interface + (tun_fd, tun_ifname) = open_tun_interface(options.tun_device_filename) + + # Attempt to enable realtime scheduling + r = gr.enable_realtime_scheduling() + if r == gr.RT_OK: + realtime = True + else: + realtime = False + print "Note: failed to enable realtime scheduling" + + + # If the user hasn't set the fusb_* parameters on the command line, + # pick some values that will reduce latency. + + if options.fusb_block_size == 0 and options.fusb_nblocks == 0: + if realtime: # be more aggressive + options.fusb_block_size = gr.prefs().get_long('fusb', 'rt_block_size', 1024) + options.fusb_nblocks = gr.prefs().get_long('fusb', 'rt_nblocks', 16) + else: + options.fusb_block_size = gr.prefs().get_long('fusb', 'block_size', 4096) + options.fusb_nblocks = gr.prefs().get_long('fusb', 'nblocks', 16) + + #print "fusb_block_size =", options.fusb_block_size + #print "fusb_nblocks =", options.fusb_nblocks + + # instantiate the MAC + mac = cs_mac(tun_fd, verbose=True) + + + # build the graph (PHY) + tb = usrp_graph(mac.phy_rx_callback, options) + + mac.set_flow_graph(tb) # give the MAC a handle for the PHY + + #if fg.txpath.bitrate() != fg.rxpath.bitrate(): + # print "WARNING: Transmit bitrate = %sb/sec, Receive bitrate = %sb/sec" % ( + # eng_notation.num_to_str(fg.txpath.bitrate()), + # eng_notation.num_to_str(fg.rxpath.bitrate())) + + print "modulation: %s" % (options.modulation,) + print "freq: %s" % (eng_notation.num_to_str(options.tx_freq)) + #print "bitrate: %sb/sec" % (eng_notation.num_to_str(fg.txpath.bitrate()),) + #print "samples/symbol: %3d" % (fg.txpath.samples_per_symbol(),) + #print "interp: %3d" % (fg.txpath.interp(),) + #print "decim: %3d" % (fg.rxpath.decim(),) + + tb.rxpath.set_carrier_threshold(options.carrier_threshold) + print "Carrier sense threshold:", options.carrier_threshold, "dB" + + print + print "Allocated virtual ethernet interface: %s" % (tun_ifname,) + print "You must now use ifconfig to set its IP address. E.g.," + print + print " $ sudo ifconfig %s 192.168.200.1" % (tun_ifname,) + print + print "Be sure to use a different address in the same subnet for each machine." + print + + + tb.start() # Start executing the flow graph (runs in separate threads) + + mac.main_loop() # don't expect this to return... + + tb.stop() # but if it does, tell flow graph to stop. + tb.wait() # wait for it to finish + + +if __name__ == '__main__': + try: + main() + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/usrp/Makefile.am b/gnuradio-examples/python/usrp/Makefile.am index 5814e3f9..0ede005a 100644 --- a/gnuradio-examples/python/usrp/Makefile.am +++ b/gnuradio-examples/python/usrp/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,35 +19,28 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = \ - am_rcv.py \ - ayfabtu.py \ - benchmark_usb.py \ - flexrf_debug.py \ - flexrf_siggen.py \ - fm_tx_2_daughterboards.py \ - fm_tx4.py \ - max_power.py \ - siggen_min2.py \ - test_counting.py \ - test_dft_analysis.py \ - test_dft_synth.py \ - test_digital_loopback_counting.py \ - test_digital_loopback_lfsr.py \ - tvrx_am_rcv_gui.py \ - usrp_fft_old.py \ - usrp_fft.py \ - usrp_nbfm_ptt.py \ - usrp_nbfm_rcv.py \ - usrp_oscope.py \ - usrp_rx_cfile.py \ - usrp_rx_nogui.py \ - usrp_siggen.py \ - usrp_tv_rcv_nogui.py \ - usrp_tv_rcv.py \ - usrp_wfm_rcv2_nogui.py \ - usrp_wfm_rcv_nogui.py \ - usrp_wfm_rcv_pll.py \ - usrp_wfm_rcv.py \ - usrp_wxapt_rcv.py \ - wfm_rcv_file.py +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/usrp + +dist_ourdata_SCRIPTS = \ + fm_tx_2_daughterboards.py \ + fm_tx4.py \ + max_power.py \ + test_dft_analysis.py \ + test_dft_synth.py \ + usrp_benchmark_usb.py \ + usrp_nbfm_ptt.py \ + usrp_nbfm_rcv.py \ + usrp_spectrum_sense.py \ + usrp_test_loop_lfsr.py \ + usrp_tv_rcv_nogui.py \ + usrp_tv_rcv.py \ + usrp_wfm_rcv.py \ + usrp_wfm_rcv_nogui.py \ + usrp_wfm_rcv_fmdet.py \ + usrp_wfm_rcv_pll.py \ + usrp_wfm_rcv_sca.py \ + usrp_wfm_rcv2_nogui.py \ + usrp_wxapt_rcv.py \ + usrp_am_mw_rcv.py diff --git a/gnuradio-examples/python/usrp/Makefile.in b/gnuradio-examples/python/usrp/Makefile.in index a99f13d8..f215d2b8 100644 --- a/gnuradio-examples/python/usrp/Makefile.in +++ b/gnuradio-examples/python/usrp/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,34 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -57,28 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gnuradio-examples/python/usrp -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -108,16 +158,18 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +177,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +194,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +208,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +277,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +367,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +528,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,54 +564,164 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = \ - am_rcv.py \ - ayfabtu.py \ - benchmark_usb.py \ - flexrf_debug.py \ - flexrf_siggen.py \ - fm_tx_2_daughterboards.py \ - fm_tx4.py \ - max_power.py \ - siggen_min2.py \ - test_counting.py \ - test_dft_analysis.py \ - test_dft_synth.py \ - test_digital_loopback_counting.py \ - test_digital_loopback_lfsr.py \ - tvrx_am_rcv_gui.py \ - usrp_fft_old.py \ - usrp_fft.py \ - usrp_nbfm_ptt.py \ - usrp_nbfm_rcv.py \ - usrp_oscope.py \ - usrp_rx_cfile.py \ - usrp_rx_nogui.py \ - usrp_siggen.py \ - usrp_tv_rcv_nogui.py \ - usrp_tv_rcv.py \ - usrp_wfm_rcv2_nogui.py \ - usrp_wfm_rcv_nogui.py \ - usrp_wfm_rcv_pll.py \ - usrp_wfm_rcv.py \ - usrp_wxapt_rcv.py \ - wfm_rcv_file.py +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/usrp +dist_ourdata_SCRIPTS = \ + fm_tx_2_daughterboards.py \ + fm_tx4.py \ + max_power.py \ + test_dft_analysis.py \ + test_dft_synth.py \ + usrp_benchmark_usb.py \ + usrp_nbfm_ptt.py \ + usrp_nbfm_rcv.py \ + usrp_spectrum_sense.py \ + usrp_test_loop_lfsr.py \ + usrp_tv_rcv_nogui.py \ + usrp_tv_rcv.py \ + usrp_wfm_rcv.py \ + usrp_wfm_rcv_nogui.py \ + usrp_wfm_rcv_fmdet.py \ + usrp_wfm_rcv_pll.py \ + usrp_wfm_rcv_sca.py \ + usrp_wfm_rcv2_nogui.py \ + usrp_wxapt_rcv.py \ + usrp_am_mw_rcv.py all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -380,16 +745,31 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -398,22 +778,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -424,10 +803,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(SCRIPTS) installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -443,6 +828,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -458,7 +844,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -470,14 +856,22 @@ info: info-am info-am: -install-data-am: +install-data-am: install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -496,18 +890,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gnuradio-examples/python/usrp/am_rcv.py b/gnuradio-examples/python/usrp/am_rcv.py deleted file mode 100755 index 2908dcbf..00000000 --- a/gnuradio-examples/python/usrp/am_rcv.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, eng_notation -from gnuradio import audio -from gnuradio import usrp -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys -import math - -from gnuradio.wxgui import stdgui, fftsink -import wx - -class am_rx_graph (stdgui.gui_flow_graph): - def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) - - station = parseargs(argv[1:]) - offset_freq = 30e3 - IF_freq = offset_freq - station - - adc_rate = 64e6 - usrp_decim = 250 - if_rate = adc_rate / usrp_decim # 256 kHz - if_decim = 4 - demod_rate = if_rate / if_decim # 64 kHz - audio_decimation = 2 - audio_rate = demod_rate / audio_decimation # 16 kHz - - # usrp is data source - src = usrp.source_c (0, usrp_decim) - src.set_rx_freq (0, IF_freq) - actual_IF_freq =src.rx_freq(0) - actual_offset = actual_IF_freq + station - - #print actual_IF_freq - #print actual_offset - - src.set_pga(0,20) - # sound card as final sink - audio_sink = audio.sink (int (audio_rate)) - - channel_coeffs = \ - gr.firdes.low_pass (1.0, # gain - if_rate, # sampling rate - 9e3, # low pass cutoff freq - 10e3, # width of trans. band - gr.firdes.WIN_HANN) - - ddc = gr.freq_xlating_fir_filter_ccf (if_decim,channel_coeffs,-actual_offset,if_rate) - - magblock = gr.complex_to_mag() - volumecontrol = gr.multiply_const_ff(.003) - - # Deemphasis. Is this necessary on AM? - TAU = 75e-6 # 75us in US, 50us in EUR - fftaps = [ 1 - math.exp(-1/TAU/if_rate), 0] - fbtaps= [ 0 , math.exp(-1/TAU/if_rate) ] - - deemph = gr.iir_filter_ffd(fftaps,fbtaps) - - # compute FIR filter taps for audio filter - width_of_transition_band = audio_rate / 8 - audio_coeffs = gr.firdes.low_pass (1.0, # gain - if_rate, # sampling rate - 9e3, #audio_rate/2 - width_of_transition_band, - 4e3, # width_of_transition_band, - gr.firdes.WIN_HANN) - - # input: float; output: float - audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) - - - - - print len(channel_coeffs) - print len(audio_coeffs) - - # now wire it all together - self.connect (src, ddc) - self.connect (ddc, magblock) - self.connect (magblock, volumecontrol) - self.connect (volumecontrol,deemph) - self.connect (deemph,audio_filter) - self.connect (audio_filter, (audio_sink, 0)) - - if 1: - pre_demod = fftsink.fft_sink_c (self, panel, title="Pre-Demodulation", fft_size=128, sample_rate=if_rate) - self.connect (src, pre_demod) - vbox.Add (pre_demod.win, 1, wx.EXPAND) - - if 0: - post_demod = fftsink.fft_sink_c (self, panel, title="Post Demodulation", fft_size=256, sample_rate=demod_rate) - self.connect (ddc, post_demod) - vbox.Add (post_demod.win, 1, wx.EXPAND) - - if 0: - post_filt = fftsink.fft_sink_f (self, panel, title="Post Filter", fft_size=512, sample_rate=audio_rate) - self.connect (magblock,post_filt) - vbox.Add (post_filt.win, 1, wx.EXPAND) - -def parseargs (args): - nargs = len (args) - if nargs == 1: - freq1 = float (args[0]) * 1e3 - else: - sys.stderr.write ('usage: am_rcv freq1\n') - sys.exit (1) - - return freq1 - -if __name__ == '__main__': - app = stdgui.stdapp (am_rx_graph, "AM RX") - app.MainLoop () - diff --git a/gnuradio-examples/python/usrp/ayfabtu.py b/gnuradio-examples/python/usrp/ayfabtu.py deleted file mode 100755 index de6c26f5..00000000 --- a/gnuradio-examples/python/usrp/ayfabtu.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005 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. -# - -# -# All Your Frequencies are Belong to Us! -# -# Transmit NBFM message on 25 channels simultaneously! -# - -from gnuradio import gr, gru, eng_notation -from gnuradio import usrp -from gnuradio import audio -from gnuradio import blks -from gnuradio import optfir -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import math -import sys -import random - -from gnuradio.wxgui import stdgui, fftsink -import wx - - -def make_random_complex_tuple(L): - result = [] - for x in range(L): - result.append(complex(random.gauss(0, 1),random.gauss(0, 1))) - - return tuple(result) - -def random_noise_c(): - src = gr.vector_source_c(make_random_complex_tuple(32*1024), True) - return src - - -def plot_taps(taps, sample_rate=2): - return gru.gnuplot_freqz (gru.freqz (taps, 1), sample_rate) - - -class ayfabtu_graph (stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - parser = OptionParser (option_class=eng_option) - parser.add_option ("-c", "--duc-freq", type="eng_float", default=29.325e6, - help="set Tx ddc frequency to FREQ", metavar="FREQ") - (options, args) = parser.parse_args () - - nchan = 25 - IF_GAIN = 80000 - AUDIO_GAIN = 100 - - self.dac_rate = 128e6 - self.usrp_interp = 256 - self.usrp_rate = self.dac_rate / self.usrp_interp # 500 kS/s - self.audio_rate = 32000 # 32 kS/s - - self.audio_src = gr.file_source(gr.sizeof_float, "ayfabtu.dat", True) - - ahp_taps = gr.firdes.high_pass(1, # gain - 32e3, # Fs - 300, # cutoff - 600, # trans width - gr.firdes.WIN_HANN) - self.audio_hp = gr.fir_filter_fff(1, ahp_taps) - - self.audio_gain = gr.multiply_const_ff(AUDIO_GAIN) - - null_src = gr.null_source(gr.sizeof_gr_complex) - #noise_src = gr.noise_source_c(gr.GR_UNIFORM, 1, 0) - noise_src = random_noise_c() - - if 0: - artaps = optfir.low_pass(1, # gain - 2, # Fs - .75/32, # freq1 - 1.0/32, # freq2 - 1, # pb ripple in dB - 50, # stopband atten in dB - 2) # + extra taps - else: - artaps = gr.firdes.low_pass(1, # gain - 32e3*15,# Fs - 2.7e3, # cutoff - .3e3, # trans width - gr.firdes.WIN_HANN) - print "len(artaps) =", len(artaps) - self.audio_resampler = blks.rational_resampler_fff(self, 15, 32, artaps) - - self.fm_mod = blks.nbfm_tx(self, 15000, 15000, max_dev=4.5e3) - - - fbtaps = gr.firdes.low_pass(1, # gain - 25*15e3, # rate - 13e3, # cutoff - 2e3, # trans width - gr.firdes.WIN_HANN) - print "len(fbtabs) =", len(fbtaps) - #self.plot = plot_taps(fbtaps, 25*15e3) - self.filter_bank = blks.synthesis_filterbank(self, nchan, fbtaps) - - self.if_gain = gr.multiply_const_cc(IF_GAIN) - - if 0: - ifrtaps = optfir.low_pass(1, - 2, # Fs - .75/3, # freq1 - 1.0/3, # freq2 - 1, # pb ripple in dB - 50, # stopband atten in dB - 2) # + extra taps - else: - ifrtaps = gr.firdes.low_pass(1, - 2, # Fs - .75/3, # freq1 - .25/3, # trans width - gr.firdes.WIN_HANN) - - - print "len(ifrtaps) =", len(ifrtaps) - self.if_resampler = blks.rational_resampler_ccf(self, 4, 3, ifrtaps) - - - self.u = usrp.sink_c(0, 256) - self.u.set_tx_freq(0, options.duc_freq) - self.u.set_pga(0, self.u.pga_max()) - - # wire it all together - - self.connect(self.audio_src, self.audio_hp, self.audio_gain, - self.audio_resampler, self.fm_mod) - - null_sink = gr.null_sink(gr.sizeof_gr_complex) - - for i in range(nchan): - if True or i == 0: - self.connect(self.fm_mod, (self.filter_bank, i)) - else: - self.connect(null_src, (self.filter_bank, i)) - - self.connect(self.filter_bank, self.if_gain, self.if_resampler, self.u) - - -def main (): - app = stdgui.stdapp (ayfabtu_graph, "All Your Frequency Are Belong to Us") - app.MainLoop () - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/benchmark_usb.py b/gnuradio-examples/python/usrp/benchmark_usb.py deleted file mode 100755 index fc01514a..00000000 --- a/gnuradio-examples/python/usrp/benchmark_usb.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2005 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. -# - -""" -Benchmark the USB/USRP throughput. Finds the maximum full-duplex speed -the USRP/USB combination can sustain without errors. - -This program does not currently give reliable results. Sorry about that... -""" - -from gnuradio import gr -from gnuradio import usrp -from gnuradio import eng_notation - -import sys - -def run_test (usb_throughput, verbose): - # usb_throughput is in bytes/sec. - # - # Returns True or False - - nsec = 1 - stream_length = int (usb_throughput/2 * nsec) # length of stream to examine - - adc_freq = 64e6 - dac_freq = 128e6 - sizeof_sample = 2 * gr.sizeof_short - - usb_throughput_in_samples = usb_throughput / sizeof_sample - - # allocate usb throughput 50/50 between Tx and Rx - - tx_interp = int (dac_freq) / int (usb_throughput_in_samples / 2) - rx_decim = int (adc_freq) / int (usb_throughput_in_samples / 2) - - # print "tx_interp =", tx_interp, "rx_decim =", rx_decim - assert (tx_interp == 2 * rx_decim) - - fg = gr.flow_graph () - - # Build the Tx pipeline - data_src = gr.lfsr_32k_source_s () - src_head = gr.head (gr.sizeof_short, int (stream_length * 2)) - usrp_tx = usrp.sink_s (0, tx_interp) - fg.connect (data_src, src_head, usrp_tx) - - # and the Rx pipeline - usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK) - head = gr.head (gr.sizeof_short, stream_length) - check = gr.check_lfsr_32k_s () - fg.connect (usrp_rx, head, check) - - fg.run () - - ntotal = check.ntotal () - nright = check.nright () - runlength = check.runlength () - - if verbose: - print "usb_throughput =", eng_notation.num_to_str (usb_throughput) - print "ntotal =", ntotal - print "nright =", nright - print "runlength =", runlength - print "delta =", ntotal - runlength - - return runlength >= stream_length - 80000 - -def main (): - verbose = True - best_rate = 0 - usb_rate = [ 2e6, 4e6, 8e6, 16e6, 32e6 ] - #usb_rate = [ 32e6, 32e6, 32e6, 32e6, 32e6 ] - # usb_rate.reverse () - for rate in usb_rate: - sys.stdout.write ("Testing %sB/sec... " % (eng_notation.num_to_str (rate))) - sys.stdout.flush () - ok = run_test (rate, verbose) - if ok: - best_rate = max (best_rate, rate) - sys.stdout.write ("OK\n") - else: - sys.stdout.write ("FAILED\n") - - print "Max USB/USRP throughput = %sB/sec" % (eng_notation.num_to_str (best_rate),) - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/flexrf_debug.py b/gnuradio-examples/python/usrp/flexrf_debug.py deleted file mode 100755 index 13d1db11..00000000 --- a/gnuradio-examples/python/usrp/flexrf_debug.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env python -# -# 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 import gr, gru -from gnuradio import usrp -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, fftsink, scopesink, slider -from optparse import OptionParser -import wx - -class app_flow_graph (stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - self.frame = frame - self.panel = panel - - parser = OptionParser (option_class=eng_option) - parser.add_option ("-d", "--decim", type="int", default=8, - help="set fgpa decimation rate to DECIM") - parser.add_option ("-c", "--ddc-freq", type="eng_float", default=0, - help="set Digital downconverter frequency to FREQ", metavar="FREQ") - parser.add_option ("-f", "--freq", type="eng_float", default=950e6, - help="set RF downconverter frequency to FREQ", metavar="FREQ") - parser.add_option ("-m", "--mux", type="intx", default=0x32103210, - help="set fpga FR_RX_MUX register to MUX") - parser.add_option ("-g", "--gain", type="eng_float", default=0, - help="set Rx PGA gain in dB (default 0 dB)") - (options, args) = parser.parse_args () - - self.u = usrp.source_c (0, options.decim, 1, gru.hexint(options.mux), 0) - - self.u.set_verbose (0) - - input_rate = self.u.adc_freq () / self.u.decim_rate () - - block = fftsink.fft_sink_c (self, panel, fft_size=1024, sample_rate=input_rate) - self.connect (self.u, block) - vbox.Add (block.win, 10, wx.EXPAND) - - if 0: - c2f_1 = gr.complex_to_float () - scope = scopesink.scope_sink_f (self, panel, "Rx Data", input_rate) - vbox.Add (scope.win, 6, wx.EXPAND) - - self.connect (self.u,c2f_1) - self.connect ((c2f_1, 0), (scope, 0)) - self.connect ((c2f_1, 1), (scope, 1)) - - if 0: - rms_complex = gr.rms_cf(.0001) - rms_i = gr.rms_ff(.0001) - rms_q = gr.rms_ff(.0001) - - self.connect(self.u,rms_complex) - self.connect((c2f_1,0),rms_i) - self.connect((c2f_1,1),rms_q) - - ns1 = gr.null_sink(4) - ns2 = gr.null_sink(4) - ns3 = gr.null_sink(4) - - self.connect(rms_complex,ns1) - self.connect(rms_i,ns2) - self.connect(rms_q,ns3) - - # sliders - - #vbox.Add(slider.slider(panel, 0, 104, self.set_gain), 1, wx.ALIGN_CENTER) - - #vbox.Add(slider.slider(panel, 0, 4095, self.set_gain_gc1), 1, wx.ALIGN_CENTER) - #vbox.Add(slider.slider(panel, 0, 31, self.set_gain_gc2), 1, wx.ALIGN_CENTER) - #vbox.Add(slider.slider(panel, 0, 1, self.set_gain_dl), 1, wx.ALIGN_CENTER) - #vbox.Add(slider.slider(panel, 0, 200, self.set_gain_i), 1, wx.ALIGN_CENTER) - #vbox.Add(slider.slider(panel, 0, 200, self.set_gain_q), 1, wx.ALIGN_CENTER) - - self.offset = 0 - #vbox.Add(slider.slider(panel, -200, 200, self.set_offset_i), 1, wx.ALIGN_CENTER) - #vbox.Add(slider.slider(panel, -200, 200, self.set_offset_q), 1, wx.ALIGN_CENTER) - - vbox.Add(slider.slider(panel, 380, 480, self.set_rf_freq), 1, wx.EXPAND|wx.ALIGN_CENTER) - vbox.Add(slider.slider(panel, -32000, +32000, self.set_if_freq), 1, wx.EXPAND|wx.ALIGN_CENTER) - vbox.Add(slider.slider(panel, 0, 4095, self.set_gain), 1, wx.EXPAND|wx.ALIGN_CENTER) - - # build small control area at bottom - hbox = wx.BoxSizer (wx.HORIZONTAL) - hbox.Add ((1, 1), 1, wx.EXPAND) - hbox.Add (wx.StaticText (panel, -1, "Set ddc freq: "), 0, wx.ALIGN_CENTER) - self.tc_freq = wx.TextCtrl (panel, -1, "", style=wx.TE_PROCESS_ENTER) - hbox.Add (self.tc_freq, 0, wx.ALIGN_CENTER) - wx.EVT_TEXT_ENTER (self.tc_freq, self.tc_freq.GetId(), self.handle_text_enter) - hbox.Add ((1, 1), 1, wx.EXPAND) - # add it to the main vbox - vbox.Add (hbox, 0, wx.EXPAND) - - self.update_status_bar () - - def set_rf_freq (self,freq): - (success,actual_freq) = self.set_freq(1e6*freq) - if not success: - print "Failed on ",freq - def set_if_freq (self,freq): - self.u.set_rx_freq(0,freq*1e3) - - def set_gain (self,gain): - self.rfrx.set_gain(gain) - - def set_gain_i (self,gain): - self.u.set_pga(0,gain/10.0) - def set_gain_q (self,gain): - self.u.set_pga(1,gain/10.0) - - def set_offset_i(self,offset): - self.offset = (self.offset & 0x0000ffff) | ((offset&0xffff)<<16) - self.u._write_fpga_reg (3,self.offset) - - def set_offset_q(self,offset): - self.offset = (self.offset & 0xffff0000) | (offset&0xffff) - self.u._write_fpga_reg (3,self.offset) - - def handle_text_enter (self, event): - str = event.GetString () - self.tc_freq.Clear () - self.u.set_rx_freq (0, eng_notation.str_to_num (str)) - self.update_status_bar () - - def update_status_bar (self): - ddc_freq = self.u.rx_freq (0) - decim_rate = self.u.decim_rate () - sample_rate = self.u.adc_freq () / decim_rate - msg = "decim: %d %sS/s DDC: %s" % ( - decim_rate, - eng_notation.num_to_str (sample_rate), - eng_notation.num_to_str (ddc_freq)) - - self.frame.GetStatusBar().SetStatusText (msg, 1) - - def set_gain(self,gain): - assert gain>=0 and gain<4096 - self.u.write_aux_dac(0,0,int(gain)) - -def main (): - app = stdgui.stdapp (app_flow_graph, "USRP FFT") - app.MainLoop () - -if __name__ == '__main__': - main () - - diff --git a/gnuradio-examples/python/usrp/flexrf_siggen.py b/gnuradio-examples/python/usrp/flexrf_siggen.py deleted file mode 100755 index 6a59148b..00000000 --- a/gnuradio-examples/python/usrp/flexrf_siggen.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gru -from gnuradio import usrp -from gnuradio.eng_option import eng_option -from optparse import OptionParser -from gnuradio.wxgui import stdgui, slider -import wx - -class flex_siggen (stdgui.gui_flow_graph): - __slots__ = ['interp', 'waveform_type', 'waveform_ampl', - 'waveform_freq', 'waveform_offset', 'fg', 'usrp', - 'siggen', 'noisegen', 'src', 'file_sink' ] - - def __init__ (self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - self.frame = frame - self.panel = panel - - parser = OptionParser (option_class=eng_option) - parser.add_option ("-a", "--amplitude", type="int", default=32000, - help="amplitude") - parser.add_option ("-i", "--interp", type="int", default=64, - help="set fpga interpolation rate to INTERP") - parser.add_option ("-n", "--nchannels", type="int", default=1, - help="set number of output channels to NCHANNELS") - (options, args) = parser.parse_args () - - self.waveform_type = gr.GR_CONST_WAVE - self.waveform_ampl = options.amplitude - self.waveform_freq = 100.12345e3 - self.waveform_offset = 0 - - self.interp = options.interp - self._instantiate_blocks () - self.usrp.set_nchannels (options.nchannels) - - self.dboard=self.usrp.db[0][0] - - self.set_waveform_type (self.waveform_type) - vbox.Add(slider.slider(panel, 390, 510, self.set_rf_freq), 1, wx.EXPAND|wx.ALIGN_CENTER) - vbox.Add(slider.slider(panel, -45000, +45000, self.set_if_freq), 1, wx.EXPAND|wx.ALIGN_CENTER) - #vbox.Add(slider.slider(panel, 0, 4095, self.set_gain), 1, wx.EXPAND|wx.ALIGN_CENTER) - - def usb_freq (self): - return self.usrp.dac_freq() / self.interp - - def usb_throughput (self): - return self.usb_freq () * 4 - - def set_waveform_type (self, type): - ''' - valid waveform types are: gr.GR_SIN_WAVE, gr.GR_CONST_WAVE, - gr.GR_UNIFORM and gr.GR_GAUSSIAN - ''' - self._configure_graph (type) - self.waveform_type = type - - def set_waveform_ampl (self, ampl): - self.waveform_ampl = ampl - self.siggen.set_amplitude (ampl) - self.noisegen.set_amplitude (ampl) - - def set_waveform_freq (self, freq): - self.waveform_freq = freq - self.siggen.set_frequency (freq) - - def set_if_freq (self, freq): - self.if_freq = freq - self.usrp.set_tx_freq (0,freq*1e3) - - def set_rf_freq (self, freq): - self.rf_freq = freq - (success,actual_freq) = self.dboard.set_freq (freq*1e6) - if not success: - print "Failed on ", freq - - def set_waveform_offset (self, offset): - self.waveform_offset = offset - self.siggen.set_offset (offset) - - def set_interpolator (self, interp): - self.interp = interp - self.siggen.set_sampling_freq (self.usb_freq ()) - self.usrp.set_interp_rate (interp) - - def set_duc_freq (self, freq): - self.usrp.set_tx_freq (0, freq) - - def _instantiate_blocks (self): - self.src = None - self.usrp = usrp.sink_c (0, self.interp) - - self.siggen = gr.sig_source_c (self.usb_freq (), - gr.GR_SIN_WAVE, - self.waveform_freq, - self.waveform_ampl, - self.waveform_offset) - - self.noisegen = gr.noise_source_c (gr.GR_UNIFORM, - self.waveform_ampl) - print "done" - - def _configure_graph (self, type): - was_running = self.is_running () - if was_running: - self.stop () - self.disconnect_all () - if type == gr.GR_SIN_WAVE or type == gr.GR_CONST_WAVE: - self.connect (self.siggen, self.usrp) - self.siggen.set_waveform (type) - self.src = self.siggen - elif type == gr.GR_UNIFORM or type == gr.GR_GAUSSIAN: - self.connect (self.noisegen, self.usrp) - self.noisegen.set_type (type) - self.src = self.noisegen - else: - raise ValueError, type - if was_running: - self.start () - - -if __name__ == '__main__': - parser = OptionParser (option_class=eng_option) - parser.add_option ("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE, - help="generate a complex sinusoid [default]", default=gr.GR_SIN_WAVE) - parser.add_option ("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE, - help="generate a constant output") - parser.add_option ("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN, - help="generate Gaussian random output") - parser.add_option ("--uniform", dest="type", action="store_const", const=gr.GR_UNIFORM, - help="generate Uniform random output") - parser.add_option ("-f", "--freq", type="eng_float", default=100e3, - help="set waveform frequency to FREQ") - parser.add_option ("-r", "--rf-freq", type="eng_float", default=910e6, - help="set waveform frequency to FREQ") - parser.add_option ("-a", "--amplitude", type="eng_float", default=16e3, - help="set waveform amplitude to AMPLITUDE", metavar="AMPL") - parser.add_option ("-o", "--offset", type="eng_float", default=0, - help="set waveform offset to OFFSET") - parser.add_option ("-c", "--duc-freq", type="eng_float", default=0, - help="set Tx DUC frequency to FREQ", metavar="FREQ") - parser.add_option ("-m", "--mux", type="intx", default=0x98, - help="set output mux register") - - app = stdgui.stdapp (flex_siggen, "USRP FlexRF Siggen") - app.MainLoop () diff --git a/gnuradio-examples/python/usrp/fm_tx4.py b/gnuradio-examples/python/usrp/fm_tx4.py index a9201b3f..a51668dd 100755 --- a/gnuradio-examples/python/usrp/fm_tx4.py +++ b/gnuradio-examples/python/usrp/fm_tx4.py @@ -1,4 +1,24 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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. +# """ Transmit N simultaneous narrow band FM signals. @@ -15,27 +35,30 @@ audio_to_file.py from gnuradio import gr, eng_notation from gnuradio import usrp from gnuradio import audio -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import math import sys -from gnuradio.wxgui import stdgui, fftsink -from gnuradio import tx_debug_gui +from gnuradio.wxgui import stdgui2, fftsink2 +#from gnuradio import tx_debug_gui import wx ######################################################## # instantiate one transmit chain for each call -class pipeline(gr.hier_block): - def __init__(self, fg, filename, lo_freq, audio_rate, if_rate): +class pipeline(gr.hier_block2): + def __init__(self, filename, lo_freq, audio_rate, if_rate): + + gr.hier_block2.__init__(self, "pipeline", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature src = gr.file_source (gr.sizeof_float, filename, True) - fmtx = blks.nbfm_tx (fg, audio_rate, if_rate, - max_dev=5e3, tau=75e-6) + fmtx = blks2.nbfm_tx (audio_rate, if_rate, max_dev=5e3, tau=75e-6) # Local oscillator lo = gr.sig_source_c (if_rate, # sample rate @@ -45,17 +68,14 @@ class pipeline(gr.hier_block): 0) # DC Offset mixer = gr.multiply_cc () - fg.connect (src, fmtx, (mixer, 0)) - fg.connect (lo, (mixer, 1)) - - gr.hier_block.__init__(self, fg, src, mixer) - - + self.connect (src, fmtx, (mixer, 0)) + self.connect (lo, (mixer, 1)) + self.connect (mixer, self) -class fm_tx_graph (stdgui.gui_flow_graph): +class fm_tx_block(stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): MAX_CHANNELS = 7 - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) parser = OptionParser (option_class=eng_option) parser.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, @@ -64,8 +84,8 @@ class fm_tx_graph (stdgui.gui_flow_graph): help="set Tx frequency to FREQ [required]", metavar="FREQ") parser.add_option("-n", "--nchannels", type="int", default=4, help="number of Tx channels [1,4]") - parser.add_option("","--debug", action="store_true", default=False, - help="Launch Tx debugger") + #parser.add_option("","--debug", action="store_true", default=False, + # help="Launch Tx debugger") (options, args) = parser.parse_args () if len(args) != 0: @@ -104,7 +124,13 @@ class fm_tx_graph (stdgui.gui_flow_graph): print "Using TX d'board %s" % (self.subdev.side_and_name(),) self.subdev.set_gain(self.subdev.gain_range()[1]) # set max Tx gain - self.set_freq(options.freq) + if not self.set_freq(options.freq): + freq_range = self.subdev.freq_range() + print "Failed to set frequency to %s. Daughterboard supports %s to %s" % ( + eng_notation.num_to_str(options.freq), + eng_notation.num_to_str(freq_range[0]), + eng_notation.num_to_str(freq_range[1])) + raise SystemExit self.subdev.set_enable(True) # enable transmitter sum = gr.add_cc () @@ -113,9 +139,9 @@ class fm_tx_graph (stdgui.gui_flow_graph): step = 25e3 offset = (0 * step, 1 * step, -1 * step, 2 * step, -2 * step, 3 * step, -3 * step) for i in range (options.nchannels): - t = pipeline (self, "audio-%d.dat" % (i % 4), offset[i], - self.audio_rate, self.usrp_rate) - self.connect (t, (sum, i)) + t = pipeline("audio-%d.dat" % (i % 4), offset[i], + self.audio_rate, self.usrp_rate) + self.connect(t, (sum, i)) gain = gr.multiply_const_cc (4000.0 / options.nchannels) @@ -125,16 +151,16 @@ class fm_tx_graph (stdgui.gui_flow_graph): # plot an FFT to verify we are sending what we want if 1: - post_mod = fftsink.fft_sink_c(self, panel, title="Post Modulation", - fft_size=512, sample_rate=self.usrp_rate, - y_per_div=20, ref_level=40) + post_mod = fftsink2.fft_sink_c(panel, title="Post Modulation", + fft_size=512, sample_rate=self.usrp_rate, + y_per_div=20, ref_level=40) self.connect (sum, post_mod) vbox.Add (post_mod.win, 1, wx.EXPAND) - if options.debug: - self.debugger = tx_debug_gui.tx_debug_gui(self.subdev) - self.debugger.Show(True) + #if options.debug: + # self.debugger = tx_debug_gui.tx_debug_gui(self.subdev) + # self.debugger.Show(True) def set_freq(self, target_freq): @@ -151,7 +177,7 @@ class fm_tx_graph (stdgui.gui_flow_graph): any residual_freq to the s/w freq translater. """ - r = self.u.tune(self.subdev._which, self.subdev, target_freq) + r = self.u.tune(self.subdev.which(), self.subdev, target_freq) if r: print "r.baseband_freq =", eng_notation.num_to_str(r.baseband_freq) print "r.dxc_freq =", eng_notation.num_to_str(r.dxc_freq) @@ -164,7 +190,7 @@ class fm_tx_graph (stdgui.gui_flow_graph): return False def main (): - app = stdgui.stdapp (fm_tx_graph, "Multichannel FM Tx") + app = stdgui2.stdapp(fm_tx_block, "Multichannel FM Tx", nstatus=1) app.MainLoop () if __name__ == '__main__': diff --git a/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py b/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py index 1cb16101..15fdf283 100755 --- a/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py +++ b/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py @@ -1,4 +1,24 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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. +# """ Transmit 2 signals, one out each daughterboard. @@ -14,19 +34,22 @@ from gnuradio import gr from gnuradio.eng_notation import num_to_str, str_to_num from gnuradio import usrp from gnuradio import audio -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import math import sys -class example_signal_0(gr.hier_block): +class example_signal_0(gr.hier_block2): """ Sinusoid at 600 Hz. """ - def __init__(self, fg, sample_rate): + def __init__(self, sample_rate): + gr.hier_block2.__init__(self, "example_signal_0", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature src = gr.sig_source_c (sample_rate, # sample rate gr.GR_SIN_WAVE, # waveform type @@ -34,14 +57,17 @@ class example_signal_0(gr.hier_block): 1.0, # amplitude 0) # DC Offset - gr.hier_block.__init__(self, fg, None, src) + self.connect(src, self) -class example_signal_1(gr.hier_block): +class example_signal_1(gr.hier_block2): """ North American dial tone (350 + 440 Hz). """ - def __init__(self, fg, sample_rate): + def __init__(self, sample_rate): + gr.hier_block2.__init__(self, "example_signal_1", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature src0 = gr.sig_source_c (sample_rate, # sample rate gr.GR_SIN_WAVE, # waveform type @@ -55,17 +81,14 @@ class example_signal_1(gr.hier_block): 1.0, # amplitude 0) # DC Offset sum = gr.add_cc() - fg.connect(src0, (sum, 0)) - fg.connect(src1, (sum, 1)) - - gr.hier_block.__init__(self, fg, None, sum) - - + self.connect(src0, (sum, 0)) + self.connect(src1, (sum, 1)) + self.connect(sum, self) -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__ (self) + gr.top_block.__init__(self) usage="%prog: [options] side-A-tx-freq side-B-tx-freq" parser = OptionParser (option_class=eng_option, usage=usage) @@ -89,7 +112,7 @@ class my_graph(gr.flow_graph): self.usrp_rate = self.dac_rate / self.usrp_interp # 320 kS/s # we're using both daughterboard slots, thus subdev is a 2-tuple - self.subdev = (self.u.db[0][0], self.u.db[1][0]) + self.subdev = (self.u.db(0, 0), self.u.db(1, 0)) print "Using TX d'board %s" % (self.subdev[0].side_and_name(),) print "Using TX d'board %s" % (self.subdev[1].side_and_name(),) @@ -108,8 +131,8 @@ class my_graph(gr.flow_graph): # ---------------------------------------------------------------- # build two signal sources, interleave them, amplify and connect them to usrp - sig0 = example_signal_0(self, self.usrp_rate) - sig1 = example_signal_1(self, self.usrp_rate) + sig0 = example_signal_0(self.usrp_rate) + sig1 = example_signal_1(self.usrp_rate) intl = gr.interleave(gr.sizeof_gr_complex) self.connect(sig0, (intl, 0)) @@ -138,7 +161,7 @@ class my_graph(gr.flow_graph): """ print "Tuning side %s to %sHz" % (("A", "B")[side], num_to_str(target_freq)) - r = self.u.tune(self.subdev[side]._which, self.subdev[side], target_freq) + r = self.u.tune(self.subdev[side].which(), self.subdev[side], target_freq) if r: print " r.baseband_freq =", num_to_str(r.baseband_freq) print " r.dxc_freq =", num_to_str(r.dxc_freq) @@ -155,6 +178,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/usrp/max_power.py b/gnuradio-examples/python/usrp/max_power.py index 46df7254..91005e53 100755 --- a/gnuradio-examples/python/usrp/max_power.py +++ b/gnuradio-examples/python/usrp/max_power.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -30,12 +30,12 @@ from gnuradio import usrp from gnuradio.eng_option import eng_option from optparse import OptionParser -def ramp_source (fg): +def ramp_source (): period = 2**16 src = gr.vector_source_s (range (-period/2, period/2, 1), True) return src -def build_graph (tx_enable, rx_enable): +def build_block (tx_enable, rx_enable): max_usb_rate = 8e6 # 8 MS/sec dac_freq = 128e6 adc_freq = 64e6 @@ -48,23 +48,23 @@ def build_graph (tx_enable, rx_enable): rx_mux = 0x00003210 rx_decim = int ((adc_freq * rx_nchan) / (max_usb_rate/2)) # 32 - fg = gr.flow_graph () + tb = gr.top_block () if tx_enable: tx_src0 = gr.sig_source_c (dac_freq/tx_interp, gr.GR_CONST_WAVE, 0, 16e3, 0) usrp_tx = usrp.sink_c (0, tx_interp, tx_nchan, tx_mux) usrp_tx.set_tx_freq (0, 10e6) usrp_tx.set_tx_freq (1, 9e6) - fg.connect (tx_src0, usrp_tx) + tb.connect (tx_src0, usrp_tx) if rx_enable: usrp_rx = usrp.source_c (0, rx_decim, rx_nchan, rx_mux) usrp_rx.set_rx_freq (0, 5.5e6) usrp_rx.set_rx_freq (1, 6.5e6) rx_dst0 = gr.null_sink (gr.sizeof_gr_complex) - fg.connect (usrp_rx, rx_dst0) + tb.connect (usrp_rx, rx_dst0) - return fg + return tb def main (): parser = OptionParser (option_class=eng_option) @@ -73,11 +73,11 @@ def main (): parser.add_option ("-r", action="store_true", dest="rx_enable", default=False, help="enable Rx path") (options, args) = parser.parse_args () - fg = build_graph (options.tx_enable, options.rx_enable) + tb = build_block (options.tx_enable, options.rx_enable) - fg.start () + tb.start () raw_input ('Press Enter to quit: ') - fg.stop () + tb.stop () if __name__ == '__main__': main () diff --git a/gnuradio-examples/python/usrp/siggen_min2.py b/gnuradio-examples/python/usrp/siggen_min2.py deleted file mode 100755 index 8709e337..00000000 --- a/gnuradio-examples/python/usrp/siggen_min2.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import usrp -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from optparse import OptionParser - - - -def build_graph (): - - # interp = 32 - interp = 64 - nchan = 2 - - if nchan == 1: - mux = 0x0098 - #mux = 0x9800 - else: - mux = 0xba98 - - f0 = 100e3 - a0 = 16e3 - duc0 = 5e6 - - f1 = 50e3 - a1 = 16e3 - duc1 = 7e6 - - fg = gr.flow_graph () - - u = usrp.sink_c (0, interp, nchan, mux) - sample_rate = u.dac_freq () / interp - print "sample_rate = ", eng_notation.num_to_str (sample_rate) - print "usb_sample_rate = ", eng_notation.num_to_str (sample_rate * nchan) - - u.set_tx_freq (0, duc0) - u.set_tx_freq (1, duc1) - - interleave = gr.interleave (gr.sizeof_gr_complex) - fg.connect (interleave, u) - - src0 = gr.sig_source_c (sample_rate, gr.GR_SIN_WAVE, f0, a0, 0) - fg.connect (src0, (interleave, 0)) - - if nchan == 2: - if 1: - src1 = gr.sig_source_c (sample_rate, gr.GR_SIN_WAVE, f1, a1, 0) - else: - src1 = gr.noise_source_c (gr.GR_UNIFORM, a1) - fg.connect (src1, (interleave, 1)) - - return fg - - -if __name__ == '__main__': - fg = build_graph () - fg.start () - raw_input ('Press Enter to quit: ') - fg.stop () - diff --git a/gnuradio-examples/python/usrp/test_counting.py b/gnuradio-examples/python/usrp/test_counting.py deleted file mode 100755 index ccfa948c..00000000 --- a/gnuradio-examples/python/usrp/test_counting.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# - -""" -Check Rx path or USRP Rev 1. - -This configures the USRP to return a periodic sequence of integers -""" - -from gnuradio import gr -from gnuradio import usrp - -def build_graph (): - rx_decim = 32 - - fg = gr.flow_graph () - usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_COUNTING) - sink = gr.check_counting_s () - fg.connect (usrp_rx, sink) - - # file_sink = gr.file_sink (gr.sizeof_short, 'counting.dat') - # fg.connect (usrp_rx, file_sink) - - return fg - -def main (): - fg = build_graph () - try: - fg.run() - except KeyboardInterrupt: - pass - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/test_dft_analysis.py b/gnuradio-examples/python/usrp/test_dft_analysis.py index a1d9eda4..49db6bf2 100755 --- a/gnuradio-examples/python/usrp/test_dft_analysis.py +++ b/gnuradio-examples/python/usrp/test_dft_analysis.py @@ -1,14 +1,14 @@ #!/usr/bin/env python -from gnuradio import gr, gru, blks -from gnuradio.wxgui import stdgui, fftsink, slider +from gnuradio import gr, gru, blks2 +from gnuradio.wxgui import stdgui2, fftsink2, slider from gnuradio.eng_option import eng_option from optparse import OptionParser import wx -class test_graph (stdgui.gui_flow_graph): +class test_graph (stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self, frame, panel, vbox, argv) + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) parser = OptionParser (option_class=eng_option) (options, args) = parser.parse_args () @@ -46,13 +46,13 @@ class test_graph (stdgui.gui_flow_graph): 1.0/mpoints * 0.1, # trans width gr.firdes.WIN_HANN) print len(taps) - analysis = blks.analysis_filterbank(self, mpoints, taps) + analysis = blks2.analysis_filterbank(mpoints, taps) self.connect(mixer, thr) self.connect(thr, analysis) for i in range(mpoints): - fft = fftsink.fft_sink_c(self, frame, fft_size=128, + fft = fftsink2.fft_sink_c(frame, fft_size=128, sample_rate=sample_rate/mpoints, fft_rate=5, title="Ch %d" % (i,)) @@ -65,7 +65,7 @@ class test_graph (stdgui.gui_flow_graph): def main (): - app = stdgui.stdapp (test_graph, "Test DFT filterbank") + app = stdgui2.stdapp (test_graph, "Test DFT filterbank") app.MainLoop () if __name__ == '__main__': diff --git a/gnuradio-examples/python/usrp/test_dft_synth.py b/gnuradio-examples/python/usrp/test_dft_synth.py index 60a49e3b..99b1c492 100755 --- a/gnuradio-examples/python/usrp/test_dft_synth.py +++ b/gnuradio-examples/python/usrp/test_dft_synth.py @@ -1,7 +1,7 @@ #!/usr/bin/env python -from gnuradio import gr, gru, blks -from gnuradio.wxgui import stdgui, fftsink +from gnuradio import gr, gru, blks2 +from gnuradio.wxgui import stdgui2, fftsink2 from gnuradio.eng_option import eng_option from optparse import OptionParser import wx @@ -20,9 +20,9 @@ def random_noise_c(gain=1): return src -class test_graph (stdgui.gui_flow_graph): +class test_graph (stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self, frame, panel, vbox, argv) + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) parser = OptionParser (option_class=eng_option) (options, args) = parser.parse_args () @@ -31,7 +31,7 @@ class test_graph (stdgui.gui_flow_graph): mpoints = 16 ampl = 1000 - enable = mpoints * [0] + enable = mpoints/2 * [1, 0] enable[0] = 1 taps = gr.firdes.low_pass(1, # gain @@ -40,11 +40,11 @@ class test_graph (stdgui.gui_flow_graph): 1.0/mpoints * 0.1, # trans width gr.firdes.WIN_HANN) - synth = blks.synthesis_filterbank(self, mpoints, taps) + synth = blks2.synthesis_filterbank(mpoints, taps) null_source = gr.null_source(gr.sizeof_gr_complex) - if 0: + if 1: for i in range(mpoints): s = gr.sig_source_c(sample_rate/mpoints, gr.GR_SIN_WAVE, 300e3, ampl * enable[i], 0) @@ -52,10 +52,10 @@ class test_graph (stdgui.gui_flow_graph): else: for i in range(mpoints): - if i == 0: - s = gr.sig_source_c(sample_rate/mpoints, gr.GR_SIN_WAVE, - 300e3, ampl * enable[i], 0) - #s = random_noise_c(ampl) + if i == 1: + #s = gr.sig_source_c(sample_rate/mpoints, gr.GR_SIN_WAVE, + # 300e3, ampl * enable[i], 0) + s = random_noise_c(ampl) self.connect(s, (synth, i)) else: self.connect(null_source, (synth, i)) @@ -64,15 +64,14 @@ class test_graph (stdgui.gui_flow_graph): # We add these throttle blocks so that this demo doesn't # suck down all the CPU available. Normally you wouldn't use these. thr = gr.throttle(gr.sizeof_gr_complex, sample_rate) - fft = fftsink.fft_sink_c(self, frame, fft_size=1024, - sample_rate=sample_rate) + fft = fftsink2.fft_sink_c(frame, fft_size=1024,sample_rate=sample_rate) vbox.Add(fft.win, 1, wx.EXPAND) self.connect(synth, thr, fft) def main (): - app = stdgui.stdapp (test_graph, "Test DFT filterbank") + app = stdgui2.stdapp (test_graph, "Test DFT filterbank") app.MainLoop () if __name__ == '__main__': diff --git a/gnuradio-examples/python/usrp/test_digital_loopback_counting.py b/gnuradio-examples/python/usrp/test_digital_loopback_counting.py deleted file mode 100755 index 51a705a0..00000000 --- a/gnuradio-examples/python/usrp/test_digital_loopback_counting.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# - -""" -Digital loopback (Tx to Rx) for the USRP Rev1. -""" - - -from gnuradio import gr -from gnuradio import usrp - - -def ramp_source (fg): - period = 2**16 - src = gr.vector_source_s (range (-period/2, period/2, 1), True) - return src - -def build_graph (): - tx_interp = 32 # tx should be twice rx - rx_decim = 16 - - fg = gr.flow_graph () - - data_src = ramp_source (fg) - # usrp_tx = usrp.sink_s (0, tx_interp, 1, 0x98) - usrp_tx = usrp.sink_s (0, tx_interp) - fg.connect (data_src, usrp_tx) - - usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK) - sink = gr.check_counting_s () - fg.connect (usrp_rx, sink) - - # file_sink = gr.file_sink (gr.sizeof_short, "loopback.dat") - # fg.connect (usrp_rx, file_sink) - - return fg - -def main (): - fg = build_graph () - try: - fg.run() - except KeyboardInterrupt: - pass - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/test_digital_loopback_lfsr.py b/gnuradio-examples/python/usrp/test_digital_loopback_lfsr.py deleted file mode 100755 index 446ca30a..00000000 --- a/gnuradio-examples/python/usrp/test_digital_loopback_lfsr.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# - -""" -Digital loopback (Tx to Rx) for the USRP Rev1. -""" - -from gnuradio import gr -from gnuradio import usrp - - -def build_graph (): - tx_interp = 32 # tx should be twice rx - rx_decim = 16 - - fg = gr.flow_graph () - - data_src = gr.lfsr_32k_source_s () - - # usrp_tx = usrp.sink_s (0, tx_interp, 1, 0x98) - usrp_tx = usrp.sink_s (0, tx_interp) - - fg.connect (data_src, usrp_tx) - - usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK) - - sink = gr.check_lfsr_32k_s () - fg.connect (usrp_rx, sink) - - # file_sink = gr.file_sink (gr.sizeof_short, "loopback.dat") - # fg.connect (usrp_rx, file_sink) - - return fg - -def main (): - fg = build_graph () - try: - fg.run() - except KeyboardInterrupt: - pass - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/tvrx_am_rcv_gui.py b/gnuradio-examples/python/usrp/tvrx_am_rcv_gui.py deleted file mode 100755 index 403cf3fa..00000000 --- a/gnuradio-examples/python/usrp/tvrx_am_rcv_gui.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# -# -# Demodulate an AM signal from the TVRX or a recorded file. -# The file format must be 256 ksps, complex data. -# - -from gnuradio import gr, gru, eng_notation -from gnuradio import audio_oss as audio -from gnuradio import usrp -from gnuradio import tv_rx -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys -import math -from gnuradio.wxgui import stdgui, fftsink, scopesink -import wx - -# -# return a gr.flow_graph -# -class wfm_rx_graph (stdgui.gui_flow_graph): - def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) - - #set rf freq - rf_freq = 120.e6 - - # Decimation rate from USRP ADC to IF. - usrp_decim = 100 - - # Calculate the sampling rate of the USRP and capture file. - # Decimate the IF sampling rate down by 4 to 64 ksps - # This is a flow graph that has an input (capture file) and output (audio channel). - #self = gr.flow_graph () - - # Signal source is assumed to be 256 kspb / complex data stream. - which_side = 0 - # usrp is data source - if which_side == 0: - src = usrp.source_c (0, usrp_decim, 1, gru.hexint(0xf0f0f0f0), 0) - else: - src = usrp.source_c (0, usrp_decim, 1, gru.hexint(0xf0f0f0f2), 0) - - if_rate = 640e3 # src.adc_freq() / usrp_decim - if_decim = 5 - demod_rate = if_rate / if_decim - - audio_decimation = 4 - audio_rate = demod_rate / audio_decimation - - # set up frontend - dboard = tv_rx.tv_rx (src, which_side) - self.dboard = dboard - (success, actual_freq) = dboard.set_freq(rf_freq) - assert success - - if_freq = rf_freq - actual_freq - src.set_rx_freq (0, -if_freq) - - print "actual freq ", actual_freq - print "IF freq ", if_freq - - dboard.set_gain(50) - - #src = gr.file_source (gr.sizeof_gr_complex, "samples/atis_ffz_am_baseband_256k_complex.dat") - #src = gr.file_source (gr.sizeof_gr_complex, "samples/garagedoor1.dat", True) - - #channel_coeffs = gr.firdes.band_pass ( - # 1.0, # gain - # if_rate, - # 10, # center of low transition band - # 10000, # center of hi transition band - # 200, # width of transition band - # gr.firdes.WIN_HAMMING) - - channel_coeffs = gr.firdes.low_pass (1.0, if_rate, 10e3, 4e3, gr.firdes.WIN_HANN) - print "len(channel_coeffs) = ", len(channel_coeffs) - - # Tune to the desired frequency. - ddc = gr.freq_xlating_fir_filter_ccf (if_decim, channel_coeffs, -20e3, if_rate) - - # Demodule with classic sqrt (I*I + Q*Q) - magblock = gr.complex_to_mag() - - # Scale the audio - volumecontrol = gr.multiply_const_ff(.1) - - #band-pass - audio_coeffs = gr.firdes.band_pass ( - 1.0, # gain - demod_rate, - 10, # center of low transition band - 6000, # center of hi transition band - 200, # width of transition band - gr.firdes.WIN_HAMMING) - - - # Low pass filter the demodulator output - #audio_coeffs = gr.firdes.low_pass (1.0, demod_rate, 500, 200, gr.firdes.WIN_HANN) - print "len(audio_coeffs) = ", len(audio_coeffs) - - # input: float; output: float - audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) - - # sound card as final sink - audio_sink = audio.sink (int (audio_rate)) - - # now wire it all together - self.connect (src, ddc) - self.connect (ddc, magblock) - self.connect (magblock, volumecontrol) - self.connect (volumecontrol, audio_filter) - self.connect (audio_filter, (audio_sink, 0)) - - d_win = fftsink.fft_sink_c (self, panel, title="RF", fft_size=512, sample_rate=if_rate) - self.connect (src,d_win) - vbox.Add (d_win.win, 4, wx.EXPAND) - - p_win = fftsink.fft_sink_c (self, panel, title="IF", fft_size=512, sample_rate=demod_rate) - self.connect (ddc,p_win) - vbox.Add (p_win.win, 4, wx.EXPAND) - - r_win = fftsink.fft_sink_f (self, panel, title="Audio", fft_size=512, sample_rate=audio_rate) - self.connect (audio_filter,r_win) - vbox.Add (r_win.win, 4, wx.EXPAND) - - #audio_oscope = scopesink.scope_sink_f (self, panel, "Oscope Data", audio_rate) - #self.connect (audio_filter, audio_oscope) - #vbox.Add (audio_oscope.win, 4, wx.EXPAND) - -if __name__ == '__main__': - - app = stdgui.stdapp (wfm_rx_graph, "TVRX AM RX") - app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_am_mw_rcv.py b/gnuradio-examples/python/usrp/usrp_am_mw_rcv.py new file mode 100755 index 00000000..b1135598 --- /dev/null +++ b/gnuradio-examples/python/usrp/usrp_am_mw_rcv.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir +from gnuradio import audio +from gnuradio import usrp +from gnuradio import blks2 +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import slider, powermate +from gnuradio.wxgui import stdgui2, fftsink2, form +from optparse import OptionParser +from usrpm import usrp_dbid +import sys +import math +import wx + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + Try for one of these, in order: BASIC_RX,TV_RX, BASIC_RX, whatever is on side A. + + @return a subdev_spec + """ + return usrp.pick_subdev(u, (usrp_dbid.BASIC_RX, + usrp_dbid.LF_RX, + usrp_dbid.TV_RX, + usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3)) + + +class wfm_rx_block (stdgui2.std_top_block): + def __init__(self,frame,panel,vbox,argv): + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) + + parser=OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=A)") + parser.add_option("-f", "--freq", type="eng_float", default=1008.0e3, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-I", "--use-if-freq", action="store_true", default=False, + help="use intermediate freq (compensates DC problems in quadrature boards)" ) + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is maximum)") + parser.add_option("-V", "--volume", type="eng_float", default=None, + help="set volume (default is midpoint)") + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp") + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + self.frame = frame + self.panel = panel + self.use_IF=options.use_if_freq + if self.use_IF: + self.IF_freq=64000.0 + else: + self.IF_freq=0.0 + + self.vol = 0 + self.state = "FREQ" + self.freq = 0 + + # build graph + + #TODO: add an AGC after the channel filter and before the AM_demod + + self.u = usrp.source_c() # usrp is data source + + adc_rate = self.u.adc_rate() # 64 MS/s + usrp_decim = 250 + self.u.set_decim_rate(usrp_decim) + usrp_rate = adc_rate / usrp_decim # 256 kS/s + chanfilt_decim = 4 + demod_rate = usrp_rate / chanfilt_decim # 64 kHz + audio_decimation = 2 + audio_rate = demod_rate / audio_decimation # 32 kHz + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + print "Using RX d'board %s" % (self.subdev.side_and_name(),) + + + chan_filt_coeffs = optfir.low_pass (1, # gain + usrp_rate, # sampling rate + 8e3, # passband cutoff + 12e3, # stopband cutoff + 1.0, # passband ripple + 60) # stopband attenuation + #print len(chan_filt_coeffs) + self.chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + if self.use_IF: + # Turn If to baseband and filter. + self.chan_filt = gr.freq_xlating_fir_filter_ccf (chanfilt_decim, chan_filt_coeffs, self.IF_freq, usrp_rate) + else: + self.chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + self.am_demod = gr.complex_to_mag() + + self.volume_control = gr.multiply_const_ff(self.vol) + + audio_filt_coeffs = optfir.low_pass (1, # gain + demod_rate, # sampling rate + 8e3, # passband cutoff + 10e3, # stopband cutoff + 0.1, # passband ripple + 60) # stopband attenuation + self.audio_filt=gr.fir_filter_fff(audio_decimation,audio_filt_coeffs) + # sound card as final sink + audio_sink = audio.sink (int (audio_rate), + options.audio_output, + False) # ok_to_block + + # now wire it all together + self.connect (self.u, self.chan_filt, self.am_demod, self.audio_filt, self.volume_control, audio_sink) + + self._build_gui(vbox, usrp_rate, demod_rate, audio_rate) + + if options.gain is None: + g = self.subdev.gain_range() + if True: + # if no gain was specified, use the maximum gain available + # (usefull for Basic_RX which is relatively deaf and the most probable board to be used for AM) + # TODO: check db type to decide on default gain. + options.gain = float(g[1]) + else: + # if no gain was specified, use the mid-point in dB + options.gain = float(g[0]+g[1])/2 + + + if options.volume is None: + g = self.volume_range() + options.volume = float(g[0]*3+g[1])/4 + + if abs(options.freq) < 1e3: + options.freq *= 1e3 + + # set initial values + + self.set_gain(options.gain) + self.set_vol(options.volume) + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + + def _set_status_msg(self, msg, which=0): + self.frame.GetStatusBar().SetStatusText(msg, which) + + + def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + + if 1: + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP", + fft_size=512, sample_rate=usrp_rate, + ref_scale=32768.0, ref_level=0.0, y_divs=12) + self.connect (self.u, self.src_fft) + vbox.Add (self.src_fft.win, 4, wx.EXPAND) + + if 0: + self.post_filt_fft = fftsink2.fft_sink_c(self.panel, title="Post Channel filter", + fft_size=512, sample_rate=demod_rate) + self.connect (self.chan_filt, self.post_filt_fft) + vbox.Add (self.post_filt_fft.win, 4, wx.EXPAND) + + if 0: + post_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post Demod", + fft_size=1024, sample_rate=demod_rate, + y_per_div=10, ref_level=0) + self.connect (self.am_demod, post_demod_fft) + vbox.Add (post_demod_fft.win, 4, wx.EXPAND) + + if 1: + audio_fft = fftsink2.fft_sink_f(self.panel, title="Audio", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=20) + self.connect (self.audio_filt, audio_fft) + vbox.Add (audio_fft.win, 4, wx.EXPAND) + + + # control area form at bottom + self.myform = myform = form.form() + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0) + myform['freq_slider'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3, + range=(520.0e3, 1611.0e3, 1.0e3), + callback=self.set_freq) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['volume'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume", + weight=3, range=self.volume_range(), + callback=self.set_vol) + hbox.Add((5,0), 1) + + myform['gain'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, range=self.subdev.gain_range(), + callback=self.set_gain) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + try: + self.knob = powermate.powermate(self.frame) + self.rot = 0 + powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate) + powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button) + except: + print "FYI: No Powermate or Contour Knob found" + + + def on_rotate (self, event): + self.rot += event.delta + if (self.state == "FREQ"): + if self.rot >= 3: + self.set_freq(self.freq + .1e6) + self.rot -= 3 + elif self.rot <=-3: + self.set_freq(self.freq - .1e6) + self.rot += 3 + else: + step = self.volume_range()[2] + if self.rot >= 3: + self.set_vol(self.vol + step) + self.rot -= 3 + elif self.rot <=-3: + self.set_vol(self.vol - step) + self.rot += 3 + + def on_button (self, event): + if event.value == 0: # button up + return + self.rot = 0 + if self.state == "FREQ": + self.state = "VOL" + else: + self.state = "FREQ" + self.update_status_bar () + + + def set_vol (self, vol): + g = self.volume_range() + self.vol = max(g[0], min(g[1], vol)) + self.volume_control.set_k(10**(self.vol/10)) + self.myform['volume'].set_value(self.vol) + self.update_status_bar () + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = usrp.tune(self.u, 0, self.subdev, target_freq + self.IF_freq) + #TODO: check if db is inverting the spectrum or not to decide if we should do + self.IF_freq or - self.IF_freq + + if r: + self.freq = target_freq + self.myform['freq'].set_value(target_freq) # update displayed value + self.myform['freq_slider'].set_value(target_freq) # update displayed value + self.update_status_bar() + self._set_status_msg("OK", 0) + return True + + self._set_status_msg("Failed", 0) + return False + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev.set_gain(gain) + + def update_status_bar (self): + msg = "Volume:%r Setting:%s" % (self.vol, self.state) + self._set_status_msg(msg, 1) + try: + self.src_fft.set_baseband_freq(self.freq) + except: + None + + def volume_range(self): + return (-40.0, 0.0, 0.5) + + +if __name__ == '__main__': + app = stdgui2.stdapp (wfm_rx_block, "USRP Broadcast AM MW RX") + app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_benchmark_usb.py b/gnuradio-examples/python/usrp/usrp_benchmark_usb.py new file mode 100755 index 00000000..4ea84f76 --- /dev/null +++ b/gnuradio-examples/python/usrp/usrp_benchmark_usb.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005 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. +# + +""" +Benchmark the USB/USRP throughput. Finds the maximum full-duplex speed +the USRP/USB combination can sustain without errors. + +This program does not currently give reliable results. Sorry about that... +""" + +from gnuradio import gr +from gnuradio import usrp +from gnuradio import eng_notation + +import sys + +def run_test (usb_throughput, verbose): + # usb_throughput is in bytes/sec. + # + # Returns True or False + + nsec = 1 + stream_length = int (usb_throughput/2 * nsec) # length of stream to examine + + adc_freq = 64e6 + dac_freq = 128e6 + sizeof_sample = 2 * gr.sizeof_short + + usb_throughput_in_samples = usb_throughput / sizeof_sample + + # allocate usb throughput 50/50 between Tx and Rx + + tx_interp = int (dac_freq) / int (usb_throughput_in_samples / 2) + rx_decim = int (adc_freq) / int (usb_throughput_in_samples / 2) + + # print "tx_interp =", tx_interp, "rx_decim =", rx_decim + assert (tx_interp == 2 * rx_decim) + + tb = gr.top_block () + + # Build the Tx pipeline + data_src = gr.lfsr_32k_source_s () + src_head = gr.head (gr.sizeof_short, int (stream_length * 2)) + usrp_tx = usrp.sink_s (0, tx_interp) + tb.connect (data_src, src_head, usrp_tx) + + # and the Rx pipeline + usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK) + head = gr.head (gr.sizeof_short, stream_length) + check = gr.check_lfsr_32k_s () + tb.connect (usrp_rx, head, check) + + tb.run () + + ntotal = check.ntotal () + nright = check.nright () + runlength = check.runlength () + + if verbose: + print "usb_throughput =", eng_notation.num_to_str (usb_throughput) + print "ntotal =", ntotal + print "nright =", nright + print "runlength =", runlength + print "delta =", ntotal - runlength + + return runlength >= stream_length - 80000 + +def main (): + verbose = True + best_rate = 0 + usb_rate = [ 2e6, 4e6, 8e6, 16e6, 32e6 ] + #usb_rate = [ 32e6, 32e6, 32e6, 32e6, 32e6 ] + # usb_rate.reverse () + for rate in usb_rate: + sys.stdout.write ("Testing %sB/sec... " % (eng_notation.num_to_str (rate))) + sys.stdout.flush () + ok = run_test (rate, verbose) + if ok: + best_rate = max (best_rate, rate) + sys.stdout.write ("OK\n") + else: + sys.stdout.write ("FAILED\n") + + print "Max USB/USRP throughput = %sB/sec" % (eng_notation.num_to_str (best_rate),) + +if __name__ == '__main__': + main () diff --git a/gnuradio-examples/python/usrp/usrp_fft.py b/gnuradio-examples/python/usrp/usrp_fft.py deleted file mode 100755 index 88bafc2f..00000000 --- a/gnuradio-examples/python/usrp/usrp_fft.py +++ /dev/null @@ -1,251 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2005 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 import gr, gru -from gnuradio import usrp -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider -from optparse import OptionParser -import wx -import sys - - -def pick_subdevice(u): - """ - The user didn't specify a subdevice on the command line. - If there's a daughterboard on A, select A. - If there's a daughterboard on B, select B. - Otherwise, select A. - """ - if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem - return (0, 0) - if u.db[1][0].dbid() >= 0: - return (1, 0) - return (0, 0) - - -class app_flow_graph(stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) - - self.frame = frame - self.panel = panel - - parser = OptionParser(option_class=eng_option) - parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, - help="select USRP Rx side A or B (default=first one with a daughterboard)") - parser.add_option("-d", "--decim", type="int", default=16, - help="set fgpa decimation rate to DECIM [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option("-W", "--waterfall", action="store_true", default=False, - help="Enable waterfall display") - parser.add_option("-8", "--width-8", action="store_true", default=False, - help="Enable 8-bit samples across USB") - parser.add_option("-S", "--oscilloscope", action="store_true", default=False, - help="Enable oscilloscope display") - (options, args) = parser.parse_args() - if len(args) != 0: - parser.print_help() - sys.exit(1) - - self.show_debug_info = True - - # build the graph - - self.u = usrp.source_c(decim_rate=options.decim) - if options.rx_subdev_spec is None: - options.rx_subdev_spec = pick_subdevice(self.u) - self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) - - if options.width_8: - width = 8 - shift = 8 - format = self.u.make_format(width, shift) - print "format =", hex(format) - r = self.u.set_format(format) - print "set_format =", r - - # determine the daughterboard subdevice we're using - self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) - - input_rate = self.u.adc_freq() / self.u.decim_rate() - - if options.waterfall: - self.scope = \ - waterfallsink.waterfall_sink_c (self, panel, fft_size=1024, sample_rate=input_rate) - elif options.oscilloscope: - self.scope = scopesink.scope_sink_c(self, panel, sample_rate=input_rate) - else: - self.scope = fftsink.fft_sink_c (self, panel, fft_size=1024, sample_rate=input_rate) - - self.connect(self.u, self.scope) - - self._build_gui(vbox) - - # set initial values - - if options.gain is None: - # if no gain was specified, use the mid-point in dB - g = self.subdev.gain_range() - options.gain = float(g[0]+g[1])/2 - - if options.freq is None: - # if no freq was specified, use the mid-point - r = self.subdev.freq_range() - options.freq = float(r[0]+r[1])/2 - - self.set_gain(options.gain) - - if self.show_debug_info: - self.myform['decim'].set_value(self.u.decim_rate()) - self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) - self.myform['dbname'].set_value(self.subdev.name()) - self.myform['baseband'].set_value(0) - self.myform['ddc'].set_value(0) - - if not(self.set_freq(options.freq)): - self._set_status_msg("Failed to set initial frequency") - - def _set_status_msg(self, msg): - self.frame.GetStatusBar().SetStatusText(msg, 0) - - def _build_gui(self, vbox): - - def _form_set_freq(kv): - return self.set_freq(kv['freq']) - - vbox.Add(self.scope.win, 10, wx.EXPAND) - - # add control area at the bottom - self.myform = myform = form.form() - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((5,0), 0, 0) - myform['freq'] = form.float_field( - parent=self.panel, sizer=hbox, label="Center freq", weight=1, - callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) - - hbox.Add((5,0), 0, 0) - g = self.subdev.gain_range() - myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain", - weight=3, - min=int(g[0]), max=int(g[1]), - callback=self.set_gain) - - hbox.Add((5,0), 0, 0) - vbox.Add(hbox, 0, wx.EXPAND) - - self._build_subpanel(vbox) - - def _build_subpanel(self, vbox_arg): - # build a secondary information panel (sometimes hidden) - - # FIXME figure out how to have this be a subpanel that is always - # created, but has its visibility controlled by foo.Show(True/False) - - def _form_set_decim(kv): - return self.set_decim(kv['decim']) - - if not(self.show_debug_info): - return - - panel = self.panel - vbox = vbox_arg - myform = self.myform - - #panel = wx.Panel(self.panel, -1) - #vbox = wx.BoxSizer(wx.VERTICAL) - - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((5,0), 0) - - myform['decim'] = form.int_field( - parent=panel, sizer=hbox, label="Decim", - callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg)) - - hbox.Add((5,0), 1) - myform['fs@usb'] = form.static_float_field( - parent=panel, sizer=hbox, label="Fs@USB") - - hbox.Add((5,0), 1) - myform['dbname'] = form.static_text_field( - parent=panel, sizer=hbox) - - hbox.Add((5,0), 1) - myform['baseband'] = form.static_float_field( - parent=panel, sizer=hbox, label="Analog BB") - - hbox.Add((5,0), 1) - myform['ddc'] = form.static_float_field( - parent=panel, sizer=hbox, label="DDC") - - hbox.Add((5,0), 0) - vbox.Add(hbox, 0, wx.EXPAND) - - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital down converter. - """ - r = self.u.tune(0, self.subdev, target_freq) - - if r: - self.myform['freq'].set_value(target_freq) # update displayed value - if self.show_debug_info: - self.myform['baseband'].set_value(r.baseband_freq) - self.myform['ddc'].set_value(r.dxc_freq) - return True - - return False - - def set_gain(self, gain): - self.myform['gain'].set_value(gain) # update displayed value - self.subdev.set_gain(gain) - - def set_decim(self, decim): - ok = self.u.set_decim_rate(decim) - if not ok: - print "set_decim failed" - input_rate = self.u.adc_freq() / self.u.decim_rate() - self.scope.set_sample_rate(input_rate) - if self.show_debug_info: # update displayed values - self.myform['decim'].set_value(self.u.decim_rate()) - self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) - return ok - -def main (): - app = stdgui.stdapp(app_flow_graph, "USRP FFT", nstatus=1) - app.MainLoop() - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/usrp_fft_old.py b/gnuradio-examples/python/usrp/usrp_fft_old.py deleted file mode 100755 index 5edb372b..00000000 --- a/gnuradio-examples/python/usrp/usrp_fft_old.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python -# -# 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 import gr, gru -from gnuradio import usrp -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, fftsink, scopesink -from optparse import OptionParser -import wx - -class app_flow_graph (stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - self.frame = frame - self.panel = panel - - parser = OptionParser (option_class=eng_option) - parser.add_option ("-d", "--decim", type="int", default=16, - help="set fgpa decimation rate to DECIM") - parser.add_option ("-c", "--ddc-freq", type="eng_float", default=0, - help="set Rx DDC frequency to FREQ", metavar="FREQ") - parser.add_option ("-m", "--mux", type="intx", default=0x32103210, - help="set fpga FR_RX_MUX register to MUX") - parser.add_option ("-g", "--gain", type="eng_float", default=0, - help="set Rx PGA gain in dB (default 0 dB)") - (options, args) = parser.parse_args () - - self.u = usrp.source_c (0, options.decim, 1, gru.hexint(options.mux), 0) - self.u.set_rx_freq (0, options.ddc_freq) - - self.u.set_pga (0, options.gain) - self.u.set_pga (1, options.gain) - - self.u.set_verbose (0) - - input_rate = self.u.adc_freq () / self.u.decim_rate () - - fft = fftsink.fft_sink_c (self, panel, fft_size=1024, sample_rate=input_rate) - #fft = fftsink.fft_sink_c (self, panel, fft_size=1024, fft_rate=50, sample_rate=input_rate) - self.connect (self.u, fft) - vbox.Add (fft.win, 10, wx.EXPAND) - - if 0: - c2f_1 = gr.complex_to_float () - scope = scopesink.scope_sink_f (self, panel, "Rx Data", input_rate) - vbox.Add (scope.win, 4, wx.EXPAND) - - self.connect (self.u,c2f_1) - self.connect ((c2f_1, 0), (scope, 0)) - self.connect ((c2f_1, 1), (scope, 1)) - - # build small control area at bottom - hbox = wx.BoxSizer (wx.HORIZONTAL) - hbox.Add ((1, 1), 1, wx.EXPAND) - hbox.Add (wx.StaticText (panel, -1, "Set ddc freq: "), 0, wx.ALIGN_CENTER) - self.tc_freq = wx.TextCtrl (panel, -1, "", style=wx.TE_PROCESS_ENTER) - hbox.Add (self.tc_freq, 0, wx.ALIGN_CENTER) - wx.EVT_TEXT_ENTER (self.tc_freq, self.tc_freq.GetId(), self.handle_text_enter) - hbox.Add ((1, 1), 1, wx.EXPAND) - # add it to the main vbox - vbox.Add (hbox, 0, wx.EXPAND) - - self.update_status_bar () - - def handle_text_enter (self, event): - str = event.GetString () - self.tc_freq.Clear () - self.u.set_rx_freq (0, eng_notation.str_to_num (str)) - self.update_status_bar () - - def update_status_bar (self): - ddc_freq = self.u.rx_freq (0) - decim_rate = self.u.decim_rate () - sample_rate = self.u.adc_freq () / decim_rate - msg = "decim: %d %sS/s DDC: %s" % ( - decim_rate, - eng_notation.num_to_str (sample_rate), - eng_notation.num_to_str (ddc_freq)) - - self.frame.GetStatusBar().SetStatusText (msg, 1) - - - -def main (): - app = stdgui.stdapp (app_flow_graph, "USRP FFT") - app.MainLoop () - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py b/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py index b7c6e618..3ce1e0c4 100755 --- a/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py +++ b/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,12 +28,12 @@ from optparse import OptionParser from gnuradio import gr, gru, eng_notation from gnuradio import usrp from gnuradio import audio -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, fftsink, scopesink, slider, form -import usrp_dbid +from gnuradio.wxgui import stdgui2, fftsink2, scopesink2, slider, form +from usrpm import usrp_dbid -from Numeric import convolve, array +from numpy import convolve, array #import os #print "pid =", os.getpid() @@ -43,9 +43,9 @@ from Numeric import convolve, array # Control Stuff # //////////////////////////////////////////////////////////////////////// -class ptt_graph(stdgui.gui_flow_graph): +class ptt_block(stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) self.frame = frame self.space_bar_pressed = False @@ -73,8 +73,11 @@ class ptt_graph(stdgui.gui_flow_graph): if options.freq < 1e6: options.freq *= 1e6 - self.txpath = transmit_path(self, options.tx_subdev_spec, options.audio_input) - self.rxpath = receive_path(self, options.rx_subdev_spec, options.rx_gain, options.audio_output) + self.txpath = transmit_path(options.tx_subdev_spec, options.audio_input) + self.rxpath = receive_path(options.rx_subdev_spec, options.rx_gain, options.audio_output) + self.connect(self.txpath) + self.connect(self.rxpath) + self._build_gui(frame, panel, vbox, argv, options.no_gui) self.set_transmit(False) @@ -142,29 +145,29 @@ class ptt_graph(stdgui.gui_flow_graph): panel.SetFocus() if 1 and not(no_gui): - rx_fft = fftsink.fft_sink_c (self, panel, title="Rx Input", fft_size=512, + rx_fft = fftsink2.fft_sink_c(panel, title="Rx Input", fft_size=512, sample_rate=self.rxpath.if_rate, ref_level=80, y_per_div=20) self.connect (self.rxpath.u, rx_fft) vbox.Add (rx_fft.win, 1, wx.EXPAND) if 1 and not(no_gui): - rx_fft = fftsink.fft_sink_c (self, panel, title="Post s/w DDC", + rx_fft = fftsink2.fft_sink_c(panel, title="Post s/w DDC", fft_size=512, sample_rate=self.rxpath.quad_rate, ref_level=80, y_per_div=20) self.connect (self.rxpath.ddc, rx_fft) vbox.Add (rx_fft.win, 1, wx.EXPAND) if 0 and not(no_gui): - foo = scopesink.scope_sink_f (self, panel, title="Squelch", - sample_rate=32000) + foo = scopesink2.scope_sink_f(panel, title="Squelch", + sample_rate=32000) self.connect (self.rxpath.fmrx.div, (foo,0)) self.connect (self.rxpath.fmrx.gate, (foo,1)) self.connect (self.rxpath.fmrx.squelch_lpf, (foo,2)) vbox.Add (foo.win, 1, wx.EXPAND) if 0 and not(no_gui): - tx_fft = fftsink.fft_sink_c (self, panel, title="Tx Output", + tx_fft = fftsink2.fft_sink_c(panel, title="Tx Output", fft_size=512, sample_rate=self.txpath.usrp_rate) self.connect (self.txpath.amp, tx_fft) vbox.Add (tx_fft.win, 1, wx.EXPAND) @@ -265,9 +268,12 @@ class ptt_graph(stdgui.gui_flow_graph): # Transmit Path # //////////////////////////////////////////////////////////////////////// -class transmit_path(gr.hier_block): - def __init__(self, fg, subdev_spec, audio_input): - +class transmit_path(gr.hier_block2): + def __init__(self, subdev_spec, audio_input): + gr.hier_block2.__init__(self, "transmit_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature + self.u = usrp.sink_c () dac_rate = self.u.dac_rate(); @@ -298,11 +304,11 @@ class transmit_path(gr.hier_block): audio_taps = convolve(array(lpf),array(hpf)) self.audio_filt = gr.fir_filter_fff(1,audio_taps) - self.pl = blks.ctcss_gen_f(fg, self.audio_rate,123.0) + self.pl = blks2.ctcss_gen_f(self.audio_rate,123.0) self.add_pl = gr.add_ff() - fg.connect(self.pl,(self.add_pl,1)) + self.connect(self.pl,(self.add_pl,1)) - self.fmtx = blks.nbfm_tx(fg, self.audio_rate, self.if_rate) + self.fmtx = blks2.nbfm_tx(self.audio_rate, self.if_rate) self.amp = gr.multiply_const_cc (self.normal_gain) # determine the daughterboard subdevice we're using @@ -312,10 +318,8 @@ class transmit_path(gr.hier_block): self.subdev = usrp.selected_subdev(self.u, subdev_spec) print "TX using", self.subdev.name() - fg.connect(self.audio, self.audio_amp, self.audio_filt, - (self.add_pl,0), self.fmtx, self.amp, self.u) - - gr.hier_block.__init__(self, fg, None, None) + self.connect(self.audio, self.audio_amp, self.audio_filt, + (self.add_pl,0), self.fmtx, self.amp, self.u) self.set_gain(self.subdev.gain_range()[1]) # set max Tx gain @@ -333,7 +337,7 @@ class transmit_path(gr.hier_block): determine the value for the digital up converter. Finally, we feed any residual_freq to the s/w freq translater. """ - r = self.u.tune(self.subdev._which, self.subdev, target_freq) + r = self.u.tune(self.subdev.which(), self.subdev, target_freq) if r: # Use residual_freq in s/w freq translator return True @@ -357,8 +361,11 @@ class transmit_path(gr.hier_block): # Receive Path # //////////////////////////////////////////////////////////////////////// -class receive_path(gr.hier_block): - def __init__(self, fg, subdev_spec, gain, audio_output): +class receive_path(gr.hier_block2): + def __init__(self, subdev_spec, gain, audio_output): + gr.hier_block2.__init__(self, "receive_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature self.u = usrp.source_c () adc_rate = self.u.adc_rate() @@ -395,10 +402,10 @@ class receive_path(gr.hier_block): self.if_rate) # input sample rate # instantiate the guts of the single channel receiver - self.fmrx = blks.nbfm_rx(fg, audio_rate, self.quad_rate) + self.fmrx = blks2.nbfm_rx(audio_rate, self.quad_rate) # standard squelch block - self.squelch = blks.standard_squelch(fg, audio_rate) + self.squelch = blks2.standard_squelch(audio_rate) # audio gain / mute block self._audio_gain = gr.multiply_const_ff(1.0) @@ -407,8 +414,7 @@ class receive_path(gr.hier_block): audio_sink = audio.sink (int(audio_rate), audio_output) # now wire it all together - fg.connect (self.u, self.ddc, self.fmrx, self.squelch, self._audio_gain, audio_sink) - gr.hier_block.__init__(self, fg, self.u, audio_sink) + self.connect (self.u, self.ddc, self.fmrx, self.squelch, self._audio_gain, audio_sink) if gain is None: # if no gain was specified, use the mid-point in dB @@ -484,7 +490,7 @@ class receive_path(gr.hier_block): # //////////////////////////////////////////////////////////////////////// def main(): - app = stdgui.stdapp(ptt_graph, "NBFM Push to Talk") + app = stdgui2.stdapp(ptt_block, "NBFM Push to Talk") app.MainLoop() if __name__ == '__main__': diff --git a/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py b/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py index 018a5b76..4c66fc97 100755 --- a/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py +++ b/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py @@ -1,14 +1,34 @@ #!/usr/bin/env python +# +# Copyright 2005,2007 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 import gr, gru, eng_notation, optfir from gnuradio import audio from gnuradio import usrp -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from gnuradio.wxgui import slider, powermate -from gnuradio.wxgui import stdgui, fftsink, form +from gnuradio.wxgui import stdgui2, fftsink2, form from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math import wx @@ -18,9 +38,9 @@ import wx # Control Stuff #//////////////////////////////////////////////////////////////////////// -class my_graph (stdgui.gui_flow_graph): +class my_top_block (stdgui2.std_top_block): def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) parser=OptionParser(option_class=eng_option) parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, @@ -50,8 +70,9 @@ class my_graph (stdgui.gui_flow_graph): self.freq = 0 self.freq_step = 25e3 - self.rxpath = receive_path(self, options.rx_subdev_spec, options.gain, options.audio_output) - + self.rxpath = receive_path(options.rx_subdev_spec, options.gain, options.audio_output) + self.connect(self.rxpath) + self._build_gui(vbox, options.no_gui) # set initial values @@ -79,28 +100,27 @@ class my_graph (stdgui.gui_flow_graph): self.src_fft = None if 1 and not(no_gui): - self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP", + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP", fft_size=512, sample_rate=self.rxpath.if_rate, - ref_level=80, y_per_div=20) + ref_scale=32768.0, ref_level=0, y_per_div=10, y_divs=12) self.connect (self.rxpath.u, self.src_fft) vbox.Add (self.src_fft.win, 4, wx.EXPAND) - if 1 and not(no_gui): - rx_fft = fftsink.fft_sink_c (self, self.panel, title="Post s/w DDC", + rx_fft = fftsink2.fft_sink_c(self.panel, title="Post s/w DDC", fft_size=512, sample_rate=self.rxpath.quad_rate, ref_level=80, y_per_div=20) self.connect (self.rxpath.ddc, rx_fft) vbox.Add (rx_fft.win, 4, wx.EXPAND) if 1 and not(no_gui): - post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post Deemph", + post_deemph_fft = fftsink2.fft_sink_f(self.panel, title="Post Deemph", fft_size=512, sample_rate=self.rxpath.audio_rate, y_per_div=10, ref_level=-40) self.connect (self.rxpath.fmrx.deemph, post_deemph_fft) vbox.Add (post_deemph_fft.win, 4, wx.EXPAND) if 0: - post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Filter", + post_filt_fft = fftsink2.fft_sink_f(self.panel, title="Post Filter", fft_size=512, sample_rate=audio_rate, y_per_div=10, ref_level=-40) self.connect (self.guts.audio_filter, post_filt) @@ -225,8 +245,11 @@ class my_graph (stdgui.gui_flow_graph): USE_SIMPLE_SQUELCH = False -class receive_path(gr.hier_block): - def __init__(self, fg, subdev_spec, gain, audio_output): +class receive_path(gr.hier_block2): + def __init__(self, subdev_spec, gain, audio_output): + gr.hier_block2.__init__(self, "receive_path", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(0, 0, 0)) # Output signature self.u = usrp.source_c () adc_rate = self.u.adc_rate() @@ -250,8 +273,8 @@ class receive_path(gr.hier_block): # Create filter to get actual channel we want chan_coeffs = gr.firdes.low_pass (1.0, # gain self.if_rate, # sampling rate - 13e3, # low pass cutoff freq - 4e3, # width of trans. band + 8e3, # low pass cutoff freq + 2e3, # width of trans. band gr.firdes.WIN_HANN) # filter type print "len(rx_chan_coeffs) =", len(chan_coeffs) @@ -266,10 +289,10 @@ class receive_path(gr.hier_block): if USE_SIMPLE_SQUELCH: self.squelch = gr.simple_squelch_cc(20) else: - self.squelch = blks.standard_squelch(fg, self.audio_rate) + self.squelch = blks2.standard_squelch(self.audio_rate) # instantiate the guts of the single channel receiver - self.fmrx = blks.nbfm_rx(fg, self.audio_rate, self.quad_rate) + self.fmrx = blks2.nbfm_rx(self.audio_rate, self.quad_rate) # audio gain / mute block self._audio_gain = gr.multiply_const_ff(1.0) @@ -279,13 +302,11 @@ class receive_path(gr.hier_block): # now wire it all together if USE_SIMPLE_SQUELCH: - fg.connect (self.u, self.ddc, self.squelch, self.fmrx, - self._audio_gain, audio_sink) + self.connect (self.u, self.ddc, self.squelch, self.fmrx, + self._audio_gain, audio_sink) else: - fg.connect (self.u, self.ddc, self.fmrx, self.squelch, - self._audio_gain, audio_sink) - - gr.hier_block.__init__(self, fg, self.u, audio_sink) + self.connect (self.u, self.ddc, self.fmrx, self.squelch, + self._audio_gain, audio_sink) if gain is None: # if no gain was specified, use the mid-point in dB @@ -358,5 +379,5 @@ class receive_path(gr.hier_block): # //////////////////////////////////////////////////////////////////////// if __name__ == '__main__': - app = stdgui.stdapp (my_graph, "USRP NBFM RX") + app = stdgui2.stdapp (my_top_block, "USRP NBFM RX") app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_oscope.py b/gnuradio-examples/python/usrp/usrp_oscope.py deleted file mode 100755 index 5d714928..00000000 --- a/gnuradio-examples/python/usrp/usrp_oscope.py +++ /dev/null @@ -1,252 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004,2005,2006 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. -# - -# print "Loading revised usrp_oscope with additional options for scopesink..." - -from gnuradio import gr, gru -from gnuradio import usrp -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider -from optparse import OptionParser -import wx -import sys - - -def pick_subdevice(u): - """ - The user didn't specify a subdevice on the command line. - If there's a daughterboard on A, select A. - If there's a daughterboard on B, select B. - Otherwise, select A. - """ - if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem - return (0, 0) - if u.db[1][0].dbid() >= 0: - return (1, 0) - return (0, 0) - - -class app_flow_graph(stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) - - self.frame = frame - self.panel = panel - - parser = OptionParser(option_class=eng_option) - parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, - help="select USRP Rx side A or B (default=first one with a daughterboard)") - parser.add_option("-d", "--decim", type="int", default=16, - help="set fgpa decimation rate to DECIM [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option("-8", "--width-8", action="store_true", default=False, - help="Enable 8-bit samples across USB") - parser.add_option("-n", "--frame-decim", type="int", default=1, - help="set oscope frame decimation factor to n [default=1]") - parser.add_option("-v", "--v-scale", type="eng_float", default=1000, - help="set oscope initial V/div to SCALE [default=%default]") - parser.add_option("-t", "--t-scale", type="eng_float", default=49e-6, - help="set oscope initial s/div to SCALE [default=50us]") - (options, args) = parser.parse_args() - if len(args) != 0: - parser.print_help() - sys.exit(1) - - self.show_debug_info = True - - # build the graph - - self.u = usrp.source_c(decim_rate=options.decim) - if options.rx_subdev_spec is None: - options.rx_subdev_spec = pick_subdevice(self.u) - self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) - - if options.width_8: - width = 8 - shift = 8 - format = self.u.make_format(width, shift) - #print "format =", hex(format) - r = self.u.set_format(format) - #print "set_format =", r - - # determine the daughterboard subdevice we're using - self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) - - input_rate = self.u.adc_freq() / self.u.decim_rate() - - self.scope = scopesink.scope_sink_c(self, panel, sample_rate=input_rate, - frame_decim=options.frame_decim, - v_scale=options.v_scale, - t_scale=options.t_scale) - self.connect(self.u, self.scope) - - self._build_gui(vbox) - - # set initial values - - if options.gain is None: - # if no gain was specified, use the mid-point in dB - g = self.subdev.gain_range() - options.gain = float(g[0]+g[1])/2 - - if options.freq is None: - # if no freq was specified, use the mid-point - r = self.subdev.freq_range() - options.freq = float(r[0]+r[1])/2 - - self.set_gain(options.gain) - - if self.show_debug_info: - self.myform['decim'].set_value(self.u.decim_rate()) - self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) - self.myform['dbname'].set_value(self.subdev.name()) - self.myform['baseband'].set_value(0) - self.myform['ddc'].set_value(0) - - if not(self.set_freq(options.freq)): - self._set_status_msg("Failed to set initial frequency") - - - def _set_status_msg(self, msg): - self.frame.GetStatusBar().SetStatusText(msg, 0) - - def _build_gui(self, vbox): - - def _form_set_freq(kv): - return self.set_freq(kv['freq']) - - vbox.Add(self.scope.win, 10, wx.EXPAND) - - # add control area at the bottom - self.myform = myform = form.form() - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((5,0), 0, 0) - myform['freq'] = form.float_field( - parent=self.panel, sizer=hbox, label="Center freq", weight=1, - callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) - - hbox.Add((5,0), 0, 0) - g = self.subdev.gain_range() - myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain", - weight=3, - min=int(g[0]), max=int(g[1]), - callback=self.set_gain) - - hbox.Add((5,0), 0, 0) - vbox.Add(hbox, 0, wx.EXPAND) - - self._build_subpanel(vbox) - - def _build_subpanel(self, vbox_arg): - # build a secondary information panel (sometimes hidden) - - # FIXME figure out how to have this be a subpanel that is always - # created, but has its visibility controlled by foo.Show(True/False) - - def _form_set_decim(kv): - return self.set_decim(kv['decim']) - - if not(self.show_debug_info): - return - - panel = self.panel - vbox = vbox_arg - myform = self.myform - - #panel = wx.Panel(self.panel, -1) - #vbox = wx.BoxSizer(wx.VERTICAL) - - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((5,0), 0) - - myform['decim'] = form.int_field( - parent=panel, sizer=hbox, label="Decim", - callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg)) - - hbox.Add((5,0), 1) - myform['fs@usb'] = form.static_float_field( - parent=panel, sizer=hbox, label="Fs@USB") - - hbox.Add((5,0), 1) - myform['dbname'] = form.static_text_field( - parent=panel, sizer=hbox) - - hbox.Add((5,0), 1) - myform['baseband'] = form.static_float_field( - parent=panel, sizer=hbox, label="Analog BB") - - hbox.Add((5,0), 1) - myform['ddc'] = form.static_float_field( - parent=panel, sizer=hbox, label="DDC") - - hbox.Add((5,0), 0) - vbox.Add(hbox, 0, wx.EXPAND) - - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital down converter. - """ - r = usrp.tune(self.u, 0, self.subdev, target_freq) - - if r: - self.myform['freq'].set_value(target_freq) # update displayed value - if self.show_debug_info: - self.myform['baseband'].set_value(r.baseband_freq) - self.myform['ddc'].set_value(r.dxc_freq) - return True - - return False - - def set_gain(self, gain): - self.myform['gain'].set_value(gain) # update displayed value - self.subdev.set_gain(gain) - - def set_decim(self, decim): - ok = self.u.set_decim_rate(decim) - if not ok: - print "set_decim failed" - input_rate = self.u.adc_freq() / self.u.decim_rate() - self.scope.set_sample_rate(input_rate) - if self.show_debug_info: # update displayed values - self.myform['decim'].set_value(self.u.decim_rate()) - self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) - return ok - -def main (): - app = stdgui.stdapp(app_flow_graph, "USRP O'scope", nstatus=1) - app.MainLoop() - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/usrp_rx_cfile.py b/gnuradio-examples/python/usrp/usrp_rx_cfile.py deleted file mode 100755 index 306e101d..00000000 --- a/gnuradio-examples/python/usrp/usrp_rx_cfile.py +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python - -""" -Read samples from the USRP and write to file formatted as binary -outputs single precision complex float values or complex short values (interleaved 16 bit signed short integers). - -""" - -from gnuradio import gr, eng_notation -from gnuradio import audio -from gnuradio import usrp -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -class my_graph(gr.flow_graph): - - def __init__(self): - gr.flow_graph.__init__(self) - - usage="%prog: [options] output_filename" - parser = OptionParser(option_class=eng_option, usage=usage) - parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), - help="select USRP Rx side A or B (default=A)") - parser.add_option("-d", "--decim", type="int", default=16, - help="set fgpa decimation rate to DECIM [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option("-8", "--width-8", action="store_true", default=False, - help="Enable 8-bit samples across USB") - parser.add_option( "--no-hb", action="store_true", default=False, - help="don't use halfband filter in usrp") - parser.add_option( "-s","--output-shorts", action="store_true", default=False, - help="output interleaved shorts in stead of complex floats") - parser.add_option("-N", "--nsamples", type="eng_float", default=None, - help="number of samples to collect [default=+inf]") - (options, args) = parser.parse_args () - if len(args) != 1: - parser.print_help() - raise SystemExit, 1 - filename = args[0] - - if options.freq is None: - parser.print_help() - sys.stderr.write('You must specify the frequency with -f FREQ\n'); - raise SystemExit, 1 - - # build the graph - if options.no_hb or (options.decim<8): - self.fpga_filename="std_4rx_0tx.rbf" #Min decimation of this firmware is 4. contains 4 Rx paths without halfbands and 0 tx paths. - if options.output_shorts: - self.u = usrp.source_s(decim_rate=options.decim,fpga_filename=self.fpga_filename) - else: - self.u = usrp.source_c(decim_rate=options.decim,fpga_filename=self.fpga_filename) - else: - #standard fpga firmware "std_2rxhb_2tx.rbf" contains 2 Rx paths with halfband filters and 2 tx paths (the default) min decimation 8 - if options.output_shorts: - self.u = usrp.source_s(decim_rate=options.decim) - else: - self.u = usrp.source_c(decim_rate=options.decim) - if options.width_8: - sample_width = 8 - sample_shift = 8 - format = self.u.make_format(sample_width, sample_shift) - r = self.u.set_format(format) - if options.output_shorts: - self.dst = gr.file_sink(gr.sizeof_short, filename) - else: - self.dst = gr.file_sink(gr.sizeof_gr_complex, filename) - if options.nsamples is None: - self.connect(self.u, self.dst) - else: - if options.output_shorts: - self.head = gr.head(gr.sizeof_short, int(options.nsamples)*2) - else: - self.head = gr.head(gr.sizeof_gr_complex, int(options.nsamples)) - self.connect(self.u, self.head, self.dst) - - if options.rx_subdev_spec is None: - options.rx_subdev_spec = usrp.pick_rx_subdevice(self.u) - self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) - - # determine the daughterboard subdevice we're using - self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) - print "Using RX d'board %s" % (self.subdev.side_and_name(),) - input_rate = self.u.adc_freq() / self.u.decim_rate() - print "USB sample rate %s" % (eng_notation.num_to_str(input_rate)) - - if options.gain is None: - # if no gain was specified, use the mid-point in dB - g = self.subdev.gain_range() - options.gain = float(g[0]+g[1])/2 - - self.subdev.set_gain(options.gain) - - r = self.u.tune(0, self.subdev, options.freq) - if not r: - sys.stderr.write('Failed to set frequency\n') - raise SystemExit, 1 - - -if __name__ == '__main__': - try: - my_graph().run() - except KeyboardInterrupt: - pass diff --git a/gnuradio-examples/python/usrp/usrp_rx_nogui.py b/gnuradio-examples/python/usrp/usrp_rx_nogui.py deleted file mode 100755 index b33d626e..00000000 --- a/gnuradio-examples/python/usrp/usrp_rx_nogui.py +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gru, usrp, optfir, audio, eng_notation, blks -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -""" -This example application demonstrates receiving and demodulating -different types of signals using the USRP. - -A receive chain is built up of the following signal processing -blocks: - -USRP - Daughter board source generating complex baseband signal. -CHAN - Low pass filter to select channel bandwidth -RFSQL - RF squelch zeroing output when input power below threshold -AGC - Automatic gain control leveling signal at [-1.0, +1.0] -DEMOD - Demodulation block appropriate to selected signal type. - This converts the complex baseband to real audio frequencies, - and applies an appropriate low pass decimating filter. -CTCSS - Optional tone squelch zeroing output when tone is not present. -RSAMP - Resampler block to convert audio sample rate to user specified - sound card output rate. -AUDIO - Audio sink for playing final output to speakers. - -The following are required command line parameters: - --f FREQ USRP receive frequency --m MOD Modulation type, select from AM, FM, or WFM - -The following are optional command line parameters: - --R SUBDEV Daughter board specification, defaults to first found --c FREQ Calibration offset. Gets added to receive frequency. - Defaults to 0.0 Hz. --g GAIN Daughterboard gain setting. Defaults to mid-range. --o RATE Sound card output rate. Defaults to 32000. Useful if - your sound card only accepts particular sample rates. --r RFSQL RF squelch in db. Defaults to -50.0. --p FREQ CTCSS frequency. Opens squelch when tone is present. - -Once the program is running, ctrl-break (Ctrl-C) stops operation. - -Please see fm_demod.py and am_demod.py for details of the demodulation -blocks. -""" - -# (usrp_decim, channel_decim, audio_decim, channel_pass, channel_stop, demod) -demod_params = { - 'AM' : (250, 16, 1, 5000, 8000, blks.demod_10k0a3e_cf), - 'FM' : (250, 8, 4, 8000, 9000, blks.demod_20k0f3e_cf), - 'WFM' : (250, 1, 8, 90000, 100000, blks.demod_200kf3e_cf) - } - -class usrp_source_c(gr.hier_block): - """ - Create a USRP source object supplying complex floats. - - Selects user supplied subdevice or chooses first available one. - - Calibration value is the offset from the tuned frequency to - the actual frequency. - """ - def __init__(self, fg, subdev_spec, decim, gain=None, calibration=0.0): - self._decim = decim - self._src = usrp.source_c() - if subdev_spec is None: - subdev_spec = usrp.pick_rx_subdevice(self._src) - self._subdev = usrp.selected_subdev(self._src, subdev_spec) - self._src.set_mux(usrp.determine_rx_mux_value(self._src, subdev_spec)) - self._src.set_decim_rate(self._decim) - - # If no gain specified, set to midrange - if gain is None: - g = self._subdev.gain_range() - gain = (g[0]+g[1])/2.0 - - self._subdev.set_gain(gain) - self._cal = calibration - gr.hier_block.__init__(self, fg, self._src, self._src) - - def tune(self, freq): - result = usrp.tune(self._src, 0, self._subdev, freq+self._cal) - # TODO: deal with residual - - def rate(self): - return self._src.adc_rate()/self._decim - -class app_flow_graph(gr.flow_graph): - def __init__(self, options, args): - gr.flow_graph.__init__(self) - self.options = options - self.args = args - - (usrp_decim, channel_decim, audio_decim, - channel_pass, channel_stop, demod) = demod_params[options.modulation] - - USRP = usrp_source_c(self, # Flow graph - options.rx_subdev_spec, # Daugherboard spec - usrp_decim, # IF decimation ratio - options.gain, # Receiver gain - options.calibration) # Frequency offset - USRP.tune(options.frequency) - - if_rate = USRP.rate() - channel_rate = if_rate // channel_decim - audio_rate = channel_rate // audio_decim - - CHAN_taps = optfir.low_pass(1.0, # Filter gain - if_rate, # Sample rate - channel_pass, # One sided modulation bandwidth - channel_stop, # One sided channel bandwidth - 0.1, # Passband ripple - 60) # Stopband attenuation - - CHAN = gr.freq_xlating_fir_filter_ccf(channel_decim, # Decimation rate - CHAN_taps, # Filter taps - 0.0, # Offset frequency - if_rate) # Sample rate - - RFSQL = gr.pwr_squelch_cc(options.rf_squelch, # Power threshold - 125.0/channel_rate, # Time constant - channel_rate/20, # 50ms rise/fall - False) # Zero, not gate output - - AGC = gr.agc_cc(1.0/channel_rate, # Time constant - 1.0, # Reference power - 1.0, # Initial gain - 1.0) # Maximum gain - - DEMOD = demod(self, channel_rate, audio_decim) - - # From RF to audio - self.connect(USRP, CHAN, RFSQL, AGC, DEMOD) - - # Optionally add CTCSS and RSAMP if needed - tail = DEMOD - if options.ctcss != None and options.ctcss > 60.0: - CTCSS = gr.ctcss_squelch_ff(audio_rate, # Sample rate - options.ctcss) # Squelch tone - self.connect(DEMOD, CTCSS) - tail = CTCSS - - if options.output_rate != audio_rate: - out_lcm = gru.lcm(audio_rate, options.output_rate) - out_interp = int(out_lcm // audio_rate) - out_decim = int(out_lcm // options.output_rate) - RSAMP = blks.rational_resampler_fff(self, out_interp, out_decim) - self.connect(tail, RSAMP) - tail = RSAMP - - # Send to default audio output - AUDIO = audio.sink(options.output_rate, "") - self.connect(tail, AUDIO) - -def main(): - parser = OptionParser(option_class=eng_option) - parser.add_option("-f", "--frequency", type="eng_float", - help="set receive frequency to Hz", metavar="Hz") - parser.add_option("-R", "--rx-subdev-spec", type="subdev", - help="select USRP Rx side A or B", metavar="SUBDEV") - parser.add_option("-c", "--calibration", type="eng_float", default=0.0, - help="set frequency offset to Hz", metavar="Hz") - parser.add_option("-g", "--gain", type="int", default=None, - help="set RF gain", metavar="dB") - parser.add_option("-m", "--modulation", type="choice", choices=('AM','FM','WFM'), - help="set modulation type (AM,FM)", metavar="TYPE") - parser.add_option("-o", "--output-rate", type="int", default=32000, - help="set audio output rate to RATE", metavar="RATE") - parser.add_option("-r", "--rf-squelch", type="eng_float", default=-50.0, - help="set RF squelch to dB", metavar="dB") - parser.add_option("-p", "--ctcss", type="float", - help="set CTCSS squelch to FREQ", metavar="FREQ") - (options, args) = parser.parse_args() - - if options.frequency < 1e6: - options.frequency *= 1e6 - - fg = app_flow_graph(options, args) - try: - fg.run() - except KeyboardInterrupt: - pass - -if __name__ == "__main__": - main() diff --git a/gnuradio-examples/python/usrp/usrp_siggen.py b/gnuradio-examples/python/usrp/usrp_siggen.py deleted file mode 100755 index 7f528588..00000000 --- a/gnuradio-examples/python/usrp/usrp_siggen.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gru -from gnuradio import usrp -from gnuradio.eng_option import eng_option -from gnuradio import eng_notation -from optparse import OptionParser -import sys - - -class my_graph(gr.flow_graph): - def __init__ (self): - gr.flow_graph.__init__(self) - - # controllable values - self.interp = 64 - self.waveform_type = gr.GR_SIN_WAVE - self.waveform_ampl = 16000 - self.waveform_freq = 100.12345e3 - self.waveform_offset = 0 - self._instantiate_blocks () - self.set_waveform_type (self.waveform_type) - - def usb_freq (self): - return self.u.dac_freq() / self.interp - - def usb_throughput (self): - return self.usb_freq () * 4 - - def set_waveform_type (self, type): - ''' - valid waveform types are: gr.GR_SIN_WAVE, gr.GR_CONST_WAVE, - gr.GR_UNIFORM and gr.GR_GAUSSIAN - ''' - self._configure_graph (type) - self.waveform_type = type - - def set_waveform_ampl (self, ampl): - self.waveform_ampl = ampl - self.siggen.set_amplitude (ampl) - self.noisegen.set_amplitude (ampl) - - def set_waveform_freq (self, freq): - self.waveform_freq = freq - self.siggen.set_frequency (freq) - - def set_waveform_offset (self, offset): - self.waveform_offset = offset - self.siggen.set_offset (offset) - - def set_interpolator (self, interp): - self.interp = interp - self.siggen.set_sampling_freq (self.usb_freq ()) - self.u.set_interp_rate (interp) - - def _instantiate_blocks (self): - self.src = None - self.u = usrp.sink_c (0, self.interp) - - self.siggen = gr.sig_source_c (self.usb_freq (), - gr.GR_SIN_WAVE, - self.waveform_freq, - self.waveform_ampl, - self.waveform_offset) - - self.noisegen = gr.noise_source_c (gr.GR_UNIFORM, - self.waveform_ampl) - - # self.file_sink = gr.file_sink (gr.sizeof_gr_complex, "siggen.dat") - - def _configure_graph (self, type): - was_running = self.is_running () - if was_running: - self.stop () - self.disconnect_all () - if type == gr.GR_SIN_WAVE or type == gr.GR_CONST_WAVE: - self.connect (self.siggen, self.u) - # self.connect (self.siggen, self.file_sink) - self.siggen.set_waveform (type) - self.src = self.siggen - elif type == gr.GR_UNIFORM or type == gr.GR_GAUSSIAN: - self.connect (self.noisegen, self.u) - self.noisegen.set_type (type) - self.src = self.noisegen - else: - raise ValueError, type - if was_running: - self.start () - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital up converter. - """ - r = self.u.tune(self.subdev._which, self.subdev, target_freq) - if r: - #print "r.baseband_freq =", eng_notation.num_to_str(r.baseband_freq) - #print "r.dxc_freq =", eng_notation.num_to_str(r.dxc_freq) - #print "r.residual_freq =", eng_notation.num_to_str(r.residual_freq) - #print "r.inverted =", r.inverted - return True - - return False - - - -def main (): - parser = OptionParser (option_class=eng_option) - parser.add_option ("-T", "--tx-subdev-spec", type="subdev", default=(0, 0), - help="select USRP Tx side A or B") - parser.add_option ("-f", "--rf-freq", type="eng_float", default=None, - help="set RF center frequency to FREQ") - parser.add_option ("-i", "--interp", type="int", default=64, - help="set fgpa interpolation rate to INTERP [default=%default]") - - parser.add_option ("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE, - help="generate a complex sinusoid [default]", default=gr.GR_SIN_WAVE) - parser.add_option ("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE, - help="generate a constant output") - parser.add_option ("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN, - help="generate Gaussian random output") - parser.add_option ("--uniform", dest="type", action="store_const", const=gr.GR_UNIFORM, - help="generate Uniform random output") - - parser.add_option ("-w", "--waveform-freq", type="eng_float", default=100e3, - help="set waveform frequency to FREQ [default=%default]") - parser.add_option ("-a", "--amplitude", type="eng_float", default=16e3, - help="set waveform amplitude to AMPLITUDE [default=%default]", metavar="AMPL") - parser.add_option ("-o", "--offset", type="eng_float", default=0, - help="set waveform offset to OFFSET [default=%default]") - (options, args) = parser.parse_args () - - if len(args) != 0: - parser.print_help() - raise SystemExit - - if options.rf_freq is None: - sys.stderr.write("usrp_siggen: must specify RF center frequency with -f RF_FREQ\n") - parser.print_help() - raise SystemExit - - fg = my_graph() - fg.set_interpolator (options.interp) - fg.set_waveform_type (options.type) - fg.set_waveform_freq (options.waveform_freq) - fg.set_waveform_ampl (options.amplitude) - fg.set_waveform_offset (options.offset) - - # determine the daughterboard subdevice we're using - if options.tx_subdev_spec is None: - options.tx_subdev_spec = usrp.pick_tx_subdevice(fg.u) - - m = usrp.determine_tx_mux_value(fg.u, options.tx_subdev_spec) - #print "mux = %#04x" % (m,) - fg.u.set_mux(m) - fg.subdev = usrp.selected_subdev(fg.u, options.tx_subdev_spec) - print "Using TX d'board %s" % (fg.subdev.side_and_name(),) - - fg.subdev.set_gain(fg.subdev.gain_range()[1]) # set max Tx gain - - if not fg.set_freq(options.rf_freq): - sys.stderr.write('Failed to set RF frequency\n') - raise SystemExit - - fg.subdev.set_enable(True) # enable transmitter - - try: - fg.run() - except KeyboardInterrupt: - pass - -if __name__ == '__main__': - main () diff --git a/gnuradio-examples/python/usrp/usrp_spectrum_sense.py b/gnuradio-examples/python/usrp/usrp_spectrum_sense.py new file mode 100755 index 00000000..90adf167 --- /dev/null +++ b/gnuradio-examples/python/usrp/usrp_spectrum_sense.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python +# +# Copyright 2005,2007 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 import gr, gru, eng_notation, optfir, window +from gnuradio import audio +from gnuradio import usrp +from gnuradio.eng_option import eng_option +from optparse import OptionParser +from usrpm import usrp_dbid +import sys +import math +import struct + + +class tune(gr.feval_dd): + """ + This class allows C++ code to callback into python. + """ + def __init__(self, tb): + gr.feval_dd.__init__(self) + self.tb = tb + + def eval(self, ignore): + """ + This method is called from gr.bin_statistics_f when it wants to change + the center frequency. This method tunes the front end to the new center + frequency, and returns the new frequency as its result. + """ + try: + # We use this try block so that if something goes wrong from here + # down, at least we'll have a prayer of knowing what went wrong. + # Without this, you get a very mysterious: + # + # terminate called after throwing an instance of 'Swig::DirectorMethodException' + # Aborted + # + # message on stderr. Not exactly helpful ;) + + new_freq = self.tb.set_next_freq() + return new_freq + + except Exception, e: + print "tune: Exception: ", e + + +class parse_msg(object): + def __init__(self, msg): + self.center_freq = msg.arg1() + self.vlen = int(msg.arg2()) + assert(msg.length() == self.vlen * gr.sizeof_float) + + # FIXME consider using Numarray or NumPy vector + t = msg.to_string() + self.raw_data = t + self.data = struct.unpack('%df' % (self.vlen,), t) + + +class my_top_block(gr.top_block): + + def __init__(self): + gr.top_block.__init__(self) + + usage = "usage: %prog [options] min_freq max_freq" + parser = OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0,0), + help="select USRP Rx side A or B (default=A)") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("", "--tune-delay", type="eng_float", default=1e-3, metavar="SECS", + help="time to delay (in seconds) after changing frequency [default=%default]") + parser.add_option("", "--dwell-delay", type="eng_float", default=10e-3, metavar="SECS", + help="time to dwell (in seconds) at a given frequncy [default=%default]") + parser.add_option("-F", "--fft-size", type="int", default=256, + help="specify number of FFT bins [default=%default]") + parser.add_option("-d", "--decim", type="intx", default=16, + help="set decimation to DECIM [default=%default]") + parser.add_option("", "--real-time", action="store_true", default=False, + help="Attempt to enable real-time scheduling") + parser.add_option("-B", "--fusb-block-size", type="int", default=0, + help="specify fast usb block size [default=%default]") + parser.add_option("-N", "--fusb-nblocks", type="int", default=0, + help="specify number of fast usb blocks [default=%default]") + + (options, args) = parser.parse_args() + if len(args) != 2: + parser.print_help() + sys.exit(1) + + self.min_freq = eng_notation.str_to_num(args[0]) + self.max_freq = eng_notation.str_to_num(args[1]) + + if self.min_freq > self.max_freq: + self.min_freq, self.max_freq = self.max_freq, self.min_freq # swap them + + self.fft_size = options.fft_size + + + if not options.real_time: + realtime = False + else: + # Attempt to enable realtime scheduling + r = gr.enable_realtime_scheduling() + if r == gr.RT_OK: + realtime = True + else: + realtime = False + print "Note: failed to enable realtime scheduling" + + # If the user hasn't set the fusb_* parameters on the command line, + # pick some values that will reduce latency. + + if 1: + if options.fusb_block_size == 0 and options.fusb_nblocks == 0: + if realtime: # be more aggressive + options.fusb_block_size = gr.prefs().get_long('fusb', 'rt_block_size', 1024) + options.fusb_nblocks = gr.prefs().get_long('fusb', 'rt_nblocks', 16) + else: + options.fusb_block_size = gr.prefs().get_long('fusb', 'block_size', 4096) + options.fusb_nblocks = gr.prefs().get_long('fusb', 'nblocks', 16) + + #print "fusb_block_size =", options.fusb_block_size + #print "fusb_nblocks =", options.fusb_nblocks + + # build graph + + self.u = usrp.source_c(fusb_block_size=options.fusb_block_size, + fusb_nblocks=options.fusb_nblocks) + + + adc_rate = self.u.adc_rate() # 64 MS/s + usrp_decim = options.decim + self.u.set_decim_rate(usrp_decim) + usrp_rate = adc_rate / usrp_decim + + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + print "Using RX d'board %s" % (self.subdev.side_and_name(),) + + + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, self.fft_size) + + mywindow = window.blackmanharris(self.fft_size) + fft = gr.fft_vcc(self.fft_size, True, mywindow) + power = 0 + for tap in mywindow: + power += tap*tap + + c2mag = gr.complex_to_mag_squared(self.fft_size) + + # FIXME the log10 primitive is dog slow + log = gr.nlog10_ff(10, self.fft_size, + -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size)) + + # Set the freq_step to 75% of the actual data throughput. + # This allows us to discard the bins on both ends of the spectrum. + + self.freq_step = 0.75 * usrp_rate + self.min_center_freq = self.min_freq + self.freq_step/2 + nsteps = math.ceil((self.max_freq - self.min_freq) / self.freq_step) + self.max_center_freq = self.min_center_freq + (nsteps * self.freq_step) + + self.next_freq = self.min_center_freq + + tune_delay = max(0, int(round(options.tune_delay * usrp_rate / self.fft_size))) # in fft_frames + dwell_delay = max(1, int(round(options.dwell_delay * usrp_rate / self.fft_size))) # in fft_frames + + self.msgq = gr.msg_queue(16) + self._tune_callback = tune(self) # hang on to this to keep it from being GC'd + stats = gr.bin_statistics_f(self.fft_size, self.msgq, + self._tune_callback, tune_delay, dwell_delay) + + # FIXME leave out the log10 until we speed it up + #self.connect(self.u, s2v, fft, c2mag, log, stats) + self.connect(self.u, s2v, fft, c2mag, stats) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + self.set_gain(options.gain) + print "gain =", options.gain + + + def set_next_freq(self): + target_freq = self.next_freq + self.next_freq = self.next_freq + self.freq_step + if self.next_freq >= self.max_center_freq: + self.next_freq = self.min_center_freq + + if not self.set_freq(target_freq): + print "Failed to set frequency to", target_freq + + return target_freq + + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + return self.u.tune(0, self.subdev, target_freq) + + + def set_gain(self, gain): + self.subdev.set_gain(gain) + + +def main_loop(tb): + while 1: + + # Get the next message sent from the C++ code (blocking call). + # It contains the center frequency and the mag squared of the fft + m = parse_msg(tb.msgq.delete_head()) + + # Print center freq so we know that something is happening... + print m.center_freq + + # FIXME do something useful with the data... + + # m.data are the mag_squared of the fft output (they are in the + # standard order. I.e., bin 0 == DC.) + # You'll probably want to do the equivalent of "fftshift" on them + # m.raw_data is a string that contains the binary floats. + # You could write this as binary to a file. + + +if __name__ == '__main__': + tb = my_top_block() + try: + tb.start() # start executing flow graph in another thread... + main_loop(tb) + + except KeyboardInterrupt: + pass diff --git a/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py b/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py new file mode 100755 index 00000000..696c1a24 --- /dev/null +++ b/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# +# Copyright 2004,2007 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. +# + +""" +Digital loopback (Tx to Rx) for the USRP Rev1. +""" + +from gnuradio import gr +from gnuradio import usrp + + +def build_graph (): + tx_interp = 32 # tx should be twice rx + rx_decim = 16 + + tb = gr.top_block () + + data_src = gr.lfsr_32k_source_s () + + # usrp_tx = usrp.sink_s (0, tx_interp, 1, 0x98) + usrp_tx = usrp.sink_s (0, tx_interp) + + tb.connect (data_src, usrp_tx) + + usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK) + + sink = gr.check_lfsr_32k_s () + tb.connect (usrp_rx, sink) + + # file_sink = gr.file_sink (gr.sizeof_short, "loopback.dat") + # tb.connect (usrp_rx, file_sink) + + return tb + +def main (): + tb = build_graph () + try: + tb.run() + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main () diff --git a/gnuradio-examples/python/usrp/usrp_tv_rcv.py b/gnuradio-examples/python/usrp/usrp_tv_rcv.py index ed78273a..537e339b 100755 --- a/gnuradio-examples/python/usrp/usrp_tv_rcv.py +++ b/gnuradio-examples/python/usrp/usrp_tv_rcv.py @@ -1,4 +1,25 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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. +# + """ Realtime capture and display of analog Tv stations. Can also use a file as source or sink @@ -16,12 +37,11 @@ except: print "FYI: gr-video-sdl is not installed" print "realtime SDL video output window will not be available" from gnuradio import usrp -from gnuradio import blks from gnuradio.eng_option import eng_option from gnuradio.wxgui import slider, powermate -from gnuradio.wxgui import stdgui, fftsink, form +from gnuradio.wxgui import stdgui2, fftsink2, form from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math import wx @@ -41,12 +61,13 @@ def pick_subdevice(u): """ return usrp.pick_subdev(u, (usrp_dbid.TV_RX, usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3, usrp_dbid.BASIC_RX)) -class tv_rx_graph (stdgui.gui_flow_graph): +class tv_rx_block (stdgui2.std_top_block): def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) usage="%prog: [options] [input_filename]. \n If you don't specify an input filename the usrp will be used as source\n " \ "Make sure your input capture file containes interleaved shorts not complex floats" @@ -390,5 +411,5 @@ class tv_rx_graph (stdgui.gui_flow_graph): if __name__ == '__main__': - app = stdgui.stdapp (tv_rx_graph, "USRP TV RX black-and-white") + app = stdgui2.stdapp (tv_rx_block, "USRP TV RX black-and-white") app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py b/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py index e563188b..e6a8de1b 100755 --- a/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py +++ b/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py @@ -1,4 +1,24 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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. +# """ Reads from a file and generates PAL TV pictures in black and white @@ -24,10 +44,10 @@ except: print "realtime \"sdl\" video output window will not be available" -class my_graph(gr.flow_graph): +class my_top_block(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) usage="%prog: [options] output_filename. \n Special output_filename \"sdl\" will use video_sink_sdl as realtime output window. " \ "You then need to have gr-video-sdl installed. \n" \ @@ -174,6 +194,6 @@ class my_graph(gr.flow_graph): if __name__ == '__main__': try: - my_graph().run() + my_top_block().run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv.py index 20291076..098897cf 100755 --- a/gnuradio-examples/python/usrp/usrp_wfm_rcv.py +++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv.py @@ -1,14 +1,34 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007,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. +# from gnuradio import gr, gru, eng_notation, optfir from gnuradio import audio from gnuradio import usrp -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from gnuradio.wxgui import slider, powermate -from gnuradio.wxgui import stdgui, fftsink, form +from gnuradio.wxgui import stdgui2, fftsink2, form from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math import wx @@ -22,12 +42,13 @@ def pick_subdevice(u): """ return usrp.pick_subdev(u, (usrp_dbid.TV_RX, usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3, usrp_dbid.BASIC_RX)) -class wfm_rx_graph (stdgui.gui_flow_graph): +class wfm_rx_block (stdgui2.std_top_block): def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) parser=OptionParser(option_class=eng_option) parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, @@ -72,7 +93,14 @@ class wfm_rx_graph (stdgui.gui_flow_graph): self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) print "Using RX d'board %s" % (self.subdev.side_and_name(),) - + dbid = self.subdev.dbid() + if not (dbid == usrp_dbid.BASIC_RX or + dbid == usrp_dbid.TV_RX or + dbid == usrp_dbid.TV_RX_REV_2 or + dbid == usrp_dbid.TV_RX_REV_3): + print "This daughterboard does not cover the required frequency range" + print "for this application. Please use a BasicRX or TVRX daughterboard." + raw_input("Press ENTER to continue anyway, or Ctrl-C to exit.") chan_filt_coeffs = optfir.low_pass (1, # gain usrp_rate, # sampling rate @@ -83,7 +111,7 @@ class wfm_rx_graph (stdgui.gui_flow_graph): #print len(chan_filt_coeffs) chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) - self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation) + self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) self.volume_control = gr.multiply_const_ff(self.vol) @@ -128,20 +156,21 @@ class wfm_rx_graph (stdgui.gui_flow_graph): if 1: - self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP", - fft_size=512, sample_rate=usrp_rate) + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP", + fft_size=512, sample_rate=usrp_rate, + ref_scale=32768.0, ref_level=0, y_divs=12) self.connect (self.u, self.src_fft) vbox.Add (self.src_fft.win, 4, wx.EXPAND) if 1: - post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Demod", + post_filt_fft = fftsink2.fft_sink_f(self.panel, title="Post Demod", fft_size=1024, sample_rate=usrp_rate, y_per_div=10, ref_level=0) self.connect (self.guts.fm_demod, post_filt_fft) vbox.Add (post_filt_fft.win, 4, wx.EXPAND) if 0: - post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post Deemph", + post_deemph_fft = fftsink2.fft_sink_f(self.panel, title="Post Deemph", fft_size=512, sample_rate=audio_rate, y_per_div=10, ref_level=-20) self.connect (self.guts.deemph, post_deemph_fft) @@ -265,5 +294,5 @@ class wfm_rx_graph (stdgui.gui_flow_graph): if __name__ == '__main__': - app = stdgui.stdapp (wfm_rx_graph, "USRP WFM RX") + app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX") app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py index 40e7dd75..0103982b 100755 --- a/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py +++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py @@ -1,15 +1,47 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir from gnuradio import audio from gnuradio import usrp -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math +def calc_dxc_freq(target_freq, baseband_freq, fs): + dxc_temp = (target_freq - baseband_freq) % fs + + if dxc_temp < fs/2.0: + dxc_freq = - dxc_temp + inverted = False + else: + dxc_freq = fs - dxc_temp + inverted = True + + return (dxc_freq, inverted) + def pick_subdevice(u): """ The user didn't specify a subdevice on the command line. @@ -22,10 +54,10 @@ def pick_subdevice(u): usrp_dbid.BASIC_RX)) -class wfm_rx_graph (gr.flow_graph): +class wfm_rx_block (gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser=OptionParser(option_class=eng_option) parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, @@ -103,17 +135,17 @@ class wfm_rx_graph (gr.flow_graph): mid_freq = (f[0] + f[1]) / 2 # set front end PLL to middle frequency - ok, baseband_freq = self.subdev.set_freq(mid_freq) + tune_result = self.subdev.set_freq(mid_freq) for n in range(2): chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) - guts = blks.wfm_rcv (self, demod_rate, audio_decimation) + guts = blks2.wfm_rcv (demod_rate, audio_decimation) volume_control = gr.multiply_const_ff(self.vol) self.connect((di, n), chan_filt) self.connect(chan_filt, guts, volume_control) self.connect(volume_control, (audio_sink, n)) - dxc_freq, inverted = usrp.calc_dxc_freq(f[n], baseband_freq, - self.u.converter_rate()) + dxc_freq, inverted = calc_dxc_freq(f[n], tune_result.baseband_freq, + self.u.converter_rate()) self.u.set_rx_freq(n, dxc_freq) @@ -135,10 +167,13 @@ class wfm_rx_graph (gr.flow_graph): def set_gain(self, gain): self.subdev.set_gain(gain) + def __del__(self): + # Avoid weak-reference error + del self.subdev if __name__ == '__main__': - fg = wfm_rx_graph() + tb = wfm_rx_block() try: - fg.run() + tb.run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_fmdet.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_fmdet.py new file mode 100755 index 00000000..82c521d5 --- /dev/null +++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_fmdet.py @@ -0,0 +1,351 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir +from gnuradio import audio +from gnuradio import usrp +from gnuradio import blks2 +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import slider, powermate +from gnuradio.wxgui import stdgui2, fftsink2, form, scopesink2 +from optparse import OptionParser +from usrpm import usrp_dbid +import sys +import math +import wx + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + Try for one of these, in order: TV_RX, BASIC_RX, whatever is on side A. + + @return a subdev_spec + """ + return usrp.pick_subdev(u, (usrp_dbid.TV_RX, + usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3, + usrp_dbid.BASIC_RX)) + +class wfm_rx_block (stdgui2.std_top_block): + def __init__(self,frame,panel,vbox,argv): + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) + + parser=OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=A)") + parser.add_option("-f", "--freq", type="eng_float", default=100.1e6, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=65, + help="set gain in dB (default is midpoint)") + parser.add_option("-s", "--squelch", type="eng_float", default=0, + help="set squelch level (default is 0)") + parser.add_option("-V", "--volume", type="eng_float", default=None, + help="set volume (default is midpoint)") + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp") + + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + self.frame = frame + self.panel = panel + + self.vol = 0 + self.state = "FREQ" + self.freq = 0 + + # build graph + + self.u = usrp.source_c() # usrp is data source + + adc_rate = self.u.adc_rate() # 64 MS/s + usrp_decim = 200 + self.u.set_decim_rate(usrp_decim) + usrp_rate = adc_rate / usrp_decim # 320 kS/s + chanfilt_decim = 1 + demod_rate = usrp_rate / chanfilt_decim + audio_decimation = 10 + audio_rate = 3*demod_rate / audio_decimation/2 # 48 kHz + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + + + chan_filt_coeffs = gr.firdes.low_pass_2 (1, # gain + usrp_rate, # sampling rate + 90e3, # passband cutoff + 30e3, # transition bandwidth + 70, # stopband attenuation + gr.firdes.WIN_BLACKMAN) + print len(chan_filt_coeffs) + chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + + self.rchan_sample = blks2.rational_resampler_fff(3,2) + self.lchan_sample = blks2.rational_resampler_fff(3,2) + + + #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) + self.guts = blks2.wfm_rcv_fmdet (demod_rate, audio_decimation) + + # FIXME rework {add,multiply}_const_* to handle multiple streams + self.volume_control_l = gr.multiply_const_ff(self.vol) + self.volume_control_r = gr.multiply_const_ff(self.vol) + + # sound card as final sink + audio_sink = audio.sink (int (audio_rate), + options.audio_output, + False) # ok_to_block + + # now wire it all together + self.connect (self.u, chan_filt, self.guts) + self.connect((self.guts, 0), self.lchan_sample,self.volume_control_l,(audio_sink,0)) + self.connect((self.guts, 1), self.rchan_sample,self.volume_control_r,(audio_sink,1)) + + try: + self.guts.stereo_carrier_pll_recovery.squelch_enable(True) + except: + print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet" + + + self._build_gui(vbox, usrp_rate, demod_rate, audio_rate) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.volume is None: + g = self.volume_range() + options.volume = float(g[0]+g[1])/2 + + if abs(options.freq) < 1e6: + options.freq *= 1e6 + + # set initial values + + self.set_gain(options.gain) + self.set_vol(options.volume) + try: + self.guts.stereo_carrier_pll_recovery.set_lock_threshold(options.squelch) + except: + print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet" + + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + + def _set_status_msg(self, msg, which=0): + self.frame.GetStatusBar().SetStatusText(msg, which) + + + def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + + if 1: + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP", + fft_size=512, sample_rate=usrp_rate, + ref_scale=32768.0, ref_level=0, y_divs=12) + self.connect (self.u, self.src_fft) + vbox.Add (self.src_fft.win, 4, wx.EXPAND) + + if 1: + post_fm_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod", + fft_size=512, sample_rate=demod_rate, + y_per_div=10, ref_level=0) + self.connect (self.guts.fm_demod, post_fm_demod_fft) + vbox.Add (post_fm_demod_fft.win, 4, wx.EXPAND) + + if 0: + post_stereo_carrier_generator_fft = fftsink2.fft_sink_c (self.panel, title="Post Stereo_carrier_generator", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=0) + self.connect (self.guts.stereo_carrier_generator, post_stereo_carrier_generator_fft) + vbox.Add (post_stereo_carrier_generator_fft.win, 4, wx.EXPAND) + + if 0: + post_deemphasis_left = fftsink2.fft_sink_f (self.panel, title="Post_Deemphasis_Left", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=0) + self.connect (self.guts.deemph_Left, post_deemphasis_left) + vbox.Add (post_deemphasis_left.win, 4, wx.EXPAND) + + if 0: + post_deemphasis_right = fftsink2.fft_sink_f(self.panel, title="Post_Deemphasis_Right", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=-20) + self.connect (self.guts.deemph_Left, post_deemphasis_right) + vbox.Add (post_deemphasis_right.win, 4, wx.EXPAND) + + + if 0: + LmR_fft = fftsink2.fft_sink_f(self.panel, title="LmR", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=-20) + self.connect (self.guts.LmR_real,LmR_fft) + vbox.Add (LmR_fft.win, 4, wx.EXPAND) + + if 0: + self.scope = scopesink2.scope_sink_f(self.panel, sample_rate=demod_rate) + self.connect (self.guts.fm_demod,self.scope) + vbox.Add (self.scope.win,4,wx.EXPAND) + + # control area form at bottom + self.myform = myform = form.form() + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0) + myform['freq_slider'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3, + range=(87.9e6, 108.1e6, 0.1e6), + callback=self.set_freq) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['volume'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume", + weight=3, range=self.volume_range(), + callback=self.set_vol) + hbox.Add((5,0), 1) + + myform['gain'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, range=self.subdev.gain_range(), + callback=self.set_gain) + hbox.Add((5,0), 0) + + myform['sqlch_thrsh'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Stereo Squelch Threshold", + weight=3, range=(0.0,1.0,0.01), + callback=self.set_squelch) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + try: + self.knob = powermate.powermate(self.frame) + self.rot = 0 + powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate) + powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button) + except: + print "FYI: No Powermate or Contour Knob found" + + + def on_rotate (self, event): + self.rot += event.delta + if (self.state == "FREQ"): + if self.rot >= 3: + self.set_freq(self.freq + .1e6) + self.rot -= 3 + elif self.rot <=-3: + self.set_freq(self.freq - .1e6) + self.rot += 3 + else: + step = self.volume_range()[2] + if self.rot >= 3: + self.set_vol(self.vol + step) + self.rot -= 3 + elif self.rot <=-3: + self.set_vol(self.vol - step) + self.rot += 3 + + def on_button (self, event): + if event.value == 0: # button up + return + self.rot = 0 + if self.state == "FREQ": + self.state = "VOL" + else: + self.state = "FREQ" + self.update_status_bar () + + + def set_vol (self, vol): + g = self.volume_range() + self.vol = max(g[0], min(g[1], vol)) + self.volume_control_l.set_k(10**(self.vol/10)) + self.volume_control_r.set_k(10**(self.vol/10)) + self.myform['volume'].set_value(self.vol) + self.update_status_bar () + + def set_squelch(self,squelch_threshold): + try: + self.guts.stereo_carrier_pll_recovery.set_lock_threshold(squelch_threshold); + except: + print "FYI: This implementation of the stereo_carrier_pll_recovery has no squelch implementation yet" + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = usrp.tune(self.u, 0, self.subdev, target_freq) + + if r: + self.freq = target_freq + self.myform['freq'].set_value(target_freq) # update displayed value + self.myform['freq_slider'].set_value(target_freq) # update displayed value + self.update_status_bar() + self._set_status_msg("OK", 0) + return True + + self._set_status_msg("Failed", 0) + return False + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev.set_gain(gain) + + def update_status_bar (self): + msg = "Volume:%r Setting:%s" % (self.vol, self.state) + self._set_status_msg(msg, 1) + self.src_fft.set_baseband_freq(self.freq) + + def volume_range(self): + return (-20.0, 0.0, 0.5) + + +if __name__ == '__main__': + app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX") + app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py index 69f810bb..44f86885 100755 --- a/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py +++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py @@ -1,12 +1,32 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir from gnuradio import audio from gnuradio import usrp -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math @@ -19,13 +39,14 @@ def pick_subdevice(u): """ return usrp.pick_subdev(u, (usrp_dbid.TV_RX, usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3, usrp_dbid.BASIC_RX)) -class wfm_rx_graph (gr.flow_graph): +class wfm_rx_block (gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser=OptionParser(option_class=eng_option) parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, @@ -77,7 +98,7 @@ class wfm_rx_graph (gr.flow_graph): #print len(chan_filt_coeffs) chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) - self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation) + self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) self.volume_control = gr.multiply_const_ff(self.vol) @@ -146,8 +167,8 @@ class wfm_rx_graph (gr.flow_graph): if __name__ == '__main__': - fg = wfm_rx_graph() + tb = wfm_rx_block() try: - fg.run() + tb.run() except KeyboardInterrupt: pass diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py index 34989ce4..84992955 100755 --- a/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py +++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py @@ -1,14 +1,34 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir from gnuradio import audio from gnuradio import usrp -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from gnuradio.wxgui import slider, powermate -from gnuradio.wxgui import stdgui, fftsink, form, scopesink +from gnuradio.wxgui import stdgui2, fftsink2, form, scopesink2 from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math import wx @@ -22,11 +42,12 @@ def pick_subdevice(u): """ return usrp.pick_subdev(u, (usrp_dbid.TV_RX, usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3, usrp_dbid.BASIC_RX)) -class wfm_rx_graph (stdgui.gui_flow_graph): +class wfm_rx_block (stdgui2.std_top_block): def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) parser=OptionParser(option_class=eng_option) parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, @@ -62,11 +83,11 @@ class wfm_rx_graph (stdgui.gui_flow_graph): adc_rate = self.u.adc_rate() # 64 MS/s usrp_decim = 200 self.u.set_decim_rate(usrp_decim) - usrp_rate = adc_rate / usrp_decim # 320 kS/s + usrp_rate = adc_rate / usrp_decim # 320 kS/s chanfilt_decim = 1 demod_rate = usrp_rate / chanfilt_decim audio_decimation = 10 - audio_rate = demod_rate / audio_decimation # 32 kHz + audio_rate = 3*demod_rate / audio_decimation/2 # 48 kHz if options.rx_subdev_spec is None: options.rx_subdev_spec = pick_subdevice(self.u) @@ -75,18 +96,21 @@ class wfm_rx_graph (stdgui.gui_flow_graph): self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) - chan_filt_coeffs = optfir.low_pass (1, # gain + chan_filt_coeffs = gr.firdes.low_pass_2 (1, # gain usrp_rate, # sampling rate - 80e3, # passband cutoff - 115e3, # stopband cutoff - 0.1, # passband ripple - 60) # stopband attenuation - #print len(chan_filt_coeffs) + 90e3, # passband cutoff + 30e3, # transition bandwidth + 70, # stopband attenuation + gr.firdes.WIN_BLACKMAN) + print len(chan_filt_coeffs) chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + self.rchan_sample = blks2.rational_resampler_fff(3,2) + self.lchan_sample = blks2.rational_resampler_fff(3,2) - #self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation) - self.guts = blks.wfm_rcv_pll (self, demod_rate, audio_decimation) + + #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) + self.guts = blks2.wfm_rcv_pll (demod_rate, audio_decimation) # FIXME rework {add,multiply}_const_* to handle multiple streams self.volume_control_l = gr.multiply_const_ff(self.vol) @@ -99,8 +123,9 @@ class wfm_rx_graph (stdgui.gui_flow_graph): # now wire it all together self.connect (self.u, chan_filt, self.guts) - self.connect ((self.guts, 0), self.volume_control_l, (audio_sink, 0)) - self.connect ((self.guts, 1), self.volume_control_r, (audio_sink, 1)) + self.connect((self.guts, 0), self.lchan_sample,self.volume_control_l,(audio_sink,0)) + self.connect((self.guts, 1), self.rchan_sample,self.volume_control_r,(audio_sink,1)) + try: self.guts.stereo_carrier_pll_recovery.squelch_enable(True) except: @@ -145,34 +170,35 @@ class wfm_rx_graph (stdgui.gui_flow_graph): if 1: - self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP", - fft_size=512, sample_rate=usrp_rate) + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP", + fft_size=512, sample_rate=usrp_rate, + ref_scale=32768.0, ref_level=0, y_divs=12) self.connect (self.u, self.src_fft) vbox.Add (self.src_fft.win, 4, wx.EXPAND) if 1: - post_fm_demod_fft = fftsink.fft_sink_f (self, self.panel, title="Post FM Demod", - fft_size=512, sample_rate=demod_rate, - y_per_div=10, ref_level=0) + post_fm_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod", + fft_size=512, sample_rate=demod_rate, + y_per_div=10, ref_level=0) self.connect (self.guts.fm_demod, post_fm_demod_fft) vbox.Add (post_fm_demod_fft.win, 4, wx.EXPAND) if 0: - post_stereo_carrier_generator_fft = fftsink.fft_sink_c (self, self.panel, title="Post Stereo_carrier_generator", + post_stereo_carrier_generator_fft = fftsink2.fft_sink_c (self.panel, title="Post Stereo_carrier_generator", fft_size=512, sample_rate=audio_rate, y_per_div=10, ref_level=0) self.connect (self.guts.stereo_carrier_generator, post_stereo_carrier_generator_fft) vbox.Add (post_stereo_carrier_generator_fft.win, 4, wx.EXPAND) if 0: - post_deemphasis_left = fftsink.fft_sink_f (self, self.panel, title="Post_Deemphasis_Left", + post_deemphasis_left = fftsink2.fft_sink_f (self.panel, title="Post_Deemphasis_Left", fft_size=512, sample_rate=audio_rate, y_per_div=10, ref_level=0) self.connect (self.guts.deemph_Left, post_deemphasis_left) vbox.Add (post_deemphasis_left.win, 4, wx.EXPAND) if 0: - post_deemphasis_right = fftsink.fft_sink_f (self, self.panel, title="Post_Deemphasis_Right", + post_deemphasis_right = fftsink2.fft_sink_f(self.panel, title="Post_Deemphasis_Right", fft_size=512, sample_rate=audio_rate, y_per_div=10, ref_level=-20) self.connect (self.guts.deemph_Left, post_deemphasis_right) @@ -180,15 +206,15 @@ class wfm_rx_graph (stdgui.gui_flow_graph): if 0: - LmR_fft = fftsink.fft_sink_f (self, self.panel, title="LmR", - fft_size=512, sample_rate=audio_rate, - y_per_div=10, ref_level=-20) + LmR_fft = fftsink2.fft_sink_f(self.panel, title="LmR", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=-20) self.connect (self.guts.LmR_real,LmR_fft) vbox.Add (LmR_fft.win, 4, wx.EXPAND) if 0: - self.scope = scopesink.scope_sink_f(self, self.panel, sample_rate=demod_rate) - self.connect (self.guts.fm_demod_a,self.scope) + self.scope = scopesink2.scope_sink_f(self.panel, sample_rate=demod_rate) + self.connect (self.guts.fm_demod,self.scope) vbox.Add (self.scope.win,4,wx.EXPAND) # control area form at bottom @@ -321,5 +347,5 @@ class wfm_rx_graph (stdgui.gui_flow_graph): if __name__ == '__main__': - app = stdgui.stdapp (wfm_rx_graph, "USRP WFM RX") + app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX") app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py new file mode 100755 index 00000000..75bbc0ac --- /dev/null +++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py @@ -0,0 +1,399 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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. +# + +""" +Here is a bit of code that will receive SCA analog subcarriers of FM +Broadcast Stations using the USRP. It is a modified version of +usrp_wfm_rcv.py. + +Common SCA frequencies are 67 kHz and 92 kHz. SCA is used for Reading +Services for the Blind, Background Music, Foreign Language Services, and +other services. Remember you may hear static when tuned to a FM station +because this code only outputs SCA audio. + +The USRP gain is critical for good decoding. Adjust for minimum noise. + I use the Post FM Demod FFT to check for SCA subcarriers and to adjust +the USRP gain for the lowest noise floor. The stereo pilot at 19 KHz, +the stereo difference signal around 38 KHz, and RDS at 57 KHz are also +displayed on the Post FM Demod FFT if present. + +The range below 67 kHz is used for SCA only when Stereo is not used. + +The SCA recieve range is not as far as the main FM carrier receive range +so tune in strong local stations first. + +I tried to comment the code with the various parameters. There seems to +be several choices for a couple of them. I coded the common ones I see +here. + +In the local area there are a couple of stations using digital SCA. +These look similar to narrow DRM signals and I wonder if they are using +OFDM. +""" + + +from gnuradio import gr, gru, eng_notation, optfir +from gnuradio import audio +from gnuradio import usrp +from gnuradio.blks2impl.fm_emph import fm_deemph +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import slider, powermate +from gnuradio.wxgui import stdgui2, fftsink2, form +from optparse import OptionParser +from usrpm import usrp_dbid +import sys +import math +import wx + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + Try for one of these, in order: TV_RX, BASIC_RX, whatever is on side A. + + @return a subdev_spec + """ + return usrp.pick_subdev(u, (usrp_dbid.TV_RX, + usrp_dbid.TV_RX_REV_2, + usrp_dbid.BASIC_RX)) + + +class wfm_rx_sca_block (stdgui2.std_top_block): + def __init__(self,frame,panel,vbox,argv): + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) + + parser=OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=A)") + parser.add_option("-f", "--freq", type="eng_float", default=100.1e6, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=40, + help="set gain in dB (default is midpoint)") + parser.add_option("-V", "--volume", type="eng_float", default=None, + help="set volume (default is midpoint)") + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp") + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + self.frame = frame + self.panel = panel + + self.vol = 0 + self.state = "FREQ" + self.freq = 0 + + # build graph + + self.u = usrp.source_c() # usrp is data source + + adc_rate = self.u.adc_rate() # 64 MS/s + usrp_decim = 200 + self.u.set_decim_rate(usrp_decim) + usrp_rate = adc_rate / usrp_decim # 320 kS/s + chanfilt_decim = 1 + demod_rate = usrp_rate / chanfilt_decim + sca_chanfilt_decim = 5 + sca_demod_rate = demod_rate / sca_chanfilt_decim #64 kHz + audio_decimation = 2 + audio_rate = sca_demod_rate / audio_decimation # 32 kHz + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + print "Using RX d'board %s" % (self.subdev.side_and_name(),) + + #Create filter to get main FM Channel we want + chan_filt_coeffs = optfir.low_pass (1, # gain + usrp_rate, # sampling rate + 100e3, # passband cutoff + 140e3, # stopband cutoff + 0.1, # passband ripple + 60) # stopband attenuation + #print len(chan_filt_coeffs) + chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + + #Create demodulator block for Main FM Channel + max_dev = 75e3 + fm_demod_gain = demod_rate/(2*math.pi*max_dev) + self.fm_demod = gr.quadrature_demod_cf (fm_demod_gain) + + # Note - deemphasis is not applied to the Main FM Channel as main audio is not decoded + + # SCA Devation is 10% of carrier but some references say 20% if mono with one SCA (6 KHz seems typical) + max_sca_dev = 6e3 + + # Create filter to get SCA channel we want + sca_chan_coeffs = gr.firdes.low_pass (1.0, # gain + demod_rate, # sampling rate + max_sca_dev, # low pass cutoff freq + max_sca_dev/3, # width of trans. band + gr.firdes.WIN_HANN) # filter type + + self.ddc = gr.freq_xlating_fir_filter_fcf(sca_chanfilt_decim, # decimation rate + sca_chan_coeffs, # taps + 0, # frequency translation amount (Gets set by the UI) + demod_rate) # input sample rate + + #Create demodulator block for SCA Channel + sca_demod_gain = sca_demod_rate/(2*math.pi*max_sca_dev) + self.fm_demod_sca = gr.quadrature_demod_cf (sca_demod_gain) + + + # SCA analog audio is bandwidth limited to 5 KHz + max_sca_audio_freq = 5.0e3 + # SCA analog deephasis is 150 uS (75 uS may be used) + sca_tau = 150e-6 + + # compute FIR filter taps for SCA audio filter + audio_coeffs = gr.firdes.low_pass (1.0, # gain + sca_demod_rate, # sampling rate + max_sca_audio_freq, # low pass cutoff freq + max_sca_audio_freq/2.5, # width of trans. band + gr.firdes.WIN_HAMMING) + + # input: float; output: float + self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) + + # Create deemphasis block that is applied after SCA demodulation + self.deemph = fm_deemph (audio_rate, sca_tau) + + self.volume_control = gr.multiply_const_ff(self.vol) + + # sound card as final sink + audio_sink = audio.sink (int (audio_rate), + options.audio_output, + False) # ok_to_block + + # now wire it all together + self.connect (self.u, chan_filt, self.fm_demod, self.ddc, self.fm_demod_sca) + self.connect (self.fm_demod_sca, self.audio_filter, self.deemph, self.volume_control, audio_sink) + + self._build_gui(vbox, usrp_rate, demod_rate, sca_demod_rate, audio_rate) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.volume is None: + g = self.volume_range() + options.volume = float(g[0]+g[1])/2 + + if abs(options.freq) < 1e6: + options.freq *= 1e6 + + # set initial values + + self.set_gain(options.gain) + self.set_vol(options.volume) + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + self.set_sca_freq(67000) # A common SCA Frequency + + + def _set_status_msg(self, msg, which=0): + self.frame.GetStatusBar().SetStatusText(msg, which) + + + def _build_gui(self, vbox, usrp_rate, demod_rate, sca_demod_rate, audio_rate): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + def _form_set_sca_freq(kv): + return self.set_sca_freq(kv['sca_freq']) + + if 1: + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP", + fft_size=512, sample_rate=usrp_rate, + ref_scale=32768.0, ref_level=0, y_divs=12) + self.connect (self.u, self.src_fft) + vbox.Add (self.src_fft.win, 4, wx.EXPAND) + + if 1: + post_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod", + fft_size=2048, sample_rate=demod_rate, + y_per_div=10, ref_level=0) + self.connect (self.fm_demod, post_demod_fft) + vbox.Add (post_demod_fft.win, 4, wx.EXPAND) + + if 0: + post_demod_sca_fft = fftsink2.fft_sink_f(self.panel, title="Post SCA Demod", + fft_size=1024, sample_rate=sca_demod_rate, + y_per_div=10, ref_level=0) + self.connect (self.fm_demod_sca, post_demod_sca_fft) + vbox.Add (post_demod_sca_fft.win, 4, wx.EXPAND) + + if 0: + post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post SCA Deemph", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=-20) + self.connect (self.deemph, post_deemph_fft) + vbox.Add (post_deemph_fft.win, 4, wx.EXPAND) + + + # control area form at bottom + self.myform = myform = form.form() + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0) + myform['freq_slider'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3, + range=(87.9e6, 108.1e6, 0.1e6), + callback=self.set_freq) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + myform['sca_freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="SCA", weight=1, + callback=myform.check_input_and_call(_form_set_sca_freq, self._set_status_msg)) + + hbox.Add((5,0), 0) + myform['sca_freq_slider'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3, + range=(38e3, 100e3, 1.0e3), + callback=self.set_sca_freq) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['volume'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume", + weight=3, range=self.volume_range(), + callback=self.set_vol) + hbox.Add((5,0), 1) + + myform['gain'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, range=self.subdev.gain_range(), + callback=self.set_gain) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + try: + self.knob = powermate.powermate(self.frame) + self.rot = 0 + powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate) + powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button) + except: + print "FYI: No Powermate or Contour Knob found" + + + def on_rotate (self, event): + self.rot += event.delta + if (self.state == "FREQ"): + if self.rot >= 3: + self.set_freq(self.freq + .1e6) + self.rot -= 3 + elif self.rot <=-3: + self.set_freq(self.freq - .1e6) + self.rot += 3 + else: + step = self.volume_range()[2] + if self.rot >= 3: + self.set_vol(self.vol + step) + self.rot -= 3 + elif self.rot <=-3: + self.set_vol(self.vol - step) + self.rot += 3 + + def on_button (self, event): + if event.value == 0: # button up + return + self.rot = 0 + if self.state == "FREQ": + self.state = "VOL" + else: + self.state = "FREQ" + self.update_status_bar () + + + def set_vol (self, vol): + g = self.volume_range() + self.vol = max(g[0], min(g[1], vol)) + self.volume_control.set_k(10**(self.vol/10)) + self.myform['volume'].set_value(self.vol) + self.update_status_bar () + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = usrp.tune(self.u, 0, self.subdev, target_freq) + + if r: + self.freq = target_freq + self.myform['freq'].set_value(target_freq) # update displayed value + self.myform['freq_slider'].set_value(target_freq) # update displayed value + self.update_status_bar() + self._set_status_msg("OK", 0) + return True + + self._set_status_msg("Failed", 0) + return False + + def set_sca_freq(self, target_sca_freq): + + self.ddc.set_center_freq(-target_sca_freq) + self.myform['sca_freq'].set_value(target_sca_freq) # update displayed value + self.myform['sca_freq_slider'].set_value(target_sca_freq) # update displayed value + self.update_status_bar() + self._set_status_msg("OK", 0) + return True + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev.set_gain(gain) + + def update_status_bar (self): + msg = "Volume:%r Setting:%s" % (self.vol, self.state) + self._set_status_msg(msg, 1) + self.src_fft.set_baseband_freq(self.freq) + + def volume_range(self): + return (-20.0, 0.0, 0.5) + + +if __name__ == '__main__': + app = stdgui2.stdapp (wfm_rx_sca_block, "USRP WFM SCA RX") + app.MainLoop () diff --git a/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py b/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py index 7c04c988..11b8c431 100755 --- a/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py +++ b/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py @@ -1,14 +1,34 @@ #!/usr/bin/env python +# +# Copyright 2005,2006,2007 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 import gr, gru, eng_notation, optfir from gnuradio import audio from gnuradio import usrp -from gnuradio import blks +from gnuradio import blks2 from gnuradio.eng_option import eng_option from gnuradio.wxgui import slider, powermate -from gnuradio.wxgui import stdgui, fftsink, form +from gnuradio.wxgui import stdgui2, fftsink2, form from optparse import OptionParser -import usrp_dbid +from usrpm import usrp_dbid import sys import math import wx @@ -22,12 +42,13 @@ def pick_subdevice(u): """ return usrp.pick_subdev(u, (usrp_dbid.TV_RX, usrp_dbid.TV_RX_REV_2, + usrp_dbid.TV_RX_REV_3, usrp_dbid.BASIC_RX)) -class wxapt_rx_graph (stdgui.gui_flow_graph): +class wxapt_rx_block (stdgui2.std_top_block): def __init__(self,frame,panel,vbox,argv): - stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv) + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) parser=OptionParser(option_class=eng_option) parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, @@ -83,7 +104,7 @@ class wxapt_rx_graph (stdgui.gui_flow_graph): #print len(chan_filt_coeffs) chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) - self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation) + self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) self.volume_control = gr.multiply_const_ff(self.vol) @@ -126,20 +147,21 @@ class wxapt_rx_graph (stdgui.gui_flow_graph): if 1: - self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP", - fft_size=512, sample_rate=usrp_rate) + self.src_fft = fftsink2.fft_sink_c (self.panel, title="Data from USRP", + fft_size=512, sample_rate=usrp_rate, + ref_scale=32768.0, ref_level=0, y_divs=12) self.connect (self.u, self.src_fft) vbox.Add (self.src_fft.win, 4, wx.EXPAND) if 1: - post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post Deemph", + post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post Deemph", fft_size=512, sample_rate=demod_rate, y_per_div=10, ref_level=-20) self.connect (self.guts.deemph, post_deemph_fft) vbox.Add (post_deemph_fft.win, 4, wx.EXPAND) if 1: - post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Filter", + post_filt_fft = fftsink2.fft_sink_f (self.panel, title="Post Filter", fft_size=512, sample_rate=audio_rate, y_per_div=10, ref_level=0) self.connect (self.guts.audio_filter, post_filt_fft) @@ -263,5 +285,5 @@ class wxapt_rx_graph (stdgui.gui_flow_graph): if __name__ == '__main__': - app = stdgui.stdapp (wxapt_rx_graph, "USRP WXAPT RX") + app = stdgui2.stdapp (wxapt_rx_block, "USRP WXAPT RX") app.MainLoop () diff --git a/gnuradio-examples/python/usrp/wfm_rcv_file.py b/gnuradio-examples/python/usrp/wfm_rcv_file.py deleted file mode 100755 index 2c8d4f76..00000000 --- a/gnuradio-examples/python/usrp/wfm_rcv_file.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, eng_notation -from gnuradio import audio -# from gnuradio import usrp -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys -import math - - -# -# return a gr.flow_graph -# -def build_graph (input_filename, repeat): - adc_rate = 64e6 # USRP A/D sampling rate - decim = 250 # FPGA decimated by this amount - - quad_rate = adc_rate / decim # 256 kHz (the sample rate of the file) - audio_decimation = 8 - audio_rate = quad_rate / audio_decimation # 32 kHz - - fg = gr.flow_graph () - - # usrp is data source - # src = usrp.source_c (0, decim) - # src.set_rx_freq (0, -IF_freq) - - src = gr.file_source (gr.sizeof_gr_complex, input_filename, repeat) - - (head, tail) = build_pipeline (fg, quad_rate, audio_decimation) - - # sound card as final sink - audio_sink = audio.sink (int (audio_rate)) - - # now wire it all together - fg.connect (src, head) - fg.connect (tail, (audio_sink, 0)) - - return fg - -def build_pipeline (fg, quad_rate, audio_decimation): - '''Given a flow_graph, fg, construct a pipeline - for demodulating a broadcast FM signal. The - input is the downconverteed complex baseband - signal. The output is the demodulated audio. - - build_pipeline returns a two element tuple - containing the input and output endpoints. - ''' - fm_demod_gain = 2200.0/32768.0 - audio_rate = quad_rate / audio_decimation - volume = 1.0 - - # input: complex; output: float - fm_demod = gr.quadrature_demod_cf (volume*fm_demod_gain) - - # compute FIR filter taps for audio filter - width_of_transition_band = audio_rate / 32 - audio_coeffs = gr.firdes.low_pass (1.0, # gain - quad_rate, # sampling rate - audio_rate/2 - width_of_transition_band, - width_of_transition_band, - gr.firdes.WIN_HAMMING) - - TAU = 75e-6 # 75us in US, 50us in EUR - fftaps = [ 1 - math.exp(-1/TAU/quad_rate), 0] - fbtaps= [ 0 , math.exp(-1/TAU/quad_rate) ] - deemph = gr.iir_filter_ffd(fftaps,fbtaps) - - # input: float; output: float - audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs) - - fg.connect (fm_demod, deemph) - fg.connect (deemph, audio_filter) - return ((fm_demod, 0), (audio_filter, 0)) - - -def main (): - usage = "usage: %prog [options] filename" - parser = OptionParser (option_class=eng_option, usage=usage) - parser.add_option ("-r", "--repeat", action="store_true", default=False) - # parser.add_option (... your stuff here...) - (options, args) = parser.parse_args () - - if len (args) != 1: - parser.print_help () - sys.exit (1) - - fg = build_graph (args[0], options.repeat) - - fg.start () # fork thread(s) and return - raw_input ('Press Enter to quit: ') - fg.stop () - -if __name__ == '__main__': - main () - - diff --git a/gnuradio-examples/python/usrp2/Makefile.am b/gnuradio-examples/python/usrp2/Makefile.am new file mode 100644 index 00000000..cca81334 --- /dev/null +++ b/gnuradio-examples/python/usrp2/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright 2004,2005,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. +# + +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/usrp2 +dist_ourdata_DATA = \ + qt_wfm_interface.ui \ + qt_wfm_interface.py + + +dist_ourdata_SCRIPTS = \ + usrp2_wfm_qt.py \ + usrp2_wfm_rcv.py diff --git a/gnuradio-examples/python/usrp2/Makefile.in b/gnuradio-examples/python/usrp2/Makefile.in new file mode 100644 index 00000000..015cfcec --- /dev/null +++ b/gnuradio-examples/python/usrp2/Makefile.in @@ -0,0 +1,936 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gnuradio-examples/python/usrp2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/usrp2 +dist_ourdata_DATA = \ + qt_wfm_interface.ui \ + qt_wfm_interface.py + +dist_ourdata_SCRIPTS = \ + usrp2_wfm_qt.py \ + usrp2_wfm_rcv.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnuradio-examples/python/usrp2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnuradio-examples/python/usrp2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dist_ourdataSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/usrp2/qt_wfm_interface.py b/gnuradio-examples/python/usrp2/qt_wfm_interface.py new file mode 100644 index 00000000..4c4367ed --- /dev/null +++ b/gnuradio-examples/python/usrp2/qt_wfm_interface.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'qt_wfm_interface.ui' +# +# Created: Thu Jun 18 23:41:03 2009 +# by: PyQt4 UI code generator 4.4.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_InterfaceWindow(object): + def setupUi(self, InterfaceWindow): + InterfaceWindow.setObjectName("InterfaceWindow") + InterfaceWindow.resize(909, 711) + self.centralwidget = QtGui.QWidget(InterfaceWindow) + self.centralwidget.setObjectName("centralwidget") + self.closeButton = QtGui.QPushButton(self.centralwidget) + self.closeButton.setGeometry(QtCore.QRect(790, 580, 101, 31)) + self.closeButton.setObjectName("closeButton") + self.sinkFrame = QtGui.QFrame(self.centralwidget) + self.sinkFrame.setGeometry(QtCore.QRect(10, 10, 891, 501)) + self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel) + self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised) + self.sinkFrame.setObjectName("sinkFrame") + self.horizontalLayoutWidget = QtGui.QWidget(self.sinkFrame) + self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 871, 481)) + self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") + self.sinkLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget) + self.sinkLayout.setObjectName("sinkLayout") + self.channelModeBox = QtGui.QGroupBox(self.centralwidget) + self.channelModeBox.setGeometry(QtCore.QRect(10, 520, 261, 131)) + self.channelModeBox.setObjectName("channelModeBox") + self.bandwidthabel = QtGui.QLabel(self.channelModeBox) + self.bandwidthabel.setGeometry(QtCore.QRect(10, 90, 101, 17)) + self.bandwidthabel.setObjectName("bandwidthabel") + self.bandwidthEdit = QtGui.QLineEdit(self.channelModeBox) + self.bandwidthEdit.setGeometry(QtCore.QRect(130, 90, 113, 23)) + self.bandwidthEdit.setObjectName("bandwidthEdit") + self.gainEdit = QtGui.QLineEdit(self.channelModeBox) + self.gainEdit.setGeometry(QtCore.QRect(130, 60, 113, 23)) + self.gainEdit.setObjectName("gainEdit") + self.gainLabel = QtGui.QLabel(self.channelModeBox) + self.gainLabel.setGeometry(QtCore.QRect(10, 60, 111, 20)) + self.gainLabel.setObjectName("gainLabel") + self.freqEdit = QtGui.QLineEdit(self.channelModeBox) + self.freqEdit.setGeometry(QtCore.QRect(130, 30, 113, 23)) + self.freqEdit.setObjectName("freqEdit") + self.freqLabel = QtGui.QLabel(self.channelModeBox) + self.freqLabel.setGeometry(QtCore.QRect(10, 30, 111, 17)) + self.freqLabel.setObjectName("freqLabel") + self.pauseButton = QtGui.QPushButton(self.centralwidget) + self.pauseButton.setGeometry(QtCore.QRect(790, 520, 101, 31)) + self.pauseButton.setObjectName("pauseButton") + self.fmBox = QtGui.QGroupBox(self.centralwidget) + self.fmBox.setGeometry(QtCore.QRect(290, 520, 251, 131)) + self.fmBox.setObjectName("fmBox") + self.volumeEdit = QtGui.QLineEdit(self.fmBox) + self.volumeEdit.setGeometry(QtCore.QRect(130, 20, 113, 23)) + self.volumeEdit.setObjectName("volumeEdit") + self.volumeLabel = QtGui.QLabel(self.fmBox) + self.volumeLabel.setGeometry(QtCore.QRect(10, 20, 111, 17)) + self.volumeLabel.setObjectName("volumeLabel") + InterfaceWindow.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(InterfaceWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 909, 24)) + self.menubar.setObjectName("menubar") + self.menuFile = QtGui.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + InterfaceWindow.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(InterfaceWindow) + self.statusbar.setObjectName("statusbar") + InterfaceWindow.setStatusBar(self.statusbar) + self.actionExit = QtGui.QAction(InterfaceWindow) + self.actionExit.setObjectName("actionExit") + self.menuFile.addAction(self.actionExit) + self.menubar.addAction(self.menuFile.menuAction()) + + self.retranslateUi(InterfaceWindow) + QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), InterfaceWindow.close) + QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), InterfaceWindow.close) + QtCore.QMetaObject.connectSlotsByName(InterfaceWindow) + InterfaceWindow.setTabOrder(self.closeButton, self.gainEdit) + InterfaceWindow.setTabOrder(self.gainEdit, self.freqEdit) + InterfaceWindow.setTabOrder(self.freqEdit, self.bandwidthEdit) + + def retranslateUi(self, InterfaceWindow): + InterfaceWindow.setWindowTitle(QtGui.QApplication.translate("InterfaceWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) + self.closeButton.setText(QtGui.QApplication.translate("InterfaceWindow", "Close", None, QtGui.QApplication.UnicodeUTF8)) + self.channelModeBox.setTitle(QtGui.QApplication.translate("InterfaceWindow", "USRP Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.bandwidthabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Bandwidth (Hz)", None, QtGui.QApplication.UnicodeUTF8)) + self.gainLabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Gain (dB)", None, QtGui.QApplication.UnicodeUTF8)) + self.freqLabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Frequency", None, QtGui.QApplication.UnicodeUTF8)) + self.pauseButton.setText(QtGui.QApplication.translate("InterfaceWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8)) + self.fmBox.setTitle(QtGui.QApplication.translate("InterfaceWindow", "FM Tuner Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.volumeLabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Volume", None, QtGui.QApplication.UnicodeUTF8)) + self.menuFile.setTitle(QtGui.QApplication.translate("InterfaceWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) + self.actionExit.setText(QtGui.QApplication.translate("InterfaceWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8)) + diff --git a/gnuradio-examples/python/usrp2/qt_wfm_interface.ui b/gnuradio-examples/python/usrp2/qt_wfm_interface.ui new file mode 100644 index 00000000..16902d9f --- /dev/null +++ b/gnuradio-examples/python/usrp2/qt_wfm_interface.ui @@ -0,0 +1,253 @@ + + InterfaceWindow + + + + 0 + 0 + 909 + 711 + + + + MainWindow + + + + + + 790 + 580 + 101 + 31 + + + + Close + + + + + + 10 + 10 + 891 + 501 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 871 + 481 + + + + + + + + + 10 + 520 + 261 + 131 + + + + USRP Parameters + + + + + 10 + 90 + 101 + 17 + + + + Bandwidth (Hz) + + + + + + 130 + 90 + 113 + 23 + + + + + + + 130 + 60 + 113 + 23 + + + + + + + 10 + 60 + 111 + 20 + + + + Gain (dB) + + + + + + 130 + 30 + 113 + 23 + + + + + + + 10 + 30 + 111 + 17 + + + + Frequency + + + + + + + 790 + 520 + 101 + 31 + + + + Pause + + + + + + 290 + 520 + 251 + 131 + + + + FM Tuner Parameters + + + + + 130 + 20 + 113 + 23 + + + + + + + 10 + 20 + 111 + 17 + + + + Volume + + + + + + + + 0 + 0 + 909 + 24 + + + + + &File + + + + + + + + + E&xit + + + + + closeButton + gainEdit + freqEdit + bandwidthEdit + + + + + closeButton + clicked() + InterfaceWindow + close() + + + 322 + 623 + + + 66 + 561 + + + + + actionExit + triggered() + InterfaceWindow + close() + + + -1 + -1 + + + 617 + 327 + + + + + diff --git a/gnuradio-examples/python/usrp2/usrp2_wfm_qt.py b/gnuradio-examples/python/usrp2/usrp2_wfm_qt.py new file mode 100755 index 00000000..0be21ceb --- /dev/null +++ b/gnuradio-examples/python/usrp2/usrp2_wfm_qt.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2007,2008,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. +# + +from gnuradio import gr, gru, eng_notation, optfir +from gnuradio import audio +from gnuradio import usrp2 +from gnuradio import blks2 +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys +import math + + +try: + from gnuradio.qtgui import qtgui + from PyQt4 import QtGui, QtCore + import sip +except ImportError: + print "Please install gr-qtgui." + sys.exit(1) + +try: + from qt_wfm_interface import Ui_InterfaceWindow +except ImportError: + print "Error: could not find qt_wfm_interface.py:" + print "\tPlease run: \"pyuic4 qt_wfm_interface.ui -o qt_wfm_interface.py\"" + sys.exit(1) + +print "This program is not in a proper working state. Comment this out if you want to play." +sys.exit(1) + + +# //////////////////////////////////////////////////////////////////// +# Define the QT Interface and Control Dialog +# //////////////////////////////////////////////////////////////////// + + +class dialog_box(QtGui.QMainWindow): + def __init__(self, snk_usrp, snk_vol, fg, parent=None): + + QtGui.QWidget.__init__(self, parent) + self.gui = Ui_InterfaceWindow() + self.gui.setupUi(self) + + self.fg = fg + + # Set USRP parameters + self.set_bw(self.fg.usrp_bw()) + self.set_freq(self.fg.freq()) + self.set_gain(self.fg.gain()) + self.set_volume(self.fg.volume()) + + # Add the qtsnk widgets to the hlayout box + self.gui.sinkLayout.addWidget(snk_usrp) + self.gui.sinkLayout.addWidget(snk_vol) + + + # Connect up some signals + self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"), + self.pauseFg) + + self.connect(self.gui.bandwidthEdit, QtCore.SIGNAL("editingFinished()"), + self.bwEditText) + self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"), + self.freqEditText) + self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"), + self.gainEditText) + + self.connect(self.gui.volumeEdit, QtCore.SIGNAL("editingFinished()"), + self.volumeEditText) + + + def pauseFg(self): + if(self.gui.pauseButton.text() == "Pause"): + self.fg.stop() + self.fg.wait() + self.gui.pauseButton.setText("Unpause") + else: + self.fg.start() + self.gui.pauseButton.setText("Pause") + + + # Accessor functions for Gui to manipulate USRP + def set_bw(self, bw): + self.gui.bandwidthEdit.setText(QtCore.QString("%1").arg(bw)) + + def set_freq(self, freq): + self.gui.freqEdit.setText(QtCore.QString("%1").arg(freq)) + + def set_gain(self, gain): + self.gui.gainEdit.setText(QtCore.QString("%1").arg(gain)) + + def set_volume(self, vol): + self.gui.volumeEdit.setText(QtCore.QString("%1").arg(vol)) + + def bwEditText(self): + try: + bw = self.gui.bandwidthEdit.text().toDouble()[0] + self.fg.set_usrp_bw(bw) + except RuntimeError: + pass + + def freqEditText(self): + try: + freq = self.gui.freqEdit.text().toDouble()[0] + self.fg.set_freq(freq) + except RuntimeError: + pass + + def gainEditText(self): + try: + gain = self.gui.gainEdit.text().toDouble()[0] + self.fg.set_gain(gain) + except RuntimeError: + pass + + def volumeEditText(self): + try: + vol = self.gui.volumeEdit.text().toDouble()[0] + self.fg.set_volume(vol) + except RuntimeError: + pass + + + + +# //////////////////////////////////////////////////////////////////// +# Define the GNU Radio Top Block +# //////////////////////////////////////////////////////////////////// + + +class wfm_rx_block (gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + parser = OptionParser(option_class=eng_option) + parser.add_option("-e", "--interface", type="string", default="eth0", + help="select Ethernet interface, default is eth0") + parser.add_option("-m", "--mac-addr", type="string", default="", + help="select USRP by MAC address, default is auto-select") + #parser.add_option("-A", "--antenna", default=None, + # help="select Rx Antenna (only on RFX-series boards)") + parser.add_option("-f", "--freq", type="eng_float", default=100.1, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-V", "--volume", type="eng_float", default=None, + help="set volume (default is midpoint)") + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp") + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + self._volume = options.volume + self._usrp_freq = options.freq + self._usrp_gain = options.gain + self._audio_rate = int(32e3) + + # build graph + + self.u = usrp2.source_32fc(options.interface, options.mac_addr) + + # calculate decimation values to get USRP BW at 320 kHz + self.calculate_usrp_bw(320e3) + + self.set_decim(self._usrp_decim) + + #FIXME: need named constants and text descriptions available to (gr-)usrp2 even + #when usrp(1) module is not built. A usrp_common module, perhaps? + dbid = self.u.daughterboard_id() + print "Using RX d'board 0x%04X" % (dbid,) + #if not (dbid == 0x0001 or #usrp_dbid.BASIC_RX + # dbid == 0x0003 or #usrp_dbid.TV_RX + # dbid == 0x000c or #usrp_dbid.TV_RX_REV_2 + # dbid == 0x0040): #usrp_dbid.TV_RX_REV_3 + # print "This daughterboard does not cover the required frequency range" + # print "for this application. Please use a BasicRX or TVRX daughterboard." + # raw_input("Press ENTER to continue anyway, or Ctrl-C to exit.") + + chan_filt_coeffs = optfir.low_pass (1, # gain + self._usrp_rate, # sampling rate + 80e3, # passband cutoff + 115e3, # stopband cutoff + 0.1, # passband ripple + 60) # stopband attenuation + #print len(chan_filt_coeffs) + chan_filt = gr.fir_filter_ccf (self._chanfilt_decim, chan_filt_coeffs) + + self.guts = blks2.wfm_rcv (self._demod_rate, self._audio_decim) + + self.volume_control = gr.multiply_const_ff(1) + + # sound card as final sink + #audio_sink = audio.sink (int (audio_rate), + # options.audio_output, + # False) # ok_to_block + audio_sink = audio.sink (self._audio_rate, + options.audio_output) + + + if self._usrp_gain is None: + # if no gain was specified, use the mid-point in dB + g = self.u.gain_range() + print "Gain range: ", g + self._usrp_gain = float(g[0]+g[1])/2 + + if self._volume is None: + g = self.volume_range() + self._volume = float(g[0]+g[1])/2 + + if abs(self._usrp_freq) < 1e6: + self._usrp_freq *= 1e6 + + # set initial values + self.set_gain(self._usrp_gain) + self.set_volume(self._volume) + if not(self.set_freq(self._usrp_freq)): + print ("Failed to set initial frequency") + + + # Define a GUI sink to display the received signal + self.qapp = QtGui.QApplication(sys.argv) + fftsize = 2048 + + self.usrp_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + -self._usrp_rate/2.0, self._usrp_rate/2.0, + "Received Signal", True, True, False, True, False, + use_openGL=False) + self.usrp_rx2 = qtgui.sink_f(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + -self._usrp_rate/2.0, self._usrp_rate/2.0, + "Received Signal", True, True, False, True, False) + + # now wire it all together + self.connect (self.u, chan_filt, self.guts, self.volume_control, audio_sink) + self.connect (self.u, self.usrp_rx) + self.connect (self.volume_control, self.usrp_rx2) + + usrp_rx_widget = sip.wrapinstance(self.usrp_rx.pyqwidget(), QtGui.QWidget) + usrp_rx2_widget = sip.wrapinstance(self.usrp_rx2.pyqwidget(), QtGui.QWidget) + + self.main_box = dialog_box(usrp_rx_widget, usrp_rx2_widget, self) + self.main_box.show() + + + def calculate_usrp_bw(self, bw): + """ + Calculate the different decimation rates that make the USRP BW equal to the + input bandwidth parameter 'bw' and the audio bandwidth equal to the system- + wide bandwidth 'self._audio_rate' + """ + + adc_rate = self.u.adc_rate() + d_usrp = int(adc_rate/bw) + bw_real = adc_rate / float(d_usrp) + + d_chan = 1 + demod_rate = bw_real / d_chan + + d_audio = int(bw_real / self._audio_rate) + audio_rate = demod_rate / d_audio + + self._usrp_decim = d_usrp + self._chanfilt_decim = d_chan + self._audio_decim = d_audio + self._demod_rate = demod_rate + self._usrp_rate = bw_real + + print "USRP Decimation: ", self._usrp_decim + print "USRP Bandwidth: ", bw_real + print "Audio Decimation: ", self._audio_decim + print "Audio Bandwidth: ", audio_rate + + def set_volume (self, vol): + g = self.volume_range() + self._volume = max(g[0], min(g[1], vol)) + self.volume_control.set_k(10**(self._volume/10)) + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = self.u.set_center_freq(target_freq) + if r: + self._usrp_freq = target_freq + return True + return False + + def set_usrp_bw(self, bw): + self.calculate_usrp_bw(bw) + + def set_gain(self, gain): + self._usrp_gain = gain + self.u.set_gain(gain) + + def set_decim(self, decim): + self._usrp_decim = int(decim) + self.u.set_decim(self._usrp_decim) + + def volume(self): + return self._volume + + def freq(self): + return self._usrp_freq + + def usrp_bw(self): + return self._usrp_rate + + def gain(self): + return self._usrp_gain + + def decim(self): + return self._usrp_decim + + def volume_range(self): + return (-20.0, 0.0, 0.5) + + +if __name__ == '__main__': + tb = wfm_rx_block() + tb.start() + tb.qapp.exec_() + diff --git a/gnuradio-examples/python/usrp2/usrp2_wfm_rcv.py b/gnuradio-examples/python/usrp2/usrp2_wfm_rcv.py new file mode 100755 index 00000000..8ea5baf5 --- /dev/null +++ b/gnuradio-examples/python/usrp2/usrp2_wfm_rcv.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python +# +# Copyright 2005,2006,2007,2008,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. +# + +from gnuradio import gr, gru, eng_notation, optfir +from gnuradio import audio +from gnuradio import usrp2 +from gnuradio import blks2 +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import slider, powermate +from gnuradio.wxgui import stdgui2, fftsink2, form +from optparse import OptionParser +import sys +import math +import wx + +class wfm_rx_block (stdgui2.std_top_block): + def __init__(self,frame,panel,vbox,argv): + stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv) + + parser = OptionParser(option_class=eng_option) + parser.add_option("-e", "--interface", type="string", default="eth0", + help="select Ethernet interface, default is eth0") + parser.add_option("-m", "--mac-addr", type="string", default="", + help="select USRP by MAC address, default is auto-select") + #parser.add_option("-A", "--antenna", default=None, + # help="select Rx Antenna (only on RFX-series boards)") + parser.add_option("-f", "--freq", type="eng_float", default=100.1, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-V", "--volume", type="eng_float", default=None, + help="set volume (default is midpoint)") + parser.add_option("-O", "--audio-output", type="string", default="", + help="pcm device name. E.g., hw:0,0 or surround51 or /dev/dsp") + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + self.frame = frame + self.panel = panel + + self.vol = 0 + self.state = "FREQ" + self.freq = 0 + + # build graph + + self.u = usrp2.source_32fc(options.interface, options.mac_addr) + + adc_rate = self.u.adc_rate() # 100 MS/s + usrp_decim = 312 + self.u.set_decim(usrp_decim) + usrp_rate = adc_rate / usrp_decim # ~320 kS/s + chanfilt_decim = 1 + demod_rate = usrp_rate / chanfilt_decim + audio_decimation = 10 + audio_rate = demod_rate / audio_decimation # ~32 kHz + + #FIXME: need named constants and text descriptions available to (gr-)usrp2 even + #when usrp(1) module is not built. A usrp_common module, perhaps? + dbid = self.u.daughterboard_id() + print "Using RX d'board 0x%04X" % (dbid,) + if not (dbid == 0x0001 or #usrp_dbid.BASIC_RX + dbid == 0x0003 or #usrp_dbid.TV_RX + dbid == 0x000c or #usrp_dbid.TV_RX_REV_2 + dbid == 0x0040): #usrp_dbid.TV_RX_REV_3 + print "This daughterboard does not cover the required frequency range" + print "for this application. Please use a BasicRX or TVRX daughterboard." + raw_input("Press ENTER to continue anyway, or Ctrl-C to exit.") + + chan_filt_coeffs = optfir.low_pass (1, # gain + usrp_rate, # sampling rate + 80e3, # passband cutoff + 115e3, # stopband cutoff + 0.1, # passband ripple + 60) # stopband attenuation + #print len(chan_filt_coeffs) + chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs) + + self.guts = blks2.wfm_rcv (demod_rate, audio_decimation) + + self.volume_control = gr.multiply_const_ff(self.vol) + + # sound card as final sink + audio_sink = audio.sink (int (audio_rate), + options.audio_output, + False) # ok_to_block + + # now wire it all together + self.connect (self.u, chan_filt, self.guts, self.volume_control, audio_sink) + + self._build_gui(vbox, usrp_rate, demod_rate, audio_rate) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.u.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.volume is None: + g = self.volume_range() + options.volume = float(g[0]+g[1])/2 + + if abs(options.freq) < 1e6: + options.freq *= 1e6 + + # set initial values + + self.set_gain(options.gain) + self.set_vol(options.volume) + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + + def _set_status_msg(self, msg, which=0): + self.frame.GetStatusBar().SetStatusText(msg, which) + + + def _build_gui(self, vbox, usrp_rate, demod_rate, audio_rate): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + + if 1: + self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP2", + fft_size=512, sample_rate=usrp_rate, + ref_scale=1.0, ref_level=0, y_divs=12) + self.connect (self.u, self.src_fft) + vbox.Add (self.src_fft.win, 4, wx.EXPAND) + + if 1: + post_filt_fft = fftsink2.fft_sink_f(self.panel, title="Post Demod", + fft_size=1024, sample_rate=usrp_rate, + y_per_div=10, ref_level=0) + self.connect (self.guts.fm_demod, post_filt_fft) + vbox.Add (post_filt_fft.win, 4, wx.EXPAND) + + if 0: + post_deemph_fft = fftsink2.fft_sink_f(self.panel, title="Post Deemph", + fft_size=512, sample_rate=audio_rate, + y_per_div=10, ref_level=-20) + self.connect (self.guts.deemph, post_deemph_fft) + vbox.Add (post_deemph_fft.win, 4, wx.EXPAND) + + + # control area form at bottom + self.myform = myform = form.form() + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0) + myform['freq_slider'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, weight=3, + range=(87.9e6, 108.1e6, 0.1e6), + callback=self.set_freq) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['volume'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Volume", + weight=3, range=self.volume_range(), + callback=self.set_vol) + hbox.Add((5,0), 1) + + myform['gain'] = \ + form.quantized_slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, range=self.u.gain_range(), + callback=self.set_gain) + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + try: + self.knob = powermate.powermate(self.frame) + self.rot = 0 + powermate.EVT_POWERMATE_ROTATE (self.frame, self.on_rotate) + powermate.EVT_POWERMATE_BUTTON (self.frame, self.on_button) + except: + pass + #print "FYI: No Powermate or Contour Knob found" + + + def on_rotate (self, event): + self.rot += event.delta + if (self.state == "FREQ"): + if self.rot >= 3: + self.set_freq(self.freq + .1e6) + self.rot -= 3 + elif self.rot <=-3: + self.set_freq(self.freq - .1e6) + self.rot += 3 + else: + step = self.volume_range()[2] + if self.rot >= 3: + self.set_vol(self.vol + step) + self.rot -= 3 + elif self.rot <=-3: + self.set_vol(self.vol - step) + self.rot += 3 + + def on_button (self, event): + if event.value == 0: # button up + return + self.rot = 0 + if self.state == "FREQ": + self.state = "VOL" + else: + self.state = "FREQ" + self.update_status_bar () + + + def set_vol (self, vol): + g = self.volume_range() + self.vol = max(g[0], min(g[1], vol)) + self.volume_control.set_k(10**(self.vol/10)) + self.myform['volume'].set_value(self.vol) + self.update_status_bar () + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = self.u.set_center_freq(target_freq) + if r: + self.freq = target_freq + self.myform['freq'].set_value(target_freq) # update displayed value + self.myform['freq_slider'].set_value(target_freq) # update displayed value + self.update_status_bar() + self._set_status_msg("OK", 0) + return True + + self._set_status_msg("Failed", 0) + return False + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.u.set_gain(gain) + + def update_status_bar (self): + msg = "Volume:%r Setting:%s" % (self.vol, self.state) + self._set_status_msg(msg, 1) + self.src_fft.set_baseband_freq(self.freq) + + def volume_range(self): + return (-20.0, 0.0, 0.5) + + +if __name__ == '__main__': + app = stdgui2.stdapp (wfm_rx_block, "USRP2 WFM RX") + app.MainLoop () diff --git a/gr-audio-alsa/AUTHORS b/gr-audio-alsa/AUTHORS deleted file mode 100644 index 65ca9014..00000000 --- a/gr-audio-alsa/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Eric Blossom -Ramakrishnan Muthukrishnan diff --git a/gr-audio-alsa/ChangeLog b/gr-audio-alsa/ChangeLog deleted file mode 100644 index 17c6af39..00000000 --- a/gr-audio-alsa/ChangeLog +++ /dev/null @@ -1,88 +0,0 @@ -2006-03-30 Eric Blossom - - * gr-audio-alsa.conf: new config file - * src/audio_alsa_source.{h,cc,i}, src/audio_alsa_sink.{h,cc,i}: - added ok_to_block ctor arg. Now use prefs for default devices, etc. - -2006-02-27 Eric Blossom - - * src/Makefile.am (audio_alsa.cc audio_alsa.py): added missing - dependency. - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac, src/Makefile.am: mods for x86_64, $(NO_UNDEFINED) - -2005-06-18 Eric Blossom - - * src/audio_alsa_sink.cc (check_topology): set start threshold to - help avoid audio underruns. - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - -2005-01-29 Eric Blossom - - * src/Makefile.am: cleanup for SWIG 1.3.24 - -2005-01-17 Eric Blossom - - * src/audio_alsa_source.{h,cc}: emulate mono source even on - stereo-only hardware. - -2005-01-12 Eric Blossom - - * src/audio_alsa_source.cc,src/audio_alsa_sink.cc: overruns are - now indicated with aO, underruns with aU to distinguish them from - usrp under/overruns. - -2004-11-11 Eric Blossom - - * src/audio_alsa_source.cc (audio_alsa_source): working! - -2004-11-10 Eric Blossom - - * src/audio_alsa_sink.cc (audio_alsa_sink): working! - -2004-11-08 Eric Blossom - - * src/audio_alsa.i (audio_alsa_make_source): added throw - declarations so that swig generates the proper catch. - -2004-10-25 Ramakrishnan Muthukrishnan - - * playout works. But segfaults on exit. - * capture is untested. - -2004-10-23 Ramakrishnan Muthukrishnan - - * src/audio_oss_source.{h,cc}: first cut from oss sources. - * src/audio_oss_sink.{h,cc}: first cut from oss sources. - - -# -# 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. -# diff --git a/gr-audio-alsa/Makefile.am b/gr-audio-alsa/Makefile.am index 83c92a06..6afff4d9 100644 --- a/gr-audio-alsa/Makefile.am +++ b/gr-audio-alsa/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,12 +21,13 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = gr-audio-alsa.conf +EXTRA_DIST = \ + gr-audio-alsa.pc.in SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = +pkgconfig_DATA = gr-audio-alsa.pc -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-alsa.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-alsa.conf diff --git a/gr-audio-alsa/Makefile.in b/gr-audio-alsa/Makefile.in index 8b58fef9..d216892c 100644 --- a/gr-audio-alsa/Makefile.in +++ b/gr-audio-alsa/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,29 +76,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog +DIST_COMMON = $(dist_etc_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/gr-audio-alsa.pc.in \ + $(top_srcdir)/Makefile.common subdir = gr-audio-alsa ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +118,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -131,15 +158,16 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = +CONFIG_CLEAN_FILES = gr-audio-alsa.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -147,9 +175,11 @@ am__vpath_adj = case $$p in \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(pkgconfigdir)" -etcDATA_INSTALL = $(INSTALL_DATA) +dist_etcDATA_INSTALL = $(INSTALL_DATA) pkgconfigDATA_INSTALL = $(INSTALL_DATA) -DATA = $(etc_DATA) $(pkgconfig_DATA) +DATA = $(dist_etc_DATA) $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -157,10 +187,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -168,9 +197,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -178,6 +214,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -190,73 +228,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -266,49 +297,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -316,15 +387,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -334,16 +548,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -352,69 +584,140 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = gr-audio-alsa.conf +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + gr-audio-alsa.pc.in + SUBDIRS = src pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-alsa.conf +pkgconfig_DATA = gr-audio-alsa.pc +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-alsa.conf all: all-recursive .SUFFIXES: @@ -422,8 +725,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -447,36 +750,34 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gr-audio-alsa.pc: $(top_builddir)/config.status $(srcdir)/gr-audio-alsa.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-etcDATA: $(etc_DATA) +install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) - test -z "$(etcdir)" || $(mkdir_p) "$(DESTDIR)$(etcdir)" - @list='$(etc_DATA)'; for p in $$list; do \ + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ - $(etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ done -uninstall-etcDATA: +uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) - @list='$(etc_DATA)'; for p in $$list; do \ + @list='$(dist_etc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ rm -f "$(DESTDIR)$(etcdir)/$$f"; \ done install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)" + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -523,8 +824,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -568,8 +868,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -594,8 +894,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -605,13 +905,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -625,23 +924,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -655,7 +952,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -663,17 +960,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -690,6 +992,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -705,8 +1008,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -718,14 +1020,22 @@ info: info-recursive info-am: -install-data-am: install-etcDATA install-pkgconfigDATA +install-data-am: install-dist_etcDATA install-pkgconfigDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -744,25 +1054,37 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-etcDATA uninstall-info-am \ - uninstall-pkgconfigDATA +uninstall-am: uninstall-dist_etcDATA uninstall-pkgconfigDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-etcDATA install-exec install-exec-am \ - install-info install-info-am install-man install-pkgconfigDATA \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-etcDATA \ - uninstall-info-am uninstall-pkgconfigDATA + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_etcDATA \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-alsa/gr-audio-alsa.pc.in b/gr-audio-alsa/gr-audio-alsa.pc.in new file mode 100644 index 00000000..69b6e8c6 --- /dev/null +++ b/gr-audio-alsa/gr-audio-alsa.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: gnuradio-audio-alsa +Description: The GNU Radio block for the ALSA sound system +Requires: gnuradio-core +Version: @VERSION@ +Libs: -L${libdir} -lgnuradio-audio-alsa +Cflags: -I${includedir} diff --git a/gr-audio-alsa/src/Makefile.am b/gr-audio-alsa/src/Makefile.am index 2ccb92e6..8230ab56 100644 --- a/gr-audio-alsa/src/Makefile.am +++ b/gr-audio-alsa/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,75 +21,63 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.audio_alsa module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-alsa/src/audio_alsa.i - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +DISTCLEANFILES = run_tests -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_alsa_sink.h \ + audio_alsa_source.h -BUILT_SOURCES = \ - audio_alsa.cc \ - audio_alsa.py +noinst_HEADERS = \ + gri_alsa.h -ourpython_PYTHON = \ - audio_alsa.py +noinst_PYTHON = \ + qa_alsa.py -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) +################################### +# ALSA library, including OS interface, sink, and source -ourlib_LTLIBRARIES = _audio_alsa.la +lib_LTLIBRARIES = libgnuradio-audio-alsa.la -_audio_alsa_la_SOURCES = \ - audio_alsa.cc \ +libgnuradio_audio_alsa_la_SOURCES = \ audio_alsa_sink.cc \ audio_alsa_source.cc \ - gri_alsa.cc + gri_alsa.cc -grinclude_HEADERS = \ - audio_alsa_sink.h \ - audio_alsa_source.h - -noinst_HEADERS = \ - gri_alsa.h +libgnuradio_audio_alsa_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + $(ALSA_LIBS) +libgnuradio_audio_alsa_la_LDFLAGS = \ + $(NO_UNDEFINED) -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +################################### +# SWIG Python interface and library -_audio_alsa_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(ALSA_LIBS) \ - -lstdc++ +TOP_SWIG_IFILES = \ + audio_alsa.i -_audio_alsa_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +# Install so that they end up available as: +# import gnuradio.audio_alsa +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_alsa_pythondir_category = \ + gnuradio -audio_alsa.cc audio_alsa.py: $(LOCAL_IFILES) $(NON_LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module audio_alsa -o audio_alsa.cc $(LOCAL_IFILES) +# additional libraries for linking with the SWIG-generated library +audio_alsa_la_swig_libadd = \ + libgnuradio-audio-alsa.la -noinst_PYTHON = \ - qa_alsa.py +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-audio-alsa/src/Makefile.in b/gr-audio-alsa/src/Makefile.in index f73b7803..9544374c 100644 --- a/gr-audio-alsa/src/Makefile.in +++ b/gr-audio-alsa/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 audio_alsa.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +123,43 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(audio_alsa_python_PYTHON) \ + $(audio_alsa_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) $(noinst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig subdir = gr-audio-alsa/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +168,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,47 +215,63 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(audio_alsa_pylibdir)" \ + "$(DESTDIR)$(libdir)" "$(DESTDIR)$(audio_alsa_pythondir)" \ + "$(DESTDIR)$(audio_alsa_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +audio_alsa_pylibLTLIBRARIES_INSTALL = $(INSTALL) +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(audio_alsa_pylib_LTLIBRARIES) $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la _audio_alsa_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) -am__audio_alsa_la_OBJECTS = audio_alsa.lo audio_alsa_sink.lo \ - audio_alsa_source.lo gri_alsa.lo + $(audio_alsa_la_swig_libadd) +am__audio_alsa_la_OBJECTS = _audio_alsa_la-audio_alsa.lo _audio_alsa_la_OBJECTS = $(am__audio_alsa_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_audio_alsa_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_audio_alsa_la_CXXFLAGS) $(CXXFLAGS) \ + $(_audio_alsa_la_LDFLAGS) $(LDFLAGS) -o $@ +libgnuradio_audio_alsa_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libgnuradio_audio_alsa_la_OBJECTS = audio_alsa_sink.lo \ + audio_alsa_source.lo gri_alsa.lo +libgnuradio_audio_alsa_la_OBJECTS = \ + $(am_libgnuradio_audio_alsa_la_OBJECTS) +libgnuradio_audio_alsa_la_LINK = $(LIBTOOL) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(libgnuradio_audio_alsa_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(_audio_alsa_la_SOURCES) -DIST_SOURCES = $(_audio_alsa_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_audio_alsa_la_SOURCES) \ + $(libgnuradio_audio_alsa_la_SOURCES) +DIST_SOURCES = $(_audio_alsa_la_SOURCES) \ + $(libgnuradio_audio_alsa_la_SOURCES) +audio_alsa_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +audio_alsa_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(noinst_HEADERS) \ - $(swiginclude_HEADERS) +HEADERS = $(audio_alsa_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -189,9 +279,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -199,6 +296,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -211,73 +310,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -287,49 +379,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -337,15 +469,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -355,16 +630,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -373,131 +666,257 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.audio_alsa module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/audio_alsa-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-alsa/src/audio_alsa.i +DISTCLEANFILES = run_tests -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_alsa_sink.h \ + audio_alsa_source.h -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +noinst_HEADERS = \ + gri_alsa.h -BUILT_SOURCES = \ - audio_alsa.cc \ - audio_alsa.py +noinst_PYTHON = \ + qa_alsa.py -ourpython_PYTHON = \ - audio_alsa.py +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -ourlib_LTLIBRARIES = _audio_alsa.la -_audio_alsa_la_SOURCES = \ - audio_alsa.cc \ +################################### +# ALSA library, including OS interface, sink, and source +lib_LTLIBRARIES = libgnuradio-audio-alsa.la +libgnuradio_audio_alsa_la_SOURCES = \ audio_alsa_sink.cc \ audio_alsa_source.cc \ - gri_alsa.cc + gri_alsa.cc -grinclude_HEADERS = \ - audio_alsa_sink.h \ - audio_alsa_source.h +libgnuradio_audio_alsa_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + $(ALSA_LIBS) -noinst_HEADERS = \ - gri_alsa.h +libgnuradio_audio_alsa_la_LDFLAGS = \ + $(NO_UNDEFINED) + + +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + audio_alsa.i -swiginclude_HEADERS = \ - $(LOCAL_IFILES) + +# Install so that they end up available as: +# import gnuradio.audio_alsa +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_alsa_pythondir_category = \ + gnuradio + + +# additional libraries for linking with the SWIG-generated library +audio_alsa_la_swig_libadd = \ + libgnuradio-audio-alsa.la + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = audio_alsa.py audio_alsa.cc +audio_alsa_pythondir = $(pythondir)/$(audio_alsa_pythondir_category) +audio_alsa_pylibdir = $(pyexecdir)/$(audio_alsa_pylibdir_category) +audio_alsa_swigincludedir = $(swigincludedir) +audio_alsa_swiginclude_HEADERS = \ + audio_alsa.i \ + $(audio_alsa_swiginclude_headers) + +audio_alsa_pylib_LTLIBRARIES = \ + _audio_alsa.la + +_audio_alsa_la_SOURCES = \ + audio_alsa.cc \ + $(audio_alsa_la_swig_sources) _audio_alsa_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(ALSA_LIBS) \ - -lstdc++ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_alsa_la_swig_libadd) -_audio_alsa_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -noinst_PYTHON = \ - qa_alsa.py +_audio_alsa_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_alsa_la_swig_ldflags) + +_audio_alsa_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_alsa_la_swig_cxxflags) + +audio_alsa_python_PYTHON = \ + audio_alsa.py \ + $(audio_alsa_python) -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -523,35 +942,64 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-audio_alsa_pylibLTLIBRARIES: $(audio_alsa_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(audio_alsa_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(audio_alsa_pylibdir)" + @list='$(audio_alsa_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_alsa_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(audio_alsa_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_alsa_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(audio_alsa_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-audio_alsa_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(audio_alsa_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(audio_alsa_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(audio_alsa_pylibdir)/$$p"; \ + done + +clean-audio_alsa_pylibLTLIBRARIES: + -test -z "$(audio_alsa_pylib_LTLIBRARIES)" || rm -f $(audio_alsa_pylib_LTLIBRARIES) + @list='$(audio_alsa_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _audio_alsa.la: $(_audio_alsa_la_OBJECTS) $(_audio_alsa_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_audio_alsa_la_LDFLAGS) $(_audio_alsa_la_OBJECTS) $(_audio_alsa_la_LIBADD) $(LIBS) + $(_audio_alsa_la_LINK) -rpath $(audio_alsa_pylibdir) $(_audio_alsa_la_OBJECTS) $(_audio_alsa_la_LIBADD) $(LIBS) +libgnuradio-audio-alsa.la: $(libgnuradio_audio_alsa_la_OBJECTS) $(libgnuradio_audio_alsa_la_DEPENDENCIES) + $(libgnuradio_audio_alsa_la_LINK) -rpath $(libdir) $(libgnuradio_audio_alsa_la_OBJECTS) $(libgnuradio_audio_alsa_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -559,102 +1007,105 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_alsa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_alsa_la-audio_alsa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_alsa_sink.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_alsa_source.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_alsa.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_audio_alsa_la-audio_alsa.lo: audio_alsa.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_alsa_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_alsa_la-audio_alsa.lo -MD -MP -MF $(DEPDIR)/_audio_alsa_la-audio_alsa.Tpo -c -o _audio_alsa_la-audio_alsa.lo `test -f 'audio_alsa.cc' || echo '$(srcdir)/'`audio_alsa.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_alsa_la-audio_alsa.Tpo $(DEPDIR)/_audio_alsa_la-audio_alsa.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_alsa.cc' object='_audio_alsa_la-audio_alsa.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_alsa_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_alsa_la-audio_alsa.lo `test -f 'audio_alsa.cc' || echo '$(srcdir)/'`audio_alsa.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-audio_alsa_pythonPYTHON: $(audio_alsa_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(audio_alsa_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(audio_alsa_pythondir)" + @list='$(audio_alsa_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(audio_alsa_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(audio_alsa_pythondir)/$$f'"; \ + $(audio_alsa_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(audio_alsa_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(audio_alsa_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(audio_alsa_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-audio_alsa_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(audio_alsa_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(audio_alsa_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(audio_alsa_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(audio_alsa_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-audio_alsa_swigincludeHEADERS: $(audio_alsa_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(audio_alsa_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(audio_alsa_swigincludedir)" + @list='$(audio_alsa_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(audio_alsa_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(audio_alsa_swigincludedir)/$$f'"; \ + $(audio_alsa_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(audio_alsa_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-audio_alsa_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(audio_alsa_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(audio_alsa_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(audio_alsa_swigincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-grincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(grinclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -662,8 +1113,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -675,8 +1126,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -686,13 +1137,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -708,7 +1158,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -717,7 +1167,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -729,7 +1179,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -743,23 +1193,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -779,23 +1242,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-audio-alsa/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -815,8 +1276,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(audio_alsa_pylibdir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(audio_alsa_pythondir)" "$(DESTDIR)$(audio_alsa_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -840,6 +1301,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -847,14 +1309,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-audio_alsa_pylibLTLIBRARIES clean-generic \ + clean-libLTLIBRARIES clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -866,15 +1328,24 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-audio_alsa_pylibLTLIBRARIES \ + install-audio_alsa_pythonPYTHON \ + install-audio_alsa_swigincludeHEADERS install-grincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES -install-exec-am: +install-html: install-html-am install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -895,34 +1366,115 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-audio_alsa_pylibLTLIBRARIES \ + uninstall-audio_alsa_pythonPYTHON \ + uninstall-audio_alsa_swigincludeHEADERS \ + uninstall-grincludeHEADERS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ + clean-audio_alsa_pylibLTLIBRARIES clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-audio_alsa_pylibLTLIBRARIES \ + install-audio_alsa_pythonPYTHON \ + install-audio_alsa_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS + tags uninstall uninstall-am \ + uninstall-audio_alsa_pylibLTLIBRARIES \ + uninstall-audio_alsa_pythonPYTHON \ + uninstall-audio_alsa_swigincludeHEADERS \ + uninstall-grincludeHEADERS uninstall-libLTLIBRARIES -audio_alsa.cc audio_alsa.py: $(LOCAL_IFILES) $(NON_LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module audio_alsa -o audio_alsa.cc $(LOCAL_IFILES) +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -# Don't distribute output of swig +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +audio_alsa_pythondir_category ?= gnuradio/audio_alsa +audio_alsa_pylibdir_category ?= $(audio_alsa_pythondir_category) + +audio_alsa.h audio_alsa.py audio_alsa.cc: audio_alsa.i + trap 'rm -rf $(DEPDIR)/audio_alsa-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/audio_alsa-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/audio_alsa-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_alsa-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/audio_alsa-generate-lock; \ + else \ + while test -d $(DEPDIR)/audio_alsa-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/audio_alsa-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/audio_alsa-generate-stamp: + 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; + $(RM) $(DEPDIR)/audio_alsa.d + cp $(DEPDIR)/audio_alsa.Std $(DEPDIR)/audio_alsa.d + echo "" >> $(DEPDIR)/audio_alsa.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_alsa.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_alsa.d + $(RM) $(DEPDIR)/audio_alsa.Std + touch $(DEPDIR)/audio_alsa-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)/audio_alsa.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-alsa/src/Makefile.swig.gen b/gr-audio-alsa/src/Makefile.swig.gen new file mode 100644 index 00000000..3a84a02b --- /dev/null +++ b/gr-audio-alsa/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 audio_alsa.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/audio_alsa +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/audio_alsa +## +## 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. + +audio_alsa_pythondir_category ?= gnuradio/audio_alsa +audio_alsa_pylibdir_category ?= $(audio_alsa_pythondir_category) +audio_alsa_pythondir = $(pythondir)/$(audio_alsa_pythondir_category) +audio_alsa_pylibdir = $(pyexecdir)/$(audio_alsa_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +audio_alsa_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)/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 . + +audio_alsa_swiginclude_HEADERS = \ + audio_alsa.i \ + $(audio_alsa_swiginclude_headers) + +audio_alsa_pylib_LTLIBRARIES = \ + _audio_alsa.la + +_audio_alsa_la_SOURCES = \ + audio_alsa.cc \ + $(audio_alsa_la_swig_sources) + +_audio_alsa_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_alsa_la_swig_libadd) + +_audio_alsa_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_alsa_la_swig_ldflags) + +_audio_alsa_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_alsa_la_swig_cxxflags) + +audio_alsa_python_PYTHON = \ + audio_alsa.py \ + $(audio_alsa_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/audio_alsa.d@am__quote@ + diff --git a/gr-audio-alsa/src/audio_alsa.i b/gr-audio-alsa/src/audio_alsa.i index 1a01cf79..88402333 100644 --- a/gr-audio-alsa/src/audio_alsa.i +++ b/gr-audio-alsa/src/audio_alsa.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004,2006 Free Software Foundation, Inc. + * Copyright 2004,2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "audio_alsa_sink.h" #include "audio_alsa_source.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-audio-alsa/src/audio_alsa_sink.cc b/gr-audio-alsa/src/audio_alsa_sink.cc index ef51f755..fe3f043b 100644 --- a/gr-audio-alsa/src/audio_alsa_sink.cc +++ b/gr-audio-alsa/src/audio_alsa_sink.cc @@ -138,7 +138,8 @@ audio_alsa_sink::audio_alsa_sink (int sampling_rate, // Specify the access methods we implement // For now, we only handle RW_INTERLEAVED... snd_pcm_access_mask_t *access_mask; - snd_pcm_access_mask_alloca (&access_mask); + snd_pcm_access_mask_t **access_mask_ptr = &access_mask; // FIXME: workaround for compiler warning + snd_pcm_access_mask_alloca (access_mask_ptr); snd_pcm_access_mask_none (access_mask); snd_pcm_access_mask_set (access_mask, SND_PCM_ACCESS_RW_INTERLEAVED); // snd_pcm_access_mask_set (access_mask, SND_PCM_ACCESS_RW_NONINTERLEAVED); diff --git a/gr-audio-alsa/src/audio_alsa_sink.h b/gr-audio-alsa/src/audio_alsa_sink.h index f2aa80ae..d4b54038 100644 --- a/gr-audio-alsa/src/audio_alsa_sink.h +++ b/gr-audio-alsa/src/audio_alsa_sink.h @@ -40,12 +40,12 @@ typedef boost::shared_ptr audio_alsa_sink_sptr; * \brief make an alsa audio sink. * * \param sampling_rate sampling rate in Hz - * \param dev ALSA pcm device name, e.g., "hw:0,0" + * \param device_name ALSA pcm device name, e.g., "hw:0,0" * \param ok_to_block (currently ignored) */ audio_alsa_sink_sptr audio_alsa_make_sink (int sampling_rate, - const std::string dev = "", + const std::string device_name = "", bool ok_to_block = true); /*! diff --git a/gr-audio-alsa/src/audio_alsa_source.cc b/gr-audio-alsa/src/audio_alsa_source.cc index c467b8f8..381e553f 100644 --- a/gr-audio-alsa/src/audio_alsa_source.cc +++ b/gr-audio-alsa/src/audio_alsa_source.cc @@ -138,7 +138,8 @@ audio_alsa_source::audio_alsa_source (int sampling_rate, // Specify the access methods we implement // For now, we only handle RW_INTERLEAVED... snd_pcm_access_mask_t *access_mask; - snd_pcm_access_mask_alloca (&access_mask); + snd_pcm_access_mask_t **access_mask_ptr = &access_mask; // FIXME: workaround for compiler warning + snd_pcm_access_mask_alloca (access_mask_ptr); snd_pcm_access_mask_none (access_mask); snd_pcm_access_mask_set (access_mask, SND_PCM_ACCESS_RW_INTERLEAVED); // snd_pcm_access_mask_set (access_mask, SND_PCM_ACCESS_RW_NONINTERLEAVED); diff --git a/gr-audio-alsa/src/audio_alsa_source.h b/gr-audio-alsa/src/audio_alsa_source.h index cbda10f6..db6c4568 100644 --- a/gr-audio-alsa/src/audio_alsa_source.h +++ b/gr-audio-alsa/src/audio_alsa_source.h @@ -39,12 +39,12 @@ typedef boost::shared_ptr audio_alsa_source_sptr; * \brief Make an ALSA audio source. * * \param sampling_rate sampling rate - * \param dev ALSA pcm device name, e.g., "hw:0,0" + * \param device_name ALSA pcm device name, e.g., "hw:0,0" * \param ok_to_block (currently ignored) */ audio_alsa_source_sptr audio_alsa_make_source (int sampling_rate, - const std::string dev = "", + const std::string device_name = "", bool ok_to_block = true); /*! diff --git a/gr-audio-alsa/src/qa_alsa.py b/gr-audio-alsa/src/qa_alsa.py index a5381a29..f2a480a5 100755 --- a/gr-audio-alsa/src/qa_alsa.py +++ b/gr-audio-alsa/src/qa_alsa.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import audio_alsa class qa_alsa (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-audio-jack/AUTHORS b/gr-audio-jack/AUTHORS deleted file mode 100644 index 624606f0..00000000 --- a/gr-audio-jack/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Stephane Fillod diff --git a/gr-audio-jack/ChangeLog b/gr-audio-jack/ChangeLog deleted file mode 100644 index 407e6852..00000000 --- a/gr-audio-jack/ChangeLog +++ /dev/null @@ -1,42 +0,0 @@ -2006-03-30 Eric Blossom - - * gr-audio-jack.conf: new config file. - * src/audio_jack_source.{h,cc}, src/audio_jack_sink.{h,cc}: added - ok_to_block ctor argument (currently ignored). Also query prefs - for default input and output device names. - -2005-10-13 Stephane Fillod - - * src/audio_jack_{source,sink}.cc: don't use jack_get_client_name - since older jack versions don't have it. - -2005-10-09 Stephane Fillod - - * src/audio_jack_{source,sink}.cc: fix, don't retrieve jack buffer - when ringbuffer overflows/underflows. - -2005-09-30 Stephane Fillod - - * src/audio_jack_source.{h,cc}: new. - * src/audio_jack_sink.{h,cc}: new. - -# -# Copyright 2005 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. -# diff --git a/gr-audio-jack/Makefile.am b/gr-audio-jack/Makefile.am index 799b81a7..c39b9d3f 100644 --- a/gr-audio-jack/Makefile.am +++ b/gr-audio-jack/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,8 +21,7 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = gr-audio-jack.conf SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-jack.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-jack.conf diff --git a/gr-audio-jack/Makefile.in b/gr-audio-jack/Makefile.in index e71297e0..318522f3 100644 --- a/gr-audio-jack/Makefile.in +++ b/gr-audio-jack/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,29 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog +DIST_COMMON = $(dist_etc_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gr-audio-jack ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,10 +162,11 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -147,8 +174,10 @@ am__vpath_adj = case $$p in \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(etcdir)" -etcDATA_INSTALL = $(INSTALL_DATA) -DATA = $(etc_DATA) +dist_etcDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_etc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -156,10 +185,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -167,9 +195,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -177,6 +212,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -189,73 +226,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -265,49 +295,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -315,15 +385,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -333,16 +546,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -351,67 +582,135 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = gr-audio-jack.conf +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-jack.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-jack.conf all: all-recursive .SUFFIXES: @@ -419,8 +718,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -450,23 +749,19 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-etcDATA: $(etc_DATA) +install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) - test -z "$(etcdir)" || $(mkdir_p) "$(DESTDIR)$(etcdir)" - @list='$(etc_DATA)'; for p in $$list; do \ + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ - $(etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ done -uninstall-etcDATA: +uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) - @list='$(etc_DATA)'; for p in $$list; do \ + @list='$(dist_etc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ rm -f "$(DESTDIR)$(etcdir)/$$f"; \ @@ -503,8 +798,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -548,8 +842,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -574,8 +868,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -585,13 +879,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -605,23 +898,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -635,7 +926,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -643,17 +934,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(etcdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -670,6 +966,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -685,8 +982,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -698,14 +994,22 @@ info: info-recursive info-am: -install-data-am: install-etcDATA +install-data-am: install-dist_etcDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -724,24 +1028,36 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-etcDATA uninstall-info-am +uninstall-am: uninstall-dist_etcDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-etcDATA install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-etcDATA \ - uninstall-info-am + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-dist_etcDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-jack/src/Makefile.am b/gr-audio-jack/src/Makefile.am index 12bdf08c..bd8694a2 100644 --- a/gr-audio-jack/src/Makefile.am +++ b/gr-audio-jack/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,77 +21,53 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.audio_jack module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-jack/src/audio_jack.i - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +DISTCLEANFILES = run_tests -BUILT_SOURCES = \ - audio_jack.cc \ - audio_jack.py +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_jack_sink.h \ + audio_jack_source.h -ourpython_PYTHON = \ - audio_jack.py +noinst_HEADERS = \ + gri_jack.h -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) +noinst_PYTHON = \ + qa_jack.py -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) +################################### +# SWIG Python interface and library -ourlib_LTLIBRARIES = _audio_jack.la +TOP_SWIG_IFILES = \ + audio_jack.i +# Install so that they end up available as: +# import gnuradio.audio_jack +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_jack_pythondir_category = \ + gnuradio -_audio_jack_la_SOURCES = \ - audio_jack.cc \ +# additional sources for the SWIG-generated library +audio_jack_la_swig_sources = \ audio_jack_sink.cc \ audio_jack_source.cc \ - gri_jack.cc + gri_jack.cc -grinclude_HEADERS = \ - audio_jack_sink.h \ - audio_jack_source.h - -noinst_HEADERS = \ - gri_jack.h - - -swiginclude_HEADERS = \ - $(LOCAL_IFILES) - -_audio_jack_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ +# additional libraries for linking with the SWIG-generated library +audio_jack_la_swig_libadd = \ $(GNURADIO_CORE_LA) \ - $(JACK_LIBS) \ - -lstdc++ - -_audio_jack_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version + $(JACK_LIBS) -audio_jack.cc audio_jack.py: $(LOCAL_IFILES) $(NON_LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module audio_jack -o audio_jack.cc $(LOCAL_IFILES) - -noinst_PYTHON = \ - qa_jack.py +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-audio-jack/src/Makefile.in b/gr-audio-jack/src/Makefile.in index 6829282d..50a0cfc4 100644 --- a/gr-audio-jack/src/Makefile.in +++ b/gr-audio-jack/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 audio_jack.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +123,43 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(audio_jack_python_PYTHON) \ + $(audio_jack_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) $(noinst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig subdir = gr-audio-jack/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +168,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,47 +215,54 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(audio_jack_pylibdir)" \ + "$(DESTDIR)$(audio_jack_pythondir)" \ + "$(DESTDIR)$(audio_jack_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +audio_jack_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(audio_jack_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) _audio_jack_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) -am__audio_jack_la_OBJECTS = audio_jack.lo audio_jack_sink.lo \ - audio_jack_source.lo gri_jack.lo + $(am__DEPENDENCIES_2) +am__objects_1 = _audio_jack_la-audio_jack_sink.lo \ + _audio_jack_la-audio_jack_source.lo _audio_jack_la-gri_jack.lo +am__audio_jack_la_OBJECTS = _audio_jack_la-audio_jack.lo \ + $(am__objects_1) _audio_jack_la_OBJECTS = $(am__audio_jack_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_audio_jack_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) \ + $(_audio_jack_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_audio_jack_la_SOURCES) DIST_SOURCES = $(_audio_jack_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +audio_jack_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +audio_jack_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(noinst_HEADERS) \ - $(swiginclude_HEADERS) +HEADERS = $(audio_jack_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -189,9 +270,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -199,6 +287,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -211,73 +301,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -287,49 +370,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -337,15 +460,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -355,16 +621,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -373,131 +657,249 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.audio_jack module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/audio_jack-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-jack/src/audio_jack.i +DISTCLEANFILES = run_tests -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_jack_sink.h \ + audio_jack_source.h -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +noinst_HEADERS = \ + gri_jack.h -BUILT_SOURCES = \ - audio_jack.cc \ - audio_jack.py +noinst_PYTHON = \ + qa_jack.py -ourpython_PYTHON = \ - audio_jack.py +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -ourlib_LTLIBRARIES = _audio_jack.la -_audio_jack_la_SOURCES = \ - audio_jack.cc \ +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + audio_jack.i + + +# Install so that they end up available as: +# import gnuradio.audio_jack +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_jack_pythondir_category = \ + gnuradio + + +# additional sources for the SWIG-generated library +audio_jack_la_swig_sources = \ audio_jack_sink.cc \ audio_jack_source.cc \ - gri_jack.cc + gri_jack.cc -grinclude_HEADERS = \ - audio_jack_sink.h \ - audio_jack_source.h -noinst_HEADERS = \ - gri_jack.h +# additional libraries for linking with the SWIG-generated library +audio_jack_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + $(JACK_LIBS) + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = audio_jack.py audio_jack.cc +audio_jack_pythondir = $(pythondir)/$(audio_jack_pythondir_category) +audio_jack_pylibdir = $(pyexecdir)/$(audio_jack_pylibdir_category) +audio_jack_swigincludedir = $(swigincludedir) +audio_jack_swiginclude_HEADERS = \ + audio_jack.i \ + $(audio_jack_swiginclude_headers) + +audio_jack_pylib_LTLIBRARIES = \ + _audio_jack.la -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +_audio_jack_la_SOURCES = \ + audio_jack.cc \ + $(audio_jack_la_swig_sources) _audio_jack_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(JACK_LIBS) \ - -lstdc++ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_jack_la_swig_libadd) -_audio_jack_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -noinst_PYTHON = \ - qa_jack.py +_audio_jack_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_jack_la_swig_ldflags) + +_audio_jack_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_jack_la_swig_cxxflags) -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +audio_jack_python_PYTHON = \ + audio_jack.py \ + $(audio_jack_python) + +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -523,35 +925,35 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-audio_jack_pylibLTLIBRARIES: $(audio_jack_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(audio_jack_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(audio_jack_pylibdir)" + @list='$(audio_jack_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_jack_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(audio_jack_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_jack_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(audio_jack_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-audio_jack_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(audio_jack_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(audio_jack_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(audio_jack_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-audio_jack_pylibLTLIBRARIES: + -test -z "$(audio_jack_pylib_LTLIBRARIES)" || rm -f $(audio_jack_pylib_LTLIBRARIES) + @list='$(audio_jack_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _audio_jack.la: $(_audio_jack_la_OBJECTS) $(_audio_jack_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_audio_jack_la_LDFLAGS) $(_audio_jack_la_OBJECTS) $(_audio_jack_la_LIBADD) $(LIBS) + $(_audio_jack_la_LINK) -rpath $(audio_jack_pylibdir) $(_audio_jack_la_OBJECTS) $(_audio_jack_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -559,102 +961,126 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_jack.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_jack_sink.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_jack_source.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_jack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_jack_la-audio_jack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_jack_la-audio_jack_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_jack_la-audio_jack_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_jack_la-gri_jack.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_audio_jack_la-audio_jack.lo: audio_jack.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_jack_la-audio_jack.lo -MD -MP -MF $(DEPDIR)/_audio_jack_la-audio_jack.Tpo -c -o _audio_jack_la-audio_jack.lo `test -f 'audio_jack.cc' || echo '$(srcdir)/'`audio_jack.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_jack_la-audio_jack.Tpo $(DEPDIR)/_audio_jack_la-audio_jack.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_jack.cc' object='_audio_jack_la-audio_jack.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_jack_la-audio_jack.lo `test -f 'audio_jack.cc' || echo '$(srcdir)/'`audio_jack.cc + +_audio_jack_la-audio_jack_sink.lo: audio_jack_sink.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_jack_la-audio_jack_sink.lo -MD -MP -MF $(DEPDIR)/_audio_jack_la-audio_jack_sink.Tpo -c -o _audio_jack_la-audio_jack_sink.lo `test -f 'audio_jack_sink.cc' || echo '$(srcdir)/'`audio_jack_sink.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_jack_la-audio_jack_sink.Tpo $(DEPDIR)/_audio_jack_la-audio_jack_sink.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_jack_sink.cc' object='_audio_jack_la-audio_jack_sink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_jack_la-audio_jack_sink.lo `test -f 'audio_jack_sink.cc' || echo '$(srcdir)/'`audio_jack_sink.cc + +_audio_jack_la-audio_jack_source.lo: audio_jack_source.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_jack_la-audio_jack_source.lo -MD -MP -MF $(DEPDIR)/_audio_jack_la-audio_jack_source.Tpo -c -o _audio_jack_la-audio_jack_source.lo `test -f 'audio_jack_source.cc' || echo '$(srcdir)/'`audio_jack_source.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_jack_la-audio_jack_source.Tpo $(DEPDIR)/_audio_jack_la-audio_jack_source.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_jack_source.cc' object='_audio_jack_la-audio_jack_source.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_jack_la-audio_jack_source.lo `test -f 'audio_jack_source.cc' || echo '$(srcdir)/'`audio_jack_source.cc + +_audio_jack_la-gri_jack.lo: gri_jack.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_jack_la-gri_jack.lo -MD -MP -MF $(DEPDIR)/_audio_jack_la-gri_jack.Tpo -c -o _audio_jack_la-gri_jack.lo `test -f 'gri_jack.cc' || echo '$(srcdir)/'`gri_jack.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_jack_la-gri_jack.Tpo $(DEPDIR)/_audio_jack_la-gri_jack.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gri_jack.cc' object='_audio_jack_la-gri_jack.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_jack_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_jack_la-gri_jack.lo `test -f 'gri_jack.cc' || echo '$(srcdir)/'`gri_jack.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-audio_jack_pythonPYTHON: $(audio_jack_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(audio_jack_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(audio_jack_pythondir)" + @list='$(audio_jack_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(audio_jack_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(audio_jack_pythondir)/$$f'"; \ + $(audio_jack_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(audio_jack_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(audio_jack_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(audio_jack_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-audio_jack_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(audio_jack_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(audio_jack_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(audio_jack_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(audio_jack_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-audio_jack_swigincludeHEADERS: $(audio_jack_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(audio_jack_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(audio_jack_swigincludedir)" + @list='$(audio_jack_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(audio_jack_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(audio_jack_swigincludedir)/$$f'"; \ + $(audio_jack_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(audio_jack_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-audio_jack_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(audio_jack_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(audio_jack_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(audio_jack_swigincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-grincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(grinclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -662,8 +1088,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -675,8 +1101,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -686,13 +1112,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -708,7 +1133,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -717,7 +1142,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -729,7 +1154,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -743,23 +1168,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -779,23 +1217,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-audio-jack/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -815,8 +1251,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(audio_jack_pylibdir)" "$(DESTDIR)$(audio_jack_pythondir)" "$(DESTDIR)$(audio_jack_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -840,6 +1276,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -847,14 +1284,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-audio_jack_pylibLTLIBRARIES clean-generic \ + clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -866,15 +1303,24 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-audio_jack_pylibLTLIBRARIES \ + install-audio_jack_pythonPYTHON \ + install-audio_jack_swigincludeHEADERS install-grincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -895,34 +1341,114 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-audio_jack_pylibLTLIBRARIES \ + uninstall-audio_jack_pythonPYTHON \ + uninstall-audio_jack_swigincludeHEADERS \ + uninstall-grincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ + clean-audio_jack_pylibLTLIBRARIES clean-generic clean-libtool \ + ctags dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS - - -audio_jack.cc audio_jack.py: $(LOCAL_IFILES) $(NON_LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module audio_jack -o audio_jack.cc $(LOCAL_IFILES) - -# Don't distribute output of swig + html-am info info-am install install-am \ + install-audio_jack_pylibLTLIBRARIES \ + install-audio_jack_pythonPYTHON \ + install-audio_jack_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-audio_jack_pylibLTLIBRARIES \ + uninstall-audio_jack_pythonPYTHON \ + uninstall-audio_jack_swigincludeHEADERS \ + uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +audio_jack_pythondir_category ?= gnuradio/audio_jack +audio_jack_pylibdir_category ?= $(audio_jack_pythondir_category) + +audio_jack.h audio_jack.py audio_jack.cc: audio_jack.i + trap 'rm -rf $(DEPDIR)/audio_jack-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/audio_jack-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/audio_jack-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_jack-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/audio_jack-generate-lock; \ + else \ + while test -d $(DEPDIR)/audio_jack-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/audio_jack-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/audio_jack-generate-stamp: + 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; + $(RM) $(DEPDIR)/audio_jack.d + cp $(DEPDIR)/audio_jack.Std $(DEPDIR)/audio_jack.d + echo "" >> $(DEPDIR)/audio_jack.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_jack.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_jack.d + $(RM) $(DEPDIR)/audio_jack.Std + touch $(DEPDIR)/audio_jack-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)/audio_jack.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-jack/src/Makefile.swig.gen b/gr-audio-jack/src/Makefile.swig.gen new file mode 100644 index 00000000..9b1f158c --- /dev/null +++ b/gr-audio-jack/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 audio_jack.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/audio_jack +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/audio_jack +## +## 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. + +audio_jack_pythondir_category ?= gnuradio/audio_jack +audio_jack_pylibdir_category ?= $(audio_jack_pythondir_category) +audio_jack_pythondir = $(pythondir)/$(audio_jack_pythondir_category) +audio_jack_pylibdir = $(pyexecdir)/$(audio_jack_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +audio_jack_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)/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 . + +audio_jack_swiginclude_HEADERS = \ + audio_jack.i \ + $(audio_jack_swiginclude_headers) + +audio_jack_pylib_LTLIBRARIES = \ + _audio_jack.la + +_audio_jack_la_SOURCES = \ + audio_jack.cc \ + $(audio_jack_la_swig_sources) + +_audio_jack_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_jack_la_swig_libadd) + +_audio_jack_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_jack_la_swig_ldflags) + +_audio_jack_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_jack_la_swig_cxxflags) + +audio_jack_python_PYTHON = \ + audio_jack.py \ + $(audio_jack_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/audio_jack.d@am__quote@ + diff --git a/gr-audio-jack/src/audio_jack.i b/gr-audio-jack/src/audio_jack.i index a5fb606a..62d70d39 100644 --- a/gr-audio-jack/src/audio_jack.i +++ b/gr-audio-jack/src/audio_jack.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2005 Free Software Foundation, Inc. + * Copyright 2005,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "audio_jack_sink.h" #include "audio_jack_source.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-audio-jack/src/audio_jack_sink.h b/gr-audio-jack/src/audio_jack_sink.h index 78b93486..ac74cfc3 100644 --- a/gr-audio-jack/src/audio_jack_sink.h +++ b/gr-audio-jack/src/audio_jack_sink.h @@ -35,12 +35,12 @@ typedef boost::shared_ptr audio_jack_sink_sptr; * \brief make an JACK audio sink. * * \param sampling_rate sampling rate in Hz - * \param dev JACK device name, e.g., "gr_sink" + * \param device_name JACK device name, e.g., "gr_sink" * \param ok_to_block */ audio_jack_sink_sptr audio_jack_make_sink (int sampling_rate, - const std::string dev = "", + const std::string device_name = "", bool ok_to_block = true); int jack_sink_process (jack_nframes_t nframes, void *arg); diff --git a/gr-audio-jack/src/audio_jack_source.h b/gr-audio-jack/src/audio_jack_source.h index aa282198..8831a736 100644 --- a/gr-audio-jack/src/audio_jack_source.h +++ b/gr-audio-jack/src/audio_jack_source.h @@ -35,12 +35,12 @@ typedef boost::shared_ptr audio_jack_source_sptr; * \brief make a JACK audio source. * * \param sampling_rate sampling rate in Hz - * \param dev JACK device name, e.g., "gr_source" + * \param device_name JACK device name, e.g., "gr_source" * \param ok_to_block */ audio_jack_source_sptr audio_jack_make_source (int sampling_rate, - const std::string dev = "", + const std::string device_name = "", bool ok_to_block = true); int jack_source_process (jack_nframes_t nframes, void *arg); diff --git a/gr-audio-jack/src/qa_jack.py b/gr-audio-jack/src/qa_jack.py index 4677b966..d8a3aba8 100755 --- a/gr-audio-jack/src/qa_jack.py +++ b/gr-audio-jack/src/qa_jack.py @@ -26,10 +26,10 @@ import audio_jack class qa_jack (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-audio-oss/ChangeLog b/gr-audio-oss/ChangeLog deleted file mode 100644 index 3abd50ec..00000000 --- a/gr-audio-oss/ChangeLog +++ /dev/null @@ -1,91 +0,0 @@ -2006-03-30 Eric Blossom - - * gr-audio-oss.conf: new config file. - * src/audio_oss_sink.{h,cc,i}, src/audio_oss_source.{h,cc,i}: - added ok_to_block constructor arg (currrently ignored), and now query - preferences for latency and default input and output devices. - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac, src/Makefile.am: mods for x86_64, $(NO_UNDEFINED) - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - -2005-03-29 Eric Blossom - - * src/audio_oss.i, src/audio_oss_sink.{h,cc}, - src/audio_oss_source.{h,cc}: map zero length device name to default. - -2005-02-06 Eric Blossom - - * configure.ac: upped rev to 0.5 for release - * src/Makefile.am: backed out dependency on libpython - -2005-01-29 Eric Blossom - - * src/Makefile.am: cleanup for SWIG 1.3.24 - -2005-01-28 Stephane Fillod - - * src/Makefile.am: fixes for MinGW. - -2004-11-04 Eric Blossom - - * configure.ac: upped rev to 0.3cvs - - * configure.ac: added AC_HAVE_LIBRARY(ossaudio) check for NetBSD. - upped rev to 0.3. Made release. - -2004-10-13 Eric Blossom - - * configure.ac: upped rev to 0.2cvs - -2004-10-11 Eric Blossom - - * configure.ac: bumped rev to 0.2, make release - * Makefile.am (EXTRA_DIST): added config.h.in - -2004-09-23 Eric Blossom - - * config/usrp_fusb_tech.m4, config/bnv_have_qt.m4, config/cppunit.m4, - config/gr_check_mc4020.m4, config/gr_check_usrp.m4, config/gr_doxygen.m4, - config/gr_gprof.m4, config/gr_scripting.m4, config/gr_set_md_cpu.m4, - config/pkg.m4, config/usrp_fusb_tech.m4: added additional quoting - to first arg of AC_DEFUN to silence automake warning. - -2004-07-12 Eric Blossom - - * configure.ac: upped rev to 0.1cvs - -2004-07-09 Eric Blossom - - * src/audio_oss_source.{h,cc}: new. - * src/audio_oss_sink.{h,cc}: new. - -# -# Copyright 2004,2005,2006 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. -# diff --git a/gr-audio-oss/Makefile.am b/gr-audio-oss/Makefile.am index 2293cd91..89f7e5ce 100644 --- a/gr-audio-oss/Makefile.am +++ b/gr-audio-oss/Makefile.am @@ -21,10 +21,7 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = \ - gr-audio-oss.conf - SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-oss.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-oss.conf diff --git a/gr-audio-oss/Makefile.in b/gr-audio-oss/Makefile.in index 9d049488..e73f041c 100644 --- a/gr-audio-oss/Makefile.in +++ b/gr-audio-oss/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,29 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common ChangeLog +DIST_COMMON = $(dist_etc_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gr-audio-oss ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,10 +162,11 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -147,8 +174,10 @@ am__vpath_adj = case $$p in \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(etcdir)" -etcDATA_INSTALL = $(INSTALL_DATA) -DATA = $(etc_DATA) +dist_etcDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_etc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -156,10 +185,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -167,9 +195,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -177,6 +212,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -189,73 +226,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -265,49 +295,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -315,15 +385,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -333,16 +546,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -351,69 +582,135 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = \ - gr-audio-oss.conf +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-oss.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-oss.conf all: all-recursive .SUFFIXES: @@ -421,8 +718,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -452,23 +749,19 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-etcDATA: $(etc_DATA) +install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) - test -z "$(etcdir)" || $(mkdir_p) "$(DESTDIR)$(etcdir)" - @list='$(etc_DATA)'; for p in $$list; do \ + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ - $(etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ done -uninstall-etcDATA: +uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) - @list='$(etc_DATA)'; for p in $$list; do \ + @list='$(dist_etc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ rm -f "$(DESTDIR)$(etcdir)/$$f"; \ @@ -505,8 +798,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -550,8 +842,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -576,8 +868,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -587,13 +879,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -607,23 +898,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -637,7 +926,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -645,17 +934,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(etcdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -672,6 +966,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -687,8 +982,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -700,14 +994,22 @@ info: info-recursive info-am: -install-data-am: install-etcDATA +install-data-am: install-dist_etcDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -726,24 +1028,36 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-etcDATA uninstall-info-am +uninstall-am: uninstall-dist_etcDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-etcDATA install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-etcDATA \ - uninstall-info-am + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-dist_etcDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-oss/src/Makefile.am b/gr-audio-oss/src/Makefile.am index 72707d99..f83ba68c 100644 --- a/gr-audio-oss/src/Makefile.am +++ b/gr-audio-oss/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,70 +21,48 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.audio_oss module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in -TESTS = run_tests - -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-oss/src/audio_oss.i - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) -BUILT_SOURCES = \ - audio_oss.cc \ - audio_oss.py - -ourpython_PYTHON = \ - audio_oss.py - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) +TESTS = run_tests -ourlib_LTLIBRARIES = _audio_oss.la +DISTCLEANFILES = run_tests -_audio_oss_la_SOURCES = \ - audio_oss.cc \ - audio_oss_sink.cc \ - audio_oss_source.cc +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_oss_sink.h \ + audio_oss_source.h +noinst_PYTHON = qa_oss.py -grinclude_HEADERS = \ - audio_oss_sink.h \ - audio_oss_source.h +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +################################### +# SWIG Python interface and library -_audio_oss_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(OSS_LIBS) \ - -lstdc++ +TOP_SWIG_IFILES = \ + audio_oss.i -_audio_oss_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +# Install so that they end up available as: +# import gnuradio.audio_oss +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_oss_pythondir_category = \ + gnuradio -audio_oss.cc audio_oss.py: $(LOCAL_IFILES) $(NON_LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module audio_oss -o audio_oss.cc $(LOCAL_IFILES) +# additional sources for the SWIG-generated library +audio_oss_la_swig_sources = \ + audio_oss_sink.cc \ + audio_oss_source.cc -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# additional libraries for linking with the SWIG-generated library +audio_oss_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + $(OSS_LIBS) -noinst_PYTHON = qa_oss.py +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# 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) diff --git a/gr-audio-oss/src/Makefile.in b/gr-audio-oss/src/Makefile.in index 15daf7f4..f721f8f7 100644 --- a/gr-audio-oss/src/Makefile.in +++ b/gr-audio-oss/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 audio_oss.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +123,42 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(audio_oss_python_PYTHON) \ + $(audio_oss_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_PYTHON) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(srcdir)/run_tests.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig subdir = gr-audio-oss/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +167,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,46 +214,51 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(audio_oss_pylibdir)" \ + "$(DESTDIR)$(audio_oss_pythondir)" \ + "$(DESTDIR)$(audio_oss_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +audio_oss_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(audio_oss_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) _audio_oss_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) -am__audio_oss_la_OBJECTS = audio_oss.lo audio_oss_sink.lo \ - audio_oss_source.lo + $(am__DEPENDENCIES_2) +am__objects_1 = _audio_oss_la-audio_oss_sink.lo \ + _audio_oss_la-audio_oss_source.lo +am__audio_oss_la_OBJECTS = _audio_oss_la-audio_oss.lo $(am__objects_1) _audio_oss_la_OBJECTS = $(am__audio_oss_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_audio_oss_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_audio_oss_la_CXXFLAGS) \ + $(CXXFLAGS) $(_audio_oss_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_audio_oss_la_SOURCES) DIST_SOURCES = $(_audio_oss_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +audio_oss_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +audio_oss_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +HEADERS = $(audio_oss_swiginclude_HEADERS) $(grinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -188,9 +266,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -198,6 +283,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -210,73 +297,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -286,49 +366,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -336,15 +456,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -354,16 +617,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -372,125 +653,243 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.audio_oss module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/audio_oss-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-oss/src/audio_oss.i +DISTCLEANFILES = run_tests -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_oss_sink.h \ + audio_oss_source.h -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +noinst_PYTHON = qa_oss.py +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + audio_oss.i -BUILT_SOURCES = \ - audio_oss.cc \ - audio_oss.py -ourpython_PYTHON = \ - audio_oss.py +# Install so that they end up available as: +# import gnuradio.audio_oss +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_oss_pythondir_category = \ + gnuradio + + +# additional sources for the SWIG-generated library +audio_oss_la_swig_sources = \ + audio_oss_sink.cc \ + audio_oss_source.cc + + +# additional libraries for linking with the SWIG-generated library +audio_oss_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + $(OSS_LIBS) + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = audio_oss.py audio_oss.cc +audio_oss_pythondir = $(pythondir)/$(audio_oss_pythondir_category) +audio_oss_pylibdir = $(pyexecdir)/$(audio_oss_pylibdir_category) +audio_oss_swigincludedir = $(swigincludedir) +audio_oss_swiginclude_HEADERS = \ + audio_oss.i \ + $(audio_oss_swiginclude_headers) + +audio_oss_pylib_LTLIBRARIES = \ + _audio_oss.la -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -ourlib_LTLIBRARIES = _audio_oss.la _audio_oss_la_SOURCES = \ audio_oss.cc \ - audio_oss_sink.cc \ - audio_oss_source.cc + $(audio_oss_la_swig_sources) -grinclude_HEADERS = \ - audio_oss_sink.h \ - audio_oss_source.h +_audio_oss_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_oss_la_swig_libadd) -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +_audio_oss_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_oss_la_swig_ldflags) -_audio_oss_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(OSS_LIBS) \ - -lstdc++ +_audio_oss_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_oss_la_swig_cxxflags) + +audio_oss_python_PYTHON = \ + audio_oss.py \ + $(audio_oss_python) -_audio_oss_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -noinst_PYTHON = qa_oss.py -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -516,35 +915,35 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-audio_oss_pylibLTLIBRARIES: $(audio_oss_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(audio_oss_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(audio_oss_pylibdir)" + @list='$(audio_oss_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_oss_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(audio_oss_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_oss_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(audio_oss_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-audio_oss_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(audio_oss_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(audio_oss_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(audio_oss_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-audio_oss_pylibLTLIBRARIES: + -test -z "$(audio_oss_pylib_LTLIBRARIES)" || rm -f $(audio_oss_pylib_LTLIBRARIES) + @list='$(audio_oss_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _audio_oss.la: $(_audio_oss_la_OBJECTS) $(_audio_oss_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_audio_oss_la_LDFLAGS) $(_audio_oss_la_OBJECTS) $(_audio_oss_la_LIBADD) $(LIBS) + $(_audio_oss_la_LINK) -rpath $(audio_oss_pylibdir) $(_audio_oss_la_OBJECTS) $(_audio_oss_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -552,101 +951,118 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_oss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_oss_sink.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_oss_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_oss_la-audio_oss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_oss_la-audio_oss_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_oss_la-audio_oss_source.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_audio_oss_la-audio_oss.lo: audio_oss.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_oss_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_oss_la-audio_oss.lo -MD -MP -MF $(DEPDIR)/_audio_oss_la-audio_oss.Tpo -c -o _audio_oss_la-audio_oss.lo `test -f 'audio_oss.cc' || echo '$(srcdir)/'`audio_oss.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_oss_la-audio_oss.Tpo $(DEPDIR)/_audio_oss_la-audio_oss.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_oss.cc' object='_audio_oss_la-audio_oss.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_oss_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_oss_la-audio_oss.lo `test -f 'audio_oss.cc' || echo '$(srcdir)/'`audio_oss.cc + +_audio_oss_la-audio_oss_sink.lo: audio_oss_sink.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_oss_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_oss_la-audio_oss_sink.lo -MD -MP -MF $(DEPDIR)/_audio_oss_la-audio_oss_sink.Tpo -c -o _audio_oss_la-audio_oss_sink.lo `test -f 'audio_oss_sink.cc' || echo '$(srcdir)/'`audio_oss_sink.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_oss_la-audio_oss_sink.Tpo $(DEPDIR)/_audio_oss_la-audio_oss_sink.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_oss_sink.cc' object='_audio_oss_la-audio_oss_sink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_oss_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_oss_la-audio_oss_sink.lo `test -f 'audio_oss_sink.cc' || echo '$(srcdir)/'`audio_oss_sink.cc + +_audio_oss_la-audio_oss_source.lo: audio_oss_source.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_oss_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_oss_la-audio_oss_source.lo -MD -MP -MF $(DEPDIR)/_audio_oss_la-audio_oss_source.Tpo -c -o _audio_oss_la-audio_oss_source.lo `test -f 'audio_oss_source.cc' || echo '$(srcdir)/'`audio_oss_source.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_oss_la-audio_oss_source.Tpo $(DEPDIR)/_audio_oss_la-audio_oss_source.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_oss_source.cc' object='_audio_oss_la-audio_oss_source.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_oss_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_oss_la-audio_oss_source.lo `test -f 'audio_oss_source.cc' || echo '$(srcdir)/'`audio_oss_source.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-audio_oss_pythonPYTHON: $(audio_oss_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(audio_oss_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(audio_oss_pythondir)" + @list='$(audio_oss_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(audio_oss_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(audio_oss_pythondir)/$$f'"; \ + $(audio_oss_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(audio_oss_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(audio_oss_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(audio_oss_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-audio_oss_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(audio_oss_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(audio_oss_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(audio_oss_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(audio_oss_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-audio_oss_swigincludeHEADERS: $(audio_oss_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(audio_oss_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(audio_oss_swigincludedir)" + @list='$(audio_oss_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(audio_oss_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(audio_oss_swigincludedir)/$$f'"; \ + $(audio_oss_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(audio_oss_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-audio_oss_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(audio_oss_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(audio_oss_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(audio_oss_swigincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-grincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(grinclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -654,8 +1070,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -667,8 +1083,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -678,13 +1094,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -700,7 +1115,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -709,7 +1124,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -721,7 +1136,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -735,23 +1150,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -771,23 +1199,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-audio-oss/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -807,8 +1233,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(audio_oss_pylibdir)" "$(DESTDIR)$(audio_oss_pythondir)" "$(DESTDIR)$(audio_oss_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -832,6 +1258,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -839,14 +1266,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ +clean-am: clean-audio_oss_pylibLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -858,15 +1285,24 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-audio_oss_pylibLTLIBRARIES \ + install-audio_oss_pythonPYTHON \ + install-audio_oss_swigincludeHEADERS install-grincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -887,34 +1323,114 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-audio_oss_pylibLTLIBRARIES \ + uninstall-audio_oss_pythonPYTHON \ + uninstall-audio_oss_swigincludeHEADERS \ + uninstall-grincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ + clean-audio_oss_pylibLTLIBRARIES clean-generic clean-libtool \ + ctags dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS - - -audio_oss.cc audio_oss.py: $(LOCAL_IFILES) $(NON_LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module audio_oss -o audio_oss.cc $(LOCAL_IFILES) - -# Don't distribute output of swig + html-am info info-am install install-am \ + install-audio_oss_pylibLTLIBRARIES \ + install-audio_oss_pythonPYTHON \ + install-audio_oss_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-audio_oss_pylibLTLIBRARIES \ + uninstall-audio_oss_pythonPYTHON \ + uninstall-audio_oss_swigincludeHEADERS \ + uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +audio_oss_pythondir_category ?= gnuradio/audio_oss +audio_oss_pylibdir_category ?= $(audio_oss_pythondir_category) + +audio_oss.h audio_oss.py audio_oss.cc: audio_oss.i + trap 'rm -rf $(DEPDIR)/audio_oss-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/audio_oss-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/audio_oss-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_oss-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/audio_oss-generate-lock; \ + else \ + while test -d $(DEPDIR)/audio_oss-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/audio_oss-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/audio_oss-generate-stamp: + 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; + $(RM) $(DEPDIR)/audio_oss.d + cp $(DEPDIR)/audio_oss.Std $(DEPDIR)/audio_oss.d + echo "" >> $(DEPDIR)/audio_oss.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_oss.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_oss.d + $(RM) $(DEPDIR)/audio_oss.Std + touch $(DEPDIR)/audio_oss-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)/audio_oss.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-oss/src/Makefile.swig.gen b/gr-audio-oss/src/Makefile.swig.gen new file mode 100644 index 00000000..6fce10c1 --- /dev/null +++ b/gr-audio-oss/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 audio_oss.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/audio_oss +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/audio_oss +## +## 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. + +audio_oss_pythondir_category ?= gnuradio/audio_oss +audio_oss_pylibdir_category ?= $(audio_oss_pythondir_category) +audio_oss_pythondir = $(pythondir)/$(audio_oss_pythondir_category) +audio_oss_pylibdir = $(pyexecdir)/$(audio_oss_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +audio_oss_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)/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 . + +audio_oss_swiginclude_HEADERS = \ + audio_oss.i \ + $(audio_oss_swiginclude_headers) + +audio_oss_pylib_LTLIBRARIES = \ + _audio_oss.la + +_audio_oss_la_SOURCES = \ + audio_oss.cc \ + $(audio_oss_la_swig_sources) + +_audio_oss_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_oss_la_swig_libadd) + +_audio_oss_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_oss_la_swig_ldflags) + +_audio_oss_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_oss_la_swig_cxxflags) + +audio_oss_python_PYTHON = \ + audio_oss.py \ + $(audio_oss_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/audio_oss.d@am__quote@ + diff --git a/gr-audio-oss/src/audio_oss.i b/gr-audio-oss/src/audio_oss.i index a9dec9eb..0a2e6e6a 100644 --- a/gr-audio-oss/src/audio_oss.i +++ b/gr-audio-oss/src/audio_oss.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "audio_oss_sink.h" #include "audio_oss_source.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-audio-oss/src/qa_oss.py b/gr-audio-oss/src/qa_oss.py index a1f3b4f4..5427b50e 100755 --- a/gr-audio-oss/src/qa_oss.py +++ b/gr-audio-oss/src/qa_oss.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import audio_oss class qa_oss (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-audio-osx/AUTHORS b/gr-audio-osx/AUTHORS deleted file mode 100644 index ecc9577a..00000000 --- a/gr-audio-osx/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Michael Dickens NCIP Lab, University of Notre Dame diff --git a/gr-audio-osx/ChangeLog b/gr-audio-osx/ChangeLog deleted file mode 100644 index 5c73b6ad..00000000 --- a/gr-audio-osx/ChangeLog +++ /dev/null @@ -1,25 +0,0 @@ -2006-04-22 Michael Dickens - NCIP Lab, University of Notre Dame - - Everything is new. - -# -# Copyright 2006 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. -# diff --git a/gr-audio-osx/Makefile.in b/gr-audio-osx/Makefile.in index 9308f243..b88be622 100644 --- a/gr-audio-osx/Makefile.in +++ b/gr-audio-osx/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog TODO + $(top_srcdir)/Makefile.common TODO subdir = gr-audio-osx ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +572,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = README_OSX SUBDIRS = src all: all-recursive @@ -407,8 +707,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -439,10 +739,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -474,8 +770,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -519,8 +814,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -545,8 +840,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -556,13 +851,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -576,23 +870,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -606,7 +898,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -614,10 +906,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -638,6 +935,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -653,8 +951,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -668,12 +965,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -692,23 +997,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-osx/src/Makefile.am b/gr-audio-osx/src/Makefile.am index 5898a368..a4e69096 100644 --- a/gr-audio-osx/src/Makefile.am +++ b/gr-audio-osx/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio. # @@ -21,73 +21,60 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.audio_osx module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in -TESTS = run_tests - -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-osx/src/audio_osx.i - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -BUILT_SOURCES = \ - audio_osx.cc \ - audio_osx.py - -ourpython_PYTHON = \ - audio_osx.py -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) +TESTS = run_tests -SWIGCPPPYTHONARGS = -python $(PYTHON_CPPFLAGS) $(STD_DEFINES_AND_INCLUDES) +DISTCLEANFILES = run_tests -ourlib_LTLIBRARIES = _audio_osx.la +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -_audio_osx_la_SOURCES = \ - audio_osx.cc \ - audio_osx_sink.cc \ - audio_osx_source.cc +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_osx_sink.h \ + audio_osx_source.h noinst_HEADERS = \ audio_osx.h \ circular_buffer.h \ mld_threads.h -grinclude_HEADERS = \ - audio_osx_sink.h \ - audio_osx_source.h +noinst_PYTHON = \ + qa_osx.py \ + test_audio_loop.py + +################################### +# SWIG Python interface and library -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +TOP_SWIG_IFILES = \ + audio_osx.i -_audio_osx_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ +# Install so that they end up available as: +# import gnuradio.audio_osx +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_osx_pythondir_category = \ + gnuradio -_audio_osx_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -framework AudioUnit -framework CoreAudio -framework AudioToolbox +# additional sources for the SWIG-generated library +audio_osx_la_swig_sources = \ + audio_osx_sink.cc \ + audio_osx_source.cc -audio_osx.cc audio_osx.py: $(ALL_IFILES) - $(SWIG) $(SWIGCPPPYTHONARGS) -module audio_osx -o audio_osx.cc $(LOCAL_IFILES) +# additional libraries for linking with the SWIG-generated library +audio_osx_la_swig_libadd = \ + $(GNURADIO_CORE_LA) -noinst_PYTHON = qa_osx.py test_audio_loop.py +# additional LD flags for linking the SWIG-generated library +audio_osx_la_swig_ldflags = \ + -framework AudioUnit \ + -framework CoreAudio \ + -framework AudioToolbox -MOSTLYCLEANFILES = $(BUILT_SOURCES) *~ *.pyc run_tests *.loT +include $(top_srcdir)/Makefile.swig -CONFIG_CLEAN_FILES = run_tests *.loT +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-audio-osx/src/Makefile.in b/gr-audio-osx/src/Makefile.in index 71286e23..23f700d3 100644 --- a/gr-audio-osx/src/Makefile.in +++ b/gr-audio-osx/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio. # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 audio_osx.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +123,43 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(audio_osx_python_PYTHON) \ + $(audio_osx_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) $(noinst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig subdir = gr-audio-osx/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +168,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -134,53 +208,59 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(audio_osx_pylibdir)" \ + "$(DESTDIR)$(audio_osx_pythondir)" \ + "$(DESTDIR)$(audio_osx_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +audio_osx_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(audio_osx_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) _audio_osx_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) -am__audio_osx_la_OBJECTS = audio_osx.lo audio_osx_sink.lo \ - audio_osx_source.lo +am__objects_1 = _audio_osx_la-audio_osx_sink.lo \ + _audio_osx_la-audio_osx_source.lo +am__audio_osx_la_OBJECTS = _audio_osx_la-audio_osx.lo $(am__objects_1) _audio_osx_la_OBJECTS = $(am__audio_osx_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_audio_osx_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_audio_osx_la_CXXFLAGS) \ + $(CXXFLAGS) $(_audio_osx_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_audio_osx_la_SOURCES) DIST_SOURCES = $(_audio_osx_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +audio_osx_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +audio_osx_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(noinst_HEADERS) \ - $(swiginclude_HEADERS) +HEADERS = $(audio_osx_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -188,9 +268,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -198,6 +285,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -210,73 +299,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -286,49 +368,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -336,15 +458,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -354,16 +619,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -372,128 +655,257 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.audio_osx module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/audio_osx-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-osx/src/audio_osx.i +DISTCLEANFILES = run_tests +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_osx_sink.h \ + audio_osx_source.h -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +noinst_HEADERS = \ + audio_osx.h \ + circular_buffer.h \ + mld_threads.h + +noinst_PYTHON = \ + qa_osx.py \ + test_audio_loop.py + + +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + audio_osx.i + + +# Install so that they end up available as: +# import gnuradio.audio_osx +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_osx_pythondir_category = \ + gnuradio -BUILT_SOURCES = \ - audio_osx.cc \ - audio_osx.py -ourpython_PYTHON = \ - audio_osx.py +# additional sources for the SWIG-generated library +audio_osx_la_swig_sources = \ + audio_osx_sink.cc \ + audio_osx_source.cc + + +# additional libraries for linking with the SWIG-generated library +audio_osx_la_swig_libadd = \ + $(GNURADIO_CORE_LA) + + +# additional LD flags for linking the SWIG-generated library +audio_osx_la_swig_ldflags = \ + -framework AudioUnit \ + -framework CoreAudio \ + -framework AudioToolbox + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = audio_osx.py audio_osx.cc +audio_osx_pythondir = $(pythondir)/$(audio_osx_pythondir_category) +audio_osx_pylibdir = $(pyexecdir)/$(audio_osx_pylibdir_category) +audio_osx_swigincludedir = $(swigincludedir) +audio_osx_swiginclude_HEADERS = \ + audio_osx.i \ + $(audio_osx_swiginclude_headers) + +audio_osx_pylib_LTLIBRARIES = \ + _audio_osx.la -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGCPPPYTHONARGS = -python $(PYTHON_CPPFLAGS) $(STD_DEFINES_AND_INCLUDES) -ourlib_LTLIBRARIES = _audio_osx.la _audio_osx_la_SOURCES = \ audio_osx.cc \ - audio_osx_sink.cc \ - audio_osx_source.cc + $(audio_osx_la_swig_sources) -noinst_HEADERS = \ - audio_osx.h \ - circular_buffer.h \ - mld_threads.h +_audio_osx_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_osx_la_swig_libadd) -grinclude_HEADERS = \ - audio_osx_sink.h \ - audio_osx_source.h +_audio_osx_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_osx_la_swig_ldflags) -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +_audio_osx_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_osx_la_swig_cxxflags) -_audio_osx_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ - -_audio_osx_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -framework AudioUnit -framework CoreAudio -framework AudioToolbox -noinst_PYTHON = qa_osx.py test_audio_loop.py -MOSTLYCLEANFILES = $(BUILT_SOURCES) *~ *.pyc run_tests *.loT -CONFIG_CLEAN_FILES = run_tests *.loT +audio_osx_python_PYTHON = \ + audio_osx.py \ + $(audio_osx_python) + + +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -519,35 +931,35 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-audio_osx_pylibLTLIBRARIES: $(audio_osx_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(audio_osx_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(audio_osx_pylibdir)" + @list='$(audio_osx_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_osx_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(audio_osx_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_osx_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(audio_osx_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-audio_osx_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(audio_osx_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(audio_osx_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(audio_osx_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-audio_osx_pylibLTLIBRARIES: + -test -z "$(audio_osx_pylib_LTLIBRARIES)" || rm -f $(audio_osx_pylib_LTLIBRARIES) + @list='$(audio_osx_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _audio_osx.la: $(_audio_osx_la_OBJECTS) $(_audio_osx_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_audio_osx_la_LDFLAGS) $(_audio_osx_la_OBJECTS) $(_audio_osx_la_LIBADD) $(LIBS) + $(_audio_osx_la_LINK) -rpath $(audio_osx_pylibdir) $(_audio_osx_la_OBJECTS) $(_audio_osx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -555,101 +967,118 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_osx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_osx_sink.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_osx_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_osx_la-audio_osx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_osx_la-audio_osx_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_osx_la-audio_osx_source.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_audio_osx_la-audio_osx.lo: audio_osx.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_osx_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_osx_la-audio_osx.lo -MD -MP -MF $(DEPDIR)/_audio_osx_la-audio_osx.Tpo -c -o _audio_osx_la-audio_osx.lo `test -f 'audio_osx.cc' || echo '$(srcdir)/'`audio_osx.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_osx_la-audio_osx.Tpo $(DEPDIR)/_audio_osx_la-audio_osx.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_osx.cc' object='_audio_osx_la-audio_osx.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_osx_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_osx_la-audio_osx.lo `test -f 'audio_osx.cc' || echo '$(srcdir)/'`audio_osx.cc + +_audio_osx_la-audio_osx_sink.lo: audio_osx_sink.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_osx_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_osx_la-audio_osx_sink.lo -MD -MP -MF $(DEPDIR)/_audio_osx_la-audio_osx_sink.Tpo -c -o _audio_osx_la-audio_osx_sink.lo `test -f 'audio_osx_sink.cc' || echo '$(srcdir)/'`audio_osx_sink.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_osx_la-audio_osx_sink.Tpo $(DEPDIR)/_audio_osx_la-audio_osx_sink.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_osx_sink.cc' object='_audio_osx_la-audio_osx_sink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_osx_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_osx_la-audio_osx_sink.lo `test -f 'audio_osx_sink.cc' || echo '$(srcdir)/'`audio_osx_sink.cc + +_audio_osx_la-audio_osx_source.lo: audio_osx_source.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_osx_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_osx_la-audio_osx_source.lo -MD -MP -MF $(DEPDIR)/_audio_osx_la-audio_osx_source.Tpo -c -o _audio_osx_la-audio_osx_source.lo `test -f 'audio_osx_source.cc' || echo '$(srcdir)/'`audio_osx_source.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_osx_la-audio_osx_source.Tpo $(DEPDIR)/_audio_osx_la-audio_osx_source.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_osx_source.cc' object='_audio_osx_la-audio_osx_source.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_osx_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_osx_la-audio_osx_source.lo `test -f 'audio_osx_source.cc' || echo '$(srcdir)/'`audio_osx_source.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-audio_osx_pythonPYTHON: $(audio_osx_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(audio_osx_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(audio_osx_pythondir)" + @list='$(audio_osx_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(audio_osx_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(audio_osx_pythondir)/$$f'"; \ + $(audio_osx_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(audio_osx_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(audio_osx_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(audio_osx_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-audio_osx_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(audio_osx_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(audio_osx_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(audio_osx_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(audio_osx_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-audio_osx_swigincludeHEADERS: $(audio_osx_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(audio_osx_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(audio_osx_swigincludedir)" + @list='$(audio_osx_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(audio_osx_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(audio_osx_swigincludedir)/$$f'"; \ + $(audio_osx_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(audio_osx_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-audio_osx_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(audio_osx_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(audio_osx_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(audio_osx_swigincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-grincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(grinclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -657,8 +1086,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -670,8 +1099,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -681,13 +1110,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -703,7 +1131,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -712,7 +1140,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -724,7 +1152,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -738,23 +1166,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -774,23 +1215,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-audio-osx/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -810,8 +1249,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(audio_osx_pylibdir)" "$(DESTDIR)$(audio_osx_pythondir)" "$(DESTDIR)$(audio_osx_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -835,6 +1274,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -842,14 +1282,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ +clean-am: clean-audio_osx_pylibLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -861,15 +1301,24 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-audio_osx_pylibLTLIBRARIES \ + install-audio_osx_pythonPYTHON \ + install-audio_osx_swigincludeHEADERS install-grincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -890,34 +1339,114 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-audio_osx_pylibLTLIBRARIES \ + uninstall-audio_osx_pythonPYTHON \ + uninstall-audio_osx_swigincludeHEADERS \ + uninstall-grincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ + clean-audio_osx_pylibLTLIBRARIES clean-generic clean-libtool \ + ctags dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS - - -audio_osx.cc audio_osx.py: $(ALL_IFILES) - $(SWIG) $(SWIGCPPPYTHONARGS) -module audio_osx -o audio_osx.cc $(LOCAL_IFILES) - -# Don't distribute output of swig + html-am info info-am install install-am \ + install-audio_osx_pylibLTLIBRARIES \ + install-audio_osx_pythonPYTHON \ + install-audio_osx_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-audio_osx_pylibLTLIBRARIES \ + uninstall-audio_osx_pythonPYTHON \ + uninstall-audio_osx_swigincludeHEADERS \ + uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +audio_osx_pythondir_category ?= gnuradio/audio_osx +audio_osx_pylibdir_category ?= $(audio_osx_pythondir_category) + +audio_osx.h audio_osx.py audio_osx.cc: audio_osx.i + trap 'rm -rf $(DEPDIR)/audio_osx-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/audio_osx-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/audio_osx-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_osx-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/audio_osx-generate-lock; \ + else \ + while test -d $(DEPDIR)/audio_osx-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/audio_osx-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/audio_osx-generate-stamp: + 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; + $(RM) $(DEPDIR)/audio_osx.d + cp $(DEPDIR)/audio_osx.Std $(DEPDIR)/audio_osx.d + echo "" >> $(DEPDIR)/audio_osx.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_osx.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_osx.d + $(RM) $(DEPDIR)/audio_osx.Std + touch $(DEPDIR)/audio_osx-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)/audio_osx.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-osx/src/Makefile.swig.gen b/gr-audio-osx/src/Makefile.swig.gen new file mode 100644 index 00000000..b4fd7135 --- /dev/null +++ b/gr-audio-osx/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 audio_osx.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/audio_osx +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/audio_osx +## +## 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. + +audio_osx_pythondir_category ?= gnuradio/audio_osx +audio_osx_pylibdir_category ?= $(audio_osx_pythondir_category) +audio_osx_pythondir = $(pythondir)/$(audio_osx_pythondir_category) +audio_osx_pylibdir = $(pyexecdir)/$(audio_osx_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +audio_osx_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)/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 . + +audio_osx_swiginclude_HEADERS = \ + audio_osx.i \ + $(audio_osx_swiginclude_headers) + +audio_osx_pylib_LTLIBRARIES = \ + _audio_osx.la + +_audio_osx_la_SOURCES = \ + audio_osx.cc \ + $(audio_osx_la_swig_sources) + +_audio_osx_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_osx_la_swig_libadd) + +_audio_osx_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_osx_la_swig_ldflags) + +_audio_osx_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_osx_la_swig_cxxflags) + +audio_osx_python_PYTHON = \ + audio_osx.py \ + $(audio_osx_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/audio_osx.d@am__quote@ + diff --git a/gr-audio-osx/src/audio_osx.i b/gr-audio-osx/src/audio_osx.i index 77c0ce68..7be48726 100644 --- a/gr-audio-osx/src/audio_osx.i +++ b/gr-audio-osx/src/audio_osx.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio. * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "audio_osx_sink.h" #include "audio_osx_source.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-audio-osx/src/audio_osx_sink.cc b/gr-audio-osx/src/audio_osx_sink.cc index fd3312b6..fef21bab 100644 --- a/gr-audio-osx/src/audio_osx_sink.cc +++ b/gr-audio-osx/src/audio_osx_sink.cc @@ -154,15 +154,11 @@ audio_osx_sink::audio_osx_sink (int sample_rate, // create the stuff to regulate I/O - d_internal = new mld_mutex (); - if (d_internal == NULL) - CheckErrorAndThrow (errno, "new mld_mutex (internal)", - "audio_osx_source::audio_osx_source"); - d_cond_data = new mld_condition (); if (d_cond_data == NULL) CheckErrorAndThrow (errno, "new mld_condition (data)", "audio_osx_source::audio_osx_source"); + d_internal = d_cond_data->mutex (); // initialize the AU for output @@ -235,7 +231,6 @@ audio_osx_sink::~audio_osx_sink () d_buffers = 0; // close and delete control stuff - delete d_internal; delete d_cond_data; } @@ -258,7 +253,7 @@ audio_osx_sink::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - d_internal->wait (); + d_internal->lock (); /* take the input data, copy it, and push it to the bottom of the queue mono input are pushed onto queue[0]; @@ -289,13 +284,11 @@ audio_osx_sink::work (int noutput_items, if (d_do_block == true) { // block until there is data to return while (d_queueSampleCount > l_max_count) { -// release control so-as to allow data to be retrieved - d_internal->post (); +// release control so-as to allow data to be retrieved; // block until there is data to return d_cond_data->wait (); // the condition's signal() was called; acquire control // to keep thread safe - d_internal->wait (); } } } @@ -340,7 +333,7 @@ audio_osx_sink::work (int noutput_items, #endif // release control to allow for other processing parts to run - d_internal->post (); + d_internal->unlock (); return (noutput_items); } @@ -356,7 +349,7 @@ OSStatus audio_osx_sink::AUOutputCallback audio_osx_sink* This = (audio_osx_sink*) inRefCon; OSStatus err = noErr; - This->d_internal->wait (); + This->d_internal->lock (); #if _OSX_AU_DEBUG_ fprintf (stderr, "cb_in: SC = %4ld, in#F = %4ld\n", @@ -392,7 +385,7 @@ OSStatus audio_osx_sink::AUOutputCallback This->d_cond_data->signal (); // release control to allow for other processing parts to run - This->d_internal->post (); + This->d_internal->unlock (); return (err); } diff --git a/gr-audio-osx/src/audio_osx_source.cc b/gr-audio-osx/src/audio_osx_source.cc index 27097f10..e82e8ad2 100644 --- a/gr-audio-osx/src/audio_osx_source.cc +++ b/gr-audio-osx/src/audio_osx_source.cc @@ -114,7 +114,7 @@ audio_osx_source::audio_osx_source (int sample_rate, d_max_sample_count = max_sample_count; #if _OSX_AU_DEBUG_ - fprintf (stderr, "source(): max # samples = %ld", d_max_sample_count); + fprintf (stderr, "source(): max # samples = %ld\n", d_max_sample_count); #endif OSStatus err = noErr; @@ -248,7 +248,7 @@ audio_osx_source::audio_osx_source (int sample_rate, "audio_osx_source::audio_osx_source"); #if _OSX_AU_DEBUG_ - fprintf (stderr, "---- Device Stream Format ----\n" ); + fprintf (stderr, "\n---- Device Stream Format ----\n" ); PrintStreamDesc (&asbd_device); #endif @@ -264,7 +264,7 @@ audio_osx_source::audio_osx_source (int sample_rate, "audio_osx_source::audio_osx_source"); #if _OSX_AU_DEBUG_ - fprintf (stderr, "---- Client Stream Format ----\n"); + fprintf (stderr, "\n---- Client Stream Format ----\n"); PrintStreamDesc (&asbd_client); #endif @@ -423,15 +423,11 @@ audio_osx_source::audio_osx_source (int sample_rate, // create the stuff to regulate I/O - d_internal = new mld_mutex (); - if (d_internal == NULL) - CheckErrorAndThrow (errno, "new mld_mutex (internal)", - "audio_osx_source::audio_osx_source"); - d_cond_data = new mld_condition (); if (d_cond_data == NULL) CheckErrorAndThrow (errno, "new mld_condition (data)", "audio_osx_source::audio_osx_source"); + d_internal = d_cond_data->mutex (); // initialize the AU for input @@ -580,7 +576,6 @@ audio_osx_source::~audio_osx_source () d_buffers = 0; // close and delete the control stuff - delete d_internal; delete d_cond_data; } @@ -630,47 +625,55 @@ audio_osx_source::check_topology (int ninputs, int noutputs) } int -audio_osx_source::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) +audio_osx_source::work +(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) { -// acquire control to do processing here only - d_internal->wait (); + // acquire control to do processing here only + d_internal->lock (); #if _OSX_AU_DEBUG_ fprintf (stderr, "work1: SC = %4ld, #OI = %4d, #Chan = %ld\n", d_queueSampleCount, noutput_items, output_items.size()); #endif -// ?: always block until there is something to output from the source -// or return anything that is available, even if it's less than desired? + // set the actual # of output items to the 'desired' amount then + // verify that data is available; if not enough data is available, + // either wait until it is (is "do_block" is true), return (0) is no + // data is available and "do_block" is false, or process the actual + // amount of available data. UInt32 actual_noutput_items = noutput_items; if (d_queueSampleCount < actual_noutput_items) { if (d_queueSampleCount == 0) { -// no data; do_block decides what to do + // no data; do_block decides what to do if (d_do_block == true) { while (d_queueSampleCount == 0) { -// release control so-as to allow data to be retrieved - d_internal->post (); -// block until there is data to return + // release control so-as to allow data to be retrieved; + // block until there is data to return d_cond_data->wait (); -// the condition's signal() was called; acquire control -// to keep thread safe - d_internal->wait (); + // the condition's signal() was called; acquire control to + // keep thread safe } } else { -// not enough data & not blocking; return nothing + // no data & not blocking; return nothing + // release control so-as to allow data to be retrieved + d_internal->unlock (); return (0); } } + // use the actual amount of available data actual_noutput_items = d_queueSampleCount; } + // number of channels int l_counter = (int) output_items.size(); -// get the items from the circular buffers + // copy the items from the circular buffer(s) to 'work's output buffers + // verify that the number copied out is as expected. + while (--l_counter >= 0) { UInt32 t_n_output_items = actual_noutput_items; d_buffers[l_counter]->dequeue ((float*) output_items[l_counter], @@ -684,6 +687,9 @@ audio_osx_source::work (int noutput_items, } } + // subtract the actual number of items removed from the buffer(s) + // from the local accounting of the number of available samples + d_queueSampleCount -= actual_noutput_items; #if _OSX_AU_DEBUG_ @@ -691,21 +697,28 @@ audio_osx_source::work (int noutput_items, d_queueSampleCount, actual_noutput_items); #endif -// release control to allow for other processing parts to run - d_internal->post (); + // release control to allow for other processing parts to run + + d_internal->unlock (); + +#if _OSX_AU_DEBUG_ + fprintf (stderr, "work3: Returning.\n"); +#endif return (actual_noutput_items); } OSStatus -audio_osx_source::ConverterCallback (AudioConverterRef inAudioConverter, - UInt32* ioNumberDataPackets, - AudioBufferList* ioData, - AudioStreamPacketDescription** ioASPD, - void* inUserData) +audio_osx_source::ConverterCallback +(AudioConverterRef inAudioConverter, + UInt32* ioNumberDataPackets, + AudioBufferList* ioData, + AudioStreamPacketDescription** ioASPD, + void* inUserData) { -// take current device buffers and copy them to the tail of the input buffers -// the lead buffer is already there in the first d_leadSizeFrames slots + // take current device buffers and copy them to the tail of the + // input buffers the lead buffer is already there in the first + // d_leadSizeFrames slots audio_osx_source* This = static_cast(inUserData); AudioBufferList* l_inputABL = This->d_InputBuffer; @@ -726,6 +739,10 @@ audio_osx_source::ConverterCallback (AudioConverterRef inAudioConverter, l_ioD_AB->mDataByteSize = totalInputBufferSizeBytes; } +#if _OSX_AU_DEBUG_ + fprintf (stderr, "cc2: Returning.\n"); +#endif + return (noErr); } @@ -740,7 +757,7 @@ audio_osx_source::AUInputCallback (void* inRefCon, OSStatus err = noErr; audio_osx_source* This = static_cast(inRefCon); - This->d_internal->wait (); + This->d_internal->lock (); #if _OSX_AU_DEBUG_ fprintf (stderr, "cb0: in#F = %4ld, inBN = %ld, SC = %4ld\n", @@ -839,6 +856,11 @@ audio_osx_source::AUInputCallback (void* inRefCon, while (--l_counter >= 0) { float* inBuffer = (float*) This->d_OutputBuffer->mBuffers[l_counter].mData; + +#if _OSX_AU_DEBUG_ + fprintf (stderr, "cb3: enqueuing audio data.\n"); +#endif + int l_res = This->d_buffers[l_counter]->enqueue (inBuffer, ActualOutputFrames); if (l_res == -1) res = -1; @@ -857,7 +879,7 @@ audio_osx_source::AUInputCallback (void* inRefCon, } #if _OSX_AU_DEBUG_ - fprintf (stderr, "cb5: #OI = %4ld, #Cnt = %4ld, mSC = %ld, \n", + fprintf (stderr, "cb4: #OI = %4ld, #Cnt = %4ld, mSC = %ld, \n", ActualOutputFrames, This->d_queueSampleCount, This->d_max_sample_count); #endif @@ -865,8 +887,16 @@ audio_osx_source::AUInputCallback (void* inRefCon, // signal that data is available, if appropraite This->d_cond_data->signal (); +#if _OSX_AU_DEBUG_ + fprintf (stderr, "cb5: releasing internal mutex.\n"); +#endif + // release control to allow for other processing parts to run - This->d_internal->post (); + This->d_internal->unlock (); + +#if _OSX_AU_DEBUG_ + fprintf (stderr, "cb6: returning.\n"); +#endif return (err); } diff --git a/gr-audio-osx/src/circular_buffer.h b/gr-audio-osx/src/circular_buffer.h index 984182dd..fa451d60 100644 --- a/gr-audio-osx/src/circular_buffer.h +++ b/gr-audio-osx/src/circular_buffer.h @@ -28,6 +28,12 @@ #define DO_DEBUG 0 +#if DO_DEBUG +#define DEBUG(X) do{X} while(0); +#else +#define DEBUG(X) do{} while(0); +#endif + template class circular_buffer { private: @@ -73,12 +79,10 @@ public: d_internal = NULL; d_readBlock = d_writeBlock = NULL; reset (); -#if DO_DEBUG - fprintf (stderr, "c_b(): buf len (items) = %ld, " - "doWriteBlock = %s, doFullRead = %s\n", d_bufLen_I, - (d_doWriteBlock ? "true" : "false"), - (d_doFullRead ? "true" : "false")); -#endif + DEBUG (fprintf (stderr, "c_b(): buf len (items) = %ld, " + "doWriteBlock = %s, doFullRead = %s\n", d_bufLen_I, + (d_doWriteBlock ? "true" : "false"), + (d_doFullRead ? "true" : "false"))); }; ~circular_buffer () { @@ -110,9 +114,16 @@ public: d_readNdx_I = d_writeNdx_I = d_n_avail_read_I = 0; d_n_avail_write_I = d_bufLen_I; delete_mutex_cond (); + // create a mutex to handle contention of shared resources; + // any routine needed access to shared resources uses lock() + // before doing anything, then unlock() when finished. d_internal = new mld_mutex (); - d_readBlock = new mld_condition (); - d_writeBlock = new mld_condition (); + // link the internal mutex to the read and write conditions; + // when wait() is called, the internal mutex will automatically + // be unlock()'ed. Upon return (from a signal() to the condition), + // the internal mutex will be lock()'ed. + d_readBlock = new mld_condition (d_internal); + d_writeBlock = new mld_condition (d_internal); }; /* @@ -137,11 +148,9 @@ public: */ int enqueue (T* buf, UInt32 bufLen_I) { -#if DO_DEBUG - fprintf (stderr, "enqueue: buf = %X, bufLen = %ld, #av_wr = %ld, " - "#av_rd = %ld.\n", (unsigned int)buf, bufLen_I, - d_n_avail_write_I, d_n_avail_read_I); -#endif + DEBUG (fprintf (stderr, "enqueue: buf = %X, bufLen = %ld, #av_wr = %ld, " + "#av_rd = %ld.\n", (unsigned int)buf, bufLen_I, + d_n_avail_write_I, d_n_avail_read_I)); if (bufLen_I > d_bufLen_I) { fprintf (stderr, "cannot add buffer longer (%ld" ") than instantiated length (%ld" @@ -159,33 +168,27 @@ public: d_internal->unlock (); return (2); } + // set the return value to 1: success; change if needed + int retval = 1; if (bufLen_I > d_n_avail_write_I) { if (d_doWriteBlock) { while (bufLen_I > d_n_avail_write_I) { -#if DO_DEBUG - fprintf (stderr, "enqueue: #len > #a, waiting.\n"); -#endif - d_internal->unlock (); + DEBUG (fprintf (stderr, "enqueue: #len > #a, waiting.\n")); + // wait will automatically unlock() the internal mutex d_writeBlock->wait (); - d_internal->lock (); + // and lock() it here. if (d_doAbort) { d_internal->unlock (); -#if DO_DEBUG - fprintf (stderr, "enqueue: #len > #a, aborting.\n"); -#endif + DEBUG (fprintf (stderr, "enqueue: #len > #a, aborting.\n")); return (2); } -#if DO_DEBUG - fprintf (stderr, "enqueue: #len > #a, done waiting.\n"); -#endif + DEBUG (fprintf (stderr, "enqueue: #len > #a, done waiting.\n")); } } else { d_n_avail_read_I = d_bufLen_I - bufLen_I; d_n_avail_write_I = bufLen_I; -#if DO_DEBUG - fprintf (stderr, "circular_buffer::enqueue: overflow\n"); -#endif - return (-1); + DEBUG (fprintf (stderr, "circular_buffer::enqueue: overflow\n")); + retval = -1; } } UInt32 n_now_I = d_bufLen_I - d_writeNdx_I, n_start_I = 0; @@ -203,7 +206,7 @@ public: d_n_avail_write_I -= bufLen_I; d_readBlock->signal (); d_internal->unlock (); - return (1); + return (retval); }; /* @@ -228,11 +231,9 @@ public: */ int dequeue (T* buf, UInt32* bufLen_I) { -#if DO_DEBUG - fprintf (stderr, "dequeue: buf = %X, *bufLen = %ld, #av_wr = %ld, " - "#av_rd = %ld.\n", (unsigned int)buf, *bufLen_I, - d_n_avail_write_I, d_n_avail_read_I); -#endif + DEBUG (fprintf (stderr, "dequeue: buf = %X, *bufLen = %ld, #av_wr = %ld, " + "#av_rd = %ld.\n", (unsigned int)buf, *bufLen_I, + d_n_avail_write_I, d_n_avail_read_I)); if (!bufLen_I) throw std::runtime_error ("circular_buffer::dequeue(): " "input bufLen pointer is NULL.\n"); @@ -256,41 +257,29 @@ public: } if (d_doFullRead) { while (d_n_avail_read_I < l_bufLen_I) { -#if DO_DEBUG - fprintf (stderr, "dequeue: #a < #len, waiting.\n"); -#endif - d_internal->unlock (); + DEBUG (fprintf (stderr, "dequeue: #a < #len, waiting.\n")); + // wait will automatically unlock() the internal mutex d_readBlock->wait (); - d_internal->lock (); + // and lock() it here. if (d_doAbort) { d_internal->unlock (); -#if DO_DEBUG - fprintf (stderr, "dequeue: #a < #len, aborting.\n"); -#endif + DEBUG (fprintf (stderr, "dequeue: #a < #len, aborting.\n")); return (2); } -#if DO_DEBUG - fprintf (stderr, "dequeue: #a < #len, done waiting.\n"); -#endif + DEBUG (fprintf (stderr, "dequeue: #a < #len, done waiting.\n")); } } else { while (d_n_avail_read_I == 0) { -#if DO_DEBUG - fprintf (stderr, "dequeue: #a == 0, waiting.\n"); -#endif - d_internal->unlock (); + DEBUG (fprintf (stderr, "dequeue: #a == 0, waiting.\n")); + // wait will automatically unlock() the internal mutex d_readBlock->wait (); - d_internal->lock (); + // and lock() it here. if (d_doAbort) { d_internal->unlock (); -#if DO_DEBUG - fprintf (stderr, "dequeue: #a == 0, aborting.\n"); -#endif + DEBUG (fprintf (stderr, "dequeue: #a == 0, aborting.\n")); return (2); } -#if DO_DEBUG - fprintf (stderr, "dequeue: #a == 0, done waiting.\n"); -#endif + DEBUG (fprintf (stderr, "dequeue: #a == 0, done waiting.\n")); } } if (l_bufLen_I > d_n_avail_read_I) diff --git a/gr-audio-osx/src/mld_threads.h b/gr-audio-osx/src/mld_threads.h index cd62edff..d2fb4ea7 100644 --- a/gr-audio-osx/src/mld_threads.h +++ b/gr-audio-osx/src/mld_threads.h @@ -4,6 +4,8 @@ * * This file is part of GNU Radio. * + * Primary Author: Michael Dickens, NCIP Lab, University of Notre Dame + * * 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) @@ -25,8 +27,9 @@ /* classes which allow for either pthreads or omni_threads */ +#define __macos__ #ifdef _USE_OMNI_THREADS_ -#include +#include #else #include #endif @@ -34,6 +37,13 @@ #include #define __INLINE__ inline +#define DO_DEBUG 0 + +#if DO_DEBUG +#define DEBUG(X) do{X} while(0); +#else +#define DEBUG(X) do{} while(0); +#endif class mld_condition_t; @@ -130,12 +140,17 @@ class mld_condition_t { private: l_condition_ptr d_condition; mld_mutex_ptr d_mutex; - bool d_waiting; + bool d_i_own_mutex; public: - __INLINE__ mld_condition_t () { - d_waiting = false; - d_mutex = new mld_mutex (); + __INLINE__ mld_condition_t (mld_mutex_ptr mutex = NULL) { + if (mutex) { + d_i_own_mutex = false; + d_mutex = mutex; + } else { + d_i_own_mutex = true; + d_mutex = new mld_mutex (); + } #ifdef _USE_OMNI_THREADS_ d_condition = new omni_condition (d_mutex->mutex ()); #else @@ -159,38 +174,40 @@ public: #endif delete d_condition; d_condition = NULL; - delete d_mutex; + if (d_i_own_mutex) + delete d_mutex; d_mutex = NULL; }; + __INLINE__ mld_mutex_ptr mutex () {return (d_mutex);}; + __INLINE__ void signal () { - if (d_waiting == true) { + DEBUG (fprintf (stderr, "a ")); + #ifdef _USE_OMNI_THREADS_ - d_condition->signal (); + d_condition->signal (); #else - int l_ret = pthread_cond_signal (d_condition); - if (l_ret != 0) { - fprintf (stderr, "mld_condition_t::signal(): " - "Error %d.\n", l_ret); - } -#endif - d_waiting = false; + int l_ret = pthread_cond_signal (d_condition); + if (l_ret != 0) { + fprintf (stderr, "mld_condition_t::signal(): " + "Error %d.\n", l_ret); } +#endif + DEBUG (fprintf (stderr, "b ")); }; __INLINE__ void wait () { - if (d_waiting == false) { - d_waiting = true; + DEBUG (fprintf (stderr, "c ")); #ifdef _USE_OMNI_THREADS_ - d_condition->wait (); + d_condition->wait (); #else - int l_ret = pthread_cond_wait (d_condition, d_mutex->mutex ()); - if (l_ret != 0) { - fprintf (stderr, "mld_condition_t::wait(): " - "Error %d.\n", l_ret); - } -#endif + int l_ret = pthread_cond_wait (d_condition, d_mutex->mutex ()); + if (l_ret != 0) { + fprintf (stderr, "mld_condition_t::wait(): " + "Error %d.\n", l_ret); } +#endif + DEBUG (printf (stderr, "d ")); }; }; diff --git a/gr-audio-osx/src/qa_osx.py b/gr-audio-osx/src/qa_osx.py index 094a59e0..385aa026 100755 --- a/gr-audio-osx/src/qa_osx.py +++ b/gr-audio-osx/src/qa_osx.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio. # @@ -26,10 +26,10 @@ import audio_osx class qa_osx (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-audio-osx/src/test_audio_loop.py b/gr-audio-osx/src/test_audio_loop.py index 0453ef67..662631df 100755 --- a/gr-audio-osx/src/test_audio_loop.py +++ b/gr-audio-osx/src/test_audio_loop.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio. # @@ -25,10 +25,10 @@ from gnuradio import audio from gnuradio.eng_option import eng_option from optparse import OptionParser -class my_graph(gr.flow_graph): +class my_graph(gr.top_block): def __init__(self): - gr.flow_graph.__init__(self) + gr.top_block.__init__(self) parser = OptionParser(option_class=eng_option) parser.add_option("-O", "--audio-output", diff --git a/gr-audio-portaudio/AUTHORS b/gr-audio-portaudio/AUTHORS deleted file mode 100644 index 65ca9014..00000000 --- a/gr-audio-portaudio/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Eric Blossom -Ramakrishnan Muthukrishnan diff --git a/gr-audio-portaudio/ChangeLog b/gr-audio-portaudio/ChangeLog deleted file mode 100644 index bafa751e..00000000 --- a/gr-audio-portaudio/ChangeLog +++ /dev/null @@ -1,31 +0,0 @@ -2006-03-17 Eric Blossom - - * src/audio_portaudio_sink.{h,cc}: revised to use a gr_buffer as the - ring buffer. - -2006-03-12 Stephane Fillod - - * src/audio_portaudio_source.{h,cc}: first cut from gr-audio-jack sources. - * src/audio_portaudio_sink.{h,cc}: first cut from gr-audio-jack sources. - - -# -# Copyright 2006 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. -# diff --git a/gr-audio-portaudio/Makefile.am b/gr-audio-portaudio/Makefile.am index d55a301e..47aa808b 100644 --- a/gr-audio-portaudio/Makefile.am +++ b/gr-audio-portaudio/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,8 +21,7 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = gr-audio-portaudio.conf SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-portaudio.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-portaudio.conf diff --git a/gr-audio-portaudio/Makefile.in b/gr-audio-portaudio/Makefile.in index f832c937..085c63fd 100644 --- a/gr-audio-portaudio/Makefile.in +++ b/gr-audio-portaudio/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,29 +76,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog +DIST_COMMON = README $(dist_etc_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gr-audio-portaudio ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,10 +162,11 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -147,8 +174,10 @@ am__vpath_adj = case $$p in \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(etcdir)" -etcDATA_INSTALL = $(INSTALL_DATA) -DATA = $(etc_DATA) +dist_etcDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_etc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -156,10 +185,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -167,9 +195,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -177,6 +212,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -189,73 +226,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -265,49 +295,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -315,15 +385,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -333,16 +546,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -351,67 +582,135 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = gr-audio-portaudio.conf +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-audio-portaudio.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-audio-portaudio.conf all: all-recursive .SUFFIXES: @@ -419,8 +718,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -450,23 +749,19 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-etcDATA: $(etc_DATA) +install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) - test -z "$(etcdir)" || $(mkdir_p) "$(DESTDIR)$(etcdir)" - @list='$(etc_DATA)'; for p in $$list; do \ + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ - $(etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ done -uninstall-etcDATA: +uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) - @list='$(etc_DATA)'; for p in $$list; do \ + @list='$(dist_etc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ rm -f "$(DESTDIR)$(etcdir)/$$f"; \ @@ -503,8 +798,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -548,8 +842,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -574,8 +868,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -585,13 +879,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -605,23 +898,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -635,7 +926,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -643,17 +934,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(etcdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -670,6 +966,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -685,8 +982,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -698,14 +994,22 @@ info: info-recursive info-am: -install-data-am: install-etcDATA +install-data-am: install-dist_etcDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -724,24 +1028,36 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-etcDATA uninstall-info-am +uninstall-am: uninstall-dist_etcDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-etcDATA install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-etcDATA \ - uninstall-info-am + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-dist_etcDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-portaudio/src/Makefile.am b/gr-audio-portaudio/src/Makefile.am index b6d443ae..4b44807d 100644 --- a/gr-audio-portaudio/src/Makefile.am +++ b/gr-audio-portaudio/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,77 +21,54 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.audio_portaudio module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-portaudio/src/audio_portaudio.i - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -BUILT_SOURCES = \ - audio_portaudio.cc \ - audio_portaudio.py - -ourpython_PYTHON = \ - audio_portaudio.py - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(PORTAUDIO_CFLAGS) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -I/usr/include - -ourlib_LTLIBRARIES = _audio_portaudio.la +DISTCLEANFILES = run_tests +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \ + $(PORTAUDIO_CFLAGS) $(WITH_INCLUDES) -_audio_portaudio_la_SOURCES = \ - audio_portaudio.cc \ - audio_portaudio_sink.cc \ - audio_portaudio_source.cc \ - gri_portaudio.cc - +# C/C++ headers get installed in ${prefix}/include/gnuradio grinclude_HEADERS = \ audio_portaudio_sink.h \ audio_portaudio_source.h noinst_HEADERS = \ - gri_portaudio.h + gri_portaudio.h +noinst_PYTHON = \ + qa_portaudio.py -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +################################### +# SWIG Python interface and library -_audio_portaudio_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(PORTAUDIO_LIBS) \ - -lstdc++ +TOP_SWIG_IFILES = \ + audio_portaudio.i -_audio_portaudio_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +# Install so that they end up available as: +# import gnuradio.audio_portaudio +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_portaudio_pythondir_category = \ + gnuradio -audio_portaudio.cc audio_portaudio.py: $(ALL_IFILES) audio_portaudio_sink.h audio_portaudio_source.h - $(SWIG) $(SWIGPYTHONARGS) -module audio_portaudio -o audio_portaudio.cc $(LOCAL_IFILES) +# additional sources for the SWIG-generated library +audio_portaudio_la_swig_sources = \ + audio_portaudio_sink.cc \ + audio_portaudio_source.cc \ + gri_portaudio.cc +# additional libraries for linking with the SWIG-generated library +audio_portaudio_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + $(PORTAUDIO_LIBS) -noinst_PYTHON = \ - qa_portaudio.py +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-audio-portaudio/src/Makefile.in b/gr-audio-portaudio/src/Makefile.in index 0447a88c..08947146 100644 --- a/gr-audio-portaudio/src/Makefile.in +++ b/gr-audio-portaudio/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 audio_portaudio.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +123,43 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(audio_portaudio_python_PYTHON) \ + $(audio_portaudio_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) $(noinst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig subdir = gr-audio-portaudio/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +168,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,48 +215,55 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(audio_portaudio_pylibdir)" \ + "$(DESTDIR)$(audio_portaudio_pythondir)" \ + "$(DESTDIR)$(audio_portaudio_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +audio_portaudio_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(audio_portaudio_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) _audio_portaudio_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) -am__audio_portaudio_la_OBJECTS = audio_portaudio.lo \ - audio_portaudio_sink.lo audio_portaudio_source.lo \ - gri_portaudio.lo + $(am__DEPENDENCIES_2) +am__objects_1 = _audio_portaudio_la-audio_portaudio_sink.lo \ + _audio_portaudio_la-audio_portaudio_source.lo \ + _audio_portaudio_la-gri_portaudio.lo +am__audio_portaudio_la_OBJECTS = \ + _audio_portaudio_la-audio_portaudio.lo $(am__objects_1) _audio_portaudio_la_OBJECTS = $(am__audio_portaudio_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_audio_portaudio_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) \ + $(_audio_portaudio_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_audio_portaudio_la_SOURCES) DIST_SOURCES = $(_audio_portaudio_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +audio_portaudio_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +audio_portaudio_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(noinst_HEADERS) \ - $(swiginclude_HEADERS) +HEADERS = $(audio_portaudio_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -190,9 +271,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -200,6 +288,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -212,73 +302,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -288,49 +371,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -338,15 +461,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -356,16 +622,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -374,131 +658,251 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.audio_portaudio module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/audio_portaudio-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-portaudio/src/audio_portaudio.i +DISTCLEANFILES = run_tests +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \ + $(PORTAUDIO_CFLAGS) $(WITH_INCLUDES) -NON_LOCAL_IFILES = \ - $(GNURADIO_I) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_portaudio_sink.h \ + audio_portaudio_source.h -BUILT_SOURCES = \ - audio_portaudio.cc \ - audio_portaudio.py +noinst_HEADERS = \ + gri_portaudio.h -ourpython_PYTHON = \ - audio_portaudio.py +noinst_PYTHON = \ + qa_portaudio.py -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(PORTAUDIO_CFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -I/usr/include -ourlib_LTLIBRARIES = _audio_portaudio.la -_audio_portaudio_la_SOURCES = \ - audio_portaudio.cc \ + +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + audio_portaudio.i + + +# Install so that they end up available as: +# import gnuradio.audio_portaudio +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_portaudio_pythondir_category = \ + gnuradio + + +# additional sources for the SWIG-generated library +audio_portaudio_la_swig_sources = \ audio_portaudio_sink.cc \ audio_portaudio_source.cc \ - gri_portaudio.cc + gri_portaudio.cc -grinclude_HEADERS = \ - audio_portaudio_sink.h \ - audio_portaudio_source.h -noinst_HEADERS = \ - gri_portaudio.h +# additional libraries for linking with the SWIG-generated library +audio_portaudio_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + $(PORTAUDIO_LIBS) + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = audio_portaudio.py audio_portaudio.cc +audio_portaudio_pythondir = $(pythondir)/$(audio_portaudio_pythondir_category) +audio_portaudio_pylibdir = $(pyexecdir)/$(audio_portaudio_pylibdir_category) +audio_portaudio_swigincludedir = $(swigincludedir) +audio_portaudio_swiginclude_HEADERS = \ + audio_portaudio.i \ + $(audio_portaudio_swiginclude_headers) + +audio_portaudio_pylib_LTLIBRARIES = \ + _audio_portaudio.la -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +_audio_portaudio_la_SOURCES = \ + audio_portaudio.cc \ + $(audio_portaudio_la_swig_sources) _audio_portaudio_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(PORTAUDIO_LIBS) \ - -lstdc++ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_portaudio_la_swig_libadd) -_audio_portaudio_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -noinst_PYTHON = \ - qa_portaudio.py +_audio_portaudio_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_portaudio_la_swig_ldflags) + +_audio_portaudio_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_portaudio_la_swig_cxxflags) -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +audio_portaudio_python_PYTHON = \ + audio_portaudio.py \ + $(audio_portaudio_python) + +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -524,35 +928,35 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-audio_portaudio_pylibLTLIBRARIES: $(audio_portaudio_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(audio_portaudio_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(audio_portaudio_pylibdir)" + @list='$(audio_portaudio_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_portaudio_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(audio_portaudio_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_portaudio_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(audio_portaudio_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-audio_portaudio_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(audio_portaudio_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(audio_portaudio_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(audio_portaudio_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-audio_portaudio_pylibLTLIBRARIES: + -test -z "$(audio_portaudio_pylib_LTLIBRARIES)" || rm -f $(audio_portaudio_pylib_LTLIBRARIES) + @list='$(audio_portaudio_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _audio_portaudio.la: $(_audio_portaudio_la_OBJECTS) $(_audio_portaudio_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_audio_portaudio_la_LDFLAGS) $(_audio_portaudio_la_OBJECTS) $(_audio_portaudio_la_LIBADD) $(LIBS) + $(_audio_portaudio_la_LINK) -rpath $(audio_portaudio_pylibdir) $(_audio_portaudio_la_OBJECTS) $(_audio_portaudio_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -560,102 +964,126 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_portaudio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_portaudio_sink.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_portaudio_source.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gri_portaudio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_portaudio_la-audio_portaudio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_portaudio_la-audio_portaudio_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_portaudio_la-audio_portaudio_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_portaudio_la-gri_portaudio.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_audio_portaudio_la-audio_portaudio.lo: audio_portaudio.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_portaudio_la-audio_portaudio.lo -MD -MP -MF $(DEPDIR)/_audio_portaudio_la-audio_portaudio.Tpo -c -o _audio_portaudio_la-audio_portaudio.lo `test -f 'audio_portaudio.cc' || echo '$(srcdir)/'`audio_portaudio.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_portaudio_la-audio_portaudio.Tpo $(DEPDIR)/_audio_portaudio_la-audio_portaudio.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_portaudio.cc' object='_audio_portaudio_la-audio_portaudio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_portaudio_la-audio_portaudio.lo `test -f 'audio_portaudio.cc' || echo '$(srcdir)/'`audio_portaudio.cc + +_audio_portaudio_la-audio_portaudio_sink.lo: audio_portaudio_sink.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_portaudio_la-audio_portaudio_sink.lo -MD -MP -MF $(DEPDIR)/_audio_portaudio_la-audio_portaudio_sink.Tpo -c -o _audio_portaudio_la-audio_portaudio_sink.lo `test -f 'audio_portaudio_sink.cc' || echo '$(srcdir)/'`audio_portaudio_sink.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_portaudio_la-audio_portaudio_sink.Tpo $(DEPDIR)/_audio_portaudio_la-audio_portaudio_sink.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_portaudio_sink.cc' object='_audio_portaudio_la-audio_portaudio_sink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_portaudio_la-audio_portaudio_sink.lo `test -f 'audio_portaudio_sink.cc' || echo '$(srcdir)/'`audio_portaudio_sink.cc + +_audio_portaudio_la-audio_portaudio_source.lo: audio_portaudio_source.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_portaudio_la-audio_portaudio_source.lo -MD -MP -MF $(DEPDIR)/_audio_portaudio_la-audio_portaudio_source.Tpo -c -o _audio_portaudio_la-audio_portaudio_source.lo `test -f 'audio_portaudio_source.cc' || echo '$(srcdir)/'`audio_portaudio_source.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_portaudio_la-audio_portaudio_source.Tpo $(DEPDIR)/_audio_portaudio_la-audio_portaudio_source.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_portaudio_source.cc' object='_audio_portaudio_la-audio_portaudio_source.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_portaudio_la-audio_portaudio_source.lo `test -f 'audio_portaudio_source.cc' || echo '$(srcdir)/'`audio_portaudio_source.cc + +_audio_portaudio_la-gri_portaudio.lo: gri_portaudio.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_portaudio_la-gri_portaudio.lo -MD -MP -MF $(DEPDIR)/_audio_portaudio_la-gri_portaudio.Tpo -c -o _audio_portaudio_la-gri_portaudio.lo `test -f 'gri_portaudio.cc' || echo '$(srcdir)/'`gri_portaudio.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_portaudio_la-gri_portaudio.Tpo $(DEPDIR)/_audio_portaudio_la-gri_portaudio.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gri_portaudio.cc' object='_audio_portaudio_la-gri_portaudio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_portaudio_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_portaudio_la-gri_portaudio.lo `test -f 'gri_portaudio.cc' || echo '$(srcdir)/'`gri_portaudio.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-audio_portaudio_pythonPYTHON: $(audio_portaudio_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(audio_portaudio_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(audio_portaudio_pythondir)" + @list='$(audio_portaudio_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(audio_portaudio_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(audio_portaudio_pythondir)/$$f'"; \ + $(audio_portaudio_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(audio_portaudio_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(audio_portaudio_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(audio_portaudio_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-audio_portaudio_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(audio_portaudio_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(audio_portaudio_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(audio_portaudio_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(audio_portaudio_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-audio_portaudio_swigincludeHEADERS: $(audio_portaudio_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(audio_portaudio_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(audio_portaudio_swigincludedir)" + @list='$(audio_portaudio_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(audio_portaudio_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(audio_portaudio_swigincludedir)/$$f'"; \ + $(audio_portaudio_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(audio_portaudio_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-audio_portaudio_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(audio_portaudio_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(audio_portaudio_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(audio_portaudio_swigincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-grincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(grinclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -663,8 +1091,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -676,8 +1104,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -687,13 +1115,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -709,7 +1136,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -718,7 +1145,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -730,7 +1157,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -744,23 +1171,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -780,23 +1220,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-audio-portaudio/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -816,8 +1254,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(audio_portaudio_pylibdir)" "$(DESTDIR)$(audio_portaudio_pythondir)" "$(DESTDIR)$(audio_portaudio_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -841,6 +1279,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -848,14 +1287,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-audio_portaudio_pylibLTLIBRARIES clean-generic \ + clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -867,15 +1306,25 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-audio_portaudio_pylibLTLIBRARIES \ + install-audio_portaudio_pythonPYTHON \ + install-audio_portaudio_swigincludeHEADERS \ + install-grincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -896,34 +1345,114 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-audio_portaudio_pylibLTLIBRARIES \ + uninstall-audio_portaudio_pythonPYTHON \ + uninstall-audio_portaudio_swigincludeHEADERS \ + uninstall-grincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS - - -audio_portaudio.cc audio_portaudio.py: $(ALL_IFILES) audio_portaudio_sink.h audio_portaudio_source.h - $(SWIG) $(SWIGPYTHONARGS) -module audio_portaudio -o audio_portaudio.cc $(LOCAL_IFILES) - -# Don't distribute output of swig + clean-audio_portaudio_pylibLTLIBRARIES clean-generic \ + clean-libtool ctags dist-hook distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-audio_portaudio_pylibLTLIBRARIES \ + install-audio_portaudio_pythonPYTHON \ + install-audio_portaudio_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-audio_portaudio_pylibLTLIBRARIES \ + uninstall-audio_portaudio_pythonPYTHON \ + uninstall-audio_portaudio_swigincludeHEADERS \ + uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +audio_portaudio_pythondir_category ?= gnuradio/audio_portaudio +audio_portaudio_pylibdir_category ?= $(audio_portaudio_pythondir_category) + +audio_portaudio.h audio_portaudio.py audio_portaudio.cc: audio_portaudio.i + trap 'rm -rf $(DEPDIR)/audio_portaudio-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/audio_portaudio-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/audio_portaudio-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_portaudio-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/audio_portaudio-generate-lock; \ + else \ + while test -d $(DEPDIR)/audio_portaudio-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/audio_portaudio-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/audio_portaudio-generate-stamp: + 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; + $(RM) $(DEPDIR)/audio_portaudio.d + cp $(DEPDIR)/audio_portaudio.Std $(DEPDIR)/audio_portaudio.d + echo "" >> $(DEPDIR)/audio_portaudio.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_portaudio.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_portaudio.d + $(RM) $(DEPDIR)/audio_portaudio.Std + touch $(DEPDIR)/audio_portaudio-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)/audio_portaudio.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-portaudio/src/Makefile.swig.gen b/gr-audio-portaudio/src/Makefile.swig.gen new file mode 100644 index 00000000..368f2e32 --- /dev/null +++ b/gr-audio-portaudio/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 audio_portaudio.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/audio_portaudio +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/audio_portaudio +## +## 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. + +audio_portaudio_pythondir_category ?= gnuradio/audio_portaudio +audio_portaudio_pylibdir_category ?= $(audio_portaudio_pythondir_category) +audio_portaudio_pythondir = $(pythondir)/$(audio_portaudio_pythondir_category) +audio_portaudio_pylibdir = $(pyexecdir)/$(audio_portaudio_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +audio_portaudio_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)/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 . + +audio_portaudio_swiginclude_HEADERS = \ + audio_portaudio.i \ + $(audio_portaudio_swiginclude_headers) + +audio_portaudio_pylib_LTLIBRARIES = \ + _audio_portaudio.la + +_audio_portaudio_la_SOURCES = \ + audio_portaudio.cc \ + $(audio_portaudio_la_swig_sources) + +_audio_portaudio_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_portaudio_la_swig_libadd) + +_audio_portaudio_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_portaudio_la_swig_ldflags) + +_audio_portaudio_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_portaudio_la_swig_cxxflags) + +audio_portaudio_python_PYTHON = \ + audio_portaudio.py \ + $(audio_portaudio_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/audio_portaudio.d@am__quote@ + diff --git a/gr-audio-portaudio/src/audio_portaudio.i b/gr-audio-portaudio/src/audio_portaudio.i index ee6a3ae2..b0ec2438 100644 --- a/gr-audio-portaudio/src/audio_portaudio.i +++ b/gr-audio-portaudio/src/audio_portaudio.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "audio_portaudio_sink.h" #include "audio_portaudio_source.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-audio-portaudio/src/audio_portaudio_sink.cc b/gr-audio-portaudio/src/audio_portaudio_sink.cc index 13197192..cfdc6302 100644 --- a/gr-audio-portaudio/src/audio_portaudio_sink.cc +++ b/gr-audio-portaudio/src/audio_portaudio_sink.cc @@ -32,7 +32,8 @@ #include #include #include -#include +#include +#include #define LOGGING 0 // define to 0 or 1 diff --git a/gr-audio-portaudio/src/audio_portaudio_sink.h b/gr-audio-portaudio/src/audio_portaudio_sink.h index cc301050..0e082c5e 100644 --- a/gr-audio-portaudio/src/audio_portaudio_sink.h +++ b/gr-audio-portaudio/src/audio_portaudio_sink.h @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include #include @@ -34,14 +34,15 @@ class audio_portaudio_sink; typedef boost::shared_ptr audio_portaudio_sink_sptr; /*! - * \PORTAUDIO audio sink. + * \brief PORTAUDIO audio sink. + * * \param sampling_rate sampling rate in Hz - * \param dev PORTAUDIO device name, e.g., "pa:" + * \param device_name PORTAUDIO device name, e.g., "pa:" * \param ok_to_block true if it's ok for us to block */ audio_portaudio_sink_sptr audio_portaudio_make_sink (int sampling_rate, - const std::string dev = "", + const std::string device_name = "", bool ok_to_block = true); PaStreamCallback portaudio_sink_callback; diff --git a/gr-audio-portaudio/src/audio_portaudio_source.cc b/gr-audio-portaudio/src/audio_portaudio_source.cc index 653c16e0..29d63a8e 100644 --- a/gr-audio-portaudio/src/audio_portaudio_source.cc +++ b/gr-audio-portaudio/src/audio_portaudio_source.cc @@ -32,7 +32,8 @@ #include #include #include -#include +#include +#include #define LOGGING 0 // define to 0 or 1 diff --git a/gr-audio-portaudio/src/audio_portaudio_source.h b/gr-audio-portaudio/src/audio_portaudio_source.h index c132268c..d14fe805 100644 --- a/gr-audio-portaudio/src/audio_portaudio_source.h +++ b/gr-audio-portaudio/src/audio_portaudio_source.h @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include #include @@ -34,14 +34,15 @@ class audio_portaudio_source; typedef boost::shared_ptr audio_portaudio_source_sptr; /*! - * \PORTAUDIO audio source. + * \brief PORTAUDIO audio source. + * * \param sampling_rate sampling rate in Hz - * \param dev PORTAUDIO device name, e.g., "pa:" + * \param device_name PORTAUDIO device name, e.g., "pa:" * \param ok_to_block true if it's ok for us to block */ audio_portaudio_source_sptr audio_portaudio_make_source (int sampling_rate, - const std::string dev = "", + const std::string device_name = "", bool ok_to_block = true); PaStreamCallback portaudio_source_callback; diff --git a/gr-audio-portaudio/src/qa_portaudio.py b/gr-audio-portaudio/src/qa_portaudio.py index 3ba656b5..f6a54061 100755 --- a/gr-audio-portaudio/src/qa_portaudio.py +++ b/gr-audio-portaudio/src/qa_portaudio.py @@ -26,10 +26,10 @@ import audio_portaudio class qa_portaudio (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-audio-windows/AUTHORS b/gr-audio-windows/AUTHORS deleted file mode 100644 index a11898d6..00000000 --- a/gr-audio-windows/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Eric Blossom -Martin Dvh diff --git a/gr-audio-windows/ChangeLog b/gr-audio-windows/ChangeLog deleted file mode 100644 index 1703a251..00000000 --- a/gr-audio-windows/ChangeLog +++ /dev/null @@ -1,42 +0,0 @@ -2005-08-09 Eric Blossom - - * config/gr_python.m4: tweak for cygwin from Andrew Beck. - * src/audio_windows_sink.h: #define NOMINMAX to keep windows from - defining min and max under Cygwin. - -2005-07-23 Stephane Fillod - - * config/gr_libgnuradio_core_extra_ldflags.m4: new - * config/Makefile.am, configure.ac, src/Makefile.am: added - EXTRA_LDFLAGS for --enable-runtime-pseudo-reloc option. - * config/gr_python.m4: update from gnuradio-core - -2005-07-07 Eric Blossom - - * src/audio_windows_source.cc: reformatted slightly. - -2005-05-12 Martin Dvh - - Initial version based loosely on gr-audio-oss-0.6 - only audio_sink for now (audio_source is empty stub) - -# -# Copyright 2004,2005 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. -# diff --git a/gr-audio-windows/Makefile.in b/gr-audio-windows/Makefile.in index 19b5c199..fd28371b 100644 --- a/gr-audio-windows/Makefile.in +++ b/gr-audio-windows/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog + $(top_srcdir)/Makefile.common subdir = gr-audio-windows ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +572,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-windows/src/Makefile.am b/gr-audio-windows/src/Makefile.am index 83915656..1a8ededa 100644 --- a/gr-audio-windows/src/Makefile.am +++ b/gr-audio-windows/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,71 +21,52 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.audio_windows module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in -TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-windows/src/audio_windows.i +TESTS = run_tests -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +DISTCLEANFILES = run_tests -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +noinst_PYTHON = qa_audio_windows.py -BUILT_SOURCES = \ - audio_windows.cc \ - audio_windows.py +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -ourpython_PYTHON = \ - audio_windows.py +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_windows_sink.h \ + audio_windows_source.h -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) +################################### +# SWIG Python interface and library -SWIGCPPPYTHONARGS = -python $(PYTHON_CPPFLAGS) $(STD_DEFINES_AND_INCLUDES) +TOP_SWIG_IFILES = \ + audio_windows.i -ourlib_LTLIBRARIES = _audio_windows.la +# Install so that they end up available as: +# import gnuradio.audio_windows +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_windows_pythondir_category = \ + gnuradio -_audio_windows_la_SOURCES = \ - audio_windows.cc \ +# additional sources for the SWIG-generated library +audio_windows_la_swig_sources = \ audio_windows_sink.cc \ - audio_windows_source.cc + audio_windows_source.cc - -grinclude_HEADERS = \ - audio_windows_sink.h \ - audio_windows_source.h - -swiginclude_HEADERS = \ - $(LOCAL_IFILES) - -_audio_windows_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ +# additional libraries for linking with the SWIG-generated library +audio_windows_la_swig_libadd = \ $(GNURADIO_CORE_LA) \ - $(WINAUDIO_LIBS) \ - -lstdc++ - -_audio_windows_la_LDFLAGS = -no-undefined -module -avoid-version \ - $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) + $(WINAUDIO_LIBS) -audio_windows.cc audio_windows.py: $(LOCAL_IFILES) - $(SWIG) $(SWIGCPPPYTHONARGS) -module audio_windows -o audio_windows.cc $(LOCAL_IFILES) +# additional LD flags for linking the SWIG-generated library +audio_windows_la_swig_ldflags = \ + $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) +include $(top_srcdir)/Makefile.swig -noinst_PYTHON = qa_audio_windows.py - -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-audio-windows/src/Makefile.in b/gr-audio-windows/src/Makefile.in index 6d618d50..e988121b 100644 --- a/gr-audio-windows/src/Makefile.in +++ b/gr-audio-windows/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 audio_windows.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +123,42 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(audio_windows_python_PYTHON) \ + $(audio_windows_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(noinst_PYTHON) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(srcdir)/run_tests.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig subdir = gr-audio-windows/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +167,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,46 +214,53 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(audio_windows_pylibdir)" \ + "$(DESTDIR)$(audio_windows_pythondir)" \ + "$(DESTDIR)$(audio_windows_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +audio_windows_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(audio_windows_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) _audio_windows_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) -am__audio_windows_la_OBJECTS = audio_windows.lo audio_windows_sink.lo \ - audio_windows_source.lo + $(am__DEPENDENCIES_2) +am__objects_1 = _audio_windows_la-audio_windows_sink.lo \ + _audio_windows_la-audio_windows_source.lo +am__audio_windows_la_OBJECTS = _audio_windows_la-audio_windows.lo \ + $(am__objects_1) _audio_windows_la_OBJECTS = $(am__audio_windows_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_audio_windows_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) \ + $(_audio_windows_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_audio_windows_la_SOURCES) DIST_SOURCES = $(_audio_windows_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +audio_windows_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +audio_windows_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +HEADERS = $(audio_windows_swiginclude_HEADERS) $(grinclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -188,9 +268,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -198,6 +285,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -210,73 +299,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -286,49 +368,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -336,15 +458,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -354,16 +619,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -372,127 +655,248 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.audio_windows module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/audio_windows-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-audio-windows/src/audio_windows.i +DISTCLEANFILES = run_tests +noinst_PYTHON = qa_audio_windows.py +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + audio_windows_sink.h \ + audio_windows_source.h -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) -BUILT_SOURCES = \ - audio_windows.cc \ - audio_windows.py +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + audio_windows.i -ourpython_PYTHON = \ - audio_windows.py -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGCPPPYTHONARGS = -python $(PYTHON_CPPFLAGS) $(STD_DEFINES_AND_INCLUDES) -ourlib_LTLIBRARIES = _audio_windows.la -_audio_windows_la_SOURCES = \ - audio_windows.cc \ +# Install so that they end up available as: +# import gnuradio.audio_windows +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +audio_windows_pythondir_category = \ + gnuradio + + +# additional sources for the SWIG-generated library +audio_windows_la_swig_sources = \ audio_windows_sink.cc \ - audio_windows_source.cc + audio_windows_source.cc -grinclude_HEADERS = \ - audio_windows_sink.h \ - audio_windows_source.h -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +# additional libraries for linking with the SWIG-generated library +audio_windows_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + $(WINAUDIO_LIBS) + + +# additional LD flags for linking the SWIG-generated library +audio_windows_la_swig_ldflags = \ + $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = audio_windows.py audio_windows.cc +audio_windows_pythondir = $(pythondir)/$(audio_windows_pythondir_category) +audio_windows_pylibdir = $(pyexecdir)/$(audio_windows_pylibdir_category) +audio_windows_swigincludedir = $(swigincludedir) +audio_windows_swiginclude_HEADERS = \ + audio_windows.i \ + $(audio_windows_swiginclude_headers) + +audio_windows_pylib_LTLIBRARIES = \ + _audio_windows.la + +_audio_windows_la_SOURCES = \ + audio_windows.cc \ + $(audio_windows_la_swig_sources) _audio_windows_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(WINAUDIO_LIBS) \ - -lstdc++ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_windows_la_swig_libadd) -_audio_windows_la_LDFLAGS = -no-undefined -module -avoid-version \ - $(LIBGNURADIO_CORE_EXTRA_LDFLAGS) +_audio_windows_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_windows_la_swig_ldflags) -noinst_PYTHON = qa_audio_windows.py -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +_audio_windows_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_windows_la_swig_cxxflags) +audio_windows_python_PYTHON = \ + audio_windows.py \ + $(audio_windows_python) + + +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -518,35 +922,35 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-audio_windows_pylibLTLIBRARIES: $(audio_windows_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(audio_windows_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(audio_windows_pylibdir)" + @list='$(audio_windows_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_windows_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(audio_windows_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(audio_windows_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(audio_windows_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-audio_windows_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(audio_windows_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(audio_windows_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(audio_windows_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-audio_windows_pylibLTLIBRARIES: + -test -z "$(audio_windows_pylib_LTLIBRARIES)" || rm -f $(audio_windows_pylib_LTLIBRARIES) + @list='$(audio_windows_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _audio_windows.la: $(_audio_windows_la_OBJECTS) $(_audio_windows_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_audio_windows_la_LDFLAGS) $(_audio_windows_la_OBJECTS) $(_audio_windows_la_LIBADD) $(LIBS) + $(_audio_windows_la_LINK) -rpath $(audio_windows_pylibdir) $(_audio_windows_la_OBJECTS) $(_audio_windows_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -554,101 +958,118 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_windows.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_windows_sink.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio_windows_source.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_windows_la-audio_windows.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_windows_la-audio_windows_sink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_audio_windows_la-audio_windows_source.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_audio_windows_la-audio_windows.lo: audio_windows.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_windows_la-audio_windows.lo -MD -MP -MF $(DEPDIR)/_audio_windows_la-audio_windows.Tpo -c -o _audio_windows_la-audio_windows.lo `test -f 'audio_windows.cc' || echo '$(srcdir)/'`audio_windows.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_windows_la-audio_windows.Tpo $(DEPDIR)/_audio_windows_la-audio_windows.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_windows.cc' object='_audio_windows_la-audio_windows.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_windows_la-audio_windows.lo `test -f 'audio_windows.cc' || echo '$(srcdir)/'`audio_windows.cc + +_audio_windows_la-audio_windows_sink.lo: audio_windows_sink.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_windows_la-audio_windows_sink.lo -MD -MP -MF $(DEPDIR)/_audio_windows_la-audio_windows_sink.Tpo -c -o _audio_windows_la-audio_windows_sink.lo `test -f 'audio_windows_sink.cc' || echo '$(srcdir)/'`audio_windows_sink.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_windows_la-audio_windows_sink.Tpo $(DEPDIR)/_audio_windows_la-audio_windows_sink.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_windows_sink.cc' object='_audio_windows_la-audio_windows_sink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_windows_la-audio_windows_sink.lo `test -f 'audio_windows_sink.cc' || echo '$(srcdir)/'`audio_windows_sink.cc + +_audio_windows_la-audio_windows_source.lo: audio_windows_source.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) -MT _audio_windows_la-audio_windows_source.lo -MD -MP -MF $(DEPDIR)/_audio_windows_la-audio_windows_source.Tpo -c -o _audio_windows_la-audio_windows_source.lo `test -f 'audio_windows_source.cc' || echo '$(srcdir)/'`audio_windows_source.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_audio_windows_la-audio_windows_source.Tpo $(DEPDIR)/_audio_windows_la-audio_windows_source.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='audio_windows_source.cc' object='_audio_windows_la-audio_windows_source.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_audio_windows_la_CXXFLAGS) $(CXXFLAGS) -c -o _audio_windows_la-audio_windows_source.lo `test -f 'audio_windows_source.cc' || echo '$(srcdir)/'`audio_windows_source.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-audio_windows_pythonPYTHON: $(audio_windows_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(audio_windows_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(audio_windows_pythondir)" + @list='$(audio_windows_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(audio_windows_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(audio_windows_pythondir)/$$f'"; \ + $(audio_windows_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(audio_windows_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(audio_windows_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(audio_windows_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-audio_windows_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(audio_windows_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(audio_windows_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(audio_windows_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(audio_windows_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-audio_windows_swigincludeHEADERS: $(audio_windows_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(audio_windows_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(audio_windows_swigincludedir)" + @list='$(audio_windows_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(audio_windows_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(audio_windows_swigincludedir)/$$f'"; \ + $(audio_windows_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(audio_windows_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-audio_windows_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(audio_windows_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(audio_windows_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(audio_windows_swigincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-grincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(grinclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -656,8 +1077,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -669,8 +1090,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -680,13 +1101,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -702,7 +1122,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -711,7 +1131,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -723,7 +1143,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -737,23 +1157,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -773,23 +1206,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-audio-windows/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -809,8 +1240,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(audio_windows_pylibdir)" "$(DESTDIR)$(audio_windows_pythondir)" "$(DESTDIR)$(audio_windows_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -834,6 +1265,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -841,14 +1273,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-audio_windows_pylibLTLIBRARIES clean-generic \ + clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -860,15 +1292,25 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-audio_windows_pylibLTLIBRARIES \ + install-audio_windows_pythonPYTHON \ + install-audio_windows_swigincludeHEADERS \ + install-grincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -889,34 +1331,114 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-audio_windows_pylibLTLIBRARIES \ + uninstall-audio_windows_pythonPYTHON \ + uninstall-audio_windows_swigincludeHEADERS \ + uninstall-grincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS - - -audio_windows.cc audio_windows.py: $(LOCAL_IFILES) - $(SWIG) $(SWIGCPPPYTHONARGS) -module audio_windows -o audio_windows.cc $(LOCAL_IFILES) - -# Don't distribute output of swig + clean-audio_windows_pylibLTLIBRARIES clean-generic \ + clean-libtool ctags dist-hook distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-audio_windows_pylibLTLIBRARIES \ + install-audio_windows_pythonPYTHON \ + install-audio_windows_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-audio_windows_pylibLTLIBRARIES \ + uninstall-audio_windows_pythonPYTHON \ + uninstall-audio_windows_swigincludeHEADERS \ + uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +audio_windows_pythondir_category ?= gnuradio/audio_windows +audio_windows_pylibdir_category ?= $(audio_windows_pythondir_category) + +audio_windows.h audio_windows.py audio_windows.cc: audio_windows.i + trap 'rm -rf $(DEPDIR)/audio_windows-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/audio_windows-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/audio_windows-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/audio_windows-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/audio_windows-generate-lock; \ + else \ + while test -d $(DEPDIR)/audio_windows-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/audio_windows-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/audio_windows-generate-stamp: + 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; + $(RM) $(DEPDIR)/audio_windows.d + cp $(DEPDIR)/audio_windows.Std $(DEPDIR)/audio_windows.d + echo "" >> $(DEPDIR)/audio_windows.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/audio_windows.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/audio_windows.d + $(RM) $(DEPDIR)/audio_windows.Std + touch $(DEPDIR)/audio_windows-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)/audio_windows.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-audio-windows/src/Makefile.swig.gen b/gr-audio-windows/src/Makefile.swig.gen new file mode 100644 index 00000000..61215b89 --- /dev/null +++ b/gr-audio-windows/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 audio_windows.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/audio_windows +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/audio_windows +## +## 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. + +audio_windows_pythondir_category ?= gnuradio/audio_windows +audio_windows_pylibdir_category ?= $(audio_windows_pythondir_category) +audio_windows_pythondir = $(pythondir)/$(audio_windows_pythondir_category) +audio_windows_pylibdir = $(pyexecdir)/$(audio_windows_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +audio_windows_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)/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 . + +audio_windows_swiginclude_HEADERS = \ + audio_windows.i \ + $(audio_windows_swiginclude_headers) + +audio_windows_pylib_LTLIBRARIES = \ + _audio_windows.la + +_audio_windows_la_SOURCES = \ + audio_windows.cc \ + $(audio_windows_la_swig_sources) + +_audio_windows_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(audio_windows_la_swig_libadd) + +_audio_windows_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(audio_windows_la_swig_ldflags) + +_audio_windows_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(audio_windows_la_swig_cxxflags) + +audio_windows_python_PYTHON = \ + audio_windows.py \ + $(audio_windows_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/audio_windows.d@am__quote@ + diff --git a/gr-audio-windows/src/audio_windows.i b/gr-audio-windows/src/audio_windows.i index 17ce02b5..b5b6f562 100644 --- a/gr-audio-windows/src/audio_windows.i +++ b/gr-audio-windows/src/audio_windows.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "audio_windows_sink.h" #include "audio_windows_source.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-audio-windows/src/qa_audio_windows.py b/gr-audio-windows/src/qa_audio_windows.py index 065686ad..0d14535a 100755 --- a/gr-audio-windows/src/qa_audio_windows.py +++ b/gr-audio-windows/src/qa_audio_windows.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import audio_windows class qa_oss (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-cvsd-vocoder/Makefile.am b/gr-cvsd-vocoder/Makefile.am new file mode 100644 index 00000000..f2e92964 --- /dev/null +++ b/gr-cvsd-vocoder/Makefile.am @@ -0,0 +1,25 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src +DIST_SUBDIRS = src diff --git a/gr-cvsd-vocoder/Makefile.in b/gr-cvsd-vocoder/Makefile.in new file mode 100644 index 00000000..92bdb7eb --- /dev/null +++ b/gr-cvsd-vocoder/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-cvsd-vocoder +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src +DIST_SUBDIRS = src +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-cvsd-vocoder/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-cvsd-vocoder/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-cvsd-vocoder/src/Makefile.am b/gr-cvsd-vocoder/src/Makefile.am new file mode 100644 index 00000000..e3f0399e --- /dev/null +++ b/gr-cvsd-vocoder/src/Makefile.am @@ -0,0 +1,22 @@ +# +# 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. +# + +SUBDIRS = lib python diff --git a/gr-cvsd-vocoder/src/Makefile.in b/gr-cvsd-vocoder/src/Makefile.in new file mode 100644 index 00000000..92c4e631 --- /dev/null +++ b/gr-cvsd-vocoder/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-cvsd-vocoder/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = lib python +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-cvsd-vocoder/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-cvsd-vocoder/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-cvsd-vocoder/src/lib/Makefile.am b/gr-cvsd-vocoder/src/lib/Makefile.am new file mode 100644 index 00000000..78a7c640 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/Makefile.am @@ -0,0 +1,59 @@ +# +# Copyright 2004,2005,2008,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. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + cvsd_decode_bs.h \ + cvsd_encode_sb.h + +################################### +# SWIG Python interface and library + +TOP_SWIG_IFILES = \ + cvsd_vocoder.i + +# Install so that they end up available as: +# import gnuradio.vocoder.cvsd_vocoder +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/vocoder +cvsd_vocoder_pythondir_category = \ + gnuradio/vocoder + +# additional sources for the SWIG-generated library +cvsd_vocoder_la_swig_sources = \ + cvsd_decode_bs.cc \ + cvsd_encode_sb.cc + +# additional libraries for linking with the SWIG-generated library +cvsd_vocoder_la_swig_libadd = \ + $(GNURADIO_CORE_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) diff --git a/gr-cvsd-vocoder/src/lib/Makefile.in b/gr-cvsd-vocoder/src/lib/Makefile.in new file mode 100644 index 00000000..c648b4a0 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/Makefile.in @@ -0,0 +1,1344 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# 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 cvsd_vocoder.i + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(cvsd_vocoder_python_PYTHON) \ + $(cvsd_vocoder_swiginclude_HEADERS) $(grinclude_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig +subdir = gr-cvsd-vocoder/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(cvsd_vocoder_pylibdir)" \ + "$(DESTDIR)$(cvsd_vocoder_pythondir)" \ + "$(DESTDIR)$(cvsd_vocoder_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +cvsd_vocoder_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(cvsd_vocoder_pylib_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +_cvsd_vocoder_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__objects_1 = _cvsd_vocoder_la-cvsd_decode_bs.lo \ + _cvsd_vocoder_la-cvsd_encode_sb.lo +am__cvsd_vocoder_la_OBJECTS = _cvsd_vocoder_la-cvsd_vocoder.lo \ + $(am__objects_1) +_cvsd_vocoder_la_OBJECTS = $(am__cvsd_vocoder_la_OBJECTS) +_cvsd_vocoder_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) \ + $(_cvsd_vocoder_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_cvsd_vocoder_la_SOURCES) +DIST_SOURCES = $(_cvsd_vocoder_la_SOURCES) +cvsd_vocoder_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +cvsd_vocoder_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(cvsd_vocoder_swiginclude_HEADERS) $(grinclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/cvsd_vocoder-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + cvsd_decode_bs.h \ + cvsd_encode_sb.h + + +################################### +# SWIG Python interface and library +TOP_SWIG_IFILES = \ + cvsd_vocoder.i + + +# Install so that they end up available as: +# import gnuradio.vocoder.cvsd_vocoder +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/vocoder +cvsd_vocoder_pythondir_category = \ + gnuradio/vocoder + + +# additional sources for the SWIG-generated library +cvsd_vocoder_la_swig_sources = \ + cvsd_decode_bs.cc \ + cvsd_encode_sb.cc + + +# additional libraries for linking with the SWIG-generated library +cvsd_vocoder_la_swig_libadd = \ + $(GNURADIO_CORE_LA) + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = cvsd_vocoder.py cvsd_vocoder.cc +cvsd_vocoder_pythondir = $(pythondir)/$(cvsd_vocoder_pythondir_category) +cvsd_vocoder_pylibdir = $(pyexecdir)/$(cvsd_vocoder_pylibdir_category) +cvsd_vocoder_swigincludedir = $(swigincludedir) +cvsd_vocoder_swiginclude_HEADERS = \ + cvsd_vocoder.i \ + $(cvsd_vocoder_swiginclude_headers) + +cvsd_vocoder_pylib_LTLIBRARIES = \ + _cvsd_vocoder.la + +_cvsd_vocoder_la_SOURCES = \ + cvsd_vocoder.cc \ + $(cvsd_vocoder_la_swig_sources) + +_cvsd_vocoder_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(cvsd_vocoder_la_swig_libadd) + +_cvsd_vocoder_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(cvsd_vocoder_la_swig_ldflags) + +_cvsd_vocoder_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(cvsd_vocoder_la_swig_cxxflags) + +cvsd_vocoder_python_PYTHON = \ + cvsd_vocoder.py \ + $(cvsd_vocoder_python) + + +# 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) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-cvsd-vocoder/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-cvsd-vocoder/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-cvsd_vocoder_pylibLTLIBRARIES: $(cvsd_vocoder_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(cvsd_vocoder_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(cvsd_vocoder_pylibdir)" + @list='$(cvsd_vocoder_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(cvsd_vocoder_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(cvsd_vocoder_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(cvsd_vocoder_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(cvsd_vocoder_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-cvsd_vocoder_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(cvsd_vocoder_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(cvsd_vocoder_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(cvsd_vocoder_pylibdir)/$$p"; \ + done + +clean-cvsd_vocoder_pylibLTLIBRARIES: + -test -z "$(cvsd_vocoder_pylib_LTLIBRARIES)" || rm -f $(cvsd_vocoder_pylib_LTLIBRARIES) + @list='$(cvsd_vocoder_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_cvsd_vocoder.la: $(_cvsd_vocoder_la_OBJECTS) $(_cvsd_vocoder_la_DEPENDENCIES) + $(_cvsd_vocoder_la_LINK) -rpath $(cvsd_vocoder_pylibdir) $(_cvsd_vocoder_la_OBJECTS) $(_cvsd_vocoder_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_cvsd_vocoder_la-cvsd_decode_bs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_cvsd_vocoder_la-cvsd_encode_sb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_cvsd_vocoder_la-cvsd_vocoder.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +_cvsd_vocoder_la-cvsd_vocoder.lo: cvsd_vocoder.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) -MT _cvsd_vocoder_la-cvsd_vocoder.lo -MD -MP -MF $(DEPDIR)/_cvsd_vocoder_la-cvsd_vocoder.Tpo -c -o _cvsd_vocoder_la-cvsd_vocoder.lo `test -f 'cvsd_vocoder.cc' || echo '$(srcdir)/'`cvsd_vocoder.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_cvsd_vocoder_la-cvsd_vocoder.Tpo $(DEPDIR)/_cvsd_vocoder_la-cvsd_vocoder.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cvsd_vocoder.cc' object='_cvsd_vocoder_la-cvsd_vocoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) -c -o _cvsd_vocoder_la-cvsd_vocoder.lo `test -f 'cvsd_vocoder.cc' || echo '$(srcdir)/'`cvsd_vocoder.cc + +_cvsd_vocoder_la-cvsd_decode_bs.lo: cvsd_decode_bs.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) -MT _cvsd_vocoder_la-cvsd_decode_bs.lo -MD -MP -MF $(DEPDIR)/_cvsd_vocoder_la-cvsd_decode_bs.Tpo -c -o _cvsd_vocoder_la-cvsd_decode_bs.lo `test -f 'cvsd_decode_bs.cc' || echo '$(srcdir)/'`cvsd_decode_bs.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_cvsd_vocoder_la-cvsd_decode_bs.Tpo $(DEPDIR)/_cvsd_vocoder_la-cvsd_decode_bs.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cvsd_decode_bs.cc' object='_cvsd_vocoder_la-cvsd_decode_bs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) -c -o _cvsd_vocoder_la-cvsd_decode_bs.lo `test -f 'cvsd_decode_bs.cc' || echo '$(srcdir)/'`cvsd_decode_bs.cc + +_cvsd_vocoder_la-cvsd_encode_sb.lo: cvsd_encode_sb.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) -MT _cvsd_vocoder_la-cvsd_encode_sb.lo -MD -MP -MF $(DEPDIR)/_cvsd_vocoder_la-cvsd_encode_sb.Tpo -c -o _cvsd_vocoder_la-cvsd_encode_sb.lo `test -f 'cvsd_encode_sb.cc' || echo '$(srcdir)/'`cvsd_encode_sb.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_cvsd_vocoder_la-cvsd_encode_sb.Tpo $(DEPDIR)/_cvsd_vocoder_la-cvsd_encode_sb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cvsd_encode_sb.cc' object='_cvsd_vocoder_la-cvsd_encode_sb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_cvsd_vocoder_la_CXXFLAGS) $(CXXFLAGS) -c -o _cvsd_vocoder_la-cvsd_encode_sb.lo `test -f 'cvsd_encode_sb.cc' || echo '$(srcdir)/'`cvsd_encode_sb.cc + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-cvsd_vocoder_pythonPYTHON: $(cvsd_vocoder_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(cvsd_vocoder_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(cvsd_vocoder_pythondir)" + @list='$(cvsd_vocoder_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(cvsd_vocoder_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(cvsd_vocoder_pythondir)/$$f'"; \ + $(cvsd_vocoder_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(cvsd_vocoder_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(cvsd_vocoder_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(cvsd_vocoder_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-cvsd_vocoder_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(cvsd_vocoder_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(cvsd_vocoder_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(cvsd_vocoder_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(cvsd_vocoder_pythondir)/$${f}o"; \ + done +install-cvsd_vocoder_swigincludeHEADERS: $(cvsd_vocoder_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(cvsd_vocoder_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(cvsd_vocoder_swigincludedir)" + @list='$(cvsd_vocoder_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(cvsd_vocoder_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(cvsd_vocoder_swigincludedir)/$$f'"; \ + $(cvsd_vocoder_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(cvsd_vocoder_swigincludedir)/$$f"; \ + done + +uninstall-cvsd_vocoder_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(cvsd_vocoder_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(cvsd_vocoder_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(cvsd_vocoder_swigincludedir)/$$f"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(cvsd_vocoder_pylibdir)" "$(DESTDIR)$(cvsd_vocoder_pythondir)" "$(DESTDIR)$(cvsd_vocoder_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-cvsd_vocoder_pylibLTLIBRARIES clean-generic \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-cvsd_vocoder_pylibLTLIBRARIES \ + install-cvsd_vocoder_pythonPYTHON \ + install-cvsd_vocoder_swigincludeHEADERS \ + install-grincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-cvsd_vocoder_pylibLTLIBRARIES \ + uninstall-cvsd_vocoder_pythonPYTHON \ + uninstall-cvsd_vocoder_swigincludeHEADERS \ + uninstall-grincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-cvsd_vocoder_pylibLTLIBRARIES clean-generic \ + clean-libtool ctags dist-hook distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-cvsd_vocoder_pylibLTLIBRARIES \ + install-cvsd_vocoder_pythonPYTHON \ + install-cvsd_vocoder_swigincludeHEADERS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-cvsd_vocoder_pylibLTLIBRARIES \ + uninstall-cvsd_vocoder_pythonPYTHON \ + uninstall-cvsd_vocoder_swigincludeHEADERS \ + uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +cvsd_vocoder_pythondir_category ?= gnuradio/cvsd_vocoder +cvsd_vocoder_pylibdir_category ?= $(cvsd_vocoder_pythondir_category) + +cvsd_vocoder.h cvsd_vocoder.py cvsd_vocoder.cc: cvsd_vocoder.i + trap 'rm -rf $(DEPDIR)/cvsd_vocoder-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/cvsd_vocoder-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/cvsd_vocoder-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/cvsd_vocoder-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/cvsd_vocoder-generate-lock; \ + else \ + while test -d $(DEPDIR)/cvsd_vocoder-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/cvsd_vocoder-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/cvsd_vocoder-generate-stamp: + 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; + $(RM) $(DEPDIR)/cvsd_vocoder.d + cp $(DEPDIR)/cvsd_vocoder.Std $(DEPDIR)/cvsd_vocoder.d + echo "" >> $(DEPDIR)/cvsd_vocoder.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/cvsd_vocoder.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/cvsd_vocoder.d + $(RM) $(DEPDIR)/cvsd_vocoder.Std + touch $(DEPDIR)/cvsd_vocoder-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)/cvsd_vocoder.d@am__quote@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-cvsd-vocoder/src/lib/Makefile.swig.gen b/gr-cvsd-vocoder/src/lib/Makefile.swig.gen new file mode 100644 index 00000000..e192abc7 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 cvsd_vocoder.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/cvsd_vocoder +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/cvsd_vocoder +## +## 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. + +cvsd_vocoder_pythondir_category ?= gnuradio/cvsd_vocoder +cvsd_vocoder_pylibdir_category ?= $(cvsd_vocoder_pythondir_category) +cvsd_vocoder_pythondir = $(pythondir)/$(cvsd_vocoder_pythondir_category) +cvsd_vocoder_pylibdir = $(pyexecdir)/$(cvsd_vocoder_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +cvsd_vocoder_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)/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 . + +cvsd_vocoder_swiginclude_HEADERS = \ + cvsd_vocoder.i \ + $(cvsd_vocoder_swiginclude_headers) + +cvsd_vocoder_pylib_LTLIBRARIES = \ + _cvsd_vocoder.la + +_cvsd_vocoder_la_SOURCES = \ + cvsd_vocoder.cc \ + $(cvsd_vocoder_la_swig_sources) + +_cvsd_vocoder_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(cvsd_vocoder_la_swig_libadd) + +_cvsd_vocoder_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(cvsd_vocoder_la_swig_ldflags) + +_cvsd_vocoder_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(cvsd_vocoder_la_swig_cxxflags) + +cvsd_vocoder_python_PYTHON = \ + cvsd_vocoder.py \ + $(cvsd_vocoder_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/cvsd_vocoder.d@am__quote@ + diff --git a/gr-cvsd-vocoder/src/lib/cvsd_decode_bs.cc b/gr-cvsd-vocoder/src/lib/cvsd_decode_bs.cc new file mode 100644 index 00000000..1dad15d4 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/cvsd_decode_bs.cc @@ -0,0 +1,193 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +/* + * config.h is generated by configure. It contains the results + * of probing for features, options etc. It should be the first + * file included in your .cc file. + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +/* + * Create a new instance of cvsd_decode_bs and return + * a boost shared_ptr. This is effectively the public constructor. + */ +cvsd_decode_bs_sptr +cvsd_make_decode_bs (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max) +{ + return cvsd_decode_bs_sptr (new cvsd_decode_bs (min_step, max_step, + step_decay, accum_decay, K, J, + pos_accum_max, neg_accum_max)); +} + +cvsd_decode_bs::cvsd_decode_bs (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max) + : gr_sync_interpolator ("cvsd_decode_bs", + gr_make_io_signature (1, 1, sizeof (unsigned char)), + gr_make_io_signature (1, 1, sizeof (short)), + 8), + d_min_step (min_step), d_max_step(max_step), d_step_decay(step_decay), + d_accum_decay(accum_decay), d_K(K), d_J(J), + d_pos_accum_max(pos_accum_max), d_neg_accum_max(neg_accum_max), + d_accum(0), + d_loop_counter(1), + d_runner(0), + d_runner_mask(0), + d_stepsize(min_step) + +{ + assert(d_K <= 32); + assert(d_J <= d_K); +} + + +cvsd_decode_bs::~cvsd_decode_bs () +{ + // nothing else required in this example +} + +unsigned char cvsd_decode_bs::cvsd_bitwise_sum (unsigned int input) +{ + unsigned int temp=input; + unsigned char bits=0; + + while(temp) { + temp=temp&(temp-1); + bits++; + } + return bits; +} + +int cvsd_decode_bs::cvsd_round (double input) +{ + double temp; + temp=input+0.5; + temp=floor(temp); + + return (int)temp; +} + +unsigned int cvsd_decode_bs::cvsd_pow (short radix, short power) +{ + double d_radix = (double) radix; + int i_power = (int) power; + double output; + + output=pow(d_radix,i_power); + return ( (unsigned int) cvsd_round(output)); +} + + +int +cvsd_decode_bs::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + + + const unsigned char *in = (const unsigned char *) input_items[0]; + short *out = (short *) output_items[0]; + + int i=0; + short output_short=0; // 2 bytes 0 .. 65,535 + unsigned char bit_count=0; // 1 byte, 0 .. 255 + unsigned int mask=0; // 4 bytes, 0 .. 4,294,967,295 + unsigned char input_byte=0; // 1 bytes + unsigned char input_bit=0; // 1 byte, 0 .. 255 + + // Loop through each input data point + for(i = 0; i < noutput_items/8.0; i++) { + + input_byte = in[i]; + // Initiliaze bit counter + bit_count=0; + + while(bit_count<8) { + // Compute the Appropriate Mask + mask=cvsd_pow(2,7-bit_count); + + // Pull off the corresponding bit + input_bit = input_byte & mask; + + // Update the bit counter + bit_count++; + + // Update runner with the next input bit + // Runner is a shift-register; shift left, add on newest output bit + d_runner = (d_runner<<1) | ((unsigned int) input_bit); + + // Run this only if you have >= J bits in your shift register + if (d_loop_counter>=d_J) { + // Update Step Size + d_runner_mask=(cvsd_pow(2,d_J)-1); + if ((cvsd_bitwise_sum(d_runner & d_runner_mask)>=d_J)||(cvsd_bitwise_sum((~d_runner) & d_runner_mask)>=d_J)) { + // Runs of 1s and 0s + d_stepsize = std::min( (short) (d_stepsize + d_min_step), d_max_step); + } + else { + // No runs of 1s and 0s + d_stepsize = std::max( (short) cvsd_round(d_stepsize*d_step_decay), d_min_step); + } + } + + // Update Accum (i.e. the reference value) + if (input_bit) { + d_accum=d_accum+d_stepsize; + } + else { + d_accum=d_accum-d_stepsize; + } + + // Multiply by Accum_Decay + d_accum=(cvsd_round(d_accum*d_accum_decay)); + + // Check for overflow + if (d_accum >=((int) d_pos_accum_max)) { + d_accum=(int)d_pos_accum_max; + } + else if (d_accum <=((int) d_neg_accum_max)) { + d_accum=(int)d_neg_accum_max; + } + + // Find the output short to write to the file + output_short=((short) d_accum); + + if (d_loop_counter <= d_K) { + d_loop_counter++; + } + + *(out++) = output_short; + } // while () + + } // for() + + return noutput_items; +} diff --git a/gr-cvsd-vocoder/src/lib/cvsd_decode_bs.h b/gr-cvsd-vocoder/src/lib/cvsd_decode_bs.h new file mode 100644 index 00000000..f7b50909 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/cvsd_decode_bs.h @@ -0,0 +1,170 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ +#ifndef INCLUDED_CVSD_DECODE_BS_H +#define INCLUDED_CVSD_DECODE_BS_H + +#include + +class cvsd_decode_bs; + +typedef boost::shared_ptr cvsd_decode_bs_sptr; + + /*! + * \brief Constructor parameters to initialize the CVSD decoder. The default + * values are modeled after the Bluetooth standard and should not be changed, + * except by an advanced user + * + * \param min_step Minimum step size used to update the internal reference. Default: "10" + * \param max_step Maximum step size used to update the internal reference. Default: "1280" + * \param step_decay Decay factor applied to step size when there is not a run of J output 1s or 0s. Default: "0.9990234375" (i.e. 1-1/1024) + * \param accum_decay Decay factor applied to the internal reference during every interation of the codec. Default: "0.96875" (i.e. 1-1/32) + * \param K; Size of shift register; the number of output bits remembered by codec (must be less or equal to 32). Default: "32" + * \param J; Number of bits in the shift register that are equal; i.e. the size of a run of 1s, 0s. Default: "4" + * \param pos_accum_max Maximum integer value allowed for the internal reference. Default: "32767" (2^15 - 1 or MAXSHORT) + * \param neg_accum_max Minimum integer value allowed for the internal reference. Default: "-32767" (-2^15 + 1 or MINSHORT+1) + * + */ +cvsd_decode_bs_sptr cvsd_make_decode_bs (short min_step=10, + short max_step=1280, + double step_decay=0.9990234375, + double accum_decay= 0.96875, + int K=32, + int J=4, + short pos_accum_max=32767, + short neg_accum_max=-32767); + +/*! + * \brief This block performs CVSD audio decoding. Its design and implementation + * is modeled after the CVSD encoder/decoder specifications defined in the + * Bluetooth standard. + * + * \ingroup vocoder_blk + * + * CVSD is a method for encoding speech that seeks to reduce the + * bandwidth required for digital voice transmission. CVSD takes + * advantage of strong correlation between samples, quantizing the + * difference in amplitude between two consecutive samples. This + * difference requires fewer quantization levels as compared to other + * methods that quantize the actual amplitude level, reducing the + * bandwidth. CVSD employs a two level quantizer (one bit) and an + * adaptive algorithm that allows for continuous step size adjustment. + * + * The coder can represent low amplitude signals with accuracy without + * sacrificing performance on large amplitude signals, a trade off that + * occurs in some non-adaptive modulations. + * + * The CVSD decoder effectively provides 1-to-8 decompression. More + * specifically, for each incoming input bit, the decoder outputs one + * audio sample. If the input is a "1" bit, the internal reference is + * increased appropriately and then outputted as the next estimated audio + * sample. If the input is a "0" bit, the internal reference is + * decreased appropriately and then likewise outputted as the next estimated + * audio sample. Grouping 8 input bits together, the encoder essentially + * produces 8 output audio samples for everyone one input byte. + * + * This decoder requires that output audio samples are 2-byte short signed + * integers. The result bandwidth conversion, therefore, is 1 byte of + * encoded audio data to 16 output bytes of raw audio data. + * + * The CVSD decoder module must be post-fixed by a down-converter to + * under-sample the audio data after decoding. The Bluetooth standard + * specifically calls for a 8-to-1 decimating down-converter. This is + * required so that so that output sampling rate equals the original input + * sampling rate present before the encoder. In all cases, the output + * down-converter rate must be the inverse of the input up-converter rate + * before the CVSD encoder. + * + * References: + * 1. Continuously Variable Slope Delta Modulation (CVSD) A Tutorial, + * Available: http://www.eetkorea.com/ARTICLES/2003AUG/A/2003AUG29_NTEK_RFD_AN02.PDF. + * 2. Specification of The Bluetooth System + * Available: http://grouper.ieee.org/groups/802/15/Bluetooth/core_10_b.pdf. + * 3. McGarrity, S., Bluetooth Full Duplex Voice and Data Transmission. 2002. + * Bluetooth Voice Simulink® Model, Available: + * http://www.mathworks.com/company/newsletters/digest/nov01/bluetooth.html + * + */ + +class cvsd_decode_bs : public gr_sync_interpolator +{ +private: + friend cvsd_decode_bs_sptr cvsd_make_decode_bs (short min_step, + short max_step, + double step_decay, + double accum_decay, + int K, + int J, + short pos_accum_max, + short neg_accum_max); + + cvsd_decode_bs (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max); + + //! Member functions required by the encoder/decoder + //! \brief Rounding function specific to CVSD + //! \return the input value rounded to the nearest integer + int cvsd_round(double input); + + //! \brief A power function specific to CVSD data formats + //! \return (radix)^power, where radix and power are short integers + unsigned int cvsd_pow (short radix, short power); + + //! \brief Sums number of 1's in the input + //! \return the number of 1s in the four bytes of an input unsigned integer + unsigned char cvsd_bitwise_sum (unsigned int input); + + short d_min_step; + short d_max_step; + double d_step_decay; + double d_accum_decay; + + int d_K; //!< \brief Size of shift register; the number of output bits remembered in shift register + int d_J; //!< \brief Number of bits in the shift register that are equal; size of run of 1s, 0s + + short d_pos_accum_max; + short d_neg_accum_max; + + int d_accum; //!< \brief Current value of internal reference + int d_loop_counter; //!< \brief Current value of the loop counter + unsigned int d_runner; //!< \brief Current value of the shift register + unsigned int d_runner_mask; //!< \brief Value of the mask to access the last J bits of the shift register + short d_stepsize; //!< \brief Current value of the step sizer + + public: + ~cvsd_decode_bs (); // public destructor + + short min_step() { return d_min_step; } + short max_step() { return d_max_step; } + double step_decay() { return d_step_decay; } + double accum_decay() { return d_accum_decay; } + int K() { return d_K; } + int J() { return d_J; } + short pos_accum_max() { return d_pos_accum_max; } + short neg_accum_max() { return d_neg_accum_max; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_CVSD_DECODE_BS_H */ diff --git a/gr-cvsd-vocoder/src/lib/cvsd_encode_sb.cc b/gr-cvsd-vocoder/src/lib/cvsd_encode_sb.cc new file mode 100644 index 00000000..561b91c6 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/cvsd_encode_sb.cc @@ -0,0 +1,191 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +/* + * config.h is generated by configure. It contains the results + * of probing for features, options etc. It should be the first + * file included in your .cc file. + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +/* + * Create a new instance of cvsd_encode_sb and return + * a boost shared_ptr. This is effectively the public constructor. + */ +cvsd_encode_sb_sptr +cvsd_make_encode_sb (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max) +{ + return cvsd_encode_sb_sptr (new cvsd_encode_sb (min_step, max_step, + step_decay, accum_decay, K, J, + pos_accum_max, neg_accum_max)); +} + +cvsd_encode_sb::cvsd_encode_sb (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max) + : gr_sync_decimator ("cvsd_encode_sb", + gr_make_io_signature (1, 1, sizeof (short)), + gr_make_io_signature (1, 1, sizeof (unsigned char)), + 8), + d_min_step (min_step), d_max_step(max_step), d_step_decay(step_decay), + d_accum_decay(accum_decay), d_K(K), d_J(J), + d_pos_accum_max(pos_accum_max), d_neg_accum_max(neg_accum_max), + d_accum(0), + d_loop_counter(1), + d_runner(0), + d_stepsize(min_step) + +{ + assert(d_K <= 32); + assert(d_J <= d_K); +} + + +cvsd_encode_sb::~cvsd_encode_sb () +{ + // nothing else required in this example +} + +unsigned char cvsd_encode_sb::cvsd_bitwise_sum (unsigned int input) +{ + unsigned int temp=input; + unsigned char bits=0; + + while(temp) { + temp=temp&(temp-1); + bits++; + } + return bits; +} + +int cvsd_encode_sb::cvsd_round (double input) +{ + double temp; + temp=input+0.5; + temp=floor(temp); + + return (int)temp; +} + +unsigned int cvsd_encode_sb::cvsd_pow (short radix, short power) +{ + double d_radix = (double) radix; + int i_power = (int) power; + double output; + + output=pow(d_radix,i_power); + return ( (unsigned int) cvsd_round(output)); +} + + + +int +cvsd_encode_sb::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const short *in = (const short *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + unsigned short i=0; // 2 bytes, 0 .. 65,535 + unsigned char output_bit=0; // 1 byte, 0 .. 255 + unsigned char output_byte=0; // 1 bytes 0.255 + unsigned char bit_count=0; // 1 byte, 0 .. 255 + unsigned int mask=0; // 4 bytes, 0 .. 4,294,967,295 + + // Loop through each input data point + for(i = 0; i < noutput_items*8; i++) { + if((int)in[i] >= d_accum) { // Note: sign((data(n)-accum)) + output_bit=1; + } + else { + output_bit=0; + } + + // Update Accum (i.e. the reference value) + if (output_bit) { + d_accum=d_accum+d_stepsize; + //printf("Addding %d to the accum; the result is: %d.\n", d_stepsize, d_accum); + } + else { + d_accum=d_accum-d_stepsize; + //printf("Subtracting %d to the accum; the result is: %d.\n", d_stepsize, d_accum); + } + + // Multiply by Accum_Decay + d_accum=(cvsd_round(d_accum*d_accum_decay)); + + // Check for overflow + if (d_accum >= ((int)d_pos_accum_max)) { + d_accum = (int)d_pos_accum_max; + } + else if(d_accum <= ((int) d_neg_accum_max)) { + d_accum = (int) d_neg_accum_max; + } + + // Update runner with the last output bit + // Update Step Size + if (d_loop_counter >= d_J) { // Run this only if you have >= J bits in your shift register + mask=(cvsd_pow(2, d_J) - 1); + if ((cvsd_bitwise_sum(d_runner & mask) >= d_J) || (cvsd_bitwise_sum((~d_runner) & mask) >= d_J)) { + // Runs of 1s and 0s + d_stepsize = std::min( (short)(d_stepsize + d_min_step), d_max_step); + } + else { + // No runs of 1s and 0s + d_stepsize = std::max( (short)cvsd_round(d_stepsize*d_step_decay), d_min_step); + } + } + + // Runner is a shift-register; shift left, add on newest output bit + d_runner = (d_runner<<1) | ((unsigned int) output_bit); + + // Update the ouput type; shift left, add on newest output bit + // If you have put in 8 bits, output it as a byte + output_byte = (output_byte<<1) | output_bit; + bit_count++; + + if (d_loop_counter <= d_K) { + d_loop_counter++; + } + + // If you have put 8 bits, output and clear. + if (bit_count==8) { + // Read in short from the file + *(out++) = output_byte; + + // Reset the bit_count + bit_count=0; + output_byte=0; + } + } // While + + return noutput_items; +} diff --git a/gr-cvsd-vocoder/src/lib/cvsd_encode_sb.h b/gr-cvsd-vocoder/src/lib/cvsd_encode_sb.h new file mode 100644 index 00000000..a7994d4e --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/cvsd_encode_sb.h @@ -0,0 +1,173 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ +#ifndef INCLUDED_CVSD_ENCODER_SB_H +#define INCLUDED_CVSD_ENCODER_SB_H + +#include + +class cvsd_encode_sb; + +typedef boost::shared_ptr cvsd_encode_sb_sptr; + + /*! + * \brief Constructor parameters to initialize the CVSD encoder. The default + * values are modeled after the Bluetooth standard and should not be changed + * except by an advanced user + * + * \param min_step Minimum step size used to update the internal reference. Default: "10" + * \param max_step Maximum step size used to update the internal reference. Default: "1280" + * \param step_decay Decay factor applied to step size when there is not a run of J output 1s or 0s. Default: "0.9990234375" (i.e. 1-1/1024) + * \param accum_decay Decay factor applied to the internal reference during every interation of the codec. Default: "0.96875" (i.e. 1-1/32) + * \param K; Size of shift register; the number of output bits remembered by codec (must be less or equal to 32). Default: "32" + * \param J; Number of bits in the shift register that are equal; i.e. the size of a run of 1s, 0s. Default: "4" + * \param pos_accum_max Maximum integer value allowed for the internal reference. Default: "32767" (2^15 - 1 or MAXSHORT) + * \param neg_accum_max Minimum integer value allowed for the internal reference. Default: "-32767" (-2^15 + 1 or MINSHORT+1) + * + */ + +cvsd_encode_sb_sptr cvsd_make_encode_sb (short min_step=10, + short max_step=1280, + double step_decay=0.9990234375, + double accum_decay= 0.96875, + int K=32, + int J=4, + short pos_accum_max=32767, + short neg_accum_max=-32767); + +/*! + * \brief This block performs CVSD audio encoding. Its design and implementation + * is modeled after the CVSD encoder/decoder specifications defined in the + * Bluetooth standard. + * + * \ingroup vocoder_blk + * + * CVSD is a method for encoding speech that seeks to reduce the + * bandwidth required for digital voice transmission. CVSD takes + * advantage of strong correlation between samples, quantizing the + * difference in amplitude between two consecutive samples. This + * difference requires fewer quantization levels as compared to other + * methods that quantize the actual amplitude level, reducing the + * bandwidth. CVSD employs a two level quantizer (one bit) and an + * adaptive algorithm that allows for continuous step size adjustment. + * + * The coder can represent low amplitude signals with accuracy without + * sacrificing performance on large amplitude signals, a trade off that + * occurs in some non-adaptive modulations. + * + * The CVSD encoder effectively provides 8-to-1 compression. More + * specifically, each incoming audio sample is compared to an internal + * reference value. If the input is greater or equal to the reference, + * the encoder outputs a "1" bit. If the input is less than the reference, + * the encoder outputs a "0" bit. The reference value is then updated + * accordingly based on the frequency of outputted "1" or "0" bits. By + * grouping 8 outputs bits together, the encoder essentially produce one + * output byte for every 8 input audio samples. + * + * This encoder requires that input audio samples are 2-byte short signed + * integers. The result bandwidth conversion, therefore, is 16 input bytes + * of raw audio data to 1 output byte of encoded audio data. + * + * The CVSD encoder module must be prefixed by an up-converter to over-sample + * the audio data prior to encoding. The Bluetooth standard specifically + * calls for a 1-to-8 interpolating up-converter. While this reduces the + * overall compression of the codec, this is required so that the encoder + * can accurately compute the slope between adjacent audio samples and + * correctly update its internal reference value. + * + * References: + * + * 1. Continuously Variable Slope Delta Modulation (CVSD) A Tutorial, + * Available: http://www.eetkorea.com/ARTICLES/2003AUG/A/2003AUG29_NTEK_RFD_AN02.PDF. + * + * 2. Specification of The Bluetooth System + * Available: http://grouper.ieee.org/groups/802/15/Bluetooth/core_10_b.pdf. + * + * 3. McGarrity, S., Bluetooth Full Duplex Voice and Data Transmission. 2002. + * Bluetooth Voice Simulink® Model, Available: + * http://www.mathworks.com/company/newsletters/digest/nov01/bluetooth.html + * + */ + +class cvsd_encode_sb : public gr_sync_decimator +{ +private: + friend cvsd_encode_sb_sptr cvsd_make_encode_sb (short min_step, + short max_step, + double step_decay, + double accum_decay, + int K, + int J, + short pos_accum_max, + short neg_accum_max); + + cvsd_encode_sb (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max); + + //! Member functions required by the encoder/decoder + //! \brief Rounding function specific to CVSD + //! \return the input value rounded to the nearest integer + int cvsd_round(double input); + + //! \brief A power function specific to CVSD data formats + //! \return (radix)^power, where radix and power are short integers + unsigned int cvsd_pow (short radix, short power); + + //! \brief Sums number of 1's in the input + //! \return the number of 1s in the four bytes of an input unsigned integer + unsigned char cvsd_bitwise_sum (unsigned int input); + + // Members variables related to the CVSD encoder use to update interal reference value + short d_min_step; + short d_max_step; + double d_step_decay; + double d_accum_decay; + + int d_K; //!< \brief Size of shift register; the number of output bits remembered in shift register + int d_J; //!< \brief Number of bits in the shift register that are equal; size of run of 1s, 0s + + short d_pos_accum_max; + short d_neg_accum_max; + + int d_accum; //!< \brief Current value of internal reference + int d_loop_counter; //!< \brief Current value of the loop counter + unsigned int d_runner; //!< \brief Current value of the shift register + short d_stepsize; //!< \brief Current value of the step sizer + + public: + ~cvsd_encode_sb (); // public destructor + + short min_step() { return d_min_step; } + short max_step() { return d_max_step; } + double step_decay() { return d_step_decay; } + double accum_decay() { return d_accum_decay; } + int K() { return d_K; } + int J() { return d_J; } + short pos_accum_max() { return d_pos_accum_max; } + short neg_accum_max() { return d_neg_accum_max; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_CVSD_ENCODE_SB_H */ diff --git a/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i b/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i new file mode 100644 index 00000000..bf7a0b59 --- /dev/null +++ b/gr-cvsd-vocoder/src/lib/cvsd_vocoder.i @@ -0,0 +1,81 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,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. + */ + +%include "gnuradio.i" + +%{ +#include "cvsd_encode_sb.h" +#include "cvsd_decode_bs.h" +%} + +GR_SWIG_BLOCK_MAGIC(cvsd,encode_sb); + +cvsd_encode_sb_sptr cvsd_make_encode_sb (short min_step=10, + short max_step=1280, + double step_decay=0.9990234375, + double accum_decay= 0.96875, + int K=32, + int J=4, + short pos_accum_max=32767, + short neg_accum_max=-32767); + +class cvsd_encode_sb : public gr_sync_decimator +{ +private: + cvsd_encode_sb (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max); + + + public: + short min_step() { return d_min_step; } + short max_step() { return d_max_step; } + double step_decay() { return d_step_decay; } + double accum_decay() { return d_accum_decay; } + int K() { return d_K; } + int J() { return d_J; } + short pos_accum_max() { return d_pos_accum_max; } + short neg_accum_max() { return d_neg_accum_max; } +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(cvsd,decode_bs); + +cvsd_decode_bs_sptr cvsd_make_decode_bs (short min_step=10, + short max_step=1280, + double step_decay=0.9990234375, + double accum_decay= 0.96875, + int K=32, + int J=4, + short pos_accum_max=32767, + short neg_accum_max=-32767); + +class cvsd_decode_bs : public gr_sync_interpolator +{ +private: + cvsd_decode_bs (short min_step, short max_step, double step_decay, + double accum_decay, int K, int J, + short pos_accum_max, short neg_accum_max); + + public: +}; diff --git a/gr-cvsd-vocoder/src/python/Makefile.am b/gr-cvsd-vocoder/src/python/Makefile.am new file mode 100644 index 00000000..801dc8fb --- /dev/null +++ b/gr-cvsd-vocoder/src/python/Makefile.am @@ -0,0 +1,38 @@ +# +# Copyright 2004,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = run_tests.in + + +TESTS = \ + run_tests + + +grblkspythondir = $(grpythondir)/blks2impl + +grblkspython_PYTHON = \ + cvsd.py + +noinst_PYTHON = \ + encdec.py \ + qa_cvsd_vocoder.py diff --git a/gr-cvsd-vocoder/src/python/Makefile.in b/gr-cvsd-vocoder/src/python/Makefile.in new file mode 100644 index 00000000..c5c61eba --- /dev/null +++ b/gr-cvsd-vocoder/src/python/Makefile.in @@ -0,0 +1,1015 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grblkspython_PYTHON) $(noinst_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common +subdir = gr-cvsd-vocoder/src/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grblkspythondir)" +grblkspythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = run_tests.in +TESTS = \ + run_tests + +grblkspythondir = $(grpythondir)/blks2impl +grblkspython_PYTHON = \ + cvsd.py + +noinst_PYTHON = \ + encdec.py \ + qa_cvsd_vocoder.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-cvsd-vocoder/src/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-cvsd-vocoder/src/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grblkspythonPYTHON: $(grblkspython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(grblkspythondir)" || $(MKDIR_P) "$(DESTDIR)$(grblkspythondir)" + @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(grblkspythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(grblkspythondir)/$$f'"; \ + $(grblkspythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(grblkspythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(grblkspythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(grblkspythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-grblkspythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(grblkspython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(grblkspythondir)/$$f"; \ + rm -f "$(DESTDIR)$(grblkspythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(grblkspythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(grblkspythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grblkspythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grblkspythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grblkspythonPYTHON install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-grblkspythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-cvsd-vocoder/src/python/cvsd.py b/gr-cvsd-vocoder/src/python/cvsd.py new file mode 100644 index 00000000..4defbf9a --- /dev/null +++ b/gr-cvsd-vocoder/src/python/cvsd.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr +from gnuradio.vocoder import cvsd_vocoder + +class cvsd_encode(gr.hier_block2): + ''' + This is a wrapper for the CVSD encoder that performs interpolation and filtering + necessary to work with the vocoding. It converts an incoming float (+-1) to a short, scales + it (to 32000; slightly below the maximum value), interpolates it, and then vocodes it. + + The incoming sampling rate can be anything, though, of course, the higher the sampling rate and the + higher the interpolation rate are, the better the sound quality. + ''' + + def __init__(self, resample=8, bw=0.5): + ''' + When using the CVSD vocoder, appropriate sampling rates are from 8k to 64k with resampling rates + from 1 to 8. A rate of 8k with a resampling rate of 8 provides a good quality signal. + ''' + + gr.hier_block2.__init__(self, "cvsd_encode", + gr.io_signature(1, 1, gr.sizeof_float), # Input signature + gr.io_signature(1, 1, gr.sizeof_char)) # Output signature + + scale_factor = 32000.0 + self.interp = resample + + src_scale = gr.multiply_const_ff(scale_factor) + taps = gr.firdes.low_pass(self.interp, self.interp, bw, 2*bw) + interp = gr.interp_fir_filter_fff(self.interp, taps) + f2s = gr.float_to_short() + enc = cvsd_vocoder.encode_sb() + + self.connect(self, src_scale, interp, f2s, enc, self) + + +class cvsd_decode(gr.hier_block2): + ''' + This is a wrapper for the CVSD decoder that performs decimation and filtering + necessary to work with the vocoding. It converts an incoming CVSD-encoded short to a float, decodes it + to a float, decimates it, and scales it (by 32000; slightly below the maximum value to avoid clipping). + + The sampling rate can be anything, though, of course, the higher the sampling rate and the + higher the interpolation rate are, the better the sound quality. + ''' + + def __init__(self, resample=8, bw=0.5): + ''' + When using the CVSD vocoder, appropriate sampling rates are from 8k to 64k with resampling rates + from 1 to 8. A rate of 8k with a resampling rate of 8 provides a good quality signal. + ''' + gr.hier_block2.__init__(self, "cvsd_decode", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(1, 1, gr.sizeof_float)) # Output signature + + scale_factor = 32000.0 + self.decim = resample + + dec = cvsd_vocoder.decode_bs() + s2f = gr.short_to_float() + taps = gr.firdes.low_pass(1, 1, bw, 2*bw) + decim = gr.fir_filter_fff(self.decim, taps) + sink_scale = gr.multiply_const_ff(1.0/scale_factor) + + self.connect(self, dec, s2f, decim, sink_scale, self) + diff --git a/gr-cvsd-vocoder/src/python/encdec.py b/gr-cvsd-vocoder/src/python/encdec.py new file mode 100755 index 00000000..34c153b0 --- /dev/null +++ b/gr-cvsd-vocoder/src/python/encdec.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, blks2 +from gnuradio import audio +from gnuradio.vocoder import cvsd_vocoder + +def build_graph(): + sample_rate = 8000 + scale_factor = 32000 + + tb = gr.top_block() + src = audio.source(sample_rate, "plughw:0,0") + src_scale = gr.multiply_const_ff(scale_factor) + + interp = blks2.rational_resampler_fff(8, 1) + f2s = gr.float_to_short () + + enc = cvsd_vocoder.encode_sb() + dec = cvsd_vocoder.decode_bs() + + s2f = gr.short_to_float () + decim = blks2.rational_resampler_fff(1, 8) + + sink_scale = gr.multiply_const_ff(1.0/scale_factor) + sink = audio.sink(sample_rate, "plughw:0,0") + + tb.connect(src, src_scale, interp, f2s, enc) + tb.connect(enc, dec, s2f, decim, sink_scale, sink) + + if 0: # debug + tb.conect(src, gr.file_sink(gr.sizeof_float, "source.dat")) + tb.conect(src_scale, gr.file_sink(gr.sizeof_float, "src_scale.dat")) + tb.conect(interp, gr.file_sink(gr.sizeof_float, "interp.dat")) + tb.conect(f2s, gr.file_sink(gr.sizeof_short, "f2s.dat")) + tb.conect(enc, gr.file_sink(gr.sizeof_char, "enc.dat")) + tb.conect(dec, gr.file_sink(gr.sizeof_short, "dec.dat")) + tb.conect(s2f, gr.file_sink(gr.sizeof_float, "s2f.dat")) + tb.conect(decim, gr.file_sink(gr.sizeof_float, "decim.dat")) + tb.conect(sink_scale, gr.file_sink(gr.sizeof_float, "sink_scale.dat")) + + return tb + +if __name__ == '__main__': + tb = build_graph() + print "Enter CTRL-C to stop" + try: + tb.run() + except KeyboardInterrupt: + pass diff --git a/gr-cvsd-vocoder/src/python/qa_cvsd_vocoder.py b/gr-cvsd-vocoder/src/python/qa_cvsd_vocoder.py new file mode 100755 index 00000000..1a39f636 --- /dev/null +++ b/gr-cvsd-vocoder/src/python/qa_cvsd_vocoder.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, gr_unittest, blks2 +import cvsd_vocoder + +class qa_cvsd_test (gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block() + + def tearDown (self): + self.tb = None + + """ Disable for now + def test01(self): + sample_rate = 8000 + scale_factor = 32000 + + expected_data = (6.9670547250243192e-21, -2.4088578356895596e-05, + -5.1261918997624889e-05, 7.2410854045301676e-05, + 8.444241393590346e-05, -1.2537107068055775e-05, + 0.00024186755763366818, -0.00060463894624263048, + 0.00064864184241741896, 0.010409165173768997, + 0.0087582804262638092, 0.017965050414204597, + 0.010722399689257145, 0.006602009292691946, + 0.02213001623749733, 0.0079685859382152557, + 0.033707316964864731, 0.027021972462534904, + 0.0086071854457259178, 0.0081678871065378189, + 0.039343506097793579, 0.030671956017613411, + 0.029626710340380669, 0.020126519724726677, + 0.023636780679225922, 0.0064640454947948456, + -0.0038861562497913837, 0.0021134600974619389, + -0.0088051930069923401, -0.00023228264763019979, + -0.033737499266862869, -0.033141419291496277, + -0.037145044654607773, -0.0080892946571111679, + -0.077117636799812317, -0.078382067382335663, + -0.055503919720649719, -0.019355267286300659, + -0.022441385313868523, -0.073706060647964478, + -0.054677654057741165, -0.047119375318288803, + -0.044418536126613617, -0.036084383726119995, + -0.0206278245896101, -0.031200021505355835, + -0.0004070434661116451, 0.0006594572332687676, + -0.016584658995270729, 0.07387717068195343, + -0.0063191778026521206, 0.051200628280639648, + -0.029480356723070145, 0.05176771804690361, + 0.038578659296035767, 0.026550088077783585, + 0.067103870213031769, 0.001888439292088151, + 0.28141644597053528, 0.49543789029121399, + 0.6626054048538208, 0.79180729389190674, + 0.89210402965545654, 0.96999943256378174, + 1.0261462926864624, 1.0267977714538574, + 1.0251555442810059, 1.0265737771987915, + 1.0278496742248535, 1.0208886861801147, + 1.0325057506561279, 0.91415292024612427, + 0.83941859006881714, 0.67373806238174438, + 0.51683622598648071, 0.38949671387672424, + 0.16016888618469238, 0.049505095928907394, + -0.16699212789535522, -0.26886492967605591, + -0.49256673455238342, -0.59178370237350464, + -0.73317724466323853, -0.78922677040100098, + -0.88782668113708496, -0.96708977222442627, + -0.96490746736526489, -0.94962418079376221, + -0.94716215133666992, -0.93755108118057251, + -0.84852480888366699, -0.80485564470291138, + -0.69762390851974487, -0.58398681879043579, + -0.45891636610031128, -0.29681697487831116, + -0.16035343706607819, 0.014823081903159618, + 0.16282452642917633, 0.33802291750907898) + + src = gr.sig_source_f(sample_rate, gr.GR_SIN_WAVE, 200, 1, 0) + head = gr.head(gr.sizeof_float, 100) + src_scale = gr.multiply_const_ff(scale_factor) + + interp = blks2.rational_resampler_fff(8, 1) + f2s = gr.float_to_short () + + enc = cvsd_vocoder.encode_sb() + dec = cvsd_vocoder.decode_bs() + + s2f = gr.short_to_float () + decim = blks2.rational_resampler_fff(1, 8) + + sink_scale = gr.multiply_const_ff(1.0/scale_factor) + sink = gr.vector_sink_f() + + self.tb.connect(src, src_scale, interp, f2s, enc) + self.tb.connect(enc, dec, s2f, decim, sink_scale, head, sink) + self.tb.run() + print sink.data() + + self.assertFloatTuplesAlmostEqual (expected_data, sink.data(), 5) + """ + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gr-cvsd-vocoder/src/python/run_tests.in b/gr-cvsd-vocoder/src/python/run_tests.in new file mode 100644 index 00000000..be969e28 --- /dev/null +++ b/gr-cvsd-vocoder/src/python/run_tests.in @@ -0,0 +1,10 @@ +#!/bin/sh + +# 1st parameter is absolute path to component source directory +# 2nd parameter is absolute path to component build directory +# 3rd parameter is path to Python QA directory + +@top_builddir@/run_tests.sh \ + @abs_top_srcdir@/gr-cvsd-vocoder \ + @abs_top_builddir@/gr-cvsd-vocoder \ + @srcdir@ diff --git a/gr-gcell/Makefile.am b/gr-gcell/Makefile.am new file mode 100644 index 00000000..2386f80a --- /dev/null +++ b/gr-gcell/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src + diff --git a/gr-gcell/Makefile.in b/gr-gcell/Makefile.in new file mode 100644 index 00000000..56df5102 --- /dev/null +++ b/gr-gcell/Makefile.in @@ -0,0 +1,1029 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-gcell +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gcell/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gcell/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gcell/src/Makefile.am b/gr-gcell/src/Makefile.am new file mode 100644 index 00000000..83dc30f4 --- /dev/null +++ b/gr-gcell/src/Makefile.am @@ -0,0 +1,94 @@ +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = . examples + +EXTRA_DIST = run_tests.in + +TESTS = run_tests + +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(GCELL_INCLUDES) \ + $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +# ---------------------------------------------------------------- + +noinst_PYTHON = \ + qa_fft.py + +DISTCLEANFILES = \ + gcell.d \ + run_tests + +# ---------------------------------------------------------------- +# The C++ blocks +# ---------------------------------------------------------------- + +# the library for the C++ blocks +lib_LTLIBRARIES = libgr_gcell.la + +libgr_gcell_la_SOURCES = \ + gcell_fft_vcc.cc + +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gcell_fft_vcc.h + +libgr_gcell_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + $(GCELL_LA) + +libgr_gcell_la_LDFLAGS = $(NO_UNDEFINED) + +# ---------------------------------------------------------------- +# SWIG stuff +# ---------------------------------------------------------------- + +TOP_SWIG_IFILES = \ + gcell.i + +# Install so that they end up available as: +# import gnuradio.gcell +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +gcell_pythondir_category = \ + gnuradio + +# additional arguments to the SWIG command +gcell_swig_args = \ + $(GCELL_INCLUDES) + +# additional libraries for linking with the SWIG-generated library +gcell_la_swig_libadd = \ + libgr_gcell.la + +# additional SWIG files to be installed +gcell_swiginclude_headers = \ + gc_job_manager.i \ + gcell_fft_vcc.i + +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) diff --git a/gr-gcell/src/Makefile.in b/gr-gcell/src/Makefile.in new file mode 100644 index 00000000..d8b1869b --- /dev/null +++ b/gr-gcell/src/Makefile.in @@ -0,0 +1,1595 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# 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 gcell.i + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(gcell_python_PYTHON) $(gcell_swiginclude_HEADERS) \ + $(grinclude_HEADERS) $(noinst_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig +subdir = gr-gcell/src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(gcell_pylibdir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(gcell_pythondir)" \ + "$(DESTDIR)$(gcell_swigincludedir)" \ + "$(DESTDIR)$(grincludedir)" +gcell_pylibLTLIBRARIES_INSTALL = $(INSTALL) +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(gcell_pylib_LTLIBRARIES) $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +_gcell_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(gcell_la_swig_libadd) +am__gcell_la_OBJECTS = _gcell_la-gcell.lo +_gcell_la_OBJECTS = $(am__gcell_la_OBJECTS) +_gcell_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_gcell_la_CXXFLAGS) \ + $(CXXFLAGS) $(_gcell_la_LDFLAGS) $(LDFLAGS) -o $@ +libgr_gcell_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libgr_gcell_la_OBJECTS = gcell_fft_vcc.lo +libgr_gcell_la_OBJECTS = $(am_libgr_gcell_la_OBJECTS) +libgr_gcell_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgr_gcell_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_gcell_la_SOURCES) $(libgr_gcell_la_SOURCES) +DIST_SOURCES = $(_gcell_la_SOURCES) $(libgr_gcell_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +gcell_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +gcell_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(gcell_swiginclude_HEADERS) $(grinclude_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/gcell-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +SUBDIRS = . examples +EXTRA_DIST = run_tests.in +TESTS = run_tests +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(GCELL_INCLUDES) \ + $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + + +# ---------------------------------------------------------------- +noinst_PYTHON = \ + qa_fft.py + +DISTCLEANFILES = \ + gcell.d \ + run_tests + + +# ---------------------------------------------------------------- +# The C++ blocks +# ---------------------------------------------------------------- + +# the library for the C++ blocks +lib_LTLIBRARIES = libgr_gcell.la +libgr_gcell_la_SOURCES = \ + gcell_fft_vcc.cc + + +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gcell_fft_vcc.h + +libgr_gcell_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + $(GCELL_LA) + +libgr_gcell_la_LDFLAGS = $(NO_UNDEFINED) + +# ---------------------------------------------------------------- +# SWIG stuff +# ---------------------------------------------------------------- +TOP_SWIG_IFILES = \ + gcell.i + + +# Install so that they end up available as: +# import gnuradio.gcell +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +gcell_pythondir_category = \ + gnuradio + + +# additional arguments to the SWIG command +gcell_swig_args = \ + $(GCELL_INCLUDES) + + +# additional libraries for linking with the SWIG-generated library +gcell_la_swig_libadd = \ + libgr_gcell.la + + +# additional SWIG files to be installed +gcell_swiginclude_headers = \ + gc_job_manager.i \ + gcell_fft_vcc.i + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = gcell.py gcell.cc +gcell_pythondir = $(pythondir)/$(gcell_pythondir_category) +gcell_pylibdir = $(pyexecdir)/$(gcell_pylibdir_category) +gcell_swigincludedir = $(swigincludedir) +gcell_swiginclude_HEADERS = \ + gcell.i \ + $(gcell_swiginclude_headers) + +gcell_pylib_LTLIBRARIES = \ + _gcell.la + +_gcell_la_SOURCES = \ + gcell.cc \ + $(gcell_la_swig_sources) + +_gcell_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gcell_la_swig_libadd) + +_gcell_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gcell_la_swig_ldflags) + +_gcell_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gcell_la_swig_cxxflags) + +gcell_python_PYTHON = \ + gcell.py \ + $(gcell_python) + + +# 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) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gcell/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gcell/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-gcell_pylibLTLIBRARIES: $(gcell_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(gcell_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gcell_pylibdir)" + @list='$(gcell_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gcell_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gcell_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gcell_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gcell_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-gcell_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(gcell_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gcell_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gcell_pylibdir)/$$p"; \ + done + +clean-gcell_pylibLTLIBRARIES: + -test -z "$(gcell_pylib_LTLIBRARIES)" || rm -f $(gcell_pylib_LTLIBRARIES) + @list='$(gcell_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_gcell.la: $(_gcell_la_OBJECTS) $(_gcell_la_DEPENDENCIES) + $(_gcell_la_LINK) -rpath $(gcell_pylibdir) $(_gcell_la_OBJECTS) $(_gcell_la_LIBADD) $(LIBS) +libgr_gcell.la: $(libgr_gcell_la_OBJECTS) $(libgr_gcell_la_DEPENDENCIES) + $(libgr_gcell_la_LINK) -rpath $(libdir) $(libgr_gcell_la_OBJECTS) $(libgr_gcell_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gcell_la-gcell.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcell_fft_vcc.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +_gcell_la-gcell.lo: gcell.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gcell_la_CXXFLAGS) $(CXXFLAGS) -MT _gcell_la-gcell.lo -MD -MP -MF $(DEPDIR)/_gcell_la-gcell.Tpo -c -o _gcell_la-gcell.lo `test -f 'gcell.cc' || echo '$(srcdir)/'`gcell.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gcell_la-gcell.Tpo $(DEPDIR)/_gcell_la-gcell.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gcell.cc' object='_gcell_la-gcell.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gcell_la_CXXFLAGS) $(CXXFLAGS) -c -o _gcell_la-gcell.lo `test -f 'gcell.cc' || echo '$(srcdir)/'`gcell.cc + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-gcell_pythonPYTHON: $(gcell_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(gcell_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gcell_pythondir)" + @list='$(gcell_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(gcell_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gcell_pythondir)/$$f'"; \ + $(gcell_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gcell_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gcell_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gcell_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-gcell_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(gcell_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(gcell_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gcell_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gcell_pythondir)/$${f}o"; \ + done +install-gcell_swigincludeHEADERS: $(gcell_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gcell_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gcell_swigincludedir)" + @list='$(gcell_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gcell_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gcell_swigincludedir)/$$f'"; \ + $(gcell_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gcell_swigincludedir)/$$f"; \ + done + +uninstall-gcell_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gcell_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gcell_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gcell_swigincludedir)/$$f"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(gcell_pylibdir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(gcell_pythondir)" "$(DESTDIR)$(gcell_swigincludedir)" "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-gcell_pylibLTLIBRARIES clean-generic \ + clean-libLTLIBRARIES clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-gcell_pylibLTLIBRARIES \ + install-gcell_pythonPYTHON install-gcell_swigincludeHEADERS \ + install-grincludeHEADERS + +install-dvi: install-dvi-recursive + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-gcell_pylibLTLIBRARIES \ + uninstall-gcell_pythonPYTHON \ + uninstall-gcell_swigincludeHEADERS uninstall-grincludeHEADERS \ + uninstall-libLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-TESTS check-am clean \ + clean-gcell_pylibLTLIBRARIES clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-gcell_pylibLTLIBRARIES \ + install-gcell_pythonPYTHON install-gcell_swigincludeHEADERS \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-gcell_pylibLTLIBRARIES uninstall-gcell_pythonPYTHON \ + uninstall-gcell_swigincludeHEADERS uninstall-grincludeHEADERS \ + uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +gcell_pythondir_category ?= gnuradio/gcell +gcell_pylibdir_category ?= $(gcell_pythondir_category) + +gcell.h gcell.py gcell.cc: gcell.i + trap 'rm -rf $(DEPDIR)/gcell-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gcell-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gcell-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gcell-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gcell-generate-lock; \ + else \ + while test -d $(DEPDIR)/gcell-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gcell-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gcell-generate-stamp: + 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; + $(RM) $(DEPDIR)/gcell.d + cp $(DEPDIR)/gcell.Std $(DEPDIR)/gcell.d + echo "" >> $(DEPDIR)/gcell.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gcell.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gcell.d + $(RM) $(DEPDIR)/gcell.Std + touch $(DEPDIR)/gcell-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)/gcell.d@am__quote@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gcell/src/Makefile.swig.gen b/gr-gcell/src/Makefile.swig.gen new file mode 100644 index 00000000..75353c34 --- /dev/null +++ b/gr-gcell/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 gcell.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/gcell +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gcell +## +## 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. + +gcell_pythondir_category ?= gnuradio/gcell +gcell_pylibdir_category ?= $(gcell_pythondir_category) +gcell_pythondir = $(pythondir)/$(gcell_pythondir_category) +gcell_pylibdir = $(pyexecdir)/$(gcell_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +gcell_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)/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 . + +gcell_swiginclude_HEADERS = \ + gcell.i \ + $(gcell_swiginclude_headers) + +gcell_pylib_LTLIBRARIES = \ + _gcell.la + +_gcell_la_SOURCES = \ + gcell.cc \ + $(gcell_la_swig_sources) + +_gcell_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gcell_la_swig_libadd) + +_gcell_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gcell_la_swig_ldflags) + +_gcell_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gcell_la_swig_cxxflags) + +gcell_python_PYTHON = \ + gcell.py \ + $(gcell_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/gcell.d@am__quote@ + diff --git a/gr-gcell/src/examples/Makefile.am b/gr-gcell/src/examples/Makefile.am new file mode 100644 index 00000000..bdea961e --- /dev/null +++ b/gr-gcell/src/examples/Makefile.am @@ -0,0 +1,28 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +#ourdatadir = $(exampledir)/gcell + +#dist_ourdata_DATA = README + +#dist_ourdata_SCRIPTS = fsm_utils.py diff --git a/gr-gcell/src/examples/Makefile.in b/gr-gcell/src/examples/Makefile.in new file mode 100644 index 00000000..78ef3578 --- /dev/null +++ b/gr-gcell/src/examples/Makefile.in @@ -0,0 +1,878 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-gcell/src/examples +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gcell/src/examples/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gcell/src/examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +#ourdatadir = $(exampledir)/gcell + +#dist_ourdata_DATA = README + +#dist_ourdata_SCRIPTS = fsm_utils.py +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gcell/src/gc_job_manager.i b/gr-gcell/src/gc_job_manager.i new file mode 100644 index 00000000..7bec48e1 --- /dev/null +++ b/gr-gcell/src/gc_job_manager.i @@ -0,0 +1,75 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +struct spe_program_handle_t; +typedef boost::shared_ptr spe_program_handle_sptr; +%template(spe_program_handle_sptr) boost::shared_ptr; + +class gc_job_manager; +typedef boost::shared_ptr gc_job_manager_sptr; +%template(gc_job_manager_sptr) boost::shared_ptr; + + +%rename(program_handle_from_filename) gc_program_handle_from_filename; +spe_program_handle_sptr +gc_program_handle_from_filename(const std::string &filename); + +%rename(program_handle_from_address) gc_program_handle_from_address; +spe_program_handle_sptr +gc_program_handle_from_address(spe_program_handle_t *handle); + + +%rename(jm_options) gc_jm_options; +struct gc_jm_options { + unsigned int max_jobs; // max # of job descriptors in system + unsigned int max_client_threads; // max # of client threads of job manager + unsigned int nspes; // how many SPEs shall we use? 0 -> all of them + bool gang_schedule; // shall we gang schedule? + bool use_affinity; // shall we try for affinity (FIXME not implmented) + bool enable_logging; // shall we log SPE events? + uint32_t log2_nlog_entries; // log2 of number of log entries (default is 12 == 4k) + spe_program_handle_sptr program_handle; // program to load into SPEs + + gc_jm_options(spe_program_handle_sptr program_handle_, + unsigned int nspes_ = 0) : + max_jobs(0), max_client_threads(0), nspes(nspes_), + gang_schedule(false), use_affinity(false), + enable_logging(false), log2_nlog_entries(12), + program_handle(program_handle_) + { + } +}; + +%rename(job_manager) gc_make_job_manager; +gc_job_manager_sptr +gc_make_job_manager(const gc_jm_options *options); + +%inline { + void set_singleton(gc_job_manager_sptr mgr) + { + gc_job_manager::set_singleton(mgr); + } + + gc_job_manager_sptr singleton() + { + return gc_job_manager::singleton(); + } +} diff --git a/gr-gcell/src/gcell.i b/gr-gcell/src/gcell.i new file mode 100644 index 00000000..29e69fdf --- /dev/null +++ b/gr-gcell/src/gcell.i @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +%include "gnuradio.i" // the common stuff + +%{ +#include +#include +%} + +%include "gc_job_manager.i" +%include "gcell_fft_vcc.i" diff --git a/gr-gcell/src/gcell_fft_vcc.cc b/gr-gcell/src/gcell_fft_vcc.cc new file mode 100644 index 00000000..8bbcfb2b --- /dev/null +++ b/gr-gcell/src/gcell_fft_vcc.cc @@ -0,0 +1,160 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define MIN_FFT_SIZE 32 +#define MAX_FFT_SIZE 4096 + +inline static bool +is_power_of_2(int x) +{ + return x != 0 && (x & (x-1)) == 0; +} + +static int +int_log2(int x) // x is an exact power of 2 +{ + for (int i = 0; i < 32; i++) + if (x == (1 << i)) + return i; + + assert(0); +} + +#if 0 +gr_fft_vcc_sptr +gcell_make_fft_vcc(int fft_size, bool forward, const std::vector &window, bool shift) +{ + // If it doesn't meet our constraints, use standard implemenation + if (fft_size < MIN_FFT_SIZE || fft_size > MAX_FFT_SIZE + || !is_power_of_2(fft_size) + || (window.size() != 0 && fft_size > MAX_FFT_SIZE/2)) + return gr_make_fft_vcc(fft_size, forward, window, shift); + else + return gr_fft_vcc_sptr (new gcell_fft_vcc(fft_size, forward, window, shift)); +} +#else + +gcell_fft_vcc_sptr +gcell_make_fft_vcc(int fft_size, bool forward, const std::vector &window, bool shift) +{ + return gcell_fft_vcc_sptr (new gcell_fft_vcc(fft_size, forward, window, shift)); +} + +#endif + +gcell_fft_vcc::gcell_fft_vcc (int fft_size, bool forward, + const std::vector &window, bool shift) + : gr_fft_vcc("gcell_fft_vcc", fft_size, forward, window, shift) +{ + if (fft_size < MIN_FFT_SIZE || fft_size > MAX_FFT_SIZE || !is_power_of_2(fft_size)){ + throw std::invalid_argument("fft_size"); + } + + if (window.size() != 0 && fft_size > MAX_FFT_SIZE/2){ + throw std::invalid_argument("fft_size too big to use window"); + } + + d_log2_fft_size = int_log2(fft_size); + d_mgr = gc_job_manager::singleton(); // grab the singleton job manager + d_twiddle_boost = gc_aligned_alloc_sptr(sizeof(std::complex) * fft_size/4, 128); + d_twiddle = (std::complex*) d_twiddle_boost.get(); + gcp_fft_1d_r2_twiddle(d_log2_fft_size, d_twiddle); +} + +gcell_fft_vcc::~gcell_fft_vcc () +{ +} + +int +gcell_fft_vcc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + gr_complex *out = (gr_complex *) output_items[0]; + + // unsigned int input_data_size = input_signature()->sizeof_stream_item(0); + // unsigned int output_data_size = output_signature()->sizeof_stream_item(0); + + float window_buf[MAX_FFT_SIZE/2] __attribute__((aligned (16))); + float *window = 0; + + // If we've got a window, ensure it's 16-byte aligned + // FIXME move this to set_window + if (d_window.size()){ + if ((((intptr_t)&d_window[0]) & 0xf) == 0) + window = &d_window[0]; // OK as is + else { + window = window_buf; // copy to aligned buffer + memcpy(window, &d_window[0], sizeof(float) * d_window.size()); + } + } + + std::vector jd_sptr(noutput_items); + gc_job_desc *jd[noutput_items]; + bool done[noutput_items]; + + // submit noutput_items jobs in parallel + + for (int i = 0; i < noutput_items; i++){ + jd_sptr[i] = gcp_fft_1d_r2_submit(d_mgr, d_log2_fft_size, + d_forward, d_shift, + &out[i * d_fft_size], + &in[i * d_fft_size], + d_twiddle, + window); + jd[i] = jd_sptr[i].get(); + } + + int n = d_mgr->wait_jobs(noutput_items, jd, done, GC_WAIT_ALL); + if (n != noutput_items){ + fprintf(stderr, "gcell_fft_vcc: wait_jobs returned %d, expected %d\n", + n, noutput_items); + return -1; + } + + for (int i = 0; i < noutput_items; i++){ + if (jd[i]->status != JS_OK){ + fprintf(stderr, "gcell_fft_vcc jd[%d]->status = %s\n", + i, gc_job_status_string(jd[i]->status).c_str()); + return -1; + } + } + + return noutput_items; +} + diff --git a/gr-gcell/src/gcell_fft_vcc.h b/gr-gcell/src/gcell_fft_vcc.h new file mode 100644 index 00000000..9e3035b4 --- /dev/null +++ b/gr-gcell/src/gcell_fft_vcc.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2007,2008 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. + */ + +#ifndef INCLUDED_GCELL_FFT_VCC_H +#define INCLUDED_GCELL_FFT_VCC_H + +#include + +class gc_job_manager; + +class gcell_fft_vcc; +typedef boost::shared_ptr gcell_fft_vcc_sptr; + +gcell_fft_vcc_sptr +gcell_make_fft_vcc(int fft_size, bool forward, const std::vector &window, bool shift=false); + +/*! + * \brief Compute forward or reverse FFT. complex vector in / complex vector out. + * \ingroup dft_blk + * \ingroup gcell + * + * Concrete class that uses gcell to offload FFT to SPEs. + */ +class gcell_fft_vcc : public gr_fft_vcc +{ + int d_log2_fft_size; + boost::shared_ptr d_mgr; + std::complex *d_twiddle; // twiddle values (16-byte aligned) + boost::shared_ptr d_twiddle_boost; // automatic storage mgmt + + friend gcell_fft_vcc_sptr + gcell_make_fft_vcc(int fft_size, bool forward, const std::vector &window, bool shift); + + gcell_fft_vcc(int fft_size, bool forward, const std::vector &window, bool shift); + + public: + ~gcell_fft_vcc(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif /* INCLUDED_GCELL_FFT_VCC_H */ diff --git a/gr-gcell/src/gcell_fft_vcc.i b/gr-gcell/src/gcell_fft_vcc.i new file mode 100644 index 00000000..1d4a359f --- /dev/null +++ b/gr-gcell/src/gcell_fft_vcc.i @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#if 1 + +// This version works. + +GR_SWIG_BLOCK_MAGIC(gcell, fft_vcc) + +gcell_fft_vcc_sptr +gcell_make_fft_vcc (int fft_size, bool forward, const std::vector window, bool shift=false); + +class gcell_fft_vcc : public gr_sync_block +{ + protected: + gcell_fft_vcc (int fft_size, bool forward, const std::vector &window, bool shift); + + public: + bool set_window(const std::vector &window); +}; + +#else + +// This version gives swig heartburn. We end up with an object that's +// not quite usable. + +GR_SWIG_BLOCK_MAGIC(gcell, fft_vcc); + +gcell_fft_vcc_sptr +gcell_make_fft_vcc (int fft_size, bool forward, const std::vector window, bool shift=false); + +class gcell_fft_vcc : public gr_fft_vcc +{ + protected: + gr_fft_vcc(int fft_size, bool forward, const std::vector &window, bool shift); +}; + +#endif diff --git a/gr-gcell/src/qa_fft.py b/gr-gcell/src/qa_fft.py new file mode 100755 index 00000000..88a4f520 --- /dev/null +++ b/gr-gcell/src/qa_fft.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +from gnuradio import gr, gr_unittest +import gcell +import sys +import random + +primes = (2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53, + 59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131, + 137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223, + 227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311) + + +class test_fft_filter(gr_unittest.TestCase): + + def setUp(self): + ph = gcell.program_handle_from_filename("../../gcell/lib/spu/gcell_all") + opts = gcell.jm_options(ph, 1) + self.mgr = gcell.job_manager(opts) + gcell.set_singleton(self.mgr) + + def tearDown(self): + pass + + def assert_fft_ok2(self, expected_result, result_data): + expected_result = expected_result[:len(result_data)] + self.assertComplexTuplesAlmostEqual2 (expected_result, result_data, + abs_eps=1e-9, rel_eps=4e-4) + + def assert_fft_float_ok2(self, expected_result, result_data, abs_eps=1e-9, rel_eps=4e-4): + expected_result = expected_result[:len(result_data)] + self.assertFloatTuplesAlmostEqual2 (expected_result, result_data, + abs_eps, rel_eps) + + def test_001(self): + tb = gr.top_block() + fft_size = 32 + src_data = tuple([complex(primes[2*i], primes[2*i+1]) for i in range(fft_size)]) + + expected_result = ((4377+4516j), + (-1706.1268310546875+1638.4256591796875j), + (-915.2083740234375+660.69427490234375j), + (-660.370361328125+381.59600830078125j), + (-499.96044921875+238.41630554199219j), + (-462.26748657226562+152.88948059082031j), + (-377.98440551757812+77.5928955078125j), + (-346.85821533203125+47.152004241943359j), + (-295+20j), + (-286.33609008789062-22.257017135620117j), + (-271.52999877929688-33.081821441650391j), + (-224.6358642578125-67.019538879394531j), + (-244.24473571777344-91.524826049804688j), + (-203.09068298339844-108.54627227783203j), + (-198.45195007324219-115.90768432617188j), + (-182.97744750976562-128.12318420410156j), + (-167-180j), + (-130.33688354492188-173.83778381347656j), + (-141.19784545898438-190.28807067871094j), + (-111.09677124023438-214.48896789550781j), + (-70.039543151855469-242.41630554199219j), + (-68.960540771484375-228.30015563964844j), + (-53.049201965332031-291.47097778320312j), + (-28.695289611816406-317.64553833007812j), + (57-300j), + (45.301143646240234-335.69509887695312j), + (91.936195373535156-373.32437133789062j), + (172.09465026855469-439.275146484375j), + (242.24473571777344-504.47515869140625j), + (387.81732177734375-666.6788330078125j), + (689.48553466796875-918.2142333984375j), + (1646.539306640625-1694.1956787109375j)) + + src = gr.vector_source_c(src_data) + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size) + fft = gcell.fft_vcc(fft_size, True, [], False) + v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size) + dst = gr.vector_sink_c() + tb.connect(src, s2v, fft, v2s, dst) + tb.run() + result_data = dst.data() + #print 'expected:', expected_result + #print 'results: ', result_data + #self.assertComplexTuplesAlmostEqual (expected_result, result_data, 5) + self.assert_fft_ok2(expected_result, result_data) + + def test_002(self): + tb = gr.top_block() + fft_size = 32 + + tmp_data = ((4377+4516j), + (-1706.1268310546875+1638.4256591796875j), + (-915.2083740234375+660.69427490234375j), + (-660.370361328125+381.59600830078125j), + (-499.96044921875+238.41630554199219j), + (-462.26748657226562+152.88948059082031j), + (-377.98440551757812+77.5928955078125j), + (-346.85821533203125+47.152004241943359j), + (-295+20j), + (-286.33609008789062-22.257017135620117j), + (-271.52999877929688-33.081821441650391j), + (-224.6358642578125-67.019538879394531j), + (-244.24473571777344-91.524826049804688j), + (-203.09068298339844-108.54627227783203j), + (-198.45195007324219-115.90768432617188j), + (-182.97744750976562-128.12318420410156j), + (-167-180j), + (-130.33688354492188-173.83778381347656j), + (-141.19784545898438-190.28807067871094j), + (-111.09677124023438-214.48896789550781j), + (-70.039543151855469-242.41630554199219j), + (-68.960540771484375-228.30015563964844j), + (-53.049201965332031-291.47097778320312j), + (-28.695289611816406-317.64553833007812j), + (57-300j), + (45.301143646240234-335.69509887695312j), + (91.936195373535156-373.32437133789062j), + (172.09465026855469-439.275146484375j), + (242.24473571777344-504.47515869140625j), + (387.81732177734375-666.6788330078125j), + (689.48553466796875-918.2142333984375j), + (1646.539306640625-1694.1956787109375j)) + + src_data = tuple([x/fft_size for x in tmp_data]) + + expected_result = tuple([complex(primes[2*i], primes[2*i+1]) for i in range(fft_size)]) + + src = gr.vector_source_c(src_data) + s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_size) + fft = gcell.fft_vcc(fft_size, False, [], False) + v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_size) + dst = gr.vector_sink_c() + tb.connect(src, s2v, fft, v2s, dst) + tb.run() + result_data = dst.data() + #print 'expected:', expected_result + #print 'results: ', result_data + #self.assertComplexTuplesAlmostEqual (expected_result, result_data, 5) + self.assert_fft_ok2(expected_result, result_data) + + +if __name__ == '__main__': + gr_unittest.main () + diff --git a/gr-gcell/src/run_tests.in b/gr-gcell/src/run_tests.in new file mode 100644 index 00000000..f7d51750 --- /dev/null +++ b/gr-gcell/src/run_tests.in @@ -0,0 +1,10 @@ +#!/bin/sh + +# 1st parameter is absolute path to component source directory +# 2nd parameter is absolute path to component build directory +# 3rd parameter is path to Python QA directory + +@top_builddir@/run_tests.sh \ + @abs_top_srcdir@/gr-gcell \ + @abs_top_builddir@/gr-gcell \ + @srcdir@ diff --git a/gr-gpio/Makefile.am b/gr-gpio/Makefile.am new file mode 100644 index 00000000..d800383e --- /dev/null +++ b/gr-gpio/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src diff --git a/gr-gpio/Makefile.in b/gr-gpio/Makefile.in new file mode 100644 index 00000000..efcc68dd --- /dev/null +++ b/gr-gpio/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-gpio +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/Makefile.am b/gr-gpio/src/Makefile.am new file mode 100644 index 00000000..8c9a64b8 --- /dev/null +++ b/gr-gpio/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2007,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. +# + +SUBDIRS = python fpga diff --git a/gr-gpio/src/Makefile.in b/gr-gpio/src/Makefile.in new file mode 100644 index 00000000..1ffc6212 --- /dev/null +++ b/gr-gpio/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-gpio/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = python fpga +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/fpga/Makefile.am b/gr-gpio/src/fpga/Makefile.am new file mode 100644 index 00000000..2b6f2585 --- /dev/null +++ b/gr-gpio/src/fpga/Makefile.am @@ -0,0 +1,23 @@ +# +# Copyright 2008 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. +# + +SUBDIRS = include lib top rbf + diff --git a/gr-gpio/src/fpga/Makefile.in b/gr-gpio/src/fpga/Makefile.in new file mode 100644 index 00000000..b27a9ca4 --- /dev/null +++ b/gr-gpio/src/fpga/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-gpio/src/fpga +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = include lib top rbf +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/fpga/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/fpga/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/fpga/include/Makefile.am b/gr-gpio/src/fpga/include/Makefile.am new file mode 100644 index 00000000..e4baf350 --- /dev/null +++ b/gr-gpio/src/fpga/include/Makefile.am @@ -0,0 +1,25 @@ +# +# Copyright 2007 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. +# + +EXTRA_DIST = \ + common_config_2rxhb_2tx_dig.vh \ + common_config_2rxint_2tx_dig.vh \ + common_config_bottom.vh diff --git a/gr-gpio/src/fpga/include/Makefile.in b/gr-gpio/src/fpga/include/Makefile.in new file mode 100644 index 00000000..4f75a54c --- /dev/null +++ b/gr-gpio/src/fpga/include/Makefile.in @@ -0,0 +1,742 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-gpio/src/fpga/include +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +EXTRA_DIST = \ + common_config_2rxhb_2tx_dig.vh \ + common_config_2rxint_2tx_dig.vh \ + common_config_bottom.vh + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/fpga/include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/fpga/include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/fpga/include/common_config_2rxhb_2tx_dig.vh b/gr-gpio/src/fpga/include/common_config_2rxhb_2tx_dig.vh new file mode 100644 index 00000000..580082c9 --- /dev/null +++ b/gr-gpio/src/fpga/include/common_config_2rxhb_2tx_dig.vh @@ -0,0 +1,71 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built + `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] +//`define TX_SINGLE + `define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// If TX_DIG_ON is defined each transmit channel sends its I lsb and Q lsb to gpio pins +// The lsb bits of the analog output signal are truncated + `define TX_DIG_ON +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* receive circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + +//`define RX_SINGLE + `define RX_DUAL +//`define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter + `define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter + `define RX_CIC_ON + +// ------------------------------------------------------------ +// If RX_DIG_ON is defined each receive channel sends has its I lsb and Q lsb replaced by digital input from gpio pins +// So the analog signals are truncated to 15 bits + `define RX_DIG_ON diff --git a/gr-gpio/src/fpga/include/common_config_2rxint_2tx_dig.vh b/gr-gpio/src/fpga/include/common_config_2rxint_2tx_dig.vh new file mode 100644 index 00000000..01995543 --- /dev/null +++ b/gr-gpio/src/fpga/include/common_config_2rxint_2tx_dig.vh @@ -0,0 +1,77 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built + `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] +//`define TX_SINGLE + `define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// If TX_DIG_ON is defined each transmit channel sends its I lsb and Q lsb to gpio pins +// The lsb bits of the analog output signal are truncated + `define TX_DIG_ON +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* receive circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + +//`define RX_SINGLE + `define RX_DUAL +//`define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter +// `define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter +// This is mutually exclusive with RX_INTEG_ON +// `define RX_CIC_ON + +// ------------------------------------------------------------ +// Define RX_INTEG_ON to enable the receive single stage integrate and dump +// This is mutually exclusive with RX_CIC_ON + `define RX_INTEG_ON + +// ------------------------------------------------------------ +// If RX_DIG_ON is defined each receive channel sends has its I lsb and Q lsb replaced by digital input from gpio pins +// So the analog signals are truncated to 15 bits + `define RX_DIG_ON diff --git a/gr-gpio/src/fpga/include/common_config_bottom.vh b/gr-gpio/src/fpga/include/common_config_bottom.vh new file mode 100644 index 00000000..9e032642 --- /dev/null +++ b/gr-gpio/src/fpga/include/common_config_bottom.vh @@ -0,0 +1,133 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ==================================================================== +// This is the common tail for standard configuation +// ==================================================================== +// +// >>>> DO NOT EDIT BELOW HERE <<<< +// +// N.B., *all* the remainder of the code should be conditionalized +// only in terms of: +// +// TX_ON, TX_EN_0, TX_EN_1, TX_EN_2, TX_EN_3, TX_CAP_NCHAN, TX_CAP_HB, +// RX_ON, RX_EN_0, RX_EN_1, RX_EN_2, RX_EN_3, RX_CAP_NCHAN, RX_CAP_HB, +// RX_NCO_ON, RX_CIC_ON +// ==================================================================== + +`ifdef TX_ON + + `ifdef TX_SINGLE + `define TX_EN_0 + `ifdef TX_DIG_ON + `define TX_EN_DIG_0 + `define TX_CAP_DIG 1 + `endif + `define TX_CAP_NCHAN 3'd1 + `endif + + `ifdef TX_DUAL + `define TX_EN_0 + `define TX_EN_1 + `define TX_CAP_NCHAN 3'd2 + `ifdef TX_DIG_ON + `define TX_EN_DIG_0 + `define TX_EN_DIG_1 + `define TX_CAP_DIG 1 + `endif + `endif + + `ifdef TX_QUAD + `define TX_EN_0 + `define TX_EN_1 + `define TX_EN_2 + `define TX_EN_3 + `ifdef TX_DIG_ON + `define TX_EN_DIG_0 + `define TX_EN_DIG_1 + `define TX_CAP_DIG 1 + `endif + `define TX_CAP_NCHAN 3'd4 + `endif + + `ifdef TX_HB_ON + `define TX_CAP_HB 1 + `else + `define TX_CAP_HB 0 + `endif + +`else // !ifdef TX_ON + + `define TX_CAP_NCHAN 3'd0 + `define TX_CAP_HB 0 + +`endif // !ifdef TX_ON + +// -------------------------------------------------------------------- + +`ifdef RX_ON + + `ifdef RX_SINGLE + `define RX_EN_0 + `define RX_CAP_NCHAN 3'd1 + `ifdef RX_DIG_ON + `define RX_EN_DIG_0 + `define RX_CAP_DIG 1 + `endif + `endif + + `ifdef RX_DUAL + `define RX_EN_0 + `define RX_EN_1 + `define RX_CAP_NCHAN 3'd2 + `ifdef RX_DIG_ON + `define RX_EN_DIG_0 + `define RX_EN_DIG_1 + `define RX_CAP_DIG 1 + `endif + `endif + + `ifdef RX_QUAD + `define RX_EN_0 + `define RX_EN_1 + `define RX_EN_2 + `define RX_EN_3 + `define RX_CAP_NCHAN 3'd4 + `ifdef RX_DIG_ON + `define RX_EN_DIG_0 + `define RX_EN_DIG_1 + `define RX_CAP_DIG 1 + `endif + `endif + + `ifdef RX_HB_ON + `define RX_CAP_HB 1 + `else + `define RX_CAP_HB 0 + `endif + +`else // !ifdef RX_ON + + `define RX_CAP_NCHAN 3'd0 + `define RX_CAP_HB 0 + +`endif // !ifdef RX_ON diff --git a/gr-gpio/src/fpga/lib/Makefile.am b/gr-gpio/src/fpga/lib/Makefile.am new file mode 100644 index 00000000..2bed79c2 --- /dev/null +++ b/gr-gpio/src/fpga/lib/Makefile.am @@ -0,0 +1,31 @@ +# +# Copyright 2007 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. +# + +SUBDIRS = + +EXTRA_DIST = \ + gpio_input.v \ + io_pins.v \ + rx_chain_dig.v \ + tx_chain_dig.v \ + integrator.v \ + integ_shifter.v \ + rx_chain.v \ No newline at end of file diff --git a/gr-gpio/src/fpga/lib/Makefile.in b/gr-gpio/src/fpga/lib/Makefile.in new file mode 100644 index 00000000..08c7b0c5 --- /dev/null +++ b/gr-gpio/src/fpga/lib/Makefile.in @@ -0,0 +1,905 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-gpio/src/fpga/lib +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = +EXTRA_DIST = \ + gpio_input.v \ + io_pins.v \ + rx_chain_dig.v \ + tx_chain_dig.v \ + integrator.v \ + integ_shifter.v \ + rx_chain.v + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/fpga/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/fpga/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/fpga/lib/gpio_input.v b/gr-gpio/src/fpga/lib/gpio_input.v new file mode 100644 index 00000000..871fe326 --- /dev/null +++ b/gr-gpio/src/fpga/lib/gpio_input.v @@ -0,0 +1,80 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module gpio_input + (input clock, input reset, input enable, + input out_strobe, + input wire [6:0] serial_addr, input wire [31:0] serial_data, input serial_strobe, + input wire [15:0] io_rx_a_in, input wire [15:0] io_rx_b_in, + //input wire [15:0] io_tx_a_in, input wire [15:0] io_tx_b_in, + output reg rx_dig0_i, output reg rx_dig0_q, + output reg rx_dig1_i, output reg rx_dig1_q ); + + // Buffer at input to chip + + reg rx_dig_rx_a_a,rx_dig_rx_b_a,rx_dig_rx_a_b,rx_dig_rx_b_b; + //TODO possibly use a flancter here + //This code can optionally be extended to do streaming input from gpio of tx boards + //The code can also be extended to input more bits + + always @(posedge clock) + begin + //This is the first point where is determined which physical input gpio pins are used for streaming digital input + //The other point is the code which overrides these pins as input (oe = 0) + //rx_dig_tx_a_a <= #1 io_tx_a_in[14]; + //rx_dig_tx_b_a <= #1 io_tx_a_in[15]; + rx_dig_rx_a_a <= #1 io_rx_a_in[14]; + rx_dig_rx_b_a <= #1 io_rx_a_in[15]; + //rx_dig_tx_a_b <= #1 io_tx_b_in[14]; + //rx_dig_tx_b_b <= #1 io_tx_b_in[15]; + rx_dig_rx_a_b <= #1 io_rx_b_in[14]; + rx_dig_rx_b_b <= #1 io_rx_b_in[15]; + end + + // Now mux to the appropriate outputs + wire [3:0] ddc3mux,ddc2mux,ddc1mux,ddc0mux; + wire rx_realsignals; + wire [3:0] rx_numchan;//not used here + //TODO This setting reg readout is a duplicate of the one in adc_interface.v. + // Change code so this is done in only one place, or give this code its own register. + setting_reg #(`FR_RX_MUX) sr_rxmux(.clock(clock),.reset(reset),.strobe(serial_strobe),.addr(serial_addr), + .in(serial_data),.out({ddc3mux,ddc2mux,ddc1mux,ddc0mux,rx_realsignals,rx_numchan[3:1]})); + //assign rx_numchan[0] = 1'b0; + + always @(posedge clock) + if (out_strobe) //out_strobe determines the time at which the digital inputs are sampled (with a delay of one sample) + begin + rx_dig0_i <= #1 ddc0mux[1] ? (ddc0mux[0] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc0mux[0] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + rx_dig0_q <= #1 rx_realsignals ? 1'b0 : ddc0mux[3] ? (ddc0mux[2] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc0mux[2] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + rx_dig1_i <= #1 ddc1mux[1] ? (ddc1mux[0] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc1mux[0] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + rx_dig1_q <= #1 rx_realsignals ? 1'b0 : ddc1mux[3] ? (ddc1mux[2] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc1mux[2] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + //rx_dig2_i <= #1 ddc2mux[1] ? (ddc2mux[0] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc2mux[0] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + //rx_dig2_q <= #1 rx_realsignals ? 1'b0 : ddc2mux[3] ? (ddc2mux[2] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc2mux[2] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + //rx_dig3_i <= #1 ddc3mux[1] ? (ddc3mux[0] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc3mux[0] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + //rx_dig3_q <= #1 rx_realsignals ? 1'b0 : ddc3mux[3] ? (ddc3mux[2] ? rx_dig_rx_b_b : rx_dig_rx_a_b) : (ddc3mux[2] ? rx_dig_rx_b_a : rx_dig_rx_a_a); + end + +endmodule // gpio_input + + diff --git a/gr-gpio/src/fpga/lib/integ_shifter.v b/gr-gpio/src/fpga/lib/integ_shifter.v new file mode 100644 index 00000000..1ad0504c --- /dev/null +++ b/gr-gpio/src/fpga/lib/integ_shifter.v @@ -0,0 +1,68 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + + +// NOTE: This only works for a max decim rate of 256 +// NOTE: Signal "rate" is ONE LESS THAN the actual rate + +module integ_shifter(rate,signal_in,signal_out); + parameter bw = 16; + parameter maxbitgain = 8; + + input [7:0] rate; + input wire [bw+maxbitgain-1:0] signal_in; + output reg [bw-1:0] signal_out; + + reg [3:0] bitgain; + + // Nearest without overflow -- ceil(log2(rate+1)) + always @* + if (rate >= 8'd128) + bitgain = 8; + else if (rate >= 8'd64) + bitgain = 7; + else if (rate >= 8'd32) + bitgain = 6; + else if (rate >= 8'd16) + bitgain = 5; + else if (rate >= 8'd8) + bitgain = 4; + else if (rate >= 8'd4) + bitgain = 3; + else if (rate >= 8'd2) + bitgain = 2; + else + bitgain = 1; + + always @* + case(bitgain) + 5'd1 : signal_out = signal_in[1+bw-1:1]; + 5'd2 : signal_out = signal_in[2+bw-1:2]; + 5'd3 : signal_out = signal_in[3+bw-1:3]; + 5'd4 : signal_out = signal_in[4+bw-1:4]; + 5'd5 : signal_out = signal_in[5+bw-1:5]; + 5'd6 : signal_out = signal_in[6+bw-1:6]; + 5'd7 : signal_out = signal_in[7+bw-1:7]; + default : signal_out = signal_in[8+bw-1:8]; + endcase // case(shift) + +endmodule // integ_shifter diff --git a/gr-gpio/src/fpga/lib/integrator.v b/gr-gpio/src/fpga/lib/integrator.v new file mode 100644 index 00000000..22357a56 --- /dev/null +++ b/gr-gpio/src/fpga/lib/integrator.v @@ -0,0 +1,75 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// Integrate and dump decimation filter +// +// Functionally equivalent to single-stage CIC decimator, simpler code +// Results in single sample impulse response at decimated rate + +module integrator + ( clock,reset,enable,rate,strobe_in,strobe_out,signal_in,signal_out); + parameter bw = 16; + parameter maxbitgain = 8; + + input clock; + input reset; + input enable; + input [7:0] rate; + input strobe_in; + input strobe_out; + + input [bw-1:0] signal_in; + wire [bw-1:0] signal_out_unreg; + output [bw-1:0] signal_out; + reg [bw-1:0] signal_out; + + wire [bw+maxbitgain-1:0] signal_in_ext; + reg [bw+maxbitgain-1:0] accum; + reg [bw+maxbitgain-1:0] dump; + + sign_extend #(bw,bw+maxbitgain) + ext_input (.in(signal_in),.out(signal_in_ext)); + + // Integrate samples, dump on strobe out + always @(posedge clock) + if (reset | ~enable) + begin + accum <= 0; + dump <= 0; + end + else if (enable && strobe_in) + if (~strobe_out) + accum <= accum + signal_in_ext; + else + begin + dump <= accum; + accum <= signal_in_ext; + end + + // Normalize for integration bit gain + integ_shifter #(bw) + shifter(rate,dump,signal_out_unreg); + + always @(posedge clock) + signal_out <= #1 signal_out_unreg; + +endmodule // integrator diff --git a/gr-gpio/src/fpga/lib/io_pins.v b/gr-gpio/src/fpga/lib/io_pins.v new file mode 100644 index 00000000..9d857902 --- /dev/null +++ b/gr-gpio/src/fpga/lib/io_pins.v @@ -0,0 +1,55 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2005,2006 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module io_pins + ( inout wire [15:0] io_0, inout wire [15:0] io_1, inout wire [15:0] io_2, inout wire [15:0] io_3, + input wire [15:0] reg_0, input wire [15:0] reg_1, input wire [15:0] reg_2, input wire [15:0] reg_3, + input wire [15:0] io_0_force_output, input wire [15:0] io_2_force_output, + input wire [15:0] io_1_force_input, input wire [15:0] io_3_force_input, + input clock, input rx_reset, input tx_reset, + input [6:0] serial_addr, input [31:0] serial_data, input serial_strobe); + + reg [15:0] io_0_oe,io_1_oe,io_2_oe,io_3_oe; + + bidir_reg bidir_reg_0 (.tristate(io_0),.oe(io_0_oe | io_0_force_output),.reg_val(reg_0)); + bidir_reg bidir_reg_1 (.tristate(io_1),.oe(io_1_oe & (~io_1_force_input)),.reg_val(reg_1)); + bidir_reg bidir_reg_2 (.tristate(io_2),.oe(io_2_oe | io_2_force_output),.reg_val(reg_2)); + bidir_reg bidir_reg_3 (.tristate(io_3),.oe(io_3_oe & (~io_3_force_input)),.reg_val(reg_3)); + + // Upper 16 bits are mask for lower 16 + always @(posedge clock) + if(serial_strobe) + case(serial_addr) + `FR_OE_0 : io_0_oe + <= #1 (io_0_oe & ~serial_data[31:16]) | (serial_data[15:0] & serial_data[31:16] ); + `FR_OE_1 : io_1_oe + <= #1 (io_1_oe & ~serial_data[31:16]) | (serial_data[15:0] & serial_data[31:16] ); + `FR_OE_2 : io_2_oe + <= #1 (io_2_oe & ~serial_data[31:16]) | (serial_data[15:0] & serial_data[31:16] ); + `FR_OE_3 : io_3_oe + <= #1 (io_3_oe & ~serial_data[31:16]) | (serial_data[15:0] & serial_data[31:16] ); + endcase // case(serial_addr) + +endmodule // io_pins diff --git a/gr-gpio/src/fpga/lib/rx_chain.v b/gr-gpio/src/fpga/lib/rx_chain.v new file mode 100644 index 00000000..172e978d --- /dev/null +++ b/gr-gpio/src/fpga/lib/rx_chain.v @@ -0,0 +1,121 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// Following defines conditionally include RX path circuitry + +`include "config.vh" // resolved relative to project root + +module rx_chain + (input clock, + input reset, + input enable, + input wire [7:0] decim_rate, + input sample_strobe, + input decimator_strobe, + output wire hb_strobe, + input [6:0] serial_addr, input [31:0] serial_data, input serial_strobe, + input wire [15:0] i_in, + input wire [15:0] q_in, + output wire [15:0] i_out, + output wire [15:0] q_out, + output wire [15:0] debugdata,output wire [15:0] debugctrl + ); + + parameter FREQADDR = 0; + parameter PHASEADDR = 0; + + wire [31:0] phase; + wire [15:0] bb_i, bb_q; + wire [15:0] hb_in_i, hb_in_q; + + assign debugdata = hb_in_i; + +`ifdef RX_NCO_ON + phase_acc #(FREQADDR,PHASEADDR,32) rx_phase_acc + (.clk(clock),.reset(reset),.enable(enable), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .strobe(sample_strobe),.phase(phase) ); + + cordic rx_cordic + ( .clock(clock),.reset(reset),.enable(enable), + .xi(i_in),.yi(q_in),.zi(phase[31:16]), + .xo(bb_i),.yo(bb_q),.zo() ); +`else + assign bb_i = i_in; + assign bb_q = q_in; + assign sample_strobe = 1; +`endif // !`ifdef RX_NCO_ON + +`ifdef RX_INTEG_ON + integrator integ_decim_i_0 + ( .clock(clock),.reset(reset),.enable(enable), + .rate(decim_rate),.strobe_in(sample_strobe),.strobe_out(decimator_strobe), + .signal_in(bb_i),.signal_out(i_out) ); + + assign hb_strobe = decimator_strobe; +`else +`ifdef RX_CIC_ON + cic_decim cic_decim_i_0 + ( .clock(clock),.reset(reset),.enable(enable), + .rate(decim_rate),.strobe_in(sample_strobe),.strobe_out(decimator_strobe), + .signal_in(bb_i),.signal_out(hb_in_i) ); +`else + assign hb_in_i = bb_i; + assign decimator_strobe = sample_strobe; +`endif + +`ifdef RX_HB_ON + halfband_decim hbd_i_0 + ( .clock(clock),.reset(reset),.enable(enable), + .strobe_in(decimator_strobe),.strobe_out(hb_strobe), + .data_in(hb_in_i),.data_out(i_out),.debugctrl(debugctrl) ); +`else + assign i_out = hb_in_i; + assign hb_strobe = decimator_strobe; +`endif +`endif // RX_INTEG_ON + +`ifdef RX_INTEG_ON + integrator integ_decim_q_0 + ( .clock(clock),.reset(reset),.enable(enable), + .rate(decim_rate),.strobe_in(sample_strobe),.strobe_out(decimator_strobe), + .signal_in(bb_q),.signal_out(q_out) ); +`else +`ifdef RX_CIC_ON + cic_decim cic_decim_q_0 + ( .clock(clock),.reset(reset),.enable(enable), + .rate(decim_rate),.strobe_in(sample_strobe),.strobe_out(decimator_strobe), + .signal_in(bb_q),.signal_out(hb_in_q) ); +`else + assign hb_in_q = bb_q; +`endif + +`ifdef RX_HB_ON + halfband_decim hbd_q_0 + ( .clock(clock),.reset(reset),.enable(enable), + .strobe_in(decimator_strobe),.strobe_out(), + .data_in(hb_in_q),.data_out(q_out) ); +`else + assign q_out = hb_in_q; +`endif +`endif // RX_INTEG_ON + +endmodule // rx_chain diff --git a/gr-gpio/src/fpga/lib/rx_chain_dig.v b/gr-gpio/src/fpga/lib/rx_chain_dig.v new file mode 100644 index 00000000..4f760dde --- /dev/null +++ b/gr-gpio/src/fpga/lib/rx_chain_dig.v @@ -0,0 +1,43 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// Following defines conditionally include RX path circuitry + +`include "../top/config.vh" // resolved relative to project root + +module rx_chain_dig + (input clock, + input reset, + input enable, + input wire [15:0] i_in_ana, + input wire [15:0] q_in_ana, + input wire i_in_dig, + input wire q_in_dig, + output wire [15:0] i_out, + output wire [15:0] q_out + ); + + //assign upper 15 bits of output to analog input, + // discards lsb of analog input and replace with digital input bit (which comes from gpio) + assign i_out = (enable)?{i_in_ana[15:1],i_in_dig}:i_in_ana; + assign q_out = (enable)?{q_in_ana[15:1],q_in_dig}:q_in_ana; + +endmodule // rx_chain_dig diff --git a/gr-gpio/src/fpga/lib/tx_chain_dig.v b/gr-gpio/src/fpga/lib/tx_chain_dig.v new file mode 100644 index 00000000..7001947f --- /dev/null +++ b/gr-gpio/src/fpga/lib/tx_chain_dig.v @@ -0,0 +1,42 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +module tx_chain_dig + (input clock, + input reset, + input enable, + input wire [15:0] i_in, + input wire [15:0] q_in, + output wire [15:0] i_out_ana, + output wire [15:0] q_out_ana, + output wire i_out_dig, + output wire q_out_dig + ); + + //assign upper 15 bits to analog processing, discard lowest bit + //output lower two bits of I and Q as digital signal (to be output on gpio pins) + assign i_out_ana = (enable)?{i_in[15:1],1'b0}:i_in; + assign q_out_ana = (enable)?{q_in[15:1],1'b0}:q_in; + //wire out_dig = (enable)?{i_in[0],q_in[0]}:2'b00; + assign i_out_dig = (enable)?i_in[0]:1'b0; + assign q_out_dig = (enable)?q_in[0]:1'b0; + +endmodule // tx_chain_dig diff --git a/gr-gpio/src/fpga/rbf/Makefile.am b/gr-gpio/src/fpga/rbf/Makefile.am new file mode 100644 index 00000000..e444d62e --- /dev/null +++ b/gr-gpio/src/fpga/rbf/Makefile.am @@ -0,0 +1,34 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +RBFS = \ + std_2rxhb_2tx_dig.rbf \ + std_2rxint_2tx_dig.rbf + +datadir = $(prefix)/share/usrp +datarev2dir = $(datadir)/rev2 +datarev4dir = $(datadir)/rev4 + +dist_datarev2_DATA = $(RBFS) + +dist_datarev4_DATA = $(RBFS) diff --git a/gr-gpio/src/fpga/rbf/Makefile.in b/gr-gpio/src/fpga/rbf/Makefile.in new file mode 100644 index 00000000..58386ab7 --- /dev/null +++ b/gr-gpio/src/fpga/rbf/Makefile.in @@ -0,0 +1,932 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_datarev2_DATA) $(dist_datarev4_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-gpio/src/fpga/rbf +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(datarev2dir)" \ + "$(DESTDIR)$(datarev4dir)" +dist_datarev2DATA_INSTALL = $(INSTALL_DATA) +dist_datarev4DATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_datarev2_DATA) $(dist_datarev4_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = $(prefix)/share/usrp +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +RBFS = \ + std_2rxhb_2tx_dig.rbf \ + std_2rxint_2tx_dig.rbf + +datarev2dir = $(datadir)/rev2 +datarev4dir = $(datadir)/rev4 +dist_datarev2_DATA = $(RBFS) +dist_datarev4_DATA = $(RBFS) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/fpga/rbf/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/fpga/rbf/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_datarev2DATA: $(dist_datarev2_DATA) + @$(NORMAL_INSTALL) + test -z "$(datarev2dir)" || $(MKDIR_P) "$(DESTDIR)$(datarev2dir)" + @list='$(dist_datarev2_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_datarev2DATA_INSTALL) '$$d$$p' '$(DESTDIR)$(datarev2dir)/$$f'"; \ + $(dist_datarev2DATA_INSTALL) "$$d$$p" "$(DESTDIR)$(datarev2dir)/$$f"; \ + done + +uninstall-dist_datarev2DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_datarev2_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(datarev2dir)/$$f'"; \ + rm -f "$(DESTDIR)$(datarev2dir)/$$f"; \ + done +install-dist_datarev4DATA: $(dist_datarev4_DATA) + @$(NORMAL_INSTALL) + test -z "$(datarev4dir)" || $(MKDIR_P) "$(DESTDIR)$(datarev4dir)" + @list='$(dist_datarev4_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_datarev4DATA_INSTALL) '$$d$$p' '$(DESTDIR)$(datarev4dir)/$$f'"; \ + $(dist_datarev4DATA_INSTALL) "$$d$$p" "$(DESTDIR)$(datarev4dir)/$$f"; \ + done + +uninstall-dist_datarev4DATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_datarev4_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(datarev4dir)/$$f'"; \ + rm -f "$(DESTDIR)$(datarev4dir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(datarev2dir)" "$(DESTDIR)$(datarev4dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_datarev2DATA install-dist_datarev4DATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_datarev2DATA uninstall-dist_datarev4DATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_datarev2DATA install-dist_datarev4DATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_datarev2DATA \ + uninstall-dist_datarev4DATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/fpga/rbf/std_2rxhb_2tx_dig.rbf b/gr-gpio/src/fpga/rbf/std_2rxhb_2tx_dig.rbf new file mode 100644 index 0000000000000000000000000000000000000000..5d1c9c7d29355320c1be6d62396b4bc4abf4dce3 GIT binary patch literal 181332 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%0D(J(;X$d}YCS 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⪼js&b~rn!+(ZjD>s2mjyNb=%yyH^4Zn#H9>Z{ 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 z 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 Dc!zpm literal 0 HcmV?d00001 diff --git a/gr-gpio/src/fpga/top/Makefile.am b/gr-gpio/src/fpga/top/Makefile.am new file mode 100644 index 00000000..c4b4e1fd --- /dev/null +++ b/gr-gpio/src/fpga/top/Makefile.am @@ -0,0 +1,41 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + config.vh \ + usrp_gpio.csf \ + usrp_gpio.esf \ + usrp_gpio.psf \ + usrp_gpio.qpf \ + usrp_gpio.qsf \ + usrp_gpio.v + +MOSTLYCLEANFILES += \ + db/* \ + *.rpt \ + *.summary \ + *.qws \ + *.smsg \ + *.done \ + *.pin \ + *.sof diff --git a/gr-gpio/src/fpga/top/Makefile.in b/gr-gpio/src/fpga/top/Makefile.in new file mode 100644 index 00000000..06ca0993 --- /dev/null +++ b/gr-gpio/src/fpga/top/Makefile.in @@ -0,0 +1,882 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-gpio/src/fpga/top +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT db/* *.rpt *.summary *.qws *.smsg *.done *.pin *.sof +EXTRA_DIST = \ + config.vh \ + usrp_gpio.csf \ + usrp_gpio.esf \ + usrp_gpio.psf \ + usrp_gpio.qpf \ + usrp_gpio.qsf \ + usrp_gpio.v + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/fpga/top/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/fpga/top/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/fpga/top/config.vh b/gr-gpio/src/fpga/top/config.vh new file mode 100644 index 00000000..d40e75d2 --- /dev/null +++ b/gr-gpio/src/fpga/top/config.vh @@ -0,0 +1,60 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ==================================================================== +// User control over what parts get included +// +// >>>> EDIT ONLY THIS SECTION <<<< +// Uncomment only ONE configuration +// ==================================================================== + +// ==================================================================== +// FIXME drive configuration selection from the command line and/or gui +// ==================================================================== + +// Uncomment this for 1 rx channel (w/ halfband) & 1 transmit channel +//`include "../include/common_config_1rxhb_1tx.vh" + +// Uncomment this for 2 rx channels (w/ halfband) & 2 transmit channels +//`include "../include/common_config_2rxhb_2tx.vh" + +// Uncomment this for 2 rx channels (w/ halfband) & 2 transmit channels with digital output (lsb of I and Q) on gpio pins +//`include "../include/common_config_2rxhb_2tx_dig.vh" + +// Uncomment this for 2 rx channels (w/o halfband, but w/integrator) & 2 tx channels, with streaming GPIO + `include "../include/common_config_2rxint_2tx_dig.vh" + +// Uncomment this for 4 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_4rx_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/ halfband) & 0 transmit channels +//`include "../include/common_config_2rxhb_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_2rx_0tx.vh" + +// Add other "known to fit" configurations here... + +// ==================================================================== +// Now include the common footer +// ==================================================================== + `include "../include/common_config_bottom.vh" diff --git a/gr-gpio/src/fpga/top/usrp_gpio.csf b/gr-gpio/src/fpga/top/usrp_gpio.csf new file mode 100644 index 00000000..8a6a0b46 --- /dev/null +++ b/gr-gpio/src/fpga/top/usrp_gpio.csf @@ -0,0 +1,444 @@ +COMPILER_SETTINGS +{ + IO_PLACEMENT_OPTIMIZATION = OFF; + ENABLE_DRC_SETTINGS = OFF; + PHYSICAL_SYNTHESIS_REGISTER_RETIMING = OFF; + PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION = OFF; + PHYSICAL_SYNTHESIS_COMBO_LOGIC = OFF; + DRC_FANOUT_EXCEEDING = 30; + DRC_REPORT_FANOUT_EXCEEDING = OFF; + DRC_TOP_FANOUT = 50; + DRC_REPORT_TOP_FANOUT = OFF; + RUN_DRC_DURING_COMPILATION = OFF; + ADV_NETLIST_OPT_RETIME_CORE_AND_IO = ON; + ADV_NETLIST_OPT_SYNTH_USE_FITTER_INFO = OFF; + ADV_NETLIST_OPT_SYNTH_GATE_RETIME = OFF; + ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP = OFF; + SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES = OFF; + MERGE_HEX_FILE = OFF; + TRUE_WYSIWYG_FLOW = OFF; + SEED = 1; + FINAL_PLACEMENT_OPTIMIZATION = AUTOMATICALLY; + FAMILY = Cyclone; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "LOWER TO 1ESB UPPER TO 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DEEP_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_SINGLE_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_WIDE_MODE_OUTPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4ESB"; + DPRAM_DEEP_MODE_OUTPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_INPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4"; + DPRAM_DEEP_MODE_INPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_OTHER_SIGNALS_EPXA4_10 = "DEFAULT OTHER ROUTING OPTIONS"; + DPRAM_OUTPUT_EPXA4_10 = "DEFAULT OUTPUT ROUTING OPTIONS"; + DPRAM_INPUT_EPXA4_10 = "DEFAULT INPUT ROUTING OPTIONS"; + STRIPE_TO_PLD_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PLD_TO_STRIPE_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PROCESSOR_DEBUG_EXTENSIONS_EPXA4_10 = "MEGALAB COLUMN 2"; + STRIPE_TO_PLD_BRIDGE_EPXA4_10 = "MEGALAB COLUMN 1"; + FAST_FIT_COMPILATION = OFF; + SIGNALPROBE_DURING_NORMAL_COMPILATION = OFF; + OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING = ON; + OPTIMIZE_TIMING = "NORMAL COMPILATION"; + OPTIMIZE_HOLD_TIMING = OFF; + COMPILATION_LEVEL = FULL; + SAVE_DISK_SPACE = OFF; + SPEED_DISK_USAGE_TRADEOFF = NORMAL; + LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT = OFF; + SIGNALPROBE_ALLOW_OVERUSE = OFF; + FOCUS_ENTITY_NAME = |usrp_gpio; + ROUTING_BACK_ANNOTATION_MODE = OFF; + INC_PLC_MODE = OFF; + FIT_ONLY_ONE_ATTEMPT = OFF; +} +DEFAULT_DEVICE_OPTIONS +{ + GENERATE_CONFIG_HEXOUT_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_JBC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_SVF_FILE = OFF; + RESERVE_PIN = "AS INPUT TRI-STATED"; + RESERVE_ALL_UNUSED_PINS = "AS OUTPUT DRIVING GROUND"; + HEXOUT_FILE_COUNT_DIRECTION = UP; + HEXOUT_FILE_START_ADDRESS = 0; + GENERATE_HEX_FILE = OFF; + GENERATE_RBF_FILE = OFF; + GENERATE_TTF_FILE = OFF; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + APEX20K_CONFIGURATION_DEVICE = AUTO; + USE_CONFIGURATION_DEVICE = ON; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + AUTO_RESTART_CONFIGURATION = OFF; + ENABLE_VREFB_PIN = OFF; + ENABLE_VREFA_PIN = OFF; + SECURITY_BIT = OFF; + USER_START_UP_CLOCK = OFF; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "ACTIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_UPDATE_MODE = STANDARD; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + ENABLE_JTAG_BST_SUPPORT = OFF; + CONFIGURATION_CLOCK_DIVISOR = 1; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CLOCK_SOURCE = INTERNAL; + COMPRESSION_MODE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; +} +AUTO_SLD_HUB_ENTITY +{ + AUTO_INSERT_SLD_HUB_ENTITY = ENABLE; + HUB_INSTANCE_NAME = SLD_HUB_INST; + HUB_ENTITY_NAME = SLD_HUB; +} +SIGNALTAP_LOGIC_ANALYZER_SETTINGS +{ + ENABLE_SIGNALTAP = Off; + AUTO_ENABLE_SMART_COMPILE = On; +} +CHIP(usrp_gpio) +{ + DEVICE = EP1C12Q240C8; + DEVICE_FILTER_PACKAGE = "ANY QFP"; + DEVICE_FILTER_PIN_COUNT = 240; + DEVICE_FILTER_SPEED_GRADE = ANY; + AUTO_RESTART_CONFIGURATION = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + USER_START_UP_CLOCK = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_JTAG_BST_SUPPORT = OFF; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + USE_CONFIGURATION_DEVICE = OFF; + APEX20K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + STRATIX_UPDATE_MODE = STANDARD; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + COMPRESSION_MODE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + GENERATE_TTF_FILE = OFF; + GENERATE_RBF_FILE = ON; + GENERATE_HEX_FILE = OFF; + SECURITY_BIT = OFF; + ENABLE_VREFA_PIN = OFF; + ENABLE_VREFB_PIN = OFF; + GENERATE_SVF_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_JBC_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_HEXOUT_FILE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; + BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE = OFF; + HEXOUT_FILE_START_ADDRESS = 0; + HEXOUT_FILE_COUNT_DIRECTION = UP; + RESERVE_ALL_UNUSED_PINS = "AS INPUT TRI-STATED"; + STRATIX_DEVICE_IO_STANDARD = LVTTL; + CLOCK_SOURCE = INTERNAL; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CONFIGURATION_CLOCK_DIVISOR = 1; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + SCLK : LOCATION = Pin_101; + SDI : LOCATION = Pin_100; + SEN : LOCATION = Pin_98; + SLD : LOCATION = Pin_95; + adc1_data[0] : LOCATION = Pin_5; + adc1_data[10] : LOCATION = Pin_235; + adc1_data[11] : LOCATION = Pin_234; + adc1_data[1] : LOCATION = Pin_4; + adc1_data[2] : LOCATION = Pin_3; + adc1_data[3] : LOCATION = Pin_2; + adc1_data[4] : LOCATION = Pin_1; + adc1_data[4] : IO_STANDARD = LVTTL; + adc1_data[5] : LOCATION = Pin_240; + adc1_data[6] : LOCATION = Pin_239; + adc1_data[7] : LOCATION = Pin_238; + adc1_data[8] : LOCATION = Pin_237; + adc1_data[9] : LOCATION = Pin_236; + adc2_data[0] : LOCATION = Pin_20; + adc2_data[10] : LOCATION = Pin_8; + adc2_data[11] : LOCATION = Pin_7; + adc2_data[1] : LOCATION = Pin_19; + adc2_data[2] : LOCATION = Pin_18; + adc2_data[3] : LOCATION = Pin_17; + adc2_data[4] : LOCATION = Pin_16; + adc2_data[5] : LOCATION = Pin_15; + adc2_data[6] : LOCATION = Pin_14; + adc2_data[7] : LOCATION = Pin_13; + adc2_data[8] : LOCATION = Pin_12; + adc2_data[9] : LOCATION = Pin_11; + adc3_data[0] : LOCATION = Pin_200; + adc3_data[10] : LOCATION = Pin_184; + adc3_data[11] : LOCATION = Pin_183; + adc3_data[1] : LOCATION = Pin_197; + adc3_data[2] : LOCATION = Pin_196; + adc3_data[3] : LOCATION = Pin_195; + adc3_data[4] : LOCATION = Pin_194; + adc3_data[5] : LOCATION = Pin_193; + adc3_data[6] : LOCATION = Pin_188; + adc3_data[7] : LOCATION = Pin_187; + adc3_data[8] : LOCATION = Pin_186; + adc3_data[9] : LOCATION = Pin_185; + adc4_data[0] : LOCATION = Pin_222; + adc4_data[10] : LOCATION = Pin_203; + adc4_data[11] : LOCATION = Pin_202; + adc4_data[1] : LOCATION = Pin_219; + adc4_data[2] : LOCATION = Pin_217; + adc4_data[3] : LOCATION = Pin_216; + adc4_data[4] : LOCATION = Pin_215; + adc4_data[5] : LOCATION = Pin_214; + adc4_data[6] : LOCATION = Pin_213; + adc4_data[7] : LOCATION = Pin_208; + adc4_data[8] : LOCATION = Pin_207; + adc4_data[9] : LOCATION = Pin_206; + adc_oeb[0] : LOCATION = Pin_228; + adc_oeb[1] : LOCATION = Pin_21; + adc_oeb[2] : LOCATION = Pin_181; + adc_oeb[3] : LOCATION = Pin_218; + adc_otr[0] : LOCATION = Pin_233; + adc_otr[1] : LOCATION = Pin_6; + adc_otr[2] : LOCATION = Pin_182; + adc_otr[3] : LOCATION = Pin_201; + adclk0 : LOCATION = Pin_224; + adclk1 : LOCATION = Pin_226; + clk0 : LOCATION = Pin_28; + clk0 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk0 : IO_STANDARD = LVTTL; + clk1 : LOCATION = Pin_29; + clk1 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk1 : IO_STANDARD = LVTTL; + clk3 : LOCATION = Pin_152; + clk3 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk3 : IO_STANDARD = LVTTL; + clk_120mhz : LOCATION = Pin_153; + clk_120mhz : IO_STANDARD = LVTTL; + clk_out : LOCATION = Pin_63; + clk_out : IO_STANDARD = LVTTL; + dac1_data[0] : LOCATION = Pin_165; + dac1_data[10] : LOCATION = Pin_177; + dac1_data[11] : LOCATION = Pin_178; + dac1_data[12] : LOCATION = Pin_179; + dac1_data[13] : LOCATION = Pin_180; + dac1_data[1] : LOCATION = Pin_166; + dac1_data[2] : LOCATION = Pin_167; + dac1_data[3] : LOCATION = Pin_168; + dac1_data[4] : LOCATION = Pin_169; + dac1_data[5] : LOCATION = Pin_170; + dac1_data[6] : LOCATION = Pin_173; + dac1_data[7] : LOCATION = Pin_174; + dac1_data[8] : LOCATION = Pin_175; + dac1_data[9] : LOCATION = Pin_176; + dac2_data[0] : LOCATION = Pin_159; + dac2_data[10] : LOCATION = Pin_163; + dac2_data[11] : LOCATION = Pin_139; + dac2_data[12] : LOCATION = Pin_164; + dac2_data[13] : LOCATION = Pin_138; + dac2_data[1] : LOCATION = Pin_158; + dac2_data[2] : LOCATION = Pin_160; + dac2_data[3] : LOCATION = Pin_156; + dac2_data[4] : LOCATION = Pin_161; + dac2_data[5] : LOCATION = Pin_144; + dac2_data[6] : LOCATION = Pin_162; + dac2_data[7] : LOCATION = Pin_141; + dac2_data[8] : LOCATION = Pin_143; + dac2_data[9] : LOCATION = Pin_140; + dac3_data[0] : LOCATION = Pin_122; + dac3_data[10] : LOCATION = Pin_134; + dac3_data[11] : LOCATION = Pin_135; + dac3_data[12] : LOCATION = Pin_136; + dac3_data[13] : LOCATION = Pin_137; + dac3_data[1] : LOCATION = Pin_123; + dac3_data[2] : LOCATION = Pin_124; + dac3_data[3] : LOCATION = Pin_125; + dac3_data[4] : LOCATION = Pin_126; + dac3_data[5] : LOCATION = Pin_127; + dac3_data[6] : LOCATION = Pin_128; + dac3_data[7] : LOCATION = Pin_131; + dac3_data[8] : LOCATION = Pin_132; + dac3_data[9] : LOCATION = Pin_133; + dac4_data[0] : LOCATION = Pin_104; + dac4_data[10] : LOCATION = Pin_118; + dac4_data[11] : LOCATION = Pin_119; + dac4_data[12] : LOCATION = Pin_120; + dac4_data[13] : LOCATION = Pin_121; + dac4_data[1] : LOCATION = Pin_105; + dac4_data[2] : LOCATION = Pin_106; + dac4_data[3] : LOCATION = Pin_107; + dac4_data[4] : LOCATION = Pin_108; + dac4_data[5] : LOCATION = Pin_113; + dac4_data[6] : LOCATION = Pin_114; + dac4_data[7] : LOCATION = Pin_115; + dac4_data[8] : LOCATION = Pin_116; + dac4_data[9] : LOCATION = Pin_117; + enable_rx : LOCATION = Pin_88; + enable_tx : LOCATION = Pin_93; + gndbus[0] : LOCATION = Pin_223; + gndbus[0] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[0] : IO_STANDARD = LVTTL; + gndbus[1] : LOCATION = Pin_225; + gndbus[1] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[1] : IO_STANDARD = LVTTL; + gndbus[2] : LOCATION = Pin_227; + gndbus[2] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[2] : IO_STANDARD = LVTTL; + gndbus[3] : LOCATION = Pin_62; + gndbus[3] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[3] : IO_STANDARD = LVTTL; + gndbus[4] : LOCATION = Pin_64; + gndbus[4] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[4] : IO_STANDARD = LVTTL; + misc_pins[0] : LOCATION = Pin_87; + misc_pins[0] : IO_STANDARD = LVTTL; + misc_pins[10] : LOCATION = Pin_76; + misc_pins[10] : IO_STANDARD = LVTTL; + misc_pins[11] : LOCATION = Pin_74; + misc_pins[11] : IO_STANDARD = LVTTL; + misc_pins[1] : LOCATION = Pin_86; + misc_pins[1] : IO_STANDARD = LVTTL; + misc_pins[2] : LOCATION = Pin_85; + misc_pins[2] : IO_STANDARD = LVTTL; + misc_pins[3] : LOCATION = Pin_84; + misc_pins[3] : IO_STANDARD = LVTTL; + misc_pins[4] : LOCATION = Pin_83; + misc_pins[4] : IO_STANDARD = LVTTL; + misc_pins[5] : LOCATION = Pin_82; + misc_pins[5] : IO_STANDARD = LVTTL; + misc_pins[6] : LOCATION = Pin_79; + misc_pins[6] : IO_STANDARD = LVTTL; + misc_pins[7] : LOCATION = Pin_78; + misc_pins[7] : IO_STANDARD = LVTTL; + misc_pins[8] : LOCATION = Pin_77; + misc_pins[8] : IO_STANDARD = LVTTL; + misc_pins[9] : LOCATION = Pin_75; + misc_pins[9] : IO_STANDARD = LVTTL; + reset : LOCATION = Pin_94; + usbclk : LOCATION = Pin_55; + usbctl[0] : LOCATION = Pin_56; + usbctl[1] : LOCATION = Pin_54; + usbctl[2] : LOCATION = Pin_53; + usbctl[3] : LOCATION = Pin_58; + usbctl[4] : LOCATION = Pin_57; + usbctl[5] : LOCATION = Pin_44; + usbdata[0] : LOCATION = Pin_73; + usbdata[10] : LOCATION = Pin_41; + usbdata[11] : LOCATION = Pin_39; + usbdata[12] : LOCATION = Pin_38; + usbdata[12] : IO_STANDARD = LVTTL; + usbdata[13] : LOCATION = Pin_37; + usbdata[14] : LOCATION = Pin_24; + usbdata[15] : LOCATION = Pin_23; + usbdata[1] : LOCATION = Pin_68; + usbdata[2] : LOCATION = Pin_67; + usbdata[3] : LOCATION = Pin_66; + usbdata[4] : LOCATION = Pin_65; + usbdata[5] : LOCATION = Pin_61; + usbdata[6] : LOCATION = Pin_60; + usbdata[7] : LOCATION = Pin_59; + usbdata[8] : LOCATION = Pin_43; + usbdata[9] : LOCATION = Pin_42; + usbrdy[0] : LOCATION = Pin_45; + usbrdy[1] : LOCATION = Pin_46; + usbrdy[2] : LOCATION = Pin_47; + usbrdy[3] : LOCATION = Pin_48; + usbrdy[4] : LOCATION = Pin_49; + usbrdy[5] : LOCATION = Pin_50; + clear_status : LOCATION = Pin_99; +} diff --git a/gr-gpio/src/fpga/top/usrp_gpio.esf b/gr-gpio/src/fpga/top/usrp_gpio.esf new file mode 100644 index 00000000..5ca38664 --- /dev/null +++ b/gr-gpio/src/fpga/top/usrp_gpio.esf @@ -0,0 +1,14 @@ +SIMULATOR_SETTINGS +{ + ESTIMATE_POWER_CONSUMPTION = OFF; + GLITCH_INTERVAL = 1NS; + GLITCH_DETECTION = OFF; + SIMULATION_COVERAGE = ON; + CHECK_OUTPUTS = OFF; + SETUP_HOLD_DETECTION = OFF; + POWER_ESTIMATION_START_TIME = "0 NS"; + ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS = ON; + SIMULATION_MODE = TIMING; + START_TIME = 0NS; + USE_COMPILER_SETTINGS = usrp_gpio; +} diff --git a/gr-gpio/src/fpga/top/usrp_gpio.psf b/gr-gpio/src/fpga/top/usrp_gpio.psf new file mode 100644 index 00000000..ff8e6ab0 --- /dev/null +++ b/gr-gpio/src/fpga/top/usrp_gpio.psf @@ -0,0 +1,312 @@ +DEFAULT_DESIGN_ASSISTANT_SETTINGS +{ + HCPY_ALOAD_SIGNALS = OFF; + HCPY_VREF_PINS = OFF; + HCPY_CAT = OFF; + HCPY_ILLEGAL_HC_DEV_PKG = OFF; + ACLK_RULE_IMSZER_ADOMAIN = OFF; + ACLK_RULE_SZER_BTW_ACLK_DOMAIN = OFF; + ACLK_RULE_NO_SZER_ACLK_DOMAIN = OFF; + ACLK_CAT = OFF; + SIGNALRACE_RULE_ASYNCHPIN_SYNCH_CLKPIN = OFF; + SIGNALRACE_CAT = OFF; + NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED = OFF; + NONSYNCHSTRUCT_RULE_SRLATCH = OFF; + NONSYNCHSTRUCT_RULE_DLATCH = OFF; + NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR = OFF; + NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN = OFF; + NONSYNCHSTRUCT_RULE_RIPPLE_CLK = OFF; + NONSYNCHSTRUCT_RULE_DELAY_CHAIN = OFF; + NONSYNCHSTRUCT_RULE_REG_LOOP = OFF; + NONSYNCHSTRUCT_RULE_COMBLOOP = OFF; + NONSYNCHSTRUCT_CAT = OFF; + NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE = OFF; + TIMING_RULE_COIN_CLKEDGE = OFF; + TIMING_RULE_SHIFT_REG = OFF; + TIMING_RULE_HIGH_FANOUTS = OFF; + TIMING_CAT = OFF; + RESET_RULE_ALL = OFF; + RESET_RULE_IMSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_UNSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_REG_ASNYCH = OFF; + RESET_RULE_COMB_ASYNCH_RESET = OFF; + RESET_RULE_IMSYNCH_EXRESET = OFF; + RESET_RULE_UNSYNCH_EXRESET = OFF; + RESET_RULE_INPINS_RESETNET = OFF; + RESET_CAT = OFF; + CLK_RULE_ALL = OFF; + CLK_RULE_MIX_EDGES = OFF; + CLK_RULE_CLKNET_CLKSPINES = OFF; + CLK_RULE_INPINS_CLKNET = OFF; + CLK_RULE_GATING_SCHEME = OFF; + CLK_RULE_INV_CLOCK = OFF; + CLK_RULE_COMB_CLOCK = OFF; + CLK_CAT = OFF; + HCPY_EXCEED_USER_IO_USAGE = OFF; + HCPY_EXCEED_RAM_USAGE = OFF; + NONSYNCHSTRUCT_RULE_ASYN_RAM = OFF; + SIGNALRACE_RULE_TRISTATE = OFF; + ASSG_RULE_MISSING_TIMING = OFF; + ASSG_RULE_MISSING_FMAX = OFF; + ASSG_CAT = OFF; +} +SYNTHESIS_FITTING_SETTINGS +{ + AUTO_SHIFT_REGISTER_RECOGNITION = ON; + AUTO_DSP_RECOGNITION = ON; + AUTO_RAM_RECOGNITION = ON; + REMOVE_DUPLICATE_LOGIC = ON; + AUTO_TURBO_BIT = ON; + AUTO_MERGE_PLLS = ON; + AUTO_OPEN_DRAIN_PINS = ON; + AUTO_PARALLEL_EXPANDERS = ON; + AUTO_FAST_OUTPUT_ENABLE_REGISTERS = OFF; + AUTO_FAST_OUTPUT_REGISTERS = OFF; + AUTO_FAST_INPUT_REGISTERS = OFF; + AUTO_CASCADE_CHAINS = ON; + AUTO_CARRY_CHAINS = ON; + AUTO_DELAY_CHAINS = ON; + MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH = 4; + PARALLEL_EXPANDER_CHAIN_LENGTH = 16; + CASCADE_CHAIN_LENGTH = 2; + STRATIX_CARRY_CHAIN_LENGTH = 70; + MERCURY_CARRY_CHAIN_LENGTH = 48; + FLEX10K_CARRY_CHAIN_LENGTH = 32; + FLEX6K_CARRY_CHAIN_LENGTH = 32; + CARRY_CHAIN_LENGTH = 48; + CARRY_OUT_PINS_LCELL_INSERT = ON; + NORMAL_LCELL_INSERT = ON; + AUTO_LCELL_INSERTION = ON; + ALLOW_XOR_GATE_USAGE = ON; + AUTO_PACKED_REGISTERS_STRATIX = NORMAL; + AUTO_PACKED_REGISTERS = OFF; + AUTO_PACKED_REG_CYCLONE = NORMAL; + FLEX10K_OPTIMIZATION_TECHNIQUE = AREA; + FLEX6K_OPTIMIZATION_TECHNIQUE = AREA; + MERCURY_OPTIMIZATION_TECHNIQUE = AREA; + APEX20K_OPTIMIZATION_TECHNIQUE = SPEED; + MAX7000_OPTIMIZATION_TECHNIQUE = SPEED; + STRATIX_OPTIMIZATION_TECHNIQUE = SPEED; + CYCLONE_OPTIMIZATION_TECHNIQUE = AREA; + FLEX10K_TECHNOLOGY_MAPPER = LUT; + FLEX6K_TECHNOLOGY_MAPPER = LUT; + MERCURY_TECHNOLOGY_MAPPER = LUT; + APEX20K_TECHNOLOGY_MAPPER = LUT; + MAX7000_TECHNOLOGY_MAPPER = "PRODUCT TERM"; + STRATIX_TECHNOLOGY_MAPPER = LUT; + AUTO_IMPLEMENT_IN_ROM = OFF; + AUTO_GLOBAL_MEMORY_CONTROLS = OFF; + AUTO_GLOBAL_REGISTER_CONTROLS = ON; + AUTO_GLOBAL_OE = ON; + AUTO_GLOBAL_CLOCK = ON; + USE_LPM_FOR_AHDL_OPERATORS = ON; + LIMIT_AHDL_INTEGERS_TO_32_BITS = OFF; + ENABLE_BUS_HOLD_CIRCUITRY = OFF; + WEAK_PULL_UP_RESISTOR = OFF; + TURBO_BIT = ON; + MAX7000_IGNORE_SOFT_BUFFERS = OFF; + IGNORE_SOFT_BUFFERS = ON; + MAX7000_IGNORE_LCELL_BUFFERS = AUTO; + IGNORE_LCELL_BUFFERS = OFF; + IGNORE_ROW_GLOBAL_BUFFERS = OFF; + IGNORE_GLOBAL_BUFFERS = OFF; + IGNORE_CASCADE_BUFFERS = OFF; + IGNORE_CARRY_BUFFERS = OFF; + REMOVE_DUPLICATE_REGISTERS = ON; + REMOVE_REDUNDANT_LOGIC_CELLS = OFF; + ALLOW_POWER_UP_DONT_CARE = ON; + PCI_IO = OFF; + NOT_GATE_PUSH_BACK = ON; + SLOW_SLEW_RATE = OFF; + DSP_BLOCK_BALANCING = AUTO; + STATE_MACHINE_PROCESSING = AUTO; +} +DEFAULT_HARDCOPY_SETTINGS +{ + HARDCOPY_EXTERNAL_CLOCK_JITTER = "0.0 NS"; +} +DEFAULT_TIMING_REQUIREMENTS +{ + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + RUN_ALL_TIMING_ANALYSES = ON; + IGNORE_CLOCK_SETTINGS = OFF; + DEFAULT_HOLD_MULTICYCLE = "SAME AS MULTICYCLE"; + CUT_OFF_IO_PIN_FEEDBACK = ON; + CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; + CUT_OFF_READ_DURING_WRITE_PATHS = ON; + CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS = ON; + DO_MIN_ANALYSIS = ON; + DO_MIN_TIMING = OFF; + NUMBER_OF_PATHS_TO_REPORT = 200; + NUMBER_OF_DESTINATION_TO_REPORT = 10; + NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT = 10; + MAX_SCC_SIZE = 50; +} +HDL_SETTINGS +{ + VERILOG_INPUT_VERSION = VERILOG_2001; + ENABLE_IP_DEBUG = OFF; + VHDL_INPUT_VERSION = VHDL93; + VHDL_SHOW_LMF_MAPPING_MESSAGES = OFF; +} +PROJECT_INFO(usrp_gpio) +{ + ORIGINAL_QUARTUS_VERSION = 3.0; + PROJECT_CREATION_TIME_DATE = "00:14:04 JULY 13, 2003"; + LAST_QUARTUS_VERSION = 3.0; + SHOW_REGISTRATION_MESSAGE = ON; + USER_LIBRARIES = "e:\usrp\fpga\megacells"; +} +THIRD_PARTY_EDA_TOOLS(usrp_gpio) +{ + EDA_DESIGN_ENTRY_SYNTHESIS_TOOL = ""; + EDA_SIMULATION_TOOL = ""; + EDA_TIMING_ANALYSIS_TOOL = ""; + EDA_BOARD_DESIGN_TOOL = ""; + EDA_FORMAL_VERIFICATION_TOOL = ""; + EDA_RESYNTHESIS_TOOL = ""; +} +EDA_TOOL_SETTINGS(eda_design_synthesis) +{ + EDA_INPUT_GND_NAME = GND; + EDA_INPUT_VCC_NAME = VCC; + EDA_SHOW_LMF_MAPPING_MESSAGES = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_INPUT_DATA_FORMAT = EDIF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_simulation) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_timing_analysis) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + EDA_LAUNCH_CMD_LINE_TOOL = OFF; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_board_design) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_formal_verification) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_palace) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + RESYNTHESIS_RETIMING = FULL; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; +} +CLOCK(clk_120mhz) +{ + FMAX_REQUIREMENT = "120.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(usbclk) +{ + FMAX_REQUIREMENT = "48.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(SCLK) +{ + FMAX_REQUIREMENT = "1.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk0) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk1) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} diff --git a/gr-gpio/src/fpga/top/usrp_gpio.qpf b/gr-gpio/src/fpga/top/usrp_gpio.qpf new file mode 100644 index 00000000..7eb8da9e --- /dev/null +++ b/gr-gpio/src/fpga/top/usrp_gpio.qpf @@ -0,0 +1,29 @@ +# Copyright (C) 1991-2004 Altera Corporation +# Any megafunction design, and related netlist (encrypted or decrypted), +# support information, device programming or simulation file, and any other +# associated documentation or information provided by Altera or a partner +# under Altera's Megafunction Partnership Program may be used only +# to program PLD devices (but not masked PLD devices) from Altera. Any +# other use of such megafunction design, netlist, support information, +# device programming or simulation file, or any other related documentation +# or information is prohibited for any other purpose, including, but not +# limited to modification, reverse engineering, de-compiling, or use with +# any other silicon devices, unless such use is explicitly licensed under +# a separate agreement with Altera or a megafunction partner. Title to the +# intellectual property, including patents, copyrights, trademarks, trade +# secrets, or maskworks, embodied in any such megafunction design, netlist, +# support information, device programming or simulation file, or any other +# related documentation or information provided by Altera or a megafunction +# partner, remains with Altera, the megafunction partner, or their respective +# licensors. No other licenses, including any licenses needed under any third +# party's intellectual property, are provided herein. + + + +QUARTUS_VERSION = "4.0" +DATE = "17:10:11 December 20, 2004" + + +# Active Revisions + +PROJECT_REVISION = "usrp_gpio" diff --git a/gr-gpio/src/fpga/top/usrp_gpio.qsf b/gr-gpio/src/fpga/top/usrp_gpio.qsf new file mode 100644 index 00000000..cfdcd552 --- /dev/null +++ b/gr-gpio/src/fpga/top/usrp_gpio.qsf @@ -0,0 +1,412 @@ +# Copyright (C) 1991-2005 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. + + +# The default values for assignments are stored in the file +# usrp_gpio_assignment_defaults.qdf +# If this file doesn't exist, and for assignments not listed, see file +# assignment_defaults.qdf + +# Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 3.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "00:14:04 JULY 13, 2003" +set_global_assignment -name LAST_QUARTUS_VERSION "7.1 SP1" + +# Pin & Location Assignments +# ========================== +set_global_assignment -name RESERVE_PIN "AS INPUT TRI-STATED" +set_location_assignment PIN_29 -to SCLK +set_location_assignment PIN_117 -to SDI +set_location_assignment PIN_28 -to usbclk +set_location_assignment PIN_107 -to usbctl[0] +set_location_assignment PIN_106 -to usbctl[1] +set_location_assignment PIN_105 -to usbctl[2] +set_location_assignment PIN_100 -to usbdata[0] +set_location_assignment PIN_84 -to usbdata[10] +set_location_assignment PIN_83 -to usbdata[11] +set_location_assignment PIN_82 -to usbdata[12] +set_location_assignment PIN_79 -to usbdata[13] +set_location_assignment PIN_78 -to usbdata[14] +set_location_assignment PIN_77 -to usbdata[15] +set_location_assignment PIN_99 -to usbdata[1] +set_location_assignment PIN_98 -to usbdata[2] +set_location_assignment PIN_95 -to usbdata[3] +set_location_assignment PIN_94 -to usbdata[4] +set_location_assignment PIN_93 -to usbdata[5] +set_location_assignment PIN_88 -to usbdata[6] +set_location_assignment PIN_87 -to usbdata[7] +set_location_assignment PIN_86 -to usbdata[8] +set_location_assignment PIN_85 -to usbdata[9] +set_location_assignment PIN_104 -to usbrdy[0] +set_location_assignment PIN_101 -to usbrdy[1] +set_location_assignment PIN_76 -to FX2_1 +set_location_assignment PIN_75 -to FX2_2 +set_location_assignment PIN_74 -to FX2_3 +set_location_assignment PIN_116 -to io_rx_a[0] +set_location_assignment PIN_115 -to io_rx_a[1] +set_location_assignment PIN_114 -to io_rx_a[2] +set_location_assignment PIN_113 -to io_rx_a[3] +set_location_assignment PIN_108 -to io_rx_a[4] +set_location_assignment PIN_195 -to io_rx_a[5] +set_location_assignment PIN_196 -to io_rx_a[6] +set_location_assignment PIN_197 -to io_rx_a[7] +set_location_assignment PIN_200 -to io_rx_a[8] +set_location_assignment PIN_201 -to io_rx_a[9] +set_location_assignment PIN_202 -to io_rx_a[10] +set_location_assignment PIN_203 -to io_rx_a[11] +set_location_assignment PIN_206 -to io_rx_a[12] +set_location_assignment PIN_207 -to io_rx_a[13] +set_location_assignment PIN_208 -to io_rx_a[14] +set_location_assignment PIN_214 -to io_rx_b[0] +set_location_assignment PIN_215 -to io_rx_b[1] +set_location_assignment PIN_216 -to io_rx_b[2] +set_location_assignment PIN_217 -to io_rx_b[3] +set_location_assignment PIN_218 -to io_rx_b[4] +set_location_assignment PIN_219 -to io_rx_b[5] +set_location_assignment PIN_222 -to io_rx_b[6] +set_location_assignment PIN_223 -to io_rx_b[7] +set_location_assignment PIN_224 -to io_rx_b[8] +set_location_assignment PIN_225 -to io_rx_b[9] +set_location_assignment PIN_226 -to io_rx_b[10] +set_location_assignment PIN_227 -to io_rx_b[11] +set_location_assignment PIN_228 -to io_rx_b[12] +set_location_assignment PIN_233 -to io_rx_b[13] +set_location_assignment PIN_234 -to io_rx_b[14] +set_location_assignment PIN_175 -to io_tx_a[0] +set_location_assignment PIN_176 -to io_tx_a[1] +set_location_assignment PIN_177 -to io_tx_a[2] +set_location_assignment PIN_178 -to io_tx_a[3] +set_location_assignment PIN_179 -to io_tx_a[4] +set_location_assignment PIN_180 -to io_tx_a[5] +set_location_assignment PIN_181 -to io_tx_a[6] +set_location_assignment PIN_182 -to io_tx_a[7] +set_location_assignment PIN_183 -to io_tx_a[8] +set_location_assignment PIN_184 -to io_tx_a[9] +set_location_assignment PIN_185 -to io_tx_a[10] +set_location_assignment PIN_186 -to io_tx_a[11] +set_location_assignment PIN_187 -to io_tx_a[12] +set_location_assignment PIN_188 -to io_tx_a[13] +set_location_assignment PIN_193 -to io_tx_a[14] +set_location_assignment PIN_73 -to io_tx_b[0] +set_location_assignment PIN_68 -to io_tx_b[1] +set_location_assignment PIN_67 -to io_tx_b[2] +set_location_assignment PIN_66 -to io_tx_b[3] +set_location_assignment PIN_65 -to io_tx_b[4] +set_location_assignment PIN_64 -to io_tx_b[5] +set_location_assignment PIN_63 -to io_tx_b[6] +set_location_assignment PIN_62 -to io_tx_b[7] +set_location_assignment PIN_61 -to io_tx_b[8] +set_location_assignment PIN_60 -to io_tx_b[9] +set_location_assignment PIN_59 -to io_tx_b[10] +set_location_assignment PIN_58 -to io_tx_b[11] +set_location_assignment PIN_57 -to io_tx_b[12] +set_location_assignment PIN_56 -to io_tx_b[13] +set_location_assignment PIN_55 -to io_tx_b[14] +set_location_assignment PIN_152 -to master_clk +set_location_assignment PIN_144 -to rx_a_a[0] +set_location_assignment PIN_143 -to rx_a_a[1] +set_location_assignment PIN_141 -to rx_a_a[2] +set_location_assignment PIN_140 -to rx_a_a[3] +set_location_assignment PIN_139 -to rx_a_a[4] +set_location_assignment PIN_138 -to rx_a_a[5] +set_location_assignment PIN_137 -to rx_a_a[6] +set_location_assignment PIN_136 -to rx_a_a[7] +set_location_assignment PIN_135 -to rx_a_a[8] +set_location_assignment PIN_134 -to rx_a_a[9] +set_location_assignment PIN_133 -to rx_a_a[10] +set_location_assignment PIN_132 -to rx_a_a[11] +set_location_assignment PIN_23 -to rx_a_b[0] +set_location_assignment PIN_21 -to rx_a_b[1] +set_location_assignment PIN_20 -to rx_a_b[2] +set_location_assignment PIN_19 -to rx_a_b[3] +set_location_assignment PIN_18 -to rx_a_b[4] +set_location_assignment PIN_17 -to rx_a_b[5] +set_location_assignment PIN_16 -to rx_a_b[6] +set_location_assignment PIN_15 -to rx_a_b[7] +set_location_assignment PIN_14 -to rx_a_b[8] +set_location_assignment PIN_13 -to rx_a_b[9] +set_location_assignment PIN_12 -to rx_a_b[10] +set_location_assignment PIN_11 -to rx_a_b[11] +set_location_assignment PIN_131 -to rx_b_a[0] +set_location_assignment PIN_128 -to rx_b_a[1] +set_location_assignment PIN_127 -to rx_b_a[2] +set_location_assignment PIN_126 -to rx_b_a[3] +set_location_assignment PIN_125 -to rx_b_a[4] +set_location_assignment PIN_124 -to rx_b_a[5] +set_location_assignment PIN_123 -to rx_b_a[6] +set_location_assignment PIN_122 -to rx_b_a[7] +set_location_assignment PIN_121 -to rx_b_a[8] +set_location_assignment PIN_120 -to rx_b_a[9] +set_location_assignment PIN_119 -to rx_b_a[10] +set_location_assignment PIN_118 -to rx_b_a[11] +set_location_assignment PIN_8 -to rx_b_b[0] +set_location_assignment PIN_7 -to rx_b_b[1] +set_location_assignment PIN_6 -to rx_b_b[2] +set_location_assignment PIN_5 -to rx_b_b[3] +set_location_assignment PIN_4 -to rx_b_b[4] +set_location_assignment PIN_3 -to rx_b_b[5] +set_location_assignment PIN_2 -to rx_b_b[6] +set_location_assignment PIN_240 -to rx_b_b[7] +set_location_assignment PIN_239 -to rx_b_b[8] +set_location_assignment PIN_238 -to rx_b_b[9] +set_location_assignment PIN_237 -to rx_b_b[10] +set_location_assignment PIN_236 -to rx_b_b[11] +set_location_assignment PIN_156 -to SDO +set_location_assignment PIN_153 -to SEN_FPGA +set_location_assignment PIN_159 -to tx_a[0] +set_location_assignment PIN_160 -to tx_a[1] +set_location_assignment PIN_161 -to tx_a[2] +set_location_assignment PIN_162 -to tx_a[3] +set_location_assignment PIN_163 -to tx_a[4] +set_location_assignment PIN_164 -to tx_a[5] +set_location_assignment PIN_165 -to tx_a[6] +set_location_assignment PIN_166 -to tx_a[7] +set_location_assignment PIN_167 -to tx_a[8] +set_location_assignment PIN_168 -to tx_a[9] +set_location_assignment PIN_169 -to tx_a[10] +set_location_assignment PIN_170 -to tx_a[11] +set_location_assignment PIN_173 -to tx_a[12] +set_location_assignment PIN_174 -to tx_a[13] +set_location_assignment PIN_38 -to tx_b[0] +set_location_assignment PIN_39 -to tx_b[1] +set_location_assignment PIN_41 -to tx_b[2] +set_location_assignment PIN_42 -to tx_b[3] +set_location_assignment PIN_43 -to tx_b[4] +set_location_assignment PIN_44 -to tx_b[5] +set_location_assignment PIN_45 -to tx_b[6] +set_location_assignment PIN_46 -to tx_b[7] +set_location_assignment PIN_47 -to tx_b[8] +set_location_assignment PIN_48 -to tx_b[9] +set_location_assignment PIN_49 -to tx_b[10] +set_location_assignment PIN_50 -to tx_b[11] +set_location_assignment PIN_53 -to tx_b[12] +set_location_assignment PIN_54 -to tx_b[13] +set_location_assignment PIN_158 -to TXSYNC_A +set_location_assignment PIN_37 -to TXSYNC_B +set_location_assignment PIN_235 -to io_rx_b[15] +set_location_assignment PIN_24 -to io_tx_b[15] +set_location_assignment PIN_213 -to io_rx_a[15] +set_location_assignment PIN_194 -to io_tx_a[15] +set_location_assignment PIN_1 -to MYSTERY_SIGNAL + +# Timing Assignments +# ================== +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name SAVE_DISK_SPACE OFF +set_global_assignment -name DEVICE_FILTER_PACKAGE "ANY QFP" +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 240 +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name FAMILY Cyclone +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE BALANCED +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name TOP_LEVEL_ENTITY usrp_gpio +set_global_assignment -name VHDL_SHOW_LMF_MAPPING_MESSAGES OFF +set_global_assignment -name USER_LIBRARIES "e:\\usrp\\fpga\\megacells" +set_global_assignment -name AUTO_ENABLE_SMART_COMPILE ON + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP1C12Q240C8 +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" +set_global_assignment -name OPTIMIZE_HOLD_TIMING OFF +set_global_assignment -name OPTIMIZE_TIMING "NORMAL COMPILATION" +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING OFF +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT NORMAL +set_global_assignment -name INC_PLC_MODE OFF +set_global_assignment -name ROUTING_BACK_ANNOTATION_MODE OFF +set_instance_assignment -name IO_STANDARD LVTTL -to usbdata[12] +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD LVTTL +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 + +# Timing Analysis Assignments +# =========================== +set_global_assignment -name MAX_SCC_SIZE 50 + +# EDA Netlist Writer Assignments +# ============================== +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" + +# Assembler Assignments +# ===================== +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "AS INPUT TRI-STATED" +set_global_assignment -name AUTO_RESTART_CONFIGURATION OFF + +# Simulator Assignments +# ===================== +set_global_assignment -name START_TIME "0 ns" +set_global_assignment -name GLITCH_INTERVAL "1 ns" + +# Design Assistant Assignments +# ============================ +set_global_assignment -name DRC_REPORT_TOP_FANOUT OFF +set_global_assignment -name DRC_REPORT_FANOUT_EXCEEDING OFF +set_global_assignment -name ASSG_CAT OFF +set_global_assignment -name ASSG_RULE_MISSING_FMAX OFF +set_global_assignment -name ASSG_RULE_MISSING_TIMING OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_ASYN_RAM OFF +set_global_assignment -name CLK_CAT OFF +set_global_assignment -name CLK_RULE_COMB_CLOCK OFF +set_global_assignment -name CLK_RULE_INV_CLOCK OFF +set_global_assignment -name CLK_RULE_GATING_SCHEME OFF +set_global_assignment -name CLK_RULE_INPINS_CLKNET OFF +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES OFF +set_global_assignment -name CLK_RULE_MIX_EDGES OFF +set_global_assignment -name RESET_CAT OFF +set_global_assignment -name RESET_RULE_INPINS_RESETNET OFF +set_global_assignment -name RESET_RULE_UNSYNCH_EXRESET OFF +set_global_assignment -name RESET_RULE_IMSYNCH_EXRESET OFF +set_global_assignment -name RESET_RULE_COMB_ASYNCH_RESET OFF +set_global_assignment -name RESET_RULE_UNSYNCH_ASYNCH_DOMAIN OFF +set_global_assignment -name RESET_RULE_IMSYNCH_ASYNCH_DOMAIN OFF +set_global_assignment -name TIMING_CAT OFF +set_global_assignment -name TIMING_RULE_SHIFT_REG OFF +set_global_assignment -name TIMING_RULE_COIN_CLKEDGE OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE OFF +set_global_assignment -name NONSYNCHSTRUCT_CAT OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_COMBLOOP OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_REG_LOOP OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_DELAY_CHAIN OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_RIPPLE_CLK OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_SRLATCH OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED OFF +set_global_assignment -name SIGNALRACE_CAT OFF +set_global_assignment -name ACLK_CAT OFF +set_global_assignment -name ACLK_RULE_NO_SZER_ACLK_DOMAIN OFF +set_global_assignment -name ACLK_RULE_SZER_BTW_ACLK_DOMAIN OFF +set_global_assignment -name ACLK_RULE_IMSZER_ADOMAIN OFF +set_global_assignment -name HCPY_CAT OFF +set_global_assignment -name HCPY_VREF_PINS OFF + +# SignalTap II Assignments +# ======================== +set_global_assignment -name HUB_ENTITY_NAME SLD_HUB +set_global_assignment -name HUB_INSTANCE_NAME SLD_HUB_INST +set_global_assignment -name ENABLE_SIGNALTAP OFF + +# LogicLock Region Assignments +# ============================ +set_global_assignment -name LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT OFF + +# ----------------- +# start CLOCK(SCLK) + + # Timing Assignments + # ================== +set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK +set_global_assignment -name FMAX_REQUIREMENT "1 MHz" -section_id SCLK +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id SCLK + +# end CLOCK(SCLK) +# --------------- + +# ----------------------- +# start CLOCK(master_clk) + + # Timing Assignments + # ================== +set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk +set_global_assignment -name FMAX_REQUIREMENT "64 MHz" -section_id master_clk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id master_clk + +# end CLOCK(master_clk) +# --------------------- + +# ------------------- +# start CLOCK(usbclk) + + # Timing Assignments + # ================== +set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk +set_global_assignment -name FMAX_REQUIREMENT "48 MHz" -section_id usbclk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id usbclk + +# end CLOCK(usbclk) +# ----------------- + +# ---------------------- +# start ENTITY(usrp_gpio) + + # Timing Assignments + # ================== +set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK +set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk +set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk + +# end ENTITY(usrp_gpio) +# -------------------- + +set_instance_assignment -name PARTITION_HIERARCHY no_file_for_top_partition -to | -section_id Top +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name VERILOG_FILE usrp_gpio.v +set_global_assignment -name VERILOG_FILE ../lib/gpio_input.v +set_global_assignment -name VERILOG_FILE ../lib/io_pins.v +set_global_assignment -name VERILOG_FILE ../lib/rx_chain_dig.v +set_global_assignment -name VERILOG_FILE ../lib/tx_chain_dig.v +set_global_assignment -name VERILOG_FILE ../lib/integrator.v +set_global_assignment -name VERILOG_FILE ../lib/integ_shifter.v +set_global_assignment -name VERILOG_FILE ../lib/rx_chain.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/atr_delay.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cic_dec_shifter.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/rssi.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/ram16.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/megacells/fifo_4k.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/megacells/bustri.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/megacells/fifo_4k_18.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/hb/acc.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/hb/mult.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/hb/ram16_2sum.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/hb/coeff_rom.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/hb/halfband_decim.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/hb/mac.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/tx_chain.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/rx_dcoffset.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/adc_interface.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/setting_reg.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/bidir_reg.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cic_int_shifter.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/gen_sync.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/master_control.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/rx_buffer.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/tx_buffer.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/phase_acc.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cic_interp.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cic_decim.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cordic_stage.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cordic.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/clk_divider.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/serial_io.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/strobe_gen.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/sign_extend.v \ No newline at end of file diff --git a/gr-gpio/src/fpga/top/usrp_gpio.v b/gr-gpio/src/fpga/top/usrp_gpio.v new file mode 100644 index 00000000..50a0dbe6 --- /dev/null +++ b/gr-gpio/src/fpga/top/usrp_gpio.v @@ -0,0 +1,467 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003,2004 Matt Ettus +// Copyright (C) 2008 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// Top level module for a full setup with DUCs and DDCs + +// Define DEBUG_OWNS_IO_PINS if we're using the daughterboard i/o pins +// for debugging info. NB, This can kill the m'board and/or d'board if you +// have anything except basic d'boards installed. + +// Uncomment the following to include optional circuitry + +`include "../top/config.vh" +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module usrp_gpio +(output MYSTERY_SIGNAL, + input master_clk, + input SCLK, + input SDI, + inout SDO, + input SEN_FPGA, + + input FX2_1, + output FX2_2, + output FX2_3, + + input wire [11:0] rx_a_a, + input wire [11:0] rx_b_a, + input wire [11:0] rx_a_b, + input wire [11:0] rx_b_b, + + output wire [13:0] tx_a, + output wire [13:0] tx_b, + + output wire TXSYNC_A, + output wire TXSYNC_B, + + // USB interface + input usbclk, + input wire [2:0] usbctl, + output wire [1:0] usbrdy, + inout [15:0] usbdata, // NB Careful, inout + + // These are the general purpose i/o's that go to the daughterboard slots + inout wire [15:0] io_tx_a, + inout wire [15:0] io_tx_b, + inout wire [15:0] io_rx_a, + inout wire [15:0] io_rx_b + ); + wire [15:0] debugdata,debugctrl; + assign MYSTERY_SIGNAL = 1'b0; + + wire clk64,clk128; + + wire WR = usbctl[0]; + wire RD = usbctl[1]; + wire OE = usbctl[2]; + + wire have_space, have_pkt_rdy; + assign usbrdy[0] = have_space; + assign usbrdy[1] = have_pkt_rdy; + + wire tx_underrun, rx_overrun; + wire clear_status = FX2_1; + assign FX2_2 = rx_overrun; + assign FX2_3 = tx_underrun; + + wire [15:0] usbdata_out; + + wire [3:0] dac0mux,dac1mux,dac2mux,dac3mux; + + wire tx_realsignals; + wire [3:0] rx_numchan; + wire [2:0] tx_numchan; + + wire [7:0] interp_rate, decim_rate; + wire [31:0] tx_debugbus, rx_debugbus; + + wire enable_tx, enable_rx; + wire tx_dsp_reset, rx_dsp_reset, tx_bus_reset, rx_bus_reset; + wire [7:0] settings; + + // Tri-state bus macro + bustri bustri( .data(usbdata_out),.enabledt(OE),.tridata(usbdata) ); + + assign clk64 = master_clk; + + wire [15:0] ch0tx,ch1tx,ch2tx,ch3tx; //,ch4tx,ch5tx,ch6tx,ch7tx; + wire [15:0] ch0rx,ch1rx,ch2rx,ch3rx,ch4rx,ch5rx,ch6rx,ch7rx; + wire [15:0] ch0rx_ext,ch1rx_ext; + + // TX + wire [15:0] i_out_0,i_out_1,q_out_0,q_out_1;//analog signals + wire [15:0] bb_tx_i0,bb_tx_q0,bb_tx_i1,bb_tx_q1; // bb_tx_i2,bb_tx_q2,bb_tx_i3,bb_tx_q3; + + wire strobe_interp, tx_sample_strobe; + wire tx_empty; + + wire serial_strobe; + wire [6:0] serial_addr; + wire [31:0] serial_data; + + reg [15:0] debug_counter; + reg [15:0] loopback_i_0,loopback_q_0; + + //TX_DIG streaming digital IO signals + wire i_out_dig_0,i_out_dig_1,q_out_dig_0,q_out_dig_1; + wire rx_dig0_i, rx_dig0_q,rx_dig1_i,rx_dig1_q; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Transmit Side +`ifdef TX_ON + + tx_buffer tx_buffer + ( .usbclk(usbclk), .bus_reset(tx_bus_reset), + .usbdata(usbdata),.WR(WR), .have_space(have_space), + .tx_underrun(tx_underrun), .clear_status(clear_status), + .txclk(clk64), .reset(tx_dsp_reset), + .channels({tx_numchan,1'b0}), + .tx_i_0(ch0tx),.tx_q_0(ch1tx), + .tx_i_1(ch2tx),.tx_q_1(ch3tx), + .txstrobe(strobe_interp), + .tx_empty(tx_empty), + .debugbus(tx_debugbus) ); + + `ifdef TX_EN_0 + tx_chain tx_chain_0 + ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + .interp_rate(interp_rate),.sample_strobe(tx_sample_strobe), + .interpolator_strobe(strobe_interp),.freq(), + .i_in(bb_tx_i0),.q_in(bb_tx_q0),.i_out(i_out_0),.q_out(q_out_0)); + `else + assign i_out_0=16'd0; + assign q_out_0=16'd0; + `endif + + `ifdef TX_EN_1 + tx_chain tx_chain_1 + ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + .interp_rate(interp_rate),.sample_strobe(tx_sample_strobe), + .interpolator_strobe(strobe_interp),.freq(), + .i_in(bb_tx_i1),.q_in(bb_tx_q1),.i_out(i_out_1),.q_out(q_out_1) ); + `else + assign i_out_1=16'd0; + assign q_out_1=16'd0; + `endif + + + + setting_reg #(`FR_TX_MUX) + sr_txmux(.clock(clk64),.reset(tx_dsp_reset),.strobe(serial_strobe),.addr(serial_addr),.in(serial_data), + .out({dac3mux,dac2mux,dac1mux,dac0mux,tx_realsignals,tx_numchan})); + + wire [15:0] tx_a_a = dac0mux[3] ? (dac0mux[1] ? (dac0mux[0] ? q_out_1 : i_out_1) : (dac0mux[0] ? q_out_0 : i_out_0)) : 16'b0; + wire [15:0] tx_b_a = dac1mux[3] ? (dac1mux[1] ? (dac1mux[0] ? q_out_1 : i_out_1) : (dac1mux[0] ? q_out_0 : i_out_0)) : 16'b0; + wire [15:0] tx_a_b = dac2mux[3] ? (dac2mux[1] ? (dac2mux[0] ? q_out_1 : i_out_1) : (dac2mux[0] ? q_out_0 : i_out_0)) : 16'b0; + wire [15:0] tx_b_b = dac3mux[3] ? (dac3mux[1] ? (dac3mux[0] ? q_out_1 : i_out_1) : (dac3mux[0] ? q_out_0 : i_out_0)) : 16'b0; + + wire tx_dig_a_a = (dac0mux[1] ? (dac0mux[0] ? q_out_dig_1 : i_out_dig_1) : (dac0mux[0] ? q_out_dig_0 : i_out_dig_0)); + wire tx_dig_b_a = (dac1mux[1] ? (dac1mux[0] ? q_out_dig_1 : i_out_dig_1) : (dac1mux[0] ? q_out_dig_0 : i_out_dig_0)); + wire tx_dig_a_b = (dac2mux[1] ? (dac2mux[0] ? q_out_dig_1 : i_out_dig_1) : (dac2mux[0] ? q_out_dig_0 : i_out_dig_0)); + wire tx_dig_b_b = (dac3mux[1] ? (dac3mux[0] ? q_out_dig_1 : i_out_dig_1) : (dac3mux[0] ? q_out_dig_0 : i_out_dig_0)); + + //wire [1:0] tx_dig_a = {tx_dig_a_a,tx_dig_b_a}; + //wire [1:0] tx_dig_b = {tx_dig_a_b,tx_dig_b_b}; + + //wire tx_dig_a_chan = (dac0mux[1] | dac1mux[1] ); + //wire tx_dig_b_chan = (dac2mux[1] | dac3mux[1] ); + + //TODO make enabling tx_dig configurable through register + + wire enable_tx_dig_a = 1'b1 & enable_tx; + wire enable_tx_dig_b = 1'b1 & enable_tx; + + wire tx_dig_a_a_en = dac0mux[3] & enable_tx_dig_a; + wire tx_dig_b_a_en = dac1mux[3] & enable_tx_dig_a; + wire tx_dig_a_b_en = dac2mux[3] & enable_tx_dig_b; + wire tx_dig_b_b_en = dac3mux[3] & enable_tx_dig_b; + + //TODO make gpio bits used for tx_dig configurable through register + assign io_tx_a_out = {tx_dig_a_a_en?tx_dig_a_a:reg_0[15],tx_dig_b_a_en?tx_dig_b_a:reg_0[14],reg_0[13:0]}; + assign io_tx_b_out = {tx_dig_a_b_en?tx_dig_a_b:reg_2[15],tx_dig_b_b_en?tx_dig_b_b:reg_2[14],reg_2[13:0]}; + assign io_tx_a_force_output = {tx_dig_a_a_en,tx_dig_b_a_en,14'b0}; + assign io_tx_b_force_output = {tx_dig_a_b_en,tx_dig_b_b_en,14'b0}; + + + `ifdef TX_EN_DIG_0 + //TODO make enabling tx_dig configurable through register + //tx_chain_dig tx_chain_dig_0 + // ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + // .i_in(ch0tx), q_in(ch1tx), + // .i_out_ana(bb_tx_i0), + // .q_out_ana(bb_tx_q0), + // .i_out_dig(i_out_dig_0), + // .q_out_dig(q_out_dig_0) + // ); + tx_chain_dig tx_chain_dig_0 + ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + .i_in(ch0tx),.q_in(ch1tx), + .i_out_ana(bb_tx_i0),.q_out_ana(bb_tx_q0), + .i_out_dig(i_out_dig_0),.q_out_dig(q_out_dig_0)); + `else + assign bb_tx_i0 = ch0tx; + assign bb_tx_q0 = ch1tx; + assign i_out_dig_0=1'b0; + assign q_out_dig_0=1'b0; + `endif + + `ifdef TX_EN_DIG_1 + //TODO make enabling tx_dig configurable through register + tx_chain_dig tx_chain_dig_1 + ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + .i_in(ch2tx),.q_in(ch3tx), + .i_out_ana(bb_tx_i1),.q_out_ana(bb_tx_q1), + .i_out_dig(i_out_dig_1),.q_out_dig(q_out_dig_1)); +// tx_chain_dig tx_chain_dig_1 +// ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), +// .i_in(ch2tx), q_in(ch3tx), +// .i_out_ana(bb_tx_i1), +// .q_out_ana(bb_tx_q1), +// .i_out_dig(i_out_dig_1), +// .q_out_dig(q_out_dig_1) +// ); + `else + assign bb_tx_i1 = ch2tx; + assign bb_tx_q1 = ch3tx; + assign i_out_dig_1=1'b0; + assign q_out_dig_1=1'b0; + `endif + + wire txsync = tx_sample_strobe; + assign TXSYNC_A = txsync; + assign TXSYNC_B = txsync; + + assign tx_a = txsync ? tx_b_a[15:2] : tx_a_a[15:2]; + assign tx_b = txsync ? tx_b_b[15:2] : tx_a_b[15:2]; +`else // `ifdef TX_ON + assign io_tx_a_out = reg_0; + assign io_tx_b_out = reg_2; + assign io_tx_a_force_output=16'b0; + assign io_tx_b_force_output=16'b0; +`endif + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Receive Side +`ifdef RX_ON + wire rx_sample_strobe,strobe_decim,hb_strobe; + wire [15:0] bb_rx_i0,bb_rx_q0,bb_rx_i1,bb_rx_q1, + bb_rx_i2,bb_rx_q2,bb_rx_i3,bb_rx_q3; + + wire loopback = settings[0]; + wire counter = settings[1]; + + always @(posedge clk64) + if(rx_dsp_reset) + debug_counter <= #1 16'd0; + else if(~enable_rx) + debug_counter <= #1 16'd0; + else if(hb_strobe) + debug_counter <=#1 debug_counter + 16'd2; + + always @(posedge clk64) + if(strobe_interp) + begin + loopback_i_0 <= #1 ch0tx; + loopback_q_0 <= #1 ch1tx; + end + + + wire [15:0] ddc0_in_i,ddc0_in_q,ddc1_in_i,ddc1_in_q,ddc2_in_i,ddc2_in_q,ddc3_in_i,ddc3_in_q; + wire [31:0] rssi_0,rssi_1,rssi_2,rssi_3; + + adc_interface adc_interface(.clock(clk64),.reset(rx_dsp_reset),.enable(1'b1), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .rx_a_a(rx_a_a),.rx_b_a(rx_b_a),.rx_a_b(rx_a_b),.rx_b_b(rx_b_b), + .rssi_0(rssi_0),.rssi_1(rssi_1),.rssi_2(rssi_2),.rssi_3(rssi_3), + .ddc0_in_i(ddc0_in_i),.ddc0_in_q(ddc0_in_q), + .ddc1_in_i(ddc1_in_i),.ddc1_in_q(ddc1_in_q), + .ddc2_in_i(ddc2_in_i),.ddc2_in_q(ddc2_in_q), + .ddc3_in_i(ddc3_in_i),.ddc3_in_q(ddc3_in_q),.rx_numchan(rx_numchan) ); + + rx_buffer rx_buffer + ( .usbclk(usbclk),.bus_reset(rx_bus_reset),.reset(rx_dsp_reset), + .reset_regs(rx_dsp_reset), + .usbdata(usbdata_out),.RD(RD),.have_pkt_rdy(have_pkt_rdy),.rx_overrun(rx_overrun), + .channels(rx_numchan), + .ch_0(ch0rx_ext),.ch_1(ch1rx_ext), + .ch_2(ch2rx),.ch_3(ch3rx), + .ch_4(ch4rx),.ch_5(ch5rx), + .ch_6(ch6rx),.ch_7(ch7rx), + .rxclk(clk64),.rxstrobe(hb_strobe), + .clear_status(clear_status), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .debugbus(rx_debugbus) ); + + `ifdef RX_EN_0 + rx_chain #(`FR_RX_FREQ_0,`FR_RX_PHASE_0) rx_chain_0 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(hb_strobe), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc0_in_i),.q_in(ddc0_in_q),.i_out(bb_rx_i0),.q_out(bb_rx_q0),.debugdata(debugdata),.debugctrl(debugctrl)); + `else + assign bb_rx_i0=16'd0; + assign bb_rx_q0=16'd0; + `endif + + `ifdef RX_EN_1 + rx_chain #(`FR_RX_FREQ_1,`FR_RX_PHASE_1) rx_chain_1 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc1_in_i),.q_in(ddc1_in_q),.i_out(bb_rx_i1),.q_out(bb_rx_q1)); + `else + assign bb_rx_i1=16'd0; + assign bb_rx_q1=16'd0; + `endif + + `ifdef RX_EN_2 + rx_chain #(`FR_RX_FREQ_2,`FR_RX_PHASE_2) rx_chain_2 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc2_in_i),.q_in(ddc2_in_q),.i_out(bb_rx_i2),.q_out(bb_rx_q2)); + `else + assign bb_rx_i2=16'd0; + assign bb_rx_q2=16'd0; + `endif + + `ifdef RX_EN_3 + rx_chain #(`FR_RX_FREQ_3,`FR_RX_PHASE_3) rx_chain_3 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc3_in_i),.q_in(ddc3_in_q),.i_out(bb_rx_i3),.q_out(bb_rx_q3)); + `else + assign bb_rx_i3=16'd0; + assign bb_rx_q3=16'd0; + `endif + + `ifdef RX_DIG_ON + wire enable_rx_dig = 1'b1 & enable_rx;//TODO make enabling rx_dig configurable through register + assign io_rx_a_force_input = {enable_rx_dig,enable_rx_dig,14'b0}; + assign io_rx_b_force_input = {enable_rx_dig,enable_rx_dig,14'b0}; + gpio_input gpio_input(.clock(clk64),.reset(rx_dsp_reset),.enable(1'b1), + .out_strobe(hb_strobe), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .io_rx_a_in(io_rx_a),.io_rx_b_in(io_rx_b), + //.io_tx_a_in(io_tx_a),.io_tx_b_in(io_tx_b), + .rx_dig0_i(rx_dig0_i),.rx_dig0_q(rx_dig0_q), + .rx_dig1_i(rx_dig1_i),.rx_dig1_q(rx_dig1_q) ); + + `ifdef RX_EN_DIG_0 + rx_chain_dig rx_chain_dig_0 + ( .clock(clk64),.reset(rx_dsp_reset),.enable(enable_rx_dig), + .i_in_ana(bb_rx_i0),.q_in_ana(bb_rx_q0), + .i_in_dig(rx_dig0_i),.q_in_dig(rx_dig0_q), + .i_out(ch0rx),.q_out(ch1rx)); + `else + assign ch0rx = bb_rx_i0; + assign ch1rx = bb_rx_q0; + `endif + + assign ch0rx_ext = counter ? debug_counter : loopback ? loopback_i_0 : ch0rx; + assign ch1rx_ext = counter ? debug_counter + 16'd1 : loopback ? loopback_q_0 : ch1rx; + + `ifdef RX_EN_DIG_1 + rx_chain_dig rx_chain_dig_1 + ( .clock(clk64),.reset(rx_dsp_reset),.enable(enable_rx_dig), + .i_in_ana(bb_rx_i1),.q_in_ana(bb_rx_q1), + .i_in_dig(rx_dig1_i),.q_in_dig(rx_dig1_q), + .i_out(ch2rx),.q_out(ch3rx)); + `else + assign ch2rx = bb_rx_i1; + assign ch3rx = bb_rx_q1; + `endif + + assign ch4rx = bb_rx_i2; + assign ch5rx = bb_rx_q2; + assign ch6rx = bb_rx_i3; + assign ch7rx = bb_rx_q3; + `else // `ifdef RX_DIG_ON + assign ch0rx = counter ? debug_counter : loopback ? loopback_i_0 : bb_rx_i0; + assign ch1rx = counter ? debug_counter + 16'd1 : loopback ? loopback_q_0 : bb_rx_q0; + assign ch2rx = bb_rx_i1; + assign ch3rx = bb_rx_q1; + assign ch4rx = bb_rx_i2; + assign ch5rx = bb_rx_q2; + assign ch6rx = bb_rx_i3; + assign ch7rx = bb_rx_q3; + `endif // `ifdef RX_DIG_ON + +`endif // `ifdef RX_ON + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Control Functions + + wire [31:0] capabilities; + assign capabilities[7] = `TX_CAP_HB; + assign capabilities[6:4] = `TX_CAP_NCHAN; + assign capabilities[3] = `RX_CAP_HB; + assign capabilities[2:0] = `RX_CAP_NCHAN; + + + serial_io serial_io + ( .master_clk(clk64),.serial_clock(SCLK),.serial_data_in(SDI), + .enable(SEN_FPGA),.reset(1'b0),.serial_data_out(SDO), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .readback_0({io_rx_a,io_tx_a}),.readback_1({io_rx_b,io_tx_b}),.readback_2(capabilities),.readback_3(32'hf0f0931a), + .readback_4(rssi_0),.readback_5(rssi_1),.readback_6(rssi_2),.readback_7(rssi_3) + ); + + wire [15:0] reg_0,reg_1,reg_2,reg_3; + wire [15:0] io_tx_a_out; + wire [15:0] io_tx_b_out; + wire [15:0] io_tx_a_force_output; + wire [15:0] io_tx_b_force_output; + wire [15:0] io_rx_a_force_input; + wire [15:0] io_rx_b_force_input; + + master_control master_control + ( .master_clk(clk64),.usbclk(usbclk), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .tx_bus_reset(tx_bus_reset),.rx_bus_reset(rx_bus_reset), + .tx_dsp_reset(tx_dsp_reset),.rx_dsp_reset(rx_dsp_reset), + .enable_tx(enable_tx),.enable_rx(enable_rx), + .interp_rate(interp_rate),.decim_rate(decim_rate), + .tx_sample_strobe(tx_sample_strobe),.strobe_interp(strobe_interp), + .rx_sample_strobe(rx_sample_strobe),.strobe_decim(strobe_decim), + .tx_empty(tx_empty), + //.debug_0(rx_a_a),.debug_1(ddc0_in_i), + .debug_0(tx_debugbus[15:0]),.debug_1(tx_debugbus[31:16]), + .debug_2(rx_debugbus[15:0]),.debug_3(rx_debugbus[31:16]), + //.tx_dig_a(tx_dig_a),tx_dig_b(tx_dig_b), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3) ); + + io_pins io_pins + (.io_0(io_tx_a),.io_1(io_rx_a),.io_2(io_tx_b),.io_3(io_rx_b), + .reg_0(io_tx_a_out),.reg_1(reg_1),.reg_2(io_tx_b_out),.reg_3(reg_3), + .io_0_force_output(io_tx_a_force_output), .io_2_force_output(io_tx_b_force_output), + .io_1_force_input(io_rx_a_force_input), .io_3_force_input(io_rx_b_force_input), + .clock(clk64),.rx_reset(rx_dsp_reset),.tx_reset(tx_dsp_reset), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe)); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Misc Settings + setting_reg #(`FR_MODE) sr_misc(.clock(clk64),.reset(rx_dsp_reset),.strobe(serial_strobe),.addr(serial_addr),.in(serial_data),.out(settings)); + +endmodule // usrp_gpio diff --git a/gr-gpio/src/python/Makefile.am b/gr-gpio/src/python/Makefile.am new file mode 100644 index 00000000..427047cd --- /dev/null +++ b/gr-gpio/src/python/Makefile.am @@ -0,0 +1,37 @@ +# +# Copyright 2007,2008,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. +# + +include $(top_srcdir)/Makefile.common + +# Installation locations +ourpythondir = $(grpythondir)/gpio +ourlibdir = $(grpyexecdir)/gpio + +# List of Python files that will get installed into site-packages +ourpython_PYTHON = \ + __init__.py \ + gpio.py + +# List of python files that will be installed onto $prefix/bin +dist_bin_SCRIPTS = \ + gpio_rx_sfile.py \ + gpio_usrp_siggen.py \ + gpio_usrp_fft.py diff --git a/gr-gpio/src/python/Makefile.in b/gr-gpio/src/python/Makefile.in new file mode 100644 index 00000000..03e777d6 --- /dev/null +++ b/gr-gpio/src/python/Makefile.in @@ -0,0 +1,954 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_bin_SCRIPTS) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-gpio/src/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourpythondir)" +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# Installation locations +ourpythondir = $(grpythondir)/gpio +ourlibdir = $(grpyexecdir)/gpio + +# List of Python files that will get installed into site-packages +ourpython_PYTHON = \ + __init__.py \ + gpio.py + + +# List of python files that will be installed onto $prefix/bin +dist_bin_SCRIPTS = \ + gpio_rx_sfile.py \ + gpio_usrp_siggen.py \ + gpio_usrp_fft.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-gpio/src/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-gpio/src/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourpythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-ourpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS uninstall-ourpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_binSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_binSCRIPTS \ + uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-gpio/src/python/__init__.py b/gr-gpio/src/python/__init__.py new file mode 100644 index 00000000..b1f69b7e --- /dev/null +++ b/gr-gpio/src/python/__init__.py @@ -0,0 +1,34 @@ +# +# Copyright 2007,2008 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. +# + +import glob +import os.path + +# This automatically imports all top-level objects from .py files +# in our directory into the package name space +for _p in __path__: + _filenames = glob.glob (os.path.join (_p, "*.py")) + for _f in _filenames: + _f = os.path.basename(_f).lower() + _f = _f[:-3] + if _f == '__init__': + continue + exec "from %s import *" % (_f,) diff --git a/gr-gpio/src/python/gpio.py b/gr-gpio/src/python/gpio.py new file mode 100644 index 00000000..2ef49558 --- /dev/null +++ b/gr-gpio/src/python/gpio.py @@ -0,0 +1,3 @@ +from gpio_swig import * + +fpga_filename = 'std_2rxint_2tx_dig.rbf' diff --git a/gr-gpio/src/python/gpio_rx_sfile.py b/gr-gpio/src/python/gpio_rx_sfile.py new file mode 100755 index 00000000..31f598ef --- /dev/null +++ b/gr-gpio/src/python/gpio_rx_sfile.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# +# Copyright 2008,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. +# + +from gnuradio import gr, eng_notation +from gnuradio import usrp +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys + +from gnuradio import gpio + +class my_top_block(gr.top_block): + + def __init__(self, options): + gr.top_block.__init__(self) + + # Create a USRP source with GPIO FPGA build, then configure + u = usrp.source_s(decim_rate=options.decim,fpga_filename=gpio.fpga_filename) + + if options.force_complex_RXA: + # This is a dirty hack to force complex mode (receive both I and Q) on basicRX or LFRX + # This forces the receive board in RXA (side A) to be used + # FIXME: This has as a side effect that the gain for Q is not set. So only use with gain 0 (--gain 0) + options.rx_subdev_spec=(0,0) + u.set_mux(0x10) + if not (0==options.gain): + print "WARNING, you should set the gain to 0 with --gain 0 when using --force-complex-RXA" + print "The gain for Q will now still be zero while the gain for I is not" + #options.gain=0 + else: + if options.rx_subdev_spec is None: + options.rx_subdev_spec = usrp.pick_rx_subdevice(u) + u.set_mux(usrp.determine_rx_mux_value(u, options.rx_subdev_spec)) + + subdev = usrp.selected_subdev(u, options.rx_subdev_spec) + print "Using RX d'board %s" % (subdev.side_and_name(),) + input_rate = u.adc_freq()/u.decim_rate() + print "USB sample rate %s" % (eng_notation.num_to_str(input_rate)) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + + #TODO setting gain on basicRX only sets the I channel, use a second subdev to set gain of Q channel + #see gnuradio-examples/multi-antenna for possible solutions + subdev.set_gain(options.gain) + + #TODO check if freq has same problem as gain when trying to use complex mode on basicRX + r = u.tune(0, subdev, options.freq) + if not r: + sys.stderr.write('Failed to set frequency\n') + raise SystemExit, 1 + + # Connect pipeline + src = u + if options.nsamples is not None: + head = gr.head(gr.sizeof_short, int(options.nsamples)*2) + self.connect(u, head) + src = head + + ana_strip = gr.and_const_ss(0xFFFE) + dig_strip = gr.and_const_ss(0x0001) + ana_sink = gr.file_sink(gr.sizeof_short, options.ana_filename) + dig_sink = gr.file_sink(gr.sizeof_short, options.dig_filename) + + self.connect(src, ana_strip, ana_sink) + self.connect(src, dig_strip, dig_sink) + +if __name__ == '__main__': + usage="%prog: [options] analog_filename digital_filename" + parser = OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Rx side A or B (default=A)") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-N", "--nsamples", type="eng_float", default=None, + help="number of samples to collect [default=+inf]") + parser.add_option("-F", "--force-complex-RXA", action="store_true", default=False, + help="enable basicRX hack to force complex mode on basicRX and LFRX. Only works on side A. Only use with --gain 0") + (options, args) = parser.parse_args () + if len(args) != 2: + parser.print_help() + raise SystemExit, 1 + options.ana_filename = args[0] + options.dig_filename = args[1] + + if options.freq is None: + parser.print_help() + sys.stderr.write('You must specify the frequency with -f FREQ\n'); + raise SystemExit, 1 + + try: + tb = my_top_block(options) + tb.run() + except KeyboardInterrupt: + pass diff --git a/gr-gpio/src/python/gpio_usrp_fft.py b/gr-gpio/src/python/gpio_usrp_fft.py new file mode 100755 index 00000000..40b1c54d --- /dev/null +++ b/gr-gpio/src/python/gpio_usrp_fft.py @@ -0,0 +1,333 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008,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. +# + +from gnuradio import gr, gru +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider +from optparse import OptionParser +import wx +import sys +import numpy + +from gnuradio import gpio + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + If there's a daughterboard on A, select A. + If there's a daughterboard on B, select B. + Otherwise, select A. + """ + if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + return (0, 0) + #if u.db[1][0].dbid() >= 0: #disable the use of RXB + # return (1, 0) + return (0, 0) + + +class app_top_block(stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) + + self.frame = frame + self.panel = panel + + parser = OptionParser(option_class=eng_option) + parser.add_option("-w", "--which", type="int", default=0, + help="select which USRP (0, 1, ...) default is %default", + metavar="NUM") +# parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, +# help="select USRP Rx side A or B (default=first one with a daughterboard)") + parser.add_option("-A", "--antenna", default=None, + help="select Rx Antenna (only on RFX-series boards)") + parser.add_option("-d", "--decim", type="int", default=32, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=0.0, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-W", "--waterfall", action="store_true", default=False, + help="Enable waterfall display") + parser.add_option("-8", "--width-8", action="store_true", default=False, + help="Enable 8-bit samples across USB") +# parser.add_option( "--no-hb", action="store_true", default=False, +# help="don't use halfband filter in usrp") + parser.add_option("-S", "--oscilloscope", action="store_true", default=False, + help="Enable oscilloscope display (default)") + parser.add_option("-F", "--fft", action="store_true", default=False, + help="Enable FFT display") + parser.add_option("-n", "--frame-decim", type="int", default=1, + help="set oscope frame decimation factor to n [default=1]") + parser.add_option("-v", "--v-scale", type="eng_float", default=1, + help="set oscope initial V/div to SCALE [default=%default]") + parser.add_option("-t", "--t-scale", type="eng_float", default=10e-6, + help="set oscope initial s/div to SCALE [default=10us]") + parser.add_option ("--digital", action="store_true", default=False, + help="show (only) the digital wave on lsb (will be input from gpio pins with special usrp firmware)") + parser.add_option ("--analog", action="store_true", default=False, + help="show (only) the analog wave on msbs (will be input from analog inputs)") + parser.add_option ("--file", default=None, + help="input from file FILE in stead of USRP (will be input from raw file in interleaved short format)") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + self.options = options + self.show_debug_info = True + + self.u = usrp.source_s(which=options.which, decim_rate=options.decim, fpga_filename=gpio.fpga_filename) + + print "Warning: This script only supports boards on RXA, change the script if you want otherwise" + #options.rx_subdev_spec=(0, 0)#force the use of RXA + options.rx_subdev_spec=None #force the use of RXA + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + + #This hardcoded mux setting is why this script only supports RXA + #We want both I and Q active, even when using basicRX + #set to 0x10 for RXA + #set to 0x32 for RXB + self.u.set_mux(0x10) #usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + + if options.width_8: + width = 8 + shift = 8 + format = self.u.make_format(width, shift) + print "format =", hex(format) + r = self.u.set_format(format) + print "set_format =", r + + # determine the daughterboard subdevice we're using + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + #if options.rx_subdev_spec==(0,0): + # rx_subdev_spec2=(0,1) + # self.subdev2 = usrp.selected_subdev(self.u, rx_subdev_spec2) + input_rate = self.u.adc_freq() / self.u.decim_rate() + + if options.waterfall: + self.scope = \ + waterfallsink2.waterfall_sink_c (panel, fft_size=1024, sample_rate=input_rate) + elif options.fft: + self.scope = fftsink2.fft_sink_c (panel, fft_size=1024, sample_rate=input_rate) + else: # options.oscilloscope: + #self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate) + self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate, + frame_decim=options.frame_decim, + v_scale=options.v_scale, + t_scale=options.t_scale) + + self.is2c = gr.interleaved_short_to_complex() + if not (options.file is None): + self.filesrc=gr.file_source(gr.sizeof_short, options.file, True) + thr = gr.throttle(gr.sizeof_short, input_rate) + self.connect(self.filesrc,thr,self.is2c,self.scope) + elif options.digital: + self.select_dig=gr.and_const_ss(0x0001) + self.connect(self.u, self.select_dig,self.is2c,self.scope) + elif options.analog: + self.select_ana=gr.and_const_ss(0xFFFE) + self.connect(self.u, self.select_ana,self.is2c,self.scope) + else: + self.connect(self.u,self.is2c,self.scope) + + self._build_gui(vbox) + self._setup_events() + + # set initial values + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.freq is None: + # if no freq was specified, use the mid-point + r = self.subdev.freq_range() + options.freq = float(r[0]+r[1])/2 + + self.set_gain(options.gain) + + if options.antenna is not None: + print "Selecting antenna %s" % (options.antenna,) + self.subdev.select_rx_antenna(options.antenna) + + if self.show_debug_info: + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) + self.myform['dbname'].set_value(self.subdev.name()) + self.myform['baseband'].set_value(0) + self.myform['ddc'].set_value(0) + + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + def _set_status_msg(self, msg): + self.frame.GetStatusBar().SetStatusText(msg, 0) + + def _build_gui(self, vbox): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + vbox.Add(self.scope.win, 10, wx.EXPAND) + + # add control area at the bottom + self.myform = myform = form.form() + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0, 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Center freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0, 0) + g = self.subdev.gain_range() + myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, + min=int(g[0]), max=int(g[1]), + callback=self.set_gain) + + hbox.Add((5,0), 0, 0) + vbox.Add(hbox, 0, wx.EXPAND) + + self._build_subpanel(vbox) + + def _build_subpanel(self, vbox_arg): + # build a secondary information panel (sometimes hidden) + + # FIXME figure out how to have this be a subpanel that is always + # created, but has its visibility controlled by foo.Show(True/False) + + def _form_set_decim(kv): + return self.set_decim(kv['decim']) + + if not(self.show_debug_info): + return + + panel = self.panel + vbox = vbox_arg + myform = self.myform + + #panel = wx.Panel(self.panel, -1) + #vbox = wx.BoxSizer(wx.VERTICAL) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['decim'] = form.int_field( + parent=panel, sizer=hbox, label="Decim", + callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg)) + + hbox.Add((5,0), 1) + myform['fs@usb'] = form.static_float_field( + parent=panel, sizer=hbox, label="Fs@USB") + + hbox.Add((5,0), 1) + myform['dbname'] = form.static_text_field( + parent=panel, sizer=hbox) + + hbox.Add((5,0), 1) + myform['baseband'] = form.static_float_field( + parent=panel, sizer=hbox, label="Analog BB") + + hbox.Add((5,0), 1) + myform['ddc'] = form.static_float_field( + parent=panel, sizer=hbox, label="DDC") + + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = self.u.tune(0, self.subdev, target_freq) + + if r: + self.myform['freq'].set_value(target_freq) # update displayed value + if self.show_debug_info: + self.myform['baseband'].set_value(r.baseband_freq) + self.myform['ddc'].set_value(r.dxc_freq) + if not self.options.waterfall and not self.options.oscilloscope: + self.scope.win.set_baseband_freq(target_freq) + return True + + return False + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev.set_gain(gain) + + def set_decim(self, decim): + ok = self.u.set_decim_rate(decim) + if not ok: + print "set_decim failed" + input_rate = self.u.adc_freq() / self.u.decim_rate() + self.scope.set_sample_rate(input_rate) + if self.show_debug_info: # update displayed values + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) + return ok + + def _setup_events(self): + if not self.options.waterfall and not self.options.oscilloscope: + self.scope.win.Bind(wx.EVT_LEFT_DCLICK, self.evt_left_dclick) + + def evt_left_dclick(self, event): + (ux, uy) = self.scope.win.GetXY(event) + if event.CmdDown(): + # Re-center on maximum power + points = self.scope.win._points + if self.scope.win.peak_hold: + if self.scope.win.peak_vals is not None: + ind = numpy.argmax(self.scope.win.peak_vals) + else: + ind = int(points.shape()[0]/2) + else: + ind = numpy.argmax(points[:,1]) + (freq, pwr) = points[ind] + target_freq = freq/self.scope.win._scale_factor + print ind, freq, pwr + self.set_freq(target_freq) + else: + # Re-center on clicked frequency + target_freq = ux/self.scope.win._scale_factor + self.set_freq(target_freq) + + +def main (): + app = stdgui2.stdapp(app_top_block, "USRP FFT", nstatus=1) + app.MainLoop() + +if __name__ == '__main__': + main () diff --git a/gr-gpio/src/python/gpio_usrp_siggen.py b/gr-gpio/src/python/gpio_usrp_siggen.py new file mode 100755 index 00000000..0e483c35 --- /dev/null +++ b/gr-gpio/src/python/gpio_usrp_siggen.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 import gr, gru +from gnuradio import usrp +from gnuradio.eng_option import eng_option +from gnuradio import eng_notation +from optparse import OptionParser +import sys + +from gnuradio import gpio + +class my_top_block(gr.top_block): + def __init__ (self): + gr.top_block.__init__(self) + + # controllable values + self.interp = 64 + self.waveform_type = gr.GR_CONST_WAVE + self.waveform_ampl = 16000 + self.waveform_freq = 100.12345e3 + self.waveform_offset = 0 + self._instantiate_blocks () + self.set_waveform_type (self.waveform_type) + + def usb_freq (self): + return self.u.dac_freq() / self.interp + + def usb_throughput (self): + return self.usb_freq () * 4 + + def set_waveform_type (self, type): + ''' + valid waveform types are: gr.GR_SIN_WAVE, gr.GR_CONST_WAVE, + gr.GR_UNIFORM and gr.GR_GAUSSIAN + ''' + self._configure_graph (type) + self.waveform_type = type + + def set_waveform_ampl (self, ampl): + self.waveform_ampl = ampl + self.siggen.set_amplitude (ampl) + self.noisegen.set_amplitude (ampl) + + def set_waveform_freq (self, freq): + self.waveform_freq = freq + self.siggen.set_frequency (freq) + + def set_waveform_offset (self, offset): + self.waveform_offset = offset + self.siggen.set_offset (offset) + + def set_interpolator (self, interp): + self.interp = interp + self.siggen.set_sampling_freq (self.usb_freq ()) + self.u.set_interp_rate (interp) + + def _instantiate_blocks (self): + self.src = None + self.u = usrp.sink_c (0, self.interp,fpga_filename=gpio.fpga_filename) + + self.siggen = gr.sig_source_c (self.usb_freq (), + gr.GR_SIN_WAVE, + self.waveform_freq, + self.waveform_ampl, + self.waveform_offset) + + self.noisegen = gr.noise_source_c (gr.GR_UNIFORM, + self.waveform_ampl) + self.vecgen = gr.vector_source_c ([complex(1.0,0.0),complex(0.0,0.0),complex(1.0,1.0),complex(0.0,1.0)],True) + + # self.file_sink = gr.file_sink (gr.sizeof_gr_complex, "siggen.dat") + + def _configure_graph (self, type): + try: + self.lock() + self.disconnect_all () + if type == gr.GR_SIN_WAVE: + self.connect (self.siggen, self.u) + # self.connect (self.siggen, self.file_sink) + self.siggen.set_waveform (type) + self.src = self.siggen + elif type == gr.GR_UNIFORM or type == gr.GR_GAUSSIAN: + self.connect (self.noisegen, self.u) + self.noisegen.set_type (type) + self.src = self.noisegen + elif type == gr.GR_CONST_WAVE: + self.connect (self.vecgen, self.u) + self.src = self.vecgen + else: + raise ValueError, type + finally: + self.unlock() + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital up converter. + """ + r = self.u.tune(self.subdev._which, self.subdev, target_freq) + if r: + #print "r.baseband_freq =", eng_notation.num_to_str(r.baseband_freq) + #print "r.dxc_freq =", eng_notation.num_to_str(r.dxc_freq) + #print "r.residual_freq =", eng_notation.num_to_str(r.residual_freq) + #print "r.inverted =", r.inverted + return True + + return False + + + +def main (): + parser = OptionParser (option_class=eng_option) + parser.add_option ("-T", "--tx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Tx side A or B") + parser.add_option ("-f", "--rf-freq", type="eng_float", default=None, + help="set RF center frequency to FREQ") + parser.add_option ("-i", "--interp", type="int", default=512, + help="set fgpa interpolation rate to INTERP [default=%default]") + parser.add_option ("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE, + help="generate a complex sinusoid [default]", default=gr.GR_SIN_WAVE) + + parser.add_option ("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN, + help="generate Gaussian random output") + parser.add_option ("--uniform", dest="type", action="store_const", const=gr.GR_UNIFORM, + help="generate Uniform random output") + + parser.add_option ("-w", "--waveform-freq", type="eng_float", default=100e3, + help="set waveform frequency to FREQ [default=%default]") + parser.add_option ("-a", "--amplitude", type="eng_float", default=16e3, + help="set waveform amplitude to AMPLITUDE [default=%default]", metavar="AMPL") + parser.add_option ("-g", "--gain", type="eng_float", default=None, + help="set output gain to GAIN [default=%default]") + parser.add_option ("-o", "--offset", type="eng_float", default=0, + help="set waveform offset to OFFSET [default=%default]") + parser.add_option ("--digital", dest="type", action="store_const", const=gr.GR_CONST_WAVE, + help="generate (only) a digital wave on lsb (will be output on gpio pins with special usrp firmware)") + (options, args) = parser.parse_args () + + if len(args) != 0: + parser.print_help() + raise SystemExit + + if options.rf_freq is None: + sys.stderr.write("usrp_siggen: must specify RF center frequency with -f RF_FREQ\n") + parser.print_help() + raise SystemExit + + tb = my_top_block() + tb.set_interpolator (options.interp) + tb.set_waveform_type (options.type) + tb.set_waveform_freq (options.waveform_freq) + tb.set_waveform_ampl (options.amplitude) + tb.set_waveform_offset (options.offset) + + # determine the daughterboard subdevice we're using + if options.tx_subdev_spec is None: + options.tx_subdev_spec = usrp.pick_tx_subdevice(tb.u) + + m = usrp.determine_tx_mux_value(tb.u, options.tx_subdev_spec) + #print "mux = %#04x" % (m,) + tb.u.set_mux(m) + tb.subdev = usrp.selected_subdev(tb.u, options.tx_subdev_spec) + print "Using TX d'board %s" % (tb.subdev.side_and_name(),) + + if options.gain is None: + tb.subdev.set_gain(tb.subdev.gain_range()[1]) # set max Tx gain + else: + tb.subdev.set_gain(options.gain) # set max Tx gain + + if not tb.set_freq(options.rf_freq): + sys.stderr.write('Failed to set RF frequency\n') + raise SystemExit + + tb.subdev.set_enable(True) # enable transmitter + + try: + tb.run() + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main () diff --git a/gr-gsm-fr-vocoder/AUTHORS b/gr-gsm-fr-vocoder/AUTHORS deleted file mode 100644 index 11c18b40..00000000 --- a/gr-gsm-fr-vocoder/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Eric Blossom GNU Radio glue, Makefiles, etc. -Jutta Degener GSM 06.10 vocoder -Carsten Bormann GSM 06.10 vocoder diff --git a/gr-gsm-fr-vocoder/ChangeLog b/gr-gsm-fr-vocoder/ChangeLog deleted file mode 100644 index ce9c10ff..00000000 --- a/gr-gsm-fr-vocoder/ChangeLog +++ /dev/null @@ -1,45 +0,0 @@ -2006-04-15 Eric Blossom - - * src/lib/gsm/config.h: modified to remove warnings. - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac, src/lib/Makefile.am: mods for x86_64, $(NO_UNDEFINED) - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - -2005-01-29 Eric Blossom - - * src/lib/Makefile.am: mods for SWIG 1.3.24 - -2005-01-20 Eric Blossom - - * doc/howto-write-a-block.xml: made release 0.1 - -# -# Copyright 2005 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. -# diff --git a/gr-gsm-fr-vocoder/Makefile.in b/gr-gsm-fr-vocoder/Makefile.in index 1951c12a..44c35569 100644 --- a/gr-gsm-fr-vocoder/Makefile.in +++ b/gr-gsm-fr-vocoder/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog + $(top_srcdir)/Makefile.common subdir = gr-gsm-fr-vocoder ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,20 +161,22 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -156,9 +184,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -166,6 +201,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -178,73 +215,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -254,49 +284,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -304,15 +374,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -322,16 +535,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -340,63 +571,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src DIST_SUBDIRS = src all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-gsm-fr-vocoder/src/Makefile.in b/gr-gsm-fr-vocoder/src/Makefile.in index 06e0558c..8e9fc3b9 100644 --- a/gr-gsm-fr-vocoder/src/Makefile.in +++ b/gr-gsm-fr-vocoder/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = gr-gsm-fr-vocoder/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,12 +549,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = lib python all: all-recursive @@ -332,8 +586,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -364,10 +618,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -399,8 +649,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -444,8 +693,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -470,8 +719,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -481,13 +730,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -501,22 +749,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -530,7 +777,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -538,6 +785,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -577,8 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -592,12 +840,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -616,22 +872,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/gr-gsm-fr-vocoder/src/lib/Makefile.am b/gr-gsm-fr-vocoder/src/lib/Makefile.am index 857cd4d9..0cf0fb07 100644 --- a/gr-gsm-fr-vocoder/src/lib/Makefile.am +++ b/gr-gsm-fr-vocoder/src/lib/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -23,79 +23,39 @@ include $(top_srcdir)/Makefile.common SUBDIRS = gsm . -# Install this stuff so that it ends up as the gnuradio.vocoder module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio/vocoder - -ourpythondir = $(grpythondir)/vocoder -ourlibdir = $(grpyexecdir)/vocoder - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) - +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - - -LOCAL_IFILES = \ - $(top_srcdir)/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i - -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _howto shared library -# and knows how to call our extensions. +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gsm_fr_decode_ps.h \ + gsm_fr_encode_sp.h -BUILT_SOURCES = \ - gsm_full_rate.cc \ - gsm_full_rate.py +# SWIG interface and library -# This gets gsm_full_rate.py installed in the right place -ourpython_PYTHON = \ - __init__.py \ - gsm_full_rate.py +TOP_SWIG_IFILES = \ + gsm_full_rate.i -ourlib_LTLIBRARIES = _gsm_full_rate.la +# Install so that they end up available as: +# import gnuradio.vocoder.gsm_full_rate +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/vocoder +gsm_full_rate_pythondir_category = \ + gnuradio/vocoder -# These are the source files that go into the shared library -_gsm_full_rate_la_SOURCES = \ +# additional sources for the SWIG-generated library +gsm_full_rate_la_swig_sources = \ gsm_fr_decode_ps.cc \ - gsm_fr_encode_sp.cc \ - gsm_full_rate.cc - - -# magic flags -_gsm_full_rate_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version - -# link the library against the gsm library and the -# c++ standard library -_gsm_full_rate_la_LIBADD = \ - gsm/libgsm.la \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ - -gsm_full_rate.cc gsm_full_rate.py: gsm_full_rate.i $(ALL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module gsm_full_rate -o gsm_full_rate.cc $(LOCAL_IFILES) - -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = \ - gsm_fr_decode_ps.h \ - gsm_fr_encode_sp.h - -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) + gsm_fr_encode_sp.cc +# additional libraries for linking with the SWIG-generated library +gsm_full_rate_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + gsm/libgsm.la -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +include $(top_srcdir)/Makefile.swig -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# 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) diff --git a/gr-gsm-fr-vocoder/src/lib/Makefile.in b/gr-gsm-fr-vocoder/src/lib/Makefile.in index 87c6eaa6..ec903d4d 100644 --- a/gr-gsm-fr-vocoder/src/lib/Makefile.in +++ b/gr-gsm-fr-vocoder/src/lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 gsm_full_rate.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,30 +123,41 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(ourpython_PYTHON) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +DIST_COMMON = $(grinclude_HEADERS) $(gsm_full_rate_python_PYTHON) \ + $(gsm_full_rate_swiginclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig subdir = gr-gsm-fr-vocoder/src/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +166,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -140,42 +213,53 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(gsm_full_rate_pylibdir)" \ + "$(DESTDIR)$(gsm_full_rate_pythondir)" \ + "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(gsm_full_rate_swigincludedir)" +gsm_full_rate_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(gsm_full_rate_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la -_gsm_full_rate_la_DEPENDENCIES = gsm/libgsm.la $(am__DEPENDENCIES_1) \ +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) gsm/libgsm.la +_gsm_full_rate_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) -am__gsm_full_rate_la_OBJECTS = gsm_fr_decode_ps.lo gsm_fr_encode_sp.lo \ - gsm_full_rate.lo +am__objects_1 = _gsm_full_rate_la-gsm_fr_decode_ps.lo \ + _gsm_full_rate_la-gsm_fr_encode_sp.lo +am__gsm_full_rate_la_OBJECTS = _gsm_full_rate_la-gsm_full_rate.lo \ + $(am__objects_1) _gsm_full_rate_la_OBJECTS = $(am__gsm_full_rate_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_gsm_full_rate_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) \ + $(_gsm_full_rate_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_gsm_full_rate_la_SOURCES) DIST_SOURCES = $(_gsm_full_rate_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +gsm_full_rate_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +gsm_full_rate_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(gsm_full_rate_swiginclude_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -183,10 +267,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -194,9 +277,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -204,6 +294,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -216,73 +308,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -292,49 +377,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -342,15 +467,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -360,16 +628,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -378,139 +664,239 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -SUBDIRS = gsm . +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.vocoder module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio/vocoder -ourpythondir = $(grpythondir)/vocoder -ourlibdir = $(grpyexecdir)/vocoder -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d -LOCAL_IFILES = \ - $(top_srcdir)/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/gsm_full_rate-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +SUBDIRS = gsm . +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) +# C/C++ headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gsm_fr_decode_ps.h \ + gsm_fr_encode_sp.h -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _howto shared library -# and knows how to call our extensions. -BUILT_SOURCES = \ - gsm_full_rate.cc \ - gsm_full_rate.py +# SWIG interface and library +TOP_SWIG_IFILES = \ + gsm_full_rate.i -# This gets gsm_full_rate.py installed in the right place -ourpython_PYTHON = \ - __init__.py \ - gsm_full_rate.py -ourlib_LTLIBRARIES = _gsm_full_rate.la +# Install so that they end up available as: +# import gnuradio.vocoder.gsm_full_rate +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/vocoder +gsm_full_rate_pythondir_category = \ + gnuradio/vocoder -# These are the source files that go into the shared library -_gsm_full_rate_la_SOURCES = \ + +# additional sources for the SWIG-generated library +gsm_full_rate_la_swig_sources = \ gsm_fr_decode_ps.cc \ - gsm_fr_encode_sp.cc \ - gsm_full_rate.cc + gsm_fr_encode_sp.cc -# magic flags -_gsm_full_rate_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +# additional libraries for linking with the SWIG-generated library +gsm_full_rate_la_swig_libadd = \ + $(GNURADIO_CORE_LA) \ + gsm/libgsm.la -# link the library against the gsm library and the -# c++ standard library -_gsm_full_rate_la_LIBADD = \ - gsm/libgsm.la \ +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = gsm_full_rate.py gsm_full_rate.cc +gsm_full_rate_pythondir = $(pythondir)/$(gsm_full_rate_pythondir_category) +gsm_full_rate_pylibdir = $(pyexecdir)/$(gsm_full_rate_pylibdir_category) +gsm_full_rate_swigincludedir = $(swigincludedir) +gsm_full_rate_swiginclude_HEADERS = \ + gsm_full_rate.i \ + $(gsm_full_rate_swiginclude_headers) + +gsm_full_rate_pylib_LTLIBRARIES = \ + _gsm_full_rate.la +_gsm_full_rate_la_SOURCES = \ + gsm_full_rate.cc \ + $(gsm_full_rate_la_swig_sources) -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = \ - gsm_fr_decode_ps.h \ - gsm_fr_encode_sp.h +_gsm_full_rate_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gsm_full_rate_la_swig_libadd) + +_gsm_full_rate_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gsm_full_rate_la_swig_ldflags) + +_gsm_full_rate_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gsm_full_rate_la_swig_cxxflags) +gsm_full_rate_python_PYTHON = \ + gsm_full_rate.py \ + $(gsm_full_rate_python) -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -534,35 +920,35 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-gsm_full_rate_pylibLTLIBRARIES: $(gsm_full_rate_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(gsm_full_rate_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(gsm_full_rate_pylibdir)" + @list='$(gsm_full_rate_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gsm_full_rate_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(gsm_full_rate_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(gsm_full_rate_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(gsm_full_rate_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-gsm_full_rate_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(gsm_full_rate_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gsm_full_rate_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gsm_full_rate_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-gsm_full_rate_pylibLTLIBRARIES: + -test -z "$(gsm_full_rate_pylib_LTLIBRARIES)" || rm -f $(gsm_full_rate_pylib_LTLIBRARIES) + @list='$(gsm_full_rate_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _gsm_full_rate.la: $(_gsm_full_rate_la_OBJECTS) $(_gsm_full_rate_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_gsm_full_rate_la_LDFLAGS) $(_gsm_full_rate_la_OBJECTS) $(_gsm_full_rate_la_LIBADD) $(LIBS) + $(_gsm_full_rate_la_LINK) -rpath $(gsm_full_rate_pylibdir) $(_gsm_full_rate_la_OBJECTS) $(_gsm_full_rate_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -570,71 +956,88 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_fr_decode_ps.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_fr_encode_sp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_full_rate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gsm_full_rate_la-gsm_fr_decode_ps.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gsm_full_rate_la-gsm_fr_encode_sp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_gsm_full_rate_la-gsm_full_rate.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_gsm_full_rate_la-gsm_full_rate.lo: gsm_full_rate.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) -MT _gsm_full_rate_la-gsm_full_rate.lo -MD -MP -MF $(DEPDIR)/_gsm_full_rate_la-gsm_full_rate.Tpo -c -o _gsm_full_rate_la-gsm_full_rate.lo `test -f 'gsm_full_rate.cc' || echo '$(srcdir)/'`gsm_full_rate.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gsm_full_rate_la-gsm_full_rate.Tpo $(DEPDIR)/_gsm_full_rate_la-gsm_full_rate.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gsm_full_rate.cc' object='_gsm_full_rate_la-gsm_full_rate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) -c -o _gsm_full_rate_la-gsm_full_rate.lo `test -f 'gsm_full_rate.cc' || echo '$(srcdir)/'`gsm_full_rate.cc + +_gsm_full_rate_la-gsm_fr_decode_ps.lo: gsm_fr_decode_ps.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) -MT _gsm_full_rate_la-gsm_fr_decode_ps.lo -MD -MP -MF $(DEPDIR)/_gsm_full_rate_la-gsm_fr_decode_ps.Tpo -c -o _gsm_full_rate_la-gsm_fr_decode_ps.lo `test -f 'gsm_fr_decode_ps.cc' || echo '$(srcdir)/'`gsm_fr_decode_ps.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gsm_full_rate_la-gsm_fr_decode_ps.Tpo $(DEPDIR)/_gsm_full_rate_la-gsm_fr_decode_ps.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gsm_fr_decode_ps.cc' object='_gsm_full_rate_la-gsm_fr_decode_ps.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) -c -o _gsm_full_rate_la-gsm_fr_decode_ps.lo `test -f 'gsm_fr_decode_ps.cc' || echo '$(srcdir)/'`gsm_fr_decode_ps.cc + +_gsm_full_rate_la-gsm_fr_encode_sp.lo: gsm_fr_encode_sp.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) -MT _gsm_full_rate_la-gsm_fr_encode_sp.lo -MD -MP -MF $(DEPDIR)/_gsm_full_rate_la-gsm_fr_encode_sp.Tpo -c -o _gsm_full_rate_la-gsm_fr_encode_sp.lo `test -f 'gsm_fr_encode_sp.cc' || echo '$(srcdir)/'`gsm_fr_encode_sp.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_gsm_full_rate_la-gsm_fr_encode_sp.Tpo $(DEPDIR)/_gsm_full_rate_la-gsm_fr_encode_sp.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gsm_fr_encode_sp.cc' object='_gsm_full_rate_la-gsm_fr_encode_sp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_gsm_full_rate_la_CXXFLAGS) $(CXXFLAGS) -c -o _gsm_full_rate_la-gsm_fr_encode_sp.lo `test -f 'gsm_fr_encode_sp.cc' || echo '$(srcdir)/'`gsm_fr_encode_sp.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-gsm_full_rate_pythonPYTHON: $(gsm_full_rate_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(gsm_full_rate_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(gsm_full_rate_pythondir)" + @list='$(gsm_full_rate_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(gsm_full_rate_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(gsm_full_rate_pythondir)/$$f'"; \ + $(gsm_full_rate_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(gsm_full_rate_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(gsm_full_rate_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(gsm_full_rate_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-gsm_full_rate_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(gsm_full_rate_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(gsm_full_rate_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(gsm_full_rate_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(gsm_full_rate_pythondir)/$${f}o"; \ done install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -649,22 +1052,22 @@ uninstall-grincludeHEADERS: echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-gsm_full_rate_swigincludeHEADERS: $(gsm_full_rate_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(gsm_full_rate_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gsm_full_rate_swigincludedir)" + @list='$(gsm_full_rate_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(gsm_full_rate_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gsm_full_rate_swigincludedir)/$$f'"; \ + $(gsm_full_rate_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gsm_full_rate_swigincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-gsm_full_rate_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(gsm_full_rate_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(gsm_full_rate_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gsm_full_rate_swigincludedir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd @@ -698,8 +1101,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -743,8 +1145,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -769,8 +1171,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -780,13 +1182,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -800,23 +1201,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. $(distdir)/../../../gr-gsm-fr-vocoder/src/lib - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -830,7 +1229,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -838,6 +1237,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -851,8 +1252,8 @@ check: $(BUILT_SOURCES) all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(gsm_full_rate_pylibdir)" "$(DESTDIR)$(gsm_full_rate_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(gsm_full_rate_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive @@ -883,14 +1284,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-generic clean-gsm_full_rate_pylibLTLIBRARIES \ + clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-recursive @@ -902,15 +1303,25 @@ info: info-recursive info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-grincludeHEADERS \ + install-gsm_full_rate_pylibLTLIBRARIES \ + install-gsm_full_rate_pythonPYTHON \ + install-gsm_full_rate_swigincludeHEADERS + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -931,39 +1342,116 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - clean-recursive ctags ctags-recursive dist-hook distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ +uninstall-am: uninstall-grincludeHEADERS \ + uninstall-gsm_full_rate_pylibLTLIBRARIES \ + uninstall-gsm_full_rate_pythonPYTHON \ + uninstall-gsm_full_rate_swigincludeHEADERS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic \ + clean-gsm_full_rate_pylibLTLIBRARIES clean-libtool ctags \ + ctags-recursive dist-hook distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-grincludeHEADERS \ + install-gsm_full_rate_pylibLTLIBRARIES \ + install-gsm_full_rate_pythonPYTHON \ + install-gsm_full_rate_swigincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-grincludeHEADERS \ + uninstall-gsm_full_rate_pylibLTLIBRARIES \ + uninstall-gsm_full_rate_pythonPYTHON \ + uninstall-gsm_full_rate_swigincludeHEADERS -gsm_full_rate.cc gsm_full_rate.py: gsm_full_rate.i $(ALL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module gsm_full_rate -o gsm_full_rate.cc $(LOCAL_IFILES) +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -# Don't distribute output of swig +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +gsm_full_rate_pythondir_category ?= gnuradio/gsm_full_rate +gsm_full_rate_pylibdir_category ?= $(gsm_full_rate_pythondir_category) + +gsm_full_rate.h gsm_full_rate.py gsm_full_rate.cc: gsm_full_rate.i + trap 'rm -rf $(DEPDIR)/gsm_full_rate-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/gsm_full_rate-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/gsm_full_rate-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/gsm_full_rate-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/gsm_full_rate-generate-lock; \ + else \ + while test -d $(DEPDIR)/gsm_full_rate-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/gsm_full_rate-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/gsm_full_rate-generate-stamp: + 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; + $(RM) $(DEPDIR)/gsm_full_rate.d + cp $(DEPDIR)/gsm_full_rate.Std $(DEPDIR)/gsm_full_rate.d + echo "" >> $(DEPDIR)/gsm_full_rate.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/gsm_full_rate.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/gsm_full_rate.d + $(RM) $(DEPDIR)/gsm_full_rate.Std + touch $(DEPDIR)/gsm_full_rate-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)/gsm_full_rate.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen b/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen new file mode 100644 index 00000000..5446f346 --- /dev/null +++ b/gr-gsm-fr-vocoder/src/lib/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 gsm_full_rate.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/gsm_full_rate +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/gsm_full_rate +## +## 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. + +gsm_full_rate_pythondir_category ?= gnuradio/gsm_full_rate +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) + +## SWIG headers are always installed into the same directory. + +gsm_full_rate_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)/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 . + +gsm_full_rate_swiginclude_HEADERS = \ + gsm_full_rate.i \ + $(gsm_full_rate_swiginclude_headers) + +gsm_full_rate_pylib_LTLIBRARIES = \ + _gsm_full_rate.la + +_gsm_full_rate_la_SOURCES = \ + gsm_full_rate.cc \ + $(gsm_full_rate_la_swig_sources) + +_gsm_full_rate_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(gsm_full_rate_la_swig_libadd) + +_gsm_full_rate_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(gsm_full_rate_la_swig_ldflags) + +_gsm_full_rate_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(gsm_full_rate_la_swig_cxxflags) + +gsm_full_rate_python_PYTHON = \ + gsm_full_rate.py \ + $(gsm_full_rate_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/gsm_full_rate.d@am__quote@ + diff --git a/gr-gsm-fr-vocoder/src/lib/__init__.py b/gr-gsm-fr-vocoder/src/lib/__init__.py deleted file mode 100644 index ccde1f5b..00000000 --- a/gr-gsm-fr-vocoder/src/lib/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright 2005 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. -# diff --git a/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.am b/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.am index b8c946c9..d0872ff3 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.am +++ b/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -43,7 +43,8 @@ LTP_CUT = OPTIONS = $(SASR) $(MULHACK) $(FAST) $(LTP_CUT) -INCLUDES = $(STD_DEFINES_AND_INCLUDES) -DNeedFunctionPrototypes=1 $(OPTIONS) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) -DNeedFunctionPrototypes=1 \ + $(OPTIONS) $(WITH_INCLUDES) noinst_LTLIBRARIES = libgsm.la diff --git a/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.in b/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.in index 1757aa5b..f1b72f5f 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.in +++ b/gr-gsm-fr-vocoder/src/lib/gsm/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +58,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -85,25 +81,35 @@ DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common subdir = gr-gsm-fr-vocoder/src/lib/gsm ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -112,15 +118,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -140,17 +166,18 @@ am_libgsm_la_OBJECTS = add.lo code.lo debug.lo decode.lo gsm_create.lo \ gsm_implode.lo gsm_option.lo gsm_print.lo long_term.lo lpc.lo \ preprocess.lo rpe.lo short_term.lo table.lo libgsm_la_OBJECTS = $(am_libgsm_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libgsm_la_SOURCES) DIST_SOURCES = $(libgsm_la_SOURCES) HEADERS = $(noinst_HEADERS) @@ -160,10 +187,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -171,9 +197,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -181,6 +214,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -193,73 +228,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -269,49 +297,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -319,15 +387,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -337,16 +548,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -355,63 +584,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT # Machine- or installation dependent flags you should configure to port SASR = -DSASR @@ -430,7 +728,9 @@ LTP_CUT = ######### both integer and floating point multiplications. ######### This flag is still in the experimental stage. OPTIONS = $(SASR) $(MULHACK) $(FAST) $(LTP_CUT) -INCLUDES = $(STD_DEFINES_AND_INCLUDES) -DNeedFunctionPrototypes=1 $(OPTIONS) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) -DNeedFunctionPrototypes=1 \ + $(OPTIONS) $(WITH_INCLUDES) + noinst_LTLIBRARIES = libgsm.la libgsm_la_SOURCES = \ add.c \ @@ -467,8 +767,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -502,7 +802,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libgsm.la: $(libgsm_la_OBJECTS) $(libgsm_la_DEPENDENCIES) - $(LINK) $(libgsm_la_LDFLAGS) $(libgsm_la_OBJECTS) $(libgsm_la_LIBADD) $(LIBS) + $(LINK) $(libgsm_la_OBJECTS) $(libgsm_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -530,22 +830,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -556,17 +856,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -578,8 +874,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -589,13 +885,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -609,23 +904,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -636,6 +929,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) @@ -655,6 +951,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -673,7 +970,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -687,12 +984,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -713,20 +1018,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-gsm-fr-vocoder/src/lib/gsm/code.c b/gr-gsm-fr-vocoder/src/lib/gsm/code.c index 73955429..19af507b 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm/code.c +++ b/gr-gsm-fr-vocoder/src/lib/gsm/code.c @@ -19,6 +19,7 @@ #include "private.h" #include "gsm.h" #include "proto.h" +#include /* * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER diff --git a/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c b/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c index a59aa2f2..de0b125b 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c +++ b/gr-gsm-fr-vocoder/src/lib/gsm/gsm_create.c @@ -30,6 +30,7 @@ static char const ident[] = "$Header$"; #include "gsm.h" #include "private.h" #include "proto.h" +#include gsm gsm_create P0() { diff --git a/gr-gsm-fr-vocoder/src/lib/gsm_fr_decode_ps.h b/gr-gsm-fr-vocoder/src/lib/gsm_fr_decode_ps.h index 0f33fe87..8002c2ce 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm_fr_decode_ps.h +++ b/gr-gsm-fr-vocoder/src/lib/gsm_fr_decode_ps.h @@ -31,6 +31,7 @@ gsm_fr_decode_ps_sptr gsm_fr_make_decode_ps (); /*! * \brief GSM 06.10 Full Rate Vocoder Decoder + * \ingroup vocoder_blk */ class gsm_fr_decode_ps : public gr_sync_interpolator { struct gsm_state *d_gsm; diff --git a/gr-gsm-fr-vocoder/src/lib/gsm_fr_encode_sp.h b/gr-gsm-fr-vocoder/src/lib/gsm_fr_encode_sp.h index a34d5e44..f158a3d0 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm_fr_encode_sp.h +++ b/gr-gsm-fr-vocoder/src/lib/gsm_fr_encode_sp.h @@ -31,7 +31,7 @@ gsm_fr_encode_sp_sptr gsm_fr_make_encode_sp (); /*! * \brief GSM 06.10 Full Rate Vocoder Encoder - * \ingroup block + * \ingroup vocoder_blk * * shorts in; 33 byte packets out */ 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 63beb95d..535faa7f 100644 --- a/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i +++ b/gr-gsm-fr-vocoder/src/lib/gsm_full_rate.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2005 Free Software Foundation, Inc. + * Copyright 2005,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,15 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); -%include "exception.i" -%import "gnuradio.i" +%include "gnuradio.i" %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "gsm_fr_encode_sp.h" #include "gsm_fr_decode_ps.h" -#include %} GR_SWIG_BLOCK_MAGIC(gsm_fr,encode_sp); diff --git a/gr-gsm-fr-vocoder/src/python/Makefile.in b/gr-gsm-fr-vocoder/src/python/Makefile.in index d039588f..d84e4e1b 100644 --- a/gr-gsm-fr-vocoder/src/python/Makefile.in +++ b/gr-gsm-fr-vocoder/src/python/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = $(noinst_PYTHON) $(srcdir)/Makefile.am \ $(top_srcdir)/Makefile.common subdir = gr-gsm-fr-vocoder/src/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -139,10 +165,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -150,9 +175,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -160,6 +192,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -172,73 +206,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -248,49 +275,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -298,15 +365,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -316,16 +526,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -334,63 +562,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = run_tests.in TESTS = \ run_tests @@ -406,8 +703,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -439,10 +736,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -453,7 +746,7 @@ CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -462,7 +755,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -474,7 +767,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -488,23 +781,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -524,23 +830,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -551,6 +855,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am @@ -571,6 +878,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -586,7 +894,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -600,12 +908,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -624,18 +940,32 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ - clean-libtool distclean distclean-generic distclean-libtool \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + clean-libtool dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-info-am + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-gsm-fr-vocoder/src/python/encdec.py b/gr-gsm-fr-vocoder/src/python/encdec.py index 1a976ee7..94e4e5b8 100755 --- a/gr-gsm-fr-vocoder/src/python/encdec.py +++ b/gr-gsm-fr-vocoder/src/python/encdec.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,7 +25,7 @@ from gnuradio import audio from gnuradio.vocoder import gsm_full_rate def build_graph(): - fg = gr.flow_graph() + tb = gr.top_block() src = audio.source(8000) src_scale = gr.multiply_const_ff(32767) f2s = gr.float_to_short () @@ -34,11 +34,11 @@ def build_graph(): s2f = gr.short_to_float () sink_scale = gr.multiply_const_ff(1.0/32767.) sink = audio.sink(8000) - fg.connect(src, src_scale, f2s, enc, dec, s2f, sink_scale, sink) - return fg + tb.connect(src, src_scale, f2s, enc, dec, s2f, sink_scale, sink) + return tb if __name__ == '__main__': - fg = build_graph() - fg.start() + tb = build_graph() + tb.start() raw_input ('Press Enter to exit: ') - fg.stop() + tb.stop() diff --git a/gr-gsm-fr-vocoder/src/python/qa_gsm_full_rate.py b/gr-gsm-fr-vocoder/src/python/qa_gsm_full_rate.py index d470584a..ac508407 100755 --- a/gr-gsm-fr-vocoder/src/python/qa_gsm_full_rate.py +++ b/gr-gsm-fr-vocoder/src/python/qa_gsm_full_rate.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -26,10 +26,10 @@ import gsm_full_rate class qa_howto (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None if __name__ == '__main__': gr_unittest.main () diff --git a/gr-pager/Makefile.am b/gr-pager/Makefile.am new file mode 100644 index 00000000..7297661a --- /dev/null +++ b/gr-pager/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2006,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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src diff --git a/gr-pager/Makefile.in b/gr-pager/Makefile.in new file mode 100644 index 00000000..91725792 --- /dev/null +++ b/gr-pager/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2006,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-pager +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-pager/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-pager/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-pager/README b/gr-pager/README new file mode 100644 index 00000000..2d4f3c95 --- /dev/null +++ b/gr-pager/README @@ -0,0 +1,85 @@ +This GNU Radio component implements a FLEX radiopager receiver/demodulator. + +FLEX pager towers are between 929 MHz and 932 MHz at 25 KHz centers. + +Current status (7/16/07): + +FLEX receiving is completed except for addition of BCH error correction. + +There are three scripts: + +usrp_flex.py - Receives and displays pages from a single paging channel. To + work from recorded data, record from USRP with decimation 256 + at center frequency. + + Usage: usrp_flex.py [options] + + Options: + -h, --help show this help message and exit + -f Hz, --frequency=Hz set receive frequency to Hz + -R SUBDEV, --rx-subdev-spec=SUBDEV select USRP Rx side A or B + -c Hz, --calibration=Hz set frequency offset to Hz + -g dB, --gain=dB set RF gain + -l, --log log flowgraph to files (LOTS of data) + -v, --verbose display debug output + -F FROM_FILE, --from-file=FROM_FILE read samples from file instead of USRP + + Example, to receive from 931.95M (a common nationwide channel) with DBSRX in + side A of USRP: + + $ usrp_flex.py -f 931.95M -g 32 -R A + + +usrp_flex_band.py - Receives and displays pages from a 1 MHz paging band (40 pager + channels.) To work from recorded data, record from USRP with + decimation 64 at center frequency. + +Usage: usrp_flex_band.py [options] + + Options: + -h, --help show this help message and exit + -f Hz, --frequency=Hz set receive center frequency to Hz + -R SUBDEV, --rx-subdev-spec=SUBDEV select USRP Rx side A or B + -c Hz, --calibration=Hz set frequency offset to Hz + -g dB, --gain=dB set RF gain + -F FROM_FILE, --from-file=FROM_FILE Read from file instead of USRP + -l, --log log flowgraph to files (LOTS of data) + -v, --verbose display debug output + + Example, to receive from the lower third of the pager band with DBSRX in side B + of USRP: + + $ usrp_flex_band.py -f 929.5M -g 32 -R B + +usrp_flex_all.py - Receives and displays pages from entire pager band (3 MHz, + 120 pager channels.) This does not work in real time due + to CPU limitations, but can work from recorded USRP data. To + work from recorded data, record from USRP with decimation 20 at + center frequency of 930.5M. + + Usage: usrp_flex_all.py [options] + + Options: + -h, --help show this help message and exit + -R SUBDEV, --rx-subdev-spec=SUBDEVC select USRP Rx side A or B + -c Hz, --calibration=Hz set frequency offset to Hz + -g dB, --gain=dB set RF gain + -F FROM_FILE, --from-file=FROM_FILE Read from file instead of USRP + -l, --log log flowgraph to files (LOTS of data) + -v, --verbose display debug output + + Example, to receive all pager channels with DBSRX in side A: + + $ usrp_flex_all.py -R A + +The demodulator is relatively sensitive to frequency offset and can capture a signal +within 3k of the actual signal. + +All three scripts take a 'calibration' parameter, which specifies the frequency offset +of the daughterboard. This causes the USRP to be tuned to the given center frequency +plus the calibration offset. For example, if your DBSRX shows 930MHz as 930.001MHz in +usrp_fft.py, then use '-c 1k' in the command line to automatically add this. + +Johnathan Corgan +Corgan Enterprises LLC +jcorgan@corganenterprises.com diff --git a/gr-pager/src/Makefile.am b/gr-pager/src/Makefile.am new file mode 100644 index 00000000..b12f7b8f --- /dev/null +++ b/gr-pager/src/Makefile.am @@ -0,0 +1,95 @@ +# +# Copyright 2004,2005,2006,2008,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = run_tests.in + +TESTS = run_tests + +DISTCLEANFILES = run_tests + +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +dist_bin_SCRIPTS = \ + usrp_flex.py \ + usrp_flex_all.py \ + usrp_flex_band.py + +noinst_PYTHON = \ + qa_pager.py + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + pager_slicer_fb.h \ + pager_flex_sync.h \ + pager_flex_deinterleave.h \ + pager_flex_parse.h \ + pager_flex_frame.h \ + pageri_bch3221.h \ + pageri_flex_modes.h \ + pageri_util.h + +############################## +# SWIG interface and library + +TOP_SWIG_IFILES = \ + pager_swig.i + +# Install so that they end up available as: +# import gnuradio.pager +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/pager +pager_swig_pythondir_category = \ + gnuradio/pager + +# additional sources for the SWIG-generated library +pager_swig_la_swig_sources = \ + pager_flex_frame.cc \ + pager_slicer_fb.cc \ + pager_flex_sync.cc \ + pager_flex_deinterleave.cc \ + pager_flex_parse.cc \ + pageri_bch3221.cc \ + pageri_flex_modes.cc \ + pageri_util.cc + +# additional libraries for linking with the SWIG-generated library +pager_swig_la_swig_libadd = \ + $(GNURADIO_CORE_LA) + +# additional Python files to be installed along with the SWIG-generated one +pager_swig_python = \ + __init__.py \ + pager_utils.py \ + flex_demod.py + +# additional SWIG files to be installed +pager_swig_swiginclude_headers = \ + pager_flex_frame.i + +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) diff --git a/gr-pager/src/Makefile.in b/gr-pager/src/Makefile.in new file mode 100644 index 00000000..2dad10f3 --- /dev/null +++ b/gr-pager/src/Makefile.in @@ -0,0 +1,1547 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,2006,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# 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 + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_bin_SCRIPTS) $(grinclude_HEADERS) \ + $(noinst_PYTHON) $(pager_swig_python_PYTHON) \ + $(pager_swig_swiginclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig +subdir = gr-pager/src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pager_swig_pylibdir)" \ + "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pager_swig_pythondir)" \ + "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(pager_swig_swigincludedir)" +pager_swig_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(pager_swig_pylib_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +_pager_swig_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__objects_1 = _pager_swig_la-pager_flex_frame.lo \ + _pager_swig_la-pager_slicer_fb.lo \ + _pager_swig_la-pager_flex_sync.lo \ + _pager_swig_la-pager_flex_deinterleave.lo \ + _pager_swig_la-pager_flex_parse.lo \ + _pager_swig_la-pageri_bch3221.lo \ + _pager_swig_la-pageri_flex_modes.lo \ + _pager_swig_la-pageri_util.lo +am__pager_swig_la_OBJECTS = _pager_swig_la-pager_swig.lo \ + $(am__objects_1) +_pager_swig_la_OBJECTS = $(am__pager_swig_la_OBJECTS) +_pager_swig_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) \ + $(_pager_swig_la_LDFLAGS) $(LDFLAGS) -o $@ +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_pager_swig_la_SOURCES) +DIST_SOURCES = $(_pager_swig_la_SOURCES) +pager_swig_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +pager_swig_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(pager_swig_swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/pager_swig-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +EXTRA_DIST = run_tests.in +TESTS = run_tests +DISTCLEANFILES = run_tests +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) +dist_bin_SCRIPTS = \ + usrp_flex.py \ + usrp_flex_all.py \ + usrp_flex_band.py + +noinst_PYTHON = \ + qa_pager.py + + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + pager_slicer_fb.h \ + pager_flex_sync.h \ + pager_flex_deinterleave.h \ + pager_flex_parse.h \ + pager_flex_frame.h \ + pageri_bch3221.h \ + pageri_flex_modes.h \ + pageri_util.h + + +############################## +# SWIG interface and library +TOP_SWIG_IFILES = \ + pager_swig.i + + +# Install so that they end up available as: +# import gnuradio.pager +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/pager +pager_swig_pythondir_category = \ + gnuradio/pager + + +# additional sources for the SWIG-generated library +pager_swig_la_swig_sources = \ + pager_flex_frame.cc \ + pager_slicer_fb.cc \ + pager_flex_sync.cc \ + pager_flex_deinterleave.cc \ + pager_flex_parse.cc \ + pageri_bch3221.cc \ + pageri_flex_modes.cc \ + pageri_util.cc + + +# additional libraries for linking with the SWIG-generated library +pager_swig_la_swig_libadd = \ + $(GNURADIO_CORE_LA) + + +# additional Python files to be installed along with the SWIG-generated one +pager_swig_python = \ + __init__.py \ + pager_utils.py \ + flex_demod.py + + +# additional SWIG files to be installed +pager_swig_swiginclude_headers = \ + pager_flex_frame.i + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = pager_swig.py pager_swig.cc +pager_swig_pythondir = $(pythondir)/$(pager_swig_pythondir_category) +pager_swig_pylibdir = $(pyexecdir)/$(pager_swig_pylibdir_category) +pager_swig_swigincludedir = $(swigincludedir) +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) + + +# 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) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-pager/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-pager/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-pager_swig_pylibLTLIBRARIES: $(pager_swig_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pager_swig_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(pager_swig_pylibdir)" + @list='$(pager_swig_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pager_swig_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pager_swig_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pager_swig_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pager_swig_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-pager_swig_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pager_swig_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pager_swig_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pager_swig_pylibdir)/$$p"; \ + done + +clean-pager_swig_pylibLTLIBRARIES: + -test -z "$(pager_swig_pylib_LTLIBRARIES)" || rm -f $(pager_swig_pylib_LTLIBRARIES) + @list='$(pager_swig_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_pager_swig.la: $(_pager_swig_la_OBJECTS) $(_pager_swig_la_DEPENDENCIES) + $(_pager_swig_la_LINK) -rpath $(pager_swig_pylibdir) $(_pager_swig_la_OBJECTS) $(_pager_swig_la_LIBADD) $(LIBS) +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pager_flex_deinterleave.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pager_flex_frame.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pager_flex_parse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pager_flex_sync.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pager_slicer_fb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pager_swig.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pageri_bch3221.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pageri_flex_modes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_pager_swig_la-pageri_util.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +_pager_swig_la-pager_swig.lo: pager_swig.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pager_swig.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pager_swig.Tpo -c -o _pager_swig_la-pager_swig.lo `test -f 'pager_swig.cc' || echo '$(srcdir)/'`pager_swig.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pager_swig.Tpo $(DEPDIR)/_pager_swig_la-pager_swig.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pager_swig.cc' object='_pager_swig_la-pager_swig.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pager_swig.lo `test -f 'pager_swig.cc' || echo '$(srcdir)/'`pager_swig.cc + +_pager_swig_la-pager_flex_frame.lo: pager_flex_frame.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pager_flex_frame.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pager_flex_frame.Tpo -c -o _pager_swig_la-pager_flex_frame.lo `test -f 'pager_flex_frame.cc' || echo '$(srcdir)/'`pager_flex_frame.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pager_flex_frame.Tpo $(DEPDIR)/_pager_swig_la-pager_flex_frame.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pager_flex_frame.cc' object='_pager_swig_la-pager_flex_frame.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pager_flex_frame.lo `test -f 'pager_flex_frame.cc' || echo '$(srcdir)/'`pager_flex_frame.cc + +_pager_swig_la-pager_slicer_fb.lo: pager_slicer_fb.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pager_slicer_fb.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pager_slicer_fb.Tpo -c -o _pager_swig_la-pager_slicer_fb.lo `test -f 'pager_slicer_fb.cc' || echo '$(srcdir)/'`pager_slicer_fb.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pager_slicer_fb.Tpo $(DEPDIR)/_pager_swig_la-pager_slicer_fb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pager_slicer_fb.cc' object='_pager_swig_la-pager_slicer_fb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pager_slicer_fb.lo `test -f 'pager_slicer_fb.cc' || echo '$(srcdir)/'`pager_slicer_fb.cc + +_pager_swig_la-pager_flex_sync.lo: pager_flex_sync.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pager_flex_sync.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pager_flex_sync.Tpo -c -o _pager_swig_la-pager_flex_sync.lo `test -f 'pager_flex_sync.cc' || echo '$(srcdir)/'`pager_flex_sync.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pager_flex_sync.Tpo $(DEPDIR)/_pager_swig_la-pager_flex_sync.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pager_flex_sync.cc' object='_pager_swig_la-pager_flex_sync.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pager_flex_sync.lo `test -f 'pager_flex_sync.cc' || echo '$(srcdir)/'`pager_flex_sync.cc + +_pager_swig_la-pager_flex_deinterleave.lo: pager_flex_deinterleave.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pager_flex_deinterleave.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pager_flex_deinterleave.Tpo -c -o _pager_swig_la-pager_flex_deinterleave.lo `test -f 'pager_flex_deinterleave.cc' || echo '$(srcdir)/'`pager_flex_deinterleave.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pager_flex_deinterleave.Tpo $(DEPDIR)/_pager_swig_la-pager_flex_deinterleave.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pager_flex_deinterleave.cc' object='_pager_swig_la-pager_flex_deinterleave.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pager_flex_deinterleave.lo `test -f 'pager_flex_deinterleave.cc' || echo '$(srcdir)/'`pager_flex_deinterleave.cc + +_pager_swig_la-pager_flex_parse.lo: pager_flex_parse.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pager_flex_parse.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pager_flex_parse.Tpo -c -o _pager_swig_la-pager_flex_parse.lo `test -f 'pager_flex_parse.cc' || echo '$(srcdir)/'`pager_flex_parse.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pager_flex_parse.Tpo $(DEPDIR)/_pager_swig_la-pager_flex_parse.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pager_flex_parse.cc' object='_pager_swig_la-pager_flex_parse.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pager_flex_parse.lo `test -f 'pager_flex_parse.cc' || echo '$(srcdir)/'`pager_flex_parse.cc + +_pager_swig_la-pageri_bch3221.lo: pageri_bch3221.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pageri_bch3221.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pageri_bch3221.Tpo -c -o _pager_swig_la-pageri_bch3221.lo `test -f 'pageri_bch3221.cc' || echo '$(srcdir)/'`pageri_bch3221.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pageri_bch3221.Tpo $(DEPDIR)/_pager_swig_la-pageri_bch3221.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pageri_bch3221.cc' object='_pager_swig_la-pageri_bch3221.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pageri_bch3221.lo `test -f 'pageri_bch3221.cc' || echo '$(srcdir)/'`pageri_bch3221.cc + +_pager_swig_la-pageri_flex_modes.lo: pageri_flex_modes.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pageri_flex_modes.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pageri_flex_modes.Tpo -c -o _pager_swig_la-pageri_flex_modes.lo `test -f 'pageri_flex_modes.cc' || echo '$(srcdir)/'`pageri_flex_modes.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pageri_flex_modes.Tpo $(DEPDIR)/_pager_swig_la-pageri_flex_modes.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pageri_flex_modes.cc' object='_pager_swig_la-pageri_flex_modes.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pageri_flex_modes.lo `test -f 'pageri_flex_modes.cc' || echo '$(srcdir)/'`pageri_flex_modes.cc + +_pager_swig_la-pageri_util.lo: pageri_util.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _pager_swig_la-pageri_util.lo -MD -MP -MF $(DEPDIR)/_pager_swig_la-pageri_util.Tpo -c -o _pager_swig_la-pageri_util.lo `test -f 'pageri_util.cc' || echo '$(srcdir)/'`pageri_util.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_pager_swig_la-pageri_util.Tpo $(DEPDIR)/_pager_swig_la-pageri_util.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pageri_util.cc' object='_pager_swig_la-pageri_util.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_pager_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _pager_swig_la-pageri_util.lo `test -f 'pageri_util.cc' || echo '$(srcdir)/'`pageri_util.cc + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pager_swig_pythonPYTHON: $(pager_swig_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(pager_swig_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pager_swig_pythondir)" + @list='$(pager_swig_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(pager_swig_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pager_swig_pythondir)/$$f'"; \ + $(pager_swig_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pager_swig_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(pager_swig_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pager_swig_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-pager_swig_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(pager_swig_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(pager_swig_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(pager_swig_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(pager_swig_pythondir)/$${f}o"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-pager_swig_swigincludeHEADERS: $(pager_swig_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pager_swig_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pager_swig_swigincludedir)" + @list='$(pager_swig_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pager_swig_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pager_swig_swigincludedir)/$$f'"; \ + $(pager_swig_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pager_swig_swigincludedir)/$$f"; \ + done + +uninstall-pager_swig_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pager_swig_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pager_swig_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(pager_swig_swigincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pager_swig_pylibdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pager_swig_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(pager_swig_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool \ + clean-pager_swig_pylibLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS \ + install-pager_swig_pylibLTLIBRARIES \ + install-pager_swig_pythonPYTHON \ + install-pager_swig_swigincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS uninstall-grincludeHEADERS \ + uninstall-pager_swig_pylibLTLIBRARIES \ + uninstall-pager_swig_pythonPYTHON \ + uninstall-pager_swig_swigincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libtool clean-pager_swig_pylibLTLIBRARIES \ + ctags dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_binSCRIPTS install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-man \ + install-pager_swig_pylibLTLIBRARIES \ + install-pager_swig_pythonPYTHON \ + install-pager_swig_swigincludeHEADERS install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-dist_binSCRIPTS \ + uninstall-grincludeHEADERS \ + uninstall-pager_swig_pylibLTLIBRARIES \ + uninstall-pager_swig_pythonPYTHON \ + uninstall-pager_swig_swigincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +pager_swig_pythondir_category ?= gnuradio/pager_swig +pager_swig_pylibdir_category ?= $(pager_swig_pythondir_category) + +pager_swig.h pager_swig.py pager_swig.cc: pager_swig.i + trap 'rm -rf $(DEPDIR)/pager_swig-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/pager_swig-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/pager_swig-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/pager_swig-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/pager_swig-generate-lock; \ + else \ + while test -d $(DEPDIR)/pager_swig-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/pager_swig-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/pager_swig-generate-stamp: + 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; + $(RM) $(DEPDIR)/pager_swig.d + cp $(DEPDIR)/pager_swig.Std $(DEPDIR)/pager_swig.d + echo "" >> $(DEPDIR)/pager_swig.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/pager_swig.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/pager_swig.d + $(RM) $(DEPDIR)/pager_swig.Std + 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@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-pager/src/Makefile.swig.gen b/gr-pager/src/Makefile.swig.gen new file mode 100644 index 00000000..5cfbc66b --- /dev/null +++ b/gr-pager/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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/src/__init__.py b/gr-pager/src/__init__.py new file mode 100644 index 00000000..664b7994 --- /dev/null +++ b/gr-pager/src/__init__.py @@ -0,0 +1,26 @@ +# +# Copyright 2006 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. +# + +# The presence of this file turns this directory into a Python package + +from pager_swig import * +from flex_demod import flex_demod +from pager_utils import * diff --git a/gr-pager/src/flex_demod.py b/gr-pager/src/flex_demod.py new file mode 100644 index 00000000..b79c1ada --- /dev/null +++ b/gr-pager/src/flex_demod.py @@ -0,0 +1,64 @@ +# +# Copyright 2006,2007 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 import gr, gru, optfir, blks2 +from math import pi +import pager_swig + +class flex_demod(gr.hier_block2): + """ + FLEX pager protocol demodulation block. + + This block demodulates a band-limited, complex down-converted baseband + channel into FLEX protocol frames. + + """ + + def __init__(self, queue, freq=0.0, verbose=False, log=False): + gr.hier_block2.__init__(self, "flex_demod", + gr.io_signature(1, 1, gr.sizeof_gr_complex), + gr.io_signature(0,0,0)) + + k = 25000/(2*pi*1600) # 4800 Hz max deviation + quad = gr.quadrature_demod_cf(k) + self.connect(self, quad) + + rsamp = blks2.rational_resampler_fff(16, 25) + self.slicer = pager_swig.slicer_fb(5e-6) # DC removal averaging filter constant + self.sync = pager_swig.flex_sync() + + self.connect(quad, rsamp, self.slicer, self.sync) + + for i in range(4): + self.connect((self.sync, i), pager_swig.flex_deinterleave(), pager_swig.flex_parse(queue, freq)) + + if log: + suffix = '_'+ "%3.3f" % (freq/1e6,) + '.dat' + quad_sink = gr.file_sink(gr.sizeof_float, 'quad'+suffix) + rsamp_sink = gr.file_sink(gr.sizeof_float, 'rsamp'+suffix) + slicer_sink = gr.file_sink(gr.sizeof_char, 'slicer'+suffix) + self.connect(rsamp, rsamp_sink) + self.connect(quad, quad_sink) + self.connect(self.slicer, slicer_sink) + + def dc_offset(self): + return self.slicer.dc_offset() + \ No newline at end of file diff --git a/gr-pager/src/pager_flex_deinterleave.cc b/gr-pager/src/pager_flex_deinterleave.cc new file mode 100644 index 00000000..25ea22e3 --- /dev/null +++ b/gr-pager/src/pager_flex_deinterleave.cc @@ -0,0 +1,94 @@ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +pager_flex_deinterleave_sptr pager_make_flex_deinterleave() +{ + return pager_flex_deinterleave_sptr(new pager_flex_deinterleave()); +} + +pager_flex_deinterleave::pager_flex_deinterleave() : + gr_sync_decimator("flex_deinterleave", + gr_make_io_signature(1, 1, sizeof(unsigned char)), + gr_make_io_signature(1, 1, sizeof(gr_int32)), 32) +{ + set_output_multiple(8); // One FLEX block at a time +} + +int pager_flex_deinterleave::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const unsigned char *in = (const unsigned char *)input_items[0]; + gr_int32 *out = (gr_int32 *)output_items[0]; + + // FLEX codewords are interleaved in blocks of 256 bits or 8, 32 bit + // codes. To deinterleave we parcel each incoming bit into the MSB + // of each codeword, then switch to MSB-1, etc. This is done by shifting + // in the bits from the right on each codeword as the bits come in. + // When we are done we have a FLEX block of eight codewords, ready for + // conversion to data words. + // + // FLEX data words are recovered by reversing the bit order of the code + // word, masking off the (reversed) ECC, and inverting the remainder of + // the bits (!). + // + // The data portion of a FLEX frame consists of 11 of these deinterleaved + // and converted blocks. + // + // set_output_multiple garauntees we have output space for at least + // eight data words, and 256 bits are supplied on input + + int i, j; + for (i = 0; i < 32; i++) { + for (j = 0; j < 8; j++) { + d_codewords[j] <<= 1; + d_codewords[j] |= *in++; + } + } + + // Now convert code words into data words + for (j = 0; j < 8; j++) { + gr_int32 codeword = d_codewords[j]; + + // Apply BCH 32,21 error correction + // TODO: mark dataword when codeword fails ECC + pageri_bch3221(codeword); + + // Reverse bit order + codeword = pageri_reverse_bits32(codeword); + + // Mask off ECC then invert lower 21 bits + codeword = (codeword & 0x001FFFFF)^0x001FFFFF; + + *out++ = codeword; + } + + return j; +} diff --git a/gr-pager/src/pager_flex_deinterleave.h b/gr-pager/src/pager_flex_deinterleave.h new file mode 100644 index 00000000..7211a71a --- /dev/null +++ b/gr-pager/src/pager_flex_deinterleave.h @@ -0,0 +1,54 @@ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_PAGER_FLEX_DEINTERLEAVE_H +#define INCLUDED_PAGER_FLEX_DEINTERLEAVE_H + +#include + +class pager_flex_deinterleave; +typedef boost::shared_ptr pager_flex_deinterleave_sptr; + +pager_flex_deinterleave_sptr pager_make_flex_deinterleave(); + +/*! + * \brief flex deinterleave description + * \ingroup pager_blk + */ + +class pager_flex_deinterleave : public gr_sync_decimator +{ +private: + // Constructors + friend pager_flex_deinterleave_sptr pager_make_flex_deinterleave(); + pager_flex_deinterleave(); + + // One FLEX block of deinterleaved data + gr_int32 d_codewords[8]; + +public: + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_PAGER_FLEX_DEINTERLEAVE_H */ diff --git a/gr-pager/src/pager_flex_frame.cc b/gr-pager/src/pager_flex_frame.cc new file mode 100644 index 00000000..b707dbbc --- /dev/null +++ b/gr-pager/src/pager_flex_frame.cc @@ -0,0 +1,38 @@ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include + +pager_flex_frame_sptr pager_make_flex_frame() +{ + return pager_flex_frame_sptr(new pager_flex_frame()); +} + +pager_flex_frame::pager_flex_frame() +{ +} + +pager_flex_frame::~pager_flex_frame() +{ +} diff --git a/gr-pager/src/pager_flex_frame.h b/gr-pager/src/pager_flex_frame.h new file mode 100644 index 00000000..1f4999e2 --- /dev/null +++ b/gr-pager/src/pager_flex_frame.h @@ -0,0 +1,46 @@ +/* + * Copyright 2006 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. + */ +#ifndef INCLUDED_PAGER_FLEX_FRAME_H +#define INCLUDED_PAGER_FLEX_FRAME_H + +#include + +class pager_flex_frame; +typedef boost::shared_ptr pager_flex_frame_sptr; + +/*! + * \brief public constructor for pager_flex_frame + */ +pager_flex_frame_sptr pager_make_flex_frame(); + +/*! + * \brief flex_frame. + */ +class pager_flex_frame { + // Constructor is private to force use of shared_ptr + pager_flex_frame(); + friend pager_flex_frame_sptr pager_make_flex_frame(); + +public: + ~pager_flex_frame(); +}; + +#endif /* INCLUDED_PAGER_FLEX_FRAME_H */ diff --git a/gr-pager/src/pager_flex_frame.i b/gr-pager/src/pager_flex_frame.i new file mode 100644 index 00000000..d754f5f7 --- /dev/null +++ b/gr-pager/src/pager_flex_frame.i @@ -0,0 +1,37 @@ +/* + * Copyright 2006 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. + */ + +class pager_flex_frame; +typedef boost::shared_ptr pager_flex_frame_sptr; +%template(pager_flex_frame_sptr) boost::shared_ptr; + +%rename(flex_frame) pager_make_flex_frame; +pager_flex_frame_sptr pager_make_flex_frame(); + +/*! + * \brief flex_frame. + */ +class pager_flex_frame { + pager_flex_frame(); + +public: +}; + diff --git a/gr-pager/src/pager_flex_parse.cc b/gr-pager/src/pager_flex_parse.cc new file mode 100644 index 00000000..0819294d --- /dev/null +++ b/gr-pager/src/pager_flex_parse.cc @@ -0,0 +1,240 @@ +/* + * Copyright 2004,2006,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq) +{ + return pager_flex_parse_sptr(new pager_flex_parse(queue, freq)); +} + +pager_flex_parse::pager_flex_parse(gr_msg_queue_sptr queue, float freq) : + gr_sync_block("flex_parse", + gr_make_io_signature(1, 1, sizeof(gr_int32)), + gr_make_io_signature(0, 0, 0)), + d_queue(queue), + d_freq(freq) +{ + d_count = 0; +} + +int pager_flex_parse::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_int32 *in = (const gr_int32 *)input_items[0]; + + int i = 0; + while (i < noutput_items) { + // Accumulate one whole frame's worth of data words (88 of them) + d_datawords[d_count] = *in++; i++; + if (++d_count == 88) { + parse_data(); + d_count = 0; + } + } + + return i; +} + +/* FLEX data frames (that is, 88 data words per phase recovered after sync, + symbol decoding, dephasing, deinterleaving, error correction, and conversion + from codewords to data words) start with a block information word containing + indices of the page address field and page vector fields. +*/ + +void pager_flex_parse::parse_capcode(gr_int32 aw1, gr_int32 aw2) +{ + d_laddr = (aw1 < 0x008001L) || + (aw1 > 0x1E0000L) || + (aw1 > 0x1E7FFEL); + + if (d_laddr) + d_capcode = aw1+((aw2^0x001FFFFF)<<15)+0x1F9000; // Don't ask + else + d_capcode = aw1-0x8000; +} + +void pager_flex_parse::parse_data() +{ + // Block information word is the first data word in frame + gr_int32 biw = d_datawords[0]; + + // Nothing to see here, please move along + if (biw == 0 || biw == 0x001FFFFF) + return; + + // Vector start index is bits 15-10 + // Address start address is bits 9-8, plus one for offset + int voffset = (biw >> 10) & 0x3f; + int aoffset = ((biw >> 8) & 0x03) + 1; + + //printf("BIW:%08X AW:%02i-%02i\n", biw, aoffset, voffset); + + // Iterate through pages and dispatch to appropriate handler + for (int i = aoffset; i < voffset; i++) { + int j = voffset+i-aoffset; // Start of vector field for address @ i + + if (d_datawords[i] == 0x00000000 || + d_datawords[i] == 0x001FFFFF) + continue; // Idle codewords, invalid address + + parse_capcode(d_datawords[i], d_datawords[i+1]); + if (d_laddr) + i++; + + if (d_capcode < 0) // Invalid address, skip + continue; + + // Parse vector information word for address @ offset 'i' + gr_int32 viw = d_datawords[j]; + d_type = (page_type_t)((viw >> 4) & 0x00000007); + int mw1 = (viw >> 7) & 0x00000007F; + int len = (viw >> 14) & 0x0000007F; + + if (is_numeric_page(d_type)) + len &= 0x07; + int mw2 = mw1+len; + + if (mw1 == 0 && mw2 == 0) + continue; // Invalid VIW + + if (is_tone_page(d_type)) + mw1 = mw2 = 0; + + if (mw1 > 87 || mw2 > 87) + continue; // Invalid offsets + + d_payload.str(""); + d_payload.setf(std::ios::showpoint); + d_payload << std::setprecision(6) << std::setw(7) + << d_freq/1e6 << FIELD_DELIM + << std::setw(10) << d_capcode << FIELD_DELIM + << flex_page_desc[d_type] << FIELD_DELIM; + + if (is_alphanumeric_page(d_type)) + parse_alphanumeric(mw1, mw2-1, j); + else if (is_numeric_page(d_type)) + parse_numeric(mw1, mw2, j); + else if (is_tone_page(d_type)) + parse_tone_only(); + else + parse_unknown(mw1, mw2); + + gr_message_sptr msg = gr_make_message_from_string(std::string(d_payload.str())); + d_queue->handle(msg); + } +} + +void pager_flex_parse::parse_alphanumeric(int mw1, int mw2, int j) +{ + int frag; + bool cont; + + if (!d_laddr) { + frag = (d_datawords[mw1] >> 11) & 0x03; + cont = (d_datawords[mw1] >> 10) & 0x01; + mw1++; + } + else { + frag = (d_datawords[j+1] >> 11) & 0x03; + cont = (d_datawords[j+1] >> 10) & 0x01; + mw2--; + } + + //d_payload << frag << FIELD_DELIM; + //d_payload << cont << FIELD_DELIM; + + for (int i = mw1; i <= mw2; i++) { + gr_int32 dw = d_datawords[i]; + unsigned char ch; + + if (i > mw1 || frag != 0x03) { + ch = dw & 0x7F; + if (ch != 0x03) + d_payload << ch; + } + + ch = (dw >> 7) & 0x7F; + if (ch != 0x03) // Fill + d_payload << ch; + + ch = (dw >> 14) & 0x7F; + if (ch != 0x03) // Fill + d_payload << ch; + } +} + +void pager_flex_parse::parse_numeric(int mw1, int mw2, int j) +{ + // Get first dataword from message field or from second + // vector word if long address + gr_int32 dw; + if (!d_laddr) { + dw = d_datawords[mw1]; + mw1++; + mw2++; + } + else { + dw = d_datawords[j+1]; + } + + unsigned char digit = 0; + int count = 4; + if (d_type == FLEX_NUMBERED_NUMERIC) + count += 10; // Skip 10 header bits for numbered numeric pages + else + count += 2; // Otherwise skip 2 + + for (int i = mw1; i <= mw2; i++) { + for (int k = 0; k < 21; k++) { + // Shift LSB from data word into digit + digit = (digit >> 1) & 0x0F; + if (dw & 0x01) + digit ^= 0x08; + dw >>= 1; + if (--count == 0) { + if (digit != 0x0C) // Fill + d_payload << flex_bcd[digit]; + count = 4; + } + } + + dw = d_datawords[i]; + } +} + +void pager_flex_parse::parse_tone_only() +{ +} + +void pager_flex_parse::parse_unknown(int mw1, int mw2) +{ +} diff --git a/gr-pager/src/pager_flex_parse.h b/gr-pager/src/pager_flex_parse.h new file mode 100644 index 00000000..0f7cfb37 --- /dev/null +++ b/gr-pager/src/pager_flex_parse.h @@ -0,0 +1,72 @@ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_PAGER_FLEX_PARSE_H +#define INCLUDED_PAGER_FLEX_PARSE_H + +#include +#include +#include +#include + +class pager_flex_parse; +typedef boost::shared_ptr pager_flex_parse_sptr; + +pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq); + +#define FIELD_DELIM ((unsigned char)128) + +/*! + * \brief flex parse description + * \ingroup pager_blk + */ +class pager_flex_parse : public gr_sync_block +{ +private: + // Constructors + friend pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq); + pager_flex_parse(gr_msg_queue_sptr queue, float freq); + + std::ostringstream d_payload; + gr_msg_queue_sptr d_queue; // Destination for decoded pages + + int d_count; // Count of received codewords + gr_int32 d_datawords[88]; // 11 blocks of 8 32-bit words + + page_type_t d_type; // Current page type + int d_capcode; // Current page destination address + bool d_laddr; // Current page has long address + float d_freq; // Channel frequency + + void parse_data(); // Handle a frame's worth of data + void parse_capcode(gr_int32 aw1, gr_int32 aw2); + void parse_alphanumeric(int mw1, int mw2, int j); + void parse_numeric(int mw1, int mw2, int j); + void parse_tone_only(); + void parse_unknown(int mw1, int mw2); + +public: + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_PAGER_FLEX_PARSE_H */ diff --git a/gr-pager/src/pager_flex_sync.cc b/gr-pager/src/pager_flex_sync.cc new file mode 100644 index 00000000..6bcee8ed --- /dev/null +++ b/gr-pager/src/pager_flex_sync.cc @@ -0,0 +1,340 @@ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include + +pager_flex_sync_sptr pager_make_flex_sync() +{ + return pager_flex_sync_sptr(new pager_flex_sync()); +} + +// FLEX sync block takes input from sliced baseband stream [0-3] at specified +// channel rate. Symbol timing is established based on receiving one of the +// defined FLEX protocol synchronization words. The block outputs one FLEX frame +// worth of bits on each output phase for the data portion of the frame. Unused phases +// get all zeros, which are considered idle code words. + +pager_flex_sync::pager_flex_sync() : + gr_block ("flex_sync", + gr_make_io_signature (1, 1, sizeof(unsigned char)), + gr_make_io_signature (4, 4, sizeof(unsigned char))), + d_sync(10) // Fixed at 10 samples per baud (@ 1600 baud) +{ + enter_idle(); +} + +void pager_flex_sync::forecast(int noutput_items, gr_vector_int &inputs_required) +{ + // samples per bit X number of outputs needed + int items = noutput_items*d_spb; + for (unsigned int i = 0; i < inputs_required.size(); i++) + inputs_required[i] = items; +} + +int pager_flex_sync::index_avg(int start, int end) +{ + // modulo average + if (start < end) + return (end + start)/2; + else + return ((end + start)/2 + d_spb/2) % d_spb; +} + +bool pager_flex_sync::test_sync(unsigned char sym) +{ + // 64-bit FLEX sync code: + // AAAA:BBBBBBBB:CCCC + // + // Where BBBBBBBB is always 0xA6C6AAAA + // and AAAA^CCCC is 0xFFFF + // + // Specific values of AAAA determine what bps and encoding the + // packet is beyond the frame information word + // + // First we match on the marker field with a hamming distance < 4 + // Then we match on the outer code with a hamming distance < 4 + + d_sync[d_index] = (d_sync[d_index] << 1) | (sym < 2); + gr_int64 val = d_sync[d_index]; + gr_int32 marker = ((val & 0x0000FFFFFFFF0000ULL)) >> 16; + + if (gr_count_bits32(marker^FLEX_SYNC_MARKER) < 4) { + gr_int32 code = ((val & 0xFFFF000000000000ULL) >> 32) | + (val & 0x000000000000FFFFULL); + + for (int i = 0; i < num_flex_modes; i++) { + if (gr_count_bits32(code^flex_modes[i].sync) < 4) { + d_mode = i; + return true; + } + } + + // Marker received but doesn't match known codes + // All codes have high word inverted to low word + unsigned short high = (code & 0xFFFF0000) >> 16; + unsigned short low = code & 0x0000FFFF; + unsigned short syn = high^low; + if (syn == 0xFFFF) + fprintf(stderr, "Unknown sync code detected: %08X\n", code); + } + + return false; +} + +void pager_flex_sync::enter_idle() +{ + d_state = ST_IDLE; + d_index = 0; + d_start = 0; + d_center = 0; + d_end = 0; + d_count = 0; + d_mode = 0; + d_baudrate = 1600; + d_levels = 2; + d_spb = 16000/d_baudrate; + d_bit_a = 0; + d_bit_b = 0; + d_bit_c = 0; + d_bit_d = 0; + d_hibit = false; + fflush(stdout); +} + +void pager_flex_sync::enter_syncing() +{ + d_start = d_index; + d_state = ST_SYNCING; +} + +void pager_flex_sync::enter_sync1() +{ + d_state = ST_SYNC1; + d_end = d_index; + d_center = index_avg(d_start, d_end); // Center of goodness + d_count = 0; +} + +void pager_flex_sync::enter_sync2() +{ + d_state = ST_SYNC2; + d_count = 0; + d_baudrate = flex_modes[d_mode].baud; + d_levels = flex_modes[d_mode].levels; + d_spb = 16000/d_baudrate; + + if (d_baudrate == 3200) { + // Oversampling buffer just got halved + d_center = d_center/2; + + // We're here at the center of a 1600 baud bit + // So this hack puts the index and bit counter + // in the right place for 3200 bps. + d_index = d_index/2-d_spb/2; + d_count = -1; + } +} + +void pager_flex_sync::enter_data() +{ + d_state = ST_DATA; + d_count = 0; +} + +void pager_flex_sync::parse_fiw() +{ + // Nothing is done with these now, but these will end up getting + // passed as metadata when mblocks are available + + // Bits 31-28 are frame number related, but unknown function + // This might be a checksum + d_unknown2 = pageri_reverse_bits8((d_fiw >> 24) & 0xF0); + + // Cycle is bits 27-24, reversed + d_cycle = pageri_reverse_bits8((d_fiw >> 20) & 0xF0); + + // Frame is bits 23-17, reversed + d_frame = pageri_reverse_bits8((d_fiw >> 16) & 0xFE); + + // Bits 16-11 are some sort of marker, usually identical across + // many frames but sometimes changes between frames or modes + d_unknown1 = (d_fiw >> 11) & 0x3F; + + //printf("CYC:%02i FRM:%03i\n", d_cycle, d_frame); +} + +int pager_flex_sync::output_symbol(unsigned char sym) +{ + // Here is where we output a 1 or 0 on each phase according + // to current FLEX mode and symbol value. Unassigned phases + // are zero from the enter_idle() initialization. + // + // FLEX can transmit the data portion of the frame at either + // 1600 bps or 3200 bps, and can use either two- or four-level + // FSK encoding. + // + // At 1600 bps, 2-level, a single "phase" is transmitted with bit + // value '0' using level '3' and bit value '1' using level '0'. + // + // At 1600 bps, 4-level, a second "phase" is transmitted, and the + // di-bits are encoded with a gray code: + // + // Symbol Phase 1 Phase 2 + // ------ ------- ------- + // 0 1 1 + // 1 1 0 + // 2 0 0 + // 3 0 1 + // + // At 1600 bps, 4-level, these are called PHASE A and PHASE B. + // + // At 3200 bps, the same 1 or 2 bit encoding occurs, except that + // additionally two streams are interleaved on alternating symbols. + // Thus, PHASE A (and PHASE B if 4-level) are decoded on one symbol, + // then PHASE C (and PHASE D if 4-level) are decoded on the next. + + int bits = 0; + + if (d_baudrate == 1600) { + d_bit_a = (sym < 2); + if (d_levels == 4) + d_bit_b = (sym == 0) || (sym == 3); + + *d_phase_a++ = d_bit_a; + *d_phase_b++ = d_bit_b; + *d_phase_c++ = d_bit_c; + *d_phase_d++ = d_bit_d; + bits++; + } + else { + if (!d_hibit) { + d_bit_a = (sym < 2); + if (d_levels == 4) + d_bit_b = (sym == 0) || (sym == 3); + d_hibit = true; + } + else { + d_bit_c = (sym < 2); + if (d_levels == 4) + d_bit_d = (sym == 0) || (sym == 3); + d_hibit = false; + + *d_phase_a++ = d_bit_a; + *d_phase_b++ = d_bit_b; + *d_phase_c++ = d_bit_c; + *d_phase_d++ = d_bit_d; + bits++; + } + } + + return bits; +} + +int pager_flex_sync::general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const unsigned char *in = (const unsigned char *)input_items[0]; + d_phase_a = (unsigned char *)output_items[0]; + d_phase_b = (unsigned char *)output_items[1]; + d_phase_c = (unsigned char *)output_items[2]; + d_phase_d = (unsigned char *)output_items[3]; + + int i = 0, j = 0; + int ninputs = ninput_items[0]; + + while (i < ninputs && j < noutput_items) { + unsigned char sym = *in++; i++; + d_index = ++d_index % d_spb; + + switch (d_state) { + case ST_IDLE: + // Continually compare the received symbol stream + // against the known FLEX sync words. + if (test_sync(sym)) + enter_syncing(); + break; + + case ST_SYNCING: + // Wait until we stop seeing sync, then calculate + // the center of the bit period (d_center) + if (!test_sync(sym)) + enter_sync1(); + break; + + case ST_SYNC1: + // Skip 16 bits of dotting, then accumulate 32 bits + // of Frame Information Word. + if (d_index == d_center) { + d_fiw = (d_fiw << 1) | (sym > 1); + if (++d_count == 48) { + // FIW is accumulated, call BCH to error correct it + pageri_bch3221(d_fiw); + parse_fiw(); + enter_sync2(); + } + } + break; + + case ST_SYNC2: + // This part and the remainder of the frame are transmitted + // at either 1600 bps or 3200 bps based on the received + // FLEX sync word. The second SYNC header is 25ms of idle bits + // at either speed. + if (d_index == d_center) { + // Skip 25 ms = 40 bits @ 1600 bps, 80 @ 3200 bps + if (++d_count == d_baudrate/40) + enter_data(); + } + break; + + case ST_DATA: + // The data portion of the frame is 1760 ms long at either + // baudrate. This is 2816 bits @ 1600 bps and 5632 bits @ 3200 bps. + // The output_symbol() routine decodes and doles out the bits + // to each of the four transmitted phases of FLEX interleaved codes. + if (d_index == d_center) { + j += output_symbol(sym); + if (++d_count == d_baudrate*1760/1000) + enter_idle(); + } + break; + + default: + assert(0); // memory corruption of d_state if ever gets here + break; + } + } + + consume_each(i); + return j; +} diff --git a/gr-pager/src/pager_flex_sync.h b/gr-pager/src/pager_flex_sync.h new file mode 100644 index 00000000..b401bf53 --- /dev/null +++ b/gr-pager/src/pager_flex_sync.h @@ -0,0 +1,100 @@ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_PAGER_FLEX_SYNC_H +#define INCLUDED_PAGER_FLEX_SYNC_H + +#include + +class pager_flex_sync; +typedef boost::shared_ptr pager_flex_sync_sptr; +typedef std::vector gr_int64_vector; + +pager_flex_sync_sptr pager_make_flex_sync(); + +/*! + * \brief flex sync description + * \ingroup pager_blk + */ + +class pager_flex_sync : public gr_block +{ +private: + // Constructors + friend pager_flex_sync_sptr pager_make_flex_sync(); + pager_flex_sync(); + + // State machine transitions + void enter_idle(); + void enter_syncing(); + void enter_sync1(); + void enter_sync2(); + void enter_data(); + + int index_avg(int start, int end); + bool test_sync(unsigned char sym); + void parse_fiw(); + int output_symbol(unsigned char sym); + + // Simple state machine + enum state_t { ST_IDLE, ST_SYNCING, ST_SYNC1, ST_SYNC2, ST_DATA }; + state_t d_state; + + int d_index; // Index into current baud + int d_start; // Start of good sync + int d_center; // Center of bit + int d_end; // End of good sync + int d_count; // Bit counter + + int d_mode; // Current packet mode + int d_baudrate; // Current decoding baud rate + int d_levels; // Current decoding levels + int d_spb; // Current samples per baud + bool d_hibit; // Alternating bit indicator for 3200 bps + + gr_int32 d_fiw; // Frame information word + int d_frame; // Current FLEX frame + int d_cycle; // Current FLEX cycle + int d_unknown1; + int d_unknown2; + + unsigned char d_bit_a; + unsigned char d_bit_b; + unsigned char d_bit_c; + unsigned char d_bit_d; + + unsigned char *d_phase_a; + unsigned char *d_phase_b; + unsigned char *d_phase_c; + unsigned char *d_phase_d; + + gr_int64_vector d_sync; // Trial synchronizers + +public: + void forecast(int noutput_items, gr_vector_int &inputs_required); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_PAGER_FLEX_SYNC_H */ diff --git a/gr-pager/src/pager_slicer_fb.cc b/gr-pager/src/pager_slicer_fb.cc new file mode 100644 index 00000000..d419db78 --- /dev/null +++ b/gr-pager/src/pager_slicer_fb.cc @@ -0,0 +1,84 @@ +/* + * Copyright 2004,2006,2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +pager_slicer_fb_sptr pager_make_slicer_fb(float alpha) +{ + return pager_slicer_fb_sptr(new pager_slicer_fb(alpha)); +} + +pager_slicer_fb::pager_slicer_fb(float alpha) : + gr_sync_block ("slicer_fb", + gr_make_io_signature (1, 1, sizeof(float)), + gr_make_io_signature (1, 1, sizeof(unsigned char))) +{ + d_alpha = alpha; + d_beta = 1.0-alpha; + d_avg = 0.0; +} + +// Tracks average, minimum, and peak, then converts input into one of: +// +// [0, 1, 2, 3] +unsigned char pager_slicer_fb::slice(float sample) +{ + unsigned char decision; + + // Update DC level and remove + d_avg = d_avg*d_beta+sample*d_alpha; + sample -= d_avg; + + if (sample > 0) { + if (sample > 2.0) + decision = 3; + else + decision = 2; + } + else { + if (sample < -2.0) + decision = 0; + else + decision = 1; + } + + return decision; +} + +int pager_slicer_fb::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + float *iptr = (float *) input_items[0]; + unsigned char *optr = (unsigned char *) output_items[0]; + + int size = noutput_items; + + for (int i = 0; i < size; i++) + *optr++ = slice(*iptr++); + + return noutput_items; +} diff --git a/gr-pager/src/pager_slicer_fb.h b/gr-pager/src/pager_slicer_fb.h new file mode 100644 index 00000000..75eea3cd --- /dev/null +++ b/gr-pager/src/pager_slicer_fb.h @@ -0,0 +1,56 @@ +/* + * Copyright 2006,2007 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. + */ + +#ifndef INCLUDED_PAGER_SLICER_FB_H +#define INCLUDED_PAGER_SLICER_FB_H + +#include + +class pager_slicer_fb; +typedef boost::shared_ptr pager_slicer_fb_sptr; + +pager_slicer_fb_sptr pager_make_slicer_fb(float alpha); + +/*! + * \brief slicer description + * \ingroup pager_blk + */ +class pager_slicer_fb : public gr_sync_block +{ +private: + friend pager_slicer_fb_sptr pager_make_slicer_fb(float alpha); + pager_slicer_fb(float alpha); + + unsigned char slice(float sample); + + float d_alpha; // DC removal time constant + float d_beta; // 1.0-d_alpha + float d_avg; // Average value for DC offset subtraction + +public: + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + float dc_offset() const { return d_avg; } +}; + +#endif /* INCLUDED_PAGER_SLICER_FB_H */ diff --git a/gr-pager/src/pager_swig.i b/gr-pager/src/pager_swig.i new file mode 100644 index 00000000..aeb576db --- /dev/null +++ b/gr-pager/src/pager_swig.i @@ -0,0 +1,89 @@ +/* + * Copyright 2005,2006,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. + */ + +%include "gnuradio.i" + +%{ +#include "pager_flex_frame.h" +#include "pager_slicer_fb.h" +#include "pager_flex_sync.h" +#include "pager_flex_deinterleave.h" +#include "pager_flex_parse.h" +%} + +%include "pager_flex_frame.i" + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(pager,slicer_fb); + +pager_slicer_fb_sptr pager_make_slicer_fb(float alpha); + +class pager_slicer_fb : public gr_sync_block +{ +private: + pager_slicer_fb(float alpha); + +public: + float dc_offset() const { return d_avg; } +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(pager,flex_sync); + +pager_flex_sync_sptr pager_make_flex_sync(); + +class pager_flex_sync : public gr_block +{ +private: + pager_flex_sync(); + +public: +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(pager,flex_deinterleave); + +pager_flex_deinterleave_sptr pager_make_flex_deinterleave(); + +class pager_flex_deinterleave : public gr_sync_decimator +{ +private: + pager_flex_deinterleave(); + +public: +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(pager,flex_parse); + +pager_flex_parse_sptr pager_make_flex_parse(gr_msg_queue_sptr queue, float freq); + +class pager_flex_parse : public gr_block +{ +private: + pager_flex_parse(gr_msg_queue_sptr queue, float freq); + +public: +}; diff --git a/gr-pager/src/pager_utils.py b/gr-pager/src/pager_utils.py new file mode 100644 index 00000000..72aac682 --- /dev/null +++ b/gr-pager/src/pager_utils.py @@ -0,0 +1,60 @@ +# +# Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +from gnuradio import gr +import gnuradio.gr.gr_threading as _threading +from string import split, join, printable +import time + +def make_trans_table(): + table = 256 * ['.'] + for i in range(256): + if (i < 32): + table[i] = '.' + else: + table[i] = chr(i) + return ''.join(table) + +_trans_table = make_trans_table() + +def make_printable(s): + return s.translate(_trans_table) + + +class queue_runner(_threading.Thread): + def __init__(self, msgq): + _threading.Thread.__init__(self) + self.msgq = msgq + self.done = False + self.start() + + def run(self): + while 1: + msg = self.msgq.delete_head() # Blocking read + if msg.type() != 0: + break + + page = join(split(msg.to_string(), chr(128)), '|') + s = make_printable(page) + print msg.type(), s + + def end(self): + self.msgq.insert_tail(gr.message(1)) + self.done = True diff --git a/gr-pager/src/pageri_bch3221.cc b/gr-pager/src/pageri_bch3221.cc new file mode 100644 index 00000000..984ed4d4 --- /dev/null +++ b/gr-pager/src/pageri_bch3221.cc @@ -0,0 +1,36 @@ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +// Corrects supplied data word according to BCH3221 encoding and +// returns the number of errors detected/corrected. +// +// Not implemented yet + +int pageri_bch3221(gr_int32 &data) +{ + return 0; +} diff --git a/gr-pager/src/pageri_bch3221.h b/gr-pager/src/pageri_bch3221.h new file mode 100644 index 00000000..9dd2be86 --- /dev/null +++ b/gr-pager/src/pageri_bch3221.h @@ -0,0 +1,31 @@ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_PAGERI_BCH3221_H +#define INCLUDED_PAGERI_BCH3221_H + +#include + +// Perform BCH (32,21) error correction on supplied data +// Return number of errors found/corrected (0, 1, or 2) +int pageri_bch3221(gr_int32 &data); + +#endif /* INCLUDED_PAGERI_BCH3221_H */ diff --git a/gr-pager/src/pageri_flex_modes.cc b/gr-pager/src/pageri_flex_modes.cc new file mode 100644 index 00000000..4553e0bf --- /dev/null +++ b/gr-pager/src/pageri_flex_modes.cc @@ -0,0 +1,57 @@ +/* + * Copyright 2006,2007 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "pageri_flex_modes.h" + +const flex_mode_t flex_modes[] = +{ + { 0x870C78F3, 1600, 2 }, + { 0xB0684F97, 1600, 4 }, +// { 0xUNKNOWN, 3200, 2 }, + { 0xDEA0215F, 3200, 4 }, + { 0x4C7CB383, 3200, 4 } +}; + +const int num_flex_modes = sizeof(flex_modes)/sizeof(flex_modes[0]); + +unsigned char flex_bcd[17] = "0123456789 U -]["; + +const char *flex_page_desc[] = +{ + "ENC", + "UNK", + "TON", + "NUM", + "SPN", + "ALN", + "BIN", + "NNM" +}; + +int find_flex_mode(gr_int32 sync_code) +{ + for (int i = 0; i < num_flex_modes; i++) + if (flex_modes[i].sync == sync_code) + return i; + + // Not found + return -1; +} diff --git a/gr-pager/src/pageri_flex_modes.h b/gr-pager/src/pageri_flex_modes.h new file mode 100644 index 00000000..bc53c12b --- /dev/null +++ b/gr-pager/src/pageri_flex_modes.h @@ -0,0 +1,74 @@ +/* + * Copyright 2006,2007 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. + */ + +#ifndef INCLUDED_PAGERI_FLEX_MODES_H +#define INCLUDED_PAGERI_FLEX_MODES_H + +#include + +#define FLEX_SYNC_MARKER 0xA6C6AAAA + +typedef struct flex_mode +{ + gr_int32 sync; // Outer synchronization code + unsigned int baud; // Baudrate of SYNC2 and DATA + unsigned int levels; // FSK encoding of SYNC2 and DATA +} +flex_mode_t; + +extern const flex_mode_t flex_modes[]; +extern const char *flex_page_desc[]; +extern const int num_flex_modes; +int find_flex_mode(gr_int32 sync_code); +extern unsigned char flex_bcd[]; + +typedef enum { + FLEX_SECURE, + FLEX_UNKNOWN, + FLEX_TONE, + FLEX_STANDARD_NUMERIC, + FLEX_SPECIAL_NUMERIC, + FLEX_ALPHANUMERIC, + FLEX_BINARY, + FLEX_NUMBERED_NUMERIC, + NUM_FLEX_PAGE_TYPES +} +page_type_t; + +inline bool is_alphanumeric_page(page_type_t type) +{ + return (type == FLEX_ALPHANUMERIC || + type == FLEX_SECURE); +} + +inline bool is_numeric_page(page_type_t type) +{ + return (type == FLEX_STANDARD_NUMERIC || + type == FLEX_SPECIAL_NUMERIC || + type == FLEX_NUMBERED_NUMERIC); +} + +inline bool is_tone_page(page_type_t type) +{ + return (type == FLEX_TONE); +} + +#endif // INCLUDED_PAGERI_FLEX_MODES_H diff --git a/gr-pager/src/pageri_util.cc b/gr-pager/src/pageri_util.cc new file mode 100644 index 00000000..bdd09570 --- /dev/null +++ b/gr-pager/src/pageri_util.cc @@ -0,0 +1,46 @@ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +unsigned char pageri_reverse_bits8(unsigned char val) +{ + // This method was attributed to Rich Schroeppel in the Programming + // Hacks section of Beeler, M., Gosper, R. W., and Schroeppel, R. + // HAKMEM. MIT AI Memo 239, Feb. 29, 1972. + // + // Reverses 8 bits in 5 machine operations with 64 bit arch + return (val * 0x0202020202ULL & 0x010884422010ULL) % 1023; +} + +gr_int32 pageri_reverse_bits32(gr_int32 val) +{ + gr_int32 out = 0x00000000; + out |= (pageri_reverse_bits8((val >> 24) & 0x000000FF) ); + out |= (pageri_reverse_bits8((val >> 16) & 0x000000FF) << 8); + out |= (pageri_reverse_bits8((val >> 8) & 0x000000FF) << 16); + out |= (pageri_reverse_bits8((val ) & 0x000000FF) << 24); + return out; +} diff --git a/gr-pager/src/pageri_util.h b/gr-pager/src/pageri_util.h new file mode 100644 index 00000000..78ae7aab --- /dev/null +++ b/gr-pager/src/pageri_util.h @@ -0,0 +1,30 @@ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_PAGERI_UTIL_H +#define INCLUDED_PAGERI_UTIL_H + +#include + +unsigned char pageri_reverse_bits8(unsigned char val); +gr_int32 pageri_reverse_bits32(gr_int32 val); + +#endif /* INCLUDED_PAGERI_UTIL_H */ diff --git a/gr-pager/src/qa_pager.py b/gr-pager/src/qa_pager.py new file mode 100755 index 00000000..5bf72b56 --- /dev/null +++ b/gr-pager/src/qa_pager.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# +# Copyright 2004,2006 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 import gr, gr_unittest +import pager_swig + +class qa_pgr(gr_unittest.TestCase): + + def setUp (self): + self.tb = gr.top_block () + + def tearDown (self): + self.tb = None + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gr-pager/src/run_tests.in b/gr-pager/src/run_tests.in new file mode 100644 index 00000000..6bb0c398 --- /dev/null +++ b/gr-pager/src/run_tests.in @@ -0,0 +1,10 @@ +#!/bin/sh + +# 1st parameter is absolute path to component source directory +# 2nd parameter is absolute path to component build directory +# 3rd parameter is path to Python QA directory + +@top_builddir@/run_tests.sh \ + @abs_top_srcdir@/gr-pager \ + @abs_top_builddir@/gr-pager \ + @srcdir@ diff --git a/gr-pager/src/usrp_flex.py b/gr-pager/src/usrp_flex.py new file mode 100755 index 00000000..f8d9d25b --- /dev/null +++ b/gr-pager/src/usrp_flex.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007,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. +# + +from gnuradio import gr, gru, usrp, optfir, eng_notation, pager +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import time, os, sys + +""" +This example application demonstrates receiving and demodulating the +FLEX pager protocol. + +The following are required command line parameters: + +-f FREQ USRP receive frequency + +The following are optional command line parameters: + +-R SUBDEV Daughter board specification, defaults to first found +-F FILE Read samples from a file instead of USRP. +-c FREQ Calibration offset. Gets added to receive frequency. + Defaults to 0.0 Hz. +-g GAIN Daughterboard gain setting. Defaults to mid-range. +-l Log flow graph to files (LOTS of data) +-v Verbose output + +Once the program is running, ctrl-break (Ctrl-C) stops operation. +""" + +class app_top_block(gr.top_block): + def __init__(self, options, queue): + gr.top_block.__init__(self, "usrp_flex") + self.options = options + self.offset = 0.0 + self.adj_time = time.time() + self.verbose = options.verbose + + if options.from_file is None: + # Set up USRP source with specified RX daughterboard + self.src = usrp.source_c() + if options.rx_subdev_spec == None: + options.rx_subdev_spec = usrp.pick_rx_subdevice(self.src) + self.subdev = usrp.selected_subdev(self.src, options.rx_subdev_spec) + self.src.set_mux(usrp.determine_rx_mux_value(self.src, options.rx_subdev_spec)) + + # Grab 250 KHz of spectrum (sample rate becomes 250 ksps complex) + self.src.set_decim_rate(256) + + # If no gain specified, set to midrange + if options.gain is None: + g = self.subdev.gain_range() + options.gain = (g[0]+g[1])/2.0 + self.subdev.set_gain(options.gain) + + # Tune daughterboard + actual_frequency = options.frequency+options.calibration + tune_result = usrp.tune(self.src, 0, self.subdev, actual_frequency) + if not tune_result: + sys.stderr.write("Failed to set center frequency to "+`actual_frequency`+"\n") + sys.exit(1) + + if options.verbose: + print "Using RX daughterboard", self.subdev.side_and_name() + print "USRP gain is", options.gain + print "USRP tuned to", actual_frequency + + else: + # Use supplied file as source of samples + self.src = gr.file_source(gr.sizeof_gr_complex, options.from_file) + if options.verbose: + print "Reading samples from", options.from_file + + if options.log and not options.from_file: + usrp_sink = gr.file_sink(gr.sizeof_gr_complex, 'usrp.dat') + self.connect(self.src, usrp_sink) + + # Set up 22KHz-wide bandpass about center frequency. Decimate by 10 + # to get channel rate of 25Ksps + taps = optfir.low_pass(1.0, # Filter gain + 250e3, # Sample rate + 11000, # One-sided modulation bandwidth + 12500, # One-sided channel bandwidth + 0.1, # Passband ripple + 60) # Stopband attenuation + + if options.verbose: + print "Channel filter has", len(taps), "taps." + + self.chan = gr.freq_xlating_fir_filter_ccf(10, # Decimation rate + taps, # Filter taps + 0.0, # Offset frequency + 250e3) # Sample rate + + if options.log: + chan_sink = gr.file_sink(gr.sizeof_gr_complex, 'chan.dat') + self.connect(self.chan, chan_sink) + + # FLEX protocol demodulator + self.flex = pager.flex_demod(queue, options.frequency, options.verbose, options.log) + + self.connect(self.src, self.chan, self.flex) + + def freq_offset(self): + return self.flex.dc_offset()*1600 + + def adjust_freq(self): + if time.time() - self.adj_time > 1.6: # Only do it once per FLEX frame + self.adj_time = time.time() + self.offset -= self.freq_offset() + self.chan.set_center_freq(self.offset) + if self.verbose: + print "Channel frequency offset (Hz):", int(self.offset) + +def main(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-f", "--frequency", type="eng_float", default=None, + help="set receive frequency to Hz", metavar="Hz") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", + help="select USRP Rx side A or B", metavar="SUBDEV") + parser.add_option("-c", "--calibration", type="eng_float", default=0.0, + help="set frequency offset to Hz", metavar="Hz") + parser.add_option("-g", "--gain", type="int", default=None, + help="set RF gain", metavar="dB") + parser.add_option("-l", "--log", action="store_true", default=False, + help="log flowgraph to files (LOTS of data)") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="display debug output") + parser.add_option("-F", "--from-file", default=None, + help="read samples from file instead of USRP") + (options, args) = parser.parse_args() + + if len(args) > 0 or (options.frequency == None and options.from_file == None): + print "Run 'usrp_flex.py -h' for options." + sys.exit(1) + + if options.frequency == None: + options.frequency = 0.0 + + # Flow graph emits pages into message queue + queue = gr.msg_queue() + tb = app_top_block(options, queue) + runner = pager.queue_runner(queue) + + try: + tb.run() + except KeyboardInterrupt: + pass + + runner.end() + + +if __name__ == "__main__": + main() diff --git a/gr-pager/src/usrp_flex_all.py b/gr-pager/src/usrp_flex_all.py new file mode 100755 index 00000000..14f9151d --- /dev/null +++ b/gr-pager/src/usrp_flex_all.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007,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. +# + +from gnuradio import gr, gru, usrp, optfir, eng_notation, blks2, pager +from gnuradio.eng_option import eng_option +from optparse import OptionParser +from string import split, join, printable +import time + +class app_top_block(gr.top_block): + def __init__(self, options, queue): + gr.top_block.__init__(self, "usrp_flex_all") + + if options.from_file is not None: + src = gr.file_source(gr.sizeof_gr_complex, options.from_file) + if options.verbose: + print "Reading samples from file", options.from_file + else: + src = usrp.source_c() + if options.rx_subdev_spec is None: + options.rx_subdev_spec = usrp.pick_rx_subdevice(src) + subdev = usrp.selected_subdev(src, options.rx_subdev_spec) + src.set_mux(usrp.determine_rx_mux_value(src, options.rx_subdev_spec)) + src.set_decim_rate(20) + result = usrp.tune(src, 0, subdev, 930.5125e6+options.calibration) + if options.verbose: + print "Using", subdev.name(), " for receiving." + print "Tuned USRP to", 930.5125e6+options.calibration + + taps = gr.firdes.low_pass(1.0, + 1.0, + 1.0/128.0*0.4, + 1.0/128.0*0.1, + gr.firdes.WIN_HANN) + + if options.verbose: + print "Channel filter has", len(taps), "taps" + + bank = blks2.analysis_filterbank(128, taps) + self.connect(src, bank) + + if options.log and options.from_file == None: + src_sink = gr.file_sink(gr.sizeof_gr_complex, 'usrp.dat') + self.connect(src, src_sink) + + for i in range(128): + if i < 64: + freq = 930.5e6+i*25e3 + else: + freq = 928.9e6+(i-64)*25e3 + + if (freq < 929.0e6 or freq > 932.0e6): + self.connect((bank, i), gr.null_sink(gr.sizeof_gr_complex)) + else: + self.connect((bank, i), pager.flex_demod(queue, freq, options.verbose, options.log)) + if options.log: + self.connect((bank, i), gr.file_sink(gr.sizeof_gr_complex, 'chan_'+'%3.3f'%(freq/1e6)+'.dat')) + +def main(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", + help="select USRP Rx side A or B (default=first daughterboard found)") + parser.add_option("-c", "--calibration", type="eng_float", default=0.0, + help="set frequency offset to Hz", metavar="Hz") + parser.add_option("-g", "--gain", type="int", + help="set RF gain", metavar="dB") + parser.add_option("-F", "--from-file", default=None, + help="Read from file instead of USRP") + parser.add_option("-l", "--log", action="store_true", default=False, + help="log flowgraph to files (LOTS of data)") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="display debug output") + (options, args) = parser.parse_args() + + if options.verbose: + print options + + queue = gr.msg_queue() + tb = app_top_block(options, queue) + runner = pager.queue_runner(queue) + + try: + tb.run() + except KeyboardInterrupt: + pass + + runner.end() + +if __name__ == "__main__": + main() diff --git a/gr-pager/src/usrp_flex_band.py b/gr-pager/src/usrp_flex_band.py new file mode 100755 index 00000000..06c2488c --- /dev/null +++ b/gr-pager/src/usrp_flex_band.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007,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. +# + +from gnuradio import gr, gru, usrp, optfir, eng_notation, blks2, pager +from gnuradio.eng_option import eng_option +from optparse import OptionParser + +class app_top_block(gr.top_block): + def __init__(self, options, queue): + gr.top_block.__init__(self, "usrp_flex_all") + self.subdev = None + + if options.from_file is not None: + self.src = gr.file_source(gr.sizeof_gr_complex, options.from_file) + if options.verbose: + print "Reading samples from file", options.from_file + else: + self.src = usrp.source_c() + if options.rx_subdev_spec is None: + options.rx_subdev_spec = usrp.pick_rx_subdevice(self.src) + self.subdev = usrp.selected_subdev(self.src, options.rx_subdev_spec) + self.src.set_mux(usrp.determine_rx_mux_value(self.src, options.rx_subdev_spec)) + self.src.set_decim_rate(64) + frequency = options.frequency+options.calibration + result = usrp.tune(self.src, 0, self.subdev, frequency) + if options.verbose: + print "Using", self.subdev.name(), " for receiving." + print "Tuned USRP to", frequency + + taps = gr.firdes.low_pass(1.0, + 1.0, + 1.0/40.0*0.4, + 1.0/40.0*0.1, + gr.firdes.WIN_HANN) + + if options.verbose: + print "Channel filter has", len(taps), "taps" + + bank = blks2.analysis_filterbank(40, taps) + self.connect(self.src, bank) + + if options.log and options.from_file == None: + src_sink = gr.file_sink(gr.sizeof_gr_complex, 'usrp.dat') + self.connect(self.src, src_sink) + + for i in range(40): + if i < 20: + freq = options.frequency+i*25e3 + else: + freq = options.frequency-0.5e6+(i-20)*25e3 + + self.connect((bank, i), pager.flex_demod(queue, freq, options.verbose, options.log)) + if options.log: + self.connect((bank, i), gr.file_sink(gr.sizeof_gr_complex, 'chan_'+'%3.3f'%(freq/1e6)+'.dat')) + + +def main(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-f", "--frequency", type="eng_float", default=929.5e6, + help="set receive center frequency to Hz", metavar="Hz") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", + help="select USRP Rx side A or B (default=first daughterboard found)") + parser.add_option("-c", "--calibration", type="eng_float", default=0.0, + help="set frequency offset to Hz", metavar="Hz") + parser.add_option("-g", "--gain", type="int", + help="set RF gain", metavar="dB") + parser.add_option("-F", "--from-file", default=None, + help="Read from file instead of USRP") + parser.add_option("-l", "--log", action="store_true", default=False, + help="log flowgraph to files (LOTS of data)") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="display debug output") + (options, args) = parser.parse_args() + + if options.verbose: + print options + + queue = gr.msg_queue() + tb = app_top_block(options, queue) + runner = pager.queue_runner(queue) + + try: + tb.run() + except KeyboardInterrupt: + pass + + runner.end() + + +if __name__ == "__main__": + main() diff --git a/gr-qtgui/Makefile.am b/gr-qtgui/Makefile.am new file mode 100644 index 00000000..d53f96c1 --- /dev/null +++ b/gr-qtgui/Makefile.am @@ -0,0 +1,25 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src +DIST_SUBDIRS = src diff --git a/gr-qtgui/Makefile.in b/gr-qtgui/Makefile.in new file mode 100644 index 00000000..57cd9013 --- /dev/null +++ b/gr-qtgui/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-qtgui +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src +DIST_SUBDIRS = src +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-qtgui/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-qtgui/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-qtgui/src/Makefile.am b/gr-qtgui/src/Makefile.am new file mode 100644 index 00000000..7230d609 --- /dev/null +++ b/gr-qtgui/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2008 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. +# + +SUBDIRS = lib python diff --git a/gr-qtgui/src/Makefile.in b/gr-qtgui/src/Makefile.in new file mode 100644 index 00000000..4ab4741b --- /dev/null +++ b/gr-qtgui/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-qtgui/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = lib python +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-qtgui/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-qtgui/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-qtgui/src/lib/ConstellationDisplayPlot.cc b/gr-qtgui/src/lib/ConstellationDisplayPlot.cc new file mode 100644 index 00000000..10355f9f --- /dev/null +++ b/gr-qtgui/src/lib/ConstellationDisplayPlot.cc @@ -0,0 +1,184 @@ +#ifndef CONSTELLATION_DISPLAY_PLOT_C +#define CONSTELLATION_DISPLAY_PLOT_C + +#include + +#include +#include + + +class ConstellationDisplayZoomer: public QwtPlotZoomer +{ +public: + ConstellationDisplayZoomer(QwtPlotCanvas* canvas):QwtPlotZoomer(canvas) + { + setTrackerMode(QwtPicker::AlwaysOn); + } + + virtual ~ConstellationDisplayZoomer(){ + + } + + virtual void updateTrackerText(){ + updateDisplay(); + } + +protected: + virtual QwtText trackerText( const QwtDoublePoint& p ) const + { + QwtText t(QString("Sample %1, %2 V").arg(p.x(), 0, 'f', 0).arg(p.y(), 0, 'f', 4)); + + return t; + } +}; + +ConstellationDisplayPlot::ConstellationDisplayPlot(QWidget* parent):QwtPlot(parent){ + timespec_reset(&_lastReplot); + + resize(parent->width(), parent->height()); + + _displayIntervalTime = (1.0/10.0); // 1/10 of a second between updates + + _numPoints = 1024; + _realDataPoints = new double[_numPoints]; + _imagDataPoints = new double[_numPoints]; + + // Disable polygon clipping + QwtPainter::setDeviceClipping(false); + + // We don't need the cache here + canvas()->setPaintAttribute(QwtPlotCanvas::PaintCached, false); + canvas()->setPaintAttribute(QwtPlotCanvas::PaintPacked, false); + + QPalette palette; + palette.setColor(canvas()->backgroundRole(), QColor("white")); + canvas()->setPalette(palette); + + setAxisScaleEngine(QwtPlot::xBottom, new QwtLinearScaleEngine); + //setAxisScale(QwtPlot::xBottom, -1.0, 1.0); + set_xaxis(-2.0, 2.0); + setAxisTitle(QwtPlot::xBottom, "In-phase"); + + setAxisScaleEngine(QwtPlot::yLeft, new QwtLinearScaleEngine); + //setAxisScale(QwtPlot::yLeft, -1.0, 1.0); + set_yaxis(-2.0, 2.0); + setAxisTitle(QwtPlot::yLeft, "Quadrature"); + + // Automatically deleted when parent is deleted + _plot_curve = new QwtPlotCurve("Constellation Points"); + _plot_curve->attach(this); + _plot_curve->setPen(QPen(Qt::blue, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + _plot_curve->setStyle(QwtPlotCurve::Dots); + _plot_curve->setRawData(_realDataPoints, _imagDataPoints, _numPoints); + + memset(_realDataPoints, 0x0, _numPoints*sizeof(double)); + memset(_imagDataPoints, 0x0, _numPoints*sizeof(double)); + + replot(); + + _zoomer = new ConstellationDisplayZoomer(canvas()); +#if QT_VERSION < 0x040000 + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#else + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#endif + _zoomer->setMousePattern(QwtEventPattern::MouseSelect3, + Qt::RightButton); + + _panner = new QwtPlotPanner(canvas()); + _panner->setAxisEnabled(QwtPlot::yRight, false); + _panner->setMouseButton(Qt::MidButton); + + // Avoid jumping when labels with more/less digits + // appear/disappear when scrolling vertically + + const QFontMetrics fm(axisWidget(QwtPlot::yLeft)->font()); + QwtScaleDraw *sd = axisScaleDraw(QwtPlot::yLeft); + sd->setMinimumExtent( fm.width("100.00") ); + + const QColor c(Qt::darkRed); + _zoomer->setRubberBandPen(c); + _zoomer->setTrackerPen(c); + + connect(this, SIGNAL( legendChecked(QwtPlotItem *, bool ) ), + this, SLOT( LegendEntryChecked(QwtPlotItem *, bool ) )); +} + +ConstellationDisplayPlot::~ConstellationDisplayPlot(){ + delete[] _realDataPoints; + delete[] _imagDataPoints; + + // _fft_plot_curves deleted when parent deleted + // _zoomer and _panner deleted when parent deleted +} + +void +ConstellationDisplayPlot::set_xaxis(double min, double max) +{ + setAxisScale(QwtPlot::xBottom, min, max); +} + +void +ConstellationDisplayPlot::set_yaxis(double min, double max) +{ + setAxisScale(QwtPlot::yLeft, min, max); +} + +void +ConstellationDisplayPlot::set_axis(double xmin, double xmax, + double ymin, double ymax) +{ + set_xaxis(xmin, xmax); + set_yaxis(ymin, ymax); +} + +void ConstellationDisplayPlot::replot(){ + + const timespec startTime = get_highres_clock(); + + QwtPlot::replot(); + + double differenceTime = (diff_timespec(get_highres_clock(), startTime)); + + differenceTime *= 99.0; + // Require at least a 10% duty cycle + if(differenceTime > (1.0/10.0)){ + _displayIntervalTime = differenceTime; + } +} + +void ConstellationDisplayPlot::PlotNewData(const double* realDataPoints, const double* imagDataPoints, const int64_t numDataPoints){ + if(numDataPoints > 0){ + + if(numDataPoints != _numPoints){ + _numPoints = numDataPoints; + + delete[] _realDataPoints; + delete[] _imagDataPoints; + _realDataPoints = new double[_numPoints]; + _imagDataPoints = new double[_numPoints]; + + _plot_curve->setRawData(_realDataPoints, _imagDataPoints, _numPoints); + } + memcpy(_realDataPoints, realDataPoints, numDataPoints*sizeof(double)); + memcpy(_imagDataPoints, imagDataPoints, numDataPoints*sizeof(double)); + + } + + // Allow at least a 50% duty cycle + if(diff_timespec(get_highres_clock(), _lastReplot) > _displayIntervalTime){ + // Only replot the screen if it is visible + if(isVisible()){ + replot(); + } + _lastReplot = get_highres_clock(); + } +} + +void ConstellationDisplayPlot::LegendEntryChecked(QwtPlotItem* plotItem, bool on){ + plotItem->setVisible(!on); +} + +#endif /* CONSTELLATION_DISPLAY_PLOT_C */ diff --git a/gr-qtgui/src/lib/ConstellationDisplayPlot.h b/gr-qtgui/src/lib/ConstellationDisplayPlot.h new file mode 100644 index 00000000..612cd2b3 --- /dev/null +++ b/gr-qtgui/src/lib/ConstellationDisplayPlot.h @@ -0,0 +1,55 @@ +#ifndef CONSTELLATION_DISPLAY_PLOT_HPP +#define CONSTELLATION_DISPLAY_PLOT_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ConstellationDisplayPlot:public QwtPlot{ + Q_OBJECT + +public: + ConstellationDisplayPlot(QWidget*); + virtual ~ConstellationDisplayPlot(); + + void PlotNewData(const double* realDataPoints, const double* imagDataPoints, + const int64_t numDataPoints); + + virtual void replot(); + + void set_xaxis(double min, double max); + void set_yaxis(double min, double max); + void set_axis(double xmin, double xmax, + double ymin, double ymax); + +protected slots: + void LegendEntryChecked(QwtPlotItem *plotItem, bool on); + +protected: + +private: + QwtPlotCurve* _plot_curve; + + QwtPlotPanner* _panner; + QwtPlotZoomer* _zoomer; + + double* _realDataPoints; + double* _imagDataPoints; + + timespec _lastReplot; + + int64_t _numPoints; + + double _displayIntervalTime; +}; + +#endif /* CONSTELLATION_DISPLAY_PLOT_HPP */ diff --git a/gr-qtgui/src/lib/ConstellationDisplayPlot_moc.cc b/gr-qtgui/src/lib/ConstellationDisplayPlot_moc.cc new file mode 100644 index 00000000..ce1be097 --- /dev/null +++ b/gr-qtgui/src/lib/ConstellationDisplayPlot_moc.cc @@ -0,0 +1,74 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'ConstellationDisplayPlot.h' +** +** Created: Tue Jul 14 15:57:22 2009 +** by: The Qt Meta Object Compiler version 61 (Qt 4.5.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "ConstellationDisplayPlot.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'ConstellationDisplayPlot.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_ConstellationDisplayPlot[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 1, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // slots: signature, parameters, type, tag, flags + 38, 26, 25, 25, 0x09, + + 0 // eod +}; + +static const char qt_meta_stringdata_ConstellationDisplayPlot[] = { + "ConstellationDisplayPlot\0\0plotItem,on\0" + "LegendEntryChecked(QwtPlotItem*,bool)\0" +}; + +const QMetaObject ConstellationDisplayPlot::staticMetaObject = { + { &QwtPlot::staticMetaObject, qt_meta_stringdata_ConstellationDisplayPlot, + qt_meta_data_ConstellationDisplayPlot, 0 } +}; + +const QMetaObject *ConstellationDisplayPlot::metaObject() const +{ + return &staticMetaObject; +} + +void *ConstellationDisplayPlot::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_ConstellationDisplayPlot)) + return static_cast(const_cast< ConstellationDisplayPlot*>(this)); + return QwtPlot::qt_metacast(_clname); +} + +int ConstellationDisplayPlot::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QwtPlot::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: LegendEntryChecked((*reinterpret_cast< QwtPlotItem*(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break; + default: ; + } + _id -= 1; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/gr-qtgui/src/lib/FrequencyDisplayPlot.cc b/gr-qtgui/src/lib/FrequencyDisplayPlot.cc new file mode 100644 index 00000000..154c8d23 --- /dev/null +++ b/gr-qtgui/src/lib/FrequencyDisplayPlot.cc @@ -0,0 +1,420 @@ +#ifndef FREQUENCY_DISPLAY_PLOT_C +#define FREQUENCY_DISPLAY_PLOT_C + +#include + +#include + +class FreqPrecisionClass +{ +public: + FreqPrecisionClass(const int freqPrecision) + { + _frequencyPrecision = freqPrecision; + } + + virtual ~FreqPrecisionClass() + { + } + + virtual unsigned int GetFrequencyPrecision() const + { + return _frequencyPrecision; + } + + virtual void SetFrequencyPrecision(const unsigned int newPrecision) + { + _frequencyPrecision = newPrecision; + } +protected: + unsigned int _frequencyPrecision; + +private: + +}; + +class FreqDisplayScaleDraw: public QwtScaleDraw, public FreqPrecisionClass +{ +public: + FreqDisplayScaleDraw(const unsigned int precision) + : QwtScaleDraw(), FreqPrecisionClass(precision) + { + } + + virtual ~FreqDisplayScaleDraw() + { + } + + virtual QwtText label(double value) const + { + return QString("%1").arg(value, 0, 'f', GetFrequencyPrecision()); + } + +protected: + +private: + +}; + +class FreqDisplayZoomer: public QwtPlotZoomer, public FreqPrecisionClass +{ +public: + FreqDisplayZoomer(QwtPlotCanvas* canvas, const unsigned int freqPrecision) + : QwtPlotZoomer(canvas),FreqPrecisionClass(freqPrecision) + { + setTrackerMode(QwtPicker::AlwaysOn); + } + + virtual ~FreqDisplayZoomer(){ + + } + + virtual void updateTrackerText(){ + updateDisplay(); + } + +protected: + virtual QwtText trackerText( const QwtDoublePoint& p ) const + { + QwtText t(QString("%1 %2, %3 dB").arg(p.x(), 0, 'f', GetFrequencyPrecision()).arg( (GetFrequencyPrecision() == 0) ? "Hz" : "kHz").arg(p.y(), 0, 'f', 2)); + + return t; + } +}; + +FrequencyDisplayPlot::FrequencyDisplayPlot(QWidget* parent) + : QwtPlot(parent) +{ + _startFrequency = 0; + _stopFrequency = 4000; + + timespec_reset(&_lastReplot); + + resize(parent->width(), parent->height()); + + _displayIntervalTime = (1.0/10.0); // 1/10 of a second between updates + + _useCenterFrequencyFlag = false; + + _numPoints = 1024; + _dataPoints = new double[_numPoints]; + _minFFTPoints = new double[_numPoints]; + _maxFFTPoints = new double[_numPoints]; + _xAxisPoints = new double[_numPoints]; + + // Disable polygon clipping + QwtPainter::setDeviceClipping(false); + + // We don't need the cache here + canvas()->setPaintAttribute(QwtPlotCanvas::PaintCached, false); + canvas()->setPaintAttribute(QwtPlotCanvas::PaintPacked, false); + + QPalette palette; + palette.setColor(canvas()->backgroundRole(), QColor("white")); + canvas()->setPalette(palette); + + setAxisScaleDraw(QwtPlot::xBottom, new FreqDisplayScaleDraw(0)); + setAxisScale(QwtPlot::xBottom, _startFrequency, _stopFrequency); + setAxisTitle(QwtPlot::xBottom, "Frequency (Hz)"); + + _minYAxis = -120; + _maxYAxis = 10; + setAxisScaleEngine(QwtPlot::yLeft, new QwtLinearScaleEngine); + setAxisScale(QwtPlot::yLeft, _minYAxis, _maxYAxis); + setAxisTitle(QwtPlot::yLeft, "Power (dB)"); + + // Automatically deleted when parent is deleted + _fft_plot_curve = new QwtPlotCurve("Power Spectrum"); + _fft_plot_curve->attach(this); + _fft_plot_curve->setPen(QPen(Qt::blue)); + _fft_plot_curve->setRawData(_xAxisPoints, _dataPoints, _numPoints); + + _min_fft_plot_curve = new QwtPlotCurve("Minimum Power"); + _min_fft_plot_curve->attach(this); + _min_fft_plot_curve->setPen(QPen(Qt::magenta)); + _min_fft_plot_curve->setRawData(_xAxisPoints, _minFFTPoints, _numPoints); + _min_fft_plot_curve->setVisible(false); + + _max_fft_plot_curve = new QwtPlotCurve("Maximum Power"); + _max_fft_plot_curve->attach(this); + _max_fft_plot_curve->setPen(QPen(Qt::darkYellow)); + _max_fft_plot_curve->setRawData(_xAxisPoints, _maxFFTPoints, _numPoints); + _max_fft_plot_curve->setVisible(false); + + _lower_intensity_marker = new QwtPlotMarker(); + _lower_intensity_marker->setLineStyle(QwtPlotMarker::HLine); + _lower_intensity_marker->setLinePen(QPen(Qt::cyan)); + _lower_intensity_marker->attach(this); + + _upper_intensity_marker = new QwtPlotMarker(); + _upper_intensity_marker->setLineStyle(QwtPlotMarker::HLine); + _upper_intensity_marker->setLinePen(QPen(Qt::green)); + _upper_intensity_marker->attach(this); + + memset(_dataPoints, 0x0, _numPoints*sizeof(double)); + memset(_xAxisPoints, 0x0, _numPoints*sizeof(double)); + + for(int64_t number = 0; number < _numPoints; number++){ + _minFFTPoints[number] = 200.0; + _maxFFTPoints[number] = -280.0; + } + + _resetXAxisPoints(); + + + // set up peak marker + QwtSymbol symbol; + + _markerPeakAmplitude = new QwtPlotMarker(); + _markerPeakAmplitude->setLinePen(QPen(Qt::yellow)); + symbol.setStyle(QwtSymbol::Diamond); + symbol.setSize(8); + symbol.setPen(QPen(Qt::yellow)); + symbol.setBrush(QBrush(Qt::yellow)); + _markerPeakAmplitude->setSymbol(symbol); + _markerPeakAmplitude->attach(this); + + _markerNoiseFloorAmplitude = new QwtPlotMarker(); + _markerNoiseFloorAmplitude->setLineStyle(QwtPlotMarker::HLine); + _markerNoiseFloorAmplitude->setLinePen(QPen(Qt::darkRed, 0, Qt::DotLine)); + _markerNoiseFloorAmplitude->attach(this); + + _peakFrequency = 0; + _peakAmplitude = -HUGE_VAL; + + _noiseFloorAmplitude = -HUGE_VAL; + + replot(); + + _zoomer = new FreqDisplayZoomer(canvas(), 0); +#if QT_VERSION < 0x040000 + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#else + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#endif + _zoomer->setMousePattern(QwtEventPattern::MouseSelect3, + Qt::RightButton); + + _panner = new QwtPlotPanner(canvas()); + _panner->setAxisEnabled(QwtPlot::yRight, false); + _panner->setMouseButton(Qt::MidButton); + + // Avoid jumping when labels with more/less digits + // appear/disappear when scrolling vertically + + const QFontMetrics fm(axisWidget(QwtPlot::yLeft)->font()); + QwtScaleDraw *sd = axisScaleDraw(QwtPlot::yLeft); + sd->setMinimumExtent( fm.width("100.00") ); + + const QColor c(Qt::darkRed); + _zoomer->setRubberBandPen(c); + _zoomer->setTrackerPen(c); +} + +FrequencyDisplayPlot::~FrequencyDisplayPlot() +{ + delete[] _dataPoints; + delete[] _maxFFTPoints; + delete[] _minFFTPoints; + delete[] _xAxisPoints; + + // _fft_plot_curves deleted when parent deleted + // _zoomer and _panner deleted when parent deleted +} + +void +FrequencyDisplayPlot::set_yaxis(double min, double max) +{ + // Get the new max/min values for the plot + _minYAxis = min; + _maxYAxis = max; + + // Set the axis max/min to the new values + setAxisScale(QwtPlot::yLeft, _minYAxis, _maxYAxis); + + // Reset the base zoom level to the new axis scale set here + _zoomer->setZoomBase(); +} + +void +FrequencyDisplayPlot::SetFrequencyRange(const double constStartFreq, + const double constStopFreq, + const double constCenterFreq, + const bool useCenterFrequencyFlag, + const double units, const std::string &strunits) +{ + double startFreq = constStartFreq / units; + double stopFreq = constStopFreq / units; + double centerFreq = constCenterFreq / units; + + _useCenterFrequencyFlag = useCenterFrequencyFlag; + + if(_useCenterFrequencyFlag){ + startFreq = (startFreq + centerFreq); + stopFreq = (stopFreq + centerFreq); + } + + _startFrequency = startFreq; + _stopFrequency = stopFreq; + _resetXAxisPoints(); + + setAxisScale(QwtPlot::xBottom, _startFrequency, _stopFrequency); + setAxisScaleDraw(QwtPlot::xBottom, new FreqDisplayScaleDraw(2)); + setAxisTitle(QwtPlot::xBottom, QString("Frequency (%1)").arg(strunits.c_str())); + ((FreqDisplayZoomer*)_zoomer)->SetFrequencyPrecision(2); + + // Load up the new base zoom settings + _zoomer->setZoomBase(); + + // Zooms back to the base and clears any other zoom levels + _zoomer->zoom(0); +} + + +double +FrequencyDisplayPlot::GetStartFrequency() const +{ + return _startFrequency; +} + +double +FrequencyDisplayPlot::GetStopFrequency() const +{ + return _stopFrequency; +} + +void +FrequencyDisplayPlot::replot() +{ + const timespec startTime = get_highres_clock(); + + _markerNoiseFloorAmplitude->setYValue(_noiseFloorAmplitude); + + // Make sure to take into account the start frequency + if(_useCenterFrequencyFlag){ + _markerPeakAmplitude->setXValue((_peakFrequency/1000.0) + _startFrequency); + } + else{ + _markerPeakAmplitude->setXValue(_peakFrequency + _startFrequency); + } + _markerPeakAmplitude->setYValue(_peakAmplitude); + + QwtPlot::replot(); + + double differenceTime = (diff_timespec(get_highres_clock(), startTime)); + + differenceTime *= 99.0; + // Require at least a 10% duty cycle + if(differenceTime > (1.0/10.0)){ + _displayIntervalTime = differenceTime; + } +} + +void +FrequencyDisplayPlot::PlotNewData(const double* dataPoints, const int64_t numDataPoints, + const double noiseFloorAmplitude, const double peakFrequency, + const double peakAmplitude) +{ + if(numDataPoints > 0){ + + if(numDataPoints != _numPoints){ + _numPoints = numDataPoints; + + delete[] _dataPoints; + delete[] _minFFTPoints; + delete[] _maxFFTPoints; + delete[] _xAxisPoints; + _dataPoints = new double[_numPoints]; + _xAxisPoints = new double[_numPoints]; + _minFFTPoints = new double[_numPoints]; + _maxFFTPoints = new double[_numPoints]; + + _fft_plot_curve->setRawData(_xAxisPoints, _dataPoints, _numPoints); + _min_fft_plot_curve->setRawData(_xAxisPoints, _minFFTPoints, _numPoints); + _max_fft_plot_curve->setRawData(_xAxisPoints, _maxFFTPoints, _numPoints); + + _resetXAxisPoints(); + ClearMaxData(); + ClearMinData(); + } + memcpy(_dataPoints, dataPoints, numDataPoints*sizeof(double)); + for(int64_t point = 0; point < numDataPoints; point++){ + if(dataPoints[point] < _minFFTPoints[point]){ + _minFFTPoints[point] = dataPoints[point]; + } + if(dataPoints[point] > _maxFFTPoints[point]){ + _maxFFTPoints[point] = dataPoints[point]; + } + } + + _noiseFloorAmplitude = noiseFloorAmplitude; + _peakFrequency = peakFrequency; + _peakAmplitude = peakAmplitude; + + } + + // Allow at least a 50% duty cycle + if(diff_timespec(get_highres_clock(), _lastReplot) > _displayIntervalTime){ + // Only replot the screen if it is visible + if(isVisible()){ + replot(); + } + _lastReplot = get_highres_clock(); + } +} + +void +FrequencyDisplayPlot::ClearMaxData() +{ + for(int64_t number = 0; number < _numPoints; number++){ + _maxFFTPoints[number] = _maxYAxis; + } +} + +void +FrequencyDisplayPlot::ClearMinData() +{ + for(int64_t number = 0; number < _numPoints; number++){ + _minFFTPoints[number] = _minYAxis; + } +} + +void +FrequencyDisplayPlot::SetMaxFFTVisible(const bool visibleFlag) +{ + _max_fft_plot_curve->setVisible(visibleFlag); +} + +void +FrequencyDisplayPlot::SetMinFFTVisible(const bool visibleFlag) +{ + _min_fft_plot_curve->setVisible(visibleFlag); +} + +void +FrequencyDisplayPlot::_resetXAxisPoints() +{ + double fft_bin_size = (_stopFrequency-_startFrequency) / static_cast(_numPoints); + double freqValue = _startFrequency; + for(int64_t loc = 0; loc < _numPoints; loc++){ + _xAxisPoints[loc] = freqValue; + freqValue += fft_bin_size; + } +} + +void +FrequencyDisplayPlot::SetLowerIntensityLevel(const double lowerIntensityLevel) +{ + _lower_intensity_marker->setYValue( lowerIntensityLevel ); +} + +void +FrequencyDisplayPlot::SetUpperIntensityLevel(const double upperIntensityLevel) +{ + _upper_intensity_marker->setYValue( upperIntensityLevel ); +} + + +#endif /* FREQUENCY_DISPLAY_PLOT_C */ diff --git a/gr-qtgui/src/lib/FrequencyDisplayPlot.h b/gr-qtgui/src/lib/FrequencyDisplayPlot.h new file mode 100644 index 00000000..5e828296 --- /dev/null +++ b/gr-qtgui/src/lib/FrequencyDisplayPlot.h @@ -0,0 +1,91 @@ +#ifndef FREQUENCY_DISPLAY_PLOT_HPP +#define FREQUENCY_DISPLAY_PLOT_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class FrequencyDisplayPlot:public QwtPlot{ + Q_OBJECT + +public: + FrequencyDisplayPlot(QWidget*); + virtual ~FrequencyDisplayPlot(); + + void SetFrequencyRange(const double, const double, + const double, const bool, + const double units=1000.0, + const std::string &strunits = "kHz"); + double GetStartFrequency()const; + double GetStopFrequency()const; + + void PlotNewData(const double* dataPoints, const int64_t numDataPoints, + const double noiseFloorAmplitude, const double peakFrequency, + const double peakAmplitude); + + void ClearMaxData(); + void ClearMinData(); + + void SetMaxFFTVisible(const bool); + void SetMinFFTVisible(const bool); + + virtual void replot(); + + void set_yaxis(double min, double max); + +public slots: + void SetLowerIntensityLevel(const double); + void SetUpperIntensityLevel(const double); + +protected: + +private: + void _resetXAxisPoints(); + + double _startFrequency; + double _stopFrequency; + double _maxYAxis; + double _minYAxis; + + QwtPlotCurve* _fft_plot_curve; + QwtPlotCurve* _min_fft_plot_curve; + QwtPlotCurve* _max_fft_plot_curve; + + QwtPlotMarker* _lower_intensity_marker; + QwtPlotMarker* _upper_intensity_marker; + + QwtPlotPanner* _panner; + QwtPlotZoomer* _zoomer; + + QwtPlotMarker *_markerPeakAmplitude; + QwtPlotMarker *_markerNoiseFloorAmplitude; + + double* _dataPoints; + double* _xAxisPoints; + + double* _minFFTPoints; + double* _maxFFTPoints; + int64_t _numPoints; + + double _peakFrequency; + double _peakAmplitude; + + double _noiseFloorAmplitude; + + timespec _lastReplot; + + bool _useCenterFrequencyFlag; + + double _displayIntervalTime; +}; + +#endif /* FREQUENCY_DISPLAY_PLOT_HPP */ diff --git a/gr-qtgui/src/lib/FrequencyDisplayPlot_moc.cc b/gr-qtgui/src/lib/FrequencyDisplayPlot_moc.cc new file mode 100644 index 00000000..2e269846 --- /dev/null +++ b/gr-qtgui/src/lib/FrequencyDisplayPlot_moc.cc @@ -0,0 +1,77 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'FrequencyDisplayPlot.h' +** +** Created: Tue Jul 14 15:57:22 2009 +** by: The Qt Meta Object Compiler version 61 (Qt 4.5.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "FrequencyDisplayPlot.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'FrequencyDisplayPlot.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_FrequencyDisplayPlot[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 2, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // slots: signature, parameters, type, tag, flags + 22, 21, 21, 21, 0x0a, + 53, 21, 21, 21, 0x0a, + + 0 // eod +}; + +static const char qt_meta_stringdata_FrequencyDisplayPlot[] = { + "FrequencyDisplayPlot\0\0" + "SetLowerIntensityLevel(double)\0" + "SetUpperIntensityLevel(double)\0" +}; + +const QMetaObject FrequencyDisplayPlot::staticMetaObject = { + { &QwtPlot::staticMetaObject, qt_meta_stringdata_FrequencyDisplayPlot, + qt_meta_data_FrequencyDisplayPlot, 0 } +}; + +const QMetaObject *FrequencyDisplayPlot::metaObject() const +{ + return &staticMetaObject; +} + +void *FrequencyDisplayPlot::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_FrequencyDisplayPlot)) + return static_cast(const_cast< FrequencyDisplayPlot*>(this)); + return QwtPlot::qt_metacast(_clname); +} + +int FrequencyDisplayPlot::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QwtPlot::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: SetLowerIntensityLevel((*reinterpret_cast< const double(*)>(_a[1]))); break; + case 1: SetUpperIntensityLevel((*reinterpret_cast< const double(*)>(_a[1]))); break; + default: ; + } + _id -= 2; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/gr-qtgui/src/lib/Makefile.am b/gr-qtgui/src/lib/Makefile.am new file mode 100644 index 00000000..6543a71c --- /dev/null +++ b/gr-qtgui/src/lib/Makefile.am @@ -0,0 +1,125 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \ + $(QT_INCLUDES) -I. $(WITH_INCLUDES) + +# Only include these files in the build if qtgui passes configure checks +# This is mostly to help make distcheck pass +if BUILD_QT +QMAKE_SOURCES = \ + spectrumdisplayform_moc.cc \ + FrequencyDisplayPlot_moc.cc \ + TimeDomainDisplayPlot_moc.cc \ + WaterfallDisplayPlot_moc.cc \ + Waterfall3DDisplayPlot_moc.cc \ + ConstellationDisplayPlot_moc.cc \ + spectrumdisplayform_ui.h +endif + +EXTRA_DIST = spectrumdisplayform.ui + +# Build the normal library for C++ apps to link against +lib_LTLIBRARIES = libgnuradio-qtgui.la + +# These are the source files that go into the shared library +libgnuradio_qtgui_la_SOURCES = \ + FrequencyDisplayPlot.cc \ + TimeDomainDisplayPlot.cc \ + WaterfallDisplayPlot.cc \ + Waterfall3DDisplayPlot.cc \ + waterfallGlobalData.cc \ + ConstellationDisplayPlot.cc \ + spectrumdisplayform.cc \ + SpectrumGUIClass.cc \ + spectrumUpdateEvents.cc \ + plot_waterfall.cc \ + $(QMAKE_SOURCES) \ + qtgui_sink_c.cc \ + qtgui_sink_f.cc + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + FrequencyDisplayPlot.h \ + TimeDomainDisplayPlot.h \ + WaterfallDisplayPlot.h \ + Waterfall3DDisplayPlot.h \ + waterfallGlobalData.h \ + ConstellationDisplayPlot.h \ + highResTimeFunctions.h \ + plot_waterfall.h \ + spectrumdisplayform.h \ + SpectrumGUIClass.h \ + spectrumUpdateEvents.h \ + qtgui.h \ + qtgui_sink_c.h \ + qtgui_sink_f.h + +if BUILD_QT +%_moc.cc : %.h + $(QT_MOC_EXEC) -DQT_SHARED -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB $< -o $@ + +%_ui.h : %.ui + $(QT_UIC_EXEC) $< -o $@ +else +%_moc.cc : %.h + touch $@ + +%_ui.h : %.ui + touch $@ +endif + +# magic flags +libgnuradio_qtgui_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 + +libgnuradio_qtgui_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + -lstdc++ \ + $(QT_LIBS) + +############################## +# SWIG interface and library + +TOP_SWIG_IFILES = \ + qtgui.i + +# Install so that they end up available as: +# import gnuradio.qtgui +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +qtgui_pythondir_category = \ + gnuradio/qtgui + +# additional libraries for linking with the SWIG-generated library +qtgui_la_swig_libadd = \ + libgnuradio-qtgui.la + +include $(top_srcdir)/Makefile.swig + +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = \ + $(QMAKE_SOURCES) \ + $(swig_built_sources) + +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-qtgui/src/lib/Makefile.in b/gr-qtgui/src/lib/Makefile.in new file mode 100644 index 00000000..df217f9a --- /dev/null +++ b/gr-qtgui/src/lib/Makefile.in @@ -0,0 +1,1465 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# 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 qtgui.i + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grinclude_HEADERS) $(qtgui_python_PYTHON) \ + $(qtgui_swiginclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/Makefile.swig.gen \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig +subdir = gr-qtgui/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(qtgui_pylibdir)" \ + "$(DESTDIR)$(qtgui_pythondir)" "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(qtgui_swigincludedir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +qtgui_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) $(qtgui_pylib_LTLIBRARIES) +am__DEPENDENCIES_1 = +_qtgui_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(qtgui_la_swig_libadd) +am__qtgui_la_OBJECTS = _qtgui_la-qtgui.lo +_qtgui_la_OBJECTS = $(am__qtgui_la_OBJECTS) +_qtgui_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_qtgui_la_CXXFLAGS) \ + $(CXXFLAGS) $(_qtgui_la_LDFLAGS) $(LDFLAGS) -o $@ +libgnuradio_qtgui_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am__libgnuradio_qtgui_la_SOURCES_DIST = FrequencyDisplayPlot.cc \ + TimeDomainDisplayPlot.cc WaterfallDisplayPlot.cc \ + Waterfall3DDisplayPlot.cc waterfallGlobalData.cc \ + ConstellationDisplayPlot.cc spectrumdisplayform.cc \ + SpectrumGUIClass.cc spectrumUpdateEvents.cc plot_waterfall.cc \ + spectrumdisplayform_moc.cc FrequencyDisplayPlot_moc.cc \ + TimeDomainDisplayPlot_moc.cc WaterfallDisplayPlot_moc.cc \ + Waterfall3DDisplayPlot_moc.cc ConstellationDisplayPlot_moc.cc \ + spectrumdisplayform_ui.h qtgui_sink_c.cc qtgui_sink_f.cc +@BUILD_QT_TRUE@am__objects_1 = spectrumdisplayform_moc.lo \ +@BUILD_QT_TRUE@ FrequencyDisplayPlot_moc.lo \ +@BUILD_QT_TRUE@ TimeDomainDisplayPlot_moc.lo \ +@BUILD_QT_TRUE@ WaterfallDisplayPlot_moc.lo \ +@BUILD_QT_TRUE@ Waterfall3DDisplayPlot_moc.lo \ +@BUILD_QT_TRUE@ ConstellationDisplayPlot_moc.lo +am_libgnuradio_qtgui_la_OBJECTS = FrequencyDisplayPlot.lo \ + TimeDomainDisplayPlot.lo WaterfallDisplayPlot.lo \ + Waterfall3DDisplayPlot.lo waterfallGlobalData.lo \ + ConstellationDisplayPlot.lo spectrumdisplayform.lo \ + SpectrumGUIClass.lo spectrumUpdateEvents.lo plot_waterfall.lo \ + $(am__objects_1) qtgui_sink_c.lo qtgui_sink_f.lo +libgnuradio_qtgui_la_OBJECTS = $(am_libgnuradio_qtgui_la_OBJECTS) +libgnuradio_qtgui_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgnuradio_qtgui_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_qtgui_la_SOURCES) $(libgnuradio_qtgui_la_SOURCES) +DIST_SOURCES = $(_qtgui_la_SOURCES) \ + $(am__libgnuradio_qtgui_la_SOURCES_DIST) +qtgui_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +qtgui_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(qtgui_swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/qtgui-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \ + $(QT_INCLUDES) -I. $(WITH_INCLUDES) + + +# Only include these files in the build if qtgui passes configure checks +# This is mostly to help make distcheck pass +@BUILD_QT_TRUE@QMAKE_SOURCES = \ +@BUILD_QT_TRUE@ spectrumdisplayform_moc.cc \ +@BUILD_QT_TRUE@ FrequencyDisplayPlot_moc.cc \ +@BUILD_QT_TRUE@ TimeDomainDisplayPlot_moc.cc \ +@BUILD_QT_TRUE@ WaterfallDisplayPlot_moc.cc \ +@BUILD_QT_TRUE@ Waterfall3DDisplayPlot_moc.cc \ +@BUILD_QT_TRUE@ ConstellationDisplayPlot_moc.cc \ +@BUILD_QT_TRUE@ spectrumdisplayform_ui.h + +EXTRA_DIST = spectrumdisplayform.ui + +# Build the normal library for C++ apps to link against +lib_LTLIBRARIES = libgnuradio-qtgui.la + +# These are the source files that go into the shared library +libgnuradio_qtgui_la_SOURCES = \ + FrequencyDisplayPlot.cc \ + TimeDomainDisplayPlot.cc \ + WaterfallDisplayPlot.cc \ + Waterfall3DDisplayPlot.cc \ + waterfallGlobalData.cc \ + ConstellationDisplayPlot.cc \ + spectrumdisplayform.cc \ + SpectrumGUIClass.cc \ + spectrumUpdateEvents.cc \ + plot_waterfall.cc \ + $(QMAKE_SOURCES) \ + qtgui_sink_c.cc \ + qtgui_sink_f.cc + + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + FrequencyDisplayPlot.h \ + TimeDomainDisplayPlot.h \ + WaterfallDisplayPlot.h \ + Waterfall3DDisplayPlot.h \ + waterfallGlobalData.h \ + ConstellationDisplayPlot.h \ + highResTimeFunctions.h \ + plot_waterfall.h \ + spectrumdisplayform.h \ + SpectrumGUIClass.h \ + spectrumUpdateEvents.h \ + qtgui.h \ + qtgui_sink_c.h \ + qtgui_sink_f.h + + +# magic flags +libgnuradio_qtgui_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 +libgnuradio_qtgui_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + -lstdc++ \ + $(QT_LIBS) + + +############################## +# SWIG interface and library +TOP_SWIG_IFILES = \ + qtgui.i + + +# Install so that they end up available as: +# import gnuradio.qtgui +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +qtgui_pythondir_category = \ + gnuradio/qtgui + + +# additional libraries for linking with the SWIG-generated library +qtgui_la_swig_libadd = \ + libgnuradio-qtgui.la + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = qtgui.py qtgui.cc +qtgui_pythondir = $(pythondir)/$(qtgui_pythondir_category) +qtgui_pylibdir = $(pyexecdir)/$(qtgui_pylibdir_category) +qtgui_swigincludedir = $(swigincludedir) +qtgui_swiginclude_HEADERS = \ + qtgui.i \ + $(qtgui_swiginclude_headers) + +qtgui_pylib_LTLIBRARIES = \ + _qtgui.la + +_qtgui_la_SOURCES = \ + qtgui.cc \ + $(qtgui_la_swig_sources) + +_qtgui_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(qtgui_la_swig_libadd) + +_qtgui_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(qtgui_la_swig_ldflags) + +_qtgui_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(qtgui_la_swig_cxxflags) + +qtgui_python_PYTHON = \ + qtgui.py \ + $(qtgui_python) + + +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = \ + $(QMAKE_SOURCES) \ + $(swig_built_sources) + + +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-qtgui/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-qtgui/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-qtgui_pylibLTLIBRARIES: $(qtgui_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(qtgui_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(qtgui_pylibdir)" + @list='$(qtgui_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(qtgui_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(qtgui_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(qtgui_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(qtgui_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-qtgui_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(qtgui_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(qtgui_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(qtgui_pylibdir)/$$p"; \ + done + +clean-qtgui_pylibLTLIBRARIES: + -test -z "$(qtgui_pylib_LTLIBRARIES)" || rm -f $(qtgui_pylib_LTLIBRARIES) + @list='$(qtgui_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_qtgui.la: $(_qtgui_la_OBJECTS) $(_qtgui_la_DEPENDENCIES) + $(_qtgui_la_LINK) -rpath $(qtgui_pylibdir) $(_qtgui_la_OBJECTS) $(_qtgui_la_LIBADD) $(LIBS) +libgnuradio-qtgui.la: $(libgnuradio_qtgui_la_OBJECTS) $(libgnuradio_qtgui_la_DEPENDENCIES) + $(libgnuradio_qtgui_la_LINK) -rpath $(libdir) $(libgnuradio_qtgui_la_OBJECTS) $(libgnuradio_qtgui_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConstellationDisplayPlot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConstellationDisplayPlot_moc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FrequencyDisplayPlot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FrequencyDisplayPlot_moc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpectrumGUIClass.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TimeDomainDisplayPlot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TimeDomainDisplayPlot_moc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Waterfall3DDisplayPlot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Waterfall3DDisplayPlot_moc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WaterfallDisplayPlot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WaterfallDisplayPlot_moc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_qtgui_la-qtgui.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plot_waterfall.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtgui_sink_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtgui_sink_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spectrumUpdateEvents.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spectrumdisplayform.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spectrumdisplayform_moc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waterfallGlobalData.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +_qtgui_la-qtgui.lo: qtgui.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_qtgui_la_CXXFLAGS) $(CXXFLAGS) -MT _qtgui_la-qtgui.lo -MD -MP -MF $(DEPDIR)/_qtgui_la-qtgui.Tpo -c -o _qtgui_la-qtgui.lo `test -f 'qtgui.cc' || echo '$(srcdir)/'`qtgui.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_qtgui_la-qtgui.Tpo $(DEPDIR)/_qtgui_la-qtgui.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='qtgui.cc' object='_qtgui_la-qtgui.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_qtgui_la_CXXFLAGS) $(CXXFLAGS) -c -o _qtgui_la-qtgui.lo `test -f 'qtgui.cc' || echo '$(srcdir)/'`qtgui.cc + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-qtgui_pythonPYTHON: $(qtgui_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(qtgui_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(qtgui_pythondir)" + @list='$(qtgui_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(qtgui_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(qtgui_pythondir)/$$f'"; \ + $(qtgui_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(qtgui_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(qtgui_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(qtgui_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-qtgui_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(qtgui_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(qtgui_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(qtgui_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(qtgui_pythondir)/$${f}o"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-qtgui_swigincludeHEADERS: $(qtgui_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(qtgui_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(qtgui_swigincludedir)" + @list='$(qtgui_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(qtgui_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(qtgui_swigincludedir)/$$f'"; \ + $(qtgui_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(qtgui_swigincludedir)/$$f"; \ + done + +uninstall-qtgui_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(qtgui_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(qtgui_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(qtgui_swigincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(qtgui_pylibdir)" "$(DESTDIR)$(qtgui_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(qtgui_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-qtgui_pylibLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS \ + install-qtgui_pylibLTLIBRARIES install-qtgui_pythonPYTHON \ + install-qtgui_swigincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS uninstall-libLTLIBRARIES \ + uninstall-qtgui_pylibLTLIBRARIES uninstall-qtgui_pythonPYTHON \ + uninstall-qtgui_swigincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool \ + clean-qtgui_pylibLTLIBRARIES ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-qtgui_pylibLTLIBRARIES \ + install-qtgui_pythonPYTHON install-qtgui_swigincludeHEADERS \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-grincludeHEADERS uninstall-libLTLIBRARIES \ + uninstall-qtgui_pylibLTLIBRARIES uninstall-qtgui_pythonPYTHON \ + uninstall-qtgui_swigincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +@BUILD_QT_TRUE@%_moc.cc : %.h +@BUILD_QT_TRUE@ $(QT_MOC_EXEC) -DQT_SHARED -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB $< -o $@ + +@BUILD_QT_TRUE@%_ui.h : %.ui +@BUILD_QT_TRUE@ $(QT_UIC_EXEC) $< -o $@ +@BUILD_QT_FALSE@%_moc.cc : %.h +@BUILD_QT_FALSE@ touch $@ + +@BUILD_QT_FALSE@%_ui.h : %.ui +@BUILD_QT_FALSE@ touch $@ + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +qtgui_pythondir_category ?= gnuradio/qtgui +qtgui_pylibdir_category ?= $(qtgui_pythondir_category) + +qtgui.h qtgui.py qtgui.cc: qtgui.i + trap 'rm -rf $(DEPDIR)/qtgui-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/qtgui-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/qtgui-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/qtgui-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/qtgui-generate-lock; \ + else \ + while test -d $(DEPDIR)/qtgui-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/qtgui-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/qtgui-generate-stamp: + 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; + $(RM) $(DEPDIR)/qtgui.d + cp $(DEPDIR)/qtgui.Std $(DEPDIR)/qtgui.d + echo "" >> $(DEPDIR)/qtgui.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/qtgui.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/qtgui.d + $(RM) $(DEPDIR)/qtgui.Std + touch $(DEPDIR)/qtgui-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)/qtgui.d@am__quote@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-qtgui/src/lib/Makefile.swig.gen b/gr-qtgui/src/lib/Makefile.swig.gen new file mode 100644 index 00000000..f40f0d88 --- /dev/null +++ b/gr-qtgui/src/lib/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 qtgui.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/qtgui +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/qtgui +## +## 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. + +qtgui_pythondir_category ?= gnuradio/qtgui +qtgui_pylibdir_category ?= $(qtgui_pythondir_category) +qtgui_pythondir = $(pythondir)/$(qtgui_pythondir_category) +qtgui_pylibdir = $(pyexecdir)/$(qtgui_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +qtgui_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)/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 . + +qtgui_swiginclude_HEADERS = \ + qtgui.i \ + $(qtgui_swiginclude_headers) + +qtgui_pylib_LTLIBRARIES = \ + _qtgui.la + +_qtgui_la_SOURCES = \ + qtgui.cc \ + $(qtgui_la_swig_sources) + +_qtgui_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(qtgui_la_swig_libadd) + +_qtgui_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(qtgui_la_swig_ldflags) + +_qtgui_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(qtgui_la_swig_cxxflags) + +qtgui_python_PYTHON = \ + qtgui.py \ + $(qtgui_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/qtgui.d@am__quote@ + diff --git a/gr-qtgui/src/lib/SpectrumGUIClass.cc b/gr-qtgui/src/lib/SpectrumGUIClass.cc new file mode 100644 index 00000000..f196d7c5 --- /dev/null +++ b/gr-qtgui/src/lib/SpectrumGUIClass.cc @@ -0,0 +1,458 @@ +#ifndef SPECTRUM_GUI_CLASS_CPP +#define SPECTRUM_GUI_CLASS_CPP + +#include +//Added by qt3to4: +#include +#include + +const long SpectrumGUIClass::MAX_FFT_SIZE; +const long SpectrumGUIClass::MIN_FFT_SIZE; + +SpectrumGUIClass::SpectrumGUIClass(const uint64_t maxDataSize, + const uint64_t fftSize, + const double newCenterFrequency, + const double newStartFrequency, + const double newStopFrequency) +{ + _dataPoints = maxDataSize; + if(_dataPoints < 2){ + _dataPoints = 2; + } + _lastDataPointCount = _dataPoints; + + _fftSize = fftSize; + + _pendingGUIUpdateEventsCount = 0; + _droppedEntriesCount = 0; + + _centerFrequency = newCenterFrequency; + _startFrequency = newStartFrequency; + _stopFrequency = newStopFrequency; + +#warning SPECIFY THIS LATER... + _windowType = 5; + + timespec_reset(&_lastGUIUpdateTime); + + _windowOpennedFlag = false; + _fftBuffersCreatedFlag = false; + + // Create Mutex Lock + //_windowStateLock = new MutexClass("_windowStateLock"); + + _powerValue = 1; +} + +SpectrumGUIClass::~SpectrumGUIClass() +{ + if(GetWindowOpenFlag()){ + delete _spectrumDisplayForm; + } + + if(_fftBuffersCreatedFlag){ + delete[] _fftPoints; + delete[] _realTimeDomainPoints; + delete[] _imagTimeDomainPoints; + } + + //delete _windowStateLock; +} + +void +SpectrumGUIClass::OpenSpectrumWindow(QWidget* parent, + const bool frequency, const bool waterfall, + const bool waterfall3d, const bool time, + const bool constellation, + const bool use_openGL) +{ + //_windowStateLock->Lock(); + + if(!_windowOpennedFlag){ + + if(!_fftBuffersCreatedFlag){ + _fftPoints = new std::complex[_dataPoints]; + _realTimeDomainPoints = new double[_dataPoints]; + _imagTimeDomainPoints = new double[_dataPoints]; + _fftBuffersCreatedFlag = true; + + + memset(_fftPoints, 0x0, _dataPoints*sizeof(std::complex)); + memset(_realTimeDomainPoints, 0x0, _dataPoints*sizeof(double)); + memset(_imagTimeDomainPoints, 0x0, _dataPoints*sizeof(double)); + } + + // Called from the Event Thread + _spectrumDisplayForm = new SpectrumDisplayForm(use_openGL, parent); + + // Toggle Windows on/off + _spectrumDisplayForm->ToggleTabFrequency(frequency); + _spectrumDisplayForm->ToggleTabWaterfall(waterfall); + _spectrumDisplayForm->ToggleTabWaterfall3D(waterfall3d); + _spectrumDisplayForm->ToggleTabTime(time); + _spectrumDisplayForm->ToggleTabConstellation(constellation); + + _windowOpennedFlag = true; + + _spectrumDisplayForm->setSystem(this, _dataPoints, _fftSize); + + qApp->processEvents(); + } + + //_windowStateLock->Unlock(); + + SetDisplayTitle(_title); + Reset(); + + qApp->postEvent(_spectrumDisplayForm, + new QEvent(QEvent::Type(QEvent::User+3))); + + qApp->processEvents(); + + timespec_reset(&_lastGUIUpdateTime); + + // Draw Blank Display + UpdateWindow(false, NULL, 0, NULL, 0, NULL, 0, 1.0, get_highres_clock(), true); + + // Set up the initial frequency axis settings + SetFrequencyRange(_centerFrequency, _startFrequency, _stopFrequency); + + // GUI Thread only + qApp->processEvents(); +} + +void +SpectrumGUIClass::Reset() +{ + if(GetWindowOpenFlag()) { + qApp->postEvent(_spectrumDisplayForm, + new SpectrumFrequencyRangeEvent(_centerFrequency, + _startFrequency, + _stopFrequency)); + qApp->postEvent(_spectrumDisplayForm, new SpectrumWindowResetEvent()); + } + _droppedEntriesCount = 0; + // Call the following function the the Spectrum Window Reset Event window + // ResetPendingGUIUpdateEvents(); +} + +void +SpectrumGUIClass::SetDisplayTitle(const std::string newString) +{ + _title.assign(newString); + + if(GetWindowOpenFlag()){ + qApp->postEvent(_spectrumDisplayForm, + new SpectrumWindowCaptionEvent(_title.c_str())); + } +} + +bool +SpectrumGUIClass::GetWindowOpenFlag() +{ + bool returnFlag = false; + //_windowStateLock->Lock(); + returnFlag = _windowOpennedFlag; + //_windowStateLock->Unlock(); + return returnFlag; +} + + +void +SpectrumGUIClass::SetWindowOpenFlag(const bool newFlag) +{ + //_windowStateLock->Lock(); + _windowOpennedFlag = newFlag; + //_windowStateLock->Unlock(); +} + +void +SpectrumGUIClass::SetFrequencyRange(const double centerFreq, + const double startFreq, + const double stopFreq) +{ + //_windowStateLock->Lock(); + _centerFrequency = centerFreq; + _startFrequency = startFreq; + _stopFrequency = stopFreq; + + _spectrumDisplayForm->SetFrequencyRange(_centerFrequency, + _startFrequency, + _stopFrequency); + //_windowStateLock->Unlock(); +} + +double +SpectrumGUIClass::GetStartFrequency() const +{ + double returnValue = 0.0; + //_windowStateLock->Lock(); + returnValue = _startFrequency; + //_windowStateLock->Unlock(); + return returnValue; +} + +double +SpectrumGUIClass::GetStopFrequency() const +{ + double returnValue = 0.0; + //_windowStateLock->Lock(); + returnValue = _stopFrequency; + //_windowStateLock->Unlock(); + return returnValue; +} + +double +SpectrumGUIClass::GetCenterFrequency() const +{ + double returnValue = 0.0; + //_windowStateLock->Lock(); + returnValue = _centerFrequency; + //_windowStateLock->Unlock(); + return returnValue; +} + + +void +SpectrumGUIClass::UpdateWindow(const bool updateDisplayFlag, + const std::complex* fftBuffer, + const uint64_t inputBufferSize, + const float* realTimeDomainData, + const uint64_t realTimeDomainDataSize, + const float* complexTimeDomainData, + const uint64_t complexTimeDomainDataSize, + const double timePerFFT, + const timespec timestamp, + const bool lastOfMultipleFFTUpdateFlag) +{ + int64_t bufferSize = inputBufferSize; + bool repeatDataFlag = false; + if(bufferSize > _dataPoints){ + bufferSize = _dataPoints; + } + int64_t timeDomainBufferSize = 0; + + if(updateDisplayFlag){ + if((fftBuffer != NULL) && (bufferSize > 0)){ + memcpy(_fftPoints, fftBuffer, bufferSize * sizeof(std::complex)); + } + + // Can't do a memcpy since ths is going from float to double data type + if((realTimeDomainData != NULL) && (realTimeDomainDataSize > 0)){ + const float* realTimeDomainDataPtr = realTimeDomainData; + + double* realTimeDomainPointsPtr = _realTimeDomainPoints; + timeDomainBufferSize = realTimeDomainDataSize; + + memset( _imagTimeDomainPoints, 0x0, realTimeDomainDataSize*sizeof(double)); + for( uint64_t number = 0; number < realTimeDomainDataSize; number++){ + *realTimeDomainPointsPtr++ = *realTimeDomainDataPtr++; + } + } + + // Can't do a memcpy since ths is going from float to double data type + if((complexTimeDomainData != NULL) && (complexTimeDomainDataSize > 0)){ + const float* complexTimeDomainDataPtr = complexTimeDomainData; + + double* realTimeDomainPointsPtr = _realTimeDomainPoints; + double* imagTimeDomainPointsPtr = _imagTimeDomainPoints; + + timeDomainBufferSize = complexTimeDomainDataSize; + for( uint64_t number = 0; number < complexTimeDomainDataSize; number++){ + *realTimeDomainPointsPtr++ = *complexTimeDomainDataPtr++; + *imagTimeDomainPointsPtr++ = *complexTimeDomainDataPtr++; + } + } + } + + // If bufferSize is zero, then just update the display by sending over the old data + if(bufferSize < 1){ + bufferSize = _lastDataPointCount; + repeatDataFlag = true; + } + else{ + // Since there is data this time, update the count + _lastDataPointCount = bufferSize; + } + + const timespec currentTime = get_highres_clock(); + const timespec lastUpdateGUITime = GetLastGUIUpdateTime(); + + if((diff_timespec(currentTime, lastUpdateGUITime) > (4*timePerFFT)) && + (GetPendingGUIUpdateEvents() > 0) && !timespec_empty(&lastUpdateGUITime)) { + // Do not update the display if too much data is pending to be displayed + _droppedEntriesCount++; + } + else{ + // Draw the Data + IncrementPendingGUIUpdateEvents(); + qApp->postEvent(_spectrumDisplayForm, + new SpectrumUpdateEvent(_fftPoints, bufferSize, + _realTimeDomainPoints, + _imagTimeDomainPoints, + timeDomainBufferSize, + timePerFFT, timestamp, + repeatDataFlag, + lastOfMultipleFFTUpdateFlag, + currentTime, + _droppedEntriesCount)); + + // Only reset the dropped entries counter if this is not + // repeat data since repeat data is dropped by the display systems + if(!repeatDataFlag){ + _droppedEntriesCount = 0; + } + } +} + +float +SpectrumGUIClass::GetPowerValue() const +{ + float returnValue = 0; + //_windowStateLock->Lock(); + returnValue = _powerValue; + //_windowStateLock->Unlock(); + return returnValue; +} + +void +SpectrumGUIClass::SetPowerValue(const float value) +{ + //_windowStateLock->Lock(); + _powerValue = value; + //_windowStateLock->Unlock(); +} + +int +SpectrumGUIClass::GetWindowType() const +{ + int returnValue = 0; + //_windowStateLock->Lock(); + returnValue = _windowType; + //_windowStateLock->Unlock(); + return returnValue; +} + +void +SpectrumGUIClass::SetWindowType(const int newType) +{ + //_windowStateLock->Lock(); + _windowType = newType; + //_windowStateLock->Unlock(); +} + +int +SpectrumGUIClass::GetFFTSize() const +{ + int returnValue = 0; + //_windowStateLock->Lock(); + returnValue = _fftSize; + //_windowStateLock->Unlock(); + return returnValue; +} + +int +SpectrumGUIClass::GetFFTSizeIndex() const +{ + int fftsize = GetFFTSize(); + switch(fftsize) { + case(1024): return 0; break; + case(2048): return 1; break; + case(4096): return 2; break; + case(8192): return 3; break; + case(16384): return 3; break; + case(32768): return 3; break; + default: return 0; + } +} + +void +SpectrumGUIClass::SetFFTSize(const int newSize) +{ + //_windowStateLock->Lock(); + _fftSize = newSize; + //_windowStateLock->Unlock(); +} + +timespec +SpectrumGUIClass::GetLastGUIUpdateTime() const +{ + timespec returnValue; + //_windowStateLock->Lock(); + returnValue = _lastGUIUpdateTime; + //_windowStateLock->Unlock(); + return returnValue; +} + +void +SpectrumGUIClass::SetLastGUIUpdateTime(const timespec newTime) +{ + //_windowStateLock->Lock(); + _lastGUIUpdateTime = newTime; + //_windowStateLock->Unlock(); +} + +unsigned int +SpectrumGUIClass::GetPendingGUIUpdateEvents() const +{ + unsigned int returnValue = 0; + //_windowStateLock->Lock(); + returnValue = _pendingGUIUpdateEventsCount; + //_windowStateLock->Unlock(); + return returnValue; +} + +void +SpectrumGUIClass::IncrementPendingGUIUpdateEvents() +{ + //_windowStateLock->Lock(); + _pendingGUIUpdateEventsCount++; + //_windowStateLock->Unlock(); +} + +void +SpectrumGUIClass::DecrementPendingGUIUpdateEvents() +{ + //_windowStateLock->Lock(); + if(_pendingGUIUpdateEventsCount > 0){ + _pendingGUIUpdateEventsCount--; + } + //_windowStateLock->Unlock(); +} + +void +SpectrumGUIClass::ResetPendingGUIUpdateEvents() +{ + //_windowStateLock->Lock(); + _pendingGUIUpdateEventsCount = 0; + //_windowStateLock->Unlock(); +} + + +QWidget* +SpectrumGUIClass::qwidget() +{ + return (QWidget*)_spectrumDisplayForm; +} + +void +SpectrumGUIClass::SetTimeDomainAxis(double min, double max) +{ + _spectrumDisplayForm->SetTimeDomainAxis(min, max); +} + +void +SpectrumGUIClass::SetConstellationAxis(double xmin, double xmax, + double ymin, double ymax) +{ + _spectrumDisplayForm->SetConstellationAxis(xmin, xmax, ymin, ymax); + +} + +void +SpectrumGUIClass::SetFrequencyAxis(double min, double max) +{ + _spectrumDisplayForm->SetFrequencyAxis(min, max); +} + +#endif /* SPECTRUM_GUI_CLASS_CPP */ diff --git a/gr-qtgui/src/lib/SpectrumGUIClass.h b/gr-qtgui/src/lib/SpectrumGUIClass.h new file mode 100644 index 00000000..9a55271d --- /dev/null +++ b/gr-qtgui/src/lib/SpectrumGUIClass.h @@ -0,0 +1,108 @@ +#ifndef SPECTRUM_GUI_CLASS_HPP +#define SPECTRUM_GUI_CLASS_HPP + +//#include +#include +#include +#include +#include +#include + +//#include + +class SpectrumDisplayForm; +#include + +#include + +#include +#include +#include + +class SpectrumGUIClass +{ +public: + SpectrumGUIClass(const uint64_t maxDataSize, const uint64_t fftSize, + const double newCenterFrequency, + const double newStartFrequency, + const double newStopFrequency); + ~SpectrumGUIClass(); + void Reset(); + + void OpenSpectrumWindow(QWidget*, + const bool frequency=true, const bool waterfall=true, + const bool waterfall3d=true, const bool time=true, + const bool constellation=true, + const bool use_openGL=true); + void SetDisplayTitle(const std::string); + + bool GetWindowOpenFlag(); + void SetWindowOpenFlag(const bool); + + void SetFrequencyRange(const double, const double, const double); + double GetStartFrequency()const; + double GetStopFrequency()const; + double GetCenterFrequency()const; + + void UpdateWindow(const bool, const std::complex*, + const uint64_t, const float*, + const uint64_t, const float*, + const uint64_t, const double, + const timespec, const bool); + + float GetPowerValue()const; + void SetPowerValue(const float); + + int GetWindowType()const; + void SetWindowType(const int); + + int GetFFTSize()const; + int GetFFTSizeIndex()const; + void SetFFTSize(const int); + + timespec GetLastGUIUpdateTime()const; + void SetLastGUIUpdateTime(const timespec); + + unsigned int GetPendingGUIUpdateEvents()const; + void IncrementPendingGUIUpdateEvents(); + void DecrementPendingGUIUpdateEvents(); + void ResetPendingGUIUpdateEvents(); + + static const long MAX_FFT_SIZE = /*1048576*/32768; + static const long MIN_FFT_SIZE = 1024; + + QWidget* qwidget(); + + void SetTimeDomainAxis(double min, double max); + void SetConstellationAxis(double xmin, double xmax, + double ymin, double ymax); + void SetFrequencyAxis(double min, double max); + +protected: + +private: + + //MutexClass* _windowStateLock; + int64_t _dataPoints; + std::string _title; + double _centerFrequency; + double _startFrequency; + double _stopFrequency; + float _powerValue; + bool _windowOpennedFlag; + int _windowType; + int64_t _lastDataPointCount; + int _fftSize; + timespec _lastGUIUpdateTime; + unsigned int _pendingGUIUpdateEventsCount; + int _droppedEntriesCount; + bool _fftBuffersCreatedFlag; + + SpectrumDisplayForm* _spectrumDisplayForm; + + std::complex* _fftPoints; + double* _realTimeDomainPoints; + double* _imagTimeDomainPoints; +}; + +#endif /* SPECTRUM_GUI_CLASS_HPP */ diff --git a/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc b/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc new file mode 100644 index 00000000..42f827d9 --- /dev/null +++ b/gr-qtgui/src/lib/TimeDomainDisplayPlot.cc @@ -0,0 +1,197 @@ +#ifndef TIME_DOMAIN_DISPLAY_PLOT_C +#define TIME_DOMAIN_DISPLAY_PLOT_C + +#include + +#include +#include + + +class TimeDomainDisplayZoomer: public QwtPlotZoomer +{ +public: + TimeDomainDisplayZoomer(QwtPlotCanvas* canvas):QwtPlotZoomer(canvas) + { + setTrackerMode(QwtPicker::AlwaysOn); + } + + virtual ~TimeDomainDisplayZoomer(){ + + } + + virtual void updateTrackerText(){ + updateDisplay(); + } + +protected: + virtual QwtText trackerText( const QwtDoublePoint& p ) const + { + QwtText t(QString("Sample %1, %2 V").arg(p.x(), 0, 'f', 0).arg(p.y(), 0, 'f', 4)); + + return t; + } +}; + +TimeDomainDisplayPlot::TimeDomainDisplayPlot(QWidget* parent):QwtPlot(parent){ + timespec_reset(&_lastReplot); + + resize(parent->width(), parent->height()); + + _displayIntervalTime = (1.0/10.0); // 1/10 of a second between updates + + _numPoints = 1024; + _realDataPoints = new double[_numPoints]; + _imagDataPoints = new double[_numPoints]; + _xAxisPoints = new double[_numPoints]; + + // Disable polygon clipping + QwtPainter::setDeviceClipping(false); + + // We don't need the cache here + canvas()->setPaintAttribute(QwtPlotCanvas::PaintCached, false); + canvas()->setPaintAttribute(QwtPlotCanvas::PaintPacked, false); + + QPalette palette; + palette.setColor(canvas()->backgroundRole(), QColor("white")); + canvas()->setPalette(palette); + + setAxisScaleEngine(QwtPlot::xBottom, new QwtLinearScaleEngine); + setAxisScale(QwtPlot::xBottom, 0, _numPoints); + setAxisTitle(QwtPlot::xBottom, "Sample Number"); + + setAxisScaleEngine(QwtPlot::yLeft, new QwtLinearScaleEngine); + set_yaxis(-2.0, 2.0); + setAxisTitle(QwtPlot::yLeft, "Normalized Voltage"); + + // Automatically deleted when parent is deleted + _real_plot_curve = new QwtPlotCurve("Real Data"); + _real_plot_curve->attach(this); + _real_plot_curve->setPen(QPen(Qt::blue)); + _real_plot_curve->setRawData(_xAxisPoints, _realDataPoints, _numPoints); + + _imag_plot_curve = new QwtPlotCurve("Imaginary Data"); + _imag_plot_curve->attach(this); + _imag_plot_curve->setPen(QPen(Qt::magenta)); + _imag_plot_curve->setRawData(_xAxisPoints, _imagDataPoints, _numPoints); + // _imag_plot_curve->setVisible(false); + + memset(_realDataPoints, 0x0, _numPoints*sizeof(double)); + memset(_imagDataPoints, 0x0, _numPoints*sizeof(double)); + memset(_xAxisPoints, 0x0, _numPoints*sizeof(double)); + + _resetXAxisPoints(); + + replot(); + + _zoomer = new TimeDomainDisplayZoomer(canvas()); +#if QT_VERSION < 0x040000 + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#else + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#endif + _zoomer->setMousePattern(QwtEventPattern::MouseSelect3, + Qt::RightButton); + + _panner = new QwtPlotPanner(canvas()); + _panner->setAxisEnabled(QwtPlot::yRight, false); + _panner->setMouseButton(Qt::MidButton); + + // Avoid jumping when labels with more/less digits + // appear/disappear when scrolling vertically + + const QFontMetrics fm(axisWidget(QwtPlot::yLeft)->font()); + QwtScaleDraw *sd = axisScaleDraw(QwtPlot::yLeft); + sd->setMinimumExtent( fm.width("100.00") ); + + const QColor c(Qt::darkRed); + _zoomer->setRubberBandPen(c); + _zoomer->setTrackerPen(c); + + QwtLegend* legendDisplay = new QwtLegend(this); + legendDisplay->setItemMode(QwtLegend::CheckableItem); + insertLegend(legendDisplay); + + connect(this, SIGNAL( legendChecked(QwtPlotItem *, bool ) ), this, SLOT( LegendEntryChecked(QwtPlotItem *, bool ) )); +} + +TimeDomainDisplayPlot::~TimeDomainDisplayPlot(){ + delete[] _realDataPoints; + delete[] _imagDataPoints; + delete[] _xAxisPoints; + + // _fft_plot_curves deleted when parent deleted + // _zoomer and _panner deleted when parent deleted +} + +void +TimeDomainDisplayPlot::set_yaxis(double min, double max) +{ + setAxisScale(QwtPlot::yLeft, min, max); +} + +void TimeDomainDisplayPlot::replot(){ + + const timespec startTime = get_highres_clock(); + + QwtPlot::replot(); + + double differenceTime = (diff_timespec(get_highres_clock(), startTime)); + + differenceTime *= 99.0; + // Require at least a 10% duty cycle + if(differenceTime > (1.0/10.0)){ + _displayIntervalTime = differenceTime; + } +} + +void TimeDomainDisplayPlot::PlotNewData(const double* realDataPoints, const double* imagDataPoints, const int64_t numDataPoints){ + if(numDataPoints > 0){ + + if(numDataPoints != _numPoints){ + _numPoints = numDataPoints; + + delete[] _realDataPoints; + delete[] _imagDataPoints; + delete[] _xAxisPoints; + _realDataPoints = new double[_numPoints]; + _imagDataPoints = new double[_numPoints]; + _xAxisPoints = new double[_numPoints]; + + _real_plot_curve->setRawData(_xAxisPoints, _realDataPoints, _numPoints); + _imag_plot_curve->setRawData(_xAxisPoints, _imagDataPoints, _numPoints); + + _resetXAxisPoints(); + } + memcpy(_realDataPoints, realDataPoints, numDataPoints*sizeof(double)); + memcpy(_imagDataPoints, imagDataPoints, numDataPoints*sizeof(double)); + + } + + // Allow at least a 50% duty cycle + if(diff_timespec(get_highres_clock(), _lastReplot) > _displayIntervalTime){ + // Only replot the screen if it is visible + if(isVisible()){ + replot(); + } + _lastReplot = get_highres_clock(); + } +} + +void TimeDomainDisplayPlot::SetImaginaryDataVisible(const bool visibleFlag){ + _imag_plot_curve->setVisible(visibleFlag); +} + +void TimeDomainDisplayPlot::_resetXAxisPoints(){ + for(long loc = 0; loc < _numPoints; loc++){ + _xAxisPoints[loc] = loc; + } + setAxisScale(QwtPlot::xBottom, 0, _numPoints); +} + +void TimeDomainDisplayPlot::LegendEntryChecked(QwtPlotItem* plotItem, bool on){ + plotItem->setVisible(!on); +} + +#endif /* TIME_DOMAIN_DISPLAY_PLOT_C */ diff --git a/gr-qtgui/src/lib/TimeDomainDisplayPlot.h b/gr-qtgui/src/lib/TimeDomainDisplayPlot.h new file mode 100644 index 00000000..9c6364af --- /dev/null +++ b/gr-qtgui/src/lib/TimeDomainDisplayPlot.h @@ -0,0 +1,57 @@ +#ifndef TIME_DOMAIN_DISPLAY_PLOT_HPP +#define TIME_DOMAIN_DISPLAY_PLOT_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TimeDomainDisplayPlot:public QwtPlot{ + Q_OBJECT + +public: + TimeDomainDisplayPlot(QWidget*); + virtual ~TimeDomainDisplayPlot(); + + void PlotNewData(const double* realDataPoints, const double* imagDataPoints, const int64_t numDataPoints); + + void SetImaginaryDataVisible(const bool); + + virtual void replot(); + + void set_yaxis(double min, double max); + +protected slots: + void LegendEntryChecked(QwtPlotItem *plotItem, bool on); + +protected: + +private: + void _resetXAxisPoints(); + + QwtPlotCurve* _real_plot_curve; + QwtPlotCurve* _imag_plot_curve; + + QwtPlotPanner* _panner; + QwtPlotZoomer* _zoomer; + + double* _realDataPoints; + double* _imagDataPoints; + double* _xAxisPoints; + + timespec _lastReplot; + + int64_t _numPoints; + + double _displayIntervalTime; +}; + +#endif /* TIME_DOMAIN_DISPLAY_PLOT_HPP */ diff --git a/gr-qtgui/src/lib/TimeDomainDisplayPlot_moc.cc b/gr-qtgui/src/lib/TimeDomainDisplayPlot_moc.cc new file mode 100644 index 00000000..1ad5825c --- /dev/null +++ b/gr-qtgui/src/lib/TimeDomainDisplayPlot_moc.cc @@ -0,0 +1,74 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'TimeDomainDisplayPlot.h' +** +** Created: Tue Jul 14 15:57:22 2009 +** by: The Qt Meta Object Compiler version 61 (Qt 4.5.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "TimeDomainDisplayPlot.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'TimeDomainDisplayPlot.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_TimeDomainDisplayPlot[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 1, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // slots: signature, parameters, type, tag, flags + 35, 23, 22, 22, 0x09, + + 0 // eod +}; + +static const char qt_meta_stringdata_TimeDomainDisplayPlot[] = { + "TimeDomainDisplayPlot\0\0plotItem,on\0" + "LegendEntryChecked(QwtPlotItem*,bool)\0" +}; + +const QMetaObject TimeDomainDisplayPlot::staticMetaObject = { + { &QwtPlot::staticMetaObject, qt_meta_stringdata_TimeDomainDisplayPlot, + qt_meta_data_TimeDomainDisplayPlot, 0 } +}; + +const QMetaObject *TimeDomainDisplayPlot::metaObject() const +{ + return &staticMetaObject; +} + +void *TimeDomainDisplayPlot::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_TimeDomainDisplayPlot)) + return static_cast(const_cast< TimeDomainDisplayPlot*>(this)); + return QwtPlot::qt_metacast(_clname); +} + +int TimeDomainDisplayPlot::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QwtPlot::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: LegendEntryChecked((*reinterpret_cast< QwtPlotItem*(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break; + default: ; + } + _id -= 1; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc new file mode 100644 index 00000000..1b665061 --- /dev/null +++ b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.cc @@ -0,0 +1,361 @@ +#ifndef WATERFALL_3D_DISPLAY_PLOT_C +#define WATERFALL_3D_DISPLAY_PLOT_C + +#include + +#include +#include + +Waterfall3DColorMap::Waterfall3DColorMap(): Qwt3D::Color(), QwtLinearColorMap(){ + _interval.setInterval(0, 1.0); + +} + +Waterfall3DColorMap::~Waterfall3DColorMap(){ + +} + +Qwt3D::RGBA Waterfall3DColorMap::operator()(double, double, double z)const{ + return Qwt3D::RGBA(Qwt3D::Qt2GL(color(_interval, z))); +} + +void Waterfall3DColorMap::SetInterval(const double minValue, const double maxValue){ + _interval.setInterval(minValue, maxValue); +} + +Qwt3D::ColorVector& Waterfall3DColorMap::createVector(Qwt3D::ColorVector& vec) { + // Generate 100 interval values and then return those + Qwt3D::ColorVector colorVec; + for(unsigned int number = 0; number < 100; number++){ + double value = (_interval.width() * (static_cast(number) / 100.0)) + _interval.minValue(); + colorVec.push_back(operator()(0,0,value)); + } + vec = colorVec; + return vec; +} + + +const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR; +const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_WHITE_HOT; +const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_BLACK_HOT; +const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_INCANDESCENT; +const int Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED; + +Waterfall3DDisplayPlot::Waterfall3DDisplayPlot(QWidget* parent):Qwt3D::SurfacePlot(parent){ + _startFrequency = 0; + _stopFrequency = 4000; + + _createCoordinateSystemFlag = true; + + _initialized = false; + + _numPoints = 1024; + + _displayIntervalTime = (1.0/5.0); // 1/5 of a second between updates + + timespec_reset(&_lastReplot); + + _useCenterFrequencyFlag = false; + _centerFrequency = 0.0; + + _timePerFFT = 1.0; + timespec_reset(&_dataTimestamp); + + coordinates()->setAutoScale(false); + + _waterfallData = new Waterfall3DData(_startFrequency, _stopFrequency, _numPoints, 200); + _waterfallData->assign(this); + _waterfallData->create(); + + _intensityColorMapType = -1; + SetIntensityColorMapType(INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR, Qt::white, Qt::black, true, true); + + legend()->setScale(Qwt3D::LINEARSCALE); + legend()->setTitleString("Intensity"); + + enableMouse(true); +} + +Waterfall3DDisplayPlot::~Waterfall3DDisplayPlot(){ + delete _waterfallData; +} + +void Waterfall3DDisplayPlot::Init(){ + if(!_initialized && initializedGL()){ + resize(parentWidget()->width(), parentWidget()->height()); + + // Attempting to prevent valgrind uninitialized variable errors in QwtPlot3d::Drawable class + glDisable(GL_POLYGON_OFFSET_FILL); + + setPlotStyle(Qwt3D::FILLED); + + setCoordinateStyle(Qwt3D::FRAME); + setFloorStyle(Qwt3D::FLOORDATA); + setOrtho(true); + + _initialized = true; + } +} + +void Waterfall3DDisplayPlot::Reset(){ + _waterfallData->ResizeData(_startFrequency, _stopFrequency, _numPoints); + _waterfallData->Reset(); + + if(initializedGL()){ + setScale(1, static_cast(((_stopFrequency - _startFrequency) / 200) ), 10); + } + + _createCoordinateSystemFlag = true; + + timespec_reset(&_dataTimestamp); + _timePerFFT = 1.0; +} + +void +Waterfall3DDisplayPlot::SetFrequencyRange(const double constStartFreq, + const double constStopFreq, + const double constCenterFreq, + const bool useCenterFrequencyFlag, + const double units, const std::string &strunits) +{ + double startFreq = constStartFreq / units; + double stopFreq = constStopFreq / units; + double centerFreq = constCenterFreq / units; + + if(stopFreq > startFreq) { + _startFrequency = startFreq; + _stopFrequency = stopFreq; + + _useCenterFrequencyFlag = useCenterFrequencyFlag; + _centerFrequency = centerFreq; + + Reset(); + + // Only replot if screen is visible + if(isVisible()){ + replot(); + } + } +} + +bool Waterfall3DDisplayPlot::loadFromData(double** data, unsigned int columns, unsigned int rows + ,double minx, double maxx, double miny, double maxy){ + + Qwt3D::GridData* gridPtr = (Qwt3D::GridData*)actualData_p; + + gridPtr->setPeriodic(false,false); + gridPtr->setSize(columns,rows); + readIn(*gridPtr,data,columns,rows,minx,maxx,miny,maxy); + calcNormals(*gridPtr); + + updateData(); + updateNormals(); + + if( _createCoordinateSystemFlag ){ + createCoordinateSystem(); + + for (unsigned i=0; i!=coordinates()->axes.size(); ++i) + { + coordinates()->axes[i].setMajors(5); + coordinates()->axes[i].setMinors(3); + } + + coordinates()->axes[Qwt3D::Y1].setLabelString("Time"); + coordinates()->axes[Qwt3D::Y2].setLabelString("Time"); + coordinates()->axes[Qwt3D::Y3].setLabelString("Time"); + coordinates()->axes[Qwt3D::Y4].setLabelString("Time"); + coordinates()->axes[Qwt3D::Z1].setLabelString("Intensity (dB)"); + coordinates()->axes[Qwt3D::Z2].setLabelString("Intensity (dB)"); + coordinates()->axes[Qwt3D::Z3].setLabelString("Intensity (dB)"); + coordinates()->axes[Qwt3D::Z4].setLabelString("Intensity (dB)"); + + coordinates()->axes[Qwt3D::X1].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)")); + coordinates()->axes[Qwt3D::X2].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)")); + coordinates()->axes[Qwt3D::X3].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)")); + coordinates()->axes[Qwt3D::X4].setLabelString((!_useCenterFrequencyFlag ? "Frequency (Hz)" : "Frequency (kHz)")); + + // The QwtPlot3D Interface takes ownership of these items, so there is no need to delete them... + coordinates()->axes[Qwt3D::X1].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency)); + coordinates()->axes[Qwt3D::X2].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency)); + coordinates()->axes[Qwt3D::X3].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency)); + coordinates()->axes[Qwt3D::X4].setScale(new FrequencyScale(_useCenterFrequencyFlag, _centerFrequency)); + + coordinates()->axes[Qwt3D::Y1].setScale(new TimeScale(this)); + coordinates()->axes[Qwt3D::Y2].setScale(new TimeScale(this)); + coordinates()->axes[Qwt3D::Y3].setScale(new TimeScale(this)); + coordinates()->axes[Qwt3D::Y4].setScale(new TimeScale(this)); + + coordinates()->axes[Qwt3D::Z1].setScale(new IntensityScale(_waterfallData->GetFloorValue())); + coordinates()->axes[Qwt3D::Z2].setScale(new IntensityScale(_waterfallData->GetFloorValue())); + coordinates()->axes[Qwt3D::Z3].setScale(new IntensityScale(_waterfallData->GetFloorValue())); + coordinates()->axes[Qwt3D::Z4].setScale(new IntensityScale(_waterfallData->GetFloorValue())); + + _createCoordinateSystemFlag = false; + } + + return true; +} + +double Waterfall3DDisplayPlot::GetStartFrequency()const{ + return _startFrequency; +} + +double Waterfall3DDisplayPlot::GetStopFrequency()const{ + return _stopFrequency; +} + +void Waterfall3DDisplayPlot::PlotNewData(const double* dataPoints, const int64_t numDataPoints, const double timePerFFT, const timespec timestamp, const int droppedFrames){ + if(numDataPoints > 0){ + if(numDataPoints != _numPoints){ + _numPoints = numDataPoints; + + Reset(); + + if(isVisible()){ + replot(); + } + + _createCoordinateSystemFlag = true; + + _lastReplot = get_highres_clock(); + } + + _dataTimestamp = timestamp; + _timePerFFT = timePerFFT; + + _waterfallData->addFFTData(dataPoints, numDataPoints, droppedFrames); + _waterfallData->IncrementNumLinesToUpdate(); + } + + // Allow at least a 50% duty cycle + if(diff_timespec(get_highres_clock(), _lastReplot) > _displayIntervalTime){ + // Only update when window is visible + if(isVisible()){ + replot(); + } + + _lastReplot = get_highres_clock(); + } +} + +void Waterfall3DDisplayPlot::SetIntensityRange(const double minIntensity, const double maxIntensity){ + _waterfallData->SetFloorValue(minIntensity); + _waterfallData->setMinZ(0); + _waterfallData->setMaxZ(maxIntensity-minIntensity); + + _createCoordinateSystemFlag = true; + + emit UpdatedLowerIntensityLevel(minIntensity); + emit UpdatedUpperIntensityLevel(maxIntensity); + + SetIntensityColorMapType(_intensityColorMapType, _userDefinedLowIntensityColor, _userDefinedLowIntensityColor, true); +} + +void Waterfall3DDisplayPlot::replot(){ + + if(!_initialized){ + Init(); + } + if(initializedGL()){ + const timespec startTime = get_highres_clock(); + + _waterfallData->create(); + + legend()->setMajors(4); + legend()->setMinors(5); + double start, stop; + coordinates()->axes[Qwt3D::Z1].limits(start,stop); + legend()->setLimits( _waterfallData->GetFloorValue(), _waterfallData->GetFloorValue() + stop - start ); + + coordinates()->axes[Qwt3D::X1].limits(start,stop); + + showColorLegend(true); + + updateGL(); + + double differenceTime = (diff_timespec(get_highres_clock(), startTime)); + + // Require at least a 20% duty cycle + differenceTime *= 4.0; + if(differenceTime > (1.0/5.0)){ + _displayIntervalTime = differenceTime; + } + } +} + +int Waterfall3DDisplayPlot::GetIntensityColorMapType()const{ + return _intensityColorMapType; +} + +void Waterfall3DDisplayPlot::SetIntensityColorMapType(const int newType, const QColor lowColor, const QColor highColor, const bool forceFlag, const bool noReplotFlag){ + if(((_intensityColorMapType != newType) || forceFlag) || + ((newType == INTENSITY_COLOR_MAP_TYPE_USER_DEFINED) && + (lowColor.isValid() && highColor.isValid()))){ + + Waterfall3DColorMap* colorMap = new Waterfall3DColorMap(); + colorMap->SetInterval(_waterfallData->minZ(), _waterfallData->maxZ()); + + switch(newType){ + case INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR:{ + _intensityColorMapType = newType; + colorMap->setColorInterval(Qt::darkCyan, Qt::white); + colorMap->addColorStop(0.25, Qt::cyan); + colorMap->addColorStop(0.5, Qt::yellow); + colorMap->addColorStop(0.75, Qt::red); + setBackgroundColor(Qwt3D::Qt2GL(Qt::gray)); + break; + } + case INTENSITY_COLOR_MAP_TYPE_WHITE_HOT:{ + _intensityColorMapType = newType; + colorMap->setColorInterval(Qt::black, Qt::white); + setBackgroundColor(Qwt3D::Qt2GL(Qt::blue)); + break; + } + case INTENSITY_COLOR_MAP_TYPE_BLACK_HOT:{ + _intensityColorMapType = newType; + colorMap->setColorInterval(Qt::white, Qt::black); + setBackgroundColor(Qwt3D::Qt2GL(Qt::blue)); + break; + } + case INTENSITY_COLOR_MAP_TYPE_INCANDESCENT:{ + _intensityColorMapType = newType; + colorMap->setColorInterval(Qt::black, Qt::white); + colorMap->addColorStop(0.5, Qt::darkRed); + setBackgroundColor(Qwt3D::Qt2GL(Qt::gray)); + break; + } + case INTENSITY_COLOR_MAP_TYPE_USER_DEFINED:{ + _userDefinedLowIntensityColor = lowColor; + _userDefinedHighIntensityColor = highColor; + _intensityColorMapType = newType; + colorMap->setColorInterval(_userDefinedLowIntensityColor, _userDefinedHighIntensityColor); + setBackgroundColor(Qwt3D::Qt2GL(Qt::white)); + break; + } + default: + colorMap->setColorInterval(Qt::black, Qt::white); + break; + } + + // Qwt3D takes over destruction of this object... + setDataColor(colorMap); + + if(!noReplotFlag){ + // Draw again + replot(); + + // Update the last replot timer + _lastReplot = get_highres_clock(); + } + } +} + +const QColor Waterfall3DDisplayPlot::GetUserDefinedLowIntensityColor()const{ + return _userDefinedLowIntensityColor; +} + +const QColor Waterfall3DDisplayPlot::GetUserDefinedHighIntensityColor()const{ + return _userDefinedHighIntensityColor; +} + +#endif /* WATERFALL_3D_DISPLAY_PLOT_C */ diff --git a/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h new file mode 100644 index 00000000..f46f260e --- /dev/null +++ b/gr-qtgui/src/lib/Waterfall3DDisplayPlot.h @@ -0,0 +1,191 @@ +#ifndef WATERFALL_3D_DISPLAY_PLOT_HPP +#define WATERFALL_3D_DISPLAY_PLOT_HPP + +#include +#include + +#include +#include + +#include +#include + +class Waterfall3DColorMap:public Qwt3D::Color, public QwtLinearColorMap{ +public: + Waterfall3DColorMap(); + virtual ~Waterfall3DColorMap(); + + virtual Qwt3D::RGBA operator()(double x, double y, double z)const; + virtual Qwt3D::ColorVector& createVector(Qwt3D::ColorVector& vec); + + virtual void SetInterval(const double minValue, const double maxValue); + +protected: + +private: + QwtDoubleInterval _interval; +}; + +class Waterfall3DDisplayPlot:public Qwt3D::SurfacePlot{ + Q_OBJECT + + protected: + class IntensityScale:public Qwt3D::LinearScale{ + + friend class Qwt3D::Axis; + friend class Qwt3D::qwt3d_ptr; + + private: + double _floor; + + public: + explicit IntensityScale(const double newFloor):_floor(newFloor){ } + virtual ~IntensityScale(){} + + virtual QString ticLabel(unsigned int idx) const{ + if (idx; + friend class Waterfall3DDisplayPlot; + + private: + Waterfall3DDisplayPlot* _plot; + + public: + TimeScale(Waterfall3DDisplayPlot* plot ):_plot(plot){ + } + virtual ~TimeScale(){ + } + + virtual QString ticLabel(unsigned int idx) const{ + if (idx_dataTimestamp, -(_plot->_timePerFFT) * majors_p[idx]); + struct tm timeTm; + gmtime_r(&markerTime.tv_sec, &timeTm); + + char* timeBuffer = new char[128]; + snprintf(timeBuffer, 128, "%02d:%02d:%02d.%03ld", timeTm.tm_hour, timeTm.tm_min, timeTm.tm_sec, (markerTime.tv_nsec / 1000000)); + QString returnBuffer(timeBuffer); + delete[] timeBuffer; + return returnBuffer; + } + return QString(""); + } + + //! Returns a new heap based object utilized from qwt3d_ptr + Scale* clone() const {return new TimeScale(*this);} + }; + + class FrequencyScale: public Qwt3D::LinearScale{ + + friend class Qwt3D::Axis; + friend class Qwt3D::qwt3d_ptr; + private: + double _centerFrequency; + bool _useCenterFrequencyFlag; + public: + FrequencyScale(bool useCenterFrequencyFlag, double centerFrequency):_centerFrequency(centerFrequency),_useCenterFrequencyFlag(useCenterFrequencyFlag){} + virtual ~FrequencyScale(){} + + virtual QString ticLabel(unsigned int idx) const{ + if (idx." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_Waterfall3DDisplayPlot[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 2, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // signals: signature, parameters, type, tag, flags + 24, 23, 23, 23, 0x05, + 59, 23, 23, 23, 0x05, + + 0 // eod +}; + +static const char qt_meta_stringdata_Waterfall3DDisplayPlot[] = { + "Waterfall3DDisplayPlot\0\0" + "UpdatedLowerIntensityLevel(double)\0" + "UpdatedUpperIntensityLevel(double)\0" +}; + +const QMetaObject Waterfall3DDisplayPlot::staticMetaObject = { + { &Qwt3D::SurfacePlot::staticMetaObject, qt_meta_stringdata_Waterfall3DDisplayPlot, + qt_meta_data_Waterfall3DDisplayPlot, 0 } +}; + +const QMetaObject *Waterfall3DDisplayPlot::metaObject() const +{ + return &staticMetaObject; +} + +void *Waterfall3DDisplayPlot::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_Waterfall3DDisplayPlot)) + return static_cast(const_cast< Waterfall3DDisplayPlot*>(this)); + typedef Qwt3D::SurfacePlot QMocSuperClass; + return QMocSuperClass::qt_metacast(_clname); +} + +int Waterfall3DDisplayPlot::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + typedef Qwt3D::SurfacePlot QMocSuperClass; + _id = QMocSuperClass::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: UpdatedLowerIntensityLevel((*reinterpret_cast< const double(*)>(_a[1]))); break; + case 1: UpdatedUpperIntensityLevel((*reinterpret_cast< const double(*)>(_a[1]))); break; + default: ; + } + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void Waterfall3DDisplayPlot::UpdatedLowerIntensityLevel(const double _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} + +// SIGNAL 1 +void Waterfall3DDisplayPlot::UpdatedUpperIntensityLevel(const double _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 1, _a); +} +QT_END_MOC_NAMESPACE diff --git a/gr-qtgui/src/lib/WaterfallDisplayPlot.cc b/gr-qtgui/src/lib/WaterfallDisplayPlot.cc new file mode 100644 index 00000000..ad167f09 --- /dev/null +++ b/gr-qtgui/src/lib/WaterfallDisplayPlot.cc @@ -0,0 +1,494 @@ +#ifndef WATERFALL_DISPLAY_PLOT_C +#define WATERFALL_DISPLAY_PLOT_C + +#include + +#include +#include +#include +#include +#include +#include + +#include + +class FreqOffsetAndPrecisionClass +{ +public: + FreqOffsetAndPrecisionClass(const int freqPrecision){ + _frequencyPrecision = freqPrecision; + _centerFrequency = 0; + } + + virtual ~FreqOffsetAndPrecisionClass(){ + + } + + virtual unsigned int GetFrequencyPrecision()const{ + return _frequencyPrecision; + } + + virtual void SetFrequencyPrecision(const unsigned int newPrecision){ + _frequencyPrecision = newPrecision; + } + + virtual double GetCenterFrequency()const{ + return _centerFrequency; + } + + virtual void SetCenterFrequency(const double newFreq){ + _centerFrequency = newFreq; + } + +protected: + unsigned int _frequencyPrecision; + double _centerFrequency; + +private: + +}; + +class WaterfallFreqDisplayScaleDraw: public QwtScaleDraw, public FreqOffsetAndPrecisionClass{ +public: + WaterfallFreqDisplayScaleDraw(const unsigned int precision):QwtScaleDraw(), FreqOffsetAndPrecisionClass(precision){ + + } + + virtual ~WaterfallFreqDisplayScaleDraw(){ + + } + + QwtText label(double value)const{ + return QString("%1").arg((value + GetCenterFrequency()) / ((GetFrequencyPrecision() == 0) ? 1.0 : 1000.0), 0, 'f', GetFrequencyPrecision()); + } + + virtual void initiateUpdate(){ + invalidateCache(); + } + +protected: + +private: + +}; + +class TimeScaleData +{ +public: + TimeScaleData(){ + timespec_reset(&_zeroTime); + _secondsPerLine = 1.0; + + } + + virtual ~TimeScaleData(){ + + } + + virtual timespec GetZeroTime()const{ + return _zeroTime; + } + + virtual void SetZeroTime(const timespec newTime){ + _zeroTime = newTime; + } + + virtual void SetSecondsPerLine(const double newTime){ + _secondsPerLine = newTime; + } + + virtual double GetSecondsPerLine()const{ + return _secondsPerLine; + } + + +protected: + timespec _zeroTime; + double _secondsPerLine; + +private: + +}; + +class QwtTimeScaleDraw: public QwtScaleDraw, public TimeScaleData +{ +public: + QwtTimeScaleDraw():QwtScaleDraw(),TimeScaleData(){ + + } + + virtual ~QwtTimeScaleDraw(){ + + } + + virtual QwtText label(double value)const{ + QwtText returnLabel(""); + + timespec lineTime = timespec_add(GetZeroTime(), (-value) * GetSecondsPerLine()); + struct tm timeTm; + gmtime_r(&lineTime.tv_sec, &timeTm); + returnLabel = (QString("").sprintf("%04d/%02d/%02d\n%02d:%02d:%02d.%03ld", timeTm.tm_year+1900, timeTm.tm_mon+1, timeTm.tm_mday, timeTm.tm_hour, timeTm.tm_min, timeTm.tm_sec, lineTime.tv_nsec/1000000)); + + return returnLabel; + } + + virtual void initiateUpdate(){ + // Do this in one call rather than when zeroTime and secondsPerLine updates is to prevent the display from being updated too often... + invalidateCache(); + } + +protected: + +private: + +}; + +class WaterfallZoomer: public QwtPlotZoomer, public TimeScaleData, public FreqOffsetAndPrecisionClass +{ +public: + WaterfallZoomer(QwtPlotCanvas* canvas, const unsigned int freqPrecision):QwtPlotZoomer(canvas), TimeScaleData(), FreqOffsetAndPrecisionClass(freqPrecision) + { + setTrackerMode(QwtPicker::AlwaysOn); + } + + virtual ~WaterfallZoomer(){ + + } + + virtual void updateTrackerText(){ + updateDisplay(); + } + +protected: + virtual QwtText trackerText( const QwtDoublePoint& p ) const + { + QString yLabel(""); + + timespec lineTime = timespec_add(GetZeroTime(), (-p.y()) * GetSecondsPerLine()); + struct tm timeTm; + gmtime_r(&lineTime.tv_sec, &timeTm); + yLabel = (QString("").sprintf("%04d/%02d/%02d %02d:%02d:%02d.%03ld", timeTm.tm_year+1900, timeTm.tm_mon+1, timeTm.tm_mday, timeTm.tm_hour, timeTm.tm_min, timeTm.tm_sec, lineTime.tv_nsec/1000000)); + + QwtText t(QString("%1 %2, %3").arg((p.x() + GetCenterFrequency()) / ((GetFrequencyPrecision() == 0) ? 1.0 : 1000.0), 0, 'f', GetFrequencyPrecision()).arg( (GetFrequencyPrecision() == 0) ? "Hz" : "kHz").arg(yLabel)); + + return t; + } +}; + + +const int WaterfallDisplayPlot::INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR; +const int WaterfallDisplayPlot::INTENSITY_COLOR_MAP_TYPE_WHITE_HOT; +const int WaterfallDisplayPlot::INTENSITY_COLOR_MAP_TYPE_BLACK_HOT; +const int WaterfallDisplayPlot::INTENSITY_COLOR_MAP_TYPE_INCANDESCENT; +const int WaterfallDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED; + +WaterfallDisplayPlot::WaterfallDisplayPlot(QWidget* parent) + : QwtPlot(parent) +{ + _zoomer = NULL; + _startFrequency = 0; + _stopFrequency = 4000; + + resize(parent->width(), parent->height()); + _numPoints = 1024; + + _displayIntervalTime = (1.0/5.0); // 1/5 of a second between updates + + _waterfallData = new WaterfallData(_startFrequency, _stopFrequency, _numPoints, 200); + + QPalette palette; + palette.setColor(canvas()->backgroundRole(), QColor("white")); + canvas()->setPalette(palette); + + setAxisTitle(QwtPlot::xBottom, "Frequency (Hz)"); + setAxisScaleDraw(QwtPlot::xBottom, new WaterfallFreqDisplayScaleDraw(0)); + + setAxisTitle(QwtPlot::yLeft, "Time"); + setAxisScaleDraw(QwtPlot::yLeft, new QwtTimeScaleDraw()); + + timespec_reset(&_lastReplot); + + d_spectrogram = new PlotWaterfall(_waterfallData, "Waterfall Display"); + + _intensityColorMapType = INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR; + + QwtLinearColorMap colorMap(Qt::darkCyan, Qt::white); + colorMap.addColorStop(0.25, Qt::cyan); + colorMap.addColorStop(0.5, Qt::yellow); + colorMap.addColorStop(0.75, Qt::red); + + d_spectrogram->setColorMap(colorMap); + + d_spectrogram->attach(this); + + // LeftButton for the zooming + // MidButton for the panning + // RightButton: zoom out by 1 + // Ctrl+RighButton: zoom out to full size + + _zoomer = new WaterfallZoomer(canvas(), 0); +#if QT_VERSION < 0x040000 + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#else + _zoomer->setMousePattern(QwtEventPattern::MouseSelect2, + Qt::RightButton, Qt::ControlModifier); +#endif + _zoomer->setMousePattern(QwtEventPattern::MouseSelect3, + Qt::RightButton); + + _panner = new QwtPlotPanner(canvas()); + _panner->setAxisEnabled(QwtPlot::yRight, false); + _panner->setMouseButton(Qt::MidButton); + + // Avoid jumping when labels with more/less digits + // appear/disappear when scrolling vertically + + const QFontMetrics fm(axisWidget(QwtPlot::yLeft)->font()); + QwtScaleDraw *sd = axisScaleDraw(QwtPlot::yLeft); + sd->setMinimumExtent( fm.width("100.00") ); + + const QColor c(Qt::white); + _zoomer->setRubberBandPen(c); + _zoomer->setTrackerPen(c); + + _UpdateIntensityRangeDisplay(); +} + +WaterfallDisplayPlot::~WaterfallDisplayPlot() +{ + delete _waterfallData; +} + +void +WaterfallDisplayPlot::Reset() +{ + _waterfallData->ResizeData(_startFrequency, _stopFrequency, _numPoints); + _waterfallData->Reset(); + + // Load up the new base zoom settings + QwtDoubleRect newSize = _zoomer->zoomBase(); + newSize.setLeft(_startFrequency); + newSize.setWidth(_stopFrequency-_startFrequency); + _zoomer->zoom(newSize); + _zoomer->setZoomBase(newSize); + _zoomer->zoom(0); +} + +void +WaterfallDisplayPlot::SetFrequencyRange(const double constStartFreq, + const double constStopFreq, + const double constCenterFreq, + const bool useCenterFrequencyFlag, + const double units, const std::string &strunits) +{ + double startFreq = constStartFreq / units; + double stopFreq = constStopFreq / units; + double centerFreq = constCenterFreq / units; + + if(stopFreq > startFreq) { + _startFrequency = 1000*startFreq; + _stopFrequency = 1000*stopFreq; + + setAxisScale(QwtPlot::xBottom, _startFrequency, _stopFrequency); + + if((axisScaleDraw(QwtPlot::xBottom) != NULL) && (_zoomer != NULL)){ + WaterfallFreqDisplayScaleDraw* freqScale = ((WaterfallFreqDisplayScaleDraw*)axisScaleDraw(QwtPlot::xBottom)); + freqScale->SetCenterFrequency(centerFreq); + ((WaterfallZoomer*)_zoomer)->SetCenterFrequency(centerFreq); + + freqScale->SetFrequencyPrecision( 2 ); + ((WaterfallZoomer*)_zoomer)->SetFrequencyPrecision( 2 ); + setAxisTitle(QwtPlot::xBottom, QString("Frequency (%1)").arg(strunits.c_str())); + } + + Reset(); + + // Only replot if screen is visible + if(isVisible()){ + replot(); + } + } +} + + +double WaterfallDisplayPlot::GetStartFrequency()const{ + return _startFrequency; +} + +double WaterfallDisplayPlot::GetStopFrequency()const{ + return _stopFrequency; +} + +void WaterfallDisplayPlot::PlotNewData(const double* dataPoints, const int64_t numDataPoints, const double timePerFFT, const timespec timestamp, const int droppedFrames){ + if(numDataPoints > 0){ + if(numDataPoints != _numPoints){ + _numPoints = numDataPoints; + + Reset(); + + d_spectrogram->invalidateCache(); + d_spectrogram->itemChanged(); + + if(isVisible()){ + replot(); + } + + _lastReplot = get_highres_clock(); + } + + _waterfallData->addFFTData(dataPoints, numDataPoints, droppedFrames); + _waterfallData->IncrementNumLinesToUpdate(); + + QwtTimeScaleDraw* timeScale = (QwtTimeScaleDraw*)axisScaleDraw(QwtPlot::yLeft); + timeScale->SetSecondsPerLine(timePerFFT); + timeScale->SetZeroTime(timestamp); + + ((WaterfallZoomer*)_zoomer)->SetSecondsPerLine(timePerFFT); + ((WaterfallZoomer*)_zoomer)->SetZeroTime(timestamp); + } + + // Allow at least a 50% duty cycle + if(diff_timespec(get_highres_clock(), _lastReplot) > _displayIntervalTime){ + + d_spectrogram->invalidateCache(); + d_spectrogram->itemChanged(); + + // Only update when window is visible + if(isVisible()){ + replot(); + } + + _lastReplot = get_highres_clock(); + } +} + +void WaterfallDisplayPlot::SetIntensityRange(const double minIntensity, const double maxIntensity){ + _waterfallData->setRange(QwtDoubleInterval(minIntensity, maxIntensity)); + + emit UpdatedLowerIntensityLevel(minIntensity); + emit UpdatedUpperIntensityLevel(maxIntensity); + + _UpdateIntensityRangeDisplay(); +} + +void WaterfallDisplayPlot::replot(){ + const timespec startTime = get_highres_clock(); + + QwtTimeScaleDraw* timeScale = (QwtTimeScaleDraw*)axisScaleDraw(QwtPlot::yLeft); + timeScale->initiateUpdate(); + + WaterfallFreqDisplayScaleDraw* freqScale = (WaterfallFreqDisplayScaleDraw*)axisScaleDraw(QwtPlot::xBottom); + freqScale->initiateUpdate(); + + // Update the time axis display + if(axisWidget(QwtPlot::yLeft) != NULL){ + axisWidget(QwtPlot::yLeft)->update(); + } + + // Update the Frequency Offset Display + if(axisWidget(QwtPlot::xBottom) != NULL){ + axisWidget(QwtPlot::xBottom)->update(); + } + + if(_zoomer != NULL){ + ((WaterfallZoomer*)_zoomer)->updateTrackerText(); + } + + QwtPlot::replot(); + + double differenceTime = (diff_timespec(get_highres_clock(), startTime)); + + // Require at least a 5% duty cycle + differenceTime *= 19.0; + if(differenceTime > (1.0/5.0)){ + _displayIntervalTime = differenceTime; + } +} + +int WaterfallDisplayPlot::GetIntensityColorMapType()const{ + return _intensityColorMapType; +} + +void WaterfallDisplayPlot::SetIntensityColorMapType(const int newType, const QColor lowColor, const QColor highColor){ + if((_intensityColorMapType != newType) || + ((newType == INTENSITY_COLOR_MAP_TYPE_USER_DEFINED) && + (lowColor.isValid() && highColor.isValid()))){ + switch(newType){ + case INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR:{ + _intensityColorMapType = newType; + QwtLinearColorMap colorMap(Qt::darkCyan, Qt::white); + colorMap.addColorStop(0.25, Qt::cyan); + colorMap.addColorStop(0.5, Qt::yellow); + colorMap.addColorStop(0.75, Qt::red); + d_spectrogram->setColorMap(colorMap); + break; + } + case INTENSITY_COLOR_MAP_TYPE_WHITE_HOT:{ + _intensityColorMapType = newType; + QwtLinearColorMap colorMap(Qt::black, Qt::white); + d_spectrogram->setColorMap(colorMap); + break; + } + case INTENSITY_COLOR_MAP_TYPE_BLACK_HOT:{ + _intensityColorMapType = newType; + QwtLinearColorMap colorMap(Qt::white, Qt::black); + d_spectrogram->setColorMap(colorMap); + break; + } + case INTENSITY_COLOR_MAP_TYPE_INCANDESCENT:{ + _intensityColorMapType = newType; + QwtLinearColorMap colorMap(Qt::black, Qt::white); + colorMap.addColorStop(0.5, Qt::darkRed); + d_spectrogram->setColorMap(colorMap); + break; + } + case INTENSITY_COLOR_MAP_TYPE_USER_DEFINED:{ + _userDefinedLowIntensityColor = lowColor; + _userDefinedHighIntensityColor = highColor; + _intensityColorMapType = newType; + QwtLinearColorMap colorMap(_userDefinedLowIntensityColor, _userDefinedHighIntensityColor); + d_spectrogram->setColorMap(colorMap); + break; + } + default: break; + } + + _UpdateIntensityRangeDisplay(); + } +} + +const QColor WaterfallDisplayPlot::GetUserDefinedLowIntensityColor()const{ + return _userDefinedLowIntensityColor; +} + +const QColor WaterfallDisplayPlot::GetUserDefinedHighIntensityColor()const{ + return _userDefinedHighIntensityColor; +} + +void WaterfallDisplayPlot::_UpdateIntensityRangeDisplay(){ + QwtScaleWidget *rightAxis = axisWidget(QwtPlot::yRight); + rightAxis->setTitle("Intensity (dB)"); + rightAxis->setColorBarEnabled(true); + rightAxis->setColorMap(d_spectrogram->data()->range(), + d_spectrogram->colorMap()); + + setAxisScale(QwtPlot::yRight, + d_spectrogram->data()->range().minValue(), + d_spectrogram->data()->range().maxValue() ); + enableAxis(QwtPlot::yRight); + + plotLayout()->setAlignCanvasToScales(true); + + // Tell the display to redraw everything + d_spectrogram->invalidateCache(); + d_spectrogram->itemChanged(); + + // Draw again + replot(); + + // Update the last replot timer + _lastReplot = get_highres_clock(); +} + +#endif /* WATERFALL_DISPLAY_PLOT_C */ diff --git a/gr-qtgui/src/lib/WaterfallDisplayPlot.h b/gr-qtgui/src/lib/WaterfallDisplayPlot.h new file mode 100644 index 00000000..fbbb69a5 --- /dev/null +++ b/gr-qtgui/src/lib/WaterfallDisplayPlot.h @@ -0,0 +1,78 @@ +#ifndef WATERFALL_DISPLAY_PLOT_HPP +#define WATERFALL_DISPLAY_PLOT_HPP + +#include +#include +#include +#include + +#include + +#include + +class WaterfallDisplayPlot:public QwtPlot{ + Q_OBJECT + +public: + WaterfallDisplayPlot(QWidget*); + virtual ~WaterfallDisplayPlot(); + + void Reset(); + + void SetFrequencyRange(const double, const double, + const double, const bool, + const double units=1000.0, + const std::string &strunits = "kHz"); + double GetStartFrequency()const; + double GetStopFrequency()const; + + void PlotNewData(const double* dataPoints, const int64_t numDataPoints, + const double timePerFFT, const timespec timestamp, + const int droppedFrames); + + void SetIntensityRange(const double minIntensity, const double maxIntensity); + + virtual void replot(void); + + int GetIntensityColorMapType()const; + void SetIntensityColorMapType( const int, const QColor, const QColor ); + const QColor GetUserDefinedLowIntensityColor()const; + const QColor GetUserDefinedHighIntensityColor()const; + + static const int INTENSITY_COLOR_MAP_TYPE_MULTI_COLOR = 0; + static const int INTENSITY_COLOR_MAP_TYPE_WHITE_HOT = 1; + static const int INTENSITY_COLOR_MAP_TYPE_BLACK_HOT = 2; + static const int INTENSITY_COLOR_MAP_TYPE_INCANDESCENT = 3; + static const int INTENSITY_COLOR_MAP_TYPE_USER_DEFINED = 4; + +signals: + void UpdatedLowerIntensityLevel(const double); + void UpdatedUpperIntensityLevel(const double); + +protected: + +private: + void _UpdateIntensityRangeDisplay(); + + double _startFrequency; + double _stopFrequency; + + PlotWaterfall *d_spectrogram; + + QwtPlotPanner* _panner; + QwtPlotZoomer* _zoomer; + + WaterfallData* _waterfallData; + + timespec _lastReplot; + + int64_t _numPoints; + + double _displayIntervalTime; + + int _intensityColorMapType; + QColor _userDefinedLowIntensityColor; + QColor _userDefinedHighIntensityColor; +}; + +#endif /* WATERFALL_DISPLAY_PLOT_HPP */ diff --git a/gr-qtgui/src/lib/WaterfallDisplayPlot_moc.cc b/gr-qtgui/src/lib/WaterfallDisplayPlot_moc.cc new file mode 100644 index 00000000..105223e3 --- /dev/null +++ b/gr-qtgui/src/lib/WaterfallDisplayPlot_moc.cc @@ -0,0 +1,91 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'WaterfallDisplayPlot.h' +** +** Created: Tue Jul 14 15:57:22 2009 +** by: The Qt Meta Object Compiler version 61 (Qt 4.5.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "WaterfallDisplayPlot.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'WaterfallDisplayPlot.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_WaterfallDisplayPlot[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 2, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // signals: signature, parameters, type, tag, flags + 22, 21, 21, 21, 0x05, + 57, 21, 21, 21, 0x05, + + 0 // eod +}; + +static const char qt_meta_stringdata_WaterfallDisplayPlot[] = { + "WaterfallDisplayPlot\0\0" + "UpdatedLowerIntensityLevel(double)\0" + "UpdatedUpperIntensityLevel(double)\0" +}; + +const QMetaObject WaterfallDisplayPlot::staticMetaObject = { + { &QwtPlot::staticMetaObject, qt_meta_stringdata_WaterfallDisplayPlot, + qt_meta_data_WaterfallDisplayPlot, 0 } +}; + +const QMetaObject *WaterfallDisplayPlot::metaObject() const +{ + return &staticMetaObject; +} + +void *WaterfallDisplayPlot::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_WaterfallDisplayPlot)) + return static_cast(const_cast< WaterfallDisplayPlot*>(this)); + return QwtPlot::qt_metacast(_clname); +} + +int WaterfallDisplayPlot::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QwtPlot::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: UpdatedLowerIntensityLevel((*reinterpret_cast< const double(*)>(_a[1]))); break; + case 1: UpdatedUpperIntensityLevel((*reinterpret_cast< const double(*)>(_a[1]))); break; + default: ; + } + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void WaterfallDisplayPlot::UpdatedLowerIntensityLevel(const double _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 0, _a); +} + +// SIGNAL 1 +void WaterfallDisplayPlot::UpdatedUpperIntensityLevel(const double _t1) +{ + void *_a[] = { 0, const_cast(reinterpret_cast(&_t1)) }; + QMetaObject::activate(this, &staticMetaObject, 1, _a); +} +QT_END_MOC_NAMESPACE diff --git a/gr-qtgui/src/lib/highResTimeFunctions.h b/gr-qtgui/src/lib/highResTimeFunctions.h new file mode 100644 index 00000000..b85b1aca --- /dev/null +++ b/gr-qtgui/src/lib/highResTimeFunctions.h @@ -0,0 +1,190 @@ +#ifndef HIGH_RES_TIME_FUNCTIONS_H +#define HIGH_RES_TIME_FUNCTIONS_H + +#include +#include +#include +/* Requires the librt and libm libraries */ + +static const long NSEC_PER_SEC = 1000000000L; + +static inline bool timespec_greater(const struct timespec* t1, const struct timespec* t0){ + return ((t1->tv_sec > t0->tv_sec) || ((t1->tv_sec == t0->tv_sec) && (t1->tv_nsec > t0->tv_nsec))); +} + +static inline bool timespec_greater(const struct timespec t1, const struct timespec t0){ + return ((t1.tv_sec > t0.tv_sec) || ((t1.tv_sec == t0.tv_sec) && (t1.tv_nsec > t0.tv_nsec))); +} + +static inline bool timespec_less(const struct timespec* t1, const struct timespec* t0){ + return ((t1->tv_sec < t0->tv_sec) || ((t1->tv_sec == t0->tv_sec) && (t1->tv_nsec < t0->tv_nsec))); +} + +static inline bool timespec_less(const struct timespec t1, const struct timespec t0){ + return ((t1.tv_sec < t0.tv_sec) || ((t1.tv_sec == t0.tv_sec) && (t1.tv_nsec < t0.tv_nsec))); +} + +static inline bool timespec_equal(const struct timespec* t1, const struct timespec* t0){ + return ((t1->tv_sec == t0->tv_sec) && (t1->tv_nsec == t0->tv_nsec)); +} + +static inline bool timespec_equal(const struct timespec t1, const struct timespec t0){ + return ((t1.tv_sec == t0.tv_sec) && (t1.tv_nsec == t0.tv_nsec)); +} + +static inline void timespec_reset(struct timespec* ret){ + ret->tv_sec = 0; + ret->tv_nsec = 0; +} + +static inline void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec){ + while (nsec > NSEC_PER_SEC){ + nsec -= NSEC_PER_SEC; + ++sec; + } + while(nsec < 0){ + nsec += NSEC_PER_SEC; + --sec; + } + ts->tv_sec = sec; + ts->tv_nsec = nsec; +} + +static inline struct timespec convert_to_timespec(const double timeValue){ + struct timespec ret; + double seconds = 0; + long nsec = static_cast(modf(timeValue, &seconds) * static_cast(NSEC_PER_SEC)); + time_t sec = static_cast(seconds); + + set_normalized_timespec(&ret, sec, nsec); + + return ret; +} + +static inline double convert_from_timespec(const timespec actual){ + return (static_cast(actual.tv_sec) + (static_cast(actual.tv_nsec) / static_cast(NSEC_PER_SEC))); +} + +static inline void timespec_add(struct timespec *ret, const struct timespec* t1, const struct timespec* t0){ + time_t sec = t1->tv_sec + t0->tv_sec; + long nsec = t1->tv_nsec + t0->tv_nsec; + + set_normalized_timespec(ret, sec, nsec); +} + +static inline void timespec_add(struct timespec *ret, const struct timespec t1, const struct timespec t0){ + return timespec_add(ret, &t1, &t0); +} + +static inline struct timespec timespec_add(const struct timespec t1, const struct timespec t0){ + struct timespec ret; + timespec_add(&ret, &t1, &t0); + return ret; +} + +static inline struct timespec timespec_add(const struct timespec t1, const double time0){ + struct timespec ret; + struct timespec t0; + t0 = convert_to_timespec(time0); + + timespec_add(&ret, &t1, &t0); + + return ret; +} + +static inline void timespec_subtract(struct timespec *ret, const struct timespec* t1, const struct timespec* t0){ + time_t sec = t1->tv_sec - t0->tv_sec; + long nsec = t1->tv_nsec - t0->tv_nsec; + + set_normalized_timespec(ret, sec, nsec); +} + +static inline void timespec_subtract(struct timespec *ret, const struct timespec t1, const struct timespec t0){ + return timespec_subtract(ret, &t1, &t0); +} + +static inline struct timespec timespec_subtract(const struct timespec t1, const struct timespec t0){ + struct timespec ret; + timespec_subtract(&ret, &t1, &t0); + return ret; +} + +static inline struct timespec timespec_subtract(const struct timespec t1, const double time0){ + struct timespec ret; + struct timespec t0; + t0 = convert_to_timespec(time0); + + timespec_subtract(&ret, &t1, &t0); + + return ret; +} + +static inline double diff_timespec(struct timespec* ret, const struct timespec *t1, const struct timespec* t0){ + struct timespec actual; + time_t sec = 0; + long nsec = 0; + + if(timespec_greater(t1, t0)){ + sec = t1->tv_sec - t0->tv_sec; + nsec = t1->tv_nsec - t0->tv_nsec; + + set_normalized_timespec(&actual, sec, nsec); + + if(ret != NULL){ + ret->tv_sec = actual.tv_sec; + ret->tv_nsec = actual.tv_nsec; + } + + return convert_from_timespec(actual); + } + else{ + sec = t0->tv_sec - t1->tv_sec; + nsec = t0->tv_nsec - t1->tv_nsec; + + // Do nothing with the ret value as the ret value would have to store a negative, which it can't. + + set_normalized_timespec(&actual, sec, nsec); + + return (-convert_from_timespec(actual)); + } +} + +static inline double diff_timespec(struct timespec* ret, const struct timespec t1, const struct timespec t0){ + return diff_timespec(ret, &t1, &t0); +} + +static inline double diff_timespec(const struct timespec t1, const struct timespec t0){ + return diff_timespec(NULL, &t1, &t0); +} + + +static inline double diff_timespec(const struct timespec* t1, const struct timespec* t0){ + return diff_timespec(NULL, t1, t0); +} + + +static inline void get_highres_clock(struct timespec* ret){ + if(clock_gettime(CLOCK_REALTIME, ret) != 0){ + // Unable to get high resolution time - fail over to low resolution time + timeval lowResTime; + gettimeofday(&lowResTime, NULL); + ret->tv_sec = lowResTime.tv_sec; + ret->tv_nsec = lowResTime.tv_usec*1000; + } +} + +static inline struct timespec get_highres_clock(){ + struct timespec ret; + get_highres_clock(&ret); + return ret; +} + +static inline bool timespec_empty(const struct timespec* ret){ + return ( (ret->tv_sec == 0 ) && (ret->tv_nsec == 0) ); +} + +static inline bool timespec_empty(const struct timespec ret){ + return timespec_empty(&ret); +} + +#endif /* HIGH_RES_TIME_FUNCTIONS_H */ diff --git a/gr-qtgui/src/lib/plot_waterfall.cc b/gr-qtgui/src/lib/plot_waterfall.cc new file mode 100644 index 00000000..2b1447e0 --- /dev/null +++ b/gr-qtgui/src/lib/plot_waterfall.cc @@ -0,0 +1,325 @@ +#include +#include +#include +#include "qwt_painter.h" +#include "qwt_double_interval.h" +#include "qwt_scale_map.h" +#include "qwt_color_map.h" +#include "plot_waterfall.h" + +#if QT_VERSION < 0x040000 +typedef Q3ValueVector QwtColorTable; +#else +typedef QVector QwtColorTable; +#endif + + +class PlotWaterfallImage: public QImage +{ + // This class hides some Qt3/Qt4 API differences +public: + PlotWaterfallImage(const QSize &size, QwtColorMap::Format format): +#if QT_VERSION < 0x040000 + QImage(size, format == QwtColorMap::RGB ? 32 : 8) +#else + QImage(size, format == QwtColorMap::RGB + ? QImage::Format_ARGB32 : QImage::Format_Indexed8 ) +#endif + { + } + + PlotWaterfallImage(const QImage &other): + QImage(other) + { + } + + void initColorTable(const QImage& other) + { +#if QT_VERSION < 0x040000 + const unsigned int numColors = other.numColors(); + + setNumColors(numColors); + for ( unsigned int i = 0; i < numColors; i++ ) + setColor(i, other.color(i)); +#else + setColorTable(other.colorTable()); +#endif + } + +#if QT_VERSION < 0x040000 + + void setColorTable(const QwtColorTable &colorTable) + { + setNumColors(colorTable.size()); + for ( unsigned int i = 0; i < colorTable.size(); i++ ) + setColor(i, colorTable[i]); + } + + QwtColorTable colorTable() const + { + QwtColorTable table(numColors()); + for ( int i = 0; i < numColors(); i++ ) + table[i] = color(i); + + return table; + } +#endif +}; + +class PlotWaterfall::PrivateData +{ +public: + PrivateData() + { + data = NULL; + colorMap = new QwtLinearColorMap(); + } + ~PrivateData() + { + delete colorMap; + } + + WaterfallData *data; + QwtColorMap *colorMap; +}; + +/*! + Sets the following item attributes: + - QwtPlotItem::AutoScale: true + - QwtPlotItem::Legend: false + + The z value is initialized by 8.0. + + \param title Title + + \sa QwtPlotItem::setItemAttribute(), QwtPlotItem::setZ() +*/ +PlotWaterfall::PlotWaterfall(WaterfallData* data, const QString &title): + QwtPlotRasterItem(title) +{ + d_data = new PrivateData(); + d_data->data = data; + +// setCachePolicy(QwtPlotRasterItem::PaintCache); + + setItemAttribute(QwtPlotItem::AutoScale, true); + setItemAttribute(QwtPlotItem::Legend, false); + + setZ(8.0); +} + +//! Destructor +PlotWaterfall::~PlotWaterfall() +{ + delete d_data; +} + +const WaterfallData* PlotWaterfall::data()const{ + return d_data->data; +} + +//! \return QwtPlotItem::Rtti_PlotSpectrogram +int PlotWaterfall::rtti() const +{ + return QwtPlotItem::Rtti_PlotSpectrogram; +} + +/*! + Change the color map + + Often it is useful to display the mapping between intensities and + colors as an additional plot axis, showing a color bar. + + \param colorMap Color Map + + \sa colorMap(), QwtScaleWidget::setColorBarEnabled(), + QwtScaleWidget::setColorMap() +*/ +void PlotWaterfall::setColorMap(const QwtColorMap &colorMap) +{ + delete d_data->colorMap; + d_data->colorMap = colorMap.copy(); + + invalidateCache(); + itemChanged(); +} + +/*! + \return Color Map used for mapping the intensity values to colors + \sa setColorMap() +*/ +const QwtColorMap &PlotWaterfall::colorMap() const +{ + return *d_data->colorMap; +} +/*! + \return Bounding rect of the data + \sa QwtRasterData::boundingRect +*/ +QwtDoubleRect PlotWaterfall::boundingRect() const +{ + return d_data->data->boundingRect(); +} + +/*! + \brief Returns the recommended raster for a given rect. + + F.e the raster hint is used to limit the resolution of + the image that is rendered. + + \param rect Rect for the raster hint + \return data().rasterHint(rect) +*/ +QSize PlotWaterfall::rasterHint(const QwtDoubleRect &rect) const +{ + return d_data->data->rasterHint(rect); +} + +/*! + \brief Render an image from the data and color map. + + The area is translated into a rect of the paint device. + For each pixel of this rect the intensity is mapped + into a color. + + \param xMap X-Scale Map + \param yMap Y-Scale Map + \param area Area that should be rendered in scale coordinates. + + \return A QImage::Format_Indexed8 or QImage::Format_ARGB32 depending + on the color map. + + \sa QwtRasterData::intensity(), QwtColorMap::rgb(), + QwtColorMap::colorIndex() +*/ +QImage PlotWaterfall::renderImage( + const QwtScaleMap &xMap, const QwtScaleMap &yMap, + const QwtDoubleRect &area) const +{ + if ( area.isEmpty() ) + return QImage(); + + QRect rect = transform(xMap, yMap, area); + + QwtScaleMap xxMap = xMap; + QwtScaleMap yyMap = yMap; + + const QSize res = d_data->data->rasterHint(area); + if ( res.isValid() ) + { + /* + It is useless to render an image with a higher resolution + than the data offers. Of course someone will have to + scale this image later into the size of the given rect, but f.e. + in case of postscript this will done on the printer. + */ + rect.setSize(rect.size().boundedTo(res)); + + int px1 = rect.x(); + int px2 = rect.x() + rect.width(); + if ( xMap.p1() > xMap.p2() ) + qSwap(px1, px2); + + double sx1 = area.x(); + double sx2 = area.x() + area.width(); + if ( xMap.s1() > xMap.s2() ) + qSwap(sx1, sx2); + + int py1 = rect.y(); + int py2 = rect.y() + rect.height(); + if ( yMap.p1() > yMap.p2() ) + qSwap(py1, py2); + + double sy1 = area.y(); + double sy2 = area.y() + area.height(); + if ( yMap.s1() > yMap.s2() ) + qSwap(sy1, sy2); + + xxMap.setPaintInterval(px1, px2); + xxMap.setScaleInterval(sx1, sx2); + yyMap.setPaintInterval(py1, py2); + yyMap.setScaleInterval(sy1, sy2); + } + + PlotWaterfallImage image(rect.size(), d_data->colorMap->format()); + + const QwtDoubleInterval intensityRange = d_data->data->range(); + if ( !intensityRange.isValid() ) + return image; + + d_data->data->initRaster(area, rect.size()); + + if ( d_data->colorMap->format() == QwtColorMap::RGB ) + { + for ( int y = rect.top(); y <= rect.bottom(); y++ ) + { + const double ty = yyMap.invTransform(y); + + QRgb *line = (QRgb *)image.scanLine(y - rect.top()); + for ( int x = rect.left(); x <= rect.right(); x++ ) + { + const double tx = xxMap.invTransform(x); + + *line++ = d_data->colorMap->rgb(intensityRange, + d_data->data->value(tx, ty)); + } + } + } + else if ( d_data->colorMap->format() == QwtColorMap::Indexed ) + { + image.setColorTable(d_data->colorMap->colorTable(intensityRange)); + + for ( int y = rect.top(); y <= rect.bottom(); y++ ) + { + const double ty = yyMap.invTransform(y); + + unsigned char *line = image.scanLine(y - rect.top()); + for ( int x = rect.left(); x <= rect.right(); x++ ) + { + const double tx = xxMap.invTransform(x); + + *line++ = d_data->colorMap->colorIndex(intensityRange, + d_data->data->value(tx, ty)); + } + } + } + + d_data->data->discardRaster(); + + // Mirror the image in case of inverted maps + + const bool hInvert = xxMap.p1() > xxMap.p2(); + const bool vInvert = yyMap.p1() < yyMap.p2(); + if ( hInvert || vInvert ) + { +#ifdef __GNUC__ +#endif +#if QT_VERSION < 0x040000 + image = image.mirror(hInvert, vInvert); +#else + image = image.mirrored(hInvert, vInvert); +#endif + } + + return image; +} + +/*! + \brief Draw the spectrogram + + \param painter Painter + \param xMap Maps x-values into pixel coordinates. + \param yMap Maps y-values into pixel coordinates. + \param canvasRect Contents rect of the canvas in painter coordinates + + \sa setDisplayMode, renderImage, + QwtPlotRasterItem::draw, drawContourLines +*/ + +void PlotWaterfall::draw(QPainter *painter, + const QwtScaleMap &xMap, const QwtScaleMap &yMap, + const QRect &canvasRect) const +{ + QwtPlotRasterItem::draw(painter, xMap, yMap, canvasRect); +} + diff --git a/gr-qtgui/src/lib/plot_waterfall.h b/gr-qtgui/src/lib/plot_waterfall.h new file mode 100644 index 00000000..2be677b1 --- /dev/null +++ b/gr-qtgui/src/lib/plot_waterfall.h @@ -0,0 +1,54 @@ +#ifndef PLOT_WATERFALL_H +#define PLOT_WATERFALL_H + +#include +#include + +#include "qwt_valuelist.h" +#include "qwt_plot_rasteritem.h" + +class QwtColorMap; + +/*! + \brief A plot item, which displays a waterfall spectrogram + + A waterfall displays threedimenional data, where the 3rd dimension + ( the intensity ) is displayed using colors. The colors are calculated + from the values using a color map. + + \image html spectrogram3.png + + \sa QwtRasterData, QwtColorMap +*/ + +class QWT_EXPORT PlotWaterfall: public QwtPlotRasterItem +{ +public: + explicit PlotWaterfall(WaterfallData* data, const QString &title = QString::null); + virtual ~PlotWaterfall(); + + const WaterfallData* data()const; + + void setColorMap(const QwtColorMap &); + const QwtColorMap &colorMap() const; + + virtual QwtDoubleRect boundingRect() const; + virtual QSize rasterHint(const QwtDoubleRect &) const; + + virtual int rtti() const; + + virtual void draw(QPainter *p, + const QwtScaleMap &xMap, const QwtScaleMap &yMap, + const QRect &rect) const; + +protected: + virtual QImage renderImage( + const QwtScaleMap &xMap, const QwtScaleMap &yMap, + const QwtDoubleRect &rect) const; + +private: + class PrivateData; + PrivateData *d_data; +}; + +#endif diff --git a/gr-qtgui/src/lib/qtgui.h b/gr-qtgui/src/lib/qtgui.h new file mode 100644 index 00000000..6edbca12 --- /dev/null +++ b/gr-qtgui/src/lib/qtgui.h @@ -0,0 +1,70 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_QTGUI_H +#define INCLUDED_QTGUI_H + +#include +#include "SpectrumGUIClass.h" + +class qtgui_event : public QEvent +{ +private: + pthread_mutex_t *pmutex; + +public: + qtgui_event(pthread_mutex_t *mut) + : QEvent((QEvent::Type)(QEvent::User+101)) + { + pmutex = mut; + } + + void lock() + { + pthread_mutex_lock(pmutex); + + } + + void unlock() + { + pthread_mutex_unlock(pmutex); + } +}; + +class qtgui_obj : public QObject +{ +public: + qtgui_obj(QObject *p) + : QObject(p) + { + } + + void customEvent(QEvent *e) + { + if(e->type() == (QEvent::Type)(QEvent::User+101)) { + qtgui_event *qt = (qtgui_event*)e; + qt->unlock(); + } + } +}; + +#endif /* INCLUDED_QTGUI_H */ diff --git a/gr-qtgui/src/lib/qtgui.i b/gr-qtgui/src/lib/qtgui.i new file mode 100644 index 00000000..d2f734fd --- /dev/null +++ b/gr-qtgui/src/lib/qtgui.i @@ -0,0 +1,120 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +%include "gnuradio.i" + +%{ +#include "qtgui_sink_c.h" +#include "qtgui_sink_f.h" +%} + +GR_SWIG_BLOCK_MAGIC(qtgui,sink_c) + + qtgui_sink_c_sptr qtgui_make_sink_c (int fftsize, int wintype, + double fc=0, double bw=1.0, + const std::string &name="Display", + bool plotfreq=true, bool plotwaterfall=true, + bool plotwaterfall3d=true, bool plottime=true, + bool plotconst=true, + bool use_openGL=true, + QWidget *parent=NULL); + +class qtgui_sink_c : public gr_block +{ +private: + friend qtgui_sink_c_sptr qtgui_make_sink_c (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + qtgui_sink_c (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + +public: + void exec_(); + PyObject* pyqwidget(); + + void set_frequency_range(const double centerfreq, + const double bandwidth); + void set_time_domain_axis(double min, double max); + void set_constellation_axis(double xmin, double xmax, + double ymin, double ymax); + void set_frequency_axis(double min, double max); +}; + + + +/*********************************************************************/ + + +GR_SWIG_BLOCK_MAGIC(qtgui,sink_f) + +qtgui_sink_f_sptr qtgui_make_sink_f (int fftsize, int wintype, + double fc=0, double bw=0.0, + const std::string &name="Display", + bool plotfreq=true, bool plotwaterfall=true, + bool plotwaterfall3d=true, bool plottime=true, + bool plotconst=true, + bool use_openGL=true, + QWidget *parent=NULL); + +class qtgui_sink_f : public gr_block +{ +private: + friend qtgui_sink_f_sptr qtgui_make_sink_f (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + qtgui_sink_f (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + +public: + void exec_(); + PyObject* pyqwidget(); + + void set_frequency_range(const double centerfreq, + const double bandwidth); + void set_time_domain_axis(double min, double max); + void set_constellation_axis(double xmin, double xmax, + double ymin, double ymax); + void set_frequency_axis(double min, double max); +}; + diff --git a/gr-qtgui/src/lib/qtgui_sink_c.cc b/gr-qtgui/src/lib/qtgui_sink_c.cc new file mode 100644 index 00000000..b1fd60d3 --- /dev/null +++ b/gr-qtgui/src/lib/qtgui_sink_c.cc @@ -0,0 +1,335 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include + +qtgui_sink_c_sptr +qtgui_make_sink_c (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent) +{ + return qtgui_sink_c_sptr (new qtgui_sink_c (fftsize, wintype, + fc, bw, name, + plotfreq, plotwaterfall, + plotwaterfall3d, plottime, + plotconst, + use_openGL, + parent)); +} + +qtgui_sink_c::qtgui_sink_c (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent) + : gr_block ("sink_c", + gr_make_io_signature (1, -1, sizeof(gr_complex)), + gr_make_io_signature (0, 0, 0)), + d_fftsize(fftsize), + d_wintype((gr_firdes::win_type)(wintype)), + d_center_freq(fc), d_bandwidth(bw), d_name(name), + d_plotfreq(plotfreq), d_plotwaterfall(plotwaterfall), + d_plotwaterfall3d(plotwaterfall3d), d_plottime(plottime), + d_plotconst(plotconst), + d_parent(parent) +{ + d_main_gui = NULL; + pthread_mutex_init(&d_pmutex, NULL); + lock(); + + // Perform fftshift operation; + // this is usually desired when plotting + d_shift = true; + + d_fft = new gri_fft_complex (d_fftsize, true); + + d_fftdata = new gr_complex[d_fftsize]; + + d_index = 0; + d_residbuf = new gr_complex[d_fftsize]; + + buildwindow(); + + initialize(use_openGL); +} + +qtgui_sink_c::~qtgui_sink_c() +{ + delete d_object; + delete [] d_fftdata; + delete [] d_residbuf; + delete d_fft; +} + +void qtgui_sink_c::lock() +{ + pthread_mutex_lock(&d_pmutex); +} + +void qtgui_sink_c::unlock() +{ + pthread_mutex_unlock(&d_pmutex); +} + + +void +qtgui_sink_c::initialize(const bool opengl) +{ + if(qApp != NULL) { + d_qApplication = qApp; + } + else { + int argc; + char **argv = NULL; + d_qApplication = new QApplication(argc, argv); + } + + if(d_center_freq < 0) { + throw std::runtime_error("qtgui_sink_c: Received bad center frequency.\n"); + } + + uint64_t maxBufferSize = 32768; + d_main_gui = new SpectrumGUIClass(maxBufferSize, d_fftsize, + d_center_freq, + -d_bandwidth/2.0, + d_bandwidth/2.0); + + d_main_gui->SetDisplayTitle(d_name); + d_main_gui->SetFFTSize(d_fftsize); + d_main_gui->SetWindowType((int)d_wintype); + + d_main_gui->OpenSpectrumWindow(d_parent, + d_plotfreq, d_plotwaterfall, + d_plotwaterfall3d, d_plottime, + d_plotconst, + opengl); + + d_object = new qtgui_obj(d_qApplication); + qApp->postEvent(d_object, new qtgui_event(&d_pmutex)); +} + + +void +qtgui_sink_c::exec_() +{ + d_qApplication->exec(); +} + +QWidget* +qtgui_sink_c::qwidget() +{ + return d_main_gui->qwidget(); +} + +PyObject* +qtgui_sink_c::pyqwidget() +{ + PyObject *w = PyLong_FromVoidPtr((void*)d_main_gui->qwidget()); + PyObject *retarg = Py_BuildValue("N", w); + return retarg; +} + +void +qtgui_sink_c::set_frequency_range(const double centerfreq, + const double bandwidth) +{ + d_center_freq = centerfreq; + d_bandwidth = bandwidth; + d_main_gui->SetFrequencyRange(d_center_freq, + -d_bandwidth/2.0, + d_bandwidth/2.0); +} + +void +qtgui_sink_c::set_time_domain_axis(double min, double max) +{ + d_main_gui->SetTimeDomainAxis(min, max); +} + +void +qtgui_sink_c::set_constellation_axis(double xmin, double xmax, + double ymin, double ymax) +{ + d_main_gui->SetConstellationAxis(xmin, xmax, ymin, ymax); +} + +void +qtgui_sink_c::set_frequency_axis(double min, double max) +{ + d_main_gui->SetFrequencyAxis(min, max); +} + +void +qtgui_sink_c::fft(const gr_complex *data_in, int size, gr_complex *data_out) +{ + if (d_window.size()) { + gr_complex *dst = d_fft->get_inbuf(); + int i; + for (i = 0; i < size; i++) // apply window + dst[i] = data_in[i] * d_window[i]; + } + else { + memcpy (d_fft->get_inbuf(), data_in, sizeof(gr_complex)*size); + } + + d_fft->execute (); // compute the fft + + for(int i=0; i < size; i++) { + d_fft->get_outbuf()[i] /= size; + } + + // copy result to our output + if(d_shift) { // apply a fft shift on the data + unsigned int len = (unsigned int)(ceil(size/2.0)); + memcpy(&data_out[0], &d_fft->get_outbuf()[len], sizeof(gr_complex)*(size - len)); + memcpy(&data_out[size - len], &d_fft->get_outbuf()[0], sizeof(gr_complex)*len); + } + else { + memcpy(data_out, d_fft->get_outbuf(), sizeof(gr_complex)*size); + } +} + +void +qtgui_sink_c::windowreset() +{ + gr_firdes::win_type newwintype = (gr_firdes::win_type)d_main_gui->GetWindowType(); + if(d_wintype != newwintype) { + d_wintype = newwintype; + buildwindow(); + } +} + +void +qtgui_sink_c::buildwindow() +{ + d_window.clear(); + if(d_wintype != 0) { + d_window = gr_firdes::window(d_wintype, d_fftsize, 6.76); + } +} + +void +qtgui_sink_c::fftresize() +{ + int newfftsize = d_main_gui->GetFFTSize(); + + if(newfftsize != d_fftsize) { + + // Resize the fftdata buffer; no need to preserve old data + delete [] d_fftdata; + d_fftdata = new gr_complex[newfftsize]; + + // Resize residbuf and replace data + delete [] d_residbuf; + d_residbuf = new gr_complex[newfftsize]; + + // Set new fft size and reset buffer index + // (throws away any currently held data, but who cares?) + d_fftsize = newfftsize; + d_index = 0; + + // Reset window to reflect new size + buildwindow(); + + // Reset FFTW plan for new size + delete d_fft; + d_fft = new gri_fft_complex (d_fftsize, true); + } +} + + +int +qtgui_sink_c::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int i=0, j=0; + const gr_complex *in = (const gr_complex*)input_items[0]; + + pthread_mutex_lock(&d_pmutex); + + // Update the FFT size from the application + fftresize(); + windowreset(); + + const timespec currentTime = get_highres_clock(); + const timespec lastUpdateGUITime = d_main_gui->GetLastGUIUpdateTime(); + + if(diff_timespec(currentTime, lastUpdateGUITime) > 0.05) { + + if(d_index) { + int filler = std::min(d_fftsize - d_index, noutput_items); + + memcpy(&d_residbuf[d_index], &in[0], sizeof(gr_complex)*filler); + d_index += filler; + i = filler; + j = filler; + } + + if(d_index == d_fftsize) { + d_index = 0; + fft(d_residbuf, d_fftsize, d_fftdata); + + d_main_gui->UpdateWindow(true, d_fftdata, d_fftsize, NULL, 0, + (float*)d_residbuf, d_fftsize, + 1.0/4.0, convert_to_timespec(0.0), true); + } + + for(; i < noutput_items; i+=d_fftsize) { + if(noutput_items - i > d_fftsize) { + j += d_fftsize; + fft(&in[i], d_fftsize, d_fftdata); + + d_main_gui->UpdateWindow(true, d_fftdata, d_fftsize, NULL, 0, + (float*)&in[i], d_fftsize, + 1.0/4.0, convert_to_timespec(0.0), true); + } + } + + if(noutput_items > j) { + d_index = noutput_items - j; + memcpy(d_residbuf, &in[j], sizeof(gr_complex)*d_index); + } + } + + pthread_mutex_unlock(&d_pmutex); + + consume_each(noutput_items); + return noutput_items; +} diff --git a/gr-qtgui/src/lib/qtgui_sink_c.h b/gr-qtgui/src/lib/qtgui_sink_c.h new file mode 100644 index 00000000..1c9d5920 --- /dev/null +++ b/gr-qtgui/src/lib/qtgui_sink_c.h @@ -0,0 +1,121 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifndef INCLUDED_QTGUI_SINK_C_H +#define INCLUDED_QTGUI_SINK_C_H + +#include +#include +#include +#include +#include +#include +#include "SpectrumGUIClass.h" + +class qtgui_sink_c; +typedef boost::shared_ptr qtgui_sink_c_sptr; + +qtgui_sink_c_sptr qtgui_make_sink_c (int fftsize, int wintype, + double fc=0, double bandwidth=1.0, + const std::string &name="Spectrum Display", + bool plotfreq=true, bool plotwaterfall=true, + bool plotwaterfall3d=true, bool plottime=true, + bool plotconst=true, + bool use_openGL=true, + QWidget *parent=NULL); + +class qtgui_sink_c : public gr_block +{ +private: + friend qtgui_sink_c_sptr qtgui_make_sink_c (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + qtgui_sink_c (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + + // use opengl to force OpenGL on or off + // this might be necessary for sessions over SSH + void initialize(const bool opengl=true); + + int d_fftsize; + gr_firdes::win_type d_wintype; + std::vector d_window; + double d_center_freq; + double d_bandwidth; + std::string d_name; + + pthread_mutex_t d_pmutex; + + bool d_shift; + gri_fft_complex *d_fft; + gr_complex *d_fftdata; + + int d_index; + gr_complex *d_residbuf; + + bool d_plotfreq, d_plotwaterfall, d_plotwaterfall3d, d_plottime, d_plotconst; + + QWidget *d_parent; + SpectrumGUIClass *d_main_gui; + + void windowreset(); + void buildwindow(); + void fftresize(); + void fft(const gr_complex *data_in, int size, gr_complex *data_out); + +public: + ~qtgui_sink_c(); + void exec_(); + void lock(); + void unlock(); + QWidget* qwidget(); + PyObject* pyqwidget(); + + void set_frequency_range(const double centerfreq, + const double bandwidth); + + void set_time_domain_axis(double min, double max); + void set_constellation_axis(double xmin, double xmax, + double ymin, double ymax); + void set_frequency_axis(double min, double max); + + QApplication *d_qApplication; + qtgui_obj *d_object; + + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_QTGUI_SINK_C_H */ diff --git a/gr-qtgui/src/lib/qtgui_sink_f.cc b/gr-qtgui/src/lib/qtgui_sink_f.cc new file mode 100644 index 00000000..4c526f09 --- /dev/null +++ b/gr-qtgui/src/lib/qtgui_sink_f.cc @@ -0,0 +1,319 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include + +qtgui_sink_f_sptr +qtgui_make_sink_f (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent) +{ + return qtgui_sink_f_sptr (new qtgui_sink_f (fftsize, wintype, + fc, bw, name, + plotfreq, plotwaterfall, + plotwaterfall3d, plottime, + plotconst, + use_openGL, + parent)); +} + +qtgui_sink_f::qtgui_sink_f (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent) + : gr_block ("sink_f", + gr_make_io_signature (1, 1, sizeof(float)), + gr_make_io_signature (0, 0, 0)), + d_fftsize(fftsize), + d_wintype((gr_firdes::win_type)(wintype)), + d_center_freq(fc), d_bandwidth(bw), d_name(name), + d_plotfreq(plotfreq), d_plotwaterfall(plotwaterfall), + d_plotwaterfall3d(plotwaterfall3d), d_plottime(plottime), + d_plotconst(plotconst), + d_parent(parent) +{ + d_main_gui = NULL; + pthread_mutex_init(&d_pmutex, NULL); + lock(); + + // Perform fftshift operation; + // this is usually desired when plotting + d_shift = true; + + d_fft = new gri_fft_complex (d_fftsize, true); + + d_fftdata = new gr_complex[d_fftsize]; + + d_index = 0; + d_residbuf = new float[d_fftsize]; + + buildwindow(); + + initialize(use_openGL); +} + +qtgui_sink_f::~qtgui_sink_f() +{ + delete d_object; + delete [] d_fftdata; + delete [] d_residbuf; + delete d_fft; +} + +void qtgui_sink_f::lock() +{ + pthread_mutex_lock(&d_pmutex); +} + +void qtgui_sink_f::unlock() +{ + pthread_mutex_unlock(&d_pmutex); +} + +void +qtgui_sink_f::initialize(const bool opengl) +{ + if(qApp != NULL) { + d_qApplication = qApp; + } + else { + int argc; + char **argv = NULL; + d_qApplication = new QApplication(argc, argv); + } + + + uint64_t maxBufferSize = 32768; + d_main_gui = new SpectrumGUIClass(maxBufferSize, d_fftsize, + d_center_freq, + -d_bandwidth/2.0, + d_bandwidth/2.0); + d_main_gui->SetDisplayTitle(d_name); + d_main_gui->SetFFTSize(d_fftsize); + d_main_gui->SetWindowType((int)d_wintype); + + d_main_gui->OpenSpectrumWindow(d_parent, + d_plotfreq, d_plotwaterfall, + d_plotwaterfall3d, d_plottime, + d_plotconst, + opengl); + + d_object = new qtgui_obj(d_qApplication); + qApp->postEvent(d_object, new qtgui_event(&d_pmutex)); +} + +void +qtgui_sink_f::exec_() +{ + d_qApplication->exec(); +} + +QWidget* +qtgui_sink_f::qwidget() +{ + return d_main_gui->qwidget(); +} + +PyObject* +qtgui_sink_f::pyqwidget() +{ + PyObject *w = PyLong_FromVoidPtr((void*)d_main_gui->qwidget()); + PyObject *retarg = Py_BuildValue("N", w); + return retarg; +} + +void +qtgui_sink_f::set_frequency_range(const double centerfreq, + const double bandwidth) +{ + d_center_freq = centerfreq; + d_bandwidth = bandwidth; + d_main_gui->SetFrequencyRange(d_center_freq, + -d_bandwidth/2.0, + d_bandwidth/2.0); +} + +void +qtgui_sink_f::set_time_domain_axis(double min, double max) +{ + d_main_gui->SetTimeDomainAxis(min, max); +} + +void +qtgui_sink_f::set_constellation_axis(double xmin, double xmax, + double ymin, double ymax) +{ + d_main_gui->SetConstellationAxis(xmin, xmax, ymin, ymax); +} + +void +qtgui_sink_f::set_frequency_axis(double min, double max) +{ + d_main_gui->SetFrequencyAxis(min, max); +} + +void +qtgui_sink_f::fft(const float *data_in, int size, gr_complex *data_out) +{ + if (d_window.size()) { + gr_complex *dst = d_fft->get_inbuf(); + for (int i = 0; i < size; i++) // apply window + dst[i] = data_in[i] * d_window[i]; + } + else { + gr_complex *dst = d_fft->get_inbuf(); + for (int i = 0; i < size; i++) // float to complex conversion + dst[i] = data_in[i]; + } + + d_fft->execute (); // compute the fft + + for(int i=0; i < size; i++) { + d_fft->get_outbuf()[i] /= size; + } + + // copy result to our output + if(d_shift) { // apply a fft shift on the data + unsigned int len = (unsigned int)(ceil(size/2.0)); + memcpy(&data_out[0], &d_fft->get_outbuf()[len], sizeof(gr_complex)*(size - len)); + memcpy(&data_out[size - len], &d_fft->get_outbuf()[0], sizeof(gr_complex)*len); + } + else { + memcpy(data_out, d_fft->get_outbuf(), sizeof(gr_complex)*size); + } +} + +void +qtgui_sink_f::windowreset() +{ + gr_firdes::win_type newwintype = (gr_firdes::win_type)d_main_gui->GetWindowType(); + if(d_wintype != newwintype) { + d_wintype = newwintype; + buildwindow(); + } +} + +void +qtgui_sink_f::buildwindow() +{ + d_window.clear(); + if(d_wintype != 0) { + d_window = gr_firdes::window(d_wintype, d_fftsize, 6.76); + } +} + +void +qtgui_sink_f::fftresize() +{ + int newfftsize = d_main_gui->GetFFTSize(); + + if(newfftsize != d_fftsize) { + + // Resize the fftdata buffer; no need to preserve old data + delete [] d_fftdata; + d_fftdata = new gr_complex[newfftsize]; + + // Resize residbuf and replace data + delete [] d_residbuf; + d_residbuf = new float[newfftsize]; + + // Set new fft size and reset buffer index + // (throws away any currently held data, but who cares?) + d_fftsize = newfftsize; + d_index = 0; + + // Reset window to reflect new size + buildwindow(); + + // Reset FFTW plan for new size + delete d_fft; + d_fft = new gri_fft_complex (d_fftsize, true); + } +} + + +int +qtgui_sink_f::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int i=0, j=0; + const float *in = (const float*)input_items[0]; + + pthread_mutex_lock(&d_pmutex); + + if(d_index) { + int filler = std::min(d_fftsize - d_index, noutput_items); + memcpy(&d_residbuf[d_index], &in[0], sizeof(float)*filler); + d_index += filler; + i = filler; + j = filler; + } + + if(d_index == d_fftsize) { + d_index = 0; + fft(d_residbuf, d_fftsize, d_fftdata); + + d_main_gui->UpdateWindow(true, d_fftdata, d_fftsize, + d_residbuf, d_fftsize, NULL, 0, + 1.0/4.0, convert_to_timespec(0.0), true); + } + + for(; i < noutput_items; i+=d_fftsize) { + if(noutput_items - i > d_fftsize) { + j += d_fftsize; + fft(&in[i], d_fftsize, d_fftdata); + + d_main_gui->UpdateWindow(true, d_fftdata, d_fftsize, &in[i], + d_fftsize, NULL, 0, 1.0/4.0, + convert_to_timespec(0.0), true); + } + } + + if(noutput_items > j) { + d_index = noutput_items - j; + memcpy(d_residbuf, &in[j], sizeof(float)*d_index); + } + + pthread_mutex_unlock(&d_pmutex); + + consume_each(noutput_items); + return noutput_items; +} diff --git a/gr-qtgui/src/lib/qtgui_sink_f.h b/gr-qtgui/src/lib/qtgui_sink_f.h new file mode 100644 index 00000000..4c24b498 --- /dev/null +++ b/gr-qtgui/src/lib/qtgui_sink_f.h @@ -0,0 +1,119 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifndef INCLUDED_QTGUI_SINK_F_H +#define INCLUDED_QTGUI_SINK_F_H + +#include +#include +#include +#include +#include +#include +#include "SpectrumGUIClass.h" + +class qtgui_sink_f; +typedef boost::shared_ptr qtgui_sink_f_sptr; + +qtgui_sink_f_sptr qtgui_make_sink_f (int fftsize, int wintype, + double fc=0, double bw=1.0, + const std::string &name="Spectrum Display", + bool plotfreq=true, bool plotwaterfall=true, + bool plotwaterfall3d=true, bool plottime=true, + bool plotconst=true, + bool use_openGL=true, + QWidget *parent=NULL); + +class qtgui_sink_f : public gr_block +{ +private: + friend qtgui_sink_f_sptr qtgui_make_sink_f (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + qtgui_sink_f (int fftsize, int wintype, + double fc, double bw, + const std::string &name, + bool plotfreq, bool plotwaterfall, + bool plotwaterfall3d, bool plottime, + bool plotconst, + bool use_openGL, + QWidget *parent); + + void initialize(const bool opengl=true); + + int d_fftsize; + gr_firdes::win_type d_wintype; + std::vector d_window; + double d_center_freq; + double d_bandwidth; + std::string d_name; + + pthread_mutex_t d_pmutex; + + bool d_shift; + gri_fft_complex *d_fft; + gr_complex *d_fftdata; + + int d_index; + float *d_residbuf; + + bool d_plotfreq, d_plotwaterfall, d_plotwaterfall3d, d_plottime, d_plotconst; + + QWidget *d_parent; + SpectrumGUIClass *d_main_gui; + + void windowreset(); + void buildwindow(); + void fftresize(); + void fft(const float *data_in, int size, gr_complex *data_out); + +public: + ~qtgui_sink_f(); + void exec_(); + void lock(); + void unlock(); + QWidget* qwidget(); + PyObject* pyqwidget(); + + void set_frequency_range(const double centerfreq, + const double bandwidth); + + void set_time_domain_axis(double min, double max); + void set_constellation_axis(double xmin, double xmax, + double ymin, double ymax); + void set_frequency_axis(double min, double max); + + QApplication *d_qApplication; + qtgui_obj *d_object; + + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_QTGUI_SINK_F_H */ diff --git a/gr-qtgui/src/lib/spectrumUpdateEvents.cc b/gr-qtgui/src/lib/spectrumUpdateEvents.cc new file mode 100644 index 00000000..2da37d35 --- /dev/null +++ b/gr-qtgui/src/lib/spectrumUpdateEvents.cc @@ -0,0 +1,183 @@ +#ifndef SPECTRUM_UPDATE_EVENTS_C +#define SPECTRUM_UPDATE_EVENTS_C + +#include + +SpectrumUpdateEvent::SpectrumUpdateEvent(const std::complex* fftPoints, + const uint64_t numFFTDataPoints, + const double* realTimeDomainPoints, + const double* imagTimeDomainPoints, + const uint64_t numTimeDomainDataPoints, + const double timePerFFT, + const timespec dataTimestamp, + const bool repeatDataFlag, + const bool lastOfMultipleUpdateFlag, + const timespec generatedTimestamp, + const int droppedFFTFrames) + : QEvent(QEvent::Type(10005)) +{ + _numFFTDataPoints = numFFTDataPoints; + if(_numFFTDataPoints < 1){ + _numFFTDataPoints = 1; + } + + _numTimeDomainDataPoints = numTimeDomainDataPoints; + if(_numTimeDomainDataPoints < 1){ + _numTimeDomainDataPoints = 1; + } + + _fftPoints = new std::complex[_numFFTDataPoints]; + _fftPoints[0] = std::complex(0,0); + memcpy(_fftPoints, fftPoints, numFFTDataPoints*sizeof(std::complex)); + + _realDataTimeDomainPoints = new double[_numTimeDomainDataPoints]; + memset(_realDataTimeDomainPoints, 0x0, _numTimeDomainDataPoints*sizeof(double)); + if(numTimeDomainDataPoints > 0){ + memcpy(_realDataTimeDomainPoints, realTimeDomainPoints, + numTimeDomainDataPoints*sizeof(double)); + } + + _imagDataTimeDomainPoints = new double[_numTimeDomainDataPoints]; + memset(_imagDataTimeDomainPoints, 0x0, _numTimeDomainDataPoints*sizeof(double)); + if(numTimeDomainDataPoints > 0){ + memcpy(_imagDataTimeDomainPoints, imagTimeDomainPoints, + numTimeDomainDataPoints*sizeof(double)); + } + _dataTimestamp = dataTimestamp; + _timePerFFT = timePerFFT; + _repeatDataFlag = repeatDataFlag; + _lastOfMultipleUpdateFlag = lastOfMultipleUpdateFlag; + _eventGeneratedTimestamp = generatedTimestamp; + _droppedFFTFrames = droppedFFTFrames; +} + +SpectrumUpdateEvent::~SpectrumUpdateEvent(){ + delete[] _fftPoints; + delete[] _realDataTimeDomainPoints; + delete[] _imagDataTimeDomainPoints; +} + +const std::complex* +SpectrumUpdateEvent::getFFTPoints() const +{ + return _fftPoints; +} + +const double* +SpectrumUpdateEvent::getRealTimeDomainPoints() const +{ + return _realDataTimeDomainPoints; +} + +const double* +SpectrumUpdateEvent::getImagTimeDomainPoints() const +{ + return _imagDataTimeDomainPoints; +} + +uint64_t +SpectrumUpdateEvent::getNumFFTDataPoints() const +{ + return _numFFTDataPoints; +} + +uint64_t +SpectrumUpdateEvent::getNumTimeDomainDataPoints() const +{ + return _numTimeDomainDataPoints; +} + +double +SpectrumUpdateEvent::getTimePerFFT() const +{ + return _timePerFFT; +} + +timespec +SpectrumUpdateEvent::getDataTimestamp() const +{ + return _dataTimestamp; +} + +bool +SpectrumUpdateEvent::getRepeatDataFlag() const +{ + return _repeatDataFlag; +} + +bool +SpectrumUpdateEvent::getLastOfMultipleUpdateFlag() const +{ + return _lastOfMultipleUpdateFlag; +} + +timespec +SpectrumUpdateEvent::getEventGeneratedTimestamp() const +{ + return _eventGeneratedTimestamp; +} + +int +SpectrumUpdateEvent::getDroppedFFTFrames() const +{ + return _droppedFFTFrames; +} + +SpectrumWindowCaptionEvent::SpectrumWindowCaptionEvent(const QString& newLbl) + : QEvent(QEvent::Type(10008)) +{ + _labelString = newLbl; +} + +SpectrumWindowCaptionEvent::~SpectrumWindowCaptionEvent() +{ +} + +QString +SpectrumWindowCaptionEvent::getLabel() +{ + return _labelString; +} + +SpectrumWindowResetEvent::SpectrumWindowResetEvent() + : QEvent(QEvent::Type(10009)) +{ +} + +SpectrumWindowResetEvent::~SpectrumWindowResetEvent() +{ +} + +SpectrumFrequencyRangeEvent::SpectrumFrequencyRangeEvent(const double centerFreq, + const double startFreq, + const double stopFreq) + : QEvent(QEvent::Type(10010)) +{ + _centerFrequency = centerFreq; + _startFrequency = startFreq; + _stopFrequency = stopFreq; +} + +SpectrumFrequencyRangeEvent::~SpectrumFrequencyRangeEvent() +{ +} + +double +SpectrumFrequencyRangeEvent::GetCenterFrequency() const +{ + return _centerFrequency; +} + +double +SpectrumFrequencyRangeEvent::GetStartFrequency() const +{ + return _startFrequency; +} + +double +SpectrumFrequencyRangeEvent::GetStopFrequency() const +{ + return _stopFrequency; +} + +#endif /* SPECTRUM_UPDATE_EVENTS_C */ diff --git a/gr-qtgui/src/lib/spectrumUpdateEvents.h b/gr-qtgui/src/lib/spectrumUpdateEvents.h new file mode 100644 index 00000000..75fa2732 --- /dev/null +++ b/gr-qtgui/src/lib/spectrumUpdateEvents.h @@ -0,0 +1,83 @@ +#ifndef SPECTRUM_UPDATE_EVENTS_H +#define SPECTRUM_UPDATE_EVENTS_H + +#include +#include +#include +#include +#include + +class SpectrumUpdateEvent:public QEvent{ + +public: + SpectrumUpdateEvent(const std::complex* fftPoints, const uint64_t numFFTDataPoints, const double* realTimeDomainPoints, const double* imagTimeDomainPoints, const uint64_t numTimeDomainDataPoints, const double timePerFFT, const timespec dataTimestamp, const bool repeatDataFlag, const bool lastOfMultipleUpdateFlag, const timespec generatedTimestamp, const int droppedFFTFrames); + ~SpectrumUpdateEvent(); + const std::complex* getFFTPoints()const; + const double* getRealTimeDomainPoints()const; + const double* getImagTimeDomainPoints()const; + uint64_t getNumFFTDataPoints()const; + uint64_t getNumTimeDomainDataPoints()const; + double getTimePerFFT()const; + timespec getDataTimestamp()const; + bool getRepeatDataFlag()const; + bool getLastOfMultipleUpdateFlag()const; + timespec getEventGeneratedTimestamp()const; + int getDroppedFFTFrames()const; + +protected: + +private: + std::complex* _fftPoints; + double* _realDataTimeDomainPoints; + double* _imagDataTimeDomainPoints; + uint64_t _numFFTDataPoints; + uint64_t _numTimeDomainDataPoints; + double _timePerFFT; + timespec _dataTimestamp; + bool _repeatDataFlag; + bool _lastOfMultipleUpdateFlag; + timespec _eventGeneratedTimestamp; + int _droppedFFTFrames; +}; + +class SpectrumWindowCaptionEvent:public QEvent{ +public: + SpectrumWindowCaptionEvent(const QString&); + ~SpectrumWindowCaptionEvent(); + QString getLabel(); + +protected: + +private: + QString _labelString; +}; + +class SpectrumWindowResetEvent:public QEvent{ +public: + SpectrumWindowResetEvent(); + ~SpectrumWindowResetEvent(); + +protected: + +private: + +}; + +class SpectrumFrequencyRangeEvent:public QEvent{ +public: + SpectrumFrequencyRangeEvent(const double, const double, const double); + ~SpectrumFrequencyRangeEvent(); + double GetCenterFrequency()const; + double GetStartFrequency()const; + double GetStopFrequency()const; + +protected: + +private: + double _centerFrequency; + double _startFrequency; + double _stopFrequency; +}; + + +#endif /* SPECTRUM_UPDATE_EVENTS_H */ diff --git a/gr-qtgui/src/lib/spectrumdisplayform.cc b/gr-qtgui/src/lib/spectrumdisplayform.cc new file mode 100644 index 00000000..427e70a2 --- /dev/null +++ b/gr-qtgui/src/lib/spectrumdisplayform.cc @@ -0,0 +1,908 @@ +#include +#include +#include +#include + +int SpectrumDisplayForm::_openGLWaterfall3DFlag = -1; + +SpectrumDisplayForm::SpectrumDisplayForm(bool useOpenGL, QWidget* parent) + : QWidget(parent) +{ + setupUi(this); + + _useOpenGL = useOpenGL; + _systemSpecifiedFlag = false; + _intValidator = new QIntValidator(this); + _intValidator->setBottom(0); + _frequencyDisplayPlot = new FrequencyDisplayPlot(FrequencyPlotDisplayFrame); + _waterfallDisplayPlot = new WaterfallDisplayPlot(WaterfallPlotDisplayFrame); + + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + _waterfall3DDisplayPlot = new Waterfall3DDisplayPlot(Waterfall3DPlotDisplayFrame); + } + + _timeDomainDisplayPlot = new TimeDomainDisplayPlot(TimeDomainDisplayFrame); + _constellationDisplayPlot = new ConstellationDisplayPlot(ConstellationDisplayFrame); + _numRealDataPoints = 1024; + _realFFTDataPoints = new double[_numRealDataPoints]; + _averagedValues = new double[_numRealDataPoints]; + _historyVector = new std::vector; + + AvgLineEdit->setValidator(_intValidator); + PowerLineEdit->setValidator(_intValidator); + MinHoldCheckBox_toggled( false ); + MaxHoldCheckBox_toggled( false ); + + WaterfallMaximumIntensityWheel->setRange(-200, 0); + WaterfallMaximumIntensityWheel->setTickCnt(50); + WaterfallMinimumIntensityWheel->setRange(-200, 0); + WaterfallMinimumIntensityWheel->setTickCnt(50); + WaterfallMinimumIntensityWheel->setValue(-200); + + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + Waterfall3DMaximumIntensityWheel->setRange(-200, 0); + Waterfall3DMaximumIntensityWheel->setTickCnt(50); + Waterfall3DMinimumIntensityWheel->setRange(-200, 0); + Waterfall3DMinimumIntensityWheel->setTickCnt(50); + Waterfall3DMinimumIntensityWheel->setValue(-200); + } + + _peakFrequency = 0; + _peakAmplitude = -HUGE_VAL; + + _noiseFloorAmplitude = -HUGE_VAL; + + connect(_waterfallDisplayPlot, SIGNAL(UpdatedLowerIntensityLevel(const double)), + _frequencyDisplayPlot, SLOT(SetLowerIntensityLevel(const double))); + connect(_waterfallDisplayPlot, SIGNAL(UpdatedUpperIntensityLevel(const double)), + _frequencyDisplayPlot, SLOT(SetUpperIntensityLevel(const double))); + + _frequencyDisplayPlot->SetLowerIntensityLevel(-200); + _frequencyDisplayPlot->SetUpperIntensityLevel(-200); + + // Load up the acceptable FFT sizes... + FFTSizeComboBox->clear(); + for(long fftSize = SpectrumGUIClass::MIN_FFT_SIZE; fftSize <= SpectrumGUIClass::MAX_FFT_SIZE; fftSize *= 2){ + FFTSizeComboBox->insertItem(FFTSizeComboBox->count(), QString("%1").arg(fftSize)); + } + Reset(); + + ToggleTabFrequency(false); + ToggleTabWaterfall(false); + ToggleTabWaterfall3D(false); + ToggleTabTime(false); + ToggleTabConstellation(false); +} + +SpectrumDisplayForm::~SpectrumDisplayForm() +{ + // Qt deletes children when parent is deleted + + // Don't worry about deleting Display Plots - they are deleted when parents are deleted + /* delete _intValidator; */ + + delete[] _realFFTDataPoints; + delete[] _averagedValues; + + for(unsigned int count = 0; count < _historyVector->size(); count++){ + delete[] _historyVector->operator[](count); + } + + delete _historyVector; +} + +void +SpectrumDisplayForm::setSystem( SpectrumGUIClass * newSystem, + const uint64_t numFFTDataPoints, + const uint64_t numTimeDomainDataPoints ) +{ + ResizeBuffers(numFFTDataPoints, numTimeDomainDataPoints); + + if(newSystem != NULL){ + _system = newSystem; + _systemSpecifiedFlag = true; + } + else{ + _systemSpecifiedFlag = false; + } +} + +void +SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdateEvent) +{ + const std::complex* complexDataPoints = spectrumUpdateEvent->getFFTPoints(); + const uint64_t numFFTDataPoints = spectrumUpdateEvent->getNumFFTDataPoints(); + const double* realTimeDomainDataPoints = spectrumUpdateEvent->getRealTimeDomainPoints(); + const double* imagTimeDomainDataPoints = spectrumUpdateEvent->getImagTimeDomainPoints(); + const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); + const double timePerFFT = spectrumUpdateEvent->getTimePerFFT(); + const timespec dataTimestamp = spectrumUpdateEvent->getDataTimestamp();; + const bool repeatDataFlag = spectrumUpdateEvent->getRepeatDataFlag(); + const bool lastOfMultipleUpdatesFlag = spectrumUpdateEvent->getLastOfMultipleUpdateFlag(); + const timespec generatedTimestamp = spectrumUpdateEvent->getEventGeneratedTimestamp(); + + // REMEMBER: The dataTimestamp is NOT valid when the repeat data flag is true... + ResizeBuffers(numFFTDataPoints, numTimeDomainDataPoints); + + // Calculate the Magnitude of the complex point + const std::complex* complexDataPointsPtr = complexDataPoints; + double* realFFTDataPointsPtr = _realFFTDataPoints; + for(uint64_t point = 0; point < numFFTDataPoints; point++){ + // Calculate dBm + // 50 ohm load assumption + // 10 * log10 (v^2 / (2 * 50.0 * .001)) = 10 * log10( v^2 * 10) + // 75 ohm load assumption + // 10 * log10 (v^2 / (2 * 75.0 * .001)) = 10 * log10( v^2 * 15) + + *realFFTDataPointsPtr = 10.0*log10((((*complexDataPointsPtr).real() * (*complexDataPointsPtr).real()) + + ((*complexDataPointsPtr).imag()*(*complexDataPointsPtr).imag())) + 1e-20); + + complexDataPointsPtr++; + realFFTDataPointsPtr++; + } + + int tabindex = SpectrumTypeTab->currentIndex(); + + // Don't update the averaging history if this is repeated data + if(!repeatDataFlag){ + _AverageHistory(_realFFTDataPoints); + + double sumMean; + const double fft_bin_size = (_stopFrequency-_startFrequency) / + static_cast(numFFTDataPoints); + + // find the peak, sum (for mean), etc + _peakAmplitude = -HUGE_VAL; + sumMean = 0.0; + for(uint64_t number = 0; number < numFFTDataPoints; number++){ + // find peak + if(_realFFTDataPoints[number] > _peakAmplitude){ + _peakFrequency = (static_cast(number) * fft_bin_size); // Calculate the frequency relative to the local bw, adjust for _startFrequency later + _peakAmplitude = _realFFTDataPoints[number]; + // _peakBin = number; + } + // sum (for mean) + sumMean += _realFFTDataPoints[number]; + } + + // calculate the spectral mean + // +20 because for the comparison below we only want to throw out bins + // that are significantly higher (and would, thus, affect the mean more) + const double meanAmplitude = (sumMean / numFFTDataPoints) + 20.0; + + // now throw out any bins higher than the mean + sumMean = 0.0; + uint64_t newNumDataPoints = numFFTDataPoints; + for(uint64_t number = 0; number < numFFTDataPoints; number++){ + if (_realFFTDataPoints[number] <= meanAmplitude) + sumMean += _realFFTDataPoints[number]; + else + newNumDataPoints--; + } + + if (newNumDataPoints == 0) // in the odd case that all + _noiseFloorAmplitude = meanAmplitude; // amplitudes are equal! + else + _noiseFloorAmplitude = sumMean / newNumDataPoints; + } + + if(lastOfMultipleUpdatesFlag){ + if(tabindex == d_plot_fft) { + _frequencyDisplayPlot->PlotNewData(_averagedValues, numFFTDataPoints, + _noiseFloorAmplitude, _peakFrequency, + _peakAmplitude); + } + if(tabindex == d_plot_time) { + _timeDomainDisplayPlot->PlotNewData(realTimeDomainDataPoints, + imagTimeDomainDataPoints, + numTimeDomainDataPoints); + } + if(tabindex == d_plot_constellation) { + _constellationDisplayPlot->PlotNewData(realTimeDomainDataPoints, + imagTimeDomainDataPoints, + numTimeDomainDataPoints); + } + + // Don't update the repeated data for the waterfall + if(!repeatDataFlag){ + if(tabindex == d_plot_waterfall) { + _waterfallDisplayPlot->PlotNewData(_realFFTDataPoints, numFFTDataPoints, + timePerFFT, dataTimestamp, + spectrumUpdateEvent->getDroppedFFTFrames()); + } + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + if( _openGLWaterfall3DFlag == 1 && (tabindex == d_plot_waterfall3d)) { + _waterfall3DDisplayPlot->PlotNewData(_realFFTDataPoints, numFFTDataPoints, + timePerFFT, dataTimestamp, + spectrumUpdateEvent->getDroppedFFTFrames()); + } + } + } + + // Tell the system the GUI has been updated + if(_systemSpecifiedFlag){ + _system->SetLastGUIUpdateTime(generatedTimestamp); + _system->DecrementPendingGUIUpdateEvents(); + } + } +} + +void +SpectrumDisplayForm::resizeEvent( QResizeEvent *e ) +{ + // Let the actual window resize its width, but not its height + QSize newSize(e->size().width(), e->oldSize().height()); + QResizeEvent et(newSize, e->oldSize()); + QWidget::resizeEvent(&et); + + // Tell the Tab Window to Resize + SpectrumTypeTab->resize( e->size().width(), e->size().height()-60); + + // Tell the TabXFreqDisplay to resize + FrequencyPlotDisplayFrame->resize(e->size().width()-4, + e->size().height()-140); + _frequencyDisplayPlot->resize( FrequencyPlotDisplayFrame->width()-4, + e->size().height()-140); + + // Move the Power Lbl and Line Edit + PowerLabel->move(e->size().width()-(415-324) - PowerLabel->width(), + e->size().height()-135); + PowerLineEdit->move(e->size().width()-(415-318) - PowerLineEdit->width(), + e->size().height()-115); + + // Move the Avg Lbl and Line Edit + AvgLabel->move(e->size().width()-(415-406) - AvgLabel->width(), + e->size().height()-135); + AvgLineEdit->move(e->size().width()-(415-400) - AvgLineEdit->width(), + e->size().height()-115); + + // Move Max and Min check boxes + MaxHoldCheckBox->move(MaxHoldCheckBox->x(), + e->size().height()-135); + MaxHoldResetBtn->move(MaxHoldResetBtn->x(), + e->size().height()-135); + MinHoldCheckBox->move(MinHoldCheckBox->x(), + e->size().height()-115); + MinHoldResetBtn->move(MinHoldResetBtn->x(), + e->size().height()-115); + + WaterfallPlotDisplayFrame->resize(e->size().width()-4, + e->size().height()-140); + _waterfallDisplayPlot->resize( WaterfallPlotDisplayFrame->width()-4, + e->size().height()-140); + + // Move the IntensityWheels and Labels + WaterfallMaximumIntensityLabel->move(width() - 5 - + WaterfallMaximumIntensityLabel->width(), + WaterfallMaximumIntensityLabel->y()); + WaterfallMaximumIntensityWheel->resize(WaterfallMaximumIntensityLabel->x() - 5 - + WaterfallMaximumIntensityWheel->x(), + WaterfallMaximumIntensityWheel->height()); + + WaterfallMinimumIntensityLabel->move(width() - 5 - + WaterfallMinimumIntensityLabel->width(), + height() - 115); + WaterfallMinimumIntensityWheel->resize(WaterfallMinimumIntensityLabel->x() - 5 - + WaterfallMinimumIntensityWheel->x(), + WaterfallMaximumIntensityWheel->height()); + WaterfallMinimumIntensityWheel->move(WaterfallMinimumIntensityWheel->x(), + height() - 115); + WaterfallAutoScaleBtn->move(WaterfallAutoScaleBtn->x(), + e->size().height()-115); + + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + Waterfall3DPlotDisplayFrame->resize(e->size().width()-4, + e->size().height()-140); + _waterfall3DDisplayPlot->resize( Waterfall3DPlotDisplayFrame->width()-4, + e->size().height()-140); + + Waterfall3DMaximumIntensityLabel->move(width() - 5 - + Waterfall3DMaximumIntensityLabel->width(), + Waterfall3DMaximumIntensityLabel->y()); + Waterfall3DMaximumIntensityWheel->resize(Waterfall3DMaximumIntensityLabel->x() - 5 - + Waterfall3DMaximumIntensityWheel->x(), + Waterfall3DMaximumIntensityWheel->height()); + Waterfall3DMinimumIntensityLabel->move(width() - 5 - + Waterfall3DMinimumIntensityLabel->width(), + height() - 115); + Waterfall3DMinimumIntensityWheel->resize(Waterfall3DMinimumIntensityLabel->x() - 5 - + Waterfall3DMinimumIntensityWheel->x(), + Waterfall3DMaximumIntensityWheel->height()); + Waterfall3DMinimumIntensityWheel->move(Waterfall3DMinimumIntensityWheel->x(), + height() - 115); + Waterfall3DAutoScaleBtn->move(WaterfallAutoScaleBtn->x(), + e->size().height()-115); + } + + TimeDomainDisplayFrame->resize(e->size().width()-4, + e->size().height()-140); + _timeDomainDisplayPlot->resize( TimeDomainDisplayFrame->width()-4, + e->size().height()-140); + + ConstellationDisplayFrame->resize(e->size().width()-4, + e->size().height()-140); + _constellationDisplayPlot->resize( TimeDomainDisplayFrame->width()-4, + e->size().height()-140); + + // Move the FFT Size Combobox and label + FFTSizeComboBox->move(width() - 5 - FFTSizeComboBox->width(), + height()-50); + FFTSizeLabel->move(width() - 10 - FFTSizeComboBox->width() - FFTSizeLabel->width(), + height()-50); + + // Move the lower check and combo boxes + UseRFFrequenciesCheckBox->move(UseRFFrequenciesCheckBox->x(), height()-50); + WindowLbl->move(WindowLbl->x(), height()-25); + WindowComboBox->move(WindowComboBox->x(), height()-25); +} + + +void +SpectrumDisplayForm::customEvent( QEvent * e) +{ + if(e->type() == QEvent::User+3){ + if(_systemSpecifiedFlag){ + WindowComboBox->setCurrentIndex(_system->GetWindowType()); + FFTSizeComboBox->setCurrentIndex(_system->GetFFTSizeIndex()); + //FFTSizeComboBox->setCurrentIndex(1); + PowerLineEdit_textChanged(PowerLineEdit->text()); + } + + waterfallMinimumIntensityChangedCB(WaterfallMinimumIntensityWheel->value()); + waterfallMaximumIntensityChangedCB(WaterfallMaximumIntensityWheel->value()); + + // If the video card doesn't support OpenGL then don't display the 3D Waterfall + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + waterfall3DMinimumIntensityChangedCB(Waterfall3DMinimumIntensityWheel->value()); + waterfall3DMaximumIntensityChangedCB(Waterfall3DMaximumIntensityWheel->value()); + + // Check for Hardware Acceleration of the OpenGL + if(!_waterfall3DDisplayPlot->format().directRendering()){ + // Only ask this once while the program is running... + if(_openGLWaterfall3DFlag == -1){ + _openGLWaterfall3DFlag = 0; + if(QMessageBox::warning(this, "OpenGL Direct Rendering NOT Supported", "
The system's video card hardware or current drivers do not support direct hardware rendering of the OpenGL modules.

Software rendering is VERY processor intensive.

Do you want to use software rendering?
", QMessageBox::Yes, QMessageBox::No | QMessageBox::Default | QMessageBox::Escape) == QMessageBox::Yes){ + _openGLWaterfall3DFlag = 1; + } + } + } + else{ + _openGLWaterfall3DFlag = 1; + } + } + + if(_openGLWaterfall3DFlag != 1){ + ToggleTabWaterfall3D(false); + } + + // Clear any previous display + Reset(); + } + else if(e->type() == 10005){ + SpectrumUpdateEvent* spectrumUpdateEvent = (SpectrumUpdateEvent*)e; + newFrequencyData(spectrumUpdateEvent); + } + else if(e->type() == 10008){ + setWindowTitle(((SpectrumWindowCaptionEvent*)e)->getLabel()); + } + else if(e->type() == 10009){ + Reset(); + if(_systemSpecifiedFlag){ + _system->ResetPendingGUIUpdateEvents(); + } + } + else if(e->type() == 10010){ + _startFrequency = ((SpectrumFrequencyRangeEvent*)e)->GetStartFrequency(); + _stopFrequency = ((SpectrumFrequencyRangeEvent*)e)->GetStopFrequency(); + _centerFrequency = ((SpectrumFrequencyRangeEvent*)e)->GetCenterFrequency(); + + UseRFFrequenciesCB(UseRFFrequenciesCheckBox->isChecked()); + } +} + +void +SpectrumDisplayForm::AvgLineEdit_textChanged( const QString &valueString ) +{ + if(!valueString.isEmpty()){ + int value = valueString.toInt(); + if(value > 500){ + value = 500; + AvgLineEdit->setText("500"); + } + SetAverageCount(value); + } +} + + +void +SpectrumDisplayForm::MaxHoldCheckBox_toggled( bool newState ) +{ + MaxHoldResetBtn->setEnabled(newState); + _frequencyDisplayPlot->SetMaxFFTVisible(newState); + MaxHoldResetBtn_clicked(); +} + + +void +SpectrumDisplayForm::MinHoldCheckBox_toggled( bool newState ) +{ + MinHoldResetBtn->setEnabled(newState); + _frequencyDisplayPlot->SetMinFFTVisible(newState); + MinHoldResetBtn_clicked(); +} + + +void +SpectrumDisplayForm::MinHoldResetBtn_clicked() +{ + _frequencyDisplayPlot->ClearMinData(); + _frequencyDisplayPlot->replot(); +} + + +void +SpectrumDisplayForm::MaxHoldResetBtn_clicked() +{ + _frequencyDisplayPlot->ClearMaxData(); + _frequencyDisplayPlot->replot(); +} + + +void +SpectrumDisplayForm::PowerLineEdit_textChanged( const QString &valueString ) +{ + if(_systemSpecifiedFlag){ + if(!valueString.isEmpty()){ + double value = valueString.toDouble(); + if(value < 1.0){ + value = 1.0; + PowerLineEdit->setText("1"); + } + _system->SetPowerValue(value); + } + + if(_system->GetPowerValue() > 1){ + UseRFFrequenciesCheckBox->setChecked(false); + UseRFFrequenciesCheckBox->setEnabled(false); + UseRFFrequenciesCB(false); + } + else{ + UseRFFrequenciesCheckBox->setEnabled(true); + } + } +} + +void +SpectrumDisplayForm::SetFrequencyRange(const double newCenterFrequency, + const double newStartFrequency, + const double newStopFrequency) +{ + double fdiff; + if(UseRFFrequenciesCheckBox->isChecked()) { + fdiff = newCenterFrequency; + } + else { + fdiff = std::max(fabs(newStartFrequency), fabs(newStopFrequency)); + } + + if(fdiff > 0) { + std::string strunits[4] = {"Hz", "kHz", "MHz", "GHz"}; + double units10 = floor(log10(fdiff)); + double units3 = std::max(floor(units10 / 3.0), 0.0); + double units = pow(10, (units10-fmod(units10, 3.0))); + int iunit = static_cast(units3); + + _startFrequency = newStartFrequency; + _stopFrequency = newStopFrequency; + _centerFrequency = newCenterFrequency; + + _frequencyDisplayPlot->SetFrequencyRange(newStartFrequency, + newStopFrequency, + newCenterFrequency, + UseRFFrequenciesCheckBox->isChecked(), + units, strunits[iunit]); + _waterfallDisplayPlot->SetFrequencyRange(newStartFrequency, + newStopFrequency, + newCenterFrequency, + UseRFFrequenciesCheckBox->isChecked(), + units, strunits[iunit]); + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + _waterfall3DDisplayPlot->SetFrequencyRange(newStartFrequency, + newStopFrequency, + newCenterFrequency, + UseRFFrequenciesCheckBox->isChecked(), + units, strunits[iunit]); + } + } +} + +int +SpectrumDisplayForm::GetAverageCount() +{ + return _historyVector->size(); +} + +void +SpectrumDisplayForm::SetAverageCount(const int newCount) +{ + if(newCount > -1){ + if(newCount != static_cast(_historyVector->size())){ + std::vector::iterator pos; + while(newCount < static_cast(_historyVector->size())){ + pos = _historyVector->begin(); + delete[] (*pos); + _historyVector->erase(pos); + } + + while(newCount > static_cast(_historyVector->size())){ + _historyVector->push_back(new double[_numRealDataPoints]); + } + AverageDataReset(); + } + } +} + +void +SpectrumDisplayForm::_AverageHistory(const double* newBuffer) +{ + if(_numRealDataPoints > 0){ + if(_historyVector->size() > 0){ + memcpy(_historyVector->operator[](_historyEntry), newBuffer, + _numRealDataPoints*sizeof(double)); + + // Increment the next location to store data + _historyEntryCount++; + if(_historyEntryCount > static_cast(_historyVector->size())){ + _historyEntryCount = _historyVector->size(); + } + _historyEntry = (++_historyEntry)%_historyVector->size(); + + // Total up and then average the values + double sum; + for(uint64_t location = 0; location < _numRealDataPoints; location++){ + sum = 0; + for(int number = 0; number < _historyEntryCount; number++){ + sum += _historyVector->operator[](number)[location]; + } + _averagedValues[location] = sum/static_cast(_historyEntryCount); + } + } + else{ + memcpy(_averagedValues, newBuffer, _numRealDataPoints*sizeof(double)); + } + } +} + +void +SpectrumDisplayForm::ResizeBuffers( const uint64_t numFFTDataPoints, + const uint64_t /*numTimeDomainDataPoints*/ ) +{ + // Convert from Complex to Real for certain Displays + if(_numRealDataPoints != numFFTDataPoints){ + _numRealDataPoints = numFFTDataPoints; + delete[] _realFFTDataPoints; + delete[] _averagedValues; + + _realFFTDataPoints = new double[_numRealDataPoints]; + _averagedValues = new double[_numRealDataPoints]; + memset(_realFFTDataPoints, 0x0, _numRealDataPoints*sizeof(double)); + + const int historySize = _historyVector->size(); + SetAverageCount(0); // Clear the existing history + SetAverageCount(historySize); + + Reset(); + } +} + +void +SpectrumDisplayForm::Reset() +{ + AverageDataReset(); + + _waterfallDisplayPlot->Reset(); + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + _waterfall3DDisplayPlot->Reset(); + } +} + + +void +SpectrumDisplayForm::AverageDataReset() +{ + _historyEntry = 0; + _historyEntryCount = 0; + + memset(_averagedValues, 0x0, _numRealDataPoints*sizeof(double)); + + MaxHoldResetBtn_clicked(); + MinHoldResetBtn_clicked(); +} + + +void +SpectrumDisplayForm::closeEvent( QCloseEvent *e ) +{ + if(_systemSpecifiedFlag){ + _system->SetWindowOpenFlag(false); + } + + qApp->processEvents(); + + QWidget::closeEvent(e); +} + + +void +SpectrumDisplayForm::WindowTypeChanged( int newItem ) +{ + if(_systemSpecifiedFlag){ + _system->SetWindowType(newItem); + } +} + + +void +SpectrumDisplayForm::UseRFFrequenciesCB( bool useRFFlag ) +{ + SetFrequencyRange(_centerFrequency, _startFrequency, _stopFrequency); +} + + +void +SpectrumDisplayForm::waterfallMaximumIntensityChangedCB( double newValue ) +{ + if(newValue > WaterfallMinimumIntensityWheel->value()){ + WaterfallMaximumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0)); + } + else{ + WaterfallMaximumIntensityWheel->setValue(WaterfallMinimumIntensityWheel->value()); + } + + _waterfallDisplayPlot->SetIntensityRange(WaterfallMinimumIntensityWheel->value(), + WaterfallMaximumIntensityWheel->value()); +} + + +void +SpectrumDisplayForm::waterfallMinimumIntensityChangedCB( double newValue ) +{ + if(newValue < WaterfallMaximumIntensityWheel->value()){ + WaterfallMinimumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0)); + } + else{ + WaterfallMinimumIntensityWheel->setValue(WaterfallMaximumIntensityWheel->value()); + } + + _waterfallDisplayPlot->SetIntensityRange(WaterfallMinimumIntensityWheel->value(), + WaterfallMaximumIntensityWheel->value()); +} + +void +SpectrumDisplayForm::waterfall3DMaximumIntensityChangedCB( double newValue ) +{ + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + if(newValue > Waterfall3DMinimumIntensityWheel->value()){ + Waterfall3DMaximumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0)); + } + else{ + Waterfall3DMaximumIntensityWheel->setValue(Waterfall3DMinimumIntensityWheel->value()); + } + + _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(), + Waterfall3DMaximumIntensityWheel->value()); + } +} + + +void +SpectrumDisplayForm::waterfall3DMinimumIntensityChangedCB( double newValue ) +{ + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + if(newValue < Waterfall3DMaximumIntensityWheel->value()){ + Waterfall3DMinimumIntensityLabel->setText(QString("%1 dB").arg(newValue, 0, 'f', 0)); + } + else{ + Waterfall3DMinimumIntensityWheel->setValue(Waterfall3DMaximumIntensityWheel->value()); + } + + _waterfall3DDisplayPlot->SetIntensityRange(Waterfall3DMinimumIntensityWheel->value(), + Waterfall3DMaximumIntensityWheel->value()); + } +} + + +void +SpectrumDisplayForm::FFTComboBoxSelectedCB( const QString &fftSizeString ) +{ + if(_systemSpecifiedFlag){ + _system->SetFFTSize(fftSizeString.toLong()); + } +} + + +void +SpectrumDisplayForm::WaterfallAutoScaleBtnCB() +{ + double minimumIntensity = _noiseFloorAmplitude - 5; + if(minimumIntensity < WaterfallMinimumIntensityWheel->minValue()){ + minimumIntensity = WaterfallMinimumIntensityWheel->minValue(); + } + WaterfallMinimumIntensityWheel->setValue(minimumIntensity); + double maximumIntensity = _peakAmplitude + 10; + if(maximumIntensity > WaterfallMaximumIntensityWheel->maxValue()){ + maximumIntensity = WaterfallMaximumIntensityWheel->maxValue(); + } + WaterfallMaximumIntensityWheel->setValue(maximumIntensity); + waterfallMaximumIntensityChangedCB(maximumIntensity); +} + +void +SpectrumDisplayForm::Waterfall3DAutoScaleBtnCB() +{ + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + double minimumIntensity = _noiseFloorAmplitude - 5; + if(minimumIntensity < Waterfall3DMinimumIntensityWheel->minValue()){ + minimumIntensity = Waterfall3DMinimumIntensityWheel->minValue(); + } + Waterfall3DMinimumIntensityWheel->setValue(minimumIntensity); + double maximumIntensity = _peakAmplitude + 10; + if(maximumIntensity > Waterfall3DMaximumIntensityWheel->maxValue()){ + maximumIntensity = Waterfall3DMaximumIntensityWheel->maxValue(); + } + Waterfall3DMaximumIntensityWheel->setValue(maximumIntensity); + waterfallMaximumIntensityChangedCB(maximumIntensity); + } +} + +void +SpectrumDisplayForm::WaterfallIntensityColorTypeChanged( int newType ) +{ + QColor lowIntensityColor; + QColor highIntensityColor; + if(newType == WaterfallDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED){ + // Select the Low Intensity Color + lowIntensityColor = _waterfallDisplayPlot->GetUserDefinedLowIntensityColor(); + if(!lowIntensityColor.isValid()){ + lowIntensityColor = Qt::black; + } + QMessageBox::information(this, "Low Intensity Color Selection", "In the next window, select the low intensity color for the waterfall display", QMessageBox::Ok); + lowIntensityColor = QColorDialog::getColor(lowIntensityColor, this); + + // Select the High Intensity Color + highIntensityColor = _waterfallDisplayPlot->GetUserDefinedHighIntensityColor(); + if(!highIntensityColor.isValid()){ + highIntensityColor = Qt::white; + } + QMessageBox::information(this, "High Intensity Color Selection", "In the next window, select the high intensity color for the waterfall display", QMessageBox::Ok); + highIntensityColor = QColorDialog::getColor(highIntensityColor, this); + } + + _waterfallDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor, highIntensityColor); +} + +void +SpectrumDisplayForm::Waterfall3DIntensityColorTypeChanged( int newType ) +{ + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + QColor lowIntensityColor; + QColor highIntensityColor; + if(newType == Waterfall3DDisplayPlot::INTENSITY_COLOR_MAP_TYPE_USER_DEFINED){ + // Select the Low Intensity Color + lowIntensityColor = _waterfallDisplayPlot->GetUserDefinedLowIntensityColor(); + if(!lowIntensityColor.isValid()){ + lowIntensityColor = Qt::black; + } + QMessageBox::information(this, "Low Intensity Color Selection", "In the next window, select the low intensity color for the waterfall display", QMessageBox::Ok); + lowIntensityColor = QColorDialog::getColor(lowIntensityColor, this); + + // Select the High Intensity Color + highIntensityColor = _waterfallDisplayPlot->GetUserDefinedHighIntensityColor(); + if(!highIntensityColor.isValid()){ + highIntensityColor = Qt::white; + } + QMessageBox::information(this, "High Intensity Color Selection", "In the next window, select the high intensity color for the waterfall display", QMessageBox::Ok); + highIntensityColor = QColorDialog::getColor(highIntensityColor, this); + } + _waterfall3DDisplayPlot->SetIntensityColorMapType(newType, lowIntensityColor, + highIntensityColor); + } +} + + +void +SpectrumDisplayForm::ToggleTabFrequency(const bool state) +{ + if(state == true) { + if(d_plot_fft == -1) { + SpectrumTypeTab->addTab(FrequencyPage, "Frequency Display"); + d_plot_fft = SpectrumTypeTab->count()-1; + } + } + else { + SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(FrequencyPage)); + d_plot_fft = -1; + } +} + +void +SpectrumDisplayForm::ToggleTabWaterfall(const bool state) +{ + if(state == true) { + if(d_plot_waterfall == -1) { + SpectrumTypeTab->addTab(WaterfallPage, "Waterfall Display"); + d_plot_waterfall = SpectrumTypeTab->count()-1; + } + } + else { + SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(WaterfallPage)); + d_plot_waterfall = -1; + } +} + +void +SpectrumDisplayForm::ToggleTabWaterfall3D(const bool state) +{ + if(state == true) { + if((QGLFormat::hasOpenGL()) && (_useOpenGL)) { + if(d_plot_waterfall3d == -1) { + SpectrumTypeTab->addTab(Waterfall3DPage, "3D Waterfall Display"); + d_plot_waterfall3d = SpectrumTypeTab->count()-1; + } + } + } + else { + SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(Waterfall3DPage)); + d_plot_waterfall3d = -1; + } +} + +void +SpectrumDisplayForm::ToggleTabTime(const bool state) +{ + if(state == true) { + if(d_plot_time == -1) { + SpectrumTypeTab->addTab(TimeDomainPage, "Time Domain Display"); + d_plot_time = SpectrumTypeTab->count()-1; + } + } + else { + SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(TimeDomainPage)); + d_plot_time = -1; + } +} + +void +SpectrumDisplayForm::ToggleTabConstellation(const bool state) +{ + if(state == true) { + if(d_plot_constellation == -1) { + SpectrumTypeTab->addTab(ConstellationPage, "Constellation Display"); + d_plot_constellation = SpectrumTypeTab->count()-1; + } + } + else { + SpectrumTypeTab->removeTab(SpectrumTypeTab->indexOf(ConstellationPage)); + d_plot_constellation = -1; + } +} + + +void +SpectrumDisplayForm::SetTimeDomainAxis(double min, double max) +{ + _timeDomainDisplayPlot->set_yaxis(min, max); +} + +void +SpectrumDisplayForm::SetConstellationAxis(double xmin, double xmax, + double ymin, double ymax) +{ + _constellationDisplayPlot->set_axis(xmin, xmax, ymin, ymax); +} + +void +SpectrumDisplayForm::SetFrequencyAxis(double min, double max) +{ + _frequencyDisplayPlot->set_yaxis(min, max); +} diff --git a/gr-qtgui/src/lib/spectrumdisplayform.h b/gr-qtgui/src/lib/spectrumdisplayform.h new file mode 100644 index 00000000..bf802320 --- /dev/null +++ b/gr-qtgui/src/lib/spectrumdisplayform.h @@ -0,0 +1,111 @@ +#ifndef SPECTRUM_DISPLAY_FORM_H +#define SPECTRUM_DISPLAY_FORM_H + +#include "spectrumdisplayform_ui.h" + +class SpectrumGUIClass; +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +class SpectrumDisplayForm : public QWidget, public Ui::SpectrumDisplayForm +{ + Q_OBJECT + + public: + SpectrumDisplayForm(bool useOpenGL = true, QWidget* parent = 0); + ~SpectrumDisplayForm(); + + void setSystem( SpectrumGUIClass * newSystem, const uint64_t numFFTDataPoints, + const uint64_t numTimeDomainDataPoints ); + + int GetAverageCount(); + void SetAverageCount( const int newCount ); + void Reset(); + void AverageDataReset(); + void ResizeBuffers( const uint64_t numFFTDataPoints, + const uint64_t numTimeDomainDataPoints ); + +public slots: + void resizeEvent( QResizeEvent * e ); + void customEvent( QEvent * e ); + void AvgLineEdit_textChanged( const QString & valueString ); + void MaxHoldCheckBox_toggled( bool newState ); + void MinHoldCheckBox_toggled( bool newState ); + void MinHoldResetBtn_clicked(); + void MaxHoldResetBtn_clicked(); + void PowerLineEdit_textChanged( const QString& valueString ); + void SetFrequencyRange( const double newCenterFrequency, + const double newStartFrequency, + const double newStopFrequency ); + void closeEvent( QCloseEvent * e ); + void WindowTypeChanged( int newItem ); + void UseRFFrequenciesCB( bool useRFFlag ); + void waterfallMaximumIntensityChangedCB(double); + void waterfallMinimumIntensityChangedCB(double); + void WaterfallIntensityColorTypeChanged(int); + void WaterfallAutoScaleBtnCB(); + void waterfall3DMaximumIntensityChangedCB(double); + void waterfall3DMinimumIntensityChangedCB(double); + void Waterfall3DIntensityColorTypeChanged(int); + void Waterfall3DAutoScaleBtnCB(); + void FFTComboBoxSelectedCB(const QString&); + + void ToggleTabFrequency(const bool state); + void ToggleTabWaterfall(const bool state); + void ToggleTabWaterfall3D(const bool state); + void ToggleTabTime(const bool state); + void ToggleTabConstellation(const bool state); + + void SetTimeDomainAxis(double min, double max); + void SetConstellationAxis(double xmin, double xmax, + double ymin, double ymax); + void SetFrequencyAxis(double min, double max); + +private slots: + void newFrequencyData( const SpectrumUpdateEvent* ); + +protected: + +private: + void _AverageHistory( const double * newBuffer ); + + bool _useOpenGL; + int _historyEntryCount; + int _historyEntry; + std::vector* _historyVector; + double* _averagedValues; + uint64_t _numRealDataPoints; + double* _realFFTDataPoints; + QIntValidator* _intValidator; + FrequencyDisplayPlot* _frequencyDisplayPlot; + WaterfallDisplayPlot* _waterfallDisplayPlot; + Waterfall3DDisplayPlot* _waterfall3DDisplayPlot; + TimeDomainDisplayPlot* _timeDomainDisplayPlot; + ConstellationDisplayPlot* _constellationDisplayPlot; + SpectrumGUIClass* _system; + bool _systemSpecifiedFlag; + double _centerFrequency; + double _startFrequency; + double _noiseFloorAmplitude; + double _peakFrequency; + double _peakAmplitude; + static int _openGLWaterfall3DFlag; + double _stopFrequency; + + // whether or not to use a particular display + int d_plot_fft; + int d_plot_waterfall; + int d_plot_waterfall3d; + int d_plot_time; + int d_plot_constellation; +}; + +#endif /* SPECTRUM_DISPLAY_FORM_H */ diff --git a/gr-qtgui/src/lib/spectrumdisplayform.ui b/gr-qtgui/src/lib/spectrumdisplayform.ui new file mode 100644 index 00000000..96096030 --- /dev/null +++ b/gr-qtgui/src/lib/spectrumdisplayform.ui @@ -0,0 +1,998 @@ + + SpectrumDisplayForm + + + + 0 + 0 + 633 + 436 + + + + Spectrum Display + + + + + 10 + 385 + 180 + 20 + + + + Display RF Frequencies + + + + + + 105 + 410 + 170 + 20 + + + + + 9 + + + + + Hamming + + + + + Hann + + + + + Blackman + + + + + Rectangular + + + + + Kaiser + + + + + Blackman-harris + + + + + + + 10 + 410 + 90 + 17 + + + + Window: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + 405 + 385 + 116 + 20 + + + + FFT Size: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + 525 + 385 + 100 + 20 + + + + + 1024 + + + + + 2048 + + + + + 4096 + + + + + 8192 + + + + + 16384 + + + + + 32768 + + + + + + + 0 + 0 + 630 + 380 + + + + 0 + + + + Frequency Display + + + + + 480 + 320 + 60 + 20 + + + + 1 + + + + + + 10 + 325 + 95 + 20 + + + + Min Hold + + + false + + + + + + 545 + 300 + 72 + 20 + + + + Average + + + Qt::AlignCenter + + + false + + + + + + 105 + 325 + 61 + 20 + + + + Reset + + + + + + 550 + 320 + 60 + 20 + + + + 0 + + + + + + 475 + 300 + 72 + 20 + + + + Power + + + Qt::AlignCenter + + + false + + + + + + 105 + 300 + 61 + 20 + + + + Reset + + + + + + 10 + 300 + 95 + 20 + + + + Max Hold + + + false + + + + + + 5 + 5 + 620 + 290 + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + Waterfall Display + + + + + 5 + 0 + 85 + 21 + + + + <font size="-2">Intensity Display:</font> + + + false + + + + + + 90 + 0 + 121 + 25 + + + + + Color + + + + + White Hot + + + + + Black Hot + + + + + Incandescent + + + + + User Defined + + + + + + + 215 + 0 + 335 + 24 + + + + true + + + Qt::WheelFocus + + + true + + + 200.000000000000000 + + + 20.000000000000000 + + + 0.000000000000000 + + + + + + 563 + 3 + 55 + 21 + + + + 100 dB + + + false + + + + + + 5 + 30 + 615 + 295 + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + 215 + 325 + 335 + 24 + + + + true + + + 200.000000000000000 + + + 20.000000000000000 + + + 0.000000000000000 + + + + + + 565 + 325 + 55 + 20 + + + + -100 dB + + + false + + + + + + 0 + 325 + 135 + 21 + + + + Scales the Intensity to the current data extremes. + + + Auto Scale + + + + + + 3D Waterfall Display + + + + + 5 + 0 + 85 + 21 + + + + <font size="-2">Intensity Display:</font> + + + false + + + + + + 563 + 3 + 55 + 21 + + + + 100 dB + + + false + + + + + + 0 + 325 + 135 + 21 + + + + Scales the Intensity to the current data extremes. + + + Auto Scale + + + + + + 215 + 325 + 335 + 24 + + + + true + + + 200.000000000000000 + + + 20.000000000000000 + + + 0.000000000000000 + + + + + + 565 + 325 + 55 + 20 + + + + -100 dB + + + false + + + + + + 5 + 30 + 615 + 295 + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + 90 + 0 + 121 + 25 + + + + + Color + + + + + White Hot + + + + + Black Hot + + + + + Incandescent + + + + + User Defined + + + + + + + 215 + 0 + 335 + 24 + + + + true + + + Qt::WheelFocus + + + true + + + 200.000000000000000 + + + 20.000000000000000 + + + 0.000000000000000 + + + + + + Time Domain Display + + + + + 5 + 5 + 620 + 340 + + + + QFrame::NoFrame + + + QFrame::Plain + + + + + + Constellation Display + + + + + 5 + 5 + 620 + 340 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + qPixmapFromMimeSource + + + QwtWheel + QWidget +
qwt_wheel.h
+
+
+ + SpectrumTypeTab + MaxHoldCheckBox + MaxHoldResetBtn + MinHoldCheckBox + MinHoldResetBtn + PowerLineEdit + AvgLineEdit + UseRFFrequenciesCheckBox + WindowComboBox + FFTSizeComboBox + WaterfallMaximumIntensityWheel + WaterfallMinimumIntensityWheel + + + SpectrumGUIClass.h + FrequencyDisplayPlot.h + WaterfallDisplayPlot.h + Waterfall3DDisplayPlot.h + TimeDomainDisplayPlot.h + qvalidator.h + vector + qwt_wheel.h + + + + + MaxHoldCheckBox + toggled(bool) + SpectrumDisplayForm + MaxHoldCheckBox_toggled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + MaxHoldResetBtn + clicked() + SpectrumDisplayForm + MaxHoldResetBtn_clicked() + + + 20 + 20 + + + 20 + 20 + + + + + MinHoldCheckBox + toggled(bool) + SpectrumDisplayForm + MinHoldCheckBox_toggled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + MinHoldResetBtn + clicked() + SpectrumDisplayForm + MinHoldResetBtn_clicked() + + + 20 + 20 + + + 20 + 20 + + + + + AvgLineEdit + textChanged(QString) + SpectrumDisplayForm + AvgLineEdit_textChanged(QString) + + + 20 + 20 + + + 20 + 20 + + + + + PowerLineEdit + textChanged(QString) + SpectrumDisplayForm + PowerLineEdit_textChanged(QString) + + + 20 + 20 + + + 20 + 20 + + + + + WindowComboBox + activated(int) + SpectrumDisplayForm + WindowTypeChanged(int) + + + 20 + 20 + + + 20 + 20 + + + + + UseRFFrequenciesCheckBox + toggled(bool) + SpectrumDisplayForm + UseRFFrequenciesCB(bool) + + + 20 + 20 + + + 20 + 20 + + + + + WaterfallMaximumIntensityWheel + valueChanged(double) + SpectrumDisplayForm + waterfallMaximumIntensityChangedCB(double) + + + 20 + 20 + + + 20 + 20 + + + + + WaterfallMinimumIntensityWheel + valueChanged(double) + SpectrumDisplayForm + waterfallMinimumIntensityChangedCB(double) + + + 20 + 20 + + + 20 + 20 + + + + + Waterfall3DMaximumIntensityWheel + valueChanged(double) + SpectrumDisplayForm + waterfall3DMaximumIntensityChangedCB(double) + + + 20 + 20 + + + 20 + 20 + + + + + Waterfall3DMinimumIntensityWheel + valueChanged(double) + SpectrumDisplayForm + waterfall3DMinimumIntensityChangedCB(double) + + + 20 + 20 + + + 20 + 20 + + + + + FFTSizeComboBox + activated(QString) + SpectrumDisplayForm + FFTComboBoxSelectedCB(QString) + + + 20 + 20 + + + 20 + 20 + + + + + WaterfallAutoScaleBtn + clicked() + SpectrumDisplayForm + WaterfallAutoScaleBtnCB() + + + 20 + 20 + + + 20 + 20 + + + + + Waterfall3DAutoScaleBtn + clicked() + SpectrumDisplayForm + Waterfall3DAutoScaleBtnCB() + + + 20 + 20 + + + 20 + 20 + + + + + WaterfallIntensityComboBox + activated(int) + SpectrumDisplayForm + WaterfallIntensityColorTypeChanged(int) + + + 20 + 20 + + + 20 + 20 + + + + + Waterfall3DIntensityComboBox + activated(int) + SpectrumDisplayForm + Waterfall3DIntensityColorTypeChanged(int) + + + 20 + 20 + + + 20 + 20 + + + + +
diff --git a/gr-qtgui/src/lib/spectrumdisplayform_moc.cc b/gr-qtgui/src/lib/spectrumdisplayform_moc.cc new file mode 100644 index 00000000..43e0be97 --- /dev/null +++ b/gr-qtgui/src/lib/spectrumdisplayform_moc.cc @@ -0,0 +1,164 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'spectrumdisplayform.h' +** +** Created: Tue Jul 14 15:57:22 2009 +** by: The Qt Meta Object Compiler version 61 (Qt 4.5.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "spectrumdisplayform.h" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'spectrumdisplayform.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 61 +#error "This file was generated using the moc from 4.5.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_SpectrumDisplayForm[] = { + + // content: + 2, // revision + 0, // classname + 0, 0, // classinfo + 30, 12, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + + // slots: signature, parameters, type, tag, flags + 23, 21, 20, 20, 0x0a, + 50, 21, 20, 20, 0x0a, + 83, 71, 20, 20, 0x0a, + 125, 116, 20, 20, 0x0a, + 155, 116, 20, 20, 0x0a, + 185, 20, 20, 20, 0x0a, + 211, 20, 20, 20, 0x0a, + 237, 71, 20, 20, 0x0a, + 326, 272, 20, 20, 0x0a, + 366, 21, 20, 20, 0x0a, + 399, 391, 20, 20, 0x0a, + 432, 422, 20, 20, 0x0a, + 457, 20, 20, 20, 0x0a, + 500, 20, 20, 20, 0x0a, + 543, 20, 20, 20, 0x0a, + 583, 20, 20, 20, 0x0a, + 609, 20, 20, 20, 0x0a, + 654, 20, 20, 20, 0x0a, + 699, 20, 20, 20, 0x0a, + 741, 20, 20, 20, 0x0a, + 769, 20, 20, 20, 0x0a, + 806, 800, 20, 20, 0x0a, + 831, 800, 20, 20, 0x0a, + 856, 800, 20, 20, 0x0a, + 883, 800, 20, 20, 0x0a, + 903, 800, 20, 20, 0x0a, + 940, 932, 20, 20, 0x0a, + 993, 973, 20, 20, 0x0a, + 1043, 932, 20, 20, 0x0a, + 1075, 20, 20, 20, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_SpectrumDisplayForm[] = { + "SpectrumDisplayForm\0\0e\0" + "resizeEvent(QResizeEvent*)\0" + "customEvent(QEvent*)\0valueString\0" + "AvgLineEdit_textChanged(QString)\0" + "newState\0MaxHoldCheckBox_toggled(bool)\0" + "MinHoldCheckBox_toggled(bool)\0" + "MinHoldResetBtn_clicked()\0" + "MaxHoldResetBtn_clicked()\0" + "PowerLineEdit_textChanged(QString)\0" + "newCenterFrequency,newStartFrequency,newStopFrequency\0" + "SetFrequencyRange(double,double,double)\0" + "closeEvent(QCloseEvent*)\0newItem\0" + "WindowTypeChanged(int)\0useRFFlag\0" + "UseRFFrequenciesCB(bool)\0" + "waterfallMaximumIntensityChangedCB(double)\0" + "waterfallMinimumIntensityChangedCB(double)\0" + "WaterfallIntensityColorTypeChanged(int)\0" + "WaterfallAutoScaleBtnCB()\0" + "waterfall3DMaximumIntensityChangedCB(double)\0" + "waterfall3DMinimumIntensityChangedCB(double)\0" + "Waterfall3DIntensityColorTypeChanged(int)\0" + "Waterfall3DAutoScaleBtnCB()\0" + "FFTComboBoxSelectedCB(QString)\0state\0" + "ToggleTabFrequency(bool)\0" + "ToggleTabWaterfall(bool)\0" + "ToggleTabWaterfall3D(bool)\0" + "ToggleTabTime(bool)\0ToggleTabConstellation(bool)\0" + "min,max\0SetTimeDomainAxis(double,double)\0" + "xmin,xmax,ymin,ymax\0" + "SetConstellationAxis(double,double,double,double)\0" + "SetFrequencyAxis(double,double)\0" + "newFrequencyData(const SpectrumUpdateEvent*)\0" +}; + +const QMetaObject SpectrumDisplayForm::staticMetaObject = { + { &QWidget::staticMetaObject, qt_meta_stringdata_SpectrumDisplayForm, + qt_meta_data_SpectrumDisplayForm, 0 } +}; + +const QMetaObject *SpectrumDisplayForm::metaObject() const +{ + return &staticMetaObject; +} + +void *SpectrumDisplayForm::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_SpectrumDisplayForm)) + return static_cast(const_cast< SpectrumDisplayForm*>(this)); + if (!strcmp(_clname, "Ui::SpectrumDisplayForm")) + return static_cast< Ui::SpectrumDisplayForm*>(const_cast< SpectrumDisplayForm*>(this)); + return QWidget::qt_metacast(_clname); +} + +int SpectrumDisplayForm::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: resizeEvent((*reinterpret_cast< QResizeEvent*(*)>(_a[1]))); break; + case 1: customEvent((*reinterpret_cast< QEvent*(*)>(_a[1]))); break; + case 2: AvgLineEdit_textChanged((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 3: MaxHoldCheckBox_toggled((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 4: MinHoldCheckBox_toggled((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 5: MinHoldResetBtn_clicked(); break; + case 6: MaxHoldResetBtn_clicked(); break; + case 7: PowerLineEdit_textChanged((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 8: SetFrequencyRange((*reinterpret_cast< const double(*)>(_a[1])),(*reinterpret_cast< const double(*)>(_a[2])),(*reinterpret_cast< const double(*)>(_a[3]))); break; + case 9: closeEvent((*reinterpret_cast< QCloseEvent*(*)>(_a[1]))); break; + case 10: WindowTypeChanged((*reinterpret_cast< int(*)>(_a[1]))); break; + case 11: UseRFFrequenciesCB((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 12: waterfallMaximumIntensityChangedCB((*reinterpret_cast< double(*)>(_a[1]))); break; + case 13: waterfallMinimumIntensityChangedCB((*reinterpret_cast< double(*)>(_a[1]))); break; + case 14: WaterfallIntensityColorTypeChanged((*reinterpret_cast< int(*)>(_a[1]))); break; + case 15: WaterfallAutoScaleBtnCB(); break; + case 16: waterfall3DMaximumIntensityChangedCB((*reinterpret_cast< double(*)>(_a[1]))); break; + case 17: waterfall3DMinimumIntensityChangedCB((*reinterpret_cast< double(*)>(_a[1]))); break; + case 18: Waterfall3DIntensityColorTypeChanged((*reinterpret_cast< int(*)>(_a[1]))); break; + case 19: Waterfall3DAutoScaleBtnCB(); break; + case 20: FFTComboBoxSelectedCB((*reinterpret_cast< const QString(*)>(_a[1]))); break; + case 21: ToggleTabFrequency((*reinterpret_cast< const bool(*)>(_a[1]))); break; + case 22: ToggleTabWaterfall((*reinterpret_cast< const bool(*)>(_a[1]))); break; + case 23: ToggleTabWaterfall3D((*reinterpret_cast< const bool(*)>(_a[1]))); break; + case 24: ToggleTabTime((*reinterpret_cast< const bool(*)>(_a[1]))); break; + case 25: ToggleTabConstellation((*reinterpret_cast< const bool(*)>(_a[1]))); break; + case 26: SetTimeDomainAxis((*reinterpret_cast< double(*)>(_a[1])),(*reinterpret_cast< double(*)>(_a[2]))); break; + case 27: SetConstellationAxis((*reinterpret_cast< double(*)>(_a[1])),(*reinterpret_cast< double(*)>(_a[2])),(*reinterpret_cast< double(*)>(_a[3])),(*reinterpret_cast< double(*)>(_a[4]))); break; + case 28: SetFrequencyAxis((*reinterpret_cast< double(*)>(_a[1])),(*reinterpret_cast< double(*)>(_a[2]))); break; + case 29: newFrequencyData((*reinterpret_cast< const SpectrumUpdateEvent*(*)>(_a[1]))); break; + default: ; + } + _id -= 30; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/gr-qtgui/src/lib/spectrumdisplayform_ui.h b/gr-qtgui/src/lib/spectrumdisplayform_ui.h new file mode 100644 index 00000000..0d5b112e --- /dev/null +++ b/gr-qtgui/src/lib/spectrumdisplayform_ui.h @@ -0,0 +1,363 @@ +/******************************************************************************** +** Form generated from reading ui file 'spectrumdisplayform.ui' +** +** Created: Tue Jul 14 15:57:22 2009 +** by: Qt User Interface Compiler version 4.5.0 +** +** WARNING! All changes made in this file will be lost when recompiling ui file! +********************************************************************************/ + +#ifndef SPECTRUMDISPLAYFORM_UI_H +#define SPECTRUMDISPLAYFORM_UI_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "qwt_wheel.h" + +QT_BEGIN_NAMESPACE + +class Ui_SpectrumDisplayForm +{ +public: + QCheckBox *UseRFFrequenciesCheckBox; + QComboBox *WindowComboBox; + QLabel *WindowLbl; + QLabel *FFTSizeLabel; + QComboBox *FFTSizeComboBox; + QTabWidget *SpectrumTypeTab; + QWidget *FrequencyPage; + QLineEdit *PowerLineEdit; + QCheckBox *MinHoldCheckBox; + QLabel *AvgLabel; + QPushButton *MinHoldResetBtn; + QLineEdit *AvgLineEdit; + QLabel *PowerLabel; + QPushButton *MaxHoldResetBtn; + QCheckBox *MaxHoldCheckBox; + QFrame *FrequencyPlotDisplayFrame; + QWidget *WaterfallPage; + QLabel *textLabel1; + QComboBox *WaterfallIntensityComboBox; + QwtWheel *WaterfallMaximumIntensityWheel; + QLabel *WaterfallMaximumIntensityLabel; + QFrame *WaterfallPlotDisplayFrame; + QwtWheel *WaterfallMinimumIntensityWheel; + QLabel *WaterfallMinimumIntensityLabel; + QPushButton *WaterfallAutoScaleBtn; + QWidget *Waterfall3DPage; + QLabel *textLabel1_2; + QLabel *Waterfall3DMaximumIntensityLabel; + QPushButton *Waterfall3DAutoScaleBtn; + QwtWheel *Waterfall3DMinimumIntensityWheel; + QLabel *Waterfall3DMinimumIntensityLabel; + QFrame *Waterfall3DPlotDisplayFrame; + QComboBox *Waterfall3DIntensityComboBox; + QwtWheel *Waterfall3DMaximumIntensityWheel; + QWidget *TimeDomainPage; + QFrame *TimeDomainDisplayFrame; + QWidget *ConstellationPage; + QFrame *ConstellationDisplayFrame; + + void setupUi(QWidget *SpectrumDisplayForm) + { + if (SpectrumDisplayForm->objectName().isEmpty()) + SpectrumDisplayForm->setObjectName(QString::fromUtf8("SpectrumDisplayForm")); + SpectrumDisplayForm->resize(633, 436); + UseRFFrequenciesCheckBox = new QCheckBox(SpectrumDisplayForm); + UseRFFrequenciesCheckBox->setObjectName(QString::fromUtf8("UseRFFrequenciesCheckBox")); + UseRFFrequenciesCheckBox->setGeometry(QRect(10, 385, 180, 20)); + WindowComboBox = new QComboBox(SpectrumDisplayForm); + WindowComboBox->setObjectName(QString::fromUtf8("WindowComboBox")); + WindowComboBox->setGeometry(QRect(105, 410, 170, 20)); + QFont font; + font.setPointSize(9); + WindowComboBox->setFont(font); + WindowLbl = new QLabel(SpectrumDisplayForm); + WindowLbl->setObjectName(QString::fromUtf8("WindowLbl")); + WindowLbl->setGeometry(QRect(10, 410, 90, 17)); + WindowLbl->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + WindowLbl->setWordWrap(false); + FFTSizeLabel = new QLabel(SpectrumDisplayForm); + FFTSizeLabel->setObjectName(QString::fromUtf8("FFTSizeLabel")); + FFTSizeLabel->setGeometry(QRect(405, 385, 116, 20)); + FFTSizeLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + FFTSizeLabel->setWordWrap(false); + FFTSizeComboBox = new QComboBox(SpectrumDisplayForm); + FFTSizeComboBox->setObjectName(QString::fromUtf8("FFTSizeComboBox")); + FFTSizeComboBox->setGeometry(QRect(525, 385, 100, 20)); + SpectrumTypeTab = new QTabWidget(SpectrumDisplayForm); + SpectrumTypeTab->setObjectName(QString::fromUtf8("SpectrumTypeTab")); + SpectrumTypeTab->setGeometry(QRect(0, 0, 630, 380)); + FrequencyPage = new QWidget(); + FrequencyPage->setObjectName(QString::fromUtf8("FrequencyPage")); + PowerLineEdit = new QLineEdit(FrequencyPage); + PowerLineEdit->setObjectName(QString::fromUtf8("PowerLineEdit")); + PowerLineEdit->setGeometry(QRect(480, 320, 60, 20)); + MinHoldCheckBox = new QCheckBox(FrequencyPage); + MinHoldCheckBox->setObjectName(QString::fromUtf8("MinHoldCheckBox")); + MinHoldCheckBox->setGeometry(QRect(10, 325, 95, 20)); + MinHoldCheckBox->setChecked(false); + AvgLabel = new QLabel(FrequencyPage); + AvgLabel->setObjectName(QString::fromUtf8("AvgLabel")); + AvgLabel->setGeometry(QRect(545, 300, 72, 20)); + AvgLabel->setAlignment(Qt::AlignCenter); + AvgLabel->setWordWrap(false); + MinHoldResetBtn = new QPushButton(FrequencyPage); + MinHoldResetBtn->setObjectName(QString::fromUtf8("MinHoldResetBtn")); + MinHoldResetBtn->setGeometry(QRect(105, 325, 61, 20)); + AvgLineEdit = new QLineEdit(FrequencyPage); + AvgLineEdit->setObjectName(QString::fromUtf8("AvgLineEdit")); + AvgLineEdit->setGeometry(QRect(550, 320, 60, 20)); + PowerLabel = new QLabel(FrequencyPage); + PowerLabel->setObjectName(QString::fromUtf8("PowerLabel")); + PowerLabel->setGeometry(QRect(475, 300, 72, 20)); + PowerLabel->setAlignment(Qt::AlignCenter); + PowerLabel->setWordWrap(false); + MaxHoldResetBtn = new QPushButton(FrequencyPage); + MaxHoldResetBtn->setObjectName(QString::fromUtf8("MaxHoldResetBtn")); + MaxHoldResetBtn->setGeometry(QRect(105, 300, 61, 20)); + MaxHoldCheckBox = new QCheckBox(FrequencyPage); + MaxHoldCheckBox->setObjectName(QString::fromUtf8("MaxHoldCheckBox")); + MaxHoldCheckBox->setGeometry(QRect(10, 300, 95, 20)); + MaxHoldCheckBox->setChecked(false); + FrequencyPlotDisplayFrame = new QFrame(FrequencyPage); + FrequencyPlotDisplayFrame->setObjectName(QString::fromUtf8("FrequencyPlotDisplayFrame")); + FrequencyPlotDisplayFrame->setGeometry(QRect(5, 5, 620, 290)); + FrequencyPlotDisplayFrame->setFrameShape(QFrame::NoFrame); + FrequencyPlotDisplayFrame->setFrameShadow(QFrame::Plain); + SpectrumTypeTab->addTab(FrequencyPage, QString()); + WaterfallPage = new QWidget(); + WaterfallPage->setObjectName(QString::fromUtf8("WaterfallPage")); + textLabel1 = new QLabel(WaterfallPage); + textLabel1->setObjectName(QString::fromUtf8("textLabel1")); + textLabel1->setGeometry(QRect(5, 0, 85, 21)); + textLabel1->setWordWrap(false); + WaterfallIntensityComboBox = new QComboBox(WaterfallPage); + WaterfallIntensityComboBox->setObjectName(QString::fromUtf8("WaterfallIntensityComboBox")); + WaterfallIntensityComboBox->setGeometry(QRect(90, 0, 121, 25)); + WaterfallMaximumIntensityWheel = new QwtWheel(WaterfallPage); + WaterfallMaximumIntensityWheel->setObjectName(QString::fromUtf8("WaterfallMaximumIntensityWheel")); + WaterfallMaximumIntensityWheel->setGeometry(QRect(215, 0, 335, 24)); + WaterfallMaximumIntensityWheel->setMouseTracking(true); + WaterfallMaximumIntensityWheel->setFocusPolicy(Qt::WheelFocus); + WaterfallMaximumIntensityWheel->setValid(true); + WaterfallMaximumIntensityWheel->setTotalAngle(200); + WaterfallMaximumIntensityWheel->setViewAngle(20); + WaterfallMaximumIntensityWheel->setMass(0); + WaterfallMaximumIntensityLabel = new QLabel(WaterfallPage); + WaterfallMaximumIntensityLabel->setObjectName(QString::fromUtf8("WaterfallMaximumIntensityLabel")); + WaterfallMaximumIntensityLabel->setGeometry(QRect(563, 3, 55, 21)); + WaterfallMaximumIntensityLabel->setWordWrap(false); + WaterfallPlotDisplayFrame = new QFrame(WaterfallPage); + WaterfallPlotDisplayFrame->setObjectName(QString::fromUtf8("WaterfallPlotDisplayFrame")); + WaterfallPlotDisplayFrame->setGeometry(QRect(5, 30, 615, 295)); + WaterfallPlotDisplayFrame->setFrameShape(QFrame::NoFrame); + WaterfallPlotDisplayFrame->setFrameShadow(QFrame::Plain); + WaterfallMinimumIntensityWheel = new QwtWheel(WaterfallPage); + WaterfallMinimumIntensityWheel->setObjectName(QString::fromUtf8("WaterfallMinimumIntensityWheel")); + WaterfallMinimumIntensityWheel->setGeometry(QRect(215, 325, 335, 24)); + WaterfallMinimumIntensityWheel->setValid(true); + WaterfallMinimumIntensityWheel->setTotalAngle(200); + WaterfallMinimumIntensityWheel->setViewAngle(20); + WaterfallMinimumIntensityWheel->setMass(0); + WaterfallMinimumIntensityLabel = new QLabel(WaterfallPage); + WaterfallMinimumIntensityLabel->setObjectName(QString::fromUtf8("WaterfallMinimumIntensityLabel")); + WaterfallMinimumIntensityLabel->setGeometry(QRect(565, 325, 55, 20)); + WaterfallMinimumIntensityLabel->setWordWrap(false); + WaterfallAutoScaleBtn = new QPushButton(WaterfallPage); + WaterfallAutoScaleBtn->setObjectName(QString::fromUtf8("WaterfallAutoScaleBtn")); + WaterfallAutoScaleBtn->setGeometry(QRect(0, 325, 135, 21)); + SpectrumTypeTab->addTab(WaterfallPage, QString()); + Waterfall3DPage = new QWidget(); + Waterfall3DPage->setObjectName(QString::fromUtf8("Waterfall3DPage")); + textLabel1_2 = new QLabel(Waterfall3DPage); + textLabel1_2->setObjectName(QString::fromUtf8("textLabel1_2")); + textLabel1_2->setGeometry(QRect(5, 0, 85, 21)); + textLabel1_2->setWordWrap(false); + Waterfall3DMaximumIntensityLabel = new QLabel(Waterfall3DPage); + Waterfall3DMaximumIntensityLabel->setObjectName(QString::fromUtf8("Waterfall3DMaximumIntensityLabel")); + Waterfall3DMaximumIntensityLabel->setGeometry(QRect(563, 3, 55, 21)); + Waterfall3DMaximumIntensityLabel->setWordWrap(false); + Waterfall3DAutoScaleBtn = new QPushButton(Waterfall3DPage); + Waterfall3DAutoScaleBtn->setObjectName(QString::fromUtf8("Waterfall3DAutoScaleBtn")); + Waterfall3DAutoScaleBtn->setGeometry(QRect(0, 325, 135, 21)); + Waterfall3DMinimumIntensityWheel = new QwtWheel(Waterfall3DPage); + Waterfall3DMinimumIntensityWheel->setObjectName(QString::fromUtf8("Waterfall3DMinimumIntensityWheel")); + Waterfall3DMinimumIntensityWheel->setGeometry(QRect(215, 325, 335, 24)); + Waterfall3DMinimumIntensityWheel->setValid(true); + Waterfall3DMinimumIntensityWheel->setTotalAngle(200); + Waterfall3DMinimumIntensityWheel->setViewAngle(20); + Waterfall3DMinimumIntensityWheel->setMass(0); + Waterfall3DMinimumIntensityLabel = new QLabel(Waterfall3DPage); + Waterfall3DMinimumIntensityLabel->setObjectName(QString::fromUtf8("Waterfall3DMinimumIntensityLabel")); + Waterfall3DMinimumIntensityLabel->setGeometry(QRect(565, 325, 55, 20)); + Waterfall3DMinimumIntensityLabel->setWordWrap(false); + Waterfall3DPlotDisplayFrame = new QFrame(Waterfall3DPage); + Waterfall3DPlotDisplayFrame->setObjectName(QString::fromUtf8("Waterfall3DPlotDisplayFrame")); + Waterfall3DPlotDisplayFrame->setGeometry(QRect(5, 30, 615, 295)); + Waterfall3DPlotDisplayFrame->setFrameShape(QFrame::NoFrame); + Waterfall3DPlotDisplayFrame->setFrameShadow(QFrame::Plain); + Waterfall3DIntensityComboBox = new QComboBox(Waterfall3DPage); + Waterfall3DIntensityComboBox->setObjectName(QString::fromUtf8("Waterfall3DIntensityComboBox")); + Waterfall3DIntensityComboBox->setGeometry(QRect(90, 0, 121, 25)); + Waterfall3DMaximumIntensityWheel = new QwtWheel(Waterfall3DPage); + Waterfall3DMaximumIntensityWheel->setObjectName(QString::fromUtf8("Waterfall3DMaximumIntensityWheel")); + Waterfall3DMaximumIntensityWheel->setGeometry(QRect(215, 0, 335, 24)); + Waterfall3DMaximumIntensityWheel->setMouseTracking(true); + Waterfall3DMaximumIntensityWheel->setFocusPolicy(Qt::WheelFocus); + Waterfall3DMaximumIntensityWheel->setValid(true); + Waterfall3DMaximumIntensityWheel->setTotalAngle(200); + Waterfall3DMaximumIntensityWheel->setViewAngle(20); + Waterfall3DMaximumIntensityWheel->setMass(0); + SpectrumTypeTab->addTab(Waterfall3DPage, QString()); + TimeDomainPage = new QWidget(); + TimeDomainPage->setObjectName(QString::fromUtf8("TimeDomainPage")); + TimeDomainDisplayFrame = new QFrame(TimeDomainPage); + TimeDomainDisplayFrame->setObjectName(QString::fromUtf8("TimeDomainDisplayFrame")); + TimeDomainDisplayFrame->setGeometry(QRect(5, 5, 620, 340)); + TimeDomainDisplayFrame->setFrameShape(QFrame::NoFrame); + TimeDomainDisplayFrame->setFrameShadow(QFrame::Plain); + SpectrumTypeTab->addTab(TimeDomainPage, QString()); + ConstellationPage = new QWidget(); + ConstellationPage->setObjectName(QString::fromUtf8("ConstellationPage")); + ConstellationDisplayFrame = new QFrame(ConstellationPage); + ConstellationDisplayFrame->setObjectName(QString::fromUtf8("ConstellationDisplayFrame")); + ConstellationDisplayFrame->setGeometry(QRect(5, 5, 620, 340)); + ConstellationDisplayFrame->setFrameShape(QFrame::StyledPanel); + ConstellationDisplayFrame->setFrameShadow(QFrame::Raised); + SpectrumTypeTab->addTab(ConstellationPage, QString()); + QWidget::setTabOrder(SpectrumTypeTab, MaxHoldCheckBox); + QWidget::setTabOrder(MaxHoldCheckBox, MaxHoldResetBtn); + QWidget::setTabOrder(MaxHoldResetBtn, MinHoldCheckBox); + QWidget::setTabOrder(MinHoldCheckBox, MinHoldResetBtn); + QWidget::setTabOrder(MinHoldResetBtn, PowerLineEdit); + QWidget::setTabOrder(PowerLineEdit, AvgLineEdit); + QWidget::setTabOrder(AvgLineEdit, UseRFFrequenciesCheckBox); + QWidget::setTabOrder(UseRFFrequenciesCheckBox, WindowComboBox); + QWidget::setTabOrder(WindowComboBox, FFTSizeComboBox); + QWidget::setTabOrder(FFTSizeComboBox, WaterfallMaximumIntensityWheel); + QWidget::setTabOrder(WaterfallMaximumIntensityWheel, WaterfallMinimumIntensityWheel); + + retranslateUi(SpectrumDisplayForm); + QObject::connect(MaxHoldCheckBox, SIGNAL(toggled(bool)), SpectrumDisplayForm, SLOT(MaxHoldCheckBox_toggled(bool))); + QObject::connect(MaxHoldResetBtn, SIGNAL(clicked()), SpectrumDisplayForm, SLOT(MaxHoldResetBtn_clicked())); + QObject::connect(MinHoldCheckBox, SIGNAL(toggled(bool)), SpectrumDisplayForm, SLOT(MinHoldCheckBox_toggled(bool))); + QObject::connect(MinHoldResetBtn, SIGNAL(clicked()), SpectrumDisplayForm, SLOT(MinHoldResetBtn_clicked())); + QObject::connect(AvgLineEdit, SIGNAL(textChanged(QString)), SpectrumDisplayForm, SLOT(AvgLineEdit_textChanged(QString))); + QObject::connect(PowerLineEdit, SIGNAL(textChanged(QString)), SpectrumDisplayForm, SLOT(PowerLineEdit_textChanged(QString))); + QObject::connect(WindowComboBox, SIGNAL(activated(int)), SpectrumDisplayForm, SLOT(WindowTypeChanged(int))); + QObject::connect(UseRFFrequenciesCheckBox, SIGNAL(toggled(bool)), SpectrumDisplayForm, SLOT(UseRFFrequenciesCB(bool))); + QObject::connect(WaterfallMaximumIntensityWheel, SIGNAL(valueChanged(double)), SpectrumDisplayForm, SLOT(waterfallMaximumIntensityChangedCB(double))); + QObject::connect(WaterfallMinimumIntensityWheel, SIGNAL(valueChanged(double)), SpectrumDisplayForm, SLOT(waterfallMinimumIntensityChangedCB(double))); + QObject::connect(Waterfall3DMaximumIntensityWheel, SIGNAL(valueChanged(double)), SpectrumDisplayForm, SLOT(waterfall3DMaximumIntensityChangedCB(double))); + QObject::connect(Waterfall3DMinimumIntensityWheel, SIGNAL(valueChanged(double)), SpectrumDisplayForm, SLOT(waterfall3DMinimumIntensityChangedCB(double))); + QObject::connect(FFTSizeComboBox, SIGNAL(activated(QString)), SpectrumDisplayForm, SLOT(FFTComboBoxSelectedCB(QString))); + QObject::connect(WaterfallAutoScaleBtn, SIGNAL(clicked()), SpectrumDisplayForm, SLOT(WaterfallAutoScaleBtnCB())); + QObject::connect(Waterfall3DAutoScaleBtn, SIGNAL(clicked()), SpectrumDisplayForm, SLOT(Waterfall3DAutoScaleBtnCB())); + QObject::connect(WaterfallIntensityComboBox, SIGNAL(activated(int)), SpectrumDisplayForm, SLOT(WaterfallIntensityColorTypeChanged(int))); + QObject::connect(Waterfall3DIntensityComboBox, SIGNAL(activated(int)), SpectrumDisplayForm, SLOT(Waterfall3DIntensityColorTypeChanged(int))); + + SpectrumTypeTab->setCurrentIndex(0); + + + QMetaObject::connectSlotsByName(SpectrumDisplayForm); + } // setupUi + + void retranslateUi(QWidget *SpectrumDisplayForm) + { + SpectrumDisplayForm->setWindowTitle(QApplication::translate("SpectrumDisplayForm", "Spectrum Display", 0, QApplication::UnicodeUTF8)); + UseRFFrequenciesCheckBox->setText(QApplication::translate("SpectrumDisplayForm", "Display RF Frequencies", 0, QApplication::UnicodeUTF8)); + WindowComboBox->clear(); + WindowComboBox->insertItems(0, QStringList() + << QApplication::translate("SpectrumDisplayForm", "Hamming", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Hann", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Blackman", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Rectangular", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Kaiser", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Blackman-harris", 0, QApplication::UnicodeUTF8) + ); + WindowLbl->setText(QApplication::translate("SpectrumDisplayForm", "Window:", 0, QApplication::UnicodeUTF8)); + FFTSizeLabel->setText(QApplication::translate("SpectrumDisplayForm", "FFT Size:", 0, QApplication::UnicodeUTF8)); + FFTSizeComboBox->clear(); + FFTSizeComboBox->insertItems(0, QStringList() + << QApplication::translate("SpectrumDisplayForm", "1024", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "2048", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "4096", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "8192", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "16384", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "32768", 0, QApplication::UnicodeUTF8) + ); + PowerLineEdit->setText(QApplication::translate("SpectrumDisplayForm", "1", 0, QApplication::UnicodeUTF8)); + MinHoldCheckBox->setText(QApplication::translate("SpectrumDisplayForm", "Min Hold", 0, QApplication::UnicodeUTF8)); + AvgLabel->setText(QApplication::translate("SpectrumDisplayForm", "Average", 0, QApplication::UnicodeUTF8)); + MinHoldResetBtn->setText(QApplication::translate("SpectrumDisplayForm", "Reset", 0, QApplication::UnicodeUTF8)); + AvgLineEdit->setText(QApplication::translate("SpectrumDisplayForm", "0", 0, QApplication::UnicodeUTF8)); + PowerLabel->setText(QApplication::translate("SpectrumDisplayForm", "Power", 0, QApplication::UnicodeUTF8)); + MaxHoldResetBtn->setText(QApplication::translate("SpectrumDisplayForm", "Reset", 0, QApplication::UnicodeUTF8)); + MaxHoldCheckBox->setText(QApplication::translate("SpectrumDisplayForm", "Max Hold", 0, QApplication::UnicodeUTF8)); + SpectrumTypeTab->setTabText(SpectrumTypeTab->indexOf(FrequencyPage), QApplication::translate("SpectrumDisplayForm", "Frequency Display", 0, QApplication::UnicodeUTF8)); + textLabel1->setText(QApplication::translate("SpectrumDisplayForm", "Intensity Display:", 0, QApplication::UnicodeUTF8)); + WaterfallIntensityComboBox->clear(); + WaterfallIntensityComboBox->insertItems(0, QStringList() + << QApplication::translate("SpectrumDisplayForm", "Color", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "White Hot", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Black Hot", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Incandescent", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "User Defined", 0, QApplication::UnicodeUTF8) + ); + WaterfallMaximumIntensityLabel->setText(QApplication::translate("SpectrumDisplayForm", "100 dB", 0, QApplication::UnicodeUTF8)); + WaterfallMinimumIntensityLabel->setText(QApplication::translate("SpectrumDisplayForm", "-100 dB", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + WaterfallAutoScaleBtn->setToolTip(QApplication::translate("SpectrumDisplayForm", "Scales the Intensity to the current data extremes.", 0, QApplication::UnicodeUTF8)); +#endif // QT_NO_TOOLTIP + WaterfallAutoScaleBtn->setText(QApplication::translate("SpectrumDisplayForm", "Auto Scale", 0, QApplication::UnicodeUTF8)); + SpectrumTypeTab->setTabText(SpectrumTypeTab->indexOf(WaterfallPage), QApplication::translate("SpectrumDisplayForm", "Waterfall Display", 0, QApplication::UnicodeUTF8)); + textLabel1_2->setText(QApplication::translate("SpectrumDisplayForm", "Intensity Display:", 0, QApplication::UnicodeUTF8)); + Waterfall3DMaximumIntensityLabel->setText(QApplication::translate("SpectrumDisplayForm", "100 dB", 0, QApplication::UnicodeUTF8)); +#ifndef QT_NO_TOOLTIP + Waterfall3DAutoScaleBtn->setToolTip(QApplication::translate("SpectrumDisplayForm", "Scales the Intensity to the current data extremes.", 0, QApplication::UnicodeUTF8)); +#endif // QT_NO_TOOLTIP + Waterfall3DAutoScaleBtn->setText(QApplication::translate("SpectrumDisplayForm", "Auto Scale", 0, QApplication::UnicodeUTF8)); + Waterfall3DMinimumIntensityLabel->setText(QApplication::translate("SpectrumDisplayForm", "-100 dB", 0, QApplication::UnicodeUTF8)); + Waterfall3DIntensityComboBox->clear(); + Waterfall3DIntensityComboBox->insertItems(0, QStringList() + << QApplication::translate("SpectrumDisplayForm", "Color", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "White Hot", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Black Hot", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "Incandescent", 0, QApplication::UnicodeUTF8) + << QApplication::translate("SpectrumDisplayForm", "User Defined", 0, QApplication::UnicodeUTF8) + ); + SpectrumTypeTab->setTabText(SpectrumTypeTab->indexOf(Waterfall3DPage), QApplication::translate("SpectrumDisplayForm", "3D Waterfall Display", 0, QApplication::UnicodeUTF8)); + SpectrumTypeTab->setTabText(SpectrumTypeTab->indexOf(TimeDomainPage), QApplication::translate("SpectrumDisplayForm", "Time Domain Display", 0, QApplication::UnicodeUTF8)); + SpectrumTypeTab->setTabText(SpectrumTypeTab->indexOf(ConstellationPage), QApplication::translate("SpectrumDisplayForm", "Constellation Display", 0, QApplication::UnicodeUTF8)); + Q_UNUSED(SpectrumDisplayForm); + } // retranslateUi + +}; + +namespace Ui { + class SpectrumDisplayForm: public Ui_SpectrumDisplayForm {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // SPECTRUMDISPLAYFORM_UI_H diff --git a/gr-qtgui/src/lib/waterfallGlobalData.cc b/gr-qtgui/src/lib/waterfallGlobalData.cc new file mode 100644 index 00000000..0cbef4ec --- /dev/null +++ b/gr-qtgui/src/lib/waterfallGlobalData.cc @@ -0,0 +1,258 @@ +#ifndef WATERFALL_GLOBAL_DATA_CPP +#define WATERFALL_GLOBAL_DATA_CPP + +#include + +#include + +WaterfallData::WaterfallData(const double minimumFrequency, const double maximumFrequency, const uint64_t fftPoints, const unsigned int historyExtent): + QwtRasterData(QwtDoubleRect(minimumFrequency /* X START */, 0 /* Y START */, maximumFrequency - minimumFrequency /* WIDTH */, static_cast(historyExtent)/* HEIGHT */)) + +{ + _intensityRange = QwtDoubleInterval(-200.0, 0.0); + + _fftPoints = fftPoints; + _historyLength = historyExtent; + + _spectrumData = new double[_fftPoints * _historyLength]; + + Reset(); +} + +WaterfallData::~WaterfallData(){ + delete[] _spectrumData; +} + +void WaterfallData::Reset(){ + memset(_spectrumData, 0x0, _fftPoints*_historyLength*sizeof(double)); + + _numLinesToUpdate = -1; +} + +void WaterfallData::Copy(const WaterfallData* rhs){ + if((_fftPoints != rhs->GetNumFFTPoints()) || + (boundingRect() != rhs->boundingRect()) ){ + _fftPoints = rhs->GetNumFFTPoints(); + setBoundingRect(rhs->boundingRect()); + delete[] _spectrumData; + _spectrumData = new double[_fftPoints * _historyLength]; + } + Reset(); + SetSpectrumDataBuffer(rhs->GetSpectrumDataBuffer()); + SetNumLinesToUpdate(rhs->GetNumLinesToUpdate()); + setRange(rhs->range()); +} + +void WaterfallData::ResizeData(const double startFreq, const double stopFreq, const uint64_t fftPoints){ + if((fftPoints != GetNumFFTPoints()) || + (boundingRect().width() != (stopFreq - startFreq)) || + (boundingRect().left() != startFreq)){ + + setBoundingRect(QwtDoubleRect(startFreq, 0, stopFreq-startFreq, boundingRect().height())); + _fftPoints = fftPoints; + delete[] _spectrumData; + _spectrumData = new double[_fftPoints * _historyLength]; + } + + Reset(); +} + +QwtRasterData *WaterfallData::copy() const{ + WaterfallData* returnData = new WaterfallData(boundingRect().left(), boundingRect().right(), _fftPoints, _historyLength); + returnData->Copy(this); + return returnData; +} + +QwtDoubleInterval WaterfallData::range() const{ + return _intensityRange; +} + +void WaterfallData::setRange(const QwtDoubleInterval& newRange){ + _intensityRange = newRange; +} + +double WaterfallData::value(double x, double y) const{ + double returnValue = 0.0; + + const unsigned int intY = static_cast((1.0 - (y/boundingRect().height())) * + static_cast(_historyLength - 1)); + const unsigned int intX = static_cast((((x - boundingRect().left()) / boundingRect().width()) * + static_cast(_fftPoints-1)) + 0.5); + + const int location = (intY * _fftPoints) + intX; + if((location > -1) && (location < static_cast(_fftPoints * _historyLength))){ + returnValue = _spectrumData[location]; + } + + return returnValue; +} + +uint64_t WaterfallData::GetNumFFTPoints()const{ + return _fftPoints; +} + +void WaterfallData::addFFTData(const double* fftData, const uint64_t fftDataSize, const int droppedFrames){ + if(fftDataSize == _fftPoints){ + int64_t heightOffset = _historyLength - 1 - droppedFrames; + uint64_t drawingDroppedFrames = droppedFrames; + + // Any valid data rolled off the display so just fill in zeros and write new data + if(heightOffset < 0){ + heightOffset = 0; + drawingDroppedFrames = static_cast(_historyLength-1); + } + + // Copy the old data over if any available + if(heightOffset > 0){ + memmove( _spectrumData, &_spectrumData[(drawingDroppedFrames+1) * _fftPoints], heightOffset * _fftPoints * sizeof(double)) ; + } + + if(drawingDroppedFrames > 0){ + // Fill in zeros data for dropped data + memset(&_spectrumData[heightOffset * _fftPoints], 0x00, static_cast(drawingDroppedFrames) * _fftPoints * sizeof(double)); + } + + // add the new buffer + memcpy(&_spectrumData[(_historyLength - 1) * _fftPoints], fftData, _fftPoints*sizeof(double)); + + } +} + +double* WaterfallData::GetSpectrumDataBuffer()const{ + return _spectrumData; +} + +void WaterfallData::SetSpectrumDataBuffer(const double* newData){ + memcpy(_spectrumData, newData, _fftPoints * _historyLength * sizeof(double)); +} + +int WaterfallData::GetNumLinesToUpdate()const{ + return _numLinesToUpdate; +} + +void WaterfallData::SetNumLinesToUpdate(const int newNum){ + _numLinesToUpdate = newNum; +} + +void WaterfallData::IncrementNumLinesToUpdate(){ + _numLinesToUpdate++; +} + +Waterfall3DData::Waterfall3DData(const double minimumFrequency, const double maximumFrequency, const uint64_t fftPoints, const unsigned int historyExtent): + WaterfallData(minimumFrequency, maximumFrequency, fftPoints, historyExtent), Qwt3D::Function(){ + + _floorValue = 0.0; + setMinZ(0.0); + setMaxZ(200.0); + + // Create the dummy mesh data until _ResizeMesh is called + data = new double*[1]; + data[0] = new double[1]; + Qwt3D::Function::setMesh(1,1); + + _ResizeMesh(); +} + +Waterfall3DData::~Waterfall3DData(){ + for ( unsigned i = 0; i < umesh_p; i++){ + delete[] data[i]; + } + delete[] data; + +} + +void Waterfall3DData::ResizeData(const double startFreq, const double stopFreq, const uint64_t fftPoints){ + if((fftPoints != GetNumFFTPoints()) || + (boundingRect().width() != (stopFreq - startFreq)) || + (boundingRect().left() != startFreq)){ + WaterfallData::ResizeData(startFreq, stopFreq, fftPoints); + _ResizeMesh(); + } + + Reset(); +} + +bool Waterfall3DData::create() +{ + if ((umesh_p<=2) || (vmesh_p<=2) || !plotwidget_p) + return false; + + // Almost the same as the old create, except that here we store our own data buffer in the class rather than re-creating it each time... + + unsigned i,j; + + /* get the data */ + double dx = (maxu_p - minu_p) / (umesh_p - 1); + double dy = (maxv_p - minv_p) / (vmesh_p - 1); + + for (i = 0; i < umesh_p; ++i) + { + for (j = 0; j < vmesh_p; ++j) + { + data[i][j] = operator()(minu_p + i*dx, minv_p + j*dy); + + if (data[i][j] > range_p.maxVertex.z) + data[i][j] = range_p.maxVertex.z; + else if (data[i][j] < range_p.minVertex.z) + data[i][j] = range_p.minVertex.z; + } + } + + Q_ASSERT(plotwidget_p); + if (!plotwidget_p) + { + fprintf(stderr,"Function: no valid Plot3D Widget assigned"); + } + else + { + ((Waterfall3DDisplayPlot*)plotwidget_p)->loadFromData(data, umesh_p, vmesh_p, minu_p, maxu_p, minv_p, maxv_p); + } + + return true; +} + +double Waterfall3DData::operator()(double x, double y){ + return value(x,y) - _floorValue; +} + +double Waterfall3DData::GetFloorValue()const{ + return _floorValue; +} + +void Waterfall3DData::SetFloorValue(const double newValue){ + _floorValue = newValue; +} + +double Waterfall3DData::minZ()const{ + return range_p.minVertex.z; +} + +double Waterfall3DData::maxZ()const{ + return range_p.maxVertex.z; +} + +void Waterfall3DData::setMesh(unsigned int, unsigned int){ + // Do Nothing + printf("Should Not Reach this Function\n"); +} + +void Waterfall3DData::_ResizeMesh(){ + // Clear out the old mesh + for ( unsigned i = 0; i < umesh_p; i++){ + delete[] data[i]; + } + delete[] data; + + Qwt3D::Function::setMesh(static_cast(boundingRect().width()/20.0), _historyLength); + setDomain( boundingRect().left(), static_cast(boundingRect().right()), 0, _historyLength); + + /* allocate some space for the mesh */ + unsigned i; + data = new double* [umesh_p] ; + for ( i = 0; i < umesh_p; i++) + { + data[i] = new double [vmesh_p]; + } +} + +#endif /* WATERFALL_GLOBAL_DATA_CPP */ diff --git a/gr-qtgui/src/lib/waterfallGlobalData.h b/gr-qtgui/src/lib/waterfallGlobalData.h new file mode 100644 index 00000000..6e34ce5b --- /dev/null +++ b/gr-qtgui/src/lib/waterfallGlobalData.h @@ -0,0 +1,78 @@ +#ifndef WATERFALL_GLOBAL_DATA_HPP +#define WATERFALL_GLOBAL_DATA_HPP + +#include +#include + +class Waterfall3DDisplayPlot; + +class WaterfallData: public QwtRasterData +{ +public: + WaterfallData(const double, const double, const uint64_t, const unsigned int); + virtual ~WaterfallData(); + + virtual void Reset(); + virtual void Copy(const WaterfallData*); + + virtual void ResizeData(const double, const double, const uint64_t); + + virtual QwtRasterData *copy() const; + virtual QwtDoubleInterval range() const; + virtual void setRange(const QwtDoubleInterval&); + + virtual double value(double x, double y) const; + + virtual uint64_t GetNumFFTPoints()const; + virtual void addFFTData(const double*, const uint64_t, const int); + + virtual double* GetSpectrumDataBuffer()const; + virtual void SetSpectrumDataBuffer(const double*); + + virtual int GetNumLinesToUpdate()const; + virtual void SetNumLinesToUpdate(const int); + virtual void IncrementNumLinesToUpdate(); + +protected: + + double* _spectrumData; + uint64_t _fftPoints; + uint64_t _historyLength; + int _numLinesToUpdate; + QwtDoubleInterval _intensityRange; + +private: + +}; + +class Waterfall3DData: public WaterfallData, public Qwt3D::Function +{ +public: + Waterfall3DData(const double, const double, const uint64_t, const unsigned int); + virtual ~Waterfall3DData(); + + virtual void ResizeData(const double, const double, const uint64_t); + + virtual bool create(); + virtual void setMesh(unsigned int columns, unsigned int rows); //!< Sets number of rows and columns. + + virtual double operator()(double x, double y); + + virtual double GetFloorValue()const; + virtual void SetFloorValue(const double); + + virtual double minZ()const; + virtual double maxZ()const; + +protected: + void _ResizeMesh(); + + double** data; + double _floorValue; + +private: + +}; + + +#endif /* WATERFALL_GLOBAL_DATA_HPP */ diff --git a/gr-qtgui/src/python/Makefile.am b/gr-qtgui/src/python/Makefile.am new file mode 100644 index 00000000..5544748d --- /dev/null +++ b/gr-qtgui/src/python/Makefile.am @@ -0,0 +1,38 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +noinst_PYTHON = \ + pyqt_example_f.py \ + pyqt_example.py \ + qt_digital.py \ + qt_digital_window.py \ + usrp2_display.py \ + usrp_display.py + +EXTRA_DIST = \ + qt_digital_window.ui + +qtguipythondir = $(grpythondir)/qtgui + +qtguipython_PYTHON = \ + __init__.py diff --git a/gr-qtgui/src/python/Makefile.in b/gr-qtgui/src/python/Makefile.in new file mode 100644 index 00000000..87b7e3ac --- /dev/null +++ b/gr-qtgui/src/python/Makefile.in @@ -0,0 +1,929 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_PYTHON) $(qtguipython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-qtgui/src/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(qtguipythondir)" +qtguipythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +noinst_PYTHON = \ + pyqt_example_f.py \ + pyqt_example.py \ + qt_digital.py \ + qt_digital_window.py \ + usrp2_display.py \ + usrp_display.py + +EXTRA_DIST = \ + qt_digital_window.ui + +qtguipythondir = $(grpythondir)/qtgui +qtguipython_PYTHON = \ + __init__.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-qtgui/src/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-qtgui/src/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-qtguipythonPYTHON: $(qtguipython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(qtguipythondir)" || $(MKDIR_P) "$(DESTDIR)$(qtguipythondir)" + @list='$(qtguipython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(qtguipythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(qtguipythondir)/$$f'"; \ + $(qtguipythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(qtguipythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(qtguipythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(qtguipythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-qtguipythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(qtguipython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(qtguipythondir)/$$f"; \ + rm -f "$(DESTDIR)$(qtguipythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(qtguipythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(qtguipythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-qtguipythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-qtguipythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-qtguipythonPYTHON install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-qtguipythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-qtgui/src/python/__init__.py b/gr-qtgui/src/python/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/gr-qtgui/src/python/pyqt_example.py b/gr-qtgui/src/python/pyqt_example.py new file mode 100755 index 00000000..4fa8cdd9 --- /dev/null +++ b/gr-qtgui/src/python/pyqt_example.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio.qtgui import qtgui +from PyQt4 import QtGui, QtCore +import sys, sip + +class dialog_box(QtGui.QWidget): + def __init__(self, display, control): + QtGui.QWidget.__init__(self, None) + self.setWindowTitle('PyQt Test GUI') + + self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self) + self.boxlayout.addWidget(display, 1) + self.boxlayout.addWidget(control) + + self.resize(800, 500) + +class control_box(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + self.setWindowTitle('Control Panel') + + self.setToolTip('Control the signals') + QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10)) + + self.layout = QtGui.QFormLayout(self) + + # Control the first signal + self.freq1Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 1 Frequency:", self.freq1Edit) + self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"), + self.freq1EditText) + + self.amp1Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit) + self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"), + self.amp1EditText) + + + # Control the second signal + self.freq2Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 2 Frequency:", self.freq2Edit) + self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"), + self.freq2EditText) + + + self.amp2Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit) + self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"), + self.amp2EditText) + + self.quit = QtGui.QPushButton('Close', self) + self.layout.addWidget(self.quit) + + self.connect(self.quit, QtCore.SIGNAL('clicked()'), + QtGui.qApp, QtCore.SLOT('quit()')) + + def attach_signal1(self, signal): + self.signal1 = signal + self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency())) + self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude())) + + def attach_signal2(self, signal): + self.signal2 = signal + self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency())) + self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude())) + + def freq1EditText(self): + try: + newfreq = float(self.freq1Edit.text()) + self.signal1.set_frequency(newfreq) + except ValueError: + print "Bad frequency value entered" + + def amp1EditText(self): + try: + newamp = float(self.amp1Edit.text()) + self.signal1.set_amplitude(newamp) + except ValueError: + print "Bad amplitude value entered" + + + def freq2EditText(self): + try: + newfreq = float(self.freq2Edit.text()) + self.signal2.set_frequency(newfreq) + except ValueError: + print "Bad frequency value entered" + + def amp2EditText(self): + try: + newamp = float(self.amp2Edit.text()) + self.signal2.set_amplitude(newamp) + except ValueError: + print "Bad amplitude value entered" + + +class my_top_block(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + Rs = 8000 + f1 = 1000 + f2 = 2000 + + fftsize = 2048 + + self.qapp = QtGui.QApplication(sys.argv) + + src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) + src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src = gr.add_cc() + channel = gr.channel_model(0.001) + thr = gr.throttle(gr.sizeof_gr_complex, 100*fftsize) + self.snk1 = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + 0, Rs, + "Complex Signal Example", + True, True, False, True, False) + + self.connect(src1, (src,0)) + self.connect(src2, (src,1)) + self.connect(src, channel, thr, self.snk1) + + self.ctrl_win = control_box() + self.ctrl_win.attach_signal1(src1) + self.ctrl_win.attach_signal2(src2) + + # Get the reference pointer to the SpectrumDisplayForm QWidget + pyQt = self.snk1.pyqwidget() + + # Wrap the pointer as a PyQt SIP object + # This can now be manipulated as a PyQt4.QtGui.QWidget + pyWin = sip.wrapinstance(pyQt, QtGui.QWidget) + + self.main_box = dialog_box(pyWin, self.ctrl_win) + + self.main_box.show() + +if __name__ == "__main__": + tb = my_top_block(); + tb.start() + tb.qapp.exec_() + diff --git a/gr-qtgui/src/python/pyqt_example_f.py b/gr-qtgui/src/python/pyqt_example_f.py new file mode 100755 index 00000000..46fe07e0 --- /dev/null +++ b/gr-qtgui/src/python/pyqt_example_f.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python + +from gnuradio import gr, blks2 +from gnuradio.qtgui import qtgui +from PyQt4 import QtGui, QtCore +import sys, sip + +class dialog_box(QtGui.QWidget): + def __init__(self, display, control): + QtGui.QWidget.__init__(self, None) + self.setWindowTitle('PyQt Test GUI') + + self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self) + self.boxlayout.addWidget(display, 1) + self.boxlayout.addWidget(control) + + self.resize(800, 500) + +class control_box(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + self.setWindowTitle('Control Panel') + + self.setToolTip('Control the signals') + QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10)) + + self.layout = QtGui.QFormLayout(self) + + # Control the first signal + self.freq1Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 1 Frequency:", self.freq1Edit) + self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"), + self.freq1EditText) + + self.amp1Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit) + self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"), + self.amp1EditText) + + + # Control the second signal + self.freq2Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 2 Frequency:", self.freq2Edit) + self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"), + self.freq2EditText) + + + self.amp2Edit = QtGui.QLineEdit(self) + self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit) + self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"), + self.amp2EditText) + + self.quit = QtGui.QPushButton('Close', self) + self.layout.addWidget(self.quit) + + self.connect(self.quit, QtCore.SIGNAL('clicked()'), + QtGui.qApp, QtCore.SLOT('quit()')) + + def attach_signal1(self, signal): + self.signal1 = signal + self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency())) + self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude())) + + def attach_signal2(self, signal): + self.signal2 = signal + self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency())) + self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude())) + + def freq1EditText(self): + try: + newfreq = float(self.freq1Edit.text()) + self.signal1.set_frequency(newfreq) + except ValueError: + print "Bad frequency value entered" + + def amp1EditText(self): + try: + newamp = float(self.amp1Edit.text()) + self.signal1.set_amplitude(newamp) + except ValueError: + print "Bad amplitude value entered" + + + def freq2EditText(self): + try: + newfreq = float(self.freq2Edit.text()) + self.signal2.set_frequency(newfreq) + except ValueError: + print "Bad frequency value entered" + + def amp2EditText(self): + try: + newamp = float(self.amp2Edit.text()) + self.signal2.set_amplitude(newamp) + except ValueError: + print "Bad amplitude value entered" + + +class my_top_block(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + Rs = 8000 + f1 = 1000 + f2 = 2000 + + fftsize = 2048 + + self.qapp = QtGui.QApplication(sys.argv) + + src1 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) + src2 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src = gr.add_ff() + thr = gr.throttle(gr.sizeof_float, 100*fftsize) + self.snk1 = qtgui.sink_f(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + 0, Rs, + "Float Signal Example", + True, True, False, True, False) + + self.connect(src1, (src,0)) + self.connect(src2, (src,1)) + self.connect(src, thr, self.snk1) + + self.ctrl_win = control_box() + self.ctrl_win.attach_signal1(src1) + self.ctrl_win.attach_signal2(src2) + + # Get the reference pointer to the SpectrumDisplayForm QWidget + pyQt = self.snk1.pyqwidget() + + # Wrap the pointer as a PyQt SIP object + # This can now be manipulated as a PyQt4.QtGui.QWidget + pyWin = sip.wrapinstance(pyQt, QtGui.QWidget) + + self.main_box = dialog_box(pyWin, self.ctrl_win) + + self.main_box.show() + +if __name__ == "__main__": + tb = my_top_block(); + tb.start() + tb.qapp.exec_() + diff --git a/gr-qtgui/src/python/qt_digital.py b/gr-qtgui/src/python/qt_digital.py new file mode 100755 index 00000000..ceb492c8 --- /dev/null +++ b/gr-qtgui/src/python/qt_digital.py @@ -0,0 +1,274 @@ +#!/usr/bin/env python + +from gnuradio import gr, blks2 +from gnuradio.qtgui import qtgui +from gnuradio import eng_notation +from PyQt4 import QtGui, QtCore +import sys, sip +import scipy + +try: + from qt_digital_window import Ui_DigitalWindow +except ImportError: + print "Error: could not find qt_digital_window.py:" + print "\t\"Please run: pyuic4 qt_digital_window.ui -o qt_digital_window.py\"" + sys.exit(1) + +class dialog_box(QtGui.QMainWindow): + def __init__(self, snkTx, snkRx, fg, parent=None): + QtGui.QWidget.__init__(self, parent) + self.gui = Ui_DigitalWindow() + self.gui.setupUi(self) + + self.fg = fg + + self.set_sample_rate(self.fg.sample_rate()) + + self.set_snr(self.fg.snr()) + self.set_frequency(self.fg.frequency_offset()) + self.set_time_offset(self.fg.timing_offset()) + + self.set_gain_mu(self.fg.rx_gain_mu()) + self.set_alpha(self.fg.rx_alpha()) + + # Add the qtsnk widgets to the hlayout box + self.gui.sinkLayout.addWidget(snkTx) + self.gui.sinkLayout.addWidget(snkRx) + + + # Connect up some signals + self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"), + self.pauseFg) + + self.connect(self.gui.sampleRateEdit, QtCore.SIGNAL("editingFinished()"), + self.sampleRateEditText) + + self.connect(self.gui.snrEdit, QtCore.SIGNAL("editingFinished()"), + self.snrEditText) + self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"), + self.freqEditText) + self.connect(self.gui.timeEdit, QtCore.SIGNAL("editingFinished()"), + self.timeEditText) + + self.connect(self.gui.gainMuEdit, QtCore.SIGNAL("editingFinished()"), + self.gainMuEditText) + self.connect(self.gui.alphaEdit, QtCore.SIGNAL("editingFinished()"), + self.alphaEditText) + + + def pauseFg(self): + if(self.gui.pauseButton.text() == "Pause"): + self.fg.stop() + self.fg.wait() + self.gui.pauseButton.setText("Unpause") + else: + self.fg.start() + self.gui.pauseButton.setText("Pause") + + # Accessor functions for Gui to manipulate system parameters + def set_sample_rate(self, sr): + ssr = eng_notation.num_to_str(sr) + self.gui.sampleRateEdit.setText(QtCore.QString("%1").arg(ssr)) + + def sampleRateEditText(self): + try: + rate = self.gui.sampleRateEdit.text().toAscii() + srate = eng_notation.str_to_num(rate) + self.fg.set_sample_rate(srate) + except RuntimeError: + pass + + + # Accessor functions for Gui to manipulate channel model + def set_snr(self, snr): + self.gui.snrEdit.setText(QtCore.QString("%1").arg(snr)) + + def set_frequency(self, fo): + self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo)) + + def set_time_offset(self, to): + self.gui.timeEdit.setText(QtCore.QString("%1").arg(to)) + + def snrEditText(self): + try: + snr = self.gui.snrEdit.text().toDouble()[0] + self.fg.set_snr(snr) + except RuntimeError: + pass + + def freqEditText(self): + try: + freq = self.gui.freqEdit.text().toDouble()[0] + self.fg.set_frequency_offset(freq) + except RuntimeError: + pass + + def timeEditText(self): + try: + to = self.gui.timeEdit.text().toDouble()[0] + self.fg.set_timing_offset(to) + except RuntimeError: + pass + + + # Accessor functions for Gui to manipulate receiver parameters + def set_gain_mu(self, gain): + self.gui.gainMuEdit.setText(QtCore.QString("%1").arg(gain)) + + def set_alpha(self, alpha): + self.gui.alphaEdit.setText(QtCore.QString("%1").arg(alpha)) + + def alphaEditText(self): + try: + alpha = self.gui.alphaEdit.text().toDouble()[0] + self.fg.set_rx_alpha(alpha) + except RuntimeError: + pass + + def gainMuEditText(self): + try: + gain = self.gui.gainMuEdit.text().toDouble()[0] + self.fg.set_rx_gain_mu(gain) + except RuntimeError: + pass + + +class my_top_block(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + self.qapp = QtGui.QApplication(sys.argv) + + self._sample_rate = 200e3 + + self.sps = 2 + self.excess_bw = 0.35 + self.gray_code = True + + fftsize = 2048 + + self.data = scipy.random.randint(0, 255, 1000) + self.src = gr.vector_source_b(self.data.tolist(), True) + self.mod = blks2.dqpsk_mod(self.sps, self.excess_bw, self.gray_code, False, False) + + self.rrctaps = gr.firdes.root_raised_cosine(1, self.sps, 1, self.excess_bw, 21) + self.rx_rrc = gr.fir_filter_ccf(1, self.rrctaps) + + + # Set up the carrier & clock recovery parameters + self.arity = 4 + self.mu = 0.5 + self.gain_mu = 0.05 + self.omega = self.sps + self.gain_omega = .25 * self.gain_mu * self.gain_mu + self.omega_rel_lim = 0.05 + + self.alpha = 0.15 + self.beta = 0.25 * self.alpha * self.alpha + self.fmin = -1000/self.sample_rate() + self.fmax = 1000/self.sample_rate() + + self.receiver = gr.mpsk_receiver_cc(self.arity, 0, + self.alpha, self.beta, + self.fmin, self.fmax, + self.mu, self.gain_mu, + self.omega, self.gain_omega, + self.omega_rel_lim) + + + self.snr_dB = 15 + noise = self.get_noise_voltage(self.snr_dB) + self.fo = 100/self.sample_rate() + self.to = 1.0 + self.channel = gr.channel_model(noise, self.fo, self.to) + + self.thr = gr.throttle(gr.sizeof_char, 10*fftsize) + self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, 0, 1, + "Tx", True, True, False, True, True) + + self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, 0, 1, + "Rx", True, True, False, True, True) + + self.connect(self.src, self.thr, self.mod, self.channel, self.snk_tx) + self.connect(self.channel, self.rx_rrc, self.receiver, self.snk_rx) + + pyTxQt = self.snk_tx.pyqwidget() + pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget) + + pyRxQt = self.snk_rx.pyqwidget() + pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget) + + self.main_box = dialog_box(pyTx, pyRx, self); + self.main_box.show() + + + def get_noise_voltage(self, SNR): + S = 0 # dBm, assuming signal power normalized + N = S - SNR # dBm + npwr = pow(10.0, N/10.0) # ratio + nv = scipy.sqrt(npwr * self.sps) # convert the noise voltage + return nv + + + # System Parameters + def sample_rate(self): + return self._sample_rate + + def set_sample_rate(self, sr): + self._sample_rate = sr + + + # Channel Model Parameters + def snr(self): + return self.snr_dB + + def set_snr(self, snr): + self.snr_dB = snr + noise = self.get_noise_voltage(self.snr_dB) + self.channel.set_noise_voltage(noise) + + def frequency_offset(self): + return self.fo * self.sample_rate() + + def set_frequency_offset(self, fo): + self.fo = fo / self.sample_rate() + self.channel.set_frequency_offset(self.fo) + + def timing_offset(self): + return self.to + + def set_timing_offset(self, to): + self.to = to + self.channel.set_timing_offset(self.to) + + + # Receiver Parameters + def rx_gain_mu(self): + return self.gain_mu + + def rx_gain_omega(self): + return self.gain_omega + + def set_rx_gain_mu(self, gain): + self.gain_mu = gain + self.gain_omega = .25 * self.gain_mu * self.gain_mu + self.receiver.set_gain_mu(self.gain_mu) + self.receiver.set_gain_omega(self.gain_omega) + + def rx_alpha(self): + return self.alpha + + def rx_beta(self): + return self.beta + + def set_rx_alpha(self, alpha): + self.alpha = alpha + self.beta = .25 * self.alpha * self.alpha + self.receiver.set_alpha(self.alpha) + self.receiver.set_beta(self.beta) + + +if __name__ == "__main__": + tb = my_top_block(); + tb.start() + tb.qapp.exec_() diff --git a/gr-qtgui/src/python/qt_digital_window.py b/gr-qtgui/src/python/qt_digital_window.py new file mode 100644 index 00000000..9e4c57a8 --- /dev/null +++ b/gr-qtgui/src/python/qt_digital_window.py @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'qt_digital_window.ui' +# +# Created: Thu Jun 18 07:57:58 2009 +# by: PyQt4 UI code generator 4.4.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +class Ui_DigitalWindow(object): + def setupUi(self, DigitalWindow): + DigitalWindow.setObjectName("DigitalWindow") + DigitalWindow.resize(1236, 739) + self.centralwidget = QtGui.QWidget(DigitalWindow) + self.centralwidget.setObjectName("centralwidget") + self.closeButton = QtGui.QPushButton(self.centralwidget) + self.closeButton.setGeometry(QtCore.QRect(1120, 650, 101, 31)) + self.closeButton.setObjectName("closeButton") + self.sinkFrame = QtGui.QFrame(self.centralwidget) + self.sinkFrame.setGeometry(QtCore.QRect(10, 10, 1221, 501)) + self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel) + self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised) + self.sinkFrame.setObjectName("sinkFrame") + self.horizontalLayoutWidget = QtGui.QWidget(self.sinkFrame) + self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 1201, 481)) + self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") + self.sinkLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget) + self.sinkLayout.setObjectName("sinkLayout") + self.channelModeBox = QtGui.QGroupBox(self.centralwidget) + self.channelModeBox.setGeometry(QtCore.QRect(290, 520, 291, 161)) + self.channelModeBox.setObjectName("channelModeBox") + self.timeLabel = QtGui.QLabel(self.channelModeBox) + self.timeLabel.setGeometry(QtCore.QRect(10, 90, 101, 17)) + self.timeLabel.setObjectName("timeLabel") + self.timeEdit = QtGui.QLineEdit(self.channelModeBox) + self.timeEdit.setGeometry(QtCore.QRect(160, 90, 113, 23)) + self.timeEdit.setObjectName("timeEdit") + self.snrEdit = QtGui.QLineEdit(self.channelModeBox) + self.snrEdit.setGeometry(QtCore.QRect(160, 30, 113, 23)) + self.snrEdit.setObjectName("snrEdit") + self.snrLabel = QtGui.QLabel(self.channelModeBox) + self.snrLabel.setGeometry(QtCore.QRect(10, 30, 111, 20)) + self.snrLabel.setObjectName("snrLabel") + self.freqEdit = QtGui.QLineEdit(self.channelModeBox) + self.freqEdit.setGeometry(QtCore.QRect(160, 60, 113, 23)) + self.freqEdit.setObjectName("freqEdit") + self.freqLabel = QtGui.QLabel(self.channelModeBox) + self.freqLabel.setGeometry(QtCore.QRect(10, 60, 141, 17)) + self.freqLabel.setObjectName("freqLabel") + self.rxBox = QtGui.QGroupBox(self.centralwidget) + self.rxBox.setGeometry(QtCore.QRect(590, 520, 251, 161)) + self.rxBox.setObjectName("rxBox") + self.gainMuEdit = QtGui.QLineEdit(self.rxBox) + self.gainMuEdit.setGeometry(QtCore.QRect(120, 30, 113, 23)) + self.gainMuEdit.setObjectName("gainMuEdit") + self.gainMuLabel = QtGui.QLabel(self.rxBox) + self.gainMuLabel.setGeometry(QtCore.QRect(10, 30, 111, 20)) + self.gainMuLabel.setObjectName("gainMuLabel") + self.alphaEdit = QtGui.QLineEdit(self.rxBox) + self.alphaEdit.setGeometry(QtCore.QRect(120, 60, 113, 23)) + self.alphaEdit.setObjectName("alphaEdit") + self.alphaLabel = QtGui.QLabel(self.rxBox) + self.alphaLabel.setGeometry(QtCore.QRect(10, 60, 111, 20)) + self.alphaLabel.setObjectName("alphaLabel") + self.sysBox = QtGui.QGroupBox(self.centralwidget) + self.sysBox.setGeometry(QtCore.QRect(20, 520, 261, 161)) + self.sysBox.setObjectName("sysBox") + self.sampleRateEdit = QtGui.QLineEdit(self.sysBox) + self.sampleRateEdit.setGeometry(QtCore.QRect(140, 30, 113, 23)) + self.sampleRateEdit.setObjectName("sampleRateEdit") + self.sampleRateLabel = QtGui.QLabel(self.sysBox) + self.sampleRateLabel.setGeometry(QtCore.QRect(10, 30, 121, 20)) + self.sampleRateLabel.setObjectName("sampleRateLabel") + self.pauseButton = QtGui.QPushButton(self.centralwidget) + self.pauseButton.setGeometry(QtCore.QRect(1120, 520, 101, 31)) + self.pauseButton.setObjectName("pauseButton") + DigitalWindow.setCentralWidget(self.centralwidget) + self.menubar = QtGui.QMenuBar(DigitalWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1236, 25)) + self.menubar.setObjectName("menubar") + self.menuFile = QtGui.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + DigitalWindow.setMenuBar(self.menubar) + self.statusbar = QtGui.QStatusBar(DigitalWindow) + self.statusbar.setObjectName("statusbar") + DigitalWindow.setStatusBar(self.statusbar) + self.actionExit = QtGui.QAction(DigitalWindow) + self.actionExit.setObjectName("actionExit") + self.menuFile.addAction(self.actionExit) + self.menubar.addAction(self.menuFile.menuAction()) + + self.retranslateUi(DigitalWindow) + QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close) + QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close) + QtCore.QMetaObject.connectSlotsByName(DigitalWindow) + DigitalWindow.setTabOrder(self.closeButton, self.snrEdit) + DigitalWindow.setTabOrder(self.snrEdit, self.freqEdit) + DigitalWindow.setTabOrder(self.freqEdit, self.timeEdit) + + def retranslateUi(self, DigitalWindow): + DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) + self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8)) + self.channelModeBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Channel Model Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8)) + self.snrLabel.setText(QtGui.QApplication.translate("DigitalWindow", "SNR (dB)", None, QtGui.QApplication.UnicodeUTF8)) + self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency Offset (Hz)", None, QtGui.QApplication.UnicodeUTF8)) + self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain mu", None, QtGui.QApplication.UnicodeUTF8)) + self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8)) + self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8)) + self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8)) + self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8)) + self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8)) + self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8)) + diff --git a/gr-qtgui/src/python/qt_digital_window.ui b/gr-qtgui/src/python/qt_digital_window.ui new file mode 100644 index 00000000..79ba0128 --- /dev/null +++ b/gr-qtgui/src/python/qt_digital_window.ui @@ -0,0 +1,313 @@ + + + DigitalWindow + + + + 0 + 0 + 1236 + 739 + + + + MainWindow + + + + + + 1120 + 650 + 101 + 31 + + + + Close + + + + + + 10 + 10 + 1221 + 501 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 10 + 10 + 1201 + 481 + + + + + + + + + 290 + 520 + 291 + 161 + + + + Channel Model Parameters + + + + + 10 + 90 + 101 + 17 + + + + Timing Offset + + + + + + 160 + 90 + 113 + 23 + + + + + + + 160 + 30 + 113 + 23 + + + + + + + 10 + 30 + 111 + 20 + + + + SNR (dB) + + + + + + 160 + 60 + 113 + 23 + + + + + + + 10 + 60 + 141 + 17 + + + + Frequency Offset (Hz) + + + + + + + 590 + 520 + 251 + 161 + + + + Receiver Parameters + + + + + 120 + 30 + 113 + 23 + + + + + + + 10 + 30 + 111 + 20 + + + + Gain mu + + + + + + 120 + 60 + 113 + 23 + + + + + + + 10 + 60 + 111 + 20 + + + + Alpha + + + + + + + 20 + 520 + 261 + 161 + + + + System Parameters + + + + + 140 + 30 + 113 + 23 + + + + + + + 10 + 30 + 121 + 20 + + + + Sample Rate (sps) + + + + + + + 1120 + 520 + 101 + 31 + + + + Pause + + + + + + + 0 + 0 + 1236 + 25 + + + + + &File + + + + + + + + + E&xit + + + + + closeButton + snrEdit + freqEdit + timeEdit + + + + + closeButton + clicked() + DigitalWindow + close() + + + 322 + 623 + + + 66 + 561 + + + + + actionExit + triggered() + DigitalWindow + close() + + + -1 + -1 + + + 617 + 327 + + + + + diff --git a/gr-qtgui/src/python/usrp2_display.py b/gr-qtgui/src/python/usrp2_display.py new file mode 100755 index 00000000..a145569d --- /dev/null +++ b/gr-qtgui/src/python/usrp2_display.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python +# +# 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. +# + +from gnuradio import gr +from gnuradio import usrp2 +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from gnuradio.qtgui import qtgui +from optparse import OptionParser +import sys + +try: + from gnuradio.qtgui import qtgui + from PyQt4 import QtGui, QtCore + import sip +except ImportError: + print "Please install gr-qtgui." + sys.exit(1) + +try: + from usrp_display_qtgui import Ui_MainWindow +except ImportError: + print "Error: could not find usrp_display_qtgui.py:" + print "\t\"pyuic4 usrp_display_qtgui.ui -o usrp_display_qtgui.py\"" + sys.exit(1) + + +# //////////////////////////////////////////////////////////////////// +# Define the QT Interface and Control Dialog +# //////////////////////////////////////////////////////////////////// + + +class main_window(QtGui.QMainWindow): + def __init__(self, snk, fg, parent=None): + + QtGui.QWidget.__init__(self, parent) + self.gui = Ui_MainWindow() + self.gui.setupUi(self) + + self.fg = fg + + # Add the qtsnk widgets to the layout box + self.gui.sinkLayout.addWidget(snk) + + # Connect up some signals + self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"), + self.pauseFg) + self.connect(self.gui.frequencyEdit, QtCore.SIGNAL("editingFinished()"), + self.frequencyEditText) + self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"), + self.gainEditText) + self.connect(self.gui.bandwidthEdit, QtCore.SIGNAL("editingFinished()"), + self.bandwidthEditText) + self.connect(self.gui.amplifierEdit, QtCore.SIGNAL("editingFinished()"), + self.amplifierEditText) + + self.connect(self.gui.actionSaveData, QtCore.SIGNAL("activated()"), + self.saveData) + self.gui.actionSaveData.setShortcut(QtGui.QKeySequence.Save) + + def pauseFg(self): + if(self.gui.pauseButton.text() == "Pause"): + self.fg.stop() + self.fg.wait() + self.gui.pauseButton.setText("Unpause") + else: + self.fg.start() + self.gui.pauseButton.setText("Pause") + + + # Functions to set the values in the GUI + def set_frequency(self, freq): + self.freq = freq + sfreq = eng_notation.num_to_str(self.freq) + self.gui.frequencyEdit.setText(QtCore.QString("%1").arg(sfreq)) + + def set_gain(self, gain): + self.gain = gain + self.gui.gainEdit.setText(QtCore.QString("%1").arg(self.gain)) + + def set_bandwidth(self, bw): + self.bw = bw + sbw = eng_notation.num_to_str(self.bw) + self.gui.bandwidthEdit.setText(QtCore.QString("%1").arg(sbw)) + + def set_amplifier(self, amp): + self.amp = amp + self.gui.amplifierEdit.setText(QtCore.QString("%1").arg(self.amp)) + + + # Functions called when signals are triggered in the GUI + def frequencyEditText(self): + try: + freq = eng_notation.str_to_num(self.gui.frequencyEdit.text().toAscii()) + self.fg.set_frequency(freq) + self.freq = freq + except RuntimeError: + pass + + def gainEditText(self): + try: + gain = float(self.gui.gainEdit.text()) + self.fg.set_gain(gain) + self.gain = gain + except ValueError: + pass + + def bandwidthEditText(self): + try: + bw = eng_notation.str_to_num(self.gui.bandwidthEdit.text().toAscii()) + self.fg.set_bandwidth(bw) + self.bw = bw + except ValueError: + pass + + def amplifierEditText(self): + try: + amp = float(self.gui.amplifierEdit.text()) + self.fg.set_amplifier_gain(amp) + self.amp = amp + except ValueError: + pass + + def saveData(self): + fileName = QtGui.QFileDialog.getSaveFileName(self, "Save data to file", "."); + if(len(fileName)): + self.fg.save_to_file(str(fileName)) + + + +class my_top_block(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + parser = OptionParser(option_class=eng_option) + parser.add_option("-e", "--interface", type="string", default="eth0", + help="select Ethernet interface, default is eth0") + parser.add_option("-m", "--mac-addr", type="string", default="", + help="select USRP by MAC address, default is auto-select") + parser.add_option("-W", "--bw", type="float", default=1e6, + help="set bandwidth of receiver [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("--fft-size", type="int", default=2048, + help="Set number of FFT bins [default=%default]") + (options, args) = parser.parse_args() + + if len(args) != 0: + parser.print_help() + sys.exit(1) + self.options = options + self.show_debug_info = True + + self.qapp = QtGui.QApplication(sys.argv) + + self.u = usrp2.source_32fc(options.interface, options.mac_addr) + self._adc_rate = self.u.adc_rate() + self.set_bandwidth(options.bw) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.u.gain_range() + options.gain = float(g[0]+g[1])/2 + self.set_gain(options.gain) + + if options.freq is None: + # if no frequency was specified, use the mid-point of the subdev + f = self.u.freq_range() + options.freq = float(f[0]+f[1])/2 + self.set_frequency(options.freq) + + self._fftsize = options.fft_size + + self.snk = qtgui.sink_c(options.fft_size, gr.firdes.WIN_BLACKMAN_hARRIS, + self._freq, self._bandwidth, + "USRP2 Display", + True, True, False, True, False) + + # Set up internal amplifier + self.amp = gr.multiply_const_cc(0.0) + self.set_amplifier_gain(100) + + self.connect(self.u, self.amp, self.snk) + + if self.show_debug_info: + print "Decimation rate: ", self._decim + print "Bandwidth: ", self._bandwidth + print "D'board: ", self.u.daughterboard_id() + + # Get the reference pointer to the SpectrumDisplayForm QWidget + # Wrap the pointer as a PyQt SIP object + # This can now be manipulated as a PyQt4.QtGui.QWidget + self.pysink = sip.wrapinstance(self.snk.pyqwidget(), QtGui.QWidget) + + self.main_win = main_window(self.pysink, self) + + self.main_win.set_frequency(self._freq) + self.main_win.set_gain(self._gain) + self.main_win.set_bandwidth(self._bandwidth) + self.main_win.set_amplifier(self._amp_value) + + self.main_win.show() + + + def save_to_file(self, name): + # Pause the flow graph + self.stop() + self.wait() + + # Add file sink to save data + self.file_sink = gr.file_sink(gr.sizeof_gr_complex, name) + self.connect(self.amp, self.file_sink) + + # Restart flow graph + self.start() + + def set_gain(self, gain): + self._gain = gain + self.u.set_gain(self._gain) + + def set_frequency(self, freq): + self._freq = freq + r = self.u.set_center_freq(freq) + + try: + self.snk.set_frequency_range(self._freq, self._bandwidth) + except: + pass + + def set_bandwidth(self, bw): + self._bandwidth = bw + self._decim = int(self._adc_rate / self._bandwidth) + self.u.set_decim(self._decim) + + try: + self.snk.set_frequency_range(self._freq, self._bandwidth) + except: + pass + + def set_amplifier_gain(self, amp): + self._amp_value = amp + self.amp.set_k(self._amp_value) + +def main (): + tb = my_top_block() + tb.start() + tb.snk.exec_(); + +if __name__ == '__main__': + try: + main () + except KeyboardInterrupt: + pass + diff --git a/gr-qtgui/src/python/usrp_display.py b/gr-qtgui/src/python/usrp_display.py new file mode 100755 index 00000000..432e74d9 --- /dev/null +++ b/gr-qtgui/src/python/usrp_display.py @@ -0,0 +1,299 @@ +#!/usr/bin/env python +# +# 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. +# + +from gnuradio import gr +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from gnuradio.qtgui import qtgui +from optparse import OptionParser +import sys + +try: + from gnuradio.qtgui import qtgui + from PyQt4 import QtGui, QtCore + import sip +except ImportError: + print "Please install gr-qtgui." + sys.exit(1) + +try: + from usrp_display_qtgui import Ui_MainWindow +except ImportError: + print "Error: could not find usrp_display_qtgui.py:" + print "\t\"pyuic4 usrp_display_qtgui.ui -o usrp_display_qtgui.py\"" + sys.exit(1) + + + +# //////////////////////////////////////////////////////////////////// +# Define the QT Interface and Control Dialog +# //////////////////////////////////////////////////////////////////// + + +class main_window(QtGui.QMainWindow): + def __init__(self, snk, fg, parent=None): + + QtGui.QWidget.__init__(self, parent) + self.gui = Ui_MainWindow() + self.gui.setupUi(self) + + self.fg = fg + + # Add the qtsnk widgets to the layout box + self.gui.sinkLayout.addWidget(snk) + + # Connect up some signals + self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"), + self.pauseFg) + self.connect(self.gui.frequencyEdit, QtCore.SIGNAL("editingFinished()"), + self.frequencyEditText) + self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"), + self.gainEditText) + self.connect(self.gui.bandwidthEdit, QtCore.SIGNAL("editingFinished()"), + self.bandwidthEditText) + self.connect(self.gui.amplifierEdit, QtCore.SIGNAL("editingFinished()"), + self.amplifierEditText) + + self.connect(self.gui.actionSaveData, QtCore.SIGNAL("activated()"), + self.saveData) + self.gui.actionSaveData.setShortcut(QtGui.QKeySequence.Save) + + def pauseFg(self): + if(self.gui.pauseButton.text() == "Pause"): + self.fg.stop() + self.fg.wait() + self.gui.pauseButton.setText("Unpause") + else: + self.fg.start() + self.gui.pauseButton.setText("Pause") + + + # Functions to set the values in the GUI + def set_frequency(self, freq): + self.freq = freq + sfreq = eng_notation.num_to_str(self.freq) + self.gui.frequencyEdit.setText(QtCore.QString("%1").arg(sfreq)) + + def set_gain(self, gain): + self.gain = gain + self.gui.gainEdit.setText(QtCore.QString("%1").arg(self.gain)) + + def set_bandwidth(self, bw): + self.bw = bw + sbw = eng_notation.num_to_str(self.bw) + self.gui.bandwidthEdit.setText(QtCore.QString("%1").arg(sbw)) + + def set_amplifier(self, amp): + self.amp = amp + self.gui.amplifierEdit.setText(QtCore.QString("%1").arg(self.amp)) + + + # Functions called when signals are triggered in the GUI + def frequencyEditText(self): + try: + freq = eng_notation.str_to_num(self.gui.frequencyEdit.text().toAscii()) + self.fg.set_frequency(freq) + self.freq = freq + except RuntimeError: + pass + + def gainEditText(self): + try: + gain = float(self.gui.gainEdit.text()) + self.fg.set_gain(gain) + self.gain = gain + except ValueError: + pass + + def bandwidthEditText(self): + try: + bw = eng_notation.str_to_num(self.gui.bandwidthEdit.text().toAscii()) + self.fg.set_bandwidth(bw) + self.bw = bw + except ValueError: + pass + + def amplifierEditText(self): + try: + amp = float(self.gui.amplifierEdit.text()) + self.fg.set_amplifier_gain(amp) + self.amp = amp + except ValueError: + pass + + def saveData(self): + fileName = QtGui.QFileDialog.getSaveFileName(self, "Save data to file", "."); + if(len(fileName)): + self.fg.save_to_file(str(fileName)) + + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + If there's a daughterboard on A, select A. + If there's a daughterboard on B, select B. + Otherwise, select A. + """ + if u.db(0, 0).dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + return (0, 0) + if u.db(0, 0).dbid() >= 0: + return (1, 0) + return (0, 0) + +class my_top_block(gr.top_block): + def __init__(self): + gr.top_block.__init__(self) + + parser = OptionParser(option_class=eng_option) + parser.add_option("-w", "--which", type="int", default=0, + help="select which USRP (0, 1, ...) default is %default", + metavar="NUM") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=first one with a daughterboard)") + parser.add_option("-A", "--antenna", default=None, + help="select Rx Antenna (only on RFX-series boards)") + parser.add_option("-W", "--bw", type="float", default=1e6, + help="set bandwidth of receiver [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB [default is midpoint]") + parser.add_option("-8", "--width-8", action="store_true", default=False, + help="Enable 8-bit samples across USB") + parser.add_option( "--no-hb", action="store_true", default=False, + help="don't use halfband filter in usrp") + parser.add_option("-S", "--oscilloscope", action="store_true", default=False, + help="Enable oscilloscope display") + parser.add_option("", "--avg-alpha", type="eng_float", default=1e-1, + help="Set fftsink averaging factor, [default=%default]") + parser.add_option("", "--ref-scale", type="eng_float", default=13490.0, + help="Set dBFS=0dB input value, [default=%default]") + parser.add_option("", "--fft-size", type="int", default=2048, + help="Set FFT frame size, [default=%default]"); + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + self.options = options + self.show_debug_info = True + + # Call this before creating the Qt sink + self.qapp = QtGui.QApplication(sys.argv) + + self._fftsize = options.fft_size + + self.u = usrp.source_c(which=options.which) + self._adc_rate = self.u.converter_rate() + self.set_bandwidth(options.bw) + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + self._rx_subdev_spec = options.rx_subdev_spec + self.u.set_mux(usrp.determine_rx_mux_value(self.u, self._rx_subdev_spec)) + self.subdev = usrp.selected_subdev(self.u, self._rx_subdev_spec) + + self._gain_range = self.subdev.gain_range() + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self._gain_range + options.gain = float(g[0]+g[1])/2 + self.set_gain(options.gain) + + if options.freq is None: + # if no frequency was specified, use the mid-point of the subdev + f = self.subdev.freq_range() + options.freq = float(f[0]+f[1])/2 + self.set_frequency(options.freq) + + self.snk = qtgui.sink_c(self._fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + self._freq, self._bandwidth, + "USRP Display", + True, True, False, True, False) + + # Set up internal amplifier + self.amp = gr.multiply_const_cc(0.0) + self.set_amplifier_gain(0.001) + + # Connect the flow graph + self.connect(self.u, self.amp, self.snk) + + + # Get the reference pointer to the SpectrumDisplayForm QWidget + # Wrap the pointer as a PyQt SIP object + # This can now be manipulated as a PyQt4.QtGui.QWidget + self.pysink = sip.wrapinstance(self.snk.pyqwidget(), QtGui.QWidget) + + self.main_win = main_window(self.pysink, self) + + self.main_win.set_frequency(self._freq) + self.main_win.set_gain(self._gain) + self.main_win.set_bandwidth(self._bandwidth) + self.main_win.set_amplifier(self._amp_value) + + self.main_win.show() + + def save_to_file(self, name): + # Pause the flow graph + self.stop() + self.wait() + + # Add file sink to save data + self.file_sink = gr.file_sink(gr.sizeof_gr_complex, name) + self.connect(self.amp, self.file_sink) + + # Restart flow graph + self.start() + + def set_gain(self, gain): + self._gain = gain + self.subdev.set_gain(self._gain) + + def set_frequency(self, freq): + self._freq = freq + self.u.tune(0, self.subdev, self._freq) + + try: + self.snk.set_frequency_range(self._freq, self._bandwidth) + except: + pass + + def set_bandwidth(self, bw): + self._bandwidth = bw + self._decim = int(self._adc_rate / self._bandwidth) + self.u.set_decim_rate(self._decim) + + try: + self.snk.set_frequency_range(self._freq, self._bandwidth) + except: + pass + + def set_amplifier_gain(self, amp): + self._amp_value = amp + self.amp.set_k(self._amp_value) + + +if __name__ == "__main__": + tb = my_top_block(); + tb.start() + tb.qapp.exec_() diff --git a/gr-radar-mono/Makefile.am b/gr-radar-mono/Makefile.am new file mode 100644 index 00000000..8165eb43 --- /dev/null +++ b/gr-radar-mono/Makefile.am @@ -0,0 +1,25 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = README +SUBDIRS = src doc diff --git a/gr-radar-mono/Makefile.in b/gr-radar-mono/Makefile.in new file mode 100644 index 00000000..1f4825ba --- /dev/null +++ b/gr-radar-mono/Makefile.in @@ -0,0 +1,1031 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = README +SUBDIRS = src doc +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/README b/gr-radar-mono/README new file mode 100644 index 00000000..577c8e09 --- /dev/null +++ b/gr-radar-mono/README @@ -0,0 +1,67 @@ +This GNU Radio component implements a monostatic radar transmitter +and receiver. It uses a custom FPGA build to generate a linear +FM chirp waveform directly in the USRP. Echo returns are recorded +to a file for offline analysis. + +The LFM chirp can be up to 32 MHz in width, whose center frequency +is set by which transmit daughter board is installed. This gives +a range resolution of approximately 5 meters. + +The script to run is placed in $prefix/bin: + +Usage: usrp_radar_mono.py [options] + +Options: + -h, --help show this help message and exit + -T TX_SUBDEV_SPEC, --tx-subdev-spec=TX_SUBDEV_SPEC + use transmitter board side A or B (default is first + found) + -R RX_SUBDEV_SPEC, --rx-subdev-spec=RX_SUBDEV_SPEC + use receiver board side A or B (default is first + found) + -g GAIN, --gain=GAIN set gain in dB (default is midpoint) + -f FREQ, --frequency=FREQ + set transmitter center frequency to FREQ in Hz, + default is 0.0 + -w FREQ, --chirp-width=FREQ + set LFM chirp bandwidth in Hz, default is 32M + -a AMPLITUDE, --amplitude=AMPLITUDE + set waveform amplitude in % full scale, default is 15, + --ton=TON set pulse on period in seconds, default is 5e-06, + --tsw=TSW set transmitter switching period in seconds, default + is 4.0625e-07, + --tlook=TLOOK set receiver look time in seconds, default is 5e-06, + --prf=PRF set pulse repetition frequency in Hz, default is + 10000.0, + -v, --verbose enable verbose output, default is disabled + -D, --debug enable debugging output, default is disabled + -F FILENAME, --filename=FILENAME + log received echos to file + +The transmitter creates an LFM chirp, evenly centered on the supplied frequency. +The four timing parameters are: + +ton Chirp on time in seconds. + +tsw Transmitter switching time in seconds. This the delay after the chirp + is transmitted before the receiver is enabled. These two (tsw and ton) + parameters determine the minimum range of the radar. + +tlook The the amount of time in seconds the receiver is enabled to record + echo responses ("look" time). This parameter determines the maximum + radar range that can be measured, though transmitter power will also + limit return strength and practical range. + +prf Pulse repetition frequency in Hz. This establishes to overall pulse + repetition period, which results in idle time between when the receiver + is turned off and the next transmitted chirp begins. + +The transmitter is completed. The receive path is logging echo data to a supplied +file; however, no meta-data is logged. + +This is experimental code. + +Johnathan Corgan +Corgan Enterprises LLC +jcorgan@corganenterprises.com +9/17/2007 diff --git a/gr-radar-mono/doc/Makefile.am b/gr-radar-mono/doc/Makefile.am new file mode 100644 index 00000000..f6756d29 --- /dev/null +++ b/gr-radar-mono/doc/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = registers.ods \ No newline at end of file diff --git a/gr-radar-mono/doc/Makefile.in b/gr-radar-mono/doc/Makefile.in new file mode 100644 index 00000000..c5f3a357 --- /dev/null +++ b/gr-radar-mono/doc/Makefile.in @@ -0,0 +1,873 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = registers.ods +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/doc/registers.ods b/gr-radar-mono/doc/registers.ods new file mode 100644 index 0000000000000000000000000000000000000000..7bafe2c58398c45d2f96c6688e5e26a835ba4720 GIT binary patch literal 14438 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 literal 0 HcmV?d00001 diff --git a/gr-radar-mono/src/Makefile.am b/gr-radar-mono/src/Makefile.am new file mode 100644 index 00000000..c6fb49ef --- /dev/null +++ b/gr-radar-mono/src/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = fpga lib python diff --git a/gr-radar-mono/src/Makefile.in b/gr-radar-mono/src/Makefile.in new file mode 100644 index 00000000..07e5b0b5 --- /dev/null +++ b/gr-radar-mono/src/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = fpga lib python +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/fpga/Makefile.am b/gr-radar-mono/src/fpga/Makefile.am new file mode 100644 index 00000000..fb2a09c9 --- /dev/null +++ b/gr-radar-mono/src/fpga/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = lib top tb models diff --git a/gr-radar-mono/src/fpga/Makefile.in b/gr-radar-mono/src/fpga/Makefile.in new file mode 100644 index 00000000..56420464 --- /dev/null +++ b/gr-radar-mono/src/fpga/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src/fpga +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = lib top tb models +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/fpga/lib/Makefile.am b/gr-radar-mono/src/fpga/lib/Makefile.am new file mode 100644 index 00000000..a48e4f87 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/Makefile.am @@ -0,0 +1,34 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + radar.v \ + radar_config.vh \ + radar_control.v \ + radar_tx.v \ + radar_rx.v \ + dac_interface.v \ + fifo32_2k.v \ + cordic_nco.v + +MOSTLYCLEANFILES += *.bak diff --git a/gr-radar-mono/src/fpga/lib/Makefile.in b/gr-radar-mono/src/fpga/lib/Makefile.in new file mode 100644 index 00000000..27815ecf --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/Makefile.in @@ -0,0 +1,883 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src/fpga/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT *.bak +EXTRA_DIST = \ + radar.v \ + radar_config.vh \ + radar_control.v \ + radar_tx.v \ + radar_rx.v \ + dac_interface.v \ + fifo32_2k.v \ + cordic_nco.v + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/fpga/lib/cordic_nco.v b/gr-radar-mono/src/fpga/lib/cordic_nco.v new file mode 100644 index 00000000..b9858baf --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/cordic_nco.v @@ -0,0 +1,54 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +module cordic_nco(clk_i,rst_i,ena_i,strobe_i,ampl_i,freq_i,phs_i,data_i_o,data_q_o); + input clk_i; + input rst_i; + input ena_i; + input strobe_i; + + input [15:0] ampl_i; + input [31:0] freq_i; + input [31:0] phs_i; + + output [15:0] data_i_o; + output [15:0] data_q_o; + + reg [31:0] phase_reg; + wire [31:0] phase = phase_reg + phs_i; + wire [15:0] ampl; + + always @(posedge clk_i) + begin + if (rst_i | ~ena_i) + phase_reg <= 32'b0; + else if (strobe_i) + phase_reg <= phase_reg + freq_i; + end + + assign ampl = ena_i ? ampl_i : 16'b0; + + cordic tx_cordic + (.clock(clk_i),.reset(rst_i),.enable(strobe_i), + .xi(ampl),.yi(16'b0),.zi(phase[31:16]), + .xo(data_i_o),.yo(data_q_o),.zo()); + +endmodule // cordic_nco diff --git a/gr-radar-mono/src/fpga/lib/dac_interface.v b/gr-radar-mono/src/fpga/lib/dac_interface.v new file mode 100644 index 00000000..209aebd9 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/dac_interface.v @@ -0,0 +1,60 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../top/config.vh" + +module dac_interface(clk_i,rst_i,ena_i,strobe_i,tx_i_i,tx_q_i,tx_data_o,tx_sync_o); + input clk_i; + input rst_i; + input ena_i; + input strobe_i; + + input [13:0] tx_i_i; + input [13:0] tx_q_i; + + output [13:0] tx_data_o; + output tx_sync_o; + +`ifdef TX_RATE_MAX + wire clk128; + reg clk64_d; + reg [13:0] tx_data_o; + + // Create a 128 MHz clock + dacpll pll128(.areset(rst_i),.inclk0(clk_i),.c0(clk128)); + + // Register the clk64 clock in the clk128 domain + always @(posedge clk128) + clk64_d <= clk_i; + + // Register the tx data in the clk128 domain + always @(posedge clk128) + tx_data_o <= clk64_d ? tx_i_i : tx_q_i; + + assign tx_sync_o = clk64_d; + + +`else // !`ifdef TX_RATE_MAX + assign tx_data_o = strobe_i ? tx_i_i : tx_q_i; + assign tx_sync_o = strobe_i; +`endif // !`ifdef TX_RATE_MAX + +endmodule // dac_interface diff --git a/gr-radar-mono/src/fpga/lib/fifo32_2k.v b/gr-radar-mono/src/fpga/lib/fifo32_2k.v new file mode 100755 index 00000000..c045b70e --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/fifo32_2k.v @@ -0,0 +1,161 @@ +// megafunction wizard: %FIFO% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: scfifo + +// ============================================================ +// File Name: fifo32_2k.v +// Megafunction Name(s): +// scfifo +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 7.1 Build 178 06/25/2007 SP 1 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2007 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module fifo32_2k ( + clock, + data, + rdreq, + sclr, + wrreq, + empty, + q); + + input clock; + input [31:0] data; + input rdreq; + input sclr; + input wrreq; + output empty; + output [31:0] q; + + wire sub_wire0; + wire [31:0] sub_wire1; + wire empty = sub_wire0; + wire [31:0] q = sub_wire1[31:0]; + + scfifo scfifo_component ( + .rdreq (rdreq), + .sclr (sclr), + .clock (clock), + .wrreq (wrreq), + .data (data), + .empty (sub_wire0), + .q (sub_wire1) + // synopsys translate_off + , + .aclr (), + .almost_empty (), + .almost_full (), + .full (), + .usedw () + // synopsys translate_on + ); + defparam + scfifo_component.add_ram_output_register = "OFF", + scfifo_component.intended_device_family = "Cyclone", + scfifo_component.lpm_numwords = 2048, + scfifo_component.lpm_showahead = "OFF", + scfifo_component.lpm_type = "scfifo", + scfifo_component.lpm_width = 32, + scfifo_component.lpm_widthu = 11, + scfifo_component.overflow_checking = "OFF", + scfifo_component.underflow_checking = "OFF", + scfifo_component.use_eab = "ON"; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +// Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "0" +// Retrieval info: PRIVATE: Depth NUMERIC "2048" +// Retrieval info: PRIVATE: Empty NUMERIC "1" +// Retrieval info: PRIVATE: Full NUMERIC "0" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: Optimize NUMERIC "2" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: UsedW NUMERIC "0" +// Retrieval info: PRIVATE: Width NUMERIC "32" +// Retrieval info: PRIVATE: dc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: diff_widths NUMERIC "0" +// Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +// Retrieval info: PRIVATE: output_width NUMERIC "32" +// Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +// Retrieval info: PRIVATE: rsFull NUMERIC "0" +// Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +// Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: sc_sclr NUMERIC "1" +// Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +// Retrieval info: PRIVATE: wsFull NUMERIC "1" +// Retrieval info: PRIVATE: wsUsedW NUMERIC "0" +// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "2048" +// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +// Retrieval info: CONSTANT: LPM_TYPE STRING "scfifo" +// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "11" +// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: USE_EAB STRING "ON" +// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +// Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +// Retrieval info: USED_PORT: empty 0 0 0 0 OUTPUT NODEFVAL empty +// Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL q[31..0] +// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +// Retrieval info: USED_PORT: sclr 0 0 0 0 INPUT NODEFVAL sclr +// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +// Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +// Retrieval info: CONNECT: q 0 0 32 0 @q 0 0 32 0 +// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +// Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +// Retrieval info: CONNECT: empty 0 0 0 0 @empty 0 0 0 0 +// Retrieval info: CONNECT: @sclr 0 0 0 0 sclr 0 0 0 0 +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k_bb.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k_waveforms.html FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo32_2k_wave*.jpg FALSE +// Retrieval info: LIB_FILE: altera_mf diff --git a/gr-radar-mono/src/fpga/lib/radar.v b/gr-radar-mono/src/fpga/lib/radar.v new file mode 100644 index 00000000..1023d2f2 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/radar.v @@ -0,0 +1,81 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../lib/radar_config.vh" + +module radar(clk_i,saddr_i,sdata_i,s_strobe_i, + tx_side_o,tx_strobe_o,tx_dac_i_o,tx_dac_q_o, + rx_adc_i_i,rx_adc_q_i, + rx_strobe_o,rx_ech_i_o,rx_ech_q_o,io_tx_ena_o); + + // System interface + input clk_i; // Master clock @ 64 MHz + input [6:0] saddr_i; // Configuration bus address + input [31:0] sdata_i; // Configuration bus data + input s_strobe_i; // Configuration bus write + + // Transmit subsystem + output tx_side_o; // Transmitter slot + output tx_strobe_o; // Generate an transmitter output sample + output [13:0] tx_dac_i_o; // I channel transmitter output to DAC + output [13:0] tx_dac_q_o; // Q channel transmitter output to DAC + output io_tx_ena_o; // Transmit/Receive switching + + // Receive subsystem + input [15:0] rx_adc_i_i; // I channel input from ADC + input [15:0] rx_adc_q_i; // Q channel input from ADC + output rx_strobe_o; // Indicates output samples ready for Rx FIFO + output [15:0] rx_ech_i_o; // I channel processed echos to Rx FIFO + output [15:0] rx_ech_q_o; // Q channel processed echos to Rx FIFO + + // Application control + wire reset; // Master application reset + wire tx_side; // Transmitter slot + wire debug_enabled; // Enable debugging mode; + wire tx_enable; // Transmitter enable + wire rx_enable; // Receiver enable + wire tx_ctrl; // Transmitter on control + wire rx_ctrl; // Receiver on control + wire [15:0] pulse_num; // Count of pulses since tx_enabled + + // Configuration + wire [15:0] ampl; // Pulse amplitude + wire [31:0] fstart; // Chirp start frequency + wire [31:0] fincr; // Chirp per strobe frequency increment + + radar_control controller + (.clk_i(clk_i),.saddr_i(saddr_i),.sdata_i(sdata_i),.s_strobe_i(s_strobe_i), + .reset_o(reset),.tx_side_o(tx_side_o),.dbg_o(debug_enabled), + .tx_strobe_o(tx_strobe_o),.tx_ctrl_o(tx_ctrl),.rx_ctrl_o(rx_ctrl), + .ampl_o(ampl),.fstart_o(fstart),.fincr_o(fincr),.pulse_num_o(pulse_num), + .io_tx_ena_o(io_tx_ena_o)); + + radar_tx transmitter + ( .clk_i(clk_i),.rst_i(reset),.ena_i(tx_ctrl),.strobe_i(tx_strobe_o), + .ampl_i(ampl),.fstart_i(fstart),.fincr_i(fincr), + .tx_i_o(tx_dac_i_o),.tx_q_o(tx_dac_q_o) ); + + radar_rx receiver + ( .clk_i(clk_i),.rst_i(reset),.ena_i(rx_ctrl),.dbg_i(debug_enabled), + .pulse_num_i(pulse_num),.rx_in_i_i(rx_adc_i_i),.rx_in_q_i(rx_adc_q_i), + .rx_strobe_o(rx_strobe_o),.rx_i_o(rx_ech_i_o),.rx_q_o(rx_ech_q_o) ); + +endmodule // radar diff --git a/gr-radar-mono/src/fpga/lib/radar_config.vh b/gr-radar-mono/src/fpga/lib/radar_config.vh new file mode 100644 index 00000000..89a33673 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/radar_config.vh @@ -0,0 +1,41 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +`define FR_RADAR_MODE `FR_USER_0 +`define bmFR_RADAR_MODE_RESET 32'b1 << 0 +`define bmFR_RADAR_TXSIDE 32'b1 << 1 +`define bmFR_RADAR_LOOP 32'b1 << 2 +`define bmFR_RADAR_META 32'b1 << 3 +`define bmFR_RADAR_DERAMP 32'b1 << 4 +`define bmFR_RADAR_CHIRPS 32'b11 << 5 +`define bmFR_RADAR_DEBUG 32'b1 << 7 + +`define FR_RADAR_TON `FR_USER_1 +`define FR_RADAR_TSW `FR_USER_2 +`define FR_RADAR_TLOOK `FR_USER_3 +`define FR_RADAR_TIDLE `FR_USER_4 +`define FR_RADAR_AMPL `FR_USER_5 +`define FR_RADAR_FSTART `FR_USER_6 +`define FR_RADAR_FINCR `FR_USER_7 +`define FR_RADAR_ATRDEL `FR_USER_8 diff --git a/gr-radar-mono/src/fpga/lib/radar_control.v b/gr-radar-mono/src/fpga/lib/radar_control.v new file mode 100644 index 00000000..05b78198 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/radar_control.v @@ -0,0 +1,166 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../lib/radar_config.vh" + +module radar_control(clk_i,saddr_i,sdata_i,s_strobe_i,reset_o, + tx_side_o,dbg_o,tx_strobe_o,tx_ctrl_o,rx_ctrl_o, + ampl_o,fstart_o,fincr_o,pulse_num_o,io_tx_ena_o); + + // System interface + input clk_i; // Master clock @ 64 MHz + input [6:0] saddr_i; // Configuration bus address + input [31:0] sdata_i; // Configuration bus data + input s_strobe_i; // Configuration bus write + + // Control and configuration outputs + output reset_o; + output tx_side_o; + output dbg_o; + output tx_strobe_o; + output tx_ctrl_o; + output rx_ctrl_o; + output [15:0] ampl_o; + output [31:0] fstart_o; + output [31:0] fincr_o; + output [15:0] pulse_num_o; + output io_tx_ena_o; + + // Internal configuration + wire lp_ena; + wire md_ena; + wire dr_ena; + wire [1:0] chirps; + wire [15:0] t_on; + wire [15:0] t_sw; + wire [15:0] t_look; + wire [31:0] t_idle; + wire [31:0] atrdel; + + // Configuration from host + wire [31:0] mode; + setting_reg #(`FR_RADAR_MODE) sr_mode(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(mode)); + assign reset_o = mode[0]; + assign tx_side_o = mode[1]; + assign lp_ena = mode[2]; + assign md_ena = mode[3]; + assign dr_ena = mode[4]; + assign chirps = mode[6:5]; + assign dbg_o = mode[7]; + + setting_reg #(`FR_RADAR_TON) sr_ton(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(t_on)); + + setting_reg #(`FR_RADAR_TSW) sr_tsw(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(t_sw)); + + setting_reg #(`FR_RADAR_TLOOK) sr_tlook(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(t_look)); + + setting_reg #(`FR_RADAR_TIDLE) sr_tidle(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(t_idle)); + + setting_reg #(`FR_RADAR_AMPL) sr_ampl(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(ampl_o)); + + setting_reg #(`FR_RADAR_FSTART) sr_fstart(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(fstart_o)); + + setting_reg #(`FR_RADAR_FINCR) sr_fincr(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(fincr_o)); + + setting_reg #(`FR_RADAR_ATRDEL) sr_atrdel(.clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(atrdel)); + + // Pulse state machine + `define ST_ON 4'b0001 + `define ST_SW 4'b0010 + `define ST_LOOK 4'b0100 + `define ST_IDLE 4'b1000 + + reg [3:0] state; + reg [31:0] count; + reg [15:0] pulse_num_o; + + always @(posedge clk_i) + if (reset_o) + begin + state <= `ST_ON; + count <= 32'b0; + pulse_num_o <= 16'b0; + end + else + case (state) + `ST_ON: + if (count == {16'b0,t_on}) + begin + state <= `ST_SW; + count <= 32'b0; + pulse_num_o <= pulse_num_o + 16'b1; + end + else + count <= count + 32'b1; + + `ST_SW: + if (count == {16'b0,t_sw}) + begin + state <= `ST_LOOK; + count <= 32'b0; + end + else + count <= count + 32'b1; + + `ST_LOOK: + if (count == {16'b0,t_look}) + begin + state <= `ST_IDLE; + count <= 32'b0; + end + else + count <= count + 32'b1; + + `ST_IDLE: + if (count == t_idle) + begin + state <= `ST_ON; + count <= 32'b0; + end + else + count <= count + 32'b1; + + default: // Invalid state, reset state machine + begin + state <= `ST_ON; + count <= 32'b0; + end + endcase + + assign tx_strobe_o = count[0]; // Drive DAC inputs at 32 MHz + assign tx_ctrl_o = (state == `ST_ON); + assign rx_ctrl_o = (state == `ST_LOOK); + + // Create delayed version of tx_ctrl_o to drive mixers and TX/RX switch + atr_delay atr_delay(.clk_i(clk_i),.rst_i(reset_o),.ena_i(1'b1),.tx_empty_i(!tx_ctrl_o), + .tx_delay_i(atrdel[27:16]),.rx_delay_i(atrdel[11:0]), + .atr_tx_o(io_tx_ena_o)); + +endmodule // radar_control diff --git a/gr-radar-mono/src/fpga/lib/radar_rx.v b/gr-radar-mono/src/fpga/lib/radar_rx.v new file mode 100644 index 00000000..4b0b83c4 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/radar_rx.v @@ -0,0 +1,109 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module radar_rx(clk_i,rst_i,ena_i,dbg_i,pulse_num_i,rx_in_i_i, + rx_in_q_i,rx_i_o,rx_q_o,rx_strobe_o); + + input clk_i; + input rst_i; + input ena_i; + input dbg_i; + + input [15:0] rx_in_i_i; + input [15:0] rx_in_q_i; + input [15:0] pulse_num_i; + + output [15:0] rx_i_o; + output [15:0] rx_q_o; + output reg rx_strobe_o; + + reg [15:0] count; + + always @(posedge clk_i) + if (rst_i | ~ena_i) + count <= 16'b0; + else + count <= count + 16'b1; + + wire [31:0] fifo_inp = dbg_i ? {count[15:0],pulse_num_i[15:0]} : {rx_in_i_i,rx_in_q_i}; + + // Buffer incoming samples every clock + wire [31:0] fifo_out; + reg fifo_ack; + wire fifo_empty; + +// Use model if simulating, otherwise Altera Megacell +`ifdef SIMULATION + fifo_1clk #(32, 2048) buffer(.clock(clk_i),.sclr(rst_i), + .data(fifo_inp),.wrreq(ena_i), + .rdreq(fifo_ack),.q(fifo_out), + .empty(fifo_empty)); +`else + fifo32_2k buffer(.clock(clk_i),.sclr(rst_i), + .data(fifo_inp),.wrreq(ena_i), + .rdreq(fifo_ack),.q(fifo_out), + .empty(fifo_empty)); +`endif + + // Write samples to rx_fifo every third clock + `define ST_FIFO_IDLE 3'b001 + `define ST_FIFO_STROBE 3'b010 + `define ST_FIFO_ACK 3'b100 + + reg [2:0] state; + + always @(posedge clk_i) + if (rst_i) + begin + state <= `ST_FIFO_IDLE; + rx_strobe_o <= 1'b0; + fifo_ack <= 1'b0; + end + else + case (state) + `ST_FIFO_IDLE: + if (!fifo_empty) + begin + // Tell rx_fifo sample is ready + rx_strobe_o <= 1'b1; + state <= `ST_FIFO_STROBE; + end + `ST_FIFO_STROBE: + begin + rx_strobe_o <= 1'b0; + // Ack our FIFO + fifo_ack <= 1'b1; + state <= `ST_FIFO_ACK; + end + `ST_FIFO_ACK: + begin + fifo_ack <= 1'b0; + state <= `ST_FIFO_IDLE; + end + endcase // case(state) + + assign rx_i_o = fifo_out[31:16]; + assign rx_q_o = fifo_out[15:0]; + +endmodule // radar_rx diff --git a/gr-radar-mono/src/fpga/lib/radar_tx.v b/gr-radar-mono/src/fpga/lib/radar_tx.v new file mode 100644 index 00000000..c20dd0c1 --- /dev/null +++ b/gr-radar-mono/src/fpga/lib/radar_tx.v @@ -0,0 +1,59 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +module radar_tx(clk_i,rst_i,ena_i,strobe_i, + ampl_i,fstart_i,fincr_i, + tx_i_o,tx_q_o); + + // System control + input clk_i; + input rst_i; + input ena_i; + input strobe_i; + + // Configuration + input [15:0] ampl_i; + input [31:0] fstart_i; + input [31:0] fincr_i; + + // Chirp output + output [13:0] tx_i_o; + output [13:0] tx_q_o; + wire [15:0] cordic_i, cordic_q; + + // Chirp generator + reg [31:0] freq; + + always @(posedge clk_i) + if (rst_i | ~ena_i) + freq <= fstart_i; + else + if (strobe_i) + freq <= freq + fincr_i; + + cordic_nco nco(.clk_i(clk_i),.rst_i(rst_i),.ena_i(ena_i),.strobe_i(strobe_i), + .ampl_i(ampl_i),.freq_i(freq),.phs_i(0), + .data_i_o(cordic_i),.data_q_o(cordic_q)); + + assign tx_i_o = cordic_i[13:0]; + assign tx_q_o = cordic_q[13:0]; + +endmodule // radar_tx diff --git a/gr-radar-mono/src/fpga/models/Makefile.am b/gr-radar-mono/src/fpga/models/Makefile.am new file mode 100644 index 00000000..ca59fe78 --- /dev/null +++ b/gr-radar-mono/src/fpga/models/Makefile.am @@ -0,0 +1,25 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + fifo_1clk.v diff --git a/gr-radar-mono/src/fpga/models/Makefile.in b/gr-radar-mono/src/fpga/models/Makefile.in new file mode 100644 index 00000000..bd09bd63 --- /dev/null +++ b/gr-radar-mono/src/fpga/models/Makefile.in @@ -0,0 +1,875 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src/fpga/models +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + fifo_1clk.v + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/models/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/models/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/fpga/models/fifo_1clk.v b/gr-radar-mono/src/fpga/models/fifo_1clk.v new file mode 100644 index 00000000..93ada6c8 --- /dev/null +++ b/gr-radar-mono/src/fpga/models/fifo_1clk.v @@ -0,0 +1,88 @@ +/* -*- verilog -*- */ +/* + * Copyright (C) 2003 Matt Ettus + * Copyright (C) 2007 Corgan Enterprises LLC + * + * 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. + */ + +// Model of Altera FIFO with common clock domain + +module fifo_1clk(data, wrreq, rdreq, clock, sclr, q, + full, empty, usedw); + + parameter width = 32; + parameter depth = 4096; + //`define rd_req 0; // Set this to 0 for rd_ack, 1 for rd_req + + input [31:0] data; + input wrreq; + input rdreq; + input clock; + input sclr; + output [31:0] q; + output full; + output empty; + output [11:0] usedw; + + reg [width-1:0] mem [0:depth-1]; + reg [7:0] rdptr; + reg [7:0] wrptr; + +`ifdef rd_req + reg [width-1:0] q; +`else + wire [width-1:0] q; +`endif + + reg [11:0] usedw; + + integer i; + + always @( sclr) + begin + wrptr <= #1 0; + rdptr <= #1 0; + for(i=0;i radar_tb.out diff --git a/gr-radar-mono/src/fpga/tb/radar_tb.v b/gr-radar-mono/src/fpga/tb/radar_tb.v new file mode 100644 index 00000000..3583b70e --- /dev/null +++ b/gr-radar-mono/src/fpga/tb/radar_tb.v @@ -0,0 +1,215 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`timescale 1ns/1ps + +`include "../lib/radar.v" + +module radar_tb; + + // System bus + reg clk; + reg rst; + reg ena; + + // Configuration bus + reg [6:0] saddr; + reg [31:0] sdata; + reg s_strobe; + + // DAC bus + wire tx_strobe; + wire [13:0] tx_dac_i; + wire [13:0] tx_dac_q; + + // ADC bus + reg [15:0] rx_adc_i; + reg [15:0] rx_adc_q; + + // FIFO bus + wire fifo_strobe; + wire [15:0] fifo_i; + wire [15:0] fifo_q; + + // Configuration shadow registers + reg [31:0] mode; + + radar uut + (.clk_i(clk),.saddr_i(saddr),.sdata_i(sdata),.s_strobe_i(s_strobe), + .tx_strobe_o(tx_strobe),.tx_dac_i_o(tx_dac_i),.tx_dac_q_o(tx_dac_q), + .rx_adc_i_i(rx_adc_i),.rx_adc_q_i(rx_adc_q), + .rx_strobe_o(fifo_strobe),.rx_ech_i_o(fifo_i),.rx_ech_q_o(fifo_q)); + + // Start up initialization + initial + begin + clk = 0; + rst = 0; + ena = 0; + saddr = 0; + sdata = 0; + s_strobe = 0; + rx_adc_i = 0; + rx_adc_q = 0; + mode = 0; + + @(posedge clk); + rst = 1; + @(posedge clk); + rst = 0; + @(posedge clk); + ena = 1; + end + + always + #5 clk <= ~clk; + + initial + begin + //$monitor($time, " clk=%b rst=%b", clk, uut.reset); + + $dumpfile("radar_tb.vcd"); + $dumpvars(0, radar_tb); + end + + // Test tasks + task write_cfg_register; + input [6:0] regno; + input [31:0] value; + + begin + @(posedge clk); + saddr <= regno; + sdata <= value; + s_strobe <= 1'b1; + @(posedge clk); + s_strobe <= 0; + end + endtask // write_cfg_register + + // Application reset line + task set_reset; + input reset; + + begin + mode = reset ? (mode | `bmFR_RADAR_MODE_RESET) : (mode & ~`bmFR_RADAR_MODE_RESET); + write_cfg_register(`FR_RADAR_MODE, mode); + end + endtask // reset + + // Waveform on time + task set_ton; + input [23:0] t_on; + + begin + write_cfg_register(`FR_RADAR_TON, t_on); + end + endtask // set_ton + + // Transmitter switching time + task set_tsw; + input [23:0] t_sw; + + begin + write_cfg_register(`FR_RADAR_TSW, t_sw); + end + endtask // t_sw + + // Receiver look time + task set_tlook; + input [23:0] t_look; + + begin + write_cfg_register(`FR_RADAR_TLOOK, t_look); + end + endtask // set_tlook + + // Inter-pulse idle time + task set_tidle; + input [23:0] t_idle; + + begin + write_cfg_register(`FR_RADAR_TIDLE, t_idle); + end + endtask // set_tidle + + // Chirp amplitude + task set_ampl; + input [31:0] ampl; + + begin + write_cfg_register(`FR_RADAR_AMPL, ampl); + end + endtask // set_ampl + + // Chirp start frequency + task set_fstart; + input [31:0] fstart; + + begin + write_cfg_register(`FR_RADAR_FSTART, fstart); + end + endtask // set_fstart + + // Chirp frequency increment + task set_fincr; + input [31:0] fincr; + + begin + write_cfg_register(`FR_RADAR_FINCR, fincr); + end + endtask // set_fincr + + // Chirp frequency increment + task set_atrdel; + input [31:0] atrdel; + + begin + write_cfg_register(`FR_RADAR_ATRDEL, atrdel); + end + endtask // set_fincr + + // Test transmitter functionality + task test_tx; + begin + #20 set_reset(1); + + #20 set_ton(320-1); // 5us on time + #20 set_tsw(26-1); // 406ns switching time + #20 set_tlook(640-1); // 10us look time + #20 set_tidle(2854-1); // 60us pulse period + + #20 set_ampl(16'd9946); + #20 set_fstart(32'h80000000); // -16 to 16 MHz + #20 set_fincr (32'h0199999A); + #20 set_atrdel(32'h00400046); // 64 TX clks, 70 RX clks + #20 set_reset(0); + #200000; + end + endtask // test_tx + + // Execute tests + initial + begin + #20 test_tx; + #100 $finish; + end +endmodule diff --git a/gr-radar-mono/src/fpga/tb/radar_tb_wave.sh b/gr-radar-mono/src/fpga/tb/radar_tb_wave.sh new file mode 100755 index 00000000..45bba9f5 --- /dev/null +++ b/gr-radar-mono/src/fpga/tb/radar_tb_wave.sh @@ -0,0 +1,2 @@ +#!/bin/sh +gtkwave radar_tb.vcd radar_tb.sav diff --git a/gr-radar-mono/src/fpga/top/Makefile.am b/gr-radar-mono/src/fpga/top/Makefile.am new file mode 100644 index 00000000..f51f3def --- /dev/null +++ b/gr-radar-mono/src/fpga/top/Makefile.am @@ -0,0 +1,48 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +RBFS = usrp_radar_mono.rbf + +rbf2datadir = $(prefix)/share/usrp/rev2 +dist_rbf2data_DATA = $(RBFS) + +rbf4datadir = $(prefix)/share/usrp/rev4 +dist_rbf4data_DATA = $(RBFS) + +EXTRA_DIST = \ + usrp_radar_mono.csf \ + usrp_radar_mono.esf \ + usrp_radar_mono.psf \ + usrp_radar_mono.qpf \ + usrp_radar_mono.qsf \ + usrp_radar_mono.v + +MOSTLYCLEANFILES += \ + db/* \ + *.rpt \ + *.summary \ + *.qws \ + *.smsg \ + *.done \ + *.pin \ + *.sof diff --git a/gr-radar-mono/src/fpga/top/Makefile.in b/gr-radar-mono/src/fpga/top/Makefile.in new file mode 100644 index 00000000..c3e5b852 --- /dev/null +++ b/gr-radar-mono/src/fpga/top/Makefile.in @@ -0,0 +1,938 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_rbf2data_DATA) $(dist_rbf4data_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src/fpga/top +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(rbf2datadir)" \ + "$(DESTDIR)$(rbf4datadir)" +dist_rbf2dataDATA_INSTALL = $(INSTALL_DATA) +dist_rbf4dataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_rbf2data_DATA) $(dist_rbf4data_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT db/* *.rpt *.summary *.qws *.smsg *.done *.pin *.sof +RBFS = usrp_radar_mono.rbf +rbf2datadir = $(prefix)/share/usrp/rev2 +dist_rbf2data_DATA = $(RBFS) +rbf4datadir = $(prefix)/share/usrp/rev4 +dist_rbf4data_DATA = $(RBFS) +EXTRA_DIST = \ + usrp_radar_mono.csf \ + usrp_radar_mono.esf \ + usrp_radar_mono.psf \ + usrp_radar_mono.qpf \ + usrp_radar_mono.qsf \ + usrp_radar_mono.v + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/top/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/fpga/top/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_rbf2dataDATA: $(dist_rbf2data_DATA) + @$(NORMAL_INSTALL) + test -z "$(rbf2datadir)" || $(MKDIR_P) "$(DESTDIR)$(rbf2datadir)" + @list='$(dist_rbf2data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_rbf2dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(rbf2datadir)/$$f'"; \ + $(dist_rbf2dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(rbf2datadir)/$$f"; \ + done + +uninstall-dist_rbf2dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_rbf2data_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rbf2datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(rbf2datadir)/$$f"; \ + done +install-dist_rbf4dataDATA: $(dist_rbf4data_DATA) + @$(NORMAL_INSTALL) + test -z "$(rbf4datadir)" || $(MKDIR_P) "$(DESTDIR)$(rbf4datadir)" + @list='$(dist_rbf4data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_rbf4dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(rbf4datadir)/$$f'"; \ + $(dist_rbf4dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(rbf4datadir)/$$f"; \ + done + +uninstall-dist_rbf4dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_rbf4data_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rbf4datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(rbf4datadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(rbf2datadir)" "$(DESTDIR)$(rbf4datadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_rbf2dataDATA install-dist_rbf4dataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_rbf2dataDATA uninstall-dist_rbf4dataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_rbf2dataDATA install-dist_rbf4dataDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_rbf2dataDATA \ + uninstall-dist_rbf4dataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.csf b/gr-radar-mono/src/fpga/top/usrp_radar_mono.csf new file mode 100644 index 00000000..121b15aa --- /dev/null +++ b/gr-radar-mono/src/fpga/top/usrp_radar_mono.csf @@ -0,0 +1,444 @@ +COMPILER_SETTINGS +{ + IO_PLACEMENT_OPTIMIZATION = OFF; + ENABLE_DRC_SETTINGS = OFF; + PHYSICAL_SYNTHESIS_REGISTER_RETIMING = OFF; + PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION = OFF; + PHYSICAL_SYNTHESIS_COMBO_LOGIC = OFF; + DRC_FANOUT_EXCEEDING = 30; + DRC_REPORT_FANOUT_EXCEEDING = OFF; + DRC_TOP_FANOUT = 50; + DRC_REPORT_TOP_FANOUT = OFF; + RUN_DRC_DURING_COMPILATION = OFF; + ADV_NETLIST_OPT_RETIME_CORE_AND_IO = ON; + ADV_NETLIST_OPT_SYNTH_USE_FITTER_INFO = OFF; + ADV_NETLIST_OPT_SYNTH_GATE_RETIME = OFF; + ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP = OFF; + SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES = OFF; + MERGE_HEX_FILE = OFF; + TRUE_WYSIWYG_FLOW = OFF; + SEED = 1; + FINAL_PLACEMENT_OPTIMIZATION = AUTOMATICALLY; + FAMILY = Cyclone; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "LOWER TO 1ESB UPPER TO 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DEEP_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_SINGLE_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_WIDE_MODE_OUTPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4ESB"; + DPRAM_DEEP_MODE_OUTPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_INPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4"; + DPRAM_DEEP_MODE_INPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_OTHER_SIGNALS_EPXA4_10 = "DEFAULT OTHER ROUTING OPTIONS"; + DPRAM_OUTPUT_EPXA4_10 = "DEFAULT OUTPUT ROUTING OPTIONS"; + DPRAM_INPUT_EPXA4_10 = "DEFAULT INPUT ROUTING OPTIONS"; + STRIPE_TO_PLD_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PLD_TO_STRIPE_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PROCESSOR_DEBUG_EXTENSIONS_EPXA4_10 = "MEGALAB COLUMN 2"; + STRIPE_TO_PLD_BRIDGE_EPXA4_10 = "MEGALAB COLUMN 1"; + FAST_FIT_COMPILATION = OFF; + SIGNALPROBE_DURING_NORMAL_COMPILATION = OFF; + OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING = ON; + OPTIMIZE_TIMING = "NORMAL COMPILATION"; + OPTIMIZE_HOLD_TIMING = OFF; + COMPILATION_LEVEL = FULL; + SAVE_DISK_SPACE = OFF; + SPEED_DISK_USAGE_TRADEOFF = NORMAL; + LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT = OFF; + SIGNALPROBE_ALLOW_OVERUSE = OFF; + FOCUS_ENTITY_NAME = |usrp_radar_mono; + ROUTING_BACK_ANNOTATION_MODE = OFF; + INC_PLC_MODE = OFF; + FIT_ONLY_ONE_ATTEMPT = OFF; +} +DEFAULT_DEVICE_OPTIONS +{ + GENERATE_CONFIG_HEXOUT_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_JBC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_SVF_FILE = OFF; + RESERVE_PIN = "AS INPUT TRI-STATED"; + RESERVE_ALL_UNUSED_PINS = "AS OUTPUT DRIVING GROUND"; + HEXOUT_FILE_COUNT_DIRECTION = UP; + HEXOUT_FILE_START_ADDRESS = 0; + GENERATE_HEX_FILE = OFF; + GENERATE_RBF_FILE = OFF; + GENERATE_TTF_FILE = OFF; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + APEX20K_CONFIGURATION_DEVICE = AUTO; + USE_CONFIGURATION_DEVICE = ON; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + AUTO_RESTART_CONFIGURATION = OFF; + ENABLE_VREFB_PIN = OFF; + ENABLE_VREFA_PIN = OFF; + SECURITY_BIT = OFF; + USER_START_UP_CLOCK = OFF; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "ACTIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_UPDATE_MODE = STANDARD; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + ENABLE_JTAG_BST_SUPPORT = OFF; + CONFIGURATION_CLOCK_DIVISOR = 1; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CLOCK_SOURCE = INTERNAL; + COMPRESSION_MODE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; +} +AUTO_SLD_HUB_ENTITY +{ + AUTO_INSERT_SLD_HUB_ENTITY = ENABLE; + HUB_INSTANCE_NAME = SLD_HUB_INST; + HUB_ENTITY_NAME = SLD_HUB; +} +SIGNALTAP_LOGIC_ANALYZER_SETTINGS +{ + ENABLE_SIGNALTAP = Off; + AUTO_ENABLE_SMART_COMPILE = On; +} +CHIP(usrp_radar_mono) +{ + DEVICE = EP1C12Q240C8; + DEVICE_FILTER_PACKAGE = "ANY QFP"; + DEVICE_FILTER_PIN_COUNT = 240; + DEVICE_FILTER_SPEED_GRADE = ANY; + AUTO_RESTART_CONFIGURATION = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + USER_START_UP_CLOCK = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_JTAG_BST_SUPPORT = OFF; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + USE_CONFIGURATION_DEVICE = OFF; + APEX20K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + STRATIX_UPDATE_MODE = STANDARD; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + COMPRESSION_MODE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + GENERATE_TTF_FILE = OFF; + GENERATE_RBF_FILE = ON; + GENERATE_HEX_FILE = OFF; + SECURITY_BIT = OFF; + ENABLE_VREFA_PIN = OFF; + ENABLE_VREFB_PIN = OFF; + GENERATE_SVF_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_JBC_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_HEXOUT_FILE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; + BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE = OFF; + HEXOUT_FILE_START_ADDRESS = 0; + HEXOUT_FILE_COUNT_DIRECTION = UP; + RESERVE_ALL_UNUSED_PINS = "AS INPUT TRI-STATED"; + STRATIX_DEVICE_IO_STANDARD = LVTTL; + CLOCK_SOURCE = INTERNAL; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CONFIGURATION_CLOCK_DIVISOR = 1; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + SCLK : LOCATION = Pin_101; + SDI : LOCATION = Pin_100; + SEN : LOCATION = Pin_98; + SLD : LOCATION = Pin_95; + adc1_data[0] : LOCATION = Pin_5; + adc1_data[10] : LOCATION = Pin_235; + adc1_data[11] : LOCATION = Pin_234; + adc1_data[1] : LOCATION = Pin_4; + adc1_data[2] : LOCATION = Pin_3; + adc1_data[3] : LOCATION = Pin_2; + adc1_data[4] : LOCATION = Pin_1; + adc1_data[4] : IO_STANDARD = LVTTL; + adc1_data[5] : LOCATION = Pin_240; + adc1_data[6] : LOCATION = Pin_239; + adc1_data[7] : LOCATION = Pin_238; + adc1_data[8] : LOCATION = Pin_237; + adc1_data[9] : LOCATION = Pin_236; + adc2_data[0] : LOCATION = Pin_20; + adc2_data[10] : LOCATION = Pin_8; + adc2_data[11] : LOCATION = Pin_7; + adc2_data[1] : LOCATION = Pin_19; + adc2_data[2] : LOCATION = Pin_18; + adc2_data[3] : LOCATION = Pin_17; + adc2_data[4] : LOCATION = Pin_16; + adc2_data[5] : LOCATION = Pin_15; + adc2_data[6] : LOCATION = Pin_14; + adc2_data[7] : LOCATION = Pin_13; + adc2_data[8] : LOCATION = Pin_12; + adc2_data[9] : LOCATION = Pin_11; + adc3_data[0] : LOCATION = Pin_200; + adc3_data[10] : LOCATION = Pin_184; + adc3_data[11] : LOCATION = Pin_183; + adc3_data[1] : LOCATION = Pin_197; + adc3_data[2] : LOCATION = Pin_196; + adc3_data[3] : LOCATION = Pin_195; + adc3_data[4] : LOCATION = Pin_194; + adc3_data[5] : LOCATION = Pin_193; + adc3_data[6] : LOCATION = Pin_188; + adc3_data[7] : LOCATION = Pin_187; + adc3_data[8] : LOCATION = Pin_186; + adc3_data[9] : LOCATION = Pin_185; + adc4_data[0] : LOCATION = Pin_222; + adc4_data[10] : LOCATION = Pin_203; + adc4_data[11] : LOCATION = Pin_202; + adc4_data[1] : LOCATION = Pin_219; + adc4_data[2] : LOCATION = Pin_217; + adc4_data[3] : LOCATION = Pin_216; + adc4_data[4] : LOCATION = Pin_215; + adc4_data[5] : LOCATION = Pin_214; + adc4_data[6] : LOCATION = Pin_213; + adc4_data[7] : LOCATION = Pin_208; + adc4_data[8] : LOCATION = Pin_207; + adc4_data[9] : LOCATION = Pin_206; + adc_oeb[0] : LOCATION = Pin_228; + adc_oeb[1] : LOCATION = Pin_21; + adc_oeb[2] : LOCATION = Pin_181; + adc_oeb[3] : LOCATION = Pin_218; + adc_otr[0] : LOCATION = Pin_233; + adc_otr[1] : LOCATION = Pin_6; + adc_otr[2] : LOCATION = Pin_182; + adc_otr[3] : LOCATION = Pin_201; + adclk0 : LOCATION = Pin_224; + adclk1 : LOCATION = Pin_226; + clk0 : LOCATION = Pin_28; + clk0 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk0 : IO_STANDARD = LVTTL; + clk1 : LOCATION = Pin_29; + clk1 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk1 : IO_STANDARD = LVTTL; + clk3 : LOCATION = Pin_152; + clk3 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk3 : IO_STANDARD = LVTTL; + clk_120mhz : LOCATION = Pin_153; + clk_120mhz : IO_STANDARD = LVTTL; + clk_out : LOCATION = Pin_63; + clk_out : IO_STANDARD = LVTTL; + dac1_data[0] : LOCATION = Pin_165; + dac1_data[10] : LOCATION = Pin_177; + dac1_data[11] : LOCATION = Pin_178; + dac1_data[12] : LOCATION = Pin_179; + dac1_data[13] : LOCATION = Pin_180; + dac1_data[1] : LOCATION = Pin_166; + dac1_data[2] : LOCATION = Pin_167; + dac1_data[3] : LOCATION = Pin_168; + dac1_data[4] : LOCATION = Pin_169; + dac1_data[5] : LOCATION = Pin_170; + dac1_data[6] : LOCATION = Pin_173; + dac1_data[7] : LOCATION = Pin_174; + dac1_data[8] : LOCATION = Pin_175; + dac1_data[9] : LOCATION = Pin_176; + dac2_data[0] : LOCATION = Pin_159; + dac2_data[10] : LOCATION = Pin_163; + dac2_data[11] : LOCATION = Pin_139; + dac2_data[12] : LOCATION = Pin_164; + dac2_data[13] : LOCATION = Pin_138; + dac2_data[1] : LOCATION = Pin_158; + dac2_data[2] : LOCATION = Pin_160; + dac2_data[3] : LOCATION = Pin_156; + dac2_data[4] : LOCATION = Pin_161; + dac2_data[5] : LOCATION = Pin_144; + dac2_data[6] : LOCATION = Pin_162; + dac2_data[7] : LOCATION = Pin_141; + dac2_data[8] : LOCATION = Pin_143; + dac2_data[9] : LOCATION = Pin_140; + dac3_data[0] : LOCATION = Pin_122; + dac3_data[10] : LOCATION = Pin_134; + dac3_data[11] : LOCATION = Pin_135; + dac3_data[12] : LOCATION = Pin_136; + dac3_data[13] : LOCATION = Pin_137; + dac3_data[1] : LOCATION = Pin_123; + dac3_data[2] : LOCATION = Pin_124; + dac3_data[3] : LOCATION = Pin_125; + dac3_data[4] : LOCATION = Pin_126; + dac3_data[5] : LOCATION = Pin_127; + dac3_data[6] : LOCATION = Pin_128; + dac3_data[7] : LOCATION = Pin_131; + dac3_data[8] : LOCATION = Pin_132; + dac3_data[9] : LOCATION = Pin_133; + dac4_data[0] : LOCATION = Pin_104; + dac4_data[10] : LOCATION = Pin_118; + dac4_data[11] : LOCATION = Pin_119; + dac4_data[12] : LOCATION = Pin_120; + dac4_data[13] : LOCATION = Pin_121; + dac4_data[1] : LOCATION = Pin_105; + dac4_data[2] : LOCATION = Pin_106; + dac4_data[3] : LOCATION = Pin_107; + dac4_data[4] : LOCATION = Pin_108; + dac4_data[5] : LOCATION = Pin_113; + dac4_data[6] : LOCATION = Pin_114; + dac4_data[7] : LOCATION = Pin_115; + dac4_data[8] : LOCATION = Pin_116; + dac4_data[9] : LOCATION = Pin_117; + enable_rx : LOCATION = Pin_88; + enable_tx : LOCATION = Pin_93; + gndbus[0] : LOCATION = Pin_223; + gndbus[0] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[0] : IO_STANDARD = LVTTL; + gndbus[1] : LOCATION = Pin_225; + gndbus[1] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[1] : IO_STANDARD = LVTTL; + gndbus[2] : LOCATION = Pin_227; + gndbus[2] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[2] : IO_STANDARD = LVTTL; + gndbus[3] : LOCATION = Pin_62; + gndbus[3] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[3] : IO_STANDARD = LVTTL; + gndbus[4] : LOCATION = Pin_64; + gndbus[4] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[4] : IO_STANDARD = LVTTL; + misc_pins[0] : LOCATION = Pin_87; + misc_pins[0] : IO_STANDARD = LVTTL; + misc_pins[10] : LOCATION = Pin_76; + misc_pins[10] : IO_STANDARD = LVTTL; + misc_pins[11] : LOCATION = Pin_74; + misc_pins[11] : IO_STANDARD = LVTTL; + misc_pins[1] : LOCATION = Pin_86; + misc_pins[1] : IO_STANDARD = LVTTL; + misc_pins[2] : LOCATION = Pin_85; + misc_pins[2] : IO_STANDARD = LVTTL; + misc_pins[3] : LOCATION = Pin_84; + misc_pins[3] : IO_STANDARD = LVTTL; + misc_pins[4] : LOCATION = Pin_83; + misc_pins[4] : IO_STANDARD = LVTTL; + misc_pins[5] : LOCATION = Pin_82; + misc_pins[5] : IO_STANDARD = LVTTL; + misc_pins[6] : LOCATION = Pin_79; + misc_pins[6] : IO_STANDARD = LVTTL; + misc_pins[7] : LOCATION = Pin_78; + misc_pins[7] : IO_STANDARD = LVTTL; + misc_pins[8] : LOCATION = Pin_77; + misc_pins[8] : IO_STANDARD = LVTTL; + misc_pins[9] : LOCATION = Pin_75; + misc_pins[9] : IO_STANDARD = LVTTL; + reset : LOCATION = Pin_94; + usbclk : LOCATION = Pin_55; + usbctl[0] : LOCATION = Pin_56; + usbctl[1] : LOCATION = Pin_54; + usbctl[2] : LOCATION = Pin_53; + usbctl[3] : LOCATION = Pin_58; + usbctl[4] : LOCATION = Pin_57; + usbctl[5] : LOCATION = Pin_44; + usbdata[0] : LOCATION = Pin_73; + usbdata[10] : LOCATION = Pin_41; + usbdata[11] : LOCATION = Pin_39; + usbdata[12] : LOCATION = Pin_38; + usbdata[12] : IO_STANDARD = LVTTL; + usbdata[13] : LOCATION = Pin_37; + usbdata[14] : LOCATION = Pin_24; + usbdata[15] : LOCATION = Pin_23; + usbdata[1] : LOCATION = Pin_68; + usbdata[2] : LOCATION = Pin_67; + usbdata[3] : LOCATION = Pin_66; + usbdata[4] : LOCATION = Pin_65; + usbdata[5] : LOCATION = Pin_61; + usbdata[6] : LOCATION = Pin_60; + usbdata[7] : LOCATION = Pin_59; + usbdata[8] : LOCATION = Pin_43; + usbdata[9] : LOCATION = Pin_42; + usbrdy[0] : LOCATION = Pin_45; + usbrdy[1] : LOCATION = Pin_46; + usbrdy[2] : LOCATION = Pin_47; + usbrdy[3] : LOCATION = Pin_48; + usbrdy[4] : LOCATION = Pin_49; + usbrdy[5] : LOCATION = Pin_50; + clear_status : LOCATION = Pin_99; +} diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.esf b/gr-radar-mono/src/fpga/top/usrp_radar_mono.esf new file mode 100644 index 00000000..6a8aaae4 --- /dev/null +++ b/gr-radar-mono/src/fpga/top/usrp_radar_mono.esf @@ -0,0 +1,14 @@ +SIMULATOR_SETTINGS +{ + ESTIMATE_POWER_CONSUMPTION = OFF; + GLITCH_INTERVAL = 1NS; + GLITCH_DETECTION = OFF; + SIMULATION_COVERAGE = ON; + CHECK_OUTPUTS = OFF; + SETUP_HOLD_DETECTION = OFF; + POWER_ESTIMATION_START_TIME = "0 NS"; + ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS = ON; + SIMULATION_MODE = TIMING; + START_TIME = 0NS; + USE_COMPILER_SETTINGS = usrp_radar_mono; +} diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.psf b/gr-radar-mono/src/fpga/top/usrp_radar_mono.psf new file mode 100644 index 00000000..06496739 --- /dev/null +++ b/gr-radar-mono/src/fpga/top/usrp_radar_mono.psf @@ -0,0 +1,312 @@ +DEFAULT_DESIGN_ASSISTANT_SETTINGS +{ + HCPY_ALOAD_SIGNALS = OFF; + HCPY_VREF_PINS = OFF; + HCPY_CAT = OFF; + HCPY_ILLEGAL_HC_DEV_PKG = OFF; + ACLK_RULE_IMSZER_ADOMAIN = OFF; + ACLK_RULE_SZER_BTW_ACLK_DOMAIN = OFF; + ACLK_RULE_NO_SZER_ACLK_DOMAIN = OFF; + ACLK_CAT = OFF; + SIGNALRACE_RULE_ASYNCHPIN_SYNCH_CLKPIN = OFF; + SIGNALRACE_CAT = OFF; + NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED = OFF; + NONSYNCHSTRUCT_RULE_SRLATCH = OFF; + NONSYNCHSTRUCT_RULE_DLATCH = OFF; + NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR = OFF; + NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN = OFF; + NONSYNCHSTRUCT_RULE_RIPPLE_CLK = OFF; + NONSYNCHSTRUCT_RULE_DELAY_CHAIN = OFF; + NONSYNCHSTRUCT_RULE_REG_LOOP = OFF; + NONSYNCHSTRUCT_RULE_COMBLOOP = OFF; + NONSYNCHSTRUCT_CAT = OFF; + NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE = OFF; + TIMING_RULE_COIN_CLKEDGE = OFF; + TIMING_RULE_SHIFT_REG = OFF; + TIMING_RULE_HIGH_FANOUTS = OFF; + TIMING_CAT = OFF; + RESET_RULE_ALL = OFF; + RESET_RULE_IMSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_UNSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_REG_ASNYCH = OFF; + RESET_RULE_COMB_ASYNCH_RESET = OFF; + RESET_RULE_IMSYNCH_EXRESET = OFF; + RESET_RULE_UNSYNCH_EXRESET = OFF; + RESET_RULE_INPINS_RESETNET = OFF; + RESET_CAT = OFF; + CLK_RULE_ALL = OFF; + CLK_RULE_MIX_EDGES = OFF; + CLK_RULE_CLKNET_CLKSPINES = OFF; + CLK_RULE_INPINS_CLKNET = OFF; + CLK_RULE_GATING_SCHEME = OFF; + CLK_RULE_INV_CLOCK = OFF; + CLK_RULE_COMB_CLOCK = OFF; + CLK_CAT = OFF; + HCPY_EXCEED_USER_IO_USAGE = OFF; + HCPY_EXCEED_RAM_USAGE = OFF; + NONSYNCHSTRUCT_RULE_ASYN_RAM = OFF; + SIGNALRACE_RULE_TRISTATE = OFF; + ASSG_RULE_MISSING_TIMING = OFF; + ASSG_RULE_MISSING_FMAX = OFF; + ASSG_CAT = OFF; +} +SYNTHESIS_FITTING_SETTINGS +{ + AUTO_SHIFT_REGISTER_RECOGNITION = ON; + AUTO_DSP_RECOGNITION = ON; + AUTO_RAM_RECOGNITION = ON; + REMOVE_DUPLICATE_LOGIC = ON; + AUTO_TURBO_BIT = ON; + AUTO_MERGE_PLLS = ON; + AUTO_OPEN_DRAIN_PINS = ON; + AUTO_PARALLEL_EXPANDERS = ON; + AUTO_FAST_OUTPUT_ENABLE_REGISTERS = OFF; + AUTO_FAST_OUTPUT_REGISTERS = OFF; + AUTO_FAST_INPUT_REGISTERS = OFF; + AUTO_CASCADE_CHAINS = ON; + AUTO_CARRY_CHAINS = ON; + AUTO_DELAY_CHAINS = ON; + MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH = 4; + PARALLEL_EXPANDER_CHAIN_LENGTH = 16; + CASCADE_CHAIN_LENGTH = 2; + STRATIX_CARRY_CHAIN_LENGTH = 70; + MERCURY_CARRY_CHAIN_LENGTH = 48; + FLEX10K_CARRY_CHAIN_LENGTH = 32; + FLEX6K_CARRY_CHAIN_LENGTH = 32; + CARRY_CHAIN_LENGTH = 48; + CARRY_OUT_PINS_LCELL_INSERT = ON; + NORMAL_LCELL_INSERT = ON; + AUTO_LCELL_INSERTION = ON; + ALLOW_XOR_GATE_USAGE = ON; + AUTO_PACKED_REGISTERS_STRATIX = NORMAL; + AUTO_PACKED_REGISTERS = OFF; + AUTO_PACKED_REG_CYCLONE = NORMAL; + FLEX10K_OPTIMIZATION_TECHNIQUE = AREA; + FLEX6K_OPTIMIZATION_TECHNIQUE = AREA; + MERCURY_OPTIMIZATION_TECHNIQUE = AREA; + APEX20K_OPTIMIZATION_TECHNIQUE = SPEED; + MAX7000_OPTIMIZATION_TECHNIQUE = SPEED; + STRATIX_OPTIMIZATION_TECHNIQUE = SPEED; + CYCLONE_OPTIMIZATION_TECHNIQUE = AREA; + FLEX10K_TECHNOLOGY_MAPPER = LUT; + FLEX6K_TECHNOLOGY_MAPPER = LUT; + MERCURY_TECHNOLOGY_MAPPER = LUT; + APEX20K_TECHNOLOGY_MAPPER = LUT; + MAX7000_TECHNOLOGY_MAPPER = "PRODUCT TERM"; + STRATIX_TECHNOLOGY_MAPPER = LUT; + AUTO_IMPLEMENT_IN_ROM = OFF; + AUTO_GLOBAL_MEMORY_CONTROLS = OFF; + AUTO_GLOBAL_REGISTER_CONTROLS = ON; + AUTO_GLOBAL_OE = ON; + AUTO_GLOBAL_CLOCK = ON; + USE_LPM_FOR_AHDL_OPERATORS = ON; + LIMIT_AHDL_INTEGERS_TO_32_BITS = OFF; + ENABLE_BUS_HOLD_CIRCUITRY = OFF; + WEAK_PULL_UP_RESISTOR = OFF; + TURBO_BIT = ON; + MAX7000_IGNORE_SOFT_BUFFERS = OFF; + IGNORE_SOFT_BUFFERS = ON; + MAX7000_IGNORE_LCELL_BUFFERS = AUTO; + IGNORE_LCELL_BUFFERS = OFF; + IGNORE_ROW_GLOBAL_BUFFERS = OFF; + IGNORE_GLOBAL_BUFFERS = OFF; + IGNORE_CASCADE_BUFFERS = OFF; + IGNORE_CARRY_BUFFERS = OFF; + REMOVE_DUPLICATE_REGISTERS = ON; + REMOVE_REDUNDANT_LOGIC_CELLS = OFF; + ALLOW_POWER_UP_DONT_CARE = ON; + PCI_IO = OFF; + NOT_GATE_PUSH_BACK = ON; + SLOW_SLEW_RATE = OFF; + DSP_BLOCK_BALANCING = AUTO; + STATE_MACHINE_PROCESSING = AUTO; +} +DEFAULT_HARDCOPY_SETTINGS +{ + HARDCOPY_EXTERNAL_CLOCK_JITTER = "0.0 NS"; +} +DEFAULT_TIMING_REQUIREMENTS +{ + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + RUN_ALL_TIMING_ANALYSES = ON; + IGNORE_CLOCK_SETTINGS = OFF; + DEFAULT_HOLD_MULTICYCLE = "SAME AS MULTICYCLE"; + CUT_OFF_IO_PIN_FEEDBACK = ON; + CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; + CUT_OFF_READ_DURING_WRITE_PATHS = ON; + CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS = ON; + DO_MIN_ANALYSIS = ON; + DO_MIN_TIMING = OFF; + NUMBER_OF_PATHS_TO_REPORT = 200; + NUMBER_OF_DESTINATION_TO_REPORT = 10; + NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT = 10; + MAX_SCC_SIZE = 50; +} +HDL_SETTINGS +{ + VERILOG_INPUT_VERSION = VERILOG_2001; + ENABLE_IP_DEBUG = OFF; + VHDL_INPUT_VERSION = VHDL93; + VHDL_SHOW_LMF_MAPPING_MESSAGES = OFF; +} +PROJECT_INFO(usrp_radar_mono) +{ + ORIGINAL_QUARTUS_VERSION = 3.0; + PROJECT_CREATION_TIME_DATE = "00:14:04 JULY 13, 2003"; + LAST_QUARTUS_VERSION = 3.0; + SHOW_REGISTRATION_MESSAGE = ON; + USER_LIBRARIES = "h:\\gnuradio\\trunk\\usrp\\fpga\\megacells"; +} +THIRD_PARTY_EDA_TOOLS(usrp_radar_mono) +{ + EDA_DESIGN_ENTRY_SYNTHESIS_TOOL = ""; + EDA_SIMULATION_TOOL = ""; + EDA_TIMING_ANALYSIS_TOOL = ""; + EDA_BOARD_DESIGN_TOOL = ""; + EDA_FORMAL_VERIFICATION_TOOL = ""; + EDA_RESYNTHESIS_TOOL = ""; +} +EDA_TOOL_SETTINGS(eda_design_synthesis) +{ + EDA_INPUT_GND_NAME = GND; + EDA_INPUT_VCC_NAME = VCC; + EDA_SHOW_LMF_MAPPING_MESSAGES = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_INPUT_DATA_FORMAT = EDIF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_simulation) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_timing_analysis) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + EDA_LAUNCH_CMD_LINE_TOOL = OFF; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_board_design) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_formal_verification) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_palace) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + RESYNTHESIS_RETIMING = FULL; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; +} +CLOCK(clk_120mhz) +{ + FMAX_REQUIREMENT = "120.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(usbclk) +{ + FMAX_REQUIREMENT = "48.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(SCLK) +{ + FMAX_REQUIREMENT = "1.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk0) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk1) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.qpf b/gr-radar-mono/src/fpga/top/usrp_radar_mono.qpf new file mode 100644 index 00000000..d85239e9 --- /dev/null +++ b/gr-radar-mono/src/fpga/top/usrp_radar_mono.qpf @@ -0,0 +1,29 @@ +# Copyright (C) 1991-2004 Altera Corporation +# Any megafunction design, and related netlist (encrypted or decrypted), +# support information, device programming or simulation file, and any other +# associated documentation or information provided by Altera or a partner +# under Altera's Megafunction Partnership Program may be used only +# to program PLD devices (but not masked PLD devices) from Altera. Any +# other use of such megafunction design, netlist, support information, +# device programming or simulation file, or any other related documentation +# or information is prohibited for any other purpose, including, but not +# limited to modification, reverse engineering, de-compiling, or use with +# any other silicon devices, unless such use is explicitly licensed under +# a separate agreement with Altera or a megafunction partner. Title to the +# intellectual property, including patents, copyrights, trademarks, trade +# secrets, or maskworks, embodied in any such megafunction design, netlist, +# support information, device programming or simulation file, or any other +# related documentation or information provided by Altera or a megafunction +# partner, remains with Altera, the megafunction partner, or their respective +# licensors. No other licenses, including any licenses needed under any third +# party's intellectual property, are provided herein. + + + +QUARTUS_VERSION = "4.0" +DATE = "17:10:11 December 20, 2004" + + +# Active Revisions + +PROJECT_REVISION = "usrp_radar_mono" diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.qsf b/gr-radar-mono/src/fpga/top/usrp_radar_mono.qsf new file mode 100644 index 00000000..9b13989c --- /dev/null +++ b/gr-radar-mono/src/fpga/top/usrp_radar_mono.qsf @@ -0,0 +1,402 @@ +# Copyright (C) 1991-2007 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. + + +# The default values for assignments are stored in the file +# usrp_radar_mono_assignment_defaults.qdf +# If this file doesn't exist, and for assignments not listed, see file +# assignment_defaults.qdf + +# Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. + + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 3.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "00:14:04 JULY 13, 2003" +set_global_assignment -name LAST_QUARTUS_VERSION "7.1 SP1" +set_global_assignment -name MESSAGE_SUPPRESSION_RULE_FILE usrp_radar_mono.srf + +# Pin & Location Assignments +# ========================== +set_global_assignment -name RESERVE_PIN "AS INPUT TRI-STATED" +set_location_assignment PIN_29 -to SCLK +set_location_assignment PIN_117 -to SDI +set_location_assignment PIN_28 -to usbclk +set_location_assignment PIN_107 -to usbctl[0] +set_location_assignment PIN_106 -to usbctl[1] +set_location_assignment PIN_105 -to usbctl[2] +set_location_assignment PIN_100 -to usbdata[0] +set_location_assignment PIN_84 -to usbdata[10] +set_location_assignment PIN_83 -to usbdata[11] +set_location_assignment PIN_82 -to usbdata[12] +set_location_assignment PIN_79 -to usbdata[13] +set_location_assignment PIN_78 -to usbdata[14] +set_location_assignment PIN_77 -to usbdata[15] +set_location_assignment PIN_99 -to usbdata[1] +set_location_assignment PIN_98 -to usbdata[2] +set_location_assignment PIN_95 -to usbdata[3] +set_location_assignment PIN_94 -to usbdata[4] +set_location_assignment PIN_93 -to usbdata[5] +set_location_assignment PIN_88 -to usbdata[6] +set_location_assignment PIN_87 -to usbdata[7] +set_location_assignment PIN_86 -to usbdata[8] +set_location_assignment PIN_85 -to usbdata[9] +set_location_assignment PIN_104 -to usbrdy[0] +set_location_assignment PIN_101 -to usbrdy[1] +set_location_assignment PIN_76 -to FX2_1 +set_location_assignment PIN_75 -to FX2_2 +set_location_assignment PIN_74 -to FX2_3 +set_location_assignment PIN_116 -to io_rx_a[0] +set_location_assignment PIN_115 -to io_rx_a[1] +set_location_assignment PIN_114 -to io_rx_a[2] +set_location_assignment PIN_113 -to io_rx_a[3] +set_location_assignment PIN_108 -to io_rx_a[4] +set_location_assignment PIN_195 -to io_rx_a[5] +set_location_assignment PIN_196 -to io_rx_a[6] +set_location_assignment PIN_197 -to io_rx_a[7] +set_location_assignment PIN_200 -to io_rx_a[8] +set_location_assignment PIN_201 -to io_rx_a[9] +set_location_assignment PIN_202 -to io_rx_a[10] +set_location_assignment PIN_203 -to io_rx_a[11] +set_location_assignment PIN_206 -to io_rx_a[12] +set_location_assignment PIN_207 -to io_rx_a[13] +set_location_assignment PIN_208 -to io_rx_a[14] +set_location_assignment PIN_214 -to io_rx_b[0] +set_location_assignment PIN_215 -to io_rx_b[1] +set_location_assignment PIN_216 -to io_rx_b[2] +set_location_assignment PIN_217 -to io_rx_b[3] +set_location_assignment PIN_218 -to io_rx_b[4] +set_location_assignment PIN_219 -to io_rx_b[5] +set_location_assignment PIN_222 -to io_rx_b[6] +set_location_assignment PIN_223 -to io_rx_b[7] +set_location_assignment PIN_224 -to io_rx_b[8] +set_location_assignment PIN_225 -to io_rx_b[9] +set_location_assignment PIN_226 -to io_rx_b[10] +set_location_assignment PIN_227 -to io_rx_b[11] +set_location_assignment PIN_228 -to io_rx_b[12] +set_location_assignment PIN_233 -to io_rx_b[13] +set_location_assignment PIN_234 -to io_rx_b[14] +set_location_assignment PIN_175 -to io_tx_a[0] +set_location_assignment PIN_176 -to io_tx_a[1] +set_location_assignment PIN_177 -to io_tx_a[2] +set_location_assignment PIN_178 -to io_tx_a[3] +set_location_assignment PIN_179 -to io_tx_a[4] +set_location_assignment PIN_180 -to io_tx_a[5] +set_location_assignment PIN_181 -to io_tx_a[6] +set_location_assignment PIN_182 -to io_tx_a[7] +set_location_assignment PIN_183 -to io_tx_a[8] +set_location_assignment PIN_184 -to io_tx_a[9] +set_location_assignment PIN_185 -to io_tx_a[10] +set_location_assignment PIN_186 -to io_tx_a[11] +set_location_assignment PIN_187 -to io_tx_a[12] +set_location_assignment PIN_188 -to io_tx_a[13] +set_location_assignment PIN_193 -to io_tx_a[14] +set_location_assignment PIN_73 -to io_tx_b[0] +set_location_assignment PIN_68 -to io_tx_b[1] +set_location_assignment PIN_67 -to io_tx_b[2] +set_location_assignment PIN_66 -to io_tx_b[3] +set_location_assignment PIN_65 -to io_tx_b[4] +set_location_assignment PIN_64 -to io_tx_b[5] +set_location_assignment PIN_63 -to io_tx_b[6] +set_location_assignment PIN_62 -to io_tx_b[7] +set_location_assignment PIN_61 -to io_tx_b[8] +set_location_assignment PIN_60 -to io_tx_b[9] +set_location_assignment PIN_59 -to io_tx_b[10] +set_location_assignment PIN_58 -to io_tx_b[11] +set_location_assignment PIN_57 -to io_tx_b[12] +set_location_assignment PIN_56 -to io_tx_b[13] +set_location_assignment PIN_55 -to io_tx_b[14] +set_location_assignment PIN_152 -to master_clk +set_location_assignment PIN_144 -to rx_a_a[0] +set_location_assignment PIN_143 -to rx_a_a[1] +set_location_assignment PIN_141 -to rx_a_a[2] +set_location_assignment PIN_140 -to rx_a_a[3] +set_location_assignment PIN_139 -to rx_a_a[4] +set_location_assignment PIN_138 -to rx_a_a[5] +set_location_assignment PIN_137 -to rx_a_a[6] +set_location_assignment PIN_136 -to rx_a_a[7] +set_location_assignment PIN_135 -to rx_a_a[8] +set_location_assignment PIN_134 -to rx_a_a[9] +set_location_assignment PIN_133 -to rx_a_a[10] +set_location_assignment PIN_132 -to rx_a_a[11] +set_location_assignment PIN_23 -to rx_a_b[0] +set_location_assignment PIN_21 -to rx_a_b[1] +set_location_assignment PIN_20 -to rx_a_b[2] +set_location_assignment PIN_19 -to rx_a_b[3] +set_location_assignment PIN_18 -to rx_a_b[4] +set_location_assignment PIN_17 -to rx_a_b[5] +set_location_assignment PIN_16 -to rx_a_b[6] +set_location_assignment PIN_15 -to rx_a_b[7] +set_location_assignment PIN_14 -to rx_a_b[8] +set_location_assignment PIN_13 -to rx_a_b[9] +set_location_assignment PIN_12 -to rx_a_b[10] +set_location_assignment PIN_11 -to rx_a_b[11] +set_location_assignment PIN_131 -to rx_b_a[0] +set_location_assignment PIN_128 -to rx_b_a[1] +set_location_assignment PIN_127 -to rx_b_a[2] +set_location_assignment PIN_126 -to rx_b_a[3] +set_location_assignment PIN_125 -to rx_b_a[4] +set_location_assignment PIN_124 -to rx_b_a[5] +set_location_assignment PIN_123 -to rx_b_a[6] +set_location_assignment PIN_122 -to rx_b_a[7] +set_location_assignment PIN_121 -to rx_b_a[8] +set_location_assignment PIN_120 -to rx_b_a[9] +set_location_assignment PIN_119 -to rx_b_a[10] +set_location_assignment PIN_118 -to rx_b_a[11] +set_location_assignment PIN_8 -to rx_b_b[0] +set_location_assignment PIN_7 -to rx_b_b[1] +set_location_assignment PIN_6 -to rx_b_b[2] +set_location_assignment PIN_5 -to rx_b_b[3] +set_location_assignment PIN_4 -to rx_b_b[4] +set_location_assignment PIN_3 -to rx_b_b[5] +set_location_assignment PIN_2 -to rx_b_b[6] +set_location_assignment PIN_240 -to rx_b_b[7] +set_location_assignment PIN_239 -to rx_b_b[8] +set_location_assignment PIN_238 -to rx_b_b[9] +set_location_assignment PIN_237 -to rx_b_b[10] +set_location_assignment PIN_236 -to rx_b_b[11] +set_location_assignment PIN_156 -to SDO +set_location_assignment PIN_153 -to SEN_FPGA +set_location_assignment PIN_159 -to tx_a[0] +set_location_assignment PIN_160 -to tx_a[1] +set_location_assignment PIN_161 -to tx_a[2] +set_location_assignment PIN_162 -to tx_a[3] +set_location_assignment PIN_163 -to tx_a[4] +set_location_assignment PIN_164 -to tx_a[5] +set_location_assignment PIN_165 -to tx_a[6] +set_location_assignment PIN_166 -to tx_a[7] +set_location_assignment PIN_167 -to tx_a[8] +set_location_assignment PIN_168 -to tx_a[9] +set_location_assignment PIN_169 -to tx_a[10] +set_location_assignment PIN_170 -to tx_a[11] +set_location_assignment PIN_173 -to tx_a[12] +set_location_assignment PIN_174 -to tx_a[13] +set_location_assignment PIN_38 -to tx_b[0] +set_location_assignment PIN_39 -to tx_b[1] +set_location_assignment PIN_41 -to tx_b[2] +set_location_assignment PIN_42 -to tx_b[3] +set_location_assignment PIN_43 -to tx_b[4] +set_location_assignment PIN_44 -to tx_b[5] +set_location_assignment PIN_45 -to tx_b[6] +set_location_assignment PIN_46 -to tx_b[7] +set_location_assignment PIN_47 -to tx_b[8] +set_location_assignment PIN_48 -to tx_b[9] +set_location_assignment PIN_49 -to tx_b[10] +set_location_assignment PIN_50 -to tx_b[11] +set_location_assignment PIN_53 -to tx_b[12] +set_location_assignment PIN_54 -to tx_b[13] +set_location_assignment PIN_158 -to TXSYNC_A +set_location_assignment PIN_37 -to TXSYNC_B +set_location_assignment PIN_235 -to io_rx_b[15] +set_location_assignment PIN_24 -to io_tx_b[15] +set_location_assignment PIN_213 -to io_rx_a[15] +set_location_assignment PIN_194 -to io_tx_a[15] +set_location_assignment PIN_1 -to MYSTERY_SIGNAL + +# Classic Timing Assignments +# ========================== +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF +set_global_assignment -name MAX_SCC_SIZE 50 + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name SAVE_DISK_SPACE OFF +set_global_assignment -name DEVICE_FILTER_PACKAGE "ANY QFP" +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 240 +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name FAMILY Cyclone +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE BALANCED +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name VHDL_SHOW_LMF_MAPPING_MESSAGES OFF +set_global_assignment -name USER_LIBRARIES "h:\\gnuradio\\trunk\\usrp\\fpga\\megacells" +set_global_assignment -name AUTO_ENABLE_SMART_COMPILE ON +set_global_assignment -name TOP_LEVEL_ENTITY usrp_radar_mono + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP1C12Q240C8 +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" +set_global_assignment -name OPTIMIZE_HOLD_TIMING OFF +set_global_assignment -name OPTIMIZE_TIMING "NORMAL COMPILATION" +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING OFF +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION ON +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT NORMAL +set_global_assignment -name INC_PLC_MODE OFF +set_global_assignment -name ROUTING_BACK_ANNOTATION_MODE OFF +set_instance_assignment -name IO_STANDARD LVTTL -to usbdata[12] +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD LVTTL +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 + +# EDA Netlist Writer Assignments +# ============================== +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" + +# Assembler Assignments +# ===================== +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "AS INPUT TRI-STATED" +set_global_assignment -name AUTO_RESTART_CONFIGURATION OFF + +# Simulator Assignments +# ===================== +set_global_assignment -name START_TIME "0 ns" +set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE + +# Design Assistant Assignments +# ============================ +set_global_assignment -name DRC_REPORT_TOP_FANOUT OFF +set_global_assignment -name DRC_REPORT_FANOUT_EXCEEDING OFF +set_global_assignment -name ASSG_CAT OFF +set_global_assignment -name ASSG_RULE_MISSING_FMAX OFF +set_global_assignment -name ASSG_RULE_MISSING_TIMING OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_ASYN_RAM OFF +set_global_assignment -name CLK_CAT OFF +set_global_assignment -name CLK_RULE_COMB_CLOCK OFF +set_global_assignment -name CLK_RULE_INV_CLOCK OFF +set_global_assignment -name CLK_RULE_GATING_SCHEME OFF +set_global_assignment -name CLK_RULE_INPINS_CLKNET OFF +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES OFF +set_global_assignment -name CLK_RULE_MIX_EDGES OFF +set_global_assignment -name RESET_CAT OFF +set_global_assignment -name RESET_RULE_INPINS_RESETNET OFF +set_global_assignment -name RESET_RULE_UNSYNCH_EXRESET OFF +set_global_assignment -name RESET_RULE_IMSYNCH_EXRESET OFF +set_global_assignment -name RESET_RULE_COMB_ASYNCH_RESET OFF +set_global_assignment -name RESET_RULE_UNSYNCH_ASYNCH_DOMAIN OFF +set_global_assignment -name RESET_RULE_IMSYNCH_ASYNCH_DOMAIN OFF +set_global_assignment -name TIMING_CAT OFF +set_global_assignment -name TIMING_RULE_SHIFT_REG OFF +set_global_assignment -name TIMING_RULE_COIN_CLKEDGE OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE OFF +set_global_assignment -name NONSYNCHSTRUCT_CAT OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_COMBLOOP OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_REG_LOOP OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_DELAY_CHAIN OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_RIPPLE_CLK OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_SRLATCH OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED OFF +set_global_assignment -name SIGNALRACE_CAT OFF +set_global_assignment -name ACLK_CAT OFF +set_global_assignment -name ACLK_RULE_NO_SZER_ACLK_DOMAIN OFF +set_global_assignment -name ACLK_RULE_SZER_BTW_ACLK_DOMAIN OFF +set_global_assignment -name ACLK_RULE_IMSZER_ADOMAIN OFF +set_global_assignment -name HCPY_CAT OFF +set_global_assignment -name HCPY_VREF_PINS OFF +set_global_assignment -name ENABLE_DA_RULE "C101, C102, C103, C104, C105, C106, R101, R102, R103, R104, R105, T101, T102, A101, A102, A103, A104, A105, A106, A107, A108, A109, A110, S101, S102, D101, D102, D103, H102" +set_global_assignment -name DISABLE_DA_RULE H101 + +# SignalTap II Assignments +# ======================== +set_global_assignment -name HUB_ENTITY_NAME SLD_HUB +set_global_assignment -name HUB_INSTANCE_NAME SLD_HUB_INST +set_global_assignment -name ENABLE_SIGNALTAP OFF + +# LogicLock Region Assignments +# ============================ +set_global_assignment -name LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT OFF + +# start CLOCK(SCLK) +# ----------------- + + # Classic Timing Assignments + # ========================== +set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK +set_global_assignment -name FMAX_REQUIREMENT "1 MHz" -section_id SCLK + +# end CLOCK(SCLK) +# --------------- + +# start CLOCK(master_clk) +# ----------------------- + + # Classic Timing Assignments + # ========================== +set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk +set_global_assignment -name FMAX_REQUIREMENT "64 MHz" -section_id master_clk + +# end CLOCK(master_clk) +# --------------------- + +# start CLOCK(usbclk) +# ------------------- + + # Classic Timing Assignments + # ========================== +set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk +set_global_assignment -name FMAX_REQUIREMENT "48 MHz" -section_id usbclk + +# end CLOCK(usbclk) +# ----------------- + +# ----------------------------- +# start ENTITY(usrp_radar_mono) + + # Classic Timing Assignments + # ========================== +set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK +set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk +set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk + + # start DESIGN_PARTITION(Top) + # --------------------------- + + # Incremental Compilation Assignments + # =================================== +set_instance_assignment -name PARTITION_HIERARCHY no_file_for_top_partition -to | -section_id Top +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top + + # end DESIGN_PARTITION(Top) + # ------------------------- + +# end ENTITY(usrp_radar_mono) +# --------------------------- +set_global_assignment -name VERILOG_FILE usrp_radar_mono.v +set_global_assignment -name VERILOG_FILE dacpll.v +set_global_assignment -name VERILOG_FILE ../lib/cordic_nco.v +set_global_assignment -name VERILOG_FILE ../lib/dac_interface.v +set_global_assignment -name VERILOG_FILE ../lib/fifo32_2k.v +set_global_assignment -name VERILOG_FILE ../lib/radar_control.v +set_global_assignment -name VERILOG_FILE ../lib/radar_rx.v +set_global_assignment -name VERILOG_FILE ../lib/radar_tx.v +set_global_assignment -name VERILOG_FILE ../lib/radar.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/adc_interface.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/atr_delay.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/bidir_reg.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/clk_divider.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cordic_stage.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/cordic.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/gen_sync.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/io_pins.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/master_control.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/rssi.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/rx_buffer.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/rx_dcoffset.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/serial_io.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/setting_reg.v +set_global_assignment -name VERILOG_FILE ../../../../usrp/fpga/sdr_lib/strobe_gen.v \ No newline at end of file diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.rbf b/gr-radar-mono/src/fpga/top/usrp_radar_mono.rbf new file mode 100644 index 0000000000000000000000000000000000000000..ee8859b1b8495ead30dda3a0aea4cc742b4b4dbd GIT binary patch literal 122609 zcmeFa4}28Wxj#HRjC7^kc4jgOLk!8z*|W zN-ekUY$jpRKob6_?X?Oa2vw9KdbPK!Cj1c) zyr16p{@%~$J!H@PJLfsi`7_V+JT!R(p^vnNgnAy4;5D}PtQCH}+zIES2pXgQ-5o%^do9v*JN0SZ3* z$J5xe9{t~%xCixXnwx1nk(=A(hSMy3apY!vxJa|3Q`OZ)d3HoD{io~d z#yf37yl##xqmMseU3SCorS{;-Y{ZeZFEv(KI_Em*eAv`eeC@ zFqc(*a`x;c3rOS{}!za62jguk`4q}|cy_0FfM^Jsql&;NYrcO-h96yZJ{ ziMXBrVCK%e`s&nGfB)U@9{6Vx-AFE{Ks0_hiKh}?uCkW@07Cowe7-Kf&BEW`eRt}O zc4S{dG{6xV1Lu!~OLpLYi_quy+%xZH5=|pRD&E-tuM#4Ky-M3fc953nIJIa|*K2lU zH;g^V?a@I-SC;SM$UWS?c~yk$m&qoy^URxX?y{q^BrhQ3J5^ORCMj8RoMWx$)ZKR< z`y+{7BdqbKO*6rH^%UcTzSz05>(7@Wlsow&o3T&Ny#4kuJGwMu=kfF9XP+JWj6`n( zKdJnl9=c`tA zZ9o0sgIk>muT@fn$mP37>s1Y^l^}Kaf>vghk1!o6Z+Ip4i%uw4zd{1)n37BG3Z% zTKDH1kxPXNIfa>?)L&^~<*;nZZ^a~~Qig~4h#VStcqGpt6IS@uJ2ntY) zhYzPna1th@?c6R$oJf=qbva$}gye#Rw7(6DpAhDwcEK(jPZF{DG6stx85d2M4XML} zoWu#AW5zCYfZXw$8_AiA8AwDfw6J`xO5{d7xSVGuR#O^WL`A~0O-9=+*n~xr#%@T8 zm23T-0@mdo~!1=Y19H_(3B!wx1 zlB4}MA6=_B>?EXcib`Rmvkd@ckPDIlszRdUDdWjdV3AWIyi?S8i2=?%7}^QTR31Ym zB8Cd%G7X+_as*n#P3SIG-QTI;DTNL@AsKYA;&vEq!F6_jpS`~DM6@}M-%D#9Y=H~YTy%A2%9M-lUGm29 zuB%LVo|L&Hp>sFC+CM0c&fUA@+5a|^XGhE>xf{6IzWv>Q`ljdSo_(u&54^?aa$oZ7 zf#3fV73N{AX2bhMfs%rE;u4ojRT#)&5k?(6ZU6JD@Y-BWAPmcdZ~~M73KY&RbqN{| z%9i3!+usYUg~F~P9DnqUrT$JeE6^?E@F^3MQj(73P71E`t7*Q3{uqD!@Wbw9mDbAT z)=Gb8jHH^vr`+_-sdkZ6$tgFbrX+oudvD<4FC6VUlR>xM!jf3UuTZyP=r7^^q$kvJ=4jT}PPs<^Xzurj*`C{tJ=;2bT`Y zIliK2_!9>@k~*s5T>c{2S=}7x^2EJ$pIZZP~tB4aH4ZDTtahGaiu|?+3K2{ zKr2J5Ln!9vj(e9}NN_IW#h{EjVqCLCIjcEJed0SOLf!Z!kq~D|Cug&IuBof{}{h6y?! z2nZ0fx%limF_>ZS@rB3es9R3Ji!qq`oPZrjrVb`=2C*7l68P>Qx#-}7!6Om7=R&)= z{QObw8sKg)_gOhiavYjRw`*s!lB8j$Ye0A_(1_u)RRgiqc4GfoB7=`0ahx3!s2FD{ zQ9{w}*SOAQCQk+{Y9~5ZC`Ii|HDTI!6``0b>b-hJ7w79rWR+#NTqWrHUk2R-w_G_C zb34cV>y?v{6yH*5UQO|T$owZ54i|LvWq5gP{DjLq`Pyy5WjMOt0;1mr%8%dkov#tP z%;oh{y~M6G>o18^dA2ZF#AEgvRpwtdbb z5HDMAQ-+JK=dPSe(cB-vmK95+6; zFCSzgcFSp$%Vdl&^WeEOK!h|x1N`iwc24?9oYboC0=rS9Gkx8-#FuOR)t@!G{me=q(f>&&1%r!pUmGgmVFfNds= zv!jQ1F5xyp^7!xOooQCBRSR|;Fz1|7qgmR@z$eWy^ib17*8n7j*X@ekr5uRmx+ztHvA_w8O0^SXKMz9#Y)UL#LtsVT zX~Izv8O3RWU56Oro1Xcn$l3Qk%$(I17tR$(b}Bk*n)_Ns0MmH0KuAInF2+>?0x@2O zExS$0WXYRnsg$KSEyaXFqNh*)$5p&HB!BxY8yZRW%LKz-tcX7pnk*t=iZRsGMVbMSb7+?neaoz3};CpONu-;r-j1`pe>FTI*&3aHZY z$NxrMNh#PpAW+pCz>0S64Y~{uiUZ!KLp|T2qL(taU&1z{d=M33>K+aW)Rc+uU54t} z+x6v9`}}xTFs>D@V#d)P-6q250)E;jynFt<`z+P-PXZHAPcNDY&SxEloAW&=x zmo*YzyekIQ!8#UwKMJ~Lvu&jgUz~}&m28xblM;4~1Sl3COJRnX&M%<`21@niyaZ=9 zS@0-;w2=C10oIa%Fe%}983-{D^@Htm{6B9BXT&cwBAAVV zOp$@3eTdfu4E;NE7gC5MJ703!mxB=)kOoNKJ78F`8F9tAfi}E2wEwj9GQ3_elGXH{RxscGgs~ds?y?^f3`Df=CXy1}>);Z(+ z6c?X=d(eI{jj!FAdMhZq=+|yubSc1qY~MYfw9yso4oQ#QaFrFhlCj@KpJnCH;bBA` z1FK&X@fTjo8MT#87#*;jD<~#^jWWe|mc%7az(sxVE=&Y&nHH9#mslbGnhKE98W1pc zc2W1?(sOJMQag9tj55wW{@I9sw8-BcxO$uaTg&q=o(cSqF6usn$ZX&$W&&yaHQ&zY z-*BPPzj^lt7|2(gQVIeH$Y11rAC&ZCA`|) z>ribm47mquMHNiyq>uqsh?Ca{6OcS!Jd`8A)Zx73UA1=6K;1SV8E5H`R1oa^@l$H< zjg!t=IlkH2as17$fjn0@oNu}LW|Dts9CBqV2Pv(6@1Bd6ATHg$$Nz<_^+QnOhs(!1 z{bw%!@cbv=(qw;r*2|rLE4}jd?z=Qm;(PP;aH%#BsGS5SL4a}gje(89hLzgWMS zq(0}-bCGdqghif95CJIvaKgJbO!&?lxXu{M@nzQ_HSbmO8Lh+_k22e(cDj4%I+=lpvb$LGU3S>#-EU-AqDmf~2-^|su5$;TJmB*;7* zdu>DAFapxS97BvFg8>Z)6__A6r} zQ{@nc9bg54)dYk3@cIoh%T$;Yj+tCI*>5&k{74HGX_z3FBgbE!Xg{lTX#dR+|RWPt+=e zcFi>$$h(|y!xeE*2|DcpuZ<|oQ|1nUH_aG)776dT5-;L!HLQ!o-TM9;RX0QqD8qZXvg+Hy-HU2fY$i|4PKCT zI9p)R{_mdWfIXNbp1{sQB9a4+@&+IqzK|-(0W6Rd5Rgq+Ciac@Hw;eQ;*Ur?kjg%R zOanm~1p?)A;Vfa2;Mj}s5?oxq&A~YWGU?aMxq)lH-U6h^v&DvK*}ibmii3LK!%Nz> z!e@D;(7<_n=N^aaQY@S+f8gx+yW1|hckad@ABqFGT{Jm^@ESSyIDUrEK$FSP3^HVa z8xYba0jju=hx0gv1a>OBD;oW~2)7qej?<4fE@6d(E|Y)L<&t107xYHl_w%gtri_SC zhmETdw+RqG%v%T!X$=utM)qB)6`{>2%-6S~%%{d%rUM4``C&6~6pql84f!)7um_gp zq@Y^l4^e;M`QGhYH*;e0deV7u6>`=wRUXj*)t56~;-MHgQz@H7pDN3+O*Rr~jf{~p zA_&NmC6Ny&XNf$22?kuGSet_|YDF&i$(srL$bJBX;WX`;?~V?ns=ESxg1R+UX}b(9 z2bUr6J=zH_NXf?!KMoG2jVqTo5(m=@Tu1K%*HK6^8B$7pkZgJ7&d8+KZ8xO>2c*A9 zDG&SBEk9)S$Qy9lPVzf1WyVT>TgR@z`p&K9Z&Ew9o+yGj$?8BBw?YO-q&L9R6g)vo zx7N=)Q5YbPKmtKz&lMunVY?aAwlT zXq~;L6m}4i4J`*8gb}UE3S*NUNN8gT=uSpV?436Uasn&%7NrWH41skLMA9siJP=$o zf*43qRBpRx&pM~gCp0Wf4;3doaM7}fWEdFX_>vYRM8K5G0gXY0rRoIlFp+hxAr}rP zD;#G-rJ6BRoNx;Cp%D8|4o5&#LK0U;+lJx5K}AG~BF#yyp~EozWKm)4@dNbZbT&&i z2NX0Z+@oIqDH+>9(273?nMsJ(LGE}u)y@vA&?2c4-@f(4_o*Z~&Xd=PVYJCeC(TA! zYqqNmkxa;uD%&rUeEdTJT9G`pA)AZ#GP-FJ-D3;x!IneNbQ!b@YA(AtCh>5KQvxVQ zZBb}S2}Rj*Yp>9TSh^U)Yo!8hRlziZ8Uk4XJ2rE?3K#7H4?@D#+clP=+S({3N=p*O zhN9{kn$?*~NKEOv3x<*!-$w+ONkBqW^Wj!F#!)HPhZNbtMstA~6p~G=B2tX^icES) zm)m?K5vePrCME0eYPL$e>@q0j<$9-zyc@Az zfJzKd`I#^dQAI?S<$R*B)Bv=U0@jNR2a@H0L#FaM7{%?sfsIFvJnim~6?jL%*4+t- z!&RCNnhH9d_wkt4<1m=CW_}&VAbm6MGNmdWiGda_nJy|S>f^;R9PgRaXh!O%|9(gJ zQ+`zuyQ8r2_v4#D%Jd`P~mFugu{oVU> zlQSaZW=1XU#OhLfM0-xyfR8WmC2t*9p?N!TkvbB!N&!d4iJU}PO+JBhQgb%UL-mo8 zs4s-Z0I4m~_6Tb8gfgtmj9nd}&aMu6Q7!KGlCL=UZrZ+Oo70;E=RF#f($fJPb&<`< z0Y83AUL7fblo)69XwPAq%EWtsscsY0o`4t&5%U?5887%y+4$X zC-e2cZ!K-y){SaWd1TAjj7J*m?_tPmGhiRJ96c7R^)bQMyuq^0V~0x{O&R)#aL~8F zhk^$?`+V|mky_NTa`I^(E`)!X@UIB?Q>lXWc$#)o&b-$meK|r=U=Lo8)gmp|U!-;G z%b;}*YbOMpyhm`zsX~!I>CNOUb6j##=&5a|<&65!j`}YUl9W)y^TC_7zVdxt9lTza zce_@IyLy(TmPa?EU?&c&$KHdwA2)UM$-aUft=4zOCnN9k&^e?hC|9@MfoJeDq=IgJ zPtIYr1CvDfc^v7{{CI|Y#yF7|leZ)kmGt~_XdHdO?v~_~iS~|^^I(N~`tajfCUIF_ zzTYD5&y(@uvyRQn-?g2jF9APRO+H9AxB#fAe4{7#^Fn!@KmSB*a(-Vd8Kr%8y??}O z87r6XjEoLs0Kxnz$)Eg1S|xqZb2?ew{?RUOMaGxOmB(89Qq^ZNx^houWE8#hUPj;E z9N>Cy zYzq&`=1owk5KKhrtcZBX>jf1+l2H--0 zV%8;lnPvSat)XaZ(Bbq38rr z1to|?b9J(L4hwV(2xunEVVbott+E1#>lnFx>(=i`@)jjBWWOdmBuVmu9kv2d!B*ZT z5VjCqsd6f7@db3-zPigvnV6EWor40cN9isHmE@#AnAXvV zNJdjug?0=qs9-V1JfmtZhqh?kD(OM718z&e9vrX^XF7!xFe-#qkpDPw&>d1X(T0*@g60EuDbVp@I-Lf7T*IL7#8~B? zWKDp!fs6_b1%SpG4FoA=qeOWbyjEZ(TFuUdJ4B-+nh9Q$ zpg&EI=*KEqgH>P*BT}NQl7E}wyaL{{3QhMiUH~|xsnjY;L?4dtB^87>LxL1o_3AKK z0WCml7tlmGswfD`67mCgkc&qwydqEom(bs^W3$9JjzeNnRfIB&BN$U-ahQ+NP$W3% zAQwGNGa-hYY9S`Y!0@x%U5BaSW}Tz*R^S^RfV&unLs6(K#OY93R7J2M0c|W}QqwdS zU97X#R=#}5ppn;3#|Zf zj8}9=w!Zmr-S?X1x&)}GWWNVej5IJ*!47a5Ct_a_a>cs##BYXLB46(pp}AZH30f*N zn*s|eXH&(`0N}v;PZ?^MX@7726Mol*^CvY?ZfHok#9Y!&??=uoAy>!fkK1H zbXYs66Hw~Kyuh#^3V|D_ECdSLA}DMW)C^ekP^amK);b#fytwTPF~VCG1tP%0C_QBD z=PhU+B~%6ZNKm28^XYeVcpU;&(1ZlCTD+Ve(ORktbw1I`(dS-&BeiCaELX~+)r=IU zWSL4xw=m>YXe>bou*26t+arWX6GD~r0_1>>;o%MpiF_tysGOU2V%RSCfv0LS?$7ul zl~3<6OQYLrQ6KhBYQv)=yIQ+5wAnR9+7|*YMp;$e-bgL#Mj@2mt%r0Mz?D+Q`;r{d z%5+GRgaJ}Cb*%RRZn2XnXH+FKCbb|MLe&4!>-|ask=B{oXjXdw;TEH-&r=H0e>%F7aTed&H1C6d)@UYhl z-}ln`5P*{a(l+905mX=T!1=YfOectCb;sTh0Yj*48!80ovO7mI!N!uC+<{+@)SnS> zA$y=&!!Fe1RV5k#4Wwivi`~v4GHKAlX|@;?)s? zoVxXH-3F3x$#2QiG!<|hxy+d{&Tliq`!fM;uJr|;!zTzMwbjq-FO*5^?tMjIoH=D1XG*+NKf9xDL<4}Hm+?yf5&ldrPMMNCCB6Z8 zQsKIZfQ)Q(6aX{MXmvzGrZwsH{FVNL0^lP^2}r72fW5*m7WSMo_#Ay4HVYS8_Ys3n zKBS9oHG!a~b0PslJ`$zE7GU2J4h$@lfA=OJo1ga`ojeuHIR2>(J$Ej<{q#=TDAO=$ zb!Nko1Y*Y-*Dp6@0TlXTV&$5?w&iPa(d0*DKtuThR+-)f@_-@dmDN4k>4}xFyfA>F zVDoS#N&lh<1+9UCz+TkmAF=w`q~C$@XC4@THa-A(UY>YL-guYVl=l*Us^Iy%0>QqS*&Skr8cU)wM`shuWKogBla&tE&`{7wUf1geev=^{{1zsuQmymt$~G z@zxU-kHFTFXN}jrIr^wi-u)gQmPbbDpVO}ONI|q>(I8*bc}9{YB0bD^tO(52WFq&G z?gEhnb5#de2Gs(SPSG7zOInBh6mS>asL?R9qGb%yQehwtVaP(k42}W#6o8p2rB`S~ zm`k7r2%1Y^gtSwc@HL1i#VIhLsp9EA2URR79LQ>z_<@iU6B*?iV8bYmu)@MtnM@fi z*2%FGK~i%IXME+_Cq!7J(&Az2jv>Sj(~g4<48?|FuRAa?3;+hGC{}jBM<_sAnPA00 zq7l&OeRYnJ_)pvl2^Ljp!A3{-`tP?L(DkZZJvn4u+U`;aBM&{>q zSj!Os@@S$lzt+Qy)uJ#%9Di*Ds+x1VNwEM_X^@&w4!GI6psEn`Fbz3GizqCB7Q_e- z*Q35T5H*VpGNZSMIRv|$GUzp^1g>|mOn?siWk87$09laV1VyUKn*n1r4p}NQu8?@_ z(IKv(w{yi&soKYFI)vp$GsG#5-)QxZ}oui^gQB&S3?$l>(ja$TreBz!H%OV&-OiB@)fcpv@a=S>eom}9da?OgF7^|I%#uPUMLo%BxIz1vCqy=*= zVhtyvT42})8P23E(*!e#X%Vb#nH-}l2IfU9RYruOQH51%Ht%xOsSE`;*QD}0uv~BP z9g+f#;{w|pZ${{PQE-BFg;H`b1(?PJ6B^)93xMkQL#~p2Nlw<_%aKlbcu?X&!CAjj zrW<)^E;iI22%f(C@o>q^f|3qa)CAtCE4s6| z3Ik{cXlVxbVGn5mrxkz+Q#&w;Okm7pjg5k3<%a1(FwLnj5p#8nc{S<~6+<&bK^JM& zY?n>b41^w}*jq9LC0L#eDA&n(AI0b=w2E}3hGDR|92KStIEZ!fBJn*p8oM9+J|GCH zcpr3O3`A5NFGu)@_Po3vVIe*AC}dL{RtvRBX8_WhBrTbKr~q0O##$;5*Aw6P`37Pb z)O8QDg=LB{%p07Ls3OwBUIUI)&SEHvNFt{NAT|^0WF}MK2wJEc#-wRx-9=XW8=wbN z$rFm&2(J@fJw>A7?Tq`(%f+3lO14bF+YbWlIz-hw+7Iq|aG9`BUBBAIY^Zg?ZJp31 zp(l%XY>~6&7*a=};7?_0mXK#eLncR=DRd`{@t{*jmZe)6w3#iq5c11`gp^0|Te;IZ zT9kcQeq|r61{a!Uet9&uEk)PLI@S8JNDxCLU}OE2DMdFK37*ht>6Y@hW= z2U2BSr!2I0CC0n~MoYcC(V|?D05*B7l{f13A1u7#-@w`%qyfsoo1%sEdS-R2q^!h` zBJ_udCi0=(X&qHOR9d;ErT*I2wOQ4?8Z0Zz#G8R%YPF{FmY!5*P)Yp)R+Ubekuc^c z5pi|&Z~Kn(NsE(?9sc)>cQeY-#|syfeY!1l_kGnt_+D%1$+hU?p28ig>(K2z^6gcl zq|f_a)zY`xNUCcebozQ=N-N6PR|FZ zFVjkufkMX7$H9a+D*aGj=#>d`e)VF{gwi#Me=ERB$;gdAOMjzp?6xH>wPO>ZeG+T& z3OskeRliT}>hSxDVu#ITg@A~IM`9%fP3E4I6FDzG1CQbirI0Tg#&!!InJSpZG_Yp< zXwl!2`CW&hg}_W0`t#nC;8vSf6KUhDRm|MLfTDNlY{um^EdDV6Q(emT8L*r)uEG>6Z0a^Nc zxpdSMJGuTpJ@GmByVvqp-uIZbB+$eE_@@1DY&X~b>0`6-j=g81KRTrM$fbJPr=8DCNEd(->& zroPhIw~l`VjB205?+`5QJ^6Wk=97>o{aF&N%W63_7S0ZmrNAdT;){FNJz@1VCOl#l z-M_r>^o~jMAXhyx$B~kDE@>Gs$L(0s0!3M+O)(OwV8nZ3Z(k$-NPW?r%YX36ohJ%m zh425&lQTEoRoT_?OP=I1Px)Z;Qh(z^N;$6IM=WdGjM)#ewd#j_nb9mu^^w!b@;ZL4 z{7#hqwd@PkduP{qLu=TTm9Xw7fWG-aSee{!@p>=@bNy(@^6Jhc=Th}Uq0C@&g)lL` zagPdNM{aPT27U_je(uy7;cdJrBoI~P_5T=Z(q;znUh-oy~y z49G6u4=ZfVf=;Qrs3xwI98}!_uJ()XU<^XuT$Ag40{T11ZIjXsj^xWhSCf zomOVDf6_u56$Zc*s9Rn40~ryt0Iz4u9QBaIHI6TZPpXB9+=qiB3^+xlSVWJNEULni z$Xs35VE2WlFv)Z=mQ@$;2y2XnIE~6w=QV!ctdj`%ssw!~T7JXBC5;f{4S)78LDTs?kZcDc1^SI|jYRsvNVIRw@w> z5FCJ|8TJcQon`U>mV%hWy2Th?M&bT;b26p5cyS-XNr*`j^lHiQt~c07M9gE_u(;at ztkhaimhK$cf!J#lr=a9y$i+sH5aVSF;F6Dyvb!}oQW{kav5s!Y)x%Qf_&vi&Et2`y zcy_3Y8y!0}ry0dMpt^{u)WW)pQH^v?0t1rs9W6rhtaGB^Of_6uwOVH&#>yA;T)|}t zPJT`Qu3v|*vBI2F0>>fNa>Djs8nnD*)WtMzqz-7Vo>4^3p_eu#ngZJq*P2hO z&9X*CHR=z~kN3iCphJ`pD?|`4bYP@Ql%QKVu*NzE>>T+HRO(>ML_q~To$gSf#glX< ziLu_%#~CKrjyfq7FuyhLU%x{k4DD-HvO_6}GQrFzv_U=C7_1$0EbrK)8w?n$pvtf$ zsah~XIIZNTMHL-_ubs@mc{h7mO`vD^8(d*}DYZ89}mCuGmV{pgDQTu#C+d zSlnSz&;_^_FrdR#W@t@6{5~EddtST13&-Q=92 zIz8~EKbOG3ySWww8jHC{4FHB=X37*lF}Ay$EF*a!vsH|gaFDG}VHM1y#T_i>U%tR5M(KmWR2s1qWzMf-@ng5|-EmjS+%nG5fx@5Cj0Y z6_o3+E^k%CEN%o13>l#;!z>A@zoPxSdDK+>=jDDv9B|vLzqrI;otV)%@ zl$bn3vZ(yfft-<{ss#=u#NVS`vq|^GlFhtMKHb4G`6k#E3moEFA;6Uv)Nf1yK?_p# z)7)z-SR-oLYNN~*M=Lq68?fz`dRyQ&-e?^^7=y=U)j zGmFQMGV2^z+EyyQ@K9*dC}~MwEiM`NvoX`OX`Oh&oToS4dSKRjBg~wC!){nO|xAto5%{g#hXLx81^TyZNRCCFSqEcTaEXb-UEEg0)FYwoOPbvdWCN zjHb?$bIY4vJpp(OI667E;J1meoN4x!>3hMv2*Btet|{1C4!2$?Z!wzkx~={(e_rbS zuP6Ib{YOJjnG3YJHH+m}{s=5BsRFBI&4SyazkX;$i&a18DL|HqAKbwI;8#CO--Y~R zH~stg+6Ae)=9qBHjsLlJ68D~7R<_GL(78f?zF^O7_ZSPU;40(v+__El_br|agXc(R zrx@$%{P69v&bNdv>tuQPOlYL%s_P zx9~aqqjTRrYLs5rQg4Lh`qJy_Z{5%~p;sO=b-h-8LndC3G<4G~zuGkSUzgR-npG&w zYgsn3UoUuT`Z4Kbxv?hREd9_duW7noR#0f%R`A=hY4t@GBwn|7Wom z=NHCa90wl`994N>-SXG1B4Q1^0o=bz64O4rWy6T~3sx?F#vC1Z3;e|T!~S&H&yi} ztM#Xn?|2I>NjTWp*H-#hFdza@d_6g>v#&9ElJ#sF{8GUOZ1Otr0b92VFk-_iEfDPj zp!npmmW}C$UV32+AikgX?Y#~Rj*Zt%vYNhFHtm!9dxO!eem;Fq*)zmy`T+kH;MZfrZ~C8%YaS9b^t3D^putSCvv3;uq{{h z>QUXPrga_!V8~|+zYuIMGFG=>QC54*e;cbgv65VEVpwxg@oEj5tkbjv)>$l>0tV{{ zTVim*=>}*vNp-=B6&5m{PjQH9qt#JPH8Q5bhfK}Xl>TYI!RsO*JOd7xZ0hvusCWm6 zX-Y6zm`f`Fq*zWEnIx8PWYwXdR^O4aKAacxI^|!06-e13P^m_<5!Mg1}E3LqCuKTbe~*|78lii<39vCev8N1~I!DT{RiP^1u_ zn5+-C)Ffw>Y8tbh@03gkjfxP@Gca^M#&@dKtS(n=p_F820nPHFARZ>`s|x&pG+6Ik zp!NzJ6_Tz|ipFH~LeuL`zK%{nEixVl#xV}F;+*M7^;{d0SVzDgp`?Izugp8RTj)Hd zeubnv_j639SQ%z;d2YA_%ljFsk>j0~Ym54G>l)P6J=KiH04Q3VgqyLViDf8efg{>5 z6SQfi74t$xxon+^Re;hhj!-M6j7 zBOvHvg=W`tE`~xr%^0G~*5env8S2TF9WNZMw$O08n(}DVQ))u z-GX6CW0?#riYoG9OEu_VE6fgvUOxuDgaPGMM9gR>kbJ3zV!!$){{Cy zk1-f_*)fVn8x$LXUINcLXl;t+q2_--L~W$l9Y}`(&N49!fLDfflhKfZOQ$P=0<0oK zzw;V2GW3uWig)SsI}zQ{{z%|$@32o`*(t1E;>)v?9=c1dd& zLS4y262*s~k+}3)vyAtI5-~2x@g%(IPIRC(y!b(Kt^0m={=aLX$TWVGoM_0}Hk5@! zq9-J0!$3+dM;KmHi?R$5U&_OVo~o_YO}$=o=4k~+bbL9bjFW{OBSQyAp)9Qf{Uo9l zycg-n@RmzR&O`zwNJ~MwyyMq4dJ#2KE^gEEL`F?#nhWZMIeF8q=acb0d>be7lEqW) z{B(R6x9Q><3!-^R&f8o63OH$HM)$AE_bllCbKlskqP|*Re~ovVHtD%phiZCI-x&17 z`lsCTcC-!PQ*Q$QN=r#=dM!RFr>C{{wAT9W^(ObJ3#UF`gM#-KeV)JOcD4BKqi6DF z;>CH-EVPRCChK5pFF)t#?2q4RU7^iEOR7)KOzP_VKtHIjxb4*3lqH@0d3j4Jd*`go z`?+2eJXtHrT3?p02!NEY$RGO4g0HgBE`J}A(jw1g z^vUo)UA2bRkD9z|TyFyMe1UxbfztRscls*?c-@Z226jE%hvaSV|G0meI-)aH4+huU z8jgI7N8<%^I^H;f`$Ngw7c5B1>zgy(^ZPq{Q)e$x%R0N%gNsfkl@%TC*JlAj5~ z6P#(xocr5Z5B&7ICx3UMcFYf^CN6iEE}!tbTY#&YGhU1)`4iv!LHAF3BKP0W0$z-x zTepRBH=X9ic_#P!Xf0kPJt{wq9%(?bkm1kR`{8@5ZY?ROFYnx2wx|h^oNuP_kiM(4 ztTXR47#=;nMX3vhdb&~nbPcSKv;XU_`s?~z#^Tg2by>lwf`X#hiM;ZyBgKuMI#ekC@LJ{l?s)O(!3FW$E~X zp;I@&2T&(*BmXt6o1Z;uYVLgnHV}QeRG7L`{o6-RB-*vOzdv%-ya)Fkz9D!zmTb-Y?1%hH+hq{&<=WV>Ku2tA?C{4b`P%j8KM)`H=l8}Y z2ViT1p7z-tx(#m&R{9&xO!n?0OW6B!x(mKY4uaj94?NP5HSYbjeMte^?Dz_?JwA=* zo#_pXEqZBL;FB+w2R`}p3HYGVNB5V00`7yAPgMOaIsb_&I0JZ?s{RWC|G_cf4)_B2 z58gVpq0b`db>4k|UI9{0UIzxtw~v9r^0i}|AllUeE8n-}ujy;Nbyu)&W9icpcn=2T zE{Ke-&z6;*{sb`ZnVTM;THi0P+hz7IeE1kd*3*?;`u|DIf8aF338Q3r)Bzgs_wi-(=&D00hypLus8c)dcsd_-C|L z_}@Le!oF>RHFrkW;RM;qCHiO%{HMIawJEf0<*+R>m@%?ZJ)!|u96^Hms9FeKgu?)* zT5esesaKe!4udz6Xj5~k&Jns*(N;X}&?7U{Xt_$zD}^YwR$>5$$cZ$|4Ks=#%;0Gq zvCL?`IiD>MU`Ymyh5MxGj#zk{W+huH4FJWWbW>|<$MZKtauY;HbHWHjxk?eg6l;PC zhR8b*+rou86ww(8e8xI;MNqjYJpzbwM*XjkZhQB6< zQxhV_a1mD2W$7{6N@PQm`AVxO5oE5z7ds4%mgPjx??2c`JN$V7_>PJsXQxkfH_!N^)Ql@osvEQfu$E$s78gP zDe?-jEhM>AT9CT@M1F)9X^N4bReHYWF5sO9}sB1?x2R$M$M@jvxe#;=j$!9 z(pD|2*&3LE)4@4R!CEz}4p-sk>IzhW1z9~584i{(9;)P`VVr>DJzzzzwoin92}6@F zgxxe@4aTVfcIyI-xM4~%<)&qdN*6lc3w&?0jD^*lTXkgfxvnh|#sVxI7K00h%`+GVEg(9{;ohCx;~72lL*D1Gy#5>4yQW4;>j132)TZ zp{QvgY8>AvpxQh}Di-QOsAR0?KQL++M|gFkU1KecR>$HX*1+Xn&(>j1h{FuUK3_8Y z9lk{z?;OKLC-H6vn3g%ZNa9uaP)Pc#30n#|_a=XxzOrh)T!$G;eM~!G(uv>82<0Y( z59=6<6JuhsEPWa@1rYg#QUT|X@^^vs%GovpEqn@8`XDg<^$cPsMp zx^P76L3&a(t|B6H@ndyQ@Ln$ROI|ARkC8o9lAI+C!8n!o7w11BDb?zN3FEgOY!3zk)mTaeKs#1bFM%R+xd5BtZc`JGypW=%xkHe697&G6o? z)l^mGRaM!kDbx&s~3j>r0A^MPuC)O1Y{2-TuDmJfBwAd;OTP z{y&(#@|G?&q%To-qrTAHhYp-rRdzfyy~�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
eamdhMpv*? z0do#U6tp59fC~%gd_{I7-M#3M`rZL{|%@q1xX015^C_D1c#(#W_N6_tThtGCA>UdkY$Cc z)B$W0;}VywWC0F1*ap8onx+LAk?KcXkZb|2<6roF&z)WUv1M8G@m}BSr`Oi(%$@uH z-Z|&obI+e11#6&K(F_Bb@^Q|+QIJZjIjE^(4S40KA{3iC1}L#`-$7yErTt9c&*yls zPB75!)IxZqjD#d0RKO-G7WHcAJ(e*S$I)4%ZPe=2MSvg83PF3yyjzfsQUhNP@>o1< zJkj`D(_y_{?o`?!4`N$h6xHNyH4{z3XR9v5r$&QoP_-KVt8`{6KvV}G5F(9yLA6n( zTH#GtUYPz!a51M_k4cTrZPzVFM#$BwZGl#$%@3In1EM!!17Ct{$zcU31?PEW$IkkD zCl;6vfe{>IRq552Y+hriLPS+CkXU4AX;ATD$+a4A6LjCN5ZmA;-o()JiRu_c772Yx z@-%&;0(+Oyr+eCr=(MNheI1u+5dSyy>f7bz&{8Xv3-|&#ow?7QiJM=r~S`c(bE-Jbe#e5QF%r z&FP!PPP6IxgkYPi9^)bkO&H*E!QHyS)ki&IbgM!_$M9chSiqk*=@33_mkoQv$^^H_ zNK_ry9yW>{t>vIM=Icc7Xp*F!s#9N*0ev7QyzAl&V2KpL`RX-`SdFt`LS+YZ%ZaBohK5BMALNpofU!%7kHeC z6W2a%Pg#6z-3jf5bvuGZ!3AYi4^;JC1%bP=J;5D!uQC<{XO*!tSf~TG7p&1v;8eV0 ziM|<58#~(nG+NdEjPvwKrJ=}tbz!sGRk^?C!^MAZJk?&cdG^6G9nOdSOE!O4-I?5Y z(9HX3a&zaw&1Vw_-$-nJ$vK-a7asiEx4coDrCYoVNt%MSWqr{db8}_!7Kym(g z<+RiB)KG6>RidhMNoD)yMG7=2PG>8!tF8HA=i$YN`YZMy+?jZ$?-}QwPx|_1zwv?j zbYjVCCl;SM*t7XWGQ7OmIQUv;@{PnB2b=p3Cr>2%liSQqJ$Y|9ixdEOk~1hOgFP$g z!gjB`eO=WxP`3DVrLu~2N8sVHsG;iaB}Sg7O@{US`$IZJaKRf z8k9UH4n1^qtoY<(x#W(pSDgc=(0h!*uAG8F*pXU84hhM`19R>Z?Ap=Q3ok%>lgGoK zZc!gDtx}QLVHU2Tq8Xj}O2O&1$s*_KX#a9(JN&xqZ|vNcX8m*UCnunCun2;UkHVt- z3g-^e)Lb1{Ph~@Y!f_QNU_Ii)w_aCB>r%PTzYfX~b%*tn*>xGMOK3XW@w363$%Z|& zBEG{kBX(XLJ$-8~R5f8e)JbbOkTW3dunGA{c6nWe(TOe<4idHgd*}}~C+>@$UXdt* z&Cs(j9Qrl7_+O%2O=q09noiQ+%fBJ}5pP1C^6&9?3uG!!_FTK+!ycHXdSidiP(NvE zIxo!{n(-pkv+(sp1)7Z17sC3!0s+^weNb3;POECp>>;rN$b>-D0MfRwCn_X3orDb% z0FLuvkjiRsY8_Wgv+$ZZiI^G%vIblpELCQiP z8AutnLy=uJQ5JD+>sfF>@jNGjaKp!1ZOjdHOag1^gp~D0R-24)8T3s zly5a}!y8^4A7wx|&>%CV6SN-E+iKJSML_{3Bo0| zh~ucBDOk{SPMS`HK;ol$m(|LmXbD!_@r1dBok2*3fU<=J9{pjEbE*?lrV#=ZVUs@q8oNh4TY&0aHgkX3)~(8){`wrtH}w6OUPWO#Yco374sv- zE=_Po1h-ImrQCAjhx@+*;Zh=_FbX=f-)Jt#G$wEz7Kp@~5f7*63wZ^lVjHy`rFgj` zyXRktbQ~xZkV6sZlR#8hFrb*pqama{Kv+-rIZ)feXrNFO=Wvd#+yC<&qS7#Q$jPM? z+)$lZA1bob4GkX?1*b<2B$l{mF|_YsSPg2-5Z#RQDEX)WT5dkjC&+Y@4g>+BWhpCw zGb97Xx>;t@4IR+0w@}lV;6{M-sW1e~5Kt@4I+_Rx9{b+;zvo={exQU58Dta)PXvud z21!$fQEQl7R8a(sluq;~XMt?oclk8dCkzRQc zgQ~O5?0ajP#AD>Jy>nm4G$OE4q43lv-8zx;X3kMPEj1kd3Gq)PY*?DD(JC zaD%2&EfJ!kX&&g2Oa0^8sdzvnd3dC9Wr|MMNw>p+c}24C2rxMVRv5jCpyEszj${$m zbxl+lX4BFg-H~+x+kH+hCpA(~u>mL)8u;c>Gc`riQmjuP{T#tDZ}=@+0n`}T0w{tq zCUV4h^bWa@lE~Uh2gc4#3_S$+IE*k@cQC)ByOgdCGXu7%BK&L7wg|W`)F~HVxuEM-0 z%gn`Um9b%;+29M z41sBIE;6be#SviUwYtn8I}`jOLyK-Rn2OA?go4`4O^~vCCx;(x#p-B~IUF3LPJ;*9Q(mTk^YwY4yy# zg`h&9q_LiqG#-GG#tBl=Xar$>&)STk%m*Jhp`U@FOdV82i%vdqa5si@**RFACS4{} z>YTxpIzjk2D}Lo_b~piexdGK;!oa2j(-hDl>4EWb5H0RyZ}pj5D(?IFr4SC*^2yi@ z)HBPVG6OBleWZn{V!^TfU9BDwK!+SNdE+& zcYp^N&;mTF#mA=mV7}QB7__kQ)gAeC%4Vo{X-Er8DwZA;U{=P0fHd#`wwIg+7z413 z6!hUUOaMn?T=4RD-kM4ZSsXx0HSZ_B$z2}$uJK$R)D1o&-~o&y6ZudN=YaVn@&oFP zh-9IfhwM86VG4jXC_W8{C4uF@WA$~%NU@9{WJ+l*0o#gOnvHlUO~ZA?QoVt_%H$&u z0z(n}fY=C($O77cHnZlt5%@fj-OFiUD^s%&EOH&wW0bq@`<3ATcmF(An6)*6^V8RH`iUlmMhd4dO>?hJVqGZfXgbMQs z4oaah=0HM9Knzr^8wOVWfvHxY239WG#DYY>5<@ZI%EP!okk=)_GI&c^{OF!0)N1iG z?*IcxXz@rtjK>JY!E_(u!Ek}#wTHv1HT18 zoCQ+rK=aa1M4_0JQUO8Zu&S(~`HZOsTT6t1-5Q4LVP&v7=nl%{AQ93|LX1{f6|;f95wa^-zffD zAOO)@T0ICqC^<|czSOW{G_z?MVYo3C@D3%FKmk#9{8aXs5wGP8?SFS;V6m?yq@8J&lK zl2qmDZWt<(V>r|(01Rsf8;Ddvz-MvW0d>VTkZw5YFm=6BkWi$qZ!wpGz2Xdo6-fs9 zTTBKQ)LR{3UGR+ff_Y$iW0T%4gXbb!C+k#{g?%3Sj{UgdI7)}nWg&*9)EnkB<7^9LU6l;NL#}9tq9&Xd<7>cJp=~IcXKh1TGy;X8ahMtuhC4(Z zO9(9vp8JABXPz9hqhCa-j{ld#tRs;X-?K9(dibTDSuuHZ{x%8*#H zF(y0o&_2+X@hwKAaj=!UER+@LSgtAD6|<^8Sol0W3VX~F9~GO$2St#TBHwx zeL?JM);c=(MEFc`Ip@;^1I{kEP`L*uVG-{YI6U)dM!>5Da1;`Zc!PM!kSN*l0X7K2 zzJW3OF3)D!-24!Zk?AeS+T@{xiXy7Nggh;OYSP?Nhsx%;Lquc7);z{f#R#H3 zz_)A|+#w)LfzXn3S<+@;2Rk5ED*Hep-ddfLL%@W{=Lm{fuuX?9n56_!t~G_z3;Ld4 zuz}DiOA-O9qefc1gM4lz1CNwluml_yqVCU1r%EB7IIsB6(&GoyE64a0-7zfwjXs4} zEEyg@s37nr+LYVo&Y@Zipn6LNyu+TiSiwu|qv0Oit&kF@gT)j^zW&#oY+wr9$Os`d z{DH6}*N@@jn9U1@kIb!*n=|Zgf+Hqs9*pJ`>n&VAVgl z9cS=f0pMT+_HYq@JMnnoL81f$av%_shYxbiwj8cVLld$-FHdK9G@=CIwP{W7(H0;Nv>I6%_= z!xnFlDQ8+O(9{uNehe#422HBNJsWn3lp04>Y!p~#LV{Ay_wIDQ63qONWvH+ zP)1bbQiUvyBGwWP(k@u1fp%PS$v%?E`Z8EwFtHiv!9ElJs$r!O1TuDI2BHDZ$dIRI zuuqQ>9jq%T#cTo_0t}(1V{Z%hE1>6LrJ{hp|E`^w7?==z(}2g>Hx1a6mt~+>XyKO& zx4uGl0A&}URqjl@_LyM;Lz>WMtAr?qUKw7l(^hfe<7x#k?&diMlql_RQwki_A2Ze{ z*a9!YJ$8@S1!K=>RM7qrJ5z^8yH^_67h|cCN7-^lo0+e59@KRmsEu$i{vmKcz}Ww; zOl(+h_J8JGq?C8a8g|ofqI?)dti!IJY9MovFbEmDFN&_nw7o|Q0s`K$-SO;=ZyK>R z3N=a~s-ewDytcs6P4t3vYukXOEB6HyN2qn0jpW?wg{Mt(3lQ~zc#L+omMp{6p@I>M zk+p*3s0>fo_+pYRbb?-Dcg!6_$b&MI&};pAZVRU8~3J@KdYfJBt!ypeuVEWj5kGvYH|92Uwt93e@%5{0>j_b ze7tpuxzN^QN>ENH$J)O(9T*Fs979bY-H3QGlbT!(5=@h^`^Pe|xww&-nr}jUqfNJ_ zHexj`#aJ^({DEUKOnd}wbV zVJPjGV$;I9;o>|Od0bRmVW{4hcz%UfmFjeqgmp>Z3&=#TZAXIM4QPM^pIoYwQWu(v zvc~k*KWEy`GK0$rCZ?Jy+*9eP4eC z-BD9_yh$aKc6lbyL?Mfueg=2TgPu_s==q_9t|Oo#U}*phBy`u8q%+E#y>&0N`gh*= z6H$%`C=Uk+IDxK*(KKGJ)g>L~x?*JKfr)O!d0DnO*_O%P7q3HTDufvL(+xdBsIt|3 z=UZRWa+Vu`KmcDj%ER{yA_13zfH$IIVrjNj$69V`wi6fP0k2shsE(8G%}=aTz4>ZG zEYj#KOmttnru$52{-=R^qfbPS;71cKQYE@b?l$j{9ur{$#98GKgJQKw9v7^ zU^=i{)r0Hq+NUh=T6-{f5#BTMNdRLRDo+j86;G7 zyZmzQu>@aTA1iB@;Zd9)+oUd$(S+O;$7p|>aHVzf8j~-2&1U=9wZ%F*~}iqn})KN)#?j^)w_cb?VvLSScGgO zgN$_WufUkJ^X)uH0<2Nc`@&6nGB8~|)UCW4do}jXE8UE@9(%L8TWyYAm8T|4;n{Ud zBV5(@?7r<~G^54YZ9bKC&(L?~<0K&ew79^jLTJC(kqbg7pstDP2(fl5z0w`<2yk&^zZ7Xk(%b5Od%nZ2`1bki0ku6?x#i3=cNP}M~&iW4`! zR(+Bf^(V76vc33eA%qP+DI}YSbRl!lIb;r+EGf<%v84EFQOA964XGU&ONxcK8_AWi zr0Brm#51F;J#8xLgENfAKA3zW8H2s|!jfY1-LUoq>rD@U@c9G*-g=r`N&=qi%pk%8O0j%I`!}4%y zQn7_VftCQXo-YtoU2gJwa~fg?qnFqKGs}y$T8#^;mZtKWDVM`ygk$)DAf&inriN_z zfrR)ez|j<+uFA_D5OB}s)+ba*)yl>X_g@x^z}gdM0DCfzQ#_XqX>4CY7i>84Qc<)c z@qp)!BskUN9ZL=gN#G&d&h{P&UH>%apbh%{ngO8(tKAQSC7R)Yui-4!0H(7QzA6;5 zbl_`&N|3o?Ii-SZQHyh98ZgBn{+AzIf*wOM-QWT+ml*;3R*Lz(j;KW%bxZEmc|s@~ z;3caVV$@whE`TutLa&YCpDm_-w$@{Tc!4-2+F4=i9U(c=5h7fP-Jut8Z6S2t=7DTP z8+X)OdUbmB9w0q38i_O_XUhh}>%D|5B)(t@w@9>NhPQyvP71}M>GyT&c>>qyEl*R4?pKocd~o?ZKuRe~@p5cT823m*SWO6^QunPh{&wIjBQ z13UkbrU`4`!d4-Lalx>P4vilNKkgV%TcrozK~sv!u=^B9fZzo^sHSd?A5tPK4N&wX zEmPo;K>`NwWv?_L>a9k+O?(e)bFCe)<5T27bEp!-X?f5qyHrPHu{rSle#Fh?0_8Swbo!*<6tCgt~Ww!(&udzD`Orp-&^3xrxlMGw@zO9 zcNhXqg#k|ka>=l8)T)S)gy!XXYP*ey8QiDvI9q~4+hh#$Ci}u-e2&;^iibb^Qh08# zr%Vi#_XMj;f`OSm)oaVbqES?~D7+{U0zptxVGo82d#bnlTkKP1x%qwiT6~E!7cRl? z4{)&D5^FC>Y^ST(G`QZ(?+jE7)->jK-cqoqrcC_b^9$aKmxkg0Ar_DSd!^YD+bteI z!mzs7EZDX3V==tSEUG(jNY$1^dzZMi@TO>6NyVGh z$D>Cb?Qt<@ZP_7l3rNGc9exl@^XJd2vzxZ6veR7Bv|H_XU~$dD$IWlO7kl4%q;b>6 z(wyz}s~VfjAM6sFLrwX&K)olv*L-Sb@_lD(&9~l*e`nG3*GsAb6?1|)_8w(V83a)m zl+Au+PT3Oec=WyQJ@a?N{b=&)=+?rDHIQ0884NE9H?7U>w|nhJ3lH0C%g%;_vtQX0 zTvIkwmRl5F(zRRMqn@6JHKN8r3*Npyxy$_YHuLtHByg+T)@Gs5_<^#F?8{W6~)O;%5eCk(ai-JXEfgIZotqwM5vw{_a zWlDCRb~L#wxI4JEu&;Y7%xNoq(Nl`Jq`O4iWG68gYvRes^Cup0_^gTFZgcIdzA-&&XSP6dsoDKPjSsF>0vYD=B!EKSNz&%3~vC*c65}rd2AAmOM&h|pp39WFS#Us6Ci#xfd zn8$ssIffJi70uf~wB=r3I0$VkuGY3ddV*F{c`zloMh>H8qDWm@DZX<9F9A8L#jsKd z1SdNIR1gYH0;IWS1&dm&(O?p9sTcHfPm?km5jGfk0%(gstk;FHFTyN+E_+Rj5(KJSwoN zL%LuxS`A%IP->RVhe|OXaOY_WdaI7pl+$?|<|W7uW*`~rR={-uVME=Fh~8S8%L#bF zqOhUn2|{Z}HkYk7*uZ~bPTKHZY^siKDLb-TP56eN>HpiyBpD+Mk_U}L30NjxjJgGS z!Q!7&J(BD|ca+EB=@g)~$KUAW9FGM%vt+R?YBu`|HpKW!#hy|RmBmW?g)1 zAZ|f^W62R02OA1n6wqd~Awr4e#9<6CfBC>vO#-tBZp}feV{JsdD)CF%e~_0vxTEl| z;w|L@Ie|nh3ydxu%`R4#x0M+d*fPAO;tHQxvf3}Q)BYjY!1+g`-aN>i{ z#VP2}aD-^#gTgH5cLtsM+KnLSIY+hzZ-p*t($gwxagUAsj#UEQ5bV=)Tm)Yox)p$z z8^2fbz{ahvbBo30ZAQScwyDLmu3|D&f4CNElrIe%%IO}5=FRvy5I#p#vG6ghc`wde6KV*`kTGb^;KFw`DU!y-)M^4Lsg zd$ZMETW`eta&mmPh(XUvOlk7m4IWuY<|TP9yl$$J?QCsKc7-Eqj|gI~EKA5&Lv=AH zu)&KBr3CYfKJoFeYzJtYR^UlKA|j;3B2k(mJEdlPyVjP~kess{ZZenH zHvP;6>uXm(8Lr%+ zwb;EI|Gi#K9!r$0zg-Qt#FaU>V)dvY|Kj0_t76y0f$(z9ZVQ>HUqpn_kS> z+qkZAUt@PoOZ@%#?>4;UZ20N2TTZJhPrcf?DIUl?SYUHA+%oqJkyv0P?o&GR6>!T=#752#XZ60<>xWD&v~k9hmIcKJPT9o; zgGN+#D(4(71CJ|QcC~+97%Drj%l93Hoa{Dod3GI+1Aj)xf#1NT<=gQ3+6j@LGbHlU ztDnwU-O_zJXBl1Ue%<*|*0IE?ohz{CfDlg!P7(hoyyWS@bIG%_&t?s+Kl`kIX#H=W z^?&k%)1b80uZIi!^+cY9Prdx$lbcTU;L`iy1K;ca@KbVU^24?LH+@!Ww%qg?gnw>= zI}ol!xNB z3`!##%Hx2=C15N-@!sZBC=Sdt6ZD&-cmSrwuw%)`5|>C%g`g!7a+FZ_(^+0F3!E1O zAD;q_Bgi^~_xpGV_4tD>oW*NEe1I(q16!|bGXZIRUW4$8%3HvNgkMozqyu&iOn;L1 zd2Ah27YGQT$y!YYjR}+xY?i1den7aWu#=~h0(NIn2Rj$!LLhx4-c0gsqAu!+ zE?=eK5U!w3Y1J)(Qy`Y%$?skrpW@buGT}!Q!9m#~@j_82#efDxkx0a7NYr@bA)Z=< zD%)hFmoT9CX$xUgR0%b~UP`h8-I{)DsFQcQ`erCE{XKo*?&}Jz|M? zI3>%93pzv%v)Jqft!ox$UQkMiIC3};WhpZ8BflSYkCM(AiKaW3jBw*3eov}*j$nn{ z=4KK~Avb~<6M;Pn)-uz5yJY9cNMzCvcL@t1GdLi?Yu?K=0zEl5jA}-Z8weg8{hoS# zfsngkbLI_IMU-R#NPf4ymdAn-k}*^H;Z>QrVA)v7n1oDV&6U^ybA?~KG&4BVUbhj$ z86=P_nOyjN{V14`S;z<>9uVa*SUCY;lJU(+e9jJe_9oN;0ako8ZGJVnJ%n%M{yHzb z&~)_V;Z;yw#_ccp804?p7W&X-NMg{Giu2k_+30}#Ee1pp!Z7sOf|M9FAmShN7jf33 zw8MeO4bGz>h=XkoiPgg8h+mz(DGx0r=^U8X*c}Xk0_E?o!}rKl?q7};Lx_PpTlVK* zxTfotQMZg*P)KNd={zJvqL2rMz@_bI_o%wLftUY%jCgGBM4BaO_vkOp>ZX&W%pugd zLbQY{m-yLX6_u8DSUSc#`WW@rU)ct*BotehrM-S-+=VcaRYH_1F3-S=#~9Jry3wMs zP*Qb8W3L-=F*2gq3U$~OBJ^)ZxfuD;&ik^qsU#J)PRrovu_pQl1O#J)#EaDMtW+=rK76tS`=>+8&JZGTWlGgy` zWZsv1Qriz;!Co)`rwoT*UO#=j63?yBT0@wMsb5g?RLR;4X~a;;qbi83esIcp?CyzV z6oSKGe@Xr$2{{HrCc_8?x`Sho!(%(|V>k$2 zq%xA2<7IIX17Qe=Zf0vY-aa*h3AEADmSZr1>s29*FwRT1zwB5dHaxo{H>0N9jr4Of z2LJFsMiPwNrNQM$1ek2|Zb|6C0W%dh_G>~AU>mF;06Ye|-RM||pr}S$oXBA54HRh! zX-W_W%x)qvk_MZ0y0C~4@kAE<9GfRjc}{b8B&Hw24t_gbMQdPGo`hRTjNtX+$$xS2 z?FqO33tgA8jg-m-{de3zj`7Y7AY@s?eIC~ChzAKmzHa5fMIbE(iiLqU?j23&XNt#Y z>vSI^d`g%Q$s@e-+qrbaJBctk>ycFIZ|8rZMWSt=50FiwGw@&ymm0%+hY54s=;tSV zKm79lH|8TJ-|rmz;z;2f5PnhNx1!Ys9c%V#VD zp9^4%Kt2IOSc{|&QUUZjCu<1A{Ew%`&WRoW@yH`k_z6*g0Qpob{*a#vO{0t9e5fwP zjzflHE_k!F_rSSC`EXiw_>OJ{e%vJC3=;wI5_%%jJq6QsB}OkKUO{_^3nQiyk4|&n zpLjAIJ{<)UMtJvF5qdv~;D7Fo>EkA|sHD*$b@0yd zM`5HT>Er_jeAZ1SOn?E-DRkg4*#ekEn4rjWa(_`Y{7A8rL#9aog*P(dNxkvbcw`4P zZtPI{xsQG@ozeXl2FUPd3*OJU`-Xexem2tAF?Yl2(3#kQzgT^dDlABQpI=4lQ`p%Y zKMZSwr(Z_~_wV|`(ZFQ1uSX79a^@TY+5Z2|)}SMeJtl`Z#_)~q^AGL+CYAw?RmOqu zG|MBq1(2!d>1MfEbLWn~H8^*+BA%uG^6>%1xk-s!OAvR65xIbe3f+K^21ni>@T0ZF zM#`WB8?Pd3zr%_)ar#eiodw1iLQY13vl9|GKDBBGfUD0#E=_|WDxOtDltf=94iOJ`|KG5goj4ud`co$ld{tt-zF69K z^)J)tU$l0=pL=4#28_yNO8xN7i&e|s`?<3>oSg&%j@I_To^6vVbFvr$We)u0-#w!}qCM*4T?N|AoddlOhi1N#xb~IAmHNSF^{qYI`+JkucVc(Y z04)~!dkl&!u&%KJg#Lz;F9*J^EKy6eXR@>U?%Acm%*LGeiBClApFZ5wRe+DfQX<10 zg}XGceUOqed>!UH!z;$;6VXA!Huct>vz;|i_-MRmrt{P%Fs`AmkM`@2>n-kI{jYw! z@ZmS4w6pPIEf-Te#;itG4<=*mi9#APgf?Od2!C82k59xJ%uEkH@`3K1lUoe1FBLpB zoq=M?4rrS>HDCapfo6I!15IFign_^K00tD@Lrfy38I2wBSU3o!#YE@hIJ8EHFi`2Y z-tL_-J!o=mCPk`T7ILsEf&`VnhNXus0&>_?vjVn$L^q2q1XrLOPJs$@L_^Yb`kLY5MolpS71&=|G z@uEoMyz}QMcu>)%H7}ph)SFb`fbRkoz?PHjT)KTE_e4iF-q86Iw_|H-V$5SxH*sh>RBB6<=L*$bFS(9T5*zA@PuMt~-whS%@> z+jNujr;!0;gD@CrjRKS|&}y}@B$D%Tuooy4I9yrjvRi|1iZm*NyBp9XFDiKFt!bHU z1zS=Vyrcqe0mhCF_`Wf`DYcLN4^(4t)Kp zQKb#vR`L??d>XxGim5K!Hk@F>o6p73xHv?kx(2Q$vN|?lweHIw%mWi_G6}is%ee$O zSh#q&?VFce9P&{y1AA^B7e=2yr>UYkq<5Fu#0~gp-Z^VzyyT#zIqt-D;ql&`A2-EX!;-GN7w%OxJcDJZ_I#I-~aP*DSoyesGNUZ z4KC;}7(Az??D72axp&uIM#sjb$|5bVtM1OOI_=@LEBaJW|FjA4%wBa}VCKTawKqWr zJ@+h9b>(&SUL@6M`P(~j1T91CD6p<;+UyTSvc`XBa=q-FEl?_QH_v)wU%b+V`d<{} zzh&%p;Xe%d|7>V+&i^wz0D>|jAp+XL&%N~Gxa;A3xES%5fMX264v@>j6=`_P8090y z0%~fW5O?@79?RGw{tbg@aymuk1k5G>k(g2(v9I|h(!~UZFpyH>)1_M)PsA~T?f#HR zkB=WHx_L4mGqPO%M~{ra95r3W@P;M*%zh%huYVaTA#`s+Xh-0RLlRF<=m$ev65J4} zME$cCMflYBvf^HPM}a<37ca2n>A2yFB7-w?nE6<|K&f;*z#796pgP8UlDYKBN`!y+ z`5SK@_mrO%Jo*w`>i^NnNr1KprYm*z9Q&d>1Xg%tu%v%E3e0=gr;h)d5nIJqp ziKVdAUmd>v!krlXhJovgw-b|{IzDG28JXciAvpBLzYRZ4aKo_5q*z6${iFX4^x;+q zou4Fw#^+HXI8?J^{IjI(O=an}mB69SNum0yk|JT6I`TrpQ=Qr6y*}o@D zN(TYwb9=_w3Zzei#d-h~+ApMLytR2UA4QP!`|=h5R%6x$jA=A9q%USf41(+MA?iA zjL_j~Wx@$^0*zxBPhkujP7UoZnLHh6QGZ7TDq5!F1QTNvu|B0Lzws41v%XNfr~ z@dUS%B{3(&KFz~@^!Stu6Xzq$`eE*Tkahz*7yQZi)ZV$x`)}_5 ze{JqRk>mr1|L5cu!!Y-s5%TN;C`EzbE%~UVKp>gH+YoohJCJC)Xh1>M+uP@m`y|Or zC7oMxhNT2@8);Bk$U6O9?3D6@j%Nb<-O6#l@~^D4(uiqSX6K{$!%pBk%t6 z5XWR;GTQoIs*yqN#QaHZ2C%s3ynrbOOp?N<#HkM^)C?GzdWPZu1DyT;Ch-4n9q@i( z1pcU*yufXco3U)@0`Ja=2IVor%NX@84d~M`uq+38(8$MguNjquz@ZCCM@6P@Q~$br zR3xDX7kCZ>SN7It_%8t?=#O6>m3D&L3s6b!RwE6P872bc$a;Y>@+T-Q;l5ky-+ANS z36jyP44>hpzZf?m1L^6C(?4hDeS6%b=S8|8F5Q;%-VR5g*wi0SsF;&ZO2Z5UKb&#G zn+pu+IC&;TZ_{E(9e!&P`^x{!R$|Tixf9{*#_8oaQC~C)`fn0`95J8&7T{rgpUDaE z1PR3a`tK$r;R6|NJ4o}(&pbNjh<2PsPEnv}2TDIHj^ow@$Hh`W`bs&T5L`+4JhdwE zx&4v=Mh%huG0u$Pfs4WSDra8)*>az&v7<3q+zz=E9!I}QnhS(8U<&LVa^mLK1o0&> zJJJL;K~NV41}PPcEP3gfwg?E-S9z={Op=J6&I@2ZAx`DET5K2w&X^Vx9HKgj;I?8s z-bHvz74QfvZm4UsM<)3lWNX#&%cZhljsh5p@~|LhZZf|v-in~SfyzY|Y)6t&Bm~q- zwSYB*LD8uKiPt$x_2l!#G8kMEUkn=*c)9<^ktv~!h#D0#+X;#qNN(mxx+HTh%#xvI zcP!WwS<7G{bq6!LkS>f$@$r6~phPs@XLuq38a~8^xX3NgPuAF8?W4b?1N?Mwv#pvTnd z73mk5SFFnsKHUstqhWBX7>FLH`AWAuoq|e1VC8G+Ujq>*<{xJ-G8Yu%_6axe5HT{c z6#I*pSfO-Fe?E;hDqT^!gh-m*e`rB|kd}g5nh$~sXcGxLV~^^`04}BVFoW0dd_|D- z{WQEA_?Y=xq`ss_l5R60a~|eC|6rb+c`@-X@KSI_Pn~ATWr6wrHJZ%ps&?v7SNogS~2x%0EXwFp*YOrMB1e9LYlj;hk>cFjjSIuhB zH+N}V?JKJGF2!$maxcjjYE`W^0ez)fUFA0Nzx?NExtC;JVk*8hTDSHM7(a}Gah)aP z3gC4=r+IT5)C5|Zn~T#!5_~MtQd+TQ+KUqb^Wi`uZ}rjcqoKf$yMnFG6%FbNAvai} T`Fb2~W9;qvGvE5`^M(Hf?5lT% literal 0 HcmV?d00001 diff --git a/gr-radar-mono/src/fpga/top/usrp_radar_mono.v b/gr-radar-mono/src/fpga/top/usrp_radar_mono.v new file mode 100644 index 00000000..2620a328 --- /dev/null +++ b/gr-radar-mono/src/fpga/top/usrp_radar_mono.v @@ -0,0 +1,213 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003,2004 Matt Ettus +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +module usrp_radar_mono +(output MYSTERY_SIGNAL, + input master_clk, + input SCLK, + input SDI, + inout SDO, + input SEN_FPGA, + + input FX2_1, + output FX2_2, + output FX2_3, + + input wire [11:0] rx_a_a, + input wire [11:0] rx_b_a, + input wire [11:0] rx_a_b, + input wire [11:0] rx_b_b, + + output wire [13:0] tx_a, + output wire [13:0] tx_b, + + output wire TXSYNC_A, + output wire TXSYNC_B, + + // USB interface + input usbclk, + input wire [2:0] usbctl, + output wire [1:0] usbrdy, + inout [15:0] usbdata, // NB Careful, inout + + // These are the general purpose i/o's that go to the daughterboard slots + inout wire [15:0] io_tx_a, + inout wire [15:0] io_tx_b, + inout wire [15:0] io_rx_a, + inout wire [15:0] io_rx_b + ); + wire [15:0] debugdata,debugctrl; + assign MYSTERY_SIGNAL = 1'b0; + + wire clk64; + + // wire WR = usbctl[0]; + wire RD = usbctl[1]; + wire OE = usbctl[2]; + + wire have_pkt_rdy; + assign usbrdy[0] = 1'b0; // have_space; + assign usbrdy[1] = have_pkt_rdy; + + wire tx_underrun, rx_overrun; + wire clear_status = FX2_1; + assign FX2_2 = rx_overrun; + assign FX2_3 = 1'b0; // tx_underrun; + + wire [15:0] usbdata_out; + + wire [3:0] rx_numchan; + wire enable_tx, enable_rx; + wire tx_dsp_reset, rx_dsp_reset, tx_bus_reset, rx_bus_reset; + + // Tri-state bus macro + bustri bustri( .data(usbdata_out),.enabledt(OE),.tridata(usbdata) ); + + assign clk64 = master_clk; + + // TX + wire tx_sample_strobe; + wire io_tx_ena; + + wire serial_strobe; + wire [6:0] serial_addr; + wire [31:0] serial_data; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Transmit Side + + wire tx_side; + wire [13:0] tx_i, tx_q; + wire [13:0] tx_dac; + wire tx_sync; + + dac_interface dac(.clk_i(clk64),.rst_i(tx_dsp_reset),.ena_i(enable_tx), + .strobe_i(tx_sample_strobe),.tx_i_i(tx_i),.tx_q_i(tx_q), + .tx_data_o(tx_dac),.tx_sync_o(tx_sync)); + + // Route transmitted signal to side A or side B + assign tx_a = tx_side ? 14'b0 : tx_dac; + assign tx_b = tx_side ? tx_dac : 14'b0; + assign TXSYNC_A = tx_side ? 1'b0 : tx_sync; + assign TXSYNC_B = tx_side ? tx_sync : 1'b0; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Receive Side + wire rx_strobe; + wire [15:0] rx_adc0_i, rx_adc0_q; + wire [15:0] rx_buf_i, rx_buf_q; + + adc_interface adc_interface(.clock(clk64),.reset(rx_dsp_reset),.enable(enable_rx), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .rx_a_a(rx_a_a),.rx_b_a(rx_b_a),.rx_a_b(rx_a_b),.rx_b_b(rx_b_b), + .rssi_0(),.rssi_1(),.rssi_2(),.rssi_3(), + .ddc0_in_i(rx_adc0_i),.ddc0_in_q(rx_adc0_q), + .ddc1_in_i(),.ddc1_in_q(), + .ddc2_in_i(),.ddc2_in_q(), + .ddc3_in_i(),.ddc3_in_q(),.rx_numchan(rx_numchan) ); + + rx_buffer rx_buffer + ( .usbclk(usbclk),.bus_reset(rx_bus_reset),.reset(rx_dsp_reset), + .reset_regs(rx_dsp_reset), + .usbdata(usbdata_out),.RD(RD),.have_pkt_rdy(have_pkt_rdy),.rx_overrun(rx_overrun), + .channels(rx_numchan), + .ch_0(rx_buf_i),.ch_1(rx_buf_q), + .ch_2(),.ch_3(), + .ch_4(),.ch_5(), + .ch_6(),.ch_7(), + .rxclk(clk64),.rxstrobe(rx_strobe), + .clear_status(clear_status), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .debugbus() ); + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Top level application + radar radar_mono ( .clk_i(clk64),.saddr_i(serial_addr),.sdata_i(serial_data),.s_strobe_i(serial_strobe), + .tx_side_o(tx_side),.tx_strobe_o(tx_sample_strobe),.tx_dac_i_o(tx_i),.tx_dac_q_o(tx_q), + .rx_adc_i_i(rx_adc0_i),.rx_adc_q_i(rx_adc0_q), + .rx_strobe_o(rx_strobe),.rx_ech_i_o(rx_buf_i),.rx_ech_q_o(rx_buf_q),.io_tx_ena_o(io_tx_ena) + ); + + // Route TX enable out to RFX transmit mixer enable + assign io_tx_a[5] = tx_side ? 1'bz : io_tx_ena; + assign io_tx_b[5] = tx_side ? io_tx_ena : 1'bz; + + // Route opposite of TX enable out to RFX receive mixer + //assign io_rx_a[5] = tx_side ? 1'bz : ~io_tx_ena; + //assign io_rx_b[5] = tx_side ? ~io_tx_ena : 1'bz; + assign io_rx_a[5] = 1'b1; + assign io_rx_b[5] = 1'b1; + + + // Route TX enable out to RX/TX switch + assign io_tx_a[6] = tx_side ? 1'bz : ~io_tx_ena; + assign io_tx_b[6] = tx_side ? ~io_tx_ena : 1'bz; + + // Enable common RX/TX antenna + assign io_rx_a[6] = tx_side ? 1'bz : 1'b0; + assign io_rx_b[6] = tx_side ? 1'b0 : 1'bz; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Control Functions + + wire [31:0] capabilities; + assign capabilities[7] = 0; // `TX_CAP_HB; + assign capabilities[6:4] = 1; // `TX_CAP_NCHAN; + assign capabilities[3] = 0; // `RX_CAP_HB; + assign capabilities[2:0] = 2; // `RX_CAP_NCHAN; + + serial_io serial_io + ( .master_clk(clk64),.serial_clock(SCLK),.serial_data_in(SDI), + .enable(SEN_FPGA),.reset(1'b0),.serial_data_out(SDO), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .readback_0({io_rx_a,io_tx_a}),.readback_1({io_rx_b,io_tx_b}),.readback_2(capabilities),.readback_3(32'hf0f0931a), + .readback_4(),.readback_5(),.readback_6(),.readback_7() + ); + + wire [15:0] reg_0,reg_1,reg_2,reg_3; + master_control master_control + ( .master_clk(clk64),.usbclk(usbclk), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .tx_bus_reset(tx_bus_reset),.rx_bus_reset(rx_bus_reset), + .tx_dsp_reset(tx_dsp_reset),.rx_dsp_reset(rx_dsp_reset), + .enable_tx(enable_tx),.enable_rx(enable_rx), + .interp_rate(),.decim_rate(), + .tx_sample_strobe(),.strobe_interp(), + .rx_sample_strobe(),.strobe_decim(), + .tx_empty(), + .debug_0(),.debug_1(), + .debug_2(),.debug_3(), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3) ); + + wire [1:0] dummy_io = 2'bz; + + io_pins io_pins + (.io_0({io_tx_a[15:7],dummy_io,io_tx_a[4:0]}), // Don't connect pins used above + .io_1({io_rx_a[15:7],dummy_io,io_rx_a[4:0]}), + .io_2({io_tx_b[15:7],dummy_io,io_tx_b[4:0]}), + .io_3({io_rx_b[15:7],dummy_io,io_rx_b[4:0]}), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3), + .clock(clk64),.rx_reset(rx_dsp_reset),.tx_reset(tx_dsp_reset), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe)); + +endmodule // usrp_radar_mono diff --git a/gr-radar-mono/src/lib/Makefile.am b/gr-radar-mono/src/lib/Makefile.am new file mode 100644 index 00000000..4f35e3ae --- /dev/null +++ b/gr-radar-mono/src/lib/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common diff --git a/gr-radar-mono/src/lib/Makefile.in b/gr-radar-mono/src/lib/Makefile.in new file mode 100644 index 00000000..57c32e9b --- /dev/null +++ b/gr-radar-mono/src/lib/Makefile.in @@ -0,0 +1,872 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/python/Makefile.am b/gr-radar-mono/src/python/Makefile.am new file mode 100644 index 00000000..535bb85a --- /dev/null +++ b/gr-radar-mono/src/python/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +radar_mono_pythondir = $(grpythondir) + +dist_bin_SCRIPTS = \ + usrp_radar_mono.py + +radar_mono_python_PYTHON = \ + radar_mono.py diff --git a/gr-radar-mono/src/python/Makefile.in b/gr-radar-mono/src/python/Makefile.in new file mode 100644 index 00000000..1ecc3107 --- /dev/null +++ b/gr-radar-mono/src/python/Makefile.in @@ -0,0 +1,948 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_bin_SCRIPTS) $(radar_mono_python_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common +subdir = gr-radar-mono/src/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests +am__installdirs = "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(radar_mono_pythondir)" +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +radar_mono_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +radar_mono_pythondir = $(grpythondir) +dist_bin_SCRIPTS = \ + usrp_radar_mono.py + +radar_mono_python_PYTHON = \ + radar_mono.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-radar-mono/src/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-radar-mono/src/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-radar_mono_pythonPYTHON: $(radar_mono_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(radar_mono_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(radar_mono_pythondir)" + @list='$(radar_mono_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(radar_mono_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(radar_mono_pythondir)/$$f'"; \ + $(radar_mono_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(radar_mono_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(radar_mono_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(radar_mono_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-radar_mono_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(radar_mono_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(radar_mono_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(radar_mono_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(radar_mono_pythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(radar_mono_pythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-radar_mono_pythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS \ + uninstall-radar_mono_pythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_binSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am \ + install-radar_mono_pythonPYTHON install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_binSCRIPTS uninstall-radar_mono_pythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-radar-mono/src/python/radar_mono.py b/gr-radar-mono/src/python/radar_mono.py new file mode 100644 index 00000000..1a7b9260 --- /dev/null +++ b/gr-radar-mono/src/python/radar_mono.py @@ -0,0 +1,330 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, usrp +from gnuradio import eng_notation +from gr import gr_threading as _threading + +n2s = eng_notation.num_to_str + +txp_delay = 60 # Pipeline delay to turn on transmit mixer +rxp_delay = 76 # Pipeline delay to turn off transmit mixer + +#----------------------------------------------------------------------- +# FPGA Register Definitions +#----------------------------------------------------------------------- +FR_RADAR_MODE = usrp.FR_USER_0 # Operational mode +bmFR_RADAR_MODE_RESET = 1 << 0 # bit 0: active high reset +bmFR_RADAR_TXSIDE = 1 << 1 # bit 1: use TX side A or B +#bmFR_RADAR_MODE_LP = 1 << 2 # bit 2: enable digital loopback +#bmFR_RADAR_MODE_DR = 1 << 3 # bit 3: enable on-board deramping +#bmFR_RADAR_MODE_MD = 1 << 4 # bit 4: enable echo metadata +#bmFR_RADAR_MODE_CHIRPS = 3 << 5 # bit 5,6: number of chirp center frequencies +bmFR_RADAR_DEBUG = 1 << 7 # bit 7: enable debugging mode + +FR_RADAR_TON = usrp.FR_USER_1 # 16-bit transmitter on time in clocks +FR_RADAR_TSW = usrp.FR_USER_2 # 16-bit transmitter switch time in clocks +FR_RADAR_TLOOK = usrp.FR_USER_3 # 16-bit receiver look time in clocks +FR_RADAR_TIDLE = usrp.FR_USER_4 # 32-bit inter-pulse idle time +FR_RADAR_AMPL = usrp.FR_USER_5 # 16-bit pulse amplitude (2s complement) into CORDIC +FR_RADAR_FSTART = usrp.FR_USER_6 # 32-bit FTW for chirp start frequency +FR_RADAR_FINCR = usrp.FR_USER_7 # 32-bit FTW increment per transmit clock +FR_RADAR_ATRDEL = usrp.FR_USER_8 # 16-bit TX delay in clocks, 16-bit RX delay in clocks + +# These are for phase II development (need to renumber) +#FR_RADAR_FREQ1N = usrp.FR_USER_8 # 24-bit N register for chirp #1 +#FR_RADAR_FREQ1R = usrp.FR_USER_9 # 24-bit R register for chirp #1 +#FR_RADAR_FREQ1C = usrp.FR_USER_10 # 24-bit C register for chirp #1 +#FR_RADAR_FREQ2N = usrp.FR_USER_11 # 24-bit N register for chirp #2 +#FR_RADAR_FREQ2R = usrp.FR_USER_12 # 24-bit R register for chirp #2 +#FR_RADAR_FREQ2C = usrp.FR_USER_13 # 24-bit C register for chirp #2 +#FR_RADAR_FREQ3N = usrp.FR_USER_14 # 24-bit N register for chirp #3 +#FR_RADAR_FREQ3R = usrp.FR_USER_15 # 24-bit R register for chirp #3 +#FR_RADAR_FREQ3C = usrp.FR_USER_16 # 24-bit C register for chirp #3 +#FR_RADAR_FREQ4N = usrp.FR_USER_17 # 24-bit N register for chirp #4 +#FR_RADAR_FREQ4R = usrp.FR_USER_18 # 24-bit R register for chirp #4 +#FR_RADAR_FREQ4C = usrp.FR_USER_19 # 24-bit C register for chirp #4 + +#----------------------------------------------------------------------- +# Transmitter object. Uses usrp_sink, but only for a handle to the +# FPGA registers. +#----------------------------------------------------------------------- +class radar_tx(object): + def __init__(self, options): + self._subdev_spec = options.tx_subdev_spec + self._verbose = options.verbose + self._debug = options.debug + self._u = usrp.sink_s(fpga_filename='usrp_radar_mono.rbf') + + if self._subdev_spec == None: + self._subdev_spec = usrp.pick_tx_subdevice(self._u) + + self._subdev = usrp.selected_subdev(self._u, self._subdev_spec) + self._subdev.set_lo_offset(0.0) + self._ton_ticks = 0 + self._tsw_ticks = 0 + self._tlook_ticks = 0 + self._tidle_ticks = 0 + + if self._verbose: + print "Using", self._subdev.name(), "for radar transmitter." + + def set_ton(self, ton): + self._ton_ticks = 2*(int(ton*64e6)/2)-1 # Even number, then subtract 1 + if self._verbose: + print "Setting pulse on time to", ton, " sec ("+`self._ton_ticks+1`+" ticks)" + self._u._write_fpga_reg(FR_RADAR_TON, self._ton_ticks) + + def set_tsw(self, tsw): + self._tsw_ticks = 2*(int(tsw*64e6)/2)-1+rxp_delay # Even number, then subtract 1 + if self._verbose: + print "Setting pulse switching time to", tsw, " sec ("+`self._tsw_ticks+1`+" ticks)" + self._u._write_fpga_reg(FR_RADAR_TSW, self._tsw_ticks) + + def set_tlook(self, tlook): + self._tlook_ticks = 2*(int(tlook*64e6)/2)-1 # Even number, then subtract 1 + if self._verbose: + print "Setting receiver look time to", tlook, " sec ("+`self._tlook_ticks+1`+" ticks)" + self._u._write_fpga_reg(FR_RADAR_TLOOK, self._tlook_ticks) + + def set_prf(self, prf): + period = 2*int(32e6/prf) + self._tidle_ticks = period-(self._ton_ticks+self._tsw_ticks+self._tlook_ticks+3)-1 + if self._verbose: + print "Setting PRF to", prf, "Hz ("+`self._tidle_ticks+1`+" ticks idle time)" + self._u._write_fpga_reg(FR_RADAR_TIDLE, self._tidle_ticks) + + def set_amplitude(self, ampl): + self._amplitude = int(ampl*9946/100.0) # CORDIC gain correction + self._u._write_fpga_reg(FR_RADAR_AMPL, self._amplitude) + + def set_freq(self, center_freq, chirp_width): + self._center_freq = center_freq + self._chirp_width = chirp_width + self._fstart = -int((chirp_width/2)*(2**32)/32e6) + self._fincr = int((chirp_width/16e6)*(2**32)/(self._ton_ticks+1)) + + if self._verbose: + print "Setting transmitter center frequency to", n2s(center_freq) + print "Setting chirp width to", n2s(chirp_width), "Hz "+"("+hex(self._fstart)+", "+hex(self._fincr)+")" + + result = self._u.tune(0, self._subdev, center_freq) + if result == False: + raise RuntimeError("Failed to set transmitter frequency.") + self._u._write_fpga_reg(FR_RADAR_FSTART, self._fstart) + self._u._write_fpga_reg(FR_RADAR_FINCR, self._fincr) + + def start(self): + self._u.start() + self._subdev.set_enable(True) + + def stop(self): + self._subdev.set_enable(False) + self._u.stop() + + def subdev_spec(self): + return self._subdev_spec + + def echo_length(self): + return self._tlook_ticks+1 + + def __del__(self): + del self._subdev # Avoid weak reference error + +#----------------------------------------------------------------------- +# Receiver object. Uses usrp_source_c to receive echo records. +#----------------------------------------------------------------------- +class radar_rx(gr.top_block): + def __init__(self, options, callback): + gr.top_block.__init__(self, "radar_rx") + + self._u = None + self._subdev_spec = options.rx_subdev_spec + self._gain = options.gain + self._verbose = options.verbose + self._debug = options.debug + self._callback = callback + self._length_set = False + self._connected = False + self._frequency = 0.0 + self._msgq = gr.msg_queue() + self._watcher = _queue_watcher_thread(self._msgq, self._callback) + + def set_echo_length(self, length): + # Only call once + if self._length_set is True: + raise RuntimeError("Can only set echo length once.") + self._length = length + self._length_set = True + + def tune(self, frequency): + if self._verbose: + print "Setting receiver frequency to", n2s(frequency) + self._frequency = frequency + if (self._u): + result = self._u.tune(0, self._subdev, frequency) + if result == False: + raise RuntimeError("Failed to set receiver frequency.") + + def set_gain(self, gain): + self._gain = gain + if self._gain == None: + # if no gain was specified, use the mid-point in dB + g = self._subdev.gain_range() + self._gain = float(g[0]+g[1])/2 + self._subdev.set_gain(self._gain) + + def begin(self): + if not self._connected: + self._setup_connections() + + if self._verbose: + print "Starting receiver..." + self.start() + + def end(self): + if self._verbose: + print "Stopping receiver..." + self.stop() + self.wait() + if self._verbose: + print "Receiver stopped." + + def _setup_usrp(self): + self._u = usrp.source_c(fpga_filename='usrp_radar_mono.rbf') + if self._subdev_spec == None: + self._subdev_spec = usrp.pick_rx_subdevice(self._u) + self._u.set_mux(usrp.determine_rx_mux_value(self._u, self._subdev_spec)) + self._subdev = usrp.selected_subdev(self._u, self._subdev_spec) + + if self._verbose: + print "Using", self._subdev.side_and_name(), "for radar receiver." + print "Setting receiver gain to", self._gain + self.set_gain(self._gain) + self.tune(self._frequency) + + def _setup_connections(self): + if not self._length_set: + raise RuntimeError("Echo length not set.") + self._setup_usrp() + self._vblen = gr.sizeof_gr_complex*self._length + self._s2v = gr.stream_to_vector(gr.sizeof_gr_complex, self._length) + self._sink = gr.message_sink(self._vblen, self._msgq, False) + self.connect(self._u, self._s2v, self._sink) + + if self._verbose: + print "Generating echo vectors of length", self._length, \ + "(samples)", self._vblen, "(bytes)" + + self._connected = True + +class radar(object): + def __init__(self, options, callback): + + self._verbose = options.verbose + self._debug = options.debug + + self._mode = 0 + self._trans = radar_tx(options) + self._rcvr = radar_rx(options, callback) + self.set_reset(True) + self.set_tx_board(self._trans.subdev_spec()) + self.set_debug(self._debug) + self.set_atrdel() + + def _write_mode(self): + self._trans._u._write_fpga_reg(FR_RADAR_MODE, self._mode) + + def set_reset(self, value): + if value: + self._mode |= bmFR_RADAR_MODE_RESET + else: + self._mode &= ~bmFR_RADAR_MODE_RESET + self._write_mode() + + def set_tx_board(self, tx_subdev_spec): + if tx_subdev_spec[0] == 1: + self._mode |= bmFR_RADAR_TXSIDE + else: + self._mode &= ~bmFR_RADAR_TXSIDE + self._write_mode() + + def set_debug(self, value): + if value: + self._mode |= bmFR_RADAR_DEBUG + else: + self._mode &= ~bmFR_RADAR_DEBUG + self._write_mode() + + def set_ton(self, ton): + self._trans.set_ton(ton) + + def set_tsw(self, tsw): + self._trans.set_tsw(tsw) + + def set_tlook(self, tlook): + self._trans.set_tlook(tlook) + self._rcvr.set_echo_length(self._trans.echo_length()) + + def set_prf(self, prf): + self._trans.set_prf(prf) + + def set_amplitude(self, ampl): + self._trans.set_amplitude(ampl) + + def set_freq(self, center_freq, chirp_width): + self._trans.set_freq(center_freq, chirp_width) + self._rcvr.tune(center_freq) + + def set_atrdel(self, tx_delay=txp_delay, rx_delay=rxp_delay): + if self._verbose: + print "Setting TX delay of", tx_delay, "clocks, RX delay of", rx_delay + self._trans._u._write_fpga_reg(FR_RADAR_ATRDEL, tx_delay << 16 | rx_delay) + + def start(self): + self.set_reset(False) + self._trans.start() + self._rcvr.begin() + + def stop(self): + self._rcvr.end() + self._trans.stop() + self.set_reset(True) + +#----------------------------------------------------------------------- +# Queue watcher. Dispatches received echos to callback. +#----------------------------------------------------------------------- +class _queue_watcher_thread(_threading.Thread): + def __init__(self, msgq, callback): + _threading.Thread.__init__(self) + self.setDaemon(1) + self._msgq = msgq + self._callback = callback + self._keep_running = True + self.start() + + def run(self): + while self._keep_running == True: + msg = self._msgq.delete_head() + if self._callback: + self._callback(msg.to_string()) + diff --git a/gr-radar-mono/src/python/run_tests.in b/gr-radar-mono/src/python/run_tests.in new file mode 100644 index 00000000..19b6b895 --- /dev/null +++ b/gr-radar-mono/src/python/run_tests.in @@ -0,0 +1,10 @@ +#!/bin/sh + +# 1st parameter is absolute path to component source directory +# 2nd parameter is absolute path to component build directory +# 3rd parameter is path to Python QA directory + +@top_builddir@/run_tests.sh \ + @abs_top_srcdir@/gr-sar-fe \ + @abs_top_builddir@/gr-sar-fe \ + @srcdir@ diff --git a/gr-radar-mono/src/python/usrp_radar_mono.py b/gr-radar-mono/src/python/usrp_radar_mono.py new file mode 100755 index 00000000..3f2ad28e --- /dev/null +++ b/gr-radar-mono/src/python/usrp_radar_mono.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr +from gnuradio.radar_mono import radar +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys, time + +n2s = eng_notation.num_to_str +logfile = None + +def process_echo(echo): + global logfile + if logfile is not None: + logfile.write(echo) + +def main(): + global logfile + parser = OptionParser(option_class=eng_option) + parser.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, + help="use transmitter board side A or B (default is first found)") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="use receiver board side A or B (default is first found)") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-f", "--frequency", type="eng_float", default=0.0, + help="set transmitter center frequency to FREQ in Hz, default is %default", metavar="FREQ") + parser.add_option("-w", "--chirp-width", type="eng_float", default=32e6, + help="set LFM chirp bandwidth in Hz, default is %default", metavar="FREQ") + parser.add_option("-a", "--amplitude", type="eng_float", default=15, + help="set waveform amplitude in % full scale, default is %default,") + parser.add_option("", "--ton", type="eng_float", default=5e-6, + help="set pulse on period in seconds, default is %default,") + parser.add_option("", "--tsw", type="eng_float", default=0.0, + help="set transmitter switching period in seconds, default is %default,") + parser.add_option("", "--tlook", type="eng_float", default=5e-6, + help="set receiver look time in seconds, default is %default,") + parser.add_option("", "--prf", type="eng_float", default=100, + help="set pulse repetition frequency in Hz, default is %default,") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="enable verbose output, default is disabled") + parser.add_option("-D", "--debug", action="store_true", default=False, + help="enable debugging output, default is disabled") + parser.add_option("-F", "--filename", default=None, + help="log received echos to file") + + (options, args) = parser.parse_args() + + if len(args) != 0: + parser.print_help() + sys.exit(1) + + if options.filename is not None: + if options.verbose: + print "Logging echo records to file: ", options.filename + logfile = open(options.filename, 'wb') + + r = radar(options, process_echo) + + r.set_ton(options.ton) + r.set_tsw(options.tsw) + r.set_tlook(options.tlook) + r.set_prf(options.prf) + r.set_amplitude(options.amplitude) + r.set_freq(options.frequency, options.chirp_width) + + r.start() + raw_input("Press ENTER to stop.") + r.stop() + + if logfile is not None: + logfile.close() + +if __name__ == "__main__": + main() diff --git a/gr-radio-astronomy/AUTHORS b/gr-radio-astronomy/AUTHORS deleted file mode 100644 index b3ab4148..00000000 --- a/gr-radio-astronomy/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Marcus Leech -Eric Blossom diff --git a/gr-radio-astronomy/ChangeLog b/gr-radio-astronomy/ChangeLog deleted file mode 100644 index 372885a6..00000000 --- a/gr-radio-astronomy/ChangeLog +++ /dev/null @@ -1,30 +0,0 @@ -2006-06-29 Eric Blossom - - * src/python/Makefile.am: modfied to install part under gnuradio - and part under gnuradio/wxgui. - -2006-05-28 Eric Blossom - - * src/python/Makefile.am (bin_SCRIPTS): changed bin_PYTHON to - bin_SCRIPTS. - -# -# Copyright 2006 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. -# diff --git a/gr-radio-astronomy/Makefile.in b/gr-radio-astronomy/Makefile.in index 4c512033..5989bdde 100644 --- a/gr-radio-astronomy/Makefile.in +++ b/gr-radio-astronomy/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog + $(top_srcdir)/Makefile.common subdir = gr-radio-astronomy ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +572,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-radio-astronomy/src/Makefile.in b/gr-radio-astronomy/src/Makefile.in index 70fc4cb6..a77c99a7 100644 --- a/gr-radio-astronomy/src/Makefile.in +++ b/gr-radio-astronomy/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = gr-radio-astronomy/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,12 +549,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = lib python all: all-recursive @@ -332,8 +586,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -364,10 +618,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -399,8 +649,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -444,8 +693,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -470,8 +719,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -481,13 +730,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -501,22 +749,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -530,7 +777,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -538,6 +785,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -577,8 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -592,12 +840,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -616,22 +872,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/gr-radio-astronomy/src/lib/Makefile.am b/gr-radio-astronomy/src/lib/Makefile.am index 59a474df..33a8a859 100644 --- a/gr-radio-astronomy/src/lib/Makefile.am +++ b/gr-radio-astronomy/src/lib/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,69 +21,22 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.ra module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -LOCAL_IFILES = \ - $(top_srcdir)/gr-radio-astronomy/src/lib/ra.i - -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _howto shared library -# and knows how to call our extensions. +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) -BUILT_SOURCES = \ - ra.cc \ - ra.py +TOP_SWIG_IFILES = \ + ra.i -# This gets ra.py installed in the right place -ourpython_PYTHON = \ - ra.py - -ourlib_LTLIBRARIES = _ra.la - -# These are the source files that go into the shared library -_ra_la_SOURCES = \ - ra.cc - -# magic flags -_ra_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version - -# link the library against some comon swig runtime code and the -# c++ standard library -_ra_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ - -ra.cc ra.py: $(ALL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module ra -o ra.cc $(LOCAL_IFILES) - -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = - -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +# Install so that they end up available as: +# import gnuradio.ra +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +ra_pythondir_category = \ + gnuradio +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-radio-astronomy/src/lib/Makefile.in b/gr-radio-astronomy/src/lib/Makefile.in index a567da6d..4e5aaa34 100644 --- a/gr-radio-astronomy/src/lib/Makefile.in +++ b/gr-radio-astronomy/src/lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 ra.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,30 +123,41 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(ourpython_PYTHON) \ +DIST_COMMON = $(ra_python_PYTHON) $(ra_swiginclude_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common + $(srcdir)/Makefile.swig.gen $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig subdir = gr-radio-astronomy/src/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +166,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -140,44 +213,44 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(ra_pylibdir)" \ + "$(DESTDIR)$(ra_pythondir)" "$(DESTDIR)$(ra_swigincludedir)" +ra_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(ra_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la -_ra_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) -am__ra_la_OBJECTS = ra.lo +_ra_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__ra_la_OBJECTS = _ra_la-ra.lo _ra_la_OBJECTS = $(am__ra_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_ra_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(_ra_la_CXXFLAGS) $(CXXFLAGS) \ + $(_ra_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_ra_la_SOURCES) DIST_SOURCES = $(_ra_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +ra_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile -grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +ra_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(ra_swiginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -185,9 +258,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -195,6 +275,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -207,73 +289,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -283,49 +358,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -333,15 +448,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -351,16 +609,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -369,131 +645,218 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ -# Install this stuff so that it ends up as the gnuradio.ra module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool -LOCAL_IFILES = \ - $(top_srcdir)/gr-radio-astronomy/src/lib/ra.i +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _howto shared library -# and knows how to call our extensions. -BUILT_SOURCES = \ - ra.cc \ - ra.py +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/ra-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) +TOP_SWIG_IFILES = \ + ra.i -# This gets ra.py installed in the right place -ourpython_PYTHON = \ - ra.py -ourlib_LTLIBRARIES = _ra.la +# Install so that they end up available as: +# import gnuradio.ra +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +ra_pythondir_category = \ + gnuradio + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = ra.py ra.cc +ra_pythondir = $(pythondir)/$(ra_pythondir_category) +ra_pylibdir = $(pyexecdir)/$(ra_pylibdir_category) +ra_swigincludedir = $(swigincludedir) +ra_swiginclude_HEADERS = \ + ra.i \ + $(ra_swiginclude_headers) + +ra_pylib_LTLIBRARIES = \ + _ra.la -# These are the source files that go into the shared library _ra_la_SOURCES = \ - ra.cc + ra.cc \ + $(ra_la_swig_sources) +_ra_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(ra_la_swig_libadd) -# magic flags -_ra_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +_ra_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(ra_la_swig_ldflags) -# link the library against some comon swig runtime code and the -# c++ standard library -_ra_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ +_ra_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(ra_la_swig_cxxflags) +ra_python_PYTHON = \ + ra.py \ + $(ra_python) -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -517,35 +880,35 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-ra_pylibLTLIBRARIES: $(ra_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(ra_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(ra_pylibdir)" + @list='$(ra_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(ra_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ra_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(ra_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ra_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-ra_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(ra_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(ra_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(ra_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-ra_pylibLTLIBRARIES: + -test -z "$(ra_pylib_LTLIBRARIES)" || rm -f $(ra_pylib_LTLIBRARIES) + @list='$(ra_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _ra.la: $(_ra_la_OBJECTS) $(_ra_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_ra_la_LDFLAGS) $(_ra_la_OBJECTS) $(_ra_la_LIBADD) $(LIBS) + $(_ra_la_LINK) -rpath $(ra_pylibdir) $(_ra_la_OBJECTS) $(_ra_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -553,99 +916,85 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ra.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_ra_la-ra.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_ra_la-ra.lo: ra.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_ra_la_CXXFLAGS) $(CXXFLAGS) -MT _ra_la-ra.lo -MD -MP -MF $(DEPDIR)/_ra_la-ra.Tpo -c -o _ra_la-ra.lo `test -f 'ra.cc' || echo '$(srcdir)/'`ra.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_ra_la-ra.Tpo $(DEPDIR)/_ra_la-ra.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ra.cc' object='_ra_la-ra.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_ra_la_CXXFLAGS) $(CXXFLAGS) -c -o _ra_la-ra.lo `test -f 'ra.cc' || echo '$(srcdir)/'`ra.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-ra_pythonPYTHON: $(ra_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(ra_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(ra_pythondir)" + @list='$(ra_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(ra_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ra_pythondir)/$$f'"; \ + $(ra_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ra_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ra_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ra_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-ra_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(ra_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(ra_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ra_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ra_pythondir)/$${f}o"; \ done -install-grincludeHEADERS: $(grinclude_HEADERS) +install-ra_swigincludeHEADERS: $(ra_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + test -z "$(ra_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(ra_swigincludedir)" + @list='$(ra_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ - $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + echo " $(ra_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(ra_swigincludedir)/$$f'"; \ + $(ra_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(ra_swigincludedir)/$$f"; \ done -uninstall-grincludeHEADERS: +uninstall-ra_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(grinclude_HEADERS)'; for p in $$list; do \ + @list='$(ra_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ - done -install-swigincludeHEADERS: $(swiginclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ - done - -uninstall-swigincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(ra_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(ra_swigincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -653,8 +1002,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -666,8 +1015,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -677,13 +1026,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -697,23 +1045,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. $(distdir)/../../../gr-radio-astronomy/src/lib - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -732,8 +1078,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(ra_pylibdir)" "$(DESTDIR)$(ra_pythondir)" "$(DESTDIR)$(ra_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -764,14 +1110,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ +clean-am: clean-generic clean-libtool clean-ra_pylibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -783,15 +1129,23 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-ra_pylibLTLIBRARIES install-ra_pythonPYTHON \ + install-ra_swigincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -812,34 +1166,108 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-ra_pylibLTLIBRARIES uninstall-ra_pythonPYTHON \ + uninstall-ra_swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-ourlibLTLIBRARIES ctags dist-hook \ + clean-libtool clean-ra_pylibLTLIBRARIES ctags dist-hook \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS - - -ra.cc ra.py: $(ALL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module ra -o ra.cc $(LOCAL_IFILES) - -# Don't distribute output of swig + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-ra_pylibLTLIBRARIES \ + install-ra_pythonPYTHON install-ra_swigincludeHEADERS \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-ra_pylibLTLIBRARIES uninstall-ra_pythonPYTHON \ + uninstall-ra_swigincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +ra_pythondir_category ?= gnuradio/ra +ra_pylibdir_category ?= $(ra_pythondir_category) + +ra.h ra.py ra.cc: ra.i + trap 'rm -rf $(DEPDIR)/ra-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/ra-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/ra-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/ra-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/ra-generate-lock; \ + else \ + while test -d $(DEPDIR)/ra-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/ra-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/ra-generate-stamp: + 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; + $(RM) $(DEPDIR)/ra.d + cp $(DEPDIR)/ra.Std $(DEPDIR)/ra.d + echo "" >> $(DEPDIR)/ra.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/ra.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/ra.d + $(RM) $(DEPDIR)/ra.Std + touch $(DEPDIR)/ra-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)/ra.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-radio-astronomy/src/lib/Makefile.swig.gen b/gr-radio-astronomy/src/lib/Makefile.swig.gen new file mode 100644 index 00000000..26f2373f --- /dev/null +++ b/gr-radio-astronomy/src/lib/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 ra.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/ra +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/ra +## +## 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. + +ra_pythondir_category ?= gnuradio/ra +ra_pylibdir_category ?= $(ra_pythondir_category) +ra_pythondir = $(pythondir)/$(ra_pythondir_category) +ra_pylibdir = $(pyexecdir)/$(ra_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +ra_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)/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 . + +ra_swiginclude_HEADERS = \ + ra.i \ + $(ra_swiginclude_headers) + +ra_pylib_LTLIBRARIES = \ + _ra.la + +_ra_la_SOURCES = \ + ra.cc \ + $(ra_la_swig_sources) + +_ra_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(ra_la_swig_libadd) + +_ra_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(ra_la_swig_ldflags) + +_ra_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(ra_la_swig_cxxflags) + +ra_python_PYTHON = \ + ra.py \ + $(ra_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/ra.d@am__quote@ + diff --git a/gr-radio-astronomy/src/lib/ra.i b/gr-radio-astronomy/src/lib/ra.i index 15cfbfb3..e258b876 100644 --- a/gr-radio-astronomy/src/lib/ra.i +++ b/gr-radio-astronomy/src/lib/ra.i @@ -1,14 +1,26 @@ /* -*- c++ -*- */ +/* + * 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. + */ -%feature("autodoc", "1"); // generate python docstrings - -%include "exception.i" -%import "gnuradio.i" // the common stuff - -%{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix -#include -%} +%include "gnuradio.i" // the common stuff // We'll need something like this if we add C++ blocks... // See the gr-howto-write-a-block tarball for examples diff --git a/gr-radio-astronomy/src/python/Makefile.am b/gr-radio-astronomy/src/python/Makefile.am index 642825e6..e8a84de6 100644 --- a/gr-radio-astronomy/src/python/Makefile.am +++ b/gr-radio-astronomy/src/python/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -32,10 +32,8 @@ ourlibdir = $(grpyexecdir) wxguipythondir = $(grpythondir)/wxgui wxguilibdir = $(grpyexecdir)/wxgui -EXTRA_DIST = run_tests.in \ - usrp_ra_receiver.py \ - usrp_psr_receiver.py - +EXTRA_DIST = \ + run_tests.in TESTS = \ run_tests @@ -49,10 +47,11 @@ ourpython_PYTHON = \ wxguipython_PYTHON = \ ra_stripchartsink.py \ - ra_fftsink.py + ra_fftsink.py \ + ra_waterfallsink.py # and here for applications you want installed in prefix/bin -bin_SCRIPTS = \ +dist_bin_SCRIPTS = \ usrp_ra_receiver.py \ usrp_psr_receiver.py diff --git a/gr-radio-astronomy/src/python/Makefile.in b/gr-radio-astronomy/src/python/Makefile.in index 9c94e391..36130e23 100644 --- a/gr-radio-astronomy/src/python/Makefile.in +++ b/gr-radio-astronomy/src/python/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,31 +76,41 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(noinst_PYTHON) $(ourpython_PYTHON) \ +DIST_COMMON = $(dist_bin_SCRIPTS) $(noinst_PYTHON) $(ourpython_PYTHON) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common \ $(wxguipython_PYTHON) subdir = gr-radio-astronomy/src/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +119,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,8 +162,8 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = run_tests am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourpythondir)" \ "$(DESTDIR)$(wxguipythondir)" -binSCRIPT_INSTALL = $(INSTALL_SCRIPT) -SCRIPTS = $(bin_SCRIPTS) +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -153,10 +179,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -164,9 +189,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -174,6 +206,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -186,73 +220,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -262,49 +289,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -312,15 +379,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -330,16 +540,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -348,63 +576,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT # Install this stuff so that it ends up as the gnuradio.ra module # This usually ends up at: @@ -415,9 +712,8 @@ ourlibdir = $(grpyexecdir) # wxgui stuff here wxguipythondir = $(grpythondir)/wxgui wxguilibdir = $(grpyexecdir)/wxgui -EXTRA_DIST = run_tests.in \ - usrp_ra_receiver.py \ - usrp_psr_receiver.py +EXTRA_DIST = \ + run_tests.in TESTS = \ run_tests @@ -430,11 +726,12 @@ ourpython_PYTHON = \ wxguipython_PYTHON = \ ra_stripchartsink.py \ - ra_fftsink.py + ra_fftsink.py \ + ra_waterfallsink.py # and here for applications you want installed in prefix/bin -bin_SCRIPTS = \ +dist_bin_SCRIPTS = \ usrp_ra_receiver.py \ usrp_psr_receiver.py @@ -445,8 +742,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -472,21 +769,21 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-binSCRIPTS: $(bin_SCRIPTS) +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_SCRIPTS)'; for p in $$list; do \ + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ else :; fi; \ done -uninstall-binSCRIPTS: +uninstall-dist_binSCRIPTS: @$(NORMAL_UNINSTALL) - @list='$(bin_SCRIPTS)'; for p in $$list; do \ + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ @@ -497,13 +794,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-ourpythonPYTHON: $(ourpython_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ @@ -531,7 +824,7 @@ uninstall-ourpythonPYTHON: done install-wxguipythonPYTHON: $(wxguipython_PYTHON) @$(NORMAL_INSTALL) - test -z "$(wxguipythondir)" || $(mkdir_p) "$(DESTDIR)$(wxguipythondir)" + test -z "$(wxguipythondir)" || $(MKDIR_P) "$(DESTDIR)$(wxguipythondir)" @list='$(wxguipython_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ @@ -567,7 +860,7 @@ CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -576,7 +869,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -588,7 +881,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -602,23 +895,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -638,23 +944,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -665,13 +969,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(wxguipythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -688,6 +995,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -703,7 +1011,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -717,12 +1025,20 @@ info-am: install-data-am: install-ourpythonPYTHON install-wxguipythonPYTHON -install-exec-am: install-binSCRIPTS +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -741,22 +1057,36 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binSCRIPTS uninstall-info-am \ - uninstall-ourpythonPYTHON uninstall-wxguipythonPYTHON +uninstall-am: uninstall-dist_binSCRIPTS uninstall-ourpythonPYTHON \ + uninstall-wxguipythonPYTHON + +.MAKE: install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ - clean-libtool distclean distclean-generic distclean-libtool \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-binSCRIPTS install-data install-data-am \ - install-exec install-exec-am install-info install-info-am \ - install-man install-ourpythonPYTHON install-strip \ - install-wxguipythonPYTHON installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am uninstall uninstall-am uninstall-binSCRIPTS \ - uninstall-info-am uninstall-ourpythonPYTHON \ + clean-libtool dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dist_binSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip install-wxguipythonPYTHON \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_binSCRIPTS uninstall-ourpythonPYTHON \ uninstall-wxguipythonPYTHON + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-radio-astronomy/src/python/local_calibrator.py b/gr-radio-astronomy/src/python/local_calibrator.py index 1e0d799c..d76060c0 100755 --- a/gr-radio-astronomy/src/python/local_calibrator.py +++ b/gr-radio-astronomy/src/python/local_calibrator.py @@ -25,6 +25,14 @@ import math import ephem import time +# +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# NO LONGER USED +#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# +# + + # # Simple class for allowing local definition of a calibration function # for raw samples coming from the RA detector chain. Each observatory @@ -49,8 +57,8 @@ def calib_numogate_ridge_observatory_total_power(data): # a long time to figure that out. If they don't arrive as strings, # the calculations for sidereal time are complete garbage # - me.long = str(-76.043) - me.lat = str(44.967) + me.long = globals()["calib_long"] + me.lat = globals()["calib_lat"] me.date = ephem.now() sidtime = me.sidereal_time() @@ -102,8 +110,8 @@ def calib_numogate_ridge_observatory_fft(data,l): # a long time to figure that out. If they don't arrive as strings, # the calculations for sidereal time are complete garbage # - me.long = str(-76.043) - me.lat = str(44.967) + me.long = globals()["calib_long"] + me.lat = globals()["calib_lat"] me.date = ephem.now() sidtime = me.sidereal_time() @@ -129,7 +137,7 @@ def calib_numogate_ridge_observatory_fft(data,l): globals()["calib_then"] = now numogate_file = open (filenamestr+".sdat","a") - r = calib_default_fft(data,l) + r = data inter = globals()["calib_decln"] fc = globals()["calib_freq_setting"] fc = fc / 1000000 @@ -179,3 +187,9 @@ def calib_set_decln(dec): def calib_set_prefix(pfx): globals()["calib_prefix"] = pfx + +def calib_set_long(long): + globals()["calib_long"] = long + +def calib_set_lat(lat): + globals()["calib_lat"] = lat diff --git a/gr-radio-astronomy/src/python/qa_ra.py b/gr-radio-astronomy/src/python/qa_ra.py index 687a75c6..1c44e23a 100755 --- a/gr-radio-astronomy/src/python/qa_ra.py +++ b/gr-radio-astronomy/src/python/qa_ra.py @@ -26,10 +26,10 @@ import ra class qa_ra (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_(self): # ensure that we can load the module pass diff --git a/gr-radio-astronomy/src/python/ra_fftsink.py b/gr-radio-astronomy/src/python/ra_fftsink.py index b6a08411..4733027c 100755 --- a/gr-radio-astronomy/src/python/ra_fftsink.py +++ b/gr-radio-astronomy/src/python/ra_fftsink.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2003,2004,2005 Free Software Foundation, Inc. +# Copyright 2003,2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,10 +21,10 @@ # from gnuradio import gr, gru, window -from gnuradio.wxgui import stdgui +from gnuradio.wxgui import stdgui2 import wx import gnuradio.wxgui.plot as plot -import Numeric +import numpy import threading import math import random @@ -32,14 +32,11 @@ import random default_ra_fftsink_size = (640,140) -def default_cfunc(db,l): - return(db) - class ra_fft_sink_base(object): def __init__(self, input_is_real=False, baseband_freq=0, y_per_div=10, sc_y_per_div=0.5, ref_level=50, sc_ref_level=20, sample_rate=1, fft_size=512, fft_rate=15, - average=False, avg_alpha=None, title='', peak_hold=False, cfunc=default_cfunc, xydfunc=None, interfunc=None): + average=False, avg_alpha=None, title='', peak_hold=False, ofunc=None, xydfunc=None): # initialize common attributes self.baseband_freq = baseband_freq @@ -54,9 +51,9 @@ class ra_fft_sink_base(object): self.fft_rate = fft_rate self.binwidth = float(sample_rate/fft_size) self.average = average - self.cfunc = cfunc + self.ofunc = ofunc self.xydfunc = xydfunc - self.interfunc = interfunc + self.ofunc = ofunc if avg_alpha is None: self.avg_alpha = 2.0 / fft_rate else: @@ -97,20 +94,24 @@ class ra_fft_sink_base(object): self.baseband_freq = baseband_freq -class ra_fft_sink_f(gr.hier_block, ra_fft_sink_base): - def __init__(self, fg, parent, baseband_freq=0, +class ra_fft_sink_f(gr.hier_block2, ra_fft_sink_base): + def __init__(self, parent, baseband_freq=0, y_per_div=10, sc_y_per_div=0.5, sc_ref_level=40, ref_level=50, sample_rate=1, fft_size=512, fft_rate=15, average=False, avg_alpha=None, title='', - size=default_ra_fftsink_size, peak_hold=False, cfunc=default_cfunc, xydfunc=None, interfunc=None): - + size=default_ra_fftsink_size, peak_hold=False, ofunc=None, + xydfunc=None): + gr.hier_block2.__init__(self, "ra_fft_sink_f", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0, 0, 0)) + ra_fft_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq, y_per_div=y_per_div, sc_y_per_div=sc_y_per_div, sc_ref_level=sc_ref_level, ref_level=ref_level, sample_rate=sample_rate, fft_size=fft_size, fft_rate=fft_rate, average=average, avg_alpha=avg_alpha, title=title, - peak_hold=peak_hold, cfunc=cfunc, - xydfunc=xydfunc, interfunc=interfunc) + peak_hold=peak_hold, ofunc=ofunc, + xydfunc=xydfunc) self.binwidth = float(sample_rate/2.0)/float(fft_size) s2p = gr.serial_to_parallel(gr.sizeof_float, fft_size) @@ -123,18 +124,22 @@ class ra_fft_sink_f(gr.hier_block, ra_fft_sink_base): log = gr.nlog10_ff(20, fft_size, -20*math.log10(fft_size)) sink = gr.message_sink(gr.sizeof_float * fft_size, self.msgq, True) - fg.connect (s2p, one_in_n, fft, c2mag, self.avg, log, sink) - gr.hier_block.__init__(self, fg, s2p, sink) + self.connect (self, s2p, one_in_n, fft, c2mag, self.avg, log, sink) self.win = fft_window(self, parent, size=size) self.set_average(self.average) -class ra_fft_sink_c(gr.hier_block, ra_fft_sink_base): - def __init__(self, fg, parent, baseband_freq=0, +class ra_fft_sink_c(gr.hier_block2, ra_fft_sink_base): + def __init__(self, parent, baseband_freq=0, y_per_div=10, sc_y_per_div=0.5, sc_ref_level=40, ref_level=50, sample_rate=1, fft_size=512, fft_rate=15, average=False, avg_alpha=None, title='', - size=default_ra_fftsink_size, peak_hold=False, cfunc=default_cfunc, xydfunc=None, interfunc=None): + size=default_ra_fftsink_size, peak_hold=False, ofunc=None, xydfunc=None): + + gr.hier_block2.__init__(self, "ra_fft_sink_c", + gr.io_signature(1, 1, gr.sizeof_gr_complex), + gr.io_signature(0, 0, 0)) + ra_fft_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq, y_per_div=y_per_div, sc_y_per_div=sc_y_per_div, @@ -143,8 +148,8 @@ class ra_fft_sink_c(gr.hier_block, ra_fft_sink_base): fft_rate=fft_rate, average=average, avg_alpha=avg_alpha, title=title, - peak_hold=peak_hold, cfunc=cfunc, - xydfunc=xydfunc, interfunc=interfunc) + peak_hold=peak_hold, ofunc=ofunc, + xydfunc=xydfunc) s2p = gr.serial_to_parallel(gr.sizeof_gr_complex, fft_size) one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * fft_size, @@ -156,8 +161,7 @@ class ra_fft_sink_c(gr.hier_block, ra_fft_sink_base): log = gr.nlog10_ff(20, fft_size, -20*math.log10(fft_size)) sink = gr.message_sink(gr.sizeof_float * fft_size, self.msgq, True) - fg.connect(s2p, one_in_n, fft, c2mag, self.avg, log, sink) - gr.hier_block.__init__(self, fg, s2p, sink) + self.connect(self, s2p, one_in_n, fft, c2mag, self.avg, log, sink) self.win = fft_window(self, parent, size=size) self.set_average(self.average) @@ -203,7 +207,7 @@ class input_watcher (threading.Thread): start = itemsize * (nitems - 1) s = s[start:start+itemsize] - complex_data = Numeric.fromstring (s, Numeric.Float32) + complex_data = numpy.fromstring (s, numpy.float32) de = DataEvent (complex_data) wx.PostEvent (self.event_receiver, de) del de @@ -229,8 +233,8 @@ class fft_window (plot.PlotCanvas): EVT_DATA_EVENT (self, self.set_data) wx.EVT_CLOSE (self, self.on_close_window) self.Bind(wx.EVT_RIGHT_UP, self.on_right_click) - self.Bind(wx.EVT_MOTION, self.on_motion) self.Bind(wx.EVT_LEFT_UP, self.on_left_click) + self.Bind(wx.EVT_MOTION, self.on_motion) self.input_watcher = input_watcher(ra_fftsink.msgq, ra_fftsink.fft_size, self) @@ -248,14 +252,15 @@ class fft_window (plot.PlotCanvas): calc_min = min(dB) calc_max = max(dB) - - dB = self.ra_fftsink.cfunc(dB, L) + if (self.ra_fftsink.ofunc != None): + self.ra_fftsink.ofunc(evt.data,L) + if self.peak_hold: if self.peak_vals is None: self.peak_vals = dB else: - self.peak_vals = Numeric.maximum(dB, self.peak_vals) + self.peak_vals = numpy.maximum(dB, self.peak_vals) dB = self.peak_vals x = max(abs(self.ra_fftsink.sample_rate), abs(self.ra_fftsink.baseband_freq)) @@ -273,20 +278,20 @@ class fft_window (plot.PlotCanvas): units = "Hz" if self.ra_fftsink.input_is_real: # only plot 1/2 the points - x_vals = ((Numeric.arrayrange (L/2) + x_vals = ((numpy.arange (L/2) * (self.ra_fftsink.sample_rate * sf / L)) + self.ra_fftsink.baseband_freq * sf) - points = Numeric.zeros((len(x_vals), 2), Numeric.Float64) + points = numpy.zeros((len(x_vals), 2), numpy.float64) points[:,0] = x_vals points[:,1] = dB[0:L/2] else: # the "negative freqs" are in the second half of the array - x_vals = ((Numeric.arrayrange (-L/2, L/2) + x_vals = ((numpy.arange(-L/2, L/2) * (self.ra_fftsink.sample_rate * sf / L)) + self.ra_fftsink.baseband_freq * sf) - points = Numeric.zeros((len(x_vals), 2), Numeric.Float64) + points = numpy.zeros((len(x_vals), 2), numpy.float64) points[:,0] = x_vals - points[:,1] = Numeric.concatenate ((dB[L/2:], dB[0:L/2])) + points[:,1] = numpy.concatenate ((dB[L/2:], dB[0:L/2])) lines = plot.PolyLine (points, colour='BLUE') graphics = plot.PlotGraphics ([lines], @@ -295,7 +300,7 @@ class fft_window (plot.PlotCanvas): self.Draw (graphics, xAxis=None, yAxis=self.y_range) d = calc_max - calc_min - d *= 0.1 + d = d * 0.1 if self.ra_fftsink.autoscale == True: self.y_range = self._axisInterval ('min', calc_min-d, calc_max+d) else: @@ -364,12 +369,12 @@ class fft_window (plot.PlotCanvas): def on_motion(self, event): if not self.ra_fftsink.xydfunc == None: xy = self.GetXY(event) - self.ra_fftsink.xydfunc (xy) - - def on_left_click(self, event): - if not self.ra_fftsink.interfunc == None: + self.ra_fftsink.xydfunc (0,xy) + + def on_left_click(self,event): + if not self.ra_fftsink.xydfunc == None: xy = self.GetXY(event) - self.ra_fftsink.interfunc (xy[0]) + self.ra_fftsink.xydfunc (1,xy) def build_popup_menu(self): self.id_incr_ref_level = wx.NewId() @@ -451,37 +456,13 @@ def next_down(v, seq): return v -# ---------------------------------------------------------------- -# Deprecated interfaces -# ---------------------------------------------------------------- - -# returns (block, win). -# block requires a single input stream of float -# win is a subclass of wxWindow - -def make_ra_fft_sink_f(fg, parent, title, fft_size, input_rate, ymin = 0, ymax=50): - - block = ra_fft_sink_f(fg, parent, title=title, fft_size=fft_size, sample_rate=input_rate, - y_per_div=(ymax - ymin)/8, ref_level=ymax) - return (block, block.win) - -# returns (block, win). -# block requires a single input stream of gr_complex -# win is a subclass of wxWindow - -def make_ra_fft_sink_c(fg, parent, title, fft_size, input_rate, ymin=0, ymax=50): - block = ra_fft_sink_c(fg, parent, title=title, fft_size=fft_size, sample_rate=input_rate, - y_per_div=(ymax - ymin)/8, ref_level=ymax) - return (block, block.win) - - # ---------------------------------------------------------------- # Standalone test app # ---------------------------------------------------------------- -class test_app_flow_graph (stdgui.gui_flow_graph): +class test_app_flow_graph (stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) fft_size = 256 @@ -496,7 +477,7 @@ class test_app_flow_graph (stdgui.gui_flow_graph): # suck down all the CPU available. Normally you wouldn't use these. thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) - sink1 = ra_fft_sink_c (self, panel, title="Complex Data", fft_size=fft_size, + sink1 = ra_fft_sink_c (panel, title="Complex Data", fft_size=fft_size, sample_rate=input_rate, baseband_freq=100e3, ref_level=60, y_per_div=10) vbox.Add (sink1.win, 1, wx.EXPAND) @@ -505,14 +486,14 @@ class test_app_flow_graph (stdgui.gui_flow_graph): src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) #src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) thr2 = gr.throttle(gr.sizeof_float, input_rate) - sink2 = ra_fft_sink_f (self, panel, title="Real Data", fft_size=fft_size*2, + sink2 = ra_fft_sink_f (panel, title="Real Data", fft_size=fft_size*2, sample_rate=input_rate, baseband_freq=100e3, ref_level=60, y_per_div=10) vbox.Add (sink2.win, 1, wx.EXPAND) self.connect (src2, thr2, sink2) def main (): - app = stdgui.stdapp (test_app_flow_graph, + app = stdgui2.stdapp (test_app_flow_graph, "FFT Sink Test App") app.MainLoop () diff --git a/gr-radio-astronomy/src/python/ra_stripchartsink.py b/gr-radio-astronomy/src/python/ra_stripchartsink.py index 93cb54f4..76988f8f 100755 --- a/gr-radio-astronomy/src/python/ra_stripchartsink.py +++ b/gr-radio-astronomy/src/python/ra_stripchartsink.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2003,2004,2005 Free Software Foundation, Inc. +# Copyright 2003,2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,7 +21,7 @@ # from gnuradio import gr, gru -from gnuradio.wxgui import stdgui +from gnuradio.wxgui import stdgui2 import wx import gnuradio.wxgui.plot as plot import Numeric @@ -33,14 +33,11 @@ import time default_stripchartsink_size = (640,140) global_yvalues = [] -def default_cfunc(datum): - return(datum) - class stripchart_sink_base(object): def __init__(self, input_is_real=False, y_per_div=10, ref_level=50, sample_rate=1, stripsize=4, title='',xlabel="X", ylabel="Y", divbase=0.025, - cfunc=default_cfunc, parallel=False, scaling=1.0, autoscale=False): + parallel=False, scaling=1.0, autoscale=False): # initialize common attributes self.y_divs = 8 @@ -54,7 +51,6 @@ class stripchart_sink_base(object): self.ylabel = ylabel self.divbase = divbase self.scaling = scaling - self.cfunc = cfunc self.input_is_real = input_is_real self.msgq = gr.msg_queue(2) # queue that holds a maximum of 2 messages self.vector=Numeric.zeros(stripsize,Numeric.Float64) @@ -71,21 +67,31 @@ class stripchart_sink_base(object): def set_autoscale(self, auto): self.autoscale = auto -class stripchart_sink_f(gr.hier_block, stripchart_sink_base): - def __init__(self, fg, parent, +class stripchart_sink_f(gr.hier_block2, stripchart_sink_base): + def __init__(self, parent, y_per_div=10, ref_level=50, sample_rate=1, title='', stripsize=4, size=default_stripchartsink_size,xlabel="X", - ylabel="Y", divbase=0.025, cfunc=default_cfunc, + ylabel="Y", divbase=0.025, parallel=False, scaling=1.0, autoscale=False): + if parallel == False: + gr.hier_block2.__init__(self, "stripchart_sink_f", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0, 0, 0)) + else: + gr.hier_block2.__init__(self, "stripchart_sink_f", + gr.io_signature(1, 1, gr.sizeof_float*stripsize), + gr.io_signature(0, 0, 0)) + + stripchart_sink_base.__init__(self, input_is_real=True, y_per_div=y_per_div, ref_level=ref_level, sample_rate=sample_rate, stripsize=stripsize, xlabel=xlabel, ylabel=ylabel, divbase=divbase, title=title, - cfunc=cfunc, parallel=parallel, + parallel=parallel, scaling=scaling, autoscale=autoscale) if (parallel == True): @@ -94,9 +100,7 @@ class stripchart_sink_f(gr.hier_block, stripchart_sink_base): else: one = gr.keep_one_in_n (gr.sizeof_float, 1) sink = gr.message_sink(gr.sizeof_float, self.msgq, True) - fg.connect (one, sink) - - gr.hier_block.__init__(self, fg, one, sink) + self.connect (self, one, sink) self.win = stripchart_window(self, parent, size=size) @@ -182,13 +186,10 @@ class stripchart_window(plot.PlotCanvas): calc_min = min(indata) calc_max = max(indata) d = calc_max - calc_min - d *= 0.1 + d = d * 0.1 if self.stripchartsink.autoscale == True and self.stripchartsink.parallel == True: self.y_range = self._axisInterval ('min', calc_min-d, calc_max+d) - if (self.stripchartsink.parallel != True): - indata = self.stripchartsink.cfunc(indata) - N = self.stripchartsink.stripsize if self.stripchartsink.parallel != True: for i in range(1,N): diff --git a/gr-radio-astronomy/src/python/ra_waterfallsink.py b/gr-radio-astronomy/src/python/ra_waterfallsink.py new file mode 100755 index 00000000..e946f3a1 --- /dev/null +++ b/gr-radio-astronomy/src/python/ra_waterfallsink.py @@ -0,0 +1,646 @@ +#!/usr/bin/env python +# +# Copyright 2003,2004,2005,2007 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 2, 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 import gr, gru, window +from gnuradio.wxgui import stdgui2 +import wx +import gnuradio.wxgui.plot as plot +import numpy +import os +import threading +import math + +default_fftsink_size = (640,240) +default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15) + +def axis_design( x1, x2, nx ): + # Given start, end, and number of labels, return value of first label, + # increment between labels, number of unlabeled division between labels, + # and scale factor. + + dx = abs( x2 - x1 )/float(nx+1) # allow for space at each end + ldx = math.log10(dx) + l2 = math.log10(2.) + l5 = math.log10(5.) + le = math.floor(ldx) + lf = ldx - le + if lf < l2/2: + c = 1 + dt = 10 + elif lf < (l2+l5)/2: + c = 2 + dt = 4 + elif lf < (l5+1)/2: + c = 5 + dt = 5 + else: + c = 1 + dt = 10 + le += 1 + inc = c*pow( 10., le ) + first = math.ceil( x1/inc )*inc + scale = 1. + while ( abs(x1*scale) >= 1e5 ) or ( abs(x2*scale) >= 1e5 ): + scale *= 1e-3 + return ( first, inc, dt, scale ) + + +class waterfall_sink_base(object): + def __init__(self, input_is_real=False, baseband_freq=0, + sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, + average=False, avg_alpha=None, title='', ofunc=None, xydfunc=None): + + # initialize common attributes + self.baseband_freq = baseband_freq + self.sample_rate = sample_rate + self.fft_size = fft_size + self.fft_rate = fft_rate + self.average = average + self.ofunc = ofunc + self.xydfunc = xydfunc + if avg_alpha is None: + self.avg_alpha = 2.0 / fft_rate + else: + self.avg_alpha = avg_alpha + self.title = title + self.input_is_real = input_is_real + self.msgq = gr.msg_queue(2) # queue up to 2 messages + + def set_average(self, average): + self.average = average + if average: + self.avg.set_taps(self.avg_alpha) + else: + self.avg.set_taps(1.0) + + def set_avg_alpha(self, avg_alpha): + self.avg_alpha = avg_alpha + + def set_baseband_freq(self, baseband_freq): + self.baseband_freq = baseband_freq + + def set_sample_rate(self, sample_rate): + self.sample_rate = sample_rate + self._set_n() + + def _set_n(self): + self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + +class waterfall_sink_f(gr.hier_block2, waterfall_sink_base): + def __init__(self, parent, baseband_freq=0, + ref_level=0, sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, average=False, avg_alpha=None, + title='', size=default_fftsink_size, report=None, span=40, ofunc=None, xydfunc=None): + + gr.hier_block2.__init__(self, "waterfall_sink_f", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0, 0, 0)) + + waterfall_sink_base.__init__(self, input_is_real=True, + baseband_freq=baseband_freq, + sample_rate=sample_rate, + fft_size=fft_size, fft_rate=fft_rate, + average=average, avg_alpha=avg_alpha, + title=title) + + s2p = gr.serial_to_parallel(gr.sizeof_float, self.fft_size) + self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size, + max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + mywindow = window.blackmanharris(self.fft_size) + fft = gr.fft_vfc(self.fft_size, True, mywindow) + c2mag = gr.complex_to_mag(self.fft_size) + self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) + log = gr.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size)) + sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) + + self.connect(self, s2p, self.one_in_n, fft, c2mag, self.avg, log, sink) + self.win = waterfall_window(self, parent, size=size, report=report, + ref_level=ref_level, span=span, ofunc=ofunc, xydfunc=xydfunc) + self.set_average(self.average) + + +class waterfall_sink_c(gr.hier_block2, waterfall_sink_base): + def __init__(self, parent, baseband_freq=0, + ref_level=0, sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, average=False, avg_alpha=None, + title='', size=default_fftsink_size, report=None, span=40, ofunc=None, xydfunc=None): + + gr.hier_block2.__init__(self, "waterfall_sink_c", + gr.io_signature(1, 1, gr.sizeof_gr_complex), + gr.io_signature(0, 0, 0)) + + waterfall_sink_base.__init__(self, input_is_real=False, + baseband_freq=baseband_freq, + sample_rate=sample_rate, + fft_size=fft_size, + fft_rate=fft_rate, + average=average, avg_alpha=avg_alpha, + title=title) + + s2p = gr.serial_to_parallel(gr.sizeof_gr_complex, self.fft_size) + self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size, + max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + + mywindow = window.blackmanharris(self.fft_size) + fft = gr.fft_vcc(self.fft_size, True, mywindow) + c2mag = gr.complex_to_mag(self.fft_size) + self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) + log = gr.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size)) + sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) + + self.connect(self, s2p, self.one_in_n, fft, c2mag, self.avg, log, sink) + self.win = waterfall_window(self, parent, size=size, report=report, + ref_level=ref_level, span=span, ofunc=ofunc, xydfunc=xydfunc) + self.set_average(self.average) + + +# ------------------------------------------------------------------------ + +myDATA_EVENT = wx.NewEventType() +EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0) + + +class DataEvent(wx.PyEvent): + def __init__(self, data): + wx.PyEvent.__init__(self) + self.SetEventType (myDATA_EVENT) + self.data = data + + def Clone (self): + self.__class__ (self.GetId()) + + +class input_watcher (threading.Thread): + def __init__ (self, msgq, fft_size, event_receiver, **kwds): + threading.Thread.__init__ (self, **kwds) + self.setDaemon (1) + self.msgq = msgq + self.fft_size = fft_size + self.event_receiver = event_receiver + self.keep_running = True + self.start () + + def run (self): + while (self.keep_running): + msg = self.msgq.delete_head() # blocking read of message queue + itemsize = int(msg.arg1()) + nitems = int(msg.arg2()) + + s = msg.to_string() # get the body of the msg as a string + + # There may be more than one FFT frame in the message. + # If so, we take only the last one + if nitems > 1: + start = itemsize * (nitems - 1) + s = s[start:start+itemsize] + + complex_data = numpy.fromstring (s, numpy.float32) + de = DataEvent (complex_data) + wx.PostEvent (self.event_receiver, de) + del de + + +class waterfall_window (wx.ScrolledWindow): + def __init__ (self, fftsink, parent, id = -1, + pos = wx.DefaultPosition, size = wx.DefaultSize, + style = wx.DEFAULT_FRAME_STYLE, name = "", report=None, + ref_level = 0, span = 50, ofunc=None, xydfunc=None): + wx.ScrolledWindow.__init__(self, parent, id, pos, size, + style|wx.HSCROLL, name) + self.parent = parent + self.SetCursor(wx.StockCursor(wx.CURSOR_IBEAM)) + self.ref_level = ref_level + self.scale_factor = 256./span + + self.ppsh = 128 # pixels per scroll, horizontal + self.SetScrollbars( self.ppsh, 0, fftsink.fft_size/self.ppsh, 0 ) + + self.fftsink = fftsink + self.size = size + self.report = report + self.ofunc = ofunc + self.xydfunc = xydfunc + + dc1 = wx.MemoryDC() + dc1.SetFont( wx.SMALL_FONT ) + self.h_scale = dc1.GetCharHeight() + 3 + #self.bm_size = ( self.fftsink.fft_size, self.size[1] - self.h_scale ) + self.im_size = ( self.fftsink.fft_size, self.size[1] - self.h_scale ) + #self.bm = wx.EmptyBitmap( self.bm_size[0], self.bm_size[1], -1) + self.im = wx.EmptyImage( self.im_size[0], self.im_size[1], True ) + self.im_cur = 0 + + self.baseband_freq = None + + self.make_pens() + + wx.EVT_PAINT( self, self.OnPaint ) + wx.EVT_CLOSE (self, self.on_close_window) + #wx.EVT_LEFT_UP(self, self.on_left_up) + #wx.EVT_LEFT_DOWN(self, self.on_left_down) + EVT_DATA_EVENT (self, self.set_data) + + self.build_popup_menu() + + wx.EVT_CLOSE (self, self.on_close_window) + self.Bind(wx.EVT_RIGHT_UP, self.on_right_click) + self.Bind(wx.EVT_MOTION, self.on_motion) + + self.down_pos = None + + self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self) + + def on_close_window (self, event): + self.keep_running = False + + def on_left_down( self, evt ): + self.down_pos = evt.GetPosition() + self.down_time = evt.GetTimestamp() + + def on_left_up( self, evt ): + if self.down_pos: + dt = ( evt.GetTimestamp() - self.down_time )/1000. + pph = self.fftsink.fft_size/float(self.fftsink.sample_rate) + dx = evt.GetPosition()[0] - self.down_pos[0] + if dx != 0: + rt = pph/dx + else: + rt = 0 + t = 'Down time: %f Delta f: %f Period: %f' % ( dt, dx/pph, rt ) + print t + if self.report: + self.report(t) + + def on_motion(self, event): + if self.xydfunc: + pos = event.GetPosition() + self.xydfunc(pos) + + + def const_list(self,const,len): + return [const] * len + + def make_colormap(self): + r = [] + r.extend(self.const_list(0,96)) + r.extend(range(0,255,4)) + r.extend(self.const_list(255,64)) + r.extend(range(255,128,-4)) + + g = [] + g.extend(self.const_list(0,32)) + g.extend(range(0,255,4)) + g.extend(self.const_list(255,64)) + g.extend(range(255,0,-4)) + g.extend(self.const_list(0,32)) + + b = range(128,255,4) + b.extend(self.const_list(255,64)) + b.extend(range(255,0,-4)) + b.extend(self.const_list(0,96)) + return (r,g,b) + + def make_pens(self): + (r,g,b) = self.make_colormap() + self.rgb = numpy.transpose( numpy.array( (r,g,b) ).astype(numpy.int8) ) + + def OnPaint(self, event): + dc = wx.BufferedPaintDC(self) + self.DoDrawing( dc ) + + def DoDrawing(self,dc): + w, h = self.GetClientSizeTuple() + w = min( w, self.fftsink.fft_size ) + if w <= 0: + return + + if dc is None: + dc = wx.BufferedDC( wx.ClientDC(self), (w,h) ) + + dc.SetBackground( wx.Brush( self.GetBackgroundColour(), wx.SOLID ) ) + dc.Clear() + + x, y = self.GetViewStart() + x *= self.ppsh + + ih = min( h - self.h_scale, self.im_size[1] - self.im_cur ) + r = wx.Rect( x, self.im_cur, w, ih ) + bm = wx.BitmapFromImage( self.im.GetSubImage(r) ) + dc.DrawBitmap( bm, 0, self.h_scale ) + rem = min( self.im_size[1] - ih, h - ih - self.h_scale ) + if( rem > 0 ): + r = wx.Rect( x, 0, w, rem ) + bm = wx.BitmapFromImage( self.im.GetSubImage(r) ) + dc.DrawBitmap( bm, 0, ih + self.h_scale ) + + # Draw axis + if self.baseband_freq != self.fftsink.baseband_freq: + self.baseband_freq = self.fftsink.baseband_freq + t = self.fftsink.sample_rate*w/float(self.fftsink.fft_size) + self.ax_spec = axis_design( self.baseband_freq - t/2, + self.baseband_freq + t/2, 7 ) + dc.SetFont( wx.SMALL_FONT ) + fo = self.baseband_freq + po = self.fftsink.fft_size/2 + pph = self.fftsink.fft_size/float(self.fftsink.sample_rate) + f = math.floor((fo-po/pph)/self.ax_spec[1])*self.ax_spec[1] + while True: + t = po + ( f - fo )*pph + s = str( f*self.ax_spec[3] ) + e = dc.GetTextExtent( s ) + if t - e[1]/2 >= x + w: + break + dc.DrawText( s, t - x - e[0]/2, 0 ) + dc.DrawLine( t - x, e[1] - 1, t - x, self.h_scale ) + dt = self.ax_spec[1]/self.ax_spec[2]*pph + for i in range(self.ax_spec[2]-1): + t += dt + if t >= x + w: + break + dc.DrawLine( t - x, e[1] + 1, t - x, self.h_scale ) + f += self.ax_spec[1] + + def const_list(self,const,len): + a = [const] + for i in range(1,len): + a.append(const) + return a + + def make_colormap(self): + r = [] + r.extend(self.const_list(0,96)) + r.extend(range(0,255,4)) + r.extend(self.const_list(255,64)) + r.extend(range(255,128,-4)) + + g = [] + g.extend(self.const_list(0,32)) + g.extend(range(0,255,4)) + g.extend(self.const_list(255,64)) + g.extend(range(255,0,-4)) + g.extend(self.const_list(0,32)) + + b = range(128,255,4) + b.extend(self.const_list(255,64)) + b.extend(range(255,0,-4)) + b.extend(self.const_list(0,96)) + return (r,g,b) + + def set_data (self, evt): + dB = evt.data + L = len (dB) + + if self.ofunc != None: + self.ofunc(evt.data, L) + #dc1 = wx.MemoryDC() + #dc1.SelectObject(self.bm) + + # Scroll existing bitmap + if 1: + #dc1.Blit(0,1,self.bm_size[0],self.bm_size[1]-1,dc1,0,0, + # wx.COPY,False,-1,-1) + pass + else: + for i in range( self.bm_size[1]-1, 0, -1 ): + dc1.Blit( 0, i, self.bm_size[0], 1, dc1, 0, i-1 ) + + x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq)) + if x >= 1e9: + sf = 1e-9 + units = "GHz" + elif x >= 1e6: + sf = 1e-6 + units = "MHz" + else: + sf = 1e-3 + units = "kHz" + + + if self.fftsink.input_is_real: # only plot 1/2 the points + d_max = L/2 + p_width = 2 + else: + d_max = L/2 + p_width = 1 + + scale_factor = self.scale_factor + dB -= self.ref_level + dB *= scale_factor + dB = dB.astype(numpy.int_).clip( min=0, max=255 ) + if self.fftsink.input_is_real: # real fft + dB = numpy.array( ( dB[0:d_max][::-1], dB[0:d_max] ) ) + else: # complex fft + dB = numpy.concatenate( ( dB[d_max:L], dB[0:d_max] ) ) + + dB = self.rgb[dB] + img = wx.ImageFromData( L, 1, dB.ravel().tostring() ) + #bm = wx.BitmapFromImage( img ) + #dc1.DrawBitmap( bm, 0, 0 ) + ibuf = self.im.GetDataBuffer() + self.im_cur -= 1 + if self.im_cur < 0: + self.im_cur = self.im_size[1] - 1 + start = 3*self.im_cur*self.im_size[0] + ibuf[start:start+3*self.im_size[0]] = img.GetData() + + #del dc1 + self.DoDrawing(None) + + def on_average(self, evt): + # print "on_average" + self.fftsink.set_average(evt.IsChecked()) + + def on_right_click(self, event): + menu = self.popup_menu + self.PopupMenu(menu, event.GetPosition()) + + + def build_popup_menu(self): + id_ref_gain = wx.NewId() + self.Bind( wx.EVT_MENU, self.on_ref_gain, id=id_ref_gain ) + + # make a menu + menu = wx.Menu() + self.popup_menu = menu + menu.Append( id_ref_gain, "Ref Level and Gain" ) + self.rg_dialog = None + + self.checkmarks = { + #self.id_average : lambda : self.fftsink.average + } + + def on_ref_gain( self, evt ): + if self.rg_dialog == None: + self.rg_dialog = rg_dialog( self.parent, self.set_ref_gain, + ref=self.ref_level, + span=256./self.scale_factor ) + self.rg_dialog.Show( True ) + + def set_ref_gain( self, ref, span ): + self.ref_level = ref + self.scale_factor = 256/span + +class rg_dialog( wx.Dialog ): + def __init__( self, parent, set_function, ref=0, span=256./5. ): + wx.Dialog.__init__( self, parent, -1, "Waterfall Settings" ) + self.set_function = set_function + #status_bar = wx.StatusBar( self, -1 ) + + d_sizer = wx.BoxSizer( wx.VERTICAL ) # dialog sizer + f_sizer = wx.BoxSizer( wx.VERTICAL ) # form sizer + vs = 10 + + #f_sizer.Add( fn_sizer, 0, flag=wx.TOP, border=10 ) + + h_sizer = wx.BoxSizer( wx.HORIZONTAL ) + self.ref = tab_item( self, "Ref Level:", 4, "dB" ) + self.ref.ctrl.SetValue( "%d" % ref ) + h_sizer.Add((0,0),1) + h_sizer.Add( self.ref, 0 ) + h_sizer.Add((0,0),1) + self.span = tab_item( self, "Range:", 4, "dB" ) + self.span.ctrl.SetValue( "%d" % span ) + h_sizer.Add( self.span, 0 ) + h_sizer.Add((0,0),1) + f_sizer.Add( h_sizer, 0, flag=wx.TOP|wx.EXPAND, border=vs ) + + d_sizer.Add((0,0),1) + d_sizer.Add( f_sizer, 0, flag=wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND ) + d_sizer.Add((0,0),1) + d_sizer.Add((0,0),1) + + button_sizer = wx.BoxSizer( wx.HORIZONTAL ) + apply_button = wx.Button( self, -1, "Apply" ) + apply_button.Bind( wx.EVT_BUTTON, self.apply_evt ) + cancel_button = wx.Button( self, -1, "Cancel" ) + cancel_button.Bind( wx.EVT_BUTTON, self.cancel_evt ) + ok_button = wx.Button( self, -1, "OK" ) + ok_button.Bind( wx.EVT_BUTTON, self.ok_evt ) + button_sizer.Add((0,0),1) + button_sizer.Add( apply_button, 0, + flag=wx.ALIGN_CENTER_HORIZONTAL ) + button_sizer.Add((0,0),1) + button_sizer.Add( cancel_button, 0, + flag=wx.ALIGN_CENTER_HORIZONTAL ) + button_sizer.Add((0,0),1) + button_sizer.Add( ok_button, 0, + flag=wx.ALIGN_CENTER_HORIZONTAL ) + button_sizer.Add((0,0),1) + d_sizer.Add( button_sizer, 0, + flag=wx.EXPAND|wx.ALIGN_CENTER|wx.BOTTOM, border=30 ) + self.SetSizer( d_sizer ) + + def apply_evt( self, evt ): + self.do_apply() + + def cancel_evt( self, evt ): + self.Show( False ) + + def ok_evt( self, evt ): + self.do_apply() + self.Show( False ) + + def do_apply( self ): + r = float( self.ref.ctrl.GetValue() ) + g = float( self.span.ctrl.GetValue() ) + self.set_function( r, g ) + +def next_up(v, seq): + """ + Return the first item in seq that is > v. + """ + for s in seq: + if s > v: + return s + return v + +def next_down(v, seq): + """ + Return the last item in seq that is < v. + """ + rseq = list(seq[:]) + rseq.reverse() + + for s in rseq: + if s < v: + return s + return v + +# One of many copies that should be consolidated . . . +def tab_item( parent, label, chars, units, style=wx.TE_RIGHT, value="" ): + s = wx.BoxSizer( wx.HORIZONTAL ) + s.Add( wx.StaticText( parent, -1, label ), 0, + flag=wx.ALIGN_CENTER_VERTICAL ) + s.ctrl = wx.TextCtrl( parent, -1, style=style, value=value ) + s.ctrl.SetMinSize( ( (1.00+chars)*s.ctrl.GetCharWidth(), + 1.25*s.ctrl.GetCharHeight() ) ) + s.Add( s.ctrl, -1, flag=wx.LEFT, border=3 ) + s.Add( wx.StaticText( parent, -1, units ), 0, + flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=1 ) + return s + + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +class test_app_flow_graph (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + fft_size = 512 + + # build our flow graph + input_rate = 20.000e3 + + # Generate a complex sinusoid + src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) + #src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) + + # We add these throttle blocks so that this demo doesn't + # suck down all the CPU available. Normally you wouldn't use these. + thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) + + sink1 = waterfall_sink_c (panel, title="Complex Data", + fft_size=fft_size, + sample_rate=input_rate, baseband_freq=0, + size=(600,144) ) + vbox.Add (sink1.win, 1, wx.EXPAND) + self.connect (src1, thr1, sink1) + + # generate a real sinusoid + src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) + #src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) + thr2 = gr.throttle(gr.sizeof_float, input_rate) + sink2 = waterfall_sink_f (panel, title="Real Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=0) + vbox.Add (sink2.win, 1, wx.EXPAND) + self.connect (src2, thr2, sink2) + +def main (): + app = stdgui2.stdapp (test_app_flow_graph, + "Waterfall Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () diff --git a/gr-radio-astronomy/src/python/usrp_psr_receiver.py b/gr-radio-astronomy/src/python/usrp_psr_receiver.py index f1e7707d..c447cfec 100755 --- a/gr-radio-astronomy/src/python/usrp_psr_receiver.py +++ b/gr-radio-astronomy/src/python/usrp_psr_receiver.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -29,26 +29,26 @@ # and epoch folding analysis # # -from gnuradio import gr, gru, blks, audio -import usrp_dbid +from gnuradio import gr, gru, blks2, audio +from usrpm import usrp_dbid from gnuradio import usrp, optfir from gnuradio import eng_notation from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, ra_fftsink, ra_stripchartsink, form, slider +from gnuradio.wxgui import stdgui2, ra_fftsink, ra_stripchartsink, form, slider from optparse import OptionParser import wx import sys import Numeric -import FFT +import numpy.fft import ephem import time import os import math -class app_flow_graph(stdgui.gui_flow_graph): +class app_flow_graph(stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) self.frame = frame self.panel = panel @@ -85,6 +85,7 @@ class app_flow_graph(stdgui.gui_flow_graph): parser.add_option("-B", "--divbase", type="eng_float", default=20, help="Y/Div menu base") parser.add_option("-I", "--division", type="eng_float", default=100, help="Y/Div") parser.add_option("-A", "--audio_source", default="plughw:0,0", help="Audio input device spec") + parser.add_option("-N", "--num_pulses", default=1, type="eng_float", help="Number of display pulses") (options, args) = parser.parse_args() if len(args) != 0: parser.print_help() @@ -95,7 +96,8 @@ class app_flow_graph(stdgui.gui_flow_graph): self.reflevel = options.reflevel self.divbase = options.divbase self.division = options.division - self.audiodev = options.audio_dev + self.audiodev = options.audio_source + self.mult = int(options.num_pulses) # Low-pass cutoff for post-detector filter # Set to 100Hz usually, since lots of pulsars fit in this @@ -220,8 +222,8 @@ class app_flow_graph(stdgui.gui_flow_graph): self.interp = int(interp) self.decim = int(decim) - # So that we can view 4 pulses in the pulse viewer window - FOLD_MULT=1 + # So that we can view N pulses in the pulse viewer window + FOLD_MULT=self.mult # determine the daughterboard subdevice we're using self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) @@ -245,7 +247,7 @@ class app_flow_graph(stdgui.gui_flow_graph): # # We use this as a crude volume control for the audio output # - self.volume = gr.multiply_const_ff(10**(-1)) + #self.volume = gr.multiply_const_ff(10**(-1)) # @@ -292,10 +294,10 @@ class app_flow_graph(stdgui.gui_flow_graph): # # Create the appropriate FFT scope # - self.scope = ra_fftsink.ra_fft_sink_f (self, panel, + self.scope = ra_fftsink.ra_fft_sink_f (panel, fft_size=int(options.fft_size), sample_rate=PULSAR_MAX_FREQ*2, title="Post-detector spectrum", - cfunc=self.pulsarfunc, xydfunc=self.xydfunc, fft_rate=200) + ofunc=self.pulsarfunc, xydfunc=self.xydfunc, fft_rate=200) # # Tell scope we're looking from DC to PULSAR_MAX_FREQ @@ -309,9 +311,10 @@ class app_flow_graph(stdgui.gui_flow_graph): hz = "%5.3fHz " % self.pulse_freq per = "(%5.3f sec)" % (1.0/self.pulse_freq) sr = "%d sps" % (int(self.pulse_freq*self.folding)) - self.chart = ra_stripchartsink.stripchart_sink_f (self, panel, + times = " %d Pulse Intervals" % self.mult + self.chart = ra_stripchartsink.stripchart_sink_f (panel, sample_rate=1, - stripsize=self.folding*FOLD_MULT, parallel=True, title="Pulse Profiles: "+hz+per, + stripsize=self.folding*FOLD_MULT, parallel=True, title="Pulse Profiles: "+hz+per+times, xlabel="Seconds @ "+sr, ylabel="Level", autoscale=True, divbase=self.divbase, scaling=1.0/(self.folding*self.pulse_freq)) self.chart.set_ref_level(self.reflevel) @@ -342,7 +345,8 @@ class app_flow_graph(stdgui.gui_flow_graph): # # Audio sink # - self.audio = audio.sink(second_input_rate, self.audiodev) + #print "input_rate ", second_input_rate, "audiodev ", self.audiodev + #self.audio = audio.sink(second_input_rate, self.audiodev) # # The three post-detector filters @@ -356,17 +360,8 @@ class app_flow_graph(stdgui.gui_flow_graph): self.second = gr.fir_filter_fff (int(p), second_filter) self.third = gr.fir_filter_fff (10, third_filter) - # Split complex USRP stream into a pair of floats - self.splitter = gr.complex_to_float (1); - - # I squarer (detector) - self.multI = gr.multiply_ff(); - - # Q squarer (detector) - self.multQ = gr.multiply_ff(); - - # Adding squared I and Q to produce instantaneous signal power - self.adder = gr.add_ff(); + # Detector + self.detector = gr.complex_to_mag_squared() self.enable_comb_filter = False # Epoch folder comb filter @@ -375,7 +370,7 @@ class app_flow_graph(stdgui.gui_flow_graph): self.folder_comb = gr.fft_filter_ccc(1,bogtaps) # Rational resampler - self.folder_rr = blks.rational_resampler_fff(self, self.interp, self.decim) + self.folder_rr = blks2.rational_resampler_fff(self.interp, self.decim) # Epoch folder bandpass bogtaps = Numeric.zeros(1, Numeric.Float64) @@ -402,31 +397,18 @@ class app_flow_graph(stdgui.gui_flow_graph): # Start connecting configured modules in the receive chain # - # Connect raw USRP to de-dispersion filter, complex->float splitter - self.connect(self.u, self.dispfilt, self.splitter) - - # Connect splitter outputs to multipliers - # First do I^2 - self.connect((self.splitter, 0), (self.multI,0)) - self.connect((self.splitter, 0), (self.multI,1)) + # Connect raw USRP to de-dispersion filter, detector + self.connect(self.u, self.dispfilt, self.detector) - # Then do Q^2 - self.connect((self.splitter, 1), (self.multQ,0)) - self.connect((self.splitter, 1), (self.multQ,1)) - - # Then sum the squares - self.connect(self.multI, (self.adder,0)) - self.connect(self.multQ, (self.adder,1)) - - # Connect detector/adder output to FIR LPF + # Connect detector output to FIR LPF # in two stages, followed by the FFT scope - self.connect(self.adder, self.first, + self.connect(self.detector, self.first, self.second, self.third, self.scope) # Connect audio output - self.connect(self.first, self.volume) - self.connect(self.volume, (self.audio, 0)) - self.connect(self.volume, (self.audio, 1)) + #self.connect(self.first, self.volume) + #self.connect(self.volume, (self.audio, 0)) + #self.connect(self.volume, (self.audio, 1)) # Connect epoch folder if self.enable_comb_filter == True: @@ -475,7 +457,7 @@ class app_flow_graph(stdgui.gui_flow_graph): options.freq = float(r[0]+r[1])/2 self.set_gain(options.gain) - self.set_volume(-10.0) + #self.set_volume(-10.0) if not(self.set_freq(options.freq)): self._set_status_msg("Failed to set initial frequency") @@ -552,9 +534,9 @@ class app_flow_graph(stdgui.gui_flow_graph): myform['foldavg'] = form.slider_field(parent=self.panel, sizer=vbox2, label="Folder Averaging", weight=1, min=1, max=20, callback=self.set_folder_averaging) vbox2.Add((6,0), 0, 0) - myform['volume'] = form.quantized_slider_field(parent=self.panel, sizer=vbox2, - label="Audio Volume", weight=1, range=(-20, 0, 0.5), callback=self.set_volume) - vbox2.Add((6,0), 0, 0) + #myform['volume'] = form.quantized_slider_field(parent=self.panel, sizer=vbox2, + #label="Audio Volume", weight=1, range=(-20, 0, 0.5), callback=self.set_volume) + #vbox2.Add((6,0), 0, 0) myform['DM'] = form.float_field( parent=self.panel, sizer=vbox2, label="DM", weight=1, callback=myform.check_input_and_call(_form_set_dm)) @@ -675,9 +657,9 @@ class app_flow_graph(stdgui.gui_flow_graph): self.subdev.set_gain(gain) - def set_volume(self, vol): - self.myform['volume'].set_value(vol) - self.volume.set_k((10**(vol/10))/8192) + #def set_volume(self, vol): + #self.myform['volume'].set_value(vol) + #self.volume.set_k((10**(vol/10))/8192) # Callback for spectral-averaging slider def set_averaging(self, avval): @@ -1079,7 +1061,7 @@ class app_flow_graph(stdgui.gui_flow_graph): tmp[i] = complex(math.cos(phi), math.sin(phi)) n += 1 - self.disp_taps = FFT.inverse_fft(tmp) + self.disp_taps = numpy.fft.ifft(tmp) return(self.disp_taps) # @@ -1107,7 +1089,7 @@ class app_flow_graph(stdgui.gui_flow_graph): return(int(ntaps)) def main (): - app = stdgui.stdapp(app_flow_graph, "RADIO ASTRONOMY PULSAR RECEIVER: $Revision: 6077 $", nstatus=1) + app = stdgui2.stdapp(app_flow_graph, "RADIO ASTRONOMY PULSAR RECEIVER: $Revision: 7241 $", nstatus=1) app.MainLoop() if __name__ == '__main__': diff --git a/gr-radio-astronomy/src/python/usrp_ra_receiver.py b/gr-radio-astronomy/src/python/usrp_ra_receiver.py index c68808e8..60d55944 100755 --- a/gr-radio-astronomy/src/python/usrp_ra_receiver.py +++ b/gr-radio-astronomy/src/python/usrp_ra_receiver.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -11,7 +11,7 @@ # # 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 +# 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 @@ -22,570 +22,1363 @@ from gnuradio import gr, gru from gnuradio import usrp -import usrp_dbid +from usrpm import usrp_dbid from gnuradio import eng_notation from gnuradio.eng_option import eng_option -from gnuradio.wxgui import stdgui, ra_fftsink, ra_stripchartsink, waterfallsink, form, slider +from gnuradio.wxgui import stdgui2, ra_fftsink, ra_stripchartsink, ra_waterfallsink, form, slider from optparse import OptionParser import wx import sys -from Numeric import * -import FFT +import Numeric +import time +import numpy.fft import ephem -from gnuradio.local_calibrator import * - -class app_flow_graph(stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__(self) - - self.frame = frame - self.panel = panel - - parser = OptionParser(option_class=eng_option) - parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), - help="select USRP Rx side A or B (default=A)") - parser.add_option("-d", "--decim", type="int", default=16, - help="set fgpa decimation rate to DECIM [default=%default]") - parser.add_option("-f", "--freq", type="eng_float", default=None, - help="set frequency to FREQ", metavar="FREQ") - parser.add_option("-a", "--avg", type="eng_float", default=1.0, - help="set spectral averaging alpha") - parser.add_option("-i", "--integ", type="eng_float", default=1.0, - help="set integration time") - parser.add_option("-g", "--gain", type="eng_float", default=None, - help="set gain in dB (default is midpoint)") - parser.add_option("-l", "--reflevel", type="eng_float", default=30.0, - help="Set Total power reference level") - parser.add_option("-y", "--division", type="eng_float", default=0.5, - help="Set Total power Y division size") - parser.add_option("-e", "--longitude", type="eng_float", default=-76.02, help="Set Observer Longitude") - parser.add_option("-c", "--latitude", type="eng_float", default=44.85, help="Set Observer Latitude") - parser.add_option("-o", "--observing", type="eng_float", default=0.0, - help="Set observing frequency") - parser.add_option("-x", "--ylabel", default="dB", help="Y axis label") - parser.add_option("-C", "--cfunc", default="default", help="Calibration function name") - parser.add_option("-z", "--divbase", type="eng_float", default=0.025, help="Y Division increment base") - parser.add_option("-v", "--stripsize", type="eng_float", default=2400, help="Size of stripchart, in 2Hz samples") - parser.add_option("-F", "--fft_size", type="eng_float", default=1024, help="Size of FFT") - - parser.add_option("-N", "--decln", type="eng_float", default=999.99, help="Observing declination") - parser.add_option("-I", "--interfilt", action="store_true", default=False) - parser.add_option("-X", "--prefix", default="./") - (options, args) = parser.parse_args() - if len(args) != 0: - parser.print_help() - sys.exit(1) - - self.show_debug_info = True - - # build the graph - - self.u = usrp.source_c(decim_rate=options.decim) - self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) - self.cardtype = self.u.daughterboard_id(0) - # Set initial declination - self.decln = options.decln - - # Turn off interference filter by default - self.use_interfilt = options.interfilt - - # determine the daughterboard subdevice we're using - self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) - - input_rate = self.u.adc_freq() / self.u.decim_rate() - - tpstr="calib_"+options.cfunc+"_total_power" - sstr="calib_"+options.cfunc+"_fft" - self.tpcfunc=eval(tpstr) - self.scfunc=eval(sstr) - - # - # Set prefix for data files - # - self.prefix = options.prefix - calib_set_prefix(self.prefix) - - # Set up FFT display - self.scope = ra_fftsink.ra_fft_sink_c (self, panel, - fft_size=int(options.fft_size), sample_rate=input_rate, - fft_rate=8, title="Spectral", - cfunc=self.scfunc, xydfunc=self.xydfunc, interfunc=self.interference) - - # Set up ephemeris data - self.locality = ephem.Observer() - self.locality.long = str(options.longitude) - self.locality.lat = str(options.latitude) - - # Set up stripchart display - self.stripsize = int(options.stripsize) - self.chart = ra_stripchartsink.stripchart_sink_f (self, panel, - stripsize=self.stripsize, - title="Continuum", - xlabel="LMST Offset (Seconds)", - scaling=1.0, ylabel=options.ylabel, - divbase=options.divbase, cfunc=self.tpcfunc) - - # Set center frequency - self.centerfreq = options.freq - - # Set observing frequency (might be different from actual programmed - # RF frequency) - if options.observing == 0.0: - self.observing = options.freq - else: - self.observing = options.observing - - self.bw = input_rate - - # - # Produce a default interference map - # May not actually get used, unless --interfilt was specified - # - self.intmap = Numeric.zeros(256,Numeric.Complex64) - for i in range(0,len(self.intmap)): - self.intmap[i] = complex(1.0, 0.0) - - # We setup the first two integrators to produce a fixed integration - # Down to 1Hz, with output at 1 samples/sec - N = input_rate/5000 - - # Second stage runs on decimated output of first - M = (input_rate/N) - - # Create taps for first integrator - t = range(0,N-1) - tapsN = [] - for i in t: - tapsN.append(1.0/N) - - # Create taps for second integrator - t = range(0,M-1) - tapsM = [] - for i in t: - tapsM.append(1.0/M) - - # - # The 3rd integrator is variable, and user selectable at runtime - # This integrator doesn't decimate, but is used to set the - # final integration time based on the constant 1Hz input samples - # The strip chart is fed at a constant 1Hz rate as a result - # - - # - # Call constructors for receive chains - # - - # - # This is the interference-zapping filter - # - # The GUI is used to set/clear inteference zones in - # the filter. The non-interfering zones are set to - # 1.0. - # - if 0: - self.interfilt = gr.fft_filter_ccc(1,self.intmap) - tmp = FFT.inverse_fft(self.intmap) - self.interfilt.set_taps(tmp) - - # The three integrators--two FIR filters, and an IIR final filter - self.integrator1 = gr.fir_filter_fff (N, tapsN) - self.integrator2 = gr.fir_filter_fff (M, tapsM) - self.integrator3 = gr.single_pole_iir_filter_ff(1.0) - - # Split complex USRP stream into a pair of floats - self.splitter = gr.complex_to_float (1); - self.toshort = gr.float_to_short(); - - # I squarer (detector) - self.multI = gr.multiply_ff(); - - # Q squarer (detector) - self.multQ = gr.multiply_ff(); - - # Adding squared I and Q to produce instantaneous signal power - self.adder = gr.add_ff(); - - # - # Start connecting configured modules in the receive chain - # - - # Connect interference-filtered USRP input to selected scope function - if self.use_interfilt == True: - self.connect(self.u, self.interfilt, self.scope) - # Connect interference-filtered USRP to a complex->float splitter - self.connect(self.interfilt, self.splitter) - - else: - self.connect(self.u, self.scope) - self.connect(self.u, self.splitter) - - # Connect splitter outputs to multipliers - # First do I^2 - self.connect((self.splitter, 0), (self.multI,0)) - self.connect((self.splitter, 0), (self.multI,1)) - - # Then do Q^2 - self.connect((self.splitter, 1), (self.multQ,0)) - self.connect((self.splitter, 1), (self.multQ,1)) - - # Then sum the squares - self.connect(self.multI, (self.adder,0)) - self.connect(self.multQ, (self.adder,1)) - - # Connect adder output to three-stages of FIR integrator - self.connect(self.adder, self.integrator1, - self.integrator2, self.integrator3, self.chart) - - - self._build_gui(vbox) - - # Make GUI agree with command-line - self.myform['integration'].set_value(int(options.integ)) - self.myform['average'].set_value(int(options.avg)) - - # Make integrator agree with command line - self.set_integration(int(options.integ)) - - # Make spectral averager agree with command line - if options.avg != 1.0: - self.scope.set_avg_alpha(float(1.0/options.avg)) - calib_set_avg_alpha(float(options.avg)) - self.scope.set_average(True) - - - # Set division size - self.chart.set_y_per_div(options.division) - - # Set reference(MAX) level - self.chart.set_ref_level(options.reflevel) - - # set initial values - - if options.gain is None: - # if no gain was specified, use the mid-point in dB - g = self.subdev.gain_range() - options.gain = float(g[0]+g[1])/2 - - if options.freq is None: - # if no freq was specified, use the mid-point - r = self.subdev.freq_range() - options.freq = float(r[0]+r[1])/2 - - # Set the initial gain control - self.set_gain(options.gain) - - if not(self.set_freq(options.freq)): - self._set_status_msg("Failed to set initial frequency") - - self.set_decln (self.decln) - calib_set_decln (self.decln) - - self.myform['decim'].set_value(self.u.decim_rate()) - self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) - self.myform['dbname'].set_value(self.subdev.name()) - - # Make sure calibrator knows what our bandwidth is - calib_set_bw(self.u.adc_freq() / self.u.decim_rate()) - - # Set analog baseband filtering, if DBS_RX - if self.cardtype == usrp_dbid.DBS_RX: - lbw = (self.u.adc_freq() / self.u.decim_rate()) / 2 - if lbw < 1.0e6: - lbw = 1.0e6 - self.subdev.set_bw(lbw) - - # Tell calibrator our declination as well - calib_set_decln(self.decln) - - # Start the timer for the LMST display - self.lmst_timer.Start(1000) - - - def _set_status_msg(self, msg): - self.frame.GetStatusBar().SetStatusText(msg, 0) - - def _build_gui(self, vbox): - - def _form_set_freq(kv): - return self.set_freq(kv['freq']) - - def _form_set_decln(kv): - return self.set_decln(kv['decln']) - - # Position the FFT display - vbox.Add(self.scope.win, 15, wx.EXPAND) - - # Position the Total-power stripchart - vbox.Add(self.chart.win, 15, wx.EXPAND) - - # add control area at the bottom - self.myform = myform = form.form() - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((7,0), 0, wx.EXPAND) - vbox1 = wx.BoxSizer(wx.VERTICAL) - myform['freq'] = form.float_field( - parent=self.panel, sizer=vbox1, label="Center freq", weight=1, - callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) - - vbox1.Add((4,0), 0, 0) - - myform['lmst_high'] = form.static_text_field( - parent=self.panel, sizer=vbox1, label="Current LMST", weight=1) - vbox1.Add((4,0), 0, 0) - - myform['spec_data'] = form.static_text_field( - parent=self.panel, sizer=vbox1, label="Spectral Cursor", weight=1) - vbox1.Add((4,0), 0, 0) - - vbox2 = wx.BoxSizer(wx.VERTICAL) - g = self.subdev.gain_range() - myform['gain'] = form.slider_field(parent=self.panel, sizer=vbox2, label="RF Gain", - weight=1, - min=int(g[0]), max=int(g[1]), - callback=self.set_gain) - - vbox2.Add((4,0), 0, 0) - myform['average'] = form.slider_field(parent=self.panel, sizer=vbox2, - label="Spectral Averaging (FFT frames)", weight=1, min=1, max=2000, callback=self.set_averaging) - - vbox2.Add((4,0), 0, 0) - - myform['integration'] = form.slider_field(parent=self.panel, sizer=vbox2, - label="Continuum Integration Time (sec)", weight=1, min=1, max=180, callback=self.set_integration) - - vbox2.Add((4,0), 0, 0) - myform['decln'] = form.float_field( - parent=self.panel, sizer=vbox2, label="Current Declination", weight=1, - callback=myform.check_input_and_call(_form_set_decln)) - vbox2.Add((4,0), 0, 0) - - buttonbox = wx.BoxSizer(wx.HORIZONTAL) - if self.use_interfilt == True: - self.doit = form.button_with_callback(self.panel, - label="Clear Interference List", - callback=self.clear_interferers) - if self.use_interfilt == True: - buttonbox.Add(self.doit, 0, wx.CENTER) - vbox.Add(buttonbox, 0, wx.CENTER) - hbox.Add(vbox1, 0, 0) - hbox.Add(vbox2, wx.ALIGN_RIGHT, 0) - vbox.Add(hbox, 0, wx.EXPAND) - - self._build_subpanel(vbox) - - self.lmst_timer = wx.PyTimer(self.lmst_timeout) - self.lmst_timeout() - - - def _build_subpanel(self, vbox_arg): - # build a secondary information panel (sometimes hidden) - - # FIXME figure out how to have this be a subpanel that is always - # created, but has its visibility controlled by foo.Show(True/False) - - if not(self.show_debug_info): - return - - panel = self.panel - vbox = vbox_arg - myform = self.myform - - #panel = wx.Panel(self.panel, -1) - #vbox = wx.BoxSizer(wx.VERTICAL) - - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add((5,0), 0) - myform['decim'] = form.static_float_field( - parent=panel, sizer=hbox, label="Decim") - - hbox.Add((5,0), 1) - myform['fs@usb'] = form.static_float_field( - parent=panel, sizer=hbox, label="Fs@USB") - - hbox.Add((5,0), 1) - myform['dbname'] = form.static_text_field( - parent=panel, sizer=hbox) - - hbox.Add((5,0), 1) - myform['baseband'] = form.static_float_field( - parent=panel, sizer=hbox, label="Analog BB") - - hbox.Add((5,0), 1) - myform['ddc'] = form.static_float_field( - parent=panel, sizer=hbox, label="DDC") - - hbox.Add((5,0), 0) - vbox.Add(hbox, 0, wx.EXPAND) - - - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - - @param target_freq: frequency in Hz - @rypte: bool - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital down converter. - """ - # - # Everything except BASIC_RX should support usrp.tune() - # - if not (self.cardtype == usrp_dbid.BASIC_RX): - r = usrp.tune(self.u, 0, self.subdev, target_freq) - else: - r = self.u.set_rx_freq(0, target_freq) - f = self.u.rx_freq(0) - if abs(f-target_freq) > 2.0e3: - r = 0 - if r: - self.myform['freq'].set_value(target_freq) # update displayed value - # - # Make sure calibrator knows our target freq - # - - # Remember centerfreq---used for doppler calcs - delta = self.centerfreq - target_freq - self.centerfreq = target_freq - self.observing -= delta - self.scope.set_baseband_freq (self.observing) - calib_set_freq(self.observing) - - # Clear interference list - self.clear_interferers() - - self.myform['baseband'].set_value(r.baseband_freq) - self.myform['ddc'].set_value(r.dxc_freq) - - return True - - return False - - def set_decln(self, dec): - self.decln = dec - self.myform['decln'].set_value(dec) # update displayed value - calib_set_decln(dec) - - def set_gain(self, gain): - self.myform['gain'].set_value(gain) # update displayed value - self.subdev.set_gain(gain) - - # - # Make sure calibrator knows our gain setting - # - calib_set_gain(gain) - - def set_averaging(self, avval): - self.myform['average'].set_value(avval) - self.scope.set_avg_alpha(1.0/(avval)) - calib_set_avg_alpha(avval) - self.scope.set_average(True) - - def set_integration(self, integval): - self.integrator3.set_taps(1.0/integval) - self.myform['integration'].set_value(integval) - - # - # Make sure calibrator knows our integration time - # - calib_set_integ(integval) - - def lmst_timeout(self): - self.locality.date = ephem.now() - sidtime = self.locality.sidereal_time() - self.myform['lmst_high'].set_value(str(ephem.hours(sidtime))) - - def xydfunc(self,xyv): - magn = int(log10(self.observing)) - if (magn == 6 or magn == 7 or magn == 8): - magn = 6 - dfreq = xyv[0] * pow(10.0,magn) - ratio = self.observing / dfreq - vs = 1.0 - ratio - vs *= 299792.0 - if magn >= 9: - xhz = "Ghz" - elif magn >= 6: - xhz = "Mhz" - elif magn <= 5: - xhz = "Khz" - s = "%.6f%s\n%.3fdB" % (xyv[0], xhz, xyv[1]) - s2 = "\n%.3fkm/s" % vs - self.myform['spec_data'].set_value(s+s2) - - def interference(self,x): - if self.use_interfilt == False: - return - magn = int(log10(self.observing)) - dfreq = x * pow(10.0,magn) - delta = dfreq - self.observing - fincr = self.bw / len(self.intmap) - l = len(self.intmap) - if delta > 0: - offset = delta/fincr - else: - offset = (l) - int((abs(delta)/fincr)) - - offset = int(offset) - - if offset >= len(self.intmap) or offset < 0: - print "interference offset is invalid--", offset - return - - # - # Zero out the region around the selected interferer - # - self.intmap[offset-2] = complex (0.5, 0.0) - self.intmap[offset-1] = complex (0.25, 0.0) - self.intmap[offset] = complex (0.0, 0.0) - self.intmap[offset+1] = complex(0.25, 0.0) - self.intmap[offset+2] = complex(0.5, 0.0) - - # - # Set new taps - # - tmp = FFT.inverse_fft(self.intmap) - self.interfilt.set_taps(tmp) - - def clear_interf(self): - self.clear_interferers() - - def clear_interferers(self): - for i in range(0,len(self.intmap)): - self.intmap[i] = complex(1.0,0.0) - tmp = FFT.inverse_fft(self.intmap) - if self.use_interfilt == True: - self.interfilt.set_taps(tmp) - - - - def toggle_cal(self): - if (self.calstate == True): - self.calstate = False - self.u.write_io(0,0,(1<<15)) - self.calibrator.SetLabel("Calibration Source: Off") - else: - self.calstate = True - self.u.write_io(0,(1<<15),(1<<15)) - self.calibrator.SetLabel("Calibration Source: On") - - def toggle_annotation(self): - if (self.annotate_state == True): - self.annotate_state = False - self.annotation.SetLabel("Annotation: Off") - else: - self.annotate_state = True - self.annotation.SetLabel("Annotation: On") - calib_set_interesting(self.annotate_state) - +class app_flow_graph(stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) + + self.frame = frame + self.panel = panel + + parser = OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Rx side A or B (default=A)") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-a", "--avg", type="eng_float", default=1.0, + help="set spectral averaging alpha") + parser.add_option("-i", "--integ", type="eng_float", default=1.0, + help="set integration time") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-l", "--reflevel", type="eng_float", default=30.0, + help="Set Total power reference level") + parser.add_option("-y", "--division", type="eng_float", default=0.5, + help="Set Total power Y division size") + parser.add_option("-e", "--longitude", type="eng_float", default=-76.02,help="Set Observer Longitude") + parser.add_option("-c", "--latitude", type="eng_float", default=44.85,help="Set Observer Latitude") + parser.add_option("-o", "--observing", type="eng_float", default=0.0, + help="Set observing frequency") + parser.add_option("-x", "--ylabel", default="dB", help="Y axis label") + parser.add_option("-z", "--divbase", type="eng_float", default=0.025, help="Y Division increment base") + parser.add_option("-v", "--stripsize", type="eng_float", default=2400, help="Size of stripchart, in 2Hz samples") + parser.add_option("-F", "--fft_size", type="eng_float", default=1024, help="Size of FFT") + parser.add_option("-N", "--decln", type="eng_float", default=999.99, help="Observing declination") + parser.add_option("-X", "--prefix", default="./") + parser.add_option("-M", "--fft_rate", type="eng_float", default=8.0, help="FFT Rate") + parser.add_option("-A", "--calib_coeff", type="eng_float", default=1.0, help="Calibration coefficient") + parser.add_option("-B", "--calib_offset", type="eng_float", default=0.0, help="Calibration coefficient") + parser.add_option("-W", "--waterfall", action="store_true", default=False, help="Use Waterfall FFT display") + parser.add_option("-S", "--setimode", action="store_true", default=False, help="Enable SETI processing of spectral data") + parser.add_option("-K", "--setik", type="eng_float", default=1.5, help="K value for SETI analysis") + parser.add_option("-T", "--setibandwidth", type="eng_float", default=12500, help="Instantaneous SETI observing bandwidth--must be divisor of 250Khz") + parser.add_option("-Q", "--seti_range", type="eng_float", default=1.0e6, help="Total scan width, in Hz for SETI scans") + parser.add_option("-Z", "--dual_mode", action="store_true", + default=False, help="Dual-polarization mode") + parser.add_option("-I", "--interferometer", action="store_true", default=False, help="Interferometer mode") + parser.add_option("-D", "--switch_mode", action="store_true", default=False, help="Dicke Switching mode") + parser.add_option("-P", "--reference_divisor", type="eng_float", default=1.0, help="Reference Divisor") + parser.add_option("-U", "--ref_fifo", default=None) + parser.add_option("-k", "--notch_taps", type="int", default=64, help="Number of notch taps") + parser.add_option("-n", "--notches", action="store_true", + default=False, help="Notch frequencies after all other args") + parser.add_option("-Y", "--interface", default=None) + parser.add_option("-H", "--mac_addr", default=None) + + # Added this documentation + + (options, args) = parser.parse_args() + + self.setimode = options.setimode + self.dual_mode = options.dual_mode + self.interferometer = options.interferometer + self.normal_mode = False + self.switch_mode = options.switch_mode + self.switch_state = 0 + self.reference_divisor = options.reference_divisor + self.ref_fifo = options.ref_fifo + self.usrp2 = False + self.decim = options.decim + self.rx_subdev_spec = options.rx_subdev_spec + + if (options.interface != None and options.mac_addr != None): + self.mac_addr = options.mac_addr + self.interface = options.interface + self.usrp2 = True + + self.NOTCH_TAPS = options.notch_taps + self.notches = Numeric.zeros(self.NOTCH_TAPS,Numeric.Float64) + # Get notch locations + j = 0 + for i in args: + self.notches[j] = float(i) + j = j + 1 + + self.use_notches = options.notches + + if (self.ref_fifo != None): + self.ref_fifo_file = open (self.ref_fifo, "r") + + modecount = 0 + for modes in (self.dual_mode, self.interferometer): + if (modes == True): + modecount = modecount + 1 + + if (modecount > 1): + print "must select only 1 of --dual_mode, or --interferometer" + sys.exit(1) + + self.chartneeded = True + + if (self.setimode == True): + self.chartneeded = False + + if (self.setimode == True and self.interferometer == True): + print "can't pick both --setimode and --interferometer" + sys.exit(1) + + if (self.setimode == True and self.switch_mode == True): + print "can't pick both --setimode and --switch_mode" + sys.exit(1) + + if (self.interferometer == True and self.switch_mode == True): + print "can't pick both --interferometer and --switch_mode" + sys.exit(1) + + if (modecount == 0): + self.normal_mode = True + + self.show_debug_info = True + + # Pick up waterfall option + self.waterfall = options.waterfall + + # SETI mode stuff + self.setimode = options.setimode + self.seticounter = 0 + self.setik = options.setik + self.seti_fft_bandwidth = int(options.setibandwidth) + + # Calculate binwidth + binwidth = self.seti_fft_bandwidth / options.fft_size + + # Use binwidth, and knowledge of likely chirp rates to set reasonable + # values for SETI analysis code. We assume that SETI signals will + # chirp at somewhere between 0.10Hz/sec and 0.25Hz/sec. + # + # upper_limit is the "worst case"--that is, the case for which we have + # to wait the longest to actually see any drift, due to the quantizing + # on FFT bins. + upper_limit = binwidth / 0.10 + self.setitimer = int(upper_limit * 2.00) + self.scanning = True + + # Calculate the CHIRP values based on Hz/sec + self.CHIRP_LOWER = 0.10 * self.setitimer + self.CHIRP_UPPER = 0.25 * self.setitimer + + # Reset hit counters to 0 + self.hitcounter = 0 + self.s1hitcounter = 0 + self.s2hitcounter = 0 + self.avgdelta = 0 + # We scan through 2Mhz of bandwidth around the chosen center freq + self.seti_freq_range = options.seti_range + # Calculate lower edge + self.setifreq_lower = options.freq - (self.seti_freq_range/2) + self.setifreq_current = options.freq + # Calculate upper edge + self.setifreq_upper = options.freq + (self.seti_freq_range/2) + + # Maximum "hits" in a line + self.nhits = 20 + + # Number of lines for analysis + self.nhitlines = 4 + + # We change center frequencies based on nhitlines and setitimer + self.setifreq_timer = self.setitimer * (self.nhitlines * 5) + + # Create actual timer + self.seti_then = time.time() + + # The hits recording array + self.hits_array = Numeric.zeros((self.nhits,self.nhitlines), Numeric.Float64) + self.hit_intensities = Numeric.zeros((self.nhits,self.nhitlines), Numeric.Float64) + # Calibration coefficient and offset + self.calib_coeff = options.calib_coeff + self.calib_offset = options.calib_offset + if self.calib_offset < -750: + self.calib_offset = -750 + if self.calib_offset > 750: + self.calib_offset = 750 + + if self.calib_coeff < 1: + self.calib_coeff = 1 + if self.calib_coeff > 100: + self.calib_coeff = 100 + + self.integ = options.integ + self.avg_alpha = options.avg + self.gain = options.gain + self.decln = options.decln + + # Set initial values for datalogging timed-output + self.continuum_then = time.time() + self.spectral_then = time.time() + + + # build the graph + + self.subdev = [(0, 0), (0,0)] + + # + # If SETI mode, we always run at maximum USRP decimation + # + if (self.setimode): + options.decim = 256 + + if (self.dual_mode == True and self.decim <= 4): + print "Cannot use decim <= 4 with dual_mode" + sys.exit(1) + + self.setup_usrp() + + # Set initial declination + self.decln = options.decln + + input_rate = self.u.adc_freq() / self.u.decim_rate() + self.bw = input_rate + # + # Set prefix for data files + # + self.prefix = options.prefix + + # + # The lower this number, the fewer sample frames are dropped + # in computing the FFT. A sampled approach is taken to + # computing the FFT of the incoming data, which reduces + # sensitivity. Increasing sensitivity inreases CPU loading. + # + self.fft_rate = options.fft_rate + + self.fft_size = int(options.fft_size) + + # This buffer is used to remember the most-recent FFT display + # values. Used later by self.write_spectral_data() to write + # spectral data to datalogging files, and by the SETI analysis + # function. + # + self.fft_outbuf = Numeric.zeros(self.fft_size, Numeric.Float64) + + # + # If SETI mode, only look at seti_fft_bandwidth + # at a time. + # + if (self.setimode): + self.fft_input_rate = self.seti_fft_bandwidth + + # + # Build a decimating bandpass filter + # + self.fft_input_taps = gr.firdes.complex_band_pass (1.0, + input_rate, + -(int(self.fft_input_rate/2)), int(self.fft_input_rate/2), 200, + gr.firdes.WIN_HAMMING, 0) + + # + # Compute required decimation factor + # + decimation = int(input_rate/self.fft_input_rate) + self.fft_bandpass = gr.fir_filter_ccc (decimation, + self.fft_input_taps) + else: + self.fft_input_rate = input_rate + + # Set up FFT display + if self.waterfall == False: + self.scope = ra_fftsink.ra_fft_sink_c (panel, + fft_size=int(self.fft_size), sample_rate=self.fft_input_rate, + fft_rate=int(self.fft_rate), title="Spectral", + ofunc=self.fft_outfunc, xydfunc=self.xydfunc) + else: + self.scope = ra_waterfallsink.waterfall_sink_c (panel, + fft_size=int(self.fft_size), sample_rate=self.fft_input_rate, + fft_rate=int(self.fft_rate), title="Spectral", ofunc=self.fft_outfunc, size=(1100, 600), xydfunc=self.xydfunc, ref_level=0, span=10) + + # Set up ephemeris data + self.locality = ephem.Observer() + self.locality.long = str(options.longitude) + self.locality.lat = str(options.latitude) + + # We make notes about Sunset/Sunrise in Continuum log files + self.sun = ephem.Sun() + self.sunstate = "??" + + # Set up stripchart display + tit = "Continuum" + if (self.dual_mode != False): + tit = "H+V Continuum" + if (self.interferometer != False): + tit = "East x West Correlation" + self.stripsize = int(options.stripsize) + if self.chartneeded == True: + self.chart = ra_stripchartsink.stripchart_sink_f (panel, + stripsize=self.stripsize, + title=tit, + xlabel="LMST Offset (Seconds)", + scaling=1.0, ylabel=options.ylabel, + divbase=options.divbase) + + # Set center frequency + self.centerfreq = options.freq + + # Set observing frequency (might be different from actual programmed + # RF frequency) + if options.observing == 0.0: + self.observing = options.freq + else: + self.observing = options.observing + + # Remember our input bandwidth + self.bw = input_rate + + # + # + # The strip chart is fed at a constant 1Hz rate + # + + # + # Call constructors for receive chains + # + + if (self.dual_mode == True): + self.setup_dual (self.setimode) + + if (self.interferometer == True): + self.setup_interferometer(self.setimode) + + if (self.normal_mode == True): + self.setup_normal(self.setimode) + + if (self.setimode == True): + self.setup_seti() + + self._build_gui(vbox) + + # Make GUI agree with command-line + self.integ = options.integ + if self.setimode == False: + self.myform['integration'].set_value(int(options.integ)) + self.myform['offset'].set_value(self.calib_offset) + self.myform['dcgain'].set_value(self.calib_coeff) + self.myform['average'].set_value(int(options.avg)) + + + if self.setimode == False: + # Make integrator agree with command line + self.set_integration(int(options.integ)) + + self.avg_alpha = options.avg + + # Make spectral averager agree with command line + if options.avg != 1.0: + self.scope.set_avg_alpha(float(1.0/options.avg)) + self.scope.set_average(True) + + if self.setimode == False: + # Set division size + self.chart.set_y_per_div(options.division) + # Set reference(MAX) level + self.chart.set_ref_level(options.reflevel) + + # set initial values + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev[0].gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.freq is None: + # if no freq was specified, use the mid-point + r = self.subdev[0].freq_range() + options.freq = float(r[0]+r[1])/2 + + # Set the initial gain control + self.set_gain(options.gain) + + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + # Set declination + self.set_decln (self.decln) + + + # RF hardware information + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['USB BW'].set_value(self.u.adc_freq() / self.u.decim_rate()) + if (self.dual_mode == True): + self.myform['dbname'].set_value(self.subdev[0].name()+'/'+self.subdev[1].name()) + else: + self.myform['dbname'].set_value(self.subdev[0].name()) + + # Set analog baseband filtering, if DBS_RX + if self.cardtype == usrp_dbid.DBS_RX: + lbw = (self.u.adc_freq() / self.u.decim_rate()) / 2 + if lbw < 1.0e6: + lbw = 1.0e6 + self.subdev[0].set_bw(lbw) + self.subdev[1].set_bw(lbw) + + # Start the timer for the LMST display and datalogging + self.lmst_timer.Start(1000) + if (self.switch_mode == True): + self.other_timer.Start(330) + + + def _set_status_msg(self, msg): + self.frame.GetStatusBar().SetStatusText(msg, 0) + + def _build_gui(self, vbox): + + def _form_set_freq(kv): + # Adjust current SETI frequency, and limits + self.setifreq_lower = kv['freq'] - (self.seti_freq_range/2) + self.setifreq_current = kv['freq'] + self.setifreq_upper = kv['freq'] + (self.seti_freq_range/2) + + # Reset SETI analysis timer + self.seti_then = time.time() + # Zero-out hits array when changing frequency + self.hits_array[:,:] = 0.0 + self.hit_intensities[:,:] = -60.0 + + return self.set_freq(kv['freq']) + + def _form_set_decln(kv): + return self.set_decln(kv['decln']) + + # Position the FFT display + vbox.Add(self.scope.win, 15, wx.EXPAND) + + if self.setimode == False: + # Position the Total-power stripchart + vbox.Add(self.chart.win, 15, wx.EXPAND) + + # add control area at the bottom + self.myform = myform = form.form() + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((7,0), 0, wx.EXPAND) + vbox1 = wx.BoxSizer(wx.VERTICAL) + myform['freq'] = form.float_field( + parent=self.panel, sizer=vbox1, label="Center freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + vbox1.Add((4,0), 0, 0) + + myform['lmst_high'] = form.static_text_field( + parent=self.panel, sizer=vbox1, label="Current LMST", weight=1) + vbox1.Add((4,0), 0, 0) + + if self.setimode == False: + myform['spec_data'] = form.static_text_field( + parent=self.panel, sizer=vbox1, label="Spectral Cursor", weight=1) + vbox1.Add((4,0), 0, 0) + + vbox2 = wx.BoxSizer(wx.VERTICAL) + if self.setimode == False: + vbox3 = wx.BoxSizer(wx.VERTICAL) + g = self.subdev[0].gain_range() + myform['gain'] = form.slider_field(parent=self.panel, sizer=vbox2, label="RF Gain", + weight=1, + min=int(g[0]), max=int(g[1]), + callback=self.set_gain) + + vbox2.Add((4,0), 0, 0) + if self.setimode == True: + max_savg = 100 + else: + max_savg = 3000 + myform['average'] = form.slider_field(parent=self.panel, sizer=vbox2, + label="Spectral Averaging (FFT frames)", weight=1, min=1, max=max_savg, callback=self.set_averaging) + + # Set up scan control button when in SETI mode + if (self.setimode == True): + # SETI scanning control + buttonbox = wx.BoxSizer(wx.HORIZONTAL) + self.scan_control = form.button_with_callback(self.panel, + label="Scan: On ", + callback=self.toggle_scanning) + + buttonbox.Add(self.scan_control, 0, wx.CENTER) + vbox2.Add(buttonbox, 0, wx.CENTER) + + vbox2.Add((4,0), 0, 0) + + if self.setimode == False: + myform['integration'] = form.slider_field(parent=self.panel, sizer=vbox2, + label="Continuum Integration Time (sec)", weight=1, min=1, max=180, callback=self.set_integration) + + vbox2.Add((4,0), 0, 0) + + myform['decln'] = form.float_field( + parent=self.panel, sizer=vbox2, label="Current Declination", weight=1, + callback=myform.check_input_and_call(_form_set_decln)) + vbox2.Add((4,0), 0, 0) + + if self.setimode == False: + myform['offset'] = form.slider_field(parent=self.panel, sizer=vbox3, + label="Post-Detector Offset", weight=1, min=-750, max=750, + callback=self.set_pd_offset) + vbox3.Add((2,0), 0, 0) + myform['dcgain'] = form.slider_field(parent=self.panel, sizer=vbox3, + label="Post-Detector Gain", weight=1, min=1, max=100, + callback=self.set_pd_gain) + vbox3.Add((2,0), 0, 0) + hbox.Add(vbox1, 0, 0) + hbox.Add(vbox2, wx.ALIGN_RIGHT, 0) + + if self.setimode == False: + hbox.Add(vbox3, wx.ALIGN_RIGHT, 0) + + vbox.Add(hbox, 0, wx.EXPAND) + + self._build_subpanel(vbox) + + self.lmst_timer = wx.PyTimer(self.lmst_timeout) + self.other_timer = wx.PyTimer(self.other_timeout) + + + def _build_subpanel(self, vbox_arg): + # build a secondary information panel (sometimes hidden) + + # FIXME figure out how to have this be a subpanel that is always + # created, but has its visibility controlled by foo.Show(True/False) + + if not(self.show_debug_info): + return + + panel = self.panel + vbox = vbox_arg + myform = self.myform + + #panel = wx.Panel(self.panel, -1) + #vbox = wx.BoxSizer(wx.VERTICAL) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + myform['decim'] = form.static_float_field( + parent=panel, sizer=hbox, label="Decim") + + hbox.Add((5,0), 1) + myform['USB BW'] = form.static_float_field( + parent=panel, sizer=hbox, label="USB BW") + + hbox.Add((5,0), 1) + myform['dbname'] = form.static_text_field( + parent=panel, sizer=hbox) + + hbox.Add((5,0), 1) + myform['baseband'] = form.static_float_field( + parent=panel, sizer=hbox, label="Analog BB") + + hbox.Add((5,0), 1) + myform['ddc'] = form.static_float_field( + parent=panel, sizer=hbox, label="DDC") + + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + + """ + # + # + r = usrp.tune(self.u, self.subdev[0].which(), self.subdev[0], target_freq) + r = usrp.tune(self.u, self.subdev[1].which(), self.subdev[1], target_freq) + if r: + self.myform['freq'].set_value(target_freq) # update displayed value + # + # Make sure calibrator knows our target freq + # + + # Remember centerfreq---used for doppler calcs + delta = self.centerfreq - target_freq + self.centerfreq = target_freq + self.observing -= delta + self.scope.set_baseband_freq (self.observing) + self.myform['baseband'].set_value(r.baseband_freq) + self.myform['ddc'].set_value(r.dxc_freq) + + if (self.use_notches): + self.compute_notch_taps(self.notches) + if self.dual_mode == False and self.interferometer == False: + self.notch_filt.set_taps(self.notch_taps) + else: + self.notch_filt1.set_taps(self.notch_taps) + self.notch_filt2.set_taps(self.notch_taps) + + return True + + return False + + def set_decln(self, dec): + self.decln = dec + self.myform['decln'].set_value(dec) # update displayed value + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev[0].set_gain(gain) + self.subdev[1].set_gain(gain) + self.gain = gain + + def set_averaging(self, avval): + self.myform['average'].set_value(avval) + self.scope.set_avg_alpha(1.0/(avval)) + self.scope.set_average(True) + self.avg_alpha = avval + + def set_integration(self, integval): + if self.setimode == False: + self.integrator.set_taps(1.0/((integval)*(self.bw/2))) + self.myform['integration'].set_value(integval) + self.integ = integval + + # + # Timeout function + # Used to update LMST display, as well as current + # continuum value + # + # We also write external data-logging files here + # + def lmst_timeout(self): + self.locality.date = ephem.now() + if self.setimode == False: + x = self.probe.level() + sidtime = self.locality.sidereal_time() + # LMST + s = str(ephem.hours(sidtime)) + " " + self.sunstate + # Continuum detector value + if self.setimode == False: + sx = "%7.4f" % x + s = s + "\nDet: " + str(sx) + else: + sx = "%2d" % self.hitcounter + s1 = "%2d" % self.s1hitcounter + s2 = "%2d" % self.s2hitcounter + sa = "%4.2f" % self.avgdelta + sy = "%3.1f-%3.1f" % (self.CHIRP_LOWER, self.CHIRP_UPPER) + s = s + "\nHits: " + str(sx) + "\nS1:" + str(s1) + " S2:" + str(s2) + s = s + "\nAv D: " + str(sa) + "\nCh lim: " + str(sy) + + self.myform['lmst_high'].set_value(s) + + # + # Write data out to recording files + # + if self.setimode == False: + self.write_continuum_data(x,sidtime) + self.write_spectral_data(self.fft_outbuf,sidtime) + + else: + self.seti_analysis(self.fft_outbuf,sidtime) + now = time.time() + if ((self.scanning == True) and ((now - self.seti_then) > self.setifreq_timer)): + self.seti_then = now + self.setifreq_current = self.setifreq_current + self.fft_input_rate + if (self.setifreq_current > self.setifreq_upper): + self.setifreq_current = self.setifreq_lower + self.set_freq(self.setifreq_current) + # Make sure we zero-out the hits array when changing + # frequency. + self.hits_array[:,:] = 0.0 + self.hit_intensities[:,:] = 0.0 + + def other_timeout(self): + if (self.switch_state == 0): + self.switch_state = 1 + + elif (self.switch_state == 1): + self.switch_state = 0 + + if (self.switch_state == 0): + self.mute.set_n(1) + self.cmute.set_n(int(1.0e9)) + + elif (self.switch_state == 1): + self.mute.set_n(int(1.0e9)) + self.cmute.set_n(1) + + if (self.ref_fifo != "@@@@"): + self.ref_fifo_file.write(str(self.switch_state)+"\n") + self.ref_fifo_file.flush() + + self.avg_reference_value = self.cprobe.level() + + # + # Set reference value + # + self.reference_level.set_k(-1.0 * (self.avg_reference_value/self.reference_divisor)) + + def fft_outfunc(self,data,l): + self.fft_outbuf=data + + def write_continuum_data(self,data,sidtime): + + # Create localtime structure for producing filename + foo = time.localtime() + pfx = self.prefix + filenamestr = "%s/%04d%02d%02d%02d" % (pfx, foo.tm_year, + foo.tm_mon, foo.tm_mday, foo.tm_hour) + + # Open the data file, appending + continuum_file = open (filenamestr+".tpdat","a") + + flt = "%6.3f" % data + inter = self.decln + integ = self.integ + fc = self.observing + fc = fc / 1000000 + bw = self.bw + bw = bw / 1000000 + ga = self.gain + + now = time.time() + + # + # If time to write full header info (saves storage this way) + # + if (now - self.continuum_then > 20): + self.sun.compute(self.locality) + enow = ephem.now() + sunset = self.locality.next_setting(self.sun) + sunrise = self.locality.next_rising(self.sun) + sun_insky = "Down" + self.sunstate = "Dn" + if ((sunrise < enow) and (enow < sunset)): + sun_insky = "Up" + self.sunstate = "Up" + self.continuum_then = now + + continuum_file.write(str(ephem.hours(sidtime))+" "+flt+" Dn="+str(inter)+",") + continuum_file.write("Ti="+str(integ)+",Fc="+str(fc)+",Bw="+str(bw)) + continuum_file.write(",Ga="+str(ga)+",Sun="+str(sun_insky)+"\n") + else: + continuum_file.write(str(ephem.hours(sidtime))+" "+flt+"\n") + + continuum_file.close() + return(data) + + def write_spectral_data(self,data,sidtime): + + now = time.time() + delta = 10 + + # If time to write out spectral data + # We don't write this out every time, in order to + # save disk space. Since the spectral data are + # typically heavily averaged, writing this data + # "once in a while" is OK. + # + if (now - self.spectral_then >= delta): + self.spectral_then = now + + # Get localtime structure to make filename from + foo = time.localtime() + + pfx = self.prefix + filenamestr = "%s/%04d%02d%02d%02d" % (pfx, foo.tm_year, + foo.tm_mon, foo.tm_mday, foo.tm_hour) + + # Open the file + spectral_file = open (filenamestr+".sdat","a") + + # Setup data fields to be written + r = data + inter = self.decln + fc = self.observing + fc = fc / 1000000 + bw = self.bw + bw = bw / 1000000 + av = self.avg_alpha + + # Write those fields + spectral_file.write("data:"+str(ephem.hours(sidtime))+" Dn="+str(inter)+",Fc="+str(fc)+",Bw="+str(bw)+",Av="+str(av)) + spectral_file.write (" [ ") + for r in data: + spectral_file.write(" "+str(r)) + + spectral_file.write(" ]\n") + spectral_file.close() + return(data) + + return(data) + + def seti_analysis(self,fftbuf,sidtime): + l = len(fftbuf) + x = 0 + hits = [] + hit_intensities = [] + if self.seticounter < self.setitimer: + self.seticounter = self.seticounter + 1 + return + else: + self.seticounter = 0 + + # Run through FFT output buffer, computing standard deviation (Sigma) + avg = 0 + # First compute average + for i in range(0,l): + avg = avg + fftbuf[i] + avg = avg / l + + sigma = 0.0 + # Then compute standard deviation (Sigma) + for i in range(0,l): + d = fftbuf[i] - avg + sigma = sigma + (d*d) + + sigma = Numeric.sqrt(sigma/l) + + # + # Snarfle through the FFT output buffer again, looking for + # outlying data points + + start_f = self.observing - (self.fft_input_rate/2) + current_f = start_f + l = len(fftbuf) + f_incr = self.fft_input_rate / l + hit = -1 + + # -nyquist to DC + for i in range(l/2,l): + # + # If current FFT buffer has an item that exceeds the specified + # sigma + # + if ((fftbuf[i] - avg) > (self.setik * sigma)): + hits.append(current_f) + hit_intensities.append(fftbuf[i]) + current_f = current_f + f_incr + + # DC to nyquist + for i in range(0,l/2): + # + # If current FFT buffer has an item that exceeds the specified + # sigma + # + if ((fftbuf[i] - avg) > (self.setik * sigma)): + hits.append(current_f) + hit_intensities.append(fftbuf[i]) + current_f = current_f + f_incr + + # No hits + if (len(hits) <= 0): + return + + + # + # OK, so we have some hits in the FFT buffer + # They'll have a rather substantial gauntlet to run before + # being declared a real "hit" + # + + # Update stats + self.s1hitcounter = self.s1hitcounter + len(hits) + + # Weed out buffers with an excessive number of + # signals above Sigma + if (len(hits) > self.nhits): + return + + + # Weed out FFT buffers with apparent multiple narrowband signals + # separated significantly in frequency. This means that a + # single signal spanning multiple bins is OK, but a buffer that + # has multiple, apparently-separate, signals isn't OK. + # + last = hits[0] + ns2 = 1 + for i in range(1,len(hits)): + if ((hits[i] - last) > (f_incr*3.0)): + return + last = hits[i] + ns2 = ns2 + 1 + + self.s2hitcounter = self.s2hitcounter + ns2 + + # + # Run through all available hit buffers, computing difference between + # frequencies found there, if they're all within the chirp limits + # declare a good hit + # + good_hit = False + f_ds = Numeric.zeros(self.nhitlines, Numeric.Float64) + avg_delta = 0 + k = 0 + for i in range(0,min(len(hits),len(self.hits_array[:,0]))): + f_ds[0] = abs(self.hits_array[i,0] - hits[i]) + for j in range(1,len(f_ds)): + f_ds[j] = abs(self.hits_array[i,j] - self.hits_array[i,0]) + avg_delta = avg_delta + f_ds[j] + k = k + 1 + + if (self.seti_isahit (f_ds)): + good_hit = True + self.hitcounter = self.hitcounter + 1 + break + + if (avg_delta/k < (self.seti_fft_bandwidth/2)): + self.avgdelta = avg_delta / k + + # Save 'n shuffle hits + # Old hit buffers percolate through the hit buffers + # (there are self.nhitlines of these buffers) + # and then drop off the end + # A consequence is that while the nhitlines buffers are filling, + # you can get some absurd values for self.avgdelta, because some + # of the buffers are full of zeros + for i in range(self.nhitlines,1): + self.hits_array[:,i] = self.hits_array[:,i-1] + self.hit_intensities[:,i] = self.hit_intensities[:,i-1] + + for i in range(0,len(hits)): + self.hits_array[i,0] = hits[i] + self.hit_intensities[i,0] = hit_intensities[i] + + # Finally, write the hits/intensities buffer + if (good_hit): + self.write_hits(sidtime) + + return + + def seti_isahit(self,fdiffs): + truecount = 0 + + for i in range(0,len(fdiffs)): + if (fdiffs[i] >= self.CHIRP_LOWER and fdiffs[i] <= self.CHIRP_UPPER): + truecount = truecount + 1 + + if truecount == len(fdiffs): + return (True) + else: + return (False) + + def write_hits(self,sidtime): + # Create localtime structure for producing filename + foo = time.localtime() + pfx = self.prefix + filenamestr = "%s/%04d%02d%02d%02d" % (pfx, foo.tm_year, + foo.tm_mon, foo.tm_mday, foo.tm_hour) + + # Open the data file, appending + hits_file = open (filenamestr+".seti","a") + + # Write sidtime first + hits_file.write(str(ephem.hours(sidtime))+" "+str(self.decln)+" ") + + # + # Then write the hits/hit intensities buffers with enough + # "syntax" to allow parsing by external (not yet written!) + # "stuff". + # + for i in range(0,self.nhitlines): + hits_file.write(" ") + for j in range(0,self.nhits): + hits_file.write(str(self.hits_array[j,i])+":") + hits_file.write(str(self.hit_intensities[j,i])+",") + hits_file.write("\n") + hits_file.close() + return + + def xydfunc(self,func,xyv): + if self.setimode == True: + return + magn = int(Numeric.log10(self.observing)) + if (magn == 6 or magn == 7 or magn == 8): + magn = 6 + dfreq = xyv[0] * pow(10.0,magn) + if func == 0: + ratio = self.observing / dfreq + vs = 1.0 - ratio + vs *= 299792.0 + if magn >= 9: + xhz = "Ghz" + elif magn >= 6: + xhz = "Mhz" + elif magn <= 5: + xhz = "Khz" + s = "%.6f%s\n%.3fdB" % (xyv[0], xhz, xyv[1]) + s2 = "\n%.3fkm/s" % vs + self.myform['spec_data'].set_value(s+s2) + else: + tmpnotches = Numeric.zeros(self.NOTCH_TAPS,Numeric.Float64) + delfreq = -1 + if self.use_notches == True: + for i in range(0,len(self.notches)): + if self.notches[i] != 0 and abs(self.notches[i] - dfreq) < ((self.bw/self.NOTCH_TAPS)/2.0): + delfreq = i + break + j = 0 + for i in range(0,len(self.notches)): + if (i != delfreq): + tmpnotches[j] = self.notches[i] + j = j + 1 + if (delfreq == -1): + for i in range(0,len(tmpnotches)): + if (int(tmpnotches[i]) == 0): + tmpnotches[i] = dfreq + break + self.notches = tmpnotches + self.compute_notch_taps(self.notches) + if self.dual_mode == False and self.interferometer == False: + self.notch_filt.set_taps(self.notch_taps) + else: + self.notch_filt1.set_taps(self.notch_taps) + self.notch_filt2.set_taps(self.notch_taps) + + def xydfunc_waterfall(self,pos): + lower = self.observing - (self.seti_fft_bandwidth / 2) + upper = self.observing + (self.seti_fft_bandwidth / 2) + binwidth = self.seti_fft_bandwidth / 1024 + s = "%.6fMHz" % ((lower + (pos.x*binwidth)) / 1.0e6) + self.myform['spec_data'].set_value(s) + + def toggle_cal(self): + if (self.calstate == True): + self.calstate = False + self.u.write_io(0,0,(1<<15)) + self.calibrator.SetLabel("Calibration Source: Off") + else: + self.calstate = True + self.u.write_io(0,(1<<15),(1<<15)) + self.calibrator.SetLabel("Calibration Source: On") + + def toggle_annotation(self): + if (self.annotate_state == True): + self.annotate_state = False + self.annotation.SetLabel("Annotation: Off") + else: + self.annotate_state = True + self.annotation.SetLabel("Annotation: On") + # + # Turn scanning on/off + # Called-back by "Recording" button + # + def toggle_scanning(self): + # Current scanning? Flip state + if (self.scanning == True): + self.scanning = False + self.scan_control.SetLabel("Scan: Off") + # Not scanning + else: + self.scanning = True + self.scan_control.SetLabel("Scan: On ") + + def set_pd_offset(self,offs): + self.myform['offset'].set_value(offs) + self.calib_offset=offs + x = self.calib_coeff / 100.0 + self.cal_offs.set_k(offs*(x*8000)) + + def set_pd_gain(self,gain): + self.myform['dcgain'].set_value(gain) + self.cal_mult.set_k(gain*0.01) + self.calib_coeff = gain + x = gain/100.0 + self.cal_offs.set_k(self.calib_offset*(x*8000)) + + def compute_notch_taps(self,notchlist): + tmptaps = Numeric.zeros(self.NOTCH_TAPS,Numeric.Complex64) + binwidth = self.bw / self.NOTCH_TAPS + + for i in range(0,self.NOTCH_TAPS): + tmptaps[i] = complex(1.0,0.0) + + for i in notchlist: + diff = i - self.observing + if int(i) == 0: + break + if ((i < (self.observing - self.bw/2)) or (i > (self.observing + self.bw/2))): + continue + if (diff > 0): + idx = diff / binwidth + idx = round(idx) + idx = int(idx) + if (idx < 0 or idx > (self.NOTCH_TAPS/2)): + break + tmptaps[idx] = complex(0.0, 0.0) + + if (diff < 0): + idx = -diff / binwidth + idx = round(idx) + idx = (self.NOTCH_TAPS/2) - idx + idx = int(idx+(self.NOTCH_TAPS/2)) + if (idx < 0 or idx >= (self.NOTCH_TAPS)): + break + tmptaps[idx] = complex(0.0, 0.0) + + self.notch_taps = numpy.fft.ifft(tmptaps) + + # + # Setup common pieces of radiometer mode + # + def setup_radiometer_common(self,n): + # The IIR integration filter for post-detection + self.integrator = gr.single_pole_iir_filter_ff(1.0) + self.integrator.set_taps (1.0/self.bw) + + if (self.use_notches == True): + self.compute_notch_taps(self.notches) + if (n == 2): + self.notch_filt1 = gr.fft_filter_ccc(1, self.notch_taps) + self.notch_filt2 = gr.fft_filter_ccc(1, self.notch_taps) + else: + self.notch_filt = gr.fft_filter_ccc(1, self.notch_taps) + + + # Signal probe + self.probe = gr.probe_signal_f() + + # + # Continuum calibration stuff + # + x = self.calib_coeff/100.0 + self.cal_mult = gr.multiply_const_ff(self.calib_coeff/100.0) + self.cal_offs = gr.add_const_ff(self.calib_offset*(x*8000)) + + # + # Mega decimator after IIR filter + # + if (self.switch_mode == False): + self.keepn = gr.keep_one_in_n(gr.sizeof_float, self.bw) + else: + self.keepn = gr.keep_one_in_n(gr.sizeof_float, int(self.bw/2)) + + # + # For the Dicke-switching scheme + # + #self.switch = gr.multiply_const_ff(1.0) + + # + if (self.switch_mode == True): + self.vector = gr.vector_sink_f() + self.swkeep = gr.keep_one_in_n(gr.sizeof_float, int(self.bw/3)) + self.mute = gr.keep_one_in_n(gr.sizeof_float, 1) + self.cmute = gr.keep_one_in_n(gr.sizeof_float, int(1.0e9)) + self.cintegrator = gr.single_pole_iir_filter_ff(1.0/(self.bw/2)) + self.cprobe = gr.probe_signal_f() + else: + self.mute = gr.multiply_const_ff(1.0) + + + self.avg_reference_value = 0.0 + self.reference_level = gr.add_const_ff(0.0) + + # + # Setup ordinary single-channel radiometer mode + # + def setup_normal(self, setimode): + + self.setup_radiometer_common(1) + + self.head = self.u + if (self.use_notches == True): + self.shead = self.notch_filt + else: + self.shead = self.u + + if setimode == False: + + self.detector = gr.complex_to_mag_squared() + self.connect(self.shead, self.scope) + + if (self.use_notches == False): + self.connect(self.head, self.detector, self.mute, self.reference_level, + self.integrator, self.keepn, self.cal_mult, self.cal_offs, self.chart) + else: + self.connect(self.head, self.notch_filt, self.detector, self.mute, self.reference_level, + self.integrator, self.keepn, self.cal_mult, self.cal_offs, self.chart) + + self.connect(self.cal_offs, self.probe) + + # + # Add a side-chain detector chain, with a different integrator, for sampling + # The reference channel data + # This is used to derive the offset value for self.reference_level, used above + # + if (self.switch_mode == True): + self.connect(self.detector, self.cmute, self.cintegrator, self.swkeep, self.cprobe) + + return + + # + # Setup dual-channel (two antenna, usual orthogonal polarity probes in the same waveguide) + # + def setup_dual(self, setimode): + + self.setup_radiometer_common(2) + + self.di = gr.deinterleave(gr.sizeof_gr_complex) + self.addchans = gr.add_cc () + self.detector = gr.add_ff () + self.h_power = gr.complex_to_mag_squared() + self.v_power = gr.complex_to_mag_squared() + self.connect (self.u, self.di) + + if (self.use_notches == True): + self.connect((self.di, 0), self.notch_filt1, (self.addchans, 0)) + self.connect((self.di, 1), self.notch_filt2, (self.addchans, 1)) + else: + # + # For spectral, adding the two channels works, assuming no gross + # phase or amplitude error + self.connect ((self.di, 0), (self.addchans, 0)) + self.connect ((self.di, 1), (self.addchans, 1)) + + # + # Connect heads of spectral and total-power chains + # + if (self.use_notches == False): + self.head = self.di + else: + self.head = (self.notch_filt1, self.notch_filt2) + + self.shead = self.addchans + + if (setimode == False): + # + # For dual-polarization mode, we compute the sum of the + # powers on each channel, after they've been detected + # + self.detector = gr.add_ff() + + # + # In dual-polarization mode, we compute things a little differently + # In effect, we have two radiometer chains, terminating in an adder + # + if self.use_notches == True: + self.connect(self.notch_filt1, self.h_power) + self.connect(self.notch_filt2, self.v_power) + else: + self.connect((self.head, 0), self.h_power) + self.connect((self.head, 1), self.v_power) + self.connect(self.h_power, (self.detector, 0)) + self.connect(self.v_power, (self.detector, 1)) + self.connect(self.detector, self.mute, self.reference_level, + self.integrator, self.keepn, self.cal_mult, self.cal_offs, self.chart) + self.connect(self.cal_offs, self.probe) + self.connect(self.shead, self.scope) + + # + # Add a side-chain detector chain, with a different integrator, for sampling + # The reference channel data + # This is used to derive the offset value for self.reference_level, used above + # + if (self.switch_mode == True): + self.connect(self.detector, self.cmute, self.cintegrator, self.swkeep, self.cprobe) + return + + # + # Setup correlating interferometer mode + # + def setup_interferometer(self, setimode): + self.setup_radiometer_common(2) + + self.di = gr.deinterleave(gr.sizeof_gr_complex) + self.connect (self.u, self.di) + self.corr = gr.multiply_cc() + self.c2f = gr.complex_to_float() + + self.shead = (self.di, 0) + + # Channel 0 to multiply port 0 + # Channel 1 to multiply port 1 + if (self.use_notches == False): + self.connect((self.di, 0), (self.corr, 0)) + self.connect((self.di, 1), (self.corr, 1)) + else: + self.connect((self.di, 0), self.notch_filt1, (self.corr, 0)) + self.connect((self.di, 1), self.notch_filt2, (self.corr, 0)) + + # + # Multiplier (correlator) to complex-to-float, followed by integrator, etc + # + self.connect(self.corr, self.c2f, self.integrator, self.keepn, self.cal_mult, self.cal_offs, self.chart) + + # + # FFT scope gets only 1 channel + # FIX THIS, by cross-correlating the *outputs* of two different FFTs, then display + # Funky! + # + self.connect(self.shead, self.scope) + + # + # Output of correlator/integrator chain to probe + # + self.connect(self.cal_offs, self.probe) + + return + + # + # Setup SETI mode + # + def setup_seti(self): + self.connect (self.shead, self.fft_bandpass, self.scope) + return + + def setup_usrp(self): + + if (self.usrp2 == False): + if (self.dual_mode == False and self.interferometer == False): + if (self.decim > 4): + self.u = usrp.source_c(decim_rate=self.decim,fusb_block_size=8192) + else: + self.u = usrp.source_c(decim_rate=self.decim,fusb_block_size=8192, fpga_filename="std_4rx_0tx.rbf") + self.u.set_mux(usrp.determine_rx_mux_value(self.u, self.rx_subdev_spec)) + # determine the daughterboard subdevice we're using + self.subdev[0] = usrp.selected_subdev(self.u, self.rx_subdev_spec) + self.subdev[1] = self.subdev[0] + self.cardtype = self.subdev[0].dbid() + else: + self.u=usrp.source_c(decim_rate=self.decim, nchan=2,fusb_block_size=8192) + self.subdev[0] = usrp.selected_subdev(self.u, (0, 0)) + self.subdev[1] = usrp.selected_subdev(self.u, (1, 0)) + self.cardtype = self.subdev[0].dbid() + self.u.set_mux(0x32103210) + c1 = self.subdev[0].name() + c2 = self.subdev[1].name() + if (c1 != c2): + print "Must have identical cardtypes for --dual_mode or --interferometer" + sys.exit(1) + # + # Set 8-bit mode + # + + width = 8 + shift = 8 + format = self.u.make_format(width, shift) + r = self.u.set_format(format) + else: + if (self.dual_mode == True or self.interferometer == True): + print "Cannot use dual_mode or interferometer with single USRP2" + sys.exit(1) + self.u = usrp2.source_32fc(self.interface, self.mac_addr) + self.u.set_decim (self.decim) + self.cardtype = self.u.daughterboard_id() def main (): - app = stdgui.stdapp(app_flow_graph, "RADIO ASTRONOMY SPECTRAL/CONTINUUM RECEIVER: $Revision: 6077 $", nstatus=1) - app.MainLoop() + app = stdgui2.stdapp(app_flow_graph, "RADIO ASTRONOMY SPECTRAL/CONTINUUM RECEIVER: $Revision: 10631 $", nstatus=1) + app.MainLoop() if __name__ == '__main__': - main () + main () diff --git a/gr-sounder/Makefile.am b/gr-sounder/Makefile.am new file mode 100644 index 00000000..40b11dce --- /dev/null +++ b/gr-sounder/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src doc diff --git a/gr-sounder/Makefile.in b/gr-sounder/Makefile.in new file mode 100644 index 00000000..64a12958 --- /dev/null +++ b/gr-sounder/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src doc +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/README b/gr-sounder/README new file mode 100644 index 00000000..3c5df21d --- /dev/null +++ b/gr-sounder/README @@ -0,0 +1,91 @@ +This is a work-in-progress implementation of a m-sequence based channel +sounder for GNU Radio and the USRP. + +In typical use, the user would run the sounder as a transmitter on one +USRP, and a receiver on another at a different location. The receiver +will determine the impulse response of the RF channel in between. + +The sounder uses a custom FPGA bitstream that is able to generate and +receive a sounder waveform across a full 32 MHz wide swath of RF spectrum; +the waveform generation and impulse response processing occur in logic in +the USRP FPGA and not in the host PC. This avoids the USB throughput +bottleneck entirely. Unfortunately, there is still roll-off in the AD9862 +digital up-converter interpolation filter that impacts the outer 20% of +bandwidth, but this can be compensated for by measuring and subtracting +out this response during calibration. + +The sounder is based on sending a maximal-length PN code modulated as BPSK +with the supplied center frequency, with a chip-rate of 32 MHz. The +receiver correlates the received signal across all phases of the PN code +and outputs an impulse response vector. As auto-correlation of an m-sequence +is near zero for any relative phase shift, the actual measured energy at a +particular phase shift is related to the impulse response for that time delay. +This is the same principle used in spread-spectrum RAKE receivers such as are +used with GPS and CDMA. + +The transmitter is designed to work only with the board in side A. The +receiver may be in side A or side B. The boards may be standalone LFTX/LFRXs +or RFX daughterboards. + +To use, the following script is installed into $prefix/bin: + +Usage: usrp_sounder.py [options] + +Options: + -h, --help show this help message and exit + -R RX_SUBDEV_SPEC, --rx-subdev-spec=RX_SUBDEV_SPEC + select USRP Rx side A or B + -f FREQ, --frequency=FREQ + set frequency to FREQ in Hz, default is 0.0 + -d DEGREE, --degree=DEGREE + set sounding sequence degree (2-12), default is 12, + -t, --transmit enable sounding transmitter + -r, --receive enable sounding receiver + -l, --loopback enable digital loopback, default is disabled + -v, --verbose enable verbose output, default is disabled + -D, --debug enable debugging output, default is disabled + -F FILENAME, --filename=FILENAME + log received impulse responses to file + +To use with an LFTX board, set the center frequency to 16M: + +$ usrp_sounder.py -f 16M -t + +The sounder receiver command line is: + +$ usrp_sounder.py -f 16M -r -F output.dat + +You can vary the m-sequence degree between 2 and 12, which will create +sequence lengths between 3 and 4095 (128 us). This will affect +how frequently the receiver can calculate impulse response vectors. + +The correlator uses an O(N^2) algorithm, by using an entire PN period +of the received signal to correlate at each lag value. Thus, using a +degree 12 PN code of length 4095, it takes 4095*4095/32e6 seconds to +calculate a single impulse response vector, about a half a second. One +can reduce this time by a factor of 4 for each decrement in PN code +degree, but this also reduces the inherent processing gain by 6 dB as +well. + +The impulse response vectors are written to a file in complex float +format, and consist of the actual impulse response with a noise floor +dependent on the PN code degree in use. + +There is a loopback test mode that causes the sounding waveform to be +routed back to the receiver inside the USRP: + +$ usrp_sounder.py -r -t -l -F output.dat + +The resulting impulse response will be a spike followed by a near zero +value for the rest of the period. + +Synchronization at the receiver is not yet implemented, so the actual +impulse response may be time shifted an arbitrary value within the the +impulse response vector. If one assumes the first to arrive signal is +the strongest, then one can circularly rotate the vector until the peak +is at time zero. + +Johnathan Corgan +Corgan Enterprises LLC +jcorgan@corganenterprises.com +5/28/07 diff --git a/gr-sounder/doc/Makefile.am b/gr-sounder/doc/Makefile.am new file mode 100644 index 00000000..714ed52b --- /dev/null +++ b/gr-sounder/doc/Makefile.am @@ -0,0 +1,23 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + diff --git a/gr-sounder/doc/Makefile.in b/gr-sounder/doc/Makefile.in new file mode 100644 index 00000000..ab6395cf --- /dev/null +++ b/gr-sounder/doc/Makefile.in @@ -0,0 +1,872 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/Makefile.am b/gr-sounder/src/Makefile.am new file mode 100644 index 00000000..c6fb49ef --- /dev/null +++ b/gr-sounder/src/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = fpga lib python diff --git a/gr-sounder/src/Makefile.in b/gr-sounder/src/Makefile.in new file mode 100644 index 00000000..2738518d --- /dev/null +++ b/gr-sounder/src/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = fpga lib python +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/fpga/Makefile.am b/gr-sounder/src/fpga/Makefile.am new file mode 100644 index 00000000..85256cb5 --- /dev/null +++ b/gr-sounder/src/fpga/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = top lib tb diff --git a/gr-sounder/src/fpga/Makefile.in b/gr-sounder/src/fpga/Makefile.in new file mode 100644 index 00000000..3bb2d79d --- /dev/null +++ b/gr-sounder/src/fpga/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/src/fpga +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = top lib tb +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/fpga/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/fpga/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/fpga/lib/Makefile.am b/gr-sounder/src/fpga/lib/Makefile.am new file mode 100644 index 00000000..3aae9637 --- /dev/null +++ b/gr-sounder/src/fpga/lib/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + dac_interface.v \ + dacpll.v \ + sounder.v \ + sounder_ctrl.v \ + sounder_rx.v \ + sounder_tx.v diff --git a/gr-sounder/src/fpga/lib/Makefile.in b/gr-sounder/src/fpga/lib/Makefile.in new file mode 100644 index 00000000..acced812 --- /dev/null +++ b/gr-sounder/src/fpga/lib/Makefile.in @@ -0,0 +1,880 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/src/fpga/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + dac_interface.v \ + dacpll.v \ + sounder.v \ + sounder_ctrl.v \ + sounder_rx.v \ + sounder_tx.v + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/fpga/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/fpga/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/fpga/lib/dac_interface.v b/gr-sounder/src/fpga/lib/dac_interface.v new file mode 100644 index 00000000..93c72cca --- /dev/null +++ b/gr-sounder/src/fpga/lib/dac_interface.v @@ -0,0 +1,60 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../top/config.vh" + +module dac_interface(clk_i,rst_i,ena_i,strobe_i,tx_i_i,tx_q_i,tx_data_o,tx_sync_o); + input clk_i; + input rst_i; + input ena_i; + input strobe_i; + + input [13:0] tx_i_i; + input [13:0] tx_q_i; + + output [13:0] tx_data_o; + output tx_sync_o; + +`ifdef TX_RATE_MAX + wire clk128; + reg clk64_d; + reg [13:0] tx_data_o; + + // Create a 128 MHz clock + dacpll pll128(.areset(rst_i),.inclk0(clk_i),.c0(clk128)); + + // Register the clk64 clock in the clk128 domain + always @(posedge clk128) + clk64_d <= #1 clk_i; + + // Register the tx data in the clk128 domain + always @(posedge clk128) + tx_data_o <= #1 clk64_d ? tx_i_i : tx_q_i; + + assign tx_sync_o = clk64_d; + + +`else // !`ifdef TX_RATE_MAX + assign tx_data_o = strobe_i ? tx_q_i : tx_i_i; + assign tx_sync_o = strobe_i; +`endif // !`ifdef TX_RATE_MAX + +endmodule // dac_interface diff --git a/gr-sounder/src/fpga/lib/dacpll.v b/gr-sounder/src/fpga/lib/dacpll.v new file mode 100644 index 00000000..25f584f4 --- /dev/null +++ b/gr-sounder/src/fpga/lib/dacpll.v @@ -0,0 +1,291 @@ +// megafunction wizard: %ALTPLL% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: altpll + +// ============================================================ +// File Name: dacpll.v +// Megafunction Name(s): +// altpll +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 7.0 Build 33 02/05/2007 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2007 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module dacpll ( + areset, + inclk0, + c0); + + input areset; + input inclk0; + output c0; + + wire [5:0] sub_wire0; + wire [0:0] sub_wire4 = 1'h0; + wire [0:0] sub_wire1 = sub_wire0[0:0]; + wire c0 = sub_wire1; + wire sub_wire2 = inclk0; + wire [1:0] sub_wire3 = {sub_wire4, sub_wire2}; + + altpll altpll_component ( + .inclk (sub_wire3), + .areset (areset), + .clk (sub_wire0), + .activeclock (), + .clkbad (), + .clkena ({6{1'b1}}), + .clkloss (), + .clkswitch (1'b0), + .configupdate (1'b1), + .enable0 (), + .enable1 (), + .extclk (), + .extclkena ({4{1'b1}}), + .fbin (1'b1), + .fbout (), + .locked (), + .pfdena (1'b1), + .phasecounterselect ({4{1'b1}}), + .phasedone (), + .phasestep (1'b1), + .phaseupdown (1'b1), + .pllena (1'b1), + .scanaclr (1'b0), + .scanclk (1'b0), + .scanclkena (1'b1), + .scandata (1'b0), + .scandataout (), + .scandone (), + .scanread (1'b0), + .scanwrite (1'b0), + .sclkout0 (), + .sclkout1 (), + .vcooverrange (), + .vcounderrange ()); + defparam + altpll_component.clk0_divide_by = 1, + altpll_component.clk0_duty_cycle = 50, + altpll_component.clk0_multiply_by = 2, + altpll_component.clk0_phase_shift = "0000", + altpll_component.compensate_clock = "CLK0", + altpll_component.inclk0_input_frequency = 15625, + altpll_component.intended_device_family = "Cyclone", + altpll_component.lpm_type = "altpll", + altpll_component.operation_mode = "NORMAL", + altpll_component.pll_type = "AUTO", + altpll_component.port_activeclock = "PORT_UNUSED", + altpll_component.port_areset = "PORT_USED", + altpll_component.port_clkbad0 = "PORT_UNUSED", + altpll_component.port_clkbad1 = "PORT_UNUSED", + altpll_component.port_clkloss = "PORT_UNUSED", + altpll_component.port_clkswitch = "PORT_UNUSED", + altpll_component.port_configupdate = "PORT_UNUSED", + altpll_component.port_fbin = "PORT_UNUSED", + altpll_component.port_inclk0 = "PORT_USED", + altpll_component.port_inclk1 = "PORT_UNUSED", + altpll_component.port_locked = "PORT_UNUSED", + altpll_component.port_pfdena = "PORT_UNUSED", + altpll_component.port_phasecounterselect = "PORT_UNUSED", + altpll_component.port_phasedone = "PORT_UNUSED", + altpll_component.port_phasestep = "PORT_UNUSED", + altpll_component.port_phaseupdown = "PORT_UNUSED", + altpll_component.port_pllena = "PORT_UNUSED", + altpll_component.port_scanaclr = "PORT_UNUSED", + altpll_component.port_scanclk = "PORT_UNUSED", + altpll_component.port_scanclkena = "PORT_UNUSED", + altpll_component.port_scandata = "PORT_UNUSED", + altpll_component.port_scandataout = "PORT_UNUSED", + altpll_component.port_scandone = "PORT_UNUSED", + altpll_component.port_scanread = "PORT_UNUSED", + altpll_component.port_scanwrite = "PORT_UNUSED", + altpll_component.port_clk0 = "PORT_USED", + altpll_component.port_clk1 = "PORT_UNUSED", + altpll_component.port_clk3 = "PORT_UNUSED", + altpll_component.port_clk4 = "PORT_UNUSED", + altpll_component.port_clk5 = "PORT_UNUSED", + altpll_component.port_clkena0 = "PORT_UNUSED", + altpll_component.port_clkena1 = "PORT_UNUSED", + altpll_component.port_clkena3 = "PORT_UNUSED", + altpll_component.port_clkena4 = "PORT_UNUSED", + altpll_component.port_clkena5 = "PORT_UNUSED", + altpll_component.port_extclk0 = "PORT_UNUSED", + altpll_component.port_extclk1 = "PORT_UNUSED", + altpll_component.port_extclk2 = "PORT_UNUSED", + altpll_component.port_extclk3 = "PORT_UNUSED"; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +// Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0" +// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +// Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "11" +// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +// Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "64.000" +// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" +// Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0" +// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "512.000" +// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "2" +// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "100.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +// Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "ns" +// Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +// Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +// Retrieval info: PRIVATE: SPREAD_USE STRING "0" +// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: USE_CLK0 STRING "1" +// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "1" +// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "2" +// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "15625" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +// Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +// Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +// Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT_CLK_EXT VCC "@clk[5..0]" +// Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT_CLK_EXT VCC "@extclk[3..0]" +// Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" +// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +// Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll.v TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll.ppf TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll.inc FALSE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll.cmp FALSE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll.bsf TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll_inst.v TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll_bb.v TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll_waveforms.html TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL dacpll_wave*.jpg FALSE FALSE +// Retrieval info: LIB_FILE: altera_mf diff --git a/gr-sounder/src/fpga/lib/sounder.v b/gr-sounder/src/fpga/lib/sounder.v new file mode 100644 index 00000000..675be888 --- /dev/null +++ b/gr-sounder/src/fpga/lib/sounder.v @@ -0,0 +1,90 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module sounder(clk_i, saddr_i, sdata_i, s_strobe_i, + tx_strobe_o, tx_dac_i_o, tx_dac_q_o, + rx_adc_i_i,rx_adc_q_i, + rx_strobe_o, rx_imp_i_o,rx_imp_q_o); + + // System interface + input clk_i; // Master clock @ 64 MHz + input [6:0] saddr_i; // Configuration bus address + input [31:0] sdata_i; // Configuration bus data + input s_strobe_i; // Configuration bus write + + // Transmit subsystem + output tx_strobe_o; // Generate an transmitter output sample + output [13:0] tx_dac_i_o; // I channel transmitter output to DAC + output [13:0] tx_dac_q_o; // Q channel transmitter output to DAC + + // Receive subsystem + output rx_strobe_o; // Indicates output samples ready for Rx FIFO + input [15:0] rx_adc_i_i; // I channel input from ADC interface module + input [15:0] rx_adc_q_i; // Q channel input from ADC interface module + output [15:0] rx_imp_i_o; // I channel impulse response to Rx FIFO + output [15:0] rx_imp_q_o; // Q channel impulse response to Rx FIFO + + // Internal variables + wire reset; + wire transmit; + wire receive; + wire loopback; + + wire [4:0] degree; + wire [13:0] ampl; + wire [15:0] mask; + + wire ref_strobe; + wire sum_strobe; + sounder_ctrl master(.clk_i(clk_i),.rst_i(reset),.saddr_i(saddr_i), + .sdata_i(sdata_i),.s_strobe_i(s_strobe_i), + .reset_o(reset),.transmit_o(transmit),.receive_o(receive),.loopback_o(loopback), + .degree_o(degree),.ampl_o(ampl),.mask_o(mask),.tx_strobe_o(tx_strobe_o), + .rx_strobe_o(rx_strobe_o),.sum_strobe_o(sum_strobe),.ref_strobe_o(ref_strobe)); + + // Loopback implementation + wire [13:0] tx_i, tx_q; + wire [15:0] tx_i_ext, tx_q_ext; + wire [15:0] rx_i, rx_q; + + sign_extend #(14,16) tx_i_extender(tx_i, tx_i_ext); + sign_extend #(14,16) tx_q_extender(tx_q, tx_q_ext); + + assign tx_dac_i_o = loopback ? 14'b0 : tx_i; + assign tx_dac_q_o = loopback ? 14'b0 : tx_q; + assign rx_i = loopback ? tx_i_ext : rx_adc_i_i; + assign rx_q = loopback ? tx_q_ext : rx_adc_q_i; + + sounder_tx transmitter + ( .clk_i(clk_i),.rst_i(reset),.ena_i(transmit), + .strobe_i(tx_strobe_o),.mask_i(mask),.ampl_i(ampl), + .tx_i_o(tx_i),.tx_q_o(tx_q) ); + + sounder_rx receiver + ( .clk_i(clk_i),.rst_i(reset),.ena_i(receive), + .sum_strobe_i(sum_strobe),.ref_strobe_i(ref_strobe), + .mask_i(mask),.degree_i(degree), + .rx_in_i_i(rx_i),.rx_in_q_i(rx_q),.rx_i_o(rx_imp_i_o),.rx_q_o(rx_imp_q_o)); + +endmodule // sounder diff --git a/gr-sounder/src/fpga/lib/sounder_ctrl.v b/gr-sounder/src/fpga/lib/sounder_ctrl.v new file mode 100644 index 00000000..6e967a5b --- /dev/null +++ b/gr-sounder/src/fpga/lib/sounder_ctrl.v @@ -0,0 +1,97 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module sounder_ctrl(clk_i,rst_i,saddr_i,sdata_i,s_strobe_i, + reset_o,transmit_o,receive_o,loopback_o, + degree_o,ampl_o,mask_o, + tx_strobe_o,rx_strobe_o,sum_strobe_o,ref_strobe_o); + + input clk_i; // Master clock @ 64 MHz + input rst_i; // Master synchronous reset + input [6:0] saddr_i; // Configuration bus address + input [31:0] sdata_i; // Configuration bus data + input s_strobe_i; // Configuration bus write + output reset_o; + output transmit_o; + output receive_o; + output loopback_o; + output [4:0] degree_o; + output [13:0] ampl_o; + output [15:0] mask_o; + output tx_strobe_o; + output rx_strobe_o; + output sum_strobe_o; + output ref_strobe_o; + + setting_reg #(`FR_USER_0) sr_mode + ( .clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out({loopback_o,receive_o,transmit_o,reset_o}) ); + + setting_reg #(`FR_USER_1) sr_lfsr_degree + ( .clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(degree_o) ); + + setting_reg #(`FR_USER_2) sr_lfsr_ampl + ( .clock(clk_i),.reset(1'b0),.strobe(s_strobe_i),.addr(saddr_i),.in(sdata_i), + .out(ampl_o) ); + + wire [16:0] len; + lfsr_constants constants + (.clk_i(clk_i),.rst_i(rst_i),.degree_i(degree_o),.mask_o(mask_o), + .len_o(len) ); + + reg [15:0] phase; + assign tx_strobe_o = ~phase[0]; + assign ref_strobe_o = tx_strobe_o & !(phase>>1 == len>>1); + assign sum_strobe_o = (phase == len); + + reg rx_strobe_o; + always @(posedge clk_i) + if (rst_i) + begin + phase <= #5 16'hFFFF; + rx_strobe_o <= #5 0; + end + else + if (sum_strobe_o) + begin + phase <= #5 0; + rx_strobe_o <= #5 1'b1; + end + else + begin + phase <= #5 phase + 16'b1; + rx_strobe_o <= #5 0; + end + + + + + + + + + + +endmodule // sounder_ctrl diff --git a/gr-sounder/src/fpga/lib/sounder_rx.v b/gr-sounder/src/fpga/lib/sounder_rx.v new file mode 100644 index 00000000..18038a3a --- /dev/null +++ b/gr-sounder/src/fpga/lib/sounder_rx.v @@ -0,0 +1,83 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +module sounder_rx(clk_i,rst_i,ena_i,sum_strobe_i,ref_strobe_i, + mask_i,degree_i,rx_in_i_i,rx_in_q_i,rx_i_o,rx_q_o); + + input clk_i; // Master clock + input rst_i; // Subsystem reset + input ena_i; // Subsystem enable + input sum_strobe_i; // Strobe on last sample per period + input ref_strobe_i; // PN code reference retarded one sample per period + + input [15:0] mask_i; // PN code LFSR mask + input [4:0] degree_i; // PN code LFSR sequency degree + + input [15:0] rx_in_i_i; // I channel on receive + input [15:0] rx_in_q_i; // Q channel on receive + + output [15:0] rx_i_o; // I channel of impulse response + output [15:0] rx_q_o; // Q channel of impulse response + + reg [31:0] sum_i, sum_q; + reg [31:0] total_i, total_q; + wire [31:0] i_ext, q_ext; + + sign_extend #(16,32) i_extender(rx_in_i_i, i_ext); + sign_extend #(16,32) q_extender(rx_in_q_i, q_ext); + + wire pn_ref; + lfsr ref_code + ( .clk_i(clk_i),.rst_i(rst_i),.ena_i(ena_i),.strobe_i(ref_strobe_i),.mask_i(mask_i),.pn_o(pn_ref) ); + + wire [31:0] prod_i = pn_ref ? i_ext : -i_ext; + wire [31:0] prod_q = pn_ref ? q_ext : -q_ext; + + always @(posedge clk_i) + if (rst_i | ~ena_i) + begin + sum_i <= #5 0; + sum_q <= #5 0; + total_i <= #5 0; + total_q <= #5 0; + end + else + if (sum_strobe_i) + begin + total_i <= #5 sum_i; + total_q <= #5 sum_q; + sum_i <= #5 prod_i; + sum_q <= #5 prod_q; + end + else + begin + sum_i <= #5 sum_i + prod_i; + sum_q <= #5 sum_q + prod_q; + end + + wire [5:0] offset = (5'd16-degree_i); + wire [31:0] scaled_i = total_i << offset; + wire [31:0] scaled_q = total_q << offset; + assign rx_i_o = scaled_i[31:16]; + assign rx_q_o = scaled_q[31:16]; + +endmodule // sounder_rx + diff --git a/gr-sounder/src/fpga/lib/sounder_tx.v b/gr-sounder/src/fpga/lib/sounder_tx.v new file mode 100644 index 00000000..148b1e50 --- /dev/null +++ b/gr-sounder/src/fpga/lib/sounder_tx.v @@ -0,0 +1,44 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`include "../../../../usrp/firmware/include/fpga_regs_common.v" +`include "../../../../usrp/firmware/include/fpga_regs_standard.v" + +module sounder_tx(clk_i,rst_i,ena_i,strobe_i,ampl_i,mask_i,tx_i_o,tx_q_o); + input clk_i; + input rst_i; + input ena_i; + input strobe_i; + input [13:0] ampl_i; + input [15:0] mask_i; + output [13:0] tx_i_o; + output [13:0] tx_q_o; + + wire pn; + wire [13:0] min_value = (~ampl_i)+14'b1; + + lfsr pn_code + ( .clk_i(clk_i),.rst_i(rst_i),.ena_i(ena_i),.strobe_i(strobe_i),.mask_i(mask_i),.pn_o(pn) ); + + assign tx_i_o = ena_i ? (pn ? ampl_i : min_value) : 14'b0; // Bipolar + assign tx_q_o = 14'b0; + +endmodule // sounder_tx diff --git a/gr-sounder/src/fpga/tb/Makefile.am b/gr-sounder/src/fpga/tb/Makefile.am new file mode 100644 index 00000000..ec15f28d --- /dev/null +++ b/gr-sounder/src/fpga/tb/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + sounder_tb.v \ + sounder_tb.sav \ + sounder_tb.sh \ + sounder_tb_wave.sh + +MOSTLYCLEANFILES += *.vcd *.out* sounder_tb diff --git a/gr-sounder/src/fpga/tb/Makefile.in b/gr-sounder/src/fpga/tb/Makefile.in new file mode 100644 index 00000000..aafb2808 --- /dev/null +++ b/gr-sounder/src/fpga/tb/Makefile.in @@ -0,0 +1,879 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/src/fpga/tb +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT *.vcd *.out* sounder_tb +EXTRA_DIST = \ + sounder_tb.v \ + sounder_tb.sav \ + sounder_tb.sh \ + sounder_tb_wave.sh + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/fpga/tb/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/fpga/tb/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/fpga/tb/sounder_tb.sav b/gr-sounder/src/fpga/tb/sounder_tb.sav new file mode 100644 index 00000000..25bc512b --- /dev/null +++ b/gr-sounder/src/fpga/tb/sounder_tb.sav @@ -0,0 +1,57 @@ +*-29.807737 317080000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +@200 +- +@28 +sounder_tb.s_strobe +@22 +sounder_tb.saddr[6:0] +@200 +- +@28 +sounder_tb.uut.reset +sounder_tb.uut.transmit +sounder_tb.uut.receive +sounder_tb.uut.loopback +@200 +- +@22 +sounder_tb.uut.degree[4:0] +sounder_tb.uut.mask[15:0] +sounder_tb.uut.ampl[13:0] +sounder_tb.uut.receiver.offset[5:0] +@200 +- +@8420 +sounder_tb.tx_dac_i[13:0] +@28 +sounder_tb.tx_strobe +@200 +- +@8420 +sounder_tb.fifo_i[15:0] +@28 +sounder_tb.fifo_strobe +@200 +- +@28 +sounder_tb.uut.ref_strobe +sounder_tb.uut.sum_strobe +@200 +- +@28 +sounder_tb.clk +sounder_tb.uut.transmitter.pn +sounder_tb.uut.receiver.pn_ref +@8420 +sounder_tb.uut.receiver.prod_i[31:0] +sounder_tb.uut.receiver.scaled_i[31:0] +@8421 +sounder_tb.uut.receiver.sum_i[31:0] +@8420 +sounder_tb.uut.receiver.total_i[31:0] +@200 +- +@22 +sounder_tb.uut.master.len[16:0] +@200 +- diff --git a/gr-sounder/src/fpga/tb/sounder_tb.sh b/gr-sounder/src/fpga/tb/sounder_tb.sh new file mode 100755 index 00000000..28efc8d3 --- /dev/null +++ b/gr-sounder/src/fpga/tb/sounder_tb.sh @@ -0,0 +1,6 @@ +#!/bin/sh +iverilog -y ../lib/ -y ../../../../usrp/fpga/sdr_lib \ + sounder_tb.v -o sounder_tb && \ +./sounder_tb > sounder_tb.out && \ + grep 'r=0' sounder_tb.out | grep 'c=1' > sounder_tb.out2 + diff --git a/gr-sounder/src/fpga/tb/sounder_tb.v b/gr-sounder/src/fpga/tb/sounder_tb.v new file mode 100644 index 00000000..0e0cb55c --- /dev/null +++ b/gr-sounder/src/fpga/tb/sounder_tb.v @@ -0,0 +1,238 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +`timescale 1ns/100ps + +`include "../lib/sounder.v" + +`define FR_MODE 7'd64 +`define bmFR_MODE_RESET 32'h0001 +`define bmFR_MODE_TX 32'h0002 +`define bmFR_MODE_RX 32'h0004 +`define bmFR_MODE_LP 32'h0008 + +`define FR_DEGREE 7'd65 +`define FR_AMPL 7'd66 + +module sounder_tb; + + // System bus + reg clk; + reg rst; + reg ena; + + // Configuration bus + reg [6:0] saddr; + reg [31:0] sdata; + reg s_strobe; + + // DAC bus + wire tx_strobe; + wire [13:0] tx_dac_i; + wire [13:0] tx_dac_q; + + // ADC bus + reg [15:0] rx_adc_i; + reg [15:0] rx_adc_q; + + // FIFO bus + wire fifo_strobe; + wire [15:0] fifo_i; + wire [15:0] fifo_q; + + // Configuration shadow registers + reg [31:0] mode; + reg [31:0] degree; + + sounder uut + (.clk_i(clk),.saddr_i(saddr),.sdata_i(sdata),.s_strobe_i(s_strobe), + .tx_strobe_o(tx_strobe),.tx_dac_i_o(tx_dac_i),.tx_dac_q_o(tx_dac_q), + .rx_strobe_o(fifo_strobe),.rx_adc_i_i(rx_adc_i),.rx_adc_q_i(rx_adc_q), + .rx_imp_i_o(fifo_i),.rx_imp_q_o(fifo_q)); + + // Start up initialization + initial + begin + clk = 0; + rst = 0; + ena = 0; + saddr = 0; + sdata = 0; + s_strobe = 0; + rx_adc_i = 0; + rx_adc_q = 0; + mode = 0; + degree = 0; + + @(posedge clk); + rst = 1; + @(posedge clk); + rst = 0; + @(posedge clk); + ena = 1; + end + + always + #5 clk <= ~clk; + + initial + begin + $monitor($time, " c=%b r=%b phs=%d txs=%b rfs=%b rxs=%b sms=%b pn=%b pnr=%b prd=%x sum=%x tot=%x", + clk, rst, uut.master.phase, uut.tx_strobe_o, uut.ref_strobe, uut.rx_strobe_o, + uut.sum_strobe, uut.transmitter.pn, uut.receiver.pn_ref, uut.receiver.prod_i, + uut.receiver.sum_i, uut.receiver.total_i); + + $dumpfile("sounder_tb.vcd"); + $dumpvars(0, sounder_tb); + end + + // Test tasks + task write_cfg_register; + input [6:0] regno; + input [31:0] value; + + begin + @(posedge clk); + saddr <= #5 regno; + sdata <= #5 value; + s_strobe <= #5 1'b1; + @(posedge clk); + s_strobe <= #5 0; + end + endtask // write_cfg_register + + // Application reset line + task set_reset; + input reset; + + begin + mode = reset ? (mode | `bmFR_MODE_RESET) : (mode & ~`bmFR_MODE_RESET); + write_cfg_register(`FR_MODE, mode); + end + endtask // reset + + // Set the PN code degree + task set_degree; + input [5:0] degree; + begin + write_cfg_register(`FR_DEGREE, degree); + end + endtask // set_degree + + // Set the PN amplitude + task set_amplitude; + input [13:0] ampl; + begin + write_cfg_register(`FR_AMPL, ampl); + end + endtask // set_ampl + + // Turn on or off the transmitter + task enable_tx; + input tx; + + begin + mode = tx ? (mode | `bmFR_MODE_TX) : (mode & ~`bmFR_MODE_TX); + write_cfg_register(`FR_MODE, mode); + end + endtask // enable_tx + + // Turn on or off the receiver + task enable_rx; + input rx; + + begin + mode = rx ? (mode | `bmFR_MODE_RX) : (mode & ~`bmFR_MODE_RX); + write_cfg_register(`FR_MODE, mode); + end + endtask // enable_rx + + + // Turn on or off digital loopback + task enable_lp; + input lp; + + begin + mode = lp ? (mode | `bmFR_MODE_LP) : (mode & ~`bmFR_MODE_LP); + write_cfg_register(`FR_MODE, mode); + end + endtask // enable_lp + + // Test transmitter functionality + task test_tx; + input [5:0] degree; + input [31:0] test_len; + + begin + #20 set_reset(1); + #20 set_degree(degree); + #20 set_amplitude(14'h1000); + #20 enable_tx(1); + #20 enable_rx(0); + #20 enable_lp(0); + #20 set_reset(0); + #(test_len); + end + endtask // test_tx + + // Test loopback functionality + task test_lp; + input [5:0] degree; + input [31:0] test_len; + + begin + #20 set_reset(1); + #20 set_degree(degree); + #20 enable_tx(1); + #20 enable_rx(1); + #20 enable_lp(1); + #20 set_reset(0); + #(test_len); + end + endtask // test_lp + + // Test receiver only functionality + task test_rx; + input [5:0] degree; + input [31:0] test_len; + + begin + #20 set_reset(1); + #20 set_degree(degree); + #20 enable_tx(0); + #20 enable_rx(1); + #20 enable_lp(0); + #20 set_reset(0); + #(test_len); + end + endtask // test_rx + + // Execute tests + initial + begin + #20 test_tx(8,255*20); + #20 test_lp(8,255*255*20*5); + //#20 test_rx(8,255*255*20*5); + #500 $finish; + end + +endmodule + diff --git a/gr-sounder/src/fpga/tb/sounder_tb_wave.sh b/gr-sounder/src/fpga/tb/sounder_tb_wave.sh new file mode 100755 index 00000000..4551d5c5 --- /dev/null +++ b/gr-sounder/src/fpga/tb/sounder_tb_wave.sh @@ -0,0 +1,2 @@ +#!/bin/sh +gtkwave sounder_tb.vcd sounder_tb.sav diff --git a/gr-sounder/src/fpga/top/Makefile.am b/gr-sounder/src/fpga/top/Makefile.am new file mode 100644 index 00000000..63e07dc5 --- /dev/null +++ b/gr-sounder/src/fpga/top/Makefile.am @@ -0,0 +1,48 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +RBFS = usrp_sounder.rbf + +rbf2datadir = $(prefix)/share/usrp/rev2 +dist_rbf2data_DATA = $(RBFS) + +rbf4datadir = $(prefix)/share/usrp/rev4 +dist_rbf4data_DATA = $(RBFS) + +EXTRA_DIST = \ + config.vh \ + usrp_sounder.v \ + usrp_sounder.csf \ + usrp_sounder.esf \ + usrp_sounder.psf \ + usrp_sounder.qpf + +MOSTLYCLEANFILES += \ + db/* \ + *.rpt \ + *.summary \ + *.qws \ + *.smsg \ + *.done \ + *.pin \ + *.sof diff --git a/gr-sounder/src/fpga/top/Makefile.in b/gr-sounder/src/fpga/top/Makefile.in new file mode 100644 index 00000000..6d41b438 --- /dev/null +++ b/gr-sounder/src/fpga/top/Makefile.in @@ -0,0 +1,938 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_rbf2data_DATA) $(dist_rbf4data_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/src/fpga/top +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(rbf2datadir)" \ + "$(DESTDIR)$(rbf4datadir)" +dist_rbf2dataDATA_INSTALL = $(INSTALL_DATA) +dist_rbf4dataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_rbf2data_DATA) $(dist_rbf4data_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT db/* *.rpt *.summary *.qws *.smsg *.done *.pin *.sof +RBFS = usrp_sounder.rbf +rbf2datadir = $(prefix)/share/usrp/rev2 +dist_rbf2data_DATA = $(RBFS) +rbf4datadir = $(prefix)/share/usrp/rev4 +dist_rbf4data_DATA = $(RBFS) +EXTRA_DIST = \ + config.vh \ + usrp_sounder.v \ + usrp_sounder.csf \ + usrp_sounder.esf \ + usrp_sounder.psf \ + usrp_sounder.qpf + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/fpga/top/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/fpga/top/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_rbf2dataDATA: $(dist_rbf2data_DATA) + @$(NORMAL_INSTALL) + test -z "$(rbf2datadir)" || $(MKDIR_P) "$(DESTDIR)$(rbf2datadir)" + @list='$(dist_rbf2data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_rbf2dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(rbf2datadir)/$$f'"; \ + $(dist_rbf2dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(rbf2datadir)/$$f"; \ + done + +uninstall-dist_rbf2dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_rbf2data_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rbf2datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(rbf2datadir)/$$f"; \ + done +install-dist_rbf4dataDATA: $(dist_rbf4data_DATA) + @$(NORMAL_INSTALL) + test -z "$(rbf4datadir)" || $(MKDIR_P) "$(DESTDIR)$(rbf4datadir)" + @list='$(dist_rbf4data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_rbf4dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(rbf4datadir)/$$f'"; \ + $(dist_rbf4dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(rbf4datadir)/$$f"; \ + done + +uninstall-dist_rbf4dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_rbf4data_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rbf4datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(rbf4datadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(rbf2datadir)" "$(DESTDIR)$(rbf4datadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_rbf2dataDATA install-dist_rbf4dataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_rbf2dataDATA uninstall-dist_rbf4dataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_rbf2dataDATA install-dist_rbf4dataDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_rbf2dataDATA \ + uninstall-dist_rbf4dataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/fpga/top/config.vh b/gr-sounder/src/fpga/top/config.vh new file mode 100644 index 00000000..06445e9a --- /dev/null +++ b/gr-sounder/src/fpga/top/config.vh @@ -0,0 +1,22 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// +// Uncomment to enable 64 MHz Tx clock, otherwise 32 MHz +//`define TX_RATE_MAX diff --git a/gr-sounder/src/fpga/top/usrp_sounder.csf b/gr-sounder/src/fpga/top/usrp_sounder.csf new file mode 100644 index 00000000..544f278e --- /dev/null +++ b/gr-sounder/src/fpga/top/usrp_sounder.csf @@ -0,0 +1,444 @@ +COMPILER_SETTINGS +{ + IO_PLACEMENT_OPTIMIZATION = OFF; + ENABLE_DRC_SETTINGS = OFF; + PHYSICAL_SYNTHESIS_REGISTER_RETIMING = OFF; + PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION = OFF; + PHYSICAL_SYNTHESIS_COMBO_LOGIC = OFF; + DRC_FANOUT_EXCEEDING = 30; + DRC_REPORT_FANOUT_EXCEEDING = OFF; + DRC_TOP_FANOUT = 50; + DRC_REPORT_TOP_FANOUT = OFF; + RUN_DRC_DURING_COMPILATION = OFF; + ADV_NETLIST_OPT_RETIME_CORE_AND_IO = ON; + ADV_NETLIST_OPT_SYNTH_USE_FITTER_INFO = OFF; + ADV_NETLIST_OPT_SYNTH_GATE_RETIME = OFF; + ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP = OFF; + SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES = OFF; + MERGE_HEX_FILE = OFF; + TRUE_WYSIWYG_FLOW = OFF; + SEED = 1; + FINAL_PLACEMENT_OPTIMIZATION = AUTOMATICALLY; + FAMILY = Cyclone; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "LOWER TO 1ESB UPPER TO 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DEEP_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_SINGLE_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_WIDE_MODE_OUTPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4ESB"; + DPRAM_DEEP_MODE_OUTPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_INPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4"; + DPRAM_DEEP_MODE_INPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_OTHER_SIGNALS_EPXA4_10 = "DEFAULT OTHER ROUTING OPTIONS"; + DPRAM_OUTPUT_EPXA4_10 = "DEFAULT OUTPUT ROUTING OPTIONS"; + DPRAM_INPUT_EPXA4_10 = "DEFAULT INPUT ROUTING OPTIONS"; + STRIPE_TO_PLD_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PLD_TO_STRIPE_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PROCESSOR_DEBUG_EXTENSIONS_EPXA4_10 = "MEGALAB COLUMN 2"; + STRIPE_TO_PLD_BRIDGE_EPXA4_10 = "MEGALAB COLUMN 1"; + FAST_FIT_COMPILATION = OFF; + SIGNALPROBE_DURING_NORMAL_COMPILATION = OFF; + OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING = ON; + OPTIMIZE_TIMING = "NORMAL COMPILATION"; + OPTIMIZE_HOLD_TIMING = OFF; + COMPILATION_LEVEL = FULL; + SAVE_DISK_SPACE = OFF; + SPEED_DISK_USAGE_TRADEOFF = NORMAL; + LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT = OFF; + SIGNALPROBE_ALLOW_OVERUSE = OFF; + FOCUS_ENTITY_NAME = |usrp_sounder; + ROUTING_BACK_ANNOTATION_MODE = OFF; + INC_PLC_MODE = OFF; + FIT_ONLY_ONE_ATTEMPT = OFF; +} +DEFAULT_DEVICE_OPTIONS +{ + GENERATE_CONFIG_HEXOUT_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_JBC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_SVF_FILE = OFF; + RESERVE_PIN = "AS INPUT TRI-STATED"; + RESERVE_ALL_UNUSED_PINS = "AS OUTPUT DRIVING GROUND"; + HEXOUT_FILE_COUNT_DIRECTION = UP; + HEXOUT_FILE_START_ADDRESS = 0; + GENERATE_HEX_FILE = OFF; + GENERATE_RBF_FILE = OFF; + GENERATE_TTF_FILE = OFF; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + APEX20K_CONFIGURATION_DEVICE = AUTO; + USE_CONFIGURATION_DEVICE = ON; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + AUTO_RESTART_CONFIGURATION = OFF; + ENABLE_VREFB_PIN = OFF; + ENABLE_VREFA_PIN = OFF; + SECURITY_BIT = OFF; + USER_START_UP_CLOCK = OFF; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "ACTIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_UPDATE_MODE = STANDARD; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + ENABLE_JTAG_BST_SUPPORT = OFF; + CONFIGURATION_CLOCK_DIVISOR = 1; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CLOCK_SOURCE = INTERNAL; + COMPRESSION_MODE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; +} +AUTO_SLD_HUB_ENTITY +{ + AUTO_INSERT_SLD_HUB_ENTITY = ENABLE; + HUB_INSTANCE_NAME = SLD_HUB_INST; + HUB_ENTITY_NAME = SLD_HUB; +} +SIGNALTAP_LOGIC_ANALYZER_SETTINGS +{ + ENABLE_SIGNALTAP = Off; + AUTO_ENABLE_SMART_COMPILE = On; +} +CHIP(usrp_sounder) +{ + DEVICE = EP1C12Q240C8; + DEVICE_FILTER_PACKAGE = "ANY QFP"; + DEVICE_FILTER_PIN_COUNT = 240; + DEVICE_FILTER_SPEED_GRADE = ANY; + AUTO_RESTART_CONFIGURATION = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + USER_START_UP_CLOCK = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_JTAG_BST_SUPPORT = OFF; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + USE_CONFIGURATION_DEVICE = OFF; + APEX20K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + STRATIX_UPDATE_MODE = STANDARD; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + COMPRESSION_MODE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + GENERATE_TTF_FILE = OFF; + GENERATE_RBF_FILE = ON; + GENERATE_HEX_FILE = OFF; + SECURITY_BIT = OFF; + ENABLE_VREFA_PIN = OFF; + ENABLE_VREFB_PIN = OFF; + GENERATE_SVF_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_JBC_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_HEXOUT_FILE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; + BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE = OFF; + HEXOUT_FILE_START_ADDRESS = 0; + HEXOUT_FILE_COUNT_DIRECTION = UP; + RESERVE_ALL_UNUSED_PINS = "AS INPUT TRI-STATED"; + STRATIX_DEVICE_IO_STANDARD = LVTTL; + CLOCK_SOURCE = INTERNAL; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CONFIGURATION_CLOCK_DIVISOR = 1; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + SCLK : LOCATION = Pin_101; + SDI : LOCATION = Pin_100; + SEN : LOCATION = Pin_98; + SLD : LOCATION = Pin_95; + adc1_data[0] : LOCATION = Pin_5; + adc1_data[10] : LOCATION = Pin_235; + adc1_data[11] : LOCATION = Pin_234; + adc1_data[1] : LOCATION = Pin_4; + adc1_data[2] : LOCATION = Pin_3; + adc1_data[3] : LOCATION = Pin_2; + adc1_data[4] : LOCATION = Pin_1; + adc1_data[4] : IO_STANDARD = LVTTL; + adc1_data[5] : LOCATION = Pin_240; + adc1_data[6] : LOCATION = Pin_239; + adc1_data[7] : LOCATION = Pin_238; + adc1_data[8] : LOCATION = Pin_237; + adc1_data[9] : LOCATION = Pin_236; + adc2_data[0] : LOCATION = Pin_20; + adc2_data[10] : LOCATION = Pin_8; + adc2_data[11] : LOCATION = Pin_7; + adc2_data[1] : LOCATION = Pin_19; + adc2_data[2] : LOCATION = Pin_18; + adc2_data[3] : LOCATION = Pin_17; + adc2_data[4] : LOCATION = Pin_16; + adc2_data[5] : LOCATION = Pin_15; + adc2_data[6] : LOCATION = Pin_14; + adc2_data[7] : LOCATION = Pin_13; + adc2_data[8] : LOCATION = Pin_12; + adc2_data[9] : LOCATION = Pin_11; + adc3_data[0] : LOCATION = Pin_200; + adc3_data[10] : LOCATION = Pin_184; + adc3_data[11] : LOCATION = Pin_183; + adc3_data[1] : LOCATION = Pin_197; + adc3_data[2] : LOCATION = Pin_196; + adc3_data[3] : LOCATION = Pin_195; + adc3_data[4] : LOCATION = Pin_194; + adc3_data[5] : LOCATION = Pin_193; + adc3_data[6] : LOCATION = Pin_188; + adc3_data[7] : LOCATION = Pin_187; + adc3_data[8] : LOCATION = Pin_186; + adc3_data[9] : LOCATION = Pin_185; + adc4_data[0] : LOCATION = Pin_222; + adc4_data[10] : LOCATION = Pin_203; + adc4_data[11] : LOCATION = Pin_202; + adc4_data[1] : LOCATION = Pin_219; + adc4_data[2] : LOCATION = Pin_217; + adc4_data[3] : LOCATION = Pin_216; + adc4_data[4] : LOCATION = Pin_215; + adc4_data[5] : LOCATION = Pin_214; + adc4_data[6] : LOCATION = Pin_213; + adc4_data[7] : LOCATION = Pin_208; + adc4_data[8] : LOCATION = Pin_207; + adc4_data[9] : LOCATION = Pin_206; + adc_oeb[0] : LOCATION = Pin_228; + adc_oeb[1] : LOCATION = Pin_21; + adc_oeb[2] : LOCATION = Pin_181; + adc_oeb[3] : LOCATION = Pin_218; + adc_otr[0] : LOCATION = Pin_233; + adc_otr[1] : LOCATION = Pin_6; + adc_otr[2] : LOCATION = Pin_182; + adc_otr[3] : LOCATION = Pin_201; + adclk0 : LOCATION = Pin_224; + adclk1 : LOCATION = Pin_226; + clk0 : LOCATION = Pin_28; + clk0 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk0 : IO_STANDARD = LVTTL; + clk1 : LOCATION = Pin_29; + clk1 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk1 : IO_STANDARD = LVTTL; + clk3 : LOCATION = Pin_152; + clk3 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk3 : IO_STANDARD = LVTTL; + clk_120mhz : LOCATION = Pin_153; + clk_120mhz : IO_STANDARD = LVTTL; + clk_out : LOCATION = Pin_63; + clk_out : IO_STANDARD = LVTTL; + dac1_data[0] : LOCATION = Pin_165; + dac1_data[10] : LOCATION = Pin_177; + dac1_data[11] : LOCATION = Pin_178; + dac1_data[12] : LOCATION = Pin_179; + dac1_data[13] : LOCATION = Pin_180; + dac1_data[1] : LOCATION = Pin_166; + dac1_data[2] : LOCATION = Pin_167; + dac1_data[3] : LOCATION = Pin_168; + dac1_data[4] : LOCATION = Pin_169; + dac1_data[5] : LOCATION = Pin_170; + dac1_data[6] : LOCATION = Pin_173; + dac1_data[7] : LOCATION = Pin_174; + dac1_data[8] : LOCATION = Pin_175; + dac1_data[9] : LOCATION = Pin_176; + dac2_data[0] : LOCATION = Pin_159; + dac2_data[10] : LOCATION = Pin_163; + dac2_data[11] : LOCATION = Pin_139; + dac2_data[12] : LOCATION = Pin_164; + dac2_data[13] : LOCATION = Pin_138; + dac2_data[1] : LOCATION = Pin_158; + dac2_data[2] : LOCATION = Pin_160; + dac2_data[3] : LOCATION = Pin_156; + dac2_data[4] : LOCATION = Pin_161; + dac2_data[5] : LOCATION = Pin_144; + dac2_data[6] : LOCATION = Pin_162; + dac2_data[7] : LOCATION = Pin_141; + dac2_data[8] : LOCATION = Pin_143; + dac2_data[9] : LOCATION = Pin_140; + dac3_data[0] : LOCATION = Pin_122; + dac3_data[10] : LOCATION = Pin_134; + dac3_data[11] : LOCATION = Pin_135; + dac3_data[12] : LOCATION = Pin_136; + dac3_data[13] : LOCATION = Pin_137; + dac3_data[1] : LOCATION = Pin_123; + dac3_data[2] : LOCATION = Pin_124; + dac3_data[3] : LOCATION = Pin_125; + dac3_data[4] : LOCATION = Pin_126; + dac3_data[5] : LOCATION = Pin_127; + dac3_data[6] : LOCATION = Pin_128; + dac3_data[7] : LOCATION = Pin_131; + dac3_data[8] : LOCATION = Pin_132; + dac3_data[9] : LOCATION = Pin_133; + dac4_data[0] : LOCATION = Pin_104; + dac4_data[10] : LOCATION = Pin_118; + dac4_data[11] : LOCATION = Pin_119; + dac4_data[12] : LOCATION = Pin_120; + dac4_data[13] : LOCATION = Pin_121; + dac4_data[1] : LOCATION = Pin_105; + dac4_data[2] : LOCATION = Pin_106; + dac4_data[3] : LOCATION = Pin_107; + dac4_data[4] : LOCATION = Pin_108; + dac4_data[5] : LOCATION = Pin_113; + dac4_data[6] : LOCATION = Pin_114; + dac4_data[7] : LOCATION = Pin_115; + dac4_data[8] : LOCATION = Pin_116; + dac4_data[9] : LOCATION = Pin_117; + enable_rx : LOCATION = Pin_88; + enable_tx : LOCATION = Pin_93; + gndbus[0] : LOCATION = Pin_223; + gndbus[0] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[0] : IO_STANDARD = LVTTL; + gndbus[1] : LOCATION = Pin_225; + gndbus[1] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[1] : IO_STANDARD = LVTTL; + gndbus[2] : LOCATION = Pin_227; + gndbus[2] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[2] : IO_STANDARD = LVTTL; + gndbus[3] : LOCATION = Pin_62; + gndbus[3] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[3] : IO_STANDARD = LVTTL; + gndbus[4] : LOCATION = Pin_64; + gndbus[4] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[4] : IO_STANDARD = LVTTL; + misc_pins[0] : LOCATION = Pin_87; + misc_pins[0] : IO_STANDARD = LVTTL; + misc_pins[10] : LOCATION = Pin_76; + misc_pins[10] : IO_STANDARD = LVTTL; + misc_pins[11] : LOCATION = Pin_74; + misc_pins[11] : IO_STANDARD = LVTTL; + misc_pins[1] : LOCATION = Pin_86; + misc_pins[1] : IO_STANDARD = LVTTL; + misc_pins[2] : LOCATION = Pin_85; + misc_pins[2] : IO_STANDARD = LVTTL; + misc_pins[3] : LOCATION = Pin_84; + misc_pins[3] : IO_STANDARD = LVTTL; + misc_pins[4] : LOCATION = Pin_83; + misc_pins[4] : IO_STANDARD = LVTTL; + misc_pins[5] : LOCATION = Pin_82; + misc_pins[5] : IO_STANDARD = LVTTL; + misc_pins[6] : LOCATION = Pin_79; + misc_pins[6] : IO_STANDARD = LVTTL; + misc_pins[7] : LOCATION = Pin_78; + misc_pins[7] : IO_STANDARD = LVTTL; + misc_pins[8] : LOCATION = Pin_77; + misc_pins[8] : IO_STANDARD = LVTTL; + misc_pins[9] : LOCATION = Pin_75; + misc_pins[9] : IO_STANDARD = LVTTL; + reset : LOCATION = Pin_94; + usbclk : LOCATION = Pin_55; + usbctl[0] : LOCATION = Pin_56; + usbctl[1] : LOCATION = Pin_54; + usbctl[2] : LOCATION = Pin_53; + usbctl[3] : LOCATION = Pin_58; + usbctl[4] : LOCATION = Pin_57; + usbctl[5] : LOCATION = Pin_44; + usbdata[0] : LOCATION = Pin_73; + usbdata[10] : LOCATION = Pin_41; + usbdata[11] : LOCATION = Pin_39; + usbdata[12] : LOCATION = Pin_38; + usbdata[12] : IO_STANDARD = LVTTL; + usbdata[13] : LOCATION = Pin_37; + usbdata[14] : LOCATION = Pin_24; + usbdata[15] : LOCATION = Pin_23; + usbdata[1] : LOCATION = Pin_68; + usbdata[2] : LOCATION = Pin_67; + usbdata[3] : LOCATION = Pin_66; + usbdata[4] : LOCATION = Pin_65; + usbdata[5] : LOCATION = Pin_61; + usbdata[6] : LOCATION = Pin_60; + usbdata[7] : LOCATION = Pin_59; + usbdata[8] : LOCATION = Pin_43; + usbdata[9] : LOCATION = Pin_42; + usbrdy[0] : LOCATION = Pin_45; + usbrdy[1] : LOCATION = Pin_46; + usbrdy[2] : LOCATION = Pin_47; + usbrdy[3] : LOCATION = Pin_48; + usbrdy[4] : LOCATION = Pin_49; + usbrdy[5] : LOCATION = Pin_50; + clear_status : LOCATION = Pin_99; +} diff --git a/gr-sounder/src/fpga/top/usrp_sounder.esf b/gr-sounder/src/fpga/top/usrp_sounder.esf new file mode 100644 index 00000000..c7d828b2 --- /dev/null +++ b/gr-sounder/src/fpga/top/usrp_sounder.esf @@ -0,0 +1,14 @@ +SIMULATOR_SETTINGS +{ + ESTIMATE_POWER_CONSUMPTION = OFF; + GLITCH_INTERVAL = 1NS; + GLITCH_DETECTION = OFF; + SIMULATION_COVERAGE = ON; + CHECK_OUTPUTS = OFF; + SETUP_HOLD_DETECTION = OFF; + POWER_ESTIMATION_START_TIME = "0 NS"; + ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS = ON; + SIMULATION_MODE = TIMING; + START_TIME = 0NS; + USE_COMPILER_SETTINGS = usrp_sounder; +} diff --git a/gr-sounder/src/fpga/top/usrp_sounder.psf b/gr-sounder/src/fpga/top/usrp_sounder.psf new file mode 100644 index 00000000..7bd32ff5 --- /dev/null +++ b/gr-sounder/src/fpga/top/usrp_sounder.psf @@ -0,0 +1,312 @@ +DEFAULT_DESIGN_ASSISTANT_SETTINGS +{ + HCPY_ALOAD_SIGNALS = OFF; + HCPY_VREF_PINS = OFF; + HCPY_CAT = OFF; + HCPY_ILLEGAL_HC_DEV_PKG = OFF; + ACLK_RULE_IMSZER_ADOMAIN = OFF; + ACLK_RULE_SZER_BTW_ACLK_DOMAIN = OFF; + ACLK_RULE_NO_SZER_ACLK_DOMAIN = OFF; + ACLK_CAT = OFF; + SIGNALRACE_RULE_ASYNCHPIN_SYNCH_CLKPIN = OFF; + SIGNALRACE_CAT = OFF; + NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED = OFF; + NONSYNCHSTRUCT_RULE_SRLATCH = OFF; + NONSYNCHSTRUCT_RULE_DLATCH = OFF; + NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR = OFF; + NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN = OFF; + NONSYNCHSTRUCT_RULE_RIPPLE_CLK = OFF; + NONSYNCHSTRUCT_RULE_DELAY_CHAIN = OFF; + NONSYNCHSTRUCT_RULE_REG_LOOP = OFF; + NONSYNCHSTRUCT_RULE_COMBLOOP = OFF; + NONSYNCHSTRUCT_CAT = OFF; + NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE = OFF; + TIMING_RULE_COIN_CLKEDGE = OFF; + TIMING_RULE_SHIFT_REG = OFF; + TIMING_RULE_HIGH_FANOUTS = OFF; + TIMING_CAT = OFF; + RESET_RULE_ALL = OFF; + RESET_RULE_IMSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_UNSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_REG_ASNYCH = OFF; + RESET_RULE_COMB_ASYNCH_RESET = OFF; + RESET_RULE_IMSYNCH_EXRESET = OFF; + RESET_RULE_UNSYNCH_EXRESET = OFF; + RESET_RULE_INPINS_RESETNET = OFF; + RESET_CAT = OFF; + CLK_RULE_ALL = OFF; + CLK_RULE_MIX_EDGES = OFF; + CLK_RULE_CLKNET_CLKSPINES = OFF; + CLK_RULE_INPINS_CLKNET = OFF; + CLK_RULE_GATING_SCHEME = OFF; + CLK_RULE_INV_CLOCK = OFF; + CLK_RULE_COMB_CLOCK = OFF; + CLK_CAT = OFF; + HCPY_EXCEED_USER_IO_USAGE = OFF; + HCPY_EXCEED_RAM_USAGE = OFF; + NONSYNCHSTRUCT_RULE_ASYN_RAM = OFF; + SIGNALRACE_RULE_TRISTATE = OFF; + ASSG_RULE_MISSING_TIMING = OFF; + ASSG_RULE_MISSING_FMAX = OFF; + ASSG_CAT = OFF; +} +SYNTHESIS_FITTING_SETTINGS +{ + AUTO_SHIFT_REGISTER_RECOGNITION = ON; + AUTO_DSP_RECOGNITION = ON; + AUTO_RAM_RECOGNITION = ON; + REMOVE_DUPLICATE_LOGIC = ON; + AUTO_TURBO_BIT = ON; + AUTO_MERGE_PLLS = ON; + AUTO_OPEN_DRAIN_PINS = ON; + AUTO_PARALLEL_EXPANDERS = ON; + AUTO_FAST_OUTPUT_ENABLE_REGISTERS = OFF; + AUTO_FAST_OUTPUT_REGISTERS = OFF; + AUTO_FAST_INPUT_REGISTERS = OFF; + AUTO_CASCADE_CHAINS = ON; + AUTO_CARRY_CHAINS = ON; + AUTO_DELAY_CHAINS = ON; + MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH = 4; + PARALLEL_EXPANDER_CHAIN_LENGTH = 16; + CASCADE_CHAIN_LENGTH = 2; + STRATIX_CARRY_CHAIN_LENGTH = 70; + MERCURY_CARRY_CHAIN_LENGTH = 48; + FLEX10K_CARRY_CHAIN_LENGTH = 32; + FLEX6K_CARRY_CHAIN_LENGTH = 32; + CARRY_CHAIN_LENGTH = 48; + CARRY_OUT_PINS_LCELL_INSERT = ON; + NORMAL_LCELL_INSERT = ON; + AUTO_LCELL_INSERTION = ON; + ALLOW_XOR_GATE_USAGE = ON; + AUTO_PACKED_REGISTERS_STRATIX = NORMAL; + AUTO_PACKED_REGISTERS = OFF; + AUTO_PACKED_REG_CYCLONE = NORMAL; + FLEX10K_OPTIMIZATION_TECHNIQUE = AREA; + FLEX6K_OPTIMIZATION_TECHNIQUE = AREA; + MERCURY_OPTIMIZATION_TECHNIQUE = AREA; + APEX20K_OPTIMIZATION_TECHNIQUE = SPEED; + MAX7000_OPTIMIZATION_TECHNIQUE = SPEED; + STRATIX_OPTIMIZATION_TECHNIQUE = SPEED; + CYCLONE_OPTIMIZATION_TECHNIQUE = AREA; + FLEX10K_TECHNOLOGY_MAPPER = LUT; + FLEX6K_TECHNOLOGY_MAPPER = LUT; + MERCURY_TECHNOLOGY_MAPPER = LUT; + APEX20K_TECHNOLOGY_MAPPER = LUT; + MAX7000_TECHNOLOGY_MAPPER = "PRODUCT TERM"; + STRATIX_TECHNOLOGY_MAPPER = LUT; + AUTO_IMPLEMENT_IN_ROM = OFF; + AUTO_GLOBAL_MEMORY_CONTROLS = OFF; + AUTO_GLOBAL_REGISTER_CONTROLS = ON; + AUTO_GLOBAL_OE = ON; + AUTO_GLOBAL_CLOCK = ON; + USE_LPM_FOR_AHDL_OPERATORS = ON; + LIMIT_AHDL_INTEGERS_TO_32_BITS = OFF; + ENABLE_BUS_HOLD_CIRCUITRY = OFF; + WEAK_PULL_UP_RESISTOR = OFF; + TURBO_BIT = ON; + MAX7000_IGNORE_SOFT_BUFFERS = OFF; + IGNORE_SOFT_BUFFERS = ON; + MAX7000_IGNORE_LCELL_BUFFERS = AUTO; + IGNORE_LCELL_BUFFERS = OFF; + IGNORE_ROW_GLOBAL_BUFFERS = OFF; + IGNORE_GLOBAL_BUFFERS = OFF; + IGNORE_CASCADE_BUFFERS = OFF; + IGNORE_CARRY_BUFFERS = OFF; + REMOVE_DUPLICATE_REGISTERS = ON; + REMOVE_REDUNDANT_LOGIC_CELLS = OFF; + ALLOW_POWER_UP_DONT_CARE = ON; + PCI_IO = OFF; + NOT_GATE_PUSH_BACK = ON; + SLOW_SLEW_RATE = OFF; + DSP_BLOCK_BALANCING = AUTO; + STATE_MACHINE_PROCESSING = AUTO; +} +DEFAULT_HARDCOPY_SETTINGS +{ + HARDCOPY_EXTERNAL_CLOCK_JITTER = "0.0 NS"; +} +DEFAULT_TIMING_REQUIREMENTS +{ + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + RUN_ALL_TIMING_ANALYSES = ON; + IGNORE_CLOCK_SETTINGS = OFF; + DEFAULT_HOLD_MULTICYCLE = "SAME AS MULTICYCLE"; + CUT_OFF_IO_PIN_FEEDBACK = ON; + CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; + CUT_OFF_READ_DURING_WRITE_PATHS = ON; + CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS = ON; + DO_MIN_ANALYSIS = ON; + DO_MIN_TIMING = OFF; + NUMBER_OF_PATHS_TO_REPORT = 200; + NUMBER_OF_DESTINATION_TO_REPORT = 10; + NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT = 10; + MAX_SCC_SIZE = 50; +} +HDL_SETTINGS +{ + VERILOG_INPUT_VERSION = VERILOG_2001; + ENABLE_IP_DEBUG = OFF; + VHDL_INPUT_VERSION = VHDL93; + VHDL_SHOW_LMF_MAPPING_MESSAGES = OFF; +} +PROJECT_INFO(usrp_sounder) +{ + ORIGINAL_QUARTUS_VERSION = 3.0; + PROJECT_CREATION_TIME_DATE = "00:14:04 JULY 13, 2003"; + LAST_QUARTUS_VERSION = 3.0; + SHOW_REGISTRATION_MESSAGE = ON; + USER_LIBRARIES = "h:\\gnuradio\\trunk\\usrp\\fpga\\megacells"; +} +THIRD_PARTY_EDA_TOOLS(usrp_sounder) +{ + EDA_DESIGN_ENTRY_SYNTHESIS_TOOL = ""; + EDA_SIMULATION_TOOL = ""; + EDA_TIMING_ANALYSIS_TOOL = ""; + EDA_BOARD_DESIGN_TOOL = ""; + EDA_FORMAL_VERIFICATION_TOOL = ""; + EDA_RESYNTHESIS_TOOL = ""; +} +EDA_TOOL_SETTINGS(eda_design_synthesis) +{ + EDA_INPUT_GND_NAME = GND; + EDA_INPUT_VCC_NAME = VCC; + EDA_SHOW_LMF_MAPPING_MESSAGES = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_INPUT_DATA_FORMAT = EDIF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_simulation) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_timing_analysis) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + EDA_LAUNCH_CMD_LINE_TOOL = OFF; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_board_design) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_formal_verification) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_palace) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + RESYNTHESIS_RETIMING = FULL; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; +} +CLOCK(clk_120mhz) +{ + FMAX_REQUIREMENT = "120.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(usbclk) +{ + FMAX_REQUIREMENT = "48.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(SCLK) +{ + FMAX_REQUIREMENT = "1.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk0) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk1) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} diff --git a/gr-sounder/src/fpga/top/usrp_sounder.qpf b/gr-sounder/src/fpga/top/usrp_sounder.qpf new file mode 100644 index 00000000..aa75e962 --- /dev/null +++ b/gr-sounder/src/fpga/top/usrp_sounder.qpf @@ -0,0 +1,29 @@ +# Copyright (C) 1991-2004 Altera Corporation +# Any megafunction design, and related netlist (encrypted or decrypted), +# support information, device programming or simulation file, and any other +# associated documentation or information provided by Altera or a partner +# under Altera's Megafunction Partnership Program may be used only +# to program PLD devices (but not masked PLD devices) from Altera. Any +# other use of such megafunction design, netlist, support information, +# device programming or simulation file, or any other related documentation +# or information is prohibited for any other purpose, including, but not +# limited to modification, reverse engineering, de-compiling, or use with +# any other silicon devices, unless such use is explicitly licensed under +# a separate agreement with Altera or a megafunction partner. Title to the +# intellectual property, including patents, copyrights, trademarks, trade +# secrets, or maskworks, embodied in any such megafunction design, netlist, +# support information, device programming or simulation file, or any other +# related documentation or information provided by Altera or a megafunction +# partner, remains with Altera, the megafunction partner, or their respective +# licensors. No other licenses, including any licenses needed under any third +# party's intellectual property, are provided herein. + + + +QUARTUS_VERSION = "7.0" +DATE = "09:00:00 April 17, 2007" + + +# Active Revisions + +PROJECT_REVISION = "usrp_sounder" diff --git a/gr-sounder/src/fpga/top/usrp_sounder.rbf b/gr-sounder/src/fpga/top/usrp_sounder.rbf new file mode 100755 index 0000000000000000000000000000000000000000..e2c9db6c4bc1c63289f9eb4117cec1502f4a47cf GIT binary patch literal 113716 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 Sy3n;;NnRIN_Q8iADf}N>mAiTX literal 0 HcmV?d00001 diff --git a/gr-sounder/src/fpga/top/usrp_sounder.v b/gr-sounder/src/fpga/top/usrp_sounder.v new file mode 100644 index 00000000..a88b2388 --- /dev/null +++ b/gr-sounder/src/fpga/top/usrp_sounder.v @@ -0,0 +1,198 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003,2004 Matt Ettus +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// Top level module for a full setup with DUCs and DDCs + +// Define DEBUG_OWNS_IO_PINS if we're using the daughterboard i/o pins +// for debugging info. NB, This can kill the m'board and/or d'board if you +// have anything except basic d'boards installed. + +// Uncomment the following to include optional circuitry + +module usrp_sounder +(output MYSTERY_SIGNAL, + input master_clk, + input SCLK, + input SDI, + inout SDO, + input SEN_FPGA, + + input FX2_1, + output FX2_2, + output FX2_3, + + input wire [11:0] rx_a_a, + input wire [11:0] rx_b_a, + input wire [11:0] rx_a_b, + input wire [11:0] rx_b_b, + + output wire [13:0] tx_a, + output wire [13:0] tx_b, + + output wire TXSYNC_A, + output wire TXSYNC_B, + + // USB interface + input usbclk, + input wire [2:0] usbctl, + output wire [1:0] usbrdy, + inout [15:0] usbdata, // NB Careful, inout + + // These are the general purpose i/o's that go to the daughterboard slots + inout wire [15:0] io_tx_a, + inout wire [15:0] io_tx_b, + inout wire [15:0] io_rx_a, + inout wire [15:0] io_rx_b + ); + wire [15:0] debugdata,debugctrl; + assign MYSTERY_SIGNAL = 1'b0; + + wire clk64; + + // wire WR = usbctl[0]; + wire RD = usbctl[1]; + wire OE = usbctl[2]; + + wire have_pkt_rdy; + assign usbrdy[0] = 1'b0; // have_space; + assign usbrdy[1] = have_pkt_rdy; + + wire tx_underrun, rx_overrun; + wire clear_status = FX2_1; + assign FX2_2 = rx_overrun; + assign FX2_3 = 1'b0; // tx_underrun; + + wire [15:0] usbdata_out; + + wire [3:0] rx_numchan; + wire enable_tx, enable_rx; + wire tx_dsp_reset, rx_dsp_reset, tx_bus_reset, rx_bus_reset; + + // Tri-state bus macro + bustri bustri( .data(usbdata_out),.enabledt(OE),.tridata(usbdata) ); + + assign clk64 = master_clk; + + // TX + wire tx_sample_strobe; + wire tx_empty; + + wire serial_strobe; + wire [6:0] serial_addr; + wire [31:0] serial_data; + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Transmit Side + + wire [13:0] tx_i, tx_q; + wire [13:0] tx_dac; + + dac_interface dac(.clk_i(clk64),.rst_i(tx_dsp_reset),.ena_i(enable_tx), + .strobe_i(tx_sample_strobe),.tx_i_i(tx_i),.tx_q_i(tx_q), + .tx_data_o(tx_dac),.tx_sync_o(TXSYNC_A)); + + assign tx_a = tx_dac; + + // Wedge DAC #2 at zero + assign TXSYNC_B = 1'b0; + assign tx_b = 14'b0; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Receive Side + wire rx_sample_strobe, rx_strobe; + wire [15:0] rx_adc0_i, rx_adc0_q; + wire [15:0] rx_buf_i, rx_buf_q; + + adc_interface adc_interface(.clock(clk64),.reset(rx_dsp_reset),.enable(enable_rx), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .rx_a_a(rx_a_a),.rx_b_a(rx_b_a),.rx_a_b(),.rx_b_b(), + .rssi_0(),.rssi_1(),.rssi_2(),.rssi_3(), + .ddc0_in_i(rx_adc0_i),.ddc0_in_q(rx_adc0_q), + .ddc1_in_i(),.ddc1_in_q(), + .ddc2_in_i(),.ddc2_in_q(), + .ddc3_in_i(),.ddc3_in_q(),.rx_numchan(rx_numchan) ); + + rx_buffer rx_buffer + ( .usbclk(usbclk),.bus_reset(rx_bus_reset),.reset(rx_dsp_reset), + .reset_regs(rx_dsp_reset), + .usbdata(usbdata_out),.RD(RD),.have_pkt_rdy(have_pkt_rdy),.rx_overrun(rx_overrun), + .channels(rx_numchan), + .ch_0(rx_buf_i),.ch_1(rx_buf_q), + .ch_2(),.ch_3(), + .ch_4(),.ch_5(), + .ch_6(),.ch_7(), + .rxclk(clk64),.rxstrobe(rx_strobe), + .clear_status(clear_status), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .debugbus() ); + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Top level application + + sounder sounder + ( .clk_i(clk64),.saddr_i(serial_addr),.sdata_i(serial_data),.s_strobe_i(serial_strobe), + .tx_strobe_o(tx_sample_strobe),.tx_dac_i_o(tx_i),.tx_dac_q_o(tx_q), + .rx_adc_i_i(rx_adc0_i),.rx_adc_q_i(rx_adc0_q), + .rx_strobe_o(rx_strobe),.rx_imp_i_o(rx_buf_i),.rx_imp_q_o(rx_buf_q) + ); + + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Control Functions + + wire [31:0] capabilities; + assign capabilities[7] = 0; // `TX_CAP_HB; + assign capabilities[6:4] = 2; // `TX_CAP_NCHAN; + assign capabilities[3] = 0; // `RX_CAP_HB; + assign capabilities[2:0] = 2; // `RX_CAP_NCHAN; + + serial_io serial_io + ( .master_clk(clk64),.serial_clock(SCLK),.serial_data_in(SDI), + .enable(SEN_FPGA),.reset(1'b0),.serial_data_out(SDO), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .readback_0({io_rx_a,io_tx_a}),.readback_1({io_rx_b,io_tx_b}),.readback_2(capabilities),.readback_3(32'hf0f0931a), + .readback_4(),.readback_5(),.readback_6(),.readback_7() + ); + + wire [15:0] reg_0,reg_1,reg_2,reg_3; + master_control master_control + ( .master_clk(clk64),.usbclk(usbclk), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .tx_bus_reset(tx_bus_reset),.rx_bus_reset(rx_bus_reset), + .tx_dsp_reset(tx_dsp_reset),.rx_dsp_reset(rx_dsp_reset), + .enable_tx(enable_tx),.enable_rx(enable_rx), + .interp_rate(),.decim_rate(), + .tx_sample_strobe(),.strobe_interp(), + .rx_sample_strobe(rx_sample_strobe),.strobe_decim(), + .tx_empty(tx_empty), + .debug_0(),.debug_1(), + .debug_2(),.debug_3(), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3) ); + + io_pins io_pins + (.io_0(io_tx_a),.io_1(io_rx_a),.io_2(io_tx_b),.io_3(io_rx_b), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3), + .clock(clk64),.rx_reset(rx_dsp_reset),.tx_reset(tx_dsp_reset), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe)); + +endmodule // usrp_sounder diff --git a/gr-sounder/src/lib/Makefile.am b/gr-sounder/src/lib/Makefile.am new file mode 100644 index 00000000..4f35e3ae --- /dev/null +++ b/gr-sounder/src/lib/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2007 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common diff --git a/gr-sounder/src/lib/Makefile.in b/gr-sounder/src/lib/Makefile.in new file mode 100644 index 00000000..236a0344 --- /dev/null +++ b/gr-sounder/src/lib/Makefile.in @@ -0,0 +1,872 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-sounder/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/python/Makefile.am b/gr-sounder/src/python/Makefile.am new file mode 100644 index 00000000..450c034b --- /dev/null +++ b/gr-sounder/src/python/Makefile.am @@ -0,0 +1,39 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +# Install this stuff so that it ends up as the gnuradio.sounder module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio + +sounder_pythondir = $(grpythondir) + +EXTRA_DIST = \ + sounder_loopback.sh \ + qa_nothing.py \ + run_tests.in + +dist_bin_SCRIPTS = \ + usrp_sounder.py + +sounder_python_PYTHON = \ + sounder.py diff --git a/gr-sounder/src/python/Makefile.in b/gr-sounder/src/python/Makefile.in new file mode 100644 index 00000000..b2fc80bc --- /dev/null +++ b/gr-sounder/src/python/Makefile.in @@ -0,0 +1,956 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_bin_SCRIPTS) $(sounder_python_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/run_tests.in $(top_srcdir)/Makefile.common +subdir = gr-sounder/src/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests +am__installdirs = "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(sounder_pythondir)" +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +sounder_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# Install this stuff so that it ends up as the gnuradio.sounder module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +sounder_pythondir = $(grpythondir) +EXTRA_DIST = \ + sounder_loopback.sh \ + qa_nothing.py \ + run_tests.in + +dist_bin_SCRIPTS = \ + usrp_sounder.py + +sounder_python_PYTHON = \ + sounder.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-sounder/src/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-sounder/src/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-sounder_pythonPYTHON: $(sounder_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(sounder_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(sounder_pythondir)" + @list='$(sounder_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(sounder_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(sounder_pythondir)/$$f'"; \ + $(sounder_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(sounder_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(sounder_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(sounder_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-sounder_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(sounder_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(sounder_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(sounder_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(sounder_pythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sounder_pythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-sounder_pythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS uninstall-sounder_pythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_binSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am \ + install-sounder_pythonPYTHON install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_binSCRIPTS uninstall-sounder_pythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-sounder/src/python/qa_nothing.py b/gr-sounder/src/python/qa_nothing.py new file mode 100644 index 00000000..e69de29b diff --git a/gr-sounder/src/python/run_tests.in b/gr-sounder/src/python/run_tests.in new file mode 100644 index 00000000..b8f7830c --- /dev/null +++ b/gr-sounder/src/python/run_tests.in @@ -0,0 +1,10 @@ +#!/bin/sh + +# 1st parameter is absolute path to component source directory +# 2nd parameter is absolute path to component build directory +# 3rd parameter is path to Python QA directory + +@top_builddir@/run_tests.sh \ + @abs_top_srcdir@/gr-sounder \ + @abs_top_builddir@/gr-sounder \ + @srcdir@ diff --git a/gr-sounder/src/python/sounder.py b/gr-sounder/src/python/sounder.py new file mode 100644 index 00000000..85c03b0e --- /dev/null +++ b/gr-sounder/src/python/sounder.py @@ -0,0 +1,271 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr, usrp +from gnuradio import eng_notation + +n2s = eng_notation.num_to_str + +FR_MODE = usrp.FR_USER_0 +bmFR_MODE_RESET = 1 << 0 # bit 0: active high reset +bmFR_MODE_TX = 1 << 1 # bit 1: enable transmitter +bmFR_MODE_RX = 1 << 2 # bit 2: enable receiver +bmFR_MODE_LP = 1 << 3 # bit 3: enable digital loopback + +FR_DEGREE = usrp.FR_USER_1 +FR_AMPL = usrp.FR_USER_2 + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + If there's a daughterboard on A, select A. + If there's a daughterboard on B, select B. + Otherwise, select A. + """ + if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + return (0, 0) + if u.db[1][0].dbid() >= 0: + return (1, 0) + return (0, 0) + +class sounder_tx: + def __init__(self, loopback=False,ampl=4096,verbose=False,debug=False): + self._loopback=loopback + self._amplitude = ampl + self._verbose = verbose + self._debug = debug + self._u = usrp.sink_s(fpga_filename='usrp_sounder.rbf') + if not self._loopback: + self._subdev_spec = usrp.pick_tx_subdevice(self._u) + self._subdev = usrp.selected_subdev(self._u, self._subdev_spec) + if self._verbose: + print "Using", self._subdev.name(), "for sounder transmitter." + self.set_amplitude(ampl) + if not self._loopback: + self._subdev.set_lo_offset(0.0) + self._u.start() + if not self._loopback: + self._subdev.set_enable(True) + + def tune(self, frequency): + if self._verbose: + print "Setting transmitter frequency to", n2s(frequency) + result = self._u.tune(0, self._subdev, frequency) + if result == False: + raise RuntimeError("Failed to set transmitter frequency.") + + def set_amplitude(self, ampl): + self._amplitude = ampl + if self._debug: + print "Writing amplitude register with:", hex(self._mode) + self._u._write_fpga_reg(FR_AMPL, self._amplitude) + +class sounder_rx: + def __init__(self,subdev_spec=None,gain=None,length=1,alpha=1.0,msgq=None,loopback=False,verbose=False,debug=False): + self._subdev_spec = subdev_spec + self._gain = gain + self._length = length + self._alpha = alpha + self._msgq = msgq + self._loopback = loopback + self._verbose = verbose + self._debug = debug + + self._tb = gr.top_block() + self._u = usrp.source_c(fpga_filename='usrp_sounder.rbf') + if not self._loopback: + if self._subdev_spec == None: + self._subdev_spec = pick_subdevice(self._u) + self._u.set_mux(usrp.determine_rx_mux_value(self._u, self._subdev_spec)) + self._subdev = usrp.selected_subdev(self._u, self._subdev_spec) + if self._verbose: + print "Using", self._subdev.name(), "for sounder receiver." + + self.set_gain(self._gain) + self._vblen = gr.sizeof_gr_complex*self._length + if self._debug: + print "Generating impulse vectors of length", self._length, "byte length", self._vblen + + self._s2v = gr.stream_to_vector(gr.sizeof_gr_complex, self._length) + if self._verbose: + print "Using smoothing alpha of", self._alpha + self._lpf = gr.single_pole_iir_filter_cc(self._alpha, self._length) + self._sink = gr.message_sink(self._vblen, self._msgq, True) + self._tb.connect(self._u, self._s2v, self._lpf, self._sink) + + def tune(self, frequency): + if self._verbose: + print "Setting receiver frequency to", n2s(frequency) + result = self._u.tune(0, self._subdev, frequency) + if result == False: + raise RuntimeError("Failed to set receiver frequency.") + + def set_gain(self, gain): + self._gain = gain + if self._loopback: + return + + if self._gain is None: + # if no gain was specified, use the mid-point in dB + g = self._subdev.gain_range() + self._gain = float(g[0]+g[1])/2 + if self._verbose: + print "Setting receiver gain to", gain + self._subdev.set_gain(self._gain) + + def start(self): + if self._debug: + print "Starting receiver flow graph." + self._tb.start() + + def wait(self): + if self._debug: + print "Waiting for threads..." + self._tb.wait() + + def stop(self): + if self._debug: + print "Stopping receiver flow graph." + self._tb.stop() + self.wait() + if self._debug: + print "Receiver flow graph stopped." + + +class sounder: + def __init__(self,transmit=False,receive=False,loopback=False,rx_subdev_spec=None,ampl=0x1FFF, + frequency=0.0,rx_gain=None,degree=12,length=1,alpha=1.0,msgq=None,verbose=False,debug=False): + self._transmit = transmit + self._receive = receive + self._loopback = loopback + self._rx_subdev_spec = rx_subdev_spec + self._frequency = frequency + self._amplitude = ampl + self._rx_gain = rx_gain + self._degree = degree + self._length = length + self._alpha = alpha + self._msgq = msgq + self._verbose = verbose + self._debug = debug + self._mode = 0 + self._u = None + self._trans = None + self._rcvr = None + self._transmitting = False + self._receiving = False + + if self._transmit: + self._trans = sounder_tx(loopback=self._loopback,ampl=self._amplitude, + verbose=self._verbose) + self._u = self._trans._u + + if self._receive: + self._rcvr = sounder_rx(subdev_spec=self._rx_subdev_spec,length=self._length, + gain=self._rx_gain,alpha=self._alpha,msgq=self._msgq, + loopback=self._loopback,verbose=self._verbose, + debug=self._debug) + self._u = self._rcvr._u # either receiver or transmitter object will do + + self.set_reset(True) + if self._loopback == False: + self.tune(self._frequency) + self.set_degree(self._degree) + self.set_loopback(self._loopback) + self.set_reset(False) + + def tune(self, frequency): + self._frequency = frequency + if self._rcvr: + self._rcvr.tune(frequency) + if self._trans: + self._trans.tune(frequency) + + def set_degree(self, degree): + if self._verbose: + print "Setting PN code degree to", degree + self._u._write_fpga_reg(FR_DEGREE, degree); + + def _write_mode(self): + if self._debug: + print "Writing mode register with:", hex(self._mode) + self._u._write_fpga_reg(FR_MODE, self._mode) + + def enable_tx(self, value): + if value: + if self._verbose: + print "Enabling transmitter." + self._mode |= bmFR_MODE_TX + self._transmitting = True + else: + if self._verbose: + print "Disabling transmitter." + self._mode &= ~bmFR_MODE_TX + self._write_mode() + + def enable_rx(self, value): + if value: + self._mode |= bmFR_MODE_RX + self._write_mode() + self._rcvr.start() + self._receiving = True + else: + self._rcvr.stop() + self._mode &= ~bmFR_MODE_RX + self._write_mode() + self._receiving = False + + def set_loopback(self, value): + if value: + if self._verbose: + print "Enabling digital loopback." + self._mode |= bmFR_MODE_LP + else: + if self._verbose: + print "Disabling digital loopback." + self._mode &= ~bmFR_MODE_LP + self._write_mode() + + def set_reset(self, value): + if value: + if self._debug: + print "Asserting reset." + self._mode |= bmFR_MODE_RESET + else: + if self._debug: + print "De-asserting reset." + self._mode &= ~bmFR_MODE_RESET + self._write_mode() + + def start(self): + if self._transmit: + self.enable_tx(True) + if self._receive: + self.enable_rx(True) + + def __del__(self): + if self._transmitting: + self.enable_tx(False) + + if self._receiving: + self.enable_rx(False) + diff --git a/gr-sounder/src/python/sounder_loopback.sh b/gr-sounder/src/python/sounder_loopback.sh new file mode 100755 index 00000000..a97a8fdc --- /dev/null +++ b/gr-sounder/src/python/sounder_loopback.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Note this runs the installed script, not the one in the tree +usrp_sounder.py -r -l -t -d12 -v -F loopback.dat -D diff --git a/gr-sounder/src/python/usrp_sounder.py b/gr-sounder/src/python/usrp_sounder.py new file mode 100755 index 00000000..c183ee85 --- /dev/null +++ b/gr-sounder/src/python/usrp_sounder.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# +# Copyright 2007 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 import gr +from gnuradio.sounder import sounder +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import numpy +import sys + +n2s = eng_notation.num_to_str + +def main(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Rx side A or B") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-f", "--frequency", type="eng_float", default=0.0, + help="set frequency to FREQ in Hz, default is %default", metavar="FREQ") + parser.add_option("-d", "--degree", type="int", default=12, + help="set sounding sequence degree (2-12), default is %default,") + parser.add_option("-a", "--amplitude", type="int", default=4096, + help="set waveform amplitude, default is %default,") + parser.add_option("-t", "--transmit", action="store_true", default=False, + help="enable sounding transmitter") + parser.add_option("-r", "--receive", action="store_true", default=False, + help="enable sounding receiver") + parser.add_option("-l", "--loopback", action="store_true", default=False, + help="enable digital loopback, default is disabled") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="enable verbose output, default is disabled") + parser.add_option("-D", "--debug", action="store_true", default=False, + help="enable debugging output, default is disabled") + parser.add_option("-F", "--filename", default=None, + help="log received impulse responses to file") + parser.add_option("", "--alpha", type="eng_float", default=1.0, + help="smoothing factor (0.0-1.0), default is %default (none)") + + (options, args) = parser.parse_args() + + if len(args) != 0 or not (options.transmit | options.receive): + parser.print_help() + sys.exit(1) + + if options.receive and (options.filename == None): + print "Must supply filename when receiving." + sys.exit(1) + + if options.degree > 12 or options.degree < 2: + print "PN code degree must be between 2 and 12" + sys.exit(1) + + length = int(2**options.degree-1) + if options.verbose: + print "Using PN code degree of", options.degree, "length", length + if options.loopback == False: + print "Sounding frequency range is", n2s(options.frequency-16e6), "to", n2s(options.frequency+16e6) + if options.filename != None: + print "Logging impulse records to file: ", options.filename + + msgq = gr.msg_queue() + s = sounder(transmit=options.transmit,receive=options.receive, + loopback=options.loopback,rx_subdev_spec=options.rx_subdev_spec, + frequency=options.frequency,rx_gain=options.gain, + degree=options.degree,length=length,alpha=options.alpha, + msgq=msgq,verbose=options.verbose,ampl=options.amplitude, + debug=options.debug) + s.start() + + if options.receive: + f = open(options.filename, "wb") + print "Enter CTRL-C to stop." + try: + while (1): + msg = msgq.delete_head() + if msg.type() == 1: + break + rec = msg.to_string()[:length*gr.sizeof_gr_complex] + if options.debug: + print "Received impulse vector of length", len(rec) + + f.write(rec) + + except KeyboardInterrupt: + pass + else: + if options.transmit: + raw_input("Press return to exit.") + +if __name__ == "__main__": + main() diff --git a/gr-trellis/AUTHORS b/gr-trellis/AUTHORS deleted file mode 100644 index ee4560a5..00000000 --- a/gr-trellis/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Eric Blossom diff --git a/gr-trellis/ChangeLog b/gr-trellis/ChangeLog deleted file mode 100644 index 1587bc44..00000000 --- a/gr-trellis/ChangeLog +++ /dev/null @@ -1,24 +0,0 @@ -2006-08-03 Achilleas Anastasopoulos - - * first cut - -# -# Copyright 2005 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. -# diff --git a/gr-trellis/Makefile.in b/gr-trellis/Makefile.in index 1385917c..0232e526 100644 --- a/gr-trellis/Makefile.in +++ b/gr-trellis/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog + $(top_srcdir)/Makefile.common subdir = gr-trellis ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +572,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src doc all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-trellis/doc/Makefile.am b/gr-trellis/doc/Makefile.am index e1e3669d..559d271d 100644 --- a/gr-trellis/doc/Makefile.am +++ b/gr-trellis/doc/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,8 +21,6 @@ include $(top_srcdir)/Makefile.common -docdir=$(prefix)/share/doc/@PACKAGE@-@VERSION@ - HTML_FILES = if HAS_XMLTO @@ -42,27 +40,19 @@ EXTRA_DIST = \ BUILT_XML_FILES = +htmldocdir = $(gr_docdir)/html +htmldoc_DATA = $(HTML_FILES) + # ---------------------------------------------------------------- gr-trellis.html : gr-trellis.xml xmlto html-nochunks $(top_srcdir)/gr-trellis/doc/gr-trellis.xml -%.xml : % make_numbered_listing.py - ./make_numbered_listing.py $< - -install-data-local: - mkdir -p $(DESTDIR)$(docdir)/html - @for i in $(HTML_FILES); do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html; \ - done +test_tcm.py.xml : test_tcm.py make_numbered_listing.py + $(srcdir)/make_numbered_listing.py $< -uninstall-local: - @for i in $(HTML_FILES); do \ - echo "$(RM) $(DESTDIR)$(docdir)/$$i;"; \ - $(RM) $(DESTDIR)$(docdir)/$$i; \ - done - $(RM) -fr $(DESTDIR)$(docdir)/html +test_viterbi_equalization1.py.xml : test_viterbi_equalization1.py make_numbered_listing.py + $(srcdir)/make_numbered_listing.py $< clean-local: $(RM) -fr $(HTML_FILES) *~ diff --git a/gr-trellis/doc/Makefile.in b/gr-trellis/doc/Makefile.in index bc3e8b59..8ffe47ee 100644 --- a/gr-trellis/doc/Makefile.in +++ b/gr-trellis/doc/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,12 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -86,25 +83,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ subdir = gr-trellis/doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +120,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -136,14 +163,22 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(htmldocdir)" +htmldocDATA_INSTALL = $(INSTALL_DATA) +DATA = $(htmldoc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -151,9 +186,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -161,6 +203,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -173,73 +217,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -249,49 +286,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -299,15 +376,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ -docdir = $(prefix)/share/doc/@PACKAGE@-@VERSION@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -317,16 +537,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -335,63 +573,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT HTML_FILES = $(am__append_1) EXTRA_DIST = \ gr-trellis.xml \ @@ -402,6 +709,8 @@ EXTRA_DIST = \ test_viterbi_equalization1.py.xml BUILT_XML_FILES = +htmldocdir = $(gr_docdir)/html +htmldoc_DATA = $(HTML_FILES) all: all-am .SUFFIXES: @@ -409,8 +718,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -440,10 +749,23 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs +install-htmldocDATA: $(htmldoc_DATA) + @$(NORMAL_INSTALL) + test -z "$(htmldocdir)" || $(MKDIR_P) "$(DESTDIR)$(htmldocdir)" + @list='$(htmldoc_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(htmldocDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(htmldocdir)/$$f'"; \ + $(htmldocDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(htmldocdir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-htmldocDATA: + @$(NORMAL_UNINSTALL) + @list='$(htmldoc_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(htmldocdir)/$$f'"; \ + rm -f "$(DESTDIR)$(htmldocdir)/$$f"; \ + done tags: TAGS TAGS: @@ -452,23 +774,21 @@ CTAGS: distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -479,10 +799,16 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am -all-am: Makefile +all-am: Makefile $(DATA) installdirs: + for dir in "$(DESTDIR)$(htmldocdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-am install-exec: install-exec-am install-data: install-data-am @@ -498,6 +824,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -513,7 +840,7 @@ clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -525,14 +852,22 @@ info: info-am info-am: -install-data-am: install-data-local +install-data-am: install-htmldocDATA + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -551,19 +886,33 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am uninstall-local +uninstall-am: uninstall-htmldocDATA -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - clean-local distclean distclean-generic distclean-libtool \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-data-local \ - install-exec install-exec-am install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am uninstall uninstall-am uninstall-info-am \ - uninstall-local +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + clean-local dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-htmldocDATA install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-htmldocDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; all: $(HTML_FILES) @@ -572,22 +921,11 @@ all: $(HTML_FILES) gr-trellis.html : gr-trellis.xml xmlto html-nochunks $(top_srcdir)/gr-trellis/doc/gr-trellis.xml -%.xml : % make_numbered_listing.py - ./make_numbered_listing.py $< +test_tcm.py.xml : test_tcm.py make_numbered_listing.py + $(srcdir)/make_numbered_listing.py $< -install-data-local: - mkdir -p $(DESTDIR)$(docdir)/html - @for i in $(HTML_FILES); do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html; \ - done - -uninstall-local: - @for i in $(HTML_FILES); do \ - echo "$(RM) $(DESTDIR)$(docdir)/$$i;"; \ - $(RM) $(DESTDIR)$(docdir)/$$i; \ - done - $(RM) -fr $(DESTDIR)$(docdir)/html +test_viterbi_equalization1.py.xml : test_viterbi_equalization1.py make_numbered_listing.py + $(srcdir)/make_numbered_listing.py $< clean-local: $(RM) -fr $(HTML_FILES) *~ diff --git a/gr-trellis/doc/test_tcm.py b/gr-trellis/doc/test_tcm.py index e2429b80..0472535c 100644 --- a/gr-trellis/doc/test_tcm.py +++ b/gr-trellis/doc/test_tcm.py @@ -10,7 +10,7 @@ import random import fsm_utils def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - fg = gr.flow_graph () + tb = gr.top_block () # TX src = gr.lfsr_32k_source_s() @@ -29,13 +29,13 @@ def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts dst = gr.check_lfsr_32k_s(); - fg.connect (src,src_head,s2fsmi,enc,mod) - fg.connect (mod,(add,0)) - fg.connect (noise,(add,1)) - fg.connect (add,metrics) - fg.connect (metrics,va,fsmi2s,dst) + tb.connect (src,src_head,s2fsmi,enc,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics) + tb.connect (metrics,va,fsmi2s,dst) - fg.run() + tb.run() # A bit of cheating: run the program once and print the # final encoder state. diff --git a/gr-trellis/doc/test_tcm.py.xml b/gr-trellis/doc/test_tcm.py.xml index c8d11d30..b957f682 100644 --- a/gr-trellis/doc/test_tcm.py.xml +++ b/gr-trellis/doc/test_tcm.py.xml @@ -12,7 +12,7 @@ 10 import fsm_utils 11 12 def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - 13 fg = gr.flow_graph () + 13 tb = gr.top_block () 14 15 # TX 16 src = gr.lfsr_32k_source_s() @@ -31,13 +31,13 @@ 29 fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts 30 dst = gr.check_lfsr_32k_s(); 31 - 32 fg.connect (src,src_head,s2fsmi,enc,mod) - 33 fg.connect (mod,(add,0)) - 34 fg.connect (noise,(add,1)) - 35 fg.connect (add,metrics) - 36 fg.connect (metrics,va,fsmi2s,dst) + 32 tb.connect (src,src_head,s2fsmi,enc,mod) + 33 tb.connect (mod,(add,0)) + 34 tb.connect (noise,(add,1)) + 35 tb.connect (add,metrics) + 36 tb.connect (metrics,va,fsmi2s,dst) 37 - 38 fg.run() + 38 tb.run() 39 40 # A bit of cheating: run the program once and print the 41 # final encoder state. diff --git a/gr-trellis/doc/test_viterbi_equalization1.py b/gr-trellis/doc/test_viterbi_equalization1.py index 57d617aa..93b852e8 100755 --- a/gr-trellis/doc/test_viterbi_equalization1.py +++ b/gr-trellis/doc/test_viterbi_equalization1.py @@ -10,7 +10,7 @@ import random import fsm_utils def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed): - fg = gr.flow_graph () + tb = gr.top_block () L = len(channel) # TX @@ -37,14 +37,14 @@ def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constel va = trellis.viterbi_combined_s(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_s instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application... dst = gr.vector_sink_s() - fg.connect (src,mod) - fg.connect (mod,isi,(add,0)) - fg.connect (noise,(add,1)) - #fg.connect (add,metrics) - #fg.connect (metrics,va,dst) - fg.connect (add,skip,va,dst) + tb.connect (src,mod) + tb.connect (mod,isi,(add,0)) + tb.connect (noise,(add,1)) + #tb.connect (add,metrics) + #tb.connect (metrics,va,dst) + tb.connect (add,skip,va,dst) - fg.run() + tb.run() data = dst.data() ntotal = len(data) - L diff --git a/gr-trellis/doc/test_viterbi_equalization1.py.xml b/gr-trellis/doc/test_viterbi_equalization1.py.xml index 4ea83be9..a97d04d6 100644 --- a/gr-trellis/doc/test_viterbi_equalization1.py.xml +++ b/gr-trellis/doc/test_viterbi_equalization1.py.xml @@ -12,7 +12,7 @@ 10 import fsm_utils 11 12 def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed): - 13 fg = gr.flow_graph () + 13 tb = gr.top_block () 14 L = len(channel) 15 16 # TX @@ -39,14 +39,14 @@ 37 va = trellis.viterbi_combined_s(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_s instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application... 38 dst = gr.vector_sink_s() 39 - 40 fg.connect (src,mod) - 41 fg.connect (mod,isi,(add,0)) - 42 fg.connect (noise,(add,1)) - 43 #fg.connect (add,metrics) - 44 #fg.connect (metrics,va,dst) - 45 fg.connect (add,skip,va,dst) + 40 tb.connect (src,mod) + 41 tb.connect (mod,isi,(add,0)) + 42 tb.connect (noise,(add,1)) + 43 #tb.connect (add,metrics) + 44 #tb.connect (metrics,va,dst) + 45 tb.connect (add,skip,va,dst) 46 - 47 fg.run() + 47 tb.run() 48 49 data = dst.data() 50 ntotal = len(data) - L diff --git a/gr-trellis/src/Makefile.am b/gr-trellis/src/Makefile.am index e3f0399e..41f525b0 100644 --- a/gr-trellis/src/Makefile.am +++ b/gr-trellis/src/Makefile.am @@ -19,4 +19,4 @@ # Boston, MA 02110-1301, USA. # -SUBDIRS = lib python +SUBDIRS = lib python examples diff --git a/gr-trellis/src/Makefile.in b/gr-trellis/src/Makefile.in index c0a8a312..85a04444 100644 --- a/gr-trellis/src/Makefile.in +++ b/gr-trellis/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = gr-trellis/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,13 +549,36 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -SUBDIRS = lib python +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = lib python examples all: all-recursive .SUFFIXES: @@ -332,8 +586,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -364,10 +618,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -399,8 +649,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -444,8 +693,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -470,8 +719,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -481,13 +730,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -501,22 +749,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -530,7 +777,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -538,6 +785,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -577,8 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -592,12 +840,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -616,22 +872,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/gr-trellis/src/examples/Makefile.am b/gr-trellis/src/examples/Makefile.am new file mode 100644 index 00000000..8fb727ac --- /dev/null +++ b/gr-trellis/src/examples/Makefile.am @@ -0,0 +1,45 @@ +# +# Copyright 2004,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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = fsm_files + +ourdatadir = $(exampledir)/trellis + +dist_ourdata_DATA = \ + README + +dist_ourdata_SCRIPTS = \ + fsm_utils.py \ + test_tcm.py \ + test_tcm1.py \ + test_tcm2.py \ + test_tcm_parallel.py \ + test_tcm_combined.py \ + test_sccc_hard.py \ + test_sccc_soft.py \ + test_sccc_turbo.py \ + test_viterbi_equalization1.py \ + test_viterbi_equalization.py \ + test_turbo_equalization.py \ + test_turbo_equalization1.py \ + test_turbo_equalization2.py diff --git a/gr-trellis/src/examples/Makefile.in b/gr-trellis/src/examples/Makefile.in new file mode 100644 index 00000000..c7c277fb --- /dev/null +++ b/gr-trellis/src/examples/Makefile.in @@ -0,0 +1,1105 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(dist_ourdata_DATA) $(dist_ourdata_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = gr-trellis/src/examples +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)" +dist_ourdataSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_ourdata_SCRIPTS) +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = fsm_files +ourdatadir = $(exampledir)/trellis +dist_ourdata_DATA = \ + README + +dist_ourdata_SCRIPTS = \ + fsm_utils.py \ + test_tcm.py \ + test_tcm1.py \ + test_tcm2.py \ + test_tcm_parallel.py \ + test_tcm_combined.py \ + test_sccc_hard.py \ + test_sccc_soft.py \ + test_sccc_turbo.py \ + test_viterbi_equalization1.py \ + test_viterbi_equalization.py \ + test_turbo_equalization.py \ + test_turbo_equalization1.py \ + test_turbo_equalization2.py + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-trellis/src/examples/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-trellis/src/examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_ourdataSCRIPTS: $(dist_ourdata_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_ourdataSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_ourdataSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(ourdatadir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-dist_ourdataDATA install-dist_ourdataSCRIPTS + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_ourdataDATA \ + install-dist_ourdataSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-dist_ourdataDATA uninstall-dist_ourdataSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/channel-coding/README b/gr-trellis/src/examples/README similarity index 100% rename from gnuradio-examples/python/channel-coding/README rename to gr-trellis/src/examples/README diff --git a/gr-trellis/src/examples/fsm_files/Makefile.am b/gr-trellis/src/examples/fsm_files/Makefile.am new file mode 100644 index 00000000..c4cbb2e9 --- /dev/null +++ b/gr-trellis/src/examples/fsm_files/Makefile.am @@ -0,0 +1,40 @@ +# +# Copyright 2004,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. +# + +include $(top_srcdir)/Makefile.common + +ourdatadir = $(exampledir)/trellis/fsm_files + +dist_ourdata_DATA = \ + awgn1o2_128.fsm \ + awgn1o2_16.fsm \ + awgn1o2_4.fsm \ + awgn1o2_8.fsm \ + awgn2o3_16.fsm \ + awgn2o3_4.fsm \ + awgn2o3_4_msb.fsm \ + awgn2o3_4_msbG.fsm \ + awgn2o3_8.fsm \ + awgn2o4_4.fsm \ + disconnected.fsm \ + rep3.fsm \ + rep5.fsm \ + simple.fsm diff --git a/gr-trellis/src/examples/fsm_files/Makefile.in b/gr-trellis/src/examples/fsm_files/Makefile.in new file mode 100644 index 00000000..cd459b6f --- /dev/null +++ b/gr-trellis/src/examples/fsm_files/Makefile.in @@ -0,0 +1,920 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gr-trellis/src/examples/fsm_files +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +ourdatadir = $(exampledir)/trellis/fsm_files +dist_ourdata_DATA = \ + awgn1o2_128.fsm \ + awgn1o2_16.fsm \ + awgn1o2_4.fsm \ + awgn1o2_8.fsm \ + awgn2o3_16.fsm \ + awgn2o3_4.fsm \ + awgn2o3_4_msb.fsm \ + awgn2o3_4_msbG.fsm \ + awgn2o3_8.fsm \ + awgn2o4_4.fsm \ + disconnected.fsm \ + rep3.fsm \ + rep5.fsm \ + simple.fsm + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-trellis/src/examples/fsm_files/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-trellis/src/examples/fsm_files/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_ourdataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_128.fsm b/gr-trellis/src/examples/fsm_files/awgn1o2_128.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_128.fsm rename to gr-trellis/src/examples/fsm_files/awgn1o2_128.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_16.fsm b/gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_16.fsm rename to gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_4.fsm b/gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_4.fsm rename to gr-trellis/src/examples/fsm_files/awgn1o2_4.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_8.fsm b/gr-trellis/src/examples/fsm_files/awgn1o2_8.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_8.fsm rename to gr-trellis/src/examples/fsm_files/awgn1o2_8.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_16.fsm b/gr-trellis/src/examples/fsm_files/awgn2o3_16.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_16.fsm rename to gr-trellis/src/examples/fsm_files/awgn2o3_16.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4.fsm b/gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4.fsm rename to gr-trellis/src/examples/fsm_files/awgn2o3_4.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm b/gr-trellis/src/examples/fsm_files/awgn2o3_4_msb.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm rename to gr-trellis/src/examples/fsm_files/awgn2o3_4_msb.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm b/gr-trellis/src/examples/fsm_files/awgn2o3_4_msbG.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm rename to gr-trellis/src/examples/fsm_files/awgn2o3_4_msbG.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_8.fsm b/gr-trellis/src/examples/fsm_files/awgn2o3_8.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_8.fsm rename to gr-trellis/src/examples/fsm_files/awgn2o3_8.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/awgn2o4_4.fsm b/gr-trellis/src/examples/fsm_files/awgn2o4_4.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/awgn2o4_4.fsm rename to gr-trellis/src/examples/fsm_files/awgn2o4_4.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm b/gr-trellis/src/examples/fsm_files/disconnected.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm rename to gr-trellis/src/examples/fsm_files/disconnected.fsm diff --git a/gnuradio-examples/python/channel-coding/fsm_files/rep3.fsm b/gr-trellis/src/examples/fsm_files/rep3.fsm similarity index 100% rename from gnuradio-examples/python/channel-coding/fsm_files/rep3.fsm rename to gr-trellis/src/examples/fsm_files/rep3.fsm diff --git a/gr-trellis/src/examples/fsm_files/rep5.fsm b/gr-trellis/src/examples/fsm_files/rep5.fsm new file mode 100644 index 00000000..2aa5d77c --- /dev/null +++ b/gr-trellis/src/examples/fsm_files/rep5.fsm @@ -0,0 +1,7 @@ +2 1 32 + +0 0 + +0 31 + +1/5 repetition code diff --git a/gr-trellis/src/examples/fsm_files/simple.fsm b/gr-trellis/src/examples/fsm_files/simple.fsm new file mode 100644 index 00000000..f27f6b4b --- /dev/null +++ b/gr-trellis/src/examples/fsm_files/simple.fsm @@ -0,0 +1,13 @@ +1 4 1 + +1 +2 +3 +0 + +0 +0 +0 +0 + +essentially this fsm has no inputs and no outputs; it just cycles through all 4 states. diff --git a/gr-trellis/src/examples/fsm_utils.py b/gr-trellis/src/examples/fsm_utils.py new file mode 100755 index 00000000..e3426637 --- /dev/null +++ b/gr-trellis/src/examples/fsm_utils.py @@ -0,0 +1,234 @@ +#!/usr/bin/env python +# +# 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. +# + + +import re +import math +import sys +import operator +import numpy +import scipy.linalg + +from gnuradio import trellis + + + +###################################################################### +# Decimal to any base conversion. +# Convert 'num' to a list of 'l' numbers representing 'num' +# to base 'base' (most significant symbol first). +###################################################################### +def dec2base(num,base,l): + s=range(l) + n=num + for i in range(l): + s[l-i-1]=n%base + n=int(n/base) + if n!=0: + print 'Number ', num, ' requires more than ', l, 'digits.' + return s + + +###################################################################### +# Conversion from any base to decimal. +# Convert a list 's' of symbols to a decimal number +# (most significant symbol first) +###################################################################### +def base2dec(s,base): + num=0 + for i in range(len(s)): + num=num*base+s[i] + return num + + + + +###################################################################### +# Automatically generate the lookup table that maps the FSM outputs +# to channel inputs corresponding to a channel 'channel' and a modulation +# 'mod'. Optional normalization of channel to unit energy. +# This table is used by the 'metrics' block to translate +# channel outputs to metrics for use with the Viterbi algorithm. +# Limitations: currently supports only one-dimensional modulations. +###################################################################### +def make_isi_lookup(mod,channel,normalize): + dim=mod[0] + constellation = mod[1] + + if normalize: + p = 0 + for i in range(len(channel)): + p = p + channel[i]**2 + for i in range(len(channel)): + channel[i] = channel[i]/math.sqrt(p) + + lookup=range(len(constellation)**len(channel)) + for o in range(len(constellation)**len(channel)): + ss=dec2base(o,len(constellation),len(channel)) + ll=0 + for i in range(len(channel)): + ll=ll+constellation[ss[i]]*channel[i] + lookup[o]=ll + return (1,lookup) + + + + + + +###################################################################### +# Automatically generate the signals appropriate for CPM +# decomposition. +# This decomposition is based on the paper by B. Rimoldi +# "A decomposition approach to CPM", IEEE Trans. Info Theory, March 1988 +# See also my own notes at http://www.eecs.umich.edu/~anastas/docs/cpm.pdf +###################################################################### +def make_cpm_signals(K,P,M,L,q,frac): + + Q=numpy.size(q)/L + h=(1.0*K)/P + f0=-h*(M-1)/2 + dt=0.0; # maybe start at t=0.5 + t=(dt+numpy.arange(0,Q))/Q + qq=numpy.zeros(Q) + for m in range(L): + qq=qq + q[m*Q:m*Q+Q] + w=math.pi*h*(M-1)*t-2*math.pi*h*(M-1)*qq+math.pi*h*(L-1)*(M-1) + + X=(M**L)*P + PSI=numpy.empty((X,Q)) + for x in range(X): + xv=dec2base(x/P,M,L) + xv=numpy.append(xv, x%P) + qq1=numpy.zeros(Q) + for m in range(L): + qq1=qq1+xv[m]*q[m*Q:m*Q+Q] + psi=2*math.pi*h*xv[-1]+4*math.pi*h*qq1+w + #print psi + PSI[x]=psi + PSI = numpy.transpose(PSI) + SS=numpy.exp(1j*PSI) # contains all signals as columns + #print SS + + + # Now we need to orthogonalize the signals + F = scipy.linalg.orth(SS) # find an orthonormal basis for SS + #print numpy.dot(numpy.transpose(F.conjugate()),F) # check for orthonormality + S = numpy.dot(numpy.transpose(F.conjugate()),SS) + #print F + #print S + + # We only want to keep those dimensions that contain most + # of the energy of the overall constellation (eg, frac=0.9 ==> 90%) + # evaluate mean energy in each dimension + E=numpy.sum(numpy.absolute(S)**2,axis=1)/Q + E=E/numpy.sum(E) + #print E + Es = -numpy.sort(-E) + Esi = numpy.argsort(-E) + #print Es + #print Esi + Ecum=numpy.cumsum(Es) + #print Ecum + v0=numpy.searchsorted(Ecum,frac) + N = v0+1 + #print v0 + #print Esi[0:v0+1] + Ff=numpy.transpose(numpy.transpose(F)[Esi[0:v0+1]]) + #print Ff + Sf = S[Esi[0:v0+1]] + #print Sf + + + return (f0,SS,S,F,Sf,Ff,N) + #return f0 + + + + +###################################################################### +# A list of common modulations. +# Format: (dimensionality,constellation) +###################################################################### +pam2 = (1,[-1, 1]) +pam4 = (1,[-3, -1, 3, 1]) # includes Gray mapping +pam8 = (1,[-7, -5, -3, -1, 1, 3, 5, 7]) + +psk4=(2,[1, 0, \ + 0, 1, \ + 0, -1,\ + -1, 0]) # includes Gray mapping +psk8=(2,[math.cos(2*math.pi*0/8), math.sin(2*math.pi*0/8), \ + math.cos(2*math.pi*1/8), math.sin(2*math.pi*1/8), \ + math.cos(2*math.pi*2/8), math.sin(2*math.pi*2/8), \ + math.cos(2*math.pi*3/8), math.sin(2*math.pi*3/8), \ + math.cos(2*math.pi*4/8), math.sin(2*math.pi*4/8), \ + math.cos(2*math.pi*5/8), math.sin(2*math.pi*5/8), \ + math.cos(2*math.pi*6/8), math.sin(2*math.pi*6/8), \ + math.cos(2*math.pi*7/8), math.sin(2*math.pi*7/8)]) + +orth2 = (2,[1, 0, \ + 0, 1]) +orth4=(4,[1, 0, 0, 0, \ + 0, 1, 0, 0, \ + 0, 0, 1, 0, \ + 0, 0, 0, 1]) + +###################################################################### +# A list of channels to be tested +###################################################################### + +# C test channel (J. Proakis, Digital Communications, McGraw-Hill Inc., 2001) +c_channel = [0.227, 0.460, 0.688, 0.460, 0.227] + + + + + + + + + + +if __name__ == '__main__': + f1=trellis.fsm('fsm_files/awgn1o2_4.fsm') + #f2=trellis.fsm('fsm_files/awgn2o3_4.fsm') + #print f1.I(), f1.S(), f1.O() + #print f1.NS() + #print f1.OS() + #print f2.I(), f2.S(), f2.O() + #print f2.NS() + #print f2.OS() + ##f1.write_trellis_svg('f1.svg',4) + #f2.write_trellis_svg('f2.svg',4) + #f=fsm_concatenate(f1,f2) + #f=fsm_radix(f1,2) + + #print "----------\n" + #print f.I(), f.S(), f.O() + #print f.NS() + #print f.OS() + #f.write_trellis_svg('f.svg',4) + + q=numpy.arange(0,8)/(2.0*8) + (f0,SS,S,F,Sf,Ff,N) = make_cpm_signals(1,2,2,1,q,0.99) + diff --git a/gr-trellis/src/examples/test_sccc_hard.py b/gr-trellis/src/examples/test_sccc_hard.py new file mode 100755 index 00000000..a7933a18 --- /dev/null +++ b/gr-trellis/src/examples/test_sccc_hard.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): + tb = gr.top_block () + + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality + enc_out = trellis.encoder_ss(fo,0) # initial state = 0 + inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) + enc_in = trellis.encoder_ss(fi,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi + va_in = trellis.viterbi_s(fi,K,0,-1) # Put -1 if the Initial/Final states are not set. + deinter = trellis.permutation(interleaver.K(),interleaver.DEINTER(),1,gr.sizeof_short) + metrics_out = trellis.metrics_s(fo.O(),1,[0,1,2,3],trellis.TRELLIS_HARD_SYMBOL) # data preprocessing to generate metrics for outer Viterbi (hard decisions) + va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s() + + tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics_in) + tb.connect (metrics_in,va_in,deinter,metrics_out,va_out,fsmi2s,dst) + + tb.run() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + return (ntotal,ntotal-nright) + + +def main(args): + nargs = len (args) + if nargs == 4: + fname_out=args[0] + fname_in=args[1] + esn0_db=float(args[2]) # Es/No in dB + rep=int(args[3]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + fo=trellis.fsm(fname_out) # get the outer FSM specification from a file + fi=trellis.fsm(fname_in) # get the innner FSM specification from a file + bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol + if fo.O() != fi.I(): + sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') + sys.exit (1) + K=Kb/bitspersymbol # packet size in trellis steps + interleaver=trellis.interleaver(K,666) # construct a random interleaver + modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != fi.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/examples/test_sccc_soft.py b/gr-trellis/src/examples/test_sccc_soft.py new file mode 100755 index 00000000..d96d36e3 --- /dev/null +++ b/gr-trellis/src/examples/test_sccc_soft.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + + + + +def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): + tb = gr.top_block () + + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality + enc_out = trellis.encoder_ss(fo,0) # initial state = 0 + inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) + enc_in = trellis.encoder_ss(fi,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi + gnd = gr.vector_source_f([0],True); + siso_in = trellis.siso_f(fi,K,0,-1,True,False,trellis.TRELLIS_MIN_SUM) # Put -1 if the Initial/Final states are not set. + deinter = trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) + va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s() + + tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics_in) + tb.connect (gnd,(siso_in,0)) + tb.connect (metrics_in,(siso_in,1)) + tb.connect (siso_in,deinter,va_out,fsmi2s,dst) + + tb.run() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + return (ntotal,ntotal-nright) + + +def main(args): + nargs = len (args) + if nargs == 4: + fname_out=args[0] + fname_in=args[1] + esn0_db=float(args[2]) # Es/No in dB + rep=int(args[3]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + fo=trellis.fsm(fname_out) # get the outer FSM specification from a file + fi=trellis.fsm(fname_in) # get the innner FSM specification from a file + bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol + if fo.O() != fi.I(): + sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') + sys.exit (1) + K=Kb/bitspersymbol # packet size in trellis steps + interleaver=trellis.interleaver(K,666) # construct a random interleaver + modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != fi.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance + + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/examples/test_sccc_turbo.py b/gr-trellis/src/examples/test_sccc_turbo.py new file mode 100755 index 00000000..f3a856de --- /dev/null +++ b/gr-trellis/src/examples/test_sccc_turbo.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + + + +def make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type): + metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi + scale = gr.multiply_const_ff(1.0/N0) + gnd = gr.vector_source_f([0],True); + + inter=[] + deinter=[] + siso_in=[] + siso_out=[] + + # generate all blocks + for it in range(IT): + inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) + siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) + deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) + if it < IT-1: + siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) + else: + siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed + + # connect first stage + tb.connect (gnd,inter[0]) + tb.connect (metrics_in,scale) + tb.connect (scale,(siso_in[0],1)) + + # connect the rest + for it in range(IT): + if it < IT-1: + tb.connect (metrics_in,(siso_in[it+1],1)) + tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) + tb.connect (gnd,(siso_out[it],0)) + tb.connect (siso_out[it],inter[it+1]) + tb.connect (inter[it],(siso_in[it],0)) + else: + tb.connect (siso_in[it],deinter[it],siso_out[it]) + tb.connect (inter[it],(siso_in[it],0)) + + return (metrics_in,siso_out[IT-1]) + + +def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed): + tb = gr.top_block () + + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality + enc_out = trellis.encoder_ss(fo,0) # initial state = 0 + inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) + enc_in = trellis.encoder_ss(fi,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + (head,tail) = make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) + #(head,tail) = make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT) + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s() + + tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,head) + tb.connect (tail,fsmi2s,dst) + + tb.run() + + #print enc_out.ST(), enc_in.ST() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + return (ntotal,ntotal-nright) + + +def main(args): + nargs = len (args) + if nargs == 4: + fname_out=args[0] + fname_in=args[1] + esn0_db=float(args[2]) # Es/No in dB + rep=int(args[3]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + fo=trellis.fsm(fname_out) # get the outer FSM specification from a file + fi=trellis.fsm(fname_in) # get the innner FSM specification from a file + bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol + if fo.O() != fi.I(): + sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') + sys.exit (1) + K=Kb/bitspersymbol # packet size in trellis steps + interleaver=trellis.interleaver(K,666) # construct a random interleaver + modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != fi.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance + IT = 3 # number of turbo iterations + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%10==0): # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/examples/test_tcm.py b/gr-trellis/src/examples/test_tcm.py new file mode 100755 index 00000000..62e0c413 --- /dev/null +++ b/gr-trellis/src/examples/test_tcm.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): + tb = gr.top_block () + + + # TX + #packet = [0]*Kb + #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 + #packet[i] = random.randint(0, 1) # random 0s and 1s + #src = gr.vector_source_s(packet,False) + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + #b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality + enc = trellis.encoder_ss(f,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi + va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + #s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits + #dst = gr.vector_sink_s(); + dst = gr.check_lfsr_32k_s() + + + tb.connect (src,src_head,s2fsmi,enc,mod) + #tb.connect (src,b2s,s2fsmi,enc,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics) + tb.connect (metrics,va,fsmi2s,dst) + #tb.connect (metrics,va,fsmi2s,s2b,dst) + + + tb.run() + + # A bit of cheating: run the program once and print the + # final encoder state.. + # Then put it as the last argument in the viterbi block + #print "final state = " , enc.ST() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + #ntotal = len(packet) + #if len(dst.data()) != ntotal: + #print "Error: not enough data\n" + #nright = 0; + #for i in range(ntotal): + #if packet[i]==dst.data()[i]: + #nright=nright+1 + #else: + #print "Error in ", i + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname=args[0] + esn0_db=float(args[1]) # Es/No in dB + rep=int(args[2]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm.py fsm_fname Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + f=trellis.fsm(fname) # get the FSM specification from a file + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/examples/test_tcm1.py b/gr-trellis/src/examples/test_tcm1.py new file mode 100755 index 00000000..746bd933 --- /dev/null +++ b/gr-trellis/src/examples/test_tcm1.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): + tb = gr.top_block () + + # TX + packet = [0]*Kb + # this for loop is TOO slow!!! + for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 + packet[i] = random.randint(0, 1) # random 0s and 1s + src = gr.vector_source_s(packet,False) + #src = gr.lfsr_32k_source_s() + #src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality + enc = trellis.encoder_ss(f,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + + # RX + metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi + va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits + dst = gr.vector_sink_s(); + #dst = gr.check_lfsr_32k_s(); + + + #tb.connect (src,src_head,s2fsmi,enc,mod) + tb.connect (src,b2s,s2fsmi,enc,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics) + #tb.connect (metrics,va,fsmi2s,dst) + tb.connect (metrics,va,fsmi2s,s2b,dst) + + + tb.run() + + # A bit of cheating: run the program once and print the + # final encoder state.. + # Then put it as the last argument in the viterbi block + #print "final state = " , enc.ST() + + #ntotal = dst.ntotal () + #nright = dst.nright () + #runlength = dst.runlength () + ntotal = len(packet) + if len(dst.data()) != ntotal: + print "Error: not enough data\n" + nright = 0; + # this for loop is TOO slow!!! + for i in range(ntotal): + if packet[i]==dst.data()[i]: + nright=nright+1 + #else: + #print "Error in ", i + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname=args[0] + esn0_db=float(args[1]) # Es/No in dB + rep=int(args[2]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm.py fsm_fname Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + f=trellis.fsm(fname) # get the FSM specification from a file + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # noise variance + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%1==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/examples/test_tcm2.py b/gr-trellis/src/examples/test_tcm2.py new file mode 100755 index 00000000..e527fc5e --- /dev/null +++ b/gr-trellis/src/examples/test_tcm2.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): + tb = gr.top_block () + + + # TX + #packet = [0]*Kb + #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 + #packet[i] = random.randint(0, 1) # random 0s and 1s + #src = gr.vector_source_s(packet,False) + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + #b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality + enc = trellis.encoder_ss(f,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi + va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + #s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits + #dst = gr.vector_sink_s(); + dst = gr.check_lfsr_32k_s() + + + tb.connect (src,src_head,s2fsmi,enc,mod) + #tb.connect (src,b2s,s2fsmi,enc,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics) + tb.connect (metrics,va,fsmi2s,dst) + #tb.connect (metrics,va,fsmi2s,s2b,dst) + + + tb.run() + + # A bit of cheating: run the program once and print the + # final encoder state.. + # Then put it as the last argument in the viterbi block + #print "final state = " , enc.ST() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + #ntotal = len(packet) + #if len(dst.data()) != ntotal: + #print "Error: not enough data\n" + #nright = 0; + #for i in range(ntotal): + #if packet[i]==dst.data()[i]: + #nright=nright+1 + #else: + #print "Error in ", i + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 2: + esn0_db=float(args[0]) # Es/No in dB + rep=int(args[1]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm2.py Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + f=trellis.fsm(1,2,[5,7]) # generate FSM specification from the generator matrix + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/examples/test_tcm_combined.py b/gr-trellis/src/examples/test_tcm_combined.py new file mode 100755 index 00000000..d2d42b40 --- /dev/null +++ b/gr-trellis/src/examples/test_tcm_combined.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): + tb = gr.top_block () + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality + enc = trellis.encoder_ss(f,0) # initial state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + + # RX + va = trellis.viterbi_combined_fs(f,K,0,-1,dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s(); + + + tb.connect (src,src_head,s2fsmi,enc,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,va,fsmi2s,dst) + + + tb.run() + + # A bit of cheating: run the program once and print the + # final encoder state.. + # Then put it as the last argument in the viterbi block + #print "final state = " , enc.ST() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname=args[0] + esn0_db=float(args[1]) # Es/No in dB + rep=int(args[2]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm_combined.py fsm_fname Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + f=trellis.fsm(fname) # get the FSM specification from a file (will hopefully be automated in the future...) + Kb=1024*16 # packet size in bits (make it multiple of 16) + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + modulation = fsm_utils.psk4 # see fsm_utils.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # noise variance + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) + diff --git a/gr-trellis/src/examples/test_tcm_parallel.py b/gr-trellis/src/examples/test_tcm_parallel.py new file mode 100755 index 00000000..8e2f5a23 --- /dev/null +++ b/gr-trellis/src/examples/test_tcm_parallel.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed,P): + tb = gr.top_block () + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16*P) # packet size in shorts + s2fsmi=gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality + s2p = gr.stream_to_streams(gr.sizeof_short,P) # serial to parallel + enc = trellis.encoder_ss(f,0) # initiali state = 0 + mod = gr.chunks_to_symbols_sf(constellation,dimensionality) + + # CHANNEL + add=[] + noise=[] + for i in range(P): + add.append(gr.add_ff()) + noise.append(gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)) + + # RX + metrics = trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi + va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. + p2s = gr.streams_to_stream(gr.sizeof_short,P) # parallel to serial + fsmi2s=gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s() + + tb.connect (src,src_head,s2fsmi,s2p) + for i in range(P): + tb.connect ((s2p,i),(enc,i),(mod,i)) + tb.connect ((mod,i),(add[i],0)) + tb.connect (noise[i],(add[i],1)) + tb.connect (add[i],(metrics,i)) + tb.connect ((metrics,i),(va,i),(p2s,i)) + tb.connect (p2s,fsmi2s,dst) + + + tb.run() + + # A bit of cheating: run the program once and print the + # final encoder state. + # Then put it as the last argument in the viterbi block + #print "final state = " , enc.ST() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + + return (ntotal,ntotal-nright) + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname=args[0] + esn0_db=float(args[1]) # Es/No in dB + rep=int(args[2]) # number of times the experiment is run to collect enough errors + else: + sys.stderr.write ('usage: test_tcm.py fsm_fname Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + f=trellis.fsm(fname) # get the FSM specification from a file + P=4 # how many parallel streams? + Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations + dimensionality = modulation[0] + constellation = modulation[1] + if len(constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') + sys.exit (1) + # calculate average symbol energy + Es = 0 + for i in range(len(constellation)): + Es = Es + constellation[i]**2 + Es = Es / (len(constellation)/dimensionality) + N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i),P) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + +if __name__ == '__main__': + main (sys.argv[1:]) + diff --git a/gr-trellis/src/examples/test_turbo_equalization.py b/gr-trellis/src/examples/test_turbo_equalization.py new file mode 100755 index 00000000..612f6951 --- /dev/null +++ b/gr-trellis/src/examples/test_turbo_equalization.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import fsm_utils + + +def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): + metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO + scale = gr.multiply_const_ff(1.0/N0) + gnd = gr.vector_source_f([0],True); + + inter=[] + deinter=[] + siso_in=[] + siso_out=[] + + # generate all blocks + for it in range(IT): + inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) + siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) + deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) + if it < IT-1: + siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) + else: + siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed + + # connect first stage + tb.connect (gnd,inter[0]) + tb.connect (metrics_in,scale) + tb.connect (scale,(siso_in[0],1)) + + # connect the rest + for it in range(IT): + if it < IT-1: + tb.connect (metrics_in,(siso_in[it+1],1)) + tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) + tb.connect (gnd,(siso_out[it],0)) + tb.connect (siso_out[it],inter[it+1]) + tb.connect (inter[it],(siso_in[it],0)) + else: + tb.connect (siso_in[it],deinter[it],siso_out[it]) + tb.connect (inter[it],(siso_in[it],0)) + + return (metrics_in,siso_out[IT-1]) + + +def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,Es,N0,IT,seed): + tb = gr.top_block () + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the iouter FSM input cardinality + enc_out = trellis.encoder_ss(fo,0) # initial state = 0 + inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) + enc_in = trellis.encoder_ss(fi,0) # initial state = 0 + # essentially here we implement the combination of modulation and channel as a memoryless modulation (the memory induced by the channel is hidden in the innner FSM) + mod = gr.chunks_to_symbols_sf(tot_constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s(); + + tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,head) + tb.connect (tail,fsmi2s,dst) + + tb.run() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + #print ntotal,nright,runlength + + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname_out=args[0] + esn0_db=float(args[1]) + rep=int(args[2]) + else: + sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=64*16 # packet size in bits (multiple of 16) + modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations + channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels + fo=trellis.fsm(fname_out) # get the outer FSM specification from a file + fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically + if fo.O() != fi.I(): + sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') + sys.exit (1) + bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + print 'size = ',K + interleaver=trellis.interleaver(K,666) # construct a random interleaver + tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) + dimensionality = tot_channel[0] + tot_constellation = tot_channel[1] + if len(tot_constellation)/dimensionality != fi.O(): + sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') + sys.exit (1) + N0=pow(10.0,-esn0_db/10.0); # noise variance + IT = 3 # number of turbo iterations + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + + for i in range(rep): + (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations + print s + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%10==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) + diff --git a/gr-trellis/src/examples/test_turbo_equalization1.py b/gr-trellis/src/examples/test_turbo_equalization1.py new file mode 100755 index 00000000..8d2feec8 --- /dev/null +++ b/gr-trellis/src/examples/test_turbo_equalization1.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): + metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO + scale = gr.multiply_const_ff(1.0/N0) + gnd = gr.vector_source_f([0],True); + + inter=[] + deinter=[] + siso_in=[] + siso_out=[] + + # generate all blocks + for it in range(IT): + inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) + siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) + deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) + if it < IT-1: + siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) + else: + siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed + + # connect first stage + tb.connect (gnd,inter[0]) + tb.connect (metrics_in,scale) + tb.connect (scale,(siso_in[0],1)) + + # connect the rest + for it in range(IT): + if it < IT-1: + tb.connect (scale,(siso_in[it+1],1)) + tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) + tb.connect (gnd,(siso_out[it],0)) + tb.connect (siso_out[it],inter[it+1]) + tb.connect (inter[it],(siso_in[it],0)) + else: + tb.connect (siso_in[it],deinter[it],siso_out[it]) + tb.connect (inter[it],(siso_in[it],0)) + + return (metrics_in,siso_out[IT-1]) + + +def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed): + tb = gr.top_block () + L = len(channel) + + # TX + # this for loop is TOO slow in python!!! + packet = [0]*(K) + random.seed(seed) + for i in range(len(packet)): + packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols + src = gr.vector_source_s(packet,False) + enc_out = trellis.encoder_ss(fo,0) # initial state = 0 + inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) + mod = gr.chunks_to_symbols_sf(modulation[1],modulation[0]) + + # CHANNEL + isi = gr.fir_filter_fff(1,channel) + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) + dst = gr.vector_sink_s(); + + tb.connect (src,enc_out,inter,mod) + tb.connect (mod,isi,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,head) + tb.connect (tail,dst) + + tb.run() + + data = dst.data() + ntotal = len(data) + nright=0 + for i in range(ntotal): + if packet[i]==data[i]: + nright=nright+1 + #else: + #print "Error in ", i + + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname_out=args[0] + esn0_db=float(args[1]) + rep=int(args[2]) + else: + sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=64*16 # packet size in bits (multiple of 16) + modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations + channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels + fo=trellis.fsm(fname_out) # get the outer FSM specification from a file + fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically + if fo.O() != fi.I(): + sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') + sys.exit (1) + bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + interleaver=trellis.interleaver(K,666) # construct a random interleaver + tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) + dimensionality = tot_channel[0] + tot_constellation = tot_channel[1] + if len(tot_constellation)/dimensionality != fi.O(): + sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') + sys.exit (1) + N0=pow(10.0,-esn0_db/10.0); # noise variance + IT = 3 # number of turbo iterations + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + + for i in range(rep): + (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%10==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) + diff --git a/gr-trellis/src/examples/test_turbo_equalization2.py b/gr-trellis/src/examples/test_turbo_equalization2.py new file mode 100755 index 00000000..f1731016 --- /dev/null +++ b/gr-trellis/src/examples/test_turbo_equalization2.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): + scale = gr.multiply_const_ff(math.sqrt(1.0/N0)) + gnd = gr.vector_source_f([0],True); + + inter=[] + deinter=[] + siso_in=[] + siso_out=[] + + # generate all blocks + for it in range(IT): + inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) + siso_in.append( trellis.siso_combined_f(fi,K,0,-1,True,False,type,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) ) + deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) + if it < IT-1: + siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) + else: + siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed + + # connect first stage + tb.connect (gnd,inter[0]) + tb.connect (scale,(siso_in[0],1)) + + # connect the rest + for it in range(IT): + if it < IT-1: + tb.connect (scale,(siso_in[it+1],1)) + tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) + tb.connect (gnd,(siso_out[it],0)) + tb.connect (siso_out[it],inter[it+1]) + tb.connect (inter[it],(siso_in[it],0)) + else: + tb.connect (siso_in[it],deinter[it],siso_out[it]) + tb.connect (inter[it],(siso_in[it],0)) + + return (scale,siso_out[IT-1]) + + +def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed): + tb = gr.top_block () + L = len(channel) + + # TX + # this for loop is TOO slow in python!!! + packet = [0]*(K) + random.seed(seed) + for i in range(len(packet)): + packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols + src = gr.vector_source_s(packet,False) + enc_out = trellis.encoder_ss(fo,0) # initial state = 0 + inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) + mod = gr.chunks_to_symbols_sf(modulation[1],modulation[0]) + + # CHANNEL + isi = gr.fir_filter_fff(1,channel) + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) + dst = gr.vector_sink_s(); + + tb.connect (src,enc_out,inter,mod) + tb.connect (mod,isi,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,head) + tb.connect (tail,dst) + + tb.run() + + data = dst.data() + ntotal = len(data) + nright=0 + for i in range(ntotal): + if packet[i]==data[i]: + nright=nright+1 + #else: + #print "Error in ", i + + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 3: + fname_out=args[0] + esn0_db=float(args[1]) + rep=int(args[2]) + else: + sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=64*16 # packet size in bits (multiple of 16) + modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations + channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels + fo=trellis.fsm(fname_out) # get the outer FSM specification from a file + fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically + if fo.O() != fi.I(): + sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') + sys.exit (1) + bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + interleaver=trellis.interleaver(K,666) # construct a random interleaver + tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) + dimensionality = tot_channel[0] + N0=pow(10.0,-esn0_db/10.0); # noise variance + tot_constellation =[0]*len(tot_channel[1]) + for i in range(len(tot_channel[1])): + tot_constellation[i] = tot_channel[1][i] * math.sqrt(1.0/N0) + if len(tot_constellation)/dimensionality != fi.O(): + sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') + sys.exit (1) + IT = 3 # number of turbo iterations + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + + for i in range(rep): + (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%10==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) + diff --git a/gr-trellis/src/examples/test_viterbi_equalization.py b/gr-trellis/src/examples/test_viterbi_equalization.py new file mode 100755 index 00000000..86fc0067 --- /dev/null +++ b/gr-trellis/src/examples/test_viterbi_equalization.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,seed): + tb = gr.top_block () + + # TX + src = gr.lfsr_32k_source_s() + src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts + s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality + enc = trellis.encoder_ss(f,0) # initial state = 0 + # essentially here we implement the combination of modulation and channel as a memoryless modulation (the memory induced by the channel is hidden in the FSM) + mod = gr.chunks_to_symbols_sf(tot_constellation,dimensionality) + + # CHANNEL + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + metrics = trellis.metrics_f(f.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi + va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. + fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts + dst = gr.check_lfsr_32k_s(); + + tb.connect (src,src_head,s2fsmi,enc,mod) + tb.connect (mod,(add,0)) + tb.connect (noise,(add,1)) + tb.connect (add,metrics) + tb.connect (metrics,va,fsmi2s,dst) + + tb.run() + + ntotal = dst.ntotal () + nright = dst.nright () + runlength = dst.runlength () + #print ntotal,nright,runlength + + return (ntotal,ntotal-nright) + + + + +def main(args): + nargs = len (args) + if nargs == 2: + esn0_db=float(args[0]) + rep=int(args[1]) + else: + sys.stderr.write ('usage: test_viterbi_equalization.py Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=128*16 # packet size in bits (multiple of 16) + modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations + channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels + f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + + tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) + dimensionality = tot_channel[0] + tot_constellation = tot_channel[1] + N0=pow(10.0,-esn0_db/10.0); # noise variance + if len(tot_constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') + sys.exit (1) + + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or bit) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) + diff --git a/gr-trellis/src/examples/test_viterbi_equalization1.py b/gr-trellis/src/examples/test_viterbi_equalization1.py new file mode 100755 index 00000000..d26f73bc --- /dev/null +++ b/gr-trellis/src/examples/test_viterbi_equalization1.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import audio +from gnuradio import trellis +from gnuradio import eng_notation +import math +import sys +import random +import fsm_utils + +def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed): + tb = gr.top_block () + L = len(channel) + + # TX + # this for loop is TOO slow in python!!! + packet = [0]*(K+2*L) + random.seed(seed) + for i in range(len(packet)): + packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols + for i in range(L): # first/last L symbols set to 0 + packet[i] = 0 + packet[len(packet)-i-1] = 0 + src = gr.vector_source_s(packet,False) + mod = gr.chunks_to_symbols_sf(modulation[1],modulation[0]) + + # CHANNEL + isi = gr.fir_filter_fff(1,channel) + add = gr.add_ff() + noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed) + + # RX + skip = gr.skiphead(gr.sizeof_float, L) # skip the first L samples since you know they are coming from the L zero symbols + #metrics = trellis.metrics_f(f.O(),dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi + #va = trellis.viterbi_s(f,K+L,-1,0) # Put -1 if the Initial/Final states are not set. + va = trellis.viterbi_combined_fs(f,K+L,0,0,dimensionality,tot_constellation,trellis.TRELLIS_EUCLIDEAN) # using viterbi_combined_fs instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application... + dst = gr.vector_sink_s() + + tb.connect (src,mod) + tb.connect (mod,isi,(add,0)) + tb.connect (noise,(add,1)) + #tb.connect (add,metrics) + #tb.connect (metrics,va,dst) + tb.connect (add,skip,va,dst) + + tb.run() + + data = dst.data() + ntotal = len(data) - L + nright=0 + for i in range(ntotal): + if packet[i+L]==data[i]: + nright=nright+1 + #else: + #print "Error in ", i + + return (ntotal,ntotal-nright) + + +def main(args): + nargs = len (args) + if nargs == 2: + esn0_db=float(args[0]) + rep=int(args[1]) + else: + sys.stderr.write ('usage: test_viterbi_equalization1.py Es/No_db repetitions\n') + sys.exit (1) + + # system parameters + Kb=128*16 # packet size in bits (multiple of 16) + modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations + channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels + f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically + bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol + K=Kb/bitspersymbol # packet size in trellis steps + + tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) + dimensionality = tot_channel[0] + tot_constellation = tot_channel[1] + N0=pow(10.0,-esn0_db/10.0); # noise variance + if len(tot_constellation)/dimensionality != f.O(): + sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') + sys.exit (1) + + tot_s=0 # total number of transmitted shorts + terr_s=0 # total number of shorts in error + terr_p=0 # total number of packets in error + + for i in range(rep): + (s,e)=run_test(f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations + tot_s=tot_s+s + terr_s=terr_s+e + terr_p=terr_p+(terr_s!=0) + if ((i+1)%100==0) : # display progress + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + # estimate of the (short or symbol) error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + + + +if __name__ == '__main__': + main (sys.argv[1:]) diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am index 0cae1b0b..2e7591e4 100644 --- a/gr-trellis/src/lib/Makefile.am +++ b/gr-trellis/src/lib/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,48 +21,66 @@ include $(top_srcdir)/Makefile.common -include Makefile.gen - -# Install this stuff so that it ends up as the gnuradio.trellis module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - - -LOCAL_IFILES = \ - $(top_srcdir)/gr-trellis/src/lib/trellis.i +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +# ---------------------------------------------------------------- +# these scripts generate trellis codes from template files + +core_generator = \ + generate_all.py \ + generate_trellis.py \ + trellis_encoder_XX.cc.t \ + trellis_encoder_XX.h.t \ + trellis_encoder_XX.i.t \ + trellis_metrics_X.cc.t \ + trellis_metrics_X.h.t \ + trellis_metrics_X.i.t \ + trellis_viterbi_combined_XX.cc.t \ + trellis_viterbi_combined_XX.h.t \ + trellis_viterbi_combined_XX.i.t \ + trellis_viterbi_X.cc.t \ + trellis_viterbi_X.h.t \ + trellis_viterbi_X.i.t + +# Source built by Python into $(builddir) +python_built_sources = \ + $(GENERATED_H) \ + $(GENERATED_I) \ + $(GENERATED_CC) \ + trellis_generated.i +EXTRA_DIST = \ + $(core_generator) -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _trellis shared library -# and knows how to call our extensions. +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + fsm.h \ + quicksort_index.h \ + base.h \ + interleaver.h \ + trellis_metric_type.h \ + trellis_calc_metric.h \ + trellis_permutation.h \ + trellis_siso_type.h \ + trellis_siso_f.h \ + trellis_siso_combined_f.h \ + $(GENERATED_H) -BUILT_SOURCES = \ - trellis.cc \ - trellis.py +################################# +# SWIG interface and library -# This gets trellis.py installed in the right place -ourpython_PYTHON = \ - trellis.py +TOP_SWIG_IFILES = \ + trellis.i -ourlib_LTLIBRARIES = _trellis.la +# Install so that they end up available as: +# import gnuradio.trellis +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +trellis_pythondir_category = \ + gnuradio -# These are the source files that go into the shared library -_trellis_la_SOURCES = \ - trellis.cc \ +# additional sources for the SWIG-generated library +trellis_la_swig_sources = \ fsm.cc \ quicksort_index.cc \ base.cc \ @@ -71,39 +89,14 @@ _trellis_la_SOURCES = \ trellis_permutation.cc \ trellis_siso_f.cc \ trellis_siso_combined_f.cc \ - $(GENERATED_CC) - -# magic flags -_trellis_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version - -# link the library against some comon swig runtime code and the -# c++ standard library -_trellis_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ - -trellis.cc trellis.py: $(ALL_IFILES) $(grinclude_HEADERS) - $(SWIG) $(SWIGPYTHONARGS) -module trellis -o trellis.cc $(LOCAL_IFILES) - -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = \ - fsm.h \ - quicksort_index.h \ - base.h \ - interleaver.h \ - trellis_metric_type.h \ - trellis_calc_metric.h \ - trellis_permutation.h \ - trellis_siso_type.h \ - trellis_siso_f.h \ - trellis_siso_combined_f.h \ - $(GENERATED_H) + $(GENERATED_CC) +# additional libraries for linking with the SWIG-generated library +trellis_la_swig_libadd = \ + $(GNURADIO_CORE_LA) -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) \ +# additional SWIG files to be installed +trellis_swiginclude_headers = \ $(GENERATED_I) \ fsm.i \ interleaver.i \ @@ -112,11 +105,29 @@ swiginclude_HEADERS = \ trellis_siso_combined_f.i \ trellis_generated.i +# Do creation and inclusion of other Makefiles last + +# include the srcdir's Makefile.gen; doing this creates an implicit +# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. +include $(srcdir)/Makefile.gen + +# common way for generating local Makefile.gen +makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py +include $(top_srcdir)/Makefile.gen.gen + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(python_built_sources) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +include $(top_srcdir)/Makefile.par.gen +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = \ + $(python_built_sources) \ + $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-trellis/src/lib/Makefile.gen b/gr-trellis/src/lib/Makefile.gen index 7a47ea3a..6a3f8338 100644 --- a/gr-trellis/src/lib/Makefile.gen +++ b/gr-trellis/src/lib/Makefile.gen @@ -13,9 +13,18 @@ GENERATED_H = \ trellis_metrics_i.h \ trellis_metrics_s.h \ trellis_viterbi_b.h \ - trellis_viterbi_combined_b.h \ - trellis_viterbi_combined_i.h \ - trellis_viterbi_combined_s.h \ + trellis_viterbi_combined_cb.h \ + trellis_viterbi_combined_ci.h \ + trellis_viterbi_combined_cs.h \ + trellis_viterbi_combined_fb.h \ + trellis_viterbi_combined_fi.h \ + trellis_viterbi_combined_fs.h \ + trellis_viterbi_combined_ib.h \ + trellis_viterbi_combined_ii.h \ + trellis_viterbi_combined_is.h \ + trellis_viterbi_combined_sb.h \ + trellis_viterbi_combined_si.h \ + trellis_viterbi_combined_ss.h \ trellis_viterbi_i.h \ trellis_viterbi_s.h @@ -31,9 +40,18 @@ GENERATED_I = \ trellis_metrics_i.i \ trellis_metrics_s.i \ trellis_viterbi_b.i \ - trellis_viterbi_combined_b.i \ - trellis_viterbi_combined_i.i \ - trellis_viterbi_combined_s.i \ + trellis_viterbi_combined_cb.i \ + trellis_viterbi_combined_ci.i \ + trellis_viterbi_combined_cs.i \ + trellis_viterbi_combined_fb.i \ + trellis_viterbi_combined_fi.i \ + trellis_viterbi_combined_fs.i \ + trellis_viterbi_combined_ib.i \ + trellis_viterbi_combined_ii.i \ + trellis_viterbi_combined_is.i \ + trellis_viterbi_combined_sb.i \ + trellis_viterbi_combined_si.i \ + trellis_viterbi_combined_ss.i \ trellis_viterbi_i.i \ trellis_viterbi_s.i @@ -49,9 +67,18 @@ GENERATED_CC = \ trellis_metrics_i.cc \ trellis_metrics_s.cc \ trellis_viterbi_b.cc \ - trellis_viterbi_combined_b.cc \ - trellis_viterbi_combined_i.cc \ - trellis_viterbi_combined_s.cc \ + trellis_viterbi_combined_cb.cc \ + trellis_viterbi_combined_ci.cc \ + trellis_viterbi_combined_cs.cc \ + trellis_viterbi_combined_fb.cc \ + trellis_viterbi_combined_fi.cc \ + trellis_viterbi_combined_fs.cc \ + trellis_viterbi_combined_ib.cc \ + trellis_viterbi_combined_ii.cc \ + trellis_viterbi_combined_is.cc \ + trellis_viterbi_combined_sb.cc \ + trellis_viterbi_combined_si.cc \ + trellis_viterbi_combined_ss.cc \ trellis_viterbi_i.cc \ trellis_viterbi_s.cc diff --git a/gr-trellis/src/lib/Makefile.in b/gr-trellis/src/lib/Makefile.in index 3183860e..cceb0a84 100644 --- a/gr-trellis/src/lib/Makefile.in +++ b/gr-trellis/src/lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,102 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 -*- +# +# 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 -*- +# +# 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 trellis.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,31 +167,43 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(grinclude_HEADERS) $(ourpython_PYTHON) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.gen \ - $(srcdir)/Makefile.in $(swiginclude_HEADERS) \ - $(top_srcdir)/Makefile.common +DIST_COMMON = $(grinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.gen $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.gen.gen $(top_srcdir)/Makefile.par.gen \ + $(top_srcdir)/Makefile.swig $(trellis_python_PYTHON) \ + $(trellis_swiginclude_HEADERS) subdir = gr-trellis/src/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +212,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,54 +259,78 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(trellis_pylibdir)" \ + "$(DESTDIR)$(trellis_pythondir)" "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(trellis_swigincludedir)" +trellis_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(trellis_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) _trellis_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) -am__objects_1 = trellis_encoder_bb.lo trellis_encoder_bi.lo \ - trellis_encoder_bs.lo trellis_encoder_ii.lo \ - trellis_encoder_si.lo trellis_encoder_ss.lo \ - trellis_metrics_c.lo trellis_metrics_f.lo trellis_metrics_i.lo \ - trellis_metrics_s.lo trellis_viterbi_b.lo \ - trellis_viterbi_combined_b.lo trellis_viterbi_combined_i.lo \ - trellis_viterbi_combined_s.lo trellis_viterbi_i.lo \ - trellis_viterbi_s.lo -am__trellis_la_OBJECTS = trellis.lo fsm.lo quicksort_index.lo base.lo \ - interleaver.lo trellis_calc_metric.lo trellis_permutation.lo \ - trellis_siso_f.lo trellis_siso_combined_f.lo $(am__objects_1) +am__objects_1 = _trellis_la-trellis_encoder_bb.lo \ + _trellis_la-trellis_encoder_bi.lo \ + _trellis_la-trellis_encoder_bs.lo \ + _trellis_la-trellis_encoder_ii.lo \ + _trellis_la-trellis_encoder_si.lo \ + _trellis_la-trellis_encoder_ss.lo \ + _trellis_la-trellis_metrics_c.lo \ + _trellis_la-trellis_metrics_f.lo \ + _trellis_la-trellis_metrics_i.lo \ + _trellis_la-trellis_metrics_s.lo \ + _trellis_la-trellis_viterbi_b.lo \ + _trellis_la-trellis_viterbi_combined_cb.lo \ + _trellis_la-trellis_viterbi_combined_ci.lo \ + _trellis_la-trellis_viterbi_combined_cs.lo \ + _trellis_la-trellis_viterbi_combined_fb.lo \ + _trellis_la-trellis_viterbi_combined_fi.lo \ + _trellis_la-trellis_viterbi_combined_fs.lo \ + _trellis_la-trellis_viterbi_combined_ib.lo \ + _trellis_la-trellis_viterbi_combined_ii.lo \ + _trellis_la-trellis_viterbi_combined_is.lo \ + _trellis_la-trellis_viterbi_combined_sb.lo \ + _trellis_la-trellis_viterbi_combined_si.lo \ + _trellis_la-trellis_viterbi_combined_ss.lo \ + _trellis_la-trellis_viterbi_i.lo \ + _trellis_la-trellis_viterbi_s.lo +am__objects_2 = _trellis_la-fsm.lo _trellis_la-quicksort_index.lo \ + _trellis_la-base.lo _trellis_la-interleaver.lo \ + _trellis_la-trellis_calc_metric.lo \ + _trellis_la-trellis_permutation.lo \ + _trellis_la-trellis_siso_f.lo \ + _trellis_la-trellis_siso_combined_f.lo $(am__objects_1) +am__trellis_la_OBJECTS = _trellis_la-trellis.lo $(am__objects_2) _trellis_la_OBJECTS = $(am__trellis_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_trellis_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_trellis_la_CXXFLAGS) \ + $(CXXFLAGS) $(_trellis_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_trellis_la_SOURCES) DIST_SOURCES = $(_trellis_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +trellis_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +trellis_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(trellis_swiginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -196,9 +338,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -206,6 +355,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -218,73 +369,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -294,49 +438,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -344,15 +528,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -362,16 +689,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -380,63 +725,221 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/Makefile.gen-generate-generate-* \ + $(DEPDIR)/stamp-sources-generate* $(DEPDIR)/trellis-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT stamp-sources-generate $(DEPDIR)/*.S* +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(WITH_INCLUDES) + +# ---------------------------------------------------------------- +# these scripts generate trellis codes from template files +core_generator = \ + generate_all.py \ + generate_trellis.py \ + trellis_encoder_XX.cc.t \ + trellis_encoder_XX.h.t \ + trellis_encoder_XX.i.t \ + trellis_metrics_X.cc.t \ + trellis_metrics_X.h.t \ + trellis_metrics_X.i.t \ + trellis_viterbi_combined_XX.cc.t \ + trellis_viterbi_combined_XX.h.t \ + trellis_viterbi_combined_XX.i.t \ + trellis_viterbi_X.cc.t \ + trellis_viterbi_X.h.t \ + trellis_viterbi_X.i.t + + +# Source built by Python into $(builddir) +python_built_sources = \ + $(GENERATED_H) \ + $(GENERATED_I) \ + $(GENERATED_CC) \ + trellis_generated.i + +EXTRA_DIST = $(core_generator) stamp-sources-generate + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + fsm.h \ + quicksort_index.h \ + base.h \ + interleaver.h \ + trellis_metric_type.h \ + trellis_calc_metric.h \ + trellis_permutation.h \ + trellis_siso_type.h \ + trellis_siso_f.h \ + trellis_siso_combined_f.h \ + $(GENERATED_H) + + +################################# +# SWIG interface and library +TOP_SWIG_IFILES = \ + trellis.i + + +# Install so that they end up available as: +# import gnuradio.trellis +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +trellis_pythondir_category = \ + gnuradio + + +# additional sources for the SWIG-generated library +trellis_la_swig_sources = \ + fsm.cc \ + quicksort_index.cc \ + base.cc \ + interleaver.cc \ + trellis_calc_metric.cc \ + trellis_permutation.cc \ + trellis_siso_f.cc \ + trellis_siso_combined_f.cc \ + $(GENERATED_CC) + + +# additional libraries for linking with the SWIG-generated library +trellis_la_swig_libadd = \ + $(GNURADIO_CORE_LA) + + +# additional SWIG files to be installed +trellis_swiginclude_headers = \ + $(GENERATED_I) \ + fsm.i \ + interleaver.i \ + trellis_permutation.i \ + trellis_siso_f.i \ + trellis_siso_combined_f.i \ + trellis_generated.i + # # This file is machine generated. All edits will be overwritten @@ -453,9 +956,18 @@ GENERATED_H = \ trellis_metrics_i.h \ trellis_metrics_s.h \ trellis_viterbi_b.h \ - trellis_viterbi_combined_b.h \ - trellis_viterbi_combined_i.h \ - trellis_viterbi_combined_s.h \ + trellis_viterbi_combined_cb.h \ + trellis_viterbi_combined_ci.h \ + trellis_viterbi_combined_cs.h \ + trellis_viterbi_combined_fb.h \ + trellis_viterbi_combined_fi.h \ + trellis_viterbi_combined_fs.h \ + trellis_viterbi_combined_ib.h \ + trellis_viterbi_combined_ii.h \ + trellis_viterbi_combined_is.h \ + trellis_viterbi_combined_sb.h \ + trellis_viterbi_combined_si.h \ + trellis_viterbi_combined_ss.h \ trellis_viterbi_i.h \ trellis_viterbi_s.h @@ -471,9 +983,18 @@ GENERATED_I = \ trellis_metrics_i.i \ trellis_metrics_s.i \ trellis_viterbi_b.i \ - trellis_viterbi_combined_b.i \ - trellis_viterbi_combined_i.i \ - trellis_viterbi_combined_s.i \ + trellis_viterbi_combined_cb.i \ + trellis_viterbi_combined_ci.i \ + trellis_viterbi_combined_cs.i \ + trellis_viterbi_combined_fb.i \ + trellis_viterbi_combined_fi.i \ + trellis_viterbi_combined_fs.i \ + trellis_viterbi_combined_ib.i \ + trellis_viterbi_combined_ii.i \ + trellis_viterbi_combined_is.i \ + trellis_viterbi_combined_sb.i \ + trellis_viterbi_combined_si.i \ + trellis_viterbi_combined_ss.i \ trellis_viterbi_i.i \ trellis_viterbi_s.i @@ -489,108 +1010,111 @@ GENERATED_CC = \ trellis_metrics_i.cc \ trellis_metrics_s.cc \ trellis_viterbi_b.cc \ - trellis_viterbi_combined_b.cc \ - trellis_viterbi_combined_i.cc \ - trellis_viterbi_combined_s.cc \ + trellis_viterbi_combined_cb.cc \ + trellis_viterbi_combined_ci.cc \ + trellis_viterbi_combined_cs.cc \ + trellis_viterbi_combined_fb.cc \ + trellis_viterbi_combined_fi.cc \ + trellis_viterbi_combined_fs.cc \ + trellis_viterbi_combined_ib.cc \ + trellis_viterbi_combined_ii.cc \ + trellis_viterbi_combined_is.cc \ + trellis_viterbi_combined_sb.cc \ + trellis_viterbi_combined_si.cc \ + trellis_viterbi_combined_ss.cc \ trellis_viterbi_i.cc \ trellis_viterbi_s.cc -# Install this stuff so that it ends up as the gnuradio.trellis module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -LOCAL_IFILES = \ - $(top_srcdir)/gr-trellis/src/lib/trellis.i - - -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _trellis shared library -# and knows how to call our extensions. -BUILT_SOURCES = \ - trellis.cc \ - trellis.py - - -# This gets trellis.py installed in the right place -ourpython_PYTHON = \ - trellis.py - -ourlib_LTLIBRARIES = _trellis.la +# Do creation and inclusion of other Makefiles last + +# include the srcdir's Makefile.gen; doing this creates an implicit +# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. + +# common way for generating local Makefile.gen +makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(python_built_sources) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = trellis.py trellis.cc +trellis_pythondir = $(pythondir)/$(trellis_pythondir_category) +trellis_pylibdir = $(pyexecdir)/$(trellis_pylibdir_category) +trellis_swigincludedir = $(swigincludedir) +trellis_swiginclude_HEADERS = \ + trellis.i \ + $(trellis_swiginclude_headers) + +trellis_pylib_LTLIBRARIES = \ + _trellis.la -# These are the source files that go into the shared library _trellis_la_SOURCES = \ trellis.cc \ - fsm.cc \ - quicksort_index.cc \ - base.cc \ - interleaver.cc \ - trellis_calc_metric.cc \ - trellis_permutation.cc \ - trellis_siso_f.cc \ - trellis_siso_combined_f.cc \ - $(GENERATED_CC) + $(trellis_la_swig_sources) +_trellis_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(trellis_la_swig_libadd) -# magic flags -_trellis_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +_trellis_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(trellis_la_swig_ldflags) -# link the library against some comon swig runtime code and the -# c++ standard library -_trellis_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - -lstdc++ +_trellis_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(trellis_la_swig_cxxflags) +trellis_python_PYTHON = \ + trellis.py \ + $(trellis_python) -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = \ - fsm.h \ - quicksort_index.h \ - base.h \ - interleaver.h \ - trellis_metric_type.h \ - trellis_calc_metric.h \ - trellis_permutation.h \ - trellis_siso_type.h \ - trellis_siso_f.h \ - trellis_siso_combined_f.h \ - $(GENERATED_H) +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = \ + $(python_built_sources) \ + $(swig_built_sources) -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) \ - $(GENERATED_I) \ - fsm.i \ - interleaver.i \ - trellis_permutation.i \ - trellis_siso_f.i \ - trellis_siso_combined_f.i \ - trellis_generated.i -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(srcdir)/Makefile.gen $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(srcdir)/Makefile.gen $(top_srcdir)/Makefile.gen.gen $(top_srcdir)/Makefile.par.gen $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -614,35 +1138,35 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-trellis_pylibLTLIBRARIES: $(trellis_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(trellis_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(trellis_pylibdir)" + @list='$(trellis_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(trellis_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(trellis_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(trellis_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(trellis_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-trellis_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(trellis_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(trellis_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(trellis_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-trellis_pylibLTLIBRARIES: + -test -z "$(trellis_pylib_LTLIBRARIES)" || rm -f $(trellis_pylib_LTLIBRARIES) + @list='$(trellis_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _trellis.la: $(_trellis_la_OBJECTS) $(_trellis_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_trellis_la_LDFLAGS) $(_trellis_la_OBJECTS) $(_trellis_la_LIBADD) $(LIBS) + $(_trellis_la_LINK) -rpath $(trellis_pylibdir) $(_trellis_la_OBJECTS) $(_trellis_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -650,93 +1174,336 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interleaver.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quicksort_index.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_calc_metric.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_encoder_bb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_encoder_bi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_encoder_bs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_encoder_ii.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_encoder_si.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_encoder_ss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_metrics_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_metrics_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_metrics_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_metrics_s.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_permutation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_siso_combined_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_siso_f.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_viterbi_b.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_viterbi_combined_b.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_viterbi_combined_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_viterbi_combined_s.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_viterbi_i.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trellis_viterbi_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-fsm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-interleaver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-quicksort_index.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_calc_metric.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_encoder_bb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_encoder_bi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_encoder_bs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_encoder_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_encoder_si.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_encoder_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_metrics_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_metrics_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_metrics_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_metrics_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_permutation.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_siso_combined_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_siso_f.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_b.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_cb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_ci.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_cs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_fb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_fi.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_fs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_ib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_ii.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_is.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_sb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_si.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_combined_ss.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_i.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_trellis_la-trellis_viterbi_s.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_trellis_la-trellis.lo: trellis.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis.Tpo -c -o _trellis_la-trellis.lo `test -f 'trellis.cc' || echo '$(srcdir)/'`trellis.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis.Tpo $(DEPDIR)/_trellis_la-trellis.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis.cc' object='_trellis_la-trellis.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis.lo `test -f 'trellis.cc' || echo '$(srcdir)/'`trellis.cc + +_trellis_la-fsm.lo: fsm.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-fsm.lo -MD -MP -MF $(DEPDIR)/_trellis_la-fsm.Tpo -c -o _trellis_la-fsm.lo `test -f 'fsm.cc' || echo '$(srcdir)/'`fsm.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-fsm.Tpo $(DEPDIR)/_trellis_la-fsm.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsm.cc' object='_trellis_la-fsm.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-fsm.lo `test -f 'fsm.cc' || echo '$(srcdir)/'`fsm.cc + +_trellis_la-quicksort_index.lo: quicksort_index.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-quicksort_index.lo -MD -MP -MF $(DEPDIR)/_trellis_la-quicksort_index.Tpo -c -o _trellis_la-quicksort_index.lo `test -f 'quicksort_index.cc' || echo '$(srcdir)/'`quicksort_index.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-quicksort_index.Tpo $(DEPDIR)/_trellis_la-quicksort_index.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='quicksort_index.cc' object='_trellis_la-quicksort_index.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-quicksort_index.lo `test -f 'quicksort_index.cc' || echo '$(srcdir)/'`quicksort_index.cc + +_trellis_la-base.lo: base.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-base.lo -MD -MP -MF $(DEPDIR)/_trellis_la-base.Tpo -c -o _trellis_la-base.lo `test -f 'base.cc' || echo '$(srcdir)/'`base.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-base.Tpo $(DEPDIR)/_trellis_la-base.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='base.cc' object='_trellis_la-base.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-base.lo `test -f 'base.cc' || echo '$(srcdir)/'`base.cc + +_trellis_la-interleaver.lo: interleaver.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-interleaver.lo -MD -MP -MF $(DEPDIR)/_trellis_la-interleaver.Tpo -c -o _trellis_la-interleaver.lo `test -f 'interleaver.cc' || echo '$(srcdir)/'`interleaver.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-interleaver.Tpo $(DEPDIR)/_trellis_la-interleaver.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='interleaver.cc' object='_trellis_la-interleaver.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-interleaver.lo `test -f 'interleaver.cc' || echo '$(srcdir)/'`interleaver.cc + +_trellis_la-trellis_calc_metric.lo: trellis_calc_metric.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_calc_metric.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_calc_metric.Tpo -c -o _trellis_la-trellis_calc_metric.lo `test -f 'trellis_calc_metric.cc' || echo '$(srcdir)/'`trellis_calc_metric.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_calc_metric.Tpo $(DEPDIR)/_trellis_la-trellis_calc_metric.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_calc_metric.cc' object='_trellis_la-trellis_calc_metric.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_calc_metric.lo `test -f 'trellis_calc_metric.cc' || echo '$(srcdir)/'`trellis_calc_metric.cc + +_trellis_la-trellis_permutation.lo: trellis_permutation.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_permutation.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_permutation.Tpo -c -o _trellis_la-trellis_permutation.lo `test -f 'trellis_permutation.cc' || echo '$(srcdir)/'`trellis_permutation.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_permutation.Tpo $(DEPDIR)/_trellis_la-trellis_permutation.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_permutation.cc' object='_trellis_la-trellis_permutation.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_permutation.lo `test -f 'trellis_permutation.cc' || echo '$(srcdir)/'`trellis_permutation.cc + +_trellis_la-trellis_siso_f.lo: trellis_siso_f.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_siso_f.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_siso_f.Tpo -c -o _trellis_la-trellis_siso_f.lo `test -f 'trellis_siso_f.cc' || echo '$(srcdir)/'`trellis_siso_f.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_siso_f.Tpo $(DEPDIR)/_trellis_la-trellis_siso_f.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_siso_f.cc' object='_trellis_la-trellis_siso_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_siso_f.lo `test -f 'trellis_siso_f.cc' || echo '$(srcdir)/'`trellis_siso_f.cc + +_trellis_la-trellis_siso_combined_f.lo: trellis_siso_combined_f.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_siso_combined_f.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_siso_combined_f.Tpo -c -o _trellis_la-trellis_siso_combined_f.lo `test -f 'trellis_siso_combined_f.cc' || echo '$(srcdir)/'`trellis_siso_combined_f.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_siso_combined_f.Tpo $(DEPDIR)/_trellis_la-trellis_siso_combined_f.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_siso_combined_f.cc' object='_trellis_la-trellis_siso_combined_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_siso_combined_f.lo `test -f 'trellis_siso_combined_f.cc' || echo '$(srcdir)/'`trellis_siso_combined_f.cc + +_trellis_la-trellis_encoder_bb.lo: trellis_encoder_bb.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_encoder_bb.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_encoder_bb.Tpo -c -o _trellis_la-trellis_encoder_bb.lo `test -f 'trellis_encoder_bb.cc' || echo '$(srcdir)/'`trellis_encoder_bb.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_encoder_bb.Tpo $(DEPDIR)/_trellis_la-trellis_encoder_bb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_encoder_bb.cc' object='_trellis_la-trellis_encoder_bb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_encoder_bb.lo `test -f 'trellis_encoder_bb.cc' || echo '$(srcdir)/'`trellis_encoder_bb.cc + +_trellis_la-trellis_encoder_bi.lo: trellis_encoder_bi.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_encoder_bi.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_encoder_bi.Tpo -c -o _trellis_la-trellis_encoder_bi.lo `test -f 'trellis_encoder_bi.cc' || echo '$(srcdir)/'`trellis_encoder_bi.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_encoder_bi.Tpo $(DEPDIR)/_trellis_la-trellis_encoder_bi.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_encoder_bi.cc' object='_trellis_la-trellis_encoder_bi.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_encoder_bi.lo `test -f 'trellis_encoder_bi.cc' || echo '$(srcdir)/'`trellis_encoder_bi.cc + +_trellis_la-trellis_encoder_bs.lo: trellis_encoder_bs.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_encoder_bs.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_encoder_bs.Tpo -c -o _trellis_la-trellis_encoder_bs.lo `test -f 'trellis_encoder_bs.cc' || echo '$(srcdir)/'`trellis_encoder_bs.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_encoder_bs.Tpo $(DEPDIR)/_trellis_la-trellis_encoder_bs.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_encoder_bs.cc' object='_trellis_la-trellis_encoder_bs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_encoder_bs.lo `test -f 'trellis_encoder_bs.cc' || echo '$(srcdir)/'`trellis_encoder_bs.cc + +_trellis_la-trellis_encoder_ii.lo: trellis_encoder_ii.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_encoder_ii.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_encoder_ii.Tpo -c -o _trellis_la-trellis_encoder_ii.lo `test -f 'trellis_encoder_ii.cc' || echo '$(srcdir)/'`trellis_encoder_ii.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_encoder_ii.Tpo $(DEPDIR)/_trellis_la-trellis_encoder_ii.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_encoder_ii.cc' object='_trellis_la-trellis_encoder_ii.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_encoder_ii.lo `test -f 'trellis_encoder_ii.cc' || echo '$(srcdir)/'`trellis_encoder_ii.cc + +_trellis_la-trellis_encoder_si.lo: trellis_encoder_si.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_encoder_si.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_encoder_si.Tpo -c -o _trellis_la-trellis_encoder_si.lo `test -f 'trellis_encoder_si.cc' || echo '$(srcdir)/'`trellis_encoder_si.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_encoder_si.Tpo $(DEPDIR)/_trellis_la-trellis_encoder_si.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_encoder_si.cc' object='_trellis_la-trellis_encoder_si.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_encoder_si.lo `test -f 'trellis_encoder_si.cc' || echo '$(srcdir)/'`trellis_encoder_si.cc + +_trellis_la-trellis_encoder_ss.lo: trellis_encoder_ss.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_encoder_ss.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_encoder_ss.Tpo -c -o _trellis_la-trellis_encoder_ss.lo `test -f 'trellis_encoder_ss.cc' || echo '$(srcdir)/'`trellis_encoder_ss.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_encoder_ss.Tpo $(DEPDIR)/_trellis_la-trellis_encoder_ss.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_encoder_ss.cc' object='_trellis_la-trellis_encoder_ss.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_encoder_ss.lo `test -f 'trellis_encoder_ss.cc' || echo '$(srcdir)/'`trellis_encoder_ss.cc + +_trellis_la-trellis_metrics_c.lo: trellis_metrics_c.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_metrics_c.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_metrics_c.Tpo -c -o _trellis_la-trellis_metrics_c.lo `test -f 'trellis_metrics_c.cc' || echo '$(srcdir)/'`trellis_metrics_c.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_metrics_c.Tpo $(DEPDIR)/_trellis_la-trellis_metrics_c.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_metrics_c.cc' object='_trellis_la-trellis_metrics_c.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_metrics_c.lo `test -f 'trellis_metrics_c.cc' || echo '$(srcdir)/'`trellis_metrics_c.cc + +_trellis_la-trellis_metrics_f.lo: trellis_metrics_f.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_metrics_f.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_metrics_f.Tpo -c -o _trellis_la-trellis_metrics_f.lo `test -f 'trellis_metrics_f.cc' || echo '$(srcdir)/'`trellis_metrics_f.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_metrics_f.Tpo $(DEPDIR)/_trellis_la-trellis_metrics_f.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_metrics_f.cc' object='_trellis_la-trellis_metrics_f.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_metrics_f.lo `test -f 'trellis_metrics_f.cc' || echo '$(srcdir)/'`trellis_metrics_f.cc + +_trellis_la-trellis_metrics_i.lo: trellis_metrics_i.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_metrics_i.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_metrics_i.Tpo -c -o _trellis_la-trellis_metrics_i.lo `test -f 'trellis_metrics_i.cc' || echo '$(srcdir)/'`trellis_metrics_i.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_metrics_i.Tpo $(DEPDIR)/_trellis_la-trellis_metrics_i.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_metrics_i.cc' object='_trellis_la-trellis_metrics_i.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_metrics_i.lo `test -f 'trellis_metrics_i.cc' || echo '$(srcdir)/'`trellis_metrics_i.cc + +_trellis_la-trellis_metrics_s.lo: trellis_metrics_s.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_metrics_s.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_metrics_s.Tpo -c -o _trellis_la-trellis_metrics_s.lo `test -f 'trellis_metrics_s.cc' || echo '$(srcdir)/'`trellis_metrics_s.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_metrics_s.Tpo $(DEPDIR)/_trellis_la-trellis_metrics_s.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_metrics_s.cc' object='_trellis_la-trellis_metrics_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_metrics_s.lo `test -f 'trellis_metrics_s.cc' || echo '$(srcdir)/'`trellis_metrics_s.cc + +_trellis_la-trellis_viterbi_b.lo: trellis_viterbi_b.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_b.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_b.Tpo -c -o _trellis_la-trellis_viterbi_b.lo `test -f 'trellis_viterbi_b.cc' || echo '$(srcdir)/'`trellis_viterbi_b.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_b.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_b.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_b.cc' object='_trellis_la-trellis_viterbi_b.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_b.lo `test -f 'trellis_viterbi_b.cc' || echo '$(srcdir)/'`trellis_viterbi_b.cc + +_trellis_la-trellis_viterbi_combined_cb.lo: trellis_viterbi_combined_cb.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_cb.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_cb.Tpo -c -o _trellis_la-trellis_viterbi_combined_cb.lo `test -f 'trellis_viterbi_combined_cb.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_cb.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_cb.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_cb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_cb.cc' object='_trellis_la-trellis_viterbi_combined_cb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_cb.lo `test -f 'trellis_viterbi_combined_cb.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_cb.cc + +_trellis_la-trellis_viterbi_combined_ci.lo: trellis_viterbi_combined_ci.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_ci.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ci.Tpo -c -o _trellis_la-trellis_viterbi_combined_ci.lo `test -f 'trellis_viterbi_combined_ci.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ci.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ci.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ci.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_ci.cc' object='_trellis_la-trellis_viterbi_combined_ci.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_ci.lo `test -f 'trellis_viterbi_combined_ci.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ci.cc + +_trellis_la-trellis_viterbi_combined_cs.lo: trellis_viterbi_combined_cs.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_cs.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_cs.Tpo -c -o _trellis_la-trellis_viterbi_combined_cs.lo `test -f 'trellis_viterbi_combined_cs.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_cs.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_cs.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_cs.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_cs.cc' object='_trellis_la-trellis_viterbi_combined_cs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_cs.lo `test -f 'trellis_viterbi_combined_cs.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_cs.cc + +_trellis_la-trellis_viterbi_combined_fb.lo: trellis_viterbi_combined_fb.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_fb.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fb.Tpo -c -o _trellis_la-trellis_viterbi_combined_fb.lo `test -f 'trellis_viterbi_combined_fb.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_fb.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fb.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_fb.cc' object='_trellis_la-trellis_viterbi_combined_fb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_fb.lo `test -f 'trellis_viterbi_combined_fb.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_fb.cc + +_trellis_la-trellis_viterbi_combined_fi.lo: trellis_viterbi_combined_fi.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_fi.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fi.Tpo -c -o _trellis_la-trellis_viterbi_combined_fi.lo `test -f 'trellis_viterbi_combined_fi.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_fi.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fi.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fi.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_fi.cc' object='_trellis_la-trellis_viterbi_combined_fi.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_fi.lo `test -f 'trellis_viterbi_combined_fi.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_fi.cc + +_trellis_la-trellis_viterbi_combined_fs.lo: trellis_viterbi_combined_fs.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_fs.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fs.Tpo -c -o _trellis_la-trellis_viterbi_combined_fs.lo `test -f 'trellis_viterbi_combined_fs.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_fs.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fs.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_fs.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_fs.cc' object='_trellis_la-trellis_viterbi_combined_fs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_fs.lo `test -f 'trellis_viterbi_combined_fs.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_fs.cc + +_trellis_la-trellis_viterbi_combined_ib.lo: trellis_viterbi_combined_ib.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_ib.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ib.Tpo -c -o _trellis_la-trellis_viterbi_combined_ib.lo `test -f 'trellis_viterbi_combined_ib.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ib.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ib.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ib.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_ib.cc' object='_trellis_la-trellis_viterbi_combined_ib.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_ib.lo `test -f 'trellis_viterbi_combined_ib.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ib.cc + +_trellis_la-trellis_viterbi_combined_ii.lo: trellis_viterbi_combined_ii.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_ii.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ii.Tpo -c -o _trellis_la-trellis_viterbi_combined_ii.lo `test -f 'trellis_viterbi_combined_ii.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ii.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ii.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ii.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_ii.cc' object='_trellis_la-trellis_viterbi_combined_ii.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_ii.lo `test -f 'trellis_viterbi_combined_ii.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ii.cc + +_trellis_la-trellis_viterbi_combined_is.lo: trellis_viterbi_combined_is.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_is.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_is.Tpo -c -o _trellis_la-trellis_viterbi_combined_is.lo `test -f 'trellis_viterbi_combined_is.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_is.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_is.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_is.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_is.cc' object='_trellis_la-trellis_viterbi_combined_is.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_is.lo `test -f 'trellis_viterbi_combined_is.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_is.cc + +_trellis_la-trellis_viterbi_combined_sb.lo: trellis_viterbi_combined_sb.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_sb.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_sb.Tpo -c -o _trellis_la-trellis_viterbi_combined_sb.lo `test -f 'trellis_viterbi_combined_sb.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_sb.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_sb.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_sb.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_sb.cc' object='_trellis_la-trellis_viterbi_combined_sb.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_sb.lo `test -f 'trellis_viterbi_combined_sb.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_sb.cc + +_trellis_la-trellis_viterbi_combined_si.lo: trellis_viterbi_combined_si.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_si.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_si.Tpo -c -o _trellis_la-trellis_viterbi_combined_si.lo `test -f 'trellis_viterbi_combined_si.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_si.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_si.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_si.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_si.cc' object='_trellis_la-trellis_viterbi_combined_si.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_si.lo `test -f 'trellis_viterbi_combined_si.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_si.cc + +_trellis_la-trellis_viterbi_combined_ss.lo: trellis_viterbi_combined_ss.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_combined_ss.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ss.Tpo -c -o _trellis_la-trellis_viterbi_combined_ss.lo `test -f 'trellis_viterbi_combined_ss.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ss.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ss.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_combined_ss.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_combined_ss.cc' object='_trellis_la-trellis_viterbi_combined_ss.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_combined_ss.lo `test -f 'trellis_viterbi_combined_ss.cc' || echo '$(srcdir)/'`trellis_viterbi_combined_ss.cc + +_trellis_la-trellis_viterbi_i.lo: trellis_viterbi_i.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_i.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_i.Tpo -c -o _trellis_la-trellis_viterbi_i.lo `test -f 'trellis_viterbi_i.cc' || echo '$(srcdir)/'`trellis_viterbi_i.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_i.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_i.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_i.cc' object='_trellis_la-trellis_viterbi_i.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_i.lo `test -f 'trellis_viterbi_i.cc' || echo '$(srcdir)/'`trellis_viterbi_i.cc + +_trellis_la-trellis_viterbi_s.lo: trellis_viterbi_s.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -MT _trellis_la-trellis_viterbi_s.lo -MD -MP -MF $(DEPDIR)/_trellis_la-trellis_viterbi_s.Tpo -c -o _trellis_la-trellis_viterbi_s.lo `test -f 'trellis_viterbi_s.cc' || echo '$(srcdir)/'`trellis_viterbi_s.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_trellis_la-trellis_viterbi_s.Tpo $(DEPDIR)/_trellis_la-trellis_viterbi_s.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='trellis_viterbi_s.cc' object='_trellis_la-trellis_viterbi_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_trellis_la_CXXFLAGS) $(CXXFLAGS) -c -o _trellis_la-trellis_viterbi_s.lo `test -f 'trellis_viterbi_s.cc' || echo '$(srcdir)/'`trellis_viterbi_s.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-trellis_pythonPYTHON: $(trellis_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(trellis_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(trellis_pythondir)" + @list='$(trellis_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(trellis_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(trellis_pythondir)/$$f'"; \ + $(trellis_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(trellis_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(trellis_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(trellis_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-trellis_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(trellis_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(trellis_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(trellis_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(trellis_pythondir)/$${f}o"; \ done install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -751,22 +1518,22 @@ uninstall-grincludeHEADERS: echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-trellis_swigincludeHEADERS: $(trellis_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(trellis_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(trellis_swigincludedir)" + @list='$(trellis_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(trellis_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(trellis_swigincludedir)/$$f'"; \ + $(trellis_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(trellis_swigincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-trellis_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(trellis_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(trellis_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(trellis_swigincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -774,8 +1541,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -787,8 +1554,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -798,13 +1565,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -818,23 +1584,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. $(distdir)/../../../gr-trellis/src/lib - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -853,8 +1617,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(trellis_pylibdir)" "$(DESTDIR)$(trellis_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(trellis_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -885,14 +1649,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ +clean-am: clean-generic clean-libtool clean-trellis_pylibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -904,15 +1668,24 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-grincludeHEADERS \ + install-trellis_pylibLTLIBRARIES install-trellis_pythonPYTHON \ + install-trellis_swigincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -933,34 +1706,166 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS \ + uninstall-trellis_pylibLTLIBRARIES \ + uninstall-trellis_pythonPYTHON \ + uninstall-trellis_swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-ourlibLTLIBRARIES ctags dist-hook \ + clean-libtool clean-trellis_pylibLTLIBRARIES ctags dist-hook \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-trellis_pylibLTLIBRARIES \ + install-trellis_pythonPYTHON \ + install-trellis_swigincludeHEADERS installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS + uninstall-trellis_pylibLTLIBRARIES \ + uninstall-trellis_pythonPYTHON \ + uninstall-trellis_swigincludeHEADERS -trellis.cc trellis.py: $(ALL_IFILES) $(grinclude_HEADERS) - $(SWIG) $(SWIGPYTHONARGS) -module trellis -o trellis.cc $(LOCAL_IFILES) +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -# Don't distribute output of swig +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile $(srcdir)/Makefile.gen: + @trap 'rm -rf $(DEPDIR)/Makefile.gen-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/Makefile.gen-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/Makefile.gen-generate-stamp; \ + rm -f $(DEPDIR)/Makefile.gen-generate-tmp; \ + touch $(DEPDIR)/Makefile.gen-generate-tmp; \ + do_recreate=0; \ + if test -f $(srcdir)/Makefile.gen; then \ + if $(RM) $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.gen"; \ + $(makefile_gen_gen_command); \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; \ + mv -f $(DEPDIR)/Makefile.gen-generate-tmp $(DEPDIR)/Makefile.gen-generate-stamp; \ + rmdir $(DEPDIR)/Makefile.gen-generate-lock; \ + else \ + while test -d $(DEPDIR)/Makefile.gen-generate-lock; do sleep 1; done; \ + test -f $(DEPDIR)/Makefile.gen-generate-stamp; exit $$?; \ + fi; + +STAMPS ?= +EXTRA_DIST ?= +MOSTLYCLEANFILES ?= + +stamp-sources-generate: $(gen_sources_deps) + @rm -f $(DEPDIR)/stamp-sources-generate-tmp + @touch $(DEPDIR)/stamp-sources-generate-tmp + $(par_gen_command) + @mv -f $(DEPDIR)/stamp-sources-generate-tmp $@ + +$(gen_sources): stamp-sources-generate + @if test -f $@; then :; else \ + trap 'rm -rf $(DEPDIR)/stamp-sources-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/stamp-sources-generate-lock 2>/dev/null; then \ + rm -f stamp-sources-generate; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-sources-generate; \ + rmdir $(DEPDIR)/stamp-sources-generate-lock; \ + else \ + while test -d $(DEPDIR)/stamp-sources-generate-lock; do sleep 1; done; \ + test -f stamp-sources-generate; exit $$?; \ + fi; \ + fi; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +trellis_pythondir_category ?= gnuradio/trellis +trellis_pylibdir_category ?= $(trellis_pythondir_category) + +trellis.h trellis.py trellis.cc: trellis.i + trap 'rm -rf $(DEPDIR)/trellis-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/trellis-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/trellis-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/trellis-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/trellis-generate-lock; \ + else \ + while test -d $(DEPDIR)/trellis-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/trellis-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/trellis-generate-stamp: + 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; + $(RM) $(DEPDIR)/trellis.d + cp $(DEPDIR)/trellis.Std $(DEPDIR)/trellis.d + echo "" >> $(DEPDIR)/trellis.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/trellis.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/trellis.d + $(RM) $(DEPDIR)/trellis.Std + touch $(DEPDIR)/trellis-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)/trellis.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-trellis/src/lib/Makefile.swig.gen b/gr-trellis/src/lib/Makefile.swig.gen new file mode 100644 index 00000000..1a9656b8 --- /dev/null +++ b/gr-trellis/src/lib/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 trellis.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/trellis +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/trellis +## +## 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. + +trellis_pythondir_category ?= gnuradio/trellis +trellis_pylibdir_category ?= $(trellis_pythondir_category) +trellis_pythondir = $(pythondir)/$(trellis_pythondir_category) +trellis_pylibdir = $(pyexecdir)/$(trellis_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +trellis_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)/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 . + +trellis_swiginclude_HEADERS = \ + trellis.i \ + $(trellis_swiginclude_headers) + +trellis_pylib_LTLIBRARIES = \ + _trellis.la + +_trellis_la_SOURCES = \ + trellis.cc \ + $(trellis_la_swig_sources) + +_trellis_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(trellis_la_swig_libadd) + +_trellis_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(trellis_la_swig_ldflags) + +_trellis_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(trellis_la_swig_cxxflags) + +trellis_python_PYTHON = \ + trellis.py \ + $(trellis_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/trellis.d@am__quote@ + diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc index cbf3bdf6..c65b1345 100644 --- a/gr-trellis/src/lib/fsm.cc +++ b/gr-trellis/src/lib/fsm.cc @@ -21,8 +21,12 @@ */ #include +#include +#include +#include #include #include +#include #include "base.h" #include "fsm.h" @@ -47,7 +51,7 @@ fsm::fsm(const fsm &FSM) d_O=FSM.O(); d_NS=FSM.NS(); d_OS=FSM.OS(); - d_PS=FSM.PS(); + d_PS=FSM.PS(); // is this going to make a deep copy? d_PI=FSM.PI(); d_TMi=FSM.TMi(); d_TMl=FSM.TMl(); @@ -100,7 +104,6 @@ fsm::fsm(const char *name) - //###################################################################### //# Automatically generate the FSM from the generator matrix //# of a (n,k) binary convolutional code @@ -167,7 +170,7 @@ fsm::fsm(int k, int n, const std::vector &G) for(int s=0;s ii(n); + dec2base(i,FSM.I(),ii); + std::vector oo(n); + int ns=s; + for(int k=0;k" << std::endl; + + for( int stage_num = 0;stage_num < number_stages;stage_num ++){ + // draw states + for ( int state_num = 0;state_num < d_S ; state_num ++ ) { + trellis_fname << "" << std::endl; + //draw branches + if(stage_num != number_stages-1){ + for( int branch_num = 0;branch_num < d_I; branch_num++){ + trellis_fname << "" << std::endl; + } + } + } + } + // label the stages + trellis_fname << "" << std::endl; + for( int stage_num = 0;stage_num < number_stages ;stage_num ++){ + trellis_fname << "" << std::endl; + trellis_fname << stage_num << std::endl; + trellis_fname << "" << std::endl; + } + trellis_fname << "" << std::endl; + + // label the states + trellis_fname << "" << std::endl; + for( int state_num = 0;state_num < d_S ; state_num ++){ + trellis_fname << "" << std::endl; + trellis_fname << state_num << std::endl; + trellis_fname << "" << std::endl; + } + trellis_fname << "" << std::endl; + + + trellis_fname << "" << std::endl; +// std::cout << "################## END SVG TRELLIS PIC ##################### " << std::endl; + trellis_fname.close(); +} +//###################################################################### +//# Write trellis specification to a text file, +//# in the same format used when reading FSM files +//###################################################################### +void fsm::write_fsm_txt(std::string filename) +{ + std::ofstream trellis_fname (filename.c_str()); + if (!trellis_fname) {std::cout << "file not found " << std::endl ; exit(-1);} + trellis_fname << d_I << ' ' << d_S << ' ' << d_O << std::endl; + trellis_fname << std::endl; + for(int i=0;i +#include /*! * \brief FSM class @@ -35,8 +36,8 @@ private: int d_O; std::vector d_NS; std::vector d_OS; - std::vector d_PS; - std::vector d_PI; + std::vector< std::vector > d_PS; + std::vector< std::vector > d_PI; std::vector d_TMi; std::vector d_TMl; void generate_PS_PI (); @@ -49,15 +50,20 @@ public: fsm(const char *name); fsm(int k, int n, const std::vector &G); fsm(int mod_size, int ch_length); + fsm(int P, int M, int L); + fsm(const fsm &FSM1, const fsm &FSM2); + fsm(const fsm &FSM, int n); int I () const { return d_I; } int S () const { return d_S; } int O () const { return d_O; } const std::vector & NS () const { return d_NS; } const std::vector & OS () const { return d_OS; } - const std::vector & PS () const { return d_PS; } - const std::vector & PI () const { return d_PI; } + const std::vector< std::vector > & PS () const { return d_PS; } + const std::vector< std::vector > & PI () const { return d_PI; } const std::vector & TMi () const { return d_TMi; } const std::vector & TMl () const { return d_TMl; } + void write_trellis_svg(std::string filename ,int number_stages); + void write_fsm_txt(std::string filename); }; #endif diff --git a/gr-trellis/src/lib/fsm.i b/gr-trellis/src/lib/fsm.i index 004fef98..1e9c7ad8 100644 --- a/gr-trellis/src/lib/fsm.i +++ b/gr-trellis/src/lib/fsm.i @@ -27,8 +27,8 @@ private: int d_O; std::vector d_NS; std::vector d_OS; - std::vector d_PS; - std::vector d_PI; + std::vector< std::vector > d_PS; + std::vector< std::vector > d_PI; std::vector d_TMi; std::vector d_TMl; void generate_PS_PI (); @@ -40,14 +40,20 @@ public: fsm(const char *name); fsm(int k, int n, const std::vector &G); fsm(int mod_size, int ch_length); + fsm(int P, int M, int L); + fsm(const fsm &FSM1, const fsm &FSM2); + fsm(const fsm &FSM, int n); int I () const { return d_I; } int S () const { return d_S; } int O () const { return d_O; } const std::vector & NS () const { return d_NS; } const std::vector & OS () const { return d_OS; } - const std::vector & PS () const { return d_PS; } - const std::vector & PI () const { return d_PI; } + // disable these accessors until we find out how to swig them + //const std::vector< std::vector > & PS () const { return d_PS; } + //const std::vector< std::vector > & PI () const { return d_PI; } const std::vector & TMi () const { return d_TMi; } const std::vector & TMl () const { return d_TMl; } + void fsm::write_trellis_svg(std::string filename ,int number_stages); + void fsm::write_fsm_txt(std::string filename); }; diff --git a/gr-trellis/src/lib/generate_all.py b/gr-trellis/src/lib/generate_all.py new file mode 100644 index 00000000..ee1966b8 --- /dev/null +++ b/gr-trellis/src/lib/generate_all.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 build_utils import output_glue + +import generate_trellis + +def generate_all (): + generate_trellis.generate () + output_glue ('trellis') + +if __name__ == '__main__': + generate_all () diff --git a/gr-trellis/src/lib/generate_trellis.py b/gr-trellis/src/lib/generate_trellis.py new file mode 100644 index 00000000..a4206d26 --- /dev/null +++ b/gr-trellis/src/lib/generate_trellis.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 build_utils import expand_template, copyright, open_and_log_name +from build_utils_codes import * +import re + +# regular blocks + +other_roots = [ + 'trellis_encoder_XX', + 'trellis_metrics_X', + 'trellis_viterbi_X', + 'trellis_viterbi_combined_XX', + ] + +other_signatures = ( + ['bb','bs','bi','ss','si','ii'], + ['s','i','f','c'], + ['b','s','i'], + ['sb','ss','si','ib','is','ii','fb','fs','fi','cb','cs','ci'], + ) + + +def is_byte (code3): + if i_code (code3) == 'b' or o_code (code3) == 'b': + return '1' + else: + return '0' + + +def is_short (code3): + if i_code (code3) == 's' or o_code (code3) == 's': + return '1' + else: + return '0' + + +def is_int (code3): + if i_code (code3) == 'i' or o_code (code3) == 'i': + return '1' + else: + return '0' + + +def is_float (code3): + if i_code (code3) == 'f' or o_code (code3) == 'f': + return '1' + else: + return '0' + + +def is_complex (code3): + if i_code (code3) == 'c' or o_code (code3) == 'c': + return '1' + else: + return '0' + + +def standard_dict (name, code3): + d = {} + d['NAME'] = name + d['GUARD_NAME'] = 'INCLUDED_%s_H' % name.upper () + d['BASE_NAME'] = re.sub ('^trellis_', '', name) + d['SPTR_NAME'] = '%s_sptr' % name + d['WARNING'] = 'WARNING: this file is machine generated. Edits will be over written' + d['COPYRIGHT'] = copyright + d['TYPE'] = i_type (code3) + d['I_TYPE'] = i_type (code3) + d['O_TYPE'] = o_type (code3) + d['TAP_TYPE'] = tap_type (code3) + d['IS_BYTE'] = is_byte (code3) + d['IS_SHORT'] = is_short (code3) + d['IS_INT'] = is_int (code3) + d['IS_FLOAT'] = is_float (code3) + d['IS_COMPLEX'] = is_complex (code3) + return d + + +def expand_h_cc_i (root, sig): + # root looks like 'gr_vector_sink_X' + name = re.sub ('X+', sig, root) + d = standard_dict (name, sig) + expand_template (d, root + '.h.t') + expand_template (d, root + '.cc.t') + expand_template (d, root + '.i.t') + + +def generate (): + i=0 + for r in other_roots : + for s in other_signatures[i]: + expand_h_cc_i (r, s) + i=i+1 + + +if __name__ == '__main__': + generate () diff --git a/gr-trellis/src/lib/interleaver.cc b/gr-trellis/src/lib/interleaver.cc index b4aedcdf..077416f8 100644 --- a/gr-trellis/src/lib/interleaver.cc +++ b/gr-trellis/src/lib/interleaver.cc @@ -23,11 +23,16 @@ #include #include #include +#include +#include #include #include #include "quicksort_index.h" #include "interleaver.h" + + + interleaver::interleaver() { d_K=0; @@ -85,20 +90,19 @@ interleaver::interleaver(const char *name) //###################################################################### //# Generate a random interleaver //###################################################################### -interleaver::interleaver(int K, unsigned int seed) +interleaver::interleaver(int K, int seed) { d_K=K; d_INTER.resize(d_K); d_DEINTER.resize(d_K); - srand(seed); + if(seed>=0) srand((unsigned int)seed); std::vector tmp(d_K); for(int i=0;i (tmp,d_INTER,0,d_K-1); //got to resolve this... - quicksort_index1 (tmp,d_INTER,0,d_K-1); + quicksort_index (tmp,d_INTER,0,d_K-1); // generate DEINTER table for(int i=0;i & INTER); interleaver(const char *name); - interleaver(int K, unsigned int seed); + interleaver(int K, int seed); int K () const { return d_K; } const std::vector & INTER () const { return d_INTER; } const std::vector & DEINTER () const { return d_DEINTER; } + void write_interleaver_txt(std::string filename); }; #endif diff --git a/gr-trellis/src/lib/interleaver.i b/gr-trellis/src/lib/interleaver.i index b82cf199..403c2d09 100644 --- a/gr-trellis/src/lib/interleaver.i +++ b/gr-trellis/src/lib/interleaver.i @@ -30,8 +30,9 @@ public: interleaver(const interleaver & INTERLEAVER); interleaver(int K, const std::vector & INTER); interleaver(const char *name); - interleaver(int K, unsigned int seed); + interleaver(int K, int seed); int K () const { return d_K; } const std::vector & INTER () const { return d_INTER; } const std::vector & DEINTER () const { return d_DEINTER; } + void write_interleaver_txt(std::string filename); }; diff --git a/gr-trellis/src/lib/quicksort_index.cc b/gr-trellis/src/lib/quicksort_index.cc index 45d19678..b75896a2 100644 --- a/gr-trellis/src/lib/quicksort_index.cc +++ b/gr-trellis/src/lib/quicksort_index.cc @@ -22,65 +22,47 @@ #include "quicksort_index.h" -template void SWAP (T & a, T & b) +template +void +SWAP +(T & a, T & b) { -T temp=a; -a=b; -b=temp; + T temp = a; + a = b; + b = temp; } - -template void quicksort_index(std::vector & p, std::vector & index, int left, int right) +template +void +quicksort_index +(std::vector & p, std::vector & index, int left, int right) { - -if (left < right) { + if (left < right) { int i = left; int j = right + 1; T pivot = p[left]; do { - do - i++; - while ((p[i] < pivot) && (i < right)); - do - j--; - while ((p[j] > pivot) && (j > left)); - if (i < j) { - SWAP (p[i],p[j]); - SWAP (index[i],index[j]); - } + do + i++; + while ((p[i] < pivot) && (i < right)); + do + j--; + while ((p[j] > pivot) && (j > left)); + if (i < j) { + SWAP (p[i],p[j]); + SWAP (index[i],index[j]); + } } while (i < j); SWAP (p[left], p[j]); SWAP (index[left], index[j]); quicksort_index (p,index, left, j-1); quicksort_index (p,index, j+1, right); -} -} - - - -void quicksort_index1(std::vector & p, std::vector & index, int left, int right) -{ - -if (left < right) { - int i = left; - int j = right + 1; - int pivot = p[left]; - do { - do - i++; - while ((p[i] < pivot) && (i < right)); - do - j--; - while ((p[j] > pivot) && (j > left)); - if (i < j) { - SWAP (p[i],p[j]); - SWAP (index[i],index[j]); - } - } while (i < j); - SWAP (p[left], p[j]); - SWAP (index[left], index[j]); - quicksort_index1 (p,index, left, j-1); - quicksort_index1 (p,index, j+1, right); -} + } } +// instantiate an version of the quicksort_index +//template void SWAP (int & a, int & b); +template +void +quicksort_index +(std::vector & p, std::vector & index, int left, int right); diff --git a/gr-trellis/src/lib/quicksort_index.h b/gr-trellis/src/lib/quicksort_index.h index d0259c76..da453972 100644 --- a/gr-trellis/src/lib/quicksort_index.h +++ b/gr-trellis/src/lib/quicksort_index.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -25,8 +25,10 @@ #include -template void SWAP (T & a, T & b); -template void quicksort_index(std::vector & p, std::vector & index, int left, int right); -void quicksort_index1(std::vector & p, std::vector & index, int left, int right); +template +void SWAP (T & a, T & b); + +template +void quicksort_index (std::vector & p, std::vector & index, int left, int right); #endif diff --git a/gr-trellis/src/lib/stamp-sources-generate b/gr-trellis/src/lib/stamp-sources-generate new file mode 100644 index 00000000..e69de29b diff --git a/gr-trellis/src/lib/trellis.i b/gr-trellis/src/lib/trellis.i index 6f00f8c3..ed1fe29c 100644 --- a/gr-trellis/src/lib/trellis.i +++ b/gr-trellis/src/lib/trellis.i @@ -1,18 +1,33 @@ /* -*- c++ -*- */ - -%feature("autodoc", "1"); // generate python docstrings - -%include "exception.i" -%import "gnuradio.i" // the common stuff +/* + * 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. + */ + +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "fsm.h" #include "interleaver.h" #include "trellis_permutation.h" #include "trellis_siso_f.h" #include "trellis_siso_combined_f.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-trellis/src/lib/trellis_calc_metric.cc b/gr-trellis/src/lib/trellis_calc_metric.cc index 365333c8..0d03fd1a 100644 --- a/gr-trellis/src/lib/trellis_calc_metric.cc +++ b/gr-trellis/src/lib/trellis_calc_metric.cc @@ -26,18 +26,22 @@ -void calc_metric(int O, int D, const std::vector &TABLE, const short *in, float *metric, trellis_metric_type_t type) +template +void calc_metric(int O, int D, const std::vector &TABLE, const T *in, float *metric, trellis_metric_type_t type) { float minm = FLT_MAX; int minmi = 0; + switch (type){ case TRELLIS_EUCLIDEAN: for(int o=0;o &TABLE, const short *in, for(int o=0;o &TABLE, const short *in, } -void calc_metric(int O, int D, const std::vector &TABLE, const int *in, float *metric, trellis_metric_type_t type) + +template +void calc_metric(int O, int D, const std::vector &TABLE, const short *in, float *metric, trellis_metric_type_t type); + +template +void calc_metric(int O, int D, const std::vector &TABLE, const int *in, float *metric, trellis_metric_type_t type); + +template +void calc_metric(int O, int D, const std::vector &TABLE, const float *in, float *metric, trellis_metric_type_t type); + + +/* +void calc_metric(int O, int D, const std::vector &TABLE, const short *in, float *metric, trellis_metric_type_t type) { float minm = FLT_MAX; int minmi = 0; @@ -106,8 +124,7 @@ void calc_metric(int O, int D, const std::vector &TABLE, const int *in, flo } - -void calc_metric(int O, int D, const std::vector &TABLE, const float *in, float *metric, trellis_metric_type_t type) +void calc_metric(int O, int D, const std::vector &TABLE, const int *in, float *metric, trellis_metric_type_t type) { float minm = FLT_MAX; int minmi = 0; @@ -120,7 +137,7 @@ void calc_metric(int O, int D, const std::vector &TABLE, const float *in, float s=in[m]-TABLE[o*D+m]; metric[o]+=s*s; } - } + } break; case TRELLIS_HARD_SYMBOL: for(int o=0;o &TABLE, const float *in, } -void calc_metric(int O, int D, const std::vector &TABLE, const gr_complex *in, float *metric, trellis_metric_type_t type) + +void calc_metric(int O, int D, const std::vector &TABLE, const float *in, float *metric, trellis_metric_type_t type) { float minm = FLT_MAX; int minmi = 0; @@ -157,16 +175,17 @@ void calc_metric(int O, int D, const std::vector &TABLE, const gr_co for(int o=0;o &TABLE, const gr_co throw std::runtime_error ("Invalid metric type."); } } +*/ -/* -template void calc_metric(int O, int D, const std::vector &TABLE, const T *in, float *metric, trellis_metric_type_t type) + + + +void calc_metric(int O, int D, const std::vector &TABLE, const gr_complex *in, float *metric, trellis_metric_type_t type) { float minm = FLT_MAX; int minmi = 0; + switch (type){ case TRELLIS_EUCLIDEAN: for(int o=0;o void calc_metric(int O, int D, const std::vector &TABLE, c for(int o=0;o void calc_metric(int O, int D, const std::vector &TABLE, c throw std::runtime_error ("Invalid metric type."); } } -*/ diff --git a/gr-trellis/src/lib/trellis_calc_metric.h b/gr-trellis/src/lib/trellis_calc_metric.h index 6eca0628..fabf4e14 100644 --- a/gr-trellis/src/lib/trellis_calc_metric.h +++ b/gr-trellis/src/lib/trellis_calc_metric.h @@ -28,15 +28,19 @@ #include +template +void calc_metric(int O, int D, const std::vector &TABLE, const T *in, float *metric, trellis_metric_type_t type); + +/* void calc_metric(int O, int D, const std::vector &TABLE, const short *in, float *metric, trellis_metric_type_t type); void calc_metric(int O, int D, const std::vector &TABLE, const int *in, float *metric, trellis_metric_type_t type); void calc_metric(int O, int D, const std::vector &TABLE, const float *in, float *metric, trellis_metric_type_t type); +*/ void calc_metric(int O, int D, const std::vector &TABLE, const gr_complex *in, float *metric, trellis_metric_type_t type); -//template void calc_metric(int O, int D, const std::vector &TABLE, const T *in, float *metric, trellis_metric_type_t type); #endif diff --git a/gr-trellis/src/lib/trellis_encoder_XX.cc.t b/gr-trellis/src/lib/trellis_encoder_XX.cc.t new file mode 100644 index 00000000..1985fa46 --- /dev/null +++ b/gr-trellis/src/lib/trellis_encoder_XX.cc.t @@ -0,0 +1,76 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include +#include + +@SPTR_NAME@ +trellis_make_@BASE_NAME@ (const fsm &FSM, int ST) +{ + return @SPTR_NAME@ (new @NAME@ (FSM,ST)); +} + +@NAME@::@NAME@ (const fsm &FSM, int ST) + : gr_sync_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, -1, sizeof (@O_TYPE@))), + d_FSM (FSM), + d_ST (ST) +{ +} + + + +int +@NAME@::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + int ST_tmp=0; + + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + + for (int m=0;m + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); + +/*! + * \brief Convolutional encoder. + * \ingroup coding_blk + */ +class @NAME@ : public gr_sync_block +{ +private: + friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); + fsm d_FSM; + int d_ST; + @NAME@ (const fsm &FSM, int ST); + +public: + fsm FSM () const { return d_FSM; } + int ST () const { return d_ST; } + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_encoder_XX.i.t b/gr-trellis/src/lib/trellis_encoder_XX.i.t new file mode 100644 index 00000000..29c9c4db --- /dev/null +++ b/gr-trellis/src/lib/trellis_encoder_XX.i.t @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@); + +@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST); + +class @NAME@ : public gr_sync_block +{ +private: + @NAME@ (const fsm &FSM, int ST); +public: + fsm FSM () const { return d_FSM; } + int ST () const { return d_ST; } +}; diff --git a/gr-trellis/src/lib/trellis_encoder_bb.cc b/gr-trellis/src/lib/trellis_encoder_bb.cc index f3ddf2b1..36e45b9f 100644 --- a/gr-trellis/src/lib/trellis_encoder_bb.cc +++ b/gr-trellis/src/lib/trellis_encoder_bb.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -50,7 +52,7 @@ trellis_encoder_bb::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ST_tmp; + int ST_tmp=0; assert (input_items.size() == output_items.size()); int nstreams = input_items.size(); diff --git a/gr-trellis/src/lib/trellis_encoder_bb.h b/gr-trellis/src/lib/trellis_encoder_bb.h index 35e1cb00..a9c16216 100644 --- a/gr-trellis/src/lib/trellis_encoder_bb.h +++ b/gr-trellis/src/lib/trellis_encoder_bb.h @@ -35,9 +35,7 @@ trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_encoder_bb : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_encoder_bi.cc b/gr-trellis/src/lib/trellis_encoder_bi.cc index 547986cc..6152d62d 100644 --- a/gr-trellis/src/lib/trellis_encoder_bi.cc +++ b/gr-trellis/src/lib/trellis_encoder_bi.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -50,7 +52,7 @@ trellis_encoder_bi::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ST_tmp; + int ST_tmp=0; assert (input_items.size() == output_items.size()); int nstreams = input_items.size(); diff --git a/gr-trellis/src/lib/trellis_encoder_bi.h b/gr-trellis/src/lib/trellis_encoder_bi.h index 939a2f9f..fffa3d76 100644 --- a/gr-trellis/src/lib/trellis_encoder_bi.h +++ b/gr-trellis/src/lib/trellis_encoder_bi.h @@ -35,9 +35,7 @@ trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_encoder_bi : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_encoder_bs.cc b/gr-trellis/src/lib/trellis_encoder_bs.cc index 594c70ef..1c6fcef2 100644 --- a/gr-trellis/src/lib/trellis_encoder_bs.cc +++ b/gr-trellis/src/lib/trellis_encoder_bs.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -50,7 +52,7 @@ trellis_encoder_bs::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ST_tmp; + int ST_tmp=0; assert (input_items.size() == output_items.size()); int nstreams = input_items.size(); diff --git a/gr-trellis/src/lib/trellis_encoder_bs.h b/gr-trellis/src/lib/trellis_encoder_bs.h index 9d48d6a9..db991de7 100644 --- a/gr-trellis/src/lib/trellis_encoder_bs.h +++ b/gr-trellis/src/lib/trellis_encoder_bs.h @@ -35,9 +35,7 @@ trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_encoder_bs : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_encoder_ii.cc b/gr-trellis/src/lib/trellis_encoder_ii.cc index 9fe41646..6b725868 100644 --- a/gr-trellis/src/lib/trellis_encoder_ii.cc +++ b/gr-trellis/src/lib/trellis_encoder_ii.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -50,7 +52,7 @@ trellis_encoder_ii::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ST_tmp; + int ST_tmp=0; assert (input_items.size() == output_items.size()); int nstreams = input_items.size(); diff --git a/gr-trellis/src/lib/trellis_encoder_ii.h b/gr-trellis/src/lib/trellis_encoder_ii.h index e01b7bf5..94b94e2d 100644 --- a/gr-trellis/src/lib/trellis_encoder_ii.h +++ b/gr-trellis/src/lib/trellis_encoder_ii.h @@ -35,9 +35,7 @@ trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_encoder_ii : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_encoder_si.cc b/gr-trellis/src/lib/trellis_encoder_si.cc index c791a1fd..6ee93066 100644 --- a/gr-trellis/src/lib/trellis_encoder_si.cc +++ b/gr-trellis/src/lib/trellis_encoder_si.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -50,7 +52,7 @@ trellis_encoder_si::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ST_tmp; + int ST_tmp=0; assert (input_items.size() == output_items.size()); int nstreams = input_items.size(); diff --git a/gr-trellis/src/lib/trellis_encoder_si.h b/gr-trellis/src/lib/trellis_encoder_si.h index b6361e54..2799cbbd 100644 --- a/gr-trellis/src/lib/trellis_encoder_si.h +++ b/gr-trellis/src/lib/trellis_encoder_si.h @@ -35,9 +35,7 @@ trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_encoder_si : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_encoder_ss.cc b/gr-trellis/src/lib/trellis_encoder_ss.cc index 95fd0173..cc6b0da1 100644 --- a/gr-trellis/src/lib/trellis_encoder_ss.cc +++ b/gr-trellis/src/lib/trellis_encoder_ss.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -50,7 +52,7 @@ trellis_encoder_ss::work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ST_tmp; + int ST_tmp=0; assert (input_items.size() == output_items.size()); int nstreams = input_items.size(); diff --git a/gr-trellis/src/lib/trellis_encoder_ss.h b/gr-trellis/src/lib/trellis_encoder_ss.h index 9b429b01..cafe5d64 100644 --- a/gr-trellis/src/lib/trellis_encoder_ss.h +++ b/gr-trellis/src/lib/trellis_encoder_ss.h @@ -35,9 +35,7 @@ trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, int ST); /*! * \brief Convolutional encoder. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_encoder_ss : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_generated.i b/gr-trellis/src/lib/trellis_generated.i index 464ffacb..7a379bdc 100644 --- a/gr-trellis/src/lib/trellis_generated.i +++ b/gr-trellis/src/lib/trellis_generated.i @@ -13,9 +13,18 @@ #include #include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include %} @@ -31,8 +40,17 @@ %include %include %include -%include -%include -%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include %include %include diff --git a/gr-trellis/src/lib/trellis_metrics_X.cc.t b/gr-trellis/src/lib/trellis_metrics_X.cc.t new file mode 100644 index 00000000..bced13c0 --- /dev/null +++ b/gr-trellis/src/lib/trellis_metrics_X.cc.t @@ -0,0 +1,97 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifndef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include +#include +#include +#include + + +@SPTR_NAME@ +trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE) +{ + return @SPTR_NAME@ (new @NAME@ (O,D,TABLE,TYPE)); +} + + + +@NAME@::@NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE) + : gr_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, -1, sizeof (float))), + d_O (O), + d_D (D), + d_TYPE (TYPE), + d_TABLE (TABLE) +{ + set_relative_rate (1.0 * d_O / ((double) d_D)); + set_output_multiple ((int)d_O); +} + +void @NAME@::set_TABLE (const std::vector<@I_TYPE@> &table) +{ + d_TABLE = table; +} + + +void +@NAME@::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_O == 0); + int input_required = d_D * noutput_items / d_O; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) + ninput_items_required[i] = input_required; +} + + + +int +@NAME@::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + + assert (noutput_items % d_O == 0); + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + +for (int m=0;m +#include "trellis_calc_metric.h" + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + +/*! + * \brief Evaluate metrics for use by the Viterbi algorithm. + * \ingroup coding_blk + */ +class @NAME@ : public gr_block +{ + int d_O; + int d_D; + trellis_metric_type_t d_TYPE; + std::vector<@I_TYPE@> d_TABLE; + + friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + @NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + +public: + int O () const { return d_O; } + int D () const { return d_D; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + std::vector<@I_TYPE@> TABLE () const { return d_TABLE; } + void set_TABLE (const std::vector<@I_TYPE@> &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + + +#endif diff --git a/gr-trellis/src/lib/trellis_metrics_X.i.t b/gr-trellis/src/lib/trellis_metrics_X.i.t new file mode 100644 index 00000000..50aa7a76 --- /dev/null +++ b/gr-trellis/src/lib/trellis_metrics_X.i.t @@ -0,0 +1,40 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@); + +@SPTR_NAME@ trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + +class @NAME@ : public gr_block +{ +private: + @NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE); + +public: + int O () const { return d_O; } + int D () const { return d_D; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + void set_TABLE (const std::vector<@I_TYPE@> &table); + std::vector<@I_TYPE@> TABLE () const { return d_TABLE; } +}; diff --git a/gr-trellis/src/lib/trellis_metrics_c.cc b/gr-trellis/src/lib/trellis_metrics_c.cc index c2291ea9..4fac9f6d 100644 --- a/gr-trellis/src/lib/trellis_metrics_c.cc +++ b/gr-trellis/src/lib/trellis_metrics_c.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifndef HAVE_CONFIG_H #include "config.h" #endif @@ -52,7 +54,10 @@ trellis_metrics_c::trellis_metrics_c (int O, int D, const std::vector &table) +{ + d_TABLE = table; +} void @@ -83,17 +88,6 @@ for (int m=0;m TABLE () const { return d_TABLE; } + void set_TABLE (const std::vector &table); void forecast (int noutput_items, gr_vector_int &ninput_items_required); int general_work (int noutput_items, diff --git a/gr-trellis/src/lib/trellis_metrics_c.i b/gr-trellis/src/lib/trellis_metrics_c.i index 7dd57046..37b6ba98 100644 --- a/gr-trellis/src/lib/trellis_metrics_c.i +++ b/gr-trellis/src/lib/trellis_metrics_c.i @@ -35,5 +35,6 @@ public: int O () const { return d_O; } int D () const { return d_D; } trellis_metric_type_t TYPE () const { return d_TYPE; } + void set_TABLE (const std::vector &table); std::vector TABLE () const { return d_TABLE; } }; diff --git a/gr-trellis/src/lib/trellis_metrics_f.cc b/gr-trellis/src/lib/trellis_metrics_f.cc index 6ce64cb6..1fb06408 100644 --- a/gr-trellis/src/lib/trellis_metrics_f.cc +++ b/gr-trellis/src/lib/trellis_metrics_f.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifndef HAVE_CONFIG_H #include "config.h" #endif @@ -52,7 +54,10 @@ trellis_metrics_f::trellis_metrics_f (int O, int D, const std::vector &T set_output_multiple ((int)d_O); } - +void trellis_metrics_f::set_TABLE (const std::vector &table) +{ + d_TABLE = table; +} void @@ -83,17 +88,6 @@ for (int m=0;m TABLE () const { return d_TABLE; } + void set_TABLE (const std::vector &table); void forecast (int noutput_items, gr_vector_int &ninput_items_required); int general_work (int noutput_items, diff --git a/gr-trellis/src/lib/trellis_metrics_f.i b/gr-trellis/src/lib/trellis_metrics_f.i index ed66937a..34136299 100644 --- a/gr-trellis/src/lib/trellis_metrics_f.i +++ b/gr-trellis/src/lib/trellis_metrics_f.i @@ -35,5 +35,6 @@ public: int O () const { return d_O; } int D () const { return d_D; } trellis_metric_type_t TYPE () const { return d_TYPE; } + void set_TABLE (const std::vector &table); std::vector TABLE () const { return d_TABLE; } }; diff --git a/gr-trellis/src/lib/trellis_metrics_i.cc b/gr-trellis/src/lib/trellis_metrics_i.cc index 5b3fd69f..251f4594 100644 --- a/gr-trellis/src/lib/trellis_metrics_i.cc +++ b/gr-trellis/src/lib/trellis_metrics_i.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifndef HAVE_CONFIG_H #include "config.h" #endif @@ -52,7 +54,10 @@ trellis_metrics_i::trellis_metrics_i (int O, int D, const std::vector &TAB set_output_multiple ((int)d_O); } - +void trellis_metrics_i::set_TABLE (const std::vector &table) +{ + d_TABLE = table; +} void @@ -83,17 +88,6 @@ for (int m=0;m TABLE () const { return d_TABLE; } + void set_TABLE (const std::vector &table); void forecast (int noutput_items, gr_vector_int &ninput_items_required); int general_work (int noutput_items, diff --git a/gr-trellis/src/lib/trellis_metrics_i.i b/gr-trellis/src/lib/trellis_metrics_i.i index a9830ed7..67ed867f 100644 --- a/gr-trellis/src/lib/trellis_metrics_i.i +++ b/gr-trellis/src/lib/trellis_metrics_i.i @@ -35,5 +35,6 @@ public: int O () const { return d_O; } int D () const { return d_D; } trellis_metric_type_t TYPE () const { return d_TYPE; } + void set_TABLE (const std::vector &table); std::vector TABLE () const { return d_TABLE; } }; diff --git a/gr-trellis/src/lib/trellis_metrics_s.cc b/gr-trellis/src/lib/trellis_metrics_s.cc index 8211de35..db21fdbc 100644 --- a/gr-trellis/src/lib/trellis_metrics_s.cc +++ b/gr-trellis/src/lib/trellis_metrics_s.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifndef HAVE_CONFIG_H #include "config.h" #endif @@ -52,7 +54,10 @@ trellis_metrics_s::trellis_metrics_s (int O, int D, const std::vector &T set_output_multiple ((int)d_O); } - +void trellis_metrics_s::set_TABLE (const std::vector &table) +{ + d_TABLE = table; +} void @@ -83,17 +88,6 @@ for (int m=0;m TABLE () const { return d_TABLE; } + void set_TABLE (const std::vector &table); void forecast (int noutput_items, gr_vector_int &ninput_items_required); int general_work (int noutput_items, diff --git a/gr-trellis/src/lib/trellis_metrics_s.i b/gr-trellis/src/lib/trellis_metrics_s.i index 62f358d4..207c0a7e 100644 --- a/gr-trellis/src/lib/trellis_metrics_s.i +++ b/gr-trellis/src/lib/trellis_metrics_s.i @@ -35,5 +35,6 @@ public: int O () const { return d_O; } int D () const { return d_D; } trellis_metric_type_t TYPE () const { return d_TYPE; } + void set_TABLE (const std::vector &table); std::vector TABLE () const { return d_TABLE; } }; diff --git a/gr-trellis/src/lib/trellis_permutation.cc b/gr-trellis/src/lib/trellis_permutation.cc index 161b6ee4..c80d820c 100644 --- a/gr-trellis/src/lib/trellis_permutation.cc +++ b/gr-trellis/src/lib/trellis_permutation.cc @@ -27,6 +27,7 @@ #include #include #include +#include trellis_permutation_sptr trellis_make_permutation (int K, const std::vector &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT) diff --git a/gr-trellis/src/lib/trellis_permutation.h b/gr-trellis/src/lib/trellis_permutation.h index 2f52c2a9..5505caf8 100644 --- a/gr-trellis/src/lib/trellis_permutation.h +++ b/gr-trellis/src/lib/trellis_permutation.h @@ -34,9 +34,7 @@ trellis_permutation_sptr trellis_make_permutation (int K, const std::vector /*! * \brief Permutation. - * \ingroup block - * - * + * \ingroup coding_blk */ class trellis_permutation : public gr_sync_block { diff --git a/gr-trellis/src/lib/trellis_siso_combined_f.cc b/gr-trellis/src/lib/trellis_siso_combined_f.cc index 125e47a0..c8181d10 100644 --- a/gr-trellis/src/lib/trellis_siso_combined_f.cc +++ b/gr-trellis/src/lib/trellis_siso_combined_f.cc @@ -138,8 +138,8 @@ inline float min_star(float a, float b) void siso_algorithm_combined(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, bool POSTI, bool POSTO, @@ -171,9 +171,9 @@ void siso_algorithm_combined(int I, int S, int O, norm=INF; for(int j=0;j &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, bool POSTI, bool POSTO, @@ -157,9 +157,9 @@ void siso_algorithm(int I, int S, int O, norm=INF; for(int j=0;j +#include +#include +#include + +static const float INF = 1.0e9; + +@SPTR_NAME@ +trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK) +{ + return @SPTR_NAME@ (new @NAME@ (FSM,K,S0,SK)); +} + +@NAME@::@NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK) + : gr_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (float)), + gr_make_io_signature (1, -1, sizeof (@TYPE@))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_FSM.O())); + set_output_multiple (d_K); +} + + +void +@NAME@::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_FSM.O() * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + const float *in, @TYPE@ *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + int alphai; + float norm,mm,minm; + int minmi; + int st; + + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (@TYPE@) PI[st][i0]; + st=PS[st][i0]; + } + +} + + + + + + +int +@NAME@::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK); + + + +/*! + * \ingroup coding_blk + */ +class @NAME@ : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + //std::vector d_trace; + + friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK); + + + @NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + //std::vector trace () const { return d_trace; } + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_X.i.t b/gr-trellis/src/lib/trellis_viterbi_X.i.t new file mode 100644 index 00000000..063f4a1b --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_X.i.t @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@); + +@SPTR_NAME@ trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK); + + +class @NAME@ : public gr_block +{ +private: + @NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + //std::vector trace () const { return d_trace; } +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_b.cc b/gr-trellis/src/lib/trellis_viterbi_b.cc index 91792aa7..ead61b19 100644 --- a/gr-trellis/src/lib/trellis_viterbi_b.cc +++ b/gr-trellis/src/lib/trellis_viterbi_b.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -77,8 +79,8 @@ trellis_viterbi_b::forecast (int noutput_items, gr_vector_int &ninput_items_requ void viterbi_algorithm(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, unsigned char *out)//, @@ -106,9 +108,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (unsigned char) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; } } diff --git a/gr-trellis/src/lib/trellis_viterbi_b.h b/gr-trellis/src/lib/trellis_viterbi_b.h index aa8cc1e0..8d6e8bd4 100644 --- a/gr-trellis/src/lib/trellis_viterbi_b.h +++ b/gr-trellis/src/lib/trellis_viterbi_b.h @@ -39,6 +39,9 @@ trellis_viterbi_b_sptr trellis_make_viterbi_b ( +/*! + * \ingroup coding_blk + */ class trellis_viterbi_b : public gr_block { fsm d_FSM; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_XX.cc.t b/gr-trellis/src/lib/trellis_viterbi_combined_XX.cc.t new file mode 100644 index 00000000..e343a496 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_XX.cc.t @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <@NAME@.h> +#include +#include +#include + +static const float INF = 1.0e9; + +@SPTR_NAME@ +trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE) +{ + return @SPTR_NAME@ (new @NAME@ (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +@NAME@::@NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("@BASE_NAME@", + gr_make_io_signature (1, -1, sizeof (@I_TYPE@)), + gr_make_io_signature (1, -1, sizeof (@O_TYPE@))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void @NAME@::set_TABLE(const std::vector<@I_TYPE@> &table) +{ + d_TABLE = table; +} + +void +@NAME@::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE, + const @I_TYPE@ *in, @O_TYPE@ *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (@O_TYPE@) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +@NAME@::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class @NAME@; +typedef boost::shared_ptr<@NAME@> @SPTR_NAME@; + +@SPTR_NAME@ trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class @NAME@ : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector<@I_TYPE@> d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend @SPTR_NAME@ trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE); + + + @NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector<@I_TYPE@> TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector<@I_TYPE@> &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_XX.i.t b/gr-trellis/src/lib/trellis_viterbi_combined_XX.i.t new file mode 100644 index 00000000..633ded77 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_XX.i.t @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// @WARNING@ + +GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@); + +@SPTR_NAME@ trellis_make_@BASE_NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE); + + +class @NAME@ : public gr_block +{ +private: + @NAME@ ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector<@I_TYPE@> &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector<@I_TYPE@> TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector<@I_TYPE@> &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_b.cc b/gr-trellis/src/lib/trellis_viterbi_combined_b.cc deleted file mode 100644 index 20d9eb95..00000000 --- a/gr-trellis/src/lib/trellis_viterbi_combined_b.cc +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const float INF = 1.0e9; - -trellis_viterbi_combined_b_sptr -trellis_make_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE) -{ - return trellis_viterbi_combined_b_sptr (new trellis_viterbi_combined_b (FSM,K,S0,SK,D,TABLE,TYPE)); -} - -trellis_viterbi_combined_b::trellis_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE) - : gr_block ("viterbi_combined_b", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, -1, sizeof (unsigned char))), - d_FSM (FSM), - d_K (K), - d_S0 (S0), - d_SK (SK), - d_D (D), - d_TABLE (TABLE), - d_TYPE (TYPE)//, - //d_trace(FSM.S()*K) -{ - set_relative_rate (1.0 / ((double) d_D)); - set_output_multiple (d_K); -} - - -void -trellis_viterbi_combined_b::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - assert (noutput_items % d_K == 0); - int input_required = d_D * noutput_items ; - unsigned ninputs = ninput_items_required.size(); - for (unsigned int i = 0; i < ninputs; i++) { - ninput_items_required[i] = input_required; - } -} - - - - -void viterbi_algorithm_combined(int I, int S, int O, - const std::vector &NS, - const std::vector &OS, - const std::vector &PS, - const std::vector &PI, - int K, - int S0,int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE, - const float *in, unsigned char *out)//, - //std::vector &trace) -{ - std::vector trace(S*K); - std::vector alpha(S*2); - float *metric = new float[O]; - int alphai; - float norm,mm,minm; - int minmi; - int st; - - if(S0<0) { // initial state not specified - for(int i=0;i=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (unsigned char) PI[i0]; - st=PS[i0]; - } - - delete [] metric; - -} - - - - - - -int -trellis_viterbi_combined_b::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - assert (noutput_items % d_K == 0); - int nblocks = noutput_items / d_K; - - for (int m=0;m -#include "trellis_calc_metric.h" - -class trellis_viterbi_combined_b; -typedef boost::shared_ptr trellis_viterbi_combined_b_sptr; - -trellis_viterbi_combined_b_sptr trellis_make_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -class trellis_viterbi_combined_b : public gr_block -{ - fsm d_FSM; - int d_K; - int d_S0; - int d_SK; - int d_D; - std::vector d_TABLE; - trellis_metric_type_t d_TYPE; - //std::vector d_trace; - - friend trellis_viterbi_combined_b_sptr trellis_make_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - - trellis_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -public: - fsm FSM () const { return d_FSM; } - int K () const { return d_K; } - int S0 () const { return d_S0; } - int SK () const { return d_SK; } - int D () const { return d_D; } - std::vector TABLE () const { return d_TABLE; } - trellis_metric_type_t TYPE () const { return d_TYPE; } - //std::vector trace () const { return d_trace; } - void forecast (int noutput_items, - gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_b.i b/gr-trellis/src/lib/trellis_viterbi_combined_b.i deleted file mode 100644 index d12d1456..00000000 --- a/gr-trellis/src/lib/trellis_viterbi_combined_b.i +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_b); - -trellis_viterbi_combined_b_sptr trellis_make_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -class trellis_viterbi_combined_b : public gr_block -{ -private: - trellis_viterbi_combined_b ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - -public: - fsm FSM () const { return d_FSM; } - int K () const { return d_K; } - int S0 () const { return d_S0; } - int SK () const { return d_SK; } - int D () const { return d_D; } - std::vector TABLE () const { return d_TABLE; } - trellis_metric_type_t TYPE () const { return d_TYPE; } - //std::vector trace () const { return d_trace; } -}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_cb.cc b/gr-trellis/src/lib/trellis_viterbi_combined_cb.cc new file mode 100644 index 00000000..91341aa4 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_cb.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_cb_sptr +trellis_make_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_cb_sptr (new trellis_viterbi_combined_cb (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_cb::trellis_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_cb", + gr_make_io_signature (1, -1, sizeof (gr_complex)), + gr_make_io_signature (1, -1, sizeof (unsigned char))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_cb::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_cb::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const gr_complex *in, unsigned char *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_cb::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_cb; +typedef boost::shared_ptr trellis_viterbi_combined_cb_sptr; + +trellis_viterbi_combined_cb_sptr trellis_make_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_cb : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_cb_sptr trellis_make_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_cb.i b/gr-trellis/src/lib/trellis_viterbi_combined_cb.i new file mode 100644 index 00000000..34319585 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_cb.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_cb); + +trellis_viterbi_combined_cb_sptr trellis_make_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_cb : public gr_block +{ +private: + trellis_viterbi_combined_cb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ci.cc b/gr-trellis/src/lib/trellis_viterbi_combined_ci.cc new file mode 100644 index 00000000..81583721 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ci.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_ci_sptr +trellis_make_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_ci_sptr (new trellis_viterbi_combined_ci (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_ci::trellis_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_ci", + gr_make_io_signature (1, -1, sizeof (gr_complex)), + gr_make_io_signature (1, -1, sizeof (int))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_ci::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_ci::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const gr_complex *in, int *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_ci::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_ci; +typedef boost::shared_ptr trellis_viterbi_combined_ci_sptr; + +trellis_viterbi_combined_ci_sptr trellis_make_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_ci : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_ci_sptr trellis_make_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ci.i b/gr-trellis/src/lib/trellis_viterbi_combined_ci.i new file mode 100644 index 00000000..cc91268b --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ci.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_ci); + +trellis_viterbi_combined_ci_sptr trellis_make_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_ci : public gr_block +{ +private: + trellis_viterbi_combined_ci ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_cs.cc b/gr-trellis/src/lib/trellis_viterbi_combined_cs.cc new file mode 100644 index 00000000..f876bcc0 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_cs.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_cs_sptr +trellis_make_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_cs_sptr (new trellis_viterbi_combined_cs (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_cs::trellis_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_cs", + gr_make_io_signature (1, -1, sizeof (gr_complex)), + gr_make_io_signature (1, -1, sizeof (short))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_cs::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_cs::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const gr_complex *in, short *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_cs::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_cs; +typedef boost::shared_ptr trellis_viterbi_combined_cs_sptr; + +trellis_viterbi_combined_cs_sptr trellis_make_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_cs : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_cs_sptr trellis_make_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_cs.i b/gr-trellis/src/lib/trellis_viterbi_combined_cs.i new file mode 100644 index 00000000..15c8c56a --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_cs.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_cs); + +trellis_viterbi_combined_cs_sptr trellis_make_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_cs : public gr_block +{ +private: + trellis_viterbi_combined_cs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_fb.cc b/gr-trellis/src/lib/trellis_viterbi_combined_fb.cc new file mode 100644 index 00000000..97827c3b --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_fb.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_fb_sptr +trellis_make_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_fb_sptr (new trellis_viterbi_combined_fb (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_fb::trellis_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_fb", + gr_make_io_signature (1, -1, sizeof (float)), + gr_make_io_signature (1, -1, sizeof (unsigned char))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_fb::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_fb::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const float *in, unsigned char *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_fb::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_fb; +typedef boost::shared_ptr trellis_viterbi_combined_fb_sptr; + +trellis_viterbi_combined_fb_sptr trellis_make_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_fb : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_fb_sptr trellis_make_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_fb.i b/gr-trellis/src/lib/trellis_viterbi_combined_fb.i new file mode 100644 index 00000000..2a05761c --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_fb.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_fb); + +trellis_viterbi_combined_fb_sptr trellis_make_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_fb : public gr_block +{ +private: + trellis_viterbi_combined_fb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_fi.cc b/gr-trellis/src/lib/trellis_viterbi_combined_fi.cc new file mode 100644 index 00000000..0653fc2b --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_fi.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_fi_sptr +trellis_make_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_fi_sptr (new trellis_viterbi_combined_fi (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_fi::trellis_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_fi", + gr_make_io_signature (1, -1, sizeof (float)), + gr_make_io_signature (1, -1, sizeof (int))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_fi::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_fi::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const float *in, int *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_fi::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_fi; +typedef boost::shared_ptr trellis_viterbi_combined_fi_sptr; + +trellis_viterbi_combined_fi_sptr trellis_make_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_fi : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_fi_sptr trellis_make_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_fi.i b/gr-trellis/src/lib/trellis_viterbi_combined_fi.i new file mode 100644 index 00000000..f0576e75 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_fi.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_fi); + +trellis_viterbi_combined_fi_sptr trellis_make_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_fi : public gr_block +{ +private: + trellis_viterbi_combined_fi ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_fs.cc b/gr-trellis/src/lib/trellis_viterbi_combined_fs.cc new file mode 100644 index 00000000..7f17bb97 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_fs.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_fs_sptr +trellis_make_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_fs_sptr (new trellis_viterbi_combined_fs (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_fs::trellis_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_fs", + gr_make_io_signature (1, -1, sizeof (float)), + gr_make_io_signature (1, -1, sizeof (short))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_fs::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_fs::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const float *in, short *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_fs::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_fs; +typedef boost::shared_ptr trellis_viterbi_combined_fs_sptr; + +trellis_viterbi_combined_fs_sptr trellis_make_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_fs : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_fs_sptr trellis_make_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_fs.i b/gr-trellis/src/lib/trellis_viterbi_combined_fs.i new file mode 100644 index 00000000..37452780 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_fs.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_fs); + +trellis_viterbi_combined_fs_sptr trellis_make_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_fs : public gr_block +{ +private: + trellis_viterbi_combined_fs ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_i.cc b/gr-trellis/src/lib/trellis_viterbi_combined_i.cc deleted file mode 100644 index e31f0e6a..00000000 --- a/gr-trellis/src/lib/trellis_viterbi_combined_i.cc +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const float INF = 1.0e9; - -trellis_viterbi_combined_i_sptr -trellis_make_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE) -{ - return trellis_viterbi_combined_i_sptr (new trellis_viterbi_combined_i (FSM,K,S0,SK,D,TABLE,TYPE)); -} - -trellis_viterbi_combined_i::trellis_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE) - : gr_block ("viterbi_combined_i", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, -1, sizeof (int))), - d_FSM (FSM), - d_K (K), - d_S0 (S0), - d_SK (SK), - d_D (D), - d_TABLE (TABLE), - d_TYPE (TYPE)//, - //d_trace(FSM.S()*K) -{ - set_relative_rate (1.0 / ((double) d_D)); - set_output_multiple (d_K); -} - - -void -trellis_viterbi_combined_i::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - assert (noutput_items % d_K == 0); - int input_required = d_D * noutput_items ; - unsigned ninputs = ninput_items_required.size(); - for (unsigned int i = 0; i < ninputs; i++) { - ninput_items_required[i] = input_required; - } -} - - - - -void viterbi_algorithm_combined(int I, int S, int O, - const std::vector &NS, - const std::vector &OS, - const std::vector &PS, - const std::vector &PI, - int K, - int S0,int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE, - const float *in, int *out)//, - //std::vector &trace) -{ - std::vector trace(S*K); - std::vector alpha(S*2); - float *metric = new float[O]; - int alphai; - float norm,mm,minm; - int minmi; - int st; - - if(S0<0) { // initial state not specified - for(int i=0;i=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (int) PI[i0]; - st=PS[i0]; - } - - delete [] metric; - -} - - - - - - -int -trellis_viterbi_combined_i::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - assert (noutput_items % d_K == 0); - int nblocks = noutput_items / d_K; - - for (int m=0;m -#include "trellis_calc_metric.h" - -class trellis_viterbi_combined_i; -typedef boost::shared_ptr trellis_viterbi_combined_i_sptr; - -trellis_viterbi_combined_i_sptr trellis_make_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -class trellis_viterbi_combined_i : public gr_block -{ - fsm d_FSM; - int d_K; - int d_S0; - int d_SK; - int d_D; - std::vector d_TABLE; - trellis_metric_type_t d_TYPE; - //std::vector d_trace; - - friend trellis_viterbi_combined_i_sptr trellis_make_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - - trellis_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -public: - fsm FSM () const { return d_FSM; } - int K () const { return d_K; } - int S0 () const { return d_S0; } - int SK () const { return d_SK; } - int D () const { return d_D; } - std::vector TABLE () const { return d_TABLE; } - trellis_metric_type_t TYPE () const { return d_TYPE; } - //std::vector trace () const { return d_trace; } - void forecast (int noutput_items, - gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_i.i b/gr-trellis/src/lib/trellis_viterbi_combined_i.i deleted file mode 100644 index 15264b29..00000000 --- a/gr-trellis/src/lib/trellis_viterbi_combined_i.i +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_i); - -trellis_viterbi_combined_i_sptr trellis_make_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -class trellis_viterbi_combined_i : public gr_block -{ -private: - trellis_viterbi_combined_i ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - -public: - fsm FSM () const { return d_FSM; } - int K () const { return d_K; } - int S0 () const { return d_S0; } - int SK () const { return d_SK; } - int D () const { return d_D; } - std::vector TABLE () const { return d_TABLE; } - trellis_metric_type_t TYPE () const { return d_TYPE; } - //std::vector trace () const { return d_trace; } -}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ib.cc b/gr-trellis/src/lib/trellis_viterbi_combined_ib.cc new file mode 100644 index 00000000..2e9e3475 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ib.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_ib_sptr +trellis_make_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_ib_sptr (new trellis_viterbi_combined_ib (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_ib::trellis_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_ib", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, -1, sizeof (unsigned char))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_ib::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_ib::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const int *in, unsigned char *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_ib::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_ib; +typedef boost::shared_ptr trellis_viterbi_combined_ib_sptr; + +trellis_viterbi_combined_ib_sptr trellis_make_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_ib : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_ib_sptr trellis_make_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ib.i b/gr-trellis/src/lib/trellis_viterbi_combined_ib.i new file mode 100644 index 00000000..2e26f2fa --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ib.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_ib); + +trellis_viterbi_combined_ib_sptr trellis_make_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_ib : public gr_block +{ +private: + trellis_viterbi_combined_ib ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ii.cc b/gr-trellis/src/lib/trellis_viterbi_combined_ii.cc new file mode 100644 index 00000000..0a18245e --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ii.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_ii_sptr +trellis_make_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_ii_sptr (new trellis_viterbi_combined_ii (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_ii::trellis_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_ii", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, -1, sizeof (int))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_ii::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_ii::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const int *in, int *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_ii::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_ii; +typedef boost::shared_ptr trellis_viterbi_combined_ii_sptr; + +trellis_viterbi_combined_ii_sptr trellis_make_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_ii : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_ii_sptr trellis_make_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ii.i b/gr-trellis/src/lib/trellis_viterbi_combined_ii.i new file mode 100644 index 00000000..3a0f42b2 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ii.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_ii); + +trellis_viterbi_combined_ii_sptr trellis_make_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_ii : public gr_block +{ +private: + trellis_viterbi_combined_ii ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_is.cc b/gr-trellis/src/lib/trellis_viterbi_combined_is.cc new file mode 100644 index 00000000..dd9775b5 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_is.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_is_sptr +trellis_make_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_is_sptr (new trellis_viterbi_combined_is (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_is::trellis_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_is", + gr_make_io_signature (1, -1, sizeof (int)), + gr_make_io_signature (1, -1, sizeof (short))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_is::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_is::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const int *in, short *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_is::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_is; +typedef boost::shared_ptr trellis_viterbi_combined_is_sptr; + +trellis_viterbi_combined_is_sptr trellis_make_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_is : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_is_sptr trellis_make_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_is.i b/gr-trellis/src/lib/trellis_viterbi_combined_is.i new file mode 100644 index 00000000..65dc7136 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_is.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_is); + +trellis_viterbi_combined_is_sptr trellis_make_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_is : public gr_block +{ +private: + trellis_viterbi_combined_is ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_s.cc b/gr-trellis/src/lib/trellis_viterbi_combined_s.cc deleted file mode 100644 index 4eb6e762..00000000 --- a/gr-trellis/src/lib/trellis_viterbi_combined_s.cc +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const float INF = 1.0e9; - -trellis_viterbi_combined_s_sptr -trellis_make_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE) -{ - return trellis_viterbi_combined_s_sptr (new trellis_viterbi_combined_s (FSM,K,S0,SK,D,TABLE,TYPE)); -} - -trellis_viterbi_combined_s::trellis_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE) - : gr_block ("viterbi_combined_s", - gr_make_io_signature (1, -1, sizeof (float)), - gr_make_io_signature (1, -1, sizeof (short))), - d_FSM (FSM), - d_K (K), - d_S0 (S0), - d_SK (SK), - d_D (D), - d_TABLE (TABLE), - d_TYPE (TYPE)//, - //d_trace(FSM.S()*K) -{ - set_relative_rate (1.0 / ((double) d_D)); - set_output_multiple (d_K); -} - - -void -trellis_viterbi_combined_s::forecast (int noutput_items, gr_vector_int &ninput_items_required) -{ - assert (noutput_items % d_K == 0); - int input_required = d_D * noutput_items ; - unsigned ninputs = ninput_items_required.size(); - for (unsigned int i = 0; i < ninputs; i++) { - ninput_items_required[i] = input_required; - } -} - - - - -void viterbi_algorithm_combined(int I, int S, int O, - const std::vector &NS, - const std::vector &OS, - const std::vector &PS, - const std::vector &PI, - int K, - int S0,int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE, - const float *in, short *out)//, - //std::vector &trace) -{ - std::vector trace(S*K); - std::vector alpha(S*2); - float *metric = new float[O]; - int alphai; - float norm,mm,minm; - int minmi; - int st; - - if(S0<0) { // initial state not specified - for(int i=0;i=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (short) PI[i0]; - st=PS[i0]; - } - - delete [] metric; - -} - - - - - - -int -trellis_viterbi_combined_s::general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - assert (input_items.size() == output_items.size()); - int nstreams = input_items.size(); - assert (noutput_items % d_K == 0); - int nblocks = noutput_items / d_K; - - for (int m=0;m -#include "trellis_calc_metric.h" - -class trellis_viterbi_combined_s; -typedef boost::shared_ptr trellis_viterbi_combined_s_sptr; - -trellis_viterbi_combined_s_sptr trellis_make_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -class trellis_viterbi_combined_s : public gr_block -{ - fsm d_FSM; - int d_K; - int d_S0; - int d_SK; - int d_D; - std::vector d_TABLE; - trellis_metric_type_t d_TYPE; - //std::vector d_trace; - - friend trellis_viterbi_combined_s_sptr trellis_make_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - - trellis_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -public: - fsm FSM () const { return d_FSM; } - int K () const { return d_K; } - int S0 () const { return d_S0; } - int SK () const { return d_SK; } - int D () const { return d_D; } - std::vector TABLE () const { return d_TABLE; } - trellis_metric_type_t TYPE () const { return d_TYPE; } - //std::vector trace () const { return d_trace; } - void forecast (int noutput_items, - gr_vector_int &ninput_items_required); - int general_work (int noutput_items, - gr_vector_int &ninput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); -}; - -#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_s.i b/gr-trellis/src/lib/trellis_viterbi_combined_s.i deleted file mode 100644 index 109e58ca..00000000 --- a/gr-trellis/src/lib/trellis_viterbi_combined_s.i +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -// WARNING: this file is machine generated. Edits will be over written - -GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_s); - -trellis_viterbi_combined_s_sptr trellis_make_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - - -class trellis_viterbi_combined_s : public gr_block -{ -private: - trellis_viterbi_combined_s ( - const fsm &FSM, - int K, - int S0, - int SK, - int D, - const std::vector &TABLE, - trellis_metric_type_t TYPE); - -public: - fsm FSM () const { return d_FSM; } - int K () const { return d_K; } - int S0 () const { return d_S0; } - int SK () const { return d_SK; } - int D () const { return d_D; } - std::vector TABLE () const { return d_TABLE; } - trellis_metric_type_t TYPE () const { return d_TYPE; } - //std::vector trace () const { return d_trace; } -}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_sb.cc b/gr-trellis/src/lib/trellis_viterbi_combined_sb.cc new file mode 100644 index 00000000..103df314 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_sb.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_sb_sptr +trellis_make_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_sb_sptr (new trellis_viterbi_combined_sb (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_sb::trellis_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_sb", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, -1, sizeof (unsigned char))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_sb::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_sb::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const short *in, unsigned char *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_sb::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_sb; +typedef boost::shared_ptr trellis_viterbi_combined_sb_sptr; + +trellis_viterbi_combined_sb_sptr trellis_make_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_sb : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_sb_sptr trellis_make_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_sb.i b/gr-trellis/src/lib/trellis_viterbi_combined_sb.i new file mode 100644 index 00000000..55d3a86f --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_sb.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_sb); + +trellis_viterbi_combined_sb_sptr trellis_make_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_sb : public gr_block +{ +private: + trellis_viterbi_combined_sb ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_si.cc b/gr-trellis/src/lib/trellis_viterbi_combined_si.cc new file mode 100644 index 00000000..48b20836 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_si.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_si_sptr +trellis_make_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_si_sptr (new trellis_viterbi_combined_si (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_si::trellis_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_si", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, -1, sizeof (int))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_si::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_si::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const short *in, int *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_si::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_si; +typedef boost::shared_ptr trellis_viterbi_combined_si_sptr; + +trellis_viterbi_combined_si_sptr trellis_make_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_si : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_si_sptr trellis_make_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_si.i b/gr-trellis/src/lib/trellis_viterbi_combined_si.i new file mode 100644 index 00000000..94362d6f --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_si.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_si); + +trellis_viterbi_combined_si_sptr trellis_make_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_si : public gr_block +{ +private: + trellis_viterbi_combined_si ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ss.cc b/gr-trellis/src/lib/trellis_viterbi_combined_ss.cc new file mode 100644 index 00000000..7e64c4fd --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ss.cc @@ -0,0 +1,190 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const float INF = 1.0e9; + +trellis_viterbi_combined_ss_sptr +trellis_make_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) +{ + return trellis_viterbi_combined_ss_sptr (new trellis_viterbi_combined_ss (FSM,K,S0,SK,D,TABLE,TYPE)); +} + +trellis_viterbi_combined_ss::trellis_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE) + : gr_block ("viterbi_combined_ss", + gr_make_io_signature (1, -1, sizeof (short)), + gr_make_io_signature (1, -1, sizeof (short))), + d_FSM (FSM), + d_K (K), + d_S0 (S0), + d_SK (SK), + d_D (D), + d_TABLE (TABLE), + d_TYPE (TYPE)//, + //d_trace(FSM.S()*K) +{ + set_relative_rate (1.0 / ((double) d_D)); + set_output_multiple (d_K); +} + + +void trellis_viterbi_combined_ss::set_TABLE(const std::vector &table) +{ + d_TABLE = table; +} + +void +trellis_viterbi_combined_ss::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + assert (noutput_items % d_K == 0); + int input_required = d_D * noutput_items ; + unsigned ninputs = ninput_items_required.size(); + for (unsigned int i = 0; i < ninputs; i++) { + ninput_items_required[i] = input_required; + } +} + + + + +void viterbi_algorithm_combined(int I, int S, int O, + const std::vector &NS, + const std::vector &OS, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, + int K, + int S0,int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE, + const short *in, short *out)//, + //std::vector &trace) +{ + std::vector trace(S*K); + std::vector alpha(S*2); + float *metric = new float[O]; + int alphai; + float norm,mm,minm; + int minmi; + int st; + + if(S0<0) { // initial state not specified + for(int i=0;i=0;k--) { // traceback + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; + } + + delete [] metric; + +} + + + + + + +int +trellis_viterbi_combined_ss::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + assert (input_items.size() == output_items.size()); + int nstreams = input_items.size(); + assert (noutput_items % d_K == 0); + int nblocks = noutput_items / d_K; + + for (int m=0;m +#include "trellis_calc_metric.h" + +class trellis_viterbi_combined_ss; +typedef boost::shared_ptr trellis_viterbi_combined_ss_sptr; + +trellis_viterbi_combined_ss_sptr trellis_make_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +/*! + * \ingroup coding_blk + */ +class trellis_viterbi_combined_ss : public gr_block +{ + fsm d_FSM; + int d_K; + int d_S0; + int d_SK; + int d_D; + std::vector d_TABLE; + trellis_metric_type_t d_TYPE; + //std::vector d_trace; + + friend trellis_viterbi_combined_ss_sptr trellis_make_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + + trellis_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); + void forecast (int noutput_items, + gr_vector_int &ninput_items_required); + int general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_ss.i b/gr-trellis/src/lib/trellis_viterbi_combined_ss.i new file mode 100644 index 00000000..035e7b32 --- /dev/null +++ b/gr-trellis/src/lib/trellis_viterbi_combined_ss.i @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +// WARNING: this file is machine generated. Edits will be over written + +GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_ss); + +trellis_viterbi_combined_ss_sptr trellis_make_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + + +class trellis_viterbi_combined_ss : public gr_block +{ +private: + trellis_viterbi_combined_ss ( + const fsm &FSM, + int K, + int S0, + int SK, + int D, + const std::vector &TABLE, + trellis_metric_type_t TYPE); + +public: + fsm FSM () const { return d_FSM; } + int K () const { return d_K; } + int S0 () const { return d_S0; } + int SK () const { return d_SK; } + int D () const { return d_D; } + std::vector TABLE () const { return d_TABLE; } + trellis_metric_type_t TYPE () const { return d_TYPE; } + //std::vector trace () const { return d_trace; } + void set_TABLE (const std::vector &table); +}; diff --git a/gr-trellis/src/lib/trellis_viterbi_i.cc b/gr-trellis/src/lib/trellis_viterbi_i.cc index efbeddfc..487b6d54 100644 --- a/gr-trellis/src/lib/trellis_viterbi_i.cc +++ b/gr-trellis/src/lib/trellis_viterbi_i.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -77,8 +79,8 @@ trellis_viterbi_i::forecast (int noutput_items, gr_vector_int &ninput_items_requ void viterbi_algorithm(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, int *out)//, @@ -106,9 +108,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (int) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; } } diff --git a/gr-trellis/src/lib/trellis_viterbi_i.h b/gr-trellis/src/lib/trellis_viterbi_i.h index d6a1b918..8e5e5ab3 100644 --- a/gr-trellis/src/lib/trellis_viterbi_i.h +++ b/gr-trellis/src/lib/trellis_viterbi_i.h @@ -39,6 +39,9 @@ trellis_viterbi_i_sptr trellis_make_viterbi_i ( +/*! + * \ingroup coding_blk + */ class trellis_viterbi_i : public gr_block { fsm d_FSM; diff --git a/gr-trellis/src/lib/trellis_viterbi_s.cc b/gr-trellis/src/lib/trellis_viterbi_s.cc index ea3771d4..94a9c0be 100644 --- a/gr-trellis/src/lib/trellis_viterbi_s.cc +++ b/gr-trellis/src/lib/trellis_viterbi_s.cc @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// WARNING: this file is machine generated. Edits will be over written + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -77,8 +79,8 @@ trellis_viterbi_s::forecast (int noutput_items, gr_vector_int &ninput_items_requ void viterbi_algorithm(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, short *out)//, @@ -106,9 +108,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (short) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; } } diff --git a/gr-trellis/src/lib/trellis_viterbi_s.h b/gr-trellis/src/lib/trellis_viterbi_s.h index 38d9f0f7..1f2d3f15 100644 --- a/gr-trellis/src/lib/trellis_viterbi_s.h +++ b/gr-trellis/src/lib/trellis_viterbi_s.h @@ -39,6 +39,9 @@ trellis_viterbi_s_sptr trellis_make_viterbi_s ( +/*! + * \ingroup coding_blk + */ class trellis_viterbi_s : public gr_block { fsm d_FSM; diff --git a/gr-trellis/src/python/Makefile.am b/gr-trellis/src/python/Makefile.am index 37b8f1a0..76ec9d0c 100644 --- a/gr-trellis/src/python/Makefile.am +++ b/gr-trellis/src/python/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -31,5 +31,3 @@ TESTS = \ noinst_PYTHON = \ qa_trellis.py - -MOSTLYCLEANFILES = *.pyc diff --git a/gr-trellis/src/python/Makefile.in b/gr-trellis/src/python/Makefile.in index 66459ff2..f3d83a9d 100644 --- a/gr-trellis/src/python/Makefile.in +++ b/gr-trellis/src/python/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004 Free Software Foundation, Inc. +# Copyright 2004,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -84,25 +80,35 @@ DIST_COMMON = $(noinst_PYTHON) $(srcdir)/Makefile.am \ $(top_srcdir)/Makefile.common subdir = gr-trellis/src/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -139,10 +165,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -150,9 +175,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -160,6 +192,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -172,73 +206,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -248,49 +275,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -298,15 +365,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -316,16 +526,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -334,63 +562,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = run_tests.in \ awgn1o2_4.fsm @@ -400,7 +697,6 @@ TESTS = \ noinst_PYTHON = \ qa_trellis.py -MOSTLYCLEANFILES = *.pyc all: all-am .SUFFIXES: @@ -408,8 +704,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -441,10 +737,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -455,7 +747,7 @@ CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -464,7 +756,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -476,7 +768,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -490,23 +782,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -526,23 +831,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -553,6 +856,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am @@ -589,7 +895,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -603,12 +909,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -627,18 +941,32 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ - clean-libtool distclean distclean-generic distclean-libtool \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + clean-libtool dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-info-am + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-trellis/src/python/qa_trellis.py b/gr-trellis/src/python/qa_trellis.py index 27cea8e8..306bf994 100755 --- a/gr-trellis/src/python/qa_trellis.py +++ b/gr-trellis/src/python/qa_trellis.py @@ -26,10 +26,10 @@ import trellis class qa_trellis (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_001_fsm (self): I = 2 diff --git a/gr-usrp/AUTHORS b/gr-usrp/AUTHORS deleted file mode 100644 index ee4560a5..00000000 --- a/gr-usrp/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Eric Blossom diff --git a/gr-usrp/ChangeLog b/gr-usrp/ChangeLog deleted file mode 100644 index 43cb7e15..00000000 --- a/gr-usrp/ChangeLog +++ /dev/null @@ -1,374 +0,0 @@ -2006-06-17 Eric Blossom - - * src/usrp.py, src/usrp1.i, src/usrp1_sink_base.cc, src/usrp1_sink_base.h, - src/usrp1_sink_c.cc, src/usrp1_sink_c.h, src/usrp1_sink_s.cc, - src/usrp1_sink_s.h, src/usrp1_source_base.cc, src/usrp1_source_base.h, - src/usrp1_source_c.cc, src/usrp1_source_c.h, src/usrp1_source_s.cc, - src/usrp1_source_s.h: changed constructor args to add - fusb_block_size and fusb_nblocks so that the application can - adjust the amount of buffering being done. [This was an awful lot - of files to have to touch to make this change. There must be an - easier way?] - - -2006-05-11 Martin Dudok van Heel - Added synchronised multi_usrp support. - This work was funded by Toby Oliver at Sensus Analytics / Path Intelligence. - - See README_MULTI_USRP.txt and the multi_usrp examples on how to use. - In short: - Connect the 64MHz clocks between the boards with a short sma coax cable. - (See the wiki on how to enable clock-out and clock-in - http://comsec.com/wiki?USRPClockingNotes ) - Connect io15 on the RXA daughterboards of both usrps - instantiate multi=usrp_multi.multi_source_align([args]) - The 4 aligned channels become available as: - (multi.get_master_source_c(),1) (multi.get_master_source_c(),2) - (multi.get_slave_source(),1) (multi.get_slave_source(),2) - call multi.sync() at least once AFTER the flowgraph has started running - - * READMU_MULTI_USRP.txt: new - * configure.ac: added missing newline at end of file - * src/Makefile.am: added usrp_multi.py - * src/usrp1.i: added _write_fpga_reg_masked - * src/usrp1_source_base.[cc,h]: added _write_fpga_reg_masked - * src/usrp_multi.py: new Instantiate a usrp_multi.multi_source_align to - get aligned streams from two usrps. - -2006-03-11 Matt Ettus - - * src/Makefile.am, src/db_flexrf_mimo.py, src/usrp.py: New skeleton - file for mimo mode with the flexrf boards - - * src/db_base.py: added standard code to control refclock and - adc buffer bypass so all dboards can do it the same way. Taken from - db_dbs_rx.py - - * src/db_tv_rx.py: Use standard method for adc buffer bypass - - * src/db_flexrf.py: Use standard method for adc buffer bypass - - * src/db_dbs_rx.py: Use standard methods for adc buffer bypass and - refclock control - - * src/db_basic.py: Use standard method for adc buffer bypass, - and instantiate a BasicTX when the unknown or missing board is on - the TX side - -2006-03-10 Eric Blossom - - * src/db_dbs_rx.py (db_dbs_rx._refclk_freq): replaced 64e6 with - call to fpga_master_clock_freq(). - -2006-02-18 Eric Blossom - - * src/usrp1_{sink,source}_{base,c,s}.{h,cc}, src/usrp1.i, - src/usrp.py: added support for specifying the firmware and fpga - files that are to be loaded. - -2006-02-17 Eric Blossom - - * src/usrp1.i, src/usrp1_{sink,source}_base.{h,cc}: added serial_number() - -2006-01-30 Eric Blossom - - * src/db_base.py, src/db_flexrf.py: revised to use new auto t/r - switching strategy. FR_ATR_CTL no longer exists. We control auto - t/r via the FR_ATR_MASK* registers. - -2006-01-25 Eric Blossom - - * src/usrp.py (usrp_common): added code to read FPGA capability register. - (determine_tx_mux_value): new utility. - -2006-01-22 Eric Blossom - - * src/usrp.py (pick_rx_subdevice): added latest d'board revs to list. - -2006-01-04 Eric Blossom - - * src/usrp1_{sink,source}_{s,c}.cc: added usrp_bytesex.h include and - use usrp_to_host_short or host_to_usrp_short as appropriate to - handle usrp to host endianness differences. - - * configure.ac: added AC_C_BIGENDIAN and header check for byteswap.h - -2005-12-20 Matt Ettus - - * src/db_base.py (db_base.spectrum_inverted): Base function - defaults to no spectrum inversion, so we can handle daughterboards - which have analog spectra which are inverted (currently only tvrx2) - - * src/db_tv_rx.py (db_tv_rx.spectrum_inverted): Report that the - tvrx2 has inverted spectrum, the tvrx does not - - * src/usrp.py (tune): Handle daughterboards which have analog - spectra which are inverted (currently only tvrx2) - - -2005-12-08 Eric Blossom - - * src/usrp1_sink_s.cc (usrp1_sink_s): call set_output_multiple so - we ensure 512 byte writes across USB. - -2005-12-07 Eric Blossom - - * src/usrp.py: revised sink_c, sink_s, source_c and source_s to - properly fire daughterboard destructors. Without this, we had the - nasty habit of leaving the transmitter running if the user didn't - explicitly disable it. - -2005-12-05 Eric Blossom - - * src/db_base.py, src/db_flexrf.py: refactored to use new - Auto T/R switching. - - * src/db_flexrf.py (flexrf_base.set_freq): Offset the LO by 4 MHz. - Helps initial lock-up time with discontinuous transmission. - -2005-11-22 Eric Blossom - - * src/db_base.py, src/db_flexrf.py: renamed set_auto_tx to set_auto_tr. - -2005-11-17 Eric Blossom - - * src/usrp1_sink_base.cc: reduced amount of USB Tx buffering. - -2005-11-13 Eric Blossom - - * src/db_base.py (db_base.set_auto_tx): new stub method. - -2005-11-11 Eric Blossom - - * src/usrp.py (pick_rx_subdevice): moved to library. - -2005-11-10 Matt Ettus - - * src/db_flexrf.py (flexrf_base_tx.set_enable): fixed definition. - -2005-10-27 Eric Blossom - - * src/db_base.py, src/db_flexrf.py: new method: set_enable - -2005-10-20 Eric Blossom - - * src/usrp1_source_s.{h,cc}, src/usrp1_source_c.{h,cc}: support - both 8 and 16-bit samples across the USB. - * src/usrp1.i, src/usrp1_source_base.{h,cc}: new methods for - setting and getting rx format. - -2005-10-11 Eric Blossom - - * src/usrp.py: removed dispatch on usrp revision (no longer - support rev0 boards). Constructors now take keyword args, thus - all args are optional. This will allow us to get rid of the 64e6's - and 128e6's that are scattered throughout the example code. - * src/usrp1.i: removed default values from constructors. They are - now provided by keyword args in usrp.py - -2005-09-29 Eric Blossom - - * src/db_dbs_rx.py (db_dbs_rx.freq_range): set freq step size to 1M - -2005-09-27 Eric Blossom - - * src/db_base.py (db_base.i_and_q_swapped): new method for - Flex 400 Rx and other boards that route I into ADC 1 instead of 0. - - * src/usrp.py (tune): added tune fct. Reworked subdev_spec. No - longer accepts (0|1, None). Check for and handle i_and_q_swapped. - -2005-09-21 Eric Blossom - - * src/db_basic.py: new. - * src/db_instantiator.py, src/usrp.py: added framework for - automatically instantiating daughterboard subclasses. - - * src/usrp1.i, src/usrp1_sink_base.{h,cc}, - src/usrp1_source_base.{h,cc}: deprecated adc_freq(), dac_freq(), - recommend converter_rate(). - -2005-09-17 Eric Blossom - - * src/db_dbs_rx.py: renamed from dbs_rx.py - * src/db_flexrf.py: renamed from flexrf.py - * src/db_tv_rx.py: renamed from tv_rx.py - * src/db_base.py: renamed from daughterboard_base.py - -2005-08-28 Eric Blossom - - * src/flexrf.py: added hook to invoke debugging gui. - * src/flexrf_debug_gui.py: new debugging tool. - -2005-07-19 Eric Blossom - - * src/usrp1_source_base.{h,cc}, src/usrp1.i: new method: set_ddc_phase. - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac, src/Makefile.am: mods for x86_64, $(NO_UNDEFINED) - -2005-06-09 Eric Blossom - - * src/gen_usrp_dbids.py: new. Generate usrp_dbids.py from - usrp_daughterboards.h. This file contains symbolic names for for - daughterboard ID's. - -2005-05-18 Eric Blossom - - * src/usrp1_sink_base.{h,cc}, src/usrp1_source_base.{h,cc}: use - new start/stop methods. - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - -2005-03-29 Eric Blossom - - * src/usrp.py: now check for usrp version at open time, not import - time. - -2005-03-15 Eric Blossom - - * src/usrp1_sink_base.{h,cc}, src/usrp1_source_base.{h,cc}: - read_aux_dac and write_aux_dac now take which_dboard instead of slot. - -2005-03-13 Matt Ettus - - * src/Makefile.am, src/tv_rx.py: first cut at TV RX dboard - * src/dbs_rx.py: minor fixes - -2005-03-11 Eric Blossom - - * src/usrp1_sink_base.{h,cc},src/usrp1_source_base.{h,cc}: new - methods: set_adc_offset, set_dac_offset, set_adc_buffer_bypass. - -2005-02-18 Eric Blossom - - * src/usrp1_sink_base.cc (_write_oe): fix delegation. - * src/usrp1_source_base.cc (_write_oe): fix delegation. - -2005-02-16 Eric Blossom - - * src/dbs_rx.py: new. control DBS_RX daughterboard. - * src/usrp1_{sink,source}_base.{h,cc}: add read_i2c and write_i2c. - -2005-02-06 Eric Blossom - - * configure.ac: upped rev to 0.4 for release. - * src/Makefile.am: backed out dependency on libpython - -2005-01-28 Stephane Fillod - - * src/Makefile.am: fixes for MinGW. - -2005-01-12 Eric Blossom - - * src/usrp1_sink_base.cc,src/usrp1_source_base.cc: changed - under/overrun diagnostic indicator to "uU" and "uO" to reduce - amount of diagnostic output. - -2005-01-10 Eric Blossom - - * src/usrp1.i,src/usrp1_sink_base.{h,cc}, - src/usrp1_source_base.{h,cc}: new methods to control all knobs. - -2005-01-04 Eric Blossom - - * src/usrp1.i,src/usrp1_source_base.{h,cc}: new methods for - messing with Rx PGA. - -2004-11-14 Eric Blossom - - * src/usrp1_sink_base.cc (work): corrected increment of obi. - -2004-10-13 Eric Blossom - - * configure.ac: upped rev to 0.2cvs - -2004-10-11 Eric Blossom - - * configure.ac: bumped rev to 0.2, make release. - * Makefile.am (EXTRA_DIST): added config.h.in - -2004-09-30 Eric Blossom - - * src/usrp1_sink_base.{h,cc}, src/usrp1_source_base.{h,cc}, - src/usrp1.i: new methods for reading and writing aux dac and adc, - eeproms, and fpga registers. - -2004-09-23 Eric Blossom - - * config/usrp_fusb_tech.m4, config/bnv_have_qt.m4, config/cppunit.m4, - config/gr_check_mc4020.m4, config/gr_check_usrp.m4, config/gr_doxygen.m4, - config/gr_gprof.m4, config/gr_scripting.m4, config/gr_set_md_cpu.m4, - config/pkg.m4, config/usrp_fusb_tech.m4: added additional quoting - to first arg of AC_DEFUN to silence automake warning. - -2004-08-19 Eric Blossom - - * src/usrp1_{sink,source}_base.{h,cc}, src/usrp1.i: new method: set_verbose. - -2004-08-03 Eric Blossom - - * src/usrp1_source_base.{h,cc}, src/usrp1_sink_base.{h,cc}: - extracted base class that handles everything but the packing and - unpacking of data into the usrp buffer. - * src/usrp1_source_c.{h,cc}, src/usrp1_sink_c.{h,cc}: revised to - use new base class. - * src/usrp1_source_s.{h,cc}, src/usrp1_sink_s.{h,cc}: new. - - -2004-07-31 Eric Blossom - - * src/usrp1_{sink,source}_c.{h,cc}: new method: set_loopback - * src/usrp1.i: new method: set_loopback - -2004-07-30 Eric Blossom - - * src/usrp1_source_c.{h,cc}: renamed from usrp_source_c.{h,cc} - * src/usrp1_sink_c.{h,cc}: renamed from usrp_sink_c.{h,cc} - * src/usrp1.i: renamed from usrp.i - * src/usrp.py: new. Binds proper class depending on hardware found. - - -2004-07-29 Eric Blossom - - * src/usrp_{sink,source}_c.h: doc fix. - * src/usrp0.i: new - * src/usrp0_source_c.{h,cc}: new - * src/usrp0_sink_c.{h,cc}: new - -2004-07-12 Eric Blossom - - * configure.ac: upped rev to 0.1cvs - -2004-07-08 Eric Blossom - - * src/usrp_source_c.{h,cc}: new. - -# -# Copyright 2004,2005,2006 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. -# diff --git a/gr-usrp/Makefile.am b/gr-usrp/Makefile.am index 8980c517..136ce157 100644 --- a/gr-usrp/Makefile.am +++ b/gr-usrp/Makefile.am @@ -21,5 +21,11 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = README_MULTI_USRP.txt -SUBDIRS = src +EXTRA_DIST = \ + README_MULTI_USRP.txt \ + gnuradio-usrp.pc.in + +SUBDIRS = src apps + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gnuradio-usrp.pc diff --git a/gr-usrp/Makefile.in b/gr-usrp/Makefile.in index bb0c9a58..d7a55e13 100644 --- a/gr-usrp/Makefile.in +++ b/gr-usrp/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,12 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +77,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog + $(srcdir)/gnuradio-usrp.pc.in $(top_srcdir)/Makefile.common subdir = gr-usrp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -130,15 +157,27 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = +CONFIG_CLEAN_FILES = gnuradio-usrp.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +185,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +195,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +212,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +226,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +295,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +385,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +546,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,65 +582,139 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = README_MULTI_USRP.txt -SUBDIRS = src +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + README_MULTI_USRP.txt \ + gnuradio-usrp.pc.in + +SUBDIRS = src apps +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gnuradio-usrp.pc all: all-recursive .SUFFIXES: @@ -407,8 +722,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -432,16 +747,31 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gnuradio-usrp.pc: $(top_builddir)/config.status $(srcdir)/gnuradio-usrp.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -474,8 +804,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -519,8 +848,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -545,8 +874,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -556,13 +885,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -576,23 +904,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -606,7 +932,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -614,15 +940,23 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive -all-am: Makefile +all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive @@ -638,6 +972,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -653,8 +988,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -666,14 +1000,22 @@ info: info-recursive info-am: -install-data-am: +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -692,23 +1034,36 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: uninstall-pkgconfigDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-usrp/apps/Makefile.am b/gr-usrp/apps/Makefile.am new file mode 100644 index 00000000..824a4897 --- /dev/null +++ b/gr-usrp/apps/Makefile.am @@ -0,0 +1,53 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/Makefile.common + +# For compiling within the GNU Radio build tree +AM_CPPFLAGS=$(STD_DEFINES_AND_INCLUDES) \ + -I$(top_srcdir)/gr-usrp/src \ + -I$(top_srcdir)/usrp/host/lib/legacy \ + -I\${abs_top_builddir}/usrp/host/lib/legacy \ + -I$(top_srcdir)/usrp/firmware/include \ + $(WITH_INCLUDES) + +GR_USRP_LA=$(top_builddir)/gr-usrp/src/libgnuradio-usrp.la + +# For compiling outside the tree, these will get fished out by pkgconfig + +LDADD = \ + $(BOOST_LDFLAGS) \ + $(BOOST_PROGRAM_OPTIONS_LIB) \ + $(GR_USRP_LA) + +noinst_PROGRAMS = \ + usrp_rx_cfile \ + usrp_siggen + +noinst_HEADERS = \ + usrp_rx_cfile.h \ + usrp_siggen.h + +usrp_rx_cfile_SOURCES = \ + usrp_rx_cfile.cc + +usrp_siggen_SOURCES = \ + usrp_siggen.cc diff --git a/gr-usrp/apps/Makefile.in b/gr-usrp/apps/Makefile.in new file mode 100644 index 00000000..e96d9e8f --- /dev/null +++ b/gr-usrp/apps/Makefile.in @@ -0,0 +1,1020 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +noinst_PROGRAMS = usrp_rx_cfile$(EXEEXT) usrp_siggen$(EXEEXT) +subdir = gr-usrp/apps +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_usrp_rx_cfile_OBJECTS = usrp_rx_cfile.$(OBJEXT) +usrp_rx_cfile_OBJECTS = $(am_usrp_rx_cfile_OBJECTS) +usrp_rx_cfile_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +usrp_rx_cfile_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(GR_USRP_LA) +am_usrp_siggen_OBJECTS = usrp_siggen.$(OBJEXT) +usrp_siggen_OBJECTS = $(am_usrp_siggen_OBJECTS) +usrp_siggen_LDADD = $(LDADD) +usrp_siggen_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(GR_USRP_LA) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(usrp_rx_cfile_SOURCES) $(usrp_siggen_SOURCES) +DIST_SOURCES = $(usrp_rx_cfile_SOURCES) $(usrp_siggen_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# For compiling within the GNU Radio build tree +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) \ + -I$(top_srcdir)/gr-usrp/src \ + -I$(top_srcdir)/usrp/host/lib/legacy \ + -I\${abs_top_builddir}/usrp/host/lib/legacy \ + -I$(top_srcdir)/usrp/firmware/include \ + $(WITH_INCLUDES) + +GR_USRP_LA = $(top_builddir)/gr-usrp/src/libgnuradio-usrp.la + +# For compiling outside the tree, these will get fished out by pkgconfig +LDADD = \ + $(BOOST_LDFLAGS) \ + $(BOOST_PROGRAM_OPTIONS_LIB) \ + $(GR_USRP_LA) + +noinst_HEADERS = \ + usrp_rx_cfile.h \ + usrp_siggen.h + +usrp_rx_cfile_SOURCES = \ + usrp_rx_cfile.cc + +usrp_siggen_SOURCES = \ + usrp_siggen.cc + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-usrp/apps/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-usrp/apps/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +usrp_rx_cfile$(EXEEXT): $(usrp_rx_cfile_OBJECTS) $(usrp_rx_cfile_DEPENDENCIES) + @rm -f usrp_rx_cfile$(EXEEXT) + $(CXXLINK) $(usrp_rx_cfile_OBJECTS) $(usrp_rx_cfile_LDADD) $(LIBS) +usrp_siggen$(EXEEXT): $(usrp_siggen_OBJECTS) $(usrp_siggen_DEPENDENCIES) + @rm -f usrp_siggen$(EXEEXT) + $(CXXLINK) $(usrp_siggen_OBJECTS) $(usrp_siggen_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_rx_cfile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_siggen.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-usrp/apps/usrp_rx_cfile.cc b/gr-usrp/apps/usrp_rx_cfile.cc new file mode 100644 index 00000000..d40ca58f --- /dev/null +++ b/gr-usrp/apps/usrp_rx_cfile.cc @@ -0,0 +1,245 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include + +namespace po = boost::program_options; + +usrp_subdev_spec +str_to_subdev(std::string spec_str) +{ + usrp_subdev_spec spec; + if(spec_str == "A" || spec_str == "A:0" || spec_str == "0:0") { + spec.side = 0; + spec.subdev = 0; + } + else if(spec_str == "A:1" || spec_str == "0:1") { + spec.side = 0; + spec.subdev = 1; + } + else if(spec_str == "B" || spec_str == "B:0" || spec_str == "1:0") { + spec.side = 1; + spec.subdev = 0; + } + else if(spec_str == "B:1" || spec_str == "1:1") { + spec.side = 1; + spec.subdev = 1; + } + else { + throw std::range_error("Incorrect subdevice specifications.\n"); + } + + return spec; +} + + +// Shared pointer constructor +usrp_rx_cfile_sptr make_usrp_rx_cfile(int which, usrp_subdev_spec spec, + int decim, double freq, float gain, + bool width8, bool nohb, + bool output_shorts, int nsamples, + const std::string &filename) +{ + return gnuradio::get_initial_sptr(new usrp_rx_cfile(which, spec, + decim, freq, gain, + width8, nohb, + output_shorts, + nsamples, + filename)); +} + +// Hierarchical block constructor, with no inputs or outputs +usrp_rx_cfile::usrp_rx_cfile(int which, usrp_subdev_spec spec, + int decim, double freq, float gain, + bool width8, bool nohb, + bool output_shorts, int nsamples, + const std::string &filename) : + gr_top_block("usrp_rx_cfile"), + d_which(which), d_spec(spec), d_decim(decim), d_freq(freq), + d_gain(gain), d_width8(width8), d_nohb(nohb), d_nsamples(nsamples), + d_filename(filename) +{ + usrp_source_c_sptr usrp; + + if(d_nohb || (d_decim<8)) { + // Min decimation of this firmware is 4. + // contains 4 Rx paths without halfbands and 0 tx paths. + std::string fpga_filename="std_4rx_0tx.rbf"; + + // use default values and add fpga_filename + usrp = usrp_make_source_c(d_which, d_decim, + 1, -1, 0, 0, 0, + fpga_filename.c_str()); + } + else { + // standard fpga firmware "std_2rxhb_2tx.rbf" contains + // 2 Rx paths with halfband filters and 2 tx paths + //(the default) min decimation 8 + usrp = usrp_make_source_c(d_which, d_decim); + } + + if(d_width8) { + int sample_width = 8; + int sample_shift = 8; + int format = usrp->make_format(sample_width, sample_shift); + int r = usrp->set_format(format); + printf("width8: format=%d r=%d\n", format, r); + } + + + /* Get subdevice and process it */ + db_base_sptr subdev = usrp->selected_subdev(d_spec); + printf("\nSubdevice name is %s\n", subdev->side_and_name().c_str()); + printf("Subdevice freq range: (%g, %g)\n", + subdev->freq_min(), subdev->freq_max()); + + unsigned int mux = usrp->determine_rx_mux_value(d_spec); + printf("mux: %#08x\n", mux); + usrp->set_mux(mux); + + float gain_min = subdev->gain_min(); + float gain_max = subdev->gain_max(); + if(d_gain == -1) { + d_gain = (gain_min + gain_max)/2.0; + } + printf("gain: %g\n", d_gain); + subdev->set_gain(d_gain); + + + /* Set the USRP/dboard frequency */ + usrp_tune_result r; + bool ok = usrp->tune(0, subdev, freq, &r); //DDC 0 + + if(!ok) { + throw std::runtime_error("Could not set frequency."); + } + + /* The rest */ + d_dst = gr_make_file_sink(sizeof(gr_complex), d_filename.c_str()); + + if(d_nsamples == -1) { + connect(usrp, 0, d_dst, 0); + } + else { + d_head = gr_make_head(sizeof(gr_complex), d_nsamples*2); + connect(usrp, 0, d_head, 0); + connect(d_head, 0, d_dst, 0); + } +} + + +int main(int argc, char *argv[]) +{ + int which = 0; // specify which USRP board + usrp_subdev_spec spec(0,0); // specify the d'board side + int decim = 16; // set the decimation rate + double freq = 0; // set the frequency + float gain = -1; // set the gain; -1 will set the mid-point gain + int nsamples = -1; // set the number of samples to collect; -1 will continue + bool width8 = false; // use 8-bit samples across USB + bool nohb = false; // don't use halfband filter in USRP + bool output_shorts = false; // use shorts + std::string filename = "received.dat"; + + po::options_description cmdconfig("Program options: usrp_text_rx [options] filename"); + cmdconfig.add_options() + ("help,h", "produce help message") + ("which,W", po::value(&which), "select which USRP board") + ("rx-subdev-spec,R", po::value(), "select USRP Rx side A or B (default=A)") + ("decim,d", po::value(&decim), "set fgpa decimation rate to DECIM") + ("freq,f", po::value(), "set frequency to FREQ") + ("gain,g", po::value(), "set gain in dB (default is midpoint)") + ("width-8,8", "Enable 8-bit samples across USB") + ("no-hb", "don't use halfband filter in usrp") + //("output-shorts,s", "output interleaved shorts in stead of complex floats") + ("nsamples,N", po::value(&nsamples), "number of samples to collect") + ; + + po::options_description fileconfig("Input file options"); + fileconfig.add_options() + ("filename", po::value(), "input file") + ; + + po::positional_options_description inputfile; + inputfile.add("filename", -1); + + po::options_description config; + config.add(cmdconfig).add(fileconfig); + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv). + options(config).positional(inputfile).run(), vm); + po::notify(vm); + + if (vm.count("help")) { + std::cout << cmdconfig << "\n"; + return 1; + } + + if(vm.count("filename")) { + filename = vm["filename"].as(); + } + + if(vm.count("freq")) { + freq = vm["freq"].as(); + } + else { + fprintf(stderr, "You must specify a frequency.\n"); + return -1; + } + + if(vm.count("rx-subdev-spec")) { + std::string s = vm["rx-subdev-spec"].as(); + spec = str_to_subdev(s); + } + + if(vm.count("width-8")) { + width8 = true; + } + if(vm.count("nohb")) { + nohb = true; + } + if(vm.count("output-shorts")) { + output_shorts = true; + } + + std::cout << "which: " << which << std::endl; + std::cout << "decim: " << decim << std::endl; + std::cout << "freq: " << freq << std::endl; + std::cout << "gain: " << gain << std::endl; + std::cout << "width-8 " << (width8 ? "Yes" : "No") << std::endl; + std::cout << "no-hb " << (nohb ? "Yes" : "no") << std::endl; + std::cout << "shorts: " << (output_shorts ? "Yes" : "No") << std::endl; + std::cout << "samples: " << nsamples << std::endl; + + usrp_rx_cfile_sptr top_block = make_usrp_rx_cfile(which, spec, decim, freq, + gain, width8, nohb, + output_shorts, nsamples, + filename); + top_block->run(); + + return 0; +} diff --git a/gr-usrp/apps/usrp_rx_cfile.h b/gr-usrp/apps/usrp_rx_cfile.h new file mode 100644 index 00000000..3a42972c --- /dev/null +++ b/gr-usrp/apps/usrp_rx_cfile.h @@ -0,0 +1,62 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +class usrp_rx_cfile; +typedef boost::shared_ptr usrp_rx_cfile_sptr; +usrp_rx_cfile_sptr make_usrp_rx_cfile(int which, usrp_subdev_spec spec, + int decim, double freq, float gain, + bool width8, bool nohb, + bool output_shorts, int nsamples, + const std::string &filename); + +class usrp_rx_cfile : public gr_top_block +{ +private: + usrp_rx_cfile(int which, usrp_subdev_spec spec, + int decim, double freq, float gain, + bool width8, bool nohb, + bool output_shorts, int nsamples, + const std::string &filename); + friend usrp_rx_cfile_sptr make_usrp_rx_cfile(int which, usrp_subdev_spec spec, + int decim, double freq, float gain, + bool width8, bool nohb, + bool output_shorts, int nsamples, + const std::string &filename); + + int d_which; + usrp_subdev_spec d_spec; + int d_decim; + double d_freq; + float d_gain; + bool d_width8, d_nohb; + int d_nsamples; + std::string d_filename; + + public: + gr_block_sptr d_head; + gr_block_sptr d_dst; +}; diff --git a/gr-usrp/apps/usrp_siggen.cc b/gr-usrp/apps/usrp_siggen.cc new file mode 100644 index 00000000..5fb66348 --- /dev/null +++ b/gr-usrp/apps/usrp_siggen.cc @@ -0,0 +1,225 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace po = boost::program_options; + +usrp_subdev_spec +str_to_subdev(std::string spec_str) +{ + usrp_subdev_spec spec; + if(spec_str == "A" || spec_str == "A:0" || spec_str == "0:0") { + spec.side = 0; + spec.subdev = 0; + } + else if(spec_str == "A:1" || spec_str == "0:1") { + spec.side = 0; + spec.subdev = 1; + } + else if(spec_str == "B" || spec_str == "B:0" || spec_str == "1:0") { + spec.side = 1; + spec.subdev = 0; + } + else if(spec_str == "B:1" || spec_str == "1:1") { + spec.side = 1; + spec.subdev = 1; + } + else { + throw std::range_error("Incorrect subdevice specifications.\n"); + } + + return spec; +} + +// Shared pointer constructor +usrp_siggen_sptr make_usrp_siggen(int which, usrp_subdev_spec spec, + double rf_freq, int interp, double wfreq, + int waveform, float amp, float gain, + float offset, long long nsamples) +{ + return gnuradio::get_initial_sptr(new usrp_siggen(which, spec, + rf_freq, interp, wfreq, + waveform, amp, gain, + offset, nsamples)); +} + +// Hierarchical block constructor, with no inputs or outputs +usrp_siggen::usrp_siggen(int which, usrp_subdev_spec spec, + double rf_freq, int interp, double wfreq, + int waveform, float amp, float gain, + float offset, long long nsamples) + : gr_top_block("usrp_siggen") +{ + usrp_sink_c_sptr usrp = usrp_make_sink_c(which, interp); + + db_base_sptr subdev = usrp->selected_subdev(spec); + printf("Subdevice name is %s\n", subdev->name().c_str()); + printf("Subdevice freq range: (%g, %g)\n", + subdev->freq_min(), subdev->freq_max()); + + unsigned int mux = usrp->determine_tx_mux_value(spec); + printf("mux: %#08x\n", mux); + usrp->set_mux(mux); + + if(gain == -1) { + gain = subdev->gain_max(); + } + subdev->set_gain(gain); + + float input_rate = usrp->dac_freq() / usrp->interp_rate(); + printf("baseband rate: %g\n", input_rate); + + usrp_tune_result r; + double target_freq = rf_freq; + bool ok = usrp->tune(subdev->which(), subdev, target_freq, &r); + + if(!ok) { + throw std::runtime_error("Could not set frequency."); + } + + subdev->set_enable(true); + + printf("target_freq: %f\n", target_freq); + printf("ok: %s\n", ok ? "true" : "false"); + printf("r.baseband_freq: %f\n", r.baseband_freq); + printf("r.dxc_freq: %f\n", r.dxc_freq); + printf("r.residual_freq: %f\n", r.residual_freq); + printf("r.inverted: %d\n", r.inverted); + + /* Set up the signal source */ + siggen = gr_make_sig_source_c(input_rate, GR_SIN_WAVE, wfreq, amp); + noisegen = gr_make_noise_source_c (GR_UNIFORM, amp); + if(waveform == GR_SIN_WAVE || waveform == GR_CONST_WAVE) { + source = siggen; + } + else if(waveform == GR_UNIFORM || waveform == GR_GAUSSIAN) { + source = noisegen; + } + else { + throw std::range_error("Unknown waveform type.\n"); + } + + siggen->set_waveform((gr_waveform_t)waveform); + + if (nsamples > 0){ + gr_block_sptr head = gr_make_head(sizeof(gr_complex), nsamples); + connect(source, 0, head, 0); + connect(head, 0, usrp, 0); + } + else { + connect(source, 0, usrp, 0); + } +} + +int main(int argc, char *argv[]) +{ + int which = 0; // specify which USRP board + usrp_subdev_spec spec(0,0); // specify the d'board side + int interp = 128; // set the interpolation rate + double rf_freq = 0; // set the frequency + double wfreq = 100e3; // set the waveform frequency + float amp = 5; // set the amplitude of the output + float gain = -1; // set the d'board PGA gain + float offset = 0; // set waveform offset + int waveform; + double nsamples = 0; // set the number of samples to transmit (0 -> inf) + + po::options_description cmdconfig("Program options"); + cmdconfig.add_options() + ("help,h", "produce help message") + ("which,W", po::value(&which), "select which USRP board") + ("tx-subdev-spec,T", po::value(), "select USRP Tx side A or B") + ("rf-freq,f", po::value(), "set RF center frequency to FREQ") + ("interp,i", po::value(&interp), "set fgpa interpolation rate to INTERP") + + ("sine", "generate a complex sinusoid [default]") + ("const", "generate a constant output") + ("gaussian", "generate Gaussian random output") + ("uniform", "generate Uniform random output") + + ("waveform-freq,w", po::value(&wfreq), "set waveform frequency to FREQ") + ("amplitude,a", po::value(&), "set amplitude") + ("gain,g", po::value(&gain), "set output gain to GAIN") + ("offset,o", po::value(&offset), "set waveform offset to OFFSET") + ("nsamples,N", po::value(&nsamples), "number of samples to send [default=+inf]") + ; + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv). + options(cmdconfig).run(), vm); + po::notify(vm); + + if (vm.count("help")) { + std::cout << cmdconfig << "\n"; + return 1; + } + + if(vm.count("rf-freq")) { + rf_freq = vm["rf-freq"].as(); + } + else { + fprintf(stderr, "You must specify a frequency.\n"); + return -1; + } + + if(vm.count("tx-subdev-spec")) { + std::string s = vm["tx-subdev-spec"].as(); + spec = str_to_subdev(s); + } + + if(vm.count("sine")) { + waveform = GR_SIN_WAVE; + } + else if(vm.count("const")) { + waveform = GR_CONST_WAVE; + } + else if(vm.count("gaussian")) { + waveform = GR_GAUSSIAN; + } + else if(vm.count("uniform")) { + waveform = GR_UNIFORM; + } + else { + waveform = GR_SIN_WAVE; + } + + printf("which: %d\n", which); + printf("interp: %d\n", interp); + printf("rf_freq: %g\n", rf_freq); + printf("amp: %f\n", amp); + printf("nsamples: %g\n", nsamples); + + usrp_siggen_sptr top_block = make_usrp_siggen(which, spec, rf_freq, + interp, wfreq, waveform, + amp, gain, offset, (long long) nsamples); + + top_block->run(); + + return 0; +} diff --git a/gr-usrp/apps/usrp_siggen.h b/gr-usrp/apps/usrp_siggen.h new file mode 100644 index 00000000..053c4bdf --- /dev/null +++ b/gr-usrp/apps/usrp_siggen.h @@ -0,0 +1,53 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +usrp_subdev_spec str_to_subdev(std::string spec_str); + +class usrp_siggen; +typedef boost::shared_ptr usrp_siggen_sptr; +usrp_siggen_sptr make_usrp_siggen(int which, usrp_subdev_spec spec, + double rf_freq, int interp, double wfreq, + int waveform, float amp, float gain, + float offset, long long nsamples); + +class usrp_siggen : public gr_top_block +{ +private: + usrp_siggen(int which, usrp_subdev_spec spec, + double rf_freq, int interp, double wfreq, + int waveform, float amp, float gain, + float offset, long long nsamples); + friend usrp_siggen_sptr make_usrp_siggen(int which, usrp_subdev_spec spec, + double rf_freq, int interp, double wfreq, + int waveform, float amp, float gain, + float offset, + long long nsamples); + + public: + gr_block_sptr source; + gr_sig_source_c_sptr siggen; + gr_noise_source_c_sptr noisegen; +}; diff --git a/gr-usrp/gnuradio-usrp.pc.in b/gr-usrp/gnuradio-usrp.pc.in new file mode 100644 index 00000000..6c1d75d4 --- /dev/null +++ b/gr-usrp/gnuradio-usrp.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/gnuradio + +Name: gnuradio-usrp +Description: GNU Software Radio support for Universal Software Radio Peripheral +Requires: gnuradio-core usrp +Version: @VERSION@ +Libs: -L${libdir} -lgnuradio-usrp +Cflags: -I${includedir} diff --git a/gr-usrp/src/Makefile.am b/gr-usrp/src/Makefile.am index c86631c0..9b8737d7 100644 --- a/gr-usrp/src/Makefile.am +++ b/gr-usrp/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,99 +21,93 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.usrp module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# ---------------------------------------------------------------- +# Misc. build/installation activities EXTRA_DIST = run_tests.in -TESTS = run_tests - -LOCAL_IFILES = \ - $(top_srcdir)/gr-usrp/src/usrp1.i - -NON_LOCAL_IFILES = $(GNURADIO_I) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -BUILT_SOURCES = \ - usrp1.cc \ - usrp1.py - -ourpython_PYTHON = \ - db_base.py \ - db_basic.py \ - db_dbs_rx.py \ - db_flexrf.py \ - db_flexrf_mimo.py \ - db_instantiator.py \ - db_tv_rx.py \ - flexrf_debug_gui.py \ - tx_debug_gui.py \ - usrp.py \ - usrp1.py \ - usrp_multi.py - - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) \ - $(PYTHON_CPPFLAGS) \ - $(USRP_INCLUDES) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) \ - $(STD_DEFINES_AND_INCLUDES) \ - $(USRP_INCLUDES) - -grinclude_HEADERS = \ - usrp1_sink_base.h \ - usrp1_sink_c.h \ - usrp1_sink_s.h \ - usrp1_source_base.h \ - usrp1_source_c.h \ - usrp1_source_s.h - -swiginclude_HEADERS = \ - $(LOCAL_IFILES) - - -ourlib_LTLIBRARIES = _usrp1.la - - -_usrp1_la_SOURCES = \ - usrp1.cc \ - usrp1_sink_base.cc \ - usrp1_sink_c.cc \ - usrp1_sink_s.cc \ - usrp1_source_base.cc \ - usrp1_source_c.cc \ - usrp1_source_s.cc - - -_usrp1_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(USRP_LA) \ - -lstdc++ - - -_usrp1_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version - - -usrp1.cc usrp1.py: usrp1.i $(NON_LOCAL_IFILES) $(LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module usrp1 -o usrp1.cc $(LOCAL_IFILES) - - -noinst_PYTHON = \ - qa_usrp.py - -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +TESTS = run_tests -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +DISTCLEANFILES = run_tests + +noinst_PYTHON = qa_usrp.py + +# ---------------------------------------------------------------- +# The straight C++ library + +AM_CPPFLAGS = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + $(USRP_INCLUDES) \ + $(WITH_INCLUDES) + +lib_LTLIBRARIES = \ + libgnuradio-usrp.la + +libgnuradio_usrp_la_SOURCES = \ + usrp_base.cc \ + usrp_sink_base.cc \ + usrp_sink_c.cc \ + usrp_sink_s.cc \ + usrp_source_base.cc \ + usrp_source_c.cc \ + usrp_source_s.cc + +libgnuradio_usrp_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + $(USRP_LA) + +libgnuradio_usrp_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 + +grinclude_HEADERS = \ + usrp_base.h \ + usrp_sink_base.h \ + usrp_sink_c.h \ + usrp_sink_s.h \ + usrp_source_base.h \ + usrp_source_c.h \ + usrp_source_s.h + +# ---------------------------------------------------------------- +# The SWIG library + +TOP_SWIG_IFILES = \ + usrp_swig.i + +# Install so that they end up available as: +# import gnuradio.usrp +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/usrp +usrp_swig_pythondir_category = \ + gnuradio/usrp + +# additional arguments to the SWIG command +usrp_swig_swig_args = \ + $(USRP_INCLUDES) + +# additional libraries for linking with the SWIG-generated library +usrp_swig_la_swig_libadd = \ + libgnuradio-usrp.la + +# additional Python files to be installed along with the SWIG-generated one +usrp_swig_python = \ + __init__.py + +# additional SWIG files to be installed +usrp_swig_swiginclude_headers = \ + usrp_base.i \ + usrp_source_base.i \ + usrp_source_c.i \ + usrp_source_s.i \ + usrp_sink_base.i \ + usrp_sink_c.i \ + usrp_sink_s.i \ + usrp_standard.i + +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) diff --git a/gr-usrp/src/Makefile.in b/gr-usrp/src/Makefile.in index 38744c37..b1d845d1 100644 --- a/gr-usrp/src/Makefile.in +++ b/gr-usrp/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 usrp_swig.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -82,30 +124,41 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(grinclude_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(srcdir)/run_tests.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig \ + $(usrp_swig_python_PYTHON) $(usrp_swig_swiginclude_HEADERS) subdir = gr-usrp/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +167,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,48 +214,58 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(usrp_swig_pylibdir)" \ + "$(DESTDIR)$(usrp_swig_pythondir)" "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(usrp_swig_swigincludedir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +usrp_swig_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) $(usrp_swig_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la -am__DEPENDENCIES_3 = $(top_builddir)/usrp/host/lib/libusrp.la -_usrp1_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ - $(am__DEPENDENCIES_3) -am__usrp1_la_OBJECTS = usrp1.lo usrp1_sink_base.lo usrp1_sink_c.lo \ - usrp1_sink_s.lo usrp1_source_base.lo usrp1_source_c.lo \ - usrp1_source_s.lo -_usrp1_la_OBJECTS = $(am__usrp1_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_usrp_swig_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(usrp_swig_la_swig_libadd) +am__usrp_swig_la_OBJECTS = _usrp_swig_la-usrp_swig.lo +_usrp_swig_la_OBJECTS = $(am__usrp_swig_la_OBJECTS) +_usrp_swig_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_usrp_swig_la_CXXFLAGS) \ + $(CXXFLAGS) $(_usrp_swig_la_LDFLAGS) $(LDFLAGS) -o $@ +libgnuradio_usrp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libgnuradio_usrp_la_OBJECTS = usrp_base.lo usrp_sink_base.lo \ + usrp_sink_c.lo usrp_sink_s.lo usrp_source_base.lo \ + usrp_source_c.lo usrp_source_s.lo +libgnuradio_usrp_la_OBJECTS = $(am_libgnuradio_usrp_la_OBJECTS) +libgnuradio_usrp_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgnuradio_usrp_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(_usrp1_la_SOURCES) -DIST_SOURCES = $(_usrp1_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_usrp_swig_la_SOURCES) $(libgnuradio_usrp_la_SOURCES) +DIST_SOURCES = $(_usrp_swig_la_SOURCES) $(libgnuradio_usrp_la_SOURCES) +usrp_swig_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +usrp_swig_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(usrp_swig_swiginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -190,9 +273,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -200,6 +290,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -212,73 +304,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -288,49 +373,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -338,15 +463,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -356,16 +624,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -374,150 +660,289 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.usrp module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/usrp_swig-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* + +# ---------------------------------------------------------------- +# Misc. build/installation activities EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-usrp/src/usrp1.i - -NON_LOCAL_IFILES = $(GNURADIO_I) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -BUILT_SOURCES = \ - usrp1.cc \ - usrp1.py - -ourpython_PYTHON = \ - db_base.py \ - db_basic.py \ - db_dbs_rx.py \ - db_flexrf.py \ - db_flexrf_mimo.py \ - db_instantiator.py \ - db_tv_rx.py \ - flexrf_debug_gui.py \ - tx_debug_gui.py \ - usrp.py \ - usrp1.py \ - usrp_multi.py - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) \ - $(PYTHON_CPPFLAGS) \ - $(USRP_INCLUDES) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) \ - $(STD_DEFINES_AND_INCLUDES) \ - $(USRP_INCLUDES) - +DISTCLEANFILES = run_tests +noinst_PYTHON = qa_usrp.py + +# ---------------------------------------------------------------- +# The straight C++ library +AM_CPPFLAGS = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + $(USRP_INCLUDES) \ + $(WITH_INCLUDES) + +lib_LTLIBRARIES = \ + libgnuradio-usrp.la + +libgnuradio_usrp_la_SOURCES = \ + usrp_base.cc \ + usrp_sink_base.cc \ + usrp_sink_c.cc \ + usrp_sink_s.cc \ + usrp_source_base.cc \ + usrp_source_c.cc \ + usrp_source_s.cc + +libgnuradio_usrp_la_LIBADD = \ + $(GNURADIO_CORE_LA) \ + $(USRP_LA) + +libgnuradio_usrp_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 grinclude_HEADERS = \ - usrp1_sink_base.h \ - usrp1_sink_c.h \ - usrp1_sink_s.h \ - usrp1_source_base.h \ - usrp1_source_c.h \ - usrp1_source_s.h - -swiginclude_HEADERS = \ - $(LOCAL_IFILES) - -ourlib_LTLIBRARIES = _usrp1.la -_usrp1_la_SOURCES = \ - usrp1.cc \ - usrp1_sink_base.cc \ - usrp1_sink_c.cc \ - usrp1_sink_s.cc \ - usrp1_source_base.cc \ - usrp1_source_c.cc \ - usrp1_source_s.cc - -_usrp1_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(USRP_LA) \ + usrp_base.h \ + usrp_sink_base.h \ + usrp_sink_c.h \ + usrp_sink_s.h \ + usrp_source_base.h \ + usrp_source_c.h \ + usrp_source_s.h + + +# ---------------------------------------------------------------- +# The SWIG library +TOP_SWIG_IFILES = \ + usrp_swig.i + + +# Install so that they end up available as: +# import gnuradio.usrp +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/usrp +usrp_swig_pythondir_category = \ + gnuradio/usrp + + +# additional arguments to the SWIG command +usrp_swig_swig_args = \ + $(USRP_INCLUDES) + + +# additional libraries for linking with the SWIG-generated library +usrp_swig_la_swig_libadd = \ + libgnuradio-usrp.la + + +# additional Python files to be installed along with the SWIG-generated one +usrp_swig_python = \ + __init__.py + + +# additional SWIG files to be installed +usrp_swig_swiginclude_headers = \ + usrp_base.i \ + usrp_source_base.i \ + usrp_source_c.i \ + usrp_source_s.i \ + usrp_sink_base.i \ + usrp_sink_c.i \ + usrp_sink_s.i \ + usrp_standard.i + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ -lstdc++ -_usrp1_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -noinst_PYTHON = \ - qa_usrp.py +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = usrp_swig.py usrp_swig.cc +usrp_swig_pythondir = $(pythondir)/$(usrp_swig_pythondir_category) +usrp_swig_pylibdir = $(pyexecdir)/$(usrp_swig_pylibdir_category) +usrp_swig_swigincludedir = $(swigincludedir) +usrp_swig_swiginclude_HEADERS = \ + usrp_swig.i \ + $(usrp_swig_swiginclude_headers) + +usrp_swig_pylib_LTLIBRARIES = \ + _usrp_swig.la + +_usrp_swig_la_SOURCES = \ + usrp_swig.cc \ + $(usrp_swig_la_swig_sources) + +_usrp_swig_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(usrp_swig_la_swig_libadd) + +_usrp_swig_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(usrp_swig_la_swig_ldflags) -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +_usrp_swig_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(usrp_swig_la_swig_cxxflags) +usrp_swig_python_PYTHON = \ + usrp_swig.py \ + $(usrp_swig_python) + + +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -543,35 +968,64 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-usrp_swig_pylibLTLIBRARIES: $(usrp_swig_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(usrp_swig_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_swig_pylibdir)" + @list='$(usrp_swig_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usrp_swig_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(usrp_swig_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usrp_swig_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(usrp_swig_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-usrp_swig_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(usrp_swig_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(usrp_swig_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(usrp_swig_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-usrp_swig_pylibLTLIBRARIES: + -test -z "$(usrp_swig_pylib_LTLIBRARIES)" || rm -f $(usrp_swig_pylib_LTLIBRARIES) + @list='$(usrp_swig_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done -_usrp1.la: $(_usrp1_la_OBJECTS) $(_usrp1_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_usrp1_la_LDFLAGS) $(_usrp1_la_OBJECTS) $(_usrp1_la_LIBADD) $(LIBS) +_usrp_swig.la: $(_usrp_swig_la_OBJECTS) $(_usrp_swig_la_DEPENDENCIES) + $(_usrp_swig_la_LINK) -rpath $(usrp_swig_pylibdir) $(_usrp_swig_la_OBJECTS) $(_usrp_swig_la_LIBADD) $(LIBS) +libgnuradio-usrp.la: $(libgnuradio_usrp_la_OBJECTS) $(libgnuradio_usrp_la_DEPENDENCIES) + $(libgnuradio_usrp_la_LINK) -rpath $(libdir) $(libgnuradio_usrp_la_OBJECTS) $(libgnuradio_usrp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -579,75 +1033,79 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1_sink_base.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1_sink_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1_sink_s.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1_source_base.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1_source_c.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp1_source_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_usrp_swig_la-usrp_swig.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_sink_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_sink_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_sink_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_source_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_source_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_source_s.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_usrp_swig_la-usrp_swig.lo: usrp_swig.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_usrp_swig_la_CXXFLAGS) $(CXXFLAGS) -MT _usrp_swig_la-usrp_swig.lo -MD -MP -MF $(DEPDIR)/_usrp_swig_la-usrp_swig.Tpo -c -o _usrp_swig_la-usrp_swig.lo `test -f 'usrp_swig.cc' || echo '$(srcdir)/'`usrp_swig.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_usrp_swig_la-usrp_swig.Tpo $(DEPDIR)/_usrp_swig_la-usrp_swig.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='usrp_swig.cc' object='_usrp_swig_la-usrp_swig.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_usrp_swig_la_CXXFLAGS) $(CXXFLAGS) -c -o _usrp_swig_la-usrp_swig.lo `test -f 'usrp_swig.cc' || echo '$(srcdir)/'`usrp_swig.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-usrp_swig_pythonPYTHON: $(usrp_swig_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(usrp_swig_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_swig_pythondir)" + @list='$(usrp_swig_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(usrp_swig_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(usrp_swig_pythondir)/$$f'"; \ + $(usrp_swig_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(usrp_swig_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(usrp_swig_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(usrp_swig_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-usrp_swig_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(usrp_swig_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(usrp_swig_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(usrp_swig_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(usrp_swig_pythondir)/$${f}o"; \ done install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -662,22 +1120,22 @@ uninstall-grincludeHEADERS: echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-usrp_swig_swigincludeHEADERS: $(usrp_swig_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(usrp_swig_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_swig_swigincludedir)" + @list='$(usrp_swig_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(usrp_swig_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(usrp_swig_swigincludedir)/$$f'"; \ + $(usrp_swig_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(usrp_swig_swigincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-usrp_swig_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(usrp_swig_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(usrp_swig_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(usrp_swig_swigincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -685,8 +1143,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -698,8 +1156,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -709,13 +1167,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -731,7 +1188,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -740,7 +1197,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -752,7 +1209,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -766,23 +1223,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -802,23 +1272,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-usrp/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -838,8 +1306,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrp_swig_pylibdir)" "$(DESTDIR)$(usrp_swig_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(usrp_swig_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -863,6 +1331,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -870,14 +1339,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-usrp_swig_pylibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -889,15 +1358,25 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-grincludeHEADERS \ + install-usrp_swig_pylibLTLIBRARIES \ + install-usrp_swig_pythonPYTHON \ + install-usrp_swig_swigincludeHEADERS + +install-dvi: install-dvi-am -install-exec-am: +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -918,34 +1397,114 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS uninstall-libLTLIBRARIES \ + uninstall-usrp_swig_pylibLTLIBRARIES \ + uninstall-usrp_swig_pythonPYTHON \ + uninstall-usrp_swig_swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-usrp_swig_pylibLTLIBRARIES ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip install-usrp_swig_pylibLTLIBRARIES \ + install-usrp_swig_pythonPYTHON \ + install-usrp_swig_swigincludeHEADERS installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS + uninstall-libLTLIBRARIES uninstall-usrp_swig_pylibLTLIBRARIES \ + uninstall-usrp_swig_pythonPYTHON \ + uninstall-usrp_swig_swigincludeHEADERS -usrp1.cc usrp1.py: usrp1.i $(NON_LOCAL_IFILES) $(LOCAL_IFILES) - $(SWIG) $(SWIGPYTHONARGS) -module usrp1 -o usrp1.cc $(LOCAL_IFILES) +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -# Don't distribute output of swig +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +usrp_swig_pythondir_category ?= gnuradio/usrp_swig +usrp_swig_pylibdir_category ?= $(usrp_swig_pythondir_category) + +usrp_swig.h usrp_swig.py usrp_swig.cc: usrp_swig.i + trap 'rm -rf $(DEPDIR)/usrp_swig-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/usrp_swig-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/usrp_swig-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/usrp_swig-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/usrp_swig-generate-lock; \ + else \ + while test -d $(DEPDIR)/usrp_swig-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/usrp_swig-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/usrp_swig-generate-stamp: + 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; + $(RM) $(DEPDIR)/usrp_swig.d + cp $(DEPDIR)/usrp_swig.Std $(DEPDIR)/usrp_swig.d + echo "" >> $(DEPDIR)/usrp_swig.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/usrp_swig.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/usrp_swig.d + $(RM) $(DEPDIR)/usrp_swig.Std + touch $(DEPDIR)/usrp_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)/usrp_swig.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-usrp/src/Makefile.swig.gen b/gr-usrp/src/Makefile.swig.gen new file mode 100644 index 00000000..9884b3d4 --- /dev/null +++ b/gr-usrp/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 usrp_swig.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/usrp_swig +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/usrp_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. + +usrp_swig_pythondir_category ?= gnuradio/usrp_swig +usrp_swig_pylibdir_category ?= $(usrp_swig_pythondir_category) +usrp_swig_pythondir = $(pythondir)/$(usrp_swig_pythondir_category) +usrp_swig_pylibdir = $(pyexecdir)/$(usrp_swig_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +usrp_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)/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 . + +usrp_swig_swiginclude_HEADERS = \ + usrp_swig.i \ + $(usrp_swig_swiginclude_headers) + +usrp_swig_pylib_LTLIBRARIES = \ + _usrp_swig.la + +_usrp_swig_la_SOURCES = \ + usrp_swig.cc \ + $(usrp_swig_la_swig_sources) + +_usrp_swig_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(usrp_swig_la_swig_libadd) + +_usrp_swig_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(usrp_swig_la_swig_ldflags) + +_usrp_swig_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(usrp_swig_la_swig_cxxflags) + +usrp_swig_python_PYTHON = \ + usrp_swig.py \ + $(usrp_swig_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/usrp_swig.d@am__quote@ + diff --git a/gr-usrp/src/__init__.py b/gr-usrp/src/__init__.py new file mode 100644 index 00000000..c81b2f2b --- /dev/null +++ b/gr-usrp/src/__init__.py @@ -0,0 +1,28 @@ +# +# Copyright 2008 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. +# + +# The presence of this file turns this directory into a Python package + +# Add SWIG generated code to this namespace +from usrp_swig import * + +# Add other content from pure-Python modules here + diff --git a/gr-usrp/src/db_base.py b/gr-usrp/src/db_base.py deleted file mode 100644 index a7f43aac..00000000 --- a/gr-usrp/src/db_base.py +++ /dev/null @@ -1,234 +0,0 @@ -# -# Copyright 2005,2006 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. -# - -import usrp_prims -import weakref -from usrp_fpga_regs import * - -class db_base(object): - """ - Abstract base class for all daughterboards. - - This defines the required operations and interfaces for all d'boards. - """ - def __init__(self, usrp, which): - """ - Initialize daughterboard interface. - - @param usrp: instance of usrp - @param which: which daughterboard side: A = 0, B = 1 - @type which: int - """ - - if not (which in (0, 1)): - raise ValueError, "Invalid value of which: %s" % (which,) - - self._u = weakref.proxy(usrp) - - self._which = which - if hasattr(self._u, 'tx_freq'): # is this a tx or rx daughterboard? - self._tx = True - self._slot = which * 2 - else: - self._tx = False - self._slot = which * 2 + 1 - - FR_TX_A_REFCLK = 40 - FR_RX_A_REFCLK = 41 - FR_TX_B_REFCLK = 42 - FR_RX_B_REFCLK = 43 - - self._refclk_reg = (FR_TX_A_REFCLK,FR_RX_A_REFCLK,FR_TX_B_REFCLK,FR_RX_B_REFCLK)[self._slot] - - - def dbid(self): - return self._u.daughterboard_id(self._which) - - def name(self): - return usrp_prims.usrp_dbid_to_string(self.dbid()) - - def side_and_name(self): - return "AB"[self._which] + ': ' + self.name() - - # Function to bypass ADC buffers. Any board which is DC-coupled should bypass the buffers - def bypass_adc_buffers(self,bypass): - if self._tx: - raise RuntimeError, "TX Board has no adc buffers" - if self._which==0: - self._u.set_adc_buffer_bypass(0, bypass) - self._u.set_adc_buffer_bypass(1, bypass) - else: - self._u.set_adc_buffer_bypass(2, bypass) - self._u.set_adc_buffer_bypass(3, bypass) - - # ------------------------------------------------------------------------ - # Reference Clock section - - # Control whether a reference clock is sent to the daughterboards, - # and what frequency - # - # Bit 7 -- 1 turns on refclk, 0 allows IO use - # Bits 6:0 Divider value - # - # FIXME get these from the fpga_regs_standard.h - - def _refclk_freq(self): - return self._u.fpga_master_clock_freq()/self._refclk_divisor() - - def _enable_refclk(self,enable): - CLOCK_OUT = 1 # Clock is on lowest bit - REFCLK_ENABLE = 0x80 - REFCLK_DIVISOR_MASK = 0x7f - if enable: - self._u._write_oe(self._which, CLOCK_OUT, CLOCK_OUT) # output enable - self._u._write_fpga_reg(self._refclk_reg, - ((self._refclk_divisor() & REFCLK_DIVISOR_MASK) - | REFCLK_ENABLE)) - else: - self._u._write_fpga_reg(self._refclk_reg, 0) - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - raise NotImplementedError - - # ------------------------------------------------------------------------ - # Automatic Transmit/Receive switching - # - # The presence or absence of data in the FPGA transmit fifo - # selects between two sets of values for each of the 4 banks of - # daughterboard i/o pins. - # - # Each daughterboard slot has 3 16-bit registers associated with it: - # FR_ATR_MASK_*, FR_ATR_TXVAL_* and FR_ATR_RXVAL_* - # - # FR_ATR_MASK_{0,1,2,3}: - # - # These registers determine which of the daugherboard i/o pins are - # affected by ATR switching. If a bit in the mask is set, the - # corresponding i/o bit is controlled by ATR, else it's output - # value comes from the normal i/o pin output register: - # FR_IO_{0,1,2,3}. - # - # FR_ATR_TXVAL_{0,1,2,3}: - # FR_ATR_RXVAL_{0,1,2,3}: - # - # If the Tx fifo contains data, then the bits from TXVAL that are - # selected by MASK are output. Otherwise, the bits from RXVAL that - # are selected by MASK are output. - - def set_atr_mask(self, v): - """ - Set Auto T/R mask. - """ - return self._u._write_fpga_reg(FR_ATR_MASK_0 + 3 * self._slot, v) - - def set_atr_txval(self, v): - """ - Set Auto T/R register value to be used when transmitting. - """ - return self._u._write_fpga_reg(FR_ATR_TXVAL_0 + 3 * self._slot, v) - - def set_atr_rxval(self, v): - """ - Set Auto T/R register value to be used when receiving. - """ - return self._u._write_fpga_reg(FR_ATR_RXVAL_0 + 3 * self._slot, v) - - # derived classes should override the following methods - - def freq_range(self): - """ - Return range of frequencies in Hz that can be tuned by this d'board. - - @returns (min_freq, max_freq, step_size) - @rtype tuple - """ - raise NotImplementedError - - def set_freq(self, target_freq): - """ - Set the frequency. - - @param freq: target RF frequency in Hz - @type freq: float - - @returns (ok, actual_baseband_freq) where: - ok is True or False and indicates success or failure, - actual_baseband_freq is the RF frequency that corresponds to DC in the IF. - """ - raise NotImplementedError - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - raise NotImplementedError - - def set_gain(self, gain): - """ - Set the gain. - - @param gain: gain in decibels - @returns True/False - """ - raise NotImplementedError - - def is_quadrature(self): - """ - Return True if this daughterboard does quadrature up or down conversion. - That is, return True if this board requires both I & Q analog channels. - - This bit of info is useful when setting up the USRP Rx mux register. - """ - raise NotImplementedError - - def i_and_q_swapped(self): - """ - Return True if this is a quadrature device and ADC 0 is Q. - """ - return False - - def spectrum_inverted(self): - """ - Return True if the dboard gives an inverted spectrum - """ - return False - - def set_enable(self, on): - """ - For tx daughterboards, this controls the transmitter enable. - """ - pass - - def set_auto_tr(self,on): - """ - Enable automatic Transmit/Receive switching (ATR). - - Should be overridden in subclasses that care. This will typically - set the atr_mask, txval and rxval. - """ - pass - diff --git a/gr-usrp/src/db_basic.py b/gr-usrp/src/db_basic.py deleted file mode 100644 index 22c8c40e..00000000 --- a/gr-usrp/src/db_basic.py +++ /dev/null @@ -1,252 +0,0 @@ -# -# Copyright 2005 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. -# - -import sys -import usrp_dbid -import db_base -import db_instantiator - -class db_basic_tx(db_base.db_base): - def __init__(self, usrp, which): - """ - Handler for Basic Tx daughterboards. - - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to TX_A or TX_B respectively - """ - # sets _u and _which - db_base.db_base.__init__(self, usrp, which) - - if 0: # Doing this would give us a different default than the historical values... - g = self.gain_range() # initialize gain - self.set_gain(float(g[0]+g[1]) / 2) - - - def freq_range(self): - """ - Return range of frequencies in Hz that can be tuned by this d'board. - - @returns (min_freq, max_freq, step_size) - @rtype tuple - - We say we can do pretty much anything... - """ - return (-90e9, 90e9, 1e-6) - - def set_freq(self, target_freq): - """ - Set the frequency. - - @param freq: target RF frequency in Hz - @type freq: float - - @returns (ok, actual_baseband_freq) where: - ok is True or False and indicates success or failure, - actual_baseband_freq is the RF frequency that corresponds to DC in the IF. - """ - return (True, 0) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max(), self._u.pga_db_per_step()) - - def set_gain(self, gain): - """ - Set the gain. - - @param gain: gain in decibels - @returns True/False - """ - ok = self._u.set_pga(self._which * 2 + 0, gain) - ok = ok and self._u.set_pga(self._which * 2 + 1, gain) - return ok - - def is_quadrature(self): - """ - Return True if this board requires both I & Q analog channels. - """ - return True - - -class db_basic_rx(db_base.db_base): - def __init__(self, usrp, which, subdev): - """ - Handler for Basic Rx daughterboards. - - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively - @param subdev: which analog i/o channel: 0 or 1 - @type subdev: int - """ - # sets _u and _which - db_base.db_base.__init__(self, usrp, which) - self._subdev = subdev - - self.bypass_adc_buffers(True) - - if 0: # Doing this would give us a different default than the historical values... - g = self.gain_range() # initialize gain - self.set_gain(float(g[0]+g[1]) / 2) - - - def freq_range(self): - """ - Return range of frequencies in Hz that can be tuned by this d'board. - - @returns (min_freq, max_freq, step_size) - @rtype tuple - - We say we can do pretty much anything... - """ - return (0, 90e9, 1e-6) - - def set_freq(self, target_freq): - """ - Set the frequency. - - @param freq: target RF frequency in Hz - @type freq: float - - @returns (ok, actual_baseband_freq) where: - ok is True or False and indicates success or failure, - actual_baseband_freq is the RF frequency that corresponds to DC in the IF. - """ - return (True, 0) - - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max(), self._u.pga_db_per_step()) - - def set_gain(self, gain): - """ - Set the gain. - - @param gain: gain in decibels - @returns True/False - """ - return self._u.set_pga(self._which * 2 + self._subdev, gain) - - def is_quadrature(self): - """ - Return True if this board requires both I & Q analog channels. - - This bit of info is useful when setting up the USRP Rx mux register. - """ - return False - -class db_lf_rx(db_basic_rx): - def __init__(self, usrp, which, subdev): - """ - Handler for Low Freq Rx daughterboards. - - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively - @param subdev: which analog i/o channel: 0 or 1 - @type subdev: int - """ - # sets _u and _which - db_basic_rx.__init__(self, usrp, which, subdev) - - def freq_range(self): - """ - Return range of frequencies in Hz that can be tuned by this d'board. - - @returns (min_freq, max_freq, step_size) - @rtype tuple - - We cover the first nyquist zone only - """ - return (0, 32e6, 1e-6) - -class db_lf_tx(db_basic_tx): - def __init__(self, usrp, which): - """ - Handler for Low Freq Tx daughterboards. - - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively - """ - # sets _u and _which - db_basic_tx.__init__(self, usrp, which) - - def freq_range(self): - """ - Return range of frequencies in Hz that can be tuned by this d'board. - - @returns (min_freq, max_freq, step_size) - @rtype tuple - - We cover the first nyquist zone only - """ - return (-32e6, 32e6, 1e-6) - - -# hook these daughterboard classes into the auto-instantiation framework - -def _basic_rx_instantiator(usrp, which): - # two single channel subdevices - return (db_basic_rx(usrp, which, 0), db_basic_rx(usrp, which, 1)) - -def _lf_rx_instantiator(usrp, which): - # two single channel subdevices - return (db_lf_rx(usrp, which, 0), db_lf_rx(usrp, which, 1)) - -def _basic_tx_instantiator(usrp, which): - # one quadrature subdevice - return (db_basic_tx(usrp, which),) - -def _lf_tx_instantiator(usrp, which): - # one quadrature subdevice - return (db_lf_tx(usrp, which),) - -def _no_db_instantiator(usrp, which): - if hasattr(usrp, 'tx_freq'): # is this a tx or rx daughterboard? - return (_basic_tx_instantiator(usrp, which)) - else: - return (_basic_rx_instantiator(usrp, which)) - -def _invalid_instantiator(usrp, which): - if hasattr(usrp, 'tx_freq'): # is this a tx or rx daughterboard? - sys.stderr.write('\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a "Basic Tx."\n') - sys.stderr.write('Warning: This is almost certainly wrong... Use appropriate burn-*-eeprom utility.\n\n') - return _basic_tx_instantiator(usrp, which) - else: - sys.stderr.write('\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a "Basic Rx."\n') - sys.stderr.write('Warning: This is almost certainly wrong... Use appropriate burn-*-eeprom utility.\n\n') - return _basic_rx_instantiator(usrp, which) - -db_instantiator.add(-1, _no_db_instantiator) # no daughterboard -db_instantiator.add(-2, _invalid_instantiator) # invalid eeprom contents -db_instantiator.add(usrp_dbid.BASIC_TX, _basic_tx_instantiator) -db_instantiator.add(usrp_dbid.BASIC_RX, _basic_rx_instantiator) -db_instantiator.add(usrp_dbid.LF_TX, _lf_tx_instantiator) -db_instantiator.add(usrp_dbid.LF_RX, _lf_rx_instantiator) diff --git a/gr-usrp/src/db_dbs_rx.py b/gr-usrp/src/db_dbs_rx.py deleted file mode 100644 index 07724546..00000000 --- a/gr-usrp/src/db_dbs_rx.py +++ /dev/null @@ -1,345 +0,0 @@ -# -# Copyright 2005 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. -# - -import math -import usrp_dbid -import db_base -import db_instantiator - -def int_seq_to_str (seq): - """convert a sequence of integers into a string""" - return ''.join (map (chr, seq)) - -def str_to_int_seq (str): - """convert a string to a list of integers""" - return map (ord, str) - -class db_dbs_rx (db_base.db_base): - def __init__ (self, usrp, which): - """ - Control DBS receiver based USRP daughterboard. - - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively - @type which: int - """ - # sets _u and _which - db_base.db_base.__init__(self, usrp, which) - - self._u._write_oe(self._which,0x0001,0x0001) - self.i2c_addr = (0x67, 0x65)[self._which] - # set basic parameters - # set default values - self.n = 950 - self.div2 = 0 - self.osc = 5 - self.cp = 3 - self.r = 4 - self.r_int = 1 - self.fdac = 127 - self.m = 2 - self.dl = 0 - self.ade = 0 - self.adl = 0 - self.gc2 = 31 - self.diag = 0 - - # FIXME this should be in the core dboard class - self.refclk_divisor = 16 - self._enable_refclk(True) - - g = self.gain_range() - self.set_gain(float(g[0]+g[1]) / 2) - self.bypass_adc_buffers(True) - - def __del__(self): - if self._u: - self._enable_refclk(False) - - def _write_reg (self, regno, v): - """regno is in [0,5], v is value to write to register""" - assert (0 <= regno and regno <= 5) - self._u.write_i2c (self.i2c_addr, int_seq_to_str ((regno, v))) - - def _write_regs (self, starting_regno, vals): - """starting_regno is in [0,5], - vals is a seq of integers to write to consecutive registers""" - self._u.write_i2c (self.i2c_addr, - int_seq_to_str ((starting_regno,) + tuple (vals))) - - def _read_status (self): - """If successful, return list of two ints: [status_info, filter_DAC]""" - s = self._u.read_i2c (self.i2c_addr, 2) - if len (s) != 2: - return None - return str_to_int_seq (s) - - def _send_reg(self,regno): - assert (0 <= regno and regno <= 5) - if regno == 0: - self._write_reg(0,(self.div2<<7) + (self.n>>8)) - if regno == 1: - self._write_reg(1,self.n & 255) - if regno == 2: - self._write_reg(2,self.osc + (self.cp<<3) + (self.r_int<<5)) - if regno == 3: - self._write_reg(3,self.fdac) - if regno == 4: - self._write_reg(4,self.m + (self.dl<<5) + (self.ade<<6) + (self.adl<<7)) - if regno == 5: - self._write_reg(5,self.gc2 + (self.diag<<5)) - - # BW setting - def _set_m(self,m): - assert m>0 and m<32 - self.m = m - self._send_reg(4) - - def _set_fdac(self,fdac): - assert fdac>=0 and fdac<128 - self.fdac = fdac - self._send_reg(3) - - def set_bw (self, bw): - #assert (bw>=4e6 and bw<=33e6) - assert (bw>=1e6 and bw<=33e6) - if bw >= 4e6: - m_max = int(min(31,math.floor(self._refclk_freq()/1e6))) - elif bw >= 2e6: # Outside of Specs! - m_max = int(min(31,math.floor(self._refclk_freq()/.5e6))) - else: # Way outside of Specs! - m_max = int(min(31,math.floor(self._refclk_freq()/.25e6))) - - m_min = int(math.ceil(self._refclk_freq()/2.5e6)) - m_test = m_max - while m_test >= m_min: - fdac_test = int(round(((bw * m_test / self._refclk_freq())-4)/.145)) - if fdac_test>127: - m_test = m_test - 1 - else: - break - if (m_test>=m_min and fdac_test >=0): - self._set_m(m_test) - self._set_fdac(fdac_test) - return (self.m,self.fdac,self._refclk_freq()/self.m*(4+0.145*self.fdac)) - else: - print "Failed to set bw" - - # Gain setting - def _set_dl(self,dl): - assert dl == 0 or dl == 1 - self.dl = dl - self._send_reg(4) - - def _set_gc2(self,gc2): - assert gc2<32 and gc2>=0 - self.gc2 = gc2 - self._send_reg(5) - - def _set_gc1(self,gc1): - assert gc1>=0 and gc1<4096 - self.gc1 = gc1 - self._u.write_aux_dac(self._which,0,int(gc1)) - - def _set_pga(self, pga_gain): - assert pga_gain >=0 and pga_gain <=20 - if(self._which == 0): - self._u.set_pga (0, pga_gain) - self._u.set_pga (1, pga_gain) - else: - self._u.set_pga (2, pga_gain) - self._u.set_pga (3, pga_gain) - - def gain_range(self): - return (0, 104, 1) - - def set_gain(self,gain): - if not (gain>=0 and gain<105): - raise ValueError, "gain out of range" - gc1 = 0 - gc2 = 0 - dl = 0 - pga = 0 - if gain <56: - gc1 = int((-gain*1.85/56.0 + 2.6)*4096.0/3.3) - gain = 0 - else: - gc1 = 0 - gain = gain - 56 - if gain < 24: - gc2 = int(round(31.0 * (1-gain/24.0))) - gain = 0 - else: - gc2 = 0 - gain = gain - 24 - if gain >= 4.58: - dl = 1 - gain = gain - 4.58 - pga = gain - self._set_gc1(gc1) - self._set_gc2(gc2) - self._set_dl(dl) - self._set_pga(pga) - - # Frequency setting - def _set_osc(self,osc): - assert osc>=0 and osc<8 - self.osc = osc - self._send_reg(2) - - def _set_cp(self,cp): - assert cp>=0 and cp<4 - self.cp = cp - self._send_reg(2) - - def _set_n(self,n): - assert n>256 and n<32768 - self.n = n - self._send_reg(0) - self._send_reg(1) - - def _set_div2(self,div2): - assert div2 == 0 or div2 == 1 - self.div2 = div2 - self._send_reg(0) - - def _set_r(self,r): - assert r>=0 and r<128 - self.r = r - self.r_int = int(round(math.log10(r)/math.log10(2)) - 1) - self._send_reg(2) - - # FIXME How do we handle ADE and ADL properly? - def _set_ade(self,ade): - assert ade == 0 or ade == 1 - self.ade = ade - self._send_reg(4) - - def freq_range(self): - return (500e6, 2.6e9, 1e6) - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - - def set_freq(self, freq): - """ - Set the frequency. - - @param freq: target frequency in Hz - @type freq: float - - @returns (ok, actual_baseband_freq) where: - ok is True or False and indicates success or failure, - actual_baseband_freq is the RF frequency that corresponds to DC in the IF. - """ - if not (freq>=500e6 and freq<=2.6e9): - return (False, 0) - - if(freq<1150e6): - self._set_div2(0) - vcofreq = 4 * freq - else: - self._set_div2(1) - vcofreq = 2 * freq - self._set_ade(1) - rmin=max(2,self._refclk_freq()/2e6) - rmax=min(128,self._refclk_freq()/150e3) - r = 2 - n=0 - best_r = 2 - best_n =0 - best_delta = 10e6 - while r <= rmax: - n = round(freq/(self._refclk_freq()/r)) - if r> 2 - if(adc_val == 0): - if vco <= 0: - return (False, 0) - else: - vco = vco - 1 - elif(adc_val == 7): - if(vco >= 7): - return (False, 0) - else: - vco = vco + 1 - self._set_osc(vco) - if adc_val == 1 or adc_val == 2: - self._set_cp(1) - elif adc_val == 3 or adc_val == 4: - self._set_cp(2) - else: - self._set_cp(3) - - return (True, self.n * self._refclk_freq() / self.r) - - def is_quadrature(self): - """ - Return True if this board requires both I & Q analog channels. - - This bit of info is useful when setting up the USRP Rx mux register. - """ - return True - -# hook this daughterboard class into the auto-instantiation framework -db_instantiator.add(usrp_dbid.DBS_RX, lambda usrp, which : (db_dbs_rx(usrp, which),)) diff --git a/gr-usrp/src/db_flexrf.py b/gr-usrp/src/db_flexrf.py deleted file mode 100644 index 50425094..00000000 --- a/gr-usrp/src/db_flexrf.py +++ /dev/null @@ -1,680 +0,0 @@ -# -# Copyright 2005 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 import usrp1 -import time,math - -import usrp_dbid -import db_base -import db_instantiator -from usrp_fpga_regs import * - -#debug_using_gui = True # Must be set to True or False -debug_using_gui = False # Must be set to True or False - -if debug_using_gui: - import flexrf_debug_gui - -# d'board i/o pin defs -# Tx and Rx have shared defs, but different i/o regs -AUX_RXAGC = (1 << 8) -POWER_UP = (1 << 7) # enables power supply -RX_TXN = (1 << 6) # Tx only: T/R antenna switch for TX/RX port -RX2_RX1N = (1 << 6) # Rx only: antenna switch between RX2 and TX/RX port -ENABLE = (1 << 5) # enables mixer -AUX_SEN = (1 << 4) -AUX_SCLK = (1 << 3) -PLL_LOCK_DETECT = (1 << 2) -AUX_SDO = (1 << 1) -CLOCK_OUT = (1 << 0) - -SPI_ENABLE_TX_A = usrp1.SPI_ENABLE_TX_A -SPI_ENABLE_TX_B = usrp1.SPI_ENABLE_TX_B -SPI_ENABLE_RX_A = usrp1.SPI_ENABLE_RX_A -SPI_ENABLE_RX_B = usrp1.SPI_ENABLE_RX_B - -class flexrf_base(db_base.db_base): - """ - Abstract base class for all flexrf boards. - - Derive board specific subclasses from db_flexrf_base_{tx,rx} - """ - def __init__(self, usrp, which): - """ - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to side A or B respectively - @type which: int - """ - # sets _u _which _tx and _slot - db_base.db_base.__init__(self, usrp, which) - - self.first = True - self.spi_format = usrp1.SPI_FMT_MSB | usrp1.SPI_FMT_HDR_0 - - self._u._write_oe(self._which, 0, 0xffff) # turn off all outputs - self._enable_refclk(False) # disable refclk - - g = self.gain_range() # initialize gain - self.set_gain(float(g[0]+g[1]) / 2) - - self.set_auto_tr(False) - - if debug_using_gui: - title = "FlexRF Debug Rx" - if self._tx: - title = "FlexRF Debug Tx" - self.gui = flexrf_debug_gui.flexrf_debug_gui(self, title) - self.gui.Show(True) - - - def __del__(self): - #print "flexrf_base.__del__" - self._u.write_io(self._which, self.power_off, POWER_UP) # turn off power to board - self._enable_refclk(False) # turn off refclk - self.set_auto_tr(False) - - def _write_all(self, R, control, N): - """ - Write R counter latch, control latch and N counter latch to VCO. - - Adds 10ms delay between writing control and N if this is first call. - This is the required power-up sequence. - - @param $: 24-bit R counter latch - @type R: int - @param control: 24-bit control latch - @type control: int - @param N: 24-bit N counter latch - @type N: int - """ - self._write_R(R) - self._write_control( control) - if self.first: - time.sleep(0.010) - self.first = False - self._write_N(N) - - def _write_control(self, control): - self._write_it((control & ~0x3) | 0) - - def _write_R(self, R): - self._write_it((R & ~0x3) | 1) - - def _write_N(self, N): - self._write_it((N & ~0x3) | 2) - - def _write_it(self, v): - s = ''.join((chr((v >> 16) & 0xff), - chr((v >> 8) & 0xff), - chr(v & 0xff))) - self._u._write_spi(0, self.spi_enable, self.spi_format, s) - - def _lock_detect(self): - """ - @returns: the value of the VCO/PLL lock detect bit. - @rtype: 0 or 1 - """ - if self._u.read_io(self._which) & PLL_LOCK_DETECT: - return True - else: # Give it a second chance - if self._u.read_io(self._which) & PLL_LOCK_DETECT: - return True - else: - return False - - def _compute_regs(self, freq): - """ - Determine values of R, control, and N registers, along with actual freq. - - @param freq: target frequency in Hz - @type freq: float - @returns: (R, control, N, actual_freq) - @rtype: tuple(int, int, int, float) - - Override this in derived classes. - """ - raise NotImplementedError - - def _refclk_freq(self): - # return float(self._u.fpga_master_clock_freq())/self._refclk_divisor() - return 64e6/self._refclk_divisor() - - def set_freq(self, freq): - """ - @returns (ok, actual_baseband_freq) where: - ok is True or False and indicates success or failure, - actual_baseband_freq is the RF frequency that corresponds to DC in the IF. - """ - - # Offsetting the LO helps get the Tx carrier leakage out of the way. - # This also ensures that on Rx, we're not getting hosed by the - # FPGA's DC removal loop's time constant. We were seeing a - # problem when running with discontinuous transmission. - # Offsetting the LO made the problem go away. - freq += self.lo_offset - - R, control, N, actual_freq = self._compute_regs(freq) - if R==0: - return(False,0) - self._write_all(R, control, N) - return (self._lock_detect(), actual_freq) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max(), self._u.pga_db_per_step()) - - def set_gain(self, gain): - """ - Set the gain. - - @param gain: gain in decibels - @returns True/False - """ - return self._set_pga(gain) - - def _set_pga(self, pga_gain): - if(self._which == 0): - self._u.set_pga (0, pga_gain) - self._u.set_pga (1, pga_gain) - else: - self._u.set_pga (2, pga_gain) - self._u.set_pga (3, pga_gain) - - def is_quadrature(self): - """ - Return True if this board requires both I & Q analog channels. - - This bit of info is useful when setting up the USRP Rx mux register. - """ - return True - -# ---------------------------------------------------------------- - -class flexrf_base_tx(flexrf_base): - def __init__(self, usrp, which): - """ - @param usrp: instance of usrp.sink_c - @param which: 0 or 1 corresponding to side TX_A or TX_B respectively. - """ - flexrf_base.__init__(self, usrp, which) - self.spi_enable = (SPI_ENABLE_TX_A, SPI_ENABLE_TX_B)[which] - - # power up the transmit side, but don't enable the mixer - self._u._write_oe(self._which,(POWER_UP|RX_TXN|ENABLE), 0xffff) - self._u.write_io(self._which, (self.power_on|RX_TXN), (POWER_UP|RX_TXN|ENABLE)) - self.lo_offset = 4e6 # FIXME may want to be a function of d'board - - def __del__(self): - #print "flexrf_base_tx.__del__" - # Power down and leave the T/R switch in the R position - self._u.write_io(self._which, (self.power_off|RX_TXN), (POWER_UP|RX_TXN|ENABLE)) - flexrf_base.__del__(self) - - def set_auto_tr(self, on): - if on: - self.set_atr_mask (RX_TXN | ENABLE) - self.set_atr_txval(0 | ENABLE) - self.set_atr_rxval(RX_TXN | 0) - else: - self.set_atr_mask (0) - self.set_atr_txval(0) - self.set_atr_rxval(0) - - def set_enable(self, on): - """ - Enable transmitter if on is True - """ - mask = RX_TXN | ENABLE - if on: - v = ENABLE - else: - v = RX_TXN - self._u.write_io(self._which, v, mask) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - - Flex Tx boards require that the PGA be maxed out to properly bias their circuitry. - """ - g = self._u.pga_max() - return (g, g, 1.0) - - def set_gain(self, gain): - """ - Set the gain. - - @param gain: gain in decibels - @returns True/False - """ - return self._set_pga(self._u.pga_max()) - - -class flexrf_base_rx(flexrf_base): - def __init__(self, usrp, which): - """ - @param usrp: instance of usrp.source_c - @param which: 0 or 1 corresponding to side RX_A or RX_B respectively. - """ - flexrf_base.__init__(self, usrp, which) - self.spi_enable = (SPI_ENABLE_RX_A, SPI_ENABLE_RX_B)[which] - - self._u._write_oe(self._which, (POWER_UP|RX2_RX1N|ENABLE), 0xffff) - self._u.write_io(self._which, (self.power_on|RX2_RX1N|ENABLE), (POWER_UP|RX2_RX1N|ENABLE)) - - # set up for RX on TX/RX port - self.select_rx_antenna('TX/RX') - - self.bypass_adc_buffers(True) - - self.lo_offset = -4e6 # FIXME may want to be a function of d'board - - def __del__(self): - # print "flexrf_base_rx.__del__" - # Power down - self._u.write_io(self._which, self.power_off, (POWER_UP|ENABLE)) - flexrf_base.__del__(self) - - def set_auto_tr(self, on): - if on: - self.set_atr_mask (ENABLE) - self.set_atr_txval( 0) - self.set_atr_rxval(ENABLE) - else: - self.set_atr_mask (0) - self.set_atr_txval(0) - self.set_atr_rxval(0) - - def select_rx_antenna(self, which_antenna): - """ - Specify which antenna port to use for reception. - @param which_antenna: either 'TX/RX' or 'RX2' - """ - if which_antenna in (0, 'TX/RX'): - self._u.write_io(self._which, 0, RX2_RX1N) - elif which_antenna in (1, 'RX2'): - self._u.write_io(self._which, RX2_RX1N, RX2_RX1N) - else: - raise ValueError, "which_antenna must be either 'TX/RX' or 'RX2'" - - def set_gain(self, gain): - """ - Set the gain. - - @param gain: gain in decibels - @returns True/False - """ - maxgain = self.gain_range()[1] - self._u.pga_max() - if gain > maxgain: - pga_gain = gain-maxgain - assert pga_gain <= self._u.pga_max() - agc_gain = maxgain - else: - pga_gain = 0 - agc_gain = gain - V_maxgain = .2 - V_mingain = 1.2 - V_fullscale = 3.3 - dac_value = (agc_gain*(V_maxgain-V_mingain)/maxgain + V_mingain)*4096/V_fullscale - assert dac_value>=0 and dac_value<4096 - return self._u.write_aux_dac(self._which, 0, int(dac_value)) and \ - self._set_pga(int(pga_gain)) - - -# ---------------------------------------------------------------- - -class _AD4360_common(object): - def __init__(self): - # R-Register Common Values - self.R_RSV = 0 # bits 23,22 - self.BSC = 3 # bits 21,20 Div by 8 to be safe - self.TEST = 0 # bit 19 - self.LDP = 1 # bit 18 - self.ABP = 0 # bit 17,16 3ns - - # N-Register Common Values - self.N_RSV = 0 # bit 7 - - # Control Register Common Values - self.PD = 0 # bits 21,20 Normal operation - self.PL = 0 # bits 13,12 11mA - self.MTLD = 1 # bit 11 enabled - self.CPG = 0 # bit 10 CP setting 1 - self.CP3S = 0 # bit 9 Normal - self.PDP = 1 # bit 8 Positive - self.MUXOUT = 1 # bits 7:5 Digital Lock Detect - self.CR = 0 # bit 4 Normal - self.PC = 1 # bits 3,2 Core power 10mA - - def _compute_regs(self, freq): - """ - Determine values of R, control, and N registers, along with actual freq. - - @param freq: target frequency in Hz - @type freq: float - @returns: (R, control, N, actual_freq) - @rtype: tuple(int, int, int, float) - """ - - # Band-specific N-Register Values - phdet_freq = self._refclk_freq()/self.R_DIV - desired_n = round(freq*self.freq_mult/phdet_freq) - actual_freq = desired_n * phdet_freq - B = math.floor(desired_n/self._prescaler()) - A = desired_n - self._prescaler()*B - self.B_DIV = int(B) # bits 20:8 - self.A_DIV = int(A) # bit 6:2 - #assert self.B_DIV >= self.A_DIV - if self.B_DIV < self.A_DIV: - return (0,0,0,0) - R = (self.R_RSV<<22) | (self.BSC<<20) | (self.TEST<<19) | (self.LDP<<18) \ - | (self.ABP<<16) | (self.R_DIV<<2) - - control = (self.P<<22) | (self.PD<<20) | (self.CP2<<17) | (self.CP1<<14) | (self.PL<<12) \ - | (self.MTLD<<11) | (self.CPG<<10) | (self.CP3S<<9) | (self.PDP<<8) | \ - (self.MUXOUT<<5) | (self.CR<<4) | (self.PC<<2) - - N = (self.DIVSEL<<23) | (self.DIV2<<22) | (self.CPGAIN<<21) | (self.B_DIV<<8) | \ - (self.N_RSV<<7) | (self.A_DIV<<2) - - return (R,control,N,actual_freq/self.freq_mult) - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - - def _prescaler(self): - if self.P == 0: - return 8 - elif self.P == 1: - return 16 - else: - return 32 - -#---------------------------------------------------------------------- -class _2400_common(_AD4360_common): - def __init__(self): - _AD4360_common.__init__(self) - - # Band-specific R-Register Values - self.R_DIV = 16 # bits 15:2 - - # Band-specific C-Register values - self.P = 1 # bits 23,22 Div by 16/17 - self.CP2 = 7 # bits 19:17 - self.CP1 = 7 # bits 16:14 - - # Band specifc N-Register Values - self.DIVSEL = 0 # bit 23 - self.DIV2 = 0 # bit 22 - self.CPGAIN = 0 # bit 21 - self.freq_mult = 1 - - def freq_range(self): # FIXME - return (2300e6, 2700e6, 4e6) - -#---------------------------------------------------------------------- -class _1200_common(_AD4360_common): - def __init__(self): - _AD4360_common.__init__(self) - - # Band-specific R-Register Values - self.R_DIV = 16 # bits 15:2 DIV by 16 for a 1 MHz phase detector freq - - # Band-specific C-Register values - self.P = 1 # bits 23,22 Div by 16/17 - self.CP2 = 7 # bits 19:17 1.25 mA - self.CP1 = 7 # bits 16:14 1.25 mA - - # Band specifc N-Register Values - self.DIVSEL = 0 # bit 23 - self.DIV2 = 1 # bit 22 - self.CPGAIN = 0 # bit 21 - self.freq_mult = 2 - - def freq_range(self): # FIXME - return (1150e6, 1350e6, 4e6) - -#------------------------------------------------------------------------- -class _1800_common(_AD4360_common): - def __init__(self): - _AD4360_common.__init__(self) - - # Band-specific R-Register Values - self.R_DIV = 16 # bits 15:2 DIV by 16 for a 1 MHz phase detector freq - - # Band-specific C-Register values - self.P = 1 # bits 23,22 Div by 16/17 - self.CP2 = 7 # bits 19:17 1.25 mA - self.CP1 = 7 # bits 16:14 1.25 mA - - # Band specifc N-Register Values - self.DIVSEL = 0 # bit 23 - self.DIV2 = 0 # bit 22 - self.freq_mult = 1 - self.CPGAIN = 0 # bit 21 - - def freq_range(self): # FIXME - return (1600e6, 2000e6, 4e6) - -#------------------------------------------------------------------------- -class _900_common(_AD4360_common): - def __init__(self): - _AD4360_common.__init__(self) - - # Band-specific R-Register Values - self.R_DIV = 16 # bits 15:2 DIV by 16 for a 1 MHz phase detector freq - - # Band-specific C-Register values - self.P = 1 # bits 23,22 Div by 16/17 - self.CP2 = 7 # bits 19:17 1.25 mA - self.CP1 = 7 # bits 16:14 1.25 mA - - # Band specifc N-Register Values - self.DIVSEL = 0 # bit 23 - self.DIV2 = 1 # bit 22 - self.freq_mult = 2 - self.CPGAIN = 0 # bit 21 - - def freq_range(self): # FIXME - return (800e6, 1000e6, 4e6) - -#------------------------------------------------------------------------- -class _400_common(_AD4360_common): - def __init__(self): - _AD4360_common.__init__(self) - - # Band-specific R-Register Values - self.R_DIV = 16 # bits 15:2 - - # Band-specific C-Register values - self.P = 0 # bits 23,22 Div by 8/9 - self.CP2 = 7 # bits 19:17 1.25 mA - self.CP1 = 7 # bits 16:14 1.25 mA - - # Band specifc N-Register Values These are different for TX/RX - self.DIVSEL = 0 # bit 23 - if self._tx: - self.DIV2 = 1 # bit 22 - else: - self.DIV2 = 0 # bit 22 # RX side has built-in DIV2 in AD8348 - self.freq_mult = 2 - - self.CPGAIN = 0 # bit 21 - - def freq_range(self): - #return (350e6, 465e6, 1e6) # FIXME prototype - return (400e6, 500e6, 1e6) # final version - - -#------------------------------------------------------------ -class db_flexrf_2400_tx(_2400_common, flexrf_base_tx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_tx.__init__(self, usrp, which) - _2400_common.__init__(self) - -class db_flexrf_2400_rx(_2400_common, flexrf_base_rx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # Powering it off kills the serial bus - flexrf_base_rx.__init__(self, usrp, which) - _2400_common.__init__(self) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max() + 70, 0.05) - - def i_and_q_swapped(self): - return True - -class db_flexrf_1200_tx(_1200_common, flexrf_base_tx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_tx.__init__(self, usrp, which) - _1200_common.__init__(self) - -class db_flexrf_1200_rx(_1200_common, flexrf_base_rx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_rx.__init__(self, usrp, which) - _1200_common.__init__(self) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max() + 70, 0.05) - - def i_and_q_swapped(self): - return True - -class db_flexrf_1800_tx(_1800_common, flexrf_base_tx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_tx.__init__(self, usrp, which) - _1800_common.__init__(self) - -class db_flexrf_1800_rx(_1800_common, flexrf_base_rx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_rx.__init__(self, usrp, which) - _1800_common.__init__(self) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max() + 70, 0.05) - - def i_and_q_swapped(self): - return True - -class db_flexrf_900_tx(_900_common, flexrf_base_tx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_tx.__init__(self, usrp, which) - _900_common.__init__(self) - -class db_flexrf_900_rx(_900_common, flexrf_base_rx): - def __init__(self, usrp, which): - self.power_on = ~POWER_UP - self.power_off = ~POWER_UP # powering it off kills the serial bus - flexrf_base_rx.__init__(self, usrp, which) - _900_common.__init__(self) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max() + 70, 0.05) - - def i_and_q_swapped(self): - return True - -class db_flexrf_400_tx(_400_common, flexrf_base_tx): - def __init__(self, usrp, which): - self.power_on = POWER_UP - self.power_off = ~POWER_UP - flexrf_base_tx.__init__(self, usrp, which) - _400_common.__init__(self) - -class db_flexrf_400_rx(_400_common, flexrf_base_rx): - def __init__(self, usrp, which): - self.power_on = POWER_UP - self.power_off = ~POWER_UP - flexrf_base_rx.__init__(self, usrp, which) - _400_common.__init__(self) - - def gain_range(self): - """ - Return range of gain that can be set by this d'board. - - @returns (min_gain, max_gain, step_size) - Where gains are expressed in decibels (your mileage may vary) - """ - return (self._u.pga_min(), self._u.pga_max() + 45, 0.035) - - def i_and_q_swapped(self): - return True - -# hook these daughterboard classes into the auto-instantiation framework - -db_instantiator.add(usrp_dbid.FLEX_2400_TX, lambda usrp, which : (db_flexrf_2400_tx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_2400_RX, lambda usrp, which : (db_flexrf_2400_rx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1200_TX, lambda usrp, which : (db_flexrf_1200_tx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1200_RX, lambda usrp, which : (db_flexrf_1200_rx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1800_TX, lambda usrp, which : (db_flexrf_1800_tx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1800_RX, lambda usrp, which : (db_flexrf_1800_rx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_900_TX, lambda usrp, which : (db_flexrf_900_tx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_900_RX, lambda usrp, which : (db_flexrf_900_rx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_400_TX, lambda usrp, which : (db_flexrf_400_tx(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_400_RX, lambda usrp, which : (db_flexrf_400_rx(usrp, which),)) diff --git a/gr-usrp/src/db_flexrf_mimo.py b/gr-usrp/src/db_flexrf_mimo.py deleted file mode 100644 index 13690ff7..00000000 --- a/gr-usrp/src/db_flexrf_mimo.py +++ /dev/null @@ -1,286 +0,0 @@ -# -# Copyright 2005 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 import usrp1 -import time,math - -import usrp_dbid -import db_base -import db_instantiator -from usrp_fpga_regs import * -from db_flexrf import * - -# self._u.fpga_master_clock_freq() - -# MIMO Classes -class db_flexrf_2400_tx_mimo_a(db_flexrf_2400_tx): - def __init__(self, usrp, which): - db_flexrf_2400_tx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_2400_rx_mimo_a(db_flexrf_2400_rx): - def __init__(self, usrp, which): - db_flexrf_2400_rx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_2400_tx_mimo_b(db_flexrf_2400_tx): - def __init__(self, usrp, which): - db_flexrf_2400_tx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_2400_rx_mimo_b(db_flexrf_2400_rx): - def __init__(self, usrp, which): - db_flexrf_2400_rx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_1800_tx_mimo_a(db_flexrf_1800_tx): - def __init__(self, usrp, which): - db_flexrf_1800_tx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_1800_rx_mimo_a(db_flexrf_1800_rx): - def __init__(self, usrp, which): - db_flexrf_1800_rx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_1800_tx_mimo_b(db_flexrf_1800_tx): - def __init__(self, usrp, which): - db_flexrf_1800_tx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_1800_rx_mimo_b(db_flexrf_1800_rx): - def __init__(self, usrp, which): - db_flexrf_1800_rx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_1200_tx_mimo_a(db_flexrf_1200_tx): - def __init__(self, usrp, which): - db_flexrf_1200_tx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_1200_rx_mimo_a(db_flexrf_1200_rx): - def __init__(self, usrp, which): - db_flexrf_1200_rx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_1200_tx_mimo_b(db_flexrf_1200_tx): - def __init__(self, usrp, which): - db_flexrf_1200_tx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_1200_rx_mimo_b(db_flexrf_1200_rx): - def __init__(self, usrp, which): - db_flexrf_1200_rx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_900_tx_mimo_a(db_flexrf_900_tx): - def __init__(self, usrp, which): - db_flexrf_900_tx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_900_rx_mimo_a(db_flexrf_900_rx): - def __init__(self, usrp, which): - db_flexrf_900_rx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_900_tx_mimo_b(db_flexrf_900_tx): - def __init__(self, usrp, which): - db_flexrf_900_tx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_900_rx_mimo_b(db_flexrf_900_rx): - def __init__(self, usrp, which): - db_flexrf_900_rx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_400_tx_mimo_a(db_flexrf_400_tx): - def __init__(self, usrp, which): - db_flexrf_400_tx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_400_rx_mimo_a(db_flexrf_400_rx): - def __init__(self, usrp, which): - db_flexrf_400_rx.__init__(self, usrp, which) - self._enable_refclk(True) - self.R_DIV = 1 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 16 - -class db_flexrf_400_tx_mimo_b(db_flexrf_400_tx): - def __init__(self, usrp, which): - db_flexrf_400_tx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -class db_flexrf_400_rx_mimo_b(db_flexrf_400_rx): - def __init__(self, usrp, which): - db_flexrf_400_rx.__init__(self, usrp, which) - self.R_DIV = 16 - - def _refclk_divisor(self): - """ - Return value to stick in REFCLK_DIVISOR register - """ - return 1 - -# hook these daughterboard classes into the auto-instantiation framework -db_instantiator.add(usrp_dbid.FLEX_2400_TX_MIMO_A, lambda usrp, which : (db_flexrf_2400_tx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_2400_RX_MIMO_A, lambda usrp, which : (db_flexrf_2400_rx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1800_TX_MIMO_A, lambda usrp, which : (db_flexrf_1800_tx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1800_RX_MIMO_A, lambda usrp, which : (db_flexrf_1800_rx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1200_TX_MIMO_A, lambda usrp, which : (db_flexrf_1200_tx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1200_RX_MIMO_A, lambda usrp, which : (db_flexrf_1200_rx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_900_TX_MIMO_A, lambda usrp, which : (db_flexrf_900_tx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_900_RX_MIMO_A, lambda usrp, which : (db_flexrf_900_rx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_400_TX_MIMO_A, lambda usrp, which : (db_flexrf_400_tx_mimo_a(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_400_RX_MIMO_A, lambda usrp, which : (db_flexrf_400_rx_mimo_a(usrp, which),)) - -db_instantiator.add(usrp_dbid.FLEX_2400_TX_MIMO_B, lambda usrp, which : (db_flexrf_2400_tx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_2400_RX_MIMO_B, lambda usrp, which : (db_flexrf_2400_rx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1800_TX_MIMO_B, lambda usrp, which : (db_flexrf_1800_tx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1800_RX_MIMO_B, lambda usrp, which : (db_flexrf_1800_rx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1200_TX_MIMO_B, lambda usrp, which : (db_flexrf_1200_tx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_1200_RX_MIMO_B, lambda usrp, which : (db_flexrf_1200_rx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_900_TX_MIMO_B, lambda usrp, which : (db_flexrf_900_tx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_900_RX_MIMO_B, lambda usrp, which : (db_flexrf_900_rx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_400_TX_MIMO_B, lambda usrp, which : (db_flexrf_400_tx_mimo_b(usrp, which),)) -db_instantiator.add(usrp_dbid.FLEX_400_RX_MIMO_B, lambda usrp, which : (db_flexrf_400_rx_mimo_b(usrp, which),)) - diff --git a/gr-usrp/src/db_instantiator.py b/gr-usrp/src/db_instantiator.py deleted file mode 100644 index b76cdeee..00000000 --- a/gr-usrp/src/db_instantiator.py +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright 2005 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. -# - -_instantiator_map = {} - -def add(dbid, instantiator): - _instantiator_map[dbid] = instantiator - -def instantiate(usrp, which): - dbid = usrp.daughterboard_id(which) - if _instantiator_map.has_key(dbid): - return _instantiator_map[dbid](usrp, which) - raise ValueError, "No class defined to handle daughterboard (dbid = %d)" % (dbid,) diff --git a/gr-usrp/src/db_tv_rx.py b/gr-usrp/src/db_tv_rx.py deleted file mode 100644 index 5d11ad4c..00000000 --- a/gr-usrp/src/db_tv_rx.py +++ /dev/null @@ -1,198 +0,0 @@ -# -# Copyright 2005 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. -# - -__all__ = ['tv_rx'] - -import math -import usrp_dbid -import db_base -import db_instantiator - -def int_seq_to_str(seq): - """convert a sequence of integers into a string""" - return ''.join (map (chr, seq)) - -def str_to_int_seq(str): - """convert a string to a list of integers""" - return map (ord, str) - -def control_byte_1(fast_tuning_p, reference_divisor): - c = 0x88 - if fast_tuning_p: - c |= 0x40 - if reference_divisor == 512: - c |= 0x3 << 1 - elif reference_divisor == 640: - c |= 0x0 << 1 - elif reference_divisor == 1024: - c |= 0x1 << 1 - else: - assert 0 - return c - -def control_byte_2(target_freq, shutdown_tx_PGA): - if target_freq < 158e6: # VHF low - c = 0xa0 - elif target_freq < 464e6: # VHF high - c = 0x90 - else: # UHF - c = 0x30 - if shutdown_tx_PGA: - c |= 0x08 - return c - -class db_tv_rx(db_base.db_base): - def __init__(self, usrp, which, first_IF, second_IF): - """ - Control Microtune 4937 based USRP daughterboard. - - @param usrp: instance of usrp.source_c - @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively - @type which: int - """ - # sets _u and _which - db_base.db_base.__init__(self, usrp, which) - - self._i2c_addr = (0x60, 0x61)[which] - - self._first_IF = first_IF - self._second_IF = second_IF - self._reference_divisor = 640 - self._fast_tuning = False - self._inverted = False # FIXME get rid of this - - g = self.gain_range() # initialize gain - self.set_gain(float(g[0]+g[1]) / 2) - - self.bypass_adc_buffers(False) - - # Gain setting - def _set_rfagc(self,gain): - assert gain <= 60 and gain >= 0 - # FIXME this has a 0.5V step between gain = 60 and gain = 59. - # Why are there two cases instead of a single linear case? - if gain == 60: - voltage = 4 - else: - voltage = gain/60.0 * 2.25 + 1.25 - dacword = int(4096*voltage/1.22/3.3) # 1.22 = opamp gain - - assert dacword>=0 and dacword<4096 - self._u.write_aux_dac(self._which, 1, dacword) - - def _set_ifagc(self,gain): - assert gain <= 35 and gain >= 0 - voltage = gain/35.0 * 2.1 + 1.4 - dacword = int(4096*voltage/1.22/3.3) # 1.22 = opamp gain - - assert dacword>=0 and dacword<4096 - self._u.write_aux_dac(self._which, 0, dacword) - - def _set_pga(self,pga_gain): - assert pga_gain >=0 and pga_gain <=20 - if(self._which == 0): - self._u.set_pga (0, pga_gain) - else: - self._u.set_pga (2, pga_gain) - - def gain_range(self): - return (0, 115, 1) - - def set_gain(self,gain): - assert gain>=0 and gain<=115 - if gain>60: - rfgain = 60 - gain = gain - 60 - else: - rfgain = gain - gain = 0 - if gain > 35: - ifgain = 35 - gain = gain - 35 - else: - ifgain = gain - gain = 0 - pgagain = gain - self._set_rfagc(rfgain) - self._set_ifagc(ifgain) - self._set_pga(pgagain) - - def freq_range(self): - return (50e6, 860e6, 10e3) - - def set_freq(self, target_freq): - """ - @returns (ok, actual_baseband_freq) where: - ok is True or False and indicates success or failure, - actual_baseband_freq is the RF frequency that corresponds to DC in the IF. - """ - r = self.freq_range() - if target_freq < r[0] or target_freq > r[1]: - return (False, 0) - - target_lo_freq = target_freq + self._first_IF; # High side mixing - f_ref = 4e6 / self._reference_divisor # frequency steps - - divisor = int((target_lo_freq + (f_ref * 4)) / (f_ref * 8)) - actual_lo_freq = (f_ref * 8 * divisor) - actual_freq = actual_lo_freq - self._first_IF; - - if (divisor & ~0x7fff) != 0: # must be 15-bits or less - return (False, 0) - - # build i2c command string - buf = [0] * 4 - buf[0] = (divisor >> 8) & 0xff # DB1 - buf[1] = divisor & 0xff # DB2 - buf[2] = control_byte_1(self._fast_tuning, self._reference_divisor) - buf[3] = control_byte_2(actual_freq, True) - - ok = self._u.write_i2c(self._i2c_addr, int_seq_to_str (buf)) - - return (ok, actual_freq - self._second_IF) - - def is_quadrature(self): - """ - Return True if this board requires both I & Q analog channels. - - This bit of info is useful when setting up the USRP Rx mux register. - """ - return False - - def spectrum_inverted(self): - """ - The 43.75 MHz version is inverted - """ - return self._inverted - -# hook this daughterboard class into the auto-instantiation framework - -# With MT4937DI5-3x7702 with second downconversion -db_instantiator.add(usrp_dbid.TV_RX, - lambda usrp, which : (db_tv_rx(usrp, which, 43.75e6, 5.75e6),)) - -# With MT4937DI5-3x8680, and 3x8769 without second downconversion -db_instantiator.add(usrp_dbid.TV_RX_REV_2, - lambda usrp, which : (db_tv_rx(usrp, which, 44e6, 20e6),)) - -# With MT4937DI5-3x7901 without second downconversion, basically the same as tvrx2 -db_instantiator.add(usrp_dbid.TV_RX_REV_3, - lambda usrp, which : (db_tv_rx(usrp, which, 44e6, 20e6),)) diff --git a/gr-usrp/src/flexrf_debug_gui.py b/gr-usrp/src/flexrf_debug_gui.py deleted file mode 100755 index ff32900a..00000000 --- a/gr-usrp/src/flexrf_debug_gui.py +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005 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. -# - -import sys -import wx -from gnuradio.wxgui import form - -class flexrf_debug_gui(wx.Frame): - def __init__(self, flexrf, title="Flexrf Debug"): - wx.Frame.__init__(self, None, -1, title) - - self.flexrf = flexrf - - self.CreateStatusBar (1) - - self.panel = wx.Panel(self, -1) - self.vbox = wx.BoxSizer(wx.VERTICAL) - self.panel.SetSizer(self.vbox) - self.panel.SetAutoLayout(True) - - self._create_form() - - self.vbox.Fit(self.panel) - - self.frame_vbox = wx.BoxSizer(wx.VERTICAL) - self.frame_vbox.Add(self.panel, 1, wx.EXPAND) - self.SetSizer(self.frame_vbox) - self.SetAutoLayout(True) - self.frame_vbox.Fit(self) - - def _create_form(self): - self._create_set_freq() - self._create_write_fpga() - self._create_write_all() - self._create_write_it() - #self._create_set_gain() - - # ---------------------------------------------------------------- - - def _create_set_freq(self): - - def _set_freq(kv): - return self.flexrf.set_freq(kv['freq'])[0] - - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL) - sbs.Add((5,0), 0.1) # stretchy space - #sbs.Add(wx.StaticText(self.panel, -1, "set_freq "), 0, 0) - #sbs.Add((5,0), 0.1) # stretchy space - myform = form.form() - myform['freq'] = form.float_field(self.panel, sbs, "Set Frequency") - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(form.button_with_callback(self.panel, "Do It!", - self._generic_doit(_set_freq, myform)), 1, wx.EXPAND) - sbs.Add((5,0), 0.1) # stretchy space - self.vbox.Add(sbs, 0, wx.EXPAND) - - - def _create_write_fpga(self): - - def _write_fpga(kv): - return self.flexrf._u._write_fpga_reg(kv['regno'], kv['value']) - - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL) - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(wx.StaticText(self.panel, -1, "write_fpga_reg "), 0, 0) - sbs.Add((5,0), 0.1) # stretchy space - myform = form.form() - myform['regno'] = form.int_field(self.panel, sbs, "regno") - sbs.Add((5,0), 0.1) # stretchy space - myform['value'] = form.int_field(self.panel, sbs, "value") - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(form.button_with_callback(self.panel, "Do It!", - self._generic_doit(_write_fpga, myform)), 1, wx.EXPAND) - sbs.Add((5,0), 0.1) # stretchy space - self.vbox.Add(sbs, 0, wx.EXPAND) - - - def _create_write_all(self): - - def _write_all(kv): - self.flexrf._write_all(kv['R'], kv['control'], kv['N']) # void - return True - - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL) - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(wx.StaticText(self.panel, -1, "write_all "), 0, 0) - sbs.Add((5,0), 0.1) # stretchy space - myform = form.form() - myform['R'] = form.int_field(self.panel, sbs, "R") - sbs.Add((5,0), 0.1) # stretchy space - myform['control'] = form.int_field(self.panel, sbs, "control") - sbs.Add((5,0), 0.1) # stretchy space - myform['N'] = form.int_field(self.panel, sbs, "N") - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(form.button_with_callback(self.panel, "Do It!", - self._generic_doit(_write_all, myform)), 1, wx.EXPAND) - sbs.Add((5,0), 0.1) # stretchy space - self.vbox.Add(sbs, 0, wx.EXPAND) - - - def _create_write_it(self): - - def _write_it(kv): - self.flexrf._write_it(kv['v']) # void - return True - - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL) - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(wx.StaticText(self.panel, -1, "write_it "), 0, 0) - sbs.Add((5,0), 0.1) # stretchy space - myform = form.form() - myform['v'] = form.int_field(self.panel, sbs, "24-bit value") - sbs.Add((5,0), 0.1) # stretchy space - sbs.Add(form.button_with_callback(self.panel, "Do It!", - self._generic_doit(_write_it, myform)), 1, wx.EXPAND) - sbs.Add((5,0), 0.1) # stretchy space - self.vbox.Add(sbs, 0, wx.EXPAND) - - - # ---------------------------------------------------------------- - - def _set_status_msg(self, msg): - self.GetStatusBar().SetStatusText(msg, 0) - - def _generic_doit(self, callback, form): - - def button_callback(): - errors = form.check_input_for_errors() - if errors: - self._set_status_msg(errors[0]) - print '\n'.join(tuple(errors)) - else: - kv = form.get_key_vals() - if callback(kv): - self._set_status_msg("OK") - else: - self._set_status_msg("Failed") - - return button_callback - - - -if False and __name__ == '__main__': - - class demo_app (wx.App): - def __init__ (self): - wx.App.__init__(self) - - def OnInit (self): - frame = flexrf_debug_gui(None, "Debug FlexRF TX") - frame.Show(True) - self.SetTopWindow (frame) - return True - - app = demo_app() - app.MainLoop() - diff --git a/gr-usrp/src/qa_usrp.py b/gr-usrp/src/qa_usrp.py index 8588410c..db2d3262 100755 --- a/gr-usrp/src/qa_usrp.py +++ b/gr-usrp/src/qa_usrp.py @@ -21,15 +21,15 @@ # from gnuradio import gr, gr_unittest -import usrp1 +import usrp_swig class qa_usrp (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-usrp/src/run_tests.in b/gr-usrp/src/run_tests.in index 49e9530c..f9bdc78b 100644 --- a/gr-usrp/src/run_tests.in +++ b/gr-usrp/src/run_tests.in @@ -5,11 +5,11 @@ # 3rd parameter is path to Python QA directory # For OS/X -DYLD_LIBRARY_PATH=@abs_top_builddir@/usrp/host/lib/:@abs_top_builddir@/usrp/host/lib/.libs:$DYLD_LIBRARY_PATH +DYLD_LIBRARY_PATH=@abs_top_builddir@/usrp/host/lib/legacy:@abs_top_builddir@/usrp/host/lib/legacy/.libs:$DYLD_LIBRARY_PATH export DYLD_LIBRARY_PATH # For Win32 -PATH=@abs_top_builddir@/usrp/host/lib/.libs:$PATH +PATH=@abs_top_builddir@/usrp/host/lib/legacy:@abs_top_builddir@/usrp/host/lib/legacy/.libs:$PATH @top_builddir@/run_tests.sh \ @abs_top_srcdir@/gr-usrp \ diff --git a/gr-usrp/src/tx_debug_gui.py b/gr-usrp/src/tx_debug_gui.py deleted file mode 100755 index 6b2a0c25..00000000 --- a/gr-usrp/src/tx_debug_gui.py +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005 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. -# - -import sys -import wx -from gnuradio.wxgui import form - -class tx_debug_gui(wx.Frame): - def __init__(self, tx_subdev, title="Tx Debug"): - wx.Frame.__init__(self, None, -1, title) - - self.subdev = tx_subdev - self.subdev._u.set_verbose(True) - - self.CreateStatusBar (1) - - self.panel = wx.Panel(self, -1) - self.vbox = wx.BoxSizer(wx.VERTICAL) - self.panel.SetSizer(self.vbox) - self.panel.SetAutoLayout(True) - - self._create_form() - - self.vbox.Fit(self.panel) - - self.frame_vbox = wx.BoxSizer(wx.VERTICAL) - self.frame_vbox.Add(self.panel, 1, wx.EXPAND) - self.SetSizer(self.frame_vbox) - self.SetAutoLayout(True) - self.frame_vbox.Fit(self) - - # ---------------------------------------------------------------- - - def _write_9862(self, regno, v): - return self.subdev._u._write_9862(self.subdev._which, regno, v) - - def _set_dac_offset(self, i_or_q, offset, offset_pin): - return self.subdev._u.set_dac_offset(self.subdev._which * 2 + i_or_q, offset, offset_pin) - - def _set_dac_fine_gain(self, i_or_q, gain, coarse): - return self._write_9862(14 + i_or_q, (coarse & 0xC0) | (gain & 0x3f)) - - def _create_form(self): - self._create_dac_offset() - self._create_dac_fine_gain() - self._create_pga() - - # ---------------------------------------------------------------- - - def _create_dac_offset(self): - - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.VERTICAL) - - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add(wx.StaticText(self.panel, -1, "DAC Offset"), 5, 0) - sbs.Add(hbox, 0, 1) - - - self._create_dac_offset_helper(sbs, 0) - self._create_dac_offset_helper(sbs, 1) - - self.vbox.Add(sbs, 0, wx.EXPAND) - - def _create_dac_offset_helper(self, vbox, i_or_q): - - def doit(kv): - drive_positive = kv['drive_positive'] - dac_offset = kv['dac_offset'] - print "drive_positive =", drive_positive - print "dac_offset[%d] = %4d" % (i_or_q, dac_offset) - - # FIXME signed magnitude?? - # dac_offset = signed_mag10(dac_offset) - return self._set_dac_offset(i_or_q, dac_offset, int(drive_positive)) - - def signed_mag10(x): - # not clear from doc if this is really 2's comp or 10-bit signed magnitude - # we'll guess it's 10-bit signed mag - if x < 0: - return (1 << 9) | min(511, max(0, abs(x))) - else: - return (0 << 9) | min(511, max(0, abs(x))) - - myform = form.form() - hbox = wx.BoxSizer(wx.HORIZONTAL) - vbox.Add(hbox, 0, wx.EXPAND) - myform['drive_positive'] = form.checkbox_field(parent=self.panel, sizer=hbox, - callback=myform.check_input_and_call(doit), - weight=0, - label="drive +ve") - myform['dac_offset'] = form.slider_field(parent=self.panel, sizer=hbox, - callback=myform.check_input_and_call(doit), - min=-512, max=511, value=0, - weight=5) - - # ---------------------------------------------------------------- - - def _create_dac_fine_gain(self): - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.VERTICAL) - - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add(wx.StaticText(self.panel, -1, "DAC Gain"), 5, 0) - sbs.Add(hbox, 0, 1) - - self._create_dac_gain_helper(sbs, 0) - self._create_dac_gain_helper(sbs, 1) - - self.vbox.Add(sbs, 0, wx.EXPAND) - - def _create_dac_gain_helper(self, vbox, i_or_q): - - d = { "1/1" : 0xC0, - "1/2" : 0x40, - "1/11" : 0x00 } - - def doit(kv): - dac_gain = kv['dac_gain'] - coarse_s = kv['coarse'] - print "dac_gain[%d] = %4d" % (i_or_q, dac_gain) - print "coarse = ", coarse_s - return self._set_dac_fine_gain(i_or_q, dac_gain, d[coarse_s]) - - myform = form.form() - hbox = wx.BoxSizer(wx.HORIZONTAL) - vbox.Add(hbox, 0, wx.EXPAND) - myform['coarse'] = form.radiobox_field(parent=self.panel, sizer=hbox, - callback=myform.check_input_and_call(doit), - choices=['1/11', '1/2', '1/1'], - weight=1, value='1/1') - myform['dac_gain'] = form.slider_field(parent=self.panel, sizer=hbox, - callback=myform.check_input_and_call(doit), - min=-32, max=31, value=0, - weight=4) - - - # ---------------------------------------------------------------- - - def _create_pga(self): - sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.VERTICAL) - - form.quantized_slider_field(parent=self.panel, sizer=sbs, label="PGA", - weight=3, range=self.subdev.gain_range(), - callback=self.subdev.set_gain) - - self.vbox.Add(sbs, 0, wx.EXPAND) - - - # ---------------------------------------------------------------- - - - def _set_status_msg(self, msg): - self.GetStatusBar().SetStatusText(msg, 0) - - -if False and __name__ == '__main__': - - class demo_app (wx.App): - def __init__ (self): - wx.App.__init__(self) - - def OnInit (self): - frame = tx_debug_gui(None, "Debug TX") - frame.Show(True) - self.SetTopWindow (frame) - return True - - app = demo_app() - app.MainLoop() diff --git a/gr-usrp/src/usrp.py b/gr-usrp/src/usrp.py deleted file mode 100644 index 746927c9..00000000 --- a/gr-usrp/src/usrp.py +++ /dev/null @@ -1,474 +0,0 @@ -# -# Copyright 2004,2005 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. -# - - - -import usrp_prims -import usrp_dbid -from gnuradio import usrp1 # usrp Rev 1 and later -from gnuradio import gru -from usrp_fpga_regs import * - -FPGA_MODE_NORMAL = usrp1.FPGA_MODE_NORMAL -FPGA_MODE_LOOPBACK = usrp1.FPGA_MODE_LOOPBACK -FPGA_MODE_COUNTING = usrp1.FPGA_MODE_COUNTING - -SPI_FMT_xSB_MASK = usrp1.SPI_FMT_xSB_MASK -SPI_FMT_LSB = usrp1.SPI_FMT_LSB -SPI_FMT_MSB = usrp1.SPI_FMT_MSB -SPI_FMT_HDR_MASK = usrp1.SPI_FMT_HDR_MASK -SPI_FMT_HDR_0 = usrp1.SPI_FMT_HDR_0 -SPI_FMT_HDR_1 = usrp1.SPI_FMT_HDR_1 -SPI_FMT_HDR_2 = usrp1.SPI_FMT_HDR_2 - -SPI_ENABLE_FPGA = usrp1.SPI_ENABLE_FPGA -SPI_ENABLE_CODEC_A = usrp1.SPI_ENABLE_CODEC_A -SPI_ENABLE_CODEC_B = usrp1.SPI_ENABLE_CODEC_B -SPI_ENABLE_reserved = usrp1.SPI_ENABLE_reserved -SPI_ENABLE_TX_A = usrp1.SPI_ENABLE_TX_A -SPI_ENABLE_RX_A = usrp1.SPI_ENABLE_RX_A -SPI_ENABLE_TX_B = usrp1.SPI_ENABLE_TX_B -SPI_ENABLE_RX_B = usrp1.SPI_ENABLE_RX_B - - -# Import all the daughterboard classes we know about. -# This hooks them into the auto-instantiation framework. - -import db_instantiator - -import db_basic -import db_dbs_rx -import db_flexrf -import db_flexrf_mimo -import db_tv_rx - - -def _look_for_usrp(which): - """ - Try to open the specified usrp. - - @param which: int >= 0 specifying which USRP to open - @type which: int - - @return: Returns version number, or raises RuntimeError - @rtype: int - """ - d = usrp_prims.usrp_find_device(which) - if not d: - raise RuntimeError, "Unable to find USRP #%d" % (which,) - - return usrp_prims.usrp_hw_rev(d) - - -def _ensure_rev2(which): - v = _look_for_usrp(which) - if not v in (2, 4): - raise RuntimeError, "Sorry, unsupported USRP revision (rev=%d)" % (v,) - - -class tune_result(object): - """ - Container for intermediate tuning information. - """ - def __init__(self, baseband_freq, dxc_freq, residual_freq, inverted): - self.baseband_freq = baseband_freq - self.dxc_freq = dxc_freq - self.residual_freq = residual_freq - self.inverted = inverted - - -def tune(u, chan, subdev, target_freq): - """ - Set the center frequency we're interested in. - - @param u: instance of usrp.source_* or usrp.sink_* - @param chan: DDC/DUC channel - @type chan: int - @param subdev: daughterboard subdevice - @param target_freq: frequency in Hz - @returns False if failure else tune_result - - Tuning is a two step process. First we ask the front-end to - tune as close to the desired frequency as it can. Then we use - the result of that operation and our target_frequency to - determine the value for the digital down converter. - """ - - # Does this usrp instance do Tx or Rx? - rx_p = True - try: - u.rx_freq - except AttributeError: - rx_p = False - - ok, baseband_freq = subdev.set_freq(target_freq) - dxc_freq, inverted = calc_dxc_freq(target_freq, baseband_freq, u.converter_rate()) - - # If the spectrum is inverted, and the daughterboard doesn't do - # quadrature downconversion, we can fix the inversion by flipping the - # sign of the dxc_freq... (This only happens using the basic_rx board) - - if subdev.spectrum_inverted(): - inverted = not(inverted) - - if inverted and not(subdev.is_quadrature()): - dxc_freq = -dxc_freq - inverted = not(inverted) - - if rx_p: - ok = ok and u.set_rx_freq(chan, dxc_freq) - else: - dxc_freq = -dxc_freq - ok = ok and u.set_tx_freq(chan, dxc_freq) - - if not(ok): - return False - - # residual_freq is the offset left over because of dxc tuning step size - if rx_p: - residual_freq = dxc_freq - u.rx_freq(chan) - else: - # FIXME 50-50 chance this has the wrong sign... - residual_freq = dxc_freq - u.tx_freq(chan) - - return tune_result(baseband_freq, dxc_freq, residual_freq, inverted) - - -# ------------------------------------------------------------------------ -# Build subclasses of raw usrp1.* class that add the db attribute -# by automatically instantiating the appropriate daughterboard classes. -# [Also provides keyword args.] -# ------------------------------------------------------------------------ - -class usrp_common(object): - def __init__(self): - # read capability register - r = self._u._read_fpga_reg(FR_RB_CAPS) - if r < 0: - r += 2**32 - if r == 0xaa55ff77: # value of this reg prior to being defined as cap reg - r = ((2 << bmFR_RB_CAPS_NDUC_SHIFT) - | (2 << bmFR_RB_CAPS_NDDC_SHIFT) - | bmFR_RB_CAPS_RX_HAS_HALFBAND) - self._fpga_caps = r - - if False: - print "FR_RB_CAPS = %#08x" % (self._fpga_caps,) - print "has_rx_halfband =", self.has_rx_halfband() - print "nDDCs =", self.nddc() - print "has_tx_halfband =", self.has_tx_halfband() - print "nDUCs =", self.nduc() - - def __getattr__(self, name): - return getattr(self._u, name) - - def tune(self, chan, subdev, target_freq): - return tune(self, chan, subdev, target_freq) - - def has_rx_halfband(self): - return self._fpga_caps & bmFR_RB_CAPS_RX_HAS_HALFBAND != 0 - - def has_tx_halfband(self): - return self._fpga_caps & bmFR_RB_CAPS_TX_HAS_HALFBAND != 0 - - def nddc(self): - """ - Number of Digital Down Converters implemented in FPGA - """ - return (self._fpga_caps & bmFR_RB_CAPS_NDDC_MASK) >> bmFR_RB_CAPS_NDDC_SHIFT - - def nduc(self): - """ - Number of Digital Up Converters implemented in FPGA - """ - return (self._fpga_caps & bmFR_RB_CAPS_NDUC_MASK) >> bmFR_RB_CAPS_NDUC_SHIFT - - -class sink_c(usrp_common): - def __init__(self, which=0, interp_rate=128, nchan=1, mux=0x98, - fusb_block_size=0, fusb_nblocks=0, - fpga_filename="", firmware_filename=""): - _ensure_rev2(which) - self._u = usrp1.sink_c(which, interp_rate, nchan, mux, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) - # Add the db attribute, which contains a 2-tuple of tuples of daughterboard classes - self.db = (db_instantiator.instantiate(self._u, 0), - db_instantiator.instantiate(self._u, 1)) - usrp_common.__init__(self) - - def __del__(self): - self.db = None # will fire d'board destructors - self._u = None # will fire usrp1.* destructor - - -class sink_s(usrp_common): - def __init__(self, which=0, interp_rate=128, nchan=1, mux=0x98, - fusb_block_size=0, fusb_nblocks=0, - fpga_filename="", firmware_filename=""): - _ensure_rev2(which) - self._u = usrp1.sink_s(which, interp_rate, nchan, mux, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) - # Add the db attribute, which contains a 2-tuple of tuples of daughterboard classes - self.db = (db_instantiator.instantiate(self._u, 0), - db_instantiator.instantiate(self._u, 1)) - usrp_common.__init__(self) - - def __del__(self): - self.db = None # will fire d'board destructors - self._u = None # will fire usrp1.* destructor - - -class source_c(usrp_common): - def __init__(self, which=0, decim_rate=64, nchan=1, mux=0x32103210, mode=0, - fusb_block_size=0, fusb_nblocks=0, - fpga_filename="", firmware_filename=""): - _ensure_rev2(which) - self._u = usrp1.source_c(which, decim_rate, nchan, mux, mode, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) - # Add the db attribute, which contains a 2-tuple of tuples of daughterboard classes - self.db = (db_instantiator.instantiate(self._u, 0), - db_instantiator.instantiate(self._u, 1)) - usrp_common.__init__(self) - - def __del__(self): - self.db = None # will fire d'board destructors - self._u = None # will fire usrp1.* destructor - - -class source_s(usrp_common): - def __init__(self, which=0, decim_rate=64, nchan=1, mux=0x32103210, mode=0, - fusb_block_size=0, fusb_nblocks=0, - fpga_filename="", firmware_filename=""): - _ensure_rev2(which) - self._u = usrp1.source_s(which, decim_rate, nchan, mux, mode, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) - # Add the db attribute, which contains a 2-tuple of tuples of daughterboard classes - self.db = (db_instantiator.instantiate(self._u, 0), - db_instantiator.instantiate(self._u, 1)) - usrp_common.__init__(self) - - def __del__(self): - self.db = None # will fire d'board destructors - self._u = None # will fire usrp1.* destructor - - -# ------------------------------------------------------------------------ -# utilities -# ------------------------------------------------------------------------ - -def determine_rx_mux_value(u, subdev_spec): - """ - Determine appropriate Rx mux value as a function of the subdevice choosen and the - characteristics of the respective daughterboard. - - @param u: instance of USRP source - @param subdev_spec: return value from subdev option parser. - @type subdev_spec: (side, subdev), where side is 0 or 1 and subdev is 0 or 1 - @returns: the Rx mux value - """ - # Figure out which A/D's to connect to the DDC. - # - # Each daughterboard consists of 1 or 2 subdevices. (At this time, - # all but the Basic Rx have a single subdevice. The Basic Rx - # has two independent channels, treated as separate subdevices). - # subdevice 0 of a daughterboard may use 1 or 2 A/D's. We determine this - # by checking the is_quadrature() method. If subdevice 0 uses only a single - # A/D, it's possible that the daughterboard has a second subdevice, subdevice 1, - # and it uses the second A/D. - # - # If the card uses only a single A/D, we wire a zero into the DDC Q input. - # - # (side, 0) says connect only the A/D's used by subdevice 0 to the DDC. - # (side, 1) says connect only the A/D's used by subdevice 1 to the DDC. - # - - side = subdev_spec[0] # side A = 0, side B = 1 - - if not(side in (0, 1)): - raise ValueError, "Invalid subdev_spec: %r:" % (subdev_spec,) - - db = u.db[side] # This is a tuple of length 1 or 2 containing the subdevice - # classes for the selected side. - - # compute bitmasks of used A/D's - - if db[0].is_quadrature(): - subdev0_uses = 0x3 # uses A/D 0 and 1 - else: - subdev0_uses = 0x1 # uses A/D 0 only - - if len(db) > 1: - subdev1_uses = 0x2 # uses A/D 1 only - else: - subdev1_uses = 0x0 # uses no A/D (doesn't exist) - - if subdev_spec[1] == 0: - uses = subdev0_uses - elif subdev_spec[1] == 1: - uses = subdev1_uses - else: - raise ValueError, "Invalid subdev_spec: %r: " % (subdev_spec,) - - if uses == 0: - raise RuntimeError, "Daughterboard doesn't have a subdevice 1: %r: " % (subdev_spec,) - - swap_iq = db[0].i_and_q_swapped() - - truth_table = { - # (side, uses, swap_iq) : mux_val - (0, 0x1, False) : 0xf0f0f0f0, - (0, 0x2, False) : 0xf0f0f0f1, - (0, 0x3, False) : 0x00000010, - (0, 0x3, True) : 0x00000001, - (1, 0x1, False) : 0xf0f0f0f2, - (1, 0x2, False) : 0xf0f0f0f3, - (1, 0x3, False) : 0x00000032, - (1, 0x3, True) : 0x00000023 - } - - return gru.hexint(truth_table[(side, uses, swap_iq)]) - - -def determine_tx_mux_value(u, subdev_spec): - """ - Determine appropriate Tx mux value as a function of the subdevice choosen. - - @param u: instance of USRP source - @param subdev_spec: return value from subdev option parser. - @type subdev_spec: (side, subdev), where side is 0 or 1 and subdev is 0 - @returns: the Rx mux value - """ - # This is simpler than the rx case. Either you want to talk - # to side A or side B. If you want to talk to both sides at once, - # determine the value manually. - - side = subdev_spec[0] # side A = 0, side B = 1 - - if not(side in (0, 1)): - raise ValueError, "Invalid subdev_spec: %r:" % (subdev_spec,) - - return gru.hexint([0x0098, 0x9800][side]) - - -def selected_subdev(u, subdev_spec): - """ - Return the user specified daughterboard subdevice. - - @param u: an instance of usrp.source_* or usrp.sink_* - @param subdev_spec: return value from subdev option parser. - @type subdev_spec: (side, subdev), where side is 0 or 1 and subdev is 0 or 1 - @returns: an instance derived from db_base - """ - side, subdev = subdev_spec - return u.db[side][subdev] - - -def calc_dxc_freq(target_freq, baseband_freq, fs): - """ - Calculate the frequency to use for setting the digital up or down converter. - - @param target_freq: desired RF frequency (Hz) - @type target_freq: number - @param baseband_freq: the RF frequency that corresponds to DC in the IF. - @type baseband_freq: number - @param fs: converter sample rate - @type fs: number - - @returns: 2-tuple (ddc_freq, inverted) where ddc_freq is the value - for the ddc and inverted is True if we're operating in an inverted - Nyquist zone. - """ - - delta = target_freq - baseband_freq - - if delta >= 0: - while delta > fs: - delta -= fs - if delta <= fs/2: - return (-delta, False) # non-inverted region - else: - return (delta - fs, True) # inverted region - else: - while delta < -fs: - delta += fs - if delta >= -fs/2: - return (-delta, False) # non-inverted region - else: - return (delta + fs, True) # inverted region - - -# ------------------------------------------------------------------------ -# Utilities -# ------------------------------------------------------------------------ - -def pick_tx_subdevice(u): - """ - The user didn't specify a tx subdevice on the command line. - Try for one of these, in order: FLEX_400, FLEX_900, FLEX_1200, FLEX_2400, - BASIC_TX, whatever's on side A. - - @return a subdev_spec - """ - return pick_subdev(u, (usrp_dbid.FLEX_400_TX, - usrp_dbid.FLEX_900_TX, - usrp_dbid.FLEX_1200_TX, - usrp_dbid.FLEX_2400_TX, - usrp_dbid.BASIC_TX)) - -def pick_rx_subdevice(u): - """ - The user didn't specify an rx subdevice on the command line. - Try for one of these, in order: FLEX_400, FLEX_900, FLEX_1200, FLEX_2400, - TV_RX, DBS_RX, BASIC_RX, whatever's on side A. - - @return a subdev_spec - """ - return pick_subdev(u, (usrp_dbid.FLEX_400_RX, - usrp_dbid.FLEX_900_RX, - usrp_dbid.FLEX_1200_RX, - usrp_dbid.FLEX_2400_RX, - usrp_dbid.TV_RX, - usrp_dbid.TV_RX_REV_2, - usrp_dbid.DBS_RX, - usrp_dbid.DBS_RX_REV_2_1, - usrp_dbid.BASIC_RX)) - -def pick_subdev(u, candidates): - """ - @param u: usrp instance - @param candidates: list of dbids - @returns: subdev specification - """ - db0 = u.db[0][0].dbid() - db1 = u.db[1][0].dbid() - for c in candidates: - if c == db0: return (0, 0) - if c == db1: return (1, 0) - if db0 >= 0: - return (0, 0) - if db1 >= 0: - return (1, 0) - raise RuntimeError, "No suitable daughterboard found!" - diff --git a/gr-usrp/src/usrp1.i b/gr-usrp/src/usrp1.i deleted file mode 100644 index 50daddc3..00000000 --- a/gr-usrp/src/usrp1.i +++ /dev/null @@ -1,657 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -%feature("autodoc", "1"); // generate python docstrings - -%include "exception.i" -%import "gnuradio.i" // the common stuff - -%{ - -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix -#include "usrp1_sink_c.h" -#include "usrp1_sink_s.h" -#include "usrp1_source_c.h" -#include "usrp1_source_s.h" -#include -#include -#include -%} - -%include - -%constant int FPGA_MODE_NORMAL = usrp_standard_rx::FPGA_MODE_NORMAL; -%constant int FPGA_MODE_LOOPBACK = usrp_standard_rx::FPGA_MODE_LOOPBACK; -%constant int FPGA_MODE_COUNTING = usrp_standard_rx::FPGA_MODE_COUNTING; - -// ================================================================ -// abstract classes -// ================================================================ - -class usrp1_sink_base : public gr_sync_block { -protected: - usrp1_sink_base (const std::string &name, - gr_io_signature_sptr input_signature, - int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, - int input_index, - int input_items_available, - int &input_items_consumed, - void *usrp_buffer, - int usrp_buffer_length, - int &bytes_written) = 0; - public: - ~usrp1_sink_base (); - - /*! - * \brief Set interpolator rate. \p rate must be in [4, 1024] and a multiple of 4. - * - * The final complex sample rate across the USB is - * dac_freq () * nchannels () / interp_rate () - */ - bool set_interp_rate (unsigned int rate); - bool set_nchannels (int nchan); - bool set_mux (int mux); - - /*! - * \brief set the frequency of the digital up converter. - * - * \p channel must be 0 or 1. \p freq is the center frequency in Hz. - * It must be in the range [-44M, 44M]. The frequency specified is - * quantized. Use tx_freq to retrieve the actual value used. - */ - bool set_tx_freq (int channel, double freq); - - void set_verbose (bool verbose); - - // ACCESSORS - - long fpga_master_clock_freq() const; - long converter_rate() const; // D/A sample rate - long dac_rate() const; // alias - long dac_freq () const; // deprecated name. Use converter_rate() or dac_rate(). - - unsigned int interp_rate () const; - double tx_freq (int channel) const; - int nunderruns () const { return d_nunderruns; } - - /*! - * \brief Set Programmable Gain Amplifier (PGA) - * - * \param which which D/A [0,3] - * \param gain_in_db gain value (linear in dB) - * - * gain is rounded to closest setting supported by hardware. - * Note that DAC 0 and DAC 1 share a gain setting as do DAC 2 and DAC 3. - * Setting DAC 0 affects DAC 1 and vice versa. Same with DAC 2 and DAC 3. - * - * \returns true iff sucessful. - * - * \sa pga_min(), pga_max(), pga_db_per_step() - */ - bool set_pga (int which, double gain_in_db); - - /*! - * \brief Return programmable gain amplifier gain in dB. - * - * \param which which D/A [0,3] - */ - double pga (int which) const; - - /*! - * \brief Return minimum legal PGA gain in dB. - */ - double pga_min () const; - - /*! - * \brief Return maximum legal PGA gain in dB. - */ - double pga_max () const; - - /*! - * \brief Return hardware step size of PGA (linear in dB). - */ - double pga_db_per_step () const; - - /*! - * \brief Return daughterboard ID for given Tx daughterboard slot [0,1]. - * - * \return daughterboard id >= 0 if successful - * \return -1 if no daugherboard - * \return -2 if invalid EEPROM on daughterboard - */ - int daughterboard_id (int which_dboard) const; - - /*! - * \brief Set ADC offset correction - * \param which which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... - * \param offset 16-bit value to subtract from raw ADC input. - */ - bool set_adc_offset (int which, int offset); - - /*! - * \brief Set DAC offset correction - * \param which which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... - * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). - * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; - * If 1 offset applied to +ve differential pin. - */ - bool set_dac_offset (int which, int offset, int offset_pin); - - /*! - * \brief Control ADC input buffer - * \param which which ADC[0,3] - * \param bypass if non-zero, bypass input buffer and connect input - * directly to switched cap SHA input of RxPGA. - */ - bool set_adc_buffer_bypass (int which, bool bypass); - - /*! - * \brief return the usrp's serial number. - * - * \returns non-zero length string iff successful. - */ - std::string serial_number(); - - /*! - * \brief Write direction register (output enables) for pins that go to daughterboard. - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - * - * Each d'board has 16-bits of general purpose i/o. - * Setting the bit makes it an output from the FPGA to the d'board. - * - * This register is initialized based on a value stored in the - * d'board EEPROM. In general, you shouldn't be using this routine - * without a very good reason. Using this method incorrectly will - * kill your USRP motherboard and/or daughterboard. - */ - bool _write_oe (int which_dboard, int value, int mask); - - /*! - * \brief Write daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - */ - bool write_io (int which_dboard, int value, int mask); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \returns register value if successful, else READ_FAILED - */ - int read_io (int which_dboard); - - bool write_aux_dac (int which_dboard, int which_dac, int value); - int read_aux_adc (int which_dboard, int which_adc); - bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); - std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); - bool write_i2c (int i2c_addr, const std::string buf); - std::string read_i2c (int i2c_addr, int len); - - bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value - int _read_fpga_reg (int regno); - bool _write_9862 (int which_codec, int regno, unsigned char value); - int _read_9862 (int which_codec, int regno) const; - - /*! - * \brief Write data to SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripherals to write. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they are - * written to the peripheral immediately prior to writing \p buf. - */ - bool _write_spi (int optional_header, int enables, int format, std::string buf); - - /* - * \brief Read data from SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripheral to read. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param len number of bytes to read. Must be in [0,64]. - * \returns the data read if sucessful, else a zero length string. - * - * Reads are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they - * are written to the peripheral first. Then \p len bytes are read from - * the peripheral and returned. - */ - std::string _read_spi (int optional_header, int enables, int format, int len); -}; - -// ---------------------------------------------------------------- - -class usrp1_source_base : public gr_sync_block { - protected: - - usrp1_sink_base (const std::string &name, - gr_io_signature_sptr input_signature, - int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items) = 0; - - virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, - int output_index, - int output_items_available, - int &output_items_produced, - const void *usrp_buffer, - int usrp_buffer_length, - int &bytes_read) = 0; - public: - ~usrp1_source_base (); - - - /*! - * \brief Set decimator rate. \p rate must be EVEN and in [8, 256]. - * - * The final complex sample rate across the USB is - * adc_freq () / decim_rate () - */ - bool set_decim_rate (unsigned int rate); - bool set_nchannels (int nchan); - bool set_mux (int mux); - - /*! - * \brief set the center frequency of the digital down converter. - * - * \p channel must be 0. \p freq is the center frequency in Hz. - * It must be in the range [-FIXME, FIXME]. The frequency specified is - * quantized. Use rx_freq to retrieve the actual value used. - */ - bool set_rx_freq (int channel, double freq); - - /*! - * \brief set fpga special modes - */ - bool set_fpga_mode (int mode); - - /*! - * \brief Set the digital down converter phase register. - * - * \param channel which ddc channel [0, 3] - * \param phase 32-bit integer phase value. - */ - bool set_ddc_phase(int channel, int phase); - - - void set_verbose (bool verbose); - - // ACCESSORS - - long fpga_master_clock_freq() const; - long converter_rate() const; // A/D sample rate - long adc_rate() const; // alias - long adc_freq() const; // Deprecated name. Use converter_rate() or adc_rate(). - - unsigned int decim_rate () const; - double rx_freq (int channel) const; - int noverruns () const { return d_noverruns; } - - - // PGA stuff - /*! - * \brief Set Programmable Gain Amplifier (PGA) - * - * \param which which A/D [0,3] - * \param gain_in_db gain value (linear in dB) - * - * gain is rounded to closest setting supported by hardware. - * - * \returns true iff sucessful. - * - * \sa pga_min(), pga_max(), pga_db_per_step() - */ - bool set_pga (int which, double gain_in_db); - - /*! - * \brief Return programmable gain amplifier gain setting in dB. - * - * \param which which A/D [0,3] - */ - double pga (int which) const; - - /*! - * \brief Return minimum legal PGA setting in dB. - */ - double pga_min () const; - - /*! - * \brief Return maximum legal PGA setting in dB. - */ - double pga_max () const; - - /*! - * \brief Return hardware step size of PGA (linear in dB). - */ - double pga_db_per_step () const; - - /*! - * \brief Return daughterboard ID for given Rx daughterboard slot [0,1]. - * - * \return daughterboard id >= 0 if successful - * \return -1 if no daugherboard - * \return -2 if invalid EEPROM on daughterboard - */ - int daughterboard_id (int which_dboard) const; - - /*! - * \brief Set ADC offset correction - * \param which which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... - * \param offset 16-bit value to subtract from raw ADC input. - */ - bool set_adc_offset (int which, int offset); - - /*! - * \brief Set DAC offset correction - * \param which which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... - * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). - * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; - * If 1 offset applied to +ve differential pin. - */ - bool set_dac_offset (int which, int offset, int offset_pin); - - /*! - * \brief Control ADC input buffer - * \param which which ADC[0,3] - * \param bypass if non-zero, bypass input buffer and connect input - * directly to switched cap SHA input of RxPGA. - */ - bool set_adc_buffer_bypass (int which, bool bypass); - - /*! - * \brief return the usrp's serial number. - * - * \returns non-zero length string iff successful. - */ - std::string serial_number(); - - /*! - * \brief Write direction register (output enables) for pins that go to daughterboard. - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - * - * Each d'board has 16-bits of general purpose i/o. - * Setting the bit makes it an output from the FPGA to the d'board. - * - * This register is initialized based on a value stored in the - * d'board EEPROM. In general, you shouldn't be using this routine - * without a very good reason. Using this method incorrectly will - * kill your USRP motherboard and/or daughterboard. - */ - bool _write_oe (int which_dboard, int value, int mask); - - /*! - * \brief Write daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - */ - bool write_io (int which_dboard, int value, int mask); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \returns register value if successful, else READ_FAILED - */ - int read_io (int which_dboard); - - /*! - * \brief Enable/disable automatic DC offset removal control loop in FPGA - * - * \param bits which control loops to enable - * \param mask which \p bits to pay attention to - * - * If the corresponding bit is set, enable the automatic DC - * offset correction control loop. - * - *
-   * The 4 low bits are significant:
-   *
-   *   ADC0 = (1 << 0)
-   *   ADC1 = (1 << 1)
-   *   ADC2 = (1 << 2)
-   *   ADC3 = (1 << 3)
-   * 
- * - * By default the control loop is enabled on all ADC's. - */ - bool set_dc_offset_cl_enable(int bits, int mask); - - /*! - * \brief Specify Rx data format. - * - * \param format format specifier - * - * Rx data format control register - * - * 3 2 1 - * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 - * +-----------------------------------------+-+-+---------+-------+ - * | Reserved (Must be zero) |B|Q| WIDTH | SHIFT | - * +-----------------------------------------+-+-+---------+-------+ - * - * SHIFT specifies arithmetic right shift [0, 15] - * WIDTH specifies bit-width of I & Q samples across the USB [1, 16] (not all valid) - * Q if set deliver both I & Q, else just I - * B if set bypass half-band filter. - * - * Right now the acceptable values are: - * - * B Q WIDTH SHIFT - * 0 1 16 0 - * 0 1 8 8 - * - * More valid combos to come. - * - * Default value is 0x00000300 16-bits, 0 shift, deliver both I & Q. - */ - bool set_format(unsigned int format); - - /*! - * \brief return current format - */ - unsigned int format () const; - - static unsigned int make_format(int width=16, int shift=0, - bool want_q=true, bool bypass_halfband=false); - static int format_width(unsigned int format); - static int format_shift(unsigned int format); - static bool format_want_q(unsigned int format); - static bool format_bypass_halfband(unsigned int format); - - - - - bool write_aux_dac (int which_dboard, int which_dac, int value); - int read_aux_adc (int which_dboard, int which_adc); - bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); - std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); - bool write_i2c (int i2c_addr, const std::string buf); - std::string read_i2c (int i2c_addr, int len); - bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value - bool _write_fpga_reg_masked (int regno, int value, int mask); //< 7-bit regno, 16-bit value, 16-bit mask - int _read_fpga_reg (int regno); - bool _write_9862 (int which_codec, int regno, unsigned char value); - int _read_9862 (int which_codec, int regno) const; - - bool _write_spi (int optional_header, int enables, int format, std::string buf); - - /* - * \brief Read data from SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripheral to read. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param len number of bytes to read. Must be in [0,64]. - * \returns the data read if sucessful, else a zero length string. - * - * Reads are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they - * are written to the peripheral first. Then \p len bytes are read from - * the peripheral and returned. - */ - std::string _read_spi (int optional_header, int enables, int format, int len); -}; - - -// ================================================================ -// concrete sinks -// ================================================================ - - -GR_SWIG_BLOCK_MAGIC(usrp1,sink_c) - -usrp1_sink_c_sptr -usrp1_make_sink_c (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - -class usrp1_sink_c : public usrp1_sink_base { - protected: - usrp1_sink_c (int which_board, unsigned int interp_rate, - int nchan, int mux); - - public: - ~usrp1_sink_c (); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(usrp1,sink_s) - -usrp1_sink_s_sptr -usrp1_make_sink_s (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - -class usrp1_sink_s : public usrp1_sink_base { - protected: - usrp1_sink_s (int which_board, unsigned int interp_rate, - int nchan, int mux); - - public: - ~usrp1_sink_s (); -}; - -// ================================================================ -// concrete sources -// ================================================================ - -GR_SWIG_BLOCK_MAGIC(usrp1,source_c) - - -usrp1_source_c_sptr -usrp1_make_source_c (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - -class usrp1_source_c : public usrp1_source_base { - protected: - usrp1_source_c (int which_board, unsigned int decim_rate, - int nchan, int mux, int mode); - - public: - ~usrp1_source_c (); -}; - -// ---------------------------------------------------------------- - -GR_SWIG_BLOCK_MAGIC(usrp1,source_s) - -usrp1_source_s_sptr -usrp1_make_source_s (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - -class usrp1_source_s : public usrp1_source_base { - protected: - usrp1_source_s (int which_board, unsigned int decim_rate, - int nchan, int mux, int mode); - - public: - ~usrp1_source_s (); -}; - diff --git a/gr-usrp/src/usrp1_sink_base.cc b/gr-usrp/src/usrp1_sink_base.cc deleted file mode 100644 index 331be5f8..00000000 --- a/gr-usrp/src/usrp1_sink_base.cc +++ /dev/null @@ -1,359 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const int OUTPUT_MULTIPLE_SAMPLES = 128; // DON'T CHANGE THIS VALUE! - -usrp1_sink_base::usrp1_sink_base (const std::string &name, - gr_io_signature_sptr input_signature, - int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) - : gr_sync_block (name, - input_signature, - gr_make_io_signature (0, 0, 0)), - d_nunderruns (0) -{ - d_usrp = usrp_standard_tx::make (which_board, - interp_rate, - nchan, mux, - fusb_block_size, - fusb_nblocks, - fpga_filename, - firmware_filename - ); - if (d_usrp == 0) - throw std::runtime_error ("can't open usrp1"); - - // All calls to d_usrp->write must be multiples of 512 bytes. - - set_output_multiple (OUTPUT_MULTIPLE_SAMPLES); -} - -usrp1_sink_base::~usrp1_sink_base () -{ - delete d_usrp; -} - -bool -usrp1_sink_base::start() -{ - return d_usrp->start(); -} - -bool -usrp1_sink_base::stop() -{ - return d_usrp->stop(); -} - -int -usrp1_sink_base::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - static const int BUFSIZE = 16 * (1L << 10); // 16kB - unsigned char outbuf[BUFSIZE]; - int obi = 0; - int input_index = 0; - int input_items_consumed; - int bytes_written; - bool underrun; - - - while (input_index < noutput_items){ - - copy_to_usrp_buffer (input_items, - input_index, - noutput_items - input_index, // input_items_available - input_items_consumed, // [out] - &outbuf[obi], // [out] usrp_buffer - BUFSIZE - obi, // usrp_buffer_length - bytes_written); // [out] - - assert (input_index + input_items_consumed <= noutput_items); - assert (obi + bytes_written <= BUFSIZE); - - input_index += input_items_consumed; - obi += bytes_written; - - if (obi >= BUFSIZE){ // flush - if (d_usrp->write (outbuf, obi, &underrun) != obi) - return -1; // indicate we're done - - if (underrun){ - d_nunderruns++; - // fprintf (stderr, "usrp1_sink: underrun\n"); - fputs ("uU", stderr); - } - obi = 0; - } - } - - if (obi != 0){ - assert (obi % 512 == 0); - if (d_usrp->write (outbuf, obi, &underrun) != obi) - return -1; // indicate we're done - - if (underrun){ - d_nunderruns++; - // fprintf (stderr, "usrp1_sink: underrun\n"); - fputs ("uU", stderr); - } - } - - return noutput_items; -} - -bool -usrp1_sink_base::set_interp_rate (unsigned int rate) -{ - return d_usrp->set_interp_rate (rate); -} - -bool -usrp1_sink_base::set_nchannels (int nchan) -{ - return d_usrp->set_nchannels (nchan); -} - -bool -usrp1_sink_base::set_mux (int mux) -{ - return d_usrp->set_mux (mux); -} - -bool -usrp1_sink_base::set_tx_freq (int channel, double freq) -{ - return d_usrp->set_tx_freq (channel, freq); -} - -long -usrp1_sink_base::fpga_master_clock_freq() const -{ - return d_usrp->fpga_master_clock_freq(); -} - -long -usrp1_sink_base::converter_rate () const -{ - return d_usrp->converter_rate (); -} - -unsigned int -usrp1_sink_base::interp_rate () const -{ - return d_usrp->interp_rate (); -} - -int -usrp1_sink_base::nchannels () const -{ - return d_usrp->nchannels (); -} - -int -usrp1_sink_base::mux () const -{ - return d_usrp->mux (); -} - - -double -usrp1_sink_base::tx_freq (int channel) const -{ - return d_usrp->tx_freq (channel); -} - -void -usrp1_sink_base::set_verbose (bool verbose) -{ - d_usrp->set_verbose (verbose); -} - -bool -usrp1_sink_base::write_aux_dac (int which_dboard, int which_dac, int value) -{ - return d_usrp->write_aux_dac (which_dboard, which_dac, value); -} - -int -usrp1_sink_base::read_aux_adc (int which_dboard, int which_adc) -{ - return d_usrp->read_aux_adc (which_dboard, which_adc); -} - -bool -usrp1_sink_base::write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf) -{ - return d_usrp->write_eeprom (i2c_addr, eeprom_offset, buf); -} - -std::string -usrp1_sink_base::read_eeprom (int i2c_addr, int eeprom_offset, int len) -{ - return d_usrp->read_eeprom (i2c_addr, eeprom_offset, len); -} - -bool -usrp1_sink_base::write_i2c (int i2c_addr, const std::string buf) -{ - return d_usrp->write_i2c (i2c_addr, buf); -} - -std::string -usrp1_sink_base::read_i2c (int i2c_addr, int len) -{ - return d_usrp->read_i2c (i2c_addr, len); -} - -bool -usrp1_sink_base::set_pga (int which, double gain) -{ - return d_usrp->set_pga (which, gain); -} - -double -usrp1_sink_base::pga (int which) const -{ - return d_usrp->pga (which); -} - -double -usrp1_sink_base::pga_min () const -{ - return d_usrp->pga_min (); -} - -double -usrp1_sink_base::pga_max () const -{ - return d_usrp->pga_max (); -} - -double -usrp1_sink_base::pga_db_per_step () const -{ - return d_usrp->pga_db_per_step (); -} - -int -usrp1_sink_base::daughterboard_id (int which) const -{ - return d_usrp->daughterboard_id (which); -} - -bool -usrp1_sink_base::set_adc_offset (int which, int offset) -{ - return d_usrp->set_adc_offset (which, offset); -} - -bool -usrp1_sink_base::set_dac_offset (int which, int offset, int offset_pin) -{ - return d_usrp->set_dac_offset (which, offset, offset_pin); -} - -bool -usrp1_sink_base::set_adc_buffer_bypass (int which, bool bypass) -{ - return d_usrp->set_adc_buffer_bypass (which, bypass); -} - -std::string -usrp1_sink_base::serial_number() -{ - return d_usrp->serial_number(); -} - -bool -usrp1_sink_base::_write_oe (int which_dboard, int value, int mask) -{ - return d_usrp->_write_oe (which_dboard, value, mask); -} - -bool -usrp1_sink_base::write_io (int which_dboard, int value, int mask) -{ - return d_usrp->write_io (which_dboard, value, mask); -} - -int -usrp1_sink_base::read_io (int which_dboard) -{ - return d_usrp->read_io (which_dboard); -} - -// internal routines... - -bool -usrp1_sink_base::_write_fpga_reg (int regno, int value) -{ - return d_usrp->_write_fpga_reg (regno, value); -} - -int -usrp1_sink_base::_read_fpga_reg (int regno) -{ - return d_usrp->_read_fpga_reg (regno); -} - -bool -usrp1_sink_base::_write_9862 (int which_codec, int regno, unsigned char value) -{ - return d_usrp->_write_9862 (which_codec, regno, value); -} - -int -usrp1_sink_base::_read_9862 (int which_codec, int regno) const -{ - return d_usrp->_read_9862 (which_codec, regno); -} - -bool -usrp1_sink_base::_write_spi (int optional_header, int enables, - int format, std::string buf) -{ - return d_usrp->_write_spi (optional_header, enables, format, buf); -} - -std::string -usrp1_sink_base::_read_spi (int optional_header, int enables, int format, int len) -{ - return d_usrp->_read_spi (optional_header, enables, format, len); -} diff --git a/gr-usrp/src/usrp1_sink_base.h b/gr-usrp/src/usrp1_sink_base.h deleted file mode 100644 index c6284947..00000000 --- a/gr-usrp/src/usrp1_sink_base.h +++ /dev/null @@ -1,359 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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. - */ - -#ifndef INCLUDED_USRP1_SINK_BASE_H -#define INCLUDED_USRP1_SINK_BASE_H - -#include -#include - -class usrp_standard_tx; - - -/*! - * \brief abstract interface to Universal Software Radio Peripheral Tx path (Rev 1) - */ -class usrp1_sink_base : public gr_sync_block { - private: - usrp_standard_tx *d_usrp; - int d_nunderruns; - - protected: - usrp1_sink_base (const std::string &name, - gr_io_signature_sptr input_signature, - int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - /*! - * \brief convert between input item format and usrp native format - * - * \param input_items[in] stream(s) of input items - * \param input_index[in] starting index in input_items - * \param input_items_available[in] number of items available starting at item[index] - * \param input_items_consumed[out] number of input items consumed by copy - * \param usrp_buffer[out] destination buffer - * \param usrp_buffer_length[in] \p usrp_buffer length in bytes - * \param bytes_written[out] number of bytes written into \p usrp_buffer - */ - virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, - int input_index, - int input_items_available, - int &input_items_consumed, - void *usrp_buffer, - int usrp_buffer_length, - int &bytes_written) = 0; - - public: - //! magic value used on alternate register read interfaces - static const int READ_FAILED = -99999; - - - ~usrp1_sink_base (); - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool start(); - bool stop(); - - /*! - * \brief Set interpolator rate. \p rate must be in [4, 1024] and a multiple of 4. - * - * The final complex sample rate across the USB is - * dac_freq () / interp_rate () * nchannels () - */ - bool set_interp_rate (unsigned int rate); - bool set_nchannels (int nchan); - bool set_mux (int mux); - - /*! - * \brief set the frequency of the digital up converter. - * - * \p channel must be 0. \p freq is the center frequency in Hz. - * It must be in the range [-44M, 44M]. The frequency specified is - * quantized. Use tx_freq to retrieve the actual value used. - */ - bool set_tx_freq (int channel, double freq); - - void set_verbose (bool verbose); - - /*! - * \brief Set Programmable Gain Amplifier (PGA) - * - * \param which which D/A [0,3] - * \param gain_in_db gain value (linear in dB) - * - * gain is rounded to closest setting supported by hardware. - * Note that DAC 0 and DAC 1 share a gain setting as do DAC 2 and DAC 3. - * Setting DAC 0 affects DAC 1 and vice versa. Same with DAC 2 and DAC 3. - * - * \returns true iff sucessful. - * - * \sa pga_min(), pga_max(), pga_db_per_step() - */ - bool set_pga (int which, double gain_in_db); - - /*! - * \brief Return programmable gain amplifier gain in dB. - * - * \param which which D/A [0,3] - */ - double pga (int which) const; - - /*! - * \brief Return minimum legal PGA gain in dB. - */ - double pga_min () const; - - /*! - * \brief Return maximum legal PGA gain in dB. - */ - double pga_max () const; - - /*! - * \brief Return hardware step size of PGA (linear in dB). - */ - double pga_db_per_step () const; - - - // ACCESSORS - - long fpga_master_clock_freq() const; - long converter_rate() const; - long dac_rate() const { return converter_rate(); } // alias - long dac_freq() const { return converter_rate(); } // deprecated alias - - unsigned int interp_rate () const; - int nchannels () const; - int mux () const; - double tx_freq (int channel) const; - int nunderruns () const { return d_nunderruns; } - - /*! - * \brief Return daughterboard ID for given Rx daughterboard slot [0,1]. - * - * \return daughterboard id >= 0 if successful - * \return -1 if no daugherboard - * \return -2 if invalid EEPROM on daughterboard - */ - int daughterboard_id (int which_dboard) const; - - /*! - * \brief Write auxiliary digital to analog converter. - * - * \param which_dboard [0,1] which d'board - * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. - * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. - * \param which_dac [2,3] TX slots must use only 2 and 3. - * \param value [0,4095] - * \returns true iff successful - */ - bool write_aux_dac (int which_board, int which_dac, int value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param which_dboard [0,1] which d'board - * \param which_adc [0,1] - * \returns value in the range [0,4095] if successful, else READ_FAILED. - */ - int read_aux_adc (int which_dboard, int which_adc); - - /*! - * \brief Write EEPROM on motherboard or any daughterboard. - * \param i2c_addr I2C bus address of EEPROM - * \param eeprom_offset byte offset in EEPROM to begin writing - * \param buf the data to write - * \returns true iff sucessful - */ - bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); - - /*! - * \brief Write EEPROM on motherboard or any daughterboard. - * \param i2c_addr I2C bus address of EEPROM - * \param eeprom_offset byte offset in EEPROM to begin reading - * \param len number of bytes to read - * \returns the data read if successful, else a zero length string. - */ - std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); - - /*! - * \brief Write to I2C peripheral - * \param i2c_addr I2C bus address (7-bits) - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of of 64 bytes. - */ - bool write_i2c (int i2c_addr, const std::string buf); - - /*! - * \brief Read from I2C peripheral - * \param i2c_addr I2C bus address (7-bits) - * \param len number of bytes to read - * \returns the data read if successful, else a zero length string. - * Reads are limited to a maximum of of 64 bytes. - */ - std::string read_i2c (int i2c_addr, int len); - - /*! - * \brief Set ADC offset correction - * \param which which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... - * \param offset 16-bit value to subtract from raw ADC input. - */ - bool set_adc_offset (int which, int offset); - - /*! - * \brief Set DAC offset correction - * \param which which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... - * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). - * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; - * If 1 offset applied to +ve differential pin. - */ - bool set_dac_offset (int which, int offset, int offset_pin); - - /*! - * \brief Control ADC input buffer - * \param which which ADC[0,3] - * \param bypass if non-zero, bypass input buffer and connect input - * directly to switched cap SHA input of RxPGA. - */ - bool set_adc_buffer_bypass (int which, bool bypass); - - /*! - * \brief return the usrp's serial number. - * - * \returns non-zero length string iff successful. - */ - std::string serial_number(); - - /*! - * \brief Write direction register (output enables) for pins that go to daughterboard. - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - * - * Each d'board has 16-bits of general purpose i/o. - * Setting the bit makes it an output from the FPGA to the d'board. - * - * This register is initialized based on a value stored in the - * d'board EEPROM. In general, you shouldn't be using this routine - * without a very good reason. Using this method incorrectly will - * kill your USRP motherboard and/or daughterboard. - */ - bool _write_oe (int which_dboard, int value, int mask); - - /*! - * \brief Write daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - */ - bool write_io (int which_dboard, int value, int mask); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \returns register value if successful, else READ_FAILED - */ - int read_io (int which_dboard); - - // - // internal routines... - // You probably shouldn't be using these... - // - /*! - * \brief Write FPGA register. - * \param regno 7-bit register number - * \param value 32-bit value - * \returns true iff successful - */ - bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value - - /*! - * \brief Read FPGA register. - * \param regno 7-bit register number - * \returns register value if successful, else READ_FAILED - */ - int _read_fpga_reg (int regno); - - /*! - * \brief Write AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \param value 8-bit value - * \returns true iff successful - */ - bool _write_9862 (int which_codec, int regno, unsigned char value); - - /*! - * \brief Read AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \returns register value if successful, else READ_FAILED - */ - int _read_9862 (int which_codec, int regno) const; - - /*! - * \brief Write data to SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripherals to write. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they are - * written to the peripheral immediately prior to writing \p buf. - */ - bool _write_spi (int optional_header, int enables, int format, std::string buf); - - /* - * \brief Read data from SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripheral to read. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param len number of bytes to read. Must be in [0,64]. - * \returns the data read if sucessful, else a zero length string. - * - * Reads are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they - * are written to the peripheral first. Then \p len bytes are read from - * the peripheral and returned. - */ - std::string _read_spi (int optional_header, int enables, int format, int len); -}; - -#endif /* INCLUDED_USRP1_SINK_BASE_H */ diff --git a/gr-usrp/src/usrp1_sink_c.cc b/gr-usrp/src/usrp1_sink_c.cc deleted file mode 100644 index b3830609..00000000 --- a/gr-usrp/src/usrp1_sink_c.cc +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -usrp1_sink_c_sptr -usrp1_make_sink_c (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) -{ - return usrp1_sink_c_sptr (new usrp1_sink_c (which_board, - interp_rate, - nchan, - mux, - fusb_block_size, - fusb_nblocks, - fpga_filename, - firmware_filename - )); -} - - -usrp1_sink_c::usrp1_sink_c (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) - : usrp1_sink_base ("usrp1_sink_c", - gr_make_io_signature (1, 1, sizeof (gr_complex)), - which_board, interp_rate, nchan, mux, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) -{ -} - -usrp1_sink_c::~usrp1_sink_c () -{ - // NOP -} - -/* - * Take one complex input stream and format it into interleaved short I & Q - * for the usrp. - */ -void -usrp1_sink_c::copy_to_usrp_buffer (gr_vector_const_void_star &input_items, - int input_index, - int input_items_available, - int &input_items_consumed, // out - void *usrp_buffer, - int usrp_buffer_length, - int &bytes_written) // out -{ - gr_complex *in = &((gr_complex *) input_items[0])[input_index]; - short *dst = (short *) usrp_buffer; - - static const int usrp_bytes_per_input_item = 2 * sizeof (short); // I & Q - - int nitems = std::min (input_items_available, - usrp_buffer_length / usrp_bytes_per_input_item); - - for (int i = 0; i < nitems; i++){ - dst[2*i + 0] = host_to_usrp_short((short) real(in[i])); // FIXME saturate? - dst[2*i + 1] = host_to_usrp_short((short) imag(in[i])); // FIXME saturate? - } - - input_items_consumed = nitems; - bytes_written = nitems * usrp_bytes_per_input_item; -} - diff --git a/gr-usrp/src/usrp1_sink_c.h b/gr-usrp/src/usrp1_sink_c.h deleted file mode 100644 index 9e1d3f00..00000000 --- a/gr-usrp/src/usrp1_sink_c.h +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_USRP1_SINK_C_H -#define INCLUDED_USRP1_SINK_C_H - -#include - -class usrp1_sink_c; -typedef boost::shared_ptr usrp1_sink_c_sptr; - - -// public shared_ptr constructor - -usrp1_sink_c_sptr -usrp1_make_sink_c (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - -/*! - * \brief interface to Universal Software Radio Peripheral Tx path (Rev 1) - * - * input: gr_complex - */ -class usrp1_sink_c : public usrp1_sink_base { - private: - - friend usrp1_sink_c_sptr - usrp1_make_sink_c (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - protected: - usrp1_sink_c (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, - int input_index, - int input_items_available, - int &input_items_consumed, - void *usrp_buffer, - int usrp_buffer_length, - int &bytes_written); - public: - ~usrp1_sink_c (); -}; - -#endif /* INCLUDED_USRP1_SINK_C_H */ diff --git a/gr-usrp/src/usrp1_sink_s.cc b/gr-usrp/src/usrp1_sink_s.cc deleted file mode 100644 index 3ce33632..00000000 --- a/gr-usrp/src/usrp1_sink_s.cc +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -usrp1_sink_s_sptr -usrp1_make_sink_s (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) -{ - return usrp1_sink_s_sptr (new usrp1_sink_s (which_board, - interp_rate, - nchan, - mux, - fusb_block_size, - fusb_nblocks, - fpga_filename, - firmware_filename - )); -} - - -usrp1_sink_s::usrp1_sink_s (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) - : usrp1_sink_base ("usrp1_sink_s", - gr_make_io_signature (1, 1, sizeof (short)), - which_board, interp_rate, nchan, mux, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) -{ - set_output_multiple (512 / sizeof(short)); // don't change -} - -usrp1_sink_s::~usrp1_sink_s () -{ - // NOP -} - -/* - * Take one short input stream and format it into interleaved short I & Q - * for the usrp. - */ -void -usrp1_sink_s::copy_to_usrp_buffer (gr_vector_const_void_star &input_items, - int input_index, - int input_items_available, - int &input_items_consumed, // out - void *usrp_buffer, - int usrp_buffer_length, - int &bytes_written) // out -{ - short *in = &((short *) input_items[0])[input_index]; - short *dst = (short *) usrp_buffer; - - static const int usrp_bytes_per_input_item = sizeof (short); - - int nitems = std::min (input_items_available, - usrp_buffer_length / usrp_bytes_per_input_item); - - for (int i = 0; i < nitems; i++){ // FIXME unroll - dst[i] = host_to_usrp_short(in[i]); - } - - input_items_consumed = nitems; - bytes_written = nitems * usrp_bytes_per_input_item; -} - diff --git a/gr-usrp/src/usrp1_sink_s.h b/gr-usrp/src/usrp1_sink_s.h deleted file mode 100644 index 2420b1e3..00000000 --- a/gr-usrp/src/usrp1_sink_s.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_USRP1_SINK_S_H -#define INCLUDED_USRP1_SINK_S_H - -#include - -class usrp1_sink_s; -typedef boost::shared_ptr usrp1_sink_s_sptr; - - -// public shared_ptr constructor - -usrp1_sink_s_sptr -usrp1_make_sink_s (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - -/*! - * \brief interface to Universal Software Radio Peripheral Tx path (Rev 1) - * - * input: short - */ -class usrp1_sink_s : public usrp1_sink_base { - private: - - friend usrp1_sink_s_sptr - usrp1_make_sink_s (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - protected: - usrp1_sink_s (int which_board, - unsigned int interp_rate, - int nchan, - int mux, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, - int input_index, - int input_items_available, - int &input_items_consumed, - void *usrp_buffer, - int usrp_buffer_length, - int &bytes_written); - public: - ~usrp1_sink_s (); -}; - -#endif /* INCLUDED_USRP1_SINK_S_H */ diff --git a/gr-usrp/src/usrp1_source_base.cc b/gr-usrp/src/usrp1_source_base.cc deleted file mode 100644 index 1aefa8a2..00000000 --- a/gr-usrp/src/usrp1_source_base.cc +++ /dev/null @@ -1,425 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const int OUTPUT_MULTIPLE_BYTES = 4 * 1024; - -usrp1_source_base::usrp1_source_base (const std::string &name, - gr_io_signature_sptr output_signature, - int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) - : gr_sync_block (name, - gr_make_io_signature (0, 0, 0), - output_signature), - d_noverruns (0) -{ - d_usrp = usrp_standard_rx::make (which_board, decim_rate, - nchan, mux, mode, - fusb_block_size, - fusb_nblocks, - fpga_filename, - firmware_filename); - if (d_usrp == 0) - throw std::runtime_error ("can't open usrp1"); - - // All calls to d_usrp->read must be multiples of 512 bytes. - // We jack this up to 4k to reduce overhead. - - set_output_multiple (OUTPUT_MULTIPLE_BYTES / output_signature->sizeof_stream_item (0)); -} - -usrp1_source_base::~usrp1_source_base () -{ - delete d_usrp; -} - -unsigned int -usrp1_source_base::sizeof_basic_sample() const -{ - return usrp_standard_rx::format_width(d_usrp->format()) / 8; -} - -bool -usrp1_source_base::start() -{ - return d_usrp->start(); -} - -bool -usrp1_source_base::stop() -{ - return d_usrp->stop(); -} - -int -usrp1_source_base::work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items) -{ - static const int BUFSIZE = 4 * OUTPUT_MULTIPLE_BYTES; - unsigned char buf[BUFSIZE]; - int output_index = 0; - int output_items_produced; - int bytes_read; - bool overrun; - - while (output_index < noutput_items){ - int nbytes = ninput_bytes_reqd_for_noutput_items (noutput_items - output_index); - nbytes = std::min (nbytes, BUFSIZE); - - int result_nbytes = d_usrp->read (buf, nbytes, &overrun); - if (overrun){ - // fprintf (stderr, "usrp1_source: overrun\n"); - fputs ("uO", stderr); - d_noverruns++; - } - - if (result_nbytes < 0) // We've got a problem. Usually board unplugged or powered down. - return -1; // Indicate we're done. - - if (result_nbytes != nbytes){ // not really an error, but unexpected - fprintf (stderr, "usrp1_source: short read. Expected %d, got %d\n", - nbytes, result_nbytes); - } - - copy_from_usrp_buffer (output_items, - output_index, - noutput_items - output_index, // output_items_available - output_items_produced, // [out] - buf, // usrp_buffer - result_nbytes, // usrp_buffer_length - bytes_read); // [out] - - assert (output_index + output_items_produced <= noutput_items); - assert (bytes_read == result_nbytes); - - output_index += output_items_produced; - } - - return noutput_items; -} - - -bool -usrp1_source_base::set_decim_rate (unsigned int rate) -{ - return d_usrp->set_decim_rate (rate); -} - -bool -usrp1_source_base::set_nchannels (int nchan) -{ - return d_usrp->set_nchannels (nchan); -} - -bool -usrp1_source_base::set_mux (int mux) -{ - return d_usrp->set_mux (mux); -} - -bool -usrp1_source_base::set_rx_freq (int channel, double freq) -{ - return d_usrp->set_rx_freq (channel, freq); -} - -long -usrp1_source_base::fpga_master_clock_freq() const -{ - return d_usrp->fpga_master_clock_freq(); -} - -long -usrp1_source_base::converter_rate() const -{ - return d_usrp->converter_rate(); -} - -unsigned int -usrp1_source_base::decim_rate () const -{ - return d_usrp->decim_rate (); -} - -int -usrp1_source_base::nchannels () const -{ - return d_usrp->nchannels (); -} - -int -usrp1_source_base::mux () const -{ - return d_usrp->mux (); -} - -double -usrp1_source_base::rx_freq (int channel) const -{ - return d_usrp->rx_freq (channel); -} - -bool -usrp1_source_base::set_fpga_mode (int mode) -{ - return d_usrp->set_fpga_mode (mode); -} - -bool -usrp1_source_base::set_ddc_phase (int channel, int phase) -{ - return d_usrp->set_ddc_phase(channel, phase); -} - -bool -usrp1_source_base::set_dc_offset_cl_enable(int bits, int mask) -{ - return d_usrp->set_dc_offset_cl_enable(bits, mask); -} - -void -usrp1_source_base::set_verbose (bool verbose) -{ - d_usrp->set_verbose (verbose); -} - -bool -usrp1_source_base::write_aux_dac (int which_dboard, int which_dac, int value) -{ - return d_usrp->write_aux_dac (which_dboard, which_dac, value); -} - -int -usrp1_source_base::read_aux_adc (int which_dboard, int which_adc) -{ - return d_usrp->read_aux_adc (which_dboard, which_adc); -} - -bool -usrp1_source_base::write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf) -{ - return d_usrp->write_eeprom (i2c_addr, eeprom_offset, buf); -} - -std::string -usrp1_source_base::read_eeprom (int i2c_addr, int eeprom_offset, int len) -{ - return d_usrp->read_eeprom (i2c_addr, eeprom_offset, len); -} - -bool -usrp1_source_base::write_i2c (int i2c_addr, const std::string buf) -{ - return d_usrp->write_i2c (i2c_addr, buf); -} - -std::string -usrp1_source_base::read_i2c (int i2c_addr, int len) -{ - return d_usrp->read_i2c (i2c_addr, len); -} - -bool -usrp1_source_base::set_pga (int which, double gain) -{ - return d_usrp->set_pga (which, gain); -} - -double -usrp1_source_base::pga (int which) const -{ - return d_usrp->pga (which); -} - -double -usrp1_source_base::pga_min () const -{ - return d_usrp->pga_min (); -} - -double -usrp1_source_base::pga_max () const -{ - return d_usrp->pga_max (); -} - -double -usrp1_source_base::pga_db_per_step () const -{ - return d_usrp->pga_db_per_step (); -} - -int -usrp1_source_base::daughterboard_id (int which) const -{ - return d_usrp->daughterboard_id (which); -} - - -bool -usrp1_source_base::set_adc_offset (int which, int offset) -{ - return d_usrp->set_adc_offset (which, offset); -} - -bool -usrp1_source_base::set_dac_offset (int which, int offset, int offset_pin) -{ - return d_usrp->set_dac_offset (which, offset, offset_pin); -} - -bool -usrp1_source_base::set_adc_buffer_bypass (int which, bool bypass) -{ - return d_usrp->set_adc_buffer_bypass (which, bypass); -} - -std::string -usrp1_source_base::serial_number() -{ - return d_usrp->serial_number(); -} - -bool -usrp1_source_base::_write_oe (int which_dboard, int value, int mask) -{ - return d_usrp->_write_oe (which_dboard, value, mask); -} - -bool -usrp1_source_base::write_io (int which_dboard, int value, int mask) -{ - return d_usrp->write_io (which_dboard, value, mask); -} - -int -usrp1_source_base::read_io (int which_dboard) -{ - return d_usrp->read_io (which_dboard); -} - - - - -// internal routines... - -bool -usrp1_source_base::_write_fpga_reg (int regno, int value) -{ - return d_usrp->_write_fpga_reg (regno, value); -} - -bool -usrp1_source_base::_write_fpga_reg_masked (int regno, int value, int mask) -{ - return d_usrp->_write_fpga_reg_masked (regno, value, mask); -} - -int -usrp1_source_base::_read_fpga_reg (int regno) -{ - return d_usrp->_read_fpga_reg (regno); -} - -bool -usrp1_source_base::_write_9862 (int which_codec, int regno, unsigned char value) -{ - return d_usrp->_write_9862 (which_codec, regno, value); -} - -int -usrp1_source_base::_read_9862 (int which_codec, int regno) const -{ - return d_usrp->_read_9862 (which_codec, regno); -} - -bool -usrp1_source_base::_write_spi (int optional_header, int enables, - int format, std::string buf) -{ - return d_usrp->_write_spi (optional_header, enables, format, buf); -} - -std::string -usrp1_source_base::_read_spi (int optional_header, int enables, int format, int len) -{ - return d_usrp->_read_spi (optional_header, enables, format, len); -} - -bool -usrp1_source_base::set_format(unsigned int format) -{ - return d_usrp->set_format(format); -} - -unsigned int -usrp1_source_base::format() const -{ - return d_usrp->format(); -} - -unsigned int -usrp1_source_base::make_format(int width, int shift, bool want_q, bool bypass_halfband) -{ - return usrp_standard_rx::make_format(width, shift, want_q, bypass_halfband); -} - -int -usrp1_source_base::format_width(unsigned int format) -{ - return usrp_standard_rx::format_width(format); -} - -int -usrp1_source_base::format_shift(unsigned int format) -{ - return usrp_standard_rx::format_shift(format); -} - -bool -usrp1_source_base::format_want_q(unsigned int format) -{ - return usrp_standard_rx::format_want_q(format); -} - -bool -usrp1_source_base::format_bypass_halfband(unsigned int format) -{ - return usrp_standard_rx::format_bypass_halfband(format); -} diff --git a/gr-usrp/src/usrp1_source_base.h b/gr-usrp/src/usrp1_source_base.h deleted file mode 100644 index 5d29ba60..00000000 --- a/gr-usrp/src/usrp1_source_base.h +++ /dev/null @@ -1,455 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_USRP1_SOURCE_BASE_H -#define INCLUDED_USRP1_SOURCE_BASE_H - -#include -#include - -class usrp_standard_rx; - -/*! - * \brief abstract interface to Universal Software Radio Peripheral Rx path (Rev 1) - */ -class usrp1_source_base : public gr_sync_block { - private: - usrp_standard_rx *d_usrp; - int d_noverruns; - - protected: - usrp1_source_base (const std::string &name, - gr_io_signature_sptr output_signature, - int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - /*! - * \brief return number of usrp input bytes required to produce noutput items. - */ - virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items) = 0; - - /*! - * \brief number of bytes in a low-level sample - */ - unsigned int sizeof_basic_sample() const; - - /*! - * \brief convert between native usrp format and output item format - * - * \param output_items[out] stream(s) of output items - * \param output_index[in] starting index in output_items - * \param output_items_available[in] number of empty items available at item[index] - * \param output_items_produced[out] number of items produced by copy - * \param usrp_buffer[in] source buffer - * \param usrp_buffer_length[in] number of bytes available in \p usrp_buffer - * \param bytes_read[out] number of bytes read from \p usrp_buffer - * - * The copy must consume all bytes available. That is, \p bytes_read must equal - * \p usrp_buffer_length. - */ - virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, - int output_index, - int output_items_available, - int &output_items_produced, - const void *usrp_buffer, - int usrp_buffer_length, - int &bytes_read) = 0; - - public: - //! magic value used on alternate register read interfaces - static const int READ_FAILED = -99999; - - ~usrp1_source_base (); - - int work (int noutput_items, - gr_vector_const_void_star &input_items, - gr_vector_void_star &output_items); - - bool start(); - bool stop(); - - /*! - * \brief Set decimator rate. \p rate must be EVEN and in [8, 256]. - * - * The final complex sample rate across the USB is - * adc_freq () / decim_rate () - */ - bool set_decim_rate (unsigned int rate); - bool set_nchannels (int nchan); - bool set_mux (int mux); - - /*! - * \brief set the center frequency of the digital down converter. - * - * \p channel must be 0. \p freq is the center frequency in Hz. - * It must be in the range [-FIXME, FIXME]. The frequency specified is - * quantized. Use rx_freq to retrieve the actual value used. - */ - bool set_rx_freq (int channel, double freq); - - /*! - * \brief set fpga special modes - */ - bool set_fpga_mode (int mode); - - void set_verbose (bool verbose); - - /*! - * \brief Set the digital down converter phase register. - * - * \param channel which ddc channel [0, 3] - * \param phase 32-bit integer phase value. - */ - bool set_ddc_phase(int channel, int phase); - - /*! - * \brief Set Programmable Gain Amplifier (PGA) - * - * \param which which A/D [0,3] - * \param gain_in_db gain value (linear in dB) - * - * gain is rounded to closest setting supported by hardware. - * - * \returns true iff sucessful. - * - * \sa pga_min(), pga_max(), pga_db_per_step() - */ - bool set_pga (int which, double gain_in_db); - - /*! - * \brief Return programmable gain amplifier gain setting in dB. - * - * \param which which A/D [0,3] - */ - double pga (int which) const; - - /*! - * \brief Return minimum legal PGA setting in dB. - */ - double pga_min () const; - - /*! - * \brief Return maximum legal PGA setting in dB. - */ - double pga_max () const; - - /*! - * \brief Return hardware step size of PGA (linear in dB). - */ - double pga_db_per_step () const; - - // ACCESSORS - - long fpga_master_clock_freq() const; - long converter_rate() const; - long adc_rate() const { return converter_rate(); } // alias - long adc_freq() const { return converter_rate(); } // deprecated alias - - unsigned int decim_rate () const; - int nchannels () const; - int mux () const; - double rx_freq (int channel) const; - int noverruns () const { return d_noverruns; } - - /*! - * \brief Return daughterboard ID for given Rx daughterboard slot [0,1]. - * - * \return daughterboard id >= 0 if successful - * \return -1 if no daugherboard - * \return -2 if invalid EEPROM on daughterboard - */ - int daughterboard_id (int which_dboard) const; - - /*! - * \brief Write auxiliary digital to analog converter. - * - * \param which_dboard [0,1] which d'board - * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. - * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. - * \param which_dac [2,3] TX slots must use only 2 and 3. - * \param value [0,4095] - * \returns true iff successful - */ - bool write_aux_dac (int which_board, int which_dac, int value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param which_dboard [0,1] which d'board - * \param which_adc [0,1] - * \returns value in the range [0,4095] if successful, else READ_FAILED. - */ - int read_aux_adc (int which_dboard, int which_adc); - - /*! - * \brief Write EEPROM on motherboard or any daughterboard. - * \param i2c_addr I2C bus address of EEPROM - * \param eeprom_offset byte offset in EEPROM to begin writing - * \param buf the data to write - * \returns true iff sucessful - */ - bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); - - /*! - * \brief Write EEPROM on motherboard or any daughterboard. - * \param i2c_addr I2C bus address of EEPROM - * \param eeprom_offset byte offset in EEPROM to begin reading - * \param len number of bytes to read - * \returns the data read if successful, else a zero length string. - */ - std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); - - /*! - * \brief Write to I2C peripheral - * \param i2c_addr I2C bus address (7-bits) - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of of 64 bytes. - */ - bool write_i2c (int i2c_addr, const std::string buf); - - /*! - * \brief Read from I2C peripheral - * \param i2c_addr I2C bus address (7-bits) - * \param len number of bytes to read - * \returns the data read if successful, else a zero length string. - * Reads are limited to a maximum of of 64 bytes. - */ - std::string read_i2c (int i2c_addr, int len); - - /*! - * \brief Set ADC offset correction - * \param which which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... - * \param offset 16-bit value to subtract from raw ADC input. - */ - bool set_adc_offset (int which, int offset); - - /*! - * \brief Set DAC offset correction - * \param which which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... - * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). - * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; - * If 1 offset applied to +ve differential pin. - */ - bool set_dac_offset (int which, int offset, int offset_pin); - - /*! - * \brief Control ADC input buffer - * \param which which ADC[0,3] - * \param bypass if non-zero, bypass input buffer and connect input - * directly to switched cap SHA input of RxPGA. - */ - bool set_adc_buffer_bypass (int which, bool bypass); - - /*! - * \brief return the usrp's serial number. - * - * \returns non-zero length string iff successful. - */ - std::string serial_number(); - - /*! - * \brief Write direction register (output enables) for pins that go to daughterboard. - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - * - * Each d'board has 16-bits of general purpose i/o. - * Setting the bit makes it an output from the FPGA to the d'board. - * - * This register is initialized based on a value stored in the - * d'board EEPROM. In general, you shouldn't be using this routine - * without a very good reason. Using this method incorrectly will - * kill your USRP motherboard and/or daughterboard. - */ - bool _write_oe (int which_dboard, int value, int mask); - - /*! - * \brief Write daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - */ - bool write_io (int which_dboard, int value, int mask); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \returns register value if successful, else READ_FAILED - */ - int read_io (int which_dboard); - - /*! - * \brief Enable/disable automatic DC offset removal control loop in FPGA - * - * \param bits which control loops to enable - * \param mask which \p bits to pay attention to - * - * If the corresponding bit is set, enable the automatic DC - * offset correction control loop. - * - *
-   * The 4 low bits are significant:
-   *
-   *   ADC0 = (1 << 0)
-   *   ADC1 = (1 << 1)
-   *   ADC2 = (1 << 2)
-   *   ADC3 = (1 << 3)
-   * 
- * - * By default the control loop is enabled on all ADC's. - */ - bool set_dc_offset_cl_enable(int bits, int mask); - - /*! - * \brief Specify Rx data format. - * - * \param format format specifier - * - * Rx data format control register - * - * 3 2 1 - * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 - * +-----------------------------------------+-+-+---------+-------+ - * | Reserved (Must be zero) |B|Q| WIDTH | SHIFT | - * +-----------------------------------------+-+-+---------+-------+ - * - * SHIFT specifies arithmetic right shift [0, 15] - * WIDTH specifies bit-width of I & Q samples across the USB [1, 16] (not all valid) - * Q if set deliver both I & Q, else just I - * B if set bypass half-band filter. - * - * Right now the acceptable values are: - * - * B Q WIDTH SHIFT - * 0 1 16 0 - * 0 1 8 8 - * - * More valid combos to come. - * - * Default value is 0x00000300 16-bits, 0 shift, deliver both I & Q. - */ - bool set_format(unsigned int format); - - /*! - * \brief return current format - */ - unsigned int format () const; - - static unsigned int make_format(int width=16, int shift=0, - bool want_q=true, bool bypass_halfband=false); - static int format_width(unsigned int format); - static int format_shift(unsigned int format); - static bool format_want_q(unsigned int format); - static bool format_bypass_halfband(unsigned int format); - - // ---------------------------------------------------------------- - // internal routines... - // You probably shouldn't be using these... - // ---------------------------------------------------------------- - - /*! - * \brief Write FPGA register. - * \param regno 7-bit register number - * \param value 32-bit value - * \returns true iff successful - */ - bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value - - /*! - * \brief Write FPGA register masked. - * \param regno 7-bit register number - * \param value 16-bit value - * \param mask 16-bit mask - * \returns true iff successful - */ - bool _write_fpga_reg_masked (int regno, int value, int mask); //< 7-bit regno, 16-bit value, 16-bit mask - - /*! - * \brief Read FPGA register. - * \param regno 7-bit register number - * \returns register value if successful, else READ_FAILED - */ - int _read_fpga_reg (int regno); - - /*! - * \brief Write AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \param value 8-bit value - * \returns true iff successful - */ - bool _write_9862 (int which_codec, int regno, unsigned char value); - - /*! - * \brief Read AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \returns register value if successful, else READ_FAILED - */ - int _read_9862 (int which_codec, int regno) const; - - /*! - * \brief Write data to SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripherals to write. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they are - * written to the peripheral immediately prior to writing \p buf. - */ - bool _write_spi (int optional_header, int enables, int format, std::string buf); - - /* - * \brief Read data from SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripheral to read. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param len number of bytes to read. Must be in [0,64]. - * \returns the data read if sucessful, else a zero length string. - * - * Reads are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they - * are written to the peripheral first. Then \p len bytes are read from - * the peripheral and returned. - */ - std::string _read_spi (int optional_header, int enables, int format, int len); -}; - -#endif /* INCLUDED_USRP1_SOURCE_BASE_H */ diff --git a/gr-usrp/src/usrp1_source_c.cc b/gr-usrp/src/usrp1_source_c.cc deleted file mode 100644 index a5b82ab7..00000000 --- a/gr-usrp/src/usrp1_source_c.cc +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const int NBASIC_SAMPLES_PER_ITEM = 2; // I & Q - -usrp1_source_c_sptr -usrp1_make_source_c (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) -{ - return usrp1_source_c_sptr (new usrp1_source_c (which_board, - decim_rate, - nchan, - mux, - mode, - fusb_block_size, - fusb_nblocks, - fpga_filename, - firmware_filename - )); -} - - -usrp1_source_c::usrp1_source_c (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) - : usrp1_source_base ("usrp1_source_c", - gr_make_io_signature (1, 1, sizeof (gr_complex)), - which_board, decim_rate, nchan, mux, mode, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename) -{ -} - -usrp1_source_c::~usrp1_source_c () -{ - // NOP -} - -int -usrp1_source_c::ninput_bytes_reqd_for_noutput_items (int noutput_items) -{ - return noutput_items * NBASIC_SAMPLES_PER_ITEM * sizeof_basic_sample(); -} - -/* - * Convert interleaved 8 or 16-bit I & Q from usrp buffer into a single - * complex output stream. - */ -void -usrp1_source_c::copy_from_usrp_buffer (gr_vector_void_star &output_items, - int output_index, - int output_items_available, - int &output_items_produced, - const void *usrp_buffer, - int usrp_buffer_length, - int &bytes_read) -{ - gr_complex *out = &((gr_complex *) output_items[0])[output_index]; - unsigned sbs = sizeof_basic_sample(); - unsigned nusrp_bytes_per_item = NBASIC_SAMPLES_PER_ITEM * sbs; - - int nitems = std::min (output_items_available, - (int)(usrp_buffer_length / nusrp_bytes_per_item)); - - signed char *s8 = (signed char *) usrp_buffer; - short *s16 = (short *) usrp_buffer; - - switch (sbs){ - case 1: - for (int i = 0; i < nitems; i++){ - out[i] = gr_complex ((float)(s8[2*i+0] << 8), (float)(s8[2*i+1] << 8)); - } - break; - - case 2: - for (int i = 0; i < nitems; i++){ - out[i] = gr_complex ((float) usrp_to_host_short(s16[2*i+0]), - (float) usrp_to_host_short(s16[2*i+1])); - } - break; - - default: - assert(0); - } - - output_items_produced = nitems; - bytes_read = nitems * nusrp_bytes_per_item; -} diff --git a/gr-usrp/src/usrp1_source_c.h b/gr-usrp/src/usrp1_source_c.h deleted file mode 100644 index 0d6e50e0..00000000 --- a/gr-usrp/src/usrp1_source_c.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_USRP1_SOURCE_C_H -#define INCLUDED_USRP1_SOURCE_C_H - -#include -#include - -class usrp_standard_rx; - - -class usrp1_source_c; -typedef boost::shared_ptr usrp1_source_c_sptr; - - -// public shared_ptr constructor - -usrp1_source_c_sptr -usrp1_make_source_c (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - -/*! - * \brief interface to Universal Software Radio Peripheral Rx path (Rev 1) - */ -class usrp1_source_c : public usrp1_source_base { - private: - friend usrp1_source_c_sptr - usrp1_make_source_c (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - protected: - usrp1_source_c (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items); - - virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, - int output_index, - int output_items_available, - int &output_items_produced, - const void *usrp_buffer, - int usrp_buffer_length, - int &bytes_read); - - public: - ~usrp1_source_c (); -}; - -#endif /* INCLUDED_USRP1_SOURCE_C_H */ diff --git a/gr-usrp/src/usrp1_source_s.cc b/gr-usrp/src/usrp1_source_s.cc deleted file mode 100644 index 8295d929..00000000 --- a/gr-usrp/src/usrp1_source_s.cc +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2004,2006 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const int NBASIC_SAMPLES_PER_ITEM = 1; - -usrp1_source_s_sptr -usrp1_make_source_s (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) -{ - return usrp1_source_s_sptr (new usrp1_source_s (which_board, - decim_rate, - nchan, - mux, - mode, - fusb_block_size, - fusb_nblocks, - fpga_filename, - firmware_filename - )); -} - - -usrp1_source_s::usrp1_source_s (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error) - : usrp1_source_base ("usrp1_source_s", - gr_make_io_signature (1, 1, sizeof (short)), - which_board, decim_rate, nchan, mux, mode, - fusb_block_size, - fusb_nblocks, - fpga_filename, firmware_filename) -{ -} - -usrp1_source_s::~usrp1_source_s () -{ - // NOP -} - -int -usrp1_source_s::ninput_bytes_reqd_for_noutput_items (int noutput_items) -{ - return noutput_items * NBASIC_SAMPLES_PER_ITEM * sizeof_basic_sample(); -} - -/* - * Convert interleaved 8 or 16-bit I & Q from usrp buffer into a single - * short output stream. - */ -void -usrp1_source_s::copy_from_usrp_buffer (gr_vector_void_star &output_items, - int output_index, - int output_items_available, - int &output_items_produced, - const void *usrp_buffer, - int usrp_buffer_length, - int &bytes_read) -{ - short *out = &((short *) output_items[0])[output_index]; - unsigned sbs = sizeof_basic_sample(); - unsigned nusrp_bytes_per_item = NBASIC_SAMPLES_PER_ITEM * sbs; - - int nitems = std::min (output_items_available, - (int)(usrp_buffer_length / nusrp_bytes_per_item)); - - signed char *s8 = (signed char *) usrp_buffer; - short *s16 = (short *) usrp_buffer; - - switch(sbs){ - case 1: - for (int i = 0; i < nitems; i++){ - out[i] = s8[i] << 8; - } - break; - - case 2: - for (int i = 0; i < nitems; i++){ - out[i] = usrp_to_host_short(s16[i]); - } - break; - - default: - assert(0); - } - - output_items_produced = nitems; - bytes_read = nitems * nusrp_bytes_per_item; -} diff --git a/gr-usrp/src/usrp1_source_s.h b/gr-usrp/src/usrp1_source_s.h deleted file mode 100644 index 35beb42a..00000000 --- a/gr-usrp/src/usrp1_source_s.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_USRP1_SOURCE_S_H -#define INCLUDED_USRP1_SOURCE_S_H - -#include -#include - -class usrp_standard_rx; - - -class usrp1_source_s; -typedef boost::shared_ptr usrp1_source_s_sptr; - - -// public shared_ptr constructor - -usrp1_source_s_sptr -usrp1_make_source_s (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - -/*! - * \brief interface to Universal Software Radio Peripheral Rx path (Rev 1) - * - * output: 1 stream of short - */ -class usrp1_source_s : public usrp1_source_base { - private: - friend usrp1_source_s_sptr - usrp1_make_source_s (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - protected: - usrp1_source_s (int which_board, - unsigned int decim_rate, - int nchan, - int mux, - int mode, - int fusb_block_size, - int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) throw (std::runtime_error); - - virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items); - - virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, - int output_index, - int output_items_available, - int &output_items_produced, - const void *usrp_buffer, - int usrp_buffer_length, - int &bytes_read); - public: - ~usrp1_source_s (); -}; - -#endif /* INCLUDED_USRP1_SOURCE_S_H */ diff --git a/gr-usrp/src/usrp_base.cc b/gr-usrp/src/usrp_base.cc new file mode 100644 index 00000000..a4cf64ed --- /dev/null +++ b/gr-usrp/src/usrp_base.cc @@ -0,0 +1,322 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + +class truth_table_element_t +{ +public: + truth_table_element_t(int side, unsigned int uses, bool swap_iq, unsigned int mux_val); + bool operator==(const truth_table_element_t &in); + bool operator!=(const truth_table_element_t &in); + + unsigned int mux_val() { return d_mux_val; } + +private: + int d_side; + unsigned int d_uses; + bool d_swap_iq; + unsigned int d_mux_val; +}; + + +usrp_base::~usrp_base() +{ +} + +void +usrp_base::set_usrp_basic(boost::shared_ptr u) +{ + d_usrp_basic = u; +} + +std::vector > +usrp_base::db() +{ + return d_usrp_basic->db(); +} + +std::vector +usrp_base::db(int which_side) +{ + return d_usrp_basic->db(which_side); +} + +db_base_sptr +usrp_base::db(int which_side, int which_dev) +{ + return d_usrp_basic->selected_subdev(usrp_subdev_spec(which_side, which_dev)); +} + +db_base_sptr +usrp_base::selected_subdev(usrp_subdev_spec ss) +{ + return d_usrp_basic->selected_subdev(ss); +} + +long +usrp_base::fpga_master_clock_freq() const +{ + return d_usrp_basic->fpga_master_clock_freq(); +} + +void +usrp_base::set_fpga_master_clock_freq(long master_clock) +{ + d_usrp_basic->set_fpga_master_clock_freq(master_clock); +} + +void +usrp_base::set_verbose (bool verbose) +{ + d_usrp_basic->set_verbose (verbose); +} + +bool +usrp_base::write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf) +{ + return d_usrp_basic->write_eeprom (i2c_addr, eeprom_offset, buf); +} + +std::string +usrp_base::read_eeprom (int i2c_addr, int eeprom_offset, int len) +{ + return d_usrp_basic->read_eeprom (i2c_addr, eeprom_offset, len); +} + +bool +usrp_base::write_i2c (int i2c_addr, const std::string buf) +{ + return d_usrp_basic->write_i2c (i2c_addr, buf); +} + +std::string +usrp_base::read_i2c (int i2c_addr, int len) +{ + return d_usrp_basic->read_i2c (i2c_addr, len); +} + +bool +usrp_base::set_adc_offset (int which, int offset) +{ + return d_usrp_basic->set_adc_offset (which, offset); +} + +bool +usrp_base::set_dac_offset (int which, int offset, int offset_pin) +{ + return d_usrp_basic->set_dac_offset (which, offset, offset_pin); +} + +bool +usrp_base::set_adc_buffer_bypass (int which, bool bypass) +{ + return d_usrp_basic->set_adc_buffer_bypass (which, bypass); +} + +bool +usrp_base::set_dc_offset_cl_enable(int bits, int mask) +{ + return d_usrp_basic->set_dc_offset_cl_enable(bits, mask); +} + +std::string +usrp_base::serial_number() +{ + return d_usrp_basic->serial_number(); +} + +int +usrp_base::daughterboard_id (int which) const +{ + return d_usrp_basic->daughterboard_id (which); +} + +bool +usrp_base::write_atr_tx_delay(int value) +{ + return d_usrp_basic->write_atr_tx_delay(value); +} + +bool +usrp_base::write_atr_rx_delay(int value) +{ + return d_usrp_basic->write_atr_rx_delay(value); +} + +bool +usrp_base::set_pga (int which, double gain) +{ + return d_usrp_basic->set_pga (which, gain); +} + +double +usrp_base::pga (int which) const +{ + return d_usrp_basic->pga (which); +} + +double +usrp_base::pga_min () const +{ + return d_usrp_basic->pga_min (); +} + +double +usrp_base::pga_max () const +{ + return d_usrp_basic->pga_max (); +} + +double +usrp_base::pga_db_per_step () const +{ + return d_usrp_basic->pga_db_per_step (); +} + +bool +usrp_base::_write_oe (int which_dboard, int value, int mask) +{ + return d_usrp_basic->_write_oe (which_dboard, value, mask); +} + +bool +usrp_base::write_io (int which_dboard, int value, int mask) +{ + return d_usrp_basic->write_io (which_dboard, value, mask); +} + +int +usrp_base::read_io (int which_dboard) +{ + return d_usrp_basic->read_io (which_dboard); +} + +bool +usrp_base::write_atr_mask(int which_side, int value) +{ + return d_usrp_basic->write_atr_mask(which_side, value); +} + +bool +usrp_base::write_atr_txval(int which_side, int value) +{ + return d_usrp_basic->write_atr_txval(which_side, value); +} + +bool +usrp_base::write_atr_rxval(int which_side, int value) +{ + return d_usrp_basic->write_atr_rxval(which_side, value); +} + +bool +usrp_base::write_aux_dac (int which_dboard, int which_dac, int value) +{ + return d_usrp_basic->write_aux_dac (which_dboard, which_dac, value); +} + +int +usrp_base::read_aux_adc (int which_dboard, int which_adc) +{ + return d_usrp_basic->read_aux_adc (which_dboard, which_adc); +} + +long +usrp_base::converter_rate() const +{ + return d_usrp_basic->converter_rate(); +} + +bool +usrp_base::_set_led(int which_led, bool on) +{ + return d_usrp_basic->_set_led(which_led, on); +} + +bool +usrp_base::_write_fpga_reg (int regno, int value) +{ + return d_usrp_basic->_write_fpga_reg (regno, value); +} + +bool +usrp_base::_write_fpga_reg_masked (int regno, int value, int mask) +{ + return d_usrp_basic->_write_fpga_reg_masked (regno, value, mask); +} + +int +usrp_base::_read_fpga_reg (int regno) +{ + return d_usrp_basic->_read_fpga_reg (regno); +} + +bool +usrp_base::_write_9862 (int which_codec, int regno, unsigned char value) +{ + return d_usrp_basic->_write_9862 (which_codec, regno, value); +} + +int +usrp_base::_read_9862 (int which_codec, int regno) const +{ + return d_usrp_basic->_read_9862 (which_codec, regno); +} + +bool +usrp_base::_write_spi (int optional_header, int enables, + int format, std::string buf) +{ + return d_usrp_basic->_write_spi (optional_header, enables, format, buf); +} + +std::string +usrp_base::_read_spi (int optional_header, int enables, int format, int len) +{ + return d_usrp_basic->_read_spi (optional_header, enables, format, len); +} + +usrp_subdev_spec +usrp_base::pick_subdev(std::vector candidates) +{ + int dbid0 = db(0, 0)->dbid(); + int dbid1 = db(1, 0)->dbid(); + + for (int i = 0; i < candidates.size(); i++) { + int dbid = candidates[i]; + if (dbid0 == dbid) + return usrp_subdev_spec(0, 0); + if (dbid1 == dbid) + return usrp_subdev_spec(1, 0); + } + + if (dbid0 >= 0) + return usrp_subdev_spec(0, 0); + if (dbid1 >= 0) + return usrp_subdev_spec(1, 0); + + throw std::runtime_error("No suitable daughterboard found!"); +} diff --git a/gr-usrp/src/usrp_base.h b/gr-usrp/src/usrp_base.h new file mode 100644 index 00000000..a914159e --- /dev/null +++ b/gr-usrp/src/usrp_base.h @@ -0,0 +1,452 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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 INCLUDED_USRP_BASE_H +#define INCLUDED_USRP_BASE_H + +#include +#include +#include +#include +#include + +class usrp_basic; + +/*! + * \brief base class for GNU Radio interface to the USRP + */ +class usrp_base : public gr_sync_block { +private: + boost::shared_ptr d_usrp_basic; + +protected: + usrp_base(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature) + : gr_sync_block(name, input_signature, output_signature) {} + + + void set_usrp_basic(boost::shared_ptr u); + +public: + virtual ~usrp_base(); + + /* ! + * Return a vector of vectors of daughterboard instances associated with + * the USRP source or sink. The first dimension of the returned vector + * corresponds to the side of the USRP, the second dimension, the subdevice + * on the particular daughterboard. + * + * N.B. To ensure proper lifetime management, the caller should + * continue to hold these as weak pointers, not shared pointers. + * As long as the caller does not attempt to directly use the weak + * pointers after this usrp object has been destroyed, everything + * will work out fine. + */ + std::vector > db(); + + /*! + * Return a vector of size 1 or 2 that contains shared pointers + * to the daughterboard instance(s) associated with the specified side. + * + * \param which_side [0,1] which daughterboard + * + * N.B. To ensure proper lifetime management, the caller should + * continue to hold these as weak pointers, not shared pointers. + * As long as the caller does not attempt to directly use the weak + * pointers after this usrp object has been destroyed, everything + * will work out fine. + */ + std::vector db(int which_side); + + /*! + * Return the daughterboard instance corresponding to the selected + * side of the USRP and selected daughterboard subdevice. + * N.B. To ensure proper lifetime management, the caller should + * continue to hold these as weak pointers, not shared pointers. + * As long as the caller does not attempt to directly use the weak + * pointers after this usrp object has been destroyed, everything + * will work out fine. + */ + db_base_sptr db(int which_side, int which_dev); + + /*! + * \brief given a usrp_subdev_spec, return the corresponding daughterboard object. + * \throws std::invalid_argument if ss is invalid. + * + * \param ss specifies the side and subdevice + */ + db_base_sptr selected_subdev(usrp_subdev_spec ss); + + /*! + * \brief return frequency of master oscillator on USRP + */ + long fpga_master_clock_freq() const; + + /*! + * Tell API that the master oscillator on the USRP is operating at a non-standard + * fixed frequency. This is only needed for custom USRP hardware modified to + * operate at a different frequency from the default factory configuration. This + * function must be called prior to any other API function. + * \param master_clock USRP2 FPGA master clock frequency in Hz (10..64 MHz) + */ + void set_fpga_master_clock_freq (long master_clock); + + void set_verbose (bool on); + + //! magic value used on alternate register read interfaces + static const int READ_FAILED = -99999; + + /*! + * \brief Write EEPROM on motherboard or any daughterboard. + * \param i2c_addr I2C bus address of EEPROM + * \param eeprom_offset byte offset in EEPROM to begin writing + * \param buf the data to write + * \returns true iff sucessful + */ + bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); + + /*! + * \brief Read EEPROM on motherboard or any daughterboard. + * \param i2c_addr I2C bus address of EEPROM + * \param eeprom_offset byte offset in EEPROM to begin reading + * \param len number of bytes to read + * \returns the data read if successful, else a zero length string. + */ + std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); + + /*! + * \brief Write to I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param buf the data to write + * \returns true iff successful + * Writes are limited to a maximum of of 64 bytes. + */ + bool write_i2c (int i2c_addr, const std::string buf); + + /*! + * \brief Read from I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param len number of bytes to read + * \returns the data read if successful, else a zero length string. + * Reads are limited to a maximum of 64 bytes. + */ + std::string read_i2c (int i2c_addr, int len); + + /*! + * \brief Set ADC offset correction + * \param which_adc which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... + * \param offset 16-bit value to subtract from raw ADC input. + */ + bool set_adc_offset (int which_adc, int offset); + + /*! + * \brief Set DAC offset correction + * \param which_dac which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... + * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). + * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; + * If 1 offset applied to +ve differential pin. + */ + bool set_dac_offset (int which_dac, int offset, int offset_pin); + + /*! + * \brief Control ADC input buffer + * \param which_adc which ADC[0,3] + * \param bypass if non-zero, bypass input buffer and connect input + * directly to switched cap SHA input of RxPGA. + */ + bool set_adc_buffer_bypass (int which_adc, bool bypass); + + /*! + * \brief Enable/disable automatic DC offset removal control loop in FPGA + * + * \param bits which control loops to enable + * \param mask which \p bits to pay attention to + * + * If the corresponding bit is set, enable the automatic DC + * offset correction control loop. + * + *
+   * The 4 low bits are significant:
+   *
+   *   ADC0 = (1 << 0)
+   *   ADC1 = (1 << 1)
+   *   ADC2 = (1 << 2)
+   *   ADC3 = (1 << 3)
+   * 
+ * + * By default the control loop is enabled on all ADC's. + */ + bool set_dc_offset_cl_enable(int bits, int mask); + + /*! + * \brief return the usrp's serial number. + * + * \returns non-zero length string iff successful. + */ + std::string serial_number(); + + /*! + * \brief Return daughterboard ID for given side [0,1]. + * + * \param which_side [0,1] which daughterboard + * + * \return daughterboard id >= 0 if successful + * \return -1 if no daugherboard + * \return -2 if invalid EEPROM on daughterboard + */ + virtual int daughterboard_id (int which_side) const; + + /*! + * \brief Clock ticks to delay rising of T/R signal + * \sa write_atr_mask, write_atr_txval, write_atr_rxval + */ + bool write_atr_tx_delay(int value); + + /*! + * \brief Clock ticks to delay falling edge of T/R signal + * \sa write_atr_mask, write_atr_txval, write_atr_rxval + */ + bool write_atr_rx_delay(int value); + + /*! + * \brief Set Programmable Gain Amplifier (PGA) + * + * \param which_amp which amp [0,3] + * \param gain_in_db gain value (linear in dB) + * + * gain is rounded to closest setting supported by hardware. + * + * \returns true iff sucessful. + * + * \sa pga_min(), pga_max(), pga_db_per_step() + */ + bool set_pga (int which_amp, double gain_in_db); + + /*! + * \brief Return programmable gain amplifier gain setting in dB. + * + * \param which_amp which amp [0,3] + */ + double pga (int which_amp) const; + + /*! + * \brief Return minimum legal PGA gain in dB. + */ + double pga_min () const; + + /*! + * \brief Return maximum legal PGA gain in dB. + */ + double pga_max () const; + + /*! + * \brief Return hardware step size of PGA (linear in dB). + */ + double pga_db_per_step () const; + + /*! + * \brief Write direction register (output enables) for pins that go to daughterboard. + * + * \param which_side [0,1] which size + * \param value value to write into register + * \param mask which bits of value to write into reg + * + * Each d'board has 16-bits of general purpose i/o. + * Setting the bit makes it an output from the FPGA to the d'board. + * + * This register is initialized based on a value stored in the + * d'board EEPROM. In general, you shouldn't be using this routine + * without a very good reason. Using this method incorrectly will + * kill your USRP motherboard and/or daughterboard. + */ + bool _write_oe (int which_side, int value, int mask); + + /*! + * \brief Write daughterboard i/o pin value + * + * \param which_side [0,1] which d'board + * \param value value to write into register + * \param mask which bits of value to write into reg + */ + bool write_io (int which_side, int value, int mask); + + /*! + * \brief Read daughterboard i/o pin value + * + * \param which_side [0,1] which d'board + * \returns register value if successful, else READ_FAILED + */ + int read_io (int which_side); + + /*! + * \brief Write daughterboard refclk config register + * + * \param which_side [0,1] which d'board + * \param value value to write into register, see below + * + *
+   * Control whether a reference clock is sent to the daughterboards,
+   * and what frequency.  The refclk is sent on d'board i/o pin 0.
+   * 
+   *     3                   2                   1                       
+   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   *  +-----------------------------------------------+-+------------+
+   *  |             Reserved (Must be zero)           |E|   DIVISOR  |
+   *  +-----------------------------------------------+-+------------+
+   * 
+   *  Bit 7  -- 1 turns on refclk, 0 allows IO use
+   *  Bits 6:0 Divider value
+   * 
+ */ + bool write_refclk(int which_side, int value); + + bool write_atr_mask(int which_side, int value); + bool write_atr_txval(int which_side, int value); + bool write_atr_rxval(int which_side, int value); + + /*! + * \brief Write auxiliary digital to analog converter. + * + * \param which_side [0,1] which d'board + * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. + * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. + * \param which_dac [2,3] TX slots must use only 2 and 3. + * \param value [0,4095] + * \returns true iff successful + */ + bool write_aux_dac (int which_side, int which_dac, int value); + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param which_side [0,1] which d'board + * \param which_adc [0,1] + * \returns value in the range [0,4095] if successful, else READ_FAILED. + */ + int read_aux_adc (int which_side, int which_adc); + + /*! + * \brief returns A/D or D/A converter rate in Hz + */ + long converter_rate() const; + + + // ---------------------------------------------------------------- + // Low level implementation routines. + // You probably shouldn't be using these... + // + + bool _set_led (int which_led, bool on); + + /*! + * \brief Write FPGA register. + * \param regno 7-bit register number + * \param value 32-bit value + * \returns true iff successful + */ + bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value + + /*! + * \brief Read FPGA register. + * \param regno 7-bit register number + * \param value 32-bit value + * \returns true iff successful + */ + bool _read_fpga_reg (int regno, int *value); //< 7-bit regno, 32-bit value + + /*! + * \brief Read FPGA register. + * \param regno 7-bit register number + * \returns register value if successful, else READ_FAILED + */ + int _read_fpga_reg (int regno); + + /*! + * \brief Write FPGA register with mask. + * \param regno 7-bit register number + * \param value 16-bit value + * \param mask 16-bit value + * \returns true if successful + * Only use this for registers who actually implement a mask in the verilog firmware, like FR_RX_MASTER_SLAVE + */ + bool _write_fpga_reg_masked (int regno, int value, int mask); + + /*! + * \brief Write AD9862 register. + * \param which_codec 0 or 1 + * \param regno 6-bit register number + * \param value 8-bit value + * \returns true iff successful + */ + bool _write_9862 (int which_codec, int regno, unsigned char value); + + /*! + * \brief Read AD9862 register. + * \param which_codec 0 or 1 + * \param regno 6-bit register number + * \returns register value if successful, else READ_FAILED + */ + int _read_9862 (int which_codec, int regno) const; + + /*! + * \brief Write data to SPI bus peripheral. + * + * \param optional_header 0,1 or 2 bytes to write before buf. + * \param enables bitmask of peripherals to write. See usrp_spi_defs.h + * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* + * \param buf the data to write + * \returns true iff successful + * Writes are limited to a maximum of 64 bytes. + * + * If \p format specifies that optional_header bytes are present, they are + * written to the peripheral immediately prior to writing \p buf. + */ + bool _write_spi (int optional_header, int enables, int format, std::string buf); + + /* + * \brief Read data from SPI bus peripheral. + * + * \param optional_header 0,1 or 2 bytes to write before buf. + * \param enables bitmask of peripheral to read. See usrp_spi_defs.h + * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* + * \param len number of bytes to read. Must be in [0,64]. + * \returns the data read if sucessful, else a zero length string. + * + * Reads are limited to a maximum of 64 bytes. + * + * If \p format specifies that optional_header bytes are present, they + * are written to the peripheral first. Then \p len bytes are read from + * the peripheral and returned. + */ + std::string _read_spi (int optional_header, int enables, int format, int len); + + /*! + * Return an existing daughterboard from list of candidate dbids, or the first found + * on side A or side B. + * + * \param candidates Vector of candidate dbids + * + * Throws std::runtime_error if not found + */ + usrp_subdev_spec pick_subdev(std::vector candidates=std::vector(0)); +}; + +#endif /* INCLUDED_USRP_BASE_H */ diff --git a/gr-usrp/src/usrp_base.i b/gr-usrp/src/usrp_base.i new file mode 100644 index 00000000..d0ece1fb --- /dev/null +++ b/gr-usrp/src/usrp_base.i @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_base.h" +%} + +class usrp_base : public gr_sync_block +{ +protected: + usrp_base(const std::string &name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature) + : gr_sync_block(name, input_signature, output_signature) {} + +public: + std::vector > db(); + std::vector db(int which_side); + db_base_sptr db(int which_side, int which_dev); + %rename (_real_selected_subdev) selected_subdev; + db_base_sptr selected_subdev(usrp_subdev_spec ss); + long fpga_master_clock_freq() const; + void set_fpga_master_clock_freq(long master_clock); + void set_verbose (bool on); + static const int READ_FAILED = -99999; + bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); + std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); + bool write_i2c (int i2c_addr, const std::string buf); + std::string read_i2c (int i2c_addr, int len); + bool set_adc_offset (int which_adc, int offset); + bool set_dac_offset (int which_dac, int offset, int offset_pin); + bool set_adc_buffer_bypass (int which_adc, bool bypass); + bool set_dc_offset_cl_enable(int bits, int mask); + std::string serial_number(); + virtual int daughterboard_id (int which_side) const; + bool write_atr_tx_delay(int value); + bool write_atr_rx_delay(int value); + bool set_pga (int which_amp, double gain_in_db); + double pga (int which_amp) const; + double pga_min () const; + double pga_max () const; + double pga_db_per_step () const; + bool _write_oe (int which_side, int value, int mask); + bool write_io (int which_side, int value, int mask); + int read_io (int which_side); + //bool write_refclk(int which_side, int value); + bool write_atr_mask(int which_side, int value); + bool write_atr_txval(int which_side, int value); + bool write_atr_rxval(int which_side, int value); + bool write_aux_dac (int which_side, int which_dac, int value); + int read_aux_adc (int which_side, int which_adc); + long converter_rate() const; + bool _set_led (int which_led, bool on); + bool _write_fpga_reg (int regno, int value); + //bool _read_fpga_reg (int regno, int *value); + int _read_fpga_reg (int regno); + bool _write_fpga_reg_masked (int regno, int value, int mask); + bool _write_9862 (int which_codec, int regno, unsigned char value); + int _read_9862 (int which_codec, int regno) const; + bool _write_spi (int optional_header, int enables, int format, std::string buf); + std::string _read_spi (int optional_header, int enables, int format, int len); + %rename(_real_pick_subdev) pick_subdev; + usrp_subdev_spec pick_subdev(std::vector candidates=std::vector(0)) + throw (std::runtime_error); +}; diff --git a/gr-usrp/src/usrp_multi.py b/gr-usrp/src/usrp_multi.py deleted file mode 100644 index 9488e424..00000000 --- a/gr-usrp/src/usrp_multi.py +++ /dev/null @@ -1,233 +0,0 @@ -# -# Copyright 2005 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. -# - -import math -from gnuradio import gr, gru -from gnuradio.gr import hier_block_base -from gnuradio import usrp -from gnuradio import usrp1 # usrp Rev 1 and later -from gnuradio import blks -import usrp_prims -import sys - - -class multi_source_align(object): - def __init__(self, fg, master_serialno,decim,nchan=2,pga_gain=0.0,cordic_freq=0.0,mux=None,align_interval=-1): - """ - Align multiple sources (usrps) using samplenumbers in the first channel. - - Takes two ore more sources producing interleaved shorts. - produces nchan * nsources gr_complex output streams. - - @param nchan: number of interleaved channels in source - @param align_interval: number of samples to minimally skip between alignments - default = -1 which means align only once per work call. - @param master_serial_no: serial number of the source which must be the master. - - - Exported sub-blocks (attributes): - master_source - slave_source - usrp_master - usrp_slave - """ - mode=usrp.FPGA_MODE_NORMAL - mode = mode | usrp_prims.bmFR_MODE_RX_COUNTING_32BIT #(1 << 2) #usrp1.FPGA_MODE_COUNTING_32BIT - align=gr.align_on_samplenumbers_ss (nchan,align_interval) - self.usrp_master = None - self.usrp_slave = None - # um is master usrp - # us is slave usrp - if mux is None: - mux=self.get_default_mux() #Note that all channels have shifted left because of the added 32 bit counter channel - - u1 = usrp.source_s (1, decim, nchan, gru.hexint(mux), mode,fpga_filename="multi_2rxhb_2tx.rbf" ) - u0 = usrp.source_s (0, decim, nchan, gru.hexint(mux), mode,fpga_filename="multi_2rxhb_2tx.rbf" ) - print 'usrp[0] serial',u0.serial_number() - print 'usrp[1] serial',u1.serial_number() - #default, choose the second found usrp as master (which is usually the usrp which was first plugged in) - um_index=1 - um=u1 - us_index=0 - us=u0 - if (not (master_serialno is None)): #((master_serialno>0) | (master_serialno <-2)): - if (u0.serial_number() == master_serialno): - um_index=0 - um=u0 - us_index=1 - us=u1 - elif (u1.serial_number() != master_serialno): - errorstring = 'Error. requested master_serialno ' + master_serialno +' not found\n' - errorstring = errorstring + 'Available are:\n' - errorstring = errorstring + 'usrp[1] serial_no = ' + u1.serial_number() +'\n' - errorstring = errorstring + 'usrp[0] serial_no = ' + u0.serial_number() +'\n' - print errorstring - raise ValueError, errorstring - else: #default, just choose the first found usrp as master - um_index=0 - um=u0 - us_index=1 - us=u1 - - self.usrp_master=um - self.usrp_slave=us - print 'usrp_master=usrp[%i] serial_no = %s' % (um_index,self.usrp_master.serial_number() ,) - print 'usrp_slave=usrp[%i] serial_no = %s' % (us_index,self.usrp_slave.serial_number() ,) - self.subdev_mAr = usrp.selected_subdev(self.usrp_master, (0,0)) - self.subdev_mBr = usrp.selected_subdev(self.usrp_master, (1,0)) - self.subdev_sAr = usrp.selected_subdev(self.usrp_slave, (0,0)) - self.subdev_sBr = usrp.selected_subdev(self.usrp_slave, (1,0)) - #throttle = gr.throttle(gr.sizeof_gr_complex, input_rate) - if not (pga_gain is None): - um.set_pga (0, pga_gain) - um.set_pga (1, pga_gain) - - us.set_pga (0, pga_gain) - us.set_pga (1, pga_gain) - - self.input_rate = um.adc_freq () / um.decim_rate () - deintm=gr.deinterleave(gr.sizeof_gr_complex) - deints=gr.deinterleave(gr.sizeof_gr_complex) - nullsinkm=gr.null_sink(gr.sizeof_gr_complex) - nullsinks=gr.null_sink(gr.sizeof_gr_complex) - - tocomplexm=gr.interleaved_short_to_complex() - tocomplexs=gr.interleaved_short_to_complex() - - fg.connect(um,(align,0)) - fg.connect(us,(align,1)) - fg.connect((align,0),tocomplexm) - fg.connect((align,1),tocomplexs) - fg.connect(tocomplexm,deintm) - fg.connect(tocomplexs,deints) - fg.connect((deintm,0),nullsinkm) #The counters are not usefull for the user but must be connected to something - fg.connect((deints,0),nullsinks) #The counters are not usefull for the user but must be connected to something - if 4==nchan: - nullsinkm3=gr.null_sink(gr.sizeof_gr_complex) - nullsinks3=gr.null_sink(gr.sizeof_gr_complex) - fg.connect((deintm,3), nullsinkm3) #channel 4 is not used but must be connected - fg.connect((deints,3), nullsinks3) #channel 4 is not used but must be connected - - self.fg=fg - self.master_source=deintm - self.slave_source=deints - - if not (cordic_freq is None): - um.set_rx_freq (1, cordic_freq) - um.set_rx_freq (0, cordic_freq) - us.set_rx_freq (1, cordic_freq) - us.set_rx_freq (0, cordic_freq) - - self.enable_master_and_slave() - # add an idle handler - self.unsynced=True - - # wire the block together - #hier_block_multi_tail.__init__(self, fg, nchan,deintm,deints) - - def get_default_mux(self): - return 0x10321032 # Note that all channels have shifted left because of the added 32 bit counter channel - - def get_master_source_c(self): - return self.master_source - - def get_slave_source_c(self): - return self.slave_source - - def get_master_usrp(self): - return self.usrp_master - - def get_slave_usrp(self): - return self.usrp_slave - - def enable_master_and_slave(self): - # Warning, allways FIRST enable the slave before you enable the master - # This is to be sure you don't have two masters connecting to each other - # Otherwise you could ruin your hardware because the two sync outputs would be connected together - - #SLAVE - #disable master, enable slave and set sync pulse to zero - reg_mask = usrp_prims.bmFR_RX_SYNC_SLAVE | usrp_prims.bmFR_RX_SYNC_MASTER | usrp_prims.bmFR_RX_SYNC - self.usrp_slave._u._write_fpga_reg_masked(usrp_prims.FR_RX_MASTER_SLAVE, usrp_prims.bmFR_RX_SYNC_SLAVE,reg_mask) - #set SYNC slave iopin on daughterboards RXA as input - oe = 0 # set rx_a_io[bitnoFR_RX_SYNC_INPUT_IOPIN] as input - oe_mask = usrp_prims.bmFR_RX_SYNC_INPUT_IOPIN - self.usrp_slave._u._write_oe(0,oe,oe_mask) - #Now it is save to enable the master - - #MASTER - #enable master, disable slave and set sync pulse to zero - reg_mask = usrp_prims.bmFR_RX_SYNC_SLAVE | usrp_prims.bmFR_RX_SYNC_MASTER | usrp_prims.bmFR_RX_SYNC - self.usrp_master._u._write_fpga_reg_masked(usrp_prims.FR_RX_MASTER_SLAVE,usrp_prims.bmFR_RX_SYNC_MASTER,reg_mask) - #set SYNC master iopin on daughterboards RXA as output - oe = usrp_prims.bmFR_RX_SYNC_OUTPUT_IOPIN # set rx_a_io[bitnoFR_RX_SYNC_OUTPUT_IOPIN] as output - oe_mask = usrp_prims.bmFR_RX_SYNC_OUTPUT_IOPIN - self.usrp_master._u._write_oe(0,oe,oe_mask) - - def sync_usrps(self, evt): - self.sync() - - def sync(self): - result=False - result = self.usrp_master._u._write_fpga_reg_masked (usrp_prims.FR_RX_MASTER_SLAVE, usrp_prims.bmFR_RX_SYNC, usrp_prims.bmFR_RX_SYNC ) - #There should be a small delay here, but the time it takes to get the sync to the usrp is long enough - #turn sync pulse off - result = result & self.usrp_master._u._write_fpga_reg_masked (usrp_prims.FR_RX_MASTER_SLAVE,0 ,usrp_prims.bmFR_RX_SYNC); - return result; - - def nullsink_counters(self): - nullsinkm=gr.null_sink(gr.sizeof_gr_complex) - nullsinks=gr.null_sink(gr.sizeof_gr_complex) - self.fg.connect((self.master_source,0),nullsinkm) - self.fg.connect((self.slave_source,0),nullsinks) - - - def print_db_info(self): - print "MASTER RX d'board %s" % (self.subdev_mAr.side_and_name(),) - print "MASTER RX d'board %s" % (self.subdev_mBr.side_and_name(),) - #print "TX d'board %s" % (self.subdev_At.side_and_name(),) - #print "TX d'board %s" % (self.subdev_Bt.side_and_name(),) - print "SLAVE RX d'board %s" % (self.subdev_sAr.side_and_name(),) - print "SLAVE RX d'board %s" % (self.subdev_sBr.side_and_name(),) - #print "TX d'board %s" % (self.subdev_At.side_and_name(),) - #print "TX d'board %s" % (self.subdev_Bt.side_and_name(),) - - def tune_all_rx(self,target_freq): - result = True - r1 = usrp.tune(self.usrp_master, 0, self.subdev_mAr, target_freq) - if r1 is None: - result=False - r2 = usrp.tune(self.usrp_master, 1, self.subdev_mBr, target_freq) - if r2 is None: - result=False - r3 = usrp.tune(self.usrp_slave, 0, self.subdev_sAr, target_freq) - if r3 is None: - result=False - r4 = usrp.tune(self.usrp_slave, 1, self.subdev_sBr, target_freq) - if r4 is None: - result=False - return result,r1,r2,r3,r4 - - def set_gain_all_rx(self, gain): - self.subdev_mAr.set_gain(gain) - self.subdev_mBr.set_gain(gain) - self.subdev_sAr.set_gain(gain) - self.subdev_sBr.set_gain(gain) diff --git a/gr-usrp/src/usrp_sink_base.cc b/gr-usrp/src/usrp_sink_base.cc new file mode 100644 index 00000000..cb65e02c --- /dev/null +++ b/gr-usrp/src/usrp_sink_base.cc @@ -0,0 +1,248 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +static const int OUTPUT_MULTIPLE_SAMPLES = 128; // DON'T CHANGE THIS VALUE! + +usrp_sink_base::usrp_sink_base (const std::string &name, + gr_io_signature_sptr input_signature, + int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) + : usrp_base(name, + input_signature, + gr_make_io_signature (0, 0, 0)), + d_nunderruns (0) +{ + d_usrp = usrp_standard_tx::make (which_board, + interp_rate, + nchan, mux, + fusb_block_size, + fusb_nblocks, + fpga_filename, + firmware_filename + ); + if (d_usrp == 0) + throw std::runtime_error ("can't open usrp"); + + set_usrp_basic(d_usrp); + + // All calls to d_usrp->write must be multiples of 512 bytes. + + set_output_multiple (OUTPUT_MULTIPLE_SAMPLES); +} + +usrp_sink_base::~usrp_sink_base () +{ +} + +int +usrp_sink_base::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + static const int BUFSIZE = 16 * (1L << 10); // 16kB + unsigned char outbuf[BUFSIZE]; + int obi = 0; + int input_index = 0; + int input_items_consumed; + int bytes_written; + bool underrun; + + + while (input_index < noutput_items){ + + copy_to_usrp_buffer (input_items, + input_index, + noutput_items - input_index, // input_items_available + input_items_consumed, // [out] + &outbuf[obi], // [out] usrp_buffer + BUFSIZE - obi, // usrp_buffer_length + bytes_written); // [out] + + assert (input_index + input_items_consumed <= noutput_items); + assert (obi + bytes_written <= BUFSIZE); + + input_index += input_items_consumed; + obi += bytes_written; + + if (obi >= BUFSIZE){ // flush + if (d_usrp->write (outbuf, obi, &underrun) != obi) + return -1; // indicate we're done + + if (underrun){ + d_nunderruns++; + // fprintf (stderr, "usrp_sink: underrun\n"); + fputs ("uU", stderr); + } + obi = 0; + } + } + + if (obi != 0){ + assert (obi % 512 == 0); + if (d_usrp->write (outbuf, obi, &underrun) != obi) + return -1; // indicate we're done + + if (underrun){ + d_nunderruns++; + // fprintf (stderr, "usrp_sink: underrun\n"); + fputs ("uU", stderr); + } + } + + return noutput_items; +} + +bool +usrp_sink_base::set_interp_rate (unsigned int rate) +{ + return d_usrp->set_interp_rate (rate); +} + +bool +usrp_sink_base::set_nchannels (int nchan) +{ + return d_usrp->set_nchannels (nchan); +} + +bool +usrp_sink_base::set_mux (int mux) +{ + return d_usrp->set_mux (mux); +} + +int +usrp_sink_base::determine_tx_mux_value(usrp_subdev_spec ss) +{ + return d_usrp->determine_tx_mux_value(ss); +} + +int +usrp_sink_base::determine_tx_mux_value(usrp_subdev_spec ss_a, usrp_subdev_spec ss_b) +{ + return d_usrp->determine_tx_mux_value(ss_a, ss_b); +} + +bool +usrp_sink_base::set_tx_freq (int channel, double freq) +{ + return d_usrp->set_tx_freq (channel, freq); +} + +unsigned int +usrp_sink_base::interp_rate () const +{ + return d_usrp->interp_rate (); +} + +int +usrp_sink_base::nchannels () const +{ + return d_usrp->nchannels (); +} + +int +usrp_sink_base::mux () const +{ + return d_usrp->mux (); +} + + +double +usrp_sink_base::tx_freq (int channel) const +{ + return d_usrp->tx_freq (channel); +} + +bool +usrp_sink_base::has_rx_halfband() +{ + return d_usrp->has_rx_halfband(); +} + +bool +usrp_sink_base::has_tx_halfband() +{ + return d_usrp->has_tx_halfband(); +} + +int +usrp_sink_base::nddcs() +{ + return d_usrp->nddcs(); +} + +int +usrp_sink_base::nducs() +{ + return d_usrp->nducs(); +} + +bool +usrp_sink_base::start() +{ + return d_usrp->start(); +} + +bool +usrp_sink_base::stop() +{ + return d_usrp->stop(); +} + + +bool +usrp_sink_base::tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result) +{ + return d_usrp->tune(chan, db, target_freq, result); +} + +usrp_subdev_spec +usrp_sink_base::pick_tx_subdevice() +{ + int dbids[] = { + USRP_DBID_FLEX_400_TX, + USRP_DBID_FLEX_900_TX, + USRP_DBID_FLEX_1200_TX, + USRP_DBID_FLEX_2400_TX, + USRP_DBID_BASIC_TX + }; + + std::vector candidates(dbids, dbids+(sizeof(dbids)/sizeof(int))); + return pick_subdev(candidates); +} diff --git a/gr-usrp/src/usrp_sink_base.h b/gr-usrp/src/usrp_sink_base.h new file mode 100644 index 00000000..b27813a4 --- /dev/null +++ b/gr-usrp/src/usrp_sink_base.h @@ -0,0 +1,152 @@ + +/* -*- c++ -*- */ +/* + * Copyright 2004,2006,2008 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. + */ + +#ifndef INCLUDED_USRP_SINK_BASE_H +#define INCLUDED_USRP_SINK_BASE_H + +#include +#include +#include +#include + +class usrp_standard_tx; + +/*! + * \brief abstract interface to Universal Software Radio Peripheral Tx path (Rev 1) + */ +class usrp_sink_base : public usrp_base { + private: + boost::shared_ptr d_usrp; + int d_nunderruns; + + protected: + usrp_sink_base (const std::string &name, + gr_io_signature_sptr input_signature, + int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + /*! + * \brief convert between input item format and usrp native format + * + * \param[in] input_items stream(s) of input items + * \param[in] input_index starting index in input_items + * \param[in] input_items_available number of items available starting at item[index] + * \param[out] input_items_consumed number of input items consumed by copy + * \param[out] usrp_buffer destination buffer + * \param[in] usrp_buffer_length \p usrp_buffer length in bytes + * \param[out] bytes_written number of bytes written into \p usrp_buffer + */ + virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, + int input_index, + int input_items_available, + int &input_items_consumed, + void *usrp_buffer, + int usrp_buffer_length, + int &bytes_written) = 0; + + public: + ~usrp_sink_base (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + /*! + * \brief Set interpolator rate. \p rate must be in [4, 1024] and a multiple of 4. + * + * The final complex sample rate across the USB is + * dac_freq () / interp_rate () * nchannels () + */ + bool set_interp_rate (unsigned int rate); + bool set_nchannels (int nchan); + bool set_mux (int mux); + int determine_tx_mux_value(usrp_subdev_spec ss); + int determine_tx_mux_value(usrp_subdev_spec ss_a, usrp_subdev_spec ss_b); + + /*! + * \brief set the frequency of the digital up converter. + * + * \p channel must be 0. \p freq is the center frequency in Hz. + * It must be in the range [-44M, 44M]. The frequency specified is + * quantized. Use tx_freq to retrieve the actual value used. + */ + bool set_tx_freq (int channel, double freq); + + long dac_rate() const { return converter_rate(); } // alias + long dac_freq() const { return converter_rate(); } // deprecated alias + + unsigned int interp_rate () const; + int nchannels () const; + int mux () const; + double tx_freq (int channel) const; + int nunderruns () const { return d_nunderruns; } + + bool has_rx_halfband(); + bool has_tx_halfband(); + int nddcs(); + int nducs(); + + /*! + * \brief Called to enable drivers, etc for i/o devices. + * + * This allows a block to enable an associated driver to begin + * transfering data just before we start to execute the scheduler. + * The end result is that this reduces latency in the pipeline when + * dealing with audio devices, usrps, etc. + */ + bool start(); + + /*! + * \brief Called to disable drivers, etc for i/o devices. + */ + bool stop(); + + /*! + * \brief High-level "tune" method. Works for the single channel case. + * + * This method adjusts both the daughterboard LO and the DUC so that + * DC in the complex baseband samples ends up at RF target_freq. + * + * \param chan which DUC channel we're controlling (usually == which_side). + * \param db the daughterboard we're controlling. + * \param target_freq the RF frequency we want our baseband translated to. + * \param[out] result details how the hardware was configured. + * + * \returns true iff everything was successful. + */ + bool tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result); + + /*! + * \brief Select suitable Tx daughterboard + */ + usrp_subdev_spec pick_tx_subdevice(); +}; + +#endif /* INCLUDED_USRP_SINK_BASE_H */ diff --git a/gr-usrp/src/usrp_sink_base.i b/gr-usrp/src/usrp_sink_base.i new file mode 100644 index 00000000..17fca441 --- /dev/null +++ b/gr-usrp/src/usrp_sink_base.i @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_sink_base.h" +%} + +class usrp_sink_base : public usrp_base +{ +private: + usrp_sink_base() throw (std::runtime_error); + +public: + bool set_interp_rate (unsigned int rate); + bool set_nchannels (int nchan); + bool set_mux (int mux); + %rename(_real_determine_tx_mux_value) determine_tx_mux_value; + int determine_tx_mux_value(usrp_subdev_spec ss); + int determine_tx_mux_value(usrp_subdev_spec ss_a, usrp_subdev_spec ss_b); + bool set_tx_freq (int channel, double freq); + long dac_rate() const { return converter_rate(); } + long dac_freq() const { return converter_rate(); } + unsigned int interp_rate () const; + int nchannels () const; + int mux () const; + double tx_freq (int channel) const; + int nunderruns () const { return d_nunderruns; } + bool has_rx_halfband(); + bool has_tx_halfband(); + int nddcs(); + int nducs(); + %rename(_real_tune) tune; + bool tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result); + %rename(_real_pick_tx_subdevice) pick_tx_subdevice(); + usrp_subdev_spec pick_tx_subdevice(); +}; diff --git a/gr-usrp/src/usrp_sink_c.cc b/gr-usrp/src/usrp_sink_c.cc new file mode 100644 index 00000000..363a113f --- /dev/null +++ b/gr-usrp/src/usrp_sink_c.cc @@ -0,0 +1,106 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +usrp_sink_c_sptr +usrp_make_sink_c (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) +{ + return usrp_sink_c_sptr (new usrp_sink_c (which_board, + interp_rate, + nchan, + mux, + fusb_block_size, + fusb_nblocks, + fpga_filename, + firmware_filename + )); +} + + +usrp_sink_c::usrp_sink_c (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) + : usrp_sink_base ("usrp_sink_c", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + which_board, interp_rate, nchan, mux, + fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename) +{ +} + +usrp_sink_c::~usrp_sink_c () +{ + // NOP +} + +/* + * Take one complex input stream and format it into interleaved short I & Q + * for the usrp. + */ +void +usrp_sink_c::copy_to_usrp_buffer (gr_vector_const_void_star &input_items, + int input_index, + int input_items_available, + int &input_items_consumed, // out + void *usrp_buffer, + int usrp_buffer_length, + int &bytes_written) // out +{ + gr_complex *in = &((gr_complex *) input_items[0])[input_index]; + short *dst = (short *) usrp_buffer; + + static const int usrp_bytes_per_input_item = 2 * sizeof (short); // I & Q + + int nitems = std::min (input_items_available, + usrp_buffer_length / usrp_bytes_per_input_item); + + for (int i = 0; i < nitems; i++){ + dst[2*i + 0] = host_to_usrp_short((short) real(in[i])); // FIXME saturate? + dst[2*i + 1] = host_to_usrp_short((short) imag(in[i])); // FIXME saturate? + } + + input_items_consumed = nitems; + bytes_written = nitems * usrp_bytes_per_input_item; +} + diff --git a/gr-usrp/src/usrp_sink_c.h b/gr-usrp/src/usrp_sink_c.h new file mode 100644 index 00000000..59ebace3 --- /dev/null +++ b/gr-usrp/src/usrp_sink_c.h @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_USRP_SINK_C_H +#define INCLUDED_USRP_SINK_C_H + +#include + +class usrp_sink_c; +typedef boost::shared_ptr usrp_sink_c_sptr; + + +// public shared_ptr constructor + +usrp_sink_c_sptr +usrp_make_sink_c (int which_board=0, + unsigned int interp_rate=32, + int nchan=1, + int mux=-1, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + + +/*! + * \brief Interface to Universal Software Radio Peripheral Tx path + * \ingroup usrp + * \ingroup sink_blk + * + * input: gr_complex + */ +class usrp_sink_c : public usrp_sink_base { + private: + + friend usrp_sink_c_sptr + usrp_make_sink_c (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + protected: + usrp_sink_c (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, + int input_index, + int input_items_available, + int &input_items_consumed, + void *usrp_buffer, + int usrp_buffer_length, + int &bytes_written); + public: + ~usrp_sink_c (); +}; + +#endif /* INCLUDED_USRP_SINK_C_H */ diff --git a/gr-usrp/src/usrp_sink_c.i b/gr-usrp/src/usrp_sink_c.i new file mode 100644 index 00000000..15480883 --- /dev/null +++ b/gr-usrp/src/usrp_sink_c.i @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_sink_c.h" +%} + +GR_SWIG_BLOCK_MAGIC(usrp,sink_c) + +class usrp_sink_c; +typedef boost::shared_ptr usrp_sink_c_sptr; + +usrp_sink_c_sptr +usrp_make_sink_c(int which=0, + unsigned int interp_rate=32, + int nchan=1, + int mux=-1, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + +class usrp_sink_c : public usrp_sink_base +{ +private: + usrp_sink_c() throw (std::runtime_error); +}; diff --git a/gr-usrp/src/usrp_sink_s.cc b/gr-usrp/src/usrp_sink_s.cc new file mode 100644 index 00000000..adbf3acb --- /dev/null +++ b/gr-usrp/src/usrp_sink_s.cc @@ -0,0 +1,106 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +usrp_sink_s_sptr +usrp_make_sink_s (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) +{ + return usrp_sink_s_sptr (new usrp_sink_s (which_board, + interp_rate, + nchan, + mux, + fusb_block_size, + fusb_nblocks, + fpga_filename, + firmware_filename + )); +} + + +usrp_sink_s::usrp_sink_s (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) + : usrp_sink_base ("usrp_sink_s", + gr_make_io_signature (1, 1, sizeof (short)), + which_board, interp_rate, nchan, mux, + fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename) +{ + set_output_multiple (512 / sizeof(short)); // don't change +} + +usrp_sink_s::~usrp_sink_s () +{ + // NOP +} + +/* + * Take one short input stream and format it into interleaved short I & Q + * for the usrp. + */ +void +usrp_sink_s::copy_to_usrp_buffer (gr_vector_const_void_star &input_items, + int input_index, + int input_items_available, + int &input_items_consumed, // out + void *usrp_buffer, + int usrp_buffer_length, + int &bytes_written) // out +{ + short *in = &((short *) input_items[0])[input_index]; + short *dst = (short *) usrp_buffer; + + static const int usrp_bytes_per_input_item = sizeof (short); + + int nitems = std::min (input_items_available, + usrp_buffer_length / usrp_bytes_per_input_item); + + for (int i = 0; i < nitems; i++){ // FIXME unroll + dst[i] = host_to_usrp_short(in[i]); + } + + input_items_consumed = nitems; + bytes_written = nitems * usrp_bytes_per_input_item; +} + diff --git a/gr-usrp/src/usrp_sink_s.h b/gr-usrp/src/usrp_sink_s.h new file mode 100644 index 00000000..f23b8612 --- /dev/null +++ b/gr-usrp/src/usrp_sink_s.h @@ -0,0 +1,88 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_USRP_SINK_S_H +#define INCLUDED_USRP_SINK_S_H + +#include + +class usrp_sink_s; +typedef boost::shared_ptr usrp_sink_s_sptr; + + +// public shared_ptr constructor + +usrp_sink_s_sptr +usrp_make_sink_s (int which_board=0, + unsigned int interp_rate=32, + int nchan=1, + int mux=-1, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + +/*! + * \brief Interface to Universal Software Radio Peripheral Tx path + * \ingroup usrp + * \ingroup sink_blk + * + * input: short + */ +class usrp_sink_s : public usrp_sink_base { + private: + + friend usrp_sink_s_sptr + usrp_make_sink_s (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + protected: + usrp_sink_s (int which_board, + unsigned int interp_rate, + int nchan, + int mux, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + virtual void copy_to_usrp_buffer (gr_vector_const_void_star &input_items, + int input_index, + int input_items_available, + int &input_items_consumed, + void *usrp_buffer, + int usrp_buffer_length, + int &bytes_written); + public: + ~usrp_sink_s (); +}; + +#endif /* INCLUDED_USRP_SINK_S_H */ diff --git a/gr-usrp/src/usrp_sink_s.i b/gr-usrp/src/usrp_sink_s.i new file mode 100644 index 00000000..9993d521 --- /dev/null +++ b/gr-usrp/src/usrp_sink_s.i @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_sink_s.h" +%} + +GR_SWIG_BLOCK_MAGIC(usrp,sink_s) + +class usrp_sink_s; +typedef boost::shared_ptr usrp_sink_s_sptr; + +usrp_sink_s_sptr +usrp_make_sink_s(int which=0, + unsigned int interp_rate=32, + int nchan=1, + int mux=-1, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + +class usrp_sink_s : public usrp_sink_base +{ +private: + usrp_sink_s() throw (std::runtime_error); +}; diff --git a/gr-usrp/src/usrp_source_base.cc b/gr-usrp/src/usrp_source_base.cc new file mode 100644 index 00000000..99efbcdd --- /dev/null +++ b/gr-usrp/src/usrp_source_base.cc @@ -0,0 +1,301 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +static const int OUTPUT_MULTIPLE_BYTES = 4 * 1024; + +usrp_source_base::usrp_source_base (const std::string &name, + gr_io_signature_sptr output_signature, + int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) + : usrp_base(name, + gr_make_io_signature (0, 0, 0), + output_signature), + d_noverruns (0) +{ + d_usrp = usrp_standard_rx::make (which_board, decim_rate, + nchan, mux, mode, + fusb_block_size, + fusb_nblocks, + fpga_filename, + firmware_filename); + if (d_usrp == 0) + throw std::runtime_error ("can't open usrp"); + + set_usrp_basic(d_usrp); + + // All calls to d_usrp->read must be multiples of 512 bytes. + // We jack this up to 4k to reduce overhead. + + set_output_multiple (OUTPUT_MULTIPLE_BYTES / output_signature->sizeof_stream_item (0)); +} + +usrp_source_base::~usrp_source_base () +{ +} + +unsigned int +usrp_source_base::sizeof_basic_sample() const +{ + return usrp_standard_rx::format_width(d_usrp->format()) / 8; +} + +int +usrp_source_base::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + static const int BUFSIZE = 4 * OUTPUT_MULTIPLE_BYTES; + unsigned char buf[BUFSIZE]; + int output_index = 0; + int output_items_produced; + int bytes_read; + bool overrun; + + while (output_index < noutput_items){ + int nbytes = ninput_bytes_reqd_for_noutput_items (noutput_items - output_index); + nbytes = std::min (nbytes, BUFSIZE); + + int result_nbytes = d_usrp->read (buf, nbytes, &overrun); + if (overrun){ + // fprintf (stderr, "usrp_source: overrun\n"); + fputs ("uO", stderr); + d_noverruns++; + } + + if (result_nbytes < 0) // We've got a problem. Usually board unplugged or powered down. + return -1; // Indicate we're done. + + if (result_nbytes != nbytes){ // not really an error, but unexpected + fprintf (stderr, "usrp_source: short read. Expected %d, got %d\n", + nbytes, result_nbytes); + } + + copy_from_usrp_buffer (output_items, + output_index, + noutput_items - output_index, // output_items_available + output_items_produced, // [out] + buf, // usrp_buffer + result_nbytes, // usrp_buffer_length + bytes_read); // [out] + + assert (output_index + output_items_produced <= noutput_items); + assert (bytes_read == result_nbytes); + + output_index += output_items_produced; + } + + return noutput_items; +} + + +bool +usrp_source_base::set_decim_rate (unsigned int rate) +{ + return d_usrp->set_decim_rate (rate); +} + +bool +usrp_source_base::set_nchannels (int nchan) +{ + return d_usrp->set_nchannels (nchan); +} + +bool +usrp_source_base::set_mux (int mux) +{ + return d_usrp->set_mux (mux); +} + +int +usrp_source_base::determine_rx_mux_value(usrp_subdev_spec ss) +{ + return d_usrp->determine_rx_mux_value(ss); +} + +int +usrp_source_base::determine_rx_mux_value(usrp_subdev_spec ss_a, usrp_subdev_spec ss_b) +{ + return d_usrp->determine_rx_mux_value(ss_a, ss_b); +} + +bool +usrp_source_base::set_rx_freq (int channel, double freq) +{ + return d_usrp->set_rx_freq (channel, freq); +} + +unsigned int +usrp_source_base::decim_rate () const +{ + return d_usrp->decim_rate (); +} + +int +usrp_source_base::nchannels () const +{ + return d_usrp->nchannels (); +} + +int +usrp_source_base::mux () const +{ + return d_usrp->mux (); +} + +double +usrp_source_base::rx_freq (int channel) const +{ + return d_usrp->rx_freq (channel); +} + +bool +usrp_source_base::set_fpga_mode (int mode) +{ + return d_usrp->set_fpga_mode (mode); +} + +bool +usrp_source_base::set_ddc_phase (int channel, int phase) +{ + return d_usrp->set_ddc_phase(channel, phase); +} + + +bool +usrp_source_base::set_format(unsigned int format) +{ + return d_usrp->set_format(format); +} + +unsigned int +usrp_source_base::format() const +{ + return d_usrp->format(); +} + +unsigned int +usrp_source_base::make_format(int width, int shift, bool want_q, bool bypass_halfband) +{ + return usrp_standard_rx::make_format(width, shift, want_q, bypass_halfband); +} + +int +usrp_source_base::format_width(unsigned int format) +{ + return usrp_standard_rx::format_width(format); +} + +int +usrp_source_base::format_shift(unsigned int format) +{ + return usrp_standard_rx::format_shift(format); +} + +bool +usrp_source_base::format_want_q(unsigned int format) +{ + return usrp_standard_rx::format_want_q(format); +} + +bool +usrp_source_base::format_bypass_halfband(unsigned int format) +{ + return usrp_standard_rx::format_bypass_halfband(format); +} + +bool +usrp_source_base::has_rx_halfband() +{ + return d_usrp->has_rx_halfband(); +} + +bool +usrp_source_base::has_tx_halfband() +{ + return d_usrp->has_tx_halfband(); +} + +int +usrp_source_base::nddcs() +{ + return d_usrp->nddcs(); +} + +int +usrp_source_base::nducs() +{ + return d_usrp->nducs(); +} + +bool +usrp_source_base::start() +{ + return d_usrp->start(); +} + +bool +usrp_source_base::stop() +{ + return d_usrp->stop(); +} + +bool +usrp_source_base::tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result) +{ + return d_usrp->tune(chan, db, target_freq, result); +} + +usrp_subdev_spec +usrp_source_base::pick_rx_subdevice() +{ + int dbids[] = { + USRP_DBID_FLEX_400_RX, + USRP_DBID_FLEX_900_RX, + USRP_DBID_FLEX_1200_RX, + USRP_DBID_FLEX_2400_RX, + USRP_DBID_TV_RX, + USRP_DBID_TV_RX_REV_2, + USRP_DBID_DBS_RX, + USRP_DBID_BASIC_RX + }; + + std::vector candidates(dbids, dbids+(sizeof(dbids)/sizeof(int))); + return pick_subdev(candidates); +} diff --git a/gr-usrp/src/usrp_source_base.h b/gr-usrp/src/usrp_source_base.h new file mode 100644 index 00000000..e1d091d8 --- /dev/null +++ b/gr-usrp/src/usrp_source_base.h @@ -0,0 +1,220 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifndef INCLUDED_USRP_SOURCE_BASE_H +#define INCLUDED_USRP_SOURCE_BASE_H + +#include +#include +#include +#include + +class usrp_standard_rx; + +/*! + * \brief abstract interface to Universal Software Radio Peripheral Rx path (Rev 1) + */ +class usrp_source_base : public usrp_base { + private: + boost::shared_ptr d_usrp; + int d_noverruns; + + protected: + usrp_source_base (const std::string &name, + gr_io_signature_sptr output_signature, + int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + /*! + * \brief return number of usrp input bytes required to produce noutput items. + */ + virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items) = 0; + + /*! + * \brief number of bytes in a low-level sample + */ + unsigned int sizeof_basic_sample() const; + + /*! + * \brief convert between native usrp format and output item format + * + * \param[out] output_items stream(s) of output items + * \param[in] output_index starting index in output_items + * \param[in] output_items_available number of empty items available at item[index] + * \param[out] output_items_produced number of items produced by copy + * \param[in] usrp_buffer source buffer + * \param[in] usrp_buffer_length number of bytes available in \p usrp_buffer + * \param[out] bytes_read number of bytes read from \p usrp_buffer + * + * The copy must consume all bytes available. That is, \p bytes_read must equal + * \p usrp_buffer_length. + */ + virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, + int output_index, + int output_items_available, + int &output_items_produced, + const void *usrp_buffer, + int usrp_buffer_length, + int &bytes_read) = 0; + + public: + ~usrp_source_base (); + + int work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + + /*! + * \brief Set decimator rate. \p rate must be EVEN and in [8, 256]. + * + * The final complex sample rate across the USB is + * adc_freq () / decim_rate () + */ + bool set_decim_rate (unsigned int rate); + bool set_nchannels (int nchan); + bool set_mux (int mux); + int determine_rx_mux_value(usrp_subdev_spec ss); + int determine_rx_mux_value(usrp_subdev_spec ss_a, usrp_subdev_spec ss_b); + + /*! + * \brief set the center frequency of the digital down converter. + * + * \p channel must be 0. \p freq is the center frequency in Hz. + * It must be in the range [-FIXME, FIXME]. The frequency specified is + * quantized. Use rx_freq to retrieve the actual value used. + */ + bool set_rx_freq (int channel, double freq); + + /*! + * \brief set fpga special modes + */ + bool set_fpga_mode (int mode); + + /*! + * \brief Set the digital down converter phase register. + * + * \param channel which ddc channel [0, 3] + * \param phase 32-bit integer phase value. + */ + bool set_ddc_phase(int channel, int phase); + + long adc_rate() const { return converter_rate(); } // alias + long adc_freq() const { return converter_rate(); } // deprecated alias + + unsigned int decim_rate () const; + int nchannels () const; + int mux () const; + double rx_freq (int channel) const; + int noverruns () const { return d_noverruns; } + + bool has_rx_halfband(); + bool has_tx_halfband(); + int nddcs(); + int nducs(); + + /*! + * \brief Called to enable drivers, etc for i/o devices. + * + * This allows a block to enable an associated driver to begin + * transfering data just before we start to execute the scheduler. + * The end result is that this reduces latency in the pipeline when + * dealing with audio devices, usrps, etc. + */ + bool start(); + + /*! + * \brief Called to disable drivers, etc for i/o devices. + */ + bool stop(); + + /*! + * \brief Specify Rx data format. + * + * \param format format specifier + * + * Rx data format control register + * + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------------------------------------+-+-+---------+-------+ + * | Reserved (Must be zero) |B|Q| WIDTH | SHIFT | + * +-----------------------------------------+-+-+---------+-------+ + * + * SHIFT specifies arithmetic right shift [0, 15] + * WIDTH specifies bit-width of I & Q samples across the USB [1, 16] (not all valid) + * Q if set deliver both I & Q, else just I + * B if set bypass half-band filter. + * + * Right now the acceptable values are: + * + * B Q WIDTH SHIFT + * 0 1 16 0 + * 0 1 8 8 + * + * More valid combos to come. + * + * Default value is 0x00000300 16-bits, 0 shift, deliver both I & Q. + */ + bool set_format(unsigned int format); + + /*! + * \brief return current format + */ + unsigned int format () const; + + static unsigned int make_format(int width=16, int shift=0, + bool want_q=true, bool bypass_halfband=false); + static int format_width(unsigned int format); + static int format_shift(unsigned int format); + static bool format_want_q(unsigned int format); + static bool format_bypass_halfband(unsigned int format); + + /*! + * \brief High-level "tune" method. Works for the single channel case. + * + * This method adjusts both the daughterboard LO and the DDC so that + * target_freq ends up at DC in the complex baseband samples. + * + * \param chan which DDC channel we're controlling (almost always 0). + * \param db the daughterboard we're controlling. + * \param target_freq the RF frequency we want at DC in the complex baseband. + * \param[out] result details how the hardware was configured. + * + * \returns true iff everything was successful. + */ + bool tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result); + + /*! + * \brief Select suitable Rx daughterboard + */ + usrp_subdev_spec pick_rx_subdevice(); +}; + +#endif /* INCLUDED_USRP_SOURCE_BASE_H */ diff --git a/gr-usrp/src/usrp_source_base.i b/gr-usrp/src/usrp_source_base.i new file mode 100644 index 00000000..aed751de --- /dev/null +++ b/gr-usrp/src/usrp_source_base.i @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_source_base.h" +%} + +class usrp_source_base : public usrp_base +{ +private: + usrp_source_base() throw (std::runtime_error); + +public: + bool set_decim_rate (unsigned int rate); + bool set_nchannels (int nchan); + bool set_mux (int mux); + %rename(_real_determine_rx_mux_value) determine_rx_mux_value; + int determine_rx_mux_value(usrp_subdev_spec ss); + int determine_rx_mux_value(usrp_subdev_spec ss_a, usrp_subdev_spec ss_b); + bool set_rx_freq (int channel, double freq); + bool set_fpga_mode (int mode); + bool set_ddc_phase(int channel, int phase); + long adc_rate() const { return converter_rate(); } + long adc_freq() const { return converter_rate(); } + unsigned int decim_rate () const; + int nchannels () const; + int mux () const; + double rx_freq (int channel) const; + int noverruns () const { return d_noverruns; } + bool has_rx_halfband(); + bool has_tx_halfband(); + int nddcs(); + int nducs(); + bool set_format(unsigned int format); + static unsigned int make_format(int width=16, int shift=0, + bool want_q=true, bool bypass_halfband=false); + static int format_width(unsigned int format); + static int format_shift(unsigned int format); + static bool format_want_q(unsigned int format); + static bool format_bypass_halfband(unsigned int format); + %rename(_real_tune) tune; + bool tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result); + %rename(_real_pick_rx_subdevice) pick_rx_subdevice(); + usrp_subdev_spec pick_rx_subdevice(); +}; diff --git a/gr-usrp/src/usrp_source_c.cc b/gr-usrp/src/usrp_source_c.cc new file mode 100644 index 00000000..71ca1e0d --- /dev/null +++ b/gr-usrp/src/usrp_source_c.cc @@ -0,0 +1,131 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const int NBASIC_SAMPLES_PER_ITEM = 2; // I & Q + +usrp_source_c_sptr +usrp_make_source_c (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) +{ + return usrp_source_c_sptr (new usrp_source_c (which_board, + decim_rate, + nchan, + mux, + mode, + fusb_block_size, + fusb_nblocks, + fpga_filename, + firmware_filename + )); +} + + +usrp_source_c::usrp_source_c (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) + : usrp_source_base ("usrp_source_c", + gr_make_io_signature (1, 1, sizeof (gr_complex)), + which_board, decim_rate, nchan, mux, mode, + fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename) +{ +} + +usrp_source_c::~usrp_source_c () +{ + // NOP +} + +int +usrp_source_c::ninput_bytes_reqd_for_noutput_items (int noutput_items) +{ + return noutput_items * NBASIC_SAMPLES_PER_ITEM * sizeof_basic_sample(); +} + +/* + * Convert interleaved 8 or 16-bit I & Q from usrp buffer into a single + * complex output stream. + */ +void +usrp_source_c::copy_from_usrp_buffer (gr_vector_void_star &output_items, + int output_index, + int output_items_available, + int &output_items_produced, + const void *usrp_buffer, + int usrp_buffer_length, + int &bytes_read) +{ + gr_complex *out = &((gr_complex *) output_items[0])[output_index]; + unsigned sbs = sizeof_basic_sample(); + unsigned nusrp_bytes_per_item = NBASIC_SAMPLES_PER_ITEM * sbs; + + int nitems = std::min (output_items_available, + (int)(usrp_buffer_length / nusrp_bytes_per_item)); + + signed char *s8 = (signed char *) usrp_buffer; + short *s16 = (short *) usrp_buffer; + + switch (sbs){ + case 1: + for (int i = 0; i < nitems; i++){ + out[i] = gr_complex ((float)(s8[2*i+0] << 8), (float)(s8[2*i+1] << 8)); + } + break; + + case 2: + for (int i = 0; i < nitems; i++){ + out[i] = gr_complex ((float) usrp_to_host_short(s16[2*i+0]), + (float) usrp_to_host_short(s16[2*i+1])); + } + break; + + default: + assert(0); + } + + output_items_produced = nitems; + bytes_read = nitems * nusrp_bytes_per_item; +} diff --git a/gr-usrp/src/usrp_source_c.h b/gr-usrp/src/usrp_source_c.h new file mode 100644 index 00000000..3fb04d65 --- /dev/null +++ b/gr-usrp/src/usrp_source_c.h @@ -0,0 +1,97 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_USRP_SOURCE_C_H +#define INCLUDED_USRP_SOURCE_C_H + +#include +#include + +class usrp_standard_rx; + + +class usrp_source_c; +typedef boost::shared_ptr usrp_source_c_sptr; + + +// public shared_ptr constructor + +usrp_source_c_sptr +usrp_make_source_c (int which_board=0, + unsigned int decim_rate=16, + int nchan = 1, + int mux = -1, + int mode = 0, + int fusb_block_size = 0, + int fusb_nblocks = 0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ) throw (std::runtime_error); + +/*! + * \brief Interface to Universal Software Radio Peripheral Rx path + * \ingroup usrp + * \ingroup source_blk + * + * output: 1 stream of complex + */ +class usrp_source_c : public usrp_source_base { + private: + friend usrp_source_c_sptr + usrp_make_source_c (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + protected: + usrp_source_c (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items); + + virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, + int output_index, + int output_items_available, + int &output_items_produced, + const void *usrp_buffer, + int usrp_buffer_length, + int &bytes_read); + + public: + ~usrp_source_c (); +}; + +#endif /* INCLUDED_USRP_SOURCE_C_H */ diff --git a/gr-usrp/src/usrp_source_c.i b/gr-usrp/src/usrp_source_c.i new file mode 100644 index 00000000..499f7f74 --- /dev/null +++ b/gr-usrp/src/usrp_source_c.i @@ -0,0 +1,48 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_source_c.h" +%} + +GR_SWIG_BLOCK_MAGIC(usrp,source_c) + +class usrp_source_c; +typedef boost::shared_ptr usrp_source_c_sptr; + +usrp_source_c_sptr +usrp_make_source_c(int which=0, + unsigned int decim_rate=16, + int nchan=1, + int mux=-1, + int mode=0, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + +class usrp_source_c : public usrp_source_base +{ +private: + usrp_source_c() throw (std::runtime_error); +}; diff --git a/gr-usrp/src/usrp_source_s.cc b/gr-usrp/src/usrp_source_s.cc new file mode 100644 index 00000000..f2038459 --- /dev/null +++ b/gr-usrp/src/usrp_source_s.cc @@ -0,0 +1,131 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +static const int NBASIC_SAMPLES_PER_ITEM = 1; + +usrp_source_s_sptr +usrp_make_source_s (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) +{ + return usrp_source_s_sptr (new usrp_source_s (which_board, + decim_rate, + nchan, + mux, + mode, + fusb_block_size, + fusb_nblocks, + fpga_filename, + firmware_filename + )); +} + + +usrp_source_s::usrp_source_s (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error) + : usrp_source_base ("usrp_source_s", + gr_make_io_signature (1, 1, sizeof (short)), + which_board, decim_rate, nchan, mux, mode, + fusb_block_size, + fusb_nblocks, + fpga_filename, firmware_filename) +{ +} + +usrp_source_s::~usrp_source_s () +{ + // NOP +} + +int +usrp_source_s::ninput_bytes_reqd_for_noutput_items (int noutput_items) +{ + return noutput_items * NBASIC_SAMPLES_PER_ITEM * sizeof_basic_sample(); +} + +/* + * Convert interleaved 8 or 16-bit I & Q from usrp buffer into a single + * short output stream. + */ +void +usrp_source_s::copy_from_usrp_buffer (gr_vector_void_star &output_items, + int output_index, + int output_items_available, + int &output_items_produced, + const void *usrp_buffer, + int usrp_buffer_length, + int &bytes_read) +{ + short *out = &((short *) output_items[0])[output_index]; + unsigned sbs = sizeof_basic_sample(); + unsigned nusrp_bytes_per_item = NBASIC_SAMPLES_PER_ITEM * sbs; + + int nitems = std::min (output_items_available, + (int)(usrp_buffer_length / nusrp_bytes_per_item)); + + signed char *s8 = (signed char *) usrp_buffer; + short *s16 = (short *) usrp_buffer; + + switch(sbs){ + case 1: + for (int i = 0; i < nitems; i++){ + out[i] = s8[i] << 8; + } + break; + + case 2: + for (int i = 0; i < nitems; i++){ + out[i] = usrp_to_host_short(s16[i]); + } + break; + + default: + assert(0); + } + + output_items_produced = nitems; + bytes_read = nitems * nusrp_bytes_per_item; +} diff --git a/gr-usrp/src/usrp_source_s.h b/gr-usrp/src/usrp_source_s.h new file mode 100644 index 00000000..9118b4e0 --- /dev/null +++ b/gr-usrp/src/usrp_source_s.h @@ -0,0 +1,96 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +#ifndef INCLUDED_USRP_SOURCE_S_H +#define INCLUDED_USRP_SOURCE_S_H + +#include +#include + +class usrp_standard_rx; + + +class usrp_source_s; +typedef boost::shared_ptr usrp_source_s_sptr; + + +// public shared_ptr constructor + +usrp_source_s_sptr +usrp_make_source_s (int which_board=0, + unsigned int decim_rate=16, + int nchan=1, + int mux=-1, + int mode=0, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + +/*! + * \brief Interface to Universal Software Radio Peripheral Rx path + * \ingroup usrp + * \ingroup source_blk + * + * output: 1 stream of short + */ +class usrp_source_s : public usrp_source_base { + private: + friend usrp_source_s_sptr + usrp_make_source_s (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + protected: + usrp_source_s (int which_board, + unsigned int decim_rate, + int nchan, + int mux, + int mode, + int fusb_block_size, + int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) throw (std::runtime_error); + + virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items); + + virtual void copy_from_usrp_buffer (gr_vector_void_star &output_items, + int output_index, + int output_items_available, + int &output_items_produced, + const void *usrp_buffer, + int usrp_buffer_length, + int &bytes_read); + public: + ~usrp_source_s (); +}; + +#endif /* INCLUDED_USRP_SOURCE_S_H */ diff --git a/gr-usrp/src/usrp_source_s.i b/gr-usrp/src/usrp_source_s.i new file mode 100644 index 00000000..d8b285c9 --- /dev/null +++ b/gr-usrp/src/usrp_source_s.i @@ -0,0 +1,48 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +%{ +#include "usrp_source_s.h" +%} + +GR_SWIG_BLOCK_MAGIC(usrp,source_s) + +class usrp_source_s; +typedef boost::shared_ptr usrp_source_s_sptr; + +usrp_source_s_sptr +usrp_make_source_s(int which=0, + unsigned int decim_rate=16, + int nchan=1, + int mux=-1, + int mode=0, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename="", + const std::string firmware_filename="" + ) throw (std::runtime_error); + +class usrp_source_s : public usrp_source_base +{ +private: + usrp_source_s() throw (std::runtime_error); +}; diff --git a/gr-usrp/src/usrp_standard.i b/gr-usrp/src/usrp_standard.i new file mode 100644 index 00000000..7d32cdf8 --- /dev/null +++ b/gr-usrp/src/usrp_standard.i @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +// FIXME: move to usrp/usrpm component + +%{ +#include +#include +#include +%} + +%include +%include + +%constant int FPGA_MODE_NORMAL = usrp_standard_rx::FPGA_MODE_NORMAL; +%constant int FPGA_MODE_LOOPBACK = usrp_standard_rx::FPGA_MODE_LOOPBACK; +%constant int FPGA_MODE_COUNTING = usrp_standard_rx::FPGA_MODE_COUNTING; diff --git a/gr-usrp/src/usrp_swig.i b/gr-usrp/src/usrp_swig.i new file mode 100644 index 00000000..f5841985 --- /dev/null +++ b/gr-usrp/src/usrp_swig.i @@ -0,0 +1,143 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +%include "gnuradio.i" // the common stuff + +%{ +#include +%} + +%include +%include +%include +%include +%include "usrp_standard.i" +%include "usrp_base.i" +%include "usrp_source_base.i" +%include "usrp_source_c.i" +%include "usrp_source_s.i" +%include "usrp_sink_base.i" +%include "usrp_sink_c.i" +%include "usrp_sink_s.i" + +//---Allow a more Pythonic interface +%pythoncode %{ + +# Allow subdev_spec to be tuple +def __selected_subdev(self, subdev_spec): + ss = usrp_subdev_spec(subdev_spec[0], subdev_spec[1]) + return self._real_selected_subdev(ss) + +# Allow subdev_spec to be tuple +def __determine_tx_mux_value(self, subdev_spec, subdev_spec_=None): + ss = usrp_subdev_spec(subdev_spec[0], subdev_spec[1]) + if subdev_spec_ is None: return self._real_determine_tx_mux_value(ss) + ss_ = usrp_subdev_spec(subdev_spec_[0], subdev_spec_[1]) + return self._real_determine_tx_mux_value(ss, ss_) + +# Allow subdev_spec to be tuple +def __determine_rx_mux_value(self, subdev_spec, subdev_spec_=None): + ss = usrp_subdev_spec(subdev_spec[0], subdev_spec[1]) + if subdev_spec_ is None: return self._real_determine_rx_mux_value(ss) + ss_ = usrp_subdev_spec(subdev_spec_[0], subdev_spec_[1]) + return self._real_determine_rx_mux_value(ss, ss_) + +# Allow subdev_spec to be tuple +def __pick_subdev(self, candidates=[]): + ss = self._real_pick_subdev(candidates) + return (ss.side, ss.subdev) + +# Allow subdev_spec to be tuple +def __pick_tx_subdevice(self): + ss = self._real_pick_tx_subdevice() + return (ss.side, ss.subdev) + +# Allow subdev_spec to be tuple +def __pick_rx_subdevice(self): + ss = self._real_pick_rx_subdevice() + return (ss.side, ss.subdev) + +# Make return tune_result or None on failure +def __tune(self, chan, db, target_freq): + tr = usrp_tune_result() + r = self._real_tune(chan, db, target_freq, tr) + if r: + return tr + else: + return None + +# Allow to be called as a free function +def tune(u, chan, subdev, target_freq): + return u.tune(chan, subdev, target_freq) + +# Allow to be called as free function +def determine_tx_mux_value(u, subdev_spec, subdev_spec_=None): + return u.determine_tx_mux_value(subdev_spec, subdev_spec_) + +# Allow to be called as free function +def determine_rx_mux_value(u, subdev_spec, subdev_spec_=None): + return u.determine_rx_mux_value(subdev_spec, subdev_spec_) + +# Allow to be called as free function +def selected_subdev(u, subdev_spec): + return u.selected_subdev(subdev_spec) + +# Allow to be called as free function +def pick_subdev(u, candidates=[]): + return u.pick_subdev(candidates); + +# Allow to be called as free function +def pick_tx_subdevice(u): + return u.pick_tx_subdevice(); + +# Allow to be called as free function +def pick_rx_subdevice(u): + return u.pick_rx_subdevice(); + +# Jam into Python objects +usrp_sink_c_sptr.determine_tx_mux_value = __determine_tx_mux_value +usrp_sink_s_sptr.determine_tx_mux_value = __determine_tx_mux_value + +usrp_source_c_sptr.determine_rx_mux_value = __determine_rx_mux_value +usrp_source_s_sptr.determine_rx_mux_value = __determine_rx_mux_value + +usrp_sink_c_sptr.selected_subdev = __selected_subdev +usrp_sink_s_sptr.selected_subdev = __selected_subdev +usrp_source_c_sptr.selected_subdev = __selected_subdev +usrp_source_s_sptr.selected_subdev = __selected_subdev + +usrp_sink_c_sptr.tune = __tune +usrp_sink_s_sptr.tune = __tune +usrp_source_c_sptr.tune = __tune +usrp_source_s_sptr.tune = __tune + +usrp_sink_c_sptr.pick_subdev = __pick_subdev +usrp_sink_s_sptr.pick_subdev = __pick_subdev +usrp_source_c_sptr.pick_subdev = __pick_subdev +usrp_source_s_sptr.pick_subdev = __pick_subdev + +usrp_sink_c_sptr.pick_tx_subdevice = __pick_tx_subdevice +usrp_sink_s_sptr.pick_tx_subdevice = __pick_tx_subdevice +usrp_source_c_sptr.pick_rx_subdevice = __pick_rx_subdevice +usrp_source_s_sptr.pick_rx_subdevice = __pick_rx_subdevice + +%} diff --git a/gr-usrp2/Makefile.am b/gr-usrp2/Makefile.am new file mode 100644 index 00000000..2a0fbe20 --- /dev/null +++ b/gr-usrp2/Makefile.am @@ -0,0 +1,27 @@ +# +# Copyright 2001,2006,2008,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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = src + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gnuradio-usrp2.pc diff --git a/gr-usrp2/Makefile.in b/gr-usrp2/Makefile.in new file mode 100644 index 00000000..0bf7917a --- /dev/null +++ b/gr-usrp2/Makefile.in @@ -0,0 +1,1065 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2001,2006,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gnuradio-usrp2.pc.in $(top_srcdir)/Makefile.common +subdir = gr-usrp2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gnuradio-usrp2.pc +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = src +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gnuradio-usrp2.pc +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-usrp2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-usrp2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gnuradio-usrp2.pc: $(top_builddir)/config.status $(srcdir)/gnuradio-usrp2.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-usrp2/gnuradio-usrp2.pc.in b/gr-usrp2/gnuradio-usrp2.pc.in new file mode 100644 index 00000000..403e5f1c --- /dev/null +++ b/gr-usrp2/gnuradio-usrp2.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/gnuradio + +Name: gnuradio-usrp2 +Description: GNU Software Radio support for Universal Software Radio Peripheral 2 +Requires: gnuradio-core usrp2 +Version: @VERSION@ +Libs: -L${libdir} -lgnuradio-usrp2 +Cflags: -I${includedir} diff --git a/gr-usrp2/src/Makefile.am b/gr-usrp2/src/Makefile.am new file mode 100644 index 00000000..77da2bd4 --- /dev/null +++ b/gr-usrp2/src/Makefile.am @@ -0,0 +1,113 @@ +# +# Copyright 2004,2005,2006,2008,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. +# + +include $(top_srcdir)/Makefile.common + +# ---------------------------------------------------------------------- +# Local Python files, not installed +# +# qa_usrp2.py +# ---------------------------------------------------------------------- + +noinst_PYTHON = qa_usrp2.py + +# ---------------------------------------------------------------------- +# Miscellaneous build operations +# ---------------------------------------------------------------------- + +EXTRA_DIST = run_tests.in +TESTS = run_tests +DISTCLEANFILES = run_tests + +# ---------------------------------------------------------------------- +# C++ block API interface librar(ies) +# +# libgr-usrp.so +# ---------------------------------------------------------------------- +AM_CPPFLAGS = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(GRUEL_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + $(USRP2_INCLUDES) \ + $(WITH_INCLUDES) + +lib_LTLIBRARIES = libgnuradio-usrp2.la + +libgnuradio_usrp2_la_SOURCES = \ + rx_16sc_handler.cc \ + rx_32fc_handler.cc \ + usrp2_base.cc \ + usrp2_source_base.cc \ + usrp2_source_16sc.cc \ + usrp2_source_32fc.cc \ + usrp2_sink_base.cc \ + usrp2_sink_16sc.cc \ + usrp2_sink_32fc.cc + +libgnuradio_usrp2_la_LIBADD = \ + $(USRP2_LA) \ + $(GNURADIO_CORE_LA) + +grinclude_HEADERS = \ + usrp2_base.h \ + usrp2_source_base.h \ + usrp2_source_32fc.h \ + usrp2_source_16sc.h \ + usrp2_sink_base.h \ + usrp2_sink_16sc.h \ + usrp2_sink_32fc.h + +noinst_HEADERS = \ + rx_16sc_handler.h \ + rx_32fc_handler.h + +# ---------------------------------------------------------------------- +# Python SWIG wrapper around C++ library +# +# usrp2.py +# _usrp2.so +# ---------------------------------------------------------------------- + +TOP_SWIG_IFILES = \ + usrp2.i + +# Install so that they end up available as: +# import gnuradio.usrp2 +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +usrp2_pythondir_category = \ + gnuradio + +# additional arguments to the SWIG command +usrp2_swig_args = \ + $(USRP2_INCLUDES) + +# additional libraries for linking with the SWIG-generated library +usrp2_la_swig_libadd = \ + libgnuradio-usrp2.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) diff --git a/gr-usrp2/src/Makefile.in b/gr-usrp2/src/Makefile.in new file mode 100644 index 00000000..0df4fc00 --- /dev/null +++ b/gr-usrp2/src/Makefile.in @@ -0,0 +1,1507 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,2006,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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 -*- +# +# 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 usrp2.i + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grinclude_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(srcdir)/run_tests.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig \ + $(usrp2_python_PYTHON) $(usrp2_swiginclude_HEADERS) +subdir = gr-usrp2/src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = run_tests +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrp2_pylibdir)" \ + "$(DESTDIR)$(usrp2_pythondir)" "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(usrp2_swigincludedir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +usrp2_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) $(usrp2_pylib_LTLIBRARIES) +am__DEPENDENCIES_1 = +_usrp2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(usrp2_la_swig_libadd) +am__usrp2_la_OBJECTS = _usrp2_la-usrp2.lo +_usrp2_la_OBJECTS = $(am__usrp2_la_OBJECTS) +_usrp2_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_usrp2_la_CXXFLAGS) \ + $(CXXFLAGS) $(_usrp2_la_LDFLAGS) $(LDFLAGS) -o $@ +libgnuradio_usrp2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libgnuradio_usrp2_la_OBJECTS = rx_16sc_handler.lo \ + rx_32fc_handler.lo usrp2_base.lo usrp2_source_base.lo \ + usrp2_source_16sc.lo usrp2_source_32fc.lo usrp2_sink_base.lo \ + usrp2_sink_16sc.lo usrp2_sink_32fc.lo +libgnuradio_usrp2_la_OBJECTS = $(am_libgnuradio_usrp2_la_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(_usrp2_la_SOURCES) $(libgnuradio_usrp2_la_SOURCES) +DIST_SOURCES = $(_usrp2_la_SOURCES) $(libgnuradio_usrp2_la_SOURCES) +usrp2_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +usrp2_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(noinst_HEADERS) \ + $(usrp2_swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/usrp2-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* + +# ---------------------------------------------------------------------- +# Local Python files, not installed +# +# qa_usrp2.py +# ---------------------------------------------------------------------- +noinst_PYTHON = qa_usrp2.py + +# ---------------------------------------------------------------------- +# Miscellaneous build operations +# ---------------------------------------------------------------------- +EXTRA_DIST = run_tests.in +TESTS = run_tests +DISTCLEANFILES = run_tests + +# ---------------------------------------------------------------------- +# C++ block API interface librar(ies) +# +# libgr-usrp.so +# ---------------------------------------------------------------------- +AM_CPPFLAGS = \ + $(STD_DEFINES_AND_INCLUDES) \ + $(GRUEL_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + $(USRP2_INCLUDES) \ + $(WITH_INCLUDES) + +lib_LTLIBRARIES = libgnuradio-usrp2.la +libgnuradio_usrp2_la_SOURCES = \ + rx_16sc_handler.cc \ + rx_32fc_handler.cc \ + usrp2_base.cc \ + usrp2_source_base.cc \ + usrp2_source_16sc.cc \ + usrp2_source_32fc.cc \ + usrp2_sink_base.cc \ + usrp2_sink_16sc.cc \ + usrp2_sink_32fc.cc + +libgnuradio_usrp2_la_LIBADD = \ + $(USRP2_LA) \ + $(GNURADIO_CORE_LA) + +grinclude_HEADERS = \ + usrp2_base.h \ + usrp2_source_base.h \ + usrp2_source_32fc.h \ + usrp2_source_16sc.h \ + usrp2_sink_base.h \ + usrp2_sink_16sc.h \ + usrp2_sink_32fc.h + +noinst_HEADERS = \ + rx_16sc_handler.h \ + rx_32fc_handler.h + + +# ---------------------------------------------------------------------- +# Python SWIG wrapper around C++ library +# +# usrp2.py +# _usrp2.so +# ---------------------------------------------------------------------- +TOP_SWIG_IFILES = \ + usrp2.i + + +# Install so that they end up available as: +# import gnuradio.usrp2 +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +usrp2_pythondir_category = \ + gnuradio + + +# additional arguments to the SWIG command +usrp2_swig_args = \ + $(USRP2_INCLUDES) + + +# additional libraries for linking with the SWIG-generated library +usrp2_la_swig_libadd = \ + libgnuradio-usrp2.la + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = usrp2.py usrp2.cc +usrp2_pythondir = $(pythondir)/$(usrp2_pythondir_category) +usrp2_pylibdir = $(pyexecdir)/$(usrp2_pylibdir_category) +usrp2_swigincludedir = $(swigincludedir) +usrp2_swiginclude_HEADERS = \ + usrp2.i \ + $(usrp2_swiginclude_headers) + +usrp2_pylib_LTLIBRARIES = \ + _usrp2.la + +_usrp2_la_SOURCES = \ + usrp2.cc \ + $(usrp2_la_swig_sources) + +_usrp2_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(usrp2_la_swig_libadd) + +_usrp2_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(usrp2_la_swig_ldflags) + +_usrp2_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(usrp2_la_swig_cxxflags) + +usrp2_python_PYTHON = \ + usrp2.py \ + $(usrp2_python) + + +# 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) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-usrp2/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-usrp2/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-usrp2_pylibLTLIBRARIES: $(usrp2_pylib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(usrp2_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(usrp2_pylibdir)" + @list='$(usrp2_pylib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usrp2_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(usrp2_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usrp2_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(usrp2_pylibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-usrp2_pylibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(usrp2_pylib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(usrp2_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(usrp2_pylibdir)/$$p"; \ + done + +clean-usrp2_pylibLTLIBRARIES: + -test -z "$(usrp2_pylib_LTLIBRARIES)" || rm -f $(usrp2_pylib_LTLIBRARIES) + @list='$(usrp2_pylib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_usrp2.la: $(_usrp2_la_OBJECTS) $(_usrp2_la_DEPENDENCIES) + $(_usrp2_la_LINK) -rpath $(usrp2_pylibdir) $(_usrp2_la_OBJECTS) $(_usrp2_la_LIBADD) $(LIBS) +libgnuradio-usrp2.la: $(libgnuradio_usrp2_la_OBJECTS) $(libgnuradio_usrp2_la_DEPENDENCIES) + $(CXXLINK) -rpath $(libdir) $(libgnuradio_usrp2_la_OBJECTS) $(libgnuradio_usrp2_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_usrp2_la-usrp2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_16sc_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_32fc_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_sink_16sc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_sink_32fc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_sink_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_source_16sc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_source_32fc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_source_base.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +_usrp2_la-usrp2.lo: usrp2.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_usrp2_la_CXXFLAGS) $(CXXFLAGS) -MT _usrp2_la-usrp2.lo -MD -MP -MF $(DEPDIR)/_usrp2_la-usrp2.Tpo -c -o _usrp2_la-usrp2.lo `test -f 'usrp2.cc' || echo '$(srcdir)/'`usrp2.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_usrp2_la-usrp2.Tpo $(DEPDIR)/_usrp2_la-usrp2.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='usrp2.cc' object='_usrp2_la-usrp2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_usrp2_la_CXXFLAGS) $(CXXFLAGS) -c -o _usrp2_la-usrp2.lo `test -f 'usrp2.cc' || echo '$(srcdir)/'`usrp2.cc + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-usrp2_pythonPYTHON: $(usrp2_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(usrp2_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(usrp2_pythondir)" + @list='$(usrp2_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(usrp2_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(usrp2_pythondir)/$$f'"; \ + $(usrp2_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(usrp2_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(usrp2_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(usrp2_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-usrp2_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(usrp2_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(usrp2_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(usrp2_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(usrp2_pythondir)/$${f}o"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-usrp2_swigincludeHEADERS: $(usrp2_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(usrp2_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(usrp2_swigincludedir)" + @list='$(usrp2_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(usrp2_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(usrp2_swigincludedir)/$$f'"; \ + $(usrp2_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(usrp2_swigincludedir)/$$f"; \ + done + +uninstall-usrp2_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(usrp2_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(usrp2_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(usrp2_swigincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrp2_pylibdir)" "$(DESTDIR)$(usrp2_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(usrp2_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-usrp2_pylibLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS \ + install-usrp2_pylibLTLIBRARIES install-usrp2_pythonPYTHON \ + install-usrp2_swigincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS uninstall-libLTLIBRARIES \ + uninstall-usrp2_pylibLTLIBRARIES uninstall-usrp2_pythonPYTHON \ + uninstall-usrp2_swigincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-usrp2_pylibLTLIBRARIES ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grincludeHEADERS install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip install-usrp2_pylibLTLIBRARIES \ + install-usrp2_pythonPYTHON install-usrp2_swigincludeHEADERS \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ + uninstall-libLTLIBRARIES uninstall-usrp2_pylibLTLIBRARIES \ + uninstall-usrp2_pythonPYTHON \ + uninstall-usrp2_swigincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +usrp2_pythondir_category ?= gnuradio/usrp2 +usrp2_pylibdir_category ?= $(usrp2_pythondir_category) + +usrp2.h usrp2.py usrp2.cc: usrp2.i + trap 'rm -rf $(DEPDIR)/usrp2-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/usrp2-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/usrp2-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/usrp2-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/usrp2-generate-lock; \ + else \ + while test -d $(DEPDIR)/usrp2-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/usrp2-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/usrp2-generate-stamp: + 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; + $(RM) $(DEPDIR)/usrp2.d + cp $(DEPDIR)/usrp2.Std $(DEPDIR)/usrp2.d + echo "" >> $(DEPDIR)/usrp2.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/usrp2.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/usrp2.d + $(RM) $(DEPDIR)/usrp2.Std + touch $(DEPDIR)/usrp2-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)/usrp2.d@am__quote@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-usrp2/src/Makefile.swig.gen b/gr-usrp2/src/Makefile.swig.gen new file mode 100644 index 00000000..24d9f17c --- /dev/null +++ b/gr-usrp2/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 usrp2.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/usrp2 +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/usrp2 +## +## 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. + +usrp2_pythondir_category ?= gnuradio/usrp2 +usrp2_pylibdir_category ?= $(usrp2_pythondir_category) +usrp2_pythondir = $(pythondir)/$(usrp2_pythondir_category) +usrp2_pylibdir = $(pyexecdir)/$(usrp2_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +usrp2_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)/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 . + +usrp2_swiginclude_HEADERS = \ + usrp2.i \ + $(usrp2_swiginclude_headers) + +usrp2_pylib_LTLIBRARIES = \ + _usrp2.la + +_usrp2_la_SOURCES = \ + usrp2.cc \ + $(usrp2_la_swig_sources) + +_usrp2_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(usrp2_la_swig_libadd) + +_usrp2_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(usrp2_la_swig_ldflags) + +_usrp2_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(usrp2_la_swig_cxxflags) + +usrp2_python_PYTHON = \ + usrp2.py \ + $(usrp2_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/usrp2.d@am__quote@ + diff --git a/gr-usrp2/src/qa_usrp2.py b/gr-usrp2/src/qa_usrp2.py new file mode 100755 index 00000000..bc6664a1 --- /dev/null +++ b/gr-usrp2/src/qa_usrp2.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python +# +# Copyright 2005,2008 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 import gr, gr_unittest +import usrp2 + +class qa_usrp2(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_000_nop (self): + """Just see if we can import the module... + They may not have a USRP2 connected, etc. Don't try to run anything""" + pass + +if __name__ == '__main__': + gr_unittest.main () diff --git a/gr-usrp2/src/run_tests.in b/gr-usrp2/src/run_tests.in new file mode 100644 index 00000000..99190b81 --- /dev/null +++ b/gr-usrp2/src/run_tests.in @@ -0,0 +1,17 @@ +#!/bin/sh + +# 1st parameter is absolute path to component source directory +# 2nd parameter is absolute path to component build directory +# 3rd parameter is path to Python QA directory + +# For OS/X +DYLD_LIBRARY_PATH=@abs_top_builddir@/usrp2/host/lib/legacy:@abs_top_builddir@/usrp2/host/lib/legacy/.libs:$DYLD_LIBRARY_PATH +export DYLD_LIBRARY_PATH + +# For Win32 +PATH=@abs_top_builddir@/usrp2/host/lib/legacy:@abs_top_builddir@/usrp2/host/lib/legacy/.libs:$PATH + +@top_builddir@/run_tests.sh \ + @abs_top_srcdir@/gr-usrp2 \ + @abs_top_builddir@/gr-usrp2 \ + @srcdir@ diff --git a/gr-usrp2/src/rx_16sc_handler.cc b/gr-usrp2/src/rx_16sc_handler.cc new file mode 100644 index 00000000..7fb9ad06 --- /dev/null +++ b/gr-usrp2/src/rx_16sc_handler.cc @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +rx_16sc_handler::~rx_16sc_handler() +{ + // NOP +} diff --git a/gr-usrp2/src/rx_16sc_handler.h b/gr-usrp2/src/rx_16sc_handler.h new file mode 100644 index 00000000..9d5b1f2e --- /dev/null +++ b/gr-usrp2/src/rx_16sc_handler.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_RX_16SC_HANDLER_H +#define INCLUDED_RX_16SC_HANDLER_H + +#include +#include + +class rx_16sc_handler : public usrp2::rx_nop_handler +{ + std::complex *d_dest; + + // Private constructor + rx_16sc_handler(uint64_t max_samples, uint64_t max_quantum, std::complex *dest) + : rx_nop_handler(max_samples, max_quantum), d_dest(dest) {} + +public: + // Shared pointer to one of these + typedef boost::shared_ptr sptr; + + // Factory function to return a shared pointer to a new instance + static sptr make(uint64_t max_samples, uint64_t max_quantum, std::complex *dest) + { + return sptr(new rx_16sc_handler(max_samples, max_quantum, dest)); + } + + // Invoked by USRP2 API when samples are available + bool operator()(const uint32_t *items, size_t nitems, const usrp2::rx_metadata *metadata) + { + // Copy/reformat/endian swap USRP2 data to destination buffer + usrp2::copy_u2_16sc_to_host_16sc(nitems, items, d_dest); + d_dest += nitems; + + // FIXME: do something with metadata + + // Call parent to determine if there is room to be called again + return rx_nop_handler::operator()(items, nitems, metadata); + } + + ~rx_16sc_handler(); +}; + +#endif /* INCLUDED_RX_16SC_HANDLER_H */ diff --git a/gr-usrp2/src/rx_32fc_handler.cc b/gr-usrp2/src/rx_32fc_handler.cc new file mode 100644 index 00000000..c9c25155 --- /dev/null +++ b/gr-usrp2/src/rx_32fc_handler.cc @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +rx_32fc_handler::~rx_32fc_handler() +{ + // NOP +} diff --git a/gr-usrp2/src/rx_32fc_handler.h b/gr-usrp2/src/rx_32fc_handler.h new file mode 100644 index 00000000..f2ce2b55 --- /dev/null +++ b/gr-usrp2/src/rx_32fc_handler.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_RX_32FC_HANDLER_H +#define INCLUDED_RX_32FC_HANDLER_H + +#include +#include +#include + +class rx_32fc_handler : public usrp2::rx_nop_handler +{ + gr_complex *d_dest; + + // Private constructor + rx_32fc_handler(uint64_t max_samples, uint64_t max_quantum, gr_complex *dest) + : rx_nop_handler(max_samples, max_quantum), d_dest(dest) {} + +public: + // Shared pointer to one of these + typedef boost::shared_ptr sptr; + + // Factory function to return a shared pointer to a new instance + static sptr make(uint64_t max_samples, uint64_t max_quantum, gr_complex *dest) + { + return sptr(new rx_32fc_handler(max_samples, max_quantum, dest)); + } + + // Invoked by USRP2 API when samples are available + bool operator()(const uint32_t *items, size_t nitems, const usrp2::rx_metadata *metadata) + { + // Copy/reformat/endian swap USRP2 data to destination buffer + usrp2::copy_u2_16sc_to_host_32fc(nitems, items, d_dest); + d_dest += nitems; + + // FIXME: do something with metadata + + // Call parent to determine if there is room to be called again + return rx_nop_handler::operator()(items, nitems, metadata); + } + + ~rx_32fc_handler(); +}; + +#endif /* INCLUDED_RX_32FC_HANDLER_H */ diff --git a/gr-usrp2/src/usrp2.i b/gr-usrp2/src/usrp2.i new file mode 100644 index 00000000..31974028 --- /dev/null +++ b/gr-usrp2/src/usrp2.i @@ -0,0 +1,345 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +%include "gnuradio.i" // the common stuff +%import + +%{ +#include "usrp2_source_16sc.h" +#include "usrp2_source_32fc.h" +#include "usrp2_sink_16sc.h" +#include "usrp2_sink_32fc.h" +%} + +%include +%include + +%template(uint32_t_vector) std::vector; + +// ---------------------------------------------------------------- + +class usrp2_base : public gr_sync_block +{ +protected: + usrp2_base() throw (std::runtime_error); + +public: + ~usrp2_base(); + + std::string mac_addr() const; + std::string interface_name() const; + %rename(_real_fpga_master_clock_freq) fpga_master_clock_freq; + bool fpga_master_clock_freq(long *freq); + bool config_mimo(int flags); + bool sync_to_pps(); + bool sync_every_pps(bool enable); + std::vector peek32(uint32_t addr, uint32_t words); + bool poke32(uint32_t addr, const std::vector &data); +}; + +// ---------------------------------------------------------------- + +class usrp2_source_base : public usrp2_base +{ +protected: + usrp2_source_base() throw (std::runtime_error); + +public: + ~usrp2_source_base(); + + bool set_gain(double gain); + %rename(_real_set_center_freq) set_center_freq; + bool set_lo_offset(double frequency); + bool set_center_freq(double frequency, usrp2::tune_result *r); + bool set_decim(int decimation_factor); + bool set_scale_iq(int scale_i, int scale_q); + int decim(); + %rename(_real_adc_rate) adc_rate; + bool adc_rate(long *rate); + double gain_min(); + double gain_max(); + double gain_db_per_step(); + double freq_min(); + double freq_max(); + %rename(_real_daughterboard_id) daughterboard_id; + bool daughterboard_id(int *dbid); + unsigned int overruns(); + unsigned int missing(); + bool set_gpio_ddr(uint16_t value, uint16_t mask); + bool set_gpio_sels(std::string sels); + bool write_gpio(uint16_t value, uint16_t mask); + %rename(_real_read_gpio) read_gpio; + bool read_gpio(uint16_t *value); + bool enable_gpio_streaming(int enable); +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(usrp2,source_32fc) + +usrp2_source_32fc_sptr +usrp2_make_source_32fc(const std::string ifc="eth0", + const std::string mac="") + throw (std::runtime_error); + +class usrp2_source_32fc : public usrp2_source_base +{ +protected: + usrp2_source_32fc(const std::string &ifc, const std::string &mac); + +public: + ~usrp2_source_32fc(); +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(usrp2,source_16sc) + +usrp2_source_16sc_sptr +usrp2_make_source_16sc(const std::string ifc="eth0", + const std::string mac="") + throw (std::runtime_error); + +class usrp2_source_16sc : public usrp2_source_base +{ +protected: + usrp2_source_16sc(const std::string &ifc, const std::string &mac); + +public: + ~usrp2_source_16sc(); +}; + +// ---------------------------------------------------------------- + +class usrp2_sink_base : public usrp2_base +{ +protected: + usrp2_sink_base() throw (std::runtime_error); + +public: + ~usrp2_sink_base(); + + bool set_gain(double gain); + %rename(_real_set_center_freq) set_center_freq; + bool set_lo_offset(double frequency); + bool set_center_freq(double frequency, usrp2::tune_result *r); + bool set_interp(int interp_factor); + bool set_scale_iq(int scale_i, int scale_q); + int interp(); + %rename(_real_default_tx_scale_iq) default_scale_iq; + void default_scale_iq(int interp, int *scale_i, int *scale_q); + %rename(_real_dac_rate) dac_rate; + bool dac_rate(long *rate); + double gain_min(); + double gain_max(); + double gain_db_per_step(); + double freq_min(); + double freq_max(); + %rename(_real_daughterboard_id) daughterboard_id; + bool daughterboard_id(int *dbid); + bool set_gpio_ddr(uint16_t value, uint16_t mask); + bool set_gpio_sels(std::string sels); + bool write_gpio(uint16_t value, uint16_t mask); + %rename(_real_read_gpio) read_gpio; + bool read_gpio(uint16_t *value); +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(usrp2,sink_32fc) + +usrp2_sink_32fc_sptr +usrp2_make_sink_32fc(const std::string ifc="eth0", + const std::string mac="") + throw (std::runtime_error); + +class usrp2_sink_32fc : public usrp2_sink_base +{ +protected: + usrp2_sink_32fc(const std::string &ifc, const std::string &mac); + +public: + ~usrp2_sink_32fc(); +}; + +// ---------------------------------------------------------------- + +GR_SWIG_BLOCK_MAGIC(usrp2,sink_16sc) + +usrp2_sink_16sc_sptr +usrp2_make_sink_16sc(const std::string ifc="eth0", + const std::string mac="") + throw (std::runtime_error); + +class usrp2_sink_16sc : public usrp2_sink_base +{ +protected: + usrp2_sink_16sc(const std::string &ifc, const std::string &mac); + +public: + ~usrp2_sink_16sc(); +}; + +// ---------------------------------------------------------------- + +// some utility functions to allow Python to deal with pointers +%{ + long *make_long_ptr() { return new long; } + long deref_long_ptr(long *l) { return *l; } + void free_long_ptr(long *l) { delete l; } + int *make_int_ptr() { return new int; } + int deref_int_ptr(int *l) { return *l; } + void free_int_ptr(int *l) { delete l; } + uint16_t *make_uint16_ptr() { return new uint16_t; } + int deref_uint16_ptr(uint16_t *l) { return *l; } + void free_uint16_ptr(uint16_t *l) { delete l; } +%} + +long *make_long_ptr(); +long deref_long_ptr(long *l); +void free_long_ptr(long *l); +int *make_int_ptr(); +int deref_int_ptr(int *l); +void free_int_ptr(int *l); +uint16_t *make_uint16_ptr(); +int deref_uint16_ptr(uint16_t *l); +void free_uint16_ptr(uint16_t *l); + +// create a more pythonic interface +%pythoncode %{ + +def __set_center_freq(self, freq): + tr = tune_result() + r = self._real_set_center_freq(freq, tr) + if r: + return tr + else: + return None + +def __fpga_master_clock_freq(self): + f = make_long_ptr(); + r = self._real_fpga_master_clock_freq(f) + if r: + result = deref_long_ptr(f) + else: + result = None + free_long_ptr(f) + return result + +def __adc_rate(self): + rate = make_long_ptr(); + r = self._real_adc_rate(rate) + if r: + result = deref_long_ptr(rate) + else: + result = None + free_long_ptr(rate) + return result + +def __dac_rate(self): + rate = make_long_ptr(); + r = self._real_dac_rate(rate) + if r: + result = deref_long_ptr(rate) + else: + result = None + free_long_ptr(rate) + return result + +def __gain_range(self): + return [self.gain_min(), + self.gain_max(), + self.gain_db_per_step()] + +# NOTE: USRP1 uses a length three tuple here (3rd value is 'freq step'), +# but it's not really useful. We let an index error happen here +# to identify code using it. +def __freq_range(self): + return [self.freq_min(), + self.freq_max()] + +def __daughterboard_id(self): + dbid = make_int_ptr() + r = self._real_daughterboard_id(dbid) + if r: + result = deref_int_ptr(dbid) + else: + result = None + free_int_ptr(dbid) + return result + +def __default_tx_scale_iq(self, interp): + scale_i = make_int_ptr() + scale_q = make_int_ptr() + self._real_default_tx_scale_iq(interp, scale_i, scale_q) + return (deref_int_ptr(scale_i), deref_int_ptr(scale_q)) + +def __read_gpio(self): + value = make_uint16_ptr() + r = self._real_read_gpio(value) + if r: + result = deref_uint16_ptr(value) + else: + result = None + free_uint16_ptr(value) + return result + + +usrp2_source_32fc_sptr.set_center_freq = __set_center_freq +usrp2_source_16sc_sptr.set_center_freq = __set_center_freq +usrp2_sink_32fc_sptr.set_center_freq = __set_center_freq +usrp2_sink_16sc_sptr.set_center_freq = __set_center_freq + +usrp2_source_32fc_sptr.fpga_master_clock_freq = __fpga_master_clock_freq +usrp2_source_16sc_sptr.fpga_master_clock_freq = __fpga_master_clock_freq +usrp2_sink_32fc_sptr.fpga_master_clock_freq = __fpga_master_clock_freq +usrp2_sink_16sc_sptr.fpga_master_clock_freq = __fpga_master_clock_freq + +usrp2_source_32fc_sptr.adc_rate = __adc_rate +usrp2_source_16sc_sptr.adc_rate = __adc_rate +usrp2_sink_32fc_sptr.dac_rate = __dac_rate +usrp2_sink_16sc_sptr.dac_rate = __dac_rate + +usrp2_source_32fc_sptr.gain_range = __gain_range +usrp2_source_16sc_sptr.gain_range = __gain_range +usrp2_sink_32fc_sptr.gain_range = __gain_range +usrp2_sink_16sc_sptr.gain_range = __gain_range + +usrp2_source_32fc_sptr.freq_range = __freq_range +usrp2_source_16sc_sptr.freq_range = __freq_range +usrp2_sink_32fc_sptr.freq_range = __freq_range +usrp2_sink_16sc_sptr.freq_range = __freq_range + +usrp2_source_32fc_sptr.daughterboard_id = __daughterboard_id +usrp2_source_16sc_sptr.daughterboard_id = __daughterboard_id +usrp2_sink_32fc_sptr.daughterboard_id = __daughterboard_id +usrp2_sink_16sc_sptr.daughterboard_id = __daughterboard_id + +usrp2_sink_32fc_sptr.default_scale_iq = __default_tx_scale_iq +usrp2_sink_16sc_sptr.default_scale_iq = __default_tx_scale_iq + +usrp2_source_32fc_sptr.read_gpio = __read_gpio +usrp2_source_16sc_sptr.read_gpio = __read_gpio +usrp2_sink_32fc_sptr.read_gpio = __read_gpio +usrp2_sink_16sc_sptr.read_gpio = __read_gpio + +%} diff --git a/gr-usrp2/src/usrp2_base.cc b/gr-usrp2/src/usrp2_base.cc new file mode 100644 index 00000000..bb995972 --- /dev/null +++ b/gr-usrp2/src/usrp2_base.cc @@ -0,0 +1,112 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +usrp2_base::usrp2_base(const char *name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature, + const std::string &ifc, + const std::string &mac) + throw (std::runtime_error) + : gr_sync_block(name, + input_signature, + output_signature), + d_u2(usrp2::usrp2::sptr()) +{ + d_u2 = usrp2::usrp2::make(ifc, mac); + if (!d_u2) + throw std::runtime_error("Unable to initialize USRP2!"); +} + +usrp2_base::~usrp2_base () +{ + // NOP +} + +std::string +usrp2_base::mac_addr() const +{ + return d_u2->mac_addr(); +} + +std::string +usrp2_base::interface_name() const +{ + return d_u2->interface_name(); +} + +bool +usrp2_base::fpga_master_clock_freq(long *freq) const +{ + return d_u2->fpga_master_clock_freq(freq); +} + +bool +usrp2_base::config_mimo(int flags) +{ + return d_u2->config_mimo(flags); +} + +bool +usrp2_base::sync_to_pps() +{ + return d_u2->sync_to_pps(); +} + +bool +usrp2_base::sync_every_pps(bool enable) +{ + return d_u2->sync_every_pps(enable); +} + +std::vector +usrp2_base::peek32(uint32_t addr, uint32_t words) +{ + return d_u2->peek32(addr, words); +} + +bool +usrp2_base::poke32(uint32_t addr, const std::vector &data) +{ + return d_u2->poke32(addr, data); +} + +bool +usrp2_base::start() +{ + // Default implementation is NOP + return true; +} + +bool +usrp2_base::stop() +{ + // Default implementation is NOP + return true; +} diff --git a/gr-usrp2/src/usrp2_base.h b/gr-usrp2/src/usrp2_base.h new file mode 100644 index 00000000..67a62ba1 --- /dev/null +++ b/gr-usrp2/src/usrp2_base.h @@ -0,0 +1,109 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifndef INCLUDED_USRP2_BASE_H +#define INCLUDED_USRP2_BASE_H + +#include +#include +#include + +// BIG ASS FIXME: get from lower layer MTU calculation +#define USRP2_MIN_RX_SAMPLES 371 + +/*! + * Base class for all USRP2 blocks + */ +class usrp2_base : public gr_sync_block +{ +protected: + usrp2_base(const char *name, + gr_io_signature_sptr input_signature, + gr_io_signature_sptr output_signature, + const std::string &ifc, + const std::string &mac) + throw (std::runtime_error); + + usrp2::usrp2::sptr d_u2; + +public: + ~usrp2_base(); + + /*! + * \brief Get USRP2 hardware MAC address + */ + std::string mac_addr() const; + + /*! + * \brief Get interface name used to communicat with USRP2 + */ + std::string interface_name() const; + + /*! + * \brief Get USRP2 master clock rate + */ + bool fpga_master_clock_freq(long *freq) const; + + /*! + * \brief MIMO configuration + */ + bool config_mimo(int flags); + + /*! + * \brief Set master time to 0 at next PPS rising edge + */ + bool sync_to_pps(); + + /*! + * Reset master time to 0 at every PPS edge + */ + bool sync_every_pps(bool enable); + + /*! + * \brief Read memory from Wishbone bus as words + */ + std::vector peek32(uint32_t addr, uint32_t words); + + /*! + * \brief Write memory to Wishbone bus as words + */ + bool poke32(uint32_t addr, const std::vector &data); + + /*! + * \brief Called by scheduler when starting flowgraph + */ + virtual bool start(); + + /*! + * \brief Called by scheduler when stopping flowgraph + */ + virtual bool stop(); + + /*! + * \brief Derived class must override this + */ + virtual int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) = 0; +}; + +#endif /* INCLUDED_USRP2_BASE_H */ diff --git a/gr-usrp2/src/usrp2_sink_16sc.cc b/gr-usrp2/src/usrp2_sink_16sc.cc new file mode 100644 index 00000000..96e6b174 --- /dev/null +++ b/gr-usrp2/src/usrp2_sink_16sc.cc @@ -0,0 +1,73 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +usrp2_sink_16sc_sptr +usrp2_make_sink_16sc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) +{ + return gnuradio::get_initial_sptr(new usrp2_sink_16sc(ifc, mac_addr)); +} + +usrp2_sink_16sc::usrp2_sink_16sc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) + : usrp2_sink_base("usrp2_sink_16sc", + gr_make_io_signature(1, 1, sizeof(std::complex)), + ifc, mac_addr) +{ + // NOP +} + +usrp2_sink_16sc::~usrp2_sink_16sc() +{ + // NOP +} + +int +usrp2_sink_16sc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + std::complex *in = (std::complex *)input_items[0]; + + usrp2::tx_metadata metadata; + metadata.timestamp = -1; + metadata.send_now = 1; + metadata.start_of_burst = 1; + + bool ok = d_u2->tx_16sc(0, // FIXME: someday, streams will have channel numbers + in, noutput_items, &metadata); + if (!ok){ + std::cerr << "usrp2_sink_16sc: tx_16sc failed" << std::endl; + return -1; // say we're done + } + + return noutput_items; +} diff --git a/gr-usrp2/src/usrp2_sink_16sc.h b/gr-usrp2/src/usrp2_sink_16sc.h new file mode 100644 index 00000000..faacc447 --- /dev/null +++ b/gr-usrp2/src/usrp2_sink_16sc.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_USRP2_SINK_16SC_H +#define INCLUDED_USRP2_SINK_16SC_H + +#include + +class usrp2_sink_16sc; +typedef boost::shared_ptr usrp2_sink_16sc_sptr; + +usrp2_sink_16sc_sptr +usrp2_make_sink_16sc(const std::string &ifc="eth0", + const std::string &mac="") + throw (std::runtime_error); + +/*! + * \ingroup sink_blk + * \ingroup usrp2 + */ +class usrp2_sink_16sc : public usrp2_sink_base +{ +private: + friend usrp2_sink_16sc_sptr + usrp2_make_sink_16sc(const std::string &ifc, + const std::string &mac) + throw (std::runtime_error); + +protected: + usrp2_sink_16sc(const std::string &ifc, const std::string &mac) + throw (std::runtime_error); + +public: + ~usrp2_sink_16sc(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_USRP2_SINK_16SC_H */ diff --git a/gr-usrp2/src/usrp2_sink_32fc.cc b/gr-usrp2/src/usrp2_sink_32fc.cc new file mode 100644 index 00000000..6cfff0d7 --- /dev/null +++ b/gr-usrp2/src/usrp2_sink_32fc.cc @@ -0,0 +1,73 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +usrp2_sink_32fc_sptr +usrp2_make_sink_32fc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) +{ + return gnuradio::get_initial_sptr(new usrp2_sink_32fc(ifc, mac_addr)); +} + +usrp2_sink_32fc::usrp2_sink_32fc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) + : usrp2_sink_base("usrp2_sink_32fc", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + ifc, mac_addr) +{ + // NOP +} + +usrp2_sink_32fc::~usrp2_sink_32fc() +{ + // NOP +} + +int +usrp2_sink_32fc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *in = (gr_complex *)input_items[0]; + + usrp2::tx_metadata metadata; + metadata.timestamp = -1; + metadata.send_now = 1; + metadata.start_of_burst = 1; + + bool ok = d_u2->tx_32fc(0, // FIXME: someday, streams will have channel numbers + in, noutput_items, &metadata); + if (!ok){ + std::cerr << "usrp2_sink_32fc: tx_32fc failed" << std::endl; + return -1; // say we're done + } + + return noutput_items; +} diff --git a/gr-usrp2/src/usrp2_sink_32fc.h b/gr-usrp2/src/usrp2_sink_32fc.h new file mode 100644 index 00000000..b63f9687 --- /dev/null +++ b/gr-usrp2/src/usrp2_sink_32fc.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_USRP2_SINK_32FC_H +#define INCLUDED_USRP2_SINK_32FC_H + +#include + +class usrp2_sink_32fc; +typedef boost::shared_ptr usrp2_sink_32fc_sptr; + +usrp2_sink_32fc_sptr +usrp2_make_sink_32fc(const std::string &ifc="eth0", + const std::string &mac="") + throw (std::runtime_error); + +/*! + * \ingroup sink_blk + * \ingroup usrp2 + */ +class usrp2_sink_32fc : public usrp2_sink_base +{ +private: + friend usrp2_sink_32fc_sptr + usrp2_make_sink_32fc(const std::string &ifc, + const std::string &mac) + throw (std::runtime_error); + +protected: + usrp2_sink_32fc(const std::string &ifc, const std::string &mac) + throw (std::runtime_error); + +public: + ~usrp2_sink_32fc(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_USRP2_SINK_32FC_H */ diff --git a/gr-usrp2/src/usrp2_sink_base.cc b/gr-usrp2/src/usrp2_sink_base.cc new file mode 100644 index 00000000..4579d165 --- /dev/null +++ b/gr-usrp2/src/usrp2_sink_base.cc @@ -0,0 +1,151 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +usrp2_sink_base::usrp2_sink_base(const char *name, + gr_io_signature_sptr input_signature, + const std::string &ifc, + const std::string &mac) + throw (std::runtime_error) + : usrp2_base(name, + input_signature, + gr_make_io_signature(0, 0, 0), + ifc, mac) +{ + // NOP +} + +usrp2_sink_base::~usrp2_sink_base () +{ + // NOP +} + +bool +usrp2_sink_base::set_gain(double gain) +{ + return d_u2->set_tx_gain(gain); +} + +bool +usrp2_sink_base::set_lo_offset(double frequency) +{ + return d_u2->set_tx_lo_offset(frequency); +} + +bool +usrp2_sink_base::set_center_freq(double frequency, usrp2::tune_result *tr) +{ + return d_u2->set_tx_center_freq(frequency, tr); +} + +bool +usrp2_sink_base::set_interp(int interp_factor) +{ + return d_u2->set_tx_interp(interp_factor); +} + +void +usrp2_sink_base::default_scale_iq(int interp_factor, int *scale_i, int *scale_q) +{ + return d_u2->default_tx_scale_iq(interp_factor, scale_i, scale_q); +} + +bool +usrp2_sink_base::set_scale_iq(int scale_i, int scale_q) +{ + return d_u2->set_tx_scale_iq(scale_i, scale_q); +} + +int +usrp2_sink_base::interp() +{ + return d_u2->tx_interp(); +} + +bool +usrp2_sink_base::dac_rate(long *rate) +{ + return d_u2->dac_rate(rate); +} + +double +usrp2_sink_base::gain_min() +{ + return d_u2->tx_gain_min(); +} + +double +usrp2_sink_base::gain_max() +{ + return d_u2->tx_gain_max(); +} + +double +usrp2_sink_base::gain_db_per_step() +{ + return d_u2->tx_gain_db_per_step(); +} + +double +usrp2_sink_base::freq_min() +{ + return d_u2->tx_freq_min(); +} + +double +usrp2_sink_base::freq_max() +{ + return d_u2->tx_freq_max(); +} + +bool +usrp2_sink_base::daughterboard_id(int *dbid) +{ + return d_u2->tx_daughterboard_id(dbid); +} + +bool usrp2_sink_base::set_gpio_ddr(uint16_t value, uint16_t mask) +{ + return d_u2->set_gpio_ddr(usrp2::GPIO_TX_BANK, value, mask); +} + +bool usrp2_sink_base::set_gpio_sels(std::string sels) +{ + return d_u2->set_gpio_sels(usrp2::GPIO_TX_BANK, sels); +} + +bool usrp2_sink_base::write_gpio(uint16_t value, uint16_t mask) +{ + return d_u2->write_gpio(usrp2::GPIO_TX_BANK, value, mask); +} + +bool usrp2_sink_base::read_gpio(uint16_t *value) +{ + return d_u2->read_gpio(usrp2::GPIO_TX_BANK, value); +} diff --git a/gr-usrp2/src/usrp2_sink_base.h b/gr-usrp2/src/usrp2_sink_base.h new file mode 100644 index 00000000..f973e805 --- /dev/null +++ b/gr-usrp2/src/usrp2_sink_base.h @@ -0,0 +1,139 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_USRP2_SINK_BASE_H +#define INCLUDED_USRP2_SINK_BASE_H + +#include + +/*! + * Base class for all USRP2 transmit blocks + */ +class usrp2_sink_base : public usrp2_base +{ +protected: + usrp2_sink_base(const char *name, + gr_io_signature_sptr input_signature, + const std::string &ifc, + const std::string &mac) + throw (std::runtime_error); + +public: + ~usrp2_sink_base(); + + /*! + * \brief Set transmitter gain + */ + bool set_gain(double gain); + + /*! + * \brief Set transmitter LO offset frequency + */ + bool set_lo_offset(double frequency); + + /*! + * \brief Set transmitter center frequency + */ + bool set_center_freq(double frequency, usrp2::tune_result *tr); + + /*! + * \brief Set transmit interpolation rate + */ + bool set_interp(int interp_factor); + + /*! + * \brief Calculate default scale_iq for given interpolation factor + */ + void default_scale_iq(int interpolation_factor, int *scale_i, int *scale_q); + + /*! + * \brief Set transmit IQ scale factors + */ + bool set_scale_iq(int scale_i, int scale_q); + + /*! + * \brief Get transmit interpolation rate + */ + int interp(); + + /*! + * \brief Get DAC sample rate in Hz + */ + bool dac_rate(long *rate); + + /*! + * \brief Returns minimum Tx gain + */ + double gain_min(); + + /*! + * \brief Returns maximum Tx gain + */ + double gain_max(); + + /*! + * \brief Returns Tx gain db_per_step + */ + double gain_db_per_step(); + + /*! + * \brief Returns minimum Tx center frequency + */ + double freq_min(); + + /*! + * \brief Returns maximum Tx center frequency + */ + double freq_max(); + + /*! + * \brief Get Tx daughterboard ID + * + * \param[out] dbid returns the daughterboard id. + * + * daughterboard id >= 0 if successful, -1 if no daugherboard installed, + * -2 if invalid EEPROM on daughterboard. + */ + bool daughterboard_id(int *dbid); + + /*! + * \brief Set daughterboard GPIO data direction register. + */ + bool set_gpio_ddr(uint16_t value, uint16_t mask); + + /*! + * \brief Set daughterboard GPIO output selection register. + */ + bool set_gpio_sels(std::string sels); + + /*! + * \brief Set daughterboard GPIO pin values. + */ + bool write_gpio(uint16_t value, uint16_t mask); + + /*! + * \brief Read daughterboard GPIO pin values + */ + bool read_gpio(uint16_t *value); +}; + +#endif /* INCLUDED_USRP2_SINK_BASE_H */ diff --git a/gr-usrp2/src/usrp2_source_16sc.cc b/gr-usrp2/src/usrp2_source_16sc.cc new file mode 100644 index 00000000..33114b51 --- /dev/null +++ b/gr-usrp2/src/usrp2_source_16sc.cc @@ -0,0 +1,69 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +usrp2_source_16sc_sptr +usrp2_make_source_16sc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) +{ + return gnuradio::get_initial_sptr(new usrp2_source_16sc(ifc, mac_addr)); +} + +usrp2_source_16sc::usrp2_source_16sc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) + : usrp2_source_base("usrp2_source_16sc", + gr_make_io_signature(1, 1, sizeof(std::complex)), + ifc, mac_addr) +{ + set_output_multiple(USRP2_MIN_RX_SAMPLES); +} + +usrp2_source_16sc::~usrp2_source_16sc() +{ + // NOP +} + +int +usrp2_source_16sc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + std::complex *out = (std::complex *)output_items[0]; + + rx_16sc_handler::sptr handler = rx_16sc_handler::make(noutput_items, USRP2_MIN_RX_SAMPLES, out); + + bool ok = d_u2->rx_samples(0, handler.get()); // FIXME: channel number instead of 0 + if (!ok){ + std::cerr << "usrp2::rx_samples() failed" << std::endl; + return -1; // say we're done + } + + return handler->nsamples(); +} diff --git a/gr-usrp2/src/usrp2_source_16sc.h b/gr-usrp2/src/usrp2_source_16sc.h new file mode 100644 index 00000000..d5a86be7 --- /dev/null +++ b/gr-usrp2/src/usrp2_source_16sc.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_USRP2_SOURCE_16SC_H +#define INCLUDED_USRP2_SOURCE_16SC_H + +#include + +class usrp2_source_16sc; +typedef boost::shared_ptr usrp2_source_16sc_sptr; + +usrp2_source_16sc_sptr +usrp2_make_source_16sc(const std::string &ifc="eth0", + const std::string &mac="") + throw (std::runtime_error); + +/*! + * \ingroup source_blk + * \ingroup usrp2 + */ +class usrp2_source_16sc : public usrp2_source_base +{ +private: + friend usrp2_source_16sc_sptr + usrp2_make_source_16sc(const std::string &ifc, + const std::string &mac) throw (std::runtime_error); + +protected: + usrp2_source_16sc(const std::string &ifc, const std::string &mac) throw (std::runtime_error); + +public: + ~usrp2_source_16sc(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_USRP2_SOURCE_16SC_H */ diff --git a/gr-usrp2/src/usrp2_source_32fc.cc b/gr-usrp2/src/usrp2_source_32fc.cc new file mode 100644 index 00000000..89b4bea0 --- /dev/null +++ b/gr-usrp2/src/usrp2_source_32fc.cc @@ -0,0 +1,69 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +usrp2_source_32fc_sptr +usrp2_make_source_32fc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) +{ + return gnuradio::get_initial_sptr(new usrp2_source_32fc(ifc, mac_addr)); +} + +usrp2_source_32fc::usrp2_source_32fc(const std::string &ifc, const std::string &mac_addr) + throw (std::runtime_error) + : usrp2_source_base("usrp2_source_32fc", + gr_make_io_signature(1, 1, sizeof(gr_complex)), + ifc, mac_addr) +{ + set_output_multiple(USRP2_MIN_RX_SAMPLES); +} + +usrp2_source_32fc::~usrp2_source_32fc() +{ + // NOP +} + +int +usrp2_source_32fc::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + gr_complex *out = (gr_complex *)output_items[0]; + + rx_32fc_handler::sptr handler = rx_32fc_handler::make(noutput_items, USRP2_MIN_RX_SAMPLES, out); + + bool ok = d_u2->rx_samples(0, handler.get()); // FIXME: channel number instead of 0 + if (!ok){ + std::cerr << "usrp2::rx_samples() failed" << std::endl; + return -1; // say we're done + } + + return handler->nsamples(); +} diff --git a/gr-usrp2/src/usrp2_source_32fc.h b/gr-usrp2/src/usrp2_source_32fc.h new file mode 100644 index 00000000..041416de --- /dev/null +++ b/gr-usrp2/src/usrp2_source_32fc.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_USRP2_SOURCE_32FC_H +#define INCLUDED_USRP2_SOURCE_32FC_H + +#include + +class usrp2_source_32fc; +typedef boost::shared_ptr usrp2_source_32fc_sptr; + +usrp2_source_32fc_sptr +usrp2_make_source_32fc(const std::string &ifc="eth0", + const std::string &mac="") + throw (std::runtime_error); + +/*! + * \ingroup source_blk + * \ingroup usrp2 + */ +class usrp2_source_32fc : public usrp2_source_base +{ +private: + friend usrp2_source_32fc_sptr + usrp2_make_source_32fc(const std::string &ifc, + const std::string &mac) throw (std::runtime_error); + +protected: + usrp2_source_32fc(const std::string &ifc, const std::string &mac) throw (std::runtime_error); + +public: + ~usrp2_source_32fc(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_USRP2_SOURCE_32FC_H */ diff --git a/gr-usrp2/src/usrp2_source_base.cc b/gr-usrp2/src/usrp2_source_base.cc new file mode 100644 index 00000000..0ad7008a --- /dev/null +++ b/gr-usrp2/src/usrp2_source_base.cc @@ -0,0 +1,179 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +usrp2_source_base::usrp2_source_base(const char *name, + gr_io_signature_sptr output_signature, + const std::string &ifc, + const std::string &mac) + throw (std::runtime_error) + : usrp2_base(name, + gr_make_io_signature(0, 0, 0), + output_signature, + ifc, mac) +{ + // NOP +} + +usrp2_source_base::~usrp2_source_base () +{ + // NOP +} + +bool +usrp2_source_base::set_gain(double gain) +{ + return d_u2->set_rx_gain(gain); +} + +bool +usrp2_source_base::set_lo_offset(double frequency) +{ + return d_u2->set_rx_lo_offset(frequency); +} + +bool +usrp2_source_base::set_center_freq(double frequency, usrp2::tune_result *tr) +{ + return d_u2->set_rx_center_freq(frequency, tr); +} + +bool +usrp2_source_base::set_decim(int decimation_factor) +{ + return d_u2->set_rx_decim(decimation_factor); +} + +bool +usrp2_source_base::set_scale_iq(int scale_i, int scale_q) +{ + return d_u2->set_rx_scale_iq(scale_i, scale_q); +} + +int +usrp2_source_base::decim() +{ + return d_u2->rx_decim(); +} + +bool +usrp2_source_base::adc_rate(long *rate) +{ + return d_u2->adc_rate(rate); +} + +double +usrp2_source_base::gain_min() +{ + return d_u2->rx_gain_min(); +} + +double +usrp2_source_base::gain_max() +{ + return d_u2->rx_gain_max(); +} + +double +usrp2_source_base::gain_db_per_step() +{ + return d_u2->rx_gain_db_per_step(); +} + +double +usrp2_source_base::freq_min() +{ + return d_u2->rx_freq_min(); +} + +double +usrp2_source_base::freq_max() +{ + return d_u2->rx_freq_max(); +} + +bool +usrp2_source_base::daughterboard_id(int *dbid) +{ + return d_u2->rx_daughterboard_id(dbid); +} + +unsigned int +usrp2_source_base::overruns() +{ + return d_u2->rx_overruns(); +} + +unsigned int +usrp2_source_base::missing() +{ + return d_u2->rx_missing(); +} + +bool +usrp2_source_base::start() +{ + return d_u2->start_rx_streaming(0); // FIXME: someday sources will have channel #s +} + +bool +usrp2_source_base::stop() +{ + return d_u2->stop_rx_streaming(0); // FIXME: someday sources will have channel #s +} + +bool +usrp2_source_base::set_gpio_ddr(uint16_t value, uint16_t mask) +{ + return d_u2->set_gpio_ddr(usrp2::GPIO_RX_BANK, value, mask); +} + +bool +usrp2_source_base::set_gpio_sels(std::string sels) +{ + return d_u2->set_gpio_sels(usrp2::GPIO_RX_BANK, sels); +} + +bool +usrp2_source_base::write_gpio(uint16_t value, uint16_t mask) +{ + return d_u2->write_gpio(usrp2::GPIO_RX_BANK, value, mask); +} + +bool +usrp2_source_base::read_gpio(uint16_t *value) +{ + return d_u2->read_gpio(usrp2::GPIO_RX_BANK, value); +} + +bool +usrp2_source_base::enable_gpio_streaming(int enable) +{ + return d_u2->enable_gpio_streaming(usrp2::GPIO_RX_BANK, enable); +} diff --git a/gr-usrp2/src/usrp2_source_base.h b/gr-usrp2/src/usrp2_source_base.h new file mode 100644 index 00000000..2e2d51fc --- /dev/null +++ b/gr-usrp2/src/usrp2_source_base.h @@ -0,0 +1,159 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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. + */ + +#ifndef INCLUDED_USRP2_SOURCE_BASE_H +#define INCLUDED_USRP2_SOURCE_BASE_H + +#include + +/*! + * Base class for all USRP2 source blocks + */ +class usrp2_source_base : public usrp2_base +{ +protected: + usrp2_source_base(const char *name, + gr_io_signature_sptr output_signature, + const std::string &ifc, + const std::string &mac) + throw (std::runtime_error); + +public: + ~usrp2_source_base(); + + /*! + * \brief Set receiver gain + */ + bool set_gain(double gain); + + /*! + * \brief Set receive LO offset frequency + */ + bool set_lo_offset(double frequency); + + /*! + * \brief Set receiver center frequency + */ + bool set_center_freq(double frequency, usrp2::tune_result *tr); + + /*! + * \brief Set receive decimation rate + */ + bool set_decim(int decimation_factor); + + /*! + * \brief Set receive IQ scale factors + */ + bool set_scale_iq(int scale_i, int scale_q); + + /*! + * \brief Get receive decimation rate + */ + int decim(); + + /*! + * \brief Get the ADC sample rate + */ + bool adc_rate(long *rate); + + /*! + * \brief Returns minimum Rx gain + */ + double gain_min(); + + /*! + * \brief Returns maximum Rx gain + */ + double gain_max(); + + /*! + * \brief Returns Rx gain db_per_step + */ + double gain_db_per_step(); + + /*! + * \brief Returns minimum Rx center frequency + */ + double freq_min(); + + /*! + * \brief Returns maximum Rx center frequency + */ + double freq_max(); + + /*! + * \brief Get Rx daughterboard ID + * + * \param[out] dbid returns the daughterboard id. + * + * daughterboard id >= 0 if successful, -1 if no daugherboard installed, + * -2 if invalid EEPROM on daughterboard. + */ + bool daughterboard_id(int *dbid); + + /*! + * \brief Returns number of receiver overruns + */ + unsigned int overruns(); + + /*! + * \brief Returns number of missing sequence numbers + */ + unsigned int missing(); + + /*! + * \brief Called by scheduler when starting flowgraph + */ + virtual bool start(); + + /*! + * \brief Called by scheduler when stopping flowgraph + */ + virtual bool stop(); + + /*! + * \brief Set daughterboard GPIO data direction register. + */ + bool set_gpio_ddr(uint16_t value, uint16_t mask); + + /*! + * \brief Set daughterboard GPIO output selection register. + */ + bool set_gpio_sels(std::string sels); + + /*! + * \brief Set daughterboard GPIO pin values. + */ + bool write_gpio(uint16_t value, uint16_t mask); + + /*! + * \brief Read daughterboard GPIO pin values + */ + bool read_gpio(uint16_t *value); + + /*! + * \brief Enable streaming GPIO in sample LSBs + */ + bool enable_gpio_streaming(int enable); +}; + +#endif /* INCLUDED_USRP2_SOURCE_BASE_H */ diff --git a/gr-utils/Makefile.am b/gr-utils/Makefile.am new file mode 100644 index 00000000..ec9cd029 --- /dev/null +++ b/gr-utils/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2007 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. +# + +SUBDIRS = src diff --git a/gr-utils/Makefile.in b/gr-utils/Makefile.in new file mode 100644 index 00000000..5f2f196a --- /dev/null +++ b/gr-utils/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-utils +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = src +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-utils/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-utils/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-utils/src/Makefile.am b/gr-utils/src/Makefile.am new file mode 100644 index 00000000..7a941211 --- /dev/null +++ b/gr-utils/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2007 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. +# + +SUBDIRS = lib python diff --git a/gr-utils/src/Makefile.in b/gr-utils/src/Makefile.in new file mode 100644 index 00000000..eb4c39ef --- /dev/null +++ b/gr-utils/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-utils/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = lib python +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-utils/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-utils/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-utils/src/lib/Makefile.am b/gr-utils/src/lib/Makefile.am new file mode 100644 index 00000000..67f9dad5 --- /dev/null +++ b/gr-utils/src/lib/Makefile.am @@ -0,0 +1,20 @@ +# +# Copyright 2007 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. +# diff --git a/gr-utils/src/lib/Makefile.in b/gr-utils/src/lib/Makefile.in new file mode 100644 index 00000000..2863cb4c --- /dev/null +++ b/gr-utils/src/lib/Makefile.in @@ -0,0 +1,737 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gr-utils/src/lib +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-utils/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-utils/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# +# Copyright 2007 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. +# +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-utils/src/python/Makefile.am b/gr-utils/src/python/Makefile.am new file mode 100644 index 00000000..b58faa9b --- /dev/null +++ b/gr-utils/src/python/Makefile.am @@ -0,0 +1,58 @@ +# +# Copyright 2007,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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + $(bin_SCRIPTS) \ + README.plot + +ourpythondir = $(grpythondir) + +ourpython_PYTHON = \ + plot_data.py + +bin_SCRIPTS = \ + gr_plot_char.py \ + gr_plot_const.py \ + gr_plot_fft.py \ + gr_plot_fft_c.py \ + gr_plot_fft_f.py \ + gr_plot_psd.py \ + gr_plot_psd_c.py \ + gr_plot_psd_f.py \ + gr_plot_float.py \ + gr_plot_int.py \ + gr_plot_iq.py \ + gr_plot_short.py \ + lsusrp \ + usrp_fft.py \ + usrp_oscope.py \ + usrp_print_db.py \ + usrp_rx_cfile.py \ + usrp_rx_nogui.py \ + usrp_siggen.py \ + usrp_test_counting.py \ + usrp_test_loopback.py \ + usrp2_fft.py \ + usrp2_rx_cfile.py \ + usrp2_siggen.py \ + usrp2_siggen_gui.py diff --git a/gr-utils/src/python/Makefile.in b/gr-utils/src/python/Makefile.in new file mode 100644 index 00000000..d204d70f --- /dev/null +++ b/gr-utils/src/python/Makefile.in @@ -0,0 +1,970 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(ourpython_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gr-utils/src/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourpythondir)" +binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + $(bin_SCRIPTS) \ + README.plot + +ourpythondir = $(grpythondir) +ourpython_PYTHON = \ + plot_data.py + +bin_SCRIPTS = \ + gr_plot_char.py \ + gr_plot_const.py \ + gr_plot_fft.py \ + gr_plot_fft_c.py \ + gr_plot_fft_f.py \ + gr_plot_psd.py \ + gr_plot_psd_c.py \ + gr_plot_psd_f.py \ + gr_plot_float.py \ + gr_plot_int.py \ + gr_plot_iq.py \ + gr_plot_short.py \ + lsusrp \ + usrp_fft.py \ + usrp_oscope.py \ + usrp_print_db.py \ + usrp_rx_cfile.py \ + usrp_rx_nogui.py \ + usrp_siggen.py \ + usrp_test_counting.py \ + usrp_test_loopback.py \ + usrp2_fft.py \ + usrp2_rx_cfile.py \ + usrp2_siggen.py \ + usrp2_siggen_gui.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-utils/src/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-utils/src/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourpythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-ourpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: install-binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binSCRIPTS uninstall-ourpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-binSCRIPTS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-ourpythonPYTHON install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-binSCRIPTS uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-utils/src/python/README.plot b/gr-utils/src/python/README.plot new file mode 100644 index 00000000..0c4657ba --- /dev/null +++ b/gr-utils/src/python/README.plot @@ -0,0 +1,40 @@ +* gr_plot_*.py: +These are a collection of Python scripts to enable viewing and analysis of files produced by GNU Radio flow graphs. Most of them work off complex data produced by digital waveforms. + + +** gr_plot_float.py: +Takes a GNU Radio floating point binary file and displays the samples versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. + +By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples. + + + +** gr_plot_iq.py: +Takes a GNU Radio complex binary file and displays the I&Q data versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. + +By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples. + + + +** gr_plot_const.py: +Takes a GNU Radio complex binary file and displays the I&Q data versus time and the constellation plot (I vs. Q). You can set the block size to specify how many points to read in at a time and the start position in the file. + +By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples. + + + +** gr_plot_fft_c.py: +Takes a GNU Radio complex binary file and displays the I&Q data versus time as well as the frequency domain (FFT) plot. The y-axis values are plotted assuming volts as the amplitude of the I&Q streams and converted into dBm in the frequency domain (the 1/N power adjustment out of the FFT is performed internally). + +The script plots a certain block of data at a time, specified on the command line as -B or --block. This value defaults to 1000. The start position in the file can be set by specifying -s or --start and defaults to 0 (the start of the file). + +By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time and frequency axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples. + + + +** gr_plot_fft_f.py: +Takes a GNU Radio floating point binary file and displays the samples versus time as well as the frequency domain (FFT) plot. The y-axis values are plotted assuming volts as the amplitude of the I&Q streams and converted into dBm in the frequency domain (the 1/N power adjustment out of the FFT is performed internally). + +The script plots a certain block of data at a time, specified on the command line as -B or --block. This value defaults to 1000. The start position in the file can be set by specifying -s or --start and defaults to 0 (the start of the file). + +By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time and frequency axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples. diff --git a/gr-utils/src/python/gr_plot_char.py b/gr-utils/src/python/gr_plot_char.py new file mode 100755 index 00000000..87a323c9 --- /dev/null +++ b/gr-utils/src/python/gr_plot_char.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +from optparse import OptionParser +from gnuradio.plot_data import plot_data + +def main(): + usage="%prog: [options] input_filenames" + description = "Takes a GNU Radio byte/char binary file and displays the samples versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + + (options, args) = parser.parse_args () + if len(args) < 1: + parser.print_help() + raise SystemExit, 1 + filenames = args + + datatype=scipy.int8 + dc = plot_data(datatype, filenames, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gr-utils/src/python/gr_plot_const.py b/gr-utils/src/python/gr_plot_const.py new file mode 100755 index 00000000..35530995 --- /dev/null +++ b/gr-utils/src/python/gr_plot_const.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +try: + from pylab import * + from matplotlib.font_manager import fontManager, FontProperties +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +from optparse import OptionParser + +matplotlib.interactive(True) +matplotlib.use('TkAgg') + +class draw_constellation: + def __init__(self, filename, options): + self.hfile = open(filename, "r") + self.block_length = options.block + self.start = options.start + self.sample_rate = options.sample_rate + + self.datatype = scipy.complex64 + self.sizeof_data = self.datatype().nbytes # number of bytes per sample in file + + self.axis_font_size = 16 + self.label_font_size = 18 + self.title_font_size = 20 + + # Setup PLOT + self.fig = figure(1, figsize=(16, 9), facecolor='w') + rcParams['xtick.labelsize'] = self.axis_font_size + rcParams['ytick.labelsize'] = self.axis_font_size + + self.text_file = figtext(0.10, 0.95, ("File: %s" % filename), weight="heavy", size=16) + self.text_file_pos = figtext(0.10, 0.90, "File Position: ", weight="heavy", size=16) + self.text_block = figtext(0.40, 0.90, ("Block Size: %d" % self.block_length), + weight="heavy", size=16) + self.text_sr = figtext(0.60, 0.90, ("Sample Rate: %.2f" % self.sample_rate), + weight="heavy", size=16) + self.make_plots() + + self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) + self.button_left = Button(self.button_left_axes, "<") + self.button_left_callback = self.button_left.on_clicked(self.button_left_click) + + self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) + self.button_right = Button(self.button_right_axes, ">") + self.button_right_callback = self.button_right.on_clicked(self.button_right_click) + + self.xlim = self.sp_iq.get_xlim() + + self.manager = get_current_fig_manager() + connect('draw_event', self.zoom) + connect('key_press_event', self.click) + connect('button_press_event', self.mouse_button_callback) + show() + + def get_data(self): + self.text_file_pos.set_text("File Position: %d" % (self.hfile.tell()//self.sizeof_data)) + iq = scipy.fromfile(self.hfile, dtype=self.datatype, count=self.block_length) + #print "Read in %d items" % len(iq) + if(len(iq) == 0): + print "End of File" + else: + self.reals = [r.real for r in iq] + self.imags = [i.imag for i in iq] + + self.time = [i*(1/self.sample_rate) for i in range(len(self.reals))] + + def make_plots(self): + # if specified on the command-line, set file pointer + self.hfile.seek(self.sizeof_data*self.start, 1) + + self.get_data() + + # Subplot for real and imaginary parts of signal + self.sp_iq = self.fig.add_subplot(2,1,1, position=[0.075, 0.2, 0.4, 0.6]) + self.sp_iq.set_title(("I&Q"), fontsize=self.title_font_size, fontweight="bold") + self.sp_iq.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_iq.set_ylabel("Amplitude (V)", fontsize=self.label_font_size, fontweight="bold") + self.plot_iq = self.sp_iq.plot(self.time, self.reals, 'bo-', self.time, self.imags, 'ro-') + + # Subplot for constellation plot + self.sp_const = self.fig.add_subplot(2,2,1, position=[0.575, 0.2, 0.4, 0.6]) + self.sp_const.set_title(("Constellation"), fontsize=self.title_font_size, fontweight="bold") + self.sp_const.set_xlabel("Inphase", fontsize=self.label_font_size, fontweight="bold") + self.sp_const.set_ylabel("Qaudrature", fontsize=self.label_font_size, fontweight="bold") + self.plot_const = self.sp_const.plot(self.reals, self.imags, 'bo') + + # Add plots to mark current location of point between time and constellation plots + self.indx = 0 + self.plot_iq += self.sp_iq.plot([self.time[self.indx],], [self.reals[self.indx],], 'mo', ms=8) + self.plot_iq += self.sp_iq.plot([self.time[self.indx],], [self.imags[self.indx],], 'mo', ms=8) + self.plot_const += self.sp_const.plot([self.reals[self.indx],], [self.imags[self.indx],], 'mo', ms=12) + + # Adjust axis + self.sp_iq.axis([min(self.time), max(self.time), + 1.5*min([min(self.reals), min(self.imags)]), + 1.5*max([max(self.reals), max(self.imags)])]) + self.sp_const.axis([-2, 2, -2, 2]) + + draw() + + def update_plots(self): + self.plot_iq[0].set_data([self.time, self.reals]) + self.plot_iq[1].set_data([self.time, self.imags]) + self.sp_iq.axis([min(self.time), max(self.time), + 1.5*min([min(self.reals), min(self.imags)]), + 1.5*max([max(self.reals), max(self.imags)])]) + + self.plot_const[0].set_data([self.reals, self.imags]) + self.sp_const.axis([-2, 2, -2, 2]) + draw() + + def zoom(self, event): + newxlim = self.sp_iq.get_xlim() + if(newxlim.all() != self.xlim.all()): + self.xlim = newxlim + r = self.reals[int(ceil(self.xlim[0])) : int(ceil(self.xlim[1]))] + i = self.imags[int(ceil(self.xlim[0])) : int(ceil(self.xlim[1]))] + + self.plot_const[0].set_data(r, i) + self.sp_const.axis([-2, 2, -2, 2]) + self.manager.canvas.draw() + draw() + + def click(self, event): + forward_valid_keys = [" ", "down", "right"] + backward_valid_keys = ["up", "left"] + trace_forward_valid_keys = [">",] + trace_backward_valid_keys = ["<",] + + if(find(event.key, forward_valid_keys)): + self.step_forward() + + elif(find(event.key, backward_valid_keys)): + self.step_backward() + + elif(find(event.key, trace_forward_valid_keys)): + self.indx = min(self.indx+1, len(self.time)-1) + self.set_trace(self.indx) + + elif(find(event.key, trace_backward_valid_keys)): + self.indx = max(0, self.indx-1) + self.set_trace(self.indx) + + def button_left_click(self, event): + self.step_backward() + + def button_right_click(self, event): + self.step_forward() + + def step_forward(self): + self.get_data() + self.update_plots() + + def step_backward(self): + # Step back in file position + if(self.hfile.tell() >= 2*self.sizeof_data*self.block_length ): + self.hfile.seek(-2*self.sizeof_data*self.block_length, 1) + else: + self.hfile.seek(-self.hfile.tell(),1) + self.get_data() + self.update_plots() + + + def mouse_button_callback(self, event): + x, y = event.xdata, event.ydata + + if x is not None and y is not None: + if(event.inaxes == self.sp_iq): + self.indx = searchsorted(self.time, [x]) + self.set_trace(self.indx) + + + def set_trace(self, indx): + self.plot_iq[2].set_data(self.time[indx], self.reals[indx]) + self.plot_iq[3].set_data(self.time[indx], self.imags[indx]) + self.plot_const[1].set_data(self.reals[indx], self.imags[indx]) + draw() + + +def find(item_in, list_search): + try: + return list_search.index(item_in) != None + except ValueError: + return False + + +def main(): + usage="%prog: [options] input_filename" + description = "Takes a GNU Radio complex binary file and displays the I&Q data versus time and the constellation plot (I vs. Q). You can set the block size to specify how many points to read in at a time and the start position in the file. By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = draw_constellation(filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_fft.py b/gr-utils/src/python/gr_plot_fft.py new file mode 100755 index 00000000..59a3f286 --- /dev/null +++ b/gr-utils/src/python/gr_plot_fft.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import matplotlib + matplotlib.use('TkAgg') + matplotlib.interactive(True) +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +try: + import scipy + from scipy import fftpack +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +try: + from pylab import * +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +from optparse import OptionParser + +class gr_plot_fft: + def __init__(self, datatype, filename, options): + self.hfile = open(filename, "r") + self.block_length = options.block + self.start = options.start + self.sample_rate = options.sample_rate + + self.datatype = getattr(scipy, datatype) + self.sizeof_data = self.datatype().nbytes # number of bytes per sample in file + + self.axis_font_size = 16 + self.label_font_size = 18 + self.title_font_size = 20 + self.text_size = 22 + + # Setup PLOT + self.fig = figure(1, figsize=(16, 12), facecolor='w') + rcParams['xtick.labelsize'] = self.axis_font_size + rcParams['ytick.labelsize'] = self.axis_font_size + + self.text_file = figtext(0.10, 0.94, ("File: %s" % filename), weight="heavy", size=self.text_size) + self.text_file_pos = figtext(0.10, 0.88, "File Position: ", weight="heavy", size=self.text_size) + self.text_block = figtext(0.35, 0.88, ("Block Size: %d" % self.block_length), + weight="heavy", size=self.text_size) + self.text_sr = figtext(0.60, 0.88, ("Sample Rate: %.2f" % self.sample_rate), + weight="heavy", size=self.text_size) + self.make_plots() + + self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) + self.button_left = Button(self.button_left_axes, "<") + self.button_left_callback = self.button_left.on_clicked(self.button_left_click) + + self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) + self.button_right = Button(self.button_right_axes, ">") + self.button_right_callback = self.button_right.on_clicked(self.button_right_click) + + self.xlim = self.sp_iq.get_xlim() + + self.manager = get_current_fig_manager() + connect('draw_event', self.zoom) + connect('key_press_event', self.click) + show() + + def get_data(self): + self.position = self.hfile.tell()/self.sizeof_data + self.text_file_pos.set_text("File Position: %d" % (self.position)) + self.iq = scipy.fromfile(self.hfile, dtype=self.datatype, count=self.block_length) + #print "Read in %d items" % len(self.iq) + if(len(self.iq) == 0): + print "End of File" + else: + self.iq_fft = self.dofft(self.iq) + + tstep = 1.0 / self.sample_rate + self.time = [tstep*(self.position + i) for i in xrange(len(self.iq))] + + self.freq = self.calc_freq(self.time, self.sample_rate) + + def dofft(self, iq): + N = len(iq) + iq_fft = fftpack.fftshift(scipy.fft(iq)) # fft and shift axis + iq_fft = 20*scipy.log10(abs((iq_fft+1e-15)/N)) # convert to decibels, adjust power + # adding 1e-15 (-300 dB) to protect against value errors if an item in iq_fft is 0 + return iq_fft + + def calc_freq(self, time, sample_rate): + N = len(time) + Fs = 1.0 / (max(time) - min(time)) + Fn = 0.5 * sample_rate + freq = [-Fn + i*Fs for i in xrange(N)] + return freq + + def make_plots(self): + # if specified on the command-line, set file pointer + self.hfile.seek(self.sizeof_data*self.start, 1) + + # Subplot for real and imaginary parts of signal + self.sp_iq = self.fig.add_subplot(2,2,1, position=[0.075, 0.2, 0.4, 0.6]) + self.sp_iq.set_title(("I&Q"), fontsize=self.title_font_size, fontweight="bold") + self.sp_iq.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_iq.set_ylabel("Amplitude (V)", fontsize=self.label_font_size, fontweight="bold") + + # Subplot for FFT plot + self.sp_fft = self.fig.add_subplot(2,2,2, position=[0.575, 0.2, 0.4, 0.6]) + self.sp_fft.set_title(("FFT"), fontsize=self.title_font_size, fontweight="bold") + self.sp_fft.set_xlabel("Frequency (Hz)", fontsize=self.label_font_size, fontweight="bold") + self.sp_fft.set_ylabel("Power Spectrum (dBm)", fontsize=self.label_font_size, fontweight="bold") + + self.get_data() + + self.plot_iq = self.sp_iq.plot([], 'bo-') # make plot for reals + self.plot_iq += self.sp_iq.plot([], 'ro-') # make plot for imags + self.draw_time() # draw the plot + + self.plot_fft = self.sp_fft.plot([], 'bo-') # make plot for FFT + self.draw_fft() # draw the plot + + draw() + + def draw_time(self): + reals = self.iq.real + imags = self.iq.imag + self.plot_iq[0].set_data([self.time, reals]) + self.plot_iq[1].set_data([self.time, imags]) + self.sp_iq.set_xlim(min(self.time), max(self.time)) + self.sp_iq.set_ylim([1.5*min([min(reals), min(imags)]), + 1.5*max([max(reals), max(imags)])]) + + def draw_fft(self): + self.plot_fft[0].set_data([self.freq, self.iq_fft]) + self.sp_fft.set_xlim(min(self.freq), max(self.freq)) + self.sp_fft.set_ylim([min(self.iq_fft)-10, max(self.iq_fft)+10]) + + def update_plots(self): + self.draw_time() + self.draw_fft() + + self.xlim = self.sp_iq.get_xlim() + draw() + + def zoom(self, event): + newxlim = self.sp_iq.get_xlim() + if(newxlim.all() != self.xlim.all()): + self.xlim = newxlim + xmin = max(0, int(ceil(self.sample_rate*(self.xlim[0] - self.position)))) + xmax = min(int(ceil(self.sample_rate*(self.xlim[1] - self.position))), len(self.iq)) + + iq = self.iq[xmin : xmax] + time = self.time[xmin : xmax] + + iq_fft = self.dofft(iq) + freq = self.calc_freq(time, self.sample_rate) + + self.plot_fft[0].set_data(freq, iq_fft) + self.sp_fft.axis([min(freq), max(freq), + min(iq_fft)-10, max(iq_fft)+10]) + + draw() + + def click(self, event): + forward_valid_keys = [" ", "down", "right"] + backward_valid_keys = ["up", "left"] + + if(find(event.key, forward_valid_keys)): + self.step_forward() + + elif(find(event.key, backward_valid_keys)): + self.step_backward() + + def button_left_click(self, event): + self.step_backward() + + def button_right_click(self, event): + self.step_forward() + + def step_forward(self): + self.get_data() + self.update_plots() + + def step_backward(self): + # Step back in file position + if(self.hfile.tell() >= 2*self.sizeof_data*self.block_length ): + self.hfile.seek(-2*self.sizeof_data*self.block_length, 1) + else: + self.hfile.seek(-self.hfile.tell(),1) + self.get_data() + self.update_plots() + +def find(item_in, list_search): + try: + return list_search.index(item_in) != None + except ValueError: + return False + +def setup_options(): + usage="%prog: [options] input_filename" + description = "Takes a GNU Radio complex binary file and displays the I&Q data versus time as well as the frequency domain (FFT) plot. The y-axis values are plotted assuming volts as the amplitude of the I&Q streams and converted into dBm in the frequency domain (the 1/N power adjustment out of the FFT is performed internally). The script plots a certain block of data at a time, specified on the command line as -B or --block. This value defaults to 1000. The start position in the file can be set by specifying -s or --start and defaults to 0 (the start of the file). By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time and frequency axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-d", "--data-type", type="string", default="complex64", + help="Specify the data type (complex64, float32, (u)int32, (u)int16, (u)int8) [default=%default]") + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + return parser + +def main(): + parser = setup_options() + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = gr_plot_fft(options.data_type, filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_fft_c.py b/gr-utils/src/python/gr_plot_fft_c.py new file mode 100755 index 00000000..de59b36c --- /dev/null +++ b/gr-utils/src/python/gr_plot_fft_c.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +import gr_plot_fft + +def main(): + parser = gr_plot_fft.setup_options() + parser.remove_option("--data-type") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = gr_plot_fft.gr_plot_fft("complex64", filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_fft_f.py b/gr-utils/src/python/gr_plot_fft_f.py new file mode 100755 index 00000000..f50358f0 --- /dev/null +++ b/gr-utils/src/python/gr_plot_fft_f.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +import gr_plot_fft + +def main(): + parser = gr_plot_fft.setup_options() + parser.remove_option("--data-type") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = gr_plot_fft.gr_plot_fft("float32", filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_float.py b/gr-utils/src/python/gr_plot_float.py new file mode 100755 index 00000000..e5c22a31 --- /dev/null +++ b/gr-utils/src/python/gr_plot_float.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +from optparse import OptionParser +from gnuradio.plot_data import plot_data + +def main(): + usage="%prog: [options] input_filenames" + description = "Takes a GNU Radio floating point binary file and displays the samples versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + + (options, args) = parser.parse_args () + if len(args) < 1: + parser.print_help() + raise SystemExit, 1 + filenames = args + + datatype=scipy.float32 + dc = plot_data(datatype, filenames, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gr-utils/src/python/gr_plot_int.py b/gr-utils/src/python/gr_plot_int.py new file mode 100755 index 00000000..b44d4360 --- /dev/null +++ b/gr-utils/src/python/gr_plot_int.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +from optparse import OptionParser +from gnuradio.plot_data import plot_data + +def main(): + usage="%prog: [options] input_filenames" + description = "Takes a GNU Radio integer binary file and displays the samples versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + + (options, args) = parser.parse_args () + if len(args) < 1: + parser.print_help() + raise SystemExit, 1 + filenames = args + + datatype=scipy.int32 + dc = plot_data(datatype, filenames, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gr-utils/src/python/gr_plot_iq.py b/gr-utils/src/python/gr_plot_iq.py new file mode 100755 index 00000000..2a4142a8 --- /dev/null +++ b/gr-utils/src/python/gr_plot_iq.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +try: + from pylab import * +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +from optparse import OptionParser + +matplotlib.interactive(True) +matplotlib.use('TkAgg') + +class draw_fft: + def __init__(self, filename, options): + self.hfile = open(filename, "r") + self.block_length = options.block + self.start = options.start + self.sample_rate = options.sample_rate + + self.datatype = scipy.complex64 + self.sizeof_data = self.datatype().nbytes # number of bytes per sample in file + + self.axis_font_size = 16 + self.label_font_size = 18 + self.title_font_size = 20 + self.text_size = 22 + + # Setup PLOT + self.fig = figure(1, figsize=(16, 9), facecolor='w') + rcParams['xtick.labelsize'] = self.axis_font_size + rcParams['ytick.labelsize'] = self.axis_font_size + + self.text_file = figtext(0.10, 0.94, ("File: %s" % filename), weight="heavy", size=self.text_size) + self.text_file_pos = figtext(0.10, 0.88, "File Position: ", weight="heavy", size=self.text_size) + self.text_block = figtext(0.40, 0.88, ("Block Size: %d" % self.block_length), + weight="heavy", size=self.text_size) + self.text_sr = figtext(0.60, 0.88, ("Sample Rate: %.2f" % self.sample_rate), + weight="heavy", size=self.text_size) + self.make_plots() + + self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) + self.button_left = Button(self.button_left_axes, "<") + self.button_left_callback = self.button_left.on_clicked(self.button_left_click) + + self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) + self.button_right = Button(self.button_right_axes, ">") + self.button_right_callback = self.button_right.on_clicked(self.button_right_click) + + self.xlim = self.sp_iq.get_xlim() + + self.manager = get_current_fig_manager() + connect('key_press_event', self.click) + show() + + def get_data(self): + self.text_file_pos.set_text("File Position: %d" % (self.hfile.tell()//self.sizeof_data)) + self.iq = scipy.fromfile(self.hfile, dtype=self.datatype, count=self.block_length) + #print "Read in %d items" % len(self.iq) + if(len(self.iq) == 0): + print "End of File" + else: + self.reals = [r.real for r in self.iq] + self.imags = [i.imag for i in self.iq] + self.time = [i*(1/self.sample_rate) for i in range(len(self.reals))] + + def make_plots(self): + # if specified on the command-line, set file pointer + self.hfile.seek(self.sizeof_data*self.start, 1) + + self.get_data() + + # Subplot for real and imaginary parts of signal + self.sp_iq = self.fig.add_subplot(2,1,1, position=[0.075, 0.14, 0.85, 0.67]) + self.sp_iq.set_title(("I&Q"), fontsize=self.title_font_size, fontweight="bold") + self.sp_iq.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_iq.set_ylabel("Amplitude (V)", fontsize=self.label_font_size, fontweight="bold") + self.plot_iq = plot(self.time, self.reals, 'bo-', self.time, self.imags, 'ro-') + self.sp_iq.set_ylim([1.5*min([min(self.reals), min(self.imags)]), + 1.5*max([max(self.reals), max(self.imags)])]) + + draw() + + def update_plots(self): + self.plot_iq[0].set_data([self.time, self.reals]) + self.plot_iq[1].set_data([self.time, self.imags]) + self.sp_iq.set_ylim([1.5*min([min(self.reals), min(self.imags)]), + 1.5*max([max(self.reals), max(self.imags)])]) + draw() + + def click(self, event): + forward_valid_keys = [" ", "down", "right"] + backward_valid_keys = ["up", "left"] + + if(find(event.key, forward_valid_keys)): + self.step_forward() + + elif(find(event.key, backward_valid_keys)): + self.step_backward() + + def button_left_click(self, event): + self.step_backward() + + def button_right_click(self, event): + self.step_forward() + + def step_forward(self): + self.get_data() + self.update_plots() + + def step_backward(self): + # Step back in file position + if(self.hfile.tell() >= 2*self.sizeof_data*self.block_length ): + self.hfile.seek(-2*self.sizeof_data*self.block_length, 1) + else: + self.hfile.seek(-self.hfile.tell(),1) + self.get_data() + self.update_plots() + + +def find(item_in, list_search): + try: + return list_search.index(item_in) != None + except ValueError: + return False + +def main(): + usage="%prog: [options] input_filename" + description = "Takes a GNU Radio complex binary file and displays the I&Q data versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = draw_fft(filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_psd.py b/gr-utils/src/python/gr_plot_psd.py new file mode 100755 index 00000000..669d7b57 --- /dev/null +++ b/gr-utils/src/python/gr_plot_psd.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import matplotlib + matplotlib.use('TkAgg') + matplotlib.interactive(True) +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +try: + import scipy + from scipy import fftpack +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +try: + from pylab import * +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +from optparse import OptionParser +from scipy import log10 + +class gr_plot_psd: + def __init__(self, datatype, filename, options): + self.hfile = open(filename, "r") + self.block_length = options.block + self.start = options.start + self.sample_rate = options.sample_rate + self.psdfftsize = options.psd_size + self.specfftsize = options.spec_size + + self.dospec = options.enable_spec # if we want to plot the spectrogram + + self.datatype = getattr(scipy, datatype) #scipy.complex64 + self.sizeof_data = self.datatype().nbytes # number of bytes per sample in file + + self.axis_font_size = 16 + self.label_font_size = 18 + self.title_font_size = 20 + self.text_size = 22 + + # Setup PLOT + self.fig = figure(1, figsize=(16, 12), facecolor='w') + rcParams['xtick.labelsize'] = self.axis_font_size + rcParams['ytick.labelsize'] = self.axis_font_size + + self.text_file = figtext(0.10, 0.95, ("File: %s" % filename), weight="heavy", size=self.text_size) + self.text_file_pos = figtext(0.10, 0.92, "File Position: ", weight="heavy", size=self.text_size) + self.text_block = figtext(0.35, 0.92, ("Block Size: %d" % self.block_length), + weight="heavy", size=self.text_size) + self.text_sr = figtext(0.60, 0.915, ("Sample Rate: %.2f" % self.sample_rate), + weight="heavy", size=self.text_size) + self.make_plots() + + self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) + self.button_left = Button(self.button_left_axes, "<") + self.button_left_callback = self.button_left.on_clicked(self.button_left_click) + + self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) + self.button_right = Button(self.button_right_axes, ">") + self.button_right_callback = self.button_right.on_clicked(self.button_right_click) + + self.xlim = self.sp_iq.get_xlim() + + self.manager = get_current_fig_manager() + connect('draw_event', self.zoom) + connect('key_press_event', self.click) + show() + + def get_data(self): + self.position = self.hfile.tell()/self.sizeof_data + self.text_file_pos.set_text("File Position: %d" % self.position) + self.iq = scipy.fromfile(self.hfile, dtype=self.datatype, count=self.block_length) + #print "Read in %d items" % len(self.iq) + if(len(self.iq) == 0): + print "End of File" + else: + tstep = 1.0 / self.sample_rate + self.time = [tstep*(self.position + i) for i in xrange(len(self.iq))] + + self.iq_psd, self.freq = self.dopsd(self.iq) + + def dopsd(self, iq): + ''' Need to do this here and plot later so we can do the fftshift ''' + overlap = self.psdfftsize/4 + winfunc = scipy.blackman + psd,freq = self.sp_psd.psd(iq, self.psdfftsize, self.sample_rate, + window = lambda d: d*winfunc(self.psdfftsize), + noverlap = overlap, visible=False) + psd = 10.0*log10(abs(fftpack.fftshift(psd))) + return (psd, freq) + + def make_plots(self): + # if specified on the command-line, set file pointer + self.hfile.seek(self.sizeof_data*self.start, 1) + + iqdims = [[0.075, 0.2, 0.4, 0.6], [0.075, 0.55, 0.4, 0.3]] + psddims = [[0.575, 0.2, 0.4, 0.6], [0.575, 0.55, 0.4, 0.3]] + specdims = [0.2, 0.125, 0.6, 0.3] + + # Subplot for real and imaginary parts of signal + self.sp_iq = self.fig.add_subplot(2,2,1, position=iqdims[self.dospec]) + self.sp_iq.set_title(("I&Q"), fontsize=self.title_font_size, fontweight="bold") + self.sp_iq.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_iq.set_ylabel("Amplitude (V)", fontsize=self.label_font_size, fontweight="bold") + + # Subplot for PSD plot + self.sp_psd = self.fig.add_subplot(2,2,2, position=psddims[self.dospec]) + self.sp_psd.set_title(("PSD"), fontsize=self.title_font_size, fontweight="bold") + self.sp_psd.set_xlabel("Frequency (Hz)", fontsize=self.label_font_size, fontweight="bold") + self.sp_psd.set_ylabel("Power Spectrum (dBm)", fontsize=self.label_font_size, fontweight="bold") + + self.get_data() + + self.plot_iq = self.sp_iq.plot([], 'bo-') # make plot for reals + self.plot_iq += self.sp_iq.plot([], 'ro-') # make plot for imags + self.draw_time() # draw the plot + + self.plot_psd = self.sp_psd.plot([], 'b') # make plot for PSD + self.draw_psd() # draw the plot + + + if self.dospec: + # Subplot for spectrogram plot + self.sp_spec = self.fig.add_subplot(2,2,3, position=specdims) + self.sp_spec.set_title(("Spectrogram"), fontsize=self.title_font_size, fontweight="bold") + self.sp_spec.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_spec.set_ylabel("Frequency (Hz)", fontsize=self.label_font_size, fontweight="bold") + + self.draw_spec() + + draw() + + def draw_time(self): + reals = self.iq.real + imags = self.iq.imag + self.plot_iq[0].set_data([self.time, reals]) + self.plot_iq[1].set_data([self.time, imags]) + self.sp_iq.set_xlim(min(self.time), max(self.time)) + self.sp_iq.set_ylim([1.5*min([min(reals), min(imags)]), + 1.5*max([max(reals), max(imags)])]) + + def draw_psd(self): + self.plot_psd[0].set_data([self.freq, self.iq_psd]) + self.sp_psd.set_ylim([min(self.iq_psd)-10, max(self.iq_psd)+10]) + + def draw_spec(self): + overlap = self.specfftsize/4 + winfunc = scipy.blackman + self.sp_spec.clear() + self.sp_spec.specgram(self.iq, self.specfftsize, self.sample_rate, + window = lambda d: d*winfunc(self.specfftsize), + noverlap = overlap, xextent=[min(self.time), max(self.time)]) + + def update_plots(self): + self.draw_time() + self.draw_psd() + + if self.dospec: + self.draw_spec() + + self.xlim = self.sp_iq.get_xlim() # so zoom doesn't get called + draw() + + def zoom(self, event): + newxlim = self.sp_iq.get_xlim() + if(newxlim.all() != self.xlim.all()): + self.xlim = newxlim + xmin = max(0, int(ceil(self.sample_rate*(self.xlim[0] - self.position)))) + xmax = min(int(ceil(self.sample_rate*(self.xlim[1] - self.position))), len(self.iq)) + + iq = self.iq[xmin : xmax] + time = self.time[xmin : xmax] + + iq_psd, freq = self.dopsd(iq) + + self.plot_psd[0].set_data(freq, iq_psd) + self.sp_psd.axis([min(freq), max(freq), + min(iq_psd)-10, max(iq_psd)+10]) + + draw() + + def click(self, event): + forward_valid_keys = [" ", "down", "right"] + backward_valid_keys = ["up", "left"] + + if(find(event.key, forward_valid_keys)): + self.step_forward() + + elif(find(event.key, backward_valid_keys)): + self.step_backward() + + def button_left_click(self, event): + self.step_backward() + + def button_right_click(self, event): + self.step_forward() + + def step_forward(self): + self.get_data() + self.update_plots() + + def step_backward(self): + # Step back in file position + if(self.hfile.tell() >= 2*self.sizeof_data*self.block_length ): + self.hfile.seek(-2*self.sizeof_data*self.block_length, 1) + else: + self.hfile.seek(-self.hfile.tell(),1) + self.get_data() + self.update_plots() + +def find(item_in, list_search): + try: + return list_search.index(item_in) != None + except ValueError: + return False + +def setup_options(): + usage="%prog: [options] input_filename" + description = "Takes a GNU Radio binary file (with specified data type using --data-type) and displays the I&Q data versus time as well as the power spectral density (PSD) plot. The y-axis values are plotted assuming volts as the amplitude of the I&Q streams and converted into dBm in the frequency domain (the 1/N power adjustment out of the FFT is performed internally). The script plots a certain block of data at a time, specified on the command line as -B or --block. The start position in the file can be set by specifying -s or --start and defaults to 0 (the start of the file). By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time and frequency axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples. Finally, the size of the FFT to use for the PSD and spectrogram plots can be set independently with --psd-size and --spec-size, respectively. The spectrogram plot does not display by default and is turned on with -S or --enable-spec." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-d", "--data-type", type="string", default="complex64", + help="Specify the data type (complex64, float32, (u)int32, (u)int16, (u)int8) [default=%default]") + parser.add_option("-B", "--block", type="int", default=8192, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + parser.add_option("", "--psd-size", type="int", default=1024, + help="Set the size of the PSD FFT [default=%default]") + parser.add_option("", "--spec-size", type="int", default=256, + help="Set the size of the spectrogram FFT [default=%default]") + parser.add_option("-S", "--enable-spec", action="store_true", default=False, + help="Turn on plotting the spectrogram [default=%default]") + + return parser + +def main(): + parser = setup_options() + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = gr_plot_psd(options.data_type, filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_psd_c.py b/gr-utils/src/python/gr_plot_psd_c.py new file mode 100755 index 00000000..1edc04c2 --- /dev/null +++ b/gr-utils/src/python/gr_plot_psd_c.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 optparse import OptionParser +import gr_plot_psd + +# This is a wrapper program for gr_plot_psd specifically for complex data + +def main(): + parser = gr_plot_psd.setup_options() + parser.remove_option("--data-type") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = gr_plot_psd.gr_plot_psd("complex64", filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_psd_f.py b/gr-utils/src/python/gr_plot_psd_f.py new file mode 100755 index 00000000..bad6788c --- /dev/null +++ b/gr-utils/src/python/gr_plot_psd_f.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# +# Copyright 2008 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 optparse import OptionParser +import gr_plot_psd + +# This is a wrapper program for gr_plot_psd specifically for floating point data + +def main(): + parser = gr_plot_psd.setup_options() + parser.remove_option("--data-type") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + dc = gr_plot_psd.gr_plot_psd("float32", filename, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + + + diff --git a/gr-utils/src/python/gr_plot_short.py b/gr-utils/src/python/gr_plot_short.py new file mode 100755 index 00000000..3466e0b7 --- /dev/null +++ b/gr-utils/src/python/gr_plot_short.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +from optparse import OptionParser +from gnuradio.plot_data import plot_data + +def main(): + usage="%prog: [options] input_filenames" + description = "Takes a GNU Radio short integer binary file and displays the samples versus time. You can set the block size to specify how many points to read in at a time and the start position in the file. By default, the system assumes a sample rate of 1, so in time, each sample is plotted versus the sample number. To set a true time axis, set the sample rate (-R or --sample-rate) to the sample rate used when capturing the samples." + + parser = OptionParser(conflict_handler="resolve", usage=usage, description=description) + parser.add_option("-B", "--block", type="int", default=1000, + help="Specify the block size [default=%default]") + parser.add_option("-s", "--start", type="int", default=0, + help="Specify where to start in the file [default=%default]") + parser.add_option("-R", "--sample-rate", type="float", default=1.0, + help="Set the sampler rate of the data [default=%default]") + + (options, args) = parser.parse_args () + if len(args) < 1: + parser.print_help() + raise SystemExit, 1 + filenames = args + + datatype=scipy.int16 + dc = plot_data(datatype, filenames, options) + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + pass + diff --git a/gr-utils/src/python/lsusrp b/gr-utils/src/python/lsusrp new file mode 100755 index 00000000..d2eab33f --- /dev/null +++ b/gr-utils/src/python/lsusrp @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +MAX_USRPS = 8 + +from gnuradio import usrp +from optparse import OptionParser + +def disp_usrp(which, serial=None): + u_source = usrp.source_c(which=which) + u_sink = usrp.sink_c(which=which) + u_serial = u_source.serial_number() + + if serial is not None: + if serial != u_serial: + raise ValueError + + print "USRP", which, "serial number", u_source.serial_number() + subdev_A_rx = usrp.selected_subdev(u_source, (0,0)) + subdev_B_rx = usrp.selected_subdev(u_source, (1,0)) + subdev_A_tx = usrp.selected_subdev(u_sink, (0,0)) + subdev_B_tx = usrp.selected_subdev(u_sink, (1,0)) + print " RX d'board %s" % (subdev_A_rx.side_and_name(),) + print " RX d'board %s" % (subdev_B_rx.side_and_name(),) + print " TX d'board %s" % (subdev_A_tx.side_and_name(),) + print " TX d'board %s" % (subdev_B_tx.side_and_name(),) + +if __name__ == "__main__": + parser = OptionParser() + parser.add_option("-w", "--which", type="int", default=None, + help="select which USRP (0, 1, ...) default is all found", + metavar="NUM") + parser.add_option("-s", "--serial", default=None, + help="select USRP by serial number", + metavar="SER") + (options, args) = parser.parse_args() + if len(args) > 0: + print parser.print_help() + raise SystemExit, 1 + + if options.serial is not None and options.which is not None: + print "Use of --which or --serial is exclusive" + raise SystemExit, 1 + + if options.which is not None: + try: + disp_usrp(options.which) + except: + print "USRP", options.which, "not found." + else: + for n in range(MAX_USRPS): + try: + disp_usrp(n, options.serial) + except: + pass + diff --git a/gr-utils/src/python/plot_data.py b/gr-utils/src/python/plot_data.py new file mode 100644 index 00000000..7c79e171 --- /dev/null +++ b/gr-utils/src/python/plot_data.py @@ -0,0 +1,168 @@ +# +# Copyright 2007,2008 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. +# + +try: + import scipy +except ImportError: + print "Please install SciPy to run this script (http://www.scipy.org/)" + raise SystemExit, 1 + +try: + from pylab import * +except ImportError: + print "Please install Matplotlib to run this script (http://matplotlib.sourceforge.net/)" + raise SystemExit, 1 + +from optparse import OptionParser + +matplotlib.interactive(True) +matplotlib.use('TkAgg') + +class plot_data: + def __init__(self, datatype, filenames, options): + self.hfile = list() + self.legend_text = list() + for f in filenames: + self.hfile.append(open(f, "r")) + self.legend_text.append(f) + + self.block_length = options.block + self.start = options.start + self.sample_rate = options.sample_rate + + self.datatype = datatype + self.sizeof_data = datatype().nbytes # number of bytes per sample in file + + self.axis_font_size = 16 + self.label_font_size = 18 + self.title_font_size = 20 + self.text_size = 22 + + # Setup PLOT + self.fig = figure(1, figsize=(16, 9), facecolor='w') + rcParams['xtick.labelsize'] = self.axis_font_size + rcParams['ytick.labelsize'] = self.axis_font_size + + self.text_file_pos = figtext(0.10, 0.88, "File Position: ", weight="heavy", size=self.text_size) + self.text_block = figtext(0.40, 0.88, ("Block Size: %d" % self.block_length), + weight="heavy", size=self.text_size) + self.text_sr = figtext(0.60, 0.88, ("Sample Rate: %.2f" % self.sample_rate), + weight="heavy", size=self.text_size) + self.make_plots() + + self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) + self.button_left = Button(self.button_left_axes, "<") + self.button_left_callback = self.button_left.on_clicked(self.button_left_click) + + self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) + self.button_right = Button(self.button_right_axes, ">") + self.button_right_callback = self.button_right.on_clicked(self.button_right_click) + + self.xlim = self.sp_f.get_xlim() + + self.manager = get_current_fig_manager() + connect('key_press_event', self.click) + show() + + def get_data(self, hfile): + self.text_file_pos.set_text("File Position: %d" % (hfile.tell()//self.sizeof_data)) + f = scipy.fromfile(hfile, dtype=self.datatype, count=self.block_length) + #print "Read in %d items" % len(self.f) + if(len(f) == 0): + print "End of File" + else: + self.f = f + self.time = [i*(1/self.sample_rate) for i in range(len(self.f))] + + def make_plots(self): + self.sp_f = self.fig.add_subplot(2,1,1, position=[0.075, 0.2, 0.875, 0.6]) + self.sp_f.set_title(("Amplitude"), fontsize=self.title_font_size, fontweight="bold") + self.sp_f.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") + self.sp_f.set_ylabel("Amplitude (V)", fontsize=self.label_font_size, fontweight="bold") + self.plot_f = list() + + maxval = -1e12 + minval = 1e12 + + for hf in self.hfile: + # if specified on the command-line, set file pointer + hf.seek(self.sizeof_data*self.start, 1) + + self.get_data(hf) + + # Subplot for real and imaginary parts of signal + self.plot_f += plot(self.time, self.f, 'o-') + maxval = max(maxval, max(self.f)) + minval = min(minval, min(self.f)) + + self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) + + self.leg = self.sp_f.legend(self.plot_f, self.legend_text) + + draw() + + def update_plots(self): + maxval = -1e12 + minval = 1e12 + for hf,p in zip(self.hfile,self.plot_f): + self.get_data(hf) + p.set_data([self.time, self.f]) + maxval = max(maxval, max(self.f)) + minval = min(minval, min(self.f)) + + self.sp_f.set_ylim([1.5*minval, 1.5*maxval]) + + draw() + + def click(self, event): + forward_valid_keys = [" ", "down", "right"] + backward_valid_keys = ["up", "left"] + + if(find(event.key, forward_valid_keys)): + self.step_forward() + + elif(find(event.key, backward_valid_keys)): + self.step_backward() + + def button_left_click(self, event): + self.step_backward() + + def button_right_click(self, event): + self.step_forward() + + def step_forward(self): + self.update_plots() + + def step_backward(self): + for hf in self.hfile: + # Step back in file position + if(hf.tell() >= 2*self.sizeof_data*self.block_length ): + hf.seek(-2*self.sizeof_data*self.block_length, 1) + else: + hf.seek(-hf.tell(),1) + self.update_plots() + + +def find(item_in, list_search): + try: + return list_search.index(item_in) != None + except ValueError: + return False diff --git a/gr-utils/src/python/usrp2_fft.py b/gr-utils/src/python/usrp2_fft.py new file mode 100755 index 00000000..1e8cf89e --- /dev/null +++ b/gr-utils/src/python/usrp2_fft.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008 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 import gr, gru +from gnuradio import usrp2 +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider +from optparse import OptionParser +import wx +import sys +import numpy + +class app_top_block(stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) + + self.frame = frame + self.panel = panel + + parser = OptionParser(option_class=eng_option) + parser.add_option("-e", "--interface", type="string", default="eth0", + help="select Ethernet interface, default is eth0") + parser.add_option("-m", "--mac-addr", type="string", default="", + help="select USRP by MAC address, default is auto-select") + #parser.add_option("-A", "--antenna", default=None, + # help="select Rx Antenna (only on RFX-series boards)") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-W", "--waterfall", action="store_true", default=False, + help="Enable waterfall display") + parser.add_option("-S", "--oscilloscope", action="store_true", default=False, + help="Enable oscilloscope display") + parser.add_option("", "--avg-alpha", type="eng_float", default=1e-1, + help="Set fftsink averaging factor, default=[%default]") + parser.add_option("", "--ref-scale", type="eng_float", default=1.0, + help="Set dBFS=0dB input value, default=[%default]") + parser.add_option("--fft-size", type="int", default=1024, + help="Set number of FFT bins [default=%default]") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + self.options = options + self.show_debug_info = True + + self.u = usrp2.source_32fc(options.interface, options.mac_addr) + self.u.set_decim(options.decim) + + input_rate = self.u.adc_rate() / self.u.decim() + + if options.waterfall: + self.scope = \ + waterfallsink2.waterfall_sink_c (panel, fft_size=1024, sample_rate=input_rate) + elif options.oscilloscope: + self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate) + else: + self.scope = fftsink2.fft_sink_c (panel, + fft_size=options.fft_size, + sample_rate=input_rate, + ref_scale=options.ref_scale, + ref_level=20.0, + y_divs = 12, + avg_alpha=options.avg_alpha) + + self.connect(self.u, self.scope) + + self._build_gui(vbox) + self._setup_events() + + # set initial values + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.u.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.freq is None: + # if no freq was specified, use the mid-point + r = self.u.freq_range() + options.freq = float(r[0]+r[1])/2 + + self.set_gain(options.gain) + + #if options.antenna is not None: + # print "Selecting antenna %s" % (options.antenna,) + # self.subdev.select_rx_antenna(options.antenna) + + if self.show_debug_info: + self.myform['decim'].set_value(self.u.decim()) + self.myform['fs@gbe'].set_value(input_rate) + self.myform['dbname'].set_value("0x%04X" % (self.u.daughterboard_id(),)) # FIXME: add text name + self.myform['baseband'].set_value(0) + self.myform['ddc'].set_value(0) + + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + def _set_status_msg(self, msg): + self.frame.GetStatusBar().SetStatusText(msg, 0) + + def _build_gui(self, vbox): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + vbox.Add(self.scope.win, 10, wx.EXPAND) + + # add control area at the bottom + self.myform = myform = form.form() + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0, 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Center freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0, 0) + g = self.u.gain_range() + + # some configurations don't have gain control + if g[1] > g[0]: + myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, + min=int(g[0]), max=int(g[1]), + callback=self.set_gain) + + hbox.Add((5,0), 0, 0) + vbox.Add(hbox, 0, wx.EXPAND) + + self._build_subpanel(vbox) + + def _build_subpanel(self, vbox_arg): + # build a secondary information panel (sometimes hidden) + + # FIXME figure out how to have this be a subpanel that is always + # created, but has its visibility controlled by foo.Show(True/False) + + def _form_set_decim(kv): + return self.set_decim(kv['decim']) + + if not(self.show_debug_info): + return + + panel = self.panel + vbox = vbox_arg + myform = self.myform + + #panel = wx.Panel(self.panel, -1) + #vbox = wx.BoxSizer(wx.VERTICAL) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['decim'] = form.int_field( + parent=panel, sizer=hbox, label="Decim", + callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg)) + + hbox.Add((5,0), 1) + myform['fs@gbe'] = form.static_float_field( + parent=panel, sizer=hbox, label="Fs@GbE") + + hbox.Add((5,0), 1) + myform['dbname'] = form.static_text_field( + parent=panel, sizer=hbox) + + hbox.Add((5,0), 1) + myform['baseband'] = form.static_float_field( + parent=panel, sizer=hbox, label="Analog BB") + + hbox.Add((5,0), 1) + myform['ddc'] = form.static_float_field( + parent=panel, sizer=hbox, label="DDC") + + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = self.u.set_center_freq(target_freq) + + if r: + self.myform['freq'].set_value(target_freq) # update displayed value + if self.show_debug_info: + self.myform['baseband'].set_value(r.baseband_freq) + self.myform['ddc'].set_value(r.dxc_freq) + if not self.options.oscilloscope: + self.scope.win.set_baseband_freq(target_freq) + return True + + return False + + def set_gain(self, gain): + if self.myform.has_key('gain'): + self.myform['gain'].set_value(gain) # update displayed value + self.u.set_gain(gain) + + def set_decim(self, decim): + ok = self.u.set_decim(decim) + if not ok: + print "set_decim failed" + input_rate = self.u.adc_rate() / self.u.decim() + self.scope.set_sample_rate(input_rate) + if self.show_debug_info: # update displayed values + self.myform['decim'].set_value(self.u.decim()) + self.myform['fs@gbe'].set_value(input_rate) + return ok + + def _setup_events(self): + if not self.options.waterfall and not self.options.oscilloscope: + self.scope.win.Bind(wx.EVT_LEFT_DCLICK, self.evt_left_dclick) + + def evt_left_dclick(self, event): + (ux, uy) = self.scope.win.GetXY(event) + if event.CmdDown(): + # Re-center on maximum power + points = self.scope.win._points + if self.scope.win.peak_hold: + if self.scope.win.peak_vals is not None: + ind = numpy.argmax(self.scope.win.peak_vals) + else: + ind = int(points.shape()[0]/2) + else: + ind = numpy.argmax(points[:,1]) + (freq, pwr) = points[ind] + target_freq = freq/self.scope.win._scale_factor + print ind, freq, pwr + self.set_freq(target_freq) + else: + # Re-center on clicked frequency + target_freq = ux/self.scope.win._scale_factor + self.set_freq(target_freq) + + +def main (): + app = stdgui2.stdapp(app_top_block, "USRP2 FFT", nstatus=1) + app.MainLoop() + +if __name__ == '__main__': + main () diff --git a/gr-utils/src/python/usrp2_rx_cfile.py b/gr-utils/src/python/usrp2_rx_cfile.py new file mode 100755 index 00000000..1f23eee4 --- /dev/null +++ b/gr-utils/src/python/usrp2_rx_cfile.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008,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. +# + +""" +Read samples from the USRP2 and write to file formatted as binary +outputs single precision complex float values or complex short values +(interleaved 16 bit signed short integers). +""" + +from gnuradio import gr, eng_notation +from gnuradio import usrp2 +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys + +n2s = eng_notation.num_to_str + +class rx_cfile_block(gr.top_block): + + def __init__(self, options, filename): + gr.top_block.__init__(self) + + # Create a USRP2 source + if options.output_shorts: + self._u = usrp2.source_16sc(options.interface, options.mac_addr) + self._sink = gr.file_sink(gr.sizeof_short*2, filename) + else: + self._u = usrp2.source_32fc(options.interface, options.mac_addr) + self._sink = gr.file_sink(gr.sizeof_gr_complex, filename) + + # Set receiver decimation rate + self._u.set_decim(options.decim) + + # Set receive daughterboard gain + if options.gain is None: + g = self._u.gain_range() + options.gain = float(g[0]+g[1])/2 + print "Using mid-point gain of", options.gain, "(", g[0], "-", g[1], ")" + self._u.set_gain(options.gain) + + # Set receive frequency + if options.lo_offset is not None: + self._u.set_lo_offset(options.lo_offset) + + tr = self._u.set_center_freq(options.freq) + if tr == None: + sys.stderr.write('Failed to set center frequency\n') + raise SystemExit, 1 + + # Create head block if needed and wire it up + if options.nsamples is None: + self.connect(self._u, self._sink) + else: + if options.output_shorts: + self._head = gr.head(gr.sizeof_short*2, int(options.nsamples)) + else: + self._head = gr.head(gr.sizeof_gr_complex, int(options.nsamples)) + + self.connect(self._u, self._head, self._sink) + + input_rate = self._u.adc_rate()/self._u.decim() + + if options.verbose: + print "Network interface:", options.interface + print "USRP2 address:", self._u.mac_addr() + print "Using RX d'board id 0x%04X" % (self._u.daughterboard_id(),) + print "Rx gain:", options.gain + print "Rx baseband frequency:", n2s(tr.baseband_freq) + print "Rx DDC frequency:", n2s(tr.dxc_freq) + print "Rx residual frequency:", n2s(tr.residual_freq) + print "Rx decimation rate:", options.decim + print "Rx sample rate:", n2s(input_rate) + if options.nsamples is None: + print "Receiving samples until Ctrl-C" + else: + print "Receving", n2s(options.nsamples), "samples" + if options.output_shorts: + print "Writing 16-bit complex shorts" + else: + print "Writing 32-bit complex floats" + print "Output filename:", filename + +def get_options(): + usage="%prog: [options] output_filename" + parser = OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-e", "--interface", type="string", default="eth0", + help="use specified Ethernet interface [default=%default]") + parser.add_option("-m", "--mac-addr", type="string", default="", + help="use USRP2 at specified MAC address [default=None]") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option( "-s","--output-shorts", action="store_true", default=False, + help="output interleaved shorts instead of complex floats") + parser.add_option("-N", "--nsamples", type="eng_float", default=None, + help="number of samples to collect [default=+inf]") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="verbose output") + parser.add_option("", "--lo-offset", type="eng_float", default=None, + help="set daughterboard LO offset to OFFSET [default=hw default]") + + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + + if options.freq is None: + parser.print_help() + sys.stderr.write('You must specify the frequency with -f FREQ\n'); + raise SystemExit, 1 + + return (options, args[0]) + + +if __name__ == '__main__': + (options, filename) = get_options() + tb = rx_cfile_block(options, filename) + + try: + tb.run() + except KeyboardInterrupt: + pass diff --git a/gr-utils/src/python/usrp2_siggen.py b/gr-utils/src/python/usrp2_siggen.py new file mode 100755 index 00000000..9ade933c --- /dev/null +++ b/gr-utils/src/python/usrp2_siggen.py @@ -0,0 +1,389 @@ +#!/usr/bin/env python +# +# Copyright 2008,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. +# + +from gnuradio import gr, eng_notation, usrp2 +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys +import math + +n2s = eng_notation.num_to_str + +waveforms = { gr.GR_SIN_WAVE : "Complex Sinusoid", + gr.GR_CONST_WAVE : "Constant", + gr.GR_GAUSSIAN : "Gaussian Noise", + gr.GR_UNIFORM : "Uniform Noise", + "2tone" : "Two Tone", + "sweep" : "Sweep" } + +# +# GUI-unaware GNU Radio flowgraph. This may be used either with command +# line applications or GUI applications. +# +class top_block(gr.top_block): + def __init__(self, options, args): + gr.top_block.__init__(self) + self._verbose = options.verbose + + self._interp = 0 + self._gain = 0 + self._freq = None # Indicates frequency hasn't been successfully set yet + self._bb_freq = 0 + self._ddc_freq = 0 + self._amplitude = 0 + self._type = None # Indicates waveform flowgraph not created yet + self._offset = options.offset + + self.set_usrp2(options.interface, options.mac_addr) + self.set_interp(options.interp) + self.set_gain(options.gain) + self.set_freq(options.tx_freq, options.lo_offset) + self.set_amplitude(options.amplitude) + + self.set_waveform_freq(options.waveform_freq) + self.set_waveform2_freq(options.waveform2_freq) + self.set_waveform(options.type) + + def set_usrp2(self, interface, mac_addr): + self._u = usrp2.sink_32fc(interface, mac_addr) + self._dac_rate = self._u.dac_rate() + if self._verbose: + print "Network interface:", interface + print "Network address:", self._u.mac_addr() + print "Daughterboard ID:", hex(self._u.daughterboard_id()) + + def set_interp(self, interp): + if interp < 4 or interp > 512: # FIXME get from flowgraph + if self._verbose: print "Interpolation rate out of range:", interp + return False + + if not self._u.set_interp(interp): + raise RuntimeError("Failed to set interpolation rate %i" % (interp,)) + + self._interp = interp + self._eth_rate = self._dac_rate/self._interp + if self._verbose: + print "USRP2 interpolation rate:", self._interp + print "USRP2 IF bandwidth: %sHz" % (n2s(self._eth_rate),) + + if (self._type == gr.GR_SIN_WAVE or + self._type == gr.GR_CONST_WAVE): + self._src.set_sampling_freq(self._eth_rate) + elif self._type == "2tone": + self._src1.set_sampling_freq(self._eth_rate) + self._src1.set_sampling_freq(self._eth_rate) + elif self._type == "sweep": + self._src1.set_sampling_freq(self._eth_rate) + self._src1.set_sampling_freq(self._waveform_freq*2*math.pi/self._eth_rate) + else: + return True # Waveform not yet set + + if self._verbose: print "Set interpolation rate to:", interp + return True + + def set_gain(self, gain): + if gain is None: + g = self._u.gain_range() + gain = float(g[0]+g[1])/2 + if self._verbose: + print "Using auto-calculated mid-point TX gain" + self._u.set_gain(gain) + self._gain = gain + if self._verbose: + print "Set TX gain to:", self._gain + + def set_freq(self, target_freq, lo_offset=None): + if lo_offset is not None: + self._lo_offset = lo_offset + self._u.set_lo_offset(self._lo_offset) + if self._verbose: + print "Set LO offset frequency to: %sHz" % (n2s(lo_offset),) + + if target_freq is None: + f = self._u.freq_range() + target_freq = float(f[0]+f[1])/2.0 + if self._verbose: + print "Using auto-calculated mid-point frequency" + + tr = self._u.set_center_freq(target_freq) + fs = "%sHz" % (n2s(target_freq),) + if tr is not None: + self._freq = target_freq + + else: + return True # Waveform not yet set + + if self._verbose: print "Set amplitude to:", amplitude + return True + + def set_gain(self, gain): + if gain is None: + g = self._u.gain_range() + gain = float(g[0]+g[1])/2 + if self._verbose: + print "Using auto-calculated mid-point TX gain" + self._u.set_gain(gain) + self._gain = gain + if self._verbose: + print "Set TX gain to:", self._gain + + def set_freq(self, target_freq, lo_offset=None): + if lo_offset is not None: + self._lo_offset = lo_offset + self._u.set_lo_offset(self._lo_offset) + if self._verbose: + print "Set LO offset frequency to: %sHz" % (n2s(lo_offset),) + + if target_freq is None: + f = self._u.freq_range() + target_freq = float(f[0]+f[1])/2.0 + if self._verbose: + print "Using auto-calculated mid-point frequency" + + tr = self._u.set_center_freq(target_freq) + fs = "%sHz" % (n2s(target_freq),) + if tr is not None: + self._freq = target_freq + self._ddc_freq = tr.dxc_freq + self._bb_freq = tr.baseband_freq + if self._verbose: + print "Set center frequency to", fs + print "Tx baseband frequency: %sHz" % (n2s(tr.baseband_freq),) + print "Tx DDC frequency: %sHz" % (n2s(tr.dxc_freq),) + print "Tx residual frequency: %sHz" % (n2s(tr.residual_freq),) + + return tr + + def set_waveform_freq(self, freq): + self._waveform_freq = freq + if self._type == gr.GR_SIN_WAVE: + self._src.set_frequency(freq) + elif self._type == "2tone" or self._type == "sweep": + self._src1.set_frequency(freq) + return True + + def set_waveform2_freq(self, freq): + self._waveform2_freq = freq + if self._type == "2tone": + self._src2.set_frequency(freq) + elif self._type == "sweep": + self._src1.set_frequency(freq) + return True + + def set_waveform(self, type): + self.lock() + self.disconnect_all() + + if type == gr.GR_SIN_WAVE or type == gr.GR_CONST_WAVE: + self._src = gr.sig_source_c(self._eth_rate, # Sample rate + type, # Waveform type + self._waveform_freq, # Waveform frequency + self._amplitude, # Waveform amplitude + self._offset) # Waveform offset + elif type == gr.GR_GAUSSIAN or type == gr.GR_UNIFORM: + self._src = gr.noise_source_c(type, self._amplitude) + elif type == "2tone": + self._src1 = gr.sig_source_c(self._eth_rate, + gr.GR_SIN_WAVE, + self._waveform_freq, + self._amplitude/2.0, + 0) + if(self._waveform2_freq is None): + self._waveform2_freq = -self._waveform_freq + + self._src2 = gr.sig_source_c(self._eth_rate, + gr.GR_SIN_WAVE, + self._waveform2_freq, + self._amplitude/2.0, + 0) + self._src = gr.add_cc() + self.connect(self._src1,(self._src,0)) + self.connect(self._src2,(self._src,1)) + elif type == "sweep": + # rf freq is center frequency + # waveform_freq is total swept width + # waveform2_freq is sweep rate + # will sweep from (rf_freq-waveform_freq/2) to (rf_freq+waveform_freq/2) + if self._waveform2_freq is None: + self._waveform2_freq = 0.1 + + self._src1 = gr.sig_source_f(self._eth_rate, + gr.GR_TRI_WAVE, + self._waveform2_freq, + 1.0, + -0.5) + self._src2 = gr.frequency_modulator_fc(self._waveform_freq*2*math.pi/self._eth_rate) + self._src = gr.multiply_const_cc(self._amplitude) + self.connect(self._src1,self._src2,self._src) + else: + raise RuntimeError("Unknown waveform type") + + self.connect(self._src, self._u) + self._type = type + self.unlock() + + if self._verbose: + print "Set baseband modulation to:", waveforms[self._type] + if type == gr.GR_SIN_WAVE: + print "Modulation frequency: %sHz" % (n2s(self._waveform_freq),) + print "Initial phase:", self._offset + elif type == "2tone": + print "Tone 1: %sHz" % (n2s(self._waveform_freq),) + print "Tone 2: %sHz" % (n2s(self._waveform2_freq),) + elif type == "sweep": + print "Sweeping across %sHz to %sHz" % (n2s(-self._waveform_freq/2.0),n2s(self._waveform_freq/2.0)) + print "Sweep rate: %sHz" % (n2s(self._waveform2_freq),) + print "TX amplitude:", self._amplitude + + + def set_amplitude(self, amplitude): + if amplitude < 0.0 or amplitude > 1.0: + if self._verbose: print "Amplitude out of range:", amplitude + return False + + self._amplitude = amplitude + + if (self._type == gr.GR_SIN_WAVE or + self._type == gr.GR_CONST_WAVE or + self._type == gr.GR_GAUSSIAN or + self._type == gr.GR_UNIFORM): + self._src.set_amplitude(amplitude) + elif self._type == "2tone": + self._src1.set_amplitude(amplitude/2.0) + self._src2.set_amplitude(amplitude/2.0) + elif self._type == "sweep": + self._src.set_k(amplitude) + else: + return True # Waveform not yet set + + if self._verbose: print "Set amplitude to:", amplitude + return True + + + # Property getters + + def mac_addr(self): + return self._u.mac_addr() + + def interface_name(self): + return self._u.interface_name() + + def daughterboard_id(self): + return self._u.daughterboard_id() + + def interp_rate(self): + return self._interp + + def eth_rate(self): + return self._eth_rate + + def freq(self): + return self._freq + + def freq_range(self): + return self._u.freq_range() + + def ddc_freq(self): + return self._ddc_freq + + def baseband_freq(self): + return self._bb_freq + + def amplitude(self): + return self._amplitude + + def waveform_type(self): + return self._type + + def waveform_freq(self): + return self._waveform_freq + + def waveform2_freq(self): + if self._waveform2_freq is None: + return -self._waveform_freq + else: + return self._waveform2_freq + +def get_options(): + usage="%prog: [options]" + + parser = OptionParser(option_class=eng_option, usage=usage) + + parser.add_option("-e", "--interface", type="string", default="eth0", + help="Use specified Ethernet interface [default=%default]") + parser.add_option("-m", "--mac-addr", type="string", default="", + help="Use USRP2 at specified MAC address [default=None]") + parser.add_option("-i", "--interp", type="int", default=16, metavar="INTERP", + help="Set FPGA interpolation rate of INTERP [default=%default]") + parser.add_option("-f", "--tx-freq", type="eng_float", default=None, + help="Set carrier frequency to FREQ [default=mid-point]", metavar="FREQ") + parser.add_option("--lo-offset", type="eng_float", default=None, + help="set daughterboard LO offset to OFFSET [default=hw default]") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="Set TX gain to GAIN [default=mid-point]") + parser.add_option("-w", "--waveform-freq", type="eng_float", default=0, + help="Set baseband waveform frequency to FREQ [default=%default]") + parser.add_option("-x", "--waveform2-freq", type="eng_float", default=None, + help="Set 2nd waveform frequency to FREQ [default=%default]") + parser.add_option("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE, + help="Generate a carrier modulated by a complex sine wave", default=gr.GR_SIN_WAVE) + parser.add_option("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE, + help="Generate a constant carrier") + parser.add_option("--offset", type="eng_float", default=0, + help="Set waveform phase offset to OFFSET [default=%default]") + parser.add_option("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN, + help="Generate Gaussian random output") + parser.add_option("--uniform", dest="type", action="store_const", const=gr.GR_UNIFORM, + help="Generate Uniform random output") + parser.add_option("--2tone", dest="type", action="store_const", const="2tone", + help="Generate Two Tone signal for IMD testing") + parser.add_option("--sweep", dest="type", action="store_const", const="sweep", + help="Generate a swept sine wave") + parser.add_option("-a", "--amplitude", type="eng_float", default=0.1, + help="Set output amplitude to AMPL (0.0-1.0) [default=%default]", metavar="AMPL") + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="Use verbose console output [default=%default]") + + (options, args) = parser.parse_args() + + return (options, args) + +# If this script is executed, the following runs. If it is imported, the below does not run. +if __name__ == "__main__": + if gr.enable_realtime_scheduling() != gr.RT_OK: + print "Note: failed to enable realtime scheduling, continuing" + + # Grab command line options and create top block + try: + (options, args) = get_options() + tb = top_block(options, args) + + except RuntimeError, e: + print e + sys.exit(1) + + # Run it + try: + tb.run() + + except KeyboardInterrupt: + pass diff --git a/gr-utils/src/python/usrp2_siggen_gui.py b/gr-utils/src/python/usrp2_siggen_gui.py new file mode 100755 index 00000000..89bc6e58 --- /dev/null +++ b/gr-utils/src/python/usrp2_siggen_gui.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python +# +# 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. +# + +import wx +from gnuradio.wxgui import form, slider, gui +import usrp2_siggen +import sys, math + +class app_gui(object): + def __init__(self, frame, panel, vbox, top_block, options, args): + self.frame = frame # Use for top-level application window frame + self.panel = panel # Use as parent class for created windows + self.vbox = vbox # Use as sizer for created windows + self.tb = top_block # GUI-unaware flowgraph class + self.options = options # Supplied command-line options + self.args = args # Supplied command-line arguments + + freq_range = self.tb.freq_range() + self.min_freq = freq_range[0] + self.max_freq = freq_range[1] + self.freq_step = (self.max_freq-self.min_freq)/100.0 + self._types = dict([v, k] for k, v in usrp2_siggen.waveforms.items()) + + self.build_gui() + + # TODO: turn these into listeners + self.myform['ifc'].set_value(self.tb.interface_name()) + self.myform['mac'].set_value(self.tb.mac_addr()) + dbid = self.tb.daughterboard_id() + self.myform['dbid'].set_value("%04x" % (dbid,)) + + w = usrp2_siggen.waveforms[self.tb.waveform_type()] + self.myform['type'].set_value(w) + self.myform['w1freq'].set_value(self.tb.waveform_freq()) + self.myform['w2freq'].set_value(self.tb.waveform2_freq()) + + freq = self.tb.freq() + if freq is None: + self.evt_set_status_msg("Failed to set initial frequency") + else: + self.myform['freq'].set_value(freq) + self.myform['freq_slider'].set_value(self.tb.freq()) + + amp = self.tb.amplitude() + if (amp > 0.0): + db = 20*math.log10(amp) + else: + db = -100.0 + self.myform['amp'].set_value(amp) + self.myform['amp_slider'].set_value(db) + self.myform['eth'].set_value(self.tb.eth_rate()) + self.myform['gbe'].set_value(self.tb.eth_rate()*32) + self.myform['interp'].set_value(self.tb.interp_rate()) + self.myform['DDC'].set_value(self.tb.ddc_freq()) + self.myform['analog'].set_value(self.tb.baseband_freq()) + + # Event response handlers + def evt_set_status_msg(self, msg): + self.frame.SetStatusText(msg, 0) + + def evt_set_freq1(self, kv): + return self.tb.set_waveform_freq(kv['w1freq']) + + def evt_set_freq2(self, kv): + return self.tb.set_waveform2_freq(kv['w2freq']) + + def evt_set_freq(self, kv): + if type(kv) == type(0.0): # Set from slider + tr = self.tb.set_freq(kv) + if tr is not None: + self.myform['freq'].set_value(kv) + else: # Set from edit box + f = kv['freq'] + tr = self.tb.set_freq(f) + if tr is not None: + self.myform['freq_slider'].set_value(f) + + if tr is not None: + self.myform['DDC'].set_value(tr.dxc_freq) + self.myform['analog'].set_value(tr.baseband_freq) + + return (tr is not None) + + def evt_set_amplitude(self, kv): + if type(kv) == type(0.0): # Set from slider + amp = math.pow(10, kv/20.0) + self.myform['amp'].set_value(amp) + return self.tb.set_amplitude(amp) + else: # Set from edit box + amp = kv['amp'] + if amp < 0.0 or amp > 1.0: + return False + if amp == 0.0: + db = -100.0 + else: + db = 20*math.log10(amp) + self.myform['amp_slider'].set_value(db) + return self.tb.set_amplitude(amp) + + def evt_set_interp(self): + interp = self.myform['interp'].get_value() + if self.tb.set_interp(interp): + eth_rate = self.tb.eth_rate() + self.myform['eth'].set_value(eth_rate) + self.myform['gbe'].set_value(eth_rate*32) + return True + return False + + def evt_set_waveform_type(self, type): + # TODO: update frequency labels + return self.tb.set_waveform(self._types[type]) + + # GUI construction + def build_gui(self): + self.myform = myform = form.form() + + # Baseband controls + bb_sbox = wx.StaticBox(parent=self.panel, label="Baseband Modulation") + bb_vbox = wx.StaticBoxSizer(bb_sbox, wx.VERTICAL) # Holds all baseband controls as unit + + # First row of baseband controls (modulation type) + mod_hbox = wx.BoxSizer(wx.HORIZONTAL) + mod_hbox.Add((10,0), 0, 0) + myform['type'] = form.radiobox_field( + parent=self.panel, label="Type", sizer=mod_hbox, value=None, + callback=self.evt_set_waveform_type, weight=1, major_dimension=0, + choices=usrp2_siggen.waveforms.values() ) + bb_vbox.Add((0,10), 0, 0) + bb_vbox.Add(mod_hbox, 0, wx.EXPAND) + + # Second row of baseband controls (frequencies) + bbf_hbox = wx.BoxSizer(wx.HORIZONTAL) + bbf_hbox.Add((10,0), 0, 0) + myform['w1freq'] = form.float_field( + parent=self.panel, sizer=bbf_hbox, label="Frequency 1 (Hz)", weight=1, + callback=myform.check_input_and_call(self.evt_set_freq1, self.evt_set_status_msg) ) + bbf_hbox.Add((10,0), 0, 0) + myform['w2freq'] = form.float_field( + parent=self.panel, sizer=bbf_hbox, label="Frequency 2 (Hz)", weight=1, + callback=myform.check_input_and_call(self.evt_set_freq2, self.evt_set_status_msg) ) + bbf_hbox.Add((10,0), 0, 0) + + bb_vbox.Add((0,10), 0, 0) + bb_vbox.Add(bbf_hbox, 0, wx.EXPAND) + + # Add baseband controls to top window sizer + self.vbox.Add((0,10), 0, 0) + self.vbox.Add(bb_vbox, 0, wx.EXPAND) + + # Frequency controls + fc_sbox = wx.StaticBox(parent=self.panel, label="Center Frequency") + fc_vbox = wx.StaticBoxSizer(fc_sbox, wx.VERTICAL) # Holds all frequency controls as unit + + # First row of frequency controls (center frequency) + freq_hbox = wx.BoxSizer(wx.HORIZONTAL) + freq_hbox.Add((10,0), 0, 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=freq_hbox, label=None, weight=1, + callback=myform.check_input_and_call(self.evt_set_freq, self.evt_set_status_msg) ) + freq_hbox.Add((10,0), 0, 0) + myform['freq_slider'] = form.quantized_slider_field( + parent=self.panel, sizer=freq_hbox, label="Min-Max", weight=4, + range = (self.min_freq, self.max_freq, self.freq_step), + callback=self.evt_set_freq) + freq_hbox.Add((10,0), 0, 0) + + fc_vbox.Add((10,0), 0, 0) + fc_vbox.Add(freq_hbox, 0, wx.EXPAND) + + # Second row of frequency controls (results) + tr_hbox = wx.BoxSizer(wx.HORIZONTAL) + tr_hbox.Add((10,0), 0, 0) + myform['analog'] = form.static_float_field( + parent=self.panel, sizer=tr_hbox, label="Daughterboard: (Hz)", weight=1) + tr_hbox.Add((10,0), 0, 0) + myform['DDC'] = form.static_float_field( + parent=self.panel, sizer=tr_hbox, label="USRP2 DDC (Hz)", weight=1) + tr_hbox.Add((10,0), 0, 0) + fc_vbox.Add(tr_hbox, 0, wx.EXPAND) + + # Add frequency controls to top window sizer + self.vbox.Add((0,10), 0, 0) + self.vbox.Add(fc_vbox, 0, wx.EXPAND) + + # Amplitude row + amp_sbox = wx.StaticBox(parent=self.panel, label="Amplitude") + amp_hbox = wx.StaticBoxSizer(amp_sbox, wx.HORIZONTAL) + amp_hbox.Add((10,0), 0, 0) + myform['amp'] = form.float_field( + parent=self.panel, sizer=amp_hbox, label="Linear\n(0.0-1.0)", weight=1, + callback=myform.check_input_and_call(self.evt_set_amplitude, self.evt_set_status_msg) ) + amp_hbox.Add((10,0), 0, 0) + myform['amp_slider'] = form.quantized_slider_field( + parent=self.panel, sizer=amp_hbox, label="dB Full Scale\n(-100-0)", weight=4, + range=(-100.0, 0.0, 1), callback=self.evt_set_amplitude) + amp_hbox.Add((10,0), 0, 0) + self.vbox.Add((0,10), 0, 0) + self.vbox.Add(amp_hbox, 0, wx.EXPAND) + + # Sample rate row + sam_sbox = wx.StaticBox(parent=self.panel, label="Sample Rate") + sam_hbox = wx.StaticBoxSizer(sam_sbox, wx.HORIZONTAL) + sam_hbox.Add((10,0), 0, 0) + myform['interp'] = form.int_field( + parent=self.panel, sizer=sam_hbox, label="Interpolation", weight=1, + callback=self.evt_set_interp) + sam_hbox.Add((10,0), 0, 0) + myform['eth'] = form.static_float_field( + parent=self.panel, sizer=sam_hbox, label="Sample Rate (sps)", weight=1) + sam_hbox.Add((10,0), 0, 0) + myform['gbe'] = form.static_float_field( + parent=self.panel, sizer=sam_hbox, label="GbE Rate (bits/sec)", weight=1) + sam_hbox.Add((10,0), 0, 0) + self.vbox.Add((0,10), 0, 0) + self.vbox.Add(sam_hbox, 0, wx.EXPAND) + + # USRP2 row + u2_sbox = wx.StaticBox(parent=self.panel, label="USRP2 Hardware") + u2_hbox = wx.StaticBoxSizer(u2_sbox, wx.HORIZONTAL) + u2_hbox.Add((10,0), 0, 0) + myform['ifc'] = form.static_text_field(parent=self.panel, sizer=u2_hbox, + label="Interface", weight=2) + u2_hbox.Add((10,0), 0, 0) + myform['mac'] = form.static_text_field(parent=self.panel, sizer=u2_hbox, + label="MAC Address", weight=2) + u2_hbox.Add((10,0), 0, 0) + myform['dbid'] = form.static_text_field(parent=self.panel, sizer=u2_hbox, + label="Daughterboard ID", weight=1) + self.vbox.Add((0,10), 0, 0) + self.vbox.Add(u2_hbox, 0, wx.EXPAND) + self.vbox.Add((0,20), 0, 0) + +if __name__ == "__main__": + try: + # Get command line parameters + (options, args) = usrp2_siggen.get_options() + + # Create the top block using these + tb = usrp2_siggen.top_block(options, args) + + # Create the GUI application + app = gui.app(top_block=tb, # Constructed top block + gui=app_gui, # User interface class + options=options, # Command line options + args=args, # Command line args + title="USRP2 Signal Generator", # Top window title + nstatus=1, # Number of status lines + start=True, # Whether to start flowgraph + realtime=True) # Whether to set realtime priority + + # And run it + app.MainLoop() + + except RuntimeError, e: + print e + sys.exit(1) diff --git a/gr-utils/src/python/usrp_fft.py b/gr-utils/src/python/usrp_fft.py new file mode 100755 index 00000000..4aa70ada --- /dev/null +++ b/gr-utils/src/python/usrp_fft.py @@ -0,0 +1,309 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008 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 import gr, gru +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider +from optparse import OptionParser +import wx +import sys +import numpy + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + If there's a daughterboard on A, select A. + If there's a daughterboard on B, select B. + Otherwise, select A. + """ + if u.db(0, 0).dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + return (0, 0) + if u.db(0, 0).dbid() >= 0: + return (1, 0) + return (0, 0) + + +class app_top_block(stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) + + self.frame = frame + self.panel = panel + + parser = OptionParser(option_class=eng_option) + parser.add_option("-w", "--which", type="int", default=0, + help="select which USRP (0, 1, ...) default is %default", + metavar="NUM") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=first one with a daughterboard)") + parser.add_option("-A", "--antenna", default=None, + help="select Rx Antenna (only on RFX-series boards)") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB [default is midpoint]") + parser.add_option("-W", "--waterfall", action="store_true", default=False, + help="Enable waterfall display") + parser.add_option("-8", "--width-8", action="store_true", default=False, + help="Enable 8-bit samples across USB") + parser.add_option( "--no-hb", action="store_true", default=False, + help="don't use halfband filter in usrp") + parser.add_option("-S", "--oscilloscope", action="store_true", default=False, + help="Enable oscilloscope display") + parser.add_option("", "--avg-alpha", type="eng_float", default=1e-1, + help="Set fftsink averaging factor, [default=%default]") + parser.add_option("", "--ref-scale", type="eng_float", default=13490.0, + help="Set dBFS=0dB input value, [default=%default]") + parser.add_option("", "--fft-size", type="int", default=1024, + help="Set FFT frame size, [default=%default]"); + + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + self.options = options + self.show_debug_info = True + + # build the graph + if options.no_hb or (options.decim<8): + #Min decimation of this firmware is 4. + #contains 4 Rx paths without halfbands and 0 tx paths. + self.fpga_filename="std_4rx_0tx.rbf" + self.u = usrp.source_c(which=options.which, decim_rate=options.decim, fpga_filename=self.fpga_filename) + else: + #Min decimation of standard firmware is 8. + #standard fpga firmware "std_2rxhb_2tx.rbf" + #contains 2 Rx paths with halfband filters and 2 tx paths (the default) + self.u = usrp.source_c(which=options.which, decim_rate=options.decim) + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + + if options.width_8: + width = 8 + shift = 8 + format = self.u.make_format(width, shift) + print "format =", hex(format) + r = self.u.set_format(format) + print "set_format =", r + + # determine the daughterboard subdevice we're using + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + + input_rate = self.u.adc_freq() / self.u.decim_rate() + + if options.waterfall: + self.scope = \ + waterfallsink2.waterfall_sink_c (panel, fft_size=options.fft_size, sample_rate=input_rate) + elif options.oscilloscope: + self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate) + else: + self.scope = fftsink2.fft_sink_c (panel, fft_size=options.fft_size, sample_rate=input_rate, + ref_scale=options.ref_scale, ref_level=0.0, y_divs = 10, + avg_alpha=options.avg_alpha) + + self.connect(self.u, self.scope) + + self._build_gui(vbox) + self._setup_events() + + # set initial values + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.freq is None: + # if no freq was specified, use the mid-point + r = self.subdev.freq_range() + options.freq = float(r[0]+r[1])/2 + + self.set_gain(options.gain) + + if options.antenna is not None: + print "Selecting antenna %s" % (options.antenna,) + self.subdev.select_rx_antenna(options.antenna) + + if self.show_debug_info: + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) + self.myform['dbname'].set_value(self.subdev.name()) + self.myform['baseband'].set_value(0) + self.myform['ddc'].set_value(0) + + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + + def _set_status_msg(self, msg): + self.frame.GetStatusBar().SetStatusText(msg, 0) + + def _build_gui(self, vbox): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + vbox.Add(self.scope.win, 10, wx.EXPAND) + + # add control area at the bottom + self.myform = myform = form.form() + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0, 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Center freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + + hbox.Add((5,0), 0, 0) + g = self.subdev.gain_range() + myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, + min=int(g[0]), max=int(g[1]), + callback=self.set_gain) + + hbox.Add((5,0), 0, 0) + vbox.Add(hbox, 0, wx.EXPAND) + + self._build_subpanel(vbox) + + def _build_subpanel(self, vbox_arg): + # build a secondary information panel (sometimes hidden) + + # FIXME figure out how to have this be a subpanel that is always + # created, but has its visibility controlled by foo.Show(True/False) + + def _form_set_decim(kv): + return self.set_decim(kv['decim']) + + if not(self.show_debug_info): + return + + panel = self.panel + vbox = vbox_arg + myform = self.myform + + #panel = wx.Panel(self.panel, -1) + #vbox = wx.BoxSizer(wx.VERTICAL) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['decim'] = form.int_field( + parent=panel, sizer=hbox, label="Decim", + callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg)) + + hbox.Add((5,0), 1) + myform['fs@usb'] = form.static_float_field( + parent=panel, sizer=hbox, label="Fs@USB") + + hbox.Add((5,0), 1) + myform['dbname'] = form.static_text_field( + parent=panel, sizer=hbox) + + hbox.Add((5,0), 1) + myform['baseband'] = form.static_float_field( + parent=panel, sizer=hbox, label="Analog BB") + + hbox.Add((5,0), 1) + myform['ddc'] = form.static_float_field( + parent=panel, sizer=hbox, label="DDC") + + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = self.u.tune(0, self.subdev, target_freq) + + if r: + self.myform['freq'].set_value(target_freq) # update displayed value + if self.show_debug_info: + self.myform['baseband'].set_value(r.baseband_freq) + self.myform['ddc'].set_value(r.dxc_freq) + if not self.options.oscilloscope: + self.scope.win.set_baseband_freq(target_freq) + return True + + return False + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev.set_gain(gain) + + def set_decim(self, decim): + ok = self.u.set_decim_rate(decim) + if not ok: + print "set_decim failed" + input_rate = self.u.adc_freq() / self.u.decim_rate() + self.scope.set_sample_rate(input_rate) + if self.show_debug_info: # update displayed values + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) + return ok + + def _setup_events(self): + if not self.options.waterfall and not self.options.oscilloscope: + self.scope.win.Bind(wx.EVT_LEFT_DCLICK, self.evt_left_dclick) + + def evt_left_dclick(self, event): + (ux, uy) = self.scope.win.GetXY(event) + if event.CmdDown(): + # Re-center on maximum power + points = self.scope.win._points + if self.scope.win.peak_hold: + if self.scope.win.peak_vals is not None: + ind = numpy.argmax(self.scope.win.peak_vals) + else: + ind = int(points.shape()[0]/2) + else: + ind = numpy.argmax(points[:,1]) + (freq, pwr) = points[ind] + target_freq = freq/self.scope.win._scale_factor + print ind, freq, pwr + self.set_freq(target_freq) + else: + # Re-center on clicked frequency + target_freq = ux/self.scope.win._scale_factor + self.set_freq(target_freq) + + +def main (): + app = stdgui2.stdapp(app_top_block, "USRP FFT", nstatus=1) + app.MainLoop() + +if __name__ == '__main__': + main () diff --git a/gr-utils/src/python/usrp_oscope.py b/gr-utils/src/python/usrp_oscope.py new file mode 100755 index 00000000..f4a539dd --- /dev/null +++ b/gr-utils/src/python/usrp_oscope.py @@ -0,0 +1,349 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2006,2007 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. +# + +# print "Loading revised usrp_oscope with additional options for scopesink..." + +from gnuradio import gr, gru +from gnuradio import usrp +from gnuradio import eng_notation +from gnuradio.eng_option import eng_option +from gnuradio.wxgui import stdgui2, scopesink2, form, slider +from optparse import OptionParser +import wx +import sys +from usrpm import usrp_dbid + + +def pick_subdevice(u): + """ + The user didn't specify a subdevice on the command line. + If there's a daughterboard on A, select A. + If there's a daughterboard on B, select B. + Otherwise, select A. + """ + if u.db(0, 0).dbid() >= 0: # dbid is < 0 if there's no d'board or a problem + return (0, 0) + if u.db(0, 0).dbid() >= 0: + return (1, 0) + return (0, 0) + + +class app_top_block(stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv) + + self.frame = frame + self.panel = panel + + parser = OptionParser(option_class=eng_option) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, + help="select USRP Rx side A or B (default=first one with a daughterboard)") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-8", "--width-8", action="store_true", default=False, + help="Enable 8-bit samples across USB") + parser.add_option( "--no-hb", action="store_true", default=False, + help="don't use halfband filter in usrp") + parser.add_option("-C", "--basic-complex", action="store_true", default=False, + help="Use both inputs of a basicRX or LFRX as a single Complex input channel") + parser.add_option("-D", "--basic-dualchan", action="store_true", default=False, + help="Use both inputs of a basicRX or LFRX as seperate Real input channels") + parser.add_option("-n", "--frame-decim", type="int", default=1, + help="set oscope frame decimation factor to n [default=1]") + parser.add_option("-v", "--v-scale", type="eng_float", default=1000, + help="set oscope initial V/div to SCALE [default=%default]") + parser.add_option("-t", "--t-scale", type="eng_float", default=49e-6, + help="set oscope initial s/div to SCALE [default=50us]") + (options, args) = parser.parse_args() + if len(args) != 0: + parser.print_help() + sys.exit(1) + + self.show_debug_info = True + + # build the graph + if options.basic_dualchan: + self.num_inputs=2 + else: + self.num_inputs=1 + if options.no_hb or (options.decim<8): + #Min decimation of this firmware is 4. + #contains 4 Rx paths without halfbands and 0 tx paths. + self.fpga_filename="std_4rx_0tx.rbf" + self.u = usrp.source_c(nchan=self.num_inputs,decim_rate=options.decim, fpga_filename=self.fpga_filename) + else: + #Min decimation of standard firmware is 8. + #standard fpga firmware "std_2rxhb_2tx.rbf" + #contains 2 Rx paths with halfband filters and 2 tx paths (the default) + self.u = usrp.source_c(nchan=self.num_inputs,decim_rate=options.decim) + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = pick_subdevice(self.u) + + if options.width_8: + width = 8 + shift = 8 + format = self.u.make_format(width, shift) + #print "format =", hex(format) + r = self.u.set_format(format) + #print "set_format =", r + + # determine the daughterboard subdevice we're using + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + if (options.basic_complex or options.basic_dualchan ): + if ((self.subdev.dbid()==usrp_dbid.BASIC_RX) or (self.subdev.dbid()==usrp_dbid.LF_RX)): + side = options.rx_subdev_spec[0] # side A = 0, side B = 1 + if options.basic_complex: + #force Basic_RX and LF_RX in complex mode (use both I and Q channel) + print "Receiver daughterboard forced in complex mode. Both inputs will combined to form a single complex channel." + self.dualchan=False + if side==0: + self.u.set_mux(0x00000010) #enable adc 0 and 1 to form a single complex input on side A + else: #side ==1 + self.u.set_mux(0x00000032) #enable adc 3 and 2 to form a single complex input on side B + elif options.basic_dualchan: + #force Basic_RX and LF_RX in dualchan mode (use input A for channel 0 and input B for channel 1) + print "Receiver daughterboard forced in dualchannel mode. Each input will be used to form a seperate channel." + self.dualchan=True + if side==0: + self.u.set_mux(gru.hexint(0xf0f0f1f0)) #enable adc 0, side A to form a real input on channel 0 and adc1,side A to form a real input on channel 1 + else: #side ==1 + self.u.set_mux(0xf0f0f3f2) #enable adc 2, side B to form a real input on channel 0 and adc3,side B to form a real input on channel 1 + else: + sys.stderr.write('options basic_dualchan or basic_complex is only supported for Basic Rx or LFRX at the moment\n') + sys.exit(1) + else: + self.dualchan=False + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + + input_rate = self.u.adc_freq() / self.u.decim_rate() + + self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate, + frame_decim=options.frame_decim, + v_scale=options.v_scale, + t_scale=options.t_scale, + num_inputs=self.num_inputs) + if self.dualchan: + # deinterleave two channels from FPGA + self.di = gr.deinterleave(gr.sizeof_gr_complex) + self.connect(self.u,self.di) + self.connect((self.di,0),(self.scope,0)) + self.connect((self.di,1),(self.scope,1)) + else: + self.connect(self.u, self.scope) + + self._build_gui(vbox) + + # set initial values + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + if options.freq is None: + if ((self.subdev.dbid()==usrp_dbid.BASIC_RX) or (self.subdev.dbid()==usrp_dbid.LF_RX)): + #for Basic RX and LFRX if no freq is specified you probably want 0.0 Hz and not 45 GHz + options.freq=0.0 + else: + # if no freq was specified, use the mid-point + r = self.subdev.freq_range() + options.freq = float(r[0]+r[1])/2 + + self.set_gain(options.gain) + + if self.show_debug_info: + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) + self.myform['dbname'].set_value(self.subdev.name()) + self.myform['baseband'].set_value(0) + self.myform['ddc'].set_value(0) + if self.num_inputs==2: + self.myform['baseband2'].set_value(0) + self.myform['ddc2'].set_value(0) + + if not(self.set_freq(options.freq)): + self._set_status_msg("Failed to set initial frequency") + if self.num_inputs==2: + if not(self.set_freq2(options.freq)): + self._set_status_msg("Failed to set initial frequency for channel 2") + + + def _set_status_msg(self, msg): + self.frame.GetStatusBar().SetStatusText(msg, 0) + + def _build_gui(self, vbox): + + def _form_set_freq(kv): + return self.set_freq(kv['freq']) + + def _form_set_freq2(kv): + return self.set_freq2(kv['freq2']) + vbox.Add(self.scope.win, 10, wx.EXPAND) + + # add control area at the bottom + self.myform = myform = form.form() + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0, 0) + myform['freq'] = form.float_field( + parent=self.panel, sizer=hbox, label="Center freq", weight=1, + callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg)) + if self.num_inputs==2: + myform['freq2'] = form.float_field( + parent=self.panel, sizer=hbox, label="Center freq2", weight=1, + callback=myform.check_input_and_call(_form_set_freq2, self._set_status_msg)) + hbox.Add((5,0), 0, 0) + g = self.subdev.gain_range() + myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain", + weight=3, + min=int(g[0]), max=int(g[1]), + callback=self.set_gain) + + hbox.Add((5,0), 0, 0) + vbox.Add(hbox, 0, wx.EXPAND) + + self._build_subpanel(vbox) + + def _build_subpanel(self, vbox_arg): + # build a secondary information panel (sometimes hidden) + + # FIXME figure out how to have this be a subpanel that is always + # created, but has its visibility controlled by foo.Show(True/False) + + def _form_set_decim(kv): + return self.set_decim(kv['decim']) + + if not(self.show_debug_info): + return + + panel = self.panel + vbox = vbox_arg + myform = self.myform + + #panel = wx.Panel(self.panel, -1) + #vbox = wx.BoxSizer(wx.VERTICAL) + + hbox = wx.BoxSizer(wx.HORIZONTAL) + hbox.Add((5,0), 0) + + myform['decim'] = form.int_field( + parent=panel, sizer=hbox, label="Decim", + callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg)) + + hbox.Add((5,0), 1) + myform['fs@usb'] = form.static_float_field( + parent=panel, sizer=hbox, label="Fs@USB") + + hbox.Add((5,0), 1) + myform['dbname'] = form.static_text_field( + parent=panel, sizer=hbox) + + hbox.Add((5,0), 1) + myform['baseband'] = form.static_float_field( + parent=panel, sizer=hbox, label="Analog BB") + + hbox.Add((5,0), 1) + myform['ddc'] = form.static_float_field( + parent=panel, sizer=hbox, label="DDC") + if self.num_inputs==2: + hbox.Add((1,0), 1) + myform['baseband2'] = form.static_float_field( + parent=panel, sizer=hbox, label="BB2") + hbox.Add((1,0), 1) + myform['ddc2'] = form.static_float_field( + parent=panel, sizer=hbox, label="DDC2") + + hbox.Add((5,0), 0) + vbox.Add(hbox, 0, wx.EXPAND) + + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = usrp.tune(self.u, 0, self.subdev, target_freq) + + if r: + self.myform['freq'].set_value(target_freq) # update displayed value + if self.show_debug_info: + self.myform['baseband'].set_value(r.baseband_freq) + self.myform['ddc'].set_value(r.dxc_freq) + return True + + return False + + def set_freq2(self, target_freq): + """ + Set the center frequency of we're interested in for the second channel. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital down converter. + """ + r = usrp.tune(self.u, 1, self.subdev, target_freq) + + if r: + self.myform['freq2'].set_value(target_freq) # update displayed value + if self.show_debug_info: + self.myform['baseband2'].set_value(r.baseband_freq) + self.myform['ddc2'].set_value(r.dxc_freq) + return True + + return False + + def set_gain(self, gain): + self.myform['gain'].set_value(gain) # update displayed value + self.subdev.set_gain(gain) + + def set_decim(self, decim): + ok = self.u.set_decim_rate(decim) + if not ok: + print "set_decim failed" + input_rate = self.u.adc_freq() / self.u.decim_rate() + self.scope.set_sample_rate(input_rate) + if self.show_debug_info: # update displayed values + self.myform['decim'].set_value(self.u.decim_rate()) + self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate()) + return ok + +def main (): + app = stdgui2.stdapp(app_top_block, "USRP O'scope", nstatus=1) + app.MainLoop() + +if __name__ == '__main__': + main () diff --git a/gr-utils/src/python/usrp_print_db.py b/gr-utils/src/python/usrp_print_db.py new file mode 100755 index 00000000..b082cb07 --- /dev/null +++ b/gr-utils/src/python/usrp_print_db.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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. +# + +#!/usr/bin/env python + +from gnuradio import gr +from gnuradio import usrp +from optparse import OptionParser +from usrpm import usrp_dbid + +u_source = usrp.source_c() +u_sink = usrp.sink_c() + +subdev_Ar = usrp.selected_subdev(u_source, (0,0)) +subdev_Br = usrp.selected_subdev(u_source, (1,0)) +subdev_At = usrp.selected_subdev(u_sink, (0,0)) +subdev_Bt = usrp.selected_subdev(u_sink, (1,0)) + +print "RX d'board %s" % (subdev_Ar.side_and_name(),) +print "RX d'board %s" % (subdev_Br.side_and_name(),) +print "TX d'board %s" % (subdev_At.side_and_name(),) +print "TX d'board %s" % (subdev_Bt.side_and_name(),) + diff --git a/gr-utils/src/python/usrp_rx_cfile.py b/gr-utils/src/python/usrp_rx_cfile.py new file mode 100755 index 00000000..3ac9fb56 --- /dev/null +++ b/gr-utils/src/python/usrp_rx_cfile.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python + +""" +Read samples from the USRP and write to file formatted as binary +outputs single precision complex float values or complex short values (interleaved 16 bit signed short integers). + +""" + +from gnuradio import gr, eng_notation +from gnuradio import audio +from gnuradio import usrp +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys + +class my_top_block(gr.top_block): + + def __init__(self): + gr.top_block.__init__(self) + + usage="%prog: [options] output_filename" + parser = OptionParser(option_class=eng_option, usage=usage) + parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Rx side A or B (default=A)") + parser.add_option("-d", "--decim", type="int", default=16, + help="set fgpa decimation rate to DECIM [default=%default]") + parser.add_option("-f", "--freq", type="eng_float", default=None, + help="set frequency to FREQ", metavar="FREQ") + parser.add_option("-g", "--gain", type="eng_float", default=None, + help="set gain in dB (default is midpoint)") + parser.add_option("-8", "--width-8", action="store_true", default=False, + help="Enable 8-bit samples across USB") + parser.add_option( "--no-hb", action="store_true", default=False, + help="don't use halfband filter in usrp") + parser.add_option( "-s","--output-shorts", action="store_true", default=False, + help="output interleaved shorts in stead of complex floats") + parser.add_option("-N", "--nsamples", type="eng_float", default=None, + help="number of samples to collect [default=+inf]") + (options, args) = parser.parse_args () + if len(args) != 1: + parser.print_help() + raise SystemExit, 1 + filename = args[0] + + if options.freq is None: + parser.print_help() + sys.stderr.write('You must specify the frequency with -f FREQ\n'); + raise SystemExit, 1 + + # build the graph + if options.no_hb or (options.decim<8): + self.fpga_filename="std_4rx_0tx.rbf" #Min decimation of this firmware is 4. contains 4 Rx paths without halfbands and 0 tx paths. + if options.output_shorts: + self.u = usrp.source_s(decim_rate=options.decim,fpga_filename=self.fpga_filename) + else: + self.u = usrp.source_c(decim_rate=options.decim,fpga_filename=self.fpga_filename) + else: + #standard fpga firmware "std_2rxhb_2tx.rbf" contains 2 Rx paths with halfband filters and 2 tx paths (the default) min decimation 8 + if options.output_shorts: + self.u = usrp.source_s(decim_rate=options.decim) + else: + self.u = usrp.source_c(decim_rate=options.decim) + if options.width_8: + sample_width = 8 + sample_shift = 8 + format = self.u.make_format(sample_width, sample_shift) + r = self.u.set_format(format) + if options.output_shorts: + self.dst = gr.file_sink(gr.sizeof_short, filename) + else: + self.dst = gr.file_sink(gr.sizeof_gr_complex, filename) + if options.nsamples is None: + self.connect(self.u, self.dst) + else: + if options.output_shorts: + self.head = gr.head(gr.sizeof_short, int(options.nsamples)*2) + else: + self.head = gr.head(gr.sizeof_gr_complex, int(options.nsamples)) + self.connect(self.u, self.head, self.dst) + + if options.rx_subdev_spec is None: + options.rx_subdev_spec = usrp.pick_rx_subdevice(self.u) + self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec)) + + # determine the daughterboard subdevice we're using + self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec) + print "Using RX d'board %s" % (self.subdev.side_and_name(),) + input_rate = self.u.adc_freq() / self.u.decim_rate() + print "USB sample rate %s" % (eng_notation.num_to_str(input_rate)) + + if options.gain is None: + # if no gain was specified, use the mid-point in dB + g = self.subdev.gain_range() + options.gain = float(g[0]+g[1])/2 + + self.subdev.set_gain(options.gain) + + r = self.u.tune(0, self.subdev, options.freq) + if not r: + sys.stderr.write('Failed to set frequency\n') + raise SystemExit, 1 + + +if __name__ == '__main__': + try: + my_top_block().run() + except KeyboardInterrupt: + pass diff --git a/gr-utils/src/python/usrp_rx_nogui.py b/gr-utils/src/python/usrp_rx_nogui.py new file mode 100755 index 00000000..a5d792c8 --- /dev/null +++ b/gr-utils/src/python/usrp_rx_nogui.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python +# +# Copyright 2006,2007 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 import gr, gru, usrp, optfir, audio, eng_notation, blks2 +from gnuradio.eng_option import eng_option +from optparse import OptionParser +import sys + +""" +This example application demonstrates receiving and demodulating +different types of signals using the USRP. + +A receive chain is built up of the following signal processing +blocks: + +USRP - Daughter board source generating complex baseband signal. +CHAN - Low pass filter to select channel bandwidth +RFSQL - RF squelch zeroing output when input power below threshold +AGC - Automatic gain control leveling signal at [-1.0, +1.0] +DEMOD - Demodulation block appropriate to selected signal type. + This converts the complex baseband to real audio frequencies, + and applies an appropriate low pass decimating filter. +CTCSS - Optional tone squelch zeroing output when tone is not present. +RSAMP - Resampler block to convert audio sample rate to user specified + sound card output rate. +AUDIO - Audio sink for playing final output to speakers. + +The following are required command line parameters: + +-f FREQ USRP receive frequency +-m MOD Modulation type, select from AM, FM, or WFM + +The following are optional command line parameters: + +-R SUBDEV Daughter board specification, defaults to first found +-c FREQ Calibration offset. Gets added to receive frequency. + Defaults to 0.0 Hz. +-g GAIN Daughterboard gain setting. Defaults to mid-range. +-o RATE Sound card output rate. Defaults to 32000. Useful if + your sound card only accepts particular sample rates. +-r RFSQL RF squelch in db. Defaults to -50.0. +-p FREQ CTCSS frequency. Opens squelch when tone is present. + +Once the program is running, ctrl-break (Ctrl-C) stops operation. + +Please see fm_demod.py and am_demod.py for details of the demodulation +blocks. +""" + +# (usrp_decim, channel_decim, audio_decim, channel_pass, channel_stop, demod) +demod_params = { + 'AM' : (250, 16, 1, 5000, 8000, blks2.demod_10k0a3e_cf), + 'FM' : (250, 8, 4, 8000, 9000, blks2.demod_20k0f3e_cf), + 'WFM' : (250, 1, 8, 90000, 100000, blks2.demod_200kf3e_cf) + } + +class usrp_src(gr.hier_block2): + """ + Create a USRP source object supplying complex floats. + + Selects user supplied subdevice or chooses first available one. + + Calibration value is the offset from the tuned frequency to + the actual frequency. + """ + def __init__(self, subdev_spec, decim, gain=None, calibration=0.0): + gr.hier_block2.__init__(self, "usrp_src", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature + + self._decim = decim + self._src = usrp.source_c() + if subdev_spec is None: + subdev_spec = usrp.pick_rx_subdevice(self._src) + self._subdev = usrp.selected_subdev(self._src, subdev_spec) + self._src.set_mux(usrp.determine_rx_mux_value(self._src, subdev_spec)) + self._src.set_decim_rate(self._decim) + + # If no gain specified, set to midrange + if gain is None: + g = self._subdev.gain_range() + gain = (g[0]+g[1])/2.0 + + self._subdev.set_gain(gain) + self._cal = calibration + self.connect(self._src, self) + + def tune(self, freq): + result = usrp.tune(self._src, 0, self._subdev, freq+self._cal) + # TODO: deal with residual + + def rate(self): + return self._src.adc_rate()/self._decim + +class app_top_block(gr.top_block): + def __init__(self, options): + gr.top_block.__init__(self) + self.options = options + + (usrp_decim, channel_decim, audio_decim, + channel_pass, channel_stop, demod) = demod_params[options.modulation] + + USRP = usrp_src(options.rx_subdev_spec, # Daugherboard spec + usrp_decim, # IF decimation ratio + options.gain, # Receiver gain + options.calibration) # Frequency offset + USRP.tune(options.frequency) + + if_rate = USRP.rate() + channel_rate = if_rate // channel_decim + audio_rate = channel_rate // audio_decim + + CHAN_taps = optfir.low_pass(1.0, # Filter gain + if_rate, # Sample rate + channel_pass, # One sided modulation bandwidth + channel_stop, # One sided channel bandwidth + 0.1, # Passband ripple + 60) # Stopband attenuation + + CHAN = gr.freq_xlating_fir_filter_ccf(channel_decim, # Decimation rate + CHAN_taps, # Filter taps + 0.0, # Offset frequency + if_rate) # Sample rate + + RFSQL = gr.pwr_squelch_cc(options.rf_squelch, # Power threshold + 125.0/channel_rate, # Time constant + channel_rate/20, # 50ms rise/fall + False) # Zero, not gate output + + AGC = gr.agc_cc(1.0/channel_rate, # Time constant + 1.0, # Reference power + 1.0, # Initial gain + 1.0) # Maximum gain + + DEMOD = demod(channel_rate, audio_decim) + + # From RF to audio + self.connect(USRP, CHAN, RFSQL, AGC, DEMOD) + + # Optionally add CTCSS and RSAMP if needed + tail = DEMOD + if options.ctcss != None and options.ctcss > 60.0: + CTCSS = gr.ctcss_squelch_ff(audio_rate, # Sample rate + options.ctcss) # Squelch tone + self.connect(DEMOD, CTCSS) + tail = CTCSS + + if options.output_rate != audio_rate: + out_lcm = gru.lcm(audio_rate, options.output_rate) + out_interp = int(out_lcm // audio_rate) + out_decim = int(out_lcm // options.output_rate) + RSAMP = blks2.rational_resampler_fff(out_interp, out_decim) + self.connect(tail, RSAMP) + tail = RSAMP + + # Send to default audio output + AUDIO = audio.sink(options.output_rate, "") + self.connect(tail, AUDIO) + +def main(): + parser = OptionParser(option_class=eng_option) + parser.add_option("-f", "--frequency", type="eng_float", default=None, + help="set receive frequency to Hz", metavar="Hz") + parser.add_option("-R", "--rx-subdev-spec", type="subdev", + help="select USRP Rx side A or B", metavar="SUBDEV") + parser.add_option("-c", "--calibration", type="eng_float", default=0.0, + help="set frequency offset to Hz", metavar="Hz") + parser.add_option("-g", "--gain", type="int", default=None, + help="set RF gain", metavar="dB") + parser.add_option("-m", "--modulation", type="choice", choices=('AM','FM','WFM'), + help="set modulation type (AM,FM)", metavar="TYPE") + parser.add_option("-o", "--output-rate", type="int", default=32000, + help="set audio output rate to RATE", metavar="RATE") + parser.add_option("-r", "--rf-squelch", type="eng_float", default=-50.0, + help="set RF squelch to dB", metavar="dB") + parser.add_option("-p", "--ctcss", type="float", + help="set CTCSS squelch to FREQ", metavar="FREQ") + (options, args) = parser.parse_args() + + if options.frequency is None: + print "Must supply receive frequency with -f" + sys.exit(1) + + if options.frequency < 1e6: + options.frequency *= 1e6 + + tb = app_top_block(options) + try: + tb.run() + except KeyboardInterrupt: + pass + +if __name__ == "__main__": + main() diff --git a/gr-utils/src/python/usrp_siggen.py b/gr-utils/src/python/usrp_siggen.py new file mode 100755 index 00000000..8ae2fbfb --- /dev/null +++ b/gr-utils/src/python/usrp_siggen.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python +# +# Copyright 2004,2005,2007,2008 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 import gr, gru +from gnuradio import usrp +from gnuradio.eng_option import eng_option +from gnuradio import eng_notation +from optparse import OptionParser +import sys + + +class my_top_block(gr.top_block): + def __init__ (self, nsamples): + gr.top_block.__init__(self) + + # controllable values + self.interp = 64 + self.waveform_type = gr.GR_SIN_WAVE + self.waveform_ampl = 16000 + self.waveform_freq = 100.12345e3 + self.waveform_offset = 0 + self.nsamples = nsamples + self._instantiate_blocks () + self.set_waveform_type (self.waveform_type) + + def usb_freq (self): + return self.u.dac_freq() / self.interp + + def usb_throughput (self): + return self.usb_freq () * 4 + + def set_waveform_type (self, type): + ''' + valid waveform types are: gr.GR_SIN_WAVE, gr.GR_CONST_WAVE, + gr.GR_UNIFORM and gr.GR_GAUSSIAN + ''' + self._configure_graph (type) + self.waveform_type = type + + def set_waveform_ampl (self, ampl): + self.waveform_ampl = ampl + self.siggen.set_amplitude (ampl) + self.noisegen.set_amplitude (ampl) + + def set_waveform_freq (self, freq): + self.waveform_freq = freq + self.siggen.set_frequency (freq) + + def set_waveform_offset (self, offset): + self.waveform_offset = offset + self.siggen.set_offset (offset) + + def set_interpolator (self, interp): + self.interp = interp + self.siggen.set_sampling_freq (self.usb_freq ()) + self.u.set_interp_rate (interp) + + def _instantiate_blocks (self): + self.src = None + self.u = usrp.sink_c (0, self.interp) + + self.siggen = gr.sig_source_c (self.usb_freq (), + gr.GR_SIN_WAVE, + self.waveform_freq, + self.waveform_ampl, + self.waveform_offset) + + self.noisegen = gr.noise_source_c (gr.GR_UNIFORM, + self.waveform_ampl) + + self.head = None + if self.nsamples > 0: + self.head = gr.head(gr.sizeof_gr_complex, int(self.nsamples)) + + # self.file_sink = gr.file_sink (gr.sizeof_gr_complex, "siggen.dat") + + def _configure_graph (self, type): + try: + self.lock() + self.disconnect_all () + + if self.head: + self.connect(self.head, self.u) + tail = self.head + else: + tail = self.u + + if type == gr.GR_SIN_WAVE or type == gr.GR_CONST_WAVE: + self.connect (self.siggen, tail) + # self.connect (self.siggen, self.file_sink) + self.siggen.set_waveform (type) + self.src = self.siggen + elif type == gr.GR_UNIFORM or type == gr.GR_GAUSSIAN: + self.connect (self.noisegen, tail) + self.noisegen.set_type (type) + self.src = self.noisegen + else: + raise ValueError, type + finally: + self.unlock() + + def set_freq(self, target_freq): + """ + Set the center frequency we're interested in. + + @param target_freq: frequency in Hz + @rypte: bool + + Tuning is a two step process. First we ask the front-end to + tune as close to the desired frequency as it can. Then we use + the result of that operation and our target_frequency to + determine the value for the digital up converter. + """ + r = self.u.tune(self.subdev.which(), self.subdev, target_freq) + if r: + #print "r.baseband_freq =", eng_notation.num_to_str(r.baseband_freq) + #print "r.dxc_freq =", eng_notation.num_to_str(r.dxc_freq) + #print "r.residual_freq =", eng_notation.num_to_str(r.residual_freq) + #print "r.inverted =", r.inverted + return True + + return False + + + +def main (): + parser = OptionParser (option_class=eng_option) + parser.add_option ("-T", "--tx-subdev-spec", type="subdev", default=(0, 0), + help="select USRP Tx side A or B") + parser.add_option ("-f", "--rf-freq", type="eng_float", default=None, + help="set RF center frequency to FREQ") + parser.add_option ("-i", "--interp", type="int", default=64, + help="set fgpa interpolation rate to INTERP [default=%default]") + + parser.add_option ("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE, + help="generate a complex sinusoid [default]", default=gr.GR_SIN_WAVE) + parser.add_option ("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE, + help="generate a constant output") + parser.add_option ("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN, + help="generate Gaussian random output") + parser.add_option ("--uniform", dest="type", action="store_const", const=gr.GR_UNIFORM, + help="generate Uniform random output") + + parser.add_option ("-w", "--waveform-freq", type="eng_float", default=0, + help="set waveform frequency to FREQ [default=%default]") + parser.add_option ("-a", "--amplitude", type="eng_float", default=16e3, + help="set waveform amplitude to AMPLITUDE [default=%default]", metavar="AMPL") + parser.add_option ("-g", "--gain", type="eng_float", default=None, + help="set output gain to GAIN [default=%default]") + parser.add_option ("-o", "--offset", type="eng_float", default=0, + help="set waveform offset to OFFSET [default=%default]") + parser.add_option ("-N", "--nsamples", type="eng_float", default=0, + help="set number of samples to transmit [default=+inf]") + (options, args) = parser.parse_args () + + if len(args) != 0: + parser.print_help() + raise SystemExit + + if options.rf_freq is None: + sys.stderr.write("usrp_siggen: must specify RF center frequency with -f RF_FREQ\n") + parser.print_help() + raise SystemExit + + tb = my_top_block(options.nsamples) + tb.set_interpolator (options.interp) + tb.set_waveform_type (options.type) + tb.set_waveform_freq (options.waveform_freq) + tb.set_waveform_ampl (options.amplitude) + tb.set_waveform_offset (options.offset) + + # determine the daughterboard subdevice we're using + if options.tx_subdev_spec is None: + options.tx_subdev_spec = usrp.pick_tx_subdevice(tb.u) + + m = usrp.determine_tx_mux_value(tb.u, options.tx_subdev_spec) + #print "mux = %#04x" % (m,) + tb.u.set_mux(m) + tb.subdev = usrp.selected_subdev(tb.u, options.tx_subdev_spec) + print "Using TX d'board %s" % (tb.subdev.side_and_name(),) + + if options.gain is None: + tb.subdev.set_gain(tb.subdev.gain_range()[1]) # set max Tx gain + else: + tb.subdev.set_gain(options.gain) # set max Tx gain + + if not tb.set_freq(options.rf_freq): + sys.stderr.write('Failed to set RF frequency\n') + raise SystemExit + + tb.subdev.set_enable(True) # enable transmitter + + try: + tb.run() + except KeyboardInterrupt: + pass + + +if __name__ == '__main__': + main () diff --git a/gr-utils/src/python/usrp_test_counting.py b/gr-utils/src/python/usrp_test_counting.py new file mode 100755 index 00000000..a8300afe --- /dev/null +++ b/gr-utils/src/python/usrp_test_counting.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# +# Copyright 2004,2007 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. +# + +""" +Check Rx path or USRP Rev 1. + +This configures the USRP to return a periodic sequence of integers +""" + +from gnuradio import gr +from gnuradio import usrp + +def build_graph (): + rx_decim = 32 + + tb = gr.top_block () + usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_COUNTING) + sink = gr.check_counting_s () + tb.connect (usrp_rx, sink) + + # file_sink = gr.file_sink (gr.sizeof_short, 'counting.dat') + # tb.connect (usrp_rx, file_sink) + + return tb + +def main (): + tb = build_graph () + try: + tb.run() + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main () diff --git a/gr-utils/src/python/usrp_test_loopback.py b/gr-utils/src/python/usrp_test_loopback.py new file mode 100755 index 00000000..b58ac06a --- /dev/null +++ b/gr-utils/src/python/usrp_test_loopback.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +# +# Copyright 2004,2007 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. +# + +""" +Digital loopback (Tx to Rx) for the USRP Rev1. +""" + + +from gnuradio import gr +from gnuradio import usrp + + +def ramp_source (tb): + period = 2**16 + src = gr.vector_source_s (range (-period/2, period/2, 1), True) + return src + +def build_graph (): + tx_interp = 32 # tx should be twice rx + rx_decim = 16 + + tb = gr.top_block () + + data_src = ramp_source (tb) + # usrp_tx = usrp.sink_s (0, tx_interp, 1, 0x98) + usrp_tx = usrp.sink_s (0, tx_interp) + tb.connect (data_src, usrp_tx) + + usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK) + sink = gr.check_counting_s () + tb.connect (usrp_rx, sink) + + # file_sink = gr.file_sink (gr.sizeof_short, "loopback.dat") + # tb.connect (usrp_rx, file_sink) + + return tb + +def main (): + tb = build_graph () + try: + tb.run() + except KeyboardInterrupt: + pass + +if __name__ == '__main__': + main () diff --git a/gr-video-sdl/AUTHORS b/gr-video-sdl/AUTHORS deleted file mode 100644 index 3e57f56d..00000000 --- a/gr-video-sdl/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Martin Dudok van Heel diff --git a/gr-video-sdl/ChangeLog b/gr-video-sdl/ChangeLog deleted file mode 100644 index 528f7545..00000000 --- a/gr-video-sdl/ChangeLog +++ /dev/null @@ -1,25 +0,0 @@ -2006-02-21 Martin Dudok van Heel - - Initial release - * src/video_sdl_sink.{h,cc,i}: new. - -# -# Copyright 2006 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. -# diff --git a/gr-video-sdl/Makefile.in b/gr-video-sdl/Makefile.in index 4f146f50..3be1ef24 100644 --- a/gr-video-sdl/Makefile.in +++ b/gr-video-sdl/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,28 +76,38 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common AUTHORS ChangeLog + $(top_srcdir)/Makefile.common subdir = gr-video-sdl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +572,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = src all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-video-sdl/src/Makefile.am b/gr-video-sdl/src/Makefile.am index b69af586..04139afd 100644 --- a/gr-video-sdl/src/Makefile.am +++ b/gr-video-sdl/src/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,70 +21,49 @@ include $(top_srcdir)/Makefile.common -# Install this stuff so that it ends up as the gnuradio.video_sdl module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - EXTRA_DIST = run_tests.in -TESTS = run_tests - -LOCAL_IFILES = \ - $(top_srcdir)/gr-video-sdl/src/video_sdl.i - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -BUILT_SOURCES = \ - video_sdl.cc \ - video_sdl.py -ourpython_PYTHON = \ - video_sdl.py - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(SDL_CFLAGS) - -SWIGCPPPYTHONARGS = -fvirtual -python -modern $(PYTHON_CPPFLAGS) $(STD_DEFINES_AND_INCLUDES) +TESTS = run_tests -ourlib_LTLIBRARIES = _video_sdl.la +DISTCLEANFILES = run_tests -_video_sdl_la_SOURCES = \ - video_sdl.cc \ - video_sdl_sink_uc.cc \ - video_sdl_sink_s.cc +noinst_PYTHON = \ + qa_video_sdl.py +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(SDL_CFLAGS) \ + $(WITH_INCLUDES) grinclude_HEADERS = \ video_sdl_sink_uc.h \ video_sdl_sink_s.h -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +################################# +# SWIG interface and library -_video_sdl_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(SDL_LIBS) \ - -lstdc++ +TOP_SWIG_IFILES = \ + video_sdl.i -_video_sdl_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version +# Install so that they end up available as: +# import gnuradio.video_sdl +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +video_sdl_pythondir_category = \ + gnuradio -video_sdl.cc video_sdl.py: $(ALL_IFILES) - $(SWIG) $(SWIGCPPPYTHONARGS) -module video_sdl -o video_sdl.cc $(LOCAL_IFILES) +# additional sources for the SWIG-generated library +video_sdl_la_swig_sources = \ + video_sdl_sink_uc.cc \ + video_sdl_sink_s.cc +# additional libraries for linking with the SWIG-generated library +video_sdl_la_swig_libadd = \ + $(SDL_LIBS) \ + $(GNURADIO_CORE_LA) -noinst_PYTHON = qa_video_sdl.py +include $(top_srcdir)/Makefile.swig -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/gr-video-sdl/src/Makefile.in b/gr-video-sdl/src/Makefile.in index 71d93060..7a24953e 100644 --- a/gr-video-sdl/src/Makefile.in +++ b/gr-video-sdl/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005,2006 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 video_sdl.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -82,30 +124,41 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(grinclude_HEADERS) $(noinst_PYTHON) \ - $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/run_tests.in \ - $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(srcdir)/run_tests.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig \ + $(video_sdl_python_PYTHON) $(video_sdl_swiginclude_HEADERS) subdir = gr-video-sdl/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -114,15 +167,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -141,46 +214,50 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ - "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(video_sdl_pylibdir)" \ + "$(DESTDIR)$(video_sdl_pythondir)" "$(DESTDIR)$(grincludedir)" \ + "$(DESTDIR)$(video_sdl_swigincludedir)" +video_sdl_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(video_sdl_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -am__DEPENDENCIES_2 = \ - $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) _video_sdl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) -am__video_sdl_la_OBJECTS = video_sdl.lo video_sdl_sink_uc.lo \ - video_sdl_sink_s.lo + $(am__DEPENDENCIES_2) +am__objects_1 = _video_sdl_la-video_sdl_sink_uc.lo \ + _video_sdl_la-video_sdl_sink_s.lo +am__video_sdl_la_OBJECTS = _video_sdl_la-video_sdl.lo $(am__objects_1) _video_sdl_la_OBJECTS = $(am__video_sdl_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_video_sdl_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(_video_sdl_la_CXXFLAGS) \ + $(CXXFLAGS) $(_video_sdl_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_video_sdl_la_SOURCES) DIST_SOURCES = $(_video_sdl_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +video_sdl_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile grincludeHEADERS_INSTALL = $(INSTALL_HEADER) -swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +video_sdl_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(video_sdl_swiginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -188,9 +265,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -198,6 +282,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -210,73 +296,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -286,49 +365,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -336,15 +455,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -354,16 +616,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -372,125 +652,245 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm -# Install this stuff so that it ends up as the gnuradio.video_sdl module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/video_sdl-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* EXTRA_DIST = run_tests.in TESTS = run_tests -LOCAL_IFILES = \ - $(top_srcdir)/gr-video-sdl/src/video_sdl.i +DISTCLEANFILES = run_tests +noinst_PYTHON = \ + qa_video_sdl.py -NON_LOCAL_IFILES = \ - $(GNURADIO_I) +AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(SDL_CFLAGS) \ + $(WITH_INCLUDES) -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) +grinclude_HEADERS = \ + video_sdl_sink_uc.h \ + video_sdl_sink_s.h -BUILT_SOURCES = \ - video_sdl.cc \ - video_sdl.py -ourpython_PYTHON = \ - video_sdl.py +################################# +# SWIG interface and library +TOP_SWIG_IFILES = \ + video_sdl.i -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) $(SDL_CFLAGS) -SWIGCPPPYTHONARGS = -fvirtual -python -modern $(PYTHON_CPPFLAGS) $(STD_DEFINES_AND_INCLUDES) -ourlib_LTLIBRARIES = _video_sdl.la -_video_sdl_la_SOURCES = \ - video_sdl.cc \ + +# Install so that they end up available as: +# import gnuradio.video_sdl +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +video_sdl_pythondir_category = \ + gnuradio + + +# additional sources for the SWIG-generated library +video_sdl_la_swig_sources = \ video_sdl_sink_uc.cc \ video_sdl_sink_s.cc -grinclude_HEADERS = \ - video_sdl_sink_uc.h \ - video_sdl_sink_s.h -swiginclude_HEADERS = \ - $(LOCAL_IFILES) +# additional libraries for linking with the SWIG-generated library +video_sdl_la_swig_libadd = \ + $(SDL_LIBS) \ + $(GNURADIO_CORE_LA) + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = video_sdl.py video_sdl.cc +video_sdl_pythondir = $(pythondir)/$(video_sdl_pythondir_category) +video_sdl_pylibdir = $(pyexecdir)/$(video_sdl_pylibdir_category) +video_sdl_swigincludedir = $(swigincludedir) +video_sdl_swiginclude_HEADERS = \ + video_sdl.i \ + $(video_sdl_swiginclude_headers) + +video_sdl_pylib_LTLIBRARIES = \ + _video_sdl.la + +_video_sdl_la_SOURCES = \ + video_sdl.cc \ + $(video_sdl_la_swig_sources) _video_sdl_la_LIBADD = \ - $(PYTHON_LDFLAGS) \ - $(GNURADIO_CORE_LA) \ - $(SDL_LIBS) \ - -lstdc++ + $(STD_SWIG_LA_LIB_ADD) \ + $(video_sdl_la_swig_libadd) + +_video_sdl_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(video_sdl_la_swig_ldflags) + +_video_sdl_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(video_sdl_la_swig_cxxflags) + +video_sdl_python_PYTHON = \ + video_sdl.py \ + $(video_sdl_python) + -_video_sdl_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -noinst_PYTHON = qa_video_sdl.py -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -516,35 +916,35 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh run_tests: $(top_builddir)/config.status $(srcdir)/run_tests.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-video_sdl_pylibLTLIBRARIES: $(video_sdl_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(video_sdl_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(video_sdl_pylibdir)" + @list='$(video_sdl_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(video_sdl_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(video_sdl_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(video_sdl_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(video_sdl_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-video_sdl_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(video_sdl_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(video_sdl_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(video_sdl_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-video_sdl_pylibLTLIBRARIES: + -test -z "$(video_sdl_pylib_LTLIBRARIES)" || rm -f $(video_sdl_pylib_LTLIBRARIES) + @list='$(video_sdl_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _video_sdl.la: $(_video_sdl_la_OBJECTS) $(_video_sdl_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_video_sdl_la_LDFLAGS) $(_video_sdl_la_OBJECTS) $(_video_sdl_la_LIBADD) $(LIBS) + $(_video_sdl_la_LINK) -rpath $(video_sdl_pylibdir) $(_video_sdl_la_OBJECTS) $(_video_sdl_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -552,71 +952,88 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_sdl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_sdl_sink_s.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video_sdl_sink_uc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_video_sdl_la-video_sdl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_video_sdl_la-video_sdl_sink_s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_video_sdl_la-video_sdl_sink_uc.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_video_sdl_la-video_sdl.lo: video_sdl.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_video_sdl_la_CXXFLAGS) $(CXXFLAGS) -MT _video_sdl_la-video_sdl.lo -MD -MP -MF $(DEPDIR)/_video_sdl_la-video_sdl.Tpo -c -o _video_sdl_la-video_sdl.lo `test -f 'video_sdl.cc' || echo '$(srcdir)/'`video_sdl.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_video_sdl_la-video_sdl.Tpo $(DEPDIR)/_video_sdl_la-video_sdl.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='video_sdl.cc' object='_video_sdl_la-video_sdl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_video_sdl_la_CXXFLAGS) $(CXXFLAGS) -c -o _video_sdl_la-video_sdl.lo `test -f 'video_sdl.cc' || echo '$(srcdir)/'`video_sdl.cc + +_video_sdl_la-video_sdl_sink_uc.lo: video_sdl_sink_uc.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_video_sdl_la_CXXFLAGS) $(CXXFLAGS) -MT _video_sdl_la-video_sdl_sink_uc.lo -MD -MP -MF $(DEPDIR)/_video_sdl_la-video_sdl_sink_uc.Tpo -c -o _video_sdl_la-video_sdl_sink_uc.lo `test -f 'video_sdl_sink_uc.cc' || echo '$(srcdir)/'`video_sdl_sink_uc.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_video_sdl_la-video_sdl_sink_uc.Tpo $(DEPDIR)/_video_sdl_la-video_sdl_sink_uc.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='video_sdl_sink_uc.cc' object='_video_sdl_la-video_sdl_sink_uc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_video_sdl_la_CXXFLAGS) $(CXXFLAGS) -c -o _video_sdl_la-video_sdl_sink_uc.lo `test -f 'video_sdl_sink_uc.cc' || echo '$(srcdir)/'`video_sdl_sink_uc.cc + +_video_sdl_la-video_sdl_sink_s.lo: video_sdl_sink_s.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_video_sdl_la_CXXFLAGS) $(CXXFLAGS) -MT _video_sdl_la-video_sdl_sink_s.lo -MD -MP -MF $(DEPDIR)/_video_sdl_la-video_sdl_sink_s.Tpo -c -o _video_sdl_la-video_sdl_sink_s.lo `test -f 'video_sdl_sink_s.cc' || echo '$(srcdir)/'`video_sdl_sink_s.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_video_sdl_la-video_sdl_sink_s.Tpo $(DEPDIR)/_video_sdl_la-video_sdl_sink_s.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='video_sdl_sink_s.cc' object='_video_sdl_la-video_sdl_sink_s.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_video_sdl_la_CXXFLAGS) $(CXXFLAGS) -c -o _video_sdl_la-video_sdl_sink_s.lo `test -f 'video_sdl_sink_s.cc' || echo '$(srcdir)/'`video_sdl_sink_s.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-video_sdl_pythonPYTHON: $(video_sdl_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(video_sdl_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(video_sdl_pythondir)" + @list='$(video_sdl_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(video_sdl_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(video_sdl_pythondir)/$$f'"; \ + $(video_sdl_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(video_sdl_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(video_sdl_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(video_sdl_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-video_sdl_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(video_sdl_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(video_sdl_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(video_sdl_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(video_sdl_pythondir)/$${f}o"; \ done install-grincludeHEADERS: $(grinclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" @list='$(grinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -631,22 +1048,22 @@ uninstall-grincludeHEADERS: echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ done -install-swigincludeHEADERS: $(swiginclude_HEADERS) +install-video_sdl_swigincludeHEADERS: $(video_sdl_swiginclude_HEADERS) @$(NORMAL_INSTALL) - test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + test -z "$(video_sdl_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(video_sdl_swigincludedir)" + @list='$(video_sdl_swiginclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ - $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " $(video_sdl_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(video_sdl_swigincludedir)/$$f'"; \ + $(video_sdl_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(video_sdl_swigincludedir)/$$f"; \ done -uninstall-swigincludeHEADERS: +uninstall-video_sdl_swigincludeHEADERS: @$(NORMAL_UNINSTALL) - @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + @list='$(video_sdl_swiginclude_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + echo " rm -f '$(DESTDIR)$(video_sdl_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(video_sdl_swigincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -654,8 +1071,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -667,8 +1084,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -678,13 +1095,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -700,7 +1116,7 @@ distclean-tags: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ + list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ @@ -709,7 +1125,7 @@ check-TESTS: $(TESTS) if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ @@ -721,7 +1137,7 @@ check-TESTS: $(TESTS) elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ + *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ @@ -735,23 +1151,36 @@ check-TESTS: $(TESTS) echo "SKIP: $$tst"; \ fi; \ done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ + banner="$$All$$all $$tests passed"; \ else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ + banner="$$failed of $$all $$tests failed"; \ else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ @@ -771,23 +1200,21 @@ check-TESTS: $(TESTS) else :; fi distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. $(distdir)/../../gr-video-sdl/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -807,8 +1234,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(video_sdl_pylibdir)" "$(DESTDIR)$(video_sdl_pythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(video_sdl_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -832,6 +1259,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -839,14 +1267,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ +clean-am: clean-generic clean-libtool clean-video_sdl_pylibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -858,15 +1286,25 @@ info: info-am info-am: -install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-swigincludeHEADERS +install-data-am: install-grincludeHEADERS \ + install-video_sdl_pylibLTLIBRARIES \ + install-video_sdl_pythonPYTHON \ + install-video_sdl_swigincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -887,34 +1325,113 @@ ps: ps-am ps-am: -uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ - uninstall-swigincludeHEADERS +uninstall-am: uninstall-grincludeHEADERS \ + uninstall-video_sdl_pylibLTLIBRARIES \ + uninstall-video_sdl_pythonPYTHON \ + uninstall-video_sdl_swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-ourlibLTLIBRARIES ctags \ - dist-hook distclean distclean-compile distclean-generic \ + clean-generic clean-libtool clean-video_sdl_pylibLTLIBRARIES \ + ctags dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ - install-grincludeHEADERS install-info install-info-am \ - install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ - install-strip install-swigincludeHEADERS installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-video_sdl_pylibLTLIBRARIES \ + install-video_sdl_pythonPYTHON \ + install-video_sdl_swigincludeHEADERS installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-grincludeHEADERS \ - uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS + uninstall-video_sdl_pylibLTLIBRARIES \ + uninstall-video_sdl_pythonPYTHON \ + uninstall-video_sdl_swigincludeHEADERS -video_sdl.cc video_sdl.py: $(ALL_IFILES) - $(SWIG) $(SWIGCPPPYTHONARGS) -module video_sdl -o video_sdl.cc $(LOCAL_IFILES) +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -# Don't distribute output of swig +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +video_sdl_pythondir_category ?= gnuradio/video_sdl +video_sdl_pylibdir_category ?= $(video_sdl_pythondir_category) + +video_sdl.h video_sdl.py video_sdl.cc: video_sdl.i + trap 'rm -rf $(DEPDIR)/video_sdl-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/video_sdl-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/video_sdl-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/video_sdl-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/video_sdl-generate-lock; \ + else \ + while test -d $(DEPDIR)/video_sdl-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/video_sdl-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/video_sdl-generate-stamp: + 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; + $(RM) $(DEPDIR)/video_sdl.d + cp $(DEPDIR)/video_sdl.Std $(DEPDIR)/video_sdl.d + echo "" >> $(DEPDIR)/video_sdl.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/video_sdl.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/video_sdl.d + $(RM) $(DEPDIR)/video_sdl.Std + touch $(DEPDIR)/video_sdl-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)/video_sdl.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-video-sdl/src/Makefile.swig.gen b/gr-video-sdl/src/Makefile.swig.gen new file mode 100644 index 00000000..a2728a4f --- /dev/null +++ b/gr-video-sdl/src/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 video_sdl.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/video_sdl +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/video_sdl +## +## 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. + +video_sdl_pythondir_category ?= gnuradio/video_sdl +video_sdl_pylibdir_category ?= $(video_sdl_pythondir_category) +video_sdl_pythondir = $(pythondir)/$(video_sdl_pythondir_category) +video_sdl_pylibdir = $(pyexecdir)/$(video_sdl_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +video_sdl_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)/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 . + +video_sdl_swiginclude_HEADERS = \ + video_sdl.i \ + $(video_sdl_swiginclude_headers) + +video_sdl_pylib_LTLIBRARIES = \ + _video_sdl.la + +_video_sdl_la_SOURCES = \ + video_sdl.cc \ + $(video_sdl_la_swig_sources) + +_video_sdl_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(video_sdl_la_swig_libadd) + +_video_sdl_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(video_sdl_la_swig_ldflags) + +_video_sdl_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(video_sdl_la_swig_cxxflags) + +video_sdl_python_PYTHON = \ + video_sdl.py \ + $(video_sdl_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/video_sdl.d@am__quote@ + diff --git a/gr-video-sdl/src/qa_video_sdl.py b/gr-video-sdl/src/qa_video_sdl.py index 9f1e8479..98da85f6 100755 --- a/gr-video-sdl/src/qa_video_sdl.py +++ b/gr-video-sdl/src/qa_video_sdl.py @@ -26,10 +26,10 @@ import video_sdl class qa_video_sdl (gr_unittest.TestCase): def setUp (self): - self.fg = gr.flow_graph () + self.tb = gr.top_block () def tearDown (self): - self.fg = None + self.tb = None def test_000_nop (self): """Just see if we can import the module... diff --git a/gr-video-sdl/src/video_sdl.i b/gr-video-sdl/src/video_sdl.i index 9cfa1589..7084c209 100644 --- a/gr-video-sdl/src/video_sdl.i +++ b/gr-video-sdl/src/video_sdl.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,16 +20,11 @@ * Boston, MA 02110-1301, USA. */ -%feature("autodoc","1"); - -%include "exception.i" -%import "gnuradio.i" // the common stuff +%include "gnuradio.i" // the common stuff %{ -#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix #include "video_sdl_sink_uc.h" #include "video_sdl_sink_s.h" -#include %} // ---------------------------------------------------------------- diff --git a/gr-video-sdl/src/video_sdl_sink_s.cc b/gr-video-sdl/src/video_sdl_sink_s.cc index cc37c44d..825cd80c 100644 --- a/gr-video-sdl/src/video_sdl_sink_s.cc +++ b/gr-video-sdl/src/video_sdl_sink_s.cc @@ -35,6 +35,7 @@ #include #include #include +#include diff --git a/gr-video-sdl/src/video_sdl_sink_uc.cc b/gr-video-sdl/src/video_sdl_sink_uc.cc index c141a874..2d25399a 100644 --- a/gr-video-sdl/src/video_sdl_sink_uc.cc +++ b/gr-video-sdl/src/video_sdl_sink_uc.cc @@ -35,6 +35,7 @@ #include #include #include +#include diff --git a/gr-wxgui/ChangeLog b/gr-wxgui/ChangeLog deleted file mode 100644 index da4e7417..00000000 --- a/gr-wxgui/ChangeLog +++ /dev/null @@ -1,171 +0,0 @@ -2006-07-24 Eric Blossom - - * src/python/powermate.py (powermate._open_device): added additional - name for ID_SHUTTLE_XPRESS per Kwan Hong Lee - -2006-06-15 Eric Blossom - - * src/python/fftsink.py, src/python/waterfallsink.py, - src/python/scopesink.py: added set_sample_rate method. - -2006-04-02 Eric Blossom - - * src/python/fftsink.py (default_fft_rate): query prefs for default. - * src/python/waterfallsink.py (default_fft_rate): query prefs for default. - * src/python/scopesink (default_frame_decim): query prefs for default. - -2006-03-29 Eric Blossom - - * src/python/fftsink.py: updated to use renamed stream_to_vector - instead of serial_to_parallel. Updated ref_level and y_per_div in - builtin test case. - -2006-02-02 Eric Blossom - - * src/python/scopesink.py: now supports manual as well as - autoscaling of the y-axis. Thank to Jon Jacky. - -2005-12-08 Eric Blossom - - * src/python/stdgui.py (stdapp.__init__): added redirect=False arg - to wx.App.__init__ for Mac users. Thanks to Jon Jacky. - -2005-11-15 Eric Blossom - - * src/python/fftsink.py, src/python/scopesink.py: refactored to - use messages and message queues instead of pipes to communicate - with the C++ side. A side benefit is that the C++ side now will - not block when sending data to the gui. - -2005-10-25 Eric Blossom - - * src/python/fftsink.py: added peak_hold function and menu item. - -2005-10-14 Eric Blossom - - * src/python/form.py (quantized_slider_field): new field type, - very nice for quantized floats such as frequency, gain, etc. - -2005-08-28 Eric Blossom - - * src/python/form.py: new. tools for building forms based GUIs. - -2005-08-15 Eric Blossom - - * src/python/waterfallsink.py: fftshift data so it comes out as - expected -- -ve freqs on the left, 0 in the middle, +ve freqs on - right. Thanks to James Smith. - -2005-08-15 Krzysztof Kamieniecki - - * src/python/powermate.py: on GNU/Linux get exclusive access to knob. - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac: mods for x86_64, $(NO_UNDEFINED) - -2005-06-19 Eric Blossom - - * src/python/waterfallsink.py: reworked to use latest FFT sink stuff. - * src/python/fftsink.py (fft_sink_f.__init__): added missing call - to set_average. - -2005-06-11 Eric Blossom - - * src/python/fftsink.py: normalized FFT by number of points. - -2005-06-08 Krzysztof Kamieniecki - - * src/python/powermate.py: added support for ShuttlePRO v2. - -2005-05-15 Eric Blossom - - * src/python/powermate.py: new. Support the Griffin PowerMate and - Countour Shuttle/Jog usb knobs. (Revised version of what I got - from Matt.) - -2005-05-11 Eric Blossom - - * src/python/fftsink.py, src/python/scopesink.py: Use - gru.os_read_exactly instead of os.read to avoid problems with - short reads [thanks to Jon Jacky for troubleshooting]. - Added throttle block to demo to keep it from sucking down all CPU. - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - -2005-03-16 Eric Blossom - - * src/python/scopesink.py (graph_window.format_data): enabled legend. - -2005-03-13 David Carr - - * src/python/waterfallsink.py: New faster, in color - -2005-03-04 Eric Blossom - - * src/python/slider.py: high level interface to wx.Slider - -2005-02-25 Eric Blossom - - Moved everything from src/python/gnuradio/wxgui to src/python and - removed the unnecessary hierarchy. - -2004-11-15 Matt Ettus - - * src/python/gnuradio/wxgui/waterfallsink.py: new, from David Carr - -2004-10-13 Eric Blossom - - * configure.ac: upped rev to 0.1cvs - -2004-10-11 Eric Blossom - - * configure.ac: bumped rev to 0.1, make release - * Makefile.am (EXTRA_DIST): added config.h.in - -2004-09-23 Eric Blossom - - * config/usrp_fusb_tech.m4, config/bnv_have_qt.m4, config/cppunit.m4, - config/gr_check_mc4020.m4, config/gr_check_usrp.m4, config/gr_doxygen.m4, - config/gr_gprof.m4, config/gr_scripting.m4, config/gr_set_md_cpu.m4, - config/pkg.m4, config/usrp_fusb_tech.m4: added additional quoting - to first arg of AC_DEFUN to silence automake warning. - -2004-09-19 Eric Blossom - - * src/python/gnuradio/wxgui/stdgui.py: reworked to really subclass - wx.App - -2004-09-18 Eric Blossom - - * src/python/gnuradio/wxgui/stdgui.py: new. - * src/python/gnuradio/wxgui/fftsink.py: new. - * src/python/gnuradio/wxgui/scopesink.py: new. Needs work - -# -# Copyright 2004,2005,2006 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. -# diff --git a/gr-wxgui/Makefile.am b/gr-wxgui/Makefile.am index c5948570..d0680d7e 100644 --- a/gr-wxgui/Makefile.am +++ b/gr-wxgui/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,8 +21,15 @@ include $(top_srcdir)/Makefile.common -EXTRA_DIST = gr-wxgui.conf +EXTRA_DIST = \ + gr-wxgui.pc.in \ + README \ + README.gl + SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-wxgui.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-wxgui.conf + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gr-wxgui.pc diff --git a/gr-wxgui/Makefile.in b/gr-wxgui/Makefile.in index aa8869fb..f4d21901 100644 --- a/gr-wxgui/Makefile.in +++ b/gr-wxgui/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2006 Free Software Foundation, Inc. +# Copyright 2004,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,15 +57,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,29 +76,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common ChangeLog +DIST_COMMON = README $(dist_etc_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/gr-wxgui.pc.in \ + $(top_srcdir)/Makefile.common subdir = gr-wxgui ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -111,15 +118,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -131,24 +158,28 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = +CONFIG_CLEAN_FILES = gr-wxgui.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(etcdir)" -etcDATA_INSTALL = $(INSTALL_DATA) -DATA = $(etc_DATA) +am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(pkgconfigdir)" +dist_etcDATA_INSTALL = $(INSTALL_DATA) +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_etc_DATA) $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -156,10 +187,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -167,9 +197,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -177,6 +214,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -189,73 +228,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -265,49 +297,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -315,15 +387,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -333,16 +548,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -351,67 +584,142 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -EXTRA_DIST = gr-wxgui.conf +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + gr-wxgui.pc.in \ + README \ + README.gl + SUBDIRS = src -etcdir = $(sysconfdir)/gnuradio/conf.d -etc_DATA = gr-wxgui.conf +etcdir = $(gr_sysconfdir) +dist_etc_DATA = gr-wxgui.conf +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gr-wxgui.pc all: all-recursive .SUFFIXES: @@ -419,8 +727,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -444,33 +752,48 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gr-wxgui.pc: $(top_builddir)/config.status $(srcdir)/gr-wxgui.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-etcDATA: $(etc_DATA) +install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) - test -z "$(etcdir)" || $(mkdir_p) "$(DESTDIR)$(etcdir)" - @list='$(etc_DATA)'; for p in $$list; do \ + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ - echo " $(etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ - $(etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ done -uninstall-etcDATA: +uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) - @list='$(etc_DATA)'; for p in $$list; do \ + @list='$(dist_etc_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ rm -f "$(DESTDIR)$(etcdir)/$$f"; \ done +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -503,8 +826,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -548,8 +870,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -574,8 +896,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -585,13 +907,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -605,23 +926,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -635,7 +954,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -643,17 +962,22 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(etcdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -670,6 +994,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -685,8 +1010,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -698,14 +1022,22 @@ info: info-recursive info-am: -install-data-am: install-etcDATA +install-data-am: install-dist_etcDATA install-pkgconfigDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -724,24 +1056,37 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-etcDATA uninstall-info-am +uninstall-am: uninstall-dist_etcDATA uninstall-pkgconfigDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-etcDATA install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-etcDATA \ - uninstall-info-am + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_etcDATA \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-wxgui/README.gl b/gr-wxgui/README.gl new file mode 100644 index 00000000..1d3eec60 --- /dev/null +++ b/gr-wxgui/README.gl @@ -0,0 +1,29 @@ +To use the OpenGL versions of the graphical display sinks, you must ensure +that you have Python wrappers for OpenGL installed and are using a version +of wxPython that supports it. Then you must enable this mode by creating or +editing an entry in the GNU Radio preferences file at: + +~/.gnuradio/config.conf + +[wxgui] +style=gl +fft_rate=30 +waterfall_rate=30 +scope_rate=30 +number_rate=5 +const_rate=5 +const_size=2048 + +>>>The style parameter accepts 'nongl', 'gl', and 'auto', and defaults to 'auto'. + +'nongl' forces the use of the non-GL (current) sinks. + +'gl' forces the use of the new GL based sinks, and will raise an exception if the +appropriate GL support does not exist. + +'auto' currently equates to 'nongl'; however, in release 3.2, this will change to +use GL if possible and if not, fallback to the non-GL versions. + +>>>The *_rate parameter sets the frame rate for various gl sinks. + +>>>The const_size parameter sets the number of constellation points per frame. diff --git a/gr-wxgui/gr-wxgui.conf b/gr-wxgui/gr-wxgui.conf index f6b128c6..da458238 100644 --- a/gr-wxgui/gr-wxgui.conf +++ b/gr-wxgui/gr-wxgui.conf @@ -3,5 +3,11 @@ # ~/.gnuradio/config.conf [wxgui] -fft_rate = 15 # fftsink and waterfallsink -frame_decim = 1 # scopesink +# 'gl', 'nongl', or 'auto' +style = auto + +# fftsink and waterfallsink +fft_rate = 15 + +# scopesink +frame_decim = 1 diff --git a/gr-wxgui/gr-wxgui.pc.in b/gr-wxgui/gr-wxgui.pc.in new file mode 100644 index 00000000..a3e352f0 --- /dev/null +++ b/gr-wxgui/gr-wxgui.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: gr-wxgui +Description: A simple wx gui for GNU Radio applications +Requires: gnuradio-core +Version: @VERSION@ +Libs: +Cflags: diff --git a/gr-wxgui/src/Makefile.in b/gr-wxgui/src/Makefile.in index dec095b2..4d8c1113 100644 --- a/gr-wxgui/src/Makefile.in +++ b/gr-wxgui/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = gr-wxgui/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +161,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +175,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +185,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +202,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +216,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +285,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +375,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +536,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +572,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = python all: all-recursive @@ -406,8 +706,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -438,10 +738,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -473,8 +769,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -518,8 +813,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -544,8 +839,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -555,13 +850,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -575,23 +869,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -605,7 +897,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -613,10 +905,15 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive all-am: Makefile @@ -637,6 +934,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -652,8 +950,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -667,12 +964,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -691,23 +996,35 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-wxgui/src/python/Makefile.am b/gr-wxgui/src/python/Makefile.am index 3578bc0f..e06298a2 100644 --- a/gr-wxgui/src/python/Makefile.am +++ b/gr-wxgui/src/python/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,6 +21,8 @@ include $(top_srcdir)/Makefile.common +SUBDIRS = plotter + # Install this stuff so that it ends up as the gnuradio.wxgui module # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio/wxgui @@ -30,11 +32,37 @@ ourlibdir = $(grpyexecdir)/wxgui ourpython_PYTHON = \ __init__.py \ + common.py \ + constants.py \ + constsink_gl.py \ + const_window.py \ form.py \ - fftsink.py \ + fftsink2.py \ + fftsink_nongl.py \ + fftsink_gl.py \ + fft_window.py \ + gui.py \ + histosink_gl.py \ + histo_window.py \ + numbersink2.py \ + number_window.py \ plot.py \ powermate.py \ - scopesink.py \ - waterfallsink.py \ + pubsub.py \ + scopesink2.py \ + scopesink_nongl.py \ + scopesink_gl.py \ + scope_window.py \ + waterfallsink2.py \ + waterfallsink_nongl.py \ + waterfallsink_gl.py \ + waterfall_window.py \ slider.py \ - stdgui.py + stdgui2.py + +formspythondir = $(grpythondir)/wxgui/forms + +formspython_PYTHON = \ + forms/__init__.py \ + forms/forms.py \ + forms/converters.py diff --git a/gr-wxgui/src/python/Makefile.in b/gr-wxgui/src/python/Makefile.in index fd3ca2d1..228353f3 100644 --- a/gr-wxgui/src/python/Makefile.in +++ b/gr-wxgui/src/python/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2004,2005 Free Software Foundation, Inc. +# Copyright 2004,2005,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -79,29 +75,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(ourpython_PYTHON) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +DIST_COMMON = $(formspython_PYTHON) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = gr-wxgui/src/python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +117,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -133,23 +160,36 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourpythondir)" +am__installdirs = "$(DESTDIR)$(formspythondir)" \ + "$(DESTDIR)$(ourpythondir)" +formspythonPYTHON_INSTALL = $(INSTALL_DATA) ourpythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +197,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +214,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +228,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +297,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +387,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +548,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,63 +584,133 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = plotter # Install this stuff so that it ends up as the gnuradio.wxgui module # This usually ends up at: @@ -406,24 +719,49 @@ ourpythondir = $(grpythondir)/wxgui ourlibdir = $(grpyexecdir)/wxgui ourpython_PYTHON = \ __init__.py \ + common.py \ + constants.py \ + constsink_gl.py \ + const_window.py \ form.py \ - fftsink.py \ + fftsink2.py \ + fftsink_nongl.py \ + fftsink_gl.py \ + fft_window.py \ + gui.py \ + histosink_gl.py \ + histo_window.py \ + numbersink2.py \ + number_window.py \ plot.py \ powermate.py \ - scopesink.py \ - waterfallsink.py \ + pubsub.py \ + scopesink2.py \ + scopesink_nongl.py \ + scopesink_gl.py \ + scope_window.py \ + waterfallsink2.py \ + waterfallsink_nongl.py \ + waterfallsink_gl.py \ + waterfall_window.py \ slider.py \ - stdgui.py + stdgui2.py -all: all-am +formspythondir = $(grpythondir)/wxgui/forms +formspython_PYTHON = \ + forms/__init__.py \ + forms/forms.py \ + forms/converters.py + +all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -453,13 +791,37 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs +install-formspythonPYTHON: $(formspython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(formspythondir)" || $(MKDIR_P) "$(DESTDIR)$(formspythondir)" + @list='$(formspython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(formspythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(formspythondir)/$$f'"; \ + $(formspythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(formspythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(formspythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(formspythondir)" $$dlist; \ + fi; \ + else :; fi -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-formspythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(formspython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(formspythondir)/$$f"; \ + rm -f "$(DESTDIR)$(formspythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(formspythondir)/$${f}o"; \ + done install-ourpythonPYTHON: $(ourpython_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ @@ -485,31 +847,153 @@ uninstall-ourpythonPYTHON: rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique tags: TAGS -TAGS: +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi ctags: CTAGS -CTAGS: +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -520,28 +1004,50 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am -check: check-am +check: check-recursive all-am: Makefile -installdirs: - for dir in "$(DESTDIR)$(ourpythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(formspythondir)" "$(DESTDIR)$(ourpythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-am +installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -551,63 +1057,89 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-am +clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am -distclean: distclean-am +distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic distclean-tags -dvi: dvi-am +dvi: dvi-recursive dvi-am: -html: html-am +html: html-recursive -info: info-am +info: info-recursive info-am: -install-data-am: install-ourpythonPYTHON +install-data-am: install-formspythonPYTHON install-ourpythonPYTHON + +install-dvi: install-dvi-recursive install-exec-am: -install-info: install-info-am +install-html: install-html-recursive + +install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: -maintainer-clean: maintainer-clean-am +maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-am +mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool -pdf: pdf-am +pdf: pdf-recursive pdf-am: -ps: ps-am +ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am uninstall-ourpythonPYTHON +uninstall-am: uninstall-formspythonPYTHON uninstall-ourpythonPYTHON + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man \ - install-ourpythonPYTHON install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-formspythonPYTHON install-html \ + install-html-am install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am uninstall-ourpythonPYTHON + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-formspythonPYTHON \ + uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/gr-wxgui/src/python/__init__.py b/gr-wxgui/src/python/__init__.py index 027150db..8b137891 100644 --- a/gr-wxgui/src/python/__init__.py +++ b/gr-wxgui/src/python/__init__.py @@ -1 +1 @@ -# make this directory a package + diff --git a/gr-wxgui/src/python/common.py b/gr-wxgui/src/python/common.py new file mode 100644 index 00000000..d555a1f0 --- /dev/null +++ b/gr-wxgui/src/python/common.py @@ -0,0 +1,142 @@ +# +# Copyright 2008 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. +# + +#A macro to apply an index to a key +index_key = lambda key, i: "%s_%d"%(key, i+1) + +def _register_access_method(destination, controller, key): + """ + Helper function for register access methods. + This helper creates distinct set and get methods for each key + and adds them to the destination object. + """ + def set(value): controller[key] = value + setattr(destination, 'set_'+key, set) + def get(): return controller[key] + setattr(destination, 'get_'+key, get) + +def register_access_methods(destination, controller): + """ + Register setter and getter functions in the destination object for all keys in the controller. + @param destination the object to get new setter and getter methods + @param controller the pubsub controller + """ + for key in controller.keys(): _register_access_method(destination, controller, key) + +################################################## +# Input Watcher Thread +################################################## +from gnuradio import gru + +class input_watcher(gru.msgq_runner): + """ + Input watcher thread runs forever. + Read messages from the message queue. + Forward messages to the message handler. + """ + def __init__ (self, msgq, controller, msg_key, arg1_key='', arg2_key=''): + self._controller = controller + self._msg_key = msg_key + self._arg1_key = arg1_key + self._arg2_key = arg2_key + gru.msgq_runner.__init__(self, msgq, self.handle_msg) + + def handle_msg(self, msg): + if self._arg1_key: self._controller[self._arg1_key] = msg.arg1() + if self._arg2_key: self._controller[self._arg2_key] = msg.arg2() + self._controller[self._msg_key] = msg.to_string() + + +################################################## +# Shared Functions +################################################## +import numpy +import math + +def get_exp(num): + """ + Get the exponent of the number in base 10. + @param num the floating point number + @return the exponent as an integer + """ + if num == 0: return 0 + return int(math.floor(math.log10(abs(num)))) + +def get_clean_num(num): + """ + Get the closest clean number match to num with bases 1, 2, 5. + @param num the number + @return the closest number + """ + if num == 0: return 0 + sign = num > 0 and 1 or -1 + exp = get_exp(num) + nums = numpy.array((1, 2, 5, 10))*(10**exp) + return sign*nums[numpy.argmin(numpy.abs(nums - abs(num)))] + +def get_clean_incr(num): + """ + Get the next higher clean number with bases 1, 2, 5. + @param num the number + @return the next higher number + """ + num = get_clean_num(num) + exp = get_exp(num) + coeff = int(round(num/10**exp)) + return { + -5: -2, + -2: -1, + -1: -.5, + 1: 2, + 2: 5, + 5: 10, + }[coeff]*(10**exp) + +def get_clean_decr(num): + """ + Get the next lower clean number with bases 1, 2, 5. + @param num the number + @return the next lower number + """ + num = get_clean_num(num) + exp = get_exp(num) + coeff = int(round(num/10**exp)) + return { + -5: -10, + -2: -5, + -1: -2, + 1: .5, + 2: 1, + 5: 2, + }[coeff]*(10**exp) + +def get_min_max(samples): + """ + Get the minimum and maximum bounds for an array of samples. + @param samples the array of real values + @return a tuple of min, max + """ + scale_factor = 3 + mean = numpy.average(samples) + rms = numpy.max([scale_factor*((numpy.sum((samples-mean)**2)/len(samples))**.5), .1]) + min = mean - rms + max = mean + rms + return min, max diff --git a/gr-wxgui/src/python/const_window.py b/gr-wxgui/src/python/const_window.py new file mode 100644 index 00000000..b128a4a9 --- /dev/null +++ b/gr-wxgui/src/python/const_window.py @@ -0,0 +1,208 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import plotter +import common +import wx +import numpy +import math +import pubsub +from constants import * +from gnuradio import gr #for gr.prefs +import forms + +################################################## +# Constants +################################################## +SLIDER_STEPS = 200 +ALPHA_MIN_EXP, ALPHA_MAX_EXP = -6, -0.301 +GAIN_MU_MIN_EXP, GAIN_MU_MAX_EXP = -6, -0.301 +DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'const_rate', 5) +DEFAULT_WIN_SIZE = (500, 400) +DEFAULT_CONST_SIZE = gr.prefs().get_long('wxgui', 'const_size', 2048) +CONST_PLOT_COLOR_SPEC = (0, 0, 1) +MARKER_TYPES = ( + ('Dot Small', 1.0), + ('Dot Medium', 2.0), + ('Dot Large', 3.0), + ('Line Link', None), +) +DEFAULT_MARKER_TYPE = 2.0 + +################################################## +# Constellation window control panel +################################################## +class control_panel(wx.Panel): + """ + A control panel with wx widgits to control the plotter. + """ + def __init__(self, parent): + """ + Create a new control panel. + @param parent the wx parent window + """ + self.parent = parent + wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER) + control_box = forms.static_box_sizer( + parent=self, label='Options', + bold=True, orient=wx.VERTICAL, + ) + #alpha + control_box.AddStretchSpacer() + forms.text_box( + sizer=control_box, parent=self, label='Alpha', + converter=forms.float_converter(), + ps=parent, key=ALPHA_KEY, + ) + forms.log_slider( + sizer=control_box, parent=self, + min_exp=ALPHA_MIN_EXP, + max_exp=ALPHA_MAX_EXP, + num_steps=SLIDER_STEPS, + ps=parent, key=ALPHA_KEY, + ) + #gain_mu + control_box.AddStretchSpacer() + forms.text_box( + sizer=control_box, parent=self, label='Gain Mu', + converter=forms.float_converter(), + ps=parent, key=GAIN_MU_KEY, + ) + forms.log_slider( + sizer=control_box, parent=self, + min_exp=GAIN_MU_MIN_EXP, + max_exp=GAIN_MU_MAX_EXP, + num_steps=SLIDER_STEPS, + ps=parent, key=GAIN_MU_KEY, + ) + #marker + control_box.AddStretchSpacer() + forms.drop_down( + sizer=control_box, parent=self, + ps=parent, key=MARKER_KEY, label='Marker', + choices=map(lambda x: x[1], MARKER_TYPES), + labels=map(lambda x: x[0], MARKER_TYPES), + ) + #run/stop + control_box.AddStretchSpacer() + forms.toggle_button( + sizer=control_box, parent=self, + true_label='Stop', false_label='Run', + ps=parent, key=RUNNING_KEY, + ) + #set sizer + self.SetSizerAndFit(control_box) + +################################################## +# Constellation window with plotter and control panel +################################################## +class const_window(wx.Panel, pubsub.pubsub): + def __init__( + self, + parent, + controller, + size, + title, + msg_key, + alpha_key, + beta_key, + gain_mu_key, + gain_omega_key, + omega_key, + sample_rate_key, + ): + pubsub.pubsub.__init__(self) + #proxy the keys + self.proxy(MSG_KEY, controller, msg_key) + self.proxy(ALPHA_KEY, controller, alpha_key) + self.proxy(BETA_KEY, controller, beta_key) + self.proxy(GAIN_MU_KEY, controller, gain_mu_key) + self.proxy(GAIN_OMEGA_KEY, controller, gain_omega_key) + self.proxy(OMEGA_KEY, controller, omega_key) + self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key) + #initialize values + self[RUNNING_KEY] = True + self[X_DIVS_KEY] = 8 + self[Y_DIVS_KEY] = 8 + self[MARKER_KEY] = DEFAULT_MARKER_TYPE + #init panel and plot + wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER) + self.plotter = plotter.channel_plotter(self) + self.plotter.SetSize(wx.Size(*size)) + self.plotter.set_title(title) + self.plotter.set_x_label('Inphase') + self.plotter.set_y_label('Quadrature') + self.plotter.enable_point_label(True) + self.plotter.enable_grid_lines(True) + #setup the box with plot and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer(wx.HORIZONTAL) + main_box.Add(self.plotter, 1, wx.EXPAND) + main_box.Add(self.control_panel, 0, wx.EXPAND) + self.SetSizerAndFit(main_box) + #alpha and gain mu 2nd orders + def set_beta(alpha): self[BETA_KEY] = .25*alpha**2 + self.subscribe(ALPHA_KEY, set_beta) + def set_gain_omega(gain_mu): self[GAIN_OMEGA_KEY] = .25*gain_mu**2 + self.subscribe(GAIN_MU_KEY, set_gain_omega) + #register events + self.subscribe(MSG_KEY, self.handle_msg) + self.subscribe(X_DIVS_KEY, self.update_grid) + self.subscribe(Y_DIVS_KEY, self.update_grid) + #initial update + self.update_grid() + + def handle_msg(self, msg): + """ + Plot the samples onto the complex grid. + @param msg the array of complex samples + """ + if not self[RUNNING_KEY]: return + #convert to complex floating point numbers + samples = numpy.fromstring(msg, numpy.complex64) + real = numpy.real(samples) + imag = numpy.imag(samples) + #plot + self.plotter.set_waveform( + channel=0, + samples=(real, imag), + color_spec=CONST_PLOT_COLOR_SPEC, + marker=self[MARKER_KEY], + ) + #update the plotter + self.plotter.update() + + def update_grid(self): + #update the x axis + x_max = 2.0 + self.plotter.set_x_grid(-x_max, x_max, common.get_clean_num(2.0*x_max/self[X_DIVS_KEY])) + #update the y axis + y_max = 2.0 + self.plotter.set_y_grid(-y_max, y_max, common.get_clean_num(2.0*y_max/self[Y_DIVS_KEY])) + #update plotter + self.plotter.update() + + + + diff --git a/gr-wxgui/src/python/constants.py b/gr-wxgui/src/python/constants.py new file mode 100644 index 00000000..5e139570 --- /dev/null +++ b/gr-wxgui/src/python/constants.py @@ -0,0 +1,69 @@ +# +# Copyright 2008 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. +# + +################################################## +# Controller Keys +################################################## +AC_COUPLE_KEY = 'ac_couple' +ALPHA_KEY = 'alpha' +AUTORANGE_KEY = 'autorange' +AVERAGE_KEY = 'average' +AVG_ALPHA_KEY = 'avg_alpha' +BASEBAND_FREQ_KEY = 'baseband_freq' +BETA_KEY = 'beta' +COLOR_MODE_KEY = 'color_mode' +DECIMATION_KEY = 'decimation' +DYNAMIC_RANGE_KEY = 'dynamic_range' +FRAME_RATE_KEY = 'frame_rate' +GAIN_MU_KEY = 'gain_mu' +GAIN_OMEGA_KEY = 'gain_omega' +MARKER_KEY = 'marker' +XY_MARKER_KEY = 'xy_marker' +MSG_KEY = 'msg' +NUM_LINES_KEY = 'num_lines' +OMEGA_KEY = 'omega' +PEAK_HOLD_KEY = 'peak_hold' +REF_LEVEL_KEY = 'ref_level' +RUNNING_KEY = 'running' +SAMPLE_RATE_KEY = 'sample_rate' +TRIGGER_CHANNEL_KEY = 'trigger_channel' +TRIGGER_LEVEL_KEY = 'trigger_level' +TRIGGER_MODE_KEY = 'trigger_mode' +TRIGGER_SLOPE_KEY = 'trigger_slope' +TRIGGER_SHOW_KEY = 'trigger_show' +XY_MODE_KEY = 'xy_mode' +X_CHANNEL_KEY = 'x_channel' +Y_CHANNEL_KEY = 'y_channel' +T_FRAC_OFF_KEY = 't_frac_off' +T_DIVS_KEY = 't_divs' +T_OFF_KEY = 't_off' +T_PER_DIV_KEY = 't_per_div' +X_DIVS_KEY = 'x_divs' +X_OFF_KEY = 'x_off' +X_PER_DIV_KEY = 'x_per_div' +Y_DIVS_KEY = 'y_divs' +Y_OFF_KEY = 'y_off' +Y_PER_DIV_KEY = 'y_per_div' +MAXIMUM_KEY = 'maximum' +MINIMUM_KEY = 'minimum' +NUM_BINS_KEY = 'num_bins' +FRAME_SIZE_KEY = 'frame_size' +CHANNEL_OPTIONS_KEY = 'channel_options' diff --git a/gr-wxgui/src/python/constsink_gl.py b/gr-wxgui/src/python/constsink_gl.py new file mode 100644 index 00000000..b3a1625b --- /dev/null +++ b/gr-wxgui/src/python/constsink_gl.py @@ -0,0 +1,135 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import const_window +import common +from gnuradio import gr, blks2 +from pubsub import pubsub +from constants import * + +################################################## +# Constellation sink block (wrapper for old wxgui) +################################################## +class const_sink_c(gr.hier_block2): + """ + A constellation block with a gui window. + """ + + def __init__( + self, + parent, + title='', + sample_rate=1, + size=const_window.DEFAULT_WIN_SIZE, + frame_rate=const_window.DEFAULT_FRAME_RATE, + const_size=const_window.DEFAULT_CONST_SIZE, + #mpsk recv params + M=4, + theta=0, + alpha=0.005, + fmax=0.06, + mu=0.5, + gain_mu=0.005, + symbol_rate=1, + omega_limit=0.005, + ): + #init + gr.hier_block2.__init__( + self, + "const_sink", + gr.io_signature(1, 1, gr.sizeof_gr_complex), + gr.io_signature(0, 0, 0), + ) + #blocks + sd = blks2.stream_to_vector_decimator( + item_size=gr.sizeof_gr_complex, + sample_rate=sample_rate, + vec_rate=frame_rate, + vec_len=const_size, + ) + beta = .25*alpha**2 #redundant, will be updated + fmin = -fmax + gain_omega = .25*gain_mu**2 #redundant, will be updated + omega = 1 #set_sample_rate will update this + # Costas frequency/phase recovery loop + # Critically damped 2nd order PLL + self._costas = gr.costas_loop_cc(alpha, beta, fmax, fmin, M) + # Timing recovery loop + # Critically damped 2nd order DLL + self._retime = gr.clock_recovery_mm_cc(omega, gain_omega, mu, gain_mu, omega_limit) + #sync = gr.mpsk_receiver_cc( + # M, #psk order + # theta, + # alpha, + # beta, + # fmin, + # fmax, + # mu, + # gain_mu, + # omega, + # gain_omega, + # omega_limit, + #) + agc = gr.feedforward_agc_cc(16, 1) + msgq = gr.msg_queue(2) + sink = gr.message_sink(gr.sizeof_gr_complex*const_size, msgq, True) + #connect + self.connect(self, self._costas, self._retime, agc, sd, sink) + #controller + def setter(p, k, x): p[k] = x + self.controller = pubsub() + self.controller.subscribe(ALPHA_KEY, self._costas.set_alpha) + self.controller.publish(ALPHA_KEY, self._costas.alpha) + self.controller.subscribe(BETA_KEY, self._costas.set_beta) + self.controller.publish(BETA_KEY, self._costas.beta) + self.controller.subscribe(GAIN_MU_KEY, self._retime.set_gain_mu) + self.controller.publish(GAIN_MU_KEY, self._retime.gain_mu) + self.controller.subscribe(OMEGA_KEY, self._retime.set_omega) + self.controller.publish(OMEGA_KEY, self._retime.omega) + self.controller.subscribe(GAIN_OMEGA_KEY, self._retime.set_gain_omega) + self.controller.publish(GAIN_OMEGA_KEY, self._retime.gain_omega) + self.controller.subscribe(SAMPLE_RATE_KEY, sd.set_sample_rate) + self.controller.subscribe(SAMPLE_RATE_KEY, lambda x: setter(self.controller, OMEGA_KEY, float(x)/symbol_rate)) + self.controller.publish(SAMPLE_RATE_KEY, sd.sample_rate) + #initial update + self.controller[SAMPLE_RATE_KEY] = sample_rate + #start input watcher + common.input_watcher(msgq, self.controller, MSG_KEY) + #create window + self.win = const_window.const_window( + parent=parent, + controller=self.controller, + size=size, + title=title, + msg_key=MSG_KEY, + alpha_key=ALPHA_KEY, + beta_key=BETA_KEY, + gain_mu_key=GAIN_MU_KEY, + gain_omega_key=GAIN_OMEGA_KEY, + omega_key=OMEGA_KEY, + sample_rate_key=SAMPLE_RATE_KEY, + ) + common.register_access_methods(self, self.win) + + diff --git a/gr-wxgui/src/python/fft_window.py b/gr-wxgui/src/python/fft_window.py new file mode 100644 index 00000000..fded1a8f --- /dev/null +++ b/gr-wxgui/src/python/fft_window.py @@ -0,0 +1,306 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import plotter +import common +import wx +import numpy +import math +import pubsub +from constants import * +from gnuradio import gr #for gr.prefs +import forms + +################################################## +# Constants +################################################## +SLIDER_STEPS = 100 +AVG_ALPHA_MIN_EXP, AVG_ALPHA_MAX_EXP = -3, 0 +DEFAULT_WIN_SIZE = (600, 300) +DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'fft_rate', 30) +DIV_LEVELS = (1, 2, 5, 10, 20) +FFT_PLOT_COLOR_SPEC = (0.3, 0.3, 1.0) +PEAK_VALS_COLOR_SPEC = (0.0, 0.8, 0.0) +NO_PEAK_VALS = list() + +################################################## +# FFT window control panel +################################################## +class control_panel(wx.Panel): + """ + A control panel with wx widgits to control the plotter and fft block chain. + """ + + def __init__(self, parent): + """ + Create a new control panel. + @param parent the wx parent window + """ + self.parent = parent + wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER) + control_box = wx.BoxSizer(wx.VERTICAL) + control_box.AddStretchSpacer() + #checkboxes for average and peak hold + options_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Options', + bold=True, orient=wx.VERTICAL, + ) + forms.check_box( + sizer=options_box, parent=self, label='Peak Hold', + ps=parent, key=PEAK_HOLD_KEY, + ) + forms.check_box( + sizer=options_box, parent=self, label='Average', + ps=parent, key=AVERAGE_KEY, + ) + #static text and slider for averaging + avg_alpha_text = forms.static_text( + sizer=options_box, parent=self, label='Avg Alpha', + converter=forms.float_converter(lambda x: '%.4f'%x), + ps=parent, key=AVG_ALPHA_KEY, width=50, + ) + avg_alpha_slider = forms.log_slider( + sizer=options_box, parent=self, + min_exp=AVG_ALPHA_MIN_EXP, + max_exp=AVG_ALPHA_MAX_EXP, + num_steps=SLIDER_STEPS, + ps=parent, key=AVG_ALPHA_KEY, + ) + for widget in (avg_alpha_text, avg_alpha_slider): + parent.subscribe(AVERAGE_KEY, widget.Enable) + widget.Enable(parent[AVERAGE_KEY]) + #radio buttons for div size + control_box.AddStretchSpacer() + y_ctrl_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Axis Options', + bold=True, orient=wx.VERTICAL, + ) + forms.radio_buttons( + sizer=y_ctrl_box, parent=self, + ps=parent, key=Y_PER_DIV_KEY, + style=wx.RA_VERTICAL|wx.NO_BORDER, choices=DIV_LEVELS, + labels=map(lambda x: '%s dB/div'%x, DIV_LEVELS), + ) + #ref lvl buttons + forms.incr_decr_buttons( + parent=self, sizer=y_ctrl_box, label='Ref Level', + on_incr=self._on_incr_ref_level, on_decr=self._on_decr_ref_level, + ) + y_ctrl_box.AddSpacer(2) + #autoscale + forms.single_button( + sizer=y_ctrl_box, parent=self, label='Autoscale', + callback=self.parent.autoscale, + ) + #run/stop + control_box.AddStretchSpacer() + forms.toggle_button( + sizer=control_box, parent=self, + true_label='Stop', false_label='Run', + ps=parent, key=RUNNING_KEY, + ) + #set sizer + self.SetSizerAndFit(control_box) + #mouse wheel event + def on_mouse_wheel(event): + if event.GetWheelRotation() < 0: self._on_incr_ref_level(event) + else: self._on_decr_ref_level(event) + parent.plotter.Bind(wx.EVT_MOUSEWHEEL, on_mouse_wheel) + + ################################################## + # Event handlers + ################################################## + def _on_incr_ref_level(self, event): + self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] + self.parent[Y_PER_DIV_KEY] + def _on_decr_ref_level(self, event): + self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] - self.parent[Y_PER_DIV_KEY] + +################################################## +# FFT window with plotter and control panel +################################################## +class fft_window(wx.Panel, pubsub.pubsub): + def __init__( + self, + parent, + controller, + size, + title, + real, + fft_size, + baseband_freq, + sample_rate_key, + y_per_div, + y_divs, + ref_level, + average_key, + avg_alpha_key, + peak_hold, + msg_key, + ): + pubsub.pubsub.__init__(self) + #ensure y_per_div + if y_per_div not in DIV_LEVELS: y_per_div = DIV_LEVELS[0] + #setup + self.samples = list() + self.real = real + self.fft_size = fft_size + self._reset_peak_vals() + #proxy the keys + self.proxy(MSG_KEY, controller, msg_key) + self.proxy(AVERAGE_KEY, controller, average_key) + self.proxy(AVG_ALPHA_KEY, controller, avg_alpha_key) + self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key) + #initialize values + self[PEAK_HOLD_KEY] = peak_hold + self[Y_PER_DIV_KEY] = y_per_div + self[Y_DIVS_KEY] = y_divs + self[X_DIVS_KEY] = 8 #approximate + self[REF_LEVEL_KEY] = ref_level + self[BASEBAND_FREQ_KEY] = baseband_freq + self[RUNNING_KEY] = True + #init panel and plot + wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER) + self.plotter = plotter.channel_plotter(self) + self.plotter.SetSize(wx.Size(*size)) + self.plotter.set_title(title) + self.plotter.enable_legend(True) + self.plotter.enable_point_label(True) + self.plotter.enable_grid_lines(True) + #setup the box with plot and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer(wx.HORIZONTAL) + main_box.Add(self.plotter, 1, wx.EXPAND) + main_box.Add(self.control_panel, 0, wx.EXPAND) + self.SetSizerAndFit(main_box) + #register events + self.subscribe(AVERAGE_KEY, lambda x: self._reset_peak_vals()) + self.subscribe(MSG_KEY, self.handle_msg) + self.subscribe(SAMPLE_RATE_KEY, self.update_grid) + for key in ( + BASEBAND_FREQ_KEY, + Y_PER_DIV_KEY, X_DIVS_KEY, + Y_DIVS_KEY, REF_LEVEL_KEY, + ): self.subscribe(key, self.update_grid) + #initial update + self.update_grid() + + def autoscale(self, *args): + """ + Autoscale the fft plot to the last frame. + Set the dynamic range and reference level. + """ + if not len(self.samples): return + #get the peak level (max of the samples) + peak_level = numpy.max(self.samples) + #get the noise floor (averge the smallest samples) + noise_floor = numpy.average(numpy.sort(self.samples)[:len(self.samples)/4]) + #padding + noise_floor -= abs(noise_floor)*.5 + peak_level += abs(peak_level)*.1 + #set the reference level to a multiple of y divs + self[REF_LEVEL_KEY] = self[Y_DIVS_KEY]*math.ceil(peak_level/self[Y_DIVS_KEY]) + #set the range to a clean number of the dynamic range + self[Y_PER_DIV_KEY] = common.get_clean_num((peak_level - noise_floor)/self[Y_DIVS_KEY]) + + def _reset_peak_vals(self): self.peak_vals = NO_PEAK_VALS + + def handle_msg(self, msg): + """ + Handle the message from the fft sink message queue. + If complex, reorder the fft samples so the negative bins come first. + If real, keep take only the positive bins. + Plot the samples onto the grid as channel 1. + If peak hold is enabled, plot peak vals as channel 2. + @param msg the fft array as a character array + """ + if not self[RUNNING_KEY]: return + #convert to floating point numbers + samples = numpy.fromstring(msg, numpy.float32)[:self.fft_size] #only take first frame + num_samps = len(samples) + #reorder fft + if self.real: samples = samples[:num_samps/2] + else: samples = numpy.concatenate((samples[num_samps/2:], samples[:num_samps/2])) + self.samples = samples + #peak hold calculation + if self[PEAK_HOLD_KEY]: + if len(self.peak_vals) != len(samples): self.peak_vals = samples + self.peak_vals = numpy.maximum(samples, self.peak_vals) + #plot the peak hold + self.plotter.set_waveform( + channel='Peak', + samples=self.peak_vals, + color_spec=PEAK_VALS_COLOR_SPEC, + ) + else: + self._reset_peak_vals() + self.plotter.clear_waveform(channel='Peak') + #plot the fft + self.plotter.set_waveform( + channel='FFT', + samples=samples, + color_spec=FFT_PLOT_COLOR_SPEC, + ) + #update the plotter + self.plotter.update() + + def update_grid(self, *args): + """ + Update the plotter grid. + This update method is dependent on the variables below. + Determine the x and y axis grid parameters. + The x axis depends on sample rate, baseband freq, and x divs. + The y axis depends on y per div, y divs, and ref level. + """ + #grid parameters + sample_rate = self[SAMPLE_RATE_KEY] + baseband_freq = self[BASEBAND_FREQ_KEY] + y_per_div = self[Y_PER_DIV_KEY] + y_divs = self[Y_DIVS_KEY] + x_divs = self[X_DIVS_KEY] + ref_level = self[REF_LEVEL_KEY] + #determine best fitting x_per_div + if self.real: x_width = sample_rate/2.0 + else: x_width = sample_rate/1.0 + x_per_div = common.get_clean_num(x_width/x_divs) + #update the x grid + if self.real: + self.plotter.set_x_grid( + baseband_freq, + baseband_freq + sample_rate/2.0, + x_per_div, True, + ) + else: + self.plotter.set_x_grid( + baseband_freq - sample_rate/2.0, + baseband_freq + sample_rate/2.0, + x_per_div, True, + ) + #update x units + self.plotter.set_x_label('Frequency', 'Hz') + #update y grid + self.plotter.set_y_grid(ref_level-y_per_div*y_divs, ref_level, y_per_div) + #update y units + self.plotter.set_y_label('Amplitude', 'dB') + #update plotter + self.plotter.update() diff --git a/gr-wxgui/src/python/fftsink.py b/gr-wxgui/src/python/fftsink.py deleted file mode 100755 index ae84937f..00000000 --- a/gr-wxgui/src/python/fftsink.py +++ /dev/null @@ -1,488 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2003,2004,2005,2006 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 import gr, gru, window -from gnuradio.wxgui import stdgui -import wx -import gnuradio.wxgui.plot as plot -import Numeric -import threading -import math - -default_fftsink_size = (640,240) -default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15) - -class fft_sink_base(object): - def __init__(self, input_is_real=False, baseband_freq=0, y_per_div=10, ref_level=50, - sample_rate=1, fft_size=512, - fft_rate=default_fft_rate, - average=False, avg_alpha=None, title='', peak_hold=False): - - # initialize common attributes - self.baseband_freq = baseband_freq - self.y_divs = 8 - self.y_per_div=y_per_div - self.ref_level = ref_level - self.sample_rate = sample_rate - self.fft_size = fft_size - self.fft_rate = fft_rate - self.average = average - if avg_alpha is None: - self.avg_alpha = 2.0 / fft_rate - else: - self.avg_alpha = avg_alpha - self.title = title - self.peak_hold = peak_hold - self.input_is_real = input_is_real - self.msgq = gr.msg_queue(2) # queue that holds a maximum of 2 messages - - def set_y_per_div(self, y_per_div): - self.y_per_div = y_per_div - - def set_ref_level(self, ref_level): - self.ref_level = ref_level - - def set_average(self, average): - self.average = average - if average: - self.avg.set_taps(self.avg_alpha) - self.set_peak_hold(False) - else: - self.avg.set_taps(1.0) - - def set_peak_hold(self, enable): - self.peak_hold = enable - if enable: - self.set_average(False) - self.win.set_peak_hold(enable) - - def set_avg_alpha(self, avg_alpha): - self.avg_alpha = avg_alpha - - def set_baseband_freq(self, baseband_freq): - self.baseband_freq = baseband_freq - - def set_sample_rate(self, sample_rate): - self.sample_rate = sample_rate - self._set_n() - - def _set_n(self): - self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) - - -class fft_sink_f(gr.hier_block, fft_sink_base): - def __init__(self, fg, parent, baseband_freq=0, - y_per_div=10, ref_level=50, sample_rate=1, fft_size=512, - fft_rate=default_fft_rate, average=False, avg_alpha=None, - title='', size=default_fftsink_size, peak_hold=False): - - fft_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq, - y_per_div=y_per_div, ref_level=ref_level, - sample_rate=sample_rate, fft_size=fft_size, - fft_rate=fft_rate, - average=average, avg_alpha=avg_alpha, title=title, - peak_hold=peak_hold) - - s2p = gr.stream_to_vector(gr.sizeof_float, self.fft_size) - self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size, - max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) - - mywindow = window.blackmanharris(self.fft_size) - fft = gr.fft_vfc(self.fft_size, True, mywindow) - power = 0 - for tap in mywindow: - power += tap*tap - - c2mag = gr.complex_to_mag(self.fft_size) - self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) - - # FIXME We need to add 3dB to all bins but the DC bin - log = gr.nlog10_ff(20, self.fft_size, - -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size)) - sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) - - fg.connect (s2p, self.one_in_n, fft, c2mag, self.avg, log, sink) - gr.hier_block.__init__(self, fg, s2p, sink) - - self.win = fft_window(self, parent, size=size) - self.set_average(self.average) - - -class fft_sink_c(gr.hier_block, fft_sink_base): - def __init__(self, fg, parent, baseband_freq=0, - y_per_div=10, ref_level=50, sample_rate=1, fft_size=512, - fft_rate=default_fft_rate, average=False, avg_alpha=None, - title='', size=default_fftsink_size, peak_hold=False): - - fft_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq, - y_per_div=y_per_div, ref_level=ref_level, - sample_rate=sample_rate, fft_size=fft_size, - fft_rate=fft_rate, - average=average, avg_alpha=avg_alpha, title=title, - peak_hold=peak_hold) - - s2p = gr.stream_to_vector(gr.sizeof_gr_complex, self.fft_size) - self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size, - max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) - mywindow = window.blackmanharris(self.fft_size) - power = 0 - for tap in mywindow: - power += tap*tap - - fft = gr.fft_vcc(self.fft_size, True, mywindow) - c2mag = gr.complex_to_mag(fft_size) - self.avg = gr.single_pole_iir_filter_ff(1.0, fft_size) - log = gr.nlog10_ff(20, self.fft_size, - -20*math.log10(self.fft_size)-10*math.log10(power/self.fft_size)) - sink = gr.message_sink(gr.sizeof_float * fft_size, self.msgq, True) - - fg.connect(s2p, self.one_in_n, fft, c2mag, self.avg, log, sink) - gr.hier_block.__init__(self, fg, s2p, sink) - - self.win = fft_window(self, parent, size=size) - self.set_average(self.average) - - -# ------------------------------------------------------------------------ - -myDATA_EVENT = wx.NewEventType() -EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0) - - -class DataEvent(wx.PyEvent): - def __init__(self, data): - wx.PyEvent.__init__(self) - self.SetEventType (myDATA_EVENT) - self.data = data - - def Clone (self): - self.__class__ (self.GetId()) - - -class input_watcher (threading.Thread): - def __init__ (self, msgq, fft_size, event_receiver, **kwds): - threading.Thread.__init__ (self, **kwds) - self.setDaemon (1) - self.msgq = msgq - self.fft_size = fft_size - self.event_receiver = event_receiver - self.keep_running = True - self.start () - - def run (self): - while (self.keep_running): - msg = self.msgq.delete_head() # blocking read of message queue - itemsize = int(msg.arg1()) - nitems = int(msg.arg2()) - - s = msg.to_string() # get the body of the msg as a string - - # There may be more than one FFT frame in the message. - # If so, we take only the last one - if nitems > 1: - start = itemsize * (nitems - 1) - s = s[start:start+itemsize] - - complex_data = Numeric.fromstring (s, Numeric.Float32) - de = DataEvent (complex_data) - wx.PostEvent (self.event_receiver, de) - del de - - -class fft_window (plot.PlotCanvas): - def __init__ (self, fftsink, parent, id = -1, - pos = wx.DefaultPosition, size = wx.DefaultSize, - style = wx.DEFAULT_FRAME_STYLE, name = ""): - plot.PlotCanvas.__init__ (self, parent, id, pos, size, style, name) - - self.y_range = None - self.fftsink = fftsink - self.peak_hold = False - self.peak_vals = None - - self.SetEnableGrid (True) - # self.SetEnableZoom (True) - # self.SetBackgroundColour ('black') - - self.build_popup_menu() - - EVT_DATA_EVENT (self, self.set_data) - wx.EVT_CLOSE (self, self.on_close_window) - self.Bind(wx.EVT_RIGHT_UP, self.on_right_click) - - self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self) - - - def on_close_window (self, event): - print "fft_window:on_close_window" - self.keep_running = False - - - def set_data (self, evt): - dB = evt.data - L = len (dB) - - if self.peak_hold: - if self.peak_vals is None: - self.peak_vals = dB - else: - self.peak_vals = Numeric.maximum(dB, self.peak_vals) - dB = self.peak_vals - - x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq)) - if x >= 1e9: - sf = 1e-9 - units = "GHz" - elif x >= 1e6: - sf = 1e-6 - units = "MHz" - else: - sf = 1e-3 - units = "kHz" - - if self.fftsink.input_is_real: # only plot 1/2 the points - x_vals = ((Numeric.arrayrange (L/2) - * (self.fftsink.sample_rate * sf / L)) - + self.fftsink.baseband_freq * sf) - points = Numeric.zeros((len(x_vals), 2), Numeric.Float64) - points[:,0] = x_vals - points[:,1] = dB[0:L/2] - else: - # the "negative freqs" are in the second half of the array - x_vals = ((Numeric.arrayrange (-L/2, L/2) - * (self.fftsink.sample_rate * sf / L)) - + self.fftsink.baseband_freq * sf) - points = Numeric.zeros((len(x_vals), 2), Numeric.Float64) - points[:,0] = x_vals - points[:,1] = Numeric.concatenate ((dB[L/2:], dB[0:L/2])) - - - lines = plot.PolyLine (points, colour='BLUE') - - graphics = plot.PlotGraphics ([lines], - title=self.fftsink.title, - xLabel = units, yLabel = "dB") - - self.Draw (graphics, xAxis=None, yAxis=self.y_range) - self.update_y_range () - - def set_peak_hold(self, enable): - self.peak_hold = enable - self.peak_vals = None - - def update_y_range (self): - ymax = self.fftsink.ref_level - ymin = self.fftsink.ref_level - self.fftsink.y_per_div * self.fftsink.y_divs - self.y_range = self._axisInterval ('min', ymin, ymax) - - def on_average(self, evt): - # print "on_average" - self.fftsink.set_average(evt.IsChecked()) - - def on_peak_hold(self, evt): - # print "on_peak_hold" - self.fftsink.set_peak_hold(evt.IsChecked()) - - def on_incr_ref_level(self, evt): - # print "on_incr_ref_level" - self.fftsink.set_ref_level(self.fftsink.ref_level - + self.fftsink.y_per_div) - - def on_decr_ref_level(self, evt): - # print "on_decr_ref_level" - self.fftsink.set_ref_level(self.fftsink.ref_level - - self.fftsink.y_per_div) - - def on_incr_y_per_div(self, evt): - # print "on_incr_y_per_div" - self.fftsink.set_y_per_div(next_up(self.fftsink.y_per_div, (1,2,5,10,20))) - - def on_decr_y_per_div(self, evt): - # print "on_decr_y_per_div" - self.fftsink.set_y_per_div(next_down(self.fftsink.y_per_div, (1,2,5,10,20))) - - def on_y_per_div(self, evt): - # print "on_y_per_div" - Id = evt.GetId() - if Id == self.id_y_per_div_1: - self.fftsink.set_y_per_div(1) - elif Id == self.id_y_per_div_2: - self.fftsink.set_y_per_div(2) - elif Id == self.id_y_per_div_5: - self.fftsink.set_y_per_div(5) - elif Id == self.id_y_per_div_10: - self.fftsink.set_y_per_div(10) - elif Id == self.id_y_per_div_20: - self.fftsink.set_y_per_div(20) - - - def on_right_click(self, event): - menu = self.popup_menu - for id, pred in self.checkmarks.items(): - item = menu.FindItemById(id) - item.Check(pred()) - self.PopupMenu(menu, event.GetPosition()) - - - def build_popup_menu(self): - self.id_incr_ref_level = wx.NewId() - self.id_decr_ref_level = wx.NewId() - self.id_incr_y_per_div = wx.NewId() - self.id_decr_y_per_div = wx.NewId() - self.id_y_per_div_1 = wx.NewId() - self.id_y_per_div_2 = wx.NewId() - self.id_y_per_div_5 = wx.NewId() - self.id_y_per_div_10 = wx.NewId() - self.id_y_per_div_20 = wx.NewId() - self.id_average = wx.NewId() - self.id_peak_hold = wx.NewId() - - self.Bind(wx.EVT_MENU, self.on_average, id=self.id_average) - self.Bind(wx.EVT_MENU, self.on_peak_hold, id=self.id_peak_hold) - self.Bind(wx.EVT_MENU, self.on_incr_ref_level, id=self.id_incr_ref_level) - self.Bind(wx.EVT_MENU, self.on_decr_ref_level, id=self.id_decr_ref_level) - self.Bind(wx.EVT_MENU, self.on_incr_y_per_div, id=self.id_incr_y_per_div) - self.Bind(wx.EVT_MENU, self.on_decr_y_per_div, id=self.id_decr_y_per_div) - self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_1) - self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_2) - self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_5) - self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_10) - self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_20) - - - # make a menu - menu = wx.Menu() - self.popup_menu = menu - menu.AppendCheckItem(self.id_average, "Average") - menu.AppendCheckItem(self.id_peak_hold, "Peak Hold") - menu.Append(self.id_incr_ref_level, "Incr Ref Level") - menu.Append(self.id_decr_ref_level, "Decr Ref Level") - # menu.Append(self.id_incr_y_per_div, "Incr dB/div") - # menu.Append(self.id_decr_y_per_div, "Decr dB/div") - menu.AppendSeparator() - # we'd use RadioItems for these, but they're not supported on Mac - menu.AppendCheckItem(self.id_y_per_div_1, "1 dB/div") - menu.AppendCheckItem(self.id_y_per_div_2, "2 dB/div") - menu.AppendCheckItem(self.id_y_per_div_5, "5 dB/div") - menu.AppendCheckItem(self.id_y_per_div_10, "10 dB/div") - menu.AppendCheckItem(self.id_y_per_div_20, "20 dB/div") - - self.checkmarks = { - self.id_average : lambda : self.fftsink.average, - self.id_peak_hold : lambda : self.fftsink.peak_hold, - self.id_y_per_div_1 : lambda : self.fftsink.y_per_div == 1, - self.id_y_per_div_2 : lambda : self.fftsink.y_per_div == 2, - self.id_y_per_div_5 : lambda : self.fftsink.y_per_div == 5, - self.id_y_per_div_10 : lambda : self.fftsink.y_per_div == 10, - self.id_y_per_div_20 : lambda : self.fftsink.y_per_div == 20, - } - - -def next_up(v, seq): - """ - Return the first item in seq that is > v. - """ - for s in seq: - if s > v: - return s - return v - -def next_down(v, seq): - """ - Return the last item in seq that is < v. - """ - rseq = list(seq[:]) - rseq.reverse() - - for s in rseq: - if s < v: - return s - return v - - -# ---------------------------------------------------------------- -# Deprecated interfaces -# ---------------------------------------------------------------- - -# returns (block, win). -# block requires a single input stream of float -# win is a subclass of wxWindow - -def make_fft_sink_f(fg, parent, title, fft_size, input_rate, ymin = 0, ymax=50): - - block = fft_sink_f(fg, parent, title=title, fft_size=fft_size, sample_rate=input_rate, - y_per_div=(ymax - ymin)/8, ref_level=ymax) - return (block, block.win) - -# returns (block, win). -# block requires a single input stream of gr_complex -# win is a subclass of wxWindow - -def make_fft_sink_c(fg, parent, title, fft_size, input_rate, ymin=0, ymax=50): - block = fft_sink_c(fg, parent, title=title, fft_size=fft_size, sample_rate=input_rate, - y_per_div=(ymax - ymin)/8, ref_level=ymax) - return (block, block.win) - - -# ---------------------------------------------------------------- -# Standalone test app -# ---------------------------------------------------------------- - -class test_app_flow_graph (stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - fft_size = 256 - - # build our flow graph - input_rate = 20.48e3 - - # Generate a complex sinusoid - #src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 2e3, 1) - src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) - - # We add these throttle blocks so that this demo doesn't - # suck down all the CPU available. Normally you wouldn't use these. - thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) - - sink1 = fft_sink_c (self, panel, title="Complex Data", fft_size=fft_size, - sample_rate=input_rate, baseband_freq=100e3, - ref_level=0, y_per_div=20) - vbox.Add (sink1.win, 1, wx.EXPAND) - self.connect (src1, thr1, sink1) - - #src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 2e3, 1) - src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) - thr2 = gr.throttle(gr.sizeof_float, input_rate) - sink2 = fft_sink_f (self, panel, title="Real Data", fft_size=fft_size*2, - sample_rate=input_rate, baseband_freq=100e3, - ref_level=0, y_per_div=20) - vbox.Add (sink2.win, 1, wx.EXPAND) - self.connect (src2, thr2, sink2) - -def main (): - app = stdgui.stdapp (test_app_flow_graph, - "FFT Sink Test App") - app.MainLoop () - -if __name__ == '__main__': - main () diff --git a/gr-wxgui/src/python/fftsink2.py b/gr-wxgui/src/python/fftsink2.py new file mode 100644 index 00000000..3277cd3f --- /dev/null +++ b/gr-wxgui/src/python/fftsink2.py @@ -0,0 +1,41 @@ +# +# Copyright 2008,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. +# + +from gnuradio import gr + +p = gr.prefs() +style = p.get_string('wxgui', 'style', 'auto') + +if style == 'auto' or style == 'gl': + try: + import wx.glcanvas + from OpenGL.GL import * + from fftsink_gl import fft_sink_f, fft_sink_c + except ImportError: + if style == 'gl': + raise RuntimeError("Unable to import OpenGL. Are Python wrappers for OpenGL installed?") + else: + # Fall backto non-gl sinks + from fftsink_nongl import fft_sink_f, fft_sink_c +elif style == 'nongl': + from fftsink_nongl import fft_sink_f, fft_sink_c +else: + raise RuntimeError("Unknown wxgui style") diff --git a/gr-wxgui/src/python/fftsink_gl.py b/gr-wxgui/src/python/fftsink_gl.py new file mode 100644 index 00000000..3f0a93fc --- /dev/null +++ b/gr-wxgui/src/python/fftsink_gl.py @@ -0,0 +1,166 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import fft_window +import common +from gnuradio import gr, blks2 +from pubsub import pubsub +from constants import * + +################################################## +# FFT sink block (wrapper for old wxgui) +################################################## +class _fft_sink_base(gr.hier_block2): + """ + An fft block with real/complex inputs and a gui window. + """ + + def __init__( + self, + parent, + baseband_freq=0, + ref_scale=2.0, + y_per_div=10, + y_divs=8, + ref_level=50, + sample_rate=1, + fft_size=512, + fft_rate=fft_window.DEFAULT_FRAME_RATE, + average=False, + avg_alpha=None, + title='', + size=fft_window.DEFAULT_WIN_SIZE, + peak_hold=False, + ): + #ensure avg alpha + if avg_alpha is None: avg_alpha = 2.0/fft_rate + #init + gr.hier_block2.__init__( + self, + "fft_sink", + gr.io_signature(1, 1, self._item_size), + gr.io_signature(0, 0, 0), + ) + #blocks + fft = self._fft_chain( + sample_rate=sample_rate, + fft_size=fft_size, + frame_rate=fft_rate, + ref_scale=ref_scale, + avg_alpha=avg_alpha, + average=average, + ) + msgq = gr.msg_queue(2) + sink = gr.message_sink(gr.sizeof_float*fft_size, msgq, True) + #connect + self.connect(self, fft, sink) + #controller + self.controller = pubsub() + self.controller.subscribe(AVERAGE_KEY, fft.set_average) + self.controller.publish(AVERAGE_KEY, fft.average) + self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha) + self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha) + self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate) + self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate) + #start input watcher + common.input_watcher(msgq, self.controller, MSG_KEY) + #create window + self.win = fft_window.fft_window( + parent=parent, + controller=self.controller, + size=size, + title=title, + real=self._real, + fft_size=fft_size, + baseband_freq=baseband_freq, + sample_rate_key=SAMPLE_RATE_KEY, + y_per_div=y_per_div, + y_divs=y_divs, + ref_level=ref_level, + average_key=AVERAGE_KEY, + avg_alpha_key=AVG_ALPHA_KEY, + peak_hold=peak_hold, + msg_key=MSG_KEY, + ) + common.register_access_methods(self, self.win) + setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS + setattr(self.win, 'set_peak_hold', getattr(self, 'set_peak_hold')) #BACKWARDS + +class fft_sink_f(_fft_sink_base): + _fft_chain = blks2.logpwrfft_f + _item_size = gr.sizeof_float + _real = True + +class fft_sink_c(_fft_sink_base): + _fft_chain = blks2.logpwrfft_c + _item_size = gr.sizeof_gr_complex + _real = False + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +import wx +from gnuradio.wxgui import stdgui2 + +class test_app_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + fft_size = 256 + + # build our flow graph + input_rate = 20.48e3 + + # Generate a complex sinusoid + #src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 2e3, 1) + src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) + + # We add these throttle blocks so that this demo doesn't + # suck down all the CPU available. Normally you wouldn't use these. + thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) + + sink1 = fft_sink_c (panel, title="Complex Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=100e3, + ref_level=0, y_per_div=20, y_divs=10) + vbox.Add (sink1.win, 1, wx.EXPAND) + + self.connect(src1, thr1, sink1) + + #src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 2e3, 1) + src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) + thr2 = gr.throttle(gr.sizeof_float, input_rate) + sink2 = fft_sink_f (panel, title="Real Data", fft_size=fft_size*2, + sample_rate=input_rate, baseband_freq=100e3, + ref_level=0, y_per_div=20, y_divs=10) + vbox.Add (sink2.win, 1, wx.EXPAND) + + self.connect(src2, thr2, sink2) + +def main (): + app = stdgui2.stdapp (test_app_block, "FFT Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () diff --git a/gr-wxgui/src/python/fftsink_nongl.py b/gr-wxgui/src/python/fftsink_nongl.py new file mode 100644 index 00000000..ca5e91fd --- /dev/null +++ b/gr-wxgui/src/python/fftsink_nongl.py @@ -0,0 +1,596 @@ +#!/usr/bin/env python +# +# Copyright 2003,2004,2005,2006,2007 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 import gr, gru, window +from gnuradio.wxgui import stdgui2 +import wx +import plot +import numpy +import math + +DIV_LEVELS = (1, 2, 5, 10, 20) + +default_fftsink_size = (640,240) +default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15) + +class fft_sink_base(object): + def __init__(self, input_is_real=False, baseband_freq=0, y_per_div=10, + y_divs=8, ref_level=50, + sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, + average=False, avg_alpha=None, title='', peak_hold=False): + + # initialize common attributes + self.baseband_freq = baseband_freq + self.y_per_div=y_per_div + self.y_divs = y_divs + self.ref_level = ref_level + self.sample_rate = sample_rate + self.fft_size = fft_size + self.fft_rate = fft_rate + self.average = average + if avg_alpha is None: + self.avg_alpha = 2.0 / fft_rate + else: + self.avg_alpha = avg_alpha + self.title = title + self.peak_hold = peak_hold + self.input_is_real = input_is_real + self.msgq = gr.msg_queue(2) # queue that holds a maximum of 2 messages + + def set_y_per_div(self, y_per_div): + self.y_per_div = y_per_div + + def set_ref_level(self, ref_level): + self.ref_level = ref_level + + def set_average(self, average): + self.average = average + if average: + self.avg.set_taps(self.avg_alpha) + else: + self.avg.set_taps(1.0) + self.win.peak_vals = None + + def set_peak_hold(self, enable): + self.peak_hold = enable + self.win.set_peak_hold(enable) + + def set_avg_alpha(self, avg_alpha): + self.avg_alpha = avg_alpha + + def set_baseband_freq(self, baseband_freq): + self.baseband_freq = baseband_freq + + def set_sample_rate(self, sample_rate): + self.sample_rate = sample_rate + self._set_n() + + def _set_n(self): + self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + + +class fft_sink_f(gr.hier_block2, fft_sink_base): + def __init__(self, parent, baseband_freq=0, ref_scale=2.0, + y_per_div=10, y_divs=8, ref_level=50, sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, average=False, avg_alpha=None, + title='', size=default_fftsink_size, peak_hold=False): + + gr.hier_block2.__init__(self, "fft_sink_f", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0,0,0)) + + fft_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq, + y_per_div=y_per_div, y_divs=y_divs, ref_level=ref_level, + sample_rate=sample_rate, fft_size=fft_size, + fft_rate=fft_rate, + average=average, avg_alpha=avg_alpha, title=title, + peak_hold=peak_hold) + + self.s2p = gr.stream_to_vector(gr.sizeof_float, self.fft_size) + self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size, + max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + + mywindow = window.blackmanharris(self.fft_size) + self.fft = gr.fft_vfc(self.fft_size, True, mywindow) + power = 0 + for tap in mywindow: + power += tap*tap + + self.c2mag = gr.complex_to_mag(self.fft_size) + self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) + + # FIXME We need to add 3dB to all bins but the DC bin + self.log = gr.nlog10_ff(20, self.fft_size, + -10*math.log10(self.fft_size) # Adjust for number of bins + -10*math.log10(power/self.fft_size) # Adjust for windowing loss + -20*math.log10(ref_scale/2)) # Adjust for reference scale + + self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) + self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, self.avg, self.log, self.sink) + + self.win = fft_window(self, parent, size=size) + self.set_average(self.average) + self.set_peak_hold(self.peak_hold) + +class fft_sink_c(gr.hier_block2, fft_sink_base): + def __init__(self, parent, baseband_freq=0, ref_scale=2.0, + y_per_div=10, y_divs=8, ref_level=50, sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, average=False, avg_alpha=None, + title='', size=default_fftsink_size, peak_hold=False): + + gr.hier_block2.__init__(self, "fft_sink_c", + gr.io_signature(1, 1, gr.sizeof_gr_complex), + gr.io_signature(0,0,0)) + + fft_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq, + y_per_div=y_per_div, y_divs=y_divs, ref_level=ref_level, + sample_rate=sample_rate, fft_size=fft_size, + fft_rate=fft_rate, + average=average, avg_alpha=avg_alpha, title=title, + peak_hold=peak_hold) + + self.s2p = gr.stream_to_vector(gr.sizeof_gr_complex, self.fft_size) + self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size, + max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + + mywindow = window.blackmanharris(self.fft_size) + self.fft = gr.fft_vcc(self.fft_size, True, mywindow) + power = 0 + for tap in mywindow: + power += tap*tap + + self.c2mag = gr.complex_to_mag(self.fft_size) + self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) + + # FIXME We need to add 3dB to all bins but the DC bin + self.log = gr.nlog10_ff(20, self.fft_size, + -10*math.log10(self.fft_size) # Adjust for number of bins + -10*math.log10(power/self.fft_size) # Adjust for windowing loss + -20*math.log10(ref_scale/2)) # Adjust for reference scale + + self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) + self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, self.avg, self.log, self.sink) + + self.win = fft_window(self, parent, size=size) + self.set_average(self.average) + self.set_peak_hold(self.peak_hold) + + +# ------------------------------------------------------------------------ + +myDATA_EVENT = wx.NewEventType() +EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0) + + +class DataEvent(wx.PyEvent): + def __init__(self, data): + wx.PyEvent.__init__(self) + self.SetEventType (myDATA_EVENT) + self.data = data + + def Clone (self): + self.__class__ (self.GetId()) + + +class input_watcher (gru.msgq_runner): + def __init__ (self, msgq, fft_size, event_receiver, **kwds): + self.fft_size = fft_size + self.event_receiver = event_receiver + gru.msgq_runner.__init__(self, msgq, self.handle_msg) + + def handle_msg(self, msg): + itemsize = int(msg.arg1()) + nitems = int(msg.arg2()) + + s = msg.to_string() # get the body of the msg as a string + + # There may be more than one FFT frame in the message. + # If so, we take only the last one + if nitems > 1: + start = itemsize * (nitems - 1) + s = s[start:start+itemsize] + + complex_data = numpy.fromstring (s, numpy.float32) + de = DataEvent (complex_data) + wx.PostEvent (self.event_receiver, de) + del de + +class control_panel(wx.Panel): + + class LabelText(wx.StaticText): + def __init__(self, window, label): + wx.StaticText.__init__(self, window, -1, label) + font = self.GetFont() + font.SetWeight(wx.FONTWEIGHT_BOLD) + font.SetUnderlined(True) + self.SetFont(font) + + def __init__(self, parent): + self.parent = parent + wx.Panel.__init__(self, parent, -1, style=wx.SIMPLE_BORDER) + control_box = wx.BoxSizer(wx.VERTICAL) + + #checkboxes for average and peak hold + control_box.AddStretchSpacer() + control_box.Add(self.LabelText(self, 'Options'), 0, wx.ALIGN_CENTER) + self.average_check_box = wx.CheckBox(parent=self, style=wx.CHK_2STATE, label="Average") + self.average_check_box.Bind(wx.EVT_CHECKBOX, parent.on_average) + control_box.Add(self.average_check_box, 0, wx.EXPAND) + self.peak_hold_check_box = wx.CheckBox(parent=self, style=wx.CHK_2STATE, label="Peak Hold") + self.peak_hold_check_box.Bind(wx.EVT_CHECKBOX, parent.on_peak_hold) + control_box.Add(self.peak_hold_check_box, 0, wx.EXPAND) + + #radio buttons for div size + control_box.AddStretchSpacer() + control_box.Add(self.LabelText(self, 'Set dB/div'), 0, wx.ALIGN_CENTER) + radio_box = wx.BoxSizer(wx.VERTICAL) + self.radio_buttons = list() + for y_per_div in DIV_LEVELS: + radio_button = wx.RadioButton(self, -1, "%d dB/div"%y_per_div) + radio_button.Bind(wx.EVT_RADIOBUTTON, self.on_radio_button_change) + self.radio_buttons.append(radio_button) + radio_box.Add(radio_button, 0, wx.ALIGN_LEFT) + control_box.Add(radio_box, 0, wx.EXPAND) + + #ref lvl buttons + control_box.AddStretchSpacer() + control_box.Add(self.LabelText(self, 'Adj Ref Lvl'), 0, wx.ALIGN_CENTER) + control_box.AddSpacer(2) + button_box = wx.BoxSizer(wx.HORIZONTAL) + self.ref_plus_button = wx.Button(self, -1, '+', style=wx.BU_EXACTFIT) + self.ref_plus_button.Bind(wx.EVT_BUTTON, parent.on_incr_ref_level) + button_box.Add(self.ref_plus_button, 0, wx.ALIGN_CENTER) + self.ref_minus_button = wx.Button(self, -1, ' - ', style=wx.BU_EXACTFIT) + self.ref_minus_button.Bind(wx.EVT_BUTTON, parent.on_decr_ref_level) + button_box.Add(self.ref_minus_button, 0, wx.ALIGN_CENTER) + control_box.Add(button_box, 0, wx.ALIGN_CENTER) + control_box.AddStretchSpacer() + #set sizer + self.SetSizerAndFit(control_box) + #update + self.update() + + def update(self): + """ + Read the state of the fft plot settings and update the control panel. + """ + #update checkboxes + self.average_check_box.SetValue(self.parent.fftsink.average) + self.peak_hold_check_box.SetValue(self.parent.fftsink.peak_hold) + #update radio buttons + try: + index = list(DIV_LEVELS).index(self.parent.fftsink.y_per_div) + self.radio_buttons[index].SetValue(True) + except: pass + + def on_radio_button_change(self, evt): + selected_radio_button = filter(lambda rb: rb.GetValue(), self.radio_buttons)[0] + index = self.radio_buttons.index(selected_radio_button) + self.parent.fftsink.set_y_per_div(DIV_LEVELS[index]) + +class fft_window (wx.Panel): + def __init__ (self, fftsink, parent, id = -1, + pos = wx.DefaultPosition, size = wx.DefaultSize, + style = wx.DEFAULT_FRAME_STYLE, name = ""): + + self.fftsink = fftsink + #init panel and plot + wx.Panel.__init__(self, parent, -1) + self.plot = plot.PlotCanvas(self, id, pos, size, style, name) + #setup the box with plot and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer (wx.HORIZONTAL) + main_box.Add (self.plot, 1, wx.EXPAND) + main_box.Add (self.control_panel, 0, wx.EXPAND) + self.SetSizerAndFit(main_box) + + self.peak_hold = False + self.peak_vals = None + + self.plot.SetEnableGrid (True) + # self.SetEnableZoom (True) + # self.SetBackgroundColour ('black') + + self.build_popup_menu() + self.set_baseband_freq(self.fftsink.baseband_freq) + + EVT_DATA_EVENT (self, self.set_data) + wx.EVT_CLOSE (self, self.on_close_window) + self.plot.Bind(wx.EVT_RIGHT_UP, self.on_right_click) + self.plot.Bind(wx.EVT_MOTION, self.evt_motion) + + self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self) + + def set_scale(self, freq): + x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq)) + if x >= 1e9: + self._scale_factor = 1e-9 + self._units = "GHz" + self._format = "%3.6f" + elif x >= 1e6: + self._scale_factor = 1e-6 + self._units = "MHz" + self._format = "%3.3f" + else: + self._scale_factor = 1e-3 + self._units = "kHz" + self._format = "%3.3f" + + def set_baseband_freq(self, baseband_freq): + if self.peak_hold: + self.peak_vals = None + self.set_scale(baseband_freq) + self.fftsink.set_baseband_freq(baseband_freq) + + def on_close_window (self, event): + print "fft_window:on_close_window" + self.keep_running = False + + + def set_data (self, evt): + dB = evt.data + L = len (dB) + + if self.peak_hold: + if self.peak_vals is None: + self.peak_vals = dB + else: + self.peak_vals = numpy.maximum(dB, self.peak_vals) + + if self.fftsink.input_is_real: # only plot 1/2 the points + x_vals = ((numpy.arange (L/2) * (self.fftsink.sample_rate + * self._scale_factor / L)) + + self.fftsink.baseband_freq * self._scale_factor) + self._points = numpy.zeros((len(x_vals), 2), numpy.float64) + self._points[:,0] = x_vals + self._points[:,1] = dB[0:L/2] + if self.peak_hold: + self._peak_points = numpy.zeros((len(x_vals), 2), numpy.float64) + self._peak_points[:,0] = x_vals + self._peak_points[:,1] = self.peak_vals[0:L/2] + else: + # the "negative freqs" are in the second half of the array + x_vals = ((numpy.arange (-L/2, L/2) + * (self.fftsink.sample_rate * self._scale_factor / L)) + + self.fftsink.baseband_freq * self._scale_factor) + self._points = numpy.zeros((len(x_vals), 2), numpy.float64) + self._points[:,0] = x_vals + self._points[:,1] = numpy.concatenate ((dB[L/2:], dB[0:L/2])) + if self.peak_hold: + self._peak_points = numpy.zeros((len(x_vals), 2), numpy.float64) + self._peak_points[:,0] = x_vals + self._peak_points[:,1] = numpy.concatenate ((self.peak_vals[L/2:], self.peak_vals[0:L/2])) + + lines = [plot.PolyLine (self._points, colour='BLUE'),] + if self.peak_hold: + lines.append(plot.PolyLine (self._peak_points, colour='GREEN')) + + graphics = plot.PlotGraphics (lines, + title=self.fftsink.title, + xLabel = self._units, yLabel = "dB") + x_range = x_vals[0], x_vals[-1] + ymax = self.fftsink.ref_level + ymin = self.fftsink.ref_level - self.fftsink.y_per_div * self.fftsink.y_divs + y_range = ymin, ymax + self.plot.Draw (graphics, xAxis=x_range, yAxis=y_range, step=self.fftsink.y_per_div) + + def set_peak_hold(self, enable): + self.peak_hold = enable + self.peak_vals = None + + def on_average(self, evt): + # print "on_average" + self.fftsink.set_average(evt.IsChecked()) + self.control_panel.update() + + def on_peak_hold(self, evt): + # print "on_peak_hold" + self.fftsink.set_peak_hold(evt.IsChecked()) + self.control_panel.update() + + def on_incr_ref_level(self, evt): + # print "on_incr_ref_level" + self.fftsink.set_ref_level(self.fftsink.ref_level + + self.fftsink.y_per_div) + + def on_decr_ref_level(self, evt): + # print "on_decr_ref_level" + self.fftsink.set_ref_level(self.fftsink.ref_level + - self.fftsink.y_per_div) + + def on_incr_y_per_div(self, evt): + # print "on_incr_y_per_div" + self.fftsink.set_y_per_div(next_up(self.fftsink.y_per_div, DIV_LEVELS)) + self.control_panel.update() + + def on_decr_y_per_div(self, evt): + # print "on_decr_y_per_div" + self.fftsink.set_y_per_div(next_down(self.fftsink.y_per_div, DIV_LEVELS)) + self.control_panel.update() + + def on_y_per_div(self, evt): + # print "on_y_per_div" + Id = evt.GetId() + if Id == self.id_y_per_div_1: + self.fftsink.set_y_per_div(1) + elif Id == self.id_y_per_div_2: + self.fftsink.set_y_per_div(2) + elif Id == self.id_y_per_div_5: + self.fftsink.set_y_per_div(5) + elif Id == self.id_y_per_div_10: + self.fftsink.set_y_per_div(10) + elif Id == self.id_y_per_div_20: + self.fftsink.set_y_per_div(20) + self.control_panel.update() + + def on_right_click(self, event): + menu = self.popup_menu + for id, pred in self.checkmarks.items(): + item = menu.FindItemById(id) + item.Check(pred()) + self.plot.PopupMenu(menu, event.GetPosition()) + + def evt_motion(self, event): + if not hasattr(self, "_points"): + return # Got here before first window data update + + # Clip to plotted values + (ux, uy) = self.plot.GetXY(event) # Scaled position + x_vals = numpy.array(self._points[:,0]) + if ux < x_vals[0] or ux > x_vals[-1]: + tip = self.GetToolTip() + if tip: + tip.Enable(False) + return + + # Get nearest X value (is there a better way)? + ind = numpy.argmin(numpy.abs(x_vals-ux)) + x_val = x_vals[ind] + db_val = self._points[ind, 1] + text = (self._format+" %s dB=%3.3f") % (x_val, self._units, db_val) + + # Display the tooltip + tip = wx.ToolTip(text) + tip.Enable(True) + tip.SetDelay(0) + self.SetToolTip(tip) + + def build_popup_menu(self): + self.id_incr_ref_level = wx.NewId() + self.id_decr_ref_level = wx.NewId() + self.id_incr_y_per_div = wx.NewId() + self.id_decr_y_per_div = wx.NewId() + self.id_y_per_div_1 = wx.NewId() + self.id_y_per_div_2 = wx.NewId() + self.id_y_per_div_5 = wx.NewId() + self.id_y_per_div_10 = wx.NewId() + self.id_y_per_div_20 = wx.NewId() + self.id_average = wx.NewId() + self.id_peak_hold = wx.NewId() + + self.plot.Bind(wx.EVT_MENU, self.on_average, id=self.id_average) + self.plot.Bind(wx.EVT_MENU, self.on_peak_hold, id=self.id_peak_hold) + self.plot.Bind(wx.EVT_MENU, self.on_incr_ref_level, id=self.id_incr_ref_level) + self.plot.Bind(wx.EVT_MENU, self.on_decr_ref_level, id=self.id_decr_ref_level) + self.plot.Bind(wx.EVT_MENU, self.on_incr_y_per_div, id=self.id_incr_y_per_div) + self.plot.Bind(wx.EVT_MENU, self.on_decr_y_per_div, id=self.id_decr_y_per_div) + self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_1) + self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_2) + self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_5) + self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_10) + self.plot.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_20) + + # make a menu + menu = wx.Menu() + self.popup_menu = menu + menu.AppendCheckItem(self.id_average, "Average") + menu.AppendCheckItem(self.id_peak_hold, "Peak Hold") + menu.Append(self.id_incr_ref_level, "Incr Ref Level") + menu.Append(self.id_decr_ref_level, "Decr Ref Level") + # menu.Append(self.id_incr_y_per_div, "Incr dB/div") + # menu.Append(self.id_decr_y_per_div, "Decr dB/div") + menu.AppendSeparator() + # we'd use RadioItems for these, but they're not supported on Mac + menu.AppendCheckItem(self.id_y_per_div_1, "1 dB/div") + menu.AppendCheckItem(self.id_y_per_div_2, "2 dB/div") + menu.AppendCheckItem(self.id_y_per_div_5, "5 dB/div") + menu.AppendCheckItem(self.id_y_per_div_10, "10 dB/div") + menu.AppendCheckItem(self.id_y_per_div_20, "20 dB/div") + + self.checkmarks = { + self.id_average : lambda : self.fftsink.average, + self.id_peak_hold : lambda : self.fftsink.peak_hold, + self.id_y_per_div_1 : lambda : self.fftsink.y_per_div == 1, + self.id_y_per_div_2 : lambda : self.fftsink.y_per_div == 2, + self.id_y_per_div_5 : lambda : self.fftsink.y_per_div == 5, + self.id_y_per_div_10 : lambda : self.fftsink.y_per_div == 10, + self.id_y_per_div_20 : lambda : self.fftsink.y_per_div == 20, + } + + +def next_up(v, seq): + """ + Return the first item in seq that is > v. + """ + for s in seq: + if s > v: + return s + return v + +def next_down(v, seq): + """ + Return the last item in seq that is < v. + """ + rseq = list(seq[:]) + rseq.reverse() + + for s in rseq: + if s < v: + return s + return v + + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +class test_app_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + fft_size = 256 + + # build our flow graph + input_rate = 20.48e3 + + # Generate a complex sinusoid + #src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 2e3, 1) + src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) + + # We add these throttle blocks so that this demo doesn't + # suck down all the CPU available. Normally you wouldn't use these. + thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) + + sink1 = fft_sink_c (panel, title="Complex Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=100e3, + ref_level=0, y_per_div=20, y_divs=10) + vbox.Add (sink1.win, 1, wx.EXPAND) + + self.connect(src1, thr1, sink1) + + #src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 2e3, 1) + src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) + thr2 = gr.throttle(gr.sizeof_float, input_rate) + sink2 = fft_sink_f (panel, title="Real Data", fft_size=fft_size*2, + sample_rate=input_rate, baseband_freq=100e3, + ref_level=0, y_per_div=20, y_divs=10) + vbox.Add (sink2.win, 1, wx.EXPAND) + + self.connect(src2, thr2, sink2) + +def main (): + app = stdgui2.stdapp (test_app_block, "FFT Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () diff --git a/gr-wxgui/src/python/form.py b/gr-wxgui/src/python/form.py old mode 100755 new mode 100644 index 5ca66183..b55b04d7 --- a/gr-wxgui/src/python/form.py +++ b/gr-wxgui/src/python/form.py @@ -263,7 +263,7 @@ class checkbox_field(field): class radiobox_field(field): - def __init__(self, parent=None, sizer=None, label="", value=None, + def __init__(self, parent=None, sizer=None, label=None, value=None, converter=identity_converter(), callback=None, weight=1, choices=None, major_dimension=1, specify_rows=False): new_id = wx.NewId() @@ -273,9 +273,9 @@ class radiobox_field(field): else: style=wx.RA_SPECIFY_COLS | wx.RA_HORIZONTAL - w = wx.RadioBox(parent, new_id, label, style=style, majorDimension=major_dimension, + w = wx.RadioBox(parent, new_id, label=label, style=style, majorDimension=major_dimension, choices=choices) - self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=label, weight=weight) + self.f = self._pair_with_label(w, parent=parent, sizer=sizer, label=None, weight=weight) if callback: wx.EVT_RADIOBOX(w, new_id, lambda evt: callback(evt.GetString())) field.__init__(self, converter, value) @@ -338,11 +338,11 @@ class form(dict): # ---------------------------------------------------------------- import sys -from gnuradio.wxgui import stdgui +from gnuradio.wxgui import stdgui2 -class demo_app_flow_graph (stdgui.gui_flow_graph): +class demo_app_flow_graph (stdgui2.std_top_block): def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) self.frame = frame self.panel = panel @@ -384,7 +384,7 @@ class demo_app_flow_graph (stdgui.gui_flow_graph): def main (): - app = stdgui.stdapp (demo_app_flow_graph, "wxgui form demo", nstatus=1) + app = stdgui2.stdapp(demo_app_flow_graph, "wxgui form demo", nstatus=1) app.MainLoop () if __name__ == '__main__': diff --git a/gr-wxgui/src/python/forms/__init__.py b/gr-wxgui/src/python/forms/__init__.py new file mode 100644 index 00000000..3f9f4c73 --- /dev/null +++ b/gr-wxgui/src/python/forms/__init__.py @@ -0,0 +1,103 @@ +# +# 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. +# + +""" +The following classes will be available through gnuradio.wxgui.forms: +""" + +######################################################################## +# External Converters +######################################################################## +from converters import \ + eval_converter, str_converter, \ + float_converter, int_converter + +######################################################################## +# External Forms +######################################################################## +from forms import \ + radio_buttons, drop_down, notebook, \ + button, toggle_button, single_button, \ + check_box, text_box, static_text, \ + slider, log_slider, gauge, \ + make_bold, DataEvent, EVT_DATA + +######################################################################## +# Helpful widgets +######################################################################## +import wx + +class static_box_sizer(wx.StaticBoxSizer): + """ + A box sizer with label and border. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param label title label for this widget (optional) + @param bold true to boldify the label + @param orient the sizer orientation wx.VERTICAL or wx.HORIZONTAL (default=wx.VERTICAL) + """ + def __init__(self, parent, label='', bold=False, sizer=None, orient=wx.VERTICAL, proportion=0, flag=wx.EXPAND): + box = wx.StaticBox(parent=parent, label=label) + if bold: make_bold(box) + wx.StaticBoxSizer.__init__(self, box=box, orient=orient) + if sizer: sizer.Add(self, proportion, flag) + +class incr_decr_buttons(wx.BoxSizer): + """ + A horizontal box sizer with a increment and a decrement button. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param label title label for this widget (optional) + @param on_incr the callback for pressing the + button + @param on_decr the callback for pressing the - button + """ + def __init__(self, parent, on_incr, on_decr, label='', sizer=None, proportion=0, flag=wx.EXPAND): + """ + @param parent the parent window + @param on_incr the event handler for increment + @param on_decr the event handler for decrement + """ + wx.BoxSizer.__init__(self, wx.HORIZONTAL) + buttons_box = wx.BoxSizer(wx.HORIZONTAL) + self._incr_button = wx.Button(parent, label='+', style=wx.BU_EXACTFIT) + self._incr_button.Bind(wx.EVT_BUTTON, on_incr) + buttons_box.Add(self._incr_button, 0, wx.ALIGN_CENTER_VERTICAL) + self._decr_button = wx.Button(parent, label=' - ', style=wx.BU_EXACTFIT) + self._decr_button.Bind(wx.EVT_BUTTON, on_decr) + buttons_box.Add(self._decr_button, 0, wx.ALIGN_CENTER_VERTICAL) + if label: #add label + self.Add(wx.StaticText(parent, label='%s: '%label), 1, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT) + self.Add(buttons_box, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) + else: self.Add(buttons_box, 0, wx.ALIGN_CENTER_VERTICAL) + if sizer: sizer.Add(self, proportion, flag) + + def Disable(self, disable=True): self.Enable(not disable) + def Enable(self, enable=True): + if enable: + self._incr_button.Enable() + self._decr_button.Enable() + else: + self._incr_button.Disable() + self._decr_button.Disable() diff --git a/gr-wxgui/src/python/forms/converters.py b/gr-wxgui/src/python/forms/converters.py new file mode 100644 index 00000000..9f757aa8 --- /dev/null +++ b/gr-wxgui/src/python/forms/converters.py @@ -0,0 +1,153 @@ +# +# 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. +# + +from gnuradio import eng_notation +import math + +class abstract_converter(object): + def external_to_internal(self, v): + """ + Convert from user specified value to value acceptable to underlying primitive. + The underlying primitive usually expects strings. + """ + raise NotImplementedError + def internal_to_external(self, s): + """ + Convert from underlying primitive value to user specified value. + The underlying primitive usually expects strings. + """ + raise NotImplementedError + def help(self): + return "Any string is acceptable" + +class identity_converter(abstract_converter): + def external_to_internal(self,v): + return v + def internal_to_external(self, s): + return s + +######################################################################## +# Commonly used converters +######################################################################## +class chooser_converter(abstract_converter): + """ + Convert between a set of possible choices and an index. + Used in the chooser base and all sub-classes. + """ + def __init__(self, choices): + #choices must be a list because tuple does not have .index() in python2.5 + self._choices = list(choices) + def external_to_internal(self, choice): + return self._choices.index(choice) + def internal_to_external(self, index): + return self._choices[index] + def help(self): + return 'Enter a possible value in choices: "%s"'%str(self._choices) + +class bool_converter(abstract_converter): + """ + The internal representation is boolean. + The external representation is specified. + Used in the check box form. + """ + def __init__(self, true, false): + self._true = true + self._false = false + def external_to_internal(self, v): + return bool(v) + def internal_to_external(self, v): + if v: return self._true + else: return self._false + def help(self): + return "Value must be cast-able to type bool." + +class eval_converter(abstract_converter): + """ + A catchall converter when int and float are not enough. + Evaluate the internal representation with python's eval(). + Possible uses, set a complex number, constellation points. + Used in text box. + """ + def __init__(self, formatter=lambda x: '%s'%(x)): + self._formatter = formatter + def external_to_internal(self, v): + return self._formatter(v) + def internal_to_external(self, s): + return eval(s) + def help(self): + return "Value must be evaluatable by python's eval." + +class str_converter(abstract_converter): + def __init__(self, formatter=lambda x: '%s'%(x)): + self._formatter = formatter + def external_to_internal(self, v): + return self._formatter(v) + def internal_to_external(self, s): + return str(s) + +class int_converter(abstract_converter): + def __init__(self, formatter=lambda x: '%d'%round(x)): + self._formatter = formatter + def external_to_internal(self, v): + return self._formatter(v) + def internal_to_external(self, s): + return int(s, 0) + def help(self): + return "Enter an integer. Leading 0x indicates hex" + +class float_converter(abstract_converter): + def __init__(self, formatter=eng_notation.num_to_str): + self._formatter = formatter + def external_to_internal(self, v): + return self._formatter(v) + def internal_to_external(self, s): + return eng_notation.str_to_num(s) + def help(self): + return "Enter a float with optional scale suffix. E.g., 100.1M" + +class slider_converter(abstract_converter): + """ + Scale values to and from the slider. + """ + def __init__(self, minimum, maximum, num_steps, cast): + assert minimum < maximum + assert num_steps > 0 + self._offset = minimum + self._scaler = float(maximum - minimum)/num_steps + self._cast = cast + def external_to_internal(self, v): + #slider's internal representation is an integer + return int(round((v - self._offset)/self._scaler)) + def internal_to_external(self, v): + return self._cast(v*self._scaler + self._offset) + def help(self): + return "Value should be within slider range" + +class log_slider_converter(slider_converter): + def __init__(self, min_exp, max_exp, num_steps, base): + assert min_exp < max_exp + assert num_steps > 0 + self._base = base + slider_converter.__init__(self, minimum=min_exp, maximum=max_exp, num_steps=num_steps, cast=float) + def external_to_internal(self, v): + return slider_converter.external_to_internal(self, math.log(v, self._base)) + def internal_to_external(self, v): + return self._base**slider_converter.internal_to_external(self, v) diff --git a/gr-wxgui/src/python/forms/forms.py b/gr-wxgui/src/python/forms/forms.py new file mode 100644 index 00000000..c69315b0 --- /dev/null +++ b/gr-wxgui/src/python/forms/forms.py @@ -0,0 +1,641 @@ +# +# 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. +# + +""" +The forms module contains general purpose wx-gui forms for gnuradio apps. + +The forms follow a layered model: + * internal layer + * deals with the wxgui objects directly + * implemented in event handler and update methods + * translation layer + * translates the between the external and internal layers + * handles parsing errors between layers + * external layer + * provided external access to the user + * set_value, get_value, and optional callback + * set and get through optional pubsub and key + +Known problems: + * An empty label in the radio box still consumes space. + * The static text cannot resize the parent at runtime. +""" + +EXT_KEY = 'external' +INT_KEY = 'internal' + +import wx +import sys +from gnuradio.gr.pubsub import pubsub +import converters + +EVT_DATA = wx.PyEventBinder(wx.NewEventType()) +class DataEvent(wx.PyEvent): + def __init__(self, data): + wx.PyEvent.__init__(self, wx.NewId(), EVT_DATA.typeId) + self.data = data + +def make_bold(widget): + font = widget.GetFont() + font.SetWeight(wx.FONTWEIGHT_BOLD) + widget.SetFont(font) + +######################################################################## +# Base Class Form +######################################################################## +class _form_base(pubsub, wx.BoxSizer): + def __init__(self, parent=None, sizer=None, proportion=0, flag=wx.EXPAND, ps=None, key='', value=None, callback=None, converter=converters.identity_converter()): + pubsub.__init__(self) + wx.BoxSizer.__init__(self, wx.HORIZONTAL) + self._parent = parent + self._key = key + self._converter = converter + self._callback = callback + self._widgets = list() + #add to the sizer if provided + if sizer: sizer.Add(self, proportion, flag) + #proxy the pubsub and key into this form + if ps is not None: + assert key + self.proxy(EXT_KEY, ps, key) + #no pubsub passed, must set initial value + else: self.set_value(value) + + def __str__(self): + return "Form: %s -> %s"%(self.__class__, self._key) + + def _add_widget(self, widget, label='', flag=0, label_prop=0, widget_prop=1): + """ + Add the main widget to this object sizer. + If label is passed, add a label as well. + Register the widget and the label in the widgets list (for enable/disable). + Bind the update handler to the widget for data events. + This ensures that the gui thread handles updating widgets. + Setup the pusub triggers for external and internal. + @param widget the main widget + @param label the optional label + @param flag additional flags for widget + @param label_prop the proportion for the label + @param widget_prop the proportion for the widget + """ + #setup data event + widget.Bind(EVT_DATA, lambda x: self._update(x.data)) + update = lambda x: wx.PostEvent(widget, DataEvent(x)) + #register widget + self._widgets.append(widget) + #create optional label + if not label: self.Add(widget, widget_prop, wx.ALIGN_CENTER_VERTICAL | flag) + else: + label_text = wx.StaticText(self._parent, label='%s: '%label) + self._widgets.append(label_text) + self.Add(label_text, label_prop, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT) + self.Add(widget, widget_prop, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | flag) + #initialize without triggering pubsubs + self._translate_external_to_internal(self[EXT_KEY]) + update(self[INT_KEY]) + #subscribe all the functions + self.subscribe(INT_KEY, update) + self.subscribe(INT_KEY, self._translate_internal_to_external) + self.subscribe(EXT_KEY, self._translate_external_to_internal) + + def _translate_external_to_internal(self, external): + try: + internal = self._converter.external_to_internal(external) + #prevent infinite loop between internal and external pubsub keys by only setting if changed + if self[INT_KEY] != internal: self[INT_KEY] = internal + except Exception, e: + self._err_msg(external, e) + self[INT_KEY] = self[INT_KEY] #reset to last good setting + + def _translate_internal_to_external(self, internal): + try: + external = self._converter.internal_to_external(internal) + #prevent infinite loop between internal and external pubsub keys by only setting if changed + if self[EXT_KEY] != external: self[EXT_KEY] = external + except Exception, e: + self._err_msg(internal, e) + self[EXT_KEY] = self[EXT_KEY] #reset to last good setting + if self._callback: self._callback(self[EXT_KEY]) + + def _err_msg(self, value, e): + print >> sys.stderr, self, 'Error translating value: "%s"\n\t%s\n\t%s'%(value, e, self._converter.help()) + + #override in subclasses to handle the wxgui object + def _update(self, value): raise NotImplementedError + def _handle(self, event): raise NotImplementedError + + #provide a set/get interface for this form + def get_value(self): return self[EXT_KEY] + def set_value(self, value): self[EXT_KEY] = value + + def Disable(self, disable=True): self.Enable(not disable) + def Enable(self, enable=True): + if enable: + for widget in self._widgets: widget.Enable() + else: + for widget in self._widgets: widget.Disable() + +######################################################################## +# Base Class Chooser Form +######################################################################## +class _chooser_base(_form_base): + def __init__(self, choices=[], labels=None, **kwargs): + _form_base.__init__(self, converter=converters.chooser_converter(choices), **kwargs) + self._choices = choices + self._labels = map(str, labels or choices) + +######################################################################## +# Base Class Slider Form +######################################################################## +class _slider_base(_form_base): + def __init__(self, label='', length=-1, converter=None, num_steps=100, style=wx.SL_HORIZONTAL, **kwargs): + _form_base.__init__(self, converter=converter, **kwargs) + if style & wx.SL_HORIZONTAL: slider_size = wx.Size(length, -1) + elif style & wx.SL_VERTICAL: slider_size = wx.Size(-1, length) + else: raise NotImplementedError + self._slider = wx.Slider(self._parent, minValue=0, maxValue=num_steps, size=slider_size, style=style) + self._slider.Bind(wx.EVT_SCROLL, self._handle) + self._add_widget(self._slider, label, flag=wx.EXPAND) + + def _handle(self, event): self[INT_KEY] = self._slider.GetValue() + def _update(self, value): self._slider.SetValue(value) + +######################################################################## +# Static Text Form +######################################################################## +class static_text(_form_base): + """ + A text box form. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param label title label for this widget (optional) + @param width the width of the form in px + @param bold true to bold-ify the text (default=False) + @param converter forms.str_converter(), int_converter(), float_converter()... + """ + def __init__(self, label='', width=-1, bold=False, converter=converters.str_converter(), **kwargs): + _form_base.__init__(self, converter=converter, **kwargs) + self._static_text = wx.StaticText(self._parent, size=wx.Size(width, -1)) + if bold: make_bold(self._static_text) + self._add_widget(self._static_text, label) + + def _update(self, label): self._static_text.SetLabel(label); self._parent.Layout() + +######################################################################## +# Text Box Form +######################################################################## +class text_box(_form_base): + """ + A text box form. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param label title label for this widget (optional) + @param width the width of the form in px + @param converter forms.str_converter(), int_converter(), float_converter()... + """ + def __init__(self, label='', width=-1, converter=converters.eval_converter(), **kwargs): + _form_base.__init__(self, converter=converter, **kwargs) + self._text_box = wx.TextCtrl(self._parent, size=wx.Size(width, -1), style=wx.TE_PROCESS_ENTER) + self._text_box.Bind(wx.EVT_TEXT_ENTER, self._handle) + self._add_widget(self._text_box, label) + + def _handle(self, event): self[INT_KEY] = self._text_box.GetValue() + def _update(self, value): self._text_box.SetValue(value) + +######################################################################## +# Slider Form +# Linear Slider +# Logarithmic Slider +######################################################################## +class slider(_slider_base): + """ + A generic linear slider. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param label title label for this widget (optional) + @param length the length of the slider in px (optional) + @param style wx.SL_HORIZONTAL or wx.SL_VERTICAL (default=horizontal) + @param minimum the minimum value + @param maximum the maximum value + @param num_steps the number of slider steps (or specify step_size) + @param step_size the step between slider jumps (or specify num_steps) + @param cast a cast function, int, or float (default=float) + """ + def __init__(self, minimum=-100, maximum=100, num_steps=100, step_size=None, cast=float, **kwargs): + assert step_size or num_steps + if step_size is not None: num_steps = (maximum - minimum)/step_size + converter = converters.slider_converter(minimum=minimum, maximum=maximum, num_steps=num_steps, cast=cast) + _slider_base.__init__(self, converter=converter, num_steps=num_steps, **kwargs) + +class log_slider(_slider_base): + """ + A generic logarithmic slider. + The sliders min and max values are base**min_exp and base**max_exp. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param label title label for this widget (optional) + @param length the length of the slider in px (optional) + @param style wx.SL_HORIZONTAL or wx.SL_VERTICAL (default=horizontal) + @param min_exp the minimum exponent + @param max_exp the maximum exponent + @param base the exponent base in base**exp + @param num_steps the number of slider steps (or specify step_size) + @param step_size the exponent step size (or specify num_steps) + """ + def __init__(self, min_exp=0, max_exp=1, base=10, num_steps=100, step_size=None, **kwargs): + assert step_size or num_steps + if step_size is not None: num_steps = (max_exp - min_exp)/step_size + converter = converters.log_slider_converter(min_exp=min_exp, max_exp=max_exp, num_steps=num_steps, base=base) + _slider_base.__init__(self, converter=converter, num_steps=num_steps, **kwargs) + +######################################################################## +# Gauge Form +######################################################################## +class gauge(_form_base): + """ + A gauge bar. + The gauge displays floating point values between the minimum and maximum. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param label title label for this widget (optional) + @param length the length of the slider in px (optional) + @param style wx.GA_HORIZONTAL or wx.GA_VERTICAL (default=horizontal) + @param minimum the minimum value + @param maximum the maximum value + @param num_steps the number of slider steps (or specify step_size) + @param step_size the step between slider jumps (or specify num_steps) + """ + def __init__(self, label='', length=-1, minimum=-100, maximum=100, num_steps=100, step_size=None, style=wx.GA_HORIZONTAL, **kwargs): + assert step_size or num_steps + if step_size is not None: num_steps = (maximum - minimum)/step_size + converter = converters.slider_converter(minimum=minimum, maximum=maximum, num_steps=num_steps, cast=float) + _form_base.__init__(self, converter=converter, **kwargs) + if style & wx.SL_HORIZONTAL: gauge_size = wx.Size(length, -1) + elif style & wx.SL_VERTICAL: gauge_size = wx.Size(-1, length) + else: raise NotImplementedError + self._gauge = wx.Gauge(self._parent, range=num_steps, size=gauge_size, style=style) + self._add_widget(self._gauge, label, flag=wx.EXPAND) + + def _update(self, value): self._gauge.SetValue(value) + +######################################################################## +# Check Box Form +######################################################################## +class check_box(_form_base): + """ + Create a check box form. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param true the value for form when checked (default=True) + @param false the value for form when unchecked (default=False) + @param label title label for this widget (optional) + """ + def __init__(self, label='', true=True, false=False, **kwargs): + _form_base.__init__(self, converter=converters.bool_converter(true=true, false=false), **kwargs) + self._check_box = wx.CheckBox(self._parent, style=wx.CHK_2STATE, label=label) + self._check_box.Bind(wx.EVT_CHECKBOX, self._handle) + self._add_widget(self._check_box) + + def _handle(self, event): self[INT_KEY] = self._check_box.IsChecked() + def _update(self, checked): self._check_box.SetValue(checked) + +######################################################################## +# Drop Down Chooser Form +######################################################################## +class drop_down(_chooser_base): + """ + Create a drop down menu form. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param choices list of possible values + @param labels list of labels for each choice (default=choices) + @param label title label for this widget (optional) + @param width the form width in px (optional) + """ + def __init__(self, label='', width=-1, **kwargs): + _chooser_base.__init__(self, **kwargs) + self._drop_down = wx.Choice(self._parent, choices=self._labels, size=wx.Size(width, -1)) + self._drop_down.Bind(wx.EVT_CHOICE, self._handle) + self._add_widget(self._drop_down, label, widget_prop=0, label_prop=1) + + def _handle(self, event): self[INT_KEY] = self._drop_down.GetSelection() + def _update(self, i): self._drop_down.SetSelection(i) + +######################################################################## +# Button Chooser Form +# Circularly move through the choices with each click. +# Can be a single-click button with one choice. +# Can be a 2-state button with two choices. +######################################################################## +class button(_chooser_base): + """ + Create a multi-state button. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param choices list of possible values + @param labels list of labels for each choice (default=choices) + @param width the width of the button in pixels (optional) + @param style style arguments (optional) + @param label title label for this widget (optional) + """ + def __init__(self, label='', style=0, width=-1, **kwargs): + _chooser_base.__init__(self, **kwargs) + self._button = wx.Button(self._parent, size=wx.Size(width, -1), style=style) + self._button.Bind(wx.EVT_BUTTON, self._handle) + self._add_widget(self._button, label, widget_prop=((not style&wx.BU_EXACTFIT) and 1 or 0)) + + def _handle(self, event): self[INT_KEY] = (self[INT_KEY] + 1)%len(self._choices) #circularly increment index + def _update(self, i): self._button.SetLabel(self._labels[i]); self.Layout() + +class toggle_button(button): + """ + Create a dual-state button. + This button will alternate between True and False when clicked. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param width the width of the button in pixels (optional) + @param style style arguments (optional) + @param true_label the button's label in the true state + @param false_label the button's label in the false state + """ + def __init__(self, true_label='On (click to stop)', false_label='Off (click to start)', **kwargs): + button.__init__(self, choices=[True, False], labels=[true_label, false_label], **kwargs) + +class single_button(toggle_button): + """ + Create a single state button. + This button will callback() when clicked. + For use when state holding is not important. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param width the width of the button in pixels (optional) + @param style style arguments (optional) + @param label the button's label + """ + def __init__(self, label='click for callback', **kwargs): + toggle_button.__init__(self, true_label=label, false_label=label, value=True, **kwargs) + +######################################################################## +# Radio Buttons Chooser Form +######################################################################## +class radio_buttons(_chooser_base): + """ + Create a radio button form. + @param parent the parent widget + @param sizer add this widget to sizer if provided (optional) + @param proportion the proportion when added to the sizer (default=0) + @param flag the flag argument when added to the sizer (default=wx.EXPAND) + @param ps the pubsub object (optional) + @param key the pubsub key (optional) + @param value the default value (optional) + @param choices list of possible values + @param labels list of labels for each choice (default=choices) + @param major_dimension the number of rows/cols (default=auto) + @param label title label for this widget (optional) + @param style useful style args: wx.RA_HORIZONTAL, wx.RA_VERTICAL, wx.NO_BORDER (default=wx.RA_HORIZONTAL) + """ + def __init__(self, style=wx.RA_HORIZONTAL, label='', major_dimension=0, **kwargs): + _chooser_base.__init__(self, **kwargs) + #create radio buttons + self._radio_buttons = wx.RadioBox(self._parent, choices=self._labels, style=style, label=label, majorDimension=major_dimension) + self._radio_buttons.Bind(wx.EVT_RADIOBOX, self._handle) + self._add_widget(self._radio_buttons) + + def _handle(self, event): self[INT_KEY] = self._radio_buttons.GetSelection() + def _update(self, i): self._radio_buttons.SetSelection(i) + +######################################################################## +# Notebook Chooser Form +# The notebook pages/tabs are for selecting between choices. +# A page must be added to the notebook for each choice. +######################################################################## +class notebook(_chooser_base): + def __init__(self, pages, notebook, **kwargs): + _chooser_base.__init__(self, **kwargs) + assert len(pages) == len(self._choices) + self._notebook = notebook + self._notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self._handle) + #add pages, setting the label on each tab + for i, page in enumerate(pages): + self._notebook.AddPage(page, self._labels[i]) + self._add_widget(self._notebook) + + def _handle(self, event): self[INT_KEY] = self._notebook.GetSelection() + def _update(self, i): self._notebook.SetSelection(i) + +# ---------------------------------------------------------------- +# Stand-alone test application +# ---------------------------------------------------------------- + +import wx +from gnuradio.wxgui import gui + +class app_gui (object): + def __init__(self, frame, panel, vbox, top_block, options, args): + + def callback(v): print v + + radio_buttons( + sizer=vbox, + parent=panel, + choices=[2, 4, 8, 16], + labels=['two', 'four', 'eight', 'sixteen'], + value=4, + style=wx.RA_HORIZONTAL, + label='test radio long string', + callback=callback, + #major_dimension = 2, + ) + + radio_buttons( + sizer=vbox, + parent=panel, + choices=[2, 4, 8, 16], + labels=['two', 'four', 'eight', 'sixteen'], + value=4, + style=wx.RA_VERTICAL, + label='test radio long string', + callback=callback, + #major_dimension = 2, + ) + + radio_buttons( + sizer=vbox, + parent=panel, + choices=[2, 4, 8, 16], + labels=['two', 'four', 'eight', 'sixteen'], + value=4, + style=wx.RA_VERTICAL | wx.NO_BORDER, + callback=callback, + #major_dimension = 2, + ) + + button( + sizer=vbox, + parent=panel, + choices=[2, 4, 8, 16], + labels=['two', 'four', 'eight', 'sixteen'], + value=2, + label='button value', + callback=callback, + #width=100, + ) + + + drop_down( + sizer=vbox, + parent=panel, + choices=[2, 4, 8, 16], + value=2, + label='Choose One', + callback=callback, + ) + check_box( + sizer=vbox, + parent=panel, + value=False, + label='check me', + callback=callback, + ) + text_box( + sizer=vbox, + parent=panel, + value=3, + label='text box', + callback=callback, + width=200, + ) + + static_text( + sizer=vbox, + parent=panel, + value='bob', + label='static text', + width=-1, + bold=True, + ) + + slider( + sizer=vbox, + parent=panel, + value=12, + label='slider', + callback=callback, + ) + + log_slider( + sizer=vbox, + parent=panel, + value=12, + label='slider', + callback=callback, + ) + + slider( + sizer=vbox, + parent=panel, + value=12, + label='slider', + callback=callback, + style=wx.SL_VERTICAL, + length=30, + ) + + toggle_button( + sizer=vbox, + parent=panel, + value=True, + label='toggle it', + callback=callback, + ) + + single_button( + sizer=vbox, + parent=panel, + label='sig test', + callback=callback, + ) + +if __name__ == "__main__": + try: + + # Create the GUI application + app = gui.app( + gui=app_gui, # User interface class + title="Test Forms", # Top window title + ) + + # And run it + app.MainLoop() + + except RuntimeError, e: + print e + sys.exit(1) diff --git a/gr-wxgui/src/python/gui.py b/gr-wxgui/src/python/gui.py new file mode 100644 index 00000000..2f59af59 --- /dev/null +++ b/gr-wxgui/src/python/gui.py @@ -0,0 +1,135 @@ +# +# 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. +# + +import wx +from gnuradio import gr + +# +# Top-level display panel with vertical box sizer. User does not create or +# subclass this class; rather, the user supplies his own class constructor +# that gets invoked with needed parameters. +# +class top_panel(wx.Panel): + def __init__(self, frame, top_block, gui, options, args): + wx.Panel.__init__(self, frame, -1) + vbox = wx.BoxSizer(wx.VERTICAL) + + # Create the user's GUI class + if gui is not None: + self.gui = gui(frame, # Top-level window frame + self, # Parent class for user created windows + vbox, # Sizer for user to add windows to + top_block, # GUI-unaware flowgraph to manipulate + options, # Command-line options + args) # Command-line arguments + + else: + # User hasn't made their own GUI, create our default + # We don't have a default GUI yet either :) + p = wx.Panel(self) + p.SetSize((640,480)) + vbox.Add(p, 1, wx.EXPAND) + + self.SetSizer(vbox) + self.SetAutoLayout(True) + vbox.Fit(self) + + def shutdown(self): + try: + self.gui.shutdown() + except AttributeError: + pass + +# +# Top-level window frame with menu and status bars. +# +class top_frame(wx.Frame): + def __init__ (self, top_block, gui, options, args, + title, nstatus, start, realtime): + + wx.Frame.__init__(self, None, -1, title) + self.top_block = top_block + + self.CreateStatusBar(nstatus) + mainmenu = wx.MenuBar() + self.SetMenuBar(mainmenu) + + menu = wx.Menu() + + item = menu.Append(200, 'E&xit', 'Exit Application') # FIXME magic ID + self.Bind(wx.EVT_MENU, self.OnCloseWindow, item) + mainmenu.Append(menu, "&File") + self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) + + # Create main panel, creates user GUI class with supplied parameters + self.panel = top_panel(self, top_block, gui, options, args) + + vbox = wx.BoxSizer(wx.VERTICAL) + vbox.Add(self.panel, 1, wx.EXPAND) + self.SetSizer(vbox) + self.SetAutoLayout(True) + vbox.Fit(self) + + if realtime: + if gr.enable_realtime_scheduling() != gr.RT_OK: + self.SetStatusText("Failed to enable realtime scheduling") + + if start and self.top_block is not None: + self.top_block.start() + + def OnCloseWindow(self, event): + # Give user API a chance to do something + self.panel.shutdown() + + # Stop flowgraph as a convenience + self.SetStatusText("Ensuring flowgraph has completed before exiting...") + if self.top_block is not None: + self.top_block.stop() + self.top_block.wait() + + self.Destroy() + + +# +# Top-level wxPython application object. User creates or subclasses this +# in their GUI script. +# +class app(wx.App): + def __init__ (self, top_block=None, gui=None, options=None, args=None, + title="GNU Radio", nstatus=1, start=False, realtime=False): + self.top_block = top_block + self.gui = gui + self.options = options + self.args = args + self.title = title + self.nstatus = nstatus + self.start = start + self.realtime = realtime + + wx.App.__init__ (self, redirect=False) + + def OnInit(self): + # Pass user parameters to top window frame + frame = top_frame(self.top_block, self.gui, self.options, self.args, + self.title, self.nstatus, self.start, self.realtime) + frame.Show(True) + self.SetTopWindow(frame) + return True diff --git a/gr-wxgui/src/python/histo_window.py b/gr-wxgui/src/python/histo_window.py new file mode 100644 index 00000000..5f434d70 --- /dev/null +++ b/gr-wxgui/src/python/histo_window.py @@ -0,0 +1,161 @@ +# +# 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. +# + +################################################## +# Imports +################################################## +import plotter +import common +import wx +import numpy +import math +import pubsub +from constants import * +from gnuradio import gr #for gr.prefs +import forms + +################################################## +# Constants +################################################## +DEFAULT_WIN_SIZE = (600, 300) + +################################################## +# histo window control panel +################################################## +class control_panel(wx.Panel): + """ + A control panel with wx widgits to control the plotter and histo sink. + """ + + def __init__(self, parent): + """ + Create a new control panel. + @param parent the wx parent window + """ + self.parent = parent + wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER) + control_box = wx.BoxSizer(wx.VERTICAL) + SIZE = (100, -1) + control_box = forms.static_box_sizer( + parent=self, label='Options', + bold=True, orient=wx.VERTICAL, + ) + #num bins + control_box.AddStretchSpacer() + forms.text_box( + sizer=control_box, parent=self, label='Num Bins', + converter=forms.int_converter(), + ps=parent, key=NUM_BINS_KEY, + ) + #frame size + control_box.AddStretchSpacer() + forms.text_box( + sizer=control_box, parent=self, label='Frame Size', + converter=forms.int_converter(), + ps=parent, key=FRAME_SIZE_KEY, + ) + #run/stop + control_box.AddStretchSpacer() + forms.toggle_button( + sizer=control_box, parent=self, + true_label='Stop', false_label='Run', + ps=parent, key=RUNNING_KEY, + ) + #set sizer + self.SetSizerAndFit(control_box) + +################################################## +# histo window with plotter and control panel +################################################## +class histo_window(wx.Panel, pubsub.pubsub): + def __init__( + self, + parent, + controller, + size, + title, + maximum_key, + minimum_key, + num_bins_key, + frame_size_key, + msg_key, + ): + pubsub.pubsub.__init__(self) + #setup + self.samples = list() + #proxy the keys + self.proxy(MAXIMUM_KEY, controller, maximum_key) + self.proxy(MINIMUM_KEY, controller, minimum_key) + self.proxy(NUM_BINS_KEY, controller, num_bins_key) + self.proxy(FRAME_SIZE_KEY, controller, frame_size_key) + self.proxy(MSG_KEY, controller, msg_key) + #initialize values + self[RUNNING_KEY] = True + self[X_DIVS_KEY] = 8 + self[Y_DIVS_KEY] = 4 + #init panel and plot + wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER) + self.plotter = plotter.bar_plotter(self) + self.plotter.SetSize(wx.Size(*size)) + self.plotter.set_title(title) + self.plotter.enable_point_label(True) + self.plotter.enable_grid_lines(False) + #setup the box with plot and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer(wx.HORIZONTAL) + main_box.Add(self.plotter, 1, wx.EXPAND) + main_box.Add(self.control_panel, 0, wx.EXPAND) + self.SetSizerAndFit(main_box) + #register events + self.subscribe(MSG_KEY, self.handle_msg) + self.subscribe(X_DIVS_KEY, self.update_grid) + self.subscribe(Y_DIVS_KEY, self.update_grid) + + def handle_msg(self, msg): + """ + Handle the message from the fft sink message queue. + @param msg the frame as a character array + """ + if not self[RUNNING_KEY]: return + #convert to floating point numbers + self.samples = 100*numpy.fromstring(msg, numpy.float32)[:self[NUM_BINS_KEY]] #only take first frame + self.plotter.set_bars( + bars=self.samples, + bar_width=0.6, + color_spec=(0, 0, 1), + ) + self.update_grid() + + def update_grid(self): + if not len(self.samples): return + #calculate the maximum y value + y_off = math.ceil(numpy.max(self.samples)) + y_off = min(max(y_off, 1.0), 100.0) #between 1% and 100% + #update the x grid + self.plotter.set_x_grid( + self[MINIMUM_KEY], self[MAXIMUM_KEY], + common.get_clean_num((self[MAXIMUM_KEY] - self[MINIMUM_KEY])/self[X_DIVS_KEY]), + ) + self.plotter.set_x_label('Counts') + #update the y grid + self.plotter.set_y_grid(0, y_off, y_off/self[Y_DIVS_KEY]) + self.plotter.set_y_label('Frequency', '%') + self.plotter.update() diff --git a/gr-wxgui/src/python/histosink_gl.py b/gr-wxgui/src/python/histosink_gl.py new file mode 100644 index 00000000..db6606e4 --- /dev/null +++ b/gr-wxgui/src/python/histosink_gl.py @@ -0,0 +1,110 @@ +# +# 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. +# + +################################################## +# Imports +################################################## +import histo_window +import common +from gnuradio import gr, blks2 +from pubsub import pubsub +from constants import * + +################################################## +# histo sink block (wrapper for old wxgui) +################################################## +class histo_sink_f(gr.hier_block2): + """ + A histogram block and a gui window. + """ + + def __init__( + self, + parent, + size=histo_window.DEFAULT_WIN_SIZE, + title='', + num_bins=11, + frame_size=1000, + ): + #init + gr.hier_block2.__init__( + self, + "histo_sink", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0, 0, 0), + ) + #blocks + msgq = gr.msg_queue(2) + histo = gr.histo_sink_f(msgq) + histo.set_num_bins(num_bins) + histo.set_frame_size(frame_size) + #connect + self.connect(self, histo) + #controller + self.controller = pubsub() + self.controller.subscribe(NUM_BINS_KEY, histo.set_num_bins) + self.controller.publish(NUM_BINS_KEY, histo.get_num_bins) + self.controller.subscribe(FRAME_SIZE_KEY, histo.set_frame_size) + self.controller.publish(FRAME_SIZE_KEY, histo.get_frame_size) + #start input watcher + common.input_watcher(msgq, self.controller, MSG_KEY, arg1_key=MINIMUM_KEY, arg2_key=MAXIMUM_KEY) + #create window + self.win = histo_window.histo_window( + parent=parent, + controller=self.controller, + size=size, + title=title, + maximum_key=MAXIMUM_KEY, + minimum_key=MINIMUM_KEY, + num_bins_key=NUM_BINS_KEY, + frame_size_key=FRAME_SIZE_KEY, + msg_key=MSG_KEY, + ) + common.register_access_methods(self, self.win) + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +import wx +from gnuradio.wxgui import stdgui2 + +class test_app_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + # build our flow graph + input_rate = 20.48e3 + + src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 2e3, 1) + #src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1) + thr2 = gr.throttle(gr.sizeof_float, input_rate) + sink2 = histo_sink_f (panel, title="Data", num_bins=31, frame_size=1000) + vbox.Add (sink2.win, 1, wx.EXPAND) + + self.connect(src2, thr2, sink2) + +def main (): + app = stdgui2.stdapp (test_app_block, "Histo Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () diff --git a/gr-wxgui/src/python/number_window.py b/gr-wxgui/src/python/number_window.py new file mode 100644 index 00000000..8a824976 --- /dev/null +++ b/gr-wxgui/src/python/number_window.py @@ -0,0 +1,211 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import common +import numpy +import wx +import pubsub +from constants import * +from gnuradio import gr #for gr.prefs +import forms + +################################################## +# Constants +################################################## +NEG_INF = float('-inf') +SLIDER_STEPS = 100 +AVG_ALPHA_MIN_EXP, AVG_ALPHA_MAX_EXP = -3, 0 +DEFAULT_NUMBER_RATE = gr.prefs().get_long('wxgui', 'number_rate', 5) +DEFAULT_WIN_SIZE = (300, 300) +DEFAULT_GAUGE_RANGE = 1000 +VALUE_REPR_KEY = 'value_repr' +VALUE_REAL_KEY = 'value_real' +VALUE_IMAG_KEY = 'value_imag' + +################################################## +# Number window control panel +################################################## +class control_panel(wx.Panel): + """ + A control panel with wx widgits to control the averaging. + """ + + def __init__(self, parent): + """ + Create a new control panel. + @param parent the wx parent window + """ + self.parent = parent + wx.Panel.__init__(self, parent) + control_box = wx.BoxSizer(wx.VERTICAL) + #checkboxes for average and peak hold + control_box.AddStretchSpacer() + options_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Options', + bold=True, orient=wx.VERTICAL, + ) + forms.check_box( + sizer=options_box, parent=self, label='Peak Hold', + ps=parent, key=PEAK_HOLD_KEY, + ) + forms.check_box( + sizer=options_box, parent=self, label='Average', + ps=parent, key=AVERAGE_KEY, + ) + #static text and slider for averaging + avg_alpha_text = forms.static_text( + sizer=options_box, parent=self, label='Avg Alpha', + converter=forms.float_converter(lambda x: '%.4f'%x), + ps=parent, key=AVG_ALPHA_KEY, width=50, + ) + avg_alpha_slider = forms.log_slider( + sizer=options_box, parent=self, + min_exp=AVG_ALPHA_MIN_EXP, + max_exp=AVG_ALPHA_MAX_EXP, + num_steps=SLIDER_STEPS, + ps=parent, key=AVG_ALPHA_KEY, + ) + for widget in (avg_alpha_text, avg_alpha_slider): + parent.subscribe(AVERAGE_KEY, widget.Enable) + widget.Enable(parent[AVERAGE_KEY]) + #run/stop + control_box.AddStretchSpacer() + forms.toggle_button( + sizer=control_box, parent=self, + true_label='Stop', false_label='Run', + ps=parent, key=RUNNING_KEY, + ) + #set sizer + self.SetSizerAndFit(control_box) + +################################################## +# Numbersink window with label and gauges +################################################## +class number_window(wx.Panel, pubsub.pubsub): + def __init__( + self, + parent, + controller, + size, + title, + units, + show_gauge, + real, + minval, + maxval, + decimal_places, + average_key, + avg_alpha_key, + peak_hold, + msg_key, + sample_rate_key, + ): + pubsub.pubsub.__init__(self) + wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER) + #setup + self.peak_val_real = NEG_INF + self.peak_val_imag = NEG_INF + self.real = real + self.units = units + self.decimal_places = decimal_places + #proxy the keys + self.proxy(MSG_KEY, controller, msg_key) + self.proxy(AVERAGE_KEY, controller, average_key) + self.proxy(AVG_ALPHA_KEY, controller, avg_alpha_key) + self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key) + #initialize values + self[PEAK_HOLD_KEY] = peak_hold + self[RUNNING_KEY] = True + self[VALUE_REAL_KEY] = minval + self[VALUE_IMAG_KEY] = minval + #setup the box with display and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer(wx.HORIZONTAL) + sizer = forms.static_box_sizer( + parent=self, sizer=main_box, label=title, + bold=True, orient=wx.VERTICAL, proportion=1, + ) + main_box.Add(self.control_panel, 0, wx.EXPAND) + sizer.AddStretchSpacer() + forms.static_text( + parent=self, sizer=sizer, + ps=self, key=VALUE_REPR_KEY, width=size[0], + converter=forms.str_converter(), + ) + sizer.AddStretchSpacer() + self.gauge_real = forms.gauge( + parent=self, sizer=sizer, style=wx.GA_HORIZONTAL, + ps=self, key=VALUE_REAL_KEY, length=size[0], + minimum=minval, maximum=maxval, num_steps=DEFAULT_GAUGE_RANGE, + ) + self.gauge_imag = forms.gauge( + parent=self, sizer=sizer, style=wx.GA_HORIZONTAL, + ps=self, key=VALUE_IMAG_KEY, length=size[0], + minimum=minval, maximum=maxval, num_steps=DEFAULT_GAUGE_RANGE, + ) + #hide/show gauges + self.show_gauges(show_gauge) + self.SetSizerAndFit(main_box) + #register events + self.subscribe(MSG_KEY, self.handle_msg) + + def show_gauges(self, show_gauge): + """ + Show or hide the gauges. + If this is real, never show the imaginary gauge. + @param show_gauge true to show + """ + self.gauge_real.ShowItems(show_gauge) + self.gauge_imag.ShowItems(show_gauge and not self.real) + + def handle_msg(self, msg): + """ + Handle a message from the message queue. + Convert the string based message into a float or complex. + If more than one number was read, only take the last number. + Perform peak hold operations, set the gauges and display. + @param event event.data is the number sample as a character array + """ + if not self[RUNNING_KEY]: return + format_string = "%%.%df"%self.decimal_places + if self.real: + sample = numpy.fromstring(msg, numpy.float32)[-1] + if self[PEAK_HOLD_KEY]: sample = self.peak_val_real = max(self.peak_val_real, sample) + label_text = "%s %s"%(format_string%sample, self.units) + self[VALUE_REAL_KEY] = sample + else: + sample = numpy.fromstring(msg, numpy.complex64)[-1] + if self[PEAK_HOLD_KEY]: + self.peak_val_real = max(self.peak_val_real, sample.real) + self.peak_val_imag = max(self.peak_val_imag, sample.imag) + sample = self.peak_val_real + self.peak_val_imag*1j + label_text = "%s + %sj %s"%(format_string%sample.real, format_string%sample.imag, self.units) + self[VALUE_REAL_KEY] = sample.real + self[VALUE_IMAG_KEY] = sample.imag + #set label text + self[VALUE_REPR_KEY] = label_text + #clear peak hold + if not self[PEAK_HOLD_KEY]: + self.peak_val_real = NEG_INF + self.peak_val_imag = NEG_INF diff --git a/gr-wxgui/src/python/numbersink2.py b/gr-wxgui/src/python/numbersink2.py new file mode 100644 index 00000000..7f853e6a --- /dev/null +++ b/gr-wxgui/src/python/numbersink2.py @@ -0,0 +1,171 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import number_window +import common +from gnuradio import gr, blks2 +from pubsub import pubsub +from constants import * + +################################################## +# Number sink block (wrapper for old wxgui) +################################################## +class _number_sink_base(gr.hier_block2): + """ + An decimator block with a number window display + """ + + def __init__( + self, + parent, + unit='units', + minval=0, + maxval=1, + factor=1, + decimal_places=3, + ref_level=0, + sample_rate=1, + number_rate=number_window.DEFAULT_NUMBER_RATE, + average=False, + avg_alpha=None, + label='Number Plot', + size=number_window.DEFAULT_WIN_SIZE, + peak_hold=False, + show_gauge=True, + **kwargs #catchall for backwards compatibility + ): + #ensure avg alpha + if avg_alpha is None: avg_alpha = 2.0/number_rate + #init + gr.hier_block2.__init__( + self, + "number_sink", + gr.io_signature(1, 1, self._item_size), + gr.io_signature(0, 0, 0), + ) + #blocks + sd = blks2.stream_to_vector_decimator( + item_size=self._item_size, + sample_rate=sample_rate, + vec_rate=number_rate, + vec_len=1, + ) + if self._real: + mult = gr.multiply_const_ff(factor) + add = gr.add_const_ff(ref_level) + avg = gr.single_pole_iir_filter_ff(1.0) + else: + mult = gr.multiply_const_cc(factor) + add = gr.add_const_cc(ref_level) + avg = gr.single_pole_iir_filter_cc(1.0) + msgq = gr.msg_queue(2) + sink = gr.message_sink(self._item_size, msgq, True) + #connect + self.connect(self, sd, mult, add, avg, sink) + #controller + self.controller = pubsub() + self.controller.subscribe(SAMPLE_RATE_KEY, sd.set_sample_rate) + self.controller.publish(SAMPLE_RATE_KEY, sd.sample_rate) + self.controller[AVERAGE_KEY] = average + self.controller[AVG_ALPHA_KEY] = avg_alpha + def update_avg(*args): + if self.controller[AVERAGE_KEY]: avg.set_taps(self.controller[AVG_ALPHA_KEY]) + else: avg.set_taps(1.0) + update_avg() + self.controller.subscribe(AVERAGE_KEY, update_avg) + self.controller.subscribe(AVG_ALPHA_KEY, update_avg) + #start input watcher + common.input_watcher(msgq, self.controller, MSG_KEY) + #create window + self.win = number_window.number_window( + parent=parent, + controller=self.controller, + size=size, + title=label, + units=unit, + real=self._real, + minval=minval, + maxval=maxval, + decimal_places=decimal_places, + show_gauge=show_gauge, + average_key=AVERAGE_KEY, + avg_alpha_key=AVG_ALPHA_KEY, + peak_hold=peak_hold, + msg_key=MSG_KEY, + sample_rate_key=SAMPLE_RATE_KEY, + ) + common.register_access_methods(self, self.controller) + #backwards compadibility + self.set_show_gauge = self.win.show_gauges + +class number_sink_f(_number_sink_base): + _item_size = gr.sizeof_float + _real = True + +class number_sink_c(_number_sink_base): + _item_size = gr.sizeof_gr_complex + _real = False + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +import wx +from gnuradio.wxgui import stdgui2 + +class test_app_flow_graph (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + # build our flow graph + input_rate = 20.48e3 + + # Generate a real and complex sinusoids + src1 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 2.21e3, 1) + src2 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 2.21e3, 1) + + # We add these throttle blocks so that this demo doesn't + # suck down all the CPU available. Normally you wouldn't use these. + thr1 = gr.throttle(gr.sizeof_float, input_rate) + thr2 = gr.throttle(gr.sizeof_gr_complex, input_rate) + + sink1 = number_sink_f (panel, unit='V',label="Real Data", avg_alpha=0.001, + sample_rate=input_rate, minval=-1, maxval=1, + ref_level=0, decimal_places=3) + vbox.Add (sink1.win, 1, wx.EXPAND) + sink2 = number_sink_c (panel, unit='V',label="Complex Data", avg_alpha=0.001, + sample_rate=input_rate, minval=-1, maxval=1, + ref_level=0, decimal_places=3) + vbox.Add (sink2.win, 1, wx.EXPAND) + + self.connect (src1, thr1, sink1) + self.connect (src2, thr2, sink2) + +def main (): + app = stdgui2.stdapp (test_app_flow_graph, "Number Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () + diff --git a/gr-wxgui/src/python/plot.py b/gr-wxgui/src/python/plot.py index 3323164c..5d50ee31 100644 --- a/gr-wxgui/src/python/plot.py +++ b/gr-wxgui/src/python/plot.py @@ -5,8 +5,8 @@ # Author: Gordon Williams # # Created: 2003/11/03 -# RCS-ID: $Id: plot.py 1251 2005-08-16 01:38:09Z eb $ -# Copyright: (c) 2002 +# RCS-ID: $Id: plot.py 8585 2008-06-12 21:33:40Z jblum $ +# Copyright: (c) 2002,2007 # Licence: Use as you wish. #----------------------------------------------------------------------------- # 12/15/2003 - Jeff Grimmett (grimmtooth@softhome.net) @@ -34,7 +34,8 @@ # - Added functions GetClosestPoints (all curves) and GetClosestPoint (only closest curve) # can be in either user coords or screen coords. # -# +# May 27, 2007 Johnathan Corgan (jcorgan@corganenterprises.com) +# - Converted from numarray to numpy """ This is a simple light weight plotting module that can be used with @@ -92,20 +93,20 @@ import string as _string import time as _time import wx -# Needs Numeric or numarray +# Needs numpy or numarray try: - import Numeric as _Numeric + import numpy as _numpy except: try: - import numarray as _Numeric #if numarray is used it is renamed Numeric + import numarray as _numpy #if numarray is used it is renamed numpy except: msg= """ - This module requires the Numeric or numarray module, + This module requires the numpy or numarray module, which could not be imported. It probably is not installed (it's not part of the standard Python distribution). See the Python site (http://www.python.org) for information on downloading source or binaries.""" - raise ImportError, "Numeric or numarray not found. \n" + msg + raise ImportError, "numpy or numarray not found. \n" + msg @@ -118,7 +119,7 @@ class PolyPoints: """ def __init__(self, points, attr): - self.points = _Numeric.array(points) + self.points = _numpy.array(points) self.currentScale= (1,1) self.currentShift= (0,0) self.scaled = self.points @@ -133,11 +134,11 @@ class PolyPoints: if len(self.points) == 0: # no curves to draw # defaults to (-1,-1) and (1,1) but axis can be set in Draw - minXY= _Numeric.array([-1,-1]) - maxXY= _Numeric.array([ 1, 1]) + minXY= _numpy.array([-1,-1]) + maxXY= _numpy.array([ 1, 1]) else: - minXY= _Numeric.minimum.reduce(self.points) - maxXY= _Numeric.maximum.reduce(self.points) + minXY= _numpy.minimum.reduce(self.points) + maxXY= _numpy.maximum.reduce(self.points) return minXY, maxXY def scaleAndShift(self, scale=(1,1), shift=(0,0)): @@ -163,14 +164,14 @@ class PolyPoints: if pointScaled == True: #Using screen coords p = self.scaled - pxy = self.currentScale * _Numeric.array(pntXY)+ self.currentShift + pxy = self.currentScale * _numpy.array(pntXY)+ self.currentShift else: #Using user coords p = self.points - pxy = _Numeric.array(pntXY) + pxy = _numpy.array(pntXY) #determine distance for each point - d= _Numeric.sqrt(_Numeric.add.reduce((p-pxy)**2,1)) #sqrt(dx^2+dy^2) - pntIndex = _Numeric.argmin(d) + d= _numpy.sqrt(_numpy.add.reduce((p-pxy)**2,1)) #sqrt(dx^2+dy^2) + pntIndex = _numpy.argmin(d) dist = d[pntIndex] return [pntIndex, self.points[pntIndex], self.scaled[pntIndex], dist] @@ -284,9 +285,9 @@ class PolyMarker(PolyPoints): def _circle(self, dc, coords, size=1): fact= 2.5*size wh= 5.0*size - rect= _Numeric.zeros((len(coords),4),_Numeric.Float)+[0.0,0.0,wh,wh] + rect= _numpy.zeros((len(coords),4),_numpy.float)+[0.0,0.0,wh,wh] rect[:,0:2]= coords-[fact,fact] - dc.DrawEllipseList(rect.astype(_Numeric.Int32)) + dc.DrawEllipseList(rect.astype(_numpy.int32)) def _dot(self, dc, coords, size=1): dc.DrawPointList(coords) @@ -294,35 +295,35 @@ class PolyMarker(PolyPoints): def _square(self, dc, coords, size=1): fact= 2.5*size wh= 5.0*size - rect= _Numeric.zeros((len(coords),4),_Numeric.Float)+[0.0,0.0,wh,wh] + rect= _numpy.zeros((len(coords),4),_numpy.float)+[0.0,0.0,wh,wh] rect[:,0:2]= coords-[fact,fact] - dc.DrawRectangleList(rect.astype(_Numeric.Int32)) + dc.DrawRectangleList(rect.astype(_numpy.int32)) def _triangle(self, dc, coords, size=1): shape= [(-2.5*size,1.44*size), (2.5*size,1.44*size), (0.0,-2.88*size)] - poly= _Numeric.repeat(coords,3) + poly= _numpy.repeat(coords,3) poly.shape= (len(coords),3,2) poly += shape - dc.DrawPolygonList(poly.astype(_Numeric.Int32)) + dc.DrawPolygonList(poly.astype(_numpy.int32)) def _triangle_down(self, dc, coords, size=1): shape= [(-2.5*size,-1.44*size), (2.5*size,-1.44*size), (0.0,2.88*size)] - poly= _Numeric.repeat(coords,3) + poly= _numpy.repeat(coords,3) poly.shape= (len(coords),3,2) poly += shape - dc.DrawPolygonList(poly.astype(_Numeric.Int32)) + dc.DrawPolygonList(poly.astype(_numpy.int32)) def _cross(self, dc, coords, size=1): fact= 2.5*size for f in [[-fact,-fact,fact,fact],[-fact,fact,fact,-fact]]: - lines= _Numeric.concatenate((coords,coords),axis=1)+f - dc.DrawLineList(lines.astype(_Numeric.Int32)) + lines= _numpy.concatenate((coords,coords),axis=1)+f + dc.DrawLineList(lines.astype(_numpy.int32)) def _plus(self, dc, coords, size=1): fact= 2.5*size for f in [[-fact,0,fact,0],[0,-fact,0,fact]]: - lines= _Numeric.concatenate((coords,coords),axis=1)+f - dc.DrawLineList(lines.astype(_Numeric.Int32)) + lines= _numpy.concatenate((coords,coords),axis=1)+f + dc.DrawLineList(lines.astype(_numpy.int32)) class PlotGraphics: """Container to hold PolyXXX objects and graph labels @@ -347,8 +348,8 @@ class PlotGraphics: p1, p2 = self.objects[0].boundingBox() for o in self.objects[1:]: p1o, p2o = o.boundingBox() - p1 = _Numeric.minimum(p1, p1o) - p2 = _Numeric.maximum(p2, p2o) + p1 = _numpy.minimum(p1, p1o) + p2 = _numpy.maximum(p2, p2o) return p1, p2 def scaleAndShift(self, scale=(1,1), shift=(0,0)): @@ -395,7 +396,7 @@ class PlotGraphics: symExt = self.objects[0].getSymExtent(printerScale) for o in self.objects[1:]: oSymExt = o.getSymExtent(printerScale) - symExt = _Numeric.maximum(symExt, oSymExt) + symExt = _numpy.maximum(symExt, oSymExt) return symExt def getLegendNames(self): @@ -453,8 +454,8 @@ class PlotCanvas(wx.Window): # Zooming variables self._zoomInFactor = 0.5 self._zoomOutFactor = 2 - self._zoomCorner1= _Numeric.array([0.0, 0.0]) # left mouse down corner - self._zoomCorner2= _Numeric.array([0.0, 0.0]) # left mouse up corner + self._zoomCorner1= _numpy.array([0.0, 0.0]) # left mouse down corner + self._zoomCorner2= _numpy.array([0.0, 0.0]) # left mouse up corner self._zoomEnabled= False self._hasDragged= False @@ -701,13 +702,13 @@ class PlotCanvas(wx.Window): def PositionUserToScreen(self, pntXY): """Converts User position to Screen Coordinates""" - userPos= _Numeric.array(pntXY) + userPos= _numpy.array(pntXY) x,y= userPos * self._pointScale + self._pointShift return x,y def PositionScreenToUser(self, pntXY): """Converts Screen position to User Coordinates""" - screenPos= _Numeric.array(pntXY) + screenPos= _numpy.array(pntXY) x,y= (screenPos-self._pointShift)/self._pointScale return x,y @@ -766,7 +767,7 @@ class PlotCanvas(wx.Window): def GetXUseScopeTicks(self): return self._xUseScopeTicks - def Draw(self, graphics, xAxis = None, yAxis = None, dc = None): + def Draw(self, graphics, xAxis = None, yAxis = None, dc = None, step=None): """Draw objects in graphics with specified x and y axis. graphics- instance of PlotGraphics with list of PolyXXX objects xAxis - tuple with (min, max) axis range to view @@ -812,8 +813,8 @@ class PlotCanvas(wx.Window): p2[0],p2[1] = xAxis[1], yAxis[1] # upper right corner user scale (xmax,ymax) else: # Both axis specified in Draw - p1= _Numeric.array([xAxis[0], yAxis[0]]) # lower left corner user scale (xmin,ymin) - p2= _Numeric.array([xAxis[1], yAxis[1]]) # upper right corner user scale (xmax,ymax) + p1= _numpy.array([xAxis[0], yAxis[0]]) # lower left corner user scale (xmin,ymin) + p2= _numpy.array([xAxis[1], yAxis[1]]) # upper right corner user scale (xmax,ymax) self.last_draw = (graphics, xAxis, yAxis) # saves most recient values @@ -828,7 +829,7 @@ class PlotCanvas(wx.Window): xticks = None xTextExtent= (0,0) # No text for ticks if self._ySpec is not 'none': - yticks = self._ticks(yAxis[0], yAxis[1]) + yticks = self._ticks(yAxis[0], yAxis[1], step) yTextExtentBottom= dc.GetTextExtent(yticks[0][1]) yTextExtentTop = dc.GetTextExtent(yticks[-1][1]) yTextExtent= (max(yTextExtentBottom[0],yTextExtentTop[0]), @@ -848,8 +849,8 @@ class PlotCanvas(wx.Window): lhsW= yTextExtent[0]+ yLabelWH[1] bottomH= max(xTextExtent[1], yTextExtent[1]/2.)+ xLabelWH[1] topH= yTextExtent[1]/2. + titleWH[1] - textSize_scale= _Numeric.array([rhsW+lhsW,bottomH+topH]) # make plot area smaller by text size - textSize_shift= _Numeric.array([lhsW, bottomH]) # shift plot area by this amount + textSize_scale= _numpy.array([rhsW+lhsW,bottomH+topH]) # make plot area smaller by text size + textSize_shift= _numpy.array([lhsW, bottomH]) # shift plot area by this amount # drawing title and labels text dc.SetFont(self._getFont(self._fontSizeTitle)) @@ -870,8 +871,8 @@ class PlotCanvas(wx.Window): self._drawLegend(dc,graphics,rhsW,topH,legendBoxWH, legendSymExt, legendTextExt) # allow for scaling and shifting plotted points - scale = (self.plotbox_size-textSize_scale) / (p2-p1)* _Numeric.array((1,-1)) - shift = -p1*scale + self.plotbox_origin + textSize_shift * _Numeric.array((1,-1)) + scale = (self.plotbox_size-textSize_scale) / (p2-p1)* _numpy.array((1,-1)) + shift = -p1*scale + self.plotbox_origin + textSize_shift * _numpy.array((1,-1)) self._pointScale= scale # make available for mouse events self._pointShift= shift self._drawAxes(dc, p1, p2, scale, shift, xticks, yticks) @@ -1006,8 +1007,8 @@ class PlotCanvas(wx.Window): self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # remove old self._zoomCorner2[0], self._zoomCorner2[1]= self.GetXY(event) self._hasDragged = False # reset flag - minX, minY= _Numeric.minimum( self._zoomCorner1, self._zoomCorner2) - maxX, maxY= _Numeric.maximum( self._zoomCorner1, self._zoomCorner2) + minX, minY= _numpy.minimum( self._zoomCorner1, self._zoomCorner2) + maxX, maxY= _numpy.maximum( self._zoomCorner1, self._zoomCorner2) self.last_PointLabel = None #reset pointLabel if self.last_draw != None: self.Draw(self.last_draw[0], xAxis = (minX,maxX), yAxis = (minY,maxY), dc = None) @@ -1065,10 +1066,10 @@ class PlotCanvas(wx.Window): (self.width,self.height) = self.GetClientSize() else: self.width, self.height= width,height - self.plotbox_size = 0.97*_Numeric.array([self.width, self.height]) + self.plotbox_size = 0.97*_numpy.array([self.width, self.height]) xo = 0.5*(self.width-self.plotbox_size[0]) yo = self.height-0.5*(self.height-self.plotbox_size[1]) - self.plotbox_origin = _Numeric.array([xo, yo]) + self.plotbox_origin = _numpy.array([xo, yo]) def _setPrinterScale(self, scale): """Used to thicken lines and increase marker size for print out.""" @@ -1111,12 +1112,12 @@ class PlotCanvas(wx.Window): if isinstance(o,PolyMarker): # draw marker with legend pnt= (trhc[0]+legendLHS+legendSymExt[0]/2., trhc[1]+s+lineHeight/2.) - o.draw(dc, self.printerScale, coord= _Numeric.array([pnt])) + o.draw(dc, self.printerScale, coord= _numpy.array([pnt])) elif isinstance(o,PolyLine): # draw line with legend pnt1= (trhc[0]+legendLHS, trhc[1]+s+lineHeight/2.) pnt2= (trhc[0]+legendLHS+legendSymExt[0], trhc[1]+s+lineHeight/2.) - o.draw(dc, self.printerScale, coord= _Numeric.array([pnt1,pnt2])) + o.draw(dc, self.printerScale, coord= _numpy.array([pnt1,pnt2])) else: raise TypeError, "object is neither PolyMarker or PolyLine instance" # draw legend txt @@ -1148,7 +1149,7 @@ class PlotCanvas(wx.Window): txtList= graphics.getLegendNames() txtExt= dc.GetTextExtent(txtList[0]) for txt in graphics.getLegendNames()[1:]: - txtExt= _Numeric.maximum(txtExt,dc.GetTextExtent(txt)) + txtExt= _numpy.maximum(txtExt,dc.GetTextExtent(txt)) maxW= symExt[0]+txtExt[0] maxH= max(symExt[1],txtExt[1]) # padding .1 for lhs of legend box and space between lines @@ -1188,14 +1189,14 @@ class PlotCanvas(wx.Window): def _point2ClientCoord(self, corner1, corner2): """Converts user point coords to client screen int coords x,y,width,height""" - c1= _Numeric.array(corner1) - c2= _Numeric.array(corner2) + c1= _numpy.array(corner1) + c2= _numpy.array(corner2) # convert to screen coords pt1= c1*self._pointScale+self._pointShift pt2= c2*self._pointScale+self._pointShift # make height and width positive - pul= _Numeric.minimum(pt1,pt2) # Upper left corner - plr= _Numeric.maximum(pt1,pt2) # Lower right corner + pul= _numpy.minimum(pt1,pt2) # Upper left corner + plr= _numpy.maximum(pt1,pt2) # Lower right corner rectWidth, rectHeight= plr-pul ptx,pty= pul return ptx, pty, rectWidth, rectHeight @@ -1212,8 +1213,8 @@ class PlotCanvas(wx.Window): # if range == 0.: if abs(range) < 1e-36: return lower-0.5, upper+0.5 - log = _Numeric.log10(range) - power = _Numeric.floor(log) + log = _numpy.log10(range) + power = _numpy.floor(log) fraction = log-power if fraction <= 0.05: power = power-1 @@ -1250,11 +1251,11 @@ class PlotCanvas(wx.Window): lower, upper = p1[0],p2[0] text = 1 for y, d in [(p1[1], -xTickLength), (p2[1], xTickLength)]: # miny, maxy and tick lengths - a1 = scale*_Numeric.array([lower, y])+shift - a2 = scale*_Numeric.array([upper, y])+shift + a1 = scale*_numpy.array([lower, y])+shift + a2 = scale*_numpy.array([upper, y])+shift dc.DrawLine(a1[0],a1[1],a2[0],a2[1]) # draws upper and lower axis line for x, label in xticks: - pt = scale*_Numeric.array([x, y])+shift + pt = scale*_numpy.array([x, y])+shift dc.DrawLine(pt[0],pt[1],pt[0],pt[1] + d) # draws tick mark d units if text: dc.DrawText(label,pt[0],pt[1]) @@ -1265,26 +1266,26 @@ class PlotCanvas(wx.Window): text = 1 h = dc.GetCharHeight() for x, d in [(p1[0], -yTickLength), (p2[0], yTickLength)]: - a1 = scale*_Numeric.array([x, lower])+shift - a2 = scale*_Numeric.array([x, upper])+shift + a1 = scale*_numpy.array([x, lower])+shift + a2 = scale*_numpy.array([x, upper])+shift dc.DrawLine(a1[0],a1[1],a2[0],a2[1]) for y, label in yticks: - pt = scale*_Numeric.array([x, y])+shift + pt = scale*_numpy.array([x, y])+shift dc.DrawLine(pt[0],pt[1],pt[0]-d,pt[1]) if text: dc.DrawText(label,pt[0]-dc.GetTextExtent(label)[0], pt[1]-0.5*h) text = 0 # axis values not drawn on right side - def _ticks(self, lower, upper): + def _ticks(self, lower, upper, step=None): ideal = (upper-lower)/7. - log = _Numeric.log10(ideal) - power = _Numeric.floor(log) + log = _numpy.log10(ideal) + power = _numpy.floor(log) fraction = log-power factor = 1. error = fraction for f, lf in self._multiples: - e = _Numeric.fabs(fraction-lf) + e = _numpy.fabs(fraction-lf) if e < error: error = e factor = f @@ -1297,9 +1298,12 @@ class PlotCanvas(wx.Window): else: digits = -int(power) format = '%'+`digits+2`+'.'+`digits`+'f' + #force grid when step is not None + if step is not None: grid = step ticks = [] - t = -grid*_Numeric.floor(-lower/grid) + t = -grid*_numpy.floor(-lower/grid) while t <= upper: + if t == -0: t = 0 #remove neg zero condition ticks.append( (t, format % (t,)) ) t = t + grid return ticks @@ -1314,7 +1318,7 @@ class PlotCanvas(wx.Window): t = t + grid return ticks - _multiples = [(2., _Numeric.log10(2.)), (5., _Numeric.log10(5.))] + _multiples = [(2., _numpy.log10(2.)), (5., _numpy.log10(5.))] #------------------------------------------------------------------------------- @@ -1405,19 +1409,19 @@ class PlotPrintout(wx.Printout): def _draw1Objects(): # 100 points sin function, plotted as green circles - data1 = 2.*_Numeric.pi*_Numeric.arange(200)/200. + data1 = 2.*_numpy.pi*_numpy.arange(200)/200. data1.shape = (100, 2) - data1[:,1] = _Numeric.sin(data1[:,0]) + data1[:,1] = _numpy.sin(data1[:,0]) markers1 = PolyMarker(data1, legend='Green Markers', colour='green', marker='circle',size=1) # 50 points cos function, plotted as red line - data1 = 2.*_Numeric.pi*_Numeric.arange(100)/100. + data1 = 2.*_numpy.pi*_numpy.arange(100)/100. data1.shape = (50,2) - data1[:,1] = _Numeric.cos(data1[:,0]) + data1[:,1] = _numpy.cos(data1[:,0]) lines = PolyLine(data1, legend= 'Red Line', colour='red') # A few more points... - pi = _Numeric.pi + pi = _numpy.pi markers2 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.), (3.*pi/4., -1)], legend='Cross Legend', colour='blue', marker='cross') @@ -1426,19 +1430,19 @@ def _draw1Objects(): def _draw2Objects(): # 100 points sin function, plotted as green dots - data1 = 2.*_Numeric.pi*_Numeric.arange(200)/200. + data1 = 2.*_numpy.pi*_numpy.arange(200)/200. data1.shape = (100, 2) - data1[:,1] = _Numeric.sin(data1[:,0]) + data1[:,1] = _numpy.sin(data1[:,0]) line1 = PolyLine(data1, legend='Green Line', colour='green', width=6, style=wx.DOT) # 50 points cos function, plotted as red dot-dash - data1 = 2.*_Numeric.pi*_Numeric.arange(100)/100. + data1 = 2.*_numpy.pi*_numpy.arange(100)/100. data1.shape = (50,2) - data1[:,1] = _Numeric.cos(data1[:,0]) + data1[:,1] = _numpy.cos(data1[:,0]) line2 = PolyLine(data1, legend='Red Line', colour='red', width=3, style= wx.DOT_DASH) # A few more points... - pi = _Numeric.pi + pi = _numpy.pi markers1 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.), (3.*pi/4., -1)], legend='Cross Hatch Square', colour='blue', width= 3, size= 6, fillcolour= 'red', fillstyle= wx.CROSSDIAG_HATCH, @@ -1457,7 +1461,7 @@ def _draw3Objects(): def _draw4Objects(): # 25,000 point line - data1 = _Numeric.arange(5e5,1e6,10) + data1 = _numpy.arange(5e5,1e6,10) data1.shape = (25000, 2) line1 = PolyLine(data1, legend='Wide Line', colour='green', width=5) diff --git a/gr-wxgui/src/python/plotter/Makefile.am b/gr-wxgui/src/python/plotter/Makefile.am new file mode 100644 index 00000000..d00f0a42 --- /dev/null +++ b/gr-wxgui/src/python/plotter/Makefile.am @@ -0,0 +1,40 @@ +# +# Copyright 2004,2005,2008,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. +# + +include $(top_srcdir)/Makefile.common + +# Install this stuff so that it ends up as the gnuradio.wxgui module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/wxgui + +ourpythondir = $(grpythondir)/wxgui/plotter +ourlibdir = $(grpyexecdir)/wxgui/plotter + +ourpython_PYTHON = \ + __init__.py \ + bar_plotter.py \ + channel_plotter.py \ + common.py \ + gltext.py \ + grid_plotter_base.py \ + plotter_base.py \ + waterfall_plotter.py + diff --git a/gr-wxgui/src/python/plotter/Makefile.in b/gr-wxgui/src/python/plotter/Makefile.in new file mode 100644 index 00000000..50db872d --- /dev/null +++ b/gr-wxgui/src/python/plotter/Makefile.in @@ -0,0 +1,928 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(ourpython_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gr-wxgui/src/python/plotter +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourpythondir)" +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT + +# Install this stuff so that it ends up as the gnuradio.wxgui module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio/wxgui +ourpythondir = $(grpythondir)/wxgui/plotter +ourlibdir = $(grpyexecdir)/wxgui/plotter +ourpython_PYTHON = \ + __init__.py \ + bar_plotter.py \ + channel_plotter.py \ + common.py \ + gltext.py \ + grid_plotter_base.py \ + plotter_base.py \ + waterfall_plotter.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gr-wxgui/src/python/plotter/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gr-wxgui/src/python/plotter/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(ourpythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-ourpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-ourpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gr-wxgui/src/python/plotter/__init__.py b/gr-wxgui/src/python/plotter/__init__.py new file mode 100644 index 00000000..616492a3 --- /dev/null +++ b/gr-wxgui/src/python/plotter/__init__.py @@ -0,0 +1,24 @@ +# +# Copyright 2008 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 channel_plotter import channel_plotter +from waterfall_plotter import waterfall_plotter +from bar_plotter import bar_plotter diff --git a/gr-wxgui/src/python/plotter/bar_plotter.py b/gr-wxgui/src/python/plotter/bar_plotter.py new file mode 100644 index 00000000..3f9259e9 --- /dev/null +++ b/gr-wxgui/src/python/plotter/bar_plotter.py @@ -0,0 +1,144 @@ +# +# 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. +# + +import wx +from grid_plotter_base import grid_plotter_base +from OpenGL import GL +import common +import numpy + +LEGEND_TEXT_FONT_SIZE = 8 +LEGEND_BOX_PADDING = 3 +MIN_PADDING = 0, 0, 0, 70 #top, right, bottom, left +#constants for the waveform storage +SAMPLES_KEY = 'samples' +COLOR_SPEC_KEY = 'color_spec' +MARKERY_KEY = 'marker' +TRIG_OFF_KEY = 'trig_off' + +################################################## +# Bar Plotter for histogram waveforms +################################################## +class bar_plotter(grid_plotter_base): + + def __init__(self, parent): + """ + Create a new bar plotter. + """ + #init + grid_plotter_base.__init__(self, parent, MIN_PADDING) + self._bars = list() + self._bar_width = .5 + self._color_spec = (0, 0, 0) + #setup bar cache + self._bar_cache = self.new_gl_cache(self._draw_bars) + #setup bar plotter + self.register_init(self._init_bar_plotter) + + def _init_bar_plotter(self): + """ + Run gl initialization tasks. + """ + GL.glEnableClientState(GL.GL_VERTEX_ARRAY) + + def _draw_bars(self): + """ + Draw the vertical bars. + """ + bars = self._bars + num_bars = len(bars) + if num_bars == 0: return + #use scissor to prevent drawing outside grid + GL.glEnable(GL.GL_SCISSOR_TEST) + GL.glScissor( + self.padding_left, + self.padding_bottom+1, + self.width-self.padding_left-self.padding_right-1, + self.height-self.padding_top-self.padding_bottom-1, + ) + #load the points + points = list() + width = self._bar_width/2 + for i, bar in enumerate(bars): + points.extend([ + (i-width, 0), + (i+width, 0), + (i+width, bar), + (i-width, bar), + ] + ) + GL.glColor3f(*self._color_spec) + #matrix transforms + GL.glPushMatrix() + GL.glTranslatef(self.padding_left, self.padding_top, 0) + GL.glScalef( + (self.width-self.padding_left-self.padding_right), + (self.height-self.padding_top-self.padding_bottom), + 1, + ) + GL.glTranslatef(0, 1, 0) + GL.glScalef(1.0/(num_bars-1), -1.0/(self.y_max-self.y_min), 1) + GL.glTranslatef(0, -self.y_min, 0) + #draw the bars + GL.glVertexPointerf(points) + GL.glDrawArrays(GL.GL_QUADS, 0, len(points)) + GL.glPopMatrix() + GL.glDisable(GL.GL_SCISSOR_TEST) + + def _populate_point_label(self, x_val, y_val): + """ + Get the text the will populate the point label. + Give X and Y values for the current point. + Give values for the channel at the X coordinate. + @param x_val the current x value + @param y_val the current y value + @return a string with newlines + """ + if len(self._bars) == 0: return '' + scalar = float(len(self._bars)-1)/(self.x_max - self.x_min) + #convert x val to bar # + bar_index = scalar*(x_val - self.x_min) + #if abs(bar_index - round(bar_index)) > self._bar_width/2: return '' + bar_index = int(round(bar_index)) + bar_start = (bar_index - self._bar_width/2)/scalar + self.x_min + bar_end = (bar_index + self._bar_width/2)/scalar + self.x_min + bar_value = self._bars[bar_index] + return '%s to %s\n%s: %s'%( + common.eng_format(bar_start, self.x_units), + common.eng_format(bar_end, self.x_units), + self.y_label, common.eng_format(bar_value, self.y_units), + ) + + def set_bars(self, bars, bar_width, color_spec): + """ + Set the bars. + @param bars a list of bars + @param bar_width the fractional width of the bar, between 0 and 1 + @param color_spec the color tuple + """ + self.lock() + self._bars = bars + self._bar_width = float(bar_width) + self._color_spec = color_spec + self._bar_cache.changed(True) + self.unlock() + + diff --git a/gr-wxgui/src/python/plotter/channel_plotter.py b/gr-wxgui/src/python/plotter/channel_plotter.py new file mode 100644 index 00000000..ff0a3a16 --- /dev/null +++ b/gr-wxgui/src/python/plotter/channel_plotter.py @@ -0,0 +1,227 @@ +# +# Copyright 2008, 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. +# + +import wx +from grid_plotter_base import grid_plotter_base +from OpenGL import GL +import common +import numpy +import gltext +import math + +LEGEND_TEXT_FONT_SIZE = 8 +LEGEND_BOX_PADDING = 3 +MIN_PADDING = 35, 10, 0, 0 #top, right, bottom, left +#constants for the waveform storage +SAMPLES_KEY = 'samples' +COLOR_SPEC_KEY = 'color_spec' +MARKERY_KEY = 'marker' +TRIG_OFF_KEY = 'trig_off' + +################################################## +# Channel Plotter for X Y Waveforms +################################################## +class channel_plotter(grid_plotter_base): + + def __init__(self, parent): + """ + Create a new channel plotter. + """ + #init + grid_plotter_base.__init__(self, parent, MIN_PADDING) + #setup legend cache + self._legend_cache = self.new_gl_cache(self._draw_legend, 50) + self.enable_legend(False) + #setup waveform cache + self._waveform_cache = self.new_gl_cache(self._draw_waveforms, 50) + self._channels = dict() + #init channel plotter + self.register_init(self._init_channel_plotter) + + def _init_channel_plotter(self): + """ + Run gl initialization tasks. + """ + GL.glEnableClientState(GL.GL_VERTEX_ARRAY) + + def enable_legend(self, enable=None): + """ + Enable/disable the legend. + @param enable true to enable + @return the enable state when None + """ + if enable is None: return self._enable_legend + self.lock() + self._enable_legend = enable + self._legend_cache.changed(True) + self.unlock() + + def _draw_waveforms(self): + """ + Draw the waveforms for each channel. + Scale the waveform data to the grid using gl matrix operations. + """ + #use scissor to prevent drawing outside grid + GL.glEnable(GL.GL_SCISSOR_TEST) + GL.glScissor( + self.padding_left+1, + self.padding_bottom+1, + self.width-self.padding_left-self.padding_right-1, + self.height-self.padding_top-self.padding_bottom-1, + ) + for channel in reversed(sorted(self._channels.keys())): + samples = self._channels[channel][SAMPLES_KEY] + num_samps = len(samples) + if not num_samps: continue + #use opengl to scale the waveform + GL.glPushMatrix() + GL.glTranslatef(self.padding_left, self.padding_top, 0) + GL.glScalef( + (self.width-self.padding_left-self.padding_right), + (self.height-self.padding_top-self.padding_bottom), + 1, + ) + GL.glTranslatef(0, 1, 0) + if isinstance(samples, tuple): + x_scale, x_trans = 1.0/(self.x_max-self.x_min), -self.x_min + points = zip(*samples) + else: + x_scale, x_trans = 1.0/(num_samps-1), -self._channels[channel][TRIG_OFF_KEY] + points = zip(numpy.arange(0, num_samps), samples) + GL.glScalef(x_scale, -1.0/(self.y_max-self.y_min), 1) + GL.glTranslatef(x_trans, -self.y_min, 0) + #draw the points/lines + GL.glColor3f(*self._channels[channel][COLOR_SPEC_KEY]) + marker = self._channels[channel][MARKERY_KEY] + if marker is None: + GL.glVertexPointerf(points) + GL.glDrawArrays(GL.GL_LINE_STRIP, 0, len(points)) + elif isinstance(marker, (int, float)) and marker > 0: + GL.glPointSize(marker) + GL.glVertexPointerf(points) + GL.glDrawArrays(GL.GL_POINTS, 0, len(points)) + GL.glPopMatrix() + GL.glDisable(GL.GL_SCISSOR_TEST) + + def _populate_point_label(self, x_val, y_val): + """ + Get the text the will populate the point label. + Give X and Y values for the current point. + Give values for the channel at the X coordinate. + @param x_val the current x value + @param y_val the current y value + @return a string with newlines + """ + #create text + label_str = '%s: %s\n%s: %s'%( + self.x_label, common.eng_format(x_val, self.x_units), + self.y_label, common.eng_format(y_val, self.y_units), + ) + for channel in sorted(self._channels.keys()): + samples = self._channels[channel][SAMPLES_KEY] + num_samps = len(samples) + if not num_samps: continue + if isinstance(samples, tuple): continue + #linear interpolation + x_index = (num_samps-1)*(x_val-self.x_min)/(self.x_max-self.x_min) + x_index_low = int(math.floor(x_index)) + x_index_high = int(math.ceil(x_index)) + scale = x_index - x_index_low + self._channels[channel][TRIG_OFF_KEY] + y_value = (samples[x_index_high] - samples[x_index_low])*scale + samples[x_index_low] + label_str += '\n%s: %s'%(channel, common.eng_format(y_value, self.y_units)) + return label_str + + def _draw_legend(self): + """ + Draw the legend in the upper right corner. + For each channel, draw a rectangle out of the channel color, + and overlay the channel text on top of the rectangle. + """ + if not self.enable_legend(): return + x_off = self.width - self.padding_right - LEGEND_BOX_PADDING + for i, channel in enumerate(reversed(sorted(self._channels.keys()))): + samples = self._channels[channel][SAMPLES_KEY] + if not len(samples): continue + color_spec = self._channels[channel][COLOR_SPEC_KEY] + txt = gltext.Text(channel, font_size=LEGEND_TEXT_FONT_SIZE) + w, h = txt.get_size() + #draw rect + text + GL.glColor3f(*color_spec) + self._draw_rect( + x_off - w - LEGEND_BOX_PADDING, + self.padding_top/2 - h/2 - LEGEND_BOX_PADDING, + w+2*LEGEND_BOX_PADDING, + h+2*LEGEND_BOX_PADDING, + ) + txt.draw_text(wx.Point(x_off - w, self.padding_top/2 - h/2)) + x_off -= w + 4*LEGEND_BOX_PADDING + + def clear_waveform(self, channel): + """ + Remove a waveform from the list of waveforms. + @param channel the channel key + """ + self.lock() + if channel in self._channels.keys(): + self._channels.pop(channel) + self._legend_cache.changed(True) + self._waveform_cache.changed(True) + self.unlock() + + def set_waveform(self, channel, samples=[], color_spec=(0, 0, 0), marker=None, trig_off=0): + """ + Set the waveform for a given channel. + @param channel the channel key + @param samples the waveform samples + @param color_spec the 3-tuple for line color + @param marker None for line + @param trig_off fraction of sample for trigger offset + """ + self.lock() + if channel not in self._channels.keys(): self._legend_cache.changed(True) + self._channels[channel] = { + SAMPLES_KEY: samples, + COLOR_SPEC_KEY: color_spec, + MARKERY_KEY: marker, + TRIG_OFF_KEY: trig_off, + } + self._waveform_cache.changed(True) + self.unlock() + +if __name__ == '__main__': + app = wx.PySimpleApp() + frame = wx.Frame(None, -1, 'Demo', wx.DefaultPosition) + vbox = wx.BoxSizer(wx.VERTICAL) + + plotter = channel_plotter(frame) + plotter.set_x_grid(-1, 1, .2) + plotter.set_y_grid(-1, 1, .4) + vbox.Add(plotter, 1, wx.EXPAND) + + plotter = channel_plotter(frame) + plotter.set_x_grid(-1, 1, .2) + plotter.set_y_grid(-1, 1, .4) + vbox.Add(plotter, 1, wx.EXPAND) + + frame.SetSizerAndFit(vbox) + frame.SetSize(wx.Size(800, 600)) + frame.Show() + app.MainLoop() diff --git a/gr-wxgui/src/python/plotter/common.py b/gr-wxgui/src/python/plotter/common.py new file mode 100644 index 00000000..7699986a --- /dev/null +++ b/gr-wxgui/src/python/plotter/common.py @@ -0,0 +1,131 @@ +# +# 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. +# + +import threading +import time +import math +import wx + +################################################## +# Number formatting +################################################## +def get_exp(num): + """ + Get the exponent of the number in base 10. + @param num the floating point number + @return the exponent as an integer + """ + if num == 0: return 0 + return int(math.floor(math.log10(abs(num)))) + +def get_si_components(num): + """ + Get the SI units for the number. + Extract the coeff and exponent of the number. + The exponent will be a multiple of 3. + @param num the floating point number + @return the tuple coeff, exp, prefix + """ + num = float(num) + exp = get_exp(num) + exp -= exp%3 + exp = min(max(exp, -24), 24) #bounds on SI table below + prefix = { + 24: 'Y', 21: 'Z', + 18: 'E', 15: 'P', + 12: 'T', 9: 'G', + 6: 'M', 3: 'k', + 0: '', + -3: 'm', -6: 'u', + -9: 'n', -12: 'p', + -15: 'f', -18: 'a', + -21: 'z', -24: 'y', + }[exp] + coeff = num/10**exp + return coeff, exp, prefix + +def sci_format(num): + """ + Format a floating point number into scientific notation. + @param num the number to format + @return a label string + """ + coeff, exp, prefix = get_si_components(num) + if -3 <= exp < 3: return '%g'%num + return '%.3ge%d'%(coeff, exp) + +def eng_format(num, units=''): + """ + Format a floating point number into engineering notation. + @param num the number to format + @param units the units to append + @return a label string + """ + coeff, exp, prefix = get_si_components(num) + if -3 <= exp < 3: return '%g'%num + return '%g%s%s%s'%(coeff, units and ' ' or '', prefix, units) + +################################################## +# Interface with thread safe lock/unlock +################################################## +class mutex(object): + _lock = threading.Lock() + def lock(self): self._lock.acquire() + def unlock(self): self._lock.release() + +################################################## +# Periodic update thread for point label +################################################## +class point_label_thread(threading.Thread, mutex): + + def __init__(self, plotter): + self._plotter = plotter + self._coor_queue = list() + #bind plotter mouse events + self._plotter.Bind(wx.EVT_MOTION, lambda evt: self.enqueue(evt.GetPosition())) + self._plotter.Bind(wx.EVT_LEAVE_WINDOW, lambda evt: self.enqueue(None)) + #start the thread + threading.Thread.__init__(self) + self.start() + + def enqueue(self, coor): + self.lock() + self._coor_queue.append(coor) + self.unlock() + + def run(self): + last_ts = time.time() + last_coor = coor = None + try: + while True: + time.sleep(1.0/30.0) + self.lock() + #get most recent coor change + if self._coor_queue: + coor = self._coor_queue[-1] + self._coor_queue = list() + self.unlock() + #update if coor change, or enough time expired + if last_coor != coor or (time.time() - last_ts) > (1.0/2.0): + self._plotter.set_point_label_coordinate(coor) + last_coor = coor + last_ts = time.time() + except wx.PyDeadObjectError: pass diff --git a/gr-wxgui/src/python/plotter/gltext.py b/gr-wxgui/src/python/plotter/gltext.py new file mode 100644 index 00000000..67f62ca5 --- /dev/null +++ b/gr-wxgui/src/python/plotter/gltext.py @@ -0,0 +1,503 @@ +#!/usr/bin/env python +# -*- coding: utf-8 +# +# Provides some text display functions for wx + ogl +# Copyright (C) 2007 Christian Brugger, Stefan Hacker +# +# 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 of the License, 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 program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import wx +from OpenGL.GL import * + +""" +Optimize with psyco if possible, this gains us about 50% speed when +creating our textures in trade for about 4MBytes of additional memory usage for +psyco. If you don't like loosing the memory you have to turn the lines following +"enable psyco" into a comment while uncommenting the line after "Disable psyco". +""" +#Try to enable psyco +try: + import psyco + psyco_optimized = False +except ImportError: + psyco = None + +#Disable psyco +#psyco = None + +class TextElement(object): + """ + A simple class for using system Fonts to display + text in an OpenGL scene + """ + def __init__(self, + text = '', + font = None, + foreground = wx.BLACK, + centered = False): + """ + text (String) - Text + font (wx.Font) - Font to draw with (None = System default) + foreground (wx.Color) - Color of the text + or (wx.Bitmap)- Bitmap to overlay the text with + centered (bool) - Center the text + + Initializes the TextElement + """ + # save given variables + self._text = text + self._lines = text.split('\n') + self._font = font + self._foreground = foreground + self._centered = centered + + # init own variables + self._owner_cnt = 0 #refcounter + self._texture = None #OpenGL texture ID + self._text_size = None #x/y size tuple of the text + self._texture_size= None #x/y Texture size tuple + + # create Texture + self.createTexture() + + + #---Internal helpers + + def _getUpper2Base(self, value): + """ + Returns the lowest value with the power of + 2 greater than 'value' (2^n>value) + """ + base2 = 1 + while base2 < value: + base2 *= 2 + return base2 + + #---Functions + + def draw_text(self, position = wx.Point(0,0), scale = 1.0, rotation = 0): + """ + position (wx.Point) - x/y Position to draw in scene + scale (float) - Scale + rotation (int) - Rotation in degree + + Draws the text to the scene + """ + #Enable necessary functions + glColor(1,1,1,1) + glEnable(GL_TEXTURE_2D) + glEnable(GL_ALPHA_TEST) #Enable alpha test + glAlphaFunc(GL_GREATER, 0) + glEnable(GL_BLEND) #Enable blending + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + #Bind texture + glBindTexture(GL_TEXTURE_2D, self._texture) + + ow, oh = self._text_size + w , h = self._texture_size + #Perform transformations + glPushMatrix() + glTranslated(position.x, position.y, 0) + glRotate(-rotation, 0, 0, 1) + glScaled(scale, scale, scale) + if self._centered: + glTranslate(-w/2, -oh/2, 0) + #Draw vertices + glBegin(GL_QUADS) + glTexCoord2f(0,0); glVertex2f(0,0) + glTexCoord2f(0,1); glVertex2f(0,h) + glTexCoord2f(1,1); glVertex2f(w,h) + glTexCoord2f(1,0); glVertex2f(w,0) + glEnd() + glPopMatrix() + + #Disable features + glDisable(GL_BLEND) + glDisable(GL_ALPHA_TEST) + glDisable(GL_TEXTURE_2D) + + def createTexture(self): + """ + Creates a texture from the settings saved in TextElement, to be able to use normal + system fonts conviently a wx.MemoryDC is used to draw on a wx.Bitmap. As wxwidgets + device contexts don't support alpha at all it is necessary to apply a little hack + to preserve antialiasing without sticking to a fixed background color: + + We draw the bmp in b/w mode so we can use its data as a alpha channel for a solid + color bitmap which after GL_ALPHA_TEST and GL_BLEND will show a nicely antialiased + text on any surface. + + To access the raw pixel data the bmp gets converted to a wx.Image. Now we just have + to merge our foreground color with the alpha data we just created and push it all + into a OpenGL texture and we are DONE *inhalesdelpy* + + DRAWBACK of the whole conversion thing is a really long time for creating the + texture. If you see any optimizations that could save time PLEASE CREATE A PATCH!!! + """ + # get a memory dc + dc = wx.MemoryDC() + + # set our font + dc.SetFont(self._font) + + # Approximate extend to next power of 2 and create our bitmap + # REMARK: You wouldn't believe how much fucking speed this little + # sucker gains compared to sizes not of the power of 2. It's like + # 500ms --> 0.5ms (on my ATI-GPU powered Notebook). On Sams nvidia + # machine there don't seem to occur any losses...bad drivers? + ow, oh = dc.GetMultiLineTextExtent(self._text)[:2] + w, h = self._getUpper2Base(ow), self._getUpper2Base(oh) + + self._text_size = wx.Size(ow,oh) + self._texture_size = wx.Size(w,h) + bmp = wx.EmptyBitmap(w,h) + + + #Draw in b/w mode to bmp so we can use it as alpha channel + dc.SelectObject(bmp) + dc.SetBackground(wx.BLACK_BRUSH) + dc.Clear() + dc.SetTextForeground(wx.WHITE) + x,y = 0,0 + centered = self.centered + for line in self._lines: + if not line: line = ' ' + tw, th = dc.GetTextExtent(line) + if centered: + x = int(round((w-tw)/2)) + dc.DrawText(line, x, y) + x = 0 + y += th + #Release the dc + dc.SelectObject(wx.NullBitmap) + del dc + + #Generate a correct RGBA data string from our bmp + """ + NOTE: You could also use wx.AlphaPixelData to access the pixel data + in 'bmp' directly, but the iterator given by it is much slower than + first converting to an image and using wx.Image.GetData(). + """ + img = wx.ImageFromBitmap(bmp) + alpha = img.GetData() + + if isinstance(self._foreground, wx.Color): + """ + If we have a static color... + """ + r,g,b = self._foreground.Get() + color = "%c%c%c" % (chr(r), chr(g), chr(b)) + + data = '' + for i in xrange(0, len(alpha)-1, 3): + data += color + alpha[i] + + elif isinstance(self._foreground, wx.Bitmap): + """ + If we have a bitmap... + """ + bg_img = wx.ImageFromBitmap(self._foreground) + bg = bg_img.GetData() + bg_width = self._foreground.GetWidth() + bg_height = self._foreground.GetHeight() + + data = '' + + for y in xrange(0, h): + for x in xrange(0, w): + if (y > (bg_height-1)) or (x > (bg_width-1)): + color = "%c%c%c" % (chr(0),chr(0),chr(0)) + else: + pos = (x+y*bg_width) * 3 + color = bg[pos:pos+3] + data += color + alpha[(x+y*w)*3] + + + # now convert it to ogl texture + self._texture = glGenTextures(1) + glBindTexture(GL_TEXTURE_2D, self._texture) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0) + glPixelStorei(GL_UNPACK_ALIGNMENT, 2) + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data) + + def deleteTexture(self): + """ + Deletes the OpenGL texture object + """ + if self._texture: + if glIsTexture(self._texture): + glDeleteTextures(self._texture) + else: + self._texture = None + + def bind(self): + """ + Increase refcount + """ + self._owner_cnt += 1 + + def release(self): + """ + Decrease refcount + """ + self._owner_cnt -= 1 + + def isBound(self): + """ + Return refcount + """ + return self._owner_cnt + + def __del__(self): + """ + Destructor + """ + self.deleteTexture() + + #---Getters/Setters + + def getText(self): return self._text + def getFont(self): return self._font + def getForeground(self): return self._foreground + def getCentered(self): return self._centered + def getTexture(self): return self._texture + def getTexture_size(self): return self._texture_size + + def getOwner_cnt(self): return self._owner_cnt + def setOwner_cnt(self, value): + self._owner_cnt = value + + #---Properties + + text = property(getText, None, None, "Text of the object") + font = property(getFont, None, None, "Font of the object") + foreground = property(getForeground, None, None, "Color of the text") + centered = property(getCentered, None, None, "Is text centered") + owner_cnt = property(getOwner_cnt, setOwner_cnt, None, "Owner count") + texture = property(getTexture, None, None, "Used texture") + texture_size = property(getTexture_size, None, None, "Size of the used texture") + + +class Text(object): + """ + A simple class for using System Fonts to display text in + an OpenGL scene. The Text adds a global Cache of already + created text elements to TextElement's base functionality + so you can save some memory and increase speed + """ + _texts = [] #Global cache for TextElements + + def __init__(self, + text = 'Text', + font = None, + font_size = 8, + foreground = wx.BLACK, + centered = False, + bold = False): + """ + text (string) - displayed text + font (wx.Font) - if None, system default font will be used with font_size + font_size (int) - font size in points + foreground (wx.Color) - Color of the text + or (wx.Bitmap) - Bitmap to overlay the text with + centered (bool) - should the text drawn centered towards position? + + Initializes the text object + """ + #Init/save variables + self._aloc_text = None + self._text = text + self._font_size = font_size + self._foreground= foreground + self._centered = centered + + #Check if we are offered a font + if not font: + #if not use the system default + self._font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) + else: + #save it + self._font = font + + if bold: self._font.SetWeight(wx.FONTWEIGHT_BOLD) + + #Bind us to our texture + self._initText() + + #---Internal helpers + + def _initText(self): + """ + Initializes/Reinitializes the Text object by binding it + to a TextElement suitable for its current settings + """ + #Check if we already bound to a texture + if self._aloc_text: + #if so release it + self._aloc_text.release() + if not self._aloc_text.isBound(): + self._texts.remove(self._aloc_text) + self._aloc_text = None + + #Adjust our font + self._font.SetPointSize(self._font_size) + + #Search for existing element in our global buffer + for element in self._texts: + if element.text == self._text and\ + element.font == self._font and\ + element.foreground == self._foreground and\ + element.centered == self._centered: + # We already exist in global buffer ;-) + element.bind() + self._aloc_text = element + break + + if not self._aloc_text: + # We are not in the global buffer, let's create ourselves + aloc_text = self._aloc_text = TextElement(self._text, + self._font, + self._foreground, + self._centered) + aloc_text.bind() + self._texts.append(aloc_text) + + def __del__(self): + """ + Destructor + """ + aloc_text = self._aloc_text + aloc_text.release() + if not aloc_text.isBound(): + self._texts.remove(aloc_text) + + #---Functions + + def draw_text(self, position = wx.Point(0,0), scale = 1.0, rotation = 0): + """ + position (wx.Point) - x/y Position to draw in scene + scale (float) - Scale + rotation (int) - Rotation in degree + + Draws the text to the scene + """ + + self._aloc_text.draw_text(position, scale, rotation) + + #---Setter/Getter + + def getText(self): return self._text + def setText(self, value, reinit = True): + """ + value (bool) - New Text + reinit (bool) - Create a new texture + + Sets a new text + """ + self._text = value + if reinit: + self._initText() + + def getFont(self): return self._font + def setFont(self, value, reinit = True): + """ + value (bool) - New Font + reinit (bool) - Create a new texture + + Sets a new font + """ + self._font = value + if reinit: + self._initText() + + def getFont_size(self): return self._font_size + def setFont_size(self, value, reinit = True): + """ + value (bool) - New font size + reinit (bool) - Create a new texture + + Sets a new font size + """ + self._font_size = value + if reinit: + self._initText() + + def getForeground(self): return self._foreground + def setForeground(self, value, reinit = True): + """ + value (bool) - New centered value + reinit (bool) - Create a new texture + + Sets a new value for 'centered' + """ + self._foreground = value + if reinit: + self._initText() + + def getCentered(self): return self._centered + def setCentered(self, value, reinit = True): + """ + value (bool) - New centered value + reinit (bool) - Create a new texture + + Sets a new value for 'centered' + """ + self._centered = value + if reinit: + self._initText() + + def get_size(self): + """ + Returns a text size tuple + """ + return self._aloc_text._text_size + + def getTexture_size(self): + """ + Returns a texture size tuple + """ + return self._aloc_text.texture_size + + def getTextElement(self): + """ + Returns the text element bound to the Text class + """ + return self._aloc_text + + def getTexture(self): + """ + Returns the texture of the bound TextElement + """ + return self._aloc_text.texture + + + #---Properties + + text = property(getText, setText, None, "Text of the object") + font = property(getFont, setFont, None, "Font of the object") + font_size = property(getFont_size, setFont_size, None, "Font size") + foreground = property(getForeground, setForeground, None, "Color/Overlay bitmap of the text") + centered = property(getCentered, setCentered, None, "Display the text centered") + texture_size = property(getTexture_size, None, None, "Size of the used texture") + texture = property(getTexture, None, None, "Texture of bound TextElement") + text_element = property(getTextElement,None , None, "TextElement bound to this class") + +#Optimize critical functions +if psyco and not psyco_optimized: + psyco.bind(TextElement.createTexture) + psyco_optimized = True diff --git a/gr-wxgui/src/python/plotter/grid_plotter_base.py b/gr-wxgui/src/python/plotter/grid_plotter_base.py new file mode 100644 index 00000000..39bed181 --- /dev/null +++ b/gr-wxgui/src/python/plotter/grid_plotter_base.py @@ -0,0 +1,402 @@ +# +# 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. +# + +import wx +import wx.glcanvas +from OpenGL import GL +import common +from plotter_base import plotter_base +import gltext +import math + +GRID_LINE_COLOR_SPEC = (.7, .7, .7) #gray +GRID_BORDER_COLOR_SPEC = (0, 0, 0) #black +TICK_TEXT_FONT_SIZE = 9 +TITLE_TEXT_FONT_SIZE = 13 +UNITS_TEXT_FONT_SIZE = 9 +AXIS_LABEL_PADDING = 5 +TICK_LABEL_PADDING = 5 +TITLE_LABEL_PADDING = 7 +POINT_LABEL_FONT_SIZE = 8 +POINT_LABEL_COLOR_SPEC = (1, 1, .5) +POINT_LABEL_PADDING = 3 +GRID_LINE_DASH_LEN = 4 + +################################################## +# Grid Plotter Base Class +################################################## +class grid_plotter_base(plotter_base): + + def __init__(self, parent, min_padding=(0, 0, 0, 0)): + plotter_base.__init__(self, parent) + #setup grid cache + self._grid_cache = self.new_gl_cache(self._draw_grid, 25) + self.enable_grid_lines(True) + #setup padding + self.padding_top_min, self.padding_right_min, self.padding_bottom_min, self.padding_left_min = min_padding + #store title and unit strings + self.set_title('Title') + self.set_x_label('X Label') + self.set_y_label('Y Label') + #init the grid to some value + self.set_x_grid(-1, 1, 1) + self.set_y_grid(-1, 1, 1) + #setup point label cache + self._point_label_cache = self.new_gl_cache(self._draw_point_label, 75) + self.enable_point_label(False) + self.enable_grid_aspect_ratio(False) + self.set_point_label_coordinate(None) + common.point_label_thread(self) + #init grid plotter + self.register_init(self._init_grid_plotter) + + def _init_grid_plotter(self): + """ + Run gl initialization tasks. + """ + GL.glEnableClientState(GL.GL_VERTEX_ARRAY) + + def set_point_label_coordinate(self, coor): + """ + Set the point label coordinate. + @param coor the coordinate x, y tuple or None + """ + self.lock() + self._point_label_coordinate = coor + self._point_label_cache.changed(True) + self.update() + self.unlock() + + def enable_grid_aspect_ratio(self, enable=None): + """ + Enable/disable the grid aspect ratio. + If enabled, enforce the aspect ratio on the padding: + horizontal_padding:vertical_padding == width:height + @param enable true to enable + @return the enable state when None + """ + if enable is None: return self._enable_grid_aspect_ratio + self.lock() + self._enable_grid_aspect_ratio = enable + for cache in self._gl_caches: cache.changed(True) + self.unlock() + + def enable_point_label(self, enable=None): + """ + Enable/disable the point label. + @param enable true to enable + @return the enable state when None + """ + if enable is None: return self._enable_point_label + self.lock() + self._enable_point_label = enable + self._point_label_cache.changed(True) + self.unlock() + + def set_title(self, title): + """ + Set the title. + @param title the title string + """ + self.lock() + self.title = title + self._grid_cache.changed(True) + self.unlock() + + def set_x_label(self, x_label, x_units=''): + """ + Set the x label and units. + @param x_label the x label string + @param x_units the x units string + """ + self.lock() + self.x_label = x_label + self.x_units = x_units + self._grid_cache.changed(True) + self.unlock() + + def set_y_label(self, y_label, y_units=''): + """ + Set the y label and units. + @param y_label the y label string + @param y_units the y units string + """ + self.lock() + self.y_label = y_label + self.y_units = y_units + self._grid_cache.changed(True) + self.unlock() + + def set_x_grid(self, minimum, maximum, step, scale=False): + """ + Set the x grid parameters. + @param minimum the left-most value + @param maximum the right-most value + @param step the grid spacing + @param scale true to scale the x grid + """ + self.lock() + self.x_min = float(minimum) + self.x_max = float(maximum) + self.x_step = float(step) + if scale: + coeff, exp, prefix = common.get_si_components(max(abs(self.x_min), abs(self.x_max))) + self.x_scalar = 10**(-exp) + self.x_prefix = prefix + else: + self.x_scalar = 1.0 + self.x_prefix = '' + for cache in self._gl_caches: cache.changed(True) + self.unlock() + + def set_y_grid(self, minimum, maximum, step, scale=False): + """ + Set the y grid parameters. + @param minimum the bottom-most value + @param maximum the top-most value + @param step the grid spacing + @param scale true to scale the y grid + """ + self.lock() + self.y_min = float(minimum) + self.y_max = float(maximum) + self.y_step = float(step) + if scale: + coeff, exp, prefix = common.get_si_components(max(abs(self.y_min), abs(self.y_max))) + self.y_scalar = 10**(-exp) + self.y_prefix = prefix + else: + self.y_scalar = 1.0 + self.y_prefix = '' + for cache in self._gl_caches: cache.changed(True) + self.unlock() + + def _draw_grid(self): + """ + Create the x, y, tick, and title labels. + Resize the padding for the labels. + Draw the border, grid, title, and labels. + """ + ################################################## + # Create GL text labels + ################################################## + #create x tick labels + x_tick_labels = [(tick, self._get_tick_label(tick, self.x_units)) + for tick in self._get_ticks(self.x_min, self.x_max, self.x_step, self.x_scalar)] + #create x tick labels + y_tick_labels = [(tick, self._get_tick_label(tick, self.y_units)) + for tick in self._get_ticks(self.y_min, self.y_max, self.y_step, self.y_scalar)] + #create x label + x_label_str = self.x_units and "%s (%s%s)"%(self.x_label, self.x_prefix, self.x_units) or self.x_label + x_label = gltext.Text(x_label_str, bold=True, font_size=UNITS_TEXT_FONT_SIZE, centered=True) + #create y label + y_label_str = self.y_units and "%s (%s%s)"%(self.y_label, self.y_prefix, self.y_units) or self.y_label + y_label = gltext.Text(y_label_str, bold=True, font_size=UNITS_TEXT_FONT_SIZE, centered=True) + #create title + title_label = gltext.Text(self.title, bold=True, font_size=TITLE_TEXT_FONT_SIZE, centered=True) + ################################################## + # Resize the padding + ################################################## + self.padding_top = max(2*TITLE_LABEL_PADDING + title_label.get_size()[1], self.padding_top_min) + self.padding_right = max(2*TICK_LABEL_PADDING, self.padding_right_min) + self.padding_bottom = max(2*AXIS_LABEL_PADDING + TICK_LABEL_PADDING + x_label.get_size()[1] + max([label.get_size()[1] for tick, label in x_tick_labels]), self.padding_bottom_min) + self.padding_left = max(2*AXIS_LABEL_PADDING + TICK_LABEL_PADDING + y_label.get_size()[1] + max([label.get_size()[0] for tick, label in y_tick_labels]), self.padding_left_min) + #enforce padding aspect ratio if enabled + if self.enable_grid_aspect_ratio(): + w_over_h_ratio = float(self.width)/float(self.height) + horizontal_padding = float(self.padding_right + self.padding_left) + veritical_padding = float(self.padding_top + self.padding_bottom) + if w_over_h_ratio > horizontal_padding/veritical_padding: + #increase the horizontal padding + new_padding = veritical_padding*w_over_h_ratio - horizontal_padding + #distribute the padding to left and right + self.padding_left += int(round(new_padding/2)) + self.padding_right += int(round(new_padding/2)) + else: + #increase the vertical padding + new_padding = horizontal_padding/w_over_h_ratio - veritical_padding + #distribute the padding to top and bottom + self.padding_top += int(round(new_padding/2)) + self.padding_bottom += int(round(new_padding/2)) + ################################################## + # Draw Grid X + ################################################## + for tick, label in x_tick_labels: + scaled_tick = (self.width-self.padding_left-self.padding_right)*\ + (tick/self.x_scalar-self.x_min)/(self.x_max-self.x_min) + self.padding_left + self._draw_grid_line( + (scaled_tick, self.padding_top), + (scaled_tick, self.height-self.padding_bottom), + ) + w, h = label.get_size() + label.draw_text(wx.Point(scaled_tick-w/2, self.height-self.padding_bottom+TICK_LABEL_PADDING)) + ################################################## + # Draw Grid Y + ################################################## + for tick, label in y_tick_labels: + scaled_tick = (self.height-self.padding_top-self.padding_bottom)*\ + (1 - (tick/self.y_scalar-self.y_min)/(self.y_max-self.y_min)) + self.padding_top + self._draw_grid_line( + (self.padding_left, scaled_tick), + (self.width-self.padding_right, scaled_tick), + ) + w, h = label.get_size() + label.draw_text(wx.Point(self.padding_left-w-TICK_LABEL_PADDING, scaled_tick-h/2)) + ################################################## + # Draw Border + ################################################## + GL.glColor3f(*GRID_BORDER_COLOR_SPEC) + self._draw_rect( + self.padding_left, + self.padding_top, + self.width - self.padding_right - self.padding_left, + self.height - self.padding_top - self.padding_bottom, + fill=False, + ) + ################################################## + # Draw Labels + ################################################## + #draw title label + title_label.draw_text(wx.Point(self.width/2.0, TITLE_LABEL_PADDING + title_label.get_size()[1]/2)) + #draw x labels + x_label.draw_text(wx.Point( + (self.width-self.padding_left-self.padding_right)/2.0 + self.padding_left, + self.height-(AXIS_LABEL_PADDING + x_label.get_size()[1]/2), + ) + ) + #draw y labels + y_label.draw_text(wx.Point( + AXIS_LABEL_PADDING + y_label.get_size()[1]/2, + (self.height-self.padding_top-self.padding_bottom)/2.0 + self.padding_top, + ), rotation=90, + ) + + def _get_tick_label(self, tick, unit): + """ + Format the tick value and create a gl text. + @param tick the floating point tick value + @param unit the axis unit + @return the tick label text + """ + if unit: tick_str = common.sci_format(tick) + else: tick_str = common.eng_format(tick) + return gltext.Text(tick_str, font_size=TICK_TEXT_FONT_SIZE) + + def _get_ticks(self, min, max, step, scalar): + """ + Determine the positions for the ticks. + @param min the lower bound + @param max the upper bound + @param step the grid spacing + @param scalar the grid scaling + @return a list of tick positions between min and max + """ + #cast to float + min = float(min) + max = float(max) + step = float(step) + #check for valid numbers + try: + assert step > 0 + assert max > min + assert max - min > step + except AssertionError: return [-1, 1] + #determine the start and stop value + start = int(math.ceil(min/step)) + stop = int(math.floor(max/step)) + return [i*step*scalar for i in range(start, stop+1)] + + def enable_grid_lines(self, enable=None): + """ + Enable/disable the grid lines. + @param enable true to enable + @return the enable state when None + """ + if enable is None: return self._enable_grid_lines + self.lock() + self._enable_grid_lines = enable + self._grid_cache.changed(True) + self.unlock() + + def _draw_grid_line(self, coor1, coor2): + """ + Draw a dashed line from coor1 to coor2. + @param corr1 a tuple of x, y + @param corr2 a tuple of x, y + """ + if not self.enable_grid_lines(): return + length = math.sqrt((coor1[0] - coor2[0])**2 + (coor1[1] - coor2[1])**2) + num_points = int(length/GRID_LINE_DASH_LEN) + #calculate points array + points = [( + coor1[0] + i*(coor2[0]-coor1[0])/(num_points - 1), + coor1[1] + i*(coor2[1]-coor1[1])/(num_points - 1) + ) for i in range(num_points)] + #set color and draw + GL.glColor3f(*GRID_LINE_COLOR_SPEC) + GL.glVertexPointerf(points) + GL.glDrawArrays(GL.GL_LINES, 0, len(points)) + + def _draw_rect(self, x, y, width, height, fill=True): + """ + Draw a rectangle on the x, y plane. + X and Y are the top-left corner. + @param x the left position of the rectangle + @param y the top position of the rectangle + @param width the width of the rectangle + @param height the height of the rectangle + @param fill true to color inside of rectangle + """ + GL.glBegin(fill and GL.GL_QUADS or GL.GL_LINE_LOOP) + GL.glVertex2f(x, y) + GL.glVertex2f(x+width, y) + GL.glVertex2f(x+width, y+height) + GL.glVertex2f(x, y+height) + GL.glEnd() + + def _draw_point_label(self): + """ + Draw the point label for the last mouse motion coordinate. + The mouse coordinate must be an X, Y tuple. + The label will be drawn at the X, Y coordinate. + The values of the X, Y coordinate will be scaled to the current X, Y bounds. + """ + if not self.enable_point_label(): return + if not self._point_label_coordinate: return + x, y = self._point_label_coordinate + if x < self.padding_left or x > self.width-self.padding_right: return + if y < self.padding_top or y > self.height-self.padding_bottom: return + #scale to window bounds + x_win_scalar = float(x - self.padding_left)/(self.width-self.padding_left-self.padding_right) + y_win_scalar = float((self.height - y) - self.padding_bottom)/(self.height-self.padding_top-self.padding_bottom) + #scale to grid bounds + x_val = x_win_scalar*(self.x_max-self.x_min) + self.x_min + y_val = y_win_scalar*(self.y_max-self.y_min) + self.y_min + #create text + label_str = self._populate_point_label(x_val, y_val) + if not label_str: return + txt = gltext.Text(label_str, font_size=POINT_LABEL_FONT_SIZE) + w, h = txt.get_size() + #draw rect + text + GL.glColor3f(*POINT_LABEL_COLOR_SPEC) + if x > self.width/2: x -= w+2*POINT_LABEL_PADDING + self._draw_rect(x, y-h-2*POINT_LABEL_PADDING, w+2*POINT_LABEL_PADDING, h+2*POINT_LABEL_PADDING) + txt.draw_text(wx.Point(x+POINT_LABEL_PADDING, y-h-POINT_LABEL_PADDING)) diff --git a/gr-wxgui/src/python/plotter/plotter_base.py b/gr-wxgui/src/python/plotter/plotter_base.py new file mode 100644 index 00000000..dede5a0a --- /dev/null +++ b/gr-wxgui/src/python/plotter/plotter_base.py @@ -0,0 +1,172 @@ +# +# Copyright 2008, 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. +# + +import wx +import wx.glcanvas +from OpenGL import GL +import common + +BACKGROUND_COLOR_SPEC = (1, 0.976, 1, 1) #creamy white + +################################################## +# GL caching interface +################################################## +class gl_cache(object): + """ + Cache a set of gl drawing routines in a compiled list. + """ + + def __init__(self, draw): + """ + Create a new cache. + @param draw a function to draw gl stuff + """ + self.changed(True) + self._draw = draw + + def init(self): + """ + To be called when gl initializes. + Create a new compiled list. + """ + self._grid_compiled_list_id = GL.glGenLists(1) + + def draw(self): + """ + Draw the gl stuff using a compiled list. + If changed, reload the compiled list. + """ + if self.changed(): + GL.glNewList(self._grid_compiled_list_id, GL.GL_COMPILE) + self._draw() + GL.glEndList() + self.changed(False) + #draw the grid + GL.glCallList(self._grid_compiled_list_id) + + def changed(self, state=None): + """ + Set the changed flag if state is not None. + Otherwise return the changed flag. + """ + if state is None: return self._changed + self._changed = state + +################################################## +# OpenGL WX Plotter Canvas +################################################## +class plotter_base(wx.glcanvas.GLCanvas, common.mutex): + """ + Plotter base class for all plot types. + """ + + def __init__(self, parent): + """ + Create a new plotter base. + Initialize the GLCanvas with double buffering. + Initialize various plotter flags. + Bind the paint and size events. + @param parent the parent widgit + """ + attribList = (wx.glcanvas.WX_GL_DOUBLEBUFFER, wx.glcanvas.WX_GL_RGBA) + wx.glcanvas.GLCanvas.__init__(self, parent, attribList=attribList) + self._gl_init_flag = False + self._resized_flag = True + self._init_fcns = list() + self._draw_fcns = list() + self._gl_caches = list() + self.Bind(wx.EVT_PAINT, self._on_paint) + self.Bind(wx.EVT_SIZE, self._on_size) + self.Bind(wx.EVT_ERASE_BACKGROUND, lambda e: None) + + def new_gl_cache(self, draw_fcn, draw_pri=50): + """ + Create a new gl cache. + Register its draw and init function. + @return the new cache object + """ + cache = gl_cache(draw_fcn) + self.register_init(cache.init) + self.register_draw(cache.draw, draw_pri) + self._gl_caches.append(cache) + return cache + + def register_init(self, init_fcn): + self._init_fcns.append(init_fcn) + + def register_draw(self, draw_fcn, draw_pri=50): + """ + Register a draw function with a layer priority. + Large pri values are drawn last. + Small pri values are drawn first. + """ + for i in range(len(self._draw_fcns)): + if draw_pri < self._draw_fcns[i][0]: + self._draw_fcns.insert(i, (draw_pri, draw_fcn)) + return + self._draw_fcns.append((draw_pri, draw_fcn)) + + def _on_size(self, event): + """ + Flag the resize event. + The paint event will handle the actual resizing. + """ + self.lock() + self._resized_flag = True + self.unlock() + + def _on_paint(self, event): + """ + Respond to paint events. + Initialize GL if this is the first paint event. + Resize the view port if the width or height changed. + Redraw the screen, calling the draw functions. + """ + self.lock() + self.SetCurrent() + #check if gl was initialized + if not self._gl_init_flag: + GL.glClearColor(*BACKGROUND_COLOR_SPEC) + for fcn in self._init_fcns: fcn() + self._gl_init_flag = True + #check for a change in window size + if self._resized_flag: + self.width, self.height = self.GetSize() + GL.glMatrixMode(GL.GL_PROJECTION) + GL.glLoadIdentity() + GL.glOrtho(0, self.width, self.height, 0, 1, 0) + GL.glMatrixMode(GL.GL_MODELVIEW) + GL.glLoadIdentity() + GL.glViewport(0, 0, self.width, self.height) + for cache in self._gl_caches: cache.changed(True) + self._resized_flag = False + #clear, draw functions, swap + GL.glClear(GL.GL_COLOR_BUFFER_BIT) + for fcn in self._draw_fcns: fcn[1]() + self.SwapBuffers() + self.unlock() + + def update(self): + """ + Force a paint event. + """ + if not self._gl_init_flag: return + wx.PostEvent(self, wx.PaintEvent()) diff --git a/gr-wxgui/src/python/plotter/waterfall_plotter.py b/gr-wxgui/src/python/plotter/waterfall_plotter.py new file mode 100644 index 00000000..2e066996 --- /dev/null +++ b/gr-wxgui/src/python/plotter/waterfall_plotter.py @@ -0,0 +1,267 @@ +# +# Copyright 2008, 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. +# + +import wx +from grid_plotter_base import grid_plotter_base +from OpenGL import GL +import common +import numpy +import gltext +import math + +LEGEND_LEFT_PAD = 7 +LEGEND_NUM_BLOCKS = 256 +LEGEND_NUM_LABELS = 9 +LEGEND_WIDTH = 8 +LEGEND_FONT_SIZE = 8 +LEGEND_BORDER_COLOR_SPEC = (0, 0, 0) #black +MIN_PADDING = 0, 60, 0, 0 #top, right, bottom, left + +ceil_log2 = lambda x: 2**int(math.ceil(math.log(x)/math.log(2))) + +def _get_rbga(red_pts, green_pts, blue_pts, alpha_pts=[(0, 0), (1, 0)]): + """ + Get an array of 256 rgba values where each index maps to a color. + The scaling for red, green, blue, alpha are specified in piece-wise functions. + The piece-wise functions consist of a set of x, y coordinates. + The x and y values of the coordinates range from 0 to 1. + The coordinates must be specified so that x increases with the index value. + Resulting values are calculated along the line formed between 2 coordinates. + @param *_pts an array of x,y coordinates for each color element + @return array of rbga values (4 bytes) each + """ + def _fcn(x, pw): + for (x1, y1), (x2, y2) in zip(pw, pw[1:]): + #linear interpolation + if x <= x2: return float(y1 - y2)/(x1 - x2)*(x - x1) + y1 + raise Exception + return [numpy.array(map( + lambda pw: int(255*_fcn(i/255.0, pw)), + (red_pts, green_pts, blue_pts, alpha_pts), + ), numpy.uint8).tostring() for i in range(0, 256) + ] + +COLORS = { + 'rgb1': _get_rbga( #http://www.ks.uiuc.edu/Research/vmd/vmd-1.7.1/ug/img47.gif + red_pts = [(0, 0), (.5, 0), (1, 1)], + green_pts = [(0, 0), (.5, 1), (1, 0)], + blue_pts = [(0, 1), (.5, 0), (1, 0)], + ), + 'rgb2': _get_rbga( #http://xtide.ldeo.columbia.edu/~krahmann/coledit/screen.jpg + red_pts = [(0, 0), (3.0/8, 0), (5.0/8, 1), (7.0/8, 1), (1, .5)], + green_pts = [(0, 0), (1.0/8, 0), (3.0/8, 1), (5.0/8, 1), (7.0/8, 0), (1, 0)], + blue_pts = [(0, .5), (1.0/8, 1), (3.0/8, 1), (5.0/8, 0), (1, 0)], + ), + 'rgb3': _get_rbga( + red_pts = [(0, 0), (1.0/3.0, 0), (2.0/3.0, 0), (1, 1)], + green_pts = [(0, 0), (1.0/3.0, 0), (2.0/3.0, 1), (1, 0)], + blue_pts = [(0, 0), (1.0/3.0, 1), (2.0/3.0, 0), (1, 0)], + ), + 'gray': _get_rbga( + red_pts = [(0, 0), (1, 1)], + green_pts = [(0, 0), (1, 1)], + blue_pts = [(0, 0), (1, 1)], + ), +} + +################################################## +# Waterfall Plotter +################################################## +class waterfall_plotter(grid_plotter_base): + def __init__(self, parent): + """ + Create a new channel plotter. + """ + #init + grid_plotter_base.__init__(self, parent, MIN_PADDING) + #setup legend cache + self._legend_cache = self.new_gl_cache(self._draw_legend) + #setup waterfall cache + self._waterfall_cache = self.new_gl_cache(self._draw_waterfall, 50) + #setup waterfall plotter + self.register_init(self._init_waterfall) + self._resize_texture(False) + self._minimum = 0 + self._maximum = 0 + self._fft_size = 1 + self._buffer = list() + self._pointer = 0 + self._counter = 0 + self.set_num_lines(0) + self.set_color_mode(COLORS.keys()[0]) + + def _init_waterfall(self): + """ + Run gl initialization tasks. + """ + self._waterfall_texture = GL.glGenTextures(1) + + def _draw_waterfall(self): + """ + Draw the waterfall from the texture. + The texture is circularly filled and will wrap around. + Use matrix modeling to shift and scale the texture onto the coordinate plane. + """ + #resize texture + self._resize_texture() + #setup texture + GL.glBindTexture(GL.GL_TEXTURE_2D, self._waterfall_texture) + GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR) + GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR) + GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT) + GL.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE) + #write the buffer to the texture + while self._buffer: + GL.glTexSubImage2D(GL.GL_TEXTURE_2D, 0, 0, self._pointer, self._fft_size, 1, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, self._buffer.pop(0)) + self._pointer = (self._pointer + 1)%self._num_lines + #begin drawing + GL.glEnable(GL.GL_TEXTURE_2D) + GL.glPushMatrix() + #matrix scaling + GL.glTranslatef(self.padding_left, self.padding_top, 0) + GL.glScalef( + float(self.width-self.padding_left-self.padding_right), + float(self.height-self.padding_top-self.padding_bottom), + 1.0, + ) + #draw texture with wrapping + GL.glBegin(GL.GL_QUADS) + prop_y = float(self._pointer)/(self._num_lines-1) + prop_x = float(self._fft_size)/ceil_log2(self._fft_size) + off = 1.0/(self._num_lines-1) + GL.glTexCoord2f(0, prop_y+1-off) + GL.glVertex2f(0, 1) + GL.glTexCoord2f(prop_x, prop_y+1-off) + GL.glVertex2f(1, 1) + GL.glTexCoord2f(prop_x, prop_y) + GL.glVertex2f(1, 0) + GL.glTexCoord2f(0, prop_y) + GL.glVertex2f(0, 0) + GL.glEnd() + GL.glPopMatrix() + GL.glDisable(GL.GL_TEXTURE_2D) + + def _populate_point_label(self, x_val, y_val): + """ + Get the text the will populate the point label. + Give the X value for the current point. + @param x_val the current x value + @param y_val the current y value + @return a value string with units + """ + return '%s: %s'%(self.x_label, common.eng_format(x_val, self.x_units)) + + def _draw_legend(self): + """ + Draw the color scale legend. + """ + if not self._color_mode: return + legend_height = self.height-self.padding_top-self.padding_bottom + #draw each legend block + block_height = float(legend_height)/LEGEND_NUM_BLOCKS + x = self.width - self.padding_right + LEGEND_LEFT_PAD + for i in range(LEGEND_NUM_BLOCKS): + color = COLORS[self._color_mode][int(255*i/float(LEGEND_NUM_BLOCKS-1))] + GL.glColor4f(*map(lambda c: ord(c)/255.0, color)) + y = self.height - (i+1)*block_height - self.padding_bottom + self._draw_rect(x, y, LEGEND_WIDTH, block_height) + #draw rectangle around color scale border + GL.glColor3f(*LEGEND_BORDER_COLOR_SPEC) + self._draw_rect(x, self.padding_top, LEGEND_WIDTH, legend_height, fill=False) + #draw each legend label + label_spacing = float(legend_height)/(LEGEND_NUM_LABELS-1) + x = self.width - (self.padding_right - LEGEND_LEFT_PAD - LEGEND_WIDTH)/2 + for i in range(LEGEND_NUM_LABELS): + proportion = i/float(LEGEND_NUM_LABELS-1) + dB = proportion*(self._maximum - self._minimum) + self._minimum + y = self.height - i*label_spacing - self.padding_bottom + txt = gltext.Text('%ddB'%int(dB), font_size=LEGEND_FONT_SIZE, centered=True) + txt.draw_text(wx.Point(x, y)) + + def _resize_texture(self, flag=None): + """ + Create the texture to fit the fft_size X num_lines. + @param flag the set/unset or update flag + """ + if flag is not None: + self._resize_texture_flag = flag + return + if not self._resize_texture_flag: return + self._buffer = list() + self._pointer = 0 + if self._num_lines and self._fft_size: + GL.glBindTexture(GL.GL_TEXTURE_2D, self._waterfall_texture) + data = numpy.zeros(self._num_lines*self._fft_size*4, numpy.uint8).tostring() + GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, ceil_log2(self._fft_size), self._num_lines, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, data) + self._resize_texture_flag = False + + def set_color_mode(self, color_mode): + """ + Set the color mode. + New samples will be converted to the new color mode. + Old samples will not be recolorized. + @param color_mode the new color mode string + """ + self.lock() + if color_mode in COLORS.keys(): + self._color_mode = color_mode + self._legend_cache.changed(True) + self.update() + self.unlock() + + def set_num_lines(self, num_lines): + """ + Set number of lines. + Powers of two only. + @param num_lines the new number of lines + """ + self.lock() + self._num_lines = num_lines + self._resize_texture(True) + self.update() + self.unlock() + + def set_samples(self, samples, minimum, maximum): + """ + Set the samples to the waterfall. + Convert the samples to color data. + @param samples the array of floats + @param minimum the minimum value to scale + @param maximum the maximum value to scale + """ + self.lock() + #set the min, max values + if self._minimum != minimum or self._maximum != maximum: + self._minimum = minimum + self._maximum = maximum + self._legend_cache.changed(True) + if self._fft_size != len(samples): + self._fft_size = len(samples) + self._resize_texture(True) + #normalize the samples to min/max + samples = (samples - minimum)*float(255/(maximum-minimum)) + samples = numpy.clip(samples, 0, 255) #clip + samples = numpy.array(samples, numpy.uint8) + #convert the samples to RGBA data + data = numpy.choose(samples, COLORS[self._color_mode]).tostring() + self._buffer.append(data) + self._waterfall_cache.changed(True) + self.unlock() diff --git a/gr-wxgui/src/python/powermate.py b/gr-wxgui/src/python/powermate.py old mode 100755 new mode 100644 diff --git a/gr-wxgui/src/python/pubsub.py b/gr-wxgui/src/python/pubsub.py new file mode 100644 index 00000000..e55d6919 --- /dev/null +++ b/gr-wxgui/src/python/pubsub.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python +# +# Copyright 2008 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. +# + +""" +Abstract GNU Radio publisher/subscriber interface + +This is a proof of concept implementation, will likely change significantly. +""" + +class pubsub(dict): + def __init__(self): + self._publishers = { } + self._subscribers = { } + self._proxies = { } + + def __missing__(self, key, value=None): + dict.__setitem__(self, key, value) + self._publishers[key] = None + self._subscribers[key] = [] + self._proxies[key] = None + + def __setitem__(self, key, val): + if not self.has_key(key): + self.__missing__(key, val) + elif self._proxies[key] is not None: + (p, pkey) = self._proxies[key] + p[pkey] = val + else: + dict.__setitem__(self, key, val) + for sub in self._subscribers[key]: + # Note this means subscribers will get called in the thread + # context of the 'set' caller. + sub(val) + + def __getitem__(self, key): + if not self.has_key(key): self.__missing__(key) + if self._proxies[key] is not None: + (p, pkey) = self._proxies[key] + return p[pkey] + elif self._publishers[key] is not None: + return self._publishers[key]() + else: + return dict.__getitem__(self, key) + + def publish(self, key, publisher): + if not self.has_key(key): self.__missing__(key) + if self._proxies[key] is not None: + (p, pkey) = self._proxies[key] + p.publish(pkey, publisher) + else: + self._publishers[key] = publisher + + def subscribe(self, key, subscriber): + if not self.has_key(key): self.__missing__(key) + if self._proxies[key] is not None: + (p, pkey) = self._proxies[key] + p.subscribe(pkey, subscriber) + else: + self._subscribers[key].append(subscriber) + + def unpublish(self, key): + if self._proxies[key] is not None: + (p, pkey) = self._proxies[key] + p.unpublish(pkey) + else: + self._publishers[key] = None + + def unsubscribe(self, key, subscriber): + if self._proxies[key] is not None: + (p, pkey) = self._proxies[key] + p.unsubscribe(pkey, subscriber) + else: + self._subscribers[key].remove(subscriber) + + def proxy(self, key, p, pkey=None): + if not self.has_key(key): self.__missing__(key) + if pkey is None: pkey = key + self._proxies[key] = (p, pkey) + + def unproxy(self, key): + self._proxies[key] = None + +# Test code +if __name__ == "__main__": + import sys + o = pubsub() + + # Non-existent key gets auto-created with None value + print "Auto-created key 'foo' value:", o['foo'] + + # Add some subscribers + # First is a bare function + def print_len(x): + print "len=%i" % (len(x), ) + o.subscribe('foo', print_len) + + # The second is a class member function + class subber(object): + def __init__(self, param): + self._param = param + def printer(self, x): + print self._param, `x` + s = subber('param') + o.subscribe('foo', s.printer) + + # The third is a lambda function + o.subscribe('foo', lambda x: sys.stdout.write('val='+`x`+'\n')) + + # Update key 'foo', will notify subscribers + print "Updating 'foo' with three subscribers:" + o['foo'] = 'bar'; + + # Remove first subscriber + o.unsubscribe('foo', print_len) + + # Update now will only trigger second and third subscriber + print "Updating 'foo' after removing a subscriber:" + o['foo'] = 'bar2'; + + # Publish a key as a function, in this case, a lambda function + o.publish('baz', lambda : 42) + print "Published value of 'baz':", o['baz'] + + # Unpublish the key + o.unpublish('baz') + + # This will return None, as there is no publisher + print "Value of 'baz' with no publisher:", o['baz'] + + # Set 'baz' key, it gets cached + o['baz'] = 'bazzz' + + # Now will return cached value, since no provider + print "Cached value of 'baz' after being set:", o['baz'] diff --git a/gr-wxgui/src/python/scope_window.py b/gr-wxgui/src/python/scope_window.py new file mode 100644 index 00000000..44904640 --- /dev/null +++ b/gr-wxgui/src/python/scope_window.py @@ -0,0 +1,617 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import plotter +import common +import wx +import numpy +import time +import pubsub +from constants import * +from gnuradio import gr #for gr.prefs, trigger modes +import forms + +################################################## +# Constants +################################################## +DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'scope_rate', 30) +DEFAULT_WIN_SIZE = (600, 300) +COUPLING_MODES = ( + ('DC', False), + ('AC', True), +) +TRIGGER_MODES = ( + ('Freerun', gr.gr_TRIG_MODE_FREE), + ('Auto', gr.gr_TRIG_MODE_AUTO), + ('Normal', gr.gr_TRIG_MODE_NORM), +) +TRIGGER_SLOPES = ( + ('Pos +', gr.gr_TRIG_SLOPE_POS), + ('Neg -', gr.gr_TRIG_SLOPE_NEG), +) +CHANNEL_COLOR_SPECS = ( + (0.3, 0.3, 1.0), + (0.0, 0.8, 0.0), + (1.0, 0.0, 0.0), + (0.8, 0.0, 0.8), +) +TRIGGER_COLOR_SPEC = (1.0, 0.4, 0.0) +AUTORANGE_UPDATE_RATE = 0.5 #sec +MARKER_TYPES = ( + ('Line Link', None), + ('Dot Large', 3.0), + ('Dot Med', 2.0), + ('Dot Small', 1.0), + ('None', 0.0), +) +DEFAULT_MARKER_TYPE = None + +################################################## +# Scope window control panel +################################################## +class control_panel(wx.Panel): + """ + A control panel with wx widgits to control the plotter and scope block. + """ + def __init__(self, parent): + """ + Create a new control panel. + @param parent the wx parent window + """ + WIDTH = 90 + self.parent = parent + wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER) + control_box = wx.BoxSizer(wx.VERTICAL) + ################################################## + # Axes Options + ################################################## + control_box.AddStretchSpacer() + axes_options_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Axes Options', + bold=True, orient=wx.VERTICAL, + ) + ################################################## + # Scope Mode Box + ################################################## + scope_mode_box = wx.BoxSizer(wx.VERTICAL) + axes_options_box.Add(scope_mode_box, 0, wx.EXPAND) + #x axis divs + forms.incr_decr_buttons( + parent=self, sizer=scope_mode_box, label='Secs/Div', + on_incr=self._on_incr_t_divs, on_decr=self._on_decr_t_divs, + ) + #y axis divs + y_buttons_scope = forms.incr_decr_buttons( + parent=self, sizer=scope_mode_box, label='Counts/Div', + on_incr=self._on_incr_y_divs, on_decr=self._on_decr_y_divs, + ) + #y axis ref lvl + y_off_buttons_scope = forms.incr_decr_buttons( + parent=self, sizer=scope_mode_box, label='Y Offset', + on_incr=self._on_incr_y_off, on_decr=self._on_decr_y_off, + ) + #t axis ref lvl + scope_mode_box.AddSpacer(5) + forms.slider( + parent=self, sizer=scope_mode_box, + ps=parent, key=T_FRAC_OFF_KEY, label='T Offset', + minimum=0, maximum=1, num_steps=1000, + ) + scope_mode_box.AddSpacer(5) + ################################################## + # XY Mode Box + ################################################## + xy_mode_box = wx.BoxSizer(wx.VERTICAL) + axes_options_box.Add(xy_mode_box, 0, wx.EXPAND) + #x div controls + x_buttons = forms.incr_decr_buttons( + parent=self, sizer=xy_mode_box, label='X/Div', + on_incr=self._on_incr_x_divs, on_decr=self._on_decr_x_divs, + ) + #y div controls + y_buttons = forms.incr_decr_buttons( + parent=self, sizer=xy_mode_box, label='Y/Div', + on_incr=self._on_incr_y_divs, on_decr=self._on_decr_y_divs, + ) + #x offset controls + x_off_buttons = forms.incr_decr_buttons( + parent=self, sizer=xy_mode_box, label='X Off', + on_incr=self._on_incr_x_off, on_decr=self._on_decr_x_off, + ) + #y offset controls + y_off_buttons = forms.incr_decr_buttons( + parent=self, sizer=xy_mode_box, label='Y Off', + on_incr=self._on_incr_y_off, on_decr=self._on_decr_y_off, + ) + for widget in (y_buttons_scope, y_off_buttons_scope, x_buttons, y_buttons, x_off_buttons, y_off_buttons): + parent.subscribe(AUTORANGE_KEY, widget.Disable) + widget.Disable(parent[AUTORANGE_KEY]) + xy_mode_box.ShowItems(False) + #autorange check box + forms.check_box( + parent=self, sizer=axes_options_box, label='Autorange', + ps=parent, key=AUTORANGE_KEY, + ) + ################################################## + # Channel Options + ################################################## + TRIGGER_PAGE_INDEX = parent.num_inputs + XY_PAGE_INDEX = parent.num_inputs+1 + control_box.AddStretchSpacer() + chan_options_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Channel Options', + bold=True, orient=wx.VERTICAL, + ) + options_notebook = wx.Notebook(self) + options_notebook_args = list() + CHANNELS = [('Ch %d'%(i+1), i) for i in range(parent.num_inputs)] + ################################################## + # Channel Menu Boxes + ################################################## + for i in range(parent.num_inputs): + channel_menu_panel = wx.Panel(options_notebook) + options_notebook_args.append((channel_menu_panel, i, 'Ch%d'%(i+1))) + channel_menu_box = wx.BoxSizer(wx.VERTICAL) + channel_menu_panel.SetSizer(channel_menu_box) + #ac couple check box + channel_menu_box.AddStretchSpacer() + forms.drop_down( + parent=channel_menu_panel, sizer=channel_menu_box, + ps=parent, key=common.index_key(AC_COUPLE_KEY, i), + choices=map(lambda x: x[1], COUPLING_MODES), + labels=map(lambda x: x[0], COUPLING_MODES), + label='Coupling', width=WIDTH, + ) + #marker + channel_menu_box.AddStretchSpacer() + forms.drop_down( + parent=channel_menu_panel, sizer=channel_menu_box, + ps=parent, key=common.index_key(MARKER_KEY, i), + choices=map(lambda x: x[1], MARKER_TYPES), + labels=map(lambda x: x[0], MARKER_TYPES), + label='Marker', width=WIDTH, + ) + channel_menu_box.AddStretchSpacer() + ################################################## + # Trigger Menu Box + ################################################## + trigger_menu_panel = wx.Panel(options_notebook) + options_notebook_args.append((trigger_menu_panel, TRIGGER_PAGE_INDEX, 'Trig')) + trigger_menu_box = wx.BoxSizer(wx.VERTICAL) + trigger_menu_panel.SetSizer(trigger_menu_box) + #trigger mode + forms.drop_down( + parent=trigger_menu_panel, sizer=trigger_menu_box, + ps=parent, key=TRIGGER_MODE_KEY, + choices=map(lambda x: x[1], TRIGGER_MODES), + labels=map(lambda x: x[0], TRIGGER_MODES), + label='Mode', width=WIDTH, + ) + #trigger slope + trigger_slope_chooser = forms.drop_down( + parent=trigger_menu_panel, sizer=trigger_menu_box, + ps=parent, key=TRIGGER_SLOPE_KEY, + choices=map(lambda x: x[1], TRIGGER_SLOPES), + labels=map(lambda x: x[0], TRIGGER_SLOPES), + label='Slope', width=WIDTH, + ) + #trigger channel + trigger_channel_chooser = forms.drop_down( + parent=trigger_menu_panel, sizer=trigger_menu_box, + ps=parent, key=TRIGGER_CHANNEL_KEY, + choices=map(lambda x: x[1], CHANNELS), + labels=map(lambda x: x[0], CHANNELS), + label='Channel', width=WIDTH, + ) + #trigger level + hbox = wx.BoxSizer(wx.HORIZONTAL) + trigger_menu_box.Add(hbox, 0, wx.EXPAND) + hbox.Add(wx.StaticText(trigger_menu_panel, label='Level:'), 1, wx.ALIGN_CENTER_VERTICAL) + trigger_level_button = forms.single_button( + parent=trigger_menu_panel, sizer=hbox, label='50%', + callback=parent.set_auto_trigger_level, style=wx.BU_EXACTFIT, + ) + hbox.AddSpacer(WIDTH-60) + trigger_level_buttons = forms.incr_decr_buttons( + parent=trigger_menu_panel, sizer=hbox, + on_incr=self._on_incr_trigger_level, on_decr=self._on_decr_trigger_level, + ) + def disable_all(trigger_mode): + for widget in (trigger_slope_chooser, trigger_channel_chooser, trigger_level_buttons, trigger_level_button): + widget.Disable(trigger_mode == gr.gr_TRIG_MODE_FREE) + parent.subscribe(TRIGGER_MODE_KEY, disable_all) + disable_all(parent[TRIGGER_MODE_KEY]) + ################################################## + # XY Menu Box + ################################################## + if parent.num_inputs > 1: + xy_menu_panel = wx.Panel(options_notebook) + options_notebook_args.append((xy_menu_panel, XY_PAGE_INDEX, 'XY')) + xy_menu_box = wx.BoxSizer(wx.VERTICAL) + xy_menu_panel.SetSizer(xy_menu_box) + #x and y channel choosers + xy_menu_box.AddStretchSpacer() + forms.drop_down( + parent=xy_menu_panel, sizer=xy_menu_box, + ps=parent, key=X_CHANNEL_KEY, + choices=map(lambda x: x[1], CHANNELS), + labels=map(lambda x: x[0], CHANNELS), + label='Channel X', width=WIDTH, + ) + xy_menu_box.AddStretchSpacer() + forms.drop_down( + parent=xy_menu_panel, sizer=xy_menu_box, + ps=parent, key=Y_CHANNEL_KEY, + choices=map(lambda x: x[1], CHANNELS), + labels=map(lambda x: x[0], CHANNELS), + label='Channel Y', width=WIDTH, + ) + #marker + xy_menu_box.AddStretchSpacer() + forms.drop_down( + parent=xy_menu_panel, sizer=xy_menu_box, + ps=parent, key=XY_MARKER_KEY, + choices=map(lambda x: x[1], MARKER_TYPES), + labels=map(lambda x: x[0], MARKER_TYPES), + label='Marker', width=WIDTH, + ) + xy_menu_box.AddStretchSpacer() + ################################################## + # Setup Options Notebook + ################################################## + forms.notebook( + parent=self, sizer=chan_options_box, + notebook=options_notebook, + ps=parent, key=CHANNEL_OPTIONS_KEY, + pages=map(lambda x: x[0], options_notebook_args), + choices=map(lambda x: x[1], options_notebook_args), + labels=map(lambda x: x[2], options_notebook_args), + ) + #gui handling for channel options changing + def options_notebook_changed(chan_opt): + try: + parent[TRIGGER_SHOW_KEY] = chan_opt == TRIGGER_PAGE_INDEX + parent[XY_MODE_KEY] = chan_opt == XY_PAGE_INDEX + except wx.PyDeadObjectError: pass + parent.subscribe(CHANNEL_OPTIONS_KEY, options_notebook_changed) + #gui handling for xy mode changing + def xy_mode_changed(mode): + #ensure xy tab is selected + if mode and parent[CHANNEL_OPTIONS_KEY] != XY_PAGE_INDEX: + parent[CHANNEL_OPTIONS_KEY] = XY_PAGE_INDEX + #ensure xy tab is not selected + elif not mode and parent[CHANNEL_OPTIONS_KEY] == XY_PAGE_INDEX: + parent[CHANNEL_OPTIONS_KEY] = 0 + #show/hide control buttons + scope_mode_box.ShowItems(not mode) + xy_mode_box.ShowItems(mode) + control_box.Layout() + parent.subscribe(XY_MODE_KEY, xy_mode_changed) + xy_mode_changed(parent[XY_MODE_KEY]) + ################################################## + # Run/Stop Button + ################################################## + #run/stop + control_box.AddStretchSpacer() + forms.toggle_button( + sizer=control_box, parent=self, + true_label='Stop', false_label='Run', + ps=parent, key=RUNNING_KEY, + ) + #set sizer + self.SetSizerAndFit(control_box) + #mouse wheel event + def on_mouse_wheel(event): + if not parent[XY_MODE_KEY]: + if event.GetWheelRotation() < 0: self._on_incr_t_divs(event) + else: self._on_decr_t_divs(event) + parent.plotter.Bind(wx.EVT_MOUSEWHEEL, on_mouse_wheel) + + ################################################## + # Event handlers + ################################################## + #trigger level + def _on_incr_trigger_level(self, event): + self.parent[TRIGGER_LEVEL_KEY] += self.parent[Y_PER_DIV_KEY]/3. + def _on_decr_trigger_level(self, event): + self.parent[TRIGGER_LEVEL_KEY] -= self.parent[Y_PER_DIV_KEY]/3. + #incr/decr divs + def _on_incr_t_divs(self, event): + self.parent[T_PER_DIV_KEY] = common.get_clean_incr(self.parent[T_PER_DIV_KEY]) + def _on_decr_t_divs(self, event): + self.parent[T_PER_DIV_KEY] = common.get_clean_decr(self.parent[T_PER_DIV_KEY]) + def _on_incr_x_divs(self, event): + self.parent[X_PER_DIV_KEY] = common.get_clean_incr(self.parent[X_PER_DIV_KEY]) + def _on_decr_x_divs(self, event): + self.parent[X_PER_DIV_KEY] = common.get_clean_decr(self.parent[X_PER_DIV_KEY]) + def _on_incr_y_divs(self, event): + self.parent[Y_PER_DIV_KEY] = common.get_clean_incr(self.parent[Y_PER_DIV_KEY]) + def _on_decr_y_divs(self, event): + self.parent[Y_PER_DIV_KEY] = common.get_clean_decr(self.parent[Y_PER_DIV_KEY]) + #incr/decr offset + def _on_incr_x_off(self, event): + self.parent[X_OFF_KEY] = self.parent[X_OFF_KEY] + self.parent[X_PER_DIV_KEY] + def _on_decr_x_off(self, event): + self.parent[X_OFF_KEY] = self.parent[X_OFF_KEY] - self.parent[X_PER_DIV_KEY] + def _on_incr_y_off(self, event): + self.parent[Y_OFF_KEY] = self.parent[Y_OFF_KEY] + self.parent[Y_PER_DIV_KEY] + def _on_decr_y_off(self, event): + self.parent[Y_OFF_KEY] = self.parent[Y_OFF_KEY] - self.parent[Y_PER_DIV_KEY] + +################################################## +# Scope window with plotter and control panel +################################################## +class scope_window(wx.Panel, pubsub.pubsub): + def __init__( + self, + parent, + controller, + size, + title, + frame_rate, + num_inputs, + sample_rate_key, + t_scale, + v_scale, + xy_mode, + ac_couple_key, + trigger_level_key, + trigger_mode_key, + trigger_slope_key, + trigger_channel_key, + decimation_key, + msg_key, + ): + pubsub.pubsub.__init__(self) + #check num inputs + assert num_inputs <= len(CHANNEL_COLOR_SPECS) + #setup + self.sampleses = None + self.num_inputs = num_inputs + autorange = not v_scale + self.autorange_ts = 0 + v_scale = v_scale or 1 + self.frame_rate_ts = 0 + #proxy the keys + self.proxy(MSG_KEY, controller, msg_key) + self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key) + self.proxy(TRIGGER_LEVEL_KEY, controller, trigger_level_key) + self.proxy(TRIGGER_MODE_KEY, controller, trigger_mode_key) + self.proxy(TRIGGER_SLOPE_KEY, controller, trigger_slope_key) + self.proxy(TRIGGER_CHANNEL_KEY, controller, trigger_channel_key) + self.proxy(DECIMATION_KEY, controller, decimation_key) + #initialize values + self[RUNNING_KEY] = True + self[XY_MARKER_KEY] = 2.0 + self[CHANNEL_OPTIONS_KEY] = 0 + self[XY_MODE_KEY] = xy_mode + self[X_CHANNEL_KEY] = 0 + self[Y_CHANNEL_KEY] = self.num_inputs-1 + self[AUTORANGE_KEY] = autorange + self[T_PER_DIV_KEY] = t_scale + self[X_PER_DIV_KEY] = v_scale + self[Y_PER_DIV_KEY] = v_scale + self[T_OFF_KEY] = 0 + self[X_OFF_KEY] = 0 + self[Y_OFF_KEY] = 0 + self[T_DIVS_KEY] = 8 + self[X_DIVS_KEY] = 8 + self[Y_DIVS_KEY] = 8 + self[FRAME_RATE_KEY] = frame_rate + self[TRIGGER_LEVEL_KEY] = 0 + self[TRIGGER_CHANNEL_KEY] = 0 + self[TRIGGER_MODE_KEY] = gr.gr_TRIG_MODE_AUTO + self[TRIGGER_SLOPE_KEY] = gr.gr_TRIG_SLOPE_POS + self[T_FRAC_OFF_KEY] = 0.5 + for i in range(num_inputs): + self.proxy(common.index_key(AC_COUPLE_KEY, i), controller, common.index_key(ac_couple_key, i)) + #init panel and plot + wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER) + self.plotter = plotter.channel_plotter(self) + self.plotter.SetSize(wx.Size(*size)) + self.plotter.set_title(title) + self.plotter.enable_legend(True) + self.plotter.enable_point_label(True) + self.plotter.enable_grid_lines(True) + #setup the box with plot and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer(wx.HORIZONTAL) + main_box.Add(self.plotter, 1, wx.EXPAND) + main_box.Add(self.control_panel, 0, wx.EXPAND) + self.SetSizerAndFit(main_box) + #register events for message + self.subscribe(MSG_KEY, self.handle_msg) + #register events for grid + for key in [common.index_key(MARKER_KEY, i) for i in range(self.num_inputs)] + [ + TRIGGER_LEVEL_KEY, TRIGGER_MODE_KEY, + T_PER_DIV_KEY, X_PER_DIV_KEY, Y_PER_DIV_KEY, + T_OFF_KEY, X_OFF_KEY, Y_OFF_KEY, + T_DIVS_KEY, X_DIVS_KEY, Y_DIVS_KEY, + XY_MODE_KEY, AUTORANGE_KEY, T_FRAC_OFF_KEY, + TRIGGER_SHOW_KEY, XY_MARKER_KEY, X_CHANNEL_KEY, Y_CHANNEL_KEY, + ]: self.subscribe(key, self.update_grid) + #initial update + self.update_grid() + + def handle_msg(self, msg): + """ + Handle the message from the scope sink message queue. + Plot the list of arrays of samples onto the grid. + Each samples array gets its own channel. + @param msg the time domain data as a character array + """ + if not self[RUNNING_KEY]: return + #check time elapsed + if time.time() - self.frame_rate_ts < 1.0/self[FRAME_RATE_KEY]: return + #convert to floating point numbers + samples = numpy.fromstring(msg, numpy.float32) + #extract the trigger offset + self.trigger_offset = samples[-1] + samples = samples[:-1] + samps_per_ch = len(samples)/self.num_inputs + self.sampleses = [samples[samps_per_ch*i:samps_per_ch*(i+1)] for i in range(self.num_inputs)] + #handle samples + self.handle_samples() + self.frame_rate_ts = time.time() + + def set_auto_trigger_level(self, *args): + """ + Use the current trigger channel and samples to calculate the 50% level. + """ + if not self.sampleses: return + samples = self.sampleses[self[TRIGGER_CHANNEL_KEY]] + self[TRIGGER_LEVEL_KEY] = (numpy.max(samples)+numpy.min(samples))/2 + + def handle_samples(self): + """ + Handle the cached samples from the scope input. + Perform ac coupling, triggering, and auto ranging. + """ + if not self.sampleses: return + sampleses = self.sampleses + if self[XY_MODE_KEY]: + self[DECIMATION_KEY] = 1 + x_samples = sampleses[self[X_CHANNEL_KEY]] + y_samples = sampleses[self[Y_CHANNEL_KEY]] + #autorange + if self[AUTORANGE_KEY] and time.time() - self.autorange_ts > AUTORANGE_UPDATE_RATE: + x_min, x_max = common.get_min_max(x_samples) + y_min, y_max = common.get_min_max(y_samples) + #adjust the x per div + x_per_div = common.get_clean_num((x_max-x_min)/self[X_DIVS_KEY]) + if x_per_div != self[X_PER_DIV_KEY]: self[X_PER_DIV_KEY] = x_per_div; return + #adjust the x offset + x_off = x_per_div*round((x_max+x_min)/2/x_per_div) + if x_off != self[X_OFF_KEY]: self[X_OFF_KEY] = x_off; return + #adjust the y per div + y_per_div = common.get_clean_num((y_max-y_min)/self[Y_DIVS_KEY]) + if y_per_div != self[Y_PER_DIV_KEY]: self[Y_PER_DIV_KEY] = y_per_div; return + #adjust the y offset + y_off = y_per_div*round((y_max+y_min)/2/y_per_div) + if y_off != self[Y_OFF_KEY]: self[Y_OFF_KEY] = y_off; return + self.autorange_ts = time.time() + #plot xy channel + self.plotter.set_waveform( + channel='XY', + samples=(x_samples, y_samples), + color_spec=CHANNEL_COLOR_SPECS[0], + marker=self[XY_MARKER_KEY], + ) + #turn off each waveform + for i, samples in enumerate(sampleses): + self.plotter.clear_waveform(channel='Ch%d'%(i+1)) + else: + #autorange + if self[AUTORANGE_KEY] and time.time() - self.autorange_ts > AUTORANGE_UPDATE_RATE: + bounds = [common.get_min_max(samples) for samples in sampleses] + y_min = numpy.min([bound[0] for bound in bounds]) + y_max = numpy.max([bound[1] for bound in bounds]) + #adjust the y per div + y_per_div = common.get_clean_num((y_max-y_min)/self[Y_DIVS_KEY]) + if y_per_div != self[Y_PER_DIV_KEY]: self[Y_PER_DIV_KEY] = y_per_div; return + #adjust the y offset + y_off = y_per_div*round((y_max+y_min)/2/y_per_div) + if y_off != self[Y_OFF_KEY]: self[Y_OFF_KEY] = y_off; return + self.autorange_ts = time.time() + #number of samples to scale to the screen + actual_rate = self.get_actual_rate() + time_span = self[T_PER_DIV_KEY]*self[T_DIVS_KEY] + num_samps = int(round(time_span*actual_rate)) + #handle the time offset + t_off = self[T_FRAC_OFF_KEY]*(len(sampleses[0])/actual_rate - time_span) + if t_off != self[T_OFF_KEY]: self[T_OFF_KEY] = t_off; return + samps_off = int(round(actual_rate*self[T_OFF_KEY])) + #adjust the decim so that we use about half the samps + self[DECIMATION_KEY] = int(round( + time_span*self[SAMPLE_RATE_KEY]/(0.5*len(sampleses[0])) + ) + ) + #num samps too small, auto increment the time + if num_samps < 2: self[T_PER_DIV_KEY] = common.get_clean_incr(self[T_PER_DIV_KEY]) + #num samps in bounds, plot each waveform + elif num_samps <= len(sampleses[0]): + for i, samples in enumerate(sampleses): + #plot samples + self.plotter.set_waveform( + channel='Ch%d'%(i+1), + samples=samples[samps_off:num_samps+samps_off], + color_spec=CHANNEL_COLOR_SPECS[i], + marker=self[common.index_key(MARKER_KEY, i)], + trig_off=self.trigger_offset, + ) + #turn XY channel off + self.plotter.clear_waveform(channel='XY') + #keep trigger level within range + if self[TRIGGER_LEVEL_KEY] > self.get_y_max(): + self[TRIGGER_LEVEL_KEY] = self.get_y_max(); return + if self[TRIGGER_LEVEL_KEY] < self.get_y_min(): + self[TRIGGER_LEVEL_KEY] = self.get_y_min(); return + #disable the trigger channel + if not self[TRIGGER_SHOW_KEY] or self[XY_MODE_KEY] or self[TRIGGER_MODE_KEY] == gr.gr_TRIG_MODE_FREE: + self.plotter.clear_waveform(channel='Trig') + else: #show trigger channel + trigger_level = self[TRIGGER_LEVEL_KEY] + trigger_point = (len(self.sampleses[0])-1)/self.get_actual_rate()/2.0 + self.plotter.set_waveform( + channel='Trig', + samples=( + [self.get_t_min(), trigger_point, trigger_point, trigger_point, trigger_point, self.get_t_max()], + [trigger_level, trigger_level, self.get_y_max(), self.get_y_min(), trigger_level, trigger_level] + ), + color_spec=TRIGGER_COLOR_SPEC, + ) + #update the plotter + self.plotter.update() + + def get_actual_rate(self): return 1.0*self[SAMPLE_RATE_KEY]/self[DECIMATION_KEY] + def get_t_min(self): return self[T_OFF_KEY] + def get_t_max(self): return self[T_PER_DIV_KEY]*self[T_DIVS_KEY] + self[T_OFF_KEY] + def get_x_min(self): return -1*self[X_PER_DIV_KEY]*self[X_DIVS_KEY]/2.0 + self[X_OFF_KEY] + def get_x_max(self): return self[X_PER_DIV_KEY]*self[X_DIVS_KEY]/2.0 + self[X_OFF_KEY] + def get_y_min(self): return -1*self[Y_PER_DIV_KEY]*self[Y_DIVS_KEY]/2.0 + self[Y_OFF_KEY] + def get_y_max(self): return self[Y_PER_DIV_KEY]*self[Y_DIVS_KEY]/2.0 + self[Y_OFF_KEY] + + def update_grid(self, *args): + """ + Update the grid to reflect the current settings: + xy divisions, xy offset, xy mode setting + """ + if self[T_FRAC_OFF_KEY] < 0: self[T_FRAC_OFF_KEY] = 0; return + if self[T_FRAC_OFF_KEY] > 1: self[T_FRAC_OFF_KEY] = 1; return + if self[XY_MODE_KEY]: + #update the x axis + self.plotter.set_x_label('Ch%d'%(self[X_CHANNEL_KEY]+1)) + self.plotter.set_x_grid(self.get_x_min(), self.get_x_max(), self[X_PER_DIV_KEY]) + #update the y axis + self.plotter.set_y_label('Ch%d'%(self[Y_CHANNEL_KEY]+1)) + self.plotter.set_y_grid(self.get_y_min(), self.get_y_max(), self[Y_PER_DIV_KEY]) + else: + #update the t axis + self.plotter.set_x_label('Time', 's') + self.plotter.set_x_grid(self.get_t_min(), self.get_t_max(), self[T_PER_DIV_KEY], True) + #update the y axis + self.plotter.set_y_label('Counts') + self.plotter.set_y_grid(self.get_y_min(), self.get_y_max(), self[Y_PER_DIV_KEY]) + #redraw current sample + self.handle_samples() diff --git a/gr-wxgui/src/python/scopesink.py b/gr-wxgui/src/python/scopesink.py deleted file mode 100755 index 63164f14..00000000 --- a/gr-wxgui/src/python/scopesink.py +++ /dev/null @@ -1,650 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2003,2004,2006 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 import gr, gru, eng_notation -from gnuradio.wxgui import stdgui -import wx -import gnuradio.wxgui.plot as plot -import Numeric -import threading -import struct - -default_scopesink_size = (640, 240) -default_v_scale = 1000 -default_frame_decim = gr.prefs().get_long('wxgui', 'frame_decim', 1) - -class scope_sink_f(gr.hier_block): - def __init__(self, fg, parent, title='', sample_rate=1, - size=default_scopesink_size, frame_decim=default_frame_decim, - v_scale=default_v_scale, t_scale=None): - msgq = gr.msg_queue(2) # message queue that holds at most 2 messages - self.guts = gr.oscope_sink_f(sample_rate, msgq) - gr.hier_block.__init__(self, fg, self.guts, self.guts) - self.win = scope_window(win_info (msgq, sample_rate, frame_decim, - v_scale, t_scale, self.guts, title), parent) - - def set_sample_rate(self, sample_rate): - self.guts.set_sample_rate(sample_rate) - self.win.info.set_sample_rate(sample_rate) - -class scope_sink_c(gr.hier_block): - def __init__(self, fg, parent, title='', sample_rate=1, - size=default_scopesink_size, frame_decim=default_frame_decim, - v_scale=default_v_scale, t_scale=None): - msgq = gr.msg_queue(2) # message queue that holds at most 2 messages - c2f = gr.complex_to_float() - self.guts = gr.oscope_sink_f(sample_rate, msgq) - fg.connect((c2f, 0), (self.guts, 0)) - fg.connect((c2f, 1), (self.guts, 1)) - gr.hier_block.__init__(self, fg, c2f, self.guts) - self.win = scope_window(win_info(msgq, sample_rate, frame_decim, - v_scale, t_scale, self.guts, title), parent) - - def set_sample_rate(self, sample_rate): - self.guts.set_sample_rate(sample_rate) - self.win.info.set_sample_rate(sample_rate) - -# ======================================================================== -# This is the deprecated interface, retained for compatibility... -# -# returns (block, win). -# block requires a N input stream of float -# win is a subclass of wxWindow - -def make_scope_sink_f (fg, parent, label, input_rate): - block = scope_sink_f(fg, parent, title=label, sample_rate=input_rate) - return (block, block.win) - -# ======================================================================== - - -time_base_list = [ # time / division - 1.0e-7, # 100ns / div - 2.5e-7, - 5.0e-7, - 1.0e-6, # 1us / div - 2.5e-6, - 5.0e-6, - 1.0e-5, # 10us / div - 2.5e-5, - 5.0e-5, - 1.0e-4, # 100us / div - 2.5e-4, - 5.0e-4, - 1.0e-3, # 1ms / div - 2.5e-3, - 5.0e-3, - 1.0e-2, # 10ms / div - 2.5e-2, - 5.0e-2 - ] - -v_scale_list = [ # counts / div, LARGER gains are SMALLER /div, appear EARLIER - 2.0e-3, # 2m / div, don't call it V/div it's actually counts/div - 5.0e-3, - 1.0e-2, - 2.0e-2, - 5.0e-2, - 1.0e-1, - 2.0e-1, - 5.0e-1, - 1.0e+0, - 2.0e+0, - 5.0e+0, - 1.0e+1, - 2.0e+1, - 5.0e+1, - 1.0e+2, - 2.0e+2, - 5.0e+2, - 1.0e+3, - 2.0e+3, - 5.0e+3, - 1.0e+4 # 10000 /div, USRP full scale is -/+ 32767 - ] - - -wxDATA_EVENT = wx.NewEventType() - -def EVT_DATA_EVENT(win, func): - win.Connect(-1, -1, wxDATA_EVENT, func) - -class DataEvent(wx.PyEvent): - def __init__(self, data): - wx.PyEvent.__init__(self) - self.SetEventType (wxDATA_EVENT) - self.data = data - - def Clone (self): - self.__class__ (self.GetId()) - - -class win_info (object): - __slots__ = ['msgq', 'sample_rate', 'frame_decim', 'v_scale', - 'scopesink', 'title', - 'time_scale_cursor', 'v_scale_cursor', 'marker', 'xy', - 'autorange', 'running'] - - def __init__ (self, msgq, sample_rate, frame_decim, v_scale, t_scale, - scopesink, title = "Oscilloscope"): - self.msgq = msgq - self.sample_rate = sample_rate - self.frame_decim = frame_decim - self.scopesink = scopesink - self.title = title; - - self.time_scale_cursor = gru.seq_with_cursor(time_base_list, initial_value = t_scale) - self.v_scale_cursor = gru.seq_with_cursor(v_scale_list, initial_value = v_scale) - - self.marker = 'line' - self.xy = False - if v_scale == None: # 0 and None are both False, but 0 != None - self.autorange = True - else: - self.autorange = False # 0 is a valid v_scale - self.running = True - - def get_time_per_div (self): - return self.time_scale_cursor.current () - - def get_volts_per_div (self): - return self.v_scale_cursor.current () - - def set_sample_rate(self, sample_rate): - self.sample_rate = sample_rate - - def get_sample_rate (self): - return self.sample_rate - - def get_decimation_rate (self): - return 1.0 - - def set_marker (self, s): - self.marker = s - - def get_marker (self): - return self.marker - - -class input_watcher (threading.Thread): - def __init__ (self, msgq, event_receiver, frame_decim, **kwds): - threading.Thread.__init__ (self, **kwds) - self.setDaemon (1) - self.msgq = msgq - self.event_receiver = event_receiver - self.frame_decim = frame_decim - self.iscan = 0 - self.keep_running = True - self.start () - - def run (self): - # print "input_watcher: pid = ", os.getpid () - while (self.keep_running): - msg = self.msgq.delete_head() # blocking read of message queue - if self.iscan == 0: # only display at frame_decim - self.iscan = self.frame_decim - - nchan = int(msg.arg1()) # number of channels of data in msg - nsamples = int(msg.arg2()) # number of samples in each channel - - s = msg.to_string() # get the body of the msg as a string - - bytes_per_chan = nsamples * gr.sizeof_float - - records = [] - for ch in range (nchan): - - start = ch * bytes_per_chan - chan_data = s[start:start+bytes_per_chan] - rec = Numeric.fromstring (chan_data, Numeric.Float32) - records.append (rec) - - # print "nrecords = %d, reclen = %d" % (len (records),nsamples) - - de = DataEvent (records) - wx.PostEvent (self.event_receiver, de) - records = [] - del de - - # end if iscan == 0 - self.iscan -= 1 - - -class scope_window (wx.Panel): - - def __init__ (self, info, parent, id = -1, - pos = wx.DefaultPosition, size = wx.DefaultSize, name = ""): - wx.Panel.__init__ (self, parent, -1) - self.info = info - - vbox = wx.BoxSizer (wx.VERTICAL) - - self.graph = graph_window (info, self, -1) - - vbox.Add (self.graph, 1, wx.EXPAND) - vbox.Add (self.make_control_box(), 0, wx.EXPAND) - vbox.Add (self.make_control2_box(), 0, wx.EXPAND) - - self.sizer = vbox - self.SetSizer (self.sizer) - self.SetAutoLayout (True) - self.sizer.Fit (self) - self.set_autorange(self.info.autorange) - - - # second row of control buttons etc. appears BELOW control_box - def make_control2_box (self): - ctrlbox = wx.BoxSizer (wx.HORIZONTAL) - - self.inc_v_button = wx.Button (self, 1101, " < ", style=wx.BU_EXACTFIT) - self.inc_v_button.SetToolTipString ("Increase vertical range") - wx.EVT_BUTTON (self, 1101, self.incr_v_scale) # ID matches button ID above - - self.dec_v_button = wx.Button (self, 1100, " > ", style=wx.BU_EXACTFIT) - self.dec_v_button.SetToolTipString ("Decrease vertical range") - wx.EVT_BUTTON (self, 1100, self.decr_v_scale) - - self.v_scale_label = wx.StaticText (self, 1002, "None") # vertical /div - self.update_v_scale_label () - - self.autorange_checkbox = wx.CheckBox (self, 1102, "Autorange") - self.autorange_checkbox.SetToolTipString ("Select autorange on/off") - wx.EVT_CHECKBOX(self, 1102, self.autorange_checkbox_event) - - ctrlbox.Add ((5,0) ,0) # left margin space - ctrlbox.Add (self.inc_v_button, 0, wx.EXPAND) - ctrlbox.Add (self.dec_v_button, 0, wx.EXPAND) - ctrlbox.Add (self.v_scale_label, 0, wx.ALIGN_CENTER) - ctrlbox.Add ((20,0) ,0) # spacer - ctrlbox.Add (self.autorange_checkbox, 0, wx.ALIGN_CENTER) - - return ctrlbox - - def make_control_box (self): - ctrlbox = wx.BoxSizer (wx.HORIZONTAL) - - tb_left = wx.Button (self, 1001, " < ", style=wx.BU_EXACTFIT) - tb_left.SetToolTipString ("Increase time base") - wx.EVT_BUTTON (self, 1001, self.incr_timebase) - - - tb_right = wx.Button (self, 1000, " > ", style=wx.BU_EXACTFIT) - tb_right.SetToolTipString ("Decrease time base") - wx.EVT_BUTTON (self, 1000, self.decr_timebase) - - self.time_base_label = wx.StaticText (self, 1002, "") - self.update_timebase_label () - - ctrlbox.Add ((5,0) ,0) - # ctrlbox.Add (wx.StaticText (self, -1, "Horiz Scale: "), 0, wx.ALIGN_CENTER) - ctrlbox.Add (tb_left, 0, wx.EXPAND) - ctrlbox.Add (tb_right, 0, wx.EXPAND) - ctrlbox.Add (self.time_base_label, 0, wx.ALIGN_CENTER) - - ctrlbox.Add ((10,0) ,1) # stretchy space - - ctrlbox.Add (wx.StaticText (self, -1, "Trig: "), 0, wx.ALIGN_CENTER) - self.trig_chan_choice = wx.Choice (self, 1004, - choices = ['Ch1', 'Ch2', 'Ch3', 'Ch4']) - self.trig_chan_choice.SetToolTipString ("Select channel for trigger") - wx.EVT_CHOICE (self, 1004, self.trig_chan_choice_event) - ctrlbox.Add (self.trig_chan_choice, 0, wx.ALIGN_CENTER) - - self.trig_mode_choice = wx.Choice (self, 1005, - choices = ['Auto', 'Pos', 'Neg']) - self.trig_mode_choice.SetToolTipString ("Select trigger slope or Auto (untriggered roll)") - wx.EVT_CHOICE (self, 1005, self.trig_mode_choice_event) - ctrlbox.Add (self.trig_mode_choice, 0, wx.ALIGN_CENTER) - - trig_level50 = wx.Button (self, 1006, "50%") - trig_level50.SetToolTipString ("Set trigger level to 50%") - wx.EVT_BUTTON (self, 1006, self.set_trig_level50) - ctrlbox.Add (trig_level50, 0, wx.EXPAND) - - run_stop = wx.Button (self, 1007, "Run/Stop") - run_stop.SetToolTipString ("Toggle Run/Stop mode") - wx.EVT_BUTTON (self, 1007, self.run_stop) - ctrlbox.Add (run_stop, 0, wx.EXPAND) - - ctrlbox.Add ((10, 0) ,1) # stretchy space - - ctrlbox.Add (wx.StaticText (self, -1, "Fmt: "), 0, wx.ALIGN_CENTER) - self.marker_choice = wx.Choice (self, 1002, choices = self._marker_choices) - self.marker_choice.SetToolTipString ("Select plotting with lines, pluses or dots") - wx.EVT_CHOICE (self, 1002, self.marker_choice_event) - ctrlbox.Add (self.marker_choice, 0, wx.ALIGN_CENTER) - - self.xy_choice = wx.Choice (self, 1003, choices = ['X:t', 'X:Y']) - self.xy_choice.SetToolTipString ("Select X vs time or X vs Y display") - wx.EVT_CHOICE (self, 1003, self.xy_choice_event) - ctrlbox.Add (self.xy_choice, 0, wx.ALIGN_CENTER) - - return ctrlbox - - _marker_choices = ['line', 'plus', 'dot'] - - def update_timebase_label (self): - time_per_div = self.info.get_time_per_div () - s = ' ' + eng_notation.num_to_str (time_per_div) + 's/div' - self.time_base_label.SetLabel (s) - - def decr_timebase (self, evt): - self.info.time_scale_cursor.prev () - self.update_timebase_label () - - def incr_timebase (self, evt): - self.info.time_scale_cursor.next () - self.update_timebase_label () - - def update_v_scale_label (self): - volts_per_div = self.info.get_volts_per_div () - s = ' ' + eng_notation.num_to_str (volts_per_div) + '/div' # Not V/div - self.v_scale_label.SetLabel (s) - - def decr_v_scale (self, evt): - self.info.v_scale_cursor.prev () - self.update_v_scale_label () - - def incr_v_scale (self, evt): - self.info.v_scale_cursor.next () - self.update_v_scale_label () - - def marker_choice_event (self, evt): - s = evt.GetString () - self.set_marker (s) - - def set_autorange(self, on): - if on: - self.v_scale_label.SetLabel(" (auto)") - self.info.autorange = True - self.autorange_checkbox.SetValue(True) - self.inc_v_button.Enable(False) - self.dec_v_button.Enable(False) - else: - if self.graph.y_range: - (l,u) = self.graph.y_range # found by autorange - self.info.v_scale_cursor.set_index_by_value((u-l)/8.0) - self.update_v_scale_label() - self.info.autorange = False - self.autorange_checkbox.SetValue(False) - self.inc_v_button.Enable(True) - self.dec_v_button.Enable(True) - - def autorange_checkbox_event(self, evt): - if evt.Checked(): - self.set_autorange(True) - else: - self.set_autorange(False) - - def set_marker (self, s): - self.info.set_marker (s) # set info for drawing routines - i = self.marker_choice.FindString (s) - assert i >= 0, "Hmmm, set_marker problem" - self.marker_choice.SetSelection (i) - - def set_format_line (self): - self.set_marker ('line') - - def set_format_dot (self): - self.set_marker ('dot') - - def set_format_plus (self): - self.set_marker ('plus') - - def xy_choice_event (self, evt): - s = evt.GetString () - self.info.xy = s == 'X:Y' - - def trig_chan_choice_event (self, evt): - s = evt.GetString () - ch = int (s[-1]) - 1 - self.info.scopesink.set_trigger_channel (ch) - - def trig_mode_choice_event (self, evt): - sink = self.info.scopesink - s = evt.GetString () - if s == 'Pos': - sink.set_trigger_mode (gr.gr_TRIG_POS_SLOPE) - elif s == 'Neg': - sink.set_trigger_mode (gr.gr_TRIG_NEG_SLOPE) - elif s == 'Auto': - sink.set_trigger_mode (gr.gr_TRIG_AUTO) - else: - assert 0, "Bad trig_mode_choice string" - - def set_trig_level50 (self, evt): - self.info.scopesink.set_trigger_level_auto () - - def run_stop (self, evt): - self.info.running = not self.info.running - - -class graph_window (plot.PlotCanvas): - - channel_colors = ['BLUE', 'RED', - 'CYAN', 'MAGENTA', 'GREEN', 'YELLOW'] - - def __init__ (self, info, parent, id = -1, - pos = wx.DefaultPosition, size = (640, 240), - style = wx.DEFAULT_FRAME_STYLE, name = ""): - plot.PlotCanvas.__init__ (self, parent, id, pos, size, style, name) - - self.SetXUseScopeTicks (True) - self.SetEnableGrid (True) - self.SetEnableZoom (True) - self.SetEnableLegend(True) - # self.SetBackgroundColour ('black') - - self.info = info; - self.y_range = None - self.x_range = None - self.avg_y_min = None - self.avg_y_max = None - self.avg_x_min = None - self.avg_x_max = None - - EVT_DATA_EVENT (self, self.format_data) - - self.input_watcher = input_watcher (info.msgq, self, info.frame_decim) - - def channel_color (self, ch): - return self.channel_colors[ch % len(self.channel_colors)] - - def format_data (self, evt): - if not self.info.running: - return - - if self.info.xy: - self.format_xy_data (evt) - return - - info = self.info - records = evt.data - nchannels = len (records) - npoints = len (records[0]) - - objects = [] - - Ts = 1.0 / (info.get_sample_rate () / info.get_decimation_rate ()) - x_vals = Ts * Numeric.arrayrange (-npoints/2, npoints/2) - - # preliminary clipping based on time axis here, instead of in graphics code - time_per_window = self.info.get_time_per_div () * 10 - n = int (time_per_window / Ts + 0.5) - n = n & ~0x1 # make even - n = max (2, min (n, npoints)) - - self.SetXUseScopeTicks (True) # use 10 divisions, no labels - - for ch in range(nchannels): - r = records[ch] - - # plot middle n points of record - - lb = npoints/2 - n/2 - ub = npoints/2 + n/2 - # points = zip (x_vals[lb:ub], r[lb:ub]) - points = Numeric.zeros ((ub-lb, 2), Numeric.Float64) - points[:,0] = x_vals[lb:ub] - points[:,1] = r[lb:ub] - - m = info.get_marker () - if m == 'line': - objects.append (plot.PolyLine (points, - colour=self.channel_color (ch), - legend=('Ch%d' % (ch+1,)))) - else: - objects.append (plot.PolyMarker (points, - marker=m, - colour=self.channel_color (ch), - legend=('Ch%d' % (ch+1,)))) - - graphics = plot.PlotGraphics (objects, - title=self.info.title, - xLabel = '', yLabel = '') - - time_per_div = info.get_time_per_div () - x_range = (-5.0 * time_per_div, 5.0 * time_per_div) # ranges are tuples! - volts_per_div = info.get_volts_per_div () - if not self.info.autorange: - self.y_range = (-4.0 * volts_per_div, 4.0 * volts_per_div) - self.Draw (graphics, xAxis=x_range, yAxis=self.y_range) - self.update_y_range () # autorange to self.y_range - - - def format_xy_data (self, evt): - info = self.info - records = evt.data - nchannels = len (records) - npoints = len (records[0]) - - if nchannels < 2: - return - - objects = [] - # points = zip (records[0], records[1]) - points = Numeric.zeros ((len(records[0]), 2), Numeric.Float32) - points[:,0] = records[0] - points[:,1] = records[1] - - self.SetXUseScopeTicks (False) - - m = info.get_marker () - if m == 'line': - objects.append (plot.PolyLine (points, - colour=self.channel_color (0))) - else: - objects.append (plot.PolyMarker (points, - marker=m, - colour=self.channel_color (0))) - - graphics = plot.PlotGraphics (objects, - title=self.info.title, - xLabel = 'I', yLabel = 'Q') - - self.Draw (graphics, xAxis=self.x_range, yAxis=self.y_range) - self.update_y_range () - self.update_x_range () - - - def update_y_range (self): - alpha = 1.0/25 - graphics = self.last_draw[0] - p1, p2 = graphics.boundingBox () # min, max points of graphics - - if self.avg_y_min: # prevent vertical scale from jumping abruptly --? - self.avg_y_min = p1[1] * alpha + self.avg_y_min * (1 - alpha) - self.avg_y_max = p2[1] * alpha + self.avg_y_max * (1 - alpha) - else: # initial guess - self.avg_y_min = p1[1] # -500.0 workaround, sometimes p1 is ~ 10^35 - self.avg_y_max = p2[1] # 500.0 - - self.y_range = self._axisInterval ('auto', self.avg_y_min, self.avg_y_max) - # print "p1 %s p2 %s y_min %s y_max %s y_range %s" \ - # % (p1, p2, self.avg_y_min, self.avg_y_max, self.y_range) - - - def update_x_range (self): - alpha = 1.0/25 - graphics = self.last_draw[0] - p1, p2 = graphics.boundingBox () # min, max points of graphics - - if self.avg_x_min: - self.avg_x_min = p1[0] * alpha + self.avg_x_min * (1 - alpha) - self.avg_x_max = p2[0] * alpha + self.avg_x_max * (1 - alpha) - else: - self.avg_x_min = p1[0] - self.avg_x_max = p2[0] - - self.x_range = self._axisInterval ('auto', self.avg_x_min, self.avg_x_max) - - -# ---------------------------------------------------------------- -# Stand-alone test application -# ---------------------------------------------------------------- - -class test_app_flow_graph (stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - if len(argv) > 1: - frame_decim = int(argv[1]) - else: - frame_decim = 1 - - if len(argv) > 2: - v_scale = float(argv[2]) # start up at this v_scale value - else: - v_scale = None # start up in autorange mode, default - - if len(argv) > 3: - t_scale = float(argv[3]) # start up at this t_scale value - else: - t_scale = None # old behavior - - print "frame decim %s v_scale %s t_scale %s" % (frame_decim,v_scale,t_scale) - - input_rate = 1e6 - - # Generate a complex sinusoid - src0 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 25.1e3, 1e3) - - # We add this throttle block so that this demo doesn't suck down - # all the CPU available. You normally wouldn't use it... - throttle = gr.throttle(gr.sizeof_gr_complex, input_rate) - - scope = scope_sink_c (self, panel,"Secret Data",sample_rate=input_rate, - frame_decim=frame_decim, - v_scale=v_scale, t_scale=t_scale) - vbox.Add (scope.win, 1, wx.EXPAND) - - # wire the blocks together - self.connect (src0, throttle, scope) - -def main (): - app = stdgui.stdapp (test_app_flow_graph, "O'Scope Test App") - app.MainLoop () - -if __name__ == '__main__': - main () - -# ---------------------------------------------------------------- diff --git a/gr-wxgui/src/python/scopesink2.py b/gr-wxgui/src/python/scopesink2.py new file mode 100644 index 00000000..99e26889 --- /dev/null +++ b/gr-wxgui/src/python/scopesink2.py @@ -0,0 +1,41 @@ +# +# Copyright 2008,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. +# + +from gnuradio import gr + +p = gr.prefs() +style = p.get_string('wxgui', 'style', 'auto') + +if style == 'auto' or style == 'gl': + try: + import wx.glcanvas + from OpenGL.GL import * + from scopesink_gl import scope_sink_f, scope_sink_c + except ImportError: + if style == 'gl': + raise RuntimeError("Unable to import OpenGL. Are Python wrappers for OpenGL installed?") + else: + # Fall backto non-gl sinks + from scopesink_nongl import scope_sink_f, scope_sink_c +elif style == 'nongl': + from scopesink_nongl import scope_sink_f, scope_sink_c +else: + raise RuntimeError("Unknown wxgui style") diff --git a/gr-wxgui/src/python/scopesink_gl.py b/gr-wxgui/src/python/scopesink_gl.py new file mode 100644 index 00000000..b4ae0f33 --- /dev/null +++ b/gr-wxgui/src/python/scopesink_gl.py @@ -0,0 +1,206 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import scope_window +import common +from gnuradio import gr +from pubsub import pubsub +from constants import * + +class ac_couple_block(gr.hier_block2): + """ + AC couple the incoming stream by subtracting out the low pass signal. + Mute the low pass filter to disable ac coupling. + """ + + def __init__(self, controller, ac_couple_key, ac_couple, sample_rate_key): + gr.hier_block2.__init__( + self, + "ac_couple", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(1, 1, gr.sizeof_float), + ) + #blocks + lpf = gr.single_pole_iir_filter_ff(0.0) + sub = gr.sub_ff() + mute = gr.mute_ff() + #connect + self.connect(self, sub, self) + self.connect(self, lpf, mute, (sub, 1)) + #subscribe + controller.subscribe(ac_couple_key, lambda x: mute.set_mute(not x)) + controller.subscribe(sample_rate_key, lambda x: lpf.set_taps(2.0/x)) + #initialize + controller[ac_couple_key] = ac_couple + controller[sample_rate_key] = controller[sample_rate_key] + +################################################## +# Scope sink block (wrapper for old wxgui) +################################################## +class _scope_sink_base(gr.hier_block2): + """ + A scope block with a gui window. + """ + + def __init__( + self, + parent, + title='', + sample_rate=1, + size=scope_window.DEFAULT_WIN_SIZE, + v_scale=0, + t_scale=0, + xy_mode=False, + ac_couple=False, + num_inputs=1, + frame_rate=scope_window.DEFAULT_FRAME_RATE, + **kwargs #do not end with a comma + ): + if not t_scale: t_scale = 10.0/sample_rate + #init + gr.hier_block2.__init__( + self, + "scope_sink", + gr.io_signature(num_inputs, num_inputs, self._item_size), + gr.io_signature(0, 0, 0), + ) + #scope + msgq = gr.msg_queue(2) + scope = gr.oscope_sink_f(sample_rate, msgq) + #controller + self.controller = pubsub() + self.controller.subscribe(SAMPLE_RATE_KEY, scope.set_sample_rate) + self.controller.publish(SAMPLE_RATE_KEY, scope.sample_rate) + self.controller.subscribe(DECIMATION_KEY, scope.set_decimation_count) + self.controller.publish(DECIMATION_KEY, scope.get_decimation_count) + self.controller.subscribe(TRIGGER_LEVEL_KEY, scope.set_trigger_level) + self.controller.publish(TRIGGER_LEVEL_KEY, scope.get_trigger_level) + self.controller.subscribe(TRIGGER_MODE_KEY, scope.set_trigger_mode) + self.controller.publish(TRIGGER_MODE_KEY, scope.get_trigger_mode) + self.controller.subscribe(TRIGGER_SLOPE_KEY, scope.set_trigger_slope) + self.controller.publish(TRIGGER_SLOPE_KEY, scope.get_trigger_slope) + self.controller.subscribe(TRIGGER_CHANNEL_KEY, scope.set_trigger_channel) + self.controller.publish(TRIGGER_CHANNEL_KEY, scope.get_trigger_channel) + #connect + if self._real: + for i in range(num_inputs): + self.connect( + (self, i), + ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, i), ac_couple, SAMPLE_RATE_KEY), + (scope, i), + ) + else: + for i in range(num_inputs): + c2f = gr.complex_to_float() + self.connect((self, i), c2f) + for j in range(2): + self.connect( + (c2f, j), + ac_couple_block(self.controller, common.index_key(AC_COUPLE_KEY, 2*i+j), ac_couple, SAMPLE_RATE_KEY), + (scope, 2*i+j), + ) + num_inputs *= 2 + #start input watcher + common.input_watcher(msgq, self.controller, MSG_KEY) + #create window + self.win = scope_window.scope_window( + parent=parent, + controller=self.controller, + size=size, + title=title, + frame_rate=frame_rate, + num_inputs=num_inputs, + sample_rate_key=SAMPLE_RATE_KEY, + t_scale=t_scale, + v_scale=v_scale, + xy_mode=xy_mode, + ac_couple_key=AC_COUPLE_KEY, + trigger_level_key=TRIGGER_LEVEL_KEY, + trigger_mode_key=TRIGGER_MODE_KEY, + trigger_slope_key=TRIGGER_SLOPE_KEY, + trigger_channel_key=TRIGGER_CHANNEL_KEY, + decimation_key=DECIMATION_KEY, + msg_key=MSG_KEY, + ) + common.register_access_methods(self, self.win) + +class scope_sink_f(_scope_sink_base): + _item_size = gr.sizeof_float + _real = True + +class scope_sink_c(_scope_sink_base): + _item_size = gr.sizeof_gr_complex + _real = False + +# ---------------------------------------------------------------- +# Stand-alone test application +# ---------------------------------------------------------------- + +import wx +from gnuradio.wxgui import stdgui2 + +class test_top_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + if len(argv) > 1: + frame_decim = int(argv[1]) + else: + frame_decim = 1 + + if len(argv) > 2: + v_scale = float(argv[2]) # start up at this v_scale value + else: + v_scale = None # start up in autorange mode, default + + if len(argv) > 3: + t_scale = float(argv[3]) # start up at this t_scale value + else: + t_scale = .00003 # old behavior + + print "frame decim %s v_scale %s t_scale %s" % (frame_decim,v_scale,t_scale) + + input_rate = 1e6 + + # Generate a complex sinusoid + self.src0 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 25.1e3, 1e3) + + # We add this throttle block so that this demo doesn't suck down + # all the CPU available. You normally wouldn't use it... + self.thr = gr.throttle(gr.sizeof_gr_complex, input_rate) + + scope = scope_sink_c (panel,"Secret Data",sample_rate=input_rate, + v_scale=v_scale, t_scale=t_scale) + vbox.Add (scope.win, 1, wx.EXPAND) + + # Ultimately this will be + # self.connect("src0 throttle scope") + self.connect(self.src0, self.thr, scope) + +def main (): + app = stdgui2.stdapp (test_top_block, "O'Scope Test App") + app.MainLoop () + +if __name__ == '__main__': + main () diff --git a/gr-wxgui/src/python/scopesink_nongl.py b/gr-wxgui/src/python/scopesink_nongl.py new file mode 100644 index 00000000..5c1379ee --- /dev/null +++ b/gr-wxgui/src/python/scopesink_nongl.py @@ -0,0 +1,651 @@ +#!/usr/bin/env python +# +# Copyright 2003,2004,2006,2007 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 import gr, gru, eng_notation +from gnuradio.wxgui import stdgui2 +import wx +import gnuradio.wxgui.plot as plot +import numpy +import struct + +default_scopesink_size = (640, 240) +default_v_scale = 1000 +default_frame_decim = gr.prefs().get_long('wxgui', 'frame_decim', 1) + +class scope_sink_f(gr.hier_block2): + def __init__(self, parent, title='', sample_rate=1, + size=default_scopesink_size, frame_decim=default_frame_decim, + v_scale=default_v_scale, t_scale=None, num_inputs=1, **kwargs): + + gr.hier_block2.__init__(self, "scope_sink_f", + gr.io_signature(num_inputs, num_inputs, gr.sizeof_float), + gr.io_signature(0,0,0)) + + msgq = gr.msg_queue(2) # message queue that holds at most 2 messages + self.guts = gr.oscope_sink_f(sample_rate, msgq) + for i in range(num_inputs): + self.connect((self, i), (self.guts, i)) + + self.win = scope_window(win_info (msgq, sample_rate, frame_decim, + v_scale, t_scale, self.guts, title), parent) + + def set_sample_rate(self, sample_rate): + self.guts.set_sample_rate(sample_rate) + self.win.info.set_sample_rate(sample_rate) + +class scope_sink_c(gr.hier_block2): + def __init__(self, parent, title='', sample_rate=1, + size=default_scopesink_size, frame_decim=default_frame_decim, + v_scale=default_v_scale, t_scale=None, num_inputs=1, xy_mode=False, **kwargs): + + gr.hier_block2.__init__(self, "scope_sink_c", + gr.io_signature(num_inputs, num_inputs, gr.sizeof_gr_complex), + gr.io_signature(0,0,0)) + + msgq = gr.msg_queue(2) # message queue that holds at most 2 messages + self.guts = gr.oscope_sink_f(sample_rate, msgq) + for i in range(num_inputs): + c2f = gr.complex_to_float() + self.connect((self, i), c2f) + self.connect((c2f, 0), (self.guts, 2*i+0)) + self.connect((c2f, 1), (self.guts, 2*i+1)) + + self.win = scope_window(win_info(msgq, sample_rate, frame_decim, + v_scale, t_scale, self.guts, title), parent) + self.win.info.xy = xy_mode + + def set_sample_rate(self, sample_rate): + self.guts.set_sample_rate(sample_rate) + self.win.info.set_sample_rate(sample_rate) + +class constellation_sink(scope_sink_c): + def __init__(self, parent, title='Constellation', sample_rate=1, + size=default_scopesink_size, frame_decim=default_frame_decim): + scope_sink_c.__init__(self, parent=parent, title=title, sample_rate=sample_rate, + size=size, frame_decim=frame_decim) + self.win.info.xy = True #constellation mode + +# ======================================================================== + + +time_base_list = [ # time / division + 1.0e-7, # 100ns / div + 2.5e-7, + 5.0e-7, + 1.0e-6, # 1us / div + 2.5e-6, + 5.0e-6, + 1.0e-5, # 10us / div + 2.5e-5, + 5.0e-5, + 1.0e-4, # 100us / div + 2.5e-4, + 5.0e-4, + 1.0e-3, # 1ms / div + 2.5e-3, + 5.0e-3, + 1.0e-2, # 10ms / div + 2.5e-2, + 5.0e-2 + ] + +v_scale_list = [ # counts / div, LARGER gains are SMALLER /div, appear EARLIER + 2.0e-3, # 2m / div, don't call it V/div it's actually counts/div + 5.0e-3, + 1.0e-2, + 2.0e-2, + 5.0e-2, + 1.0e-1, + 2.0e-1, + 5.0e-1, + 1.0e+0, + 2.0e+0, + 5.0e+0, + 1.0e+1, + 2.0e+1, + 5.0e+1, + 1.0e+2, + 2.0e+2, + 5.0e+2, + 1.0e+3, + 2.0e+3, + 5.0e+3, + 1.0e+4 # 10000 /div, USRP full scale is -/+ 32767 + ] + + +wxDATA_EVENT = wx.NewEventType() + +def EVT_DATA_EVENT(win, func): + win.Connect(-1, -1, wxDATA_EVENT, func) + +class DataEvent(wx.PyEvent): + def __init__(self, data): + wx.PyEvent.__init__(self) + self.SetEventType (wxDATA_EVENT) + self.data = data + + def Clone (self): + self.__class__ (self.GetId()) + + +class win_info (object): + __slots__ = ['msgq', 'sample_rate', 'frame_decim', 'v_scale', + 'scopesink', 'title', + 'time_scale_cursor', 'v_scale_cursor', 'marker', 'xy', + 'autorange', 'running'] + + def __init__ (self, msgq, sample_rate, frame_decim, v_scale, t_scale, + scopesink, title = "Oscilloscope", xy=False): + self.msgq = msgq + self.sample_rate = sample_rate + self.frame_decim = frame_decim + self.scopesink = scopesink + self.title = title; + + self.time_scale_cursor = gru.seq_with_cursor(time_base_list, initial_value = t_scale) + self.v_scale_cursor = gru.seq_with_cursor(v_scale_list, initial_value = v_scale) + + self.marker = 'line' + self.xy = xy + self.autorange = not v_scale + self.running = True + + def get_time_per_div (self): + return self.time_scale_cursor.current () + + def get_volts_per_div (self): + return self.v_scale_cursor.current () + + def set_sample_rate(self, sample_rate): + self.sample_rate = sample_rate + + def get_sample_rate (self): + return self.sample_rate + + def get_decimation_rate (self): + return 1.0 + + def set_marker (self, s): + self.marker = s + + def get_marker (self): + return self.marker + + +class input_watcher (gru.msgq_runner): + def __init__ (self, msgq, event_receiver, frame_decim, **kwds): + self.event_receiver = event_receiver + self.frame_decim = frame_decim + self.iscan = 0 + gru.msgq_runner.__init__(self, msgq, self.handle_msg) + + def handle_msg(self, msg): + if self.iscan == 0: # only display at frame_decim + self.iscan = self.frame_decim + + nchan = int(msg.arg1()) # number of channels of data in msg + nsamples = int(msg.arg2()) # number of samples in each channel + + s = msg.to_string() # get the body of the msg as a string + + bytes_per_chan = nsamples * gr.sizeof_float + + records = [] + for ch in range (nchan): + + start = ch * bytes_per_chan + chan_data = s[start:start+bytes_per_chan] + rec = numpy.fromstring (chan_data, numpy.float32) + records.append (rec) + + # print "nrecords = %d, reclen = %d" % (len (records),nsamples) + + de = DataEvent (records) + wx.PostEvent (self.event_receiver, de) + records = [] + del de + + self.iscan -= 1 + + +class scope_window (wx.Panel): + + def __init__ (self, info, parent, id = -1, + pos = wx.DefaultPosition, size = wx.DefaultSize, name = ""): + wx.Panel.__init__ (self, parent, -1) + self.info = info + + vbox = wx.BoxSizer (wx.VERTICAL) + + self.graph = graph_window (info, self, -1) + + vbox.Add (self.graph, 1, wx.EXPAND) + vbox.Add (self.make_control_box(), 0, wx.EXPAND) + vbox.Add (self.make_control2_box(), 0, wx.EXPAND) + + self.sizer = vbox + self.SetSizer (self.sizer) + self.SetAutoLayout (True) + self.sizer.Fit (self) + self.set_autorange(self.info.autorange) + + + # second row of control buttons etc. appears BELOW control_box + def make_control2_box (self): + ctrlbox = wx.BoxSizer (wx.HORIZONTAL) + + self.inc_v_button = wx.Button (self, 1101, " < ", style=wx.BU_EXACTFIT) + self.inc_v_button.SetToolTipString ("Increase vertical range") + wx.EVT_BUTTON (self, 1101, self.incr_v_scale) # ID matches button ID above + + self.dec_v_button = wx.Button (self, 1100, " > ", style=wx.BU_EXACTFIT) + self.dec_v_button.SetToolTipString ("Decrease vertical range") + wx.EVT_BUTTON (self, 1100, self.decr_v_scale) + + self.v_scale_label = wx.StaticText (self, 1002, "None") # vertical /div + self.update_v_scale_label () + + self.autorange_checkbox = wx.CheckBox (self, 1102, "Autorange") + self.autorange_checkbox.SetToolTipString ("Select autorange on/off") + wx.EVT_CHECKBOX(self, 1102, self.autorange_checkbox_event) + + ctrlbox.Add ((5,0) ,0) # left margin space + ctrlbox.Add (self.inc_v_button, 0, wx.EXPAND) + ctrlbox.Add (self.dec_v_button, 0, wx.EXPAND) + ctrlbox.Add (self.v_scale_label, 0, wx.ALIGN_CENTER) + ctrlbox.Add ((20,0) ,0) # spacer + ctrlbox.Add (self.autorange_checkbox, 0, wx.ALIGN_CENTER) + + return ctrlbox + + def make_control_box (self): + ctrlbox = wx.BoxSizer (wx.HORIZONTAL) + + tb_left = wx.Button (self, 1001, " < ", style=wx.BU_EXACTFIT) + tb_left.SetToolTipString ("Increase time base") + wx.EVT_BUTTON (self, 1001, self.incr_timebase) + + + tb_right = wx.Button (self, 1000, " > ", style=wx.BU_EXACTFIT) + tb_right.SetToolTipString ("Decrease time base") + wx.EVT_BUTTON (self, 1000, self.decr_timebase) + + self.time_base_label = wx.StaticText (self, 1002, "") + self.update_timebase_label () + + ctrlbox.Add ((5,0) ,0) + # ctrlbox.Add (wx.StaticText (self, -1, "Horiz Scale: "), 0, wx.ALIGN_CENTER) + ctrlbox.Add (tb_left, 0, wx.EXPAND) + ctrlbox.Add (tb_right, 0, wx.EXPAND) + ctrlbox.Add (self.time_base_label, 0, wx.ALIGN_CENTER) + + ctrlbox.Add ((10,0) ,1) # stretchy space + + ctrlbox.Add (wx.StaticText (self, -1, "Trig: "), 0, wx.ALIGN_CENTER) + self.trig_chan_choice = wx.Choice (self, 1004, + choices = ['Ch1', 'Ch2', 'Ch3', 'Ch4']) + self.trig_chan_choice.SetToolTipString ("Select channel for trigger") + wx.EVT_CHOICE (self, 1004, self.trig_chan_choice_event) + ctrlbox.Add (self.trig_chan_choice, 0, wx.ALIGN_CENTER) + + self.trig_mode_choice = wx.Choice (self, 1005, + choices = ['Free', 'Auto', 'Norm']) + self.trig_mode_choice.SetSelection(1) + self.trig_mode_choice.SetToolTipString ("Select trigger slope or Auto (untriggered roll)") + wx.EVT_CHOICE (self, 1005, self.trig_mode_choice_event) + ctrlbox.Add (self.trig_mode_choice, 0, wx.ALIGN_CENTER) + + trig_level50 = wx.Button (self, 1006, "50%") + trig_level50.SetToolTipString ("Set trigger level to 50%") + wx.EVT_BUTTON (self, 1006, self.set_trig_level50) + ctrlbox.Add (trig_level50, 0, wx.EXPAND) + + run_stop = wx.Button (self, 1007, "Run/Stop") + run_stop.SetToolTipString ("Toggle Run/Stop mode") + wx.EVT_BUTTON (self, 1007, self.run_stop) + ctrlbox.Add (run_stop, 0, wx.EXPAND) + + ctrlbox.Add ((10, 0) ,1) # stretchy space + + ctrlbox.Add (wx.StaticText (self, -1, "Fmt: "), 0, wx.ALIGN_CENTER) + self.marker_choice = wx.Choice (self, 1002, choices = self._marker_choices) + self.marker_choice.SetToolTipString ("Select plotting with lines, pluses or dots") + wx.EVT_CHOICE (self, 1002, self.marker_choice_event) + ctrlbox.Add (self.marker_choice, 0, wx.ALIGN_CENTER) + + self.xy_choice = wx.Choice (self, 1003, choices = ['X:t', 'X:Y']) + self.xy_choice.SetToolTipString ("Select X vs time or X vs Y display") + wx.EVT_CHOICE (self, 1003, self.xy_choice_event) + ctrlbox.Add (self.xy_choice, 0, wx.ALIGN_CENTER) + + return ctrlbox + + _marker_choices = ['line', 'plus', 'dot'] + + def update_timebase_label (self): + time_per_div = self.info.get_time_per_div () + s = ' ' + eng_notation.num_to_str (time_per_div) + 's/div' + self.time_base_label.SetLabel (s) + + def decr_timebase (self, evt): + self.info.time_scale_cursor.prev () + self.update_timebase_label () + + def incr_timebase (self, evt): + self.info.time_scale_cursor.next () + self.update_timebase_label () + + def update_v_scale_label (self): + volts_per_div = self.info.get_volts_per_div () + s = ' ' + eng_notation.num_to_str (volts_per_div) + '/div' # Not V/div + self.v_scale_label.SetLabel (s) + + def decr_v_scale (self, evt): + self.info.v_scale_cursor.prev () + self.update_v_scale_label () + + def incr_v_scale (self, evt): + self.info.v_scale_cursor.next () + self.update_v_scale_label () + + def marker_choice_event (self, evt): + s = evt.GetString () + self.set_marker (s) + + def set_autorange(self, on): + if on: + self.v_scale_label.SetLabel(" (auto)") + self.info.autorange = True + self.autorange_checkbox.SetValue(True) + self.inc_v_button.Enable(False) + self.dec_v_button.Enable(False) + else: + if self.graph.y_range: + (l,u) = self.graph.y_range # found by autorange + self.info.v_scale_cursor.set_index_by_value((u-l)/8.0) + self.update_v_scale_label() + self.info.autorange = False + self.autorange_checkbox.SetValue(False) + self.inc_v_button.Enable(True) + self.dec_v_button.Enable(True) + + def autorange_checkbox_event(self, evt): + if evt.Checked(): + self.set_autorange(True) + else: + self.set_autorange(False) + + def set_marker (self, s): + self.info.set_marker (s) # set info for drawing routines + i = self.marker_choice.FindString (s) + assert i >= 0, "Hmmm, set_marker problem" + self.marker_choice.SetSelection (i) + + def set_format_line (self): + self.set_marker ('line') + + def set_format_dot (self): + self.set_marker ('dot') + + def set_format_plus (self): + self.set_marker ('plus') + + def xy_choice_event (self, evt): + s = evt.GetString () + self.info.xy = s == 'X:Y' + + def trig_chan_choice_event (self, evt): + s = evt.GetString () + ch = int (s[-1]) - 1 + self.info.scopesink.set_trigger_channel (ch) + + def trig_mode_choice_event (self, evt): + sink = self.info.scopesink + s = evt.GetString () + if s == 'Norm': + sink.set_trigger_mode (gr.gr_TRIG_MODE_NORM) + elif s == 'Auto': + sink.set_trigger_mode (gr.gr_TRIG_MODE_AUTO) + elif s == 'Free': + sink.set_trigger_mode (gr.gr_TRIG_MODE_FREE) + else: + assert 0, "Bad trig_mode_choice string" + + def set_trig_level50 (self, evt): + self.info.scopesink.set_trigger_level_auto () + + def run_stop (self, evt): + self.info.running = not self.info.running + + +class graph_window (plot.PlotCanvas): + + channel_colors = ['BLUE', 'RED', + 'CYAN', 'MAGENTA', 'GREEN', 'YELLOW'] + + def __init__ (self, info, parent, id = -1, + pos = wx.DefaultPosition, size = (640, 240), + style = wx.DEFAULT_FRAME_STYLE, name = ""): + plot.PlotCanvas.__init__ (self, parent, id, pos, size, style, name) + + self.SetXUseScopeTicks (True) + self.SetEnableGrid (True) + self.SetEnableZoom (True) + self.SetEnableLegend(True) + # self.SetBackgroundColour ('black') + + self.info = info; + self.y_range = None + self.x_range = None + self.avg_y_min = None + self.avg_y_max = None + self.avg_x_min = None + self.avg_x_max = None + + EVT_DATA_EVENT (self, self.format_data) + + self.input_watcher = input_watcher (info.msgq, self, info.frame_decim) + + def channel_color (self, ch): + return self.channel_colors[ch % len(self.channel_colors)] + + def format_data (self, evt): + if not self.info.running: + return + + if self.info.xy: + self.format_xy_data (evt) + return + + info = self.info + records = evt.data + nchannels = len (records) + npoints = len (records[0]) + + objects = [] + + Ts = 1.0 / (info.get_sample_rate () / info.get_decimation_rate ()) + x_vals = Ts * numpy.arange (-npoints/2, npoints/2) + + # preliminary clipping based on time axis here, instead of in graphics code + time_per_window = self.info.get_time_per_div () * 10 + n = int (time_per_window / Ts + 0.5) + n = n & ~0x1 # make even + n = max (2, min (n, npoints)) + + self.SetXUseScopeTicks (True) # use 10 divisions, no labels + + for ch in range(nchannels): + r = records[ch] + + # plot middle n points of record + + lb = npoints/2 - n/2 + ub = npoints/2 + n/2 + # points = zip (x_vals[lb:ub], r[lb:ub]) + points = numpy.zeros ((ub-lb, 2), numpy.float64) + points[:,0] = x_vals[lb:ub] + points[:,1] = r[lb:ub] + + m = info.get_marker () + if m == 'line': + objects.append (plot.PolyLine (points, + colour=self.channel_color (ch), + legend=('Ch%d' % (ch+1,)))) + else: + objects.append (plot.PolyMarker (points, + marker=m, + colour=self.channel_color (ch), + legend=('Ch%d' % (ch+1,)))) + + graphics = plot.PlotGraphics (objects, + title=self.info.title, + xLabel = '', yLabel = '') + + time_per_div = info.get_time_per_div () + x_range = (-5.0 * time_per_div, 5.0 * time_per_div) # ranges are tuples! + volts_per_div = info.get_volts_per_div () + if not self.info.autorange: + self.y_range = (-4.0 * volts_per_div, 4.0 * volts_per_div) + self.Draw (graphics, xAxis=x_range, yAxis=self.y_range) + self.update_y_range () # autorange to self.y_range + + + def format_xy_data (self, evt): + info = self.info + records = evt.data + nchannels = len (records) + npoints = len (records[0]) + + if nchannels < 2: + return + + objects = [] + # points = zip (records[0], records[1]) + points = numpy.zeros ((len(records[0]), 2), numpy.float32) + points[:,0] = records[0] + points[:,1] = records[1] + + self.SetXUseScopeTicks (False) + + m = info.get_marker () + if m == 'line': + objects.append (plot.PolyLine (points, + colour=self.channel_color (0))) + else: + objects.append (plot.PolyMarker (points, + marker=m, + colour=self.channel_color (0))) + + graphics = plot.PlotGraphics (objects, + title=self.info.title, + xLabel = 'I', yLabel = 'Q') + + self.Draw (graphics, xAxis=self.x_range, yAxis=self.y_range) + self.update_y_range () + self.update_x_range () + + + def update_y_range (self): + alpha = 1.0/25 + graphics = self.last_draw[0] + p1, p2 = graphics.boundingBox () # min, max points of graphics + + if self.avg_y_min: # prevent vertical scale from jumping abruptly --? + self.avg_y_min = p1[1] * alpha + self.avg_y_min * (1 - alpha) + self.avg_y_max = p2[1] * alpha + self.avg_y_max * (1 - alpha) + else: # initial guess + self.avg_y_min = p1[1] # -500.0 workaround, sometimes p1 is ~ 10^35 + self.avg_y_max = p2[1] # 500.0 + + self.y_range = self._axisInterval ('auto', self.avg_y_min, self.avg_y_max) + # print "p1 %s p2 %s y_min %s y_max %s y_range %s" \ + # % (p1, p2, self.avg_y_min, self.avg_y_max, self.y_range) + + + def update_x_range (self): + alpha = 1.0/25 + graphics = self.last_draw[0] + p1, p2 = graphics.boundingBox () # min, max points of graphics + + if self.avg_x_min: + self.avg_x_min = p1[0] * alpha + self.avg_x_min * (1 - alpha) + self.avg_x_max = p2[0] * alpha + self.avg_x_max * (1 - alpha) + else: + self.avg_x_min = p1[0] + self.avg_x_max = p2[0] + + self.x_range = self._axisInterval ('auto', self.avg_x_min, self.avg_x_max) + + +# ---------------------------------------------------------------- +# Stand-alone test application +# ---------------------------------------------------------------- + +class test_top_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + if len(argv) > 1: + frame_decim = int(argv[1]) + else: + frame_decim = 1 + + if len(argv) > 2: + v_scale = float(argv[2]) # start up at this v_scale value + else: + v_scale = None # start up in autorange mode, default + + if len(argv) > 3: + t_scale = float(argv[3]) # start up at this t_scale value + else: + t_scale = None # old behavior + + print "frame decim %s v_scale %s t_scale %s" % (frame_decim,v_scale,t_scale) + + input_rate = 1e6 + + # Generate a complex sinusoid + self.src0 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 25.1e3, 1e3) + + # We add this throttle block so that this demo doesn't suck down + # all the CPU available. You normally wouldn't use it... + self.thr = gr.throttle(gr.sizeof_gr_complex, input_rate) + + scope = scope_sink_c (panel,"Secret Data",sample_rate=input_rate, + frame_decim=frame_decim, + v_scale=v_scale, t_scale=t_scale) + vbox.Add (scope.win, 1, wx.EXPAND) + + # Ultimately this will be + # self.connect("src0 throttle scope") + self.connect(self.src0, self.thr, scope) + +def main (): + app = stdgui2.stdapp (test_top_block, "O'Scope Test App") + app.MainLoop () + +if __name__ == '__main__': + main () + +# ---------------------------------------------------------------- diff --git a/gr-wxgui/src/python/slider.py b/gr-wxgui/src/python/slider.py old mode 100755 new mode 100644 diff --git a/gr-wxgui/src/python/stdgui.py b/gr-wxgui/src/python/stdgui.py deleted file mode 100644 index 17873954..00000000 --- a/gr-wxgui/src/python/stdgui.py +++ /dev/null @@ -1,90 +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. -# - -'''A simple wx gui for GNU Radio applications''' - -import wx -import sys -from gnuradio import gr - - -class stdapp (wx.App): - def __init__ (self, flow_graph_maker, title="GNU Radio", nstatus=2): - self.flow_graph_maker = flow_graph_maker - self.title = title - self._nstatus = nstatus - # All our initialization must come before calling wx.App.__init__. - # OnInit is called from somewhere in the guts of __init__. - wx.App.__init__ (self, redirect=False) - - def OnInit (self): - frame = stdframe (self.flow_graph_maker, self.title, self._nstatus) - frame.Show (True) - self.SetTopWindow (frame) - return True - - -class stdframe (wx.Frame): - def __init__ (self, flow_graph_maker, title="GNU Radio", nstatus=2): - # print "stdframe.__init__" - wx.Frame.__init__(self, None, -1, title) - - self.CreateStatusBar (nstatus) - mainmenu = wx.MenuBar () - - menu = wx.Menu () - item = menu.Append (200, 'E&xit', 'Exit') - self.Bind (wx.EVT_MENU, self.OnCloseWindow, item) - mainmenu.Append (menu, "&File") - self.SetMenuBar (mainmenu) - - self.Bind (wx.EVT_CLOSE, self.OnCloseWindow) - self.panel = stdpanel (self, self, flow_graph_maker) - vbox = wx.BoxSizer(wx.VERTICAL) - vbox.Add(self.panel, 1, wx.EXPAND) - self.SetSizer(vbox) - self.SetAutoLayout(True) - vbox.Fit(self) - - def OnCloseWindow (self, event): - self.flow_graph().stop() - self.Destroy () - - def flow_graph (self): - return self.panel.fg - -class stdpanel (wx.Panel): - def __init__ (self, parent, frame, flow_graph_maker): - # print "stdpanel.__init__" - wx.Panel.__init__ (self, parent, -1) - self.frame = frame - - vbox = wx.BoxSizer (wx.VERTICAL) - self.fg = flow_graph_maker (frame, self, vbox, sys.argv) - self.SetSizer (vbox) - self.SetAutoLayout (True) - vbox.Fit (self) - - self.fg.start () - -class gui_flow_graph (gr.flow_graph): - def __init__ (self, *ignore): - gr.flow_graph.__init__ (self) diff --git a/gr-wxgui/src/python/stdgui2.py b/gr-wxgui/src/python/stdgui2.py new file mode 100644 index 00000000..e510f174 --- /dev/null +++ b/gr-wxgui/src/python/stdgui2.py @@ -0,0 +1,92 @@ +# +# 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. +# + +'''A simple wx gui for GNU Radio applications''' + +import wx +import sys +from gnuradio import gr + + +class stdapp (wx.App): + def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2): + self.top_block_maker = top_block_maker + self.title = title + self._nstatus = nstatus + # All our initialization must come before calling wx.App.__init__. + # OnInit is called from somewhere in the guts of __init__. + wx.App.__init__ (self, redirect=False) + + def OnInit (self): + frame = stdframe (self.top_block_maker, self.title, self._nstatus) + frame.Show (True) + self.SetTopWindow (frame) + return True + + +class stdframe (wx.Frame): + def __init__ (self, top_block_maker, title="GNU Radio", nstatus=2): + # print "stdframe.__init__" + wx.Frame.__init__(self, None, -1, title) + + self.CreateStatusBar (nstatus) + mainmenu = wx.MenuBar () + + menu = wx.Menu () + item = menu.Append (200, 'E&xit', 'Exit') + self.Bind (wx.EVT_MENU, self.OnCloseWindow, item) + mainmenu.Append (menu, "&File") + self.SetMenuBar (mainmenu) + + self.Bind (wx.EVT_CLOSE, self.OnCloseWindow) + self.panel = stdpanel (self, self, top_block_maker) + vbox = wx.BoxSizer(wx.VERTICAL) + vbox.Add(self.panel, 1, wx.EXPAND) + self.SetSizer(vbox) + self.SetAutoLayout(True) + vbox.Fit(self) + + def OnCloseWindow (self, event): + self.top_block().stop() + self.Destroy () + + def top_block (self): + return self.panel.top_block + +class stdpanel (wx.Panel): + def __init__ (self, parent, frame, top_block_maker): + # print "stdpanel.__init__" + wx.Panel.__init__ (self, parent, -1) + self.frame = frame + + vbox = wx.BoxSizer (wx.VERTICAL) + self.top_block = top_block_maker (frame, self, vbox, sys.argv) + self.SetSizer (vbox) + self.SetAutoLayout (True) + vbox.Fit (self) + + self.top_block.start () + +class std_top_block (gr.top_block): + def __init__ (self, parent, panel, vbox, argv): + # Call the hier_block2 constructor + # Top blocks have no inputs and outputs + gr.top_block.__init__(self, "std_top_block") diff --git a/gr-wxgui/src/python/waterfall_window.py b/gr-wxgui/src/python/waterfall_window.py new file mode 100644 index 00000000..77819b73 --- /dev/null +++ b/gr-wxgui/src/python/waterfall_window.py @@ -0,0 +1,316 @@ +# +# Copyright 2008 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-1`301, USA. +# + +################################################## +# Imports +################################################## +import plotter +import common +import wx +import numpy +import math +import pubsub +from constants import * +from gnuradio import gr #for gr.prefs +import forms + +################################################## +# Constants +################################################## +SLIDER_STEPS = 100 +AVG_ALPHA_MIN_EXP, AVG_ALPHA_MAX_EXP = -3, 0 +DEFAULT_FRAME_RATE = gr.prefs().get_long('wxgui', 'waterfall_rate', 30) +DEFAULT_WIN_SIZE = (600, 300) +DIV_LEVELS = (1, 2, 5, 10, 20) +MIN_DYNAMIC_RANGE, MAX_DYNAMIC_RANGE = 10, 200 +COLOR_MODES = ( + ('RGB1', 'rgb1'), + ('RGB2', 'rgb2'), + ('RGB3', 'rgb3'), + ('Gray', 'gray'), +) + +################################################## +# Waterfall window control panel +################################################## +class control_panel(wx.Panel): + """ + A control panel with wx widgits to control the plotter and fft block chain. + """ + + def __init__(self, parent): + """ + Create a new control panel. + @param parent the wx parent window + """ + self.parent = parent + wx.Panel.__init__(self, parent, style=wx.SUNKEN_BORDER) + control_box = wx.BoxSizer(wx.VERTICAL) + control_box.AddStretchSpacer() + options_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Options', + bold=True, orient=wx.VERTICAL, + ) + #average + forms.check_box( + sizer=options_box, parent=self, label='Average', + ps=parent, key=AVERAGE_KEY, + ) + avg_alpha_text = forms.static_text( + sizer=options_box, parent=self, label='Avg Alpha', + converter=forms.float_converter(lambda x: '%.4f'%x), + ps=parent, key=AVG_ALPHA_KEY, width=50, + ) + avg_alpha_slider = forms.log_slider( + sizer=options_box, parent=self, + min_exp=AVG_ALPHA_MIN_EXP, + max_exp=AVG_ALPHA_MAX_EXP, + num_steps=SLIDER_STEPS, + ps=parent, key=AVG_ALPHA_KEY, + ) + for widget in (avg_alpha_text, avg_alpha_slider): + parent.subscribe(AVERAGE_KEY, widget.Enable) + widget.Enable(parent[AVERAGE_KEY]) + #begin axes box + control_box.AddStretchSpacer() + axes_box = forms.static_box_sizer( + parent=self, sizer=control_box, label='Axes Options', + bold=True, orient=wx.VERTICAL, + ) + #num lines buttons + forms.incr_decr_buttons( + parent=self, sizer=axes_box, label='Time Scale', + on_incr=self._on_incr_time_scale, on_decr=self._on_decr_time_scale, + ) + #dyanmic range buttons + forms.incr_decr_buttons( + parent=self, sizer=axes_box, label='Dyn Range', + on_incr=self._on_incr_dynamic_range, on_decr=self._on_decr_dynamic_range, + ) + #ref lvl buttons + forms.incr_decr_buttons( + parent=self, sizer=axes_box, label='Ref Level', + on_incr=self._on_incr_ref_level, on_decr=self._on_decr_ref_level, + ) + #color mode + forms.drop_down( + parent=self, sizer=axes_box, width=100, + ps=parent, key=COLOR_MODE_KEY, label='Color', + choices=map(lambda x: x[1], COLOR_MODES), + labels=map(lambda x: x[0], COLOR_MODES), + ) + #autoscale + forms.single_button( + parent=self, sizer=axes_box, label='Autoscale', + callback=self.parent.autoscale, + ) + #clear + control_box.AddStretchSpacer() + forms.single_button( + parent=self, sizer=control_box, label='Clear', + callback=self._on_clear_button, + ) + #run/stop + forms.toggle_button( + sizer=control_box, parent=self, + true_label='Stop', false_label='Run', + ps=parent, key=RUNNING_KEY, + ) + #set sizer + self.SetSizerAndFit(control_box) + + ################################################## + # Event handlers + ################################################## + def _on_clear_button(self, event): + self.parent[NUM_LINES_KEY] = self.parent[NUM_LINES_KEY] + def _on_incr_dynamic_range(self, event): + self.parent[DYNAMIC_RANGE_KEY] = min(self.parent[DYNAMIC_RANGE_KEY] + 10, MAX_DYNAMIC_RANGE) + def _on_decr_dynamic_range(self, event): + self.parent[DYNAMIC_RANGE_KEY] = max(self.parent[DYNAMIC_RANGE_KEY] - 10, MIN_DYNAMIC_RANGE) + def _on_incr_ref_level(self, event): + self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] + self.parent[DYNAMIC_RANGE_KEY]*.1 + def _on_decr_ref_level(self, event): + self.parent[REF_LEVEL_KEY] = self.parent[REF_LEVEL_KEY] - self.parent[DYNAMIC_RANGE_KEY]*.1 + def _on_incr_time_scale(self, event): + old_rate = self.parent[FRAME_RATE_KEY] + self.parent[FRAME_RATE_KEY] *= 0.75 + if self.parent[FRAME_RATE_KEY] == old_rate: + self.parent[DECIMATION_KEY] += 1 + def _on_decr_time_scale(self, event): + old_rate = self.parent[FRAME_RATE_KEY] + self.parent[FRAME_RATE_KEY] *= 1.25 + if self.parent[FRAME_RATE_KEY] == old_rate: + self.parent[DECIMATION_KEY] -= 1 + +################################################## +# Waterfall window with plotter and control panel +################################################## +class waterfall_window(wx.Panel, pubsub.pubsub): + def __init__( + self, + parent, + controller, + size, + title, + real, + fft_size, + num_lines, + decimation_key, + baseband_freq, + sample_rate_key, + frame_rate_key, + dynamic_range, + ref_level, + average_key, + avg_alpha_key, + msg_key, + ): + pubsub.pubsub.__init__(self) + #setup + self.samples = list() + self.real = real + self.fft_size = fft_size + #proxy the keys + self.proxy(MSG_KEY, controller, msg_key) + self.proxy(DECIMATION_KEY, controller, decimation_key) + self.proxy(FRAME_RATE_KEY, controller, frame_rate_key) + self.proxy(AVERAGE_KEY, controller, average_key) + self.proxy(AVG_ALPHA_KEY, controller, avg_alpha_key) + self.proxy(SAMPLE_RATE_KEY, controller, sample_rate_key) + #init panel and plot + wx.Panel.__init__(self, parent, style=wx.SIMPLE_BORDER) + self.plotter = plotter.waterfall_plotter(self) + self.plotter.SetSize(wx.Size(*size)) + self.plotter.set_title(title) + self.plotter.enable_point_label(True) + self.plotter.enable_grid_lines(False) + #plotter listeners + self.subscribe(COLOR_MODE_KEY, self.plotter.set_color_mode) + self.subscribe(NUM_LINES_KEY, self.plotter.set_num_lines) + #initialize values + self[DYNAMIC_RANGE_KEY] = dynamic_range + self[NUM_LINES_KEY] = num_lines + self[Y_DIVS_KEY] = 8 + self[X_DIVS_KEY] = 8 #approximate + self[REF_LEVEL_KEY] = ref_level + self[BASEBAND_FREQ_KEY] = baseband_freq + self[COLOR_MODE_KEY] = COLOR_MODES[0][1] + self[RUNNING_KEY] = True + #setup the box with plot and controls + self.control_panel = control_panel(self) + main_box = wx.BoxSizer(wx.HORIZONTAL) + main_box.Add(self.plotter, 1, wx.EXPAND) + main_box.Add(self.control_panel, 0, wx.EXPAND) + self.SetSizerAndFit(main_box) + #register events + self.subscribe(MSG_KEY, self.handle_msg) + for key in ( + DECIMATION_KEY, SAMPLE_RATE_KEY, FRAME_RATE_KEY, + BASEBAND_FREQ_KEY, X_DIVS_KEY, Y_DIVS_KEY, NUM_LINES_KEY, + ): self.subscribe(key, self.update_grid) + #initial update + self.update_grid() + + def autoscale(self, *args): + """ + Autoscale the waterfall plot to the last frame. + Set the dynamic range and reference level. + Does not affect the current data in the waterfall. + """ + if not len(self.samples): return + #get the peak level (max of the samples) + peak_level = numpy.max(self.samples) + #get the noise floor (averge the smallest samples) + noise_floor = numpy.average(numpy.sort(self.samples)[:len(self.samples)/4]) + #padding + noise_floor -= abs(noise_floor)*.5 + peak_level += abs(peak_level)*.1 + #set the range and level + self[REF_LEVEL_KEY] = peak_level + self[DYNAMIC_RANGE_KEY] = peak_level - noise_floor + + def handle_msg(self, msg): + """ + Handle the message from the fft sink message queue. + If complex, reorder the fft samples so the negative bins come first. + If real, keep take only the positive bins. + Send the data to the plotter. + @param msg the fft array as a character array + """ + if not self[RUNNING_KEY]: return + #convert to floating point numbers + self.samples = samples = numpy.fromstring(msg, numpy.float32)[:self.fft_size] #only take first frame + num_samps = len(samples) + #reorder fft + if self.real: samples = samples[:num_samps/2] + else: samples = numpy.concatenate((samples[num_samps/2:], samples[:num_samps/2])) + #plot the fft + self.plotter.set_samples( + samples=samples, + minimum=self[REF_LEVEL_KEY] - self[DYNAMIC_RANGE_KEY], + maximum=self[REF_LEVEL_KEY], + ) + #update the plotter + self.plotter.update() + + def update_grid(self, *args): + """ + Update the plotter grid. + This update method is dependent on the variables below. + Determine the x and y axis grid parameters. + The x axis depends on sample rate, baseband freq, and x divs. + The y axis depends on y per div, y divs, and ref level. + """ + #grid parameters + sample_rate = self[SAMPLE_RATE_KEY] + frame_rate = self[FRAME_RATE_KEY] + baseband_freq = self[BASEBAND_FREQ_KEY] + num_lines = self[NUM_LINES_KEY] + y_divs = self[Y_DIVS_KEY] + x_divs = self[X_DIVS_KEY] + #determine best fitting x_per_div + if self.real: x_width = sample_rate/2.0 + else: x_width = sample_rate/1.0 + x_per_div = common.get_clean_num(x_width/x_divs) + #update the x grid + if self.real: + self.plotter.set_x_grid( + baseband_freq, + baseband_freq + sample_rate/2.0, + x_per_div, True, + ) + else: + self.plotter.set_x_grid( + baseband_freq - sample_rate/2.0, + baseband_freq + sample_rate/2.0, + x_per_div, True, + ) + #update x units + self.plotter.set_x_label('Frequency', 'Hz') + #update y grid + duration = float(num_lines)/frame_rate + y_per_div = common.get_clean_num(duration/y_divs) + self.plotter.set_y_grid(0, duration, y_per_div, True) + #update y units + self.plotter.set_y_label('Time', 's') + #update plotter + self.plotter.update() diff --git a/gr-wxgui/src/python/waterfallsink.py b/gr-wxgui/src/python/waterfallsink.py deleted file mode 100755 index b9872808..00000000 --- a/gr-wxgui/src/python/waterfallsink.py +++ /dev/null @@ -1,475 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2003,2004,2005 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 import gr, gru, window -from gnuradio.wxgui import stdgui -import wx -import gnuradio.wxgui.plot as plot -import Numeric -import os -import threading -import math - -default_fftsink_size = (640,240) -default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15) - -class waterfall_sink_base(object): - def __init__(self, input_is_real=False, baseband_freq=0, - sample_rate=1, fft_size=512, - fft_rate=default_fft_rate, - average=False, avg_alpha=None, title=''): - - # initialize common attributes - self.baseband_freq = baseband_freq - self.sample_rate = sample_rate - self.fft_size = fft_size - self.fft_rate = fft_rate - self.average = average - if avg_alpha is None: - self.avg_alpha = 2.0 / fft_rate - else: - self.avg_alpha = avg_alpha - self.title = title - self.input_is_real = input_is_real - self.msgq = gr.msg_queue(2) # queue up to 2 messages - - def set_average(self, average): - self.average = average - if average: - self.avg.set_taps(self.avg_alpha) - else: - self.avg.set_taps(1.0) - - def set_avg_alpha(self, avg_alpha): - self.avg_alpha = avg_alpha - - def set_baseband_freq(self, baseband_freq): - self.baseband_freq = baseband_freq - - def set_sample_rate(self, sample_rate): - self.sample_rate = sample_rate - self._set_n() - - def _set_n(self): - self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) - -class waterfall_sink_f(gr.hier_block, waterfall_sink_base): - def __init__(self, fg, parent, baseband_freq=0, - y_per_div=10, ref_level=50, sample_rate=1, fft_size=512, - fft_rate=default_fft_rate, average=False, avg_alpha=None, - title='', size=default_fftsink_size): - - waterfall_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq, - sample_rate=sample_rate, fft_size=fft_size, - fft_rate=fft_rate, - average=average, avg_alpha=avg_alpha, title=title) - - s2p = gr.serial_to_parallel(gr.sizeof_float, self.fft_size) - self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size, - max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) - mywindow = window.blackmanharris(self.fft_size) - fft = gr.fft_vfc(self.fft_size, True, mywindow) - c2mag = gr.complex_to_mag(self.fft_size) - self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) - log = gr.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size)) - sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) - - fg.connect (s2p, self.one_in_n, fft, c2mag, self.avg, log, sink) - gr.hier_block.__init__(self, fg, s2p, sink) - - self.win = waterfall_window(self, parent, size=size) - self.set_average(self.average) - - -class waterfall_sink_c(gr.hier_block, waterfall_sink_base): - def __init__(self, fg, parent, baseband_freq=0, - y_per_div=10, ref_level=50, sample_rate=1, fft_size=512, - fft_rate=default_fft_rate, average=False, avg_alpha=None, - title='', size=default_fftsink_size): - - waterfall_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq, - sample_rate=sample_rate, fft_size=fft_size, - fft_rate=fft_rate, - average=average, avg_alpha=avg_alpha, title=title) - - s2p = gr.serial_to_parallel(gr.sizeof_gr_complex, self.fft_size) - self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size, - max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) - - mywindow = window.blackmanharris(self.fft_size) - fft = gr.fft_vcc(self.fft_size, True, mywindow) - c2mag = gr.complex_to_mag(self.fft_size) - self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) - log = gr.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size)) - sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) - - fg.connect(s2p, self.one_in_n, fft, c2mag, self.avg, log, sink) - gr.hier_block.__init__(self, fg, s2p, sink) - - self.win = waterfall_window(self, parent, size=size) - self.set_average(self.average) - - -# ------------------------------------------------------------------------ - -myDATA_EVENT = wx.NewEventType() -EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0) - - -class DataEvent(wx.PyEvent): - def __init__(self, data): - wx.PyEvent.__init__(self) - self.SetEventType (myDATA_EVENT) - self.data = data - - def Clone (self): - self.__class__ (self.GetId()) - - -class input_watcher (threading.Thread): - def __init__ (self, msgq, fft_size, event_receiver, **kwds): - threading.Thread.__init__ (self, **kwds) - self.setDaemon (1) - self.msgq = msgq - self.fft_size = fft_size - self.event_receiver = event_receiver - self.keep_running = True - self.start () - - def run (self): - while (self.keep_running): - msg = self.msgq.delete_head() # blocking read of message queue - itemsize = int(msg.arg1()) - nitems = int(msg.arg2()) - - s = msg.to_string() # get the body of the msg as a string - - # There may be more than one FFT frame in the message. - # If so, we take only the last one - if nitems > 1: - start = itemsize * (nitems - 1) - s = s[start:start+itemsize] - - complex_data = Numeric.fromstring (s, Numeric.Float32) - de = DataEvent (complex_data) - wx.PostEvent (self.event_receiver, de) - del de - - -class waterfall_window (wx.Panel): - def __init__ (self, fftsink, parent, id = -1, - pos = wx.DefaultPosition, size = wx.DefaultSize, - style = wx.DEFAULT_FRAME_STYLE, name = ""): - wx.Panel.__init__(self, parent, id, pos, size, style, name) - - self.fftsink = fftsink - self.bm = wx.EmptyBitmap(self.fftsink.fft_size, 300, -1) - - self.scale_factor = 5.0 # FIXME should autoscale, or set this - - dc1 = wx.MemoryDC() - dc1.SelectObject(self.bm) - dc1.Clear() - - self.pens = self.make_pens() - - wx.EVT_PAINT( self, self.OnPaint ) - wx.EVT_CLOSE (self, self.on_close_window) - EVT_DATA_EVENT (self, self.set_data) - - self.build_popup_menu() - - wx.EVT_CLOSE (self, self.on_close_window) - self.Bind(wx.EVT_RIGHT_UP, self.on_right_click) - - self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self) - - - def on_close_window (self, event): - print "waterfall_window: on_close_window" - self.keep_running = False - - def const_list(self,const,len): - return [const] * len - - def make_colormap(self): - r = [] - r.extend(self.const_list(0,96)) - r.extend(range(0,255,4)) - r.extend(self.const_list(255,64)) - r.extend(range(255,128,-4)) - - g = [] - g.extend(self.const_list(0,32)) - g.extend(range(0,255,4)) - g.extend(self.const_list(255,64)) - g.extend(range(255,0,-4)) - g.extend(self.const_list(0,32)) - - b = range(128,255,4) - b.extend(self.const_list(255,64)) - b.extend(range(255,0,-4)) - b.extend(self.const_list(0,96)) - return (r,g,b) - - def make_pens(self): - (r,g,b) = self.make_colormap() - pens = [] - for i in range(0,256): - colour = wx.Colour(r[i], g[i], b[i]) - pens.append( wx.Pen(colour, 2, wx.SOLID)) - return pens - - def OnPaint(self, event): - dc = wx.PaintDC(self) - self.DoDrawing(dc) - - def DoDrawing(self, dc=None): - if dc is None: - dc = wx.ClientDC(self) - dc.DrawBitmap(self.bm, 0, 0, False ) - - - def const_list(self,const,len): - a = [const] - for i in range(1,len): - a.append(const) - return a - - def make_colormap(self): - r = [] - r.extend(self.const_list(0,96)) - r.extend(range(0,255,4)) - r.extend(self.const_list(255,64)) - r.extend(range(255,128,-4)) - - g = [] - g.extend(self.const_list(0,32)) - g.extend(range(0,255,4)) - g.extend(self.const_list(255,64)) - g.extend(range(255,0,-4)) - g.extend(self.const_list(0,32)) - - b = range(128,255,4) - b.extend(self.const_list(255,64)) - b.extend(range(255,0,-4)) - b.extend(self.const_list(0,96)) - return (r,g,b) - - def set_data (self, evt): - dB = evt.data - L = len (dB) - - dc1 = wx.MemoryDC() - dc1.SelectObject(self.bm) - dc1.Blit(0,1,self.fftsink.fft_size,300,dc1,0,0,wx.COPY,False,-1,-1) - - x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq)) - if x >= 1e9: - sf = 1e-9 - units = "GHz" - elif x >= 1e6: - sf = 1e-6 - units = "MHz" - else: - sf = 1e-3 - units = "kHz" - - - if self.fftsink.input_is_real: # only plot 1/2 the points - d_max = L/2 - p_width = 2 - else: - d_max = L/2 - p_width = 1 - - scale_factor = self.scale_factor - if self.fftsink.input_is_real: # real fft - for x_pos in range(0, d_max): - value = int(dB[x_pos] * scale_factor) - value = min(255, max(0, value)) - dc1.SetPen(self.pens[value]) - dc1.DrawRectangle(x_pos*p_width, 0, p_width, 1) - else: # complex fft - for x_pos in range(0, d_max): # positive freqs - value = int(dB[x_pos] * scale_factor) - value = min(255, max(0, value)) - dc1.SetPen(self.pens[value]) - dc1.DrawRectangle(x_pos*p_width + d_max, 0, p_width, 1) - for x_pos in range(0 , d_max): # negative freqs - value = int(dB[x_pos+d_max] * scale_factor) - value = min(255, max(0, value)) - dc1.SetPen(self.pens[value]) - dc1.DrawRectangle(x_pos*p_width, 0, p_width, 1) - - self.DoDrawing (None) - - def on_average(self, evt): - # print "on_average" - self.fftsink.set_average(evt.IsChecked()) - - def on_right_click(self, event): - menu = self.popup_menu - for id, pred in self.checkmarks.items(): - item = menu.FindItemById(id) - item.Check(pred()) - self.PopupMenu(menu, event.GetPosition()) - - - def build_popup_menu(self): - self.id_incr_ref_level = wx.NewId() - self.id_decr_ref_level = wx.NewId() - self.id_incr_y_per_div = wx.NewId() - self.id_decr_y_per_div = wx.NewId() - self.id_y_per_div_1 = wx.NewId() - self.id_y_per_div_2 = wx.NewId() - self.id_y_per_div_5 = wx.NewId() - self.id_y_per_div_10 = wx.NewId() - self.id_y_per_div_20 = wx.NewId() - self.id_average = wx.NewId() - - self.Bind(wx.EVT_MENU, self.on_average, id=self.id_average) - #self.Bind(wx.EVT_MENU, self.on_incr_ref_level, id=self.id_incr_ref_level) - #self.Bind(wx.EVT_MENU, self.on_decr_ref_level, id=self.id_decr_ref_level) - #self.Bind(wx.EVT_MENU, self.on_incr_y_per_div, id=self.id_incr_y_per_div) - #self.Bind(wx.EVT_MENU, self.on_decr_y_per_div, id=self.id_decr_y_per_div) - #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_1) - #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_2) - #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_5) - #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_10) - #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_20) - - - # make a menu - menu = wx.Menu() - self.popup_menu = menu - menu.AppendCheckItem(self.id_average, "Average") - # menu.Append(self.id_incr_ref_level, "Incr Ref Level") - # menu.Append(self.id_decr_ref_level, "Decr Ref Level") - # menu.Append(self.id_incr_y_per_div, "Incr dB/div") - # menu.Append(self.id_decr_y_per_div, "Decr dB/div") - # menu.AppendSeparator() - # we'd use RadioItems for these, but they're not supported on Mac - #menu.AppendCheckItem(self.id_y_per_div_1, "1 dB/div") - #menu.AppendCheckItem(self.id_y_per_div_2, "2 dB/div") - #menu.AppendCheckItem(self.id_y_per_div_5, "5 dB/div") - #menu.AppendCheckItem(self.id_y_per_div_10, "10 dB/div") - #menu.AppendCheckItem(self.id_y_per_div_20, "20 dB/div") - - self.checkmarks = { - self.id_average : lambda : self.fftsink.average - #self.id_y_per_div_1 : lambda : self.fftsink.y_per_div == 1, - #self.id_y_per_div_2 : lambda : self.fftsink.y_per_div == 2, - #self.id_y_per_div_5 : lambda : self.fftsink.y_per_div == 5, - #self.id_y_per_div_10 : lambda : self.fftsink.y_per_div == 10, - #self.id_y_per_div_20 : lambda : self.fftsink.y_per_div == 20, - } - - -def next_up(v, seq): - """ - Return the first item in seq that is > v. - """ - for s in seq: - if s > v: - return s - return v - -def next_down(v, seq): - """ - Return the last item in seq that is < v. - """ - rseq = list(seq[:]) - rseq.reverse() - - for s in rseq: - if s < v: - return s - return v - - -# ---------------------------------------------------------------- -# Deprecated interfaces -# ---------------------------------------------------------------- - -# returns (block, win). -# block requires a single input stream of float -# win is a subclass of wxWindow - -def make_waterfall_sink_f(fg, parent, title, fft_size, input_rate): - - block = waterfall_sink_f(fg, parent, title=title, fft_size=fft_size, - sample_rate=input_rate) - return (block, block.win) - -# returns (block, win). -# block requires a single input stream of gr_complex -# win is a subclass of wxWindow - -def make_waterfall_sink_c(fg, parent, title, fft_size, input_rate): - block = waterfall_sink_c(fg, parent, title=title, fft_size=fft_size, - sample_rate=input_rate) - return (block, block.win) - - -# ---------------------------------------------------------------- -# Standalone test app -# ---------------------------------------------------------------- - -class test_app_flow_graph (stdgui.gui_flow_graph): - def __init__(self, frame, panel, vbox, argv): - stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv) - - fft_size = 512 - - # build our flow graph - input_rate = 20.000e3 - - # Generate a complex sinusoid - src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) - #src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) - - # We add these throttle blocks so that this demo doesn't - # suck down all the CPU available. Normally you wouldn't use these. - thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) - - sink1 = waterfall_sink_c (self, panel, title="Complex Data", fft_size=fft_size, - sample_rate=input_rate, baseband_freq=100e3) - vbox.Add (sink1.win, 1, wx.EXPAND) - self.connect (src1, thr1, sink1) - - # generate a real sinusoid - src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) - #src2 = gr.sig_source_f (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) - thr2 = gr.throttle(gr.sizeof_float, input_rate) - sink2 = waterfall_sink_f (self, panel, title="Real Data", fft_size=fft_size, - sample_rate=input_rate, baseband_freq=100e3) - vbox.Add (sink2.win, 1, wx.EXPAND) - self.connect (src2, thr2, sink2) - -def main (): - app = stdgui.stdapp (test_app_flow_graph, - "Waterfall Sink Test App") - app.MainLoop () - -if __name__ == '__main__': - main () diff --git a/gr-wxgui/src/python/waterfallsink2.py b/gr-wxgui/src/python/waterfallsink2.py new file mode 100644 index 00000000..0b876fc3 --- /dev/null +++ b/gr-wxgui/src/python/waterfallsink2.py @@ -0,0 +1,41 @@ +# +# Copyright 2008,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. +# + +from gnuradio import gr + +p = gr.prefs() +style = p.get_string('wxgui', 'style', 'auto') + +if style == 'auto' or style == 'gl': + try: + import wx.glcanvas + from OpenGL.GL import * + from waterfallsink_gl import waterfall_sink_f, waterfall_sink_c + except ImportError: + if style == 'gl': + raise RuntimeError("Unable to import OpenGL. Are Python wrappers for OpenGL installed?") + else: + # Fall backto non-gl sinks + from waterfallsink_nongl import waterfall_sink_f, waterfall_sink_c +elif style == 'nongl': + from waterfallsink_nongl import waterfall_sink_f, waterfall_sink_c +else: + raise RuntimeError("Unknown wxgui style") diff --git a/gr-wxgui/src/python/waterfallsink_gl.py b/gr-wxgui/src/python/waterfallsink_gl.py new file mode 100644 index 00000000..2d4c959f --- /dev/null +++ b/gr-wxgui/src/python/waterfallsink_gl.py @@ -0,0 +1,168 @@ +# +# Copyright 2008 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. +# + +################################################## +# Imports +################################################## +import waterfall_window +import common +from gnuradio import gr, blks2 +from pubsub import pubsub +from constants import * + +################################################## +# Waterfall sink block (wrapper for old wxgui) +################################################## +class _waterfall_sink_base(gr.hier_block2): + """ + An fft block with real/complex inputs and a gui window. + """ + + def __init__( + self, + parent, + baseband_freq=0, + ref_level=50, + sample_rate=1, + fft_size=512, + fft_rate=waterfall_window.DEFAULT_FRAME_RATE, + average=False, + avg_alpha=None, + title='', + size=waterfall_window.DEFAULT_WIN_SIZE, + ref_scale=2.0, + dynamic_range=80, + num_lines=256, + **kwargs #do not end with a comma + ): + #ensure avg alpha + if avg_alpha is None: avg_alpha = 2.0/fft_rate + #init + gr.hier_block2.__init__( + self, + "waterfall_sink", + gr.io_signature(1, 1, self._item_size), + gr.io_signature(0, 0, 0), + ) + #blocks + fft = self._fft_chain( + sample_rate=sample_rate, + fft_size=fft_size, + frame_rate=fft_rate, + ref_scale=ref_scale, + avg_alpha=avg_alpha, + average=average, + ) + msgq = gr.msg_queue(2) + sink = gr.message_sink(gr.sizeof_float*fft_size, msgq, True) + #connect + self.connect(self, fft, sink) + #controller + self.controller = pubsub() + self.controller.subscribe(AVERAGE_KEY, fft.set_average) + self.controller.publish(AVERAGE_KEY, fft.average) + self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha) + self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha) + self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate) + self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate) + self.controller.subscribe(DECIMATION_KEY, fft.set_decimation) + self.controller.publish(DECIMATION_KEY, fft.decimation) + self.controller.subscribe(FRAME_RATE_KEY, fft.set_vec_rate) + self.controller.publish(FRAME_RATE_KEY, fft.frame_rate) + #start input watcher + common.input_watcher(msgq, self.controller, MSG_KEY) + #create window + self.win = waterfall_window.waterfall_window( + parent=parent, + controller=self.controller, + size=size, + title=title, + real=self._real, + fft_size=fft_size, + num_lines=num_lines, + baseband_freq=baseband_freq, + decimation_key=DECIMATION_KEY, + sample_rate_key=SAMPLE_RATE_KEY, + frame_rate_key=FRAME_RATE_KEY, + dynamic_range=dynamic_range, + ref_level=ref_level, + average_key=AVERAGE_KEY, + avg_alpha_key=AVG_ALPHA_KEY, + msg_key=MSG_KEY, + ) + common.register_access_methods(self, self.win) + setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS + +class waterfall_sink_f(_waterfall_sink_base): + _fft_chain = blks2.logpwrfft_f + _item_size = gr.sizeof_float + _real = True + +class waterfall_sink_c(_waterfall_sink_base): + _fft_chain = blks2.logpwrfft_c + _item_size = gr.sizeof_gr_complex + _real = False + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +import wx +from gnuradio.wxgui import stdgui2 + +class test_top_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + fft_size = 512 + + # build our flow graph + input_rate = 20.000e3 + + # Generate a complex sinusoid + self.src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) + #src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) + + # We add these throttle blocks so that this demo doesn't + # suck down all the CPU available. Normally you wouldn't use these. + self.thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) + + sink1 = waterfall_sink_c (panel, title="Complex Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=100e3) + self.connect(self.src1, self.thr1, sink1) + vbox.Add (sink1.win, 1, wx.EXPAND) + + # generate a real sinusoid + self.src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) + self.thr2 = gr.throttle(gr.sizeof_float, input_rate) + sink2 = waterfall_sink_f (panel, title="Real Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=100e3) + self.connect(self.src2, self.thr2, sink2) + vbox.Add (sink2.win, 1, wx.EXPAND) + + +def main (): + app = stdgui2.stdapp (test_top_block, "Waterfall Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () + diff --git a/gr-wxgui/src/python/waterfallsink_nongl.py b/gr-wxgui/src/python/waterfallsink_nongl.py new file mode 100644 index 00000000..bb478c7c --- /dev/null +++ b/gr-wxgui/src/python/waterfallsink_nongl.py @@ -0,0 +1,428 @@ +#!/usr/bin/env python +# +# Copyright 2003,2004,2005,2007,2008 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 import gr, gru, window +from gnuradio.wxgui import stdgui2 +import wx +import gnuradio.wxgui.plot as plot +import numpy +import os +import math + +default_fftsink_size = (640,240) +default_fft_rate = gr.prefs().get_long('wxgui', 'fft_rate', 15) + +class waterfall_sink_base(object): + def __init__(self, input_is_real=False, baseband_freq=0, + sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, + average=False, avg_alpha=None, title=''): + + # initialize common attributes + self.baseband_freq = baseband_freq + self.sample_rate = sample_rate + self.fft_size = fft_size + self.fft_rate = fft_rate + self.average = average + if avg_alpha is None: + self.avg_alpha = 2.0 / fft_rate + else: + self.avg_alpha = avg_alpha + self.title = title + self.input_is_real = input_is_real + self.msgq = gr.msg_queue(2) # queue up to 2 messages + + def set_average(self, average): + self.average = average + if average: + self.avg.set_taps(self.avg_alpha) + else: + self.avg.set_taps(1.0) + + def set_avg_alpha(self, avg_alpha): + self.avg_alpha = avg_alpha + + def set_baseband_freq(self, baseband_freq): + self.baseband_freq = baseband_freq + + def set_sample_rate(self, sample_rate): + self.sample_rate = sample_rate + self._set_n() + + def _set_n(self): + self.one_in_n.set_n(max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + +class waterfall_sink_f(gr.hier_block2, waterfall_sink_base): + def __init__(self, parent, baseband_freq=0, + y_per_div=10, ref_level=50, sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, average=False, avg_alpha=None, + title='', size=default_fftsink_size): + + gr.hier_block2.__init__(self, "waterfall_sink_f", + gr.io_signature(1, 1, gr.sizeof_float), + gr.io_signature(0,0,0)) + + waterfall_sink_base.__init__(self, input_is_real=True, baseband_freq=baseband_freq, + sample_rate=sample_rate, fft_size=fft_size, + fft_rate=fft_rate, + average=average, avg_alpha=avg_alpha, title=title) + + self.s2p = gr.serial_to_parallel(gr.sizeof_float, self.fft_size) + self.one_in_n = gr.keep_one_in_n(gr.sizeof_float * self.fft_size, + max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + + mywindow = window.blackmanharris(self.fft_size) + self.fft = gr.fft_vfc(self.fft_size, True, mywindow) + self.c2mag = gr.complex_to_mag(self.fft_size) + self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) + self.log = gr.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size)) + self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) + self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, self.avg, self.log, self.sink) + + self.win = waterfall_window(self, parent, size=size) + self.set_average(self.average) + + +class waterfall_sink_c(gr.hier_block2, waterfall_sink_base): + def __init__(self, parent, baseband_freq=0, + y_per_div=10, ref_level=50, sample_rate=1, fft_size=512, + fft_rate=default_fft_rate, average=False, avg_alpha=None, + title='', size=default_fftsink_size): + + gr.hier_block2.__init__(self, "waterfall_sink_f", + gr.io_signature(1, 1, gr.sizeof_gr_complex), + gr.io_signature(0,0,0)) + + waterfall_sink_base.__init__(self, input_is_real=False, baseband_freq=baseband_freq, + sample_rate=sample_rate, fft_size=fft_size, + fft_rate=fft_rate, + average=average, avg_alpha=avg_alpha, title=title) + + self.s2p = gr.serial_to_parallel(gr.sizeof_gr_complex, self.fft_size) + self.one_in_n = gr.keep_one_in_n(gr.sizeof_gr_complex * self.fft_size, + max(1, int(self.sample_rate/self.fft_size/self.fft_rate))) + + mywindow = window.blackmanharris(self.fft_size) + self.fft = gr.fft_vcc(self.fft_size, True, mywindow) + self.c2mag = gr.complex_to_mag(self.fft_size) + self.avg = gr.single_pole_iir_filter_ff(1.0, self.fft_size) + self.log = gr.nlog10_ff(20, self.fft_size, -20*math.log10(self.fft_size)) + self.sink = gr.message_sink(gr.sizeof_float * self.fft_size, self.msgq, True) + self.connect(self, self.s2p, self.one_in_n, self.fft, self.c2mag, self.avg, self.log, self.sink) + + self.win = waterfall_window(self, parent, size=size) + self.set_average(self.average) + + +# ------------------------------------------------------------------------ + +myDATA_EVENT = wx.NewEventType() +EVT_DATA_EVENT = wx.PyEventBinder (myDATA_EVENT, 0) + + +class DataEvent(wx.PyEvent): + def __init__(self, data): + wx.PyEvent.__init__(self) + self.SetEventType (myDATA_EVENT) + self.data = data + + def Clone (self): + self.__class__ (self.GetId()) + +class input_watcher (gru.msgq_runner): + def __init__ (self, msgq, fft_size, event_receiver, **kwds): + self.fft_size = fft_size + self.event_receiver = event_receiver + gru.msgq_runner.__init__(self, msgq, self.handle_msg) + + def handle_msg(self, msg): + itemsize = int(msg.arg1()) + nitems = int(msg.arg2()) + + s = msg.to_string() # get the body of the msg as a string + + # There may be more than one FFT frame in the message. + # If so, we take only the last one + if nitems > 1: + start = itemsize * (nitems - 1) + s = s[start:start+itemsize] + + complex_data = numpy.fromstring (s, numpy.float32) + de = DataEvent (complex_data) + wx.PostEvent (self.event_receiver, de) + del de + +class waterfall_window (wx.Panel): + def __init__ (self, fftsink, parent, id = -1, + pos = wx.DefaultPosition, size = wx.DefaultSize, + style = wx.DEFAULT_FRAME_STYLE, name = ""): + wx.Panel.__init__(self, parent, id, pos, size, style, name) + self.set_baseband_freq = fftsink.set_baseband_freq + self.fftsink = fftsink + self.bm = wx.EmptyBitmap(self.fftsink.fft_size, 300, -1) + + self.scale_factor = 5.0 # FIXME should autoscale, or set this + + dc1 = wx.MemoryDC() + dc1.SelectObject(self.bm) + dc1.Clear() + + self.pens = self.make_pens() + + wx.EVT_PAINT( self, self.OnPaint ) + wx.EVT_CLOSE (self, self.on_close_window) + EVT_DATA_EVENT (self, self.set_data) + + self.build_popup_menu() + + wx.EVT_CLOSE (self, self.on_close_window) + self.Bind(wx.EVT_RIGHT_UP, self.on_right_click) + + self.input_watcher = input_watcher(fftsink.msgq, fftsink.fft_size, self) + + + def on_close_window (self, event): + print "waterfall_window: on_close_window" + self.keep_running = False + + def const_list(self,const,len): + return [const] * len + + def make_colormap(self): + r = [] + r.extend(self.const_list(0,96)) + r.extend(range(0,255,4)) + r.extend(self.const_list(255,64)) + r.extend(range(255,128,-4)) + + g = [] + g.extend(self.const_list(0,32)) + g.extend(range(0,255,4)) + g.extend(self.const_list(255,64)) + g.extend(range(255,0,-4)) + g.extend(self.const_list(0,32)) + + b = range(128,255,4) + b.extend(self.const_list(255,64)) + b.extend(range(255,0,-4)) + b.extend(self.const_list(0,96)) + return (r,g,b) + + def make_pens(self): + (r,g,b) = self.make_colormap() + pens = [] + for i in range(0,256): + colour = wx.Colour(r[i], g[i], b[i]) + pens.append( wx.Pen(colour, 2, wx.SOLID)) + return pens + + def OnPaint(self, event): + dc = wx.PaintDC(self) + self.DoDrawing(dc) + + def DoDrawing(self, dc=None): + if dc is None: + dc = wx.ClientDC(self) + dc.DrawBitmap(self.bm, 0, 0, False ) + + + def const_list(self,const,len): + a = [const] + for i in range(1,len): + a.append(const) + return a + + + def set_data (self, evt): + dB = evt.data + L = len (dB) + + dc1 = wx.MemoryDC() + dc1.SelectObject(self.bm) + dc1.Blit(0,1,self.fftsink.fft_size,300,dc1,0,0,wx.COPY,False,-1,-1) + + x = max(abs(self.fftsink.sample_rate), abs(self.fftsink.baseband_freq)) + if x >= 1e9: + sf = 1e-9 + units = "GHz" + elif x >= 1e6: + sf = 1e-6 + units = "MHz" + else: + sf = 1e-3 + units = "kHz" + + + if self.fftsink.input_is_real: # only plot 1/2 the points + d_max = L/2 + p_width = 2 + else: + d_max = L/2 + p_width = 1 + + scale_factor = self.scale_factor + if self.fftsink.input_is_real: # real fft + for x_pos in range(0, d_max): + value = int(dB[x_pos] * scale_factor) + value = min(255, max(0, value)) + dc1.SetPen(self.pens[value]) + dc1.DrawRectangle(x_pos*p_width, 0, p_width, 2) + else: # complex fft + for x_pos in range(0, d_max): # positive freqs + value = int(dB[x_pos] * scale_factor) + value = min(255, max(0, value)) + dc1.SetPen(self.pens[value]) + dc1.DrawRectangle(x_pos*p_width + d_max, 0, p_width, 2) + for x_pos in range(0 , d_max): # negative freqs + value = int(dB[x_pos+d_max] * scale_factor) + value = min(255, max(0, value)) + dc1.SetPen(self.pens[value]) + dc1.DrawRectangle(x_pos*p_width, 0, p_width, 2) + + del dc1 + self.DoDrawing (None) + + def on_average(self, evt): + # print "on_average" + self.fftsink.set_average(evt.IsChecked()) + + def on_right_click(self, event): + menu = self.popup_menu + for id, pred in self.checkmarks.items(): + item = menu.FindItemById(id) + item.Check(pred()) + self.PopupMenu(menu, event.GetPosition()) + + + def build_popup_menu(self): + self.id_incr_ref_level = wx.NewId() + self.id_decr_ref_level = wx.NewId() + self.id_incr_y_per_div = wx.NewId() + self.id_decr_y_per_div = wx.NewId() + self.id_y_per_div_1 = wx.NewId() + self.id_y_per_div_2 = wx.NewId() + self.id_y_per_div_5 = wx.NewId() + self.id_y_per_div_10 = wx.NewId() + self.id_y_per_div_20 = wx.NewId() + self.id_average = wx.NewId() + + self.Bind(wx.EVT_MENU, self.on_average, id=self.id_average) + #self.Bind(wx.EVT_MENU, self.on_incr_ref_level, id=self.id_incr_ref_level) + #self.Bind(wx.EVT_MENU, self.on_decr_ref_level, id=self.id_decr_ref_level) + #self.Bind(wx.EVT_MENU, self.on_incr_y_per_div, id=self.id_incr_y_per_div) + #self.Bind(wx.EVT_MENU, self.on_decr_y_per_div, id=self.id_decr_y_per_div) + #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_1) + #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_2) + #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_5) + #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_10) + #self.Bind(wx.EVT_MENU, self.on_y_per_div, id=self.id_y_per_div_20) + + + # make a menu + menu = wx.Menu() + self.popup_menu = menu + menu.AppendCheckItem(self.id_average, "Average") + # menu.Append(self.id_incr_ref_level, "Incr Ref Level") + # menu.Append(self.id_decr_ref_level, "Decr Ref Level") + # menu.Append(self.id_incr_y_per_div, "Incr dB/div") + # menu.Append(self.id_decr_y_per_div, "Decr dB/div") + # menu.AppendSeparator() + # we'd use RadioItems for these, but they're not supported on Mac + #menu.AppendCheckItem(self.id_y_per_div_1, "1 dB/div") + #menu.AppendCheckItem(self.id_y_per_div_2, "2 dB/div") + #menu.AppendCheckItem(self.id_y_per_div_5, "5 dB/div") + #menu.AppendCheckItem(self.id_y_per_div_10, "10 dB/div") + #menu.AppendCheckItem(self.id_y_per_div_20, "20 dB/div") + + self.checkmarks = { + self.id_average : lambda : self.fftsink.average + #self.id_y_per_div_1 : lambda : self.fftsink.y_per_div == 1, + #self.id_y_per_div_2 : lambda : self.fftsink.y_per_div == 2, + #self.id_y_per_div_5 : lambda : self.fftsink.y_per_div == 5, + #self.id_y_per_div_10 : lambda : self.fftsink.y_per_div == 10, + #self.id_y_per_div_20 : lambda : self.fftsink.y_per_div == 20, + } + + +def next_up(v, seq): + """ + Return the first item in seq that is > v. + """ + for s in seq: + if s > v: + return s + return v + +def next_down(v, seq): + """ + Return the last item in seq that is < v. + """ + rseq = list(seq[:]) + rseq.reverse() + + for s in rseq: + if s < v: + return s + return v + + +# ---------------------------------------------------------------- +# Standalone test app +# ---------------------------------------------------------------- + +class test_top_block (stdgui2.std_top_block): + def __init__(self, frame, panel, vbox, argv): + stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv) + + fft_size = 512 + + # build our flow graph + input_rate = 20.000e3 + + # Generate a complex sinusoid + self.src1 = gr.sig_source_c (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) + #src1 = gr.sig_source_c (input_rate, gr.GR_CONST_WAVE, 5.75e3, 1000) + + # We add these throttle blocks so that this demo doesn't + # suck down all the CPU available. Normally you wouldn't use these. + self.thr1 = gr.throttle(gr.sizeof_gr_complex, input_rate) + + sink1 = waterfall_sink_c (panel, title="Complex Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=100e3) + self.connect(self.src1, self.thr1, sink1) + vbox.Add (sink1.win, 1, wx.EXPAND) + + # generate a real sinusoid + self.src2 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 5.75e3, 1000) + self.thr2 = gr.throttle(gr.sizeof_float, input_rate) + sink2 = waterfall_sink_f (panel, title="Real Data", fft_size=fft_size, + sample_rate=input_rate, baseband_freq=100e3) + self.connect(self.src2, self.thr2, sink2) + vbox.Add (sink2.win, 1, wx.EXPAND) + + +def main (): + app = stdgui2.stdapp (test_top_block, "Waterfall Sink Test App") + app.MainLoop () + +if __name__ == '__main__': + main () diff --git a/grc/Makefile.am b/grc/Makefile.am new file mode 100644 index 00000000..a4090bea --- /dev/null +++ b/grc/Makefile.am @@ -0,0 +1,62 @@ +# +# Copyright 2008, 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. +# + +include $(top_srcdir)/grc/Makefile.inc + +SUBDIRS = \ + base \ + blocks \ + examples \ + grc_gnuradio \ + gui \ + python \ + scripts + +## append freedesktop to the list of subdirs when xdg utils are present +if XDG_UTILS +SUBDIRS += freedesktop +endif + +ourpythondir = $(grc_src_prefix) +ourpython_PYTHON = __init__.py + +etcdir = $(gr_sysconfdir) +dist_etc_DATA = grc.conf + +EXTRA_DIST = \ + $(srcdir)/__init__.py.in \ + $(srcdir)/grc.conf.in + +BUILT_SOURCES = \ + __init__.py \ + grc.conf + +__init__.py: $(srcdir)/__init__.py.in Makefile + sed \ + -e 's|@VERSION[@]|$(VERSION)|g' \ + $< > $@ + +grc.conf: $(srcdir)/grc.conf.in Makefile + sed \ + -e 's|@pythonw[@]|$(PYTHONW)|g' \ + -e 's|@blocksdir[@]|$(grc_blocksdir)|g' \ + -e 's|@docdir[@]|$(gr_docdir)|g' \ + $< > $@ diff --git a/grc/Makefile.in b/grc/Makefile.in new file mode 100644 index 00000000..00692fd8 --- /dev/null +++ b/grc/Makefile.in @@ -0,0 +1,1147 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008, 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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_etc_DATA) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/grc/Makefile.inc +@XDG_UTILS_TRUE@am__append_1 = freedesktop +subdir = grc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(etcdir)" +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +dist_etcDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_etc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = base blocks examples grc_gnuradio gui python scripts \ + freedesktop +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +SUBDIRS = base blocks examples grc_gnuradio gui python scripts \ + $(am__append_1) +ourpythondir = $(grc_src_prefix) +ourpython_PYTHON = __init__.py +etcdir = $(gr_sysconfdir) +dist_etc_DATA = grc.conf +EXTRA_DIST = \ + $(srcdir)/__init__.py.in \ + $(srcdir)/grc.conf.in + +BUILT_SOURCES = \ + __init__.py \ + grc.conf + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +install-dist_etcDATA: $(dist_etc_DATA) + @$(NORMAL_INSTALL) + test -z "$(etcdir)" || $(MKDIR_P) "$(DESTDIR)$(etcdir)" + @list='$(dist_etc_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_etcDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(etcdir)/$$f'"; \ + $(dist_etcDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(etcdir)/$$f"; \ + done + +uninstall-dist_etcDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_etc_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(etcdir)/$$f'"; \ + rm -f "$(DESTDIR)$(etcdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(etcdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-dist_etcDATA install-ourpythonPYTHON + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_etcDATA uninstall-ourpythonPYTHON + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_etcDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_etcDATA \ + uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +__init__.py: $(srcdir)/__init__.py.in Makefile + sed \ + -e 's|@VERSION[@]|$(VERSION)|g' \ + $< > $@ + +grc.conf: $(srcdir)/grc.conf.in Makefile + sed \ + -e 's|@pythonw[@]|$(PYTHONW)|g' \ + -e 's|@blocksdir[@]|$(grc_blocksdir)|g' \ + -e 's|@docdir[@]|$(gr_docdir)|g' \ + $< > $@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/Makefile.inc b/grc/Makefile.inc new file mode 100644 index 00000000..96ee11b6 --- /dev/null +++ b/grc/Makefile.inc @@ -0,0 +1,24 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks diff --git a/grc/__init__.py b/grc/__init__.py new file mode 100644 index 00000000..28f810d9 --- /dev/null +++ b/grc/__init__.py @@ -0,0 +1,21 @@ +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +#package and version constants +VERSION = '3.2.2' diff --git a/grc/__init__.py.in b/grc/__init__.py.in new file mode 100644 index 00000000..4c146f95 --- /dev/null +++ b/grc/__init__.py.in @@ -0,0 +1,21 @@ +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +#package and version constants +VERSION = '@VERSION@' diff --git a/grc/base/Block.py b/grc/base/Block.py new file mode 100644 index 00000000..867a14f5 --- /dev/null +++ b/grc/base/Block.py @@ -0,0 +1,261 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from . import odict +from Element import Element +from Param import Param +from Port import Port + +from Cheetah.Template import Template +from UserDict import UserDict + +class TemplateArg(UserDict): + """ + A cheetah template argument created from a param. + The str of this class evaluates to the param's to code method. + The use of this class as a dictionary (enum only) will reveal the enum opts. + The __call__ or () method can return the param evaluated to a raw python data type. + """ + + def __init__(self, param): + UserDict.__init__(self) + self._param = param + if param.is_enum(): + for key in param.get_opt_keys(): + self[key] = str(param.get_opt(key)) + + def __str__(self): + return str(self._param.to_code()) + + def __call__(self): + return self._param.get_evaluated() + +class Block(Element): + + def __init__(self, flow_graph, n): + """ + Make a new block from nested data. + @param flow graph the parent element + @param n the nested odict + @return block a new block + """ + #build the block + Element.__init__(self, flow_graph) + #grab the data + params = n.findall('param') + sources = n.findall('source') + sinks = n.findall('sink') + self._name = n.find('name') + self._key = n.find('key') + self._category = n.find('category') or '' + self._block_wrapper_path = n.find('block_wrapper_path') + #create the param objects + self._params = odict() + #add the id param + self._params['id'] = self.get_parent().get_parent().Param( + self, + odict({ + 'name': 'ID', + 'key': 'id', + 'type': 'id', + }) + ) + self._params['_enabled'] = self.get_parent().get_parent().Param( + self, + odict({ + 'name': 'Enabled', + 'key': '_enabled', + 'type': 'raw', + 'value': 'True', + 'hide': 'all', + }) + ) + for param in map(lambda n: self.get_parent().get_parent().Param(self, n), params): + key = param.get_key() + #test against repeated keys + try: assert key not in self.get_param_keys() + except AssertionError: raise Exception, 'Key "%s" already exists in params'%key + #store the param + self._params[key] = param + #create the source objects + self._sources = odict() + for source in map(lambda n: self.get_parent().get_parent().Source(self, n), sources): + key = source.get_key() + #test against repeated keys + try: assert key not in self.get_source_keys() + except AssertionError: raise Exception, 'Key "%s" already exists in sources'%key + #store the port + self._sources[key] = source + #create the sink objects + self._sinks = odict() + for sink in map(lambda n: self.get_parent().get_parent().Sink(self, n), sinks): + key = sink.get_key() + #test against repeated keys + try: assert key not in self.get_sink_keys() + except AssertionError: raise Exception, 'Key "%s" already exists in sinks'%key + #store the port + self._sinks[key] = sink + #begin the testing + self.test() + + def test(self): + """ + Call test on all children. + """ + map(lambda c: c.test(), self.get_params() + self.get_sinks() + self.get_sources()) + + def get_enabled(self): + """ + Get the enabled state of the block. + @return true for enabled + """ + try: return eval(self.get_param('_enabled').get_value()) + except: return True + + def set_enabled(self, enabled): + """ + Set the enabled state of the block. + @param enabled true for enabled + """ + self.get_param('_enabled').set_value(str(enabled)) + + def validate(self): + """ + Validate the block. + All ports and params must be valid. + All checks must evaluate to true. + """ + Element.validate(self) + for c in self.get_params() + self.get_ports() + self.get_connections(): + try: + c.validate() + assert c.is_valid() + except AssertionError: + for msg in c.get_error_messages(): + self.add_error_message('>>> %s:\n\t%s'%(c, msg)) + + def __str__(self): return 'Block - %s - %s(%s)'%(self.get_id(), self.get_name(), self.get_key()) + + def get_id(self): return self.get_param('id').get_value() + def is_block(self): return True + def get_name(self): return self._name + def get_key(self): return self._key + def get_category(self): return self._category + def get_doc(self): return '' + def get_ports(self): return self.get_sources() + self.get_sinks() + def get_block_wrapper_path(self): return self._block_wrapper_path + + ############################################## + # Access Params + ############################################## + def get_param_keys(self): return self._params.keys() + def get_param(self, key): return self._params[key] + def get_params(self): return self._params.values() + + ############################################## + # Access Sinks + ############################################## + def get_sink_keys(self): return self._sinks.keys() + def get_sink(self, key): return self._sinks[key] + def get_sinks(self): return self._sinks.values() + + ############################################## + # Access Sources + ############################################## + def get_source_keys(self): return self._sources.keys() + def get_source(self, key): return self._sources[key] + def get_sources(self): return self._sources.values() + + def get_connections(self): + return sum([port.get_connections() for port in self.get_ports()], []) + + def resolve_dependencies(self, tmpl): + """ + Resolve a paramater dependency with cheetah templates. + @param tmpl the string with dependencies + @return the resolved value + """ + tmpl = str(tmpl) + if '$' not in tmpl: return tmpl + n = dict((p.get_key(), TemplateArg(p)) for p in self.get_params()) + try: return str(Template(tmpl, n)) + except Exception, e: return "-------->\n%s: %s\n<--------"%(e, tmpl) + + ############################################## + # Controller Modify + ############################################## + def type_controller_modify(self, direction): + """ + Change the type controller. + @param direction +1 or -1 + @return true for change + """ + changed = False + type_param = None + for param in filter(lambda p: p.is_enum(), self.get_params()): + children = self.get_ports() + self.get_params() + #priority to the type controller + if param.get_key() in ' '.join(map(lambda p: p._type, children)): type_param = param + #use param if type param is unset + if not type_param: type_param = param + if type_param: + #try to increment the enum by direction + try: + keys = type_param.get_option_keys() + old_index = keys.index(type_param.get_value()) + new_index = (old_index + direction + len(keys))%len(keys) + type_param.set_value(keys[new_index]) + changed = True + except: pass + return changed + + def port_controller_modify(self, direction): + """ + Change the port controller. + @param direction +1 or -1 + @return true for change + """ + return False + + ############################################## + ## Import/Export Methods + ############################################## + def export_data(self): + """ + Export this block's params to nested data. + @return a nested data odict + """ + n = odict() + n['key'] = self.get_key() + n['param'] = map(lambda p: p.export_data(), self.get_params()) + return n + + def import_data(self, n): + """ + Import this block's params from nested data. + Any param keys that do not exist will be ignored. + @param n the nested data odict + """ + params_n = n.findall('param') + for param_n in params_n: + key = param_n.find('key') + value = param_n.find('value') + #the key must exist in this block's params + if key in self.get_param_keys(): + self.get_param(key).set_value(value) diff --git a/grc/base/Connection.py b/grc/base/Connection.py new file mode 100644 index 00000000..94d4751b --- /dev/null +++ b/grc/base/Connection.py @@ -0,0 +1,95 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Element import Element +from . import odict + +class Connection(Element): + + def __init__(self, flow_graph, porta, portb): + """ + Make a new connection given the parent and 2 ports. + @param flow_graph the parent of this element + @param porta a port (any direction) + @param portb a port (any direction) + @throws Error cannot make connection + @return a new connection + """ + Element.__init__(self, flow_graph) + source = sink = None + #separate the source and sink + for port in (porta, portb): + if port.is_source(): source = port + if port.is_sink(): sink = port + assert(source and sink) + #ensure that this connection (source -> sink) is unique + for connection in self.get_parent().get_connections(): + assert not (connection.get_source() is source and connection.get_sink() is sink) + self._source = source + self._sink = sink + + def __str__(self): + return 'Connection (\n\t%s\n\t\t%s\n\t%s\n\t\t%s\n)'%( + self.get_source().get_parent(), + self.get_source(), + self.get_sink().get_parent(), + self.get_sink(), + ) + + def is_connection(self): return True + + def validate(self): + """ + Validate the connections. + The ports must match in type. + """ + Element.validate(self) + source_type = self.get_source().get_type() + sink_type = self.get_sink().get_type() + try: assert source_type == sink_type + except AssertionError: self.add_error_message('Source type "%s" does not match sink type "%s".'%(source_type, sink_type)) + + def get_enabled(self): + """ + Get the enabled state of this connection. + @return true if source and sink blocks are enabled + """ + return self.get_source().get_parent().get_enabled() and \ + self.get_sink().get_parent().get_enabled() + + ############################# + # Access Ports + ############################# + def get_sink(self): return self._sink + def get_source(self): return self._source + + ############################################## + ## Import/Export Methods + ############################################## + def export_data(self): + """ + Export this connection's info. + @return a nested data odict + """ + n = odict() + n['source_block_id'] = self.get_source().get_parent().get_id() + n['sink_block_id'] = self.get_sink().get_parent().get_id() + n['source_key'] = self.get_source().get_key() + n['sink_key'] = self.get_sink().get_key() + return n diff --git a/grc/base/Constants.py b/grc/base/Constants.py new file mode 100644 index 00000000..ef45be8d --- /dev/null +++ b/grc/base/Constants.py @@ -0,0 +1,25 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import os + +#data files +DATA_DIR = os.path.dirname(__file__) +FLOW_GRAPH_DTD = os.path.join(DATA_DIR, 'flow_graph.dtd') +BLOCK_TREE_DTD = os.path.join(DATA_DIR, 'block_tree.dtd') diff --git a/grc/base/Element.py b/grc/base/Element.py new file mode 100644 index 00000000..16000c46 --- /dev/null +++ b/grc/base/Element.py @@ -0,0 +1,67 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +class Element(object): + + def __init__(self, parent=None): + self._parent = parent + self.flag() + + def test(self): + """ + Test the element against failures. + Overload this method in sub-classes. + """ + pass + + ################################################## + # Element Validation API + ################################################## + def validate(self): self._error_messages = list() + def is_valid(self): return not self.get_error_messages() or not self.get_enabled() + def add_error_message(self, msg): self._error_messages.append(msg) + def get_error_messages(self): return self._error_messages + + def get_enabled(self): return True + + def get_parent(self): return self._parent + + ############################################## + ## Update flagging + ############################################## + def is_flagged(self): return self._flag + def flag(self): + self._flag = True + if self.get_parent(): self.get_parent().flag() + def deflag(self): + self._flag = False + if self.get_parent(): self.get_parent().deflag() + + ############################################## + ## Type testing methods + ############################################## + def is_element(self): return True + def is_platform(self): return False + def is_flow_graph(self): return False + def is_connection(self): return False + def is_block(self): return False + def is_source(self): return False + def is_sink(self): return False + def is_port(self): return False + def is_param(self): return False diff --git a/grc/base/FlowGraph.py b/grc/base/FlowGraph.py new file mode 100644 index 00000000..ea489e94 --- /dev/null +++ b/grc/base/FlowGraph.py @@ -0,0 +1,227 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from . import odict +from Element import Element +from Block import Block +from Connection import Connection +from .. gui import Messages + +class FlowGraph(Element): + + def __init__(self, platform): + """ + Make a flow graph from the arguments. + @param platform a platforms with blocks and contrcutors + @return the flow graph object + """ + #initialize + Element.__init__(self, platform) + #inital blank import + self.import_data() + + def _get_unique_id(self, base_id=''): + """ + Get a unique id starting with the base id. + @param base_id the id starts with this and appends a count + @return a unique id + """ + index = 0 + while True: + id = '%s_%d'%(base_id, index) + index = index + 1 + #make sure that the id is not used by another block + if not filter(lambda b: b.get_id() == id, self.get_blocks()): return id + + def __str__(self): return 'FlowGraph - %s(%s)'%(self.get_option('title'), self.get_option('id')) + + def get_option(self, key): + """ + Get the option for a given key. + The option comes from the special options block. + @param key the param key for the options block + @return the value held by that param + """ + return self._options_block.get_param(key).get_evaluated() + + def is_flow_graph(self): return True + + ############################################## + ## Access Elements + ############################################## + def get_block(self, id): return filter(lambda b: b.get_id() == id, self.get_blocks())[0] + def get_blocks(self): return filter(lambda e: e.is_block(), self.get_elements()) + def get_connections(self): return filter(lambda e: e.is_connection(), self.get_elements()) + def get_elements(self): + """ + Get a list of all the elements. + Always ensure that the options block is in the list (only once). + @return the element list + """ + options_block_count = self._elements.count(self._options_block) + if not options_block_count: + self._elements.append(self._options_block) + for i in range(options_block_count-1): + self._elements.remove(self._options_block) + return self._elements + + def get_enabled_blocks(self): + """ + Get a list of all blocks that are enabled. + @return a list of blocks + """ + return filter(lambda b: b.get_enabled(), self.get_blocks()) + + def get_enabled_connections(self): + """ + Get a list of all connections that are enabled. + @return a list of connections + """ + return filter(lambda c: c.get_enabled(), self.get_connections()) + + def get_new_block(self, key): + """ + Get a new block of the specified key. + Add the block to the list of elements. + @param key the block key + @return the new block or None if not found + """ + self.flag() + if key not in self.get_parent().get_block_keys(): return None + block = self.get_parent().get_new_block(self, key) + self.get_elements().append(block) + return block + + def connect(self, porta, portb): + """ + Create a connection between porta and portb. + @param porta a port + @param portb another port + @throw Exception bad connection + @return the new connection + """ + self.flag() + connection = self.get_parent().Connection(self, porta, portb) + self.get_elements().append(connection) + return connection + + def remove_element(self, element): + """ + Remove the element from the list of elements. + If the element is a port, remove the whole block. + If the element is a block, remove its connections. + If the element is a connection, just remove the connection. + """ + self.flag() + if element not in self.get_elements(): return + #found a port, set to parent signal block + if element.is_port(): + element = element.get_parent() + #remove block, remove all involved connections + if element.is_block(): + for port in element.get_ports(): + map(self.remove_element, port.get_connections()) + self.get_elements().remove(element) + + def evaluate(self, expr): + """ + Evaluate the expression. + @param expr the string expression + @throw NotImplementedError + """ + raise NotImplementedError + + def validate(self): + """ + Validate the flow graph. + All connections and blocks must be valid. + """ + Element.validate(self) + for c in self.get_elements(): + try: + c.validate() + assert c.is_valid() + except AssertionError: self.add_error_message('Element "%s" is not valid.'%c) + + ############################################## + ## Import/Export Methods + ############################################## + def export_data(self): + """ + Export this flow graph to nested data. + Export all block and connection data. + @return a nested data odict + """ + import time + n = odict() + n['timestamp'] = time.ctime() + n['block'] = [block.export_data() for block in self.get_blocks()] + n['connection'] = [connection.export_data() for connection in self.get_connections()] + return odict({'flow_graph': n}) + + def import_data(self, n=None): + """ + Import blocks and connections into this flow graph. + Clear this flowgraph of all previous blocks and connections. + Any blocks or connections in error will be ignored. + @param n the nested data odict + """ + #remove previous elements + self._elements = list() + #use blank data if none provided + fg_n = n and n.find('flow_graph') or odict() + blocks_n = fg_n.findall('block') + connections_n = fg_n.findall('connection') + #create option block + self._options_block = self.get_parent().get_new_block(self, 'options') + #build the blocks + for block_n in blocks_n: + key = block_n.find('key') + if key == 'options': block = self._options_block + else: block = self.get_new_block(key) + #only load the block when the block key was valid + if block: block.import_data(block_n) + else: Messages.send_error_load('Block key "%s" not found in %s'%(key, self.get_parent())) + self.validate() #validate all blocks before connections are made (in case of nports) + #build the connections + for connection_n in connections_n: + #try to make the connection + try: + #get the block ids + source_block_id = connection_n.find('source_block_id') + sink_block_id = connection_n.find('sink_block_id') + #get the port keys + source_key = connection_n.find('source_key') + sink_key = connection_n.find('sink_key') + #verify the blocks + block_ids = map(lambda b: b.get_id(), self.get_blocks()) + assert(source_block_id in block_ids) + assert(sink_block_id in block_ids) + #get the blocks + source_block = self.get_block(source_block_id) + sink_block = self.get_block(sink_block_id) + #verify the ports + assert(source_key in source_block.get_source_keys()) + assert(sink_key in sink_block.get_sink_keys()) + #get the ports + source = source_block.get_source(source_key) + sink = sink_block.get_sink(sink_key) + #build the connection + self.connect(source, sink) + except AssertionError: Messages.send_error_load('Connection between %s(%s) and %s(%s) could not be made.'%(source_block_id, source_key, sink_block_id, sink_key)) diff --git a/grc/base/Makefile.am b/grc/base/Makefile.am new file mode 100644 index 00000000..e489601d --- /dev/null +++ b/grc/base/Makefile.am @@ -0,0 +1,41 @@ +# +# Copyright 2008, 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. +# + +include $(top_srcdir)/grc/Makefile.inc + +ourpythondir = $(grc_src_prefix)/base +ourpython_PYTHON = \ + odict.py \ + ParseXML.py \ + Block.py \ + Connection.py \ + Constants.py \ + Element.py \ + FlowGraph.py \ + Param.py \ + Platform.py \ + Port.py \ + __init__.py + +ourdatadir = $(grc_src_prefix)/base +dist_ourdata_DATA = \ + block_tree.dtd \ + flow_graph.dtd diff --git a/grc/base/Makefile.in b/grc/base/Makefile.in new file mode 100644 index 00000000..9fd7fb50 --- /dev/null +++ b/grc/base/Makefile.in @@ -0,0 +1,978 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008, 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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/grc/Makefile.inc +subdir = grc/base +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourpythondir)" \ + "$(DESTDIR)$(ourdatadir)" +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +ourpythondir = $(grc_src_prefix)/base +ourpython_PYTHON = \ + odict.py \ + ParseXML.py \ + Block.py \ + Connection.py \ + Constants.py \ + Element.py \ + FlowGraph.py \ + Param.py \ + Platform.py \ + Port.py \ + __init__.py + +ourdatadir = $(grc_src_prefix)/base +dist_ourdata_DATA = \ + block_tree.dtd \ + flow_graph.dtd + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/base/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/base/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA install-ourpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-ourpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/base/Param.py b/grc/base/Param.py new file mode 100644 index 00000000..8166d54e --- /dev/null +++ b/grc/base/Param.py @@ -0,0 +1,261 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from . import odict +from Element import Element +import pygtk +pygtk.require('2.0') +import gtk + +class InputParam(gtk.HBox): + """The base class for an input parameter inside the input parameters dialog.""" + + def __init__(self, param, _handle_changed): + gtk.HBox.__init__(self) + self.param = param + self._handle_changed = _handle_changed + self.label = gtk.Label('') #no label, markup is added by set_markup + self.label.set_size_request(150, -1) + self.pack_start(self.label, False) + self.set_markup = lambda m: self.label.set_markup(m) + self.tp = None + def set_color(self, color): pass + +class EntryParam(InputParam): + """Provide an entry box for strings and numbers.""" + + def __init__(self, *args, **kwargs): + InputParam.__init__(self, *args, **kwargs) + self.entry = input = gtk.Entry() + input.set_text(self.param.get_value()) + input.connect('changed', self._handle_changed) + self.pack_start(input, True) + self.get_text = input.get_text + #tool tip + self.tp = gtk.Tooltips() + self.tp.set_tip(self.entry, '') + self.tp.enable() + def set_color(self, color): self.entry.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(color)) + +class EnumParam(InputParam): + """Provide an entry box for Enum types with a drop down menu.""" + + def __init__(self, *args, **kwargs): + InputParam.__init__(self, *args, **kwargs) + self._input = gtk.combo_box_new_text() + for option in self.param.get_options(): self._input.append_text(option.get_name()) + self._input.set_active(self.param.get_option_keys().index(self.param.get_value())) + self._input.connect('changed', self._handle_changed) + self.pack_start(self._input, False) + def get_text(self): return self.param.get_option_keys()[self._input.get_active()] + +class EnumEntryParam(InputParam): + """Provide an entry box and drop down menu for Raw Enum types.""" + + def __init__(self, *args, **kwargs): + InputParam.__init__(self, *args, **kwargs) + self._input = gtk.combo_box_entry_new_text() + for option in self.param.get_options(): self._input.append_text(option.get_name()) + try: self._input.set_active(self.param.get_option_keys().index(self.param.get_value())) + except: + self._input.set_active(-1) + self._input.get_child().set_text(self.param.get_value()) + self._input.connect('changed', self._handle_changed) + self._input.get_child().connect('changed', self._handle_changed) + self.pack_start(self._input, False) + def get_text(self): + if self._input.get_active() == -1: return self._input.get_child().get_text() + return self.param.get_option_keys()[self._input.get_active()] + def set_color(self, color): + if self._input.get_active() == -1: #custom entry, use color + self._input.get_child().modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(color)) + else: #from enum, make white background + self._input.get_child().modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ffffff')) + +class Option(Element): + + def __init__(self, param, n): + Element.__init__(self, param) + self._name = n.find('name') + self._key = n.find('key') + self._opts = dict() + opts = n.findall('opt') + #test against opts when non enum + try: assert self.get_parent().is_enum() or not opts + except AssertionError: raise Exception, 'Options for non-enum types cannot have sub-options' + #extract opts + for opt in opts: + #separate the key:value + try: key, value = opt.split(':') + except: raise Exception, 'Error separating "%s" into key:value'%opt + #test against repeated keys + try: assert not self._opts.has_key(key) + except AssertionError: raise Exception, 'Key "%s" already exists in option'%key + #store the option + self._opts[key] = value + + def __str__(self): return 'Option %s(%s)'%(self.get_name(), self.get_key()) + def get_name(self): return self._name + def get_key(self): return self._key + + ############################################## + # Access Opts + ############################################## + def get_opt_keys(self): return self._opts.keys() + def get_opt(self, key): return self._opts[key] + def get_opts(self): return self._opts.values() + +class Param(Element): + + ##possible param types + TYPES = ['enum', 'raw'] + + def __init__(self, block, n): + """ + Make a new param from nested data. + @param block the parent element + @param n the nested odict + @return a new param + """ + #grab the data + self._name = n.find('name') + self._key = n.find('key') + value = n.find('value') or '' + self._type = n.find('type') + self._hide = n.find('hide') or '' + #build the param + Element.__init__(self, block) + #create the Option objects from the n data + self._options = odict() + for option in map(lambda o: Option(self, o), n.findall('option')): + key = option.get_key() + #test against repeated keys + try: assert key not in self.get_option_keys() + except AssertionError: raise Exception, 'Key "%s" already exists in options'%key + #store the option + self._options[key] = option + #test the enum options + if self.is_enum(): + #test against options with identical keys + try: assert len(set(self.get_option_keys())) == len(self._options) + except AssertionError: raise Exception, 'Options keys "%s" are not unique.'%self.get_option_keys() + #test against inconsistent keys in options + opt_keys = self._options.values()[0].get_opt_keys() + for option in self._options.values(): + try: assert set(opt_keys) == set(option.get_opt_keys()) + except AssertionError: raise Exception, 'Opt keys "%s" are not identical across all options.'%opt_keys + #if a value is specified, it must be in the options keys + self._value = value or self.get_option_keys()[0] + try: assert self.get_value() in self.get_option_keys() + except AssertionError: raise Exception, 'The value "%s" is not in the possible values of "%s".'%(self.get_value(), self.get_option_keys()) + else: self._value = value or '' + + def test(self): + """ + call test on all children + """ + map(lambda c: c.test(), self.get_options()) + + def validate(self): + """ + Validate the param. + The value must be evaluated and type must a possible type. + """ + Element.validate(self) + try: assert self.get_type() in self.TYPES + except AssertionError: self.add_error_message('Type "%s" is not a possible type.'%self.get_type()) + + def get_evaluated(self): raise NotImplementedError + + def to_code(self): + """ + Convert the value to code. + @throw NotImplementedError + """ + raise NotImplementedError + + def get_color(self): return '#FFFFFF' + def __str__(self): return 'Param - %s(%s)'%(self.get_name(), self.get_key()) + def is_param(self): return True + def get_name(self): return self._name + def get_key(self): return self._key + def get_hide(self): return self.get_parent().resolve_dependencies(self._hide) + + def get_value(self): + value = self._value + if self.is_enum() and value not in self.get_option_keys(): + value = self.get_option_keys()[0] + self.set_value(value) + return value + + def set_value(self, value): + self.flag() + self._value = str(value) #must be a string + + def get_type(self): return self.get_parent().resolve_dependencies(self._type) + def is_enum(self): return self._type == 'enum' + + def __repr__(self): + """ + Get the repr (nice string format) for this param. + Just return the value (special case enum). + Derived classes can handle complex formatting. + @return the string representation + """ + if self.is_enum(): return self.get_option(self.get_value()).get_name() + return self.get_value() + + def get_input_class(self): + """ + Get the graphical gtk class to represent this parameter. + An enum requires and combo parameter. + A non-enum with options gets a combined entry/combo parameter. + All others get a standard entry parameter. + @return gtk input class + """ + if self.is_enum(): return EnumParam + if self.get_options(): return EnumEntryParam + return EntryParam + + ############################################## + # Access Options + ############################################## + def get_option_keys(self): return self._options.keys() + def get_option(self, key): return self._options[key] + def get_options(self): return self._options.values() + + ############################################## + # Access Opts + ############################################## + def get_opt_keys(self): return self._options[self.get_value()].get_opt_keys() + def get_opt(self, key): return self._options[self.get_value()].get_opt(key) + def get_opts(self): return self._options[self.get_value()].get_opts() + + ############################################## + ## Import/Export Methods + ############################################## + def export_data(self): + """ + Export this param's key/value. + @return a nested data odict + """ + n = odict() + n['key'] = self.get_key() + n['value'] = self.get_value() + return n diff --git a/grc/base/ParseXML.py b/grc/base/ParseXML.py new file mode 100644 index 00000000..078ebd07 --- /dev/null +++ b/grc/base/ParseXML.py @@ -0,0 +1,102 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from lxml import etree +from . import odict + +class XMLSyntaxError(Exception): + def __init__(self, error_log): + self._error_log = error_log + def __str__(self): + return '\n'.join(map(str, self._error_log.filter_from_errors())) + +def validate_dtd(xml_file, dtd_file=None): + """ + Validate an xml file against its dtd. + @param xml_file the xml file + @param dtd_file the optional dtd file + @throws Exception validation fails + """ + #perform parsing, use dtd validation if dtd file is not specified + parser = etree.XMLParser(dtd_validation=not dtd_file) + xml = etree.parse(xml_file, parser=parser) + if parser.error_log: raise XMLSyntaxError(parser.error_log) + #perform dtd validation if the dtd file is specified + if not dtd_file: return + dtd = etree.DTD(dtd_file) + if not dtd.validate(xml.getroot()): raise XMLSyntaxError(dtd.error_log) + +def from_file(xml_file): + """ + Create nested data from an xml file using the from xml helper. + @param xml_file the xml file path + @return the nested data + """ + xml = etree.parse(xml_file).getroot() + return _from_file(xml) + +def _from_file(xml): + """ + Recursivly parse the xml tree into nested data format. + @param xml the xml tree + @return the nested data + """ + tag = xml.tag + if not len(xml): + return odict({tag: xml.text or ''}) #store empty tags (text is None) as empty string + nested_data = odict() + for elem in xml: + key, value = _from_file(elem).items()[0] + if nested_data.has_key(key): nested_data[key].append(value) + else: nested_data[key] = [value] + #delistify if the length of values is 1 + for key, values in nested_data.iteritems(): + if len(values) == 1: nested_data[key] = values[0] + return odict({tag: nested_data}) + +def to_file(nested_data, xml_file): + """ + Write an xml file and use the to xml helper method to load it. + @param nested_data the nested data + @param xml_file the xml file path + """ + xml = _to_file(nested_data)[0] + open(xml_file, 'w').write(etree.tostring(xml, xml_declaration=True, pretty_print=True)) + +def _to_file(nested_data): + """ + Recursivly parse the nested data into xml tree format. + @param nested_data the nested data + @return the xml tree filled with child nodes + """ + nodes = list() + for key, values in nested_data.iteritems(): + #listify the values if not a list + if not isinstance(values, (list, set, tuple)): + values = [values] + for value in values: + node = etree.Element(key) + if isinstance(value, (str, unicode)): node.text = value + else: node.extend(_to_file(value)) + nodes.append(node) + return nodes + +if __name__ == '__main__': + """Use the main method to test parse xml's functions.""" + pass diff --git a/grc/base/Platform.py b/grc/base/Platform.py new file mode 100644 index 00000000..02d6d231 --- /dev/null +++ b/grc/base/Platform.py @@ -0,0 +1,176 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import os +import sys +from .. base import ParseXML, odict +from Element import Element as _Element +from FlowGraph import FlowGraph as _FlowGraph +from Connection import Connection as _Connection +from Block import Block as _Block +from Port import Port as _Port +from Param import Param as _Param +from Constants import BLOCK_TREE_DTD, FLOW_GRAPH_DTD + +class Platform(_Element): + + def __init__(self, name, version, key, + block_paths, block_dtd, default_flow_graph, generator, + license='', website=None, colors=[]): + """ + Make a platform from the arguments. + @param name the platform name + @param version the version string + @param key the unique platform key + @param block_paths the file paths to blocks in this platform + @param block_dtd the dtd validator for xml block wrappers + @param default_flow_graph the default flow graph file path + @param generator the generator class for this platform + @param colors a list of title, color_spec tuples + @param license a multi-line license (first line is copyright) + @param website the website url for this platform + @return a platform object + """ + _Element.__init__(self) + self._name = name + self._version = version + self._key = key + self._license = license + self._website = website + self._block_paths = block_paths + self._block_dtd = block_dtd + self._default_flow_graph = default_flow_graph + self._generator = generator + self._colors = colors + #create a dummy flow graph for the blocks + self._flow_graph = _Element(self) + #search for *.xml files in the given search path + xml_files = list() + for block_path in self._block_paths: + if os.path.isfile(block_path): xml_files.append(block_path) + elif os.path.isdir(block_path): + for dirpath, dirnames, filenames in os.walk(block_path): + for filename in sorted(filter(lambda f: f.endswith('.xml'), filenames)): + xml_files.append(os.path.join(dirpath, filename)) + #load the blocks + self._blocks = odict() + self._blocks_n = odict() + self._block_tree_files = list() + for xml_file in xml_files: + try: #try to add the xml file as a block wrapper + ParseXML.validate_dtd(xml_file, self._block_dtd) + n = ParseXML.from_file(xml_file).find('block') + #inject block wrapper path + n['block_wrapper_path'] = xml_file + block = self.Block(self._flow_graph, n) + key = block.get_key() + #test against repeated keys + try: + assert key not in self.get_block_keys() + #store the block + self._blocks[key] = block + self._blocks_n[key] = n + except AssertionError: + print >> sys.stderr, 'Warning: Block with key "%s" already exists.\n\tIgnoring: %s'%(key, xml_file) + except ParseXML.XMLSyntaxError, e: + try: #try to add the xml file as a block tree + ParseXML.validate_dtd(xml_file, BLOCK_TREE_DTD) + self._block_tree_files.append(xml_file) + except ParseXML.XMLSyntaxError, e: + print >> sys.stderr, 'Warning: Block validation failed:\n\t%s\n\tIgnoring: %s'%(e, xml_file) + except Exception, e: + print >> sys.stderr, 'Warning: Block loading failed:\n\t%s\n\tIgnoring: %s'%(e, xml_file) + + def parse_flow_graph(self, flow_graph_file): + """ + Parse a saved flow graph file. + Ensure that the file exists, and passes the dtd check. + @param flow_graph_file the flow graph file + @return nested data + @throws exception if the validation fails + """ + flow_graph_file = flow_graph_file or self._default_flow_graph + open(flow_graph_file, 'r') #test open + ParseXML.validate_dtd(flow_graph_file, FLOW_GRAPH_DTD) + return ParseXML.from_file(flow_graph_file) + + def load_block_tree(self, block_tree): + """ + Load a block tree with categories and blocks. + Step 1: Load all blocks from the xml specification. + Step 2: Load blocks with builtin category specifications. + @param block_tree the block tree object + """ + #recursive function to load categories and blocks + def load_category(cat_n, parent=[]): + #add this category + parent = parent + [cat_n.find('name')] + block_tree.add_block(parent) + #recursive call to load sub categories + map(lambda c: load_category(c, parent), cat_n.findall('cat')) + #add blocks in this category + for block_key in cat_n.findall('block'): + if block_key not in self.get_block_keys(): + print >> sys.stderr, 'Warning: Block key "%s" not found when loading category tree.'%(block_key) + continue + block = self.get_block(block_key) + #if it exists, the block's category overrides the block tree + if not block.get_category(): block_tree.add_block(parent, block) + #load the block tree + for block_tree_file in self._block_tree_files: + #recursivly add all blocks in the tree + load_category(ParseXML.from_file(block_tree_file).find('cat')) + #add all other blocks, use the catgory tag + for block in self.get_blocks(): + #blocks with empty categories are in the xml block tree or hidden + if not block.get_category(): continue + block_tree.add_block(block.get_category(), block) + + def __str__(self): return 'Platform - %s(%s)'%(self.get_key(), self.get_name()) + + def is_platform(self): return True + + def get_new_flow_graph(self): return self.FlowGraph(self) + + def get_generator(self): return self._generator + + ############################################## + # Access Blocks + ############################################## + def get_block_keys(self): return self._blocks.keys() + def get_block(self, key): return self._blocks[key] + def get_blocks(self): return self._blocks.values() + def get_new_block(self, flow_graph, key): return self.Block(flow_graph, n=self._blocks_n[key]) + + def get_name(self): return self._name + def get_version(self): return self._version + def get_key(self): return self._key + def get_license(self): return self._license + def get_website(self): return self._website + def get_colors(self): return self._colors + + ############################################## + # Constructors + ############################################## + FlowGraph = _FlowGraph + Connection = _Connection + Block = _Block + Source = _Port + Sink = _Port + Param = _Param diff --git a/grc/base/Port.py b/grc/base/Port.py new file mode 100644 index 00000000..f4e8e5e1 --- /dev/null +++ b/grc/base/Port.py @@ -0,0 +1,81 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Element import Element + +class Port(Element): + + ##possible port types + TYPES = [] + + def __init__(self, block, n): + """ + Make a new port from nested data. + @param block the parent element + @param n the nested odict + @return a new port + """ + #grab the data + name = n['name'] + key = n['key'] + type = n['type'] + #build the port + Element.__init__(self, block) + self._name = name + self._key = key + self._type = type + + def validate(self): + """ + Validate the port. + The port must be non-empty and type must a possible type. + """ + Element.validate(self) + try: assert self.get_type() in self.TYPES + except AssertionError: self.add_error_message('Type "%s" is not a possible type.'%self.get_type()) + + def __str__(self): + if self.is_source(): + return 'Source - %s(%s)'%(self.get_name(), self.get_key()) + if self.is_sink(): + return 'Sink - %s(%s)'%(self.get_name(), self.get_key()) + + def is_port(self): return True + def get_color(self): return '#FFFFFF' + def get_name(self): return self._name + def get_key(self): return self._key + def is_sink(self): return self in self.get_parent().get_sinks() + def is_source(self): return self in self.get_parent().get_sources() + def get_type(self): return self.get_parent().resolve_dependencies(self._type) + + def get_connections(self): + """ + Get all connections that use this port. + @return a list of connection objects + """ + connections = self.get_parent().get_parent().get_connections() + connections = filter(lambda c: c.get_source() is self or c.get_sink() is self, connections) + return connections + + def get_enabled_connections(self): + """ + Get all enabled connections that use this port. + @return a list of connection objects + """ + return filter(lambda c: c.get_enabled(), self.get_connections()) diff --git a/grc/base/__init__.py b/grc/base/__init__.py new file mode 100644 index 00000000..2682db81 --- /dev/null +++ b/grc/base/__init__.py @@ -0,0 +1,20 @@ +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from odict import odict diff --git a/grc/base/block_tree.dtd b/grc/base/block_tree.dtd new file mode 100644 index 00000000..be1524a3 --- /dev/null +++ b/grc/base/block_tree.dtd @@ -0,0 +1,26 @@ + + + + + diff --git a/grc/base/flow_graph.dtd b/grc/base/flow_graph.dtd new file mode 100644 index 00000000..904147b3 --- /dev/null +++ b/grc/base/flow_graph.dtd @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + diff --git a/grc/base/odict.py b/grc/base/odict.py new file mode 100644 index 00000000..ac3cb207 --- /dev/null +++ b/grc/base/odict.py @@ -0,0 +1,93 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from UserDict import DictMixin + +class odict(DictMixin): + + def __init__(self, d={}): + self._keys = list(d.keys()) + self._data = dict(d.copy()) + + def __setitem__(self, key, value): + if key not in self._data: + self._keys.append(key) + self._data[key] = value + + def __getitem__(self, key): + return self._data[key] + + def __delitem__(self, key): + del self._data[key] + self._keys.remove(key) + + def keys(self): + return list(self._keys) + + def copy(self): + copy_dict = odict() + copy_dict._data = self._data.copy() + copy_dict._keys = list(self._keys) + return copy_dict + + def insert_after(self, pos_key, key, val): + """ + Insert the new key, value entry after the entry given by the position key. + If the positional key is None, insert at the end. + @param pos_key the positional key + @param key the key for the new entry + @param val the value for the new entry + """ + index = (pos_key is None) and len(self._keys) or self._keys.index(pos_key) + assert key not in self._keys + self._keys.insert(index+1, key) + self._data[key] = val + + def insert_before(self, pos_key, key, val): + """ + Insert the new key, value entry before the entry given by the position key. + If the positional key is None, insert at the begining. + @param pos_key the positional key + @param key the key for the new entry + @param val the value for the new entry + """ + index = (pos_key is not None) and self._keys.index(pos_key) or 0 + assert key not in self._keys + self._keys.insert(index, key) + self._data[key] = val + + def find(self, key): + """ + Get the value for this key if exists. + @param key the key to search for + @return the value or None + """ + if self.has_key(key): return self[key] + return None + + def findall(self, key): + """ + Get a list of values for this key. + @param key the key to search for + @return a list of values or empty list + """ + obj = self.find(key) + if obj is None: obj = list() + if isinstance(obj, list): return obj + return [obj] diff --git a/grc/blocks/Makefile.am b/grc/blocks/Makefile.am new file mode 100644 index 00000000..025c261f --- /dev/null +++ b/grc/blocks/Makefile.am @@ -0,0 +1,225 @@ +# +# Copyright 2008, 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. +# + +include $(top_srcdir)/grc/Makefile.inc + +ourdatadir = $(grc_blocksdir) +dist_ourdata_DATA = \ + block_tree.xml \ + audio_sink.xml \ + audio_source.xml \ + band_pass_filter.xml \ + band_reject_filter.xml \ + blks2_am_demod_cf.xml \ + blks2_analysis_filterbank.xml \ + blks2_dxpsk_demod.xml \ + blks2_dxpsk_mod.xml \ + blks2_error_rate.xml \ + blks2_fm_deemph.xml \ + blks2_fm_demod_cf.xml \ + blks2_fm_preemph.xml \ + blks2_gmsk_demod.xml \ + blks2_gmsk_mod.xml \ + blks2_logpwrfft_x.xml \ + blks2_nbfm_rx.xml \ + blks2_nbfm_tx.xml \ + blks2_ofdm_demod.xml \ + blks2_ofdm_mod.xml \ + blks2_packet_decoder.xml \ + blks2_packet_encoder.xml \ + blks2_qamx_demod.xml \ + blks2_qamx_mod.xml \ + blks2_rational_resampler_xxx.xml \ + blks2_selector.xml \ + blks2_standard_squelch.xml \ + blks2_stream_to_vector_decimator.xml \ + blks2_synthesis_filterbank.xml \ + blks2_tcp_sink.xml \ + blks2_tcp_source.xml \ + blks2_valve.xml \ + blks2_variable_sink_x.xml \ + blks2_wfm_rcv.xml \ + blks2_wfm_rcv_pll.xml \ + blks2_wfm_tx.xml \ + const_source_x.xml \ + gr_add_const_vxx.xml \ + gr_add_xx.xml \ + gr_agc2_xx.xml \ + gr_agc_xx.xml \ + gr_and_xx.xml \ + gr_argmax_xx.xml \ + gr_binary_slicer_fb.xml \ + gr_channel_model.xml \ + gr_char_to_float.xml \ + gr_chunks_to_symbols.xml \ + gr_clock_recovery_mm_xx.xml \ + gr_cma_equalizer_cc.xml \ + gr_complex_to_arg.xml \ + gr_complex_to_float.xml \ + gr_complex_to_imag.xml \ + gr_complex_to_interleaved_short.xml \ + gr_complex_to_mag.xml \ + gr_complex_to_mag_squared.xml \ + gr_complex_to_real.xml \ + gr_conjugate_cc.xml \ + gr_constellation_decoder_cb.xml \ + gr_correlate_access_code_bb.xml \ + gr_costas_loop_cc.xml \ + gr_cpfsk_bc.xml \ + gr_dd_mpsk_sync_cc.xml \ + gr_decode_ccsds_27_fb.xml \ + gr_deinterleave.xml \ + gr_delay.xml \ + gr_descrambler_bb.xml \ + gr_diff_decoder_bb.xml \ + gr_diff_encoder_bb.xml \ + gr_diff_phasor_cc.xml \ + gr_divide_xx.xml \ + gr_dpll_bb.xml \ + gr_encode_ccsds_27_bb.xml \ + gr_feedforward_agc_cc.xml \ + gr_fft_filter_xxx.xml \ + gr_fft_vxx.xml \ + gr_file_sink.xml \ + gr_file_source.xml \ + gr_filter_delay_fc.xml \ + gr_fir_filter_xxx.xml \ + gr_float_to_char.xml \ + gr_float_to_complex.xml \ + gr_float_to_short.xml \ + gr_float_to_uchar.xml \ + gr_fractional_interpolator_xx.xml \ + gr_freq_xlating_fir_filter_xxx.xml \ + gr_frequency_modulator_fc.xml \ + gr_glfsr_source_x.xml \ + gr_goertzel_fc.xml \ + gr_head.xml \ + gr_hilbert_fc.xml \ + gr_iir_filter_ffd.xml \ + gr_integrate_xx.xml \ + gr_interleave.xml \ + gr_interleaved_short_to_complex.xml \ + gr_interp_fir_filter_xxx.xml \ + gr_iqcomp_cc.xml \ + gr_keep_one_in_n.xml \ + gr_kludge_copy.xml \ + gr_map_bb.xml \ + gr_max_xx.xml \ + gr_moving_average_xx.xml \ + gr_mpsk_receiver_cc.xml \ + gr_mpsk_sync_cc.xml \ + gr_multiply_const_vxx.xml \ + gr_multiply_xx.xml \ + gr_mute_xx.xml \ + gr_nlog10_ff.xml \ + gr_noise_source_x.xml \ + gr_nop.xml \ + gr_not_xx.xml \ + gr_null_sink.xml \ + gr_null_source.xml \ + gr_or_xx.xml \ + gr_packed_to_unpacked_xx.xml \ + gr_peak_detector2_fb.xml \ + gr_peak_detector_xb.xml \ + gr_phase_modulator_fc.xml \ + gr_pll_carriertracking_cc.xml \ + gr_pll_freqdet_cf.xml \ + gr_pll_refout_cc.xml \ + gr_pn_correlator_cc.xml \ + gr_probe_avg_mag_sqrd_x.xml \ + gr_probe_density_b.xml \ + gr_probe_mpsk_snr_c.xml \ + gr_pwr_squelch_xx.xml \ + gr_quadrature_demod_cf.xml \ + gr_rational_resampler_base_xxx.xml \ + gr_repeat.xml \ + gr_rms_xx.xml \ + gr_sample_and_hold_xx.xml \ + gr_scrambler_bb.xml \ + gr_short_to_float.xml \ + gr_sig_source_x.xml \ + gr_simple_correlator.xml \ + gr_simple_framer.xml \ + gr_simple_squelch_cc.xml \ + gr_single_pole_iir_filter_xx.xml \ + gr_skiphead.xml \ + gr_stream_to_streams.xml \ + gr_stream_to_vector.xml \ + gr_streams_to_stream.xml \ + gr_streams_to_vector.xml \ + gr_sub_xx.xml \ + gr_threshold_ff.xml \ + gr_throttle.xml \ + gr_uchar_to_float.xml \ + gr_udp_sink.xml \ + gr_udp_source.xml \ + gr_unpack_k_bits_bb.xml \ + gr_unpacked_to_packed_xx.xml \ + gr_vco_f.xml \ + gr_vector_sink_x.xml \ + gr_vector_source_x.xml \ + gr_vector_to_stream.xml \ + gr_vector_to_streams.xml \ + gr_wavfile_sink.xml \ + gr_wavfile_source.xml \ + gr_xor_xx.xml \ + high_pass_filter.xml \ + import.xml \ + low_pass_filter.xml \ + note.xml \ + notebook.xml \ + options.xml \ + pad_sink.xml \ + pad_source.xml \ + parameter.xml \ + probe_function.xml \ + random_source_x.xml \ + root_raised_cosine_filter.xml \ + trellis_encoder_xx.xml \ + trellis_metrics_x.xml \ + trellis_permutation.xml \ + trellis_siso_combined_f.xml \ + trellis_siso_f.xml \ + trellis_viterbi_combined_xx.xml \ + trellis_viterbi_x.xml \ + usrp2_probe.xml \ + usrp2_sink_xxxx.xml \ + usrp2_source_xxxx.xml \ + usrp_dual_sink_x.xml \ + usrp_dual_source_x.xml \ + usrp_probe.xml \ + usrp_simple_sink_x.xml \ + usrp_simple_source_x.xml \ + variable.xml \ + variable_check_box.xml \ + variable_chooser.xml \ + variable_config.xml \ + variable_slider.xml \ + variable_static_text.xml \ + variable_text_box.xml \ + wxgui_constellationsink2.xml \ + wxgui_fftsink2.xml \ + wxgui_histosink2.xml \ + wxgui_numbersink2.xml \ + wxgui_scopesink2.xml \ + wxgui_waterfallsink2.xml \ + xmlrpc_client.xml \ + xmlrpc_server.xml diff --git a/grc/blocks/Makefile.in b/grc/blocks/Makefile.in new file mode 100644 index 00000000..cec7248c --- /dev/null +++ b/grc/blocks/Makefile.in @@ -0,0 +1,1130 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008, 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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/grc/Makefile.inc +subdir = grc/blocks +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourdatadir)" +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +ourdatadir = $(grc_blocksdir) +dist_ourdata_DATA = \ + block_tree.xml \ + audio_sink.xml \ + audio_source.xml \ + band_pass_filter.xml \ + band_reject_filter.xml \ + blks2_am_demod_cf.xml \ + blks2_analysis_filterbank.xml \ + blks2_dxpsk_demod.xml \ + blks2_dxpsk_mod.xml \ + blks2_error_rate.xml \ + blks2_fm_deemph.xml \ + blks2_fm_demod_cf.xml \ + blks2_fm_preemph.xml \ + blks2_gmsk_demod.xml \ + blks2_gmsk_mod.xml \ + blks2_logpwrfft_x.xml \ + blks2_nbfm_rx.xml \ + blks2_nbfm_tx.xml \ + blks2_ofdm_demod.xml \ + blks2_ofdm_mod.xml \ + blks2_packet_decoder.xml \ + blks2_packet_encoder.xml \ + blks2_qamx_demod.xml \ + blks2_qamx_mod.xml \ + blks2_rational_resampler_xxx.xml \ + blks2_selector.xml \ + blks2_standard_squelch.xml \ + blks2_stream_to_vector_decimator.xml \ + blks2_synthesis_filterbank.xml \ + blks2_tcp_sink.xml \ + blks2_tcp_source.xml \ + blks2_valve.xml \ + blks2_variable_sink_x.xml \ + blks2_wfm_rcv.xml \ + blks2_wfm_rcv_pll.xml \ + blks2_wfm_tx.xml \ + const_source_x.xml \ + gr_add_const_vxx.xml \ + gr_add_xx.xml \ + gr_agc2_xx.xml \ + gr_agc_xx.xml \ + gr_and_xx.xml \ + gr_argmax_xx.xml \ + gr_binary_slicer_fb.xml \ + gr_channel_model.xml \ + gr_char_to_float.xml \ + gr_chunks_to_symbols.xml \ + gr_clock_recovery_mm_xx.xml \ + gr_cma_equalizer_cc.xml \ + gr_complex_to_arg.xml \ + gr_complex_to_float.xml \ + gr_complex_to_imag.xml \ + gr_complex_to_interleaved_short.xml \ + gr_complex_to_mag.xml \ + gr_complex_to_mag_squared.xml \ + gr_complex_to_real.xml \ + gr_conjugate_cc.xml \ + gr_constellation_decoder_cb.xml \ + gr_correlate_access_code_bb.xml \ + gr_costas_loop_cc.xml \ + gr_cpfsk_bc.xml \ + gr_dd_mpsk_sync_cc.xml \ + gr_decode_ccsds_27_fb.xml \ + gr_deinterleave.xml \ + gr_delay.xml \ + gr_descrambler_bb.xml \ + gr_diff_decoder_bb.xml \ + gr_diff_encoder_bb.xml \ + gr_diff_phasor_cc.xml \ + gr_divide_xx.xml \ + gr_dpll_bb.xml \ + gr_encode_ccsds_27_bb.xml \ + gr_feedforward_agc_cc.xml \ + gr_fft_filter_xxx.xml \ + gr_fft_vxx.xml \ + gr_file_sink.xml \ + gr_file_source.xml \ + gr_filter_delay_fc.xml \ + gr_fir_filter_xxx.xml \ + gr_float_to_char.xml \ + gr_float_to_complex.xml \ + gr_float_to_short.xml \ + gr_float_to_uchar.xml \ + gr_fractional_interpolator_xx.xml \ + gr_freq_xlating_fir_filter_xxx.xml \ + gr_frequency_modulator_fc.xml \ + gr_glfsr_source_x.xml \ + gr_goertzel_fc.xml \ + gr_head.xml \ + gr_hilbert_fc.xml \ + gr_iir_filter_ffd.xml \ + gr_integrate_xx.xml \ + gr_interleave.xml \ + gr_interleaved_short_to_complex.xml \ + gr_interp_fir_filter_xxx.xml \ + gr_iqcomp_cc.xml \ + gr_keep_one_in_n.xml \ + gr_kludge_copy.xml \ + gr_map_bb.xml \ + gr_max_xx.xml \ + gr_moving_average_xx.xml \ + gr_mpsk_receiver_cc.xml \ + gr_mpsk_sync_cc.xml \ + gr_multiply_const_vxx.xml \ + gr_multiply_xx.xml \ + gr_mute_xx.xml \ + gr_nlog10_ff.xml \ + gr_noise_source_x.xml \ + gr_nop.xml \ + gr_not_xx.xml \ + gr_null_sink.xml \ + gr_null_source.xml \ + gr_or_xx.xml \ + gr_packed_to_unpacked_xx.xml \ + gr_peak_detector2_fb.xml \ + gr_peak_detector_xb.xml \ + gr_phase_modulator_fc.xml \ + gr_pll_carriertracking_cc.xml \ + gr_pll_freqdet_cf.xml \ + gr_pll_refout_cc.xml \ + gr_pn_correlator_cc.xml \ + gr_probe_avg_mag_sqrd_x.xml \ + gr_probe_density_b.xml \ + gr_probe_mpsk_snr_c.xml \ + gr_pwr_squelch_xx.xml \ + gr_quadrature_demod_cf.xml \ + gr_rational_resampler_base_xxx.xml \ + gr_repeat.xml \ + gr_rms_xx.xml \ + gr_sample_and_hold_xx.xml \ + gr_scrambler_bb.xml \ + gr_short_to_float.xml \ + gr_sig_source_x.xml \ + gr_simple_correlator.xml \ + gr_simple_framer.xml \ + gr_simple_squelch_cc.xml \ + gr_single_pole_iir_filter_xx.xml \ + gr_skiphead.xml \ + gr_stream_to_streams.xml \ + gr_stream_to_vector.xml \ + gr_streams_to_stream.xml \ + gr_streams_to_vector.xml \ + gr_sub_xx.xml \ + gr_threshold_ff.xml \ + gr_throttle.xml \ + gr_uchar_to_float.xml \ + gr_udp_sink.xml \ + gr_udp_source.xml \ + gr_unpack_k_bits_bb.xml \ + gr_unpacked_to_packed_xx.xml \ + gr_vco_f.xml \ + gr_vector_sink_x.xml \ + gr_vector_source_x.xml \ + gr_vector_to_stream.xml \ + gr_vector_to_streams.xml \ + gr_wavfile_sink.xml \ + gr_wavfile_source.xml \ + gr_xor_xx.xml \ + high_pass_filter.xml \ + import.xml \ + low_pass_filter.xml \ + note.xml \ + notebook.xml \ + options.xml \ + pad_sink.xml \ + pad_source.xml \ + parameter.xml \ + probe_function.xml \ + random_source_x.xml \ + root_raised_cosine_filter.xml \ + trellis_encoder_xx.xml \ + trellis_metrics_x.xml \ + trellis_permutation.xml \ + trellis_siso_combined_f.xml \ + trellis_siso_f.xml \ + trellis_viterbi_combined_xx.xml \ + trellis_viterbi_x.xml \ + usrp2_probe.xml \ + usrp2_sink_xxxx.xml \ + usrp2_source_xxxx.xml \ + usrp_dual_sink_x.xml \ + usrp_dual_source_x.xml \ + usrp_probe.xml \ + usrp_simple_sink_x.xml \ + usrp_simple_source_x.xml \ + variable.xml \ + variable_check_box.xml \ + variable_chooser.xml \ + variable_config.xml \ + variable_slider.xml \ + variable_static_text.xml \ + variable_text_box.xml \ + wxgui_constellationsink2.xml \ + wxgui_fftsink2.xml \ + wxgui_histosink2.xml \ + wxgui_numbersink2.xml \ + wxgui_scopesink2.xml \ + wxgui_waterfallsink2.xml \ + xmlrpc_client.xml \ + xmlrpc_server.xml + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/blocks/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/blocks/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_ourdataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/blocks/audio_sink.xml b/grc/blocks/audio_sink.xml new file mode 100644 index 00000000..75d58347 --- /dev/null +++ b/grc/blocks/audio_sink.xml @@ -0,0 +1,85 @@ + + + + Audio Sink + audio_sink + from gnuradio import audio + audio.sink($samp_rate, $device_name, $ok_to_block) + + Sample Rate + samp_rate + 32000 + int + + + + + + + + + Device Name + device_name + + string + #if $device_name() then 'none' else 'part'# + + + OK to Block + ok_to_block + True + enum + part + + + + + Num Inputs + num_inputs + 1 + int + + 0 < $num_inputs + + in + float + $num_inputs + + +Not all sampling rates will be supported by your hardware. + +Leave the device name blank to choose deafult audio device. \ +ALSA users with audio trouble may try setting the device name to plughw:0,0 + +The audio sink can have multiple inputs depending upon your hardware. \ +For example, set the inputs to 2 for stereo audio. + + diff --git a/grc/blocks/audio_source.xml b/grc/blocks/audio_source.xml new file mode 100644 index 00000000..1f5d1033 --- /dev/null +++ b/grc/blocks/audio_source.xml @@ -0,0 +1,85 @@ + + + + Audio Source + audio_source + from gnuradio import audio + audio.source($samp_rate, $device_name, $ok_to_block) + + Sample Rate + samp_rate + 32000 + int + + + + + + + + + Device Name + device_name + + string + #if $device_name() then 'none' else 'part'# + + + OK to Block + ok_to_block + True + enum + part + + + + + Num Outputs + num_outputs + 1 + int + + 0 < $num_outputs + + out + float + $num_outputs + + +Not all sampling rates will be supported by your hardware. + +Leave the device name blank to choose deafult audio device. \ +ALSA users with audio trouble may try setting the device name to plughw:0,0 + +The audio source can have multiple outputs depending upon your hardware. \ +For example, set the outputs to 2 for stereo audio. + + diff --git a/grc/blocks/band_pass_filter.xml b/grc/blocks/band_pass_filter.xml new file mode 100644 index 00000000..e2e9acf4 --- /dev/null +++ b/grc/blocks/band_pass_filter.xml @@ -0,0 +1,165 @@ + + + + Band Pass Filter + band_pass_filter + from gnuradio import gr + from gnuradio.gr import firdes + gr.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.$(type.fcn)( + $gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, firdes.$window, $beta)) + set_taps(firdes.$(type.fcn)($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, firdes.$window, $beta)) + + FIR Type + type + enum + + + + + + + + + + + + + Decimation + decim + 1 + int + #if str($type).startswith('interp') then 'all' else 'none'# + + + Interpolation + interp + 1 + int + #if str($type).startswith('interp') then 'none' else 'all'# + + + Gain + gain + 1 + real + + + Sample Rate + samp_rate + samp_rate + real + + + Low Cutoff Freq + low_cutoff_freq + real + + + High Cutoff Freq + high_cutoff_freq + real + + + Transition Width + width + real + + + Window + window + enum + + + + + + + + Beta + beta + 6.76 + real + + + in + $type.input + + + out + $type.output + + +This filter is a convenience wrapper for an fir filter and a firdes taps generating function. + +Sample rate, cutoff frequency, and transition width are in Hertz. + +The beta paramater only applies to the Kaiser window. + + diff --git a/grc/blocks/band_reject_filter.xml b/grc/blocks/band_reject_filter.xml new file mode 100644 index 00000000..3b58f0b5 --- /dev/null +++ b/grc/blocks/band_reject_filter.xml @@ -0,0 +1,131 @@ + + + + Band Reject Filter + band_reject_filter + from gnuradio import gr + from gnuradio.gr import firdes + gr.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.band_reject( + $gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, firdes.$window, $beta)) + set_taps(firdes.band_reject($gain, $samp_rate, $low_cutoff_freq, $high_cutoff_freq, $width, firdes.$window, $beta)) + + FIR Type + type + enum + + + + + + + Decimation + decim + 1 + int + #if str($type).startswith('interp') then 'all' else 'none'# + + + Interpolation + interp + 1 + int + #if str($type).startswith('interp') then 'none' else 'all'# + + + Gain + gain + 1 + real + + + Sample Rate + samp_rate + samp_rate + real + + + Low Cutoff Freq + low_cutoff_freq + real + + + High Cutoff Freq + high_cutoff_freq + real + + + Transition Width + width + real + + + Window + window + enum + + + + + + + + Beta + beta + 6.76 + real + + + in + $type.input + + + out + $type.output + + +This filter is a convenience wrapper for an fir filter and a firdes taps generating function. + +Sample rate, cutoff frequency, and transition width are in Hertz. + +The beta paramater only applies to the Kaiser window. + + diff --git a/grc/blocks/blks2_am_demod_cf.xml b/grc/blocks/blks2_am_demod_cf.xml new file mode 100644 index 00000000..898c613b --- /dev/null +++ b/grc/blocks/blks2_am_demod_cf.xml @@ -0,0 +1,47 @@ + + + + AM Demod + blks2_am_demod_cf + from gnuradio import blks2 + blks2.am_demod_cf( + channel_rate=$chan_rate, + audio_decim=$audio_decim, + audio_pass=$audio_pass, + audio_stop=$audio_stop, +) + + Channel Rate + chan_rate + real + + + Audio Decimation + audio_decim + int + + + Audio Pass + audio_pass + 5000 + real + + + Audio Stop + audio_stop + 5500 + real + + + in + complex + + + out + float + + diff --git a/grc/blocks/blks2_analysis_filterbank.xml b/grc/blocks/blks2_analysis_filterbank.xml new file mode 100644 index 00000000..93cfa30a --- /dev/null +++ b/grc/blocks/blks2_analysis_filterbank.xml @@ -0,0 +1,32 @@ + + + + Analysis Filterbank + blks2_analysis_filterbank + from gnuradio import blks2 + blks2.analysis_filterbank(mpoints=$mpoints, taps=$taps) + + MPoints + mpoints + 3 + int + + + Taps + taps + complex_vector + + + in + complex + + + out + complex + $mpoints + + diff --git a/grc/blocks/blks2_dxpsk_demod.xml b/grc/blocks/blks2_dxpsk_demod.xml new file mode 100644 index 00000000..4c13b341 --- /dev/null +++ b/grc/blocks/blks2_dxpsk_demod.xml @@ -0,0 +1,127 @@ + + + + DPSK Demod + blks2_dxpsk_demod + from gnuradio import blks2 + blks2.$(type)_demod( + samples_per_symbol=$samples_per_symbol, + excess_bw=$excess_bw, + costas_alpha=$costas_alpha, + gain_mu=$gain_mu, + mu=$mu, + omega_relative_limit=$omega_relative_limit, + gray_code=$gray_code, + verbose=$verbose, + log=$log, +) + + Type + type + enum + + + + + + Samples/Symbol + samples_per_symbol + 2 + int + + + Excess BW + excess_bw + 0.35 + real + + + Costas Alpha + costas_alpha + 0.175 + real + + + Gain Mu + gain_mu + 0.175 + real + + + Mu + mu + 0.5 + real + + + Omega Relative Limit + omega_relative_limit + 0.005 + real + + + Gray Code + gray_code + True + enum + + + + + Verbose + verbose + False + bool + #if str($verbose) == 'False' then 'part' else 'none'# + + + + + Logging + log + False + bool + #if str($log) == 'False' then 'part' else 'none'# + + + + + in + complex + + + out + byte + + diff --git a/grc/blocks/blks2_dxpsk_mod.xml b/grc/blocks/blks2_dxpsk_mod.xml new file mode 100644 index 00000000..28fd742f --- /dev/null +++ b/grc/blocks/blks2_dxpsk_mod.xml @@ -0,0 +1,99 @@ + + + + DPSK Mod + blks2_dxpsk_mod + from gnuradio import blks2 + blks2.$(type)_mod( + samples_per_symbol=$samples_per_symbol, + excess_bw=$excess_bw, + gray_code=$gray_code, + verbose=$verbose, + log=$log, +) + + Type + type + enum + + + + + + Samples/Symbol + samples_per_symbol + 2 + int + + + Excess BW + excess_bw + 0.35 + real + + + Gray Code + gray_code + True + enum + + + + + Verbose + verbose + False + bool + #if str($verbose) == 'False' then 'part' else 'none'# + + + + + Logging + log + False + bool + #if str($log) == 'False' then 'part' else 'none'# + + + + + in + byte + + + out + complex + + diff --git a/grc/blocks/blks2_error_rate.xml b/grc/blocks/blks2_error_rate.xml new file mode 100644 index 00000000..91a30320 --- /dev/null +++ b/grc/blocks/blks2_error_rate.xml @@ -0,0 +1,69 @@ + + + + Error Rate + blks2_error_rate + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.error_rate( + type=$type, + win_size=$win_size, + bits_per_symbol=$bits_per_symbol, +) + + Type + type + enum + + + + + Window Size + win_size + 1000 + int + + + Bits per Symbol + bits_per_symbol + 2 + int + $type.hide_bps + + + ref + byte + + + in + byte + + + out + float + + +Calculate the bit error rate (BER) or the symbol error rate (SER) over a number of samples given by the window size. \ +The actual window size will start at size one and grow to the full window size as new samples arrive. \ +Once the window has reached full size, old samples are shifted out of the window and new samples shfited in. + +The error block compares the input byte stream to the reference byte stream. \ +For example, the reference byte stream could be the input to a modulator, \ +and the input byte stream could be the output of a modulator. + +Each byte in the incoming stream represents one symbol. \ +The bits per symbol parameter is only useful for calculating the BER. + + diff --git a/grc/blocks/blks2_fm_deemph.xml b/grc/blocks/blks2_fm_deemph.xml new file mode 100644 index 00000000..6f38dab6 --- /dev/null +++ b/grc/blocks/blks2_fm_deemph.xml @@ -0,0 +1,31 @@ + + + + FM Deemphasis + blks2_fm_deemph + from gnuradio import blks2 + blks2.fm_deemph(fs=$samp_rate, tau=$tau) + + Sample Rate + samp_rate + real + + + Tau + tau + 75e-6 + real + + + in + float + + + out + float + + diff --git a/grc/blocks/blks2_fm_demod_cf.xml b/grc/blocks/blks2_fm_demod_cf.xml new file mode 100644 index 00000000..2ce1fb97 --- /dev/null +++ b/grc/blocks/blks2_fm_demod_cf.xml @@ -0,0 +1,68 @@ + + + + FM Demod + blks2_fm_demod_cf + from gnuradio import blks2 + blks2.fm_demod_cf( + channel_rate=$chan_rate, + audio_decim=$audio_decim, + deviation=$deviation, + audio_pass=$audio_pass, + audio_stop=$audio_stop, + gain=$gain, + tau=$tau, +) + + Channel Rate + chan_rate + real + + + Audio Decimation + audio_decim + int + + + Deviation + deviation + 75000 + real + + + Audio Pass + audio_pass + 15000 + real + + + Audio Stop + audio_stop + 16000 + real + + + Gain + gain + 1.0 + real + + + Tau + tau + 75e-6 + real + + + in + complex + + + out + float + + diff --git a/grc/blocks/blks2_fm_preemph.xml b/grc/blocks/blks2_fm_preemph.xml new file mode 100644 index 00000000..672a7a7b --- /dev/null +++ b/grc/blocks/blks2_fm_preemph.xml @@ -0,0 +1,31 @@ + + + + FM Preemphasis + blks2_fm_preemph + from gnuradio import blks2 + blks2.fm_preemph(fs=$samp_rate, tau=$tau) + + Sample Rate + samp_rate + real + + + Tau + tau + 75e-6 + real + + + in + float + + + out + float + + diff --git a/grc/blocks/blks2_gmsk_demod.xml b/grc/blocks/blks2_gmsk_demod.xml new file mode 100644 index 00000000..13ecb334 --- /dev/null +++ b/grc/blocks/blks2_gmsk_demod.xml @@ -0,0 +1,88 @@ + + + + GMSK Demod + blks2_gmsk_demod + from gnuradio import blks2 + blks2.gmsk_demod( + samples_per_symbol=$samples_per_symbol, + gain_mu=$gain_mu, + mu=$mu, + omega_relative_limit=$omega_relative_limit, + freq_error=$freq_error, + verbose=$verbose, + log=$log, +) + + Samples/Symbol + samples_per_symbol + 2 + int + + + Gain Mu + gain_mu + 0.175 + real + + + Mu + mu + 0.5 + real + + + Omega Relative Limit + omega_relative_limit + 0.005 + real + + + Freq Error + freq_error + 0.0 + real + + + Verbose + verbose + False + bool + #if str($verbose) == 'False' then 'part' else 'none'# + + + + + Logging + log + False + bool + #if str($log) == 'False' then 'part' else 'none'# + + + + + in + complex + + + out + byte + + diff --git a/grc/blocks/blks2_gmsk_mod.xml b/grc/blocks/blks2_gmsk_mod.xml new file mode 100644 index 00000000..e80264f1 --- /dev/null +++ b/grc/blocks/blks2_gmsk_mod.xml @@ -0,0 +1,67 @@ + + + + GMSK Mod + blks2_gmsk_mod + from gnuradio import blks2 + blks2.gmsk_mod( + samples_per_symbol=$samples_per_symbol, + bt=$bt, + verbose=$verbose, + log=$log, +) + + Samples/Symbol + samples_per_symbol + 2 + int + + + BT + bt + 0.35 + real + + + Verbose + verbose + False + bool + #if str($verbose) == 'False' then 'part' else 'none'# + + + + + Logging + log + False + bool + #if str($log) == 'False' then 'part' else 'none'# + + + + + in + byte + + + out + complex + + diff --git a/grc/blocks/blks2_logpwrfft_x.xml b/grc/blocks/blks2_logpwrfft_x.xml new file mode 100644 index 00000000..79a3bfc4 --- /dev/null +++ b/grc/blocks/blks2_logpwrfft_x.xml @@ -0,0 +1,90 @@ + + + + Log Power FFT + blks2_logpwrfft_x + from gnuradio import blks2 + blks2.logpwrfft_$(type.fcn)( + sample_rate=$sample_rate, + fft_size=$fft_size, + ref_scale=$ref_scale, + frame_rate=$frame_rate, + avg_alpha=$avg_alpha, + average=$average, +) + set_sample_rate($sample_rate) + set_avg_alpha($avg_alpha) + set_average($average) + + Input Type + type + enum + + + + + Sample Rate + sample_rate + samp_rate + real + + + FFT Size + fft_size + 1024 + int + + + Reference Scale + ref_scale + 2 + real + + + Frame Rate + frame_rate + 30 + real + + + Average + average + False + bool + + + + + Average Alpha + avg_alpha + 1.0 + real + + + in + $type + + + out + float + $fft_size + + diff --git a/grc/blocks/blks2_nbfm_rx.xml b/grc/blocks/blks2_nbfm_rx.xml new file mode 100644 index 00000000..d332b9a6 --- /dev/null +++ b/grc/blocks/blks2_nbfm_rx.xml @@ -0,0 +1,48 @@ + + + + NBFM Receive + blks2_nbfm_rx + from gnuradio import blks2 + blks2.nbfm_rx( + audio_rate=$audio_rate, + quad_rate=$quad_rate, + tau=$tau, + max_dev=$max_dev, +) + + Audio Rate + audio_rate + int + + + Quadrature Rate + quad_rate + int + + + Tau + tau + 75e-6 + real + + + Max Deviation + max_dev + 5e3 + real + + $quad_rate%$audio_rate == 0 + + in + complex + + + out + float + + diff --git a/grc/blocks/blks2_nbfm_tx.xml b/grc/blocks/blks2_nbfm_tx.xml new file mode 100644 index 00000000..3aa7ede0 --- /dev/null +++ b/grc/blocks/blks2_nbfm_tx.xml @@ -0,0 +1,48 @@ + + + + NBFM Transmit + blks2_nbfm_tx + from gnuradio import blks2 + blks2.nbfm_tx( + audio_rate=$audio_rate, + quad_rate=$quad_rate, + tau=$tau, + max_dev=$max_dev, +) + + Audio Rate + audio_rate + int + + + Quadrature Rate + quad_rate + int + + + Tau + tau + 75e-6 + real + + + Max Deviation + max_dev + 5e3 + real + + $quad_rate%$audio_rate == 0 + + in + float + + + out + complex + + diff --git a/grc/blocks/blks2_ofdm_demod.xml b/grc/blocks/blks2_ofdm_demod.xml new file mode 100644 index 00000000..ac5ee479 --- /dev/null +++ b/grc/blocks/blks2_ofdm_demod.xml @@ -0,0 +1,122 @@ + + + + OFDM Demod + blks2_ofdm_demod + from grc_gnuradio import blks2 as grc_blks2 + from gnuradio import blks2 + grc_blks2.packet_demod_$(type.fcn)(blks2.ofdm_demod( + options=grc_blks2.options( + modulation="$modulation", + fft_length=$fft_length, + occupied_tones=$occupied_tones, + cp_length=$cp_length, + snr=$snr, + log=None, + verbose=None, + ), + callback=lambda ok, payload: self.$(id).recv_pkt(ok, payload), + ), +) + + Output Type + type + float + enum + + + + + + + + Modulation + modulation + enum + + + + + + + + + + FFT Length + fft_length + 512 + int + + + Occupied Tones + occupied_tones + 200 + int + + + Cyclic Prefix Length + cp_length + 128 + int + + + SNR + snr + 10 + real + + + in + complex + + + out + $type + + Payload Length: 0 for automatic. + diff --git a/grc/blocks/blks2_ofdm_mod.xml b/grc/blocks/blks2_ofdm_mod.xml new file mode 100644 index 00000000..2c54d10f --- /dev/null +++ b/grc/blocks/blks2_ofdm_mod.xml @@ -0,0 +1,135 @@ + + + + OFDM Mod + blks2_ofdm_mod + from grc_gnuradio import blks2 as grc_blks2 + from gnuradio import blks2 + grc_blks2.packet_mod_$(type.fcn)(blks2.ofdm_mod( + options=grc_blks2.options( + modulation="$modulation", + fft_length=$fft_length, + occupied_tones=$occupied_tones, + cp_length=$cp_length, + pad_for_usrp=$pad_for_usrp, + log=None, + verbose=None, + ), + ), + payload_length=$payload_length, +) + + Input Type + type + float + enum + + + + + + + + Modulation + modulation + enum + + + + + + + + + + FFT Length + fft_length + 512 + int + + + Occupied Tones + occupied_tones + 200 + int + + + Cyclic Prefix Length + cp_length + 128 + int + + + Pad for USRP + pad_for_usrp + enum + + + + + Payload Length + payload_length + 0 + int + + + in + $type + + + out + complex + + Payload Length: 0 for automatic. + diff --git a/grc/blocks/blks2_packet_decoder.xml b/grc/blocks/blks2_packet_decoder.xml new file mode 100644 index 00000000..07b0d1f2 --- /dev/null +++ b/grc/blocks/blks2_packet_decoder.xml @@ -0,0 +1,75 @@ + + + + Packet Decoder + blks2_packet_decoder + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.packet_demod_$(type.fcn)(grc_blks2.packet_decoder( + access_code=$access_code, + threshold=$threshold, + callback=lambda ok, payload: self.$(id).recv_pkt(ok, payload), + ), +) + + Output Type + type + float + enum + + + + + + + + Access Code + access_code + + string + + + Threshold + threshold + -1 + int + + + in + byte + + + out + $type + + +Packet decoder block, for use with the gnuradio demodulator blocks: gmsk, psk, qam. + +Access Code: string of 1's and 0's, leave blank for automatic. + +Threshold: -1 for automatic. + + diff --git a/grc/blocks/blks2_packet_encoder.xml b/grc/blocks/blks2_packet_encoder.xml new file mode 100644 index 00000000..b184ebd3 --- /dev/null +++ b/grc/blocks/blks2_packet_encoder.xml @@ -0,0 +1,110 @@ + + + + Packet Encoder + blks2_packet_encoder + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.packet_mod_$(type.fcn)(grc_blks2.packet_encoder( + samples_per_symbol=$samples_per_symbol, + bits_per_symbol=$bits_per_symbol, + access_code=$access_code, + pad_for_usrp=$pad_for_usrp, + ), + payload_length=$payload_length, +) + + Input Type + type + float + enum + + + + + + + + Samples/Symbol + samples_per_symbol + int + + + Bits/Symbol + bits_per_symbol + int + + + Access Code + access_code + + string + + + Pad for USRP + pad_for_usrp + enum + + + + + Payload Length + payload_length + 0 + int + + + in + $type + + + out + byte + + +Packet encoder block, for use with the gnuradio modulator blocks: gmsk, dpsk, qam. + +Access Code: string of 1's and 0's, leave blank for automatic. + +Payload Length: 0 for automatic. + +Bits/Symbol should be set accordingly: + gmsk -> 1 + dbpsk -> 1 + dqpsk -> 2 + d8psk -> 3 + qam8 -> 3 + qam16 -> 4 + qam64 -> 6 + qam256 -> 8 + + diff --git a/grc/blocks/blks2_qamx_demod.xml b/grc/blocks/blks2_qamx_demod.xml new file mode 100644 index 00000000..e332495a --- /dev/null +++ b/grc/blocks/blks2_qamx_demod.xml @@ -0,0 +1,131 @@ + + + + QAM Demod + blks2_qamx_demod + from gnuradio import blks2 + blks2.$(type)_demod( + samples_per_symbol=$samples_per_symbol, + excess_bw=$excess_bw, + costas_alpha=$costas_alpha, + gain_mu=$gain_mu, + mu=$mu, + omega_relative_limit=$omega_relative_limit, + gray_code=$gray_code, + verbose=$verbose, + log=$log, +) + + Type + type + enum + + + + + + + Samples/Symbol + samples_per_symbol + 2 + int + + + Excess BW + excess_bw + 0.35 + real + + + Costas Alpha + costas_alpha + 0.175 + real + + + Gain Mu + gain_mu + 0.03 + real + + + Mu + mu + 0.05 + real + + + Omega Relative Limit + omega_relative_limit + 0.005 + real + + + Gray Code + gray_code + True + enum + + + + + Verbose + verbose + False + bool + #if str($verbose) == 'False' then 'part' else 'none'# + + + + + Logging + log + False + bool + #if str($log) == 'False' then 'part' else 'none'# + + + + + in + complex + + + out + byte + + diff --git a/grc/blocks/blks2_qamx_mod.xml b/grc/blocks/blks2_qamx_mod.xml new file mode 100644 index 00000000..69a2e9e7 --- /dev/null +++ b/grc/blocks/blks2_qamx_mod.xml @@ -0,0 +1,103 @@ + + + + QAM Mod + blks2_qamx_mod + from gnuradio import blks2 + blks2.$(type)_mod( + samples_per_symbol=$samples_per_symbol, + excess_bw=$excess_bw, + gray_code=$gray_code, + verbose=$verbose, + log=$log, +) + + Type + type + enum + + + + + + + Samples/Symbol + samples_per_symbol + 2 + int + + + Excess BW + excess_bw + 0.35 + real + + + Gray Code + gray_code + True + enum + + + + + Verbose + verbose + False + bool + #if str($verbose) == 'False' then 'part' else 'none'# + + + + + Logging + log + False + bool + #if str($log) == 'False' then 'part' else 'none'# + + + + + in + byte + + + out + complex + + diff --git a/grc/blocks/blks2_rational_resampler_xxx.xml b/grc/blocks/blks2_rational_resampler_xxx.xml new file mode 100644 index 00000000..b92ec8ec --- /dev/null +++ b/grc/blocks/blks2_rational_resampler_xxx.xml @@ -0,0 +1,88 @@ + + + + Rational Resampler + blks2_rational_resampler_xxx + from gnuradio import blks2 + from gnuradio.gr import firdes + blks2.rational_resampler_$(type)( + interpolation=$interp, + decimation=$decim, +#if $taps() + taps=$taps, +#else + taps=None, +#end if +#if $fractional_bw() != 0 + fractional_bw=$fractional_bw, +#else + fractional_bw=None, +#end if +) + + Type + type + enum + + + + + + Decimation + decim + 1 + int + + + Interpolation + interp + 1 + int + + + Taps + taps + [] + $type.taps + + + Fractional BW + fractional_bw + 0 + real + + + in + $type.input + + + out + $type.output + + +Leave taps empty for automatic value. +Leave fractional bandwidth 0 for automatic value. + + diff --git a/grc/blocks/blks2_selector.xml b/grc/blocks/blks2_selector.xml new file mode 100644 index 00000000..2d89df18 --- /dev/null +++ b/grc/blocks/blks2_selector.xml @@ -0,0 +1,97 @@ + + + + Selector + blks2_selector + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.selector( + item_size=$type.size*$vlen, + num_inputs=$num_inputs, + num_outputs=$num_outputs, + input_index=$input_index, + output_index=$output_index, +) + set_input_index(int($input_index)) + set_output_index(int($output_index)) + + Type + type + enum + + + + + + + + Num Inputs + num_inputs + 2 + int + + + Num Outputs + num_outputs + 2 + int + + + Input Index + input_index + 0 + int + + + Output Index + output_index + 0 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + $num_outputs + + +Connect the sink at input index to the source at output index. Leave all other ports disconnected. + + diff --git a/grc/blocks/blks2_standard_squelch.xml b/grc/blocks/blks2_standard_squelch.xml new file mode 100644 index 00000000..f0baeb66 --- /dev/null +++ b/grc/blocks/blks2_standard_squelch.xml @@ -0,0 +1,32 @@ + + + + Standard Squelch + blks2_standard_squelch + from gnuradio import blks2 + blks2.standard_squelch(audio_rate=$audio_rate) +self.$(id).set_threshold($threshold) + set_threshold($threshold) + + Audio Rate + audio_rate + real + + + Threshold + threshold + real + + + in + float + + + out + float + + diff --git a/grc/blocks/blks2_stream_to_vector_decimator.xml b/grc/blocks/blks2_stream_to_vector_decimator.xml new file mode 100644 index 00000000..25f8f7a6 --- /dev/null +++ b/grc/blocks/blks2_stream_to_vector_decimator.xml @@ -0,0 +1,77 @@ + + + + Stream to Vec Decim + blks2_stream_to_vector_decimator + from gnuradio import blks2 + blks2.stream_to_vector_decimator( + item_size=$type.size, + sample_rate=$sample_rate, + vec_rate=$vec_rate, + vec_len=$vlen, +) + set_sample_rate($sample_rate) + set_vec_rate($vec_rate) + + IO Type + type + enum + + + + + + + + Sample Rate + sample_rate + samp_rate + real + + + Vec Rate + vec_rate + 30 + real + + + Vec Length + vlen + 1024 + int + + $vlen >= 1 + + in + $type + + + out + $type + $vlen + + diff --git a/grc/blocks/blks2_synthesis_filterbank.xml b/grc/blocks/blks2_synthesis_filterbank.xml new file mode 100644 index 00000000..5979ed3f --- /dev/null +++ b/grc/blocks/blks2_synthesis_filterbank.xml @@ -0,0 +1,32 @@ + + + + Synthesis Filterbank + blks2_synthesis_filterbank + from gnuradio import blks2 + blks2.synthesis_filterbank(mpoints=$mpoints, taps=$taps) + + MPoints + mpoints + 3 + int + + + Taps + taps + complex_vector + + + in + complex + $mpoints + + + out + complex + + diff --git a/grc/blocks/blks2_tcp_sink.xml b/grc/blocks/blks2_tcp_sink.xml new file mode 100644 index 00000000..cfe7b42d --- /dev/null +++ b/grc/blocks/blks2_tcp_sink.xml @@ -0,0 +1,89 @@ + + + + TCP Sink + blks2_tcp_sink + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.tcp_sink( + itemsize=$type.size*$vlen, + addr=$addr, + port=$port, + server=$server, +) + + Input Type + type + enum + + + + + + + + Address + addr + 127.0.0.1 + string + + + Port + port + 0 + int + + + Mode + server + False + enum + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + +In client mode, we attempt to connect to a server at the given address and port. \ +In server mode, we bind a socket to the given address and port and accept the first client. + + diff --git a/grc/blocks/blks2_tcp_source.xml b/grc/blocks/blks2_tcp_source.xml new file mode 100644 index 00000000..6bf742aa --- /dev/null +++ b/grc/blocks/blks2_tcp_source.xml @@ -0,0 +1,89 @@ + + + + TCP Source + blks2_tcp_source + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.tcp_source( + itemsize=$type.size*$vlen, + addr=$addr, + port=$port, + server=$server, +) + + Output Type + type + enum + + + + + + + + Address + addr + 127.0.0.1 + string + + + Port + port + 0 + int + + + Mode + server + True + enum + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + out + $type + $vlen + + +In client mode, we attempt to connect to a server at the given address and port. \ +In server mode, we bind a socket to the given address and port and accept the first client. + + diff --git a/grc/blocks/blks2_valve.xml b/grc/blocks/blks2_valve.xml new file mode 100644 index 00000000..47c55352 --- /dev/null +++ b/grc/blocks/blks2_valve.xml @@ -0,0 +1,72 @@ + + + + Valve + blks2_valve + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.valve(item_size=$type.size*$vlen, open=bool($open)) + set_open(bool($open)) + + Type + type + enum + + + + + + + + Open + open + 0 + raw + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + $num_outputs + + +Connect output to input when valve is closed (not open). + + diff --git a/grc/blocks/blks2_variable_sink_x.xml b/grc/blocks/blks2_variable_sink_x.xml new file mode 100644 index 00000000..5709c9f7 --- /dev/null +++ b/grc/blocks/blks2_variable_sink_x.xml @@ -0,0 +1,77 @@ + + + + Variable Sink + blks2_variable_sink_x + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.variable_sink_$(type.fcn)( + vlen=$vlen, + decim=$decim, + callback=self.set_$(variable()), +) + set_decim($decim) + + Type + type + enum + + + + + + + + Variable + variable + + string + + + Decimation + decim + 1 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + +Read samples from the input stream and \ +write one in every decimation samples to the variable. + +The variable must be the id of an existing variable block. + + diff --git a/grc/blocks/blks2_wfm_rcv.xml b/grc/blocks/blks2_wfm_rcv.xml new file mode 100644 index 00000000..37fb3ba8 --- /dev/null +++ b/grc/blocks/blks2_wfm_rcv.xml @@ -0,0 +1,33 @@ + + + + WBFM Receive + blks2_wfm_rcv + from gnuradio import blks2 + blks2.wfm_rcv( + quad_rate=$quad_rate, + audio_decimation=$audio_decimation, +) + + Quadrature Rate + quad_rate + real + + + Audio Decimation + audio_decimation + int + + + in + complex + + + out + float + + diff --git a/grc/blocks/blks2_wfm_rcv_pll.xml b/grc/blocks/blks2_wfm_rcv_pll.xml new file mode 100644 index 00000000..2771350c --- /dev/null +++ b/grc/blocks/blks2_wfm_rcv_pll.xml @@ -0,0 +1,37 @@ + + + + WBFM Receive PLL + blks2_wfm_rcv_pll + from gnuradio import blks2 + blks2.wfm_rcv_pll( + demod_rate=$quad_rate, + audio_decimation=$audio_decimation, +) + + Quadrature Rate + quad_rate + real + + + Audio Decimation + audio_decimation + int + + + in + complex + + + Lout + float + + + Rout + float + + diff --git a/grc/blocks/blks2_wfm_tx.xml b/grc/blocks/blks2_wfm_tx.xml new file mode 100644 index 00000000..cff92d81 --- /dev/null +++ b/grc/blocks/blks2_wfm_tx.xml @@ -0,0 +1,48 @@ + + + + WBFM Transmit + blks2_wfm_tx + from gnuradio import blks2 + blks2.wfm_tx( + audio_rate=$audio_rate, + quad_rate=$quad_rate, + tau=$tau, + max_dev=$max_dev, +) + + Audio Rate + audio_rate + int + + + Quadrature Rate + quad_rate + int + + + Tau + tau + 75e-6 + real + + + Max Deviation + max_dev + 75e3 + real + + $quad_rate%$audio_rate == 0 + + in + float + + + out + complex + + diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml new file mode 100644 index 00000000..9eda2fdc --- /dev/null +++ b/grc/blocks/block_tree.xml @@ -0,0 +1,299 @@ + + + + + + Sources + const_source_x + gr_sig_source_x + gr_noise_source_x + gr_vector_source_x + random_source_x + gr_glfsr_source_x + gr_null_source + gr_file_source + blks2_tcp_source + gr_udp_source + audio_source + gr_wavfile_source + pad_source + + + Sinks + blks2_variable_sink_x + gr_vector_sink_x + gr_null_sink + gr_file_sink + blks2_tcp_sink + gr_udp_sink + audio_sink + gr_wavfile_sink + pad_sink + + + Graphical Sinks + wxgui_numbersink2 + wxgui_scopesink2 + wxgui_fftsink2 + wxgui_constellationsink2 + wxgui_waterfallsink2 + wxgui_histosink2 + + + Operators + gr_add_xx + gr_sub_xx + gr_multiply_xx + gr_divide_xx + gr_nlog10_ff + + gr_add_const_vxx + gr_multiply_const_vxx + + gr_not_xx + gr_and_xx + gr_or_xx + gr_xor_xx + + gr_max_xx + gr_argmax_xx + gr_rms_xx + gr_integrate_xx + + gr_conjugate_cc + + gr_fft_vxx + blks2_logpwrfft_x + + + Type Conversions + gr_complex_to_arg + gr_complex_to_mag + gr_complex_to_mag_squared + gr_complex_to_real + gr_complex_to_imag + + gr_complex_to_float + gr_float_to_complex + + gr_float_to_short + gr_short_to_float + + gr_float_to_char + gr_char_to_float + + gr_float_to_uchar + gr_uchar_to_float + + gr_complex_to_interleaved_short + gr_interleaved_short_to_complex + + + Stream Conversions + gr_interleave + gr_deinterleave + + gr_streams_to_stream + gr_stream_to_streams + + gr_streams_to_vector + gr_vector_to_streams + + gr_stream_to_vector + gr_vector_to_stream + + blks2_stream_to_vector_decimator + + + Misc Conversions + gr_unpacked_to_packed_xx + gr_packed_to_unpacked_xx + gr_unpack_k_bits_bb + gr_binary_slicer_fb + gr_chunks_to_symbols_xx + gr_map_bb + + + Synchronizers + gr_clock_recovery_mm_xx + + gr_costas_loop_cc + gr_dd_mpsk_sync_cc + gr_mpsk_sync_cc + gr_mpsk_receiver_cc + + gr_pll_carriertracking_cc + gr_pll_freqdet_cf + gr_pll_refout_cc + + gr_correlate_access_code_bb + gr_pn_correlator_cc + gr_simple_correlator + gr_simple_framer + + blks2_packet_decoder + blks2_packet_encoder + + + Level Controls + gr_dpll_bb + gr_peak_detector_xb + gr_peak_detector2_fb + gr_sample_and_hold_xx + + gr_agc_xx + gr_agc2_xx + gr_feedforward_agc_cc + + gr_mute_xx + gr_simple_squelch_cc + blks2_standard_squelch + gr_pwr_squelch_xx + gr_threshold_ff + + + Filters + + low_pass_filter + high_pass_filter + band_pass_filter + band_reject_filter + root_raised_cosine_filter + + gr_fir_filter_xxx + gr_interp_fir_filter_xxx + gr_fft_filter_xxx + gr_freq_xlating_fir_filter_xxx + gr_iir_filter_ffd + gr_filter_delay_fc + gr_channel_model + + blks2_synthesis_filterbank + blks2_analysis_filterbank + + gr_single_pole_iir_filter_xx + gr_hilbert_fc + gr_goertzel_fc + gr_cma_equalizer_cc + gr_rational_resampler_base_xxx + blks2_rational_resampler_xxx + gr_fractional_interpolator_xx + gr_keep_one_in_n + gr_moving_average_xx + gr_iqcomp_cc + + + Modulators + gr_vco_f + gr_frequency_modulator_fc + gr_phase_modulator_fc + gr_quadrature_demod_cf + gr_cpfsk_bc + + gr_diff_phasor_cc + gr_constellation_decoder_cb + + gr_diff_encoder_bb + gr_diff_decoder_bb + + blks2_wfm_tx + blks2_wfm_rcv + blks2_wfm_rcv_pll + + blks2_nbfm_tx + blks2_nbfm_rx + + blks2_am_demod_cf + blks2_fm_demod_cf + blks2_fm_deemph + blks2_fm_preemph + + blks2_dxpsk_mod + blks2_dxpsk_demod + + blks2_gmsk_mod + blks2_gmsk_demod + + blks2_qamx_mod + blks2_qamx_demod + + blks2_ofdm_mod + blks2_ofdm_demod + + + Error Correction + + Trellis + trellis_encoder_xx + trellis_metrics_x + trellis_permutation + trellis_siso_combined_f + trellis_siso_f + trellis_viterbi_combined_xx + trellis_viterbi_x + + + gr_encode_ccsds_27_bb + gr_decode_ccsds_27_fb + + + Line Coding + gr_scrambler_bb + gr_descrambler_bb + + + Probes + gr_probe_avg_mag_sqrd_x + gr_probe_density_b + gr_probe_mpsk_snr_c + probe_function + + + USRP + usrp_simple_source_x + usrp_simple_sink_x + usrp_dual_source_x + usrp_dual_sink_x + usrp2_source_xxxx + usrp2_sink_xxxx + + + Variables + variable + variable_slider + variable_chooser + variable_check_box + variable_text_box + variable_static_text + variable_config + parameter + + + Misc + note + import + + gr_throttle + gr_delay + gr_repeat + + blks2_selector + blks2_valve + blks2_error_rate + + gr_head + gr_skiphead + + gr_kludge_copy + gr_nop + + xmlrpc_server + xmlrpc_client + + notebook + + diff --git a/grc/blocks/const_source_x.xml b/grc/blocks/const_source_x.xml new file mode 100644 index 00000000..fe8e56ec --- /dev/null +++ b/grc/blocks/const_source_x.xml @@ -0,0 +1,52 @@ + + + + Constant Source + const_source_x + from gnuradio import gr + gr.sig_source_$(type.fcn)(0, gr.GR_CONST_WAVE, 0, 0, $const) + set_offset($const) + + Output Type + type + enum + + + + + + + Constant + const + 0 + $type.const_type + + + out + $type + + diff --git a/grc/blocks/gr_add_const_vxx.xml b/grc/blocks/gr_add_const_vxx.xml new file mode 100644 index 00000000..9f1c545a --- /dev/null +++ b/grc/blocks/gr_add_const_vxx.xml @@ -0,0 +1,67 @@ + + + + Add Const + gr_add_const_vxx + from gnuradio import gr + gr.add_const_v$(type.fcn)($const) + set_k($const) + + IO Type + type + enum + + + + + + + Constant + const + 0 + $type.const_type + + + Vec Length + vlen + 1 + int + + len($const) == $vlen + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_add_xx.xml b/grc/blocks/gr_add_xx.xml new file mode 100644 index 00000000..97ed9283 --- /dev/null +++ b/grc/blocks/gr_add_xx.xml @@ -0,0 +1,63 @@ + + + + Add + gr_add_xx + from gnuradio import gr + gr.add_v$(type.fcn)($vlen) + + IO Type + type + enum + + + + + + + Num Inputs + num_inputs + 2 + int + + + Vec Length + vlen + 1 + int + + $num_inputs > 1 + $vlen > 0 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_agc2_xx.xml b/grc/blocks/gr_agc2_xx.xml new file mode 100644 index 00000000..fb3ae570 --- /dev/null +++ b/grc/blocks/gr_agc2_xx.xml @@ -0,0 +1,65 @@ + + + + AGC2 + gr_agc2_xx + from gnuradio import gr + gr.agc2_$(type.fcn)($attack_rate, $decay_rate, $reference, $gain, $max_gain) + + Type + type + enum + + + + + Attack Rate + attack_rate + 1e-1 + real + + + Decay Rate + decay_rate + 1e-2 + real + + + Reference + reference + 1.0 + real + + + Gain + gain + 1.0 + real + + + Max Gain + max_gain + 0.0 + real + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_agc_xx.xml b/grc/blocks/gr_agc_xx.xml new file mode 100644 index 00000000..c87d239e --- /dev/null +++ b/grc/blocks/gr_agc_xx.xml @@ -0,0 +1,59 @@ + + + + AGC + gr_agc_xx + from gnuradio import gr + gr.agc_$(type.fcn)($rate, $reference, $gain, $max_gain) + + Type + type + enum + + + + + Rate + rate + 1e-4 + real + + + Reference + reference + 1.0 + real + + + Gain + gain + 1.0 + real + + + Max Gain + max_gain + 0.0 + real + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_and_xx.xml b/grc/blocks/gr_and_xx.xml new file mode 100644 index 00000000..9ed00609 --- /dev/null +++ b/grc/blocks/gr_and_xx.xml @@ -0,0 +1,48 @@ + + + + And + gr_and_xx + from gnuradio import gr + gr.and_$(type.fcn)() + + IO Type + type + enum + + + + + + Num Inputs + num_inputs + 2 + int + + $num_inputs >= 2 + + in + $type + $num_inputs + + + out + $type + + diff --git a/grc/blocks/gr_argmax_xx.xml b/grc/blocks/gr_argmax_xx.xml new file mode 100644 index 00000000..95269292 --- /dev/null +++ b/grc/blocks/gr_argmax_xx.xml @@ -0,0 +1,61 @@ + + + + Argmax + gr_argmax_xx + from gnuradio import gr + gr.argmax_$(type.fcn)($vlen) + + IO Type + type + enum + + + + + + Num Inputs + num_inputs + 2 + int + + + Vec Length + vlen + 1 + int + + $num_inputs >= 1 + $vlen >= 1 + + in + $type + $vlen + $num_inputs + + + max_vec + short + + + max_inp + short + + diff --git a/grc/blocks/gr_binary_slicer_fb.xml b/grc/blocks/gr_binary_slicer_fb.xml new file mode 100644 index 00000000..85d71e70 --- /dev/null +++ b/grc/blocks/gr_binary_slicer_fb.xml @@ -0,0 +1,20 @@ + + + + Binary Slicer + gr_binary_slicer_fb + from gnuradio import gr + gr.binary_slicer_fb() + + in + float + + + out + byte + + diff --git a/grc/blocks/gr_channel_model.xml b/grc/blocks/gr_channel_model.xml new file mode 100644 index 00000000..e23062df --- /dev/null +++ b/grc/blocks/gr_channel_model.xml @@ -0,0 +1,61 @@ + + + + Channel Model + gr_channel_model + from gnuradio import gr + from gnuradio.gr import firdes + gr.channel_model( + noise_voltage=$noise_voltage, + frequency_offset=$freq_offset, + epsilon=$epsilon, + taps=$taps, + noise_seed=$seed, +) + set_noise_voltage($noise_voltage) + set_frequency_offset($freq_offset) + set_taps($taps) + set_timing_offset($epsilon) + + Noise Voltage + noise_voltage + 0.0 + real + + + Frequency Offset + freq_offset + 0.0 + real + + + Epsilon + epsilon + 1.0 + real + + + Taps + taps + 1.0 + 1.0j + complex_vector + + + Seed + seed + 42 + int + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_char_to_float.xml b/grc/blocks/gr_char_to_float.xml new file mode 100644 index 00000000..9ab77805 --- /dev/null +++ b/grc/blocks/gr_char_to_float.xml @@ -0,0 +1,20 @@ + + + + Char To Float + gr_char_to_float + from gnuradio import gr + gr.char_to_float() + + in + byte + + + out + float + + diff --git a/grc/blocks/gr_chunks_to_symbols.xml b/grc/blocks/gr_chunks_to_symbols.xml new file mode 100644 index 00000000..b54e710e --- /dev/null +++ b/grc/blocks/gr_chunks_to_symbols.xml @@ -0,0 +1,68 @@ + + + + Chunks to Symbols + gr_chunks_to_symbols_xx + from gnuradio import gr + gr.chunks_to_symbols_$(in_type.fcn)$(out_type.fcn)($symbol_table, $dimension) + + Input Type + in_type + enum + + + + + + Output Type + out_type + enum + + + + + Symbol Table + symbol_table + $out_type.table + + + Dimension + dimension + 2 + int + + + in + $in_type + + + out + $out_type + + diff --git a/grc/blocks/gr_clock_recovery_mm_xx.xml b/grc/blocks/gr_clock_recovery_mm_xx.xml new file mode 100644 index 00000000..613cc23b --- /dev/null +++ b/grc/blocks/gr_clock_recovery_mm_xx.xml @@ -0,0 +1,64 @@ + + + + Clock Recovery MM + gr_clock_recovery_mm_xx + from gnuradio import gr + gr.clock_recovery_mm_$(type.fcn)($omega, $gain_omega, $mu, $gain_mu, $omega_relative_limit) + set_omega($omega) + set_gain_omega($gain_omega) + set_mu($mu) + set_gain_mu($gain_mu) + + Type + type + enum + + + + + Omega + omega + real + + + Gain Omega + gain_omega + real + + + Mu + mu + real + + + Gain Mu + gain_mu + real + + + Omega Relative Limit + omega_relative_limit + real + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_cma_equalizer_cc.xml b/grc/blocks/gr_cma_equalizer_cc.xml new file mode 100644 index 00000000..142fb6d8 --- /dev/null +++ b/grc/blocks/gr_cma_equalizer_cc.xml @@ -0,0 +1,36 @@ + + + + CMA Equalizer + gr_cma_equalizer_cc + from gnuradio import gr + gr.cma_equalizer_cc($num_taps, $modulus, $mu) + + Num Taps + num_taps + 64 + int + + + Modulus + modulus + real + + + Mu + mu + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_complex_to_arg.xml b/grc/blocks/gr_complex_to_arg.xml new file mode 100644 index 00000000..a7bbacd7 --- /dev/null +++ b/grc/blocks/gr_complex_to_arg.xml @@ -0,0 +1,29 @@ + + + + Complex to Arg + gr_complex_to_arg + from gnuradio import gr + gr.complex_to_arg($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + complex + $vlen + + + out + float + $vlen + + diff --git a/grc/blocks/gr_complex_to_float.xml b/grc/blocks/gr_complex_to_float.xml new file mode 100644 index 00000000..5b02c3d3 --- /dev/null +++ b/grc/blocks/gr_complex_to_float.xml @@ -0,0 +1,36 @@ + + + + Complex To Float + gr_complex_to_float + from gnuradio import gr + gr.complex_to_float($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + complex + $vlen + + + out + float + $vlen + + + out + float + $vlen + 1 + + diff --git a/grc/blocks/gr_complex_to_imag.xml b/grc/blocks/gr_complex_to_imag.xml new file mode 100644 index 00000000..7c120eed --- /dev/null +++ b/grc/blocks/gr_complex_to_imag.xml @@ -0,0 +1,29 @@ + + + + Complex to Imag + gr_complex_to_imag + from gnuradio import gr + gr.complex_to_imag($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + complex + $vlen + + + out + float + $vlen + + diff --git a/grc/blocks/gr_complex_to_interleaved_short.xml b/grc/blocks/gr_complex_to_interleaved_short.xml new file mode 100644 index 00000000..5e999599 --- /dev/null +++ b/grc/blocks/gr_complex_to_interleaved_short.xml @@ -0,0 +1,20 @@ + + + + Complex To IShort + gr_complex_to_interleaved_short + from gnuradio import gr + gr.complex_to_interleaved_short() + + in + complex + + + out + short + + diff --git a/grc/blocks/gr_complex_to_mag.xml b/grc/blocks/gr_complex_to_mag.xml new file mode 100644 index 00000000..adc95f20 --- /dev/null +++ b/grc/blocks/gr_complex_to_mag.xml @@ -0,0 +1,29 @@ + + + + Complex to Mag + gr_complex_to_mag + from gnuradio import gr + gr.complex_to_mag($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + complex + $vlen + + + out + float + $vlen + + diff --git a/grc/blocks/gr_complex_to_mag_squared.xml b/grc/blocks/gr_complex_to_mag_squared.xml new file mode 100644 index 00000000..cd23bfb5 --- /dev/null +++ b/grc/blocks/gr_complex_to_mag_squared.xml @@ -0,0 +1,29 @@ + + + + Complex to Mag^2 + gr_complex_to_mag_squared + from gnuradio import gr + gr.complex_to_mag_squared($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + complex + $vlen + + + out + float + $vlen + + diff --git a/grc/blocks/gr_complex_to_real.xml b/grc/blocks/gr_complex_to_real.xml new file mode 100644 index 00000000..ae9ec7b1 --- /dev/null +++ b/grc/blocks/gr_complex_to_real.xml @@ -0,0 +1,29 @@ + + + + Complex to Real + gr_complex_to_real + from gnuradio import gr + gr.complex_to_real($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + complex + $vlen + + + out + float + $vlen + + diff --git a/grc/blocks/gr_conjugate_cc.xml b/grc/blocks/gr_conjugate_cc.xml new file mode 100644 index 00000000..0b4deb34 --- /dev/null +++ b/grc/blocks/gr_conjugate_cc.xml @@ -0,0 +1,20 @@ + + + + Complex Conjugate + gr_conjugate_cc + from gnuradio import gr + gr.conjugate_cc() + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_constellation_decoder_cb.xml b/grc/blocks/gr_constellation_decoder_cb.xml new file mode 100644 index 00000000..99d897a3 --- /dev/null +++ b/grc/blocks/gr_constellation_decoder_cb.xml @@ -0,0 +1,30 @@ + + + + Constellation Decoder + gr_constellation_decoder_cb + from gnuradio import gr + gr.constellation_decoder_cb($sym_position, $sym_value_out) + + Symbol Position + sym_position + complex_vector + + + Symbol Value Out + sym_value_out + int_vector + + + in + complex + + + out + byte + + diff --git a/grc/blocks/gr_correlate_access_code_bb.xml b/grc/blocks/gr_correlate_access_code_bb.xml new file mode 100644 index 00000000..e13d2d07 --- /dev/null +++ b/grc/blocks/gr_correlate_access_code_bb.xml @@ -0,0 +1,31 @@ + + + + Correlate Access Code + gr_correlate_access_code_bb + from gnuradio import gr + gr.correlate_access_code_bb($access_code, $threshold) + + Access Code + access_code + 101010 + string + + + Threshold + threshold + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_costas_loop_cc.xml b/grc/blocks/gr_costas_loop_cc.xml new file mode 100644 index 00000000..e0db8bc5 --- /dev/null +++ b/grc/blocks/gr_costas_loop_cc.xml @@ -0,0 +1,52 @@ + + + + Costas Loop + gr_costas_loop_cc + from gnuradio import gr + gr.costas_loop_cc($alpha, $beta, $max_freq, $min_freq, $order) + set_alpha($alpha) + set_beta($beta) + + Alpha + alpha + real + + + Beta + beta + real + + + Max Freq + max_freq + real + + + Min Freq + min_freq + real + + + Order + order + int + + + in + complex + + + out + complex + + + out + complex + 1 + + diff --git a/grc/blocks/gr_cpfsk_bc.xml b/grc/blocks/gr_cpfsk_bc.xml new file mode 100644 index 00000000..d5549d93 --- /dev/null +++ b/grc/blocks/gr_cpfsk_bc.xml @@ -0,0 +1,37 @@ + + + + CPFSK + gr_cpfsk_bc + from gnuradio import gr + gr.cpfsk_bc($k, $amplitude, $samples_per_symbol) + set_amplitude($amplitude) + + K + k + real + + + Amplitude + amplitude + real + + + Samples/Symbol + samples_per_symbol + 2 + int + + + in + byte + + + out + complex + + diff --git a/grc/blocks/gr_dd_mpsk_sync_cc.xml b/grc/blocks/gr_dd_mpsk_sync_cc.xml new file mode 100644 index 00000000..aed0e8d3 --- /dev/null +++ b/grc/blocks/gr_dd_mpsk_sync_cc.xml @@ -0,0 +1,65 @@ + + + + DD MPSK Sync + gr_dd_mpsk_sync_cc + from gnuradio import gr + gr.dd_mpsk_sync_cc($alpha, $beta, $max_freq, $min_freq, $ref_phase, $omega, $gain_omega, $mu, $gain_mu) + + Alpha + alpha + real + + + Beta + beta + real + + + Max Freq + max_freq + real + + + Min Freq + min_freq + real + + + Reference Phase + ref_phase + real + + + Omega + omega + real + + + Gain Omega + gain_omega + real + + + Mu + mu + real + + + Gain Mu + gain_mu + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_decode_ccsds_27_fb.xml b/grc/blocks/gr_decode_ccsds_27_fb.xml new file mode 100644 index 00000000..03b31db8 --- /dev/null +++ b/grc/blocks/gr_decode_ccsds_27_fb.xml @@ -0,0 +1,20 @@ + + + + Decode CCSDS 27 + gr_decode_ccsds_27_fb + from gnuradio import gr + gr.decode_ccsds_27_fb() + + in + float + + + out + byte + + diff --git a/grc/blocks/gr_deinterleave.xml b/grc/blocks/gr_deinterleave.xml new file mode 100644 index 00000000..a7482978 --- /dev/null +++ b/grc/blocks/gr_deinterleave.xml @@ -0,0 +1,67 @@ + + + + Deinterleave + gr_deinterleave + from gnuradio import gr + gr.deinterleave($type.size*$vlen) + + IO Type + type + enum + + + + + + + + Num Streams + num_streams + 2 + int + + + Vec Length + vlen + 1 + int + + $num_streams > 0 + $vlen >= 1 + + in + $type + $vlen + + + out + $type + $vlen + $num_streams + + diff --git a/grc/blocks/gr_delay.xml b/grc/blocks/gr_delay.xml new file mode 100644 index 00000000..64a774de --- /dev/null +++ b/grc/blocks/gr_delay.xml @@ -0,0 +1,66 @@ + + + + Delay + gr_delay + from gnuradio import gr + gr.delay($type.size*$vlen, $delay) + set_delay($delay) + + Type + type + enum + + + + + + + + Delay + delay + 0 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_descrambler_bb.xml b/grc/blocks/gr_descrambler_bb.xml new file mode 100644 index 00000000..5cfbcc20 --- /dev/null +++ b/grc/blocks/gr_descrambler_bb.xml @@ -0,0 +1,38 @@ + + + + Descrambler + gr_descrambler_bb + from gnuradio import gr + gr.descrambler_bb($mask, $seed, $len) + + Mask + mask + 0x8A + hex + + + Seed + seed + 0x7F + hex + + + Length + len + 7 + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_diff_decoder_bb.xml b/grc/blocks/gr_diff_decoder_bb.xml new file mode 100644 index 00000000..ea7cf173 --- /dev/null +++ b/grc/blocks/gr_diff_decoder_bb.xml @@ -0,0 +1,25 @@ + + + + Differential Decoder + gr_diff_decoder_bb + from gnuradio import gr + gr.diff_decoder_bb($modulus) + + Modulus + modulus + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_diff_encoder_bb.xml b/grc/blocks/gr_diff_encoder_bb.xml new file mode 100644 index 00000000..21241eac --- /dev/null +++ b/grc/blocks/gr_diff_encoder_bb.xml @@ -0,0 +1,25 @@ + + + + Differential Encoder + gr_diff_encoder_bb + from gnuradio import gr + gr.diff_encoder_bb($modulus) + + Modulus + modulus + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_diff_phasor_cc.xml b/grc/blocks/gr_diff_phasor_cc.xml new file mode 100644 index 00000000..2b2d7e37 --- /dev/null +++ b/grc/blocks/gr_diff_phasor_cc.xml @@ -0,0 +1,20 @@ + + + + Differential Phasor + gr_diff_phasor_cc + from gnuradio import gr + gr.diff_phasor_cc() + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_divide_xx.xml b/grc/blocks/gr_divide_xx.xml new file mode 100644 index 00000000..04667bc2 --- /dev/null +++ b/grc/blocks/gr_divide_xx.xml @@ -0,0 +1,63 @@ + + + + Divide + gr_divide_xx + from gnuradio import gr + gr.divide_$(type.fcn)($vlen) + + IO Type + type + enum + + + + + + + Vec Length + vlen + 1 + int + + + Num Inputs + num_inputs + 2 + int + + $vlen > 0 + $num_inputs >= 2 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_dpll_bb.xml b/grc/blocks/gr_dpll_bb.xml new file mode 100644 index 00000000..044d398f --- /dev/null +++ b/grc/blocks/gr_dpll_bb.xml @@ -0,0 +1,30 @@ + + + + Detect Peak + gr_dpll_bb + from gnuradio import gr + gr.dpll_bb($period, $gain) + + Period + period + real + + + Gain + gain + real + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_encode_ccsds_27_bb.xml b/grc/blocks/gr_encode_ccsds_27_bb.xml new file mode 100644 index 00000000..f31e6b6c --- /dev/null +++ b/grc/blocks/gr_encode_ccsds_27_bb.xml @@ -0,0 +1,20 @@ + + + + Encode CCSDS 27 + gr_encode_ccsds_27_bb + from gnuradio import gr + gr.encode_ccsds_27_bb() + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_feedforward_agc_cc.xml b/grc/blocks/gr_feedforward_agc_cc.xml new file mode 100644 index 00000000..24e80953 --- /dev/null +++ b/grc/blocks/gr_feedforward_agc_cc.xml @@ -0,0 +1,32 @@ + + + + Feed Forward AGC + gr_feedforward_agc_cc + from gnuradio import gr + gr.feedforward_agc_cc($num_samples, $reference) + + Num Samples + num_samples + 1024 + int + + + Reference + reference + 1.0 + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_fft_filter_xxx.xml b/grc/blocks/gr_fft_filter_xxx.xml new file mode 100644 index 00000000..c1633094 --- /dev/null +++ b/grc/blocks/gr_fft_filter_xxx.xml @@ -0,0 +1,52 @@ + + + + FFT Filter + gr_fft_filter_xxx + from gnuradio import gr + from gnuradio.gr import firdes + gr.fft_filter_$(type)($decim, $taps) + set_taps($taps) + + Type + type + enum + + + + + Decimation + decim + 1 + int + + + Taps + taps + $type.taps + + + in + $type.input + + + out + $type.output + + diff --git a/grc/blocks/gr_fft_vxx.xml b/grc/blocks/gr_fft_vxx.xml new file mode 100644 index 00000000..d398486e --- /dev/null +++ b/grc/blocks/gr_fft_vxx.xml @@ -0,0 +1,81 @@ + + + + FFT + gr_fft_vxx + from gnuradio import gr + from gnuradio import window + #if $type() == "complex" +gr.fft_vcc($fft_size, $forward, $window, $shift) +#else +gr.fft_vfc($fft_size, $forward, $window) +#end if + + Input Type + type + enum + + + + + FFT Size + fft_size + 1024 + int + + + Forward/Reverse + forward + enum + + + + + Window + window + window.blackmanharris(1024) + real_vector + + + Shift + shift + enum + $type.hide_shift + + + + + in + $type + $fft_size + + + out + complex + $fft_size + + diff --git a/grc/blocks/gr_file_sink.xml b/grc/blocks/gr_file_sink.xml new file mode 100644 index 00000000..880dc275 --- /dev/null +++ b/grc/blocks/gr_file_sink.xml @@ -0,0 +1,60 @@ + + + + File Sink + gr_file_sink + from gnuradio import gr + gr.file_sink($type.size*$vlen, $file) + + File + file + + file_save + + + Input Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + diff --git a/grc/blocks/gr_file_source.xml b/grc/blocks/gr_file_source.xml new file mode 100644 index 00000000..fcc7a704 --- /dev/null +++ b/grc/blocks/gr_file_source.xml @@ -0,0 +1,74 @@ + + + + File Source + gr_file_source + from gnuradio import gr + gr.file_source($type.size*$vlen, $file, $repeat) + + File + file + + file_open + + + Output Type + type + enum + + + + + + + + Repeat + repeat + True + enum + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + out + $type + $vlen + + diff --git a/grc/blocks/gr_filter_delay_fc.xml b/grc/blocks/gr_filter_delay_fc.xml new file mode 100644 index 00000000..30d65bf8 --- /dev/null +++ b/grc/blocks/gr_filter_delay_fc.xml @@ -0,0 +1,31 @@ + + + + Filter Delay + gr_filter_delay_fc + from gnuradio import gr + from gnuradio.gr import firdes + gr.filter_delay_fc($taps) + + Taps + taps + real_vector + + + in + float + + + in + float + 1 + + + out + complex + + diff --git a/grc/blocks/gr_fir_filter_xxx.xml b/grc/blocks/gr_fir_filter_xxx.xml new file mode 100644 index 00000000..c4de8f53 --- /dev/null +++ b/grc/blocks/gr_fir_filter_xxx.xml @@ -0,0 +1,80 @@ + + + + Decimating FIR Filter + gr_fir_filter_xxx + from gnuradio import gr + from gnuradio.gr import firdes + gr.fir_filter_$(type)($decim, $taps) + set_taps($taps) + + Type + type + enum + + + + + + + + + Decimation + decim + 1 + int + + + Taps + taps + $type.taps + + + in + $type.input + + + out + $type.output + + diff --git a/grc/blocks/gr_float_to_char.xml b/grc/blocks/gr_float_to_char.xml new file mode 100644 index 00000000..907de774 --- /dev/null +++ b/grc/blocks/gr_float_to_char.xml @@ -0,0 +1,20 @@ + + + + Float To Char + gr_float_to_char + from gnuradio import gr + gr.float_to_char() + + in + float + + + out + byte + + diff --git a/grc/blocks/gr_float_to_complex.xml b/grc/blocks/gr_float_to_complex.xml new file mode 100644 index 00000000..a1644efd --- /dev/null +++ b/grc/blocks/gr_float_to_complex.xml @@ -0,0 +1,36 @@ + + + + Float To Complex + gr_float_to_complex + from gnuradio import gr + gr.float_to_complex($vlen) + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + float + $vlen + + + in + float + $vlen + 1 + + + out + complex + $vlen + + diff --git a/grc/blocks/gr_float_to_short.xml b/grc/blocks/gr_float_to_short.xml new file mode 100644 index 00000000..cb2bcd4b --- /dev/null +++ b/grc/blocks/gr_float_to_short.xml @@ -0,0 +1,20 @@ + + + + Float To Short + gr_float_to_short + from gnuradio import gr + gr.float_to_short() + + in + float + + + out + short + + diff --git a/grc/blocks/gr_float_to_uchar.xml b/grc/blocks/gr_float_to_uchar.xml new file mode 100644 index 00000000..aa804d7d --- /dev/null +++ b/grc/blocks/gr_float_to_uchar.xml @@ -0,0 +1,20 @@ + + + + Float To UChar + gr_float_to_uchar + from gnuradio import gr + gr.float_to_uchar() + + in + float + + + out + byte + + diff --git a/grc/blocks/gr_fractional_interpolator_xx.xml b/grc/blocks/gr_fractional_interpolator_xx.xml new file mode 100644 index 00000000..8d65ff8b --- /dev/null +++ b/grc/blocks/gr_fractional_interpolator_xx.xml @@ -0,0 +1,46 @@ + + + + Fractional Interpolator + gr_fractional_interpolator_xx + from gnuradio import gr + gr.fractional_interpolator_$(type.fcn)($phase_shift, $interp_ratio) + set_interp_ratio($interp_ratio) + + Type + type + enum + + + + + Phase Shift + phase_shift + real + + + Interpolation Ratio + interp_ratio + real + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_freq_xlating_fir_filter_xxx.xml b/grc/blocks/gr_freq_xlating_fir_filter_xxx.xml new file mode 100644 index 00000000..e3ee6697 --- /dev/null +++ b/grc/blocks/gr_freq_xlating_fir_filter_xxx.xml @@ -0,0 +1,93 @@ + + + + Frequency Xlating FIR Filter + gr_freq_xlating_fir_filter_xxx + from gnuradio import gr + from gnuradio.gr import firdes + gr.freq_xlating_fir_filter_$(type)($decim, $taps, $center_freq, $samp_rate) + set_taps($taps) + set_center_freq($center_freq) + + Type + type + enum + + + + + + + + + Decimation + decim + 1 + int + + + Taps + taps + $type.taps + + + Center Frequency + center_freq + 0 + real + + + Sample Rate + samp_rate + samp_rate + real + + + in + $type.input + + + out + $type.output + + diff --git a/grc/blocks/gr_frequency_modulator_fc.xml b/grc/blocks/gr_frequency_modulator_fc.xml new file mode 100644 index 00000000..f18d9f1e --- /dev/null +++ b/grc/blocks/gr_frequency_modulator_fc.xml @@ -0,0 +1,25 @@ + + + + Frequency Mod + gr_frequency_modulator_fc + from gnuradio import gr + gr.frequency_modulator_fc($sensitivity) + + Sensitivity + sensitivity + real + + + in + float + + + out + complex + + diff --git a/grc/blocks/gr_glfsr_source_x.xml b/grc/blocks/gr_glfsr_source_x.xml new file mode 100644 index 00000000..88fb6679 --- /dev/null +++ b/grc/blocks/gr_glfsr_source_x.xml @@ -0,0 +1,59 @@ + + + + GLFSR Source + gr_glfsr_source_x + from gnuradio import gr + gr.glfsr_source_$(type.fcn)($degree, $repeat, $mask, $seed) + + Type + type + enum + + + + + Degree + degree + int + + + Repeat + repeat + enum + + + + + Mask + mask + int + + + Seed + seed + int + + + out + $type + + diff --git a/grc/blocks/gr_goertzel_fc.xml b/grc/blocks/gr_goertzel_fc.xml new file mode 100644 index 00000000..2105445d --- /dev/null +++ b/grc/blocks/gr_goertzel_fc.xml @@ -0,0 +1,35 @@ + + + + Goertzel + gr_goertzel_fc + from gnuradio import gr + gr.goertzel_fc($rate, $len, $freq) + + Rate + rate + int + + + Length + len + int + + + Frequency + freq + real + + + in + float + + + out + complex + + diff --git a/grc/blocks/gr_head.xml b/grc/blocks/gr_head.xml new file mode 100644 index 00000000..e5ff7f6a --- /dev/null +++ b/grc/blocks/gr_head.xml @@ -0,0 +1,65 @@ + + + + Head + gr_head + from gnuradio import gr + gr.head($type.size*$vlen, $num_items) + + Type + type + enum + + + + + + + + Num Items + num_items + 1024 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_hilbert_fc.xml b/grc/blocks/gr_hilbert_fc.xml new file mode 100644 index 00000000..165e8da2 --- /dev/null +++ b/grc/blocks/gr_hilbert_fc.xml @@ -0,0 +1,26 @@ + + + + Hilbert + gr_hilbert_fc + from gnuradio import gr + gr.hilbert_fc($num_taps) + + Num Taps + num_taps + 64 + int + + + in + float + + + out + complex + + diff --git a/grc/blocks/gr_iir_filter_ffd.xml b/grc/blocks/gr_iir_filter_ffd.xml new file mode 100644 index 00000000..9799150e --- /dev/null +++ b/grc/blocks/gr_iir_filter_ffd.xml @@ -0,0 +1,31 @@ + + + + IIR Filter + gr_iir_filter_ffd + from gnuradio import gr + gr.iir_filter_ffd($fftaps, $fbtaps) + set_taps($fftaps, $fbtaps) + + Feed-forward Taps + fftaps + real_vector + + + Feedback Taps + fbtaps + real_vector + + + in + float + + + out + float + + diff --git a/grc/blocks/gr_integrate_xx.xml b/grc/blocks/gr_integrate_xx.xml new file mode 100644 index 00000000..d0ebd42e --- /dev/null +++ b/grc/blocks/gr_integrate_xx.xml @@ -0,0 +1,50 @@ + + + + Integrate + gr_integrate_xx + from gnuradio import gr + gr.integrate_$(type.fcn)($decim) + + IO Type + type + enum + + + + + + + Decimation + decim + int + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_interleave.xml b/grc/blocks/gr_interleave.xml new file mode 100644 index 00000000..3db16ab5 --- /dev/null +++ b/grc/blocks/gr_interleave.xml @@ -0,0 +1,67 @@ + + + + Interleave + gr_interleave + from gnuradio import gr + gr.interleave($type.size*$vlen) + + IO Type + type + enum + + + + + + + + Num Streams + num_streams + 2 + int + + + Vec Length + vlen + 1 + int + + $num_streams > 0 + $vlen >= 1 + + in + $type + $vlen + $num_streams + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_interleaved_short_to_complex.xml b/grc/blocks/gr_interleaved_short_to_complex.xml new file mode 100644 index 00000000..e3023e49 --- /dev/null +++ b/grc/blocks/gr_interleaved_short_to_complex.xml @@ -0,0 +1,20 @@ + + + + IShort To Complex + gr_interleaved_short_to_complex + from gnuradio import gr + gr.interleaved_short_to_complex() + + in + short + + + out + complex + + diff --git a/grc/blocks/gr_interp_fir_filter_xxx.xml b/grc/blocks/gr_interp_fir_filter_xxx.xml new file mode 100644 index 00000000..55375ae0 --- /dev/null +++ b/grc/blocks/gr_interp_fir_filter_xxx.xml @@ -0,0 +1,80 @@ + + + + Interpolating FIR Filter + gr_interp_fir_filter_xxx + from gnuradio import gr + from gnuradio.gr import firdes + gr.interp_fir_filter_$(type)($interp, $taps) + set_taps($taps) + + Type + type + enum + + + + + + + + + Interpolation + interp + 1 + int + + + Taps + taps + $type.taps + + + in + $type.input + + + out + $type.output + + diff --git a/grc/blocks/gr_iqcomp_cc.xml b/grc/blocks/gr_iqcomp_cc.xml new file mode 100644 index 00000000..1603bdc4 --- /dev/null +++ b/grc/blocks/gr_iqcomp_cc.xml @@ -0,0 +1,25 @@ + + + + IQ Comp + gr_iqcomp_cc + from gnuradio import gr + gr.iqcomp_cc($mu) + + Mu + mu + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_keep_one_in_n.xml b/grc/blocks/gr_keep_one_in_n.xml new file mode 100644 index 00000000..21595b75 --- /dev/null +++ b/grc/blocks/gr_keep_one_in_n.xml @@ -0,0 +1,67 @@ + + + + Keep 1 in N + gr_keep_one_in_n + from gnuradio import gr + gr.keep_one_in_n($type.size*$vlen, $n) + set_n($n) + + Type + type + enum + + + + + + + + N + n + 1 + int + + + Vec Length + vlen + 1 + int + + $n > 0 + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_kludge_copy.xml b/grc/blocks/gr_kludge_copy.xml new file mode 100644 index 00000000..3c817c57 --- /dev/null +++ b/grc/blocks/gr_kludge_copy.xml @@ -0,0 +1,59 @@ + + + + Copy + gr_kludge_copy + from gnuradio import gr + gr.kludge_copy($type.size*$vlen) + + Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_map_bb.xml b/grc/blocks/gr_map_bb.xml new file mode 100644 index 00000000..20d6bd2b --- /dev/null +++ b/grc/blocks/gr_map_bb.xml @@ -0,0 +1,25 @@ + + + + Map + gr_map_bb + from gnuradio import gr + gr.map_bb($map) + + Map + map + int_vector + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_max_xx.xml b/grc/blocks/gr_max_xx.xml new file mode 100644 index 00000000..9dbbe60e --- /dev/null +++ b/grc/blocks/gr_max_xx.xml @@ -0,0 +1,58 @@ + + + + Max + gr_max_xx + from gnuradio import gr + gr.max_$(type.fcn)($vlen) + + IO Type + type + enum + + + + + + Num Inputs + num_inputs + 2 + int + + + Vec Length + vlen + 1 + int + + $num_inputs >= 2 + $vlen >= 1 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_moving_average_xx.xml b/grc/blocks/gr_moving_average_xx.xml new file mode 100644 index 00000000..b70943c7 --- /dev/null +++ b/grc/blocks/gr_moving_average_xx.xml @@ -0,0 +1,68 @@ + + + + Moving Average + gr_moving_average_xx + from gnuradio import gr + gr.moving_average_$(type.fcn)($length, $scale, $max_iter) + set_length_and_scale($length, $scale) + + Type + type + enum + + + + + + + Length + length + 1000 + int + + + Scale + scale + 1 + $type.scale + + + Max Iter + max_iter + 4000 + int + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_mpsk_receiver_cc.xml b/grc/blocks/gr_mpsk_receiver_cc.xml new file mode 100644 index 00000000..843c3a4c --- /dev/null +++ b/grc/blocks/gr_mpsk_receiver_cc.xml @@ -0,0 +1,81 @@ + + + + MPSK Receiver + gr_mpsk_receiver_cc + from gnuradio import gr + gr.mpsk_receiver_cc($M, $theta, $alpha, $beta, $fmin, $fmax, $mu, $gain_mu, $omega, $gain_omega, $omega_relative_limit) + set_alpha($alpha) + set_beta($beta) + set_mu($mu) + set_gain_mu($gain_mu) + set_omega($omega) + set_gain_omega($gain_omega) + + M + M + int + + + Theta + theta + real + + + Alpha + alpha + real + + + Beta + beta + real + + + Min Freq + fmin + real + + + Max Freq + fmax + real + + + Mu + mu + real + + + Gain Mu + gain_mu + real + + + Omega + omega + real + + + Gain Omega + gain_omega + real + + + Omega Relative Limit + omega_relative_limit + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_mpsk_sync_cc.xml b/grc/blocks/gr_mpsk_sync_cc.xml new file mode 100644 index 00000000..fd08f834 --- /dev/null +++ b/grc/blocks/gr_mpsk_sync_cc.xml @@ -0,0 +1,69 @@ + + + + MPSK Sync + gr_mpsk_sync_cc + from gnuradio import gr + gr.mpsk_sync_cc($alpha, $beta, $max_freq, $min_freq, $ref_phase, $omega, $gain_omega, $mu, $gain_mu) + set_mu($mu) + set_gain_mu($gain_mu) + set_omega($omega) + set_gain_omega($gain_omega) + + Alpha + alpha + real + + + Beta + beta + real + + + Max Freq + max_freq + real + + + Min Freq + min_freq + real + + + Reference Phase + ref_phase + real + + + Omega + omega + real + + + Gain Omega + gain_omega + real + + + Mu + mu + real + + + Gain Mu + gain_mu + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_multiply_const_vxx.xml b/grc/blocks/gr_multiply_const_vxx.xml new file mode 100644 index 00000000..1309d75c --- /dev/null +++ b/grc/blocks/gr_multiply_const_vxx.xml @@ -0,0 +1,67 @@ + + + + Multiply Const + gr_multiply_const_vxx + from gnuradio import gr + gr.multiply_const_v$(type.fcn)($const) + set_k($const) + + IO Type + type + enum + + + + + + + Constant + const + 0 + $type.const_type + + + Vec Length + vlen + 1 + int + + len($const) == $vlen + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_multiply_xx.xml b/grc/blocks/gr_multiply_xx.xml new file mode 100644 index 00000000..60f65c27 --- /dev/null +++ b/grc/blocks/gr_multiply_xx.xml @@ -0,0 +1,63 @@ + + + + Multiply + gr_multiply_xx + from gnuradio import gr + gr.multiply_v$(type.fcn)($vlen) + + IO Type + type + enum + + + + + + + Num Inputs + num_inputs + 2 + int + + + Vec Length + vlen + 1 + int + + $num_inputs > 1 + $vlen > 0 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_mute_xx.xml b/grc/blocks/gr_mute_xx.xml new file mode 100644 index 00000000..a9a857c6 --- /dev/null +++ b/grc/blocks/gr_mute_xx.xml @@ -0,0 +1,61 @@ + + + + Mute + gr_mute_xx + from gnuradio import gr + gr.mute_$(type.fcn)(bool($mute)) + set_mute(bool($mute)) + + IO Type + type + enum + + + + + + + Mute + mute + False + raw + + + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_nlog10_ff.xml b/grc/blocks/gr_nlog10_ff.xml new file mode 100644 index 00000000..93507823 --- /dev/null +++ b/grc/blocks/gr_nlog10_ff.xml @@ -0,0 +1,42 @@ + + + + Log10 + gr_nlog10_ff + from gnuradio import gr + gr.nlog10_ff($n, $vlen, $k) + + n + n + 1 + real + + + k + k + 0 + real + + + Vec Length + vlen + 1 + int + + $vlen >= 1 + + in + float + $vlen + + + out + float + $vlen + + diff --git a/grc/blocks/gr_noise_source_x.xml b/grc/blocks/gr_noise_source_x.xml new file mode 100644 index 00000000..4fcef514 --- /dev/null +++ b/grc/blocks/gr_noise_source_x.xml @@ -0,0 +1,77 @@ + + + + Noise Source + gr_noise_source_x + from gnuradio import gr + gr.noise_source_$(type.fcn)($noise_type, $amp, $seed) + set_type($noise_type) + set_amplitude($amp) + + Output Type + type + enum + + + + + + + Noise Type + noise_type + gr.GR_GAUSSIAN + raw + + + + + + + Amplitude + amp + 1 + real + + + Seed + seed + 42 + int + + + out + $type + + diff --git a/grc/blocks/gr_nop.xml b/grc/blocks/gr_nop.xml new file mode 100644 index 00000000..127a78a5 --- /dev/null +++ b/grc/blocks/gr_nop.xml @@ -0,0 +1,59 @@ + + + + Nop + gr_nop + from gnuradio import gr + gr.nop($type.size*$vlen) + + Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_not_xx.xml b/grc/blocks/gr_not_xx.xml new file mode 100644 index 00000000..7af7e4b6 --- /dev/null +++ b/grc/blocks/gr_not_xx.xml @@ -0,0 +1,48 @@ + + + + Not + gr_not_xx + from gnuradio import gr + gr.not_$(type.fcn)() + + IO Type + type + enum + + + + + + Num Inputs + num_inputs + 2 + int + + $num_inputs >= 2 + + in + $type + $num_inputs + + + out + $type + + diff --git a/grc/blocks/gr_null_sink.xml b/grc/blocks/gr_null_sink.xml new file mode 100644 index 00000000..ed106b49 --- /dev/null +++ b/grc/blocks/gr_null_sink.xml @@ -0,0 +1,54 @@ + + + + Null Sink + gr_null_sink + from gnuradio import gr + gr.null_sink($type.size*$vlen) + + Input Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + diff --git a/grc/blocks/gr_null_source.xml b/grc/blocks/gr_null_source.xml new file mode 100644 index 00000000..6132eae3 --- /dev/null +++ b/grc/blocks/gr_null_source.xml @@ -0,0 +1,54 @@ + + + + Null Source + gr_null_source + from gnuradio import gr + gr.null_source($type.size*$vlen) + + Output Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + out + $type + $vlen + + diff --git a/grc/blocks/gr_or_xx.xml b/grc/blocks/gr_or_xx.xml new file mode 100644 index 00000000..b374aa22 --- /dev/null +++ b/grc/blocks/gr_or_xx.xml @@ -0,0 +1,48 @@ + + + + Or + gr_or_xx + from gnuradio import gr + gr.or_$(type.fcn)() + + IO Type + type + enum + + + + + + Num Inputs + num_inputs + 2 + int + + $num_inputs >= 2 + + in + $type + $num_inputs + + + out + $type + + diff --git a/grc/blocks/gr_packed_to_unpacked_xx.xml b/grc/blocks/gr_packed_to_unpacked_xx.xml new file mode 100644 index 00000000..5fd9729a --- /dev/null +++ b/grc/blocks/gr_packed_to_unpacked_xx.xml @@ -0,0 +1,59 @@ + + + + Packed to Unpacked + gr_packed_to_unpacked_xx + from gnuradio import gr + gr.packed_to_unpacked_$(type.fcn)($bits_per_chunk, $endianness) + + Type + type + enum + + + + + + Bits per Chunk + bits_per_chunk + 2 + int + + + Endianness + endianness + enum + + + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_peak_detector2_fb.xml b/grc/blocks/gr_peak_detector2_fb.xml new file mode 100644 index 00000000..128c6244 --- /dev/null +++ b/grc/blocks/gr_peak_detector2_fb.xml @@ -0,0 +1,38 @@ + + + + Peak Detector2 + gr_peak_detector2_fb + from gnuradio import gr + gr.peak_detector2_fb($threshold_factor_rise, $look_ahead, $alpha) + set_threshold_factor_rise($threshold_factor_rise) + set_look_ahead($look_ahead) + set_alpha($alpha) + + TH Factor Rise + threshold_factor_rise + real + + + Look Ahead + look_ahead + int + + + Alpha + alpha + real + + + in + float + + + out + byte + + diff --git a/grc/blocks/gr_peak_detector_xb.xml b/grc/blocks/gr_peak_detector_xb.xml new file mode 100644 index 00000000..394b0697 --- /dev/null +++ b/grc/blocks/gr_peak_detector_xb.xml @@ -0,0 +1,64 @@ + + + + Peak Detector + gr_peak_detector_xb + from gnuradio import gr + gr.peak_detector_$(type.fcn)b($threshold_factor_rise, $threshold_factor_fall, $look_ahead, $alpha) + set_threshold_factor_rise($threshold_factor_rise) + set_threshold_factor_fall($threshold_factor_fall) + set_look_ahead($look_ahead) + set_alpha($alpha) + + Input Type + type + enum + + + + + + TH Factor Rise + threshold_factor_rise + real + + + TH Factor Fall + threshold_factor_fall + real + + + Look Ahead + look_ahead + int + + + Alpha + alpha + real + + + in + $type + + + out + byte + + diff --git a/grc/blocks/gr_phase_modulator_fc.xml b/grc/blocks/gr_phase_modulator_fc.xml new file mode 100644 index 00000000..758c5086 --- /dev/null +++ b/grc/blocks/gr_phase_modulator_fc.xml @@ -0,0 +1,25 @@ + + + + Phase Mod + gr_phase_modulator_fc + from gnuradio import gr + gr.phase_modulator_fc($sensitivity) + + Sensitivity + sensitivity + real + + + in + float + + + out + complex + + diff --git a/grc/blocks/gr_pll_carriertracking_cc.xml b/grc/blocks/gr_pll_carriertracking_cc.xml new file mode 100644 index 00000000..5b876b25 --- /dev/null +++ b/grc/blocks/gr_pll_carriertracking_cc.xml @@ -0,0 +1,40 @@ + + + + PLL Carrier Tracking + gr_pll_carriertracking_cc + from gnuradio import gr + gr.pll_carriertracking_cc($alpha, $beta, $max_freq, $min_freq) + + Alpha + alpha + real + + + Beta + beta + real + + + Max Freq + max_freq + real + + + Min Freq + min_freq + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_pll_freqdet_cf.xml b/grc/blocks/gr_pll_freqdet_cf.xml new file mode 100644 index 00000000..8ec1fb3b --- /dev/null +++ b/grc/blocks/gr_pll_freqdet_cf.xml @@ -0,0 +1,40 @@ + + + + PLL Freq Det + gr_pll_freqdet_cf + from gnuradio import gr + gr.pll_freqdet_cf($alpha, $beta, $max_freq, $min_freq) + + Alpha + alpha + real + + + Beta + beta + real + + + Max Freq + max_freq + real + + + Min Freq + min_freq + real + + + in + complex + + + out + float + + diff --git a/grc/blocks/gr_pll_refout_cc.xml b/grc/blocks/gr_pll_refout_cc.xml new file mode 100644 index 00000000..64cf2bfb --- /dev/null +++ b/grc/blocks/gr_pll_refout_cc.xml @@ -0,0 +1,40 @@ + + + + PLL Ref Out + gr_pll_refout_cc + from gnuradio import gr + gr.pll_refout_cc($alpha, $beta, $max_freq, $min_freq) + + Alpha + alpha + real + + + Beta + beta + real + + + Max Freq + max_freq + real + + + Min Freq + min_freq + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_pn_correlator_cc.xml b/grc/blocks/gr_pn_correlator_cc.xml new file mode 100644 index 00000000..094f46cd --- /dev/null +++ b/grc/blocks/gr_pn_correlator_cc.xml @@ -0,0 +1,35 @@ + + + + PN Correlator + gr_pn_correlator_cc + from gnuradio import gr + gr.pn_correlator_cc($degree, $mask, $seed) + + Degree + degree + int + + + Mask + mask + int + + + Seed + seed + int + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_probe_avg_mag_sqrd_x.xml b/grc/blocks/gr_probe_avg_mag_sqrd_x.xml new file mode 100644 index 00000000..eb855956 --- /dev/null +++ b/grc/blocks/gr_probe_avg_mag_sqrd_x.xml @@ -0,0 +1,60 @@ + + + + Probe Avg Mag^2 + gr_probe_avg_mag_sqrd_x + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.probe_avg_mag_sqrd_$(type)( + threshold=$threshold, + alpha=$alpha, + probe_rate=$probe_rate, +) + set_alpha($alpha) + set_threshold($threshold) + set_probe_rate($probe_rate) + + Type + type + enum + + + + + Threshold (dB) + threshold + 0 + real + + + Alpha + alpha + 1 + real + + + Probe Rate + probe_rate + 10 + real + + + in + $type.input + + + out + float + + diff --git a/grc/blocks/gr_probe_density_b.xml b/grc/blocks/gr_probe_density_b.xml new file mode 100644 index 00000000..74d3b0a2 --- /dev/null +++ b/grc/blocks/gr_probe_density_b.xml @@ -0,0 +1,37 @@ + + + + Probe Density + gr_probe_density_b + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.probe_density_b( + alpha=$alpha, + probe_rate=$probe_rate, +) + set_alpha($alpha) + set_probe_rate($probe_rate) + + Alpha + alpha + 1 + real + + + Probe Rate + probe_rate + 10 + real + + + in + byte + + + out + float + + diff --git a/grc/blocks/gr_probe_mpsk_snr_c.xml b/grc/blocks/gr_probe_mpsk_snr_c.xml new file mode 100644 index 00000000..7f562d2f --- /dev/null +++ b/grc/blocks/gr_probe_mpsk_snr_c.xml @@ -0,0 +1,55 @@ + + + + Probe MPSK SNR + gr_probe_mpsk_snr_c + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.probe_mpsk_snr_c( + type='$type', + alpha=$alpha, + probe_rate=$probe_rate, +) + set_alpha($alpha) + set_probe_rate($probe_rate) + + Type + type + enum + + + + + + Alpha + alpha + 1 + real + + + Probe Rate + probe_rate + 10 + real + + + in + complex + + + out + float + + diff --git a/grc/blocks/gr_pwr_squelch_xx.xml b/grc/blocks/gr_pwr_squelch_xx.xml new file mode 100644 index 00000000..08d62117 --- /dev/null +++ b/grc/blocks/gr_pwr_squelch_xx.xml @@ -0,0 +1,65 @@ + + + + Power Squelch + gr_pwr_squelch_xx + from gnuradio import gr + gr.pwr_squelch_$(type.fcn)($threshold, $alpha, $ramp, $gate) + set_threshold($threshold) + set_alpha($alpha) + + Type + type + enum + + + + + Threshold (dB) + threshold + real + + + Alpha + alpha + real + + + Ramp + ramp + int + + + Gate + gate + enum + + + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_quadrature_demod_cf.xml b/grc/blocks/gr_quadrature_demod_cf.xml new file mode 100644 index 00000000..a0e630c7 --- /dev/null +++ b/grc/blocks/gr_quadrature_demod_cf.xml @@ -0,0 +1,25 @@ + + + + Quadrature Demod + gr_quadrature_demod_cf + from gnuradio import gr + gr.quadrature_demod_cf($gain) + + Gain + gain + real + + + in + complex + + + out + float + + diff --git a/grc/blocks/gr_rational_resampler_base_xxx.xml b/grc/blocks/gr_rational_resampler_base_xxx.xml new file mode 100644 index 00000000..4b772017 --- /dev/null +++ b/grc/blocks/gr_rational_resampler_base_xxx.xml @@ -0,0 +1,86 @@ + + + + Rational Resampler Base + gr_rational_resampler_base_xxx + from gnuradio import gr + from gnuradio.gr import firdes + gr.rational_resampler_base_$(type)($interp, $decim, $taps) + set_taps($taps) + + Type + type + enum + + + + + + + + + Interpolation + interp + 1 + int + + + Decimation + decim + 1 + int + + + Taps + taps + $type.taps + + + in + $type.input + + + out + $type.output + + diff --git a/grc/blocks/gr_repeat.xml b/grc/blocks/gr_repeat.xml new file mode 100644 index 00000000..ba652a4d --- /dev/null +++ b/grc/blocks/gr_repeat.xml @@ -0,0 +1,64 @@ + + + + Repeat + gr_repeat + from gnuradio import gr + gr.repeat($type.size*$vlen, $interp) + + Type + type + enum + + + + + + + + Interpolation + interp + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_rms_xx.xml b/grc/blocks/gr_rms_xx.xml new file mode 100644 index 00000000..1e094719 --- /dev/null +++ b/grc/blocks/gr_rms_xx.xml @@ -0,0 +1,41 @@ + + + + RMS + gr_rms_xx + from gnuradio import gr + gr.rms_$(type.fcn)f($alpha) + set_alpha($alpha) + + Input Type + type + enum + + + + + Alpha + alpha + real + + + in + $type + + + out + float + + diff --git a/grc/blocks/gr_sample_and_hold_xx.xml b/grc/blocks/gr_sample_and_hold_xx.xml new file mode 100644 index 00000000..bfe66bb0 --- /dev/null +++ b/grc/blocks/gr_sample_and_hold_xx.xml @@ -0,0 +1,49 @@ + + + + Sample and Hold + gr_sample_and_hold_xx + from gnuradio import gr + gr.sample_and_hold_$(type.fcn)() + + Type + type + enum + + + + + + + in + $type + + + ctrl + $type + + + out + $type + + diff --git a/grc/blocks/gr_scrambler_bb.xml b/grc/blocks/gr_scrambler_bb.xml new file mode 100644 index 00000000..d079c401 --- /dev/null +++ b/grc/blocks/gr_scrambler_bb.xml @@ -0,0 +1,38 @@ + + + + Scrambler + gr_scrambler_bb + from gnuradio import gr + gr.scrambler_bb($mask, $seed, $len) + + Mask + mask + 0x8A + hex + + + Seed + seed + 0x7F + hex + + + Length + len + 7 + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_short_to_float.xml b/grc/blocks/gr_short_to_float.xml new file mode 100644 index 00000000..8dac97c0 --- /dev/null +++ b/grc/blocks/gr_short_to_float.xml @@ -0,0 +1,20 @@ + + + + Short To Float + gr_short_to_float + from gnuradio import gr + gr.short_to_float() + + in + short + + + out + float + + diff --git a/grc/blocks/gr_sig_source_x.xml b/grc/blocks/gr_sig_source_x.xml new file mode 100644 index 00000000..c329dba6 --- /dev/null +++ b/grc/blocks/gr_sig_source_x.xml @@ -0,0 +1,104 @@ + + + + Signal Source + gr_sig_source_x + from gnuradio import gr + gr.sig_source_$(type.fcn)($samp_rate, $waveform, $freq, $amp, $offset) + set_sampling_freq($samp_rate) + set_waveform($waveform) + set_frequency($freq) + set_amplitude($amp) + set_offset($offset) + + Output Type + type + enum + + + + + + + Sample Rate + samp_rate + samp_rate + real + + + Waveform + waveform + gr.GR_COS_WAVE + raw + + + + + + + + + Frequency + freq + 1000 + real + + + Amplitude + amp + 1 + real + + + Offset + offset + 0 + $type.offset_type + + + out + $type + + diff --git a/grc/blocks/gr_simple_correlator.xml b/grc/blocks/gr_simple_correlator.xml new file mode 100644 index 00000000..820523a6 --- /dev/null +++ b/grc/blocks/gr_simple_correlator.xml @@ -0,0 +1,25 @@ + + + + Simple Correlator + gr_simple_correlator + from gnuradio import gr + gr.simple_correlator($payload_bytesize) + + Payload Byte Size + payload_bytesize + int + + + in + float + + + out + byte + + diff --git a/grc/blocks/gr_simple_framer.xml b/grc/blocks/gr_simple_framer.xml new file mode 100644 index 00000000..2a0295c4 --- /dev/null +++ b/grc/blocks/gr_simple_framer.xml @@ -0,0 +1,25 @@ + + + + Simple Framer + gr_simple_framer + from gnuradio import gr + gr.simple_framer($payload_bytesize) + + Payload Byte Size + payload_bytesize + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_simple_squelch_cc.xml b/grc/blocks/gr_simple_squelch_cc.xml new file mode 100644 index 00000000..5c0727f5 --- /dev/null +++ b/grc/blocks/gr_simple_squelch_cc.xml @@ -0,0 +1,32 @@ + + + + Simple Squelch + gr_simple_squelch_cc + from gnuradio import gr + gr.simple_squelch_cc($threshold, $alpha) + set_threshold($threshold) + set_alpha($alpha) + + Threshold (dB) + threshold + real + + + Alpha + alpha + real + + + in + complex + + + out + complex + + diff --git a/grc/blocks/gr_single_pole_iir_filter_xx.xml b/grc/blocks/gr_single_pole_iir_filter_xx.xml new file mode 100644 index 00000000..50cf4a82 --- /dev/null +++ b/grc/blocks/gr_single_pole_iir_filter_xx.xml @@ -0,0 +1,51 @@ + + + + Single Pole IIR Filter + gr_single_pole_iir_filter_xx + from gnuradio import gr + gr.single_pole_iir_filter_$(type.fcn)($alpha, $vlen) + set_taps($alpha) + + Type + type + enum + + + + + Alpha + alpha + 1.0 + real + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_skiphead.xml b/grc/blocks/gr_skiphead.xml new file mode 100644 index 00000000..0849ad29 --- /dev/null +++ b/grc/blocks/gr_skiphead.xml @@ -0,0 +1,65 @@ + + + + Skip Head + gr_skiphead + from gnuradio import gr + gr.skiphead($type.size*$vlen, $num_items) + + Type + type + enum + + + + + + + + Num Items + num_items + 1024 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_stream_to_streams.xml b/grc/blocks/gr_stream_to_streams.xml new file mode 100644 index 00000000..82542b8d --- /dev/null +++ b/grc/blocks/gr_stream_to_streams.xml @@ -0,0 +1,67 @@ + + + + Stream to Streams + gr_stream_to_streams + from gnuradio import gr + gr.stream_to_streams($type.size*$vlen, $num_streams) + + IO Type + type + enum + + + + + + + + Num Streams + num_streams + 2 + int + + + Vec Length + vlen + 1 + int + + $num_streams > 0 + $vlen >= 1 + + in + $type + $vlen + + + out + $type + $vlen + $num_streams + + diff --git a/grc/blocks/gr_stream_to_vector.xml b/grc/blocks/gr_stream_to_vector.xml new file mode 100644 index 00000000..296d786f --- /dev/null +++ b/grc/blocks/gr_stream_to_vector.xml @@ -0,0 +1,66 @@ + + + + Stream to Vector + gr_stream_to_vector + from gnuradio import gr + gr.stream_to_vector($type.size*$vlen, $num_items) + + IO Type + type + enum + + + + + + + + Num Items + num_items + 2 + int + + + Vec Length + vlen + 1 + int + + $num_items > 0 + $vlen >= 1 + + in + $type + $vlen + + + out + $type + $vlen*$num_items + + diff --git a/grc/blocks/gr_streams_to_stream.xml b/grc/blocks/gr_streams_to_stream.xml new file mode 100644 index 00000000..7aadd7ee --- /dev/null +++ b/grc/blocks/gr_streams_to_stream.xml @@ -0,0 +1,67 @@ + + + + Streams to Stream + gr_streams_to_stream + from gnuradio import gr + gr.streams_to_stream($type.size*$vlen, $num_streams) + + IO Type + type + enum + + + + + + + + Num Streams + num_streams + 2 + int + + + Vec Length + vlen + 1 + int + + $num_streams > 0 + $vlen >= 1 + + in + $type + $vlen + $num_streams + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_streams_to_vector.xml b/grc/blocks/gr_streams_to_vector.xml new file mode 100644 index 00000000..4ecdcb2d --- /dev/null +++ b/grc/blocks/gr_streams_to_vector.xml @@ -0,0 +1,67 @@ + + + + Streams to Vector + gr_streams_to_vector + from gnuradio import gr + gr.streams_to_vector($type.size*$vlen, $num_streams) + + IO Type + type + enum + + + + + + + + Num Streams + num_streams + 2 + int + + + Vec Length + vlen + 1 + int + + $num_streams > 0 + $vlen >= 1 + + in + $type + $vlen + $num_streams + + + out + $type + $vlen*$num_streams + + diff --git a/grc/blocks/gr_sub_xx.xml b/grc/blocks/gr_sub_xx.xml new file mode 100644 index 00000000..f1f4797e --- /dev/null +++ b/grc/blocks/gr_sub_xx.xml @@ -0,0 +1,63 @@ + + + + Subtract + gr_sub_xx + from gnuradio import gr + gr.sub_$(type.fcn)($vlen) + + IO Type + type + enum + + + + + + + Vec Length + vlen + 1 + int + + + Num Inputs + num_inputs + 2 + int + + $vlen > 0 + $num_inputs >= 2 + + in + $type + $vlen + $num_inputs + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_threshold_ff.xml b/grc/blocks/gr_threshold_ff.xml new file mode 100644 index 00000000..740ce579 --- /dev/null +++ b/grc/blocks/gr_threshold_ff.xml @@ -0,0 +1,40 @@ + + + + Threshold + gr_threshold_ff + from gnuradio import gr + gr.threshold_ff($low, $high, $init) + set_hi($high) + set_lo($low) + + Low + low + -100 + real + + + High + high + 100 + real + + + Initial State + init + 0 + real + + + in + float + + + out + float + + diff --git a/grc/blocks/gr_throttle.xml b/grc/blocks/gr_throttle.xml new file mode 100644 index 00000000..ab8506f5 --- /dev/null +++ b/grc/blocks/gr_throttle.xml @@ -0,0 +1,65 @@ + + + + Throttle + gr_throttle + from gnuradio import gr + gr.throttle($type.size*$vlen, $samples_per_second) + + Type + type + enum + + + + + + + + Sample Rate + samples_per_second + samp_rate + real + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_uchar_to_float.xml b/grc/blocks/gr_uchar_to_float.xml new file mode 100644 index 00000000..0a5f7f96 --- /dev/null +++ b/grc/blocks/gr_uchar_to_float.xml @@ -0,0 +1,20 @@ + + + + UChar To Float + gr_uchar_to_float + from gnuradio import gr + gr.uchar_to_float() + + in + byte + + + out + float + + diff --git a/grc/blocks/gr_udp_sink.xml b/grc/blocks/gr_udp_sink.xml new file mode 100644 index 00000000..e9f6c2be --- /dev/null +++ b/grc/blocks/gr_udp_sink.xml @@ -0,0 +1,85 @@ + + + + UDP Sink + gr_udp_sink + from gnuradio import gr + gr.udp_sink($type.size*$vlen, $ipaddr_local, $port_local, $ipaddr_remote, $port_remote, $mtu) + set_mtu($mtu) + + Input Type + type + enum + + + + + + + + Local IP Address + ipaddr_local + 127.0.0.1 + string + + + Local Port + port_local + 0 + int + + + Remote IP Address + ipaddr_remote + 127.0.0.1 + string + + + Remote Port + port_remote + 1234 + int + + + MTU + mtu + 1024 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + diff --git a/grc/blocks/gr_udp_source.xml b/grc/blocks/gr_udp_source.xml new file mode 100644 index 00000000..f03adf80 --- /dev/null +++ b/grc/blocks/gr_udp_source.xml @@ -0,0 +1,73 @@ + + + + UDP Source + gr_udp_source + from gnuradio import gr + gr.udp_source($type.size*$vlen, $ipaddr, $port, $mtu) + set_mtu($mtu) + + Output Type + type + enum + + + + + + + + IP Address + ipaddr + 127.0.0.1 + string + + + Port + port + 1234 + int + + + MTU + mtu + 1024 + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + out + $type + $vlen + + diff --git a/grc/blocks/gr_unpack_k_bits_bb.xml b/grc/blocks/gr_unpack_k_bits_bb.xml new file mode 100644 index 00000000..9917644a --- /dev/null +++ b/grc/blocks/gr_unpack_k_bits_bb.xml @@ -0,0 +1,25 @@ + + + + Unpack K Bits + gr_unpack_k_bits_bb + from gnuradio import gr + gr.unpack_k_bits_bb($k) + + K + k + int + + + in + byte + + + out + byte + + diff --git a/grc/blocks/gr_unpacked_to_packed_xx.xml b/grc/blocks/gr_unpacked_to_packed_xx.xml new file mode 100644 index 00000000..f7457eb5 --- /dev/null +++ b/grc/blocks/gr_unpacked_to_packed_xx.xml @@ -0,0 +1,59 @@ + + + + Unpacked to Packed + gr_unpacked_to_packed_xx + from gnuradio import gr + gr.unpacked_to_packed_$(type.fcn)($bits_per_chunk, $endianness) + + Type + type + enum + + + + + + Bits per Chunk + bits_per_chunk + 2 + int + + + Endianness + endianness + enum + + + + + in + $type + + + out + $type + + diff --git a/grc/blocks/gr_vco_f.xml b/grc/blocks/gr_vco_f.xml new file mode 100644 index 00000000..e49c5396 --- /dev/null +++ b/grc/blocks/gr_vco_f.xml @@ -0,0 +1,35 @@ + + + + VCO + gr_vco_f + from gnuradio import gr + gr.vco_f($samp_rate, $sensitivity, $amplitude) + + Sample Rate + samp_rate + real + + + Sensitivity + sensitivity + real + + + Amplitude + amplitude + real + + + in + float + + + out + float + + diff --git a/grc/blocks/gr_vector_sink_x.xml b/grc/blocks/gr_vector_sink_x.xml new file mode 100644 index 00000000..3bd99869 --- /dev/null +++ b/grc/blocks/gr_vector_sink_x.xml @@ -0,0 +1,54 @@ + + + + Vector Sink + gr_vector_sink_x + from gnuradio import gr + gr.vector_sink_$(type.fcn)($vlen) + + Input Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + diff --git a/grc/blocks/gr_vector_source_x.xml b/grc/blocks/gr_vector_source_x.xml new file mode 100644 index 00000000..7a6a3aef --- /dev/null +++ b/grc/blocks/gr_vector_source_x.xml @@ -0,0 +1,79 @@ + + + + Vector Source + gr_vector_source_x + from gnuradio import gr + gr.vector_source_$(type.fcn)($vector, $repeat, $vlen) + + Output Type + type + enum + + + + + + + + Vector + vector + 0, 0, 0 + $type.vec_type + + + Repeat + repeat + True + enum + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + out + $type + $vlen + + diff --git a/grc/blocks/gr_vector_to_stream.xml b/grc/blocks/gr_vector_to_stream.xml new file mode 100644 index 00000000..d56d3406 --- /dev/null +++ b/grc/blocks/gr_vector_to_stream.xml @@ -0,0 +1,66 @@ + + + + Vector to Stream + gr_vector_to_stream + from gnuradio import gr + gr.vector_to_stream($type.size*$vlen, $num_items) + + IO Type + type + enum + + + + + + + + Num Items + num_items + 2 + int + + + Vec Length + vlen + 1 + int + + $num_items > 0 + $vlen >= 1 + + in + $type + $vlen*$num_items + + + out + $type + $vlen + + diff --git a/grc/blocks/gr_vector_to_streams.xml b/grc/blocks/gr_vector_to_streams.xml new file mode 100644 index 00000000..86cb5681 --- /dev/null +++ b/grc/blocks/gr_vector_to_streams.xml @@ -0,0 +1,67 @@ + + + + Vector to Streams + gr_vector_to_streams + from gnuradio import gr + gr.vector_to_streams($type.size*$vlen, $num_streams) + + IO Type + type + enum + + + + + + + + Num Streams + num_streams + 2 + int + + + Vec Length + vlen + 1 + int + + $num_streams > 0 + $vlen >= 1 + + in + $type + $vlen*$num_streams + + + out + $type + $vlen + $num_streams + + diff --git a/grc/blocks/gr_wavfile_sink.xml b/grc/blocks/gr_wavfile_sink.xml new file mode 100644 index 00000000..f2c8a009 --- /dev/null +++ b/grc/blocks/gr_wavfile_sink.xml @@ -0,0 +1,42 @@ + + + + Wav File Sink + gr_wavfile_sink + from gnuradio import gr + gr.wavfile_sink($file, $nchan, $samp_rate, $bits_per_sample) + + File + file + + file_save + + + N Channels + nchan + 1 + int + + + Sample Rate + samp_rate + samp_rate + int + + + Bits per Sample + bits_per_sample + 8 + int + + 1 <= $nchan + + in + float + $nchan + + diff --git a/grc/blocks/gr_wavfile_source.xml b/grc/blocks/gr_wavfile_source.xml new file mode 100644 index 00000000..433bb0af --- /dev/null +++ b/grc/blocks/gr_wavfile_source.xml @@ -0,0 +1,44 @@ + + + + Wav File Source + gr_wavfile_source + from gnuradio import gr + gr.wavfile_source($file, $repeat) + + File + file + + file_open + + + Repeat + repeat + True + enum + + + + + N Channels + nchan + 1 + int + + 1 <= $nchan + + out + float + $nchan + + diff --git a/grc/blocks/gr_xor_xx.xml b/grc/blocks/gr_xor_xx.xml new file mode 100644 index 00000000..c014cbe5 --- /dev/null +++ b/grc/blocks/gr_xor_xx.xml @@ -0,0 +1,48 @@ + + + + Xor + gr_xor_xx + from gnuradio import gr + gr.xor_$(type.fcn)() + + IO Type + type + enum + + + + + + Num Inputs + num_inputs + 2 + int + + $num_inputs >= 2 + + in + $type + $num_inputs + + + out + $type + + diff --git a/grc/blocks/high_pass_filter.xml b/grc/blocks/high_pass_filter.xml new file mode 100644 index 00000000..5be916fa --- /dev/null +++ b/grc/blocks/high_pass_filter.xml @@ -0,0 +1,126 @@ + + + + High Pass Filter + high_pass_filter + from gnuradio import gr + from gnuradio.gr import firdes + gr.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.high_pass( + $gain, $samp_rate, $cutoff_freq, $width, firdes.$window, $beta)) + set_taps(firdes.high_pass($gain, $samp_rate, $cutoff_freq, $width, firdes.$window, $beta)) + + FIR Type + type + enum + + + + + + + Decimation + decim + 1 + int + #if str($type).startswith('interp') then 'all' else 'none'# + + + Interpolation + interp + 1 + int + #if str($type).startswith('interp') then 'none' else 'all'# + + + Gain + gain + 1 + real + + + Sample Rate + samp_rate + samp_rate + real + + + Cutoff Freq + cutoff_freq + real + + + Transition Width + width + real + + + Window + window + enum + + + + + + + + Beta + beta + 6.76 + real + + + in + $type.input + + + out + $type.output + + +This filter is a convenience wrapper for an fir filter and a firdes taps generating function. + +Sample rate, cutoff frequency, and transition width are in Hertz. + +The beta paramater only applies to the Kaiser window. + + diff --git a/grc/blocks/import.xml b/grc/blocks/import.xml new file mode 100644 index 00000000..feea052d --- /dev/null +++ b/grc/blocks/import.xml @@ -0,0 +1,26 @@ + + + + Import + import + $import + + + Import + import + + import + + +Import additional python modules into the namespace. + +Examples: +from gnuradio.gr import firdes +import math,cmath +from math import pi + + diff --git a/grc/blocks/low_pass_filter.xml b/grc/blocks/low_pass_filter.xml new file mode 100644 index 00000000..27120c04 --- /dev/null +++ b/grc/blocks/low_pass_filter.xml @@ -0,0 +1,126 @@ + + + + Low Pass Filter + low_pass_filter + from gnuradio import gr + from gnuradio.gr import firdes + gr.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.low_pass( + $gain, $samp_rate, $cutoff_freq, $width, firdes.$window, $beta)) + set_taps(firdes.low_pass($gain, $samp_rate, $cutoff_freq, $width, firdes.$window, $beta)) + + FIR Type + type + enum + + + + + + + Decimation + decim + 1 + int + #if str($type).startswith('interp') then 'all' else 'none'# + + + Interpolation + interp + 1 + int + #if str($type).startswith('interp') then 'none' else 'all'# + + + Gain + gain + 1 + real + + + Sample Rate + samp_rate + samp_rate + real + + + Cutoff Freq + cutoff_freq + real + + + Transition Width + width + real + + + Window + window + enum + + + + + + + + Beta + beta + 6.76 + real + + + in + $type.input + + + out + $type.output + + +This filter is a convenience wrapper for an fir filter and a firdes taps generating function. + +Sample rate, cutoff frequency, and transition width are in Hertz. + +The beta paramater only applies to the Kaiser window. + + diff --git a/grc/blocks/note.xml b/grc/blocks/note.xml new file mode 100644 index 00000000..db6687c0 --- /dev/null +++ b/grc/blocks/note.xml @@ -0,0 +1,17 @@ + + + + Note + note + + + Note + note + + string + + diff --git a/grc/blocks/notebook.xml b/grc/blocks/notebook.xml new file mode 100644 index 00000000..d41db9e2 --- /dev/null +++ b/grc/blocks/notebook.xml @@ -0,0 +1,69 @@ + + + + Notebook + notebook + from grc_gnuradio import wxgui as grc_wxgui + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +self.$(id) = wx.Notebook($(parent).GetWin(), style=$style) +#for $label in $labels() +self.$(id).AddPage(grc_wxgui.Panel(self.$(id)), "$label") +#end for +#if not $grid_pos() +$(parent).Add(self.$(id)) +#else +$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos())))) +#end if + + Tab Orientation + style + wx.NB_TOP + enum + + + + + + + Labels + labels + ['tab1', 'tab2', 'tab3'] + raw + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + isinstance($labels, (list, tuple)) + all(map(lambda x: isinstance(x, str), $labels)) + len($labels) > 0 + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/options.xml b/grc/blocks/options.xml new file mode 100644 index 00000000..18d6e2f0 --- /dev/null +++ b/grc/blocks/options.xml @@ -0,0 +1,148 @@ + + + + Options + options + from gnuradio import gr +#if $generate_options() == 'wx_gui' +from grc_gnuradio import wxgui as grc_wxgui +import wx +#end if +#if $generate_options() != 'hb' +from optparse import OptionParser +from gnuradio.eng_option import eng_option +#end if + + + if $run: self.start() +else: self.stop(); self.wait() + + Title + title + + string + #if $title() then 'none' else 'part'# + + + Author + author + + string + #if $author() then 'none' else 'part'# + + + Description + description + + string + #if $description() then 'none' else 'part'# + + + Window Size + window_size + 1280, 1024 + int_vector + part + + + Generate Options + generate_options + wx_gui + enum + #if $generate_options() == 'wx_gui' then 'part' else 'none'# + + + + + + Category + category + Custom + string + #if $generate_options() == 'hb' then 'none' else 'all'# + + + Run + run + True + bool + #if $generate_options() == 'wx_gui' + #if str($run) == 'True' +part#slurp + #else +none#slurp + #end if +#else +all#slurp +#end if + + + + + Realtime Scheduling + realtime_scheduling + + enum + #if $generate_options() == 'hb' +all#slurp +#elif $realtime_scheduling() +none#slurp +#else +part#slurp +#end if + + + + len($window_size) == 2 + 300 <= $(window_size)[0] <= 4096 + 300 <= $(window_size)[1] <= 4096 + +The options block sets special parameters for the flow graph. \ +Only one option block is allowed per flow graph. + +Title, author, and description parameters are for identification purposes. + +The window size controls the dimensions of the flow graph editor. \ +The window size (width, height) must be between (300, 300) and (4096, 4096). + +The generate options controls the type of code generated. \ +Non-graphical flow graphs should avoid using graphical sinks or graphical variable controls. + +In a graphical application, \ +run can be controlled by a variable to start and stop the flowgraph at runtime. + +The id of this block determines the name of the generated file and the name of the class. \ +For example, an id of my_block will generate the file my_block.py and class my_block(gr.... + +The category parameter determines the placement of the block in the block selection window. \ +The category only applies when creating hier blocks. \ +To put hier blocks into the root category, enter / for the category. + + diff --git a/grc/blocks/pad_sink.xml b/grc/blocks/pad_sink.xml new file mode 100644 index 00000000..477f2ad1 --- /dev/null +++ b/grc/blocks/pad_sink.xml @@ -0,0 +1,68 @@ + + + + Pad Sink + pad_sink + + + Num Inputs + nports + 1 + int + + + Input Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + 0 < $nports + + in + $type + $vlen + $nports + + +This is a sink pad block for creating hierarchical flow graphs. \ +The inputs of this block will become the outputs to this flow graph when it is instantiated as a hierarchical block. \ +Limit one sink pad block per flow graph. + +Remember to set the generate options to hier block. + + diff --git a/grc/blocks/pad_source.xml b/grc/blocks/pad_source.xml new file mode 100644 index 00000000..b6ef2c55 --- /dev/null +++ b/grc/blocks/pad_source.xml @@ -0,0 +1,68 @@ + + + + Pad Source + pad_source + + + Num Outputs + nports + 1 + int + + + Output Type + type + enum + + + + + + + + Vec Length + vlen + 1 + int + + $vlen > 0 + 0 < $nports + + out + $type + $vlen + $nports + + +This is a source pad block for creating hierarchical flow graphs. \ +The outputs of this block will become the inputs to this flow graph when it is instantiated as a hierarchical block. \ +Limit one source pad block per flow graph. + +Remember to set the generate options to hier block. + + diff --git a/grc/blocks/parameter.xml b/grc/blocks/parameter.xml new file mode 100644 index 00000000..5d08c4b3 --- /dev/null +++ b/grc/blocks/parameter.xml @@ -0,0 +1,92 @@ + + + + Parameter + parameter + self.$(id) = $(id) + $value + + Label + label + + string + #if $label() then 'none' else 'part'# + + + Value + value + 0 + $type.type + + + Type + type + + enum + #if $type() then 'none' else 'part'# + + + + + + + + + Short ID + short_id + + string + #if not $type() +all#slurp +#elif $short_id() +none#slurp +#else +part#slurp +#end if + + len($short_id) in (0, 1) + $short_id == '' or $(short_id).isalpha() + +This block represents a parameter to the flow graph. \ +A parameter can be used to pass command line arguments into a top block. \ +Or, parameters can pass arguments into an instantiated hierarchical block. + +The paramater value cannot depend on any variables. + +Leave the label blank to use the parameter id as the label. + +When type is not None, this parameter also becomes a command line option of the form: + +-[short_id] --[id] [value] + +The Short ID field may be left blank. + + diff --git a/grc/blocks/probe_function.xml b/grc/blocks/probe_function.xml new file mode 100644 index 00000000..ac0b3dcd --- /dev/null +++ b/grc/blocks/probe_function.xml @@ -0,0 +1,44 @@ + + + + Probe Function + probe_function + from grc_gnuradio import blks2 as grc_blks2 + grc_blks2.probe_function( + probe_callback=self.$(block_id()).$(function_name()), + probe_rate=$probe_rate, +) + set_probe_rate($probe_rate) + + Block ID + block_id + my_block_0 + string + + + Function Name + function_name + get_number + string + + + Probe Rate + probe_rate + 10 + real + + + out + float + + +Polls a function of an arbitrary block and writes the value to the output port. \ +The block id is the id of another block in the flow graph. \ +The function name is the name of a function in the said block. \ +The function should take no arguments and return a floating point or integer number. + + diff --git a/grc/blocks/random_source_x.xml b/grc/blocks/random_source_x.xml new file mode 100644 index 00000000..800bae71 --- /dev/null +++ b/grc/blocks/random_source_x.xml @@ -0,0 +1,75 @@ + + + + Random Source + random_source_x + from gnuradio import gr + import numpy + gr.vector_source_$(type.fcn)(map(int, numpy.random.randint($min, $max, $num_samps)), $repeat) + + Output Type + type + enum + + + + + + Minimum + min + 0 + int + + + Maximum + max + 2 + int + + + Num Samples + num_samps + 1000 + int + + + Repeat + repeat + True + enum + + + + + out + $type + + +Generate num samples of random numbers of [min, max). Repeat samples if specified. + +Ex: With min=0 and max=2, the sequence 01110101... will be generated. + + diff --git a/grc/blocks/root_raised_cosine_filter.xml b/grc/blocks/root_raised_cosine_filter.xml new file mode 100644 index 00000000..81688d29 --- /dev/null +++ b/grc/blocks/root_raised_cosine_filter.xml @@ -0,0 +1,101 @@ + + + + Root Raised Cosine Filter + root_raised_cosine_filter + from gnuradio import gr + from gnuradio.gr import firdes + gr.$(type)(#if str($type).startswith('interp') then $interp else $decim#, firdes.root_raised_cosine( + $gain, $samp_rate, $sym_rate, $alpha, $ntaps)) + set_taps(firdes.root_raised_cosine($gain, $samp_rate, $sym_rate, $alpha, $ntaps)) + + FIR Type + type + enum + + + + + + + Decimation + decim + 1 + int + #if str($type).startswith('interp') then 'all' else 'none'# + + + Interpolation + interp + 1 + int + #if str($type).startswith('interp') then 'none' else 'all'# + + + Gain + gain + 1 + real + + + Sample Rate + samp_rate + samp_rate + real + + + Symbol Rate + sym_rate + 1.0 + real + + + Alpha + alpha + 0.35 + real + + + Num Taps + ntaps + 11*samp_rate + int + + + in + $type.input + + + out + $type.output + + +This filter is a convenience wrapper for an fir filter and a firdes taps generating function. + +Sample rate in Hertz. + + diff --git a/grc/blocks/trellis_encoder_xx.xml b/grc/blocks/trellis_encoder_xx.xml new file mode 100644 index 00000000..74a8cc34 --- /dev/null +++ b/grc/blocks/trellis_encoder_xx.xml @@ -0,0 +1,74 @@ + + + + Trellis Encoder + trellis_encoder_xx + from gnuradio import trellis + trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state) + + Type + type + enum + + + + + + + + + FSM Args + fsm_args + raw + + + Initial State + init_state + int + + + in + $type.input + + + out + $type.output + + +The fsm arguments are passed directly to the trellis.fsm() constructor. + + diff --git a/grc/blocks/trellis_metrics_x.xml b/grc/blocks/trellis_metrics_x.xml new file mode 100644 index 00000000..2016a34c --- /dev/null +++ b/grc/blocks/trellis_metrics_x.xml @@ -0,0 +1,85 @@ + + + + Trellis Metrics + trellis_metrics_x + from gnuradio import trellis + trellis.metrics_$(type)($card, $dim, $table, $metric_type) + set_TABLE($table) + + Type + type + enum + + + + + + + Output Cardinality + card + int + + + Dimensionality + dim + int + + + Constellation + table + $type.table + + + Metric Type + metric_type + enum + + + + + + in + $type.io + + + out + float + + +Generate metrics required for Viterbi or SISO algorithms. + + diff --git a/grc/blocks/trellis_permutation.xml b/grc/blocks/trellis_permutation.xml new file mode 100644 index 00000000..7721cc71 --- /dev/null +++ b/grc/blocks/trellis_permutation.xml @@ -0,0 +1,74 @@ + + + + Trellis Permutation + trellis_permutation + from gnuradio import trellis + trellis.permutation($block_size, $table, $syms_per_block, $type.size*$vlen) + + Type + type + enum + + + + + + + + Block Size + block_size + int + + + Table + table + int_vector + + + Symbols per Block + syms_per_block + int + + + Vec Length + vlen + 1 + int + + $vlen > 0 + + in + $type + $vlen + + + out + $type + $vlen + + diff --git a/grc/blocks/trellis_siso_combined_f.xml b/grc/blocks/trellis_siso_combined_f.xml new file mode 100644 index 00000000..98874d7f --- /dev/null +++ b/grc/blocks/trellis_siso_combined_f.xml @@ -0,0 +1,112 @@ + + + + Trellis SISO Combo + trellis_siso_combined_f + from gnuradio import trellis + trellis.siso_combined_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type, $dim, $table, $metric_type) + + FSM Args + fsm_args + raw + + + Block Size + block_size + int + + + Initial State + init_state + -1 + int + + + Final State + final_state + -1 + int + + + A-posteriori In + a_post_in + enum + + + + + A-posteriori Out + a_post_out + enum + + + + + SISO Type + siso_type + enum + + + + + Dimensionality + dim + int + + + Constellation + table + real_vector + + + Metric Type + metric_type + enum + + + + + + in + float + + + out + float + + +BCJR Algorithm combined with metric calculation. \ +The fsm arguments are passed directly to the trellis.fsm() constructor. + + diff --git a/grc/blocks/trellis_siso_f.xml b/grc/blocks/trellis_siso_f.xml new file mode 100644 index 00000000..2b9cfe5f --- /dev/null +++ b/grc/blocks/trellis_siso_f.xml @@ -0,0 +1,85 @@ + + + + Trellis SISO + trellis_siso_f + from gnuradio import trellis + trellis.siso_f(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $a_post_in, $a_post_out, $siso_type) + + FSM Args + fsm_args + raw + + + Block Size + block_size + int + + + Initial State + init_state + -1 + int + + + Final State + final_state + -1 + int + + + A-posteriori In + a_post_in + enum + + + + + A-posteriori Out + a_post_out + enum + + + + + SISO Type + siso_type + enum + + + + + in + float + + + out + float + + +BCJR Algorithm. \ +The fsm arguments are passed directly to the trellis.fsm() constructor. + + diff --git a/grc/blocks/trellis_viterbi_combined_xx.xml b/grc/blocks/trellis_viterbi_combined_xx.xml new file mode 100644 index 00000000..33dcaaf7 --- /dev/null +++ b/grc/blocks/trellis_viterbi_combined_xx.xml @@ -0,0 +1,123 @@ + + + + Trellis Viterbi Combo + trellis_viterbi_combined_xx + from gnuradio import trellis + trellis.viterbi_combined_$(type)$(out_type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state, $dim, $table, $metric_type) + set_TABLE($table) + + Input Type + type + enum + + + + + + + Output Type + out_type + enum + + + + + + FSM Args + fsm_args + raw + + + Block Size + block_size + int + + + Initial State + init_state + -1 + int + + + Final State + final_state + -1 + int + + + Dimensionality + dim + int + + + Constellation + table + $type.table + + + Metric Type + metric_type + enum + + + + + + in + $type.io + + + out + $out_type.io + + +Viterbi Decoder combined with metric calculation. \ +The fsm arguments are passed directly to the trellis.fsm() constructor. + + diff --git a/grc/blocks/trellis_viterbi_x.xml b/grc/blocks/trellis_viterbi_x.xml new file mode 100644 index 00000000..84b39677 --- /dev/null +++ b/grc/blocks/trellis_viterbi_x.xml @@ -0,0 +1,66 @@ + + + + Trellis Viterbi + trellis_viterbi_x + from gnuradio import trellis + trellis.viterbi_$(type)(trellis.fsm($fsm_args), $block_size, $init_state, $final_state) + + Type + type + enum + + + + + + FSM Args + fsm_args + raw + + + Block Size + block_size + int + + + Initial State + init_state + -1 + int + + + Final State + final_state + -1 + int + + + in + float + + + out + $type.io + + +Viterbi Decoder. \ +The fsm arguments are passed directly to the trellis.fsm() constructor. + + diff --git a/grc/blocks/usrp2_probe.xml b/grc/blocks/usrp2_probe.xml new file mode 100644 index 00000000..cc3f9c2f --- /dev/null +++ b/grc/blocks/usrp2_probe.xml @@ -0,0 +1,33 @@ + + + + USRP2 Probe + usrp2_probe + + + Interface + interface + + string + + + Type + type + rx + enum + + + + Press "Probe" to retrieve USRP2 information... + diff --git a/grc/blocks/usrp2_sink_xxxx.xml b/grc/blocks/usrp2_sink_xxxx.xml new file mode 100644 index 00000000..639f96cf --- /dev/null +++ b/grc/blocks/usrp2_sink_xxxx.xml @@ -0,0 +1,95 @@ + + + + USRP2 Sink + usrp2_sink_xxxx + from gnuradio import usrp2 + #if not $interface() and not $mac_addr() +usrp2.sink_$(type.fcn)() +#elif not $mac_addr() +usrp2.sink_$(type.fcn)($interface) +#else +usrp2.sink_$(type.fcn)($interface, $mac_addr) +#end if +self.$(id).set_interp($interpolation) +self.$(id).set_center_freq($frequency) +self.$(id).set_gain($gain) +#if $lo_offset() != float('inf') +self.$(id).set_lo_offset($lo_offset) +#end if + set_lo_offset($lo_offset) + set_interp($interpolation) + set_center_freq($frequency) + set_gain($gain) + + Output Type + type + enum + + + + + Interface + interface + + string + + + MAC Addr + mac_addr + + string + + + Interpolation + interpolation + int + + + Frequency (Hz) + frequency + real + + + LO Offset (Hz) + lo_offset + float('inf') + real + #if $lo_offset() == float('inf') then 'part' else 'none'# + + + + Gain (dB) + gain + 0 + real + + + in + $type + + +The USRP2 sink inputs 100 Megasamples per second / interpolation. + +Input amplitude should be between 0.0 and 1.0. + +To use the default ethernet device, leave interface blank. \ +For systems with only 1 USRP2, you may leave the mac address blank. \ +For multi-USRP2 systems, specify the mac address in the form 00:50:C2:85:3x:xx. + + diff --git a/grc/blocks/usrp2_source_xxxx.xml b/grc/blocks/usrp2_source_xxxx.xml new file mode 100644 index 00000000..6c776d0a --- /dev/null +++ b/grc/blocks/usrp2_source_xxxx.xml @@ -0,0 +1,93 @@ + + + + USRP2 Source + usrp2_source_xxxx + from gnuradio import usrp2 + #if not $interface() and not $mac_addr() +usrp2.source_$(type.fcn)() +#elif not $mac_addr() +usrp2.source_$(type.fcn)($interface) +#else +usrp2.source_$(type.fcn)($interface, $mac_addr) +#end if +self.$(id).set_decim($decimation) +self.$(id).set_center_freq($frequency) +self.$(id).set_gain($gain) +#if $lo_offset() != float('inf') +self.$(id).set_lo_offset($lo_offset) +#end if + set_lo_offset($lo_offset) + set_decim($decimation) + set_center_freq($frequency) + set_gain($gain) + + Output Type + type + enum + + + + + Interface + interface + + string + + + MAC Addr + mac_addr + + string + + + Decimation + decimation + int + + + Frequency (Hz) + frequency + real + + + LO Offset (Hz) + lo_offset + float('inf') + real + #if $lo_offset() == float('inf') then 'part' else 'none'# + + + + Gain (dB) + gain + 0 + real + + + out + $type + + +The USRP2 source outputs 100 Megasamples per second / decimation. + +To use the default ethernet device, leave interface blank. \ +For systems with only 1 USRP2, you may leave the mac address blank. \ +For multi-USRP2 systems, specify the mac address in the form 00:50:C2:85:3x:xx. + + diff --git a/grc/blocks/usrp_dual_sink_x.xml b/grc/blocks/usrp_dual_sink_x.xml new file mode 100644 index 00000000..8f418bec --- /dev/null +++ b/grc/blocks/usrp_dual_sink_x.xml @@ -0,0 +1,193 @@ + + + + USRP Dual Sink + usrp_dual_sink_x + from grc_gnuradio import usrp as grc_usrp + grc_usrp.dual_sink_$(type.fcn)(which=$which) +self.$(id).set_interp_rate($interpolation) +self.$(id).set_frequency_a($frequency_a, verbose=True) +self.$(id).set_frequency_b($frequency_b, verbose=True) +self.$(id).set_gain_a($gain_a) +self.$(id).set_gain_b($gain_b) +#if $lo_offset_a() != float('inf') +self.$(id).set_lo_offset_a($lo_offset_a) +#end if +#if $lo_offset_b() != float('inf') +self.$(id).set_lo_offset_b($lo_offset_b) +#end if +################################################## +## Flex RF A +################################################## +#if $transmit_a.tx_enb +self.$(id).set_enable_a(True) +#end if +#if $transmit_a.auto_tr +self.$(id).set_auto_tr_a(True) +#end if +################################################## +## Flex RF B +################################################## +#if $transmit_b.tx_enb +self.$(id).set_enable_b(True) +#end if +#if $transmit_b.auto_tr +self.$(id).set_auto_tr_b(True) +#end if + set_interp_rate($interpolation) + set_frequency_a($frequency_a) + set_frequency_b($frequency_b) + set_gain_a($gain_a) + set_gain_b($gain_b) + + Input Type + type + enum + + + + + Unit Number + which + 0 + int + + + Interpolation + interpolation + int + + + Frequency A (Hz) + frequency_a + real + + + Frequency B (Hz) + frequency_b + real + + + LO Offset A (Hz) + lo_offset_a + float('inf') + real + #if $lo_offset_a() == float('inf') then 'part' else 'none'# + + + + LO Offset B (Hz) + lo_offset_b + float('inf') + real + #if $lo_offset_b() == float('inf') then 'part' else 'none'# + + + + Gain A (dB) + gain_a + 0 + real + + + Gain B (dB) + gain_b + 0 + real + + + + Transmit A + transmit_a + + enum + #if $transmit_a.tx_enb then 'none' else 'part'# + + + + + + + Transmit B + transmit_b + + enum + #if $transmit_b.tx_enb then 'none' else 'part'# + + + + + + Ain + $type + + + Bin + $type + + +The USRP sink inputs 128 Megasamples per second / interpolation. + +Input amplitude should be between 0 and 32767. + +Flex RF boards only: The "Transmit Setting" must be configured. \ +When set to "Enable" the transmitter is always on. \ +When set to "Auto Transmit/Receive", the transmitter is disabled while receiving. + + diff --git a/grc/blocks/usrp_dual_source_x.xml b/grc/blocks/usrp_dual_source_x.xml new file mode 100644 index 00000000..740895d4 --- /dev/null +++ b/grc/blocks/usrp_dual_source_x.xml @@ -0,0 +1,198 @@ + + + + USRP Dual Source + usrp_dual_source_x + from grc_gnuradio import usrp as grc_usrp + grc_usrp.dual_source_$(type.fcn)(which=$which, rx_ant_a=$rx_ant_a, rx_ant_b=$rx_ant_b) +#if $format() +self.$(id).set_format(width=$format.width, shift=$format.shift) +#end if +self.$(id).set_decim_rate($decimation) +self.$(id).set_frequency_a($frequency_a, verbose=True) +self.$(id).set_frequency_b($frequency_b, verbose=True) +self.$(id).set_gain_a($gain_a) +self.$(id).set_gain_b($gain_b) +#if $lo_offset_a() != float('inf') +self.$(id).set_lo_offset_a($lo_offset_a) +#end if +#if $lo_offset_b() != float('inf') +self.$(id).set_lo_offset_b($lo_offset_b) +#end if + set_decim_rate($decimation) + set_frequency_a($frequency_a) + set_frequency_b($frequency_b) + set_gain_a($gain_a) + set_gain_b($gain_b) + + Output Type + type + enum + + + + + Format + format + + enum + #if $format() then '' else 'part'# + + + + + Unit Number + which + 0 + int + + + Decimation + decimation + int + + + Frequency A (Hz) + frequency_a + real + + + Frequency B (Hz) + frequency_b + real + + + LO Offset A (Hz) + lo_offset_a + float('inf') + real + #if $lo_offset_a() == float('inf') then 'part' else 'none'# + + + + LO Offset B (Hz) + lo_offset_b + float('inf') + real + #if $lo_offset_b() == float('inf') then 'part' else 'none'# + + + + Gain A (dB) + gain_a + 0 + real + + + Gain B (dB) + gain_b + 0 + real + + + + RX Antenna A + rx_ant_a + RXA + string + + + + + + + + + RX Antenna B + rx_ant_b + RXA + string + + + + + + + + Aout + $type + + + Bout + $type + + +The USRP source outputs 64 Megasamples per second / decimation. + +The "Receive Antenna Setting" selects one of the SMA connectors as the data source. \ +Flex RF boards use the "TX/RX" and "RX2" settings. \ +Basic RX and LFRX use the "RXA", "RXB", and "RXAB" settings. \ +All other boards use the "RXA" setting. + + diff --git a/grc/blocks/usrp_probe.xml b/grc/blocks/usrp_probe.xml new file mode 100644 index 00000000..ee207c28 --- /dev/null +++ b/grc/blocks/usrp_probe.xml @@ -0,0 +1,40 @@ + + + + USRP Probe + usrp_probe + + + Unit Number + which + 0 + int + + + Daughter Board + dboard + enum + + + + + + Press "Probe" to retrieve USRP information... + diff --git a/grc/blocks/usrp_simple_sink_x.xml b/grc/blocks/usrp_simple_sink_x.xml new file mode 100644 index 00000000..f3ccf126 --- /dev/null +++ b/grc/blocks/usrp_simple_sink_x.xml @@ -0,0 +1,128 @@ + + + + USRP Sink + usrp_simple_sink_x + from grc_gnuradio import usrp as grc_usrp + grc_usrp.simple_sink_$(type.fcn)(which=$which, side=$side) +self.$(id).set_interp_rate($interpolation) +self.$(id).set_frequency($frequency, verbose=True) +self.$(id).set_gain($gain) +#if $transmit.tx_enb +self.$(id).set_enable(True) +#end if +#if $transmit.auto_tr +self.$(id).set_auto_tr(True) +#end if +#if $lo_offset() != float('inf') +self.$(id).set_lo_offset($lo_offset) +#end if + set_lo_offset($lo_offset) + set_interp_rate($interpolation) + set_frequency($frequency) + set_gain($gain) + + Input Type + type + enum + + + + + Unit Number + which + 0 + int + + + Interpolation + interpolation + int + + + Frequency (Hz) + frequency + real + + + LO Offset (Hz) + lo_offset + float('inf') + real + #if $lo_offset() == float('inf') then 'part' else 'none'# + + + + Gain (dB) + gain + 0 + real + + + Side + side + A + string + + + + + Transmit + transmit + + enum + #if $transmit.tx_enb then 'none' else 'part'# + + + + + + in + $type + + +The USRP sink inputs 128 Megasamples per second / interpolation. + +Input amplitude should be between 0 and 32767. + +Flex RF boards only: The "Transmit Setting" must be configured. \ +When set to "Enable" the transmitter is always on. \ +When set to "Auto Transmit/Receive", the transmitter is disabled while receiving. + + diff --git a/grc/blocks/usrp_simple_source_x.xml b/grc/blocks/usrp_simple_source_x.xml new file mode 100644 index 00000000..1a777bd6 --- /dev/null +++ b/grc/blocks/usrp_simple_source_x.xml @@ -0,0 +1,163 @@ + + + + USRP Source + usrp_simple_source_x + from grc_gnuradio import usrp as grc_usrp + grc_usrp.simple_source_$(type.fcn)(which=$which, side=$side, rx_ant=$rx_ant#if $hb_filters() then ', no_hb=True' else ''#) +#if $format() +self.$(id).set_format(width=$format.width, shift=$format.shift) +#end if +self.$(id).set_decim_rate($decimation) +self.$(id).set_frequency($frequency, verbose=True) +self.$(id).set_gain($gain) +#if $lo_offset() != float('inf') +self.$(id).set_lo_offset($lo_offset) +#end if + set_lo_offset($lo_offset) + set_decim_rate($decimation) + set_frequency($frequency) + set_gain($gain) + + Output Type + type + enum + + + + + Format + format + + enum + #if $format() then '' else 'part'# + + + + + Unit Number + which + 0 + int + + + Decimation + decimation + int + + + Frequency (Hz) + frequency + real + + + LO Offset (Hz) + lo_offset + float('inf') + real + #if $lo_offset() == float('inf') then 'part' else 'none'# + + + + Gain (dB) + gain + 0 + real + + + Side + side + A + string + + + + + RX Antenna + rx_ant + RXA + string + + + + + + + + Halfband Filters + hb_filters + + enum + #if $hb_filters() then 'none' else 'part'# + + + + + out + $type + + +The USRP source outputs 64 Megasamples per second / decimation. + +The "Receive Antenna Setting" selects one of the SMA connectors as the data source. \ +Flex RF boards use the "TX/RX" and "RX2" settings. \ +Basic RX and LFRX use the "RXA", "RXB", and "RXAB" settings. \ +All other boards use the "RXA" setting. + +With the format set to 8 bits and the halfband filters disabled, the USRP can acheive a decimation rate of 4. \ +Disabling the halfband filters requires a special USRP firmware without halfband filters or TX paths. \ +For this reason, the USRP cannot transmit with the halfband filters disabled. + + diff --git a/grc/blocks/variable.xml b/grc/blocks/variable.xml new file mode 100644 index 00000000..afee0f5d --- /dev/null +++ b/grc/blocks/variable.xml @@ -0,0 +1,23 @@ + + + + Variable + variable + self.$(id) = $(id) = $value + + self.set_$(id)($value) + + Value + value + 0 + raw + + +This block maps a value to a unique variable. \ +This variable block has no graphical representation. + + diff --git a/grc/blocks/variable_check_box.xml b/grc/blocks/variable_check_box.xml new file mode 100644 index 00000000..a703703c --- /dev/null +++ b/grc/blocks/variable_check_box.xml @@ -0,0 +1,84 @@ + + + + Variable Check Box + variable_check_box + from gnuradio.wxgui import forms + self.$(id) = $(id) = $value + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +#set $win = 'self._%s_check_box'%$id +$win = forms.check_box( + parent=$(parent).GetWin(), + value=self.$id, + callback=self.set_$(id), + #if $label() + label=$label, + #else + label='$id', + #end if + true=$true, + false=$false, +) +#if not $grid_pos() +$(parent).Add($win) +#else +$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) +#end if + self.set_$(id)($value) + self._$(id)_check_box.set_value($id) + + Label + label + + string + #if $label() then 'none' else 'part'# + + + Default Value + value + True + raw + + + True + true + True + raw + + + False + false + False + raw + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + $value in ($true, $false) + +This block creates a variable with a check box form. \ +Leave the label blank to use the variable id as the label. + +A check box form can switch between two states; \ +the default being True and False. \ +Override True and False to use alternative states. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/variable_chooser.xml b/grc/blocks/variable_chooser.xml new file mode 100644 index 00000000..ee41f26d --- /dev/null +++ b/grc/blocks/variable_chooser.xml @@ -0,0 +1,122 @@ + + + + Variable Chooser + variable_chooser + from gnuradio.wxgui import forms + self.$(id) = $(id) = $value + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +#set $win = 'self._%s_chooser'%$id +$win = forms.$(type)( + parent=$(parent).GetWin(), + value=self.$id, + callback=self.set_$(id), + #if $label() + label=$label, + #else + label='$id', + #end if + choices=$choices, + labels=$labels, +#if $type() == 'radio_buttons' + style=$style, +#end if +) +#if not $grid_pos() +$(parent).Add($win) +#else +$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) +#end if + self.set_$(id)($value) + self._$(id)_chooser.set_value($id) + + Label + label + + string + #if $label() then 'none' else 'part'# + + + Default Value + value + 1 + raw + + + Choices + choices + [1, 2, 3] + raw + + + Labels + labels + [] + raw + + + Type + type + drop_down + enum + + + + + + Style + style + wx.RA_HORIZONTAL + enum + #if $type() == 'radio_buttons' then 'part' else 'all'# + + + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + $value in $choices + not $labels or len($labels) == len($choices) + +This block creates a variable with a drop down, radio buttons, or a button. \ +Leave the label blank to use the variable id as the label. \ +The value index is the index of a particular choice, \ +which defines the default choice when the flow graph starts. \ +The choices must be a list of possible values. \ +Leave labels empty to use the choices as the labels. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/variable_config.xml b/grc/blocks/variable_config.xml new file mode 100644 index 00000000..1c815c34 --- /dev/null +++ b/grc/blocks/variable_config.xml @@ -0,0 +1,88 @@ + + + + Variable Config + variable_config + import ConfigParser + self._$(id)_config = ConfigParser.ConfigParser() +self._$(id)_config.read($config_file) +try: $(id) = self._$(id)_config.$(type.get)($section, $option) +except: $(id) = $value +self.$(id) = $(id) + + self.set_$(id)($value) + self._$(id)_config = ConfigParser.ConfigParser() +self._$(id)_config.read($config_file) +if not self._$(id)_config.has_section($section): + self._$(id)_config.add_section($section) +self._$(id)_config.set($section, $option, str($writeback)) +self._$(id)_config.write(open($config_file, 'w')) + + Default Value + value + 0 + $type + + + Type + type + real + enum + + + + + + + Config File + config_file + default + file_open + + + Section + section + main + string + + + Option + option + key + string + + + WriteBack + writeback + None + raw + + +This block represents a variable that can be read from a config file. + +To save the value back into the config file: \ +enter the name of another variable into the writeback param. \ +When the other variable is changed at runtime, the config file will be re-written. + + diff --git a/grc/blocks/variable_slider.xml b/grc/blocks/variable_slider.xml new file mode 100644 index 00000000..c13d2085 --- /dev/null +++ b/grc/blocks/variable_slider.xml @@ -0,0 +1,138 @@ + + + + Variable Slider + variable_slider + from gnuradio.wxgui import forms + self.$(id) = $(id) = $value + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +#set $win = '_%s_sizer'%$id +$win = wx.BoxSizer(wx.VERTICAL) +self._$(id)_text_box = forms.text_box( + parent=$(parent).GetWin(), + sizer=$win, + value=self.$id, + callback=self.set_$(id), + #if $label() + label=$label, + #else + label='$id', + #end if + converter=forms.$(converver)(), + proportion=0, +) +self._$(id)_slider = forms.slider( + parent=$(parent).GetWin(), + sizer=$win, + value=self.$id, + callback=self.set_$(id), + minimum=$min, + maximum=$max, + num_steps=$num_steps, + style=$style, + cast=$(converver.slider_cast), + proportion=1, +) +#if not $grid_pos() +$(parent).Add($win) +#else +$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) +#end if + self.set_$(id)($value) + self._$(id)_slider.set_value($id) + self._$(id)_text_box.set_value($id) + + Label + label + + string + #if $label() then 'none' else 'part'# + + + Default Value + value + 50 + real + + + Minimum + min + 0 + real + + + Maximum + max + 100 + real + + + Num Steps + num_steps + 100 + int + part + + + Style + style + wx.SL_HORIZONTAL + enum + part + + + + + Converter + converver + float_converter + enum + + + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + $min <= $value <= $max + $min < $max + 0 < $num_steps <= 1000 + +This block creates a variable with a slider. \ +Leave the label blank to use the variable id as the label. \ +The value must be a real number. \ +The value must be between the minimum and the maximum. \ +The number of steps must be between 0 and 1000. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/variable_static_text.xml b/grc/blocks/variable_static_text.xml new file mode 100644 index 00000000..c866b998 --- /dev/null +++ b/grc/blocks/variable_static_text.xml @@ -0,0 +1,97 @@ + + + + Variable Static Text + variable_static_text + from gnuradio.wxgui import forms + self.$(id) = $(id) = $value + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +#set $win = 'self._%s_static_text'%$id +$win = forms.static_text( + parent=$(parent).GetWin(), + value=self.$id, + callback=self.set_$(id), + #if $label() + label=$label, + #else + label='$id', + #end if + #if $formatter() + converter=forms.$(converver)(formatter=$formatter), + #else + converter=forms.$(converver)(), + #end if +) +#if not $grid_pos() +$(parent).Add($win) +#else +$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) +#end if + self.set_$(id)($value) + self._$(id)_static_text.set_value($id) + + Label + label + + string + #if $label() then 'none' else 'part'# + + + Default Value + value + 0 + raw + + + Converter + converver + float_converter + enum + + + + + + Formatter + formatter + None + raw + part + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + +This block creates a variable with a static text form. \ +Leave the label blank to use the variable id as the label. + +Format should be a function/lambda that converts a value into a string or None for the default formatter. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/variable_text_box.xml b/grc/blocks/variable_text_box.xml new file mode 100644 index 00000000..1b4b4355 --- /dev/null +++ b/grc/blocks/variable_text_box.xml @@ -0,0 +1,101 @@ + + + + Variable Text Box + variable_text_box + from gnuradio.wxgui import forms + self.$(id) = $(id) = $value + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +#set $win = 'self._%s_text_box'%$id +$win = forms.text_box( + parent=$(parent).GetWin(), + value=self.$id, + callback=self.set_$(id), + #if $label() + label=$label, + #else + label='$id', + #end if + #if $formatter() + converter=forms.$(converver)(formatter=$formatter), + #else + converter=forms.$(converver)(), + #end if +) +#if not $grid_pos() +$(parent).Add($win) +#else +$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) +#end if + self.set_$(id)($value) + self._$(id)_text_box.set_value($id) + + Label + label + + string + #if $label() then 'none' else 'part'# + + + Default Value + value + 0 + raw + + + Converter + converver + float_converter + enum + + + + + + + Formatter + formatter + None + raw + part + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + +This block creates a variable with a text box. \ +Leave the label blank to use the variable id as the label. + +Format should be a function/lambda that converts a value into a string or None for the default formatter. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/wxgui_constellationsink2.xml b/grc/blocks/wxgui_constellationsink2.xml new file mode 100644 index 00000000..5969d840 --- /dev/null +++ b/grc/blocks/wxgui_constellationsink2.xml @@ -0,0 +1,126 @@ + + + + Constellation Sink + wxgui_constellationsink2 + from gnuradio.wxgui import constsink_gl + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +constsink_gl.const_sink_c( + $(parent).GetWin(), + title=$title, + sample_rate=$samp_rate, + frame_rate=$frame_rate, + const_size=$const_size, + M=$M, + theta=$theta, + alpha=$alpha, + fmax=$fmax, + mu=$mu, + gain_mu=$gain_mu, + symbol_rate=$symbol_rate, + omega_limit=$omega_limit, +) +#if not $grid_pos() +$(parent).Add(self.$(id).win) +#else +$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) +#end if + set_sample_rate($samp_rate) + + Title + title + Constellation Plot + string + + + Sample Rate + samp_rate + samp_rate + real + + + Frame Rate + frame_rate + 5 + real + + + Constellation Size + const_size + 2048 + real + + + M + M + 4 + int + + + Theta + theta + 0 + real + + + Alpha + alpha + 0.005 + real + + + Max Freq + fmax + 0.06 + real + + + Mu + mu + 0.5 + real + + + Gain Mu + gain_mu + 0.005 + real + + + Symbol Rate + symbol_rate + samp_rate/4. + real + + + Omega Limit + omega_limit + 0.005 + real + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + + in + complex + + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/wxgui_fftsink2.xml b/grc/blocks/wxgui_fftsink2.xml new file mode 100644 index 00000000..faeca37e --- /dev/null +++ b/grc/blocks/wxgui_fftsink2.xml @@ -0,0 +1,177 @@ + + + + FFT Sink + wxgui_fftsink2 + from gnuradio.wxgui import fftsink2 + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +fftsink2.$(type.fcn)( + $(parent).GetWin(), + baseband_freq=$baseband_freq, + y_per_div=$y_per_div, + y_divs=$y_divs, + ref_level=$ref_level, + sample_rate=$samp_rate, + fft_size=$fft_size, + fft_rate=$fft_rate, + average=$average, + avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#, + title=$title, + peak_hold=$peak_hold, +) +#if not $grid_pos() +$(parent).Add(self.$(id).win) +#else +$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) +#end if + set_baseband_freq($baseband_freq) + set_sample_rate($samp_rate) + + Type + type + complex + enum + + + + + Title + title + FFT Plot + string + + + Sample Rate + samp_rate + samp_rate + real + + + Baseband Freq + baseband_freq + 0 + real + + + Y per Div + y_per_div + 10 + enum + + + + + + + + Y Divs + y_divs + 10 + int + + + Ref Level (dB) + ref_level + 50 + real + + + FFT Size + fft_size + 1024 + int + + + Refresh Rate + fft_rate + 30 + int + + + Peak Hold + peak_hold + False + enum + #if $peak_hold() == 'True' then 'none' else 'part'# + + + + + Average + average + False + enum + #if $average() == 'True' then 'none' else 'part'# + + + + + Average Alpha + avg_alpha + 0 + real + #if $average() == 'True' then 'none' else 'all'# + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + + in + $type + + +Set Average Alpha to 0 for automatic setting. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/wxgui_histosink2.xml b/grc/blocks/wxgui_histosink2.xml new file mode 100644 index 00000000..454a4932 --- /dev/null +++ b/grc/blocks/wxgui_histosink2.xml @@ -0,0 +1,64 @@ + + + + Histo Sink + wxgui_histosink2 + from gnuradio.wxgui import histosink_gl + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +histosink_gl.histo_sink_f( + $(parent).GetWin(), + title=$title, + num_bins=$num_bins, + frame_size=$frame_size, +) +#if not $grid_pos() +$(parent).Add(self.$(id).win) +#else +$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) +#end if + set_num_bins($num_bins) + set_frame_size($frame_size) + + Title + title + Histogram Plot + string + + + Num Bins + num_bins + 27 + int + + + Frame Size + frame_size + 1000 + int + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + + in + float + + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/wxgui_numbersink2.xml b/grc/blocks/wxgui_numbersink2.xml new file mode 100644 index 00000000..cc66cdcb --- /dev/null +++ b/grc/blocks/wxgui_numbersink2.xml @@ -0,0 +1,179 @@ + + + + Number Sink + wxgui_numbersink2 + from gnuradio.wxgui import numbersink2 + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +numbersink2.$(type.fcn)( + $(parent).GetWin(), + unit=$units, + minval=$min_value, + maxval=$max_value, + factor=$factor, + decimal_places=$decimal_places, + ref_level=$ref_level, + sample_rate=$samp_rate, + number_rate=$number_rate, + average=$average, + avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#, + label=$title, + peak_hold=$peak_hold, + show_gauge=$show_gauge, +) +#if not $grid_pos() +$(parent).Add(self.$(id).win) +#else +$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) +#end if + + Type + type + complex + enum + + + + + Title + title + Number Plot + string + + + Units + units + Units + string + + + Sample Rate + samp_rate + samp_rate + real + + + Min Value + min_value + -100 + real + + + Max Value + max_value + 100 + real + + + Factor + factor + 1.0 + real + + + Decimal Places + decimal_places + 10 + int + + + Reference Level + ref_level + 0 + real + + + Number Rate + number_rate + 15 + int + + + Peak Hold + peak_hold + False + enum + #if $peak_hold() == 'True' then 'none' else 'part'# + + + + + Average + average + False + enum + #if $average() == 'True' then 'none' else 'part'# + + + + + Average Alpha + avg_alpha + 0 + real + #if $average() == 'True' then 'none' else 'all'# + + + Show Gauge + show_gauge + True + enum + + + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + + in + $type + + +Set Average Alpha to 0 for automatic setting. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + +Incoming numbers are multiplied by the factor, and then added-to by the reference level. + + diff --git a/grc/blocks/wxgui_scopesink2.xml b/grc/blocks/wxgui_scopesink2.xml new file mode 100644 index 00000000..503d5297 --- /dev/null +++ b/grc/blocks/wxgui_scopesink2.xml @@ -0,0 +1,134 @@ + + + + Scope Sink + wxgui_scopesink2 + from gnuradio.wxgui import scopesink2 + from gnuradio import gr + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +scopesink2.$(type.fcn)( + $(parent).GetWin(), + title=$title, + sample_rate=$samp_rate, + v_scale=$v_scale, + t_scale=$t_scale, + ac_couple=$ac_couple, + xy_mode=$xy_mode, + num_inputs=$num_inputs, +) +#if not $grid_pos() +$(parent).Add(self.$(id).win) +#else +$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) +#end if + set_sample_rate($samp_rate) + + Type + type + complex + enum + + + + + Title + title + Scope Plot + string + + + Sample Rate + samp_rate + samp_rate + real + + + V Scale + v_scale + 0 + real + + + T Scale + t_scale + 0 + real + + + AC Couple + ac_couple + False + enum + #if $ac_couple() == 'True' then 'none' else 'part'# + + + + + XY Mode + xy_mode + False + enum + #if $xy_mode() == 'True' then 'none' else 'part'# + + + + + Num Inputs + num_inputs + 1 + int + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + not $xy_mode or '$type' == 'complex' or $num_inputs != 1 + + in + $type + $num_inputs + + +Set the V Scale to 0 for the scope to auto-scale. + +Set the T Scale to 0 for automatic setting. + +XY Mode allows the scope to initialize as an XY plotter. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/wxgui_waterfallsink2.xml b/grc/blocks/wxgui_waterfallsink2.xml new file mode 100644 index 00000000..c7d53f9f --- /dev/null +++ b/grc/blocks/wxgui_waterfallsink2.xml @@ -0,0 +1,134 @@ + + + + Waterfall Sink + wxgui_waterfallsink2 + from gnuradio.wxgui import waterfallsink2 + #set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' +waterfallsink2.$(type.fcn)( + $(parent).GetWin(), + baseband_freq=$baseband_freq, + y_per_div=$y_per_div, + ref_level=$ref_level, + sample_rate=$samp_rate, + fft_size=$fft_size, + fft_rate=$fft_rate, + average=$options.average, + avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#, + title=$title, +) +#if not $grid_pos() +$(parent).Add(self.$(id).win) +#else +$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) +#end if + set_baseband_freq($baseband_freq) + set_sample_rate($samp_rate) + + Type + type + complex + enum + + + + + Title + title + Waterfall Plot + string + + + Sample Rate + samp_rate + samp_rate + real + + + Baseband Freq + baseband_freq + 0 + real + + + Y per Div + y_per_div + 10 + real + + + Reference Level + ref_level + 50 + real + + + FFT Size + fft_size + 512 + int + + + FFT Rate + fft_rate + 15 + int + + + Average Alpha + avg_alpha + 0 + real + + + Options + options + none + enum + + + + + Grid Position + grid_pos + + grid_pos + + + Notebook + notebook + + notebook + + + in + $type + + +Set Average Alpha to 0 for automatic setting. + +Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. + +Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. + + diff --git a/grc/blocks/xmlrpc_client.xml b/grc/blocks/xmlrpc_client.xml new file mode 100644 index 00000000..dc4d154d --- /dev/null +++ b/grc/blocks/xmlrpc_client.xml @@ -0,0 +1,42 @@ + + + + XMLRPC Client + xmlrpc_client + import xmlrpclib + xmlrpclib.Server('http://$(addr()):$(port)') + $(callback())($variable) + + Address + addr + localhost + string + + + Port + port + 8080 + int + + + Callback + callback + set_ + string + + + Variable + variable + raw + + +This block will create an XMLRPC client. \ +The client will execute the callback on the server when the variable is changed. \ +The callback should be a the name of a function registered on the server. \ +The variable should be an expression containing a the name of a variable in flow graph. + + diff --git a/grc/blocks/xmlrpc_server.xml b/grc/blocks/xmlrpc_server.xml new file mode 100644 index 00000000..6c31bd1a --- /dev/null +++ b/grc/blocks/xmlrpc_server.xml @@ -0,0 +1,39 @@ + + + + XMLRPC Server + xmlrpc_server + import SimpleXMLRPCServer + import threading + SimpleXMLRPCServer.SimpleXMLRPCServer(($addr, $port), allow_none=True) +self.$(id).register_instance(self) +threading.Thread(target=self.$(id).serve_forever).start() + + Address + addr + localhost + string + + + Port + port + 8080 + int + + +This block will start an XMLRPC server. \ +The server provides access to the run, start, stop, wait functions of the flow graph. \ +The server also provides access to the variable callbacks in the flow graph. \ +Ex: If the variable is called freq, the function provided by the server will be called set_freq(new_freq). + +Example client in python: + +import xmlrpclib +s = xmlrpclib.Server('http://localhost:8080') +s.set_freq(5000) + + diff --git a/grc/examples/Makefile.am b/grc/examples/Makefile.am new file mode 100644 index 00000000..969485c0 --- /dev/null +++ b/grc/examples/Makefile.am @@ -0,0 +1,55 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +grc_examples_prefix = $(exampledir)/grc + +audiodatadir = $(grc_examples_prefix)/audio +dist_audiodata_DATA = \ + audio/dial_tone.grc + +simpledatadir = $(grc_examples_prefix)/simple +dist_simpledata_DATA = \ + simple/ber_simulation.grc \ + simple/dpsk_loopback.grc \ + simple/variable_config.grc \ + simple/var_sink_taps.grc + +trellisdatadir = $(grc_examples_prefix)/trellis +dist_trellisdata_DATA = \ + trellis/readme.txt \ + trellis/interference_cancellation.grc + +usrpdatadir = $(grc_examples_prefix)/usrp +dist_usrpdata_DATA = \ + usrp/usrp2_const_wave.grc \ + usrp/usrp2_dpsk_mod.grc \ + usrp/usrp2_fft.grc \ + usrp/usrp_two_tone_loopback.grc \ + usrp/usrp_wbfm_receive.grc + +xmlrpcdatadir = $(grc_examples_prefix)/xmlrpc +dist_xmlrpcdata_DATA = \ + xmlrpc/readme.txt \ + xmlrpc/xmlrpc_client.grc \ + xmlrpc/xmlrpc_client_script.py\ + xmlrpc/xmlrpc_server.grc diff --git a/grc/examples/Makefile.in b/grc/examples/Makefile.in new file mode 100644 index 00000000..7edaf778 --- /dev/null +++ b/grc/examples/Makefile.in @@ -0,0 +1,1021 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_audiodata_DATA) $(dist_simpledata_DATA) \ + $(dist_trellisdata_DATA) $(dist_usrpdata_DATA) \ + $(dist_xmlrpcdata_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = grc/examples +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(audiodatadir)" \ + "$(DESTDIR)$(simpledatadir)" "$(DESTDIR)$(trellisdatadir)" \ + "$(DESTDIR)$(usrpdatadir)" "$(DESTDIR)$(xmlrpcdatadir)" +dist_audiodataDATA_INSTALL = $(INSTALL_DATA) +dist_simpledataDATA_INSTALL = $(INSTALL_DATA) +dist_trellisdataDATA_INSTALL = $(INSTALL_DATA) +dist_usrpdataDATA_INSTALL = $(INSTALL_DATA) +dist_xmlrpcdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_audiodata_DATA) $(dist_simpledata_DATA) \ + $(dist_trellisdata_DATA) $(dist_usrpdata_DATA) \ + $(dist_xmlrpcdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_examples_prefix = $(exampledir)/grc +audiodatadir = $(grc_examples_prefix)/audio +dist_audiodata_DATA = \ + audio/dial_tone.grc + +simpledatadir = $(grc_examples_prefix)/simple +dist_simpledata_DATA = \ + simple/ber_simulation.grc \ + simple/dpsk_loopback.grc \ + simple/variable_config.grc \ + simple/var_sink_taps.grc + +trellisdatadir = $(grc_examples_prefix)/trellis +dist_trellisdata_DATA = \ + trellis/readme.txt \ + trellis/interference_cancellation.grc + +usrpdatadir = $(grc_examples_prefix)/usrp +dist_usrpdata_DATA = \ + usrp/usrp2_const_wave.grc \ + usrp/usrp2_dpsk_mod.grc \ + usrp/usrp2_fft.grc \ + usrp/usrp_two_tone_loopback.grc \ + usrp/usrp_wbfm_receive.grc + +xmlrpcdatadir = $(grc_examples_prefix)/xmlrpc +dist_xmlrpcdata_DATA = \ + xmlrpc/readme.txt \ + xmlrpc/xmlrpc_client.grc \ + xmlrpc/xmlrpc_client_script.py\ + xmlrpc/xmlrpc_server.grc + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/examples/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_audiodataDATA: $(dist_audiodata_DATA) + @$(NORMAL_INSTALL) + test -z "$(audiodatadir)" || $(MKDIR_P) "$(DESTDIR)$(audiodatadir)" + @list='$(dist_audiodata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_audiodataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(audiodatadir)/$$f'"; \ + $(dist_audiodataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(audiodatadir)/$$f"; \ + done + +uninstall-dist_audiodataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_audiodata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(audiodatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(audiodatadir)/$$f"; \ + done +install-dist_simpledataDATA: $(dist_simpledata_DATA) + @$(NORMAL_INSTALL) + test -z "$(simpledatadir)" || $(MKDIR_P) "$(DESTDIR)$(simpledatadir)" + @list='$(dist_simpledata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_simpledataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(simpledatadir)/$$f'"; \ + $(dist_simpledataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(simpledatadir)/$$f"; \ + done + +uninstall-dist_simpledataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_simpledata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(simpledatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(simpledatadir)/$$f"; \ + done +install-dist_trellisdataDATA: $(dist_trellisdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(trellisdatadir)" || $(MKDIR_P) "$(DESTDIR)$(trellisdatadir)" + @list='$(dist_trellisdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_trellisdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(trellisdatadir)/$$f'"; \ + $(dist_trellisdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(trellisdatadir)/$$f"; \ + done + +uninstall-dist_trellisdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_trellisdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(trellisdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(trellisdatadir)/$$f"; \ + done +install-dist_usrpdataDATA: $(dist_usrpdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(usrpdatadir)" || $(MKDIR_P) "$(DESTDIR)$(usrpdatadir)" + @list='$(dist_usrpdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_usrpdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(usrpdatadir)/$$f'"; \ + $(dist_usrpdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(usrpdatadir)/$$f"; \ + done + +uninstall-dist_usrpdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_usrpdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(usrpdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(usrpdatadir)/$$f"; \ + done +install-dist_xmlrpcdataDATA: $(dist_xmlrpcdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(xmlrpcdatadir)" || $(MKDIR_P) "$(DESTDIR)$(xmlrpcdatadir)" + @list='$(dist_xmlrpcdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_xmlrpcdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(xmlrpcdatadir)/$$f'"; \ + $(dist_xmlrpcdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(xmlrpcdatadir)/$$f"; \ + done + +uninstall-dist_xmlrpcdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_xmlrpcdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(xmlrpcdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(xmlrpcdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(audiodatadir)" "$(DESTDIR)$(simpledatadir)" "$(DESTDIR)$(trellisdatadir)" "$(DESTDIR)$(usrpdatadir)" "$(DESTDIR)$(xmlrpcdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_audiodataDATA \ + install-dist_simpledataDATA install-dist_trellisdataDATA \ + install-dist_usrpdataDATA install-dist_xmlrpcdataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_audiodataDATA \ + uninstall-dist_simpledataDATA uninstall-dist_trellisdataDATA \ + uninstall-dist_usrpdataDATA uninstall-dist_xmlrpcdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_audiodataDATA install-dist_simpledataDATA \ + install-dist_trellisdataDATA install-dist_usrpdataDATA \ + install-dist_xmlrpcdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_audiodataDATA uninstall-dist_simpledataDATA \ + uninstall-dist_trellisdataDATA uninstall-dist_usrpdataDATA \ + uninstall-dist_xmlrpcdataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/examples/audio/dial_tone.grc b/grc/examples/audio/dial_tone.grc new file mode 100644 index 00000000..ac8cbef2 --- /dev/null +++ b/grc/examples/audio/dial_tone.grc @@ -0,0 +1,375 @@ + + + Thu Jul 24 14:27:48 2008 + + options + + id + dial_tone + + + _enabled + True + + + title + Dial Tone + + + author + Example + + + description + example flow graph + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + gr_add_xx + + id + gr_add_xx + + + _enabled + True + + + type + float + + + num_inputs + 3 + + + vlen + 1 + + + _coordinate + (513, 277) + + + _rotation + 0 + + + + audio_sink + + id + audio_sink + + + _enabled + True + + + samp_rate + 32000 + + + device_name + + + + ok_to_block + True + + + num_inputs + 1 + + + _coordinate + (699, 112) + + + _rotation + 0 + + + + gr_noise_source_x + + id + gr_noise_source_x + + + _enabled + True + + + type + float + + + noise_type + gr.GR_GAUSSIAN + + + amp + noise + + + seed + 42 + + + _coordinate + (238, 380) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x + + + _enabled + True + + + type + float + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + 440 + + + amp + ampl + + + offset + 0 + + + _coordinate + (240, 208) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x0 + + + _enabled + True + + + type + float + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + 350 + + + amp + ampl + + + offset + 0 + + + _coordinate + (240, 38) + + + _rotation + 0 + + + + variable_slider + + id + ampl + + + _enabled + True + + + label + Volume + + + value + .4 + + + min + 0 + + + max + .5 + + + num_steps + 100 + + + slider_type + horizontal + + + grid_pos + 0, 0, 1, 2 + + + _coordinate + (634, 413) + + + _rotation + 0 + + + + variable_slider + + id + noise + + + _enabled + True + + + label + Noise + + + value + .005 + + + min + 0 + + + max + .2 + + + num_steps + 100 + + + slider_type + horizontal + + + grid_pos + 1, 0, 1, 2 + + + _coordinate + (443, 412) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 32000 + + + _coordinate + (11, 171) + + + _rotation + 0 + + + + gr_sig_source_x0 + gr_add_xx + 0 + 0 + + + gr_sig_source_x + gr_add_xx + 0 + 1 + + + gr_noise_source_x + gr_add_xx + 0 + 2 + + + gr_add_xx + audio_sink + 0 + 0 + + diff --git a/grc/examples/simple/ber_simulation.grc b/grc/examples/simple/ber_simulation.grc new file mode 100644 index 00000000..618add29 --- /dev/null +++ b/grc/examples/simple/ber_simulation.grc @@ -0,0 +1,564 @@ + + + Thu Mar 19 11:08:59 2009 + + options + + id + ber_sim + + + _enabled + True + + + title + BER Simulation + + + author + Example + + + description + Adjust the noise and constellation... see what happens! + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (16, 10) + + + _rotation + 0 + + + + gr_noise_source_x + + id + gr_noise_source_x + + + _enabled + True + + + type + complex + + + noise_type + gr.GR_GAUSSIAN + + + amp + noise + + + seed + 42 + + + _coordinate + (235, 379) + + + _rotation + 0 + + + + gr_chunks_to_symbols_xx + + id + gr_chunks_to_symbols_xx + + + _enabled + True + + + in_type + byte + + + out_type + complex + + + symbol_table + const + + + dimension + 1 + + + _coordinate + (360, 237) + + + _rotation + 0 + + + + wxgui_numbersink2 + + id + wxgui_numbersink2 + + + _enabled + True + + + type + float + + + title + BER + + + units + % + + + samp_rate + samp_rate + + + base_value + 0.0 + + + min_value + 0.0 + + + max_value + 1.0 + + + factor + 100 + + + decimal_places + 4 + + + ref_level + 0 + + + number_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + show_gauge + False + + + grid_pos + 1, 0, 1, 1 + + + _coordinate + (1062, 11) + + + _rotation + 0 + + + + gr_throttle + + id + gr_throttle + + + _enabled + True + + + type + byte + + + samples_per_second + samp_rate + + + vlen + 1 + + + _coordinate + (397, 27) + + + _rotation + 0 + + + + blks2_error_rate + + id + blks2_error_rate + + + _enabled + True + + + type + 'BER' + + + win_size + 1000000 + + + bits_per_symbol + int(math.log(len(const))/math.log(2)) + + + _coordinate + (670, 41) + + + _rotation + 0 + + + + gr_constellation_decoder_cb + + id + gr_constellation_decoder_cb + + + _enabled + True + + + sym_position + const + + + sym_value_out + range(len(const)) + + + _coordinate + (708, 224) + + + _rotation + 0 + + + + random_source_x + + id + random_source_x + + + _enabled + True + + + type + byte + + + min + 0 + + + max + len(const) + + + num_samps + 1000000 + + + repeat + False + + + _coordinate + (15, 244) + + + _rotation + 0 + + + + variable + + id + noise + + + _enabled + True + + + value + .25 + + + _coordinate + (18, 386) + + + _rotation + 0 + + + + variable + + id + const + + + _enabled + True + + + value + 1+1j, 1-1j, -1-1j, -1+1j + + + _coordinate + (16, 461) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 50e3 + + + _coordinate + (20, 168) + + + _rotation + 0 + + + + import + + id + import + + + _enabled + True + + + import + import math + + + _coordinate + (138, 168) + + + _rotation + 0 + + + + gr_add_xx + + id + gr_add_xx + + + _enabled + True + + + type + complex + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (652, 395) + + + _rotation + 0 + + + + wxgui_scopesink2 + + id + wxgui_scopesink2_0 + + + _enabled + True + + + type + complex + + + title + "Constellation: "+str(const) + + + samp_rate + samp_rate + + + v_scale + 0 + + + t_scale + 0 + + + ac_couple + False + + + xy_mode + True + + + num_inputs + 1 + + + grid_pos + 2, 0, 1, 1 + + + _coordinate + (828, 368) + + + _rotation + 0 + + + + blks2_error_rate + wxgui_numbersink2 + 0 + 0 + + + gr_throttle + blks2_error_rate + 0 + 0 + + + gr_constellation_decoder_cb + blks2_error_rate + 0 + 1 + + + gr_add_xx + gr_constellation_decoder_cb + 0 + 0 + + + gr_chunks_to_symbols_xx + gr_add_xx + 0 + 0 + + + gr_noise_source_x + gr_add_xx + 0 + 1 + + + random_source_x + gr_throttle + 0 + 0 + + + random_source_x + gr_chunks_to_symbols_xx + 0 + 0 + + + gr_add_xx + wxgui_scopesink2_0 + 0 + 0 + + diff --git a/grc/examples/simple/dpsk_loopback.grc b/grc/examples/simple/dpsk_loopback.grc new file mode 100644 index 00000000..6a507c98 --- /dev/null +++ b/grc/examples/simple/dpsk_loopback.grc @@ -0,0 +1,450 @@ + + + Tue Mar 17 12:53:37 2009 + + options + + id + dpsk_loopback + + + _enabled + True + + + title + DPSK Loopback + + + author + Example + + + description + gnuradio flow graph + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + blks2_dxpsk_mod + + id + blks2_dxpsk_mod_0 + + + _enabled + True + + + type + dbpsk + + + samples_per_symbol + 2 + + + excess_bw + 0.35 + + + gray_code + True + + + _coordinate + (426, 295) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 10000 + + + _coordinate + (10, 170) + + + _rotation + 0 + + + + variable_slider + + id + freq + + + _enabled + True + + + label + Frequency (Hz) + + + value + 500 + + + min + 0 + + + max + samp_rate/2 + + + num_steps + 100 + + + slider_length + 200 + + + slider_type + horizontal + + + grid_pos + + + + _coordinate + (12, 257) + + + _rotation + 0 + + + + blks2_packet_encoder + + id + blks2_packet_encoder_0 + + + _enabled + True + + + type + float + + + samples_per_symbol + 2 + + + bits_per_symbol + 1 + + + access_code + + + + pad_for_usrp + True + + + payload_length + 0 + + + _coordinate + (216, 260) + + + _rotation + 0 + + + + gr_throttle + + id + gr_throttle_0_0 + + + _enabled + True + + + type + float + + + samples_per_second + samp_rate + + + vlen + 1 + + + _coordinate + (225, 174) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x_0 + + + _enabled + True + + + type + float + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + freq + + + amp + 1 + + + offset + 0 + + + _coordinate + (203, 8) + + + _rotation + 0 + + + + blks2_packet_decoder + + id + blks2_packet_decoder_0 + + + _enabled + True + + + type + float + + + access_code + + + + threshold + -1 + + + _coordinate + (551, 65) + + + _rotation + 0 + + + + wxgui_scopesink2 + + id + wxgui_scopesink2_0 + + + _enabled + True + + + type + float + + + title + Scope Plot + + + samp_rate + samp_rate + + + frame_decim + 15 + + + v_scale + 0 + + + t_scale + 1./freq + + + marker + set_format_line + + + num_inputs + 1 + + + grid_pos + + + + _coordinate + (769, 12) + + + _rotation + 0 + + + + blks2_dxpsk_demod + + id + blks2_dxpsk_demod_0 + + + _enabled + True + + + type + dbpsk + + + samples_per_symbol + 2 + + + excess_bw + 0.35 + + + costas_alpha + 0.175 + + + gain_mu + 0.175 + + + mu + 0.5 + + + omega_relative_limit + 0.005 + + + gray_code + True + + + _coordinate + (691, 219) + + + _rotation + 0 + + + + blks2_dxpsk_mod_0 + blks2_dxpsk_demod_0 + 0 + 0 + + + blks2_dxpsk_demod_0 + blks2_packet_decoder_0 + 0 + 0 + + + blks2_packet_encoder_0 + blks2_dxpsk_mod_0 + 0 + 0 + + + gr_sig_source_x_0 + gr_throttle_0_0 + 0 + 0 + + + gr_throttle_0_0 + blks2_packet_encoder_0 + 0 + 0 + + + blks2_packet_decoder_0 + wxgui_scopesink2_0 + 0 + 0 + + diff --git a/grc/examples/simple/var_sink_taps.grc b/grc/examples/simple/var_sink_taps.grc new file mode 100644 index 00000000..07207850 --- /dev/null +++ b/grc/examples/simple/var_sink_taps.grc @@ -0,0 +1,488 @@ + + + Tue May 19 16:45:51 2009 + + options + + id + var_sink_taps + + + _enabled + True + + + title + Variable Sink + Taps + + + author + Example + + + description + gnuradio flow graph + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + gr_noise_source_x + + id + gr_noise_source_x_0 + + + _enabled + True + + + type + complex + + + noise_type + gr.GR_GAUSSIAN + + + amp + 1 + + + seed + 42 + + + _coordinate + (619, 36) + + + _rotation + 0 + + + + gr_fir_filter_xxx + + id + gr_fir_filter_xxx_0 + + + _enabled + True + + + type + ccc + + + decim + 1 + + + taps + dest_taps + + + _coordinate + (831, 47) + + + _rotation + 0 + + + + gr_throttle + + id + gr_throttle_0 + + + _enabled + True + + + type + complex + + + samples_per_second + samp_rate + + + vlen + 1 + + + _coordinate + (999, 198) + + + _rotation + 270 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2_0 + + + _enabled + True + + + type + complex + + + title + FFT Plot + + + samp_rate + samp_rate + + + baseband_freq + 0 + + + y_per_div + 10 + + + y_divs + 10 + + + ref_level + 50 + + + fft_size + 1024 + + + fft_rate + 30 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + grid_pos + + + + _coordinate + (629, 184) + + + _rotation + 180 + + + + import + + id + import_0 + + + _enabled + True + + + import + from gnuradio.gr import firdes + + + _coordinate + (330, 120) + + + _rotation + 0 + + + + variable + + id + dest_taps + + + _enabled + True + + + value + [0] + + + _coordinate + (836, 223) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 32000 + + + _coordinate + (831, 130) + + + _rotation + 0 + + + + variable + + id + source_taps + + + _enabled + True + + + value + firdes.low_pass(1, samp_rate, 4000, 2000) + + + _coordinate + (397, 191) + + + _rotation + 0 + + + + variable + + id + taps_rate + + + _enabled + True + + + value + 10 + + + _coordinate + (268, 189) + + + _rotation + 0 + + + + gr_vector_source_x + + id + gr_vector_source_x_0 + + + _enabled + True + + + type + complex + + + vector + source_taps + + + repeat + True + + + vlen + len(source_taps) + + + _coordinate + (205, 33) + + + _rotation + 0 + + + + note + + id + note_0 + + + _enabled + True + + + note + Pass the FIR taps via a variable sink. + + + _coordinate + (14, 141) + + + _rotation + 0 + + + + gr_throttle + + id + gr_throttle + + + _enabled + True + + + type + complex + + + samples_per_second + taps_rate + + + vlen + len(source_taps) + + + _coordinate + (440, 41) + + + _rotation + 0 + + + + blks2_variable_sink_x + + id + blks2_variable_sink_x_0 + + + _enabled + True + + + type + complex + + + variable + dest_taps + + + decim + 1 + + + vlen + len(source_taps) + + + _coordinate + (305, 283) + + + _rotation + 180 + + + + gr_noise_source_x_0 + gr_fir_filter_xxx_0 + 0 + 0 + + + gr_fir_filter_xxx_0 + gr_throttle_0 + 0 + 0 + + + gr_throttle_0 + wxgui_fftsink2_0 + 0 + 0 + + + gr_vector_source_x_0 + gr_throttle + 0 + 0 + + + gr_throttle + blks2_variable_sink_x_0 + 0 + 0 + + diff --git a/grc/examples/simple/variable_config.grc b/grc/examples/simple/variable_config.grc new file mode 100644 index 00000000..95c287cc --- /dev/null +++ b/grc/examples/simple/variable_config.grc @@ -0,0 +1,329 @@ + + + Thu Jun 25 10:56:04 2009 + + options + + id + variable_config_demo + + + _enabled + True + + + title + Variable Config Block Demonstration + + + author + Example + + + description + Save/Load freq from a config file. + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + autostart + True + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 32000 + + + _coordinate + (10, 170) + + + _rotation + 0 + + + + variable_config + + id + freq_init + + + _enabled + True + + + value + 1000 + + + type + real + + + config_file + config.conf + + + section + main + + + option + freq + + + writeback + freq + + + _coordinate + (255, 17) + + + _rotation + 0 + + + + variable_slider + + id + freq + + + _enabled + True + + + label + Frequency (Hz) + + + value + freq_init + + + min + -samp_rate/2 + + + max + samp_rate/2 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + + + + _coordinate + (429, 24) + + + _rotation + 0 + + + + gr_throttle + + id + gr_throttle_0 + + + _enabled + True + + + type + complex + + + samples_per_second + samp_rate + + + vlen + 1 + + + _coordinate + (392, 233) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x_0 + + + _enabled + True + + + type + complex + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + freq + + + amp + 1 + + + offset + 0 + + + _coordinate + (148, 233) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2_0 + + + _enabled + True + + + type + complex + + + title + FFT Plot + + + samp_rate + samp_rate + + + baseband_freq + 0 + + + y_per_div + 10 + + + y_divs + 10 + + + ref_level + 50 + + + fft_size + 1024 + + + fft_rate + 30 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + grid_pos + + + + _coordinate + (671, 233) + + + _rotation + 0 + + + + gr_sig_source_x_0 + gr_throttle_0 + 0 + 0 + + + gr_throttle_0 + wxgui_fftsink2_0 + 0 + 0 + + diff --git a/grc/examples/trellis/interference_cancellation.grc b/grc/examples/trellis/interference_cancellation.grc new file mode 100644 index 00000000..e93babd7 --- /dev/null +++ b/grc/examples/trellis/interference_cancellation.grc @@ -0,0 +1,2072 @@ + + + Thu Mar 19 11:22:40 2009 + + options + + id + int_cancellation + + + _enabled + True + + + title + Superposition Coding + + + author + AA + + + description + gnuradio flow graph + + + window_size + 2048, 2048 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + variable_slider + + id + alpha + + + _enabled + True + + + label + P1/P + + + value + 0.6 + + + min + 0 + + + max + 1.0 + + + num_steps + 100 + + + slider_length + 200 + + + slider_type + horizontal + + + grid_pos + + + + _coordinate + (243, 11) + + + _rotation + 0 + + + + variable_slider + + id + snr_db + + + _enabled + True + + + label + P/sigma^2 (dB) + + + value + 16 + + + min + 0 + + + max + 20 + + + num_steps + 100 + + + slider_length + 200 + + + slider_type + horizontal + + + grid_pos + + + + _coordinate + (447, 14) + + + _rotation + 0 + + + + variable + + id + noisevar + + + _enabled + True + + + value + 10**(-snr_db/10) + + + _coordinate + (637, 13) + + + _rotation + 0 + + + + random_source_x + + id + random_source_x_0 + + + _enabled + True + + + type + short + + + min + 0 + + + max + 2 + + + num_samps + 1000 + + + repeat + True + + + _coordinate + (21, 170) + + + _rotation + 0 + + + + gr_chunks_to_symbols_xx + + id + gr_chunks_to_symbols_xx_0 + + + _enabled + True + + + in_type + short + + + out_type + complex + + + symbol_table + 1,1j,-1j,-1 + + + dimension + 1 + + + _coordinate + (665, 187) + + + _rotation + 0 + + + + gr_multiply_const_vxx + + id + gr_multiply_const_vxx_0 + + + _enabled + True + + + type + complex + + + const + alpha**0.5 + + + vlen + 1 + + + _coordinate + (988, 196) + + + _rotation + 0 + + + + random_source_x + + id + random_source_x_1 + + + _enabled + True + + + type + short + + + min + 0 + + + max + 2 + + + num_samps + 1000 + + + repeat + True + + + _coordinate + (25, 291) + + + _rotation + 0 + + + + gr_chunks_to_symbols_xx + + id + gr_chunks_to_symbols_xx_1 + + + _enabled + True + + + in_type + short + + + out_type + complex + + + symbol_table + 1,1j,-1j,-1 + + + dimension + 1 + + + _coordinate + (660, 311) + + + _rotation + 0 + + + + gr_multiply_const_vxx + + id + gr_multiply_const_vxx_1 + + + _enabled + True + + + type + complex + + + const + (1-alpha)**0.5 + + + vlen + 1 + + + _coordinate + (994, 319) + + + _rotation + 0 + + + + gr_add_xx + + id + gr_add_xx_0 + + + _enabled + True + + + type + complex + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (1224, 244) + + + _rotation + 0 + + + + gr_noise_source_x + + id + gr_noise_source_x_0 + + + _enabled + True + + + type + complex + + + noise_type + gr.GR_GAUSSIAN + + + amp + noisevar + + + seed + 42 + + + _coordinate + (1146, 369) + + + _rotation + 0 + + + + gr_sub_xx + + id + gr_sub_xx_0 + + + _enabled + True + + + type + short + + + vlen + 1 + + + num_inputs + 2 + + + _coordinate + (536, 529) + + + _rotation + 0 + + + + gr_multiply_xx + + id + gr_multiply_xx_0 + + + _enabled + True + + + type + short + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (771, 525) + + + _rotation + 0 + + + + gr_short_to_float + + id + gr_short_to_float_0 + + + _enabled + True + + + _coordinate + (994, 545) + + + _rotation + 0 + + + + gr_sub_xx + + id + gr_sub_xx_3 + + + _enabled + True + + + type + short + + + vlen + 1 + + + num_inputs + 2 + + + _coordinate + (535, 792) + + + _rotation + 0 + + + + gr_multiply_xx + + id + gr_multiply_xx_1 + + + _enabled + True + + + type + short + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (785, 779) + + + _rotation + 0 + + + + gr_short_to_float + + id + gr_short_to_float_2 + + + _enabled + True + + + _coordinate + (1005, 798) + + + _rotation + 0 + + + + gr_chunks_to_symbols_xx + + id + gr_chunks_to_symbols_xx_2 + + + _enabled + True + + + in_type + short + + + out_type + complex + + + symbol_table + 1,1j,-1j,-1 + + + dimension + 1 + + + _coordinate + (405, 998) + + + _rotation + 0 + + + + gr_multiply_const_vxx + + id + gr_multiply_const_vxx_2 + + + _enabled + True + + + type + complex + + + const + alpha**0.5 + + + vlen + 1 + + + _coordinate + (710, 1008) + + + _rotation + 0 + + + + gr_sub_xx + + id + gr_sub_xx_2 + + + _enabled + True + + + type + complex + + + vlen + 1 + + + num_inputs + 2 + + + _coordinate + (944, 978) + + + _rotation + 0 + + + + gr_sub_xx + + id + gr_sub_xx_1 + + + _enabled + True + + + type + short + + + vlen + 1 + + + num_inputs + 2 + + + _coordinate + (540, 1141) + + + _rotation + 0 + + + + gr_multiply_xx + + id + gr_multiply_xx_2 + + + _enabled + True + + + type + short + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (796, 1136) + + + _rotation + 0 + + + + gr_short_to_float + + id + gr_short_to_float_1 + + + _enabled + True + + + _coordinate + (1009, 1156) + + + _rotation + 0 + + + + gr_chunks_to_symbols_xx + + id + gr_chunks_to_symbols_xx_2_0 + + + _enabled + True + + + in_type + short + + + out_type + complex + + + symbol_table + 1,1j,-1j,-1 + + + dimension + 1 + + + _coordinate + (420, 1368) + + + _rotation + 0 + + + + gr_multiply_const_vxx + + id + gr_multiply_const_vxx_2_0 + + + _enabled + True + + + type + complex + + + const + (1-alpha)**0.5 + + + vlen + 1 + + + _coordinate + (733, 1374) + + + _rotation + 0 + + + + gr_sub_xx + + id + gr_sub_xx_2_0 + + + _enabled + True + + + type + complex + + + vlen + 1 + + + num_inputs + 2 + + + _coordinate + (975, 1342) + + + _rotation + 0 + + + + gr_sub_xx + + id + gr_sub_xx_1_0 + + + _enabled + True + + + type + short + + + vlen + 1 + + + num_inputs + 2 + + + _coordinate + (559, 1536) + + + _rotation + 0 + + + + gr_multiply_xx + + id + gr_multiply_xx_2_0 + + + _enabled + True + + + type + short + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (771, 1530) + + + _rotation + 0 + + + + gr_short_to_float + + id + gr_short_to_float_1_0 + + + _enabled + True + + + _coordinate + (1010, 1551) + + + _rotation + 0 + + + + wxgui_numbersink2 + + id + wxgui_numbersink2_2 + + + _enabled + True + + + type + float + + + title + BER 2 (raw) + + + units + BER + + + samp_rate + R + + + base_value + 0.0 + + + min_value + 0 + + + max_value + 1.0 + + + factor + 1.0 + + + decimal_places + 6 + + + ref_level + 0 + + + number_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0.001 + + + show_gauge + True + + + grid_pos + 0,1,1,1 + + + _coordinate + (1260, 659) + + + _rotation + 0 + + + + wxgui_numbersink2 + + id + wxgui_numbersink2_3 + + + _enabled + True + + + type + float + + + title + BER 2 (after cancelling user 1) + + + units + BER + + + samp_rate + R + + + base_value + 0.0 + + + min_value + 0 + + + max_value + 1.0 + + + factor + 1.0 + + + decimal_places + 6 + + + ref_level + 0 + + + number_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0.001 + + + show_gauge + True + + + grid_pos + 1,1,1,1 + + + _coordinate + (1262, 1020) + + + _rotation + 0 + + + + wxgui_numbersink2 + + id + wxgui_numbersink2_3_0 + + + _enabled + True + + + type + float + + + title + BER 1 (after cancelling user 2) + + + units + BER + + + samp_rate + R + + + base_value + 0.0 + + + min_value + 0 + + + max_value + 1.0 + + + factor + 1.0 + + + decimal_places + 6 + + + ref_level + 0 + + + number_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0.001 + + + show_gauge + True + + + grid_pos + 1,0,1,1 + + + _coordinate + (1269, 1417) + + + _rotation + 0 + + + + variable + + id + R + + + _enabled + True + + + value + 10e3 + + + _coordinate + (748, 12) + + + _rotation + 0 + + + + trellis_encoder_xx + + id + trellis_encoder_xx_0 + + + _enabled + True + + + type + ss + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + init_state + 0 + + + _coordinate + (334, 190) + + + _rotation + 0 + + + + trellis_encoder_xx + + id + trellis_encoder_xx_1 + + + _enabled + True + + + type + ss + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + init_state + 0 + + + _coordinate + (336, 311) + + + _rotation + 0 + + + + trellis_viterbi_combined_xx + + id + trellis_viterbi_combined_xx_1 + + + _enabled + True + + + type + c + + + out_type + s + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + block_size + 1000 + + + init_state + -1 + + + final_state + -1 + + + dim + 1 + + + table + alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1) + + + metric_type + trellis.TRELLIS_EUCLIDEAN + + + _coordinate + (79, 501) + + + _rotation + 0 + + + + trellis_viterbi_combined_xx + + id + trellis_viterbi_combined_xx_2 + + + _enabled + True + + + type + c + + + out_type + s + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + block_size + 1000 + + + init_state + -1 + + + final_state + -1 + + + dim + 1 + + + table + (1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1) + + + metric_type + trellis.TRELLIS_EUCLIDEAN + + + _coordinate + (82, 766) + + + _rotation + 0 + + + + trellis_encoder_xx + + id + trellis_encoder_xx_2 + + + _enabled + True + + + type + ss + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + init_state + 0 + + + _coordinate + (89, 998) + + + _rotation + 0 + + + + trellis_viterbi_combined_xx + + id + trellis_viterbi_combined_xx_0 + + + _enabled + True + + + type + c + + + out_type + s + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + block_size + 1000 + + + init_state + -1 + + + final_state + -1 + + + dim + 1 + + + table + (1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1) + + + metric_type + trellis.TRELLIS_EUCLIDEAN + + + _coordinate + (83, 1111) + + + _rotation + 0 + + + + trellis_encoder_xx + + id + trellis_encoder_xx_2_0 + + + _enabled + True + + + type + ss + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + init_state + 0 + + + _coordinate + (105, 1367) + + + _rotation + 0 + + + + trellis_viterbi_combined_xx + + id + trellis_viterbi_combined_xx_0_0 + + + _enabled + True + + + type + c + + + out_type + s + + + fsm_args + prefix+"gr-trellis/src/examples/fsm_files/awgn1o2_16.fsm" + + + block_size + 1000 + + + init_state + -1 + + + final_state + -1 + + + dim + 1 + + + table + alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1) + + + metric_type + trellis.TRELLIS_EUCLIDEAN + + + _coordinate + (75, 1495) + + + _rotation + 0 + + + + variable + + id + prefix + + + _enabled + True + + + value + "../../../" + + + _coordinate + (871, 14) + + + _rotation + 0 + + + + gr_add_xx + + id + gr_add_xx_1 + + + _enabled + True + + + type + complex + + + num_inputs + 2 + + + vlen + 1 + + + _coordinate + (1400, 262) + + + _rotation + 0 + + + + wxgui_numbersink2 + + id + wxgui_numbersink2_0 + + + _enabled + True + + + type + float + + + title + BER 1 (raw) + + + units + BER + + + samp_rate + R + + + base_value + 0.0 + + + min_value + 0 + + + max_value + 1 + + + factor + 1.0 + + + decimal_places + 6 + + + ref_level + 0 + + + number_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0.001 + + + show_gauge + True + + + grid_pos + 0,0,1,1 + + + _coordinate + (1267, 410) + + + _rotation + 0 + + + + wxgui_scopesink2 + + id + wxgui_scopesink2_0 + + + _enabled + True + + + type + complex + + + title + Scope Plot + + + samp_rate + R + + + v_scale + 0 + + + t_scale + 0 + + + ac_couple + False + + + xy_mode + True + + + num_inputs + 1 + + + grid_pos + + + + _coordinate + (1533, 149) + + + _rotation + 0 + + + + random_source_x_1 + trellis_encoder_xx_1 + 0 + 0 + + + trellis_encoder_xx_0 + gr_chunks_to_symbols_xx_0 + 0 + 0 + + + trellis_encoder_xx_1 + gr_chunks_to_symbols_xx_1 + 0 + 0 + + + gr_chunks_to_symbols_xx_0 + gr_multiply_const_vxx_0 + 0 + 0 + + + gr_multiply_const_vxx_0 + gr_add_xx_0 + 0 + 0 + + + gr_add_xx_0 + gr_add_xx_1 + 0 + 0 + + + gr_noise_source_x_0 + gr_add_xx_1 + 0 + 1 + + + gr_chunks_to_symbols_xx_1 + gr_multiply_const_vxx_1 + 0 + 0 + + + gr_multiply_const_vxx_1 + gr_add_xx_0 + 0 + 1 + + + gr_sub_xx_0 + gr_multiply_xx_0 + 0 + 0 + + + gr_sub_xx_0 + gr_multiply_xx_0 + 0 + 1 + + + gr_multiply_xx_0 + gr_short_to_float_0 + 0 + 0 + + + gr_short_to_float_0 + wxgui_numbersink2_0 + 0 + 0 + + + gr_multiply_xx_2 + gr_short_to_float_1 + 0 + 0 + + + random_source_x_0 + trellis_encoder_xx_0 + 0 + 0 + + + gr_add_xx_1 + trellis_viterbi_combined_xx_1 + 0 + 0 + + + random_source_x_0 + gr_sub_xx_0 + 0 + 0 + + + trellis_viterbi_combined_xx_1 + gr_sub_xx_0 + 0 + 1 + + + trellis_viterbi_combined_xx_0 + gr_sub_xx_1 + 0 + 1 + + + random_source_x_1 + gr_sub_xx_1 + 0 + 0 + + + gr_sub_xx_1 + gr_multiply_xx_2 + 0 + 0 + + + gr_sub_xx_1 + gr_multiply_xx_2 + 0 + 1 + + + gr_sub_xx_2 + trellis_viterbi_combined_xx_0 + 0 + 0 + + + gr_add_xx_1 + gr_sub_xx_2 + 0 + 0 + + + trellis_encoder_xx_2 + gr_chunks_to_symbols_xx_2 + 0 + 0 + + + gr_chunks_to_symbols_xx_2 + gr_multiply_const_vxx_2 + 0 + 0 + + + gr_multiply_const_vxx_2 + gr_sub_xx_2 + 0 + 1 + + + trellis_viterbi_combined_xx_1 + trellis_encoder_xx_2 + 0 + 0 + + + gr_multiply_xx_1 + gr_short_to_float_2 + 0 + 0 + + + gr_short_to_float_2 + wxgui_numbersink2_2 + 0 + 0 + + + trellis_viterbi_combined_xx_2 + gr_sub_xx_3 + 0 + 1 + + + gr_sub_xx_3 + gr_multiply_xx_1 + 0 + 0 + + + gr_sub_xx_3 + gr_multiply_xx_1 + 0 + 1 + + + gr_add_xx_1 + trellis_viterbi_combined_xx_2 + 0 + 0 + + + random_source_x_1 + gr_sub_xx_3 + 0 + 0 + + + gr_short_to_float_1 + wxgui_numbersink2_3 + 0 + 0 + + + trellis_encoder_xx_2_0 + gr_chunks_to_symbols_xx_2_0 + 0 + 0 + + + gr_chunks_to_symbols_xx_2_0 + gr_multiply_const_vxx_2_0 + 0 + 0 + + + trellis_viterbi_combined_xx_2 + trellis_encoder_xx_2_0 + 0 + 0 + + + gr_multiply_xx_2_0 + gr_short_to_float_1_0 + 0 + 0 + + + trellis_viterbi_combined_xx_0_0 + gr_sub_xx_1_0 + 0 + 1 + + + gr_sub_xx_1_0 + gr_multiply_xx_2_0 + 0 + 0 + + + gr_sub_xx_1_0 + gr_multiply_xx_2_0 + 0 + 1 + + + gr_sub_xx_2_0 + trellis_viterbi_combined_xx_0_0 + 0 + 0 + + + gr_short_to_float_1_0 + wxgui_numbersink2_3_0 + 0 + 0 + + + gr_add_xx_1 + gr_sub_xx_2_0 + 0 + 0 + + + random_source_x_0 + gr_sub_xx_1_0 + 0 + 0 + + + gr_multiply_const_vxx_2_0 + gr_sub_xx_2_0 + 0 + 1 + + + gr_add_xx_1 + wxgui_scopesink2_0 + 0 + 0 + + diff --git a/grc/examples/trellis/readme.txt b/grc/examples/trellis/readme.txt new file mode 100644 index 00000000..d620fd62 --- /dev/null +++ b/grc/examples/trellis/readme.txt @@ -0,0 +1,16 @@ +This is an example of using gr-trellis in grc. + +Two users are transmitting simultaneously using convolutionally encoded QPSK, each with power P1=alpha*P and P2=(1-alpha)*P. +The combined signal is observed in noise and four different receivers are considered: +1) A viterbi decoder decoding user 1 assuming user 2 is noise +2) A viterbi decoder decoding user 2 assuming user 1 is noise +3) A viterbi decoder decoding user 1 first + and then reencoding this signal, subtracting it from the observation + and then running a Viterbi decoder decoding user 2 +4) A viterbi decoder decoding user 2 first + and then reencoding this signal, subtracting it from the observation + and then running a Viterbi decoder decoding user 1 + +You can change the signal to noise ratio P/sigma^2 and the allocation of power to the two users, alpha. + +Enjoy. diff --git a/grc/examples/usrp/usrp2_const_wave.grc b/grc/examples/usrp/usrp2_const_wave.grc new file mode 100644 index 00000000..fdbd7c1f --- /dev/null +++ b/grc/examples/usrp/usrp2_const_wave.grc @@ -0,0 +1,252 @@ + + + Wed Apr 15 11:22:56 2009 + + const_source_x + + id + const_source_x_0 + + + _enabled + True + + + type + complex + + + const + ampl + + + _coordinate + (284, 154) + + + _rotation + 0 + + + + usrp2_sink_xxxx + + id + usrp2_sink_xxxx_0 + + + _enabled + True + + + type + complex + + + interface + + + + mac_addr + + + + interpolation + interp + + + frequency + tun_freq + + + gain + 0 + + + _coordinate + (493, 106) + + + _rotation + 0 + + + + variable + + id + interp + + + _enabled + True + + + value + 16 + + + _coordinate + (16, 255) + + + _rotation + 0 + + + + variable_slider + + id + tun_freq + + + _enabled + True + + + label + USRP2 Freq (Hz) + + + value + 2.45e9 + + + min + 2.4e9 + + + max + 2.5e9 + + + num_steps + 100 + + + slider_length + 200 + + + slider_type + horizontal + + + grid_pos + + + + _coordinate + (30, 376) + + + _rotation + 0 + + + + variable_slider + + id + ampl + + + _enabled + True + + + label + Amplitude + + + value + .1 + + + min + 0 + + + max + 1 + + + num_steps + 100 + + + slider_length + 200 + + + slider_type + horizontal + + + grid_pos + + + + _coordinate + (204, 376) + + + _rotation + 0 + + + + options + + id + usrp2_const_wave + + + _enabled + True + + + title + USRP2 Constant Wave + + + author + Example + + + description + Tune USRP2 + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + const_source_x_0 + usrp2_sink_xxxx_0 + 0 + 0 + + diff --git a/grc/examples/usrp/usrp2_dpsk_mod.grc b/grc/examples/usrp/usrp2_dpsk_mod.grc new file mode 100644 index 00000000..e9f9b41e --- /dev/null +++ b/grc/examples/usrp/usrp2_dpsk_mod.grc @@ -0,0 +1,693 @@ + + + Wed Apr 15 17:31:00 2009 + + options + + id + usrp2_dpsk_mod + + + _enabled + True + + + title + USRP2 DPSK Modulation + + + author + Example + + + description + Generate a DPSK signal + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 100e6/interp + + + _coordinate + (52, 166) + + + _rotation + 0 + + + + usrp2_sink_xxxx + + id + usrp2_sink_xxxx_0 + + + _enabled + True + + + type + complex + + + interface + + + + mac_addr + + + + interpolation + interp + + + frequency + tun_freq + + + gain + 0 + + + _coordinate + (1059, 56) + + + _rotation + 0 + + + + gr_multiply_const_vxx + + id + gr_multiply_const_vxx_0 + + + _enabled + True + + + type + complex + + + const + ampl + + + vlen + 1 + + + _coordinate + (679, 58) + + + _rotation + 0 + + + + blks2_dxpsk_mod + + id + blks2_dxpsk_mod_0 + + + _enabled + True + + + type + dqpsk + + + samples_per_symbol + samps_per_sym + + + excess_bw + 0.35 + + + gray_code + True + + + _coordinate + (468, 55) + + + _rotation + 0 + + + + variable + + id + interp + + + _enabled + True + + + value + 100 + + + _coordinate + (31, 256) + + + _rotation + 0 + + + + variable + + id + samps_per_sym + + + _enabled + True + + + value + 8 + + + _coordinate + (126, 250) + + + _rotation + 0 + + + + random_source_x + + id + random_source_x_0 + + + _enabled + True + + + type + byte + + + min + 0 + + + max + 256 + + + num_samps + 1000 + + + repeat + True + + + _coordinate + (255, 39) + + + _rotation + 0 + + + + variable_slider + + id + ampl + + + _enabled + True + + + label + Amplitude + + + value + .1 + + + min + 0 + + + max + 1 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + + + + _coordinate + (246, 372) + + + _rotation + 0 + + + + variable_slider + + id + rx_freq_off + + + _enabled + True + + + label + RX Freq Offset (Hz) + + + value + -20e3 + + + min + -50e3 + + + max + +50e3 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + + + + _coordinate + (247, 508) + + + _rotation + 0 + + + + variable_slider + + id + tun_freq + + + _enabled + True + + + label + USRP2 Freq (Hz) + + + value + 2.45e9 + + + min + 2.4e9 + + + max + 2.5e9 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + + + + _coordinate + (49, 341) + + + _rotation + 0 + + + + wxgui_constellationsink2 + + id + wxgui_constellationsink2_0 + + + _enabled + True + + + title + Constellation Plot + + + samp_rate + samp_rate + + + frame_rate + 5 + + + const_size + 2048 + + + M + 4 + + + theta + 0 + + + alpha + 0.005 + + + fmax + 0.06 + + + mu + 0.5 + + + gain_mu + 0.005 + + + symbol_rate + samp_rate/samps_per_sym + + + omega_limit + 0.005 + + + grid_pos + + + + _coordinate + (920, 202) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2_0 + + + _enabled + True + + + type + complex + + + title + FFT Plot + + + samp_rate + samp_rate + + + baseband_freq + tun_freq + + + y_per_div + 10 + + + ref_level + 10 + + + fft_size + 1024 + + + fft_rate + 30 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + grid_pos + + + + _coordinate + (691, 155) + + + _rotation + 0 + + + + wxgui_scopesink2 + + id + wxgui_scopesink2_0 + + + _enabled + False + + + type + complex + + + title + Scope Plot + + + samp_rate + samp_rate + + + v_scale + 0 + + + t_scale + 1e-6 + + + ac_couple + False + + + xy_mode + True + + + num_inputs + 1 + + + grid_pos + + + + _coordinate + (515, 272) + + + _rotation + 0 + + + + usrp2_source_xxxx + + id + usrp2_source_xxxx_0 + + + _enabled + True + + + type + complex + + + interface + eth1 + + + mac_addr + + + + decimation + interp + + + frequency + tun_freq + rx_freq_off + + + gain + 30 + + + _coordinate + (270, 200) + + + _rotation + 0 + + + + random_source_x_0 + blks2_dxpsk_mod_0 + 0 + 0 + + + blks2_dxpsk_mod_0 + gr_multiply_const_vxx_0 + 0 + 0 + + + gr_multiply_const_vxx_0 + usrp2_sink_xxxx_0 + 0 + 0 + + + usrp2_source_xxxx_0 + wxgui_constellationsink2_0 + 0 + 0 + + + usrp2_source_xxxx_0 + wxgui_scopesink2_0 + 0 + 0 + + + usrp2_source_xxxx_0 + wxgui_fftsink2_0 + 0 + 0 + + diff --git a/grc/examples/usrp/usrp2_fft.grc b/grc/examples/usrp/usrp2_fft.grc new file mode 100644 index 00000000..134bd461 --- /dev/null +++ b/grc/examples/usrp/usrp2_fft.grc @@ -0,0 +1,264 @@ + + + Wed Apr 15 17:30:20 2009 + + options + + id + usrp2_fft + + + _enabled + True + + + title + USRP2 FFT Plotter + + + author + Example + + + description + FFT waveform plot + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 100e6/decim + + + _coordinate + (10, 170) + + + _rotation + 0 + + + + variable + + id + decim + + + _enabled + True + + + value + 16 + + + _coordinate + (24, 267) + + + _rotation + 0 + + + + variable_slider + + id + tun_freq + + + _enabled + True + + + label + USRP2 Freq (Hz) + + + value + 2.45e9 + + + min + 2.4e9 + + + max + 2.5e9 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + + + + _coordinate + (32, 365) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2_0 + + + _enabled + True + + + type + complex + + + title + FFT Plot + + + samp_rate + samp_rate + + + baseband_freq + tun_freq + + + y_per_div + 10 + + + ref_level + 10 + + + fft_size + 1024 + + + fft_rate + 30 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + grid_pos + + + + _coordinate + (466, 100) + + + _rotation + 0 + + + + usrp2_source_xxxx + + id + usrp2_source_xxxx_0 + + + _enabled + True + + + type + complex + + + interface + + + + mac_addr + + + + decimation + decim + + + frequency + tun_freq + + + gain + 0 + + + _coordinate + (211, 200) + + + _rotation + 0 + + + + usrp2_source_xxxx_0 + wxgui_fftsink2_0 + 0 + 0 + + diff --git a/grc/examples/usrp/usrp_two_tone_loopback.grc b/grc/examples/usrp/usrp_two_tone_loopback.grc new file mode 100644 index 00000000..3df97704 --- /dev/null +++ b/grc/examples/usrp/usrp_two_tone_loopback.grc @@ -0,0 +1,749 @@ + + + Fri Apr 17 18:23:35 2009 + + variable + + id + samp_rate + + + _enabled + True + + + value + 64e6/200 + + + _coordinate + (9, 166) + + + _rotation + 0 + + + + variable + + id + tun_freq + + + _enabled + True + + + value + int(100e6) + + + _coordinate + (116, 166) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x + + + _enabled + True + + + type + complex + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + tone1 + + + amp + tone_ampl + + + offset + 0 + + + _coordinate + (258, 20) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x0 + + + _enabled + True + + + type + complex + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + tone2 + + + amp + tone_ampl + + + offset + 0 + + + _coordinate + (255, 179) + + + _rotation + 0 + + + + gr_add_xx + + id + gr_add_xx + + + _enabled + True + + + type + complex + + + num_inputs + 3 + + + vlen + 1 + + + _coordinate + (528, 78) + + + _rotation + 0 + + + + parameter + + id + tx_side + + + _enabled + True + + + label + + + + value + A + + + type + string + + + _coordinate + (688, 384) + + + _rotation + 0 + + + + usrp_simple_sink_x + + id + usrp_simple_sink_x + + + _enabled + True + + + type + complex + + + format + + + + which + 0 + + + interpolation + 400 + + + frequency + tun_freq + + + gain + 0 + + + side + tx_side + + + transmit + + + + _coordinate + (835, 5) + + + _rotation + 0 + + + + usrp_simple_source_x + + id + usrp_simple_source_x + + + _enabled + True + + + type + complex + + + format + + + + which + 0 + + + decimation + 200 + + + frequency + tun_freq + + + gain + 20 + + + side + rx_side + + + rx_ant + rx_ant + + + hb_filters + + + + _coordinate + (479, 224) + + + _rotation + 0 + + + + parameter + + id + rx_ant + + + _enabled + True + + + label + + + + value + RXA + + + type + string + + + _coordinate + (802, 384) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2 + + + _enabled + True + + + type + complex + + + title + FFT Plot + + + samp_rate + samp_rate + + + baseband_freq + 0 + + + y_per_div + 10 + + + ref_level + 100 + + + fft_size + 512*2 + + + fft_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + grid_pos + 1, 2, 2, 4 + + + _coordinate + (746, 133) + + + _rotation + 0 + + + + parameter + + id + rx_side + + + _enabled + True + + + label + + + + value + A + + + type + string + + + _coordinate + (568, 382) + + + _rotation + 0 + + + + gr_noise_source_x + + id + gr_noise_source_x + + + _enabled + True + + + type + complex + + + noise_type + gr.GR_GAUSSIAN + + + amp + noise_ampl + + + seed + 42 + + + _coordinate + (276, 312) + + + _rotation + 0 + + + + variable_slider + + id + noise_ampl + + + _enabled + True + + + label + Noise Ampl + + + value + 2000 + + + min + 0 + + + max + 5000 + + + num_steps + 100 + + + style + wx.SL_VERTICAL + + + converver + float_converter + + + grid_pos + 1, 1, 2, 1 + + + _coordinate + (20, 243) + + + _rotation + 0 + + + + variable_slider + + id + tone_ampl + + + _enabled + True + + + label + Tone Ampl + + + value + 5000 + + + min + 0 + + + max + 10e3 + + + num_steps + 100 + + + style + wx.SL_VERTICAL + + + converver + float_converter + + + grid_pos + 1, 0, 2, 1 + + + _coordinate + (28, 437) + + + _rotation + 0 + + + + variable_slider + + id + tone1 + + + _enabled + True + + + label + Tone 1 + + + value + 50e3 + + + min + -samp_rate/2 + + + max + samp_rate/2 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + 0, 0, 1, 4 + + + _coordinate + (190, 436) + + + _rotation + 0 + + + + variable_slider + + id + tone2 + + + _enabled + True + + + label + Tone 2 + + + value + 75e3 + + + min + -samp_rate/2 + + + max + samp_rate/2 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + 0, 4, 1, 4 + + + _coordinate + (367, 439) + + + _rotation + 0 + + + + options + + id + usrp_two_tone_loopback + + + _enabled + True + + + title + USRP Loopback - 2 Tone + + + author + Example + + + description + Loopback test with basic rx and basic tx + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + gr_sig_source_x + gr_add_xx + 0 + 0 + + + gr_sig_source_x0 + gr_add_xx + 0 + 1 + + + gr_noise_source_x + gr_add_xx + 0 + 2 + + + usrp_simple_source_x + wxgui_fftsink2 + 0 + 0 + + + gr_add_xx + usrp_simple_sink_x + 0 + 0 + + diff --git a/grc/examples/usrp/usrp_wbfm_receive.grc b/grc/examples/usrp/usrp_wbfm_receive.grc new file mode 100644 index 00000000..8f53475a --- /dev/null +++ b/grc/examples/usrp/usrp_wbfm_receive.grc @@ -0,0 +1,466 @@ + + + Fri Apr 17 19:06:07 2009 + + options + + id + usrp_wbfm_receive + + + _enabled + True + + + title + USRP WBFM Receive + + + author + Example + + + description + WBFM Receive with Basic RX or TV RX + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + realtime_scheduling + + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + variable + + id + decim + + + _enabled + True + + + value + 200 + + + _coordinate + (14, 173) + + + _rotation + 0 + + + + variable_slider + + id + volume + + + _enabled + True + + + label + Volume + + + value + 1 + + + min + 0 + + + max + 10 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + 1, 0, 1, 4 + + + _coordinate + (991, 40) + + + _rotation + 0 + + + + usrp_simple_source_x + + id + usrp_simple_source_x + + + _enabled + True + + + type + complex + + + format + + + + which + 0 + + + decimation + decim + + + frequency + (freq+fine)*1e6 + + + gain + 20 + + + side + A + + + rx_ant + None + + + hb_filters + + + + _coordinate + (277, 29) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2 + + + _enabled + True + + + type + complex + + + title + FFT Plot + + + samp_rate + 64e6/decim + + + baseband_freq + (freq+fine)*1e6 + + + y_per_div + 10 + + + ref_level + 50 + + + fft_size + 512 + + + fft_rate + 15 + + + peak_hold + False + + + average + False + + + avg_alpha + 0 + + + grid_pos + 2, 0, 2, 4 + + + _coordinate + (512, 191) + + + _rotation + 0 + + + + variable_slider + + id + freq + + + _enabled + True + + + label + Frequency (MHz) + + + value + 100 + + + min + 87.5 + + + max + 108.0 + + + num_steps + 1000 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + 0, 0, 1, 2 + + + _coordinate + (104, 243) + + + _rotation + 0 + + + + variable_slider + + id + fine + + + _enabled + True + + + label + Fine Freq (MHz) + + + value + 0 + + + min + -.1 + + + max + .1 + + + num_steps + 100 + + + style + wx.SL_HORIZONTAL + + + converver + float_converter + + + grid_pos + 0, 2, 1, 2 + + + _coordinate + (275, 246) + + + _rotation + 0 + + + + blks2_wfm_rcv + + id + blks2_wfm_rcv + + + _enabled + True + + + quad_rate + 64e6/decim + + + audio_decimation + 10 + + + _coordinate + (510, 37) + + + _rotation + 0 + + + + gr_multiply_const_vxx + + id + gr_multiply_const_vxx + + + _enabled + True + + + type + float + + + const + volume + + + vlen + 1 + + + _coordinate + (764, 55) + + + _rotation + 0 + + + + audio_sink + + id + audio_sink + + + _enabled + True + + + samp_rate + 32000 + + + device_name + + + + ok_to_block + True + + + num_inputs + 1 + + + _coordinate + (703, 241) + + + _rotation + 180 + + + + usrp_simple_source_x + blks2_wfm_rcv + 0 + 0 + + + usrp_simple_source_x + wxgui_fftsink2 + 0 + 0 + + + blks2_wfm_rcv + gr_multiply_const_vxx + 0 + 0 + + + gr_multiply_const_vxx + audio_sink + 0 + 0 + + diff --git a/grc/examples/xmlrpc/readme.txt b/grc/examples/xmlrpc/readme.txt new file mode 100644 index 00000000..c1f87c1c --- /dev/null +++ b/grc/examples/xmlrpc/readme.txt @@ -0,0 +1,18 @@ +################################################## +# XMLRPC example +################################################## + +XMLRPC allows software to make remote function calls over http. +In the case of GRC, one can use XMLRPC to modify variables in a running flow graph. +See http://www.xmlrpc.com/ + +--- Server Example --- +Place an "XMLRPC Server" block inside of any flow graph. +The server will provide set functions for every variable in the flow graph. +If a variable is called "freq", the server will provide a function set_freq(new_freq). +Run the server example and experiment with the example client script. + +-- Client Example -- +The "XMLRPC Client" block will give a variable control over one remove function. +In the example client, there is one client block and gui control per variable. +This technique can be used to remotely control a flow graph, perhaps running on a non-gui machine. diff --git a/grc/examples/xmlrpc/xmlrpc_client.grc b/grc/examples/xmlrpc/xmlrpc_client.grc new file mode 100644 index 00000000..3bb4e7ed --- /dev/null +++ b/grc/examples/xmlrpc/xmlrpc_client.grc @@ -0,0 +1,312 @@ + + + Thu Jul 24 14:27:44 2008 + + options + + id + client_block + + + _enabled + True + + + title + XMLRPC Client + + + author + Example + + + description + example flow graph + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + xmlrpc_client + + id + xmlrpc_client0 + + + _enabled + True + + + addr + localhost + + + port + 1234 + + + callback + set_ampl + + + variable + ampl + + + _coordinate + (409, 35) + + + _rotation + 0 + + + + xmlrpc_client + + id + xmlrpc_client + + + _enabled + True + + + addr + localhost + + + port + 1234 + + + callback + set_freq + + + variable + freq + + + _coordinate + (222, 34) + + + _rotation + 0 + + + + variable_slider + + id + freq + + + _enabled + True + + + label + Frequency (Hz) + + + value + 1000 + + + min + 0 + + + max + 5000 + + + num_steps + 100 + + + slider_type + horizontal + + + grid_pos + 0, 0, 1, 2 + + + _coordinate + (207, 162) + + + _rotation + 0 + + + + variable_slider + + id + ampl + + + _enabled + True + + + label + Amplitude + + + value + 1 + + + min + 0 + + + max + 2 + + + num_steps + 100 + + + slider_type + horizontal + + + grid_pos + 1, 0, 1, 2 + + + _coordinate + (397, 167) + + + _rotation + 0 + + + + variable_chooser + + id + offset + + + _enabled + True + + + label + Offset + + + value_index + 1 + + + choices + [-1, 0, 1] + + + labels + ["neg", "zero", "pos"] + + + chooser_type + radio_buttons_horizontal + + + grid_pos + 2, 0, 1, 2 + + + _coordinate + (596, 177) + + + _rotation + 0 + + + + xmlrpc_client + + id + xmlrpc_client1 + + + _enabled + True + + + addr + localhost + + + port + 1234 + + + callback + set_offset + + + variable + offset*ampl + + + _coordinate + (608, 39) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 32000 + + + _coordinate + (13, 172) + + + _rotation + 0 + + + \ No newline at end of file diff --git a/grc/examples/xmlrpc/xmlrpc_client_script.py b/grc/examples/xmlrpc/xmlrpc_client_script.py new file mode 100644 index 00000000..956fa07f --- /dev/null +++ b/grc/examples/xmlrpc/xmlrpc_client_script.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import time +import random +import xmlrpclib + +#create server object +s = xmlrpclib.Server("http://localhost:1234") + +#randomly change parameters of the sinusoid +for i in range(10): + #generate random values + new_freq = random.uniform(0, 5000) + new_ampl = random.uniform(0, 2) + new_offset = random.uniform(-1, 1) + #set new values + time.sleep(1) + s.set_freq(new_freq) + time.sleep(1) + s.set_ampl(new_ampl) + time.sleep(1) + s.set_offset(new_offset) + diff --git a/grc/examples/xmlrpc/xmlrpc_server.grc b/grc/examples/xmlrpc/xmlrpc_server.grc new file mode 100644 index 00000000..dc539ef1 --- /dev/null +++ b/grc/examples/xmlrpc/xmlrpc_server.grc @@ -0,0 +1,384 @@ + + + Thu Jul 24 14:27:42 2008 + + options + + id + server_block + + + _enabled + True + + + title + XMLRPC Server + + + author + Example + + + description + example flow graph + + + window_size + 1280, 1024 + + + generate_options + wx_gui + + + category + Custom + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + gr_sig_source_x + + id + gr_sig_source_x + + + _enabled + True + + + type + float + + + samp_rate + samp_rate + + + waveform + gr.GR_COS_WAVE + + + freq + freq + + + amp + ampl + + + offset + offset + + + _coordinate + (162, 200) + + + _rotation + 0 + + + + variable + + id + offset + + + _enabled + True + + + value + 0 + + + _coordinate + (12, 390) + + + _rotation + 0 + + + + xmlrpc_server + + id + xmlrpc_server + + + _enabled + True + + + addr + localhost + + + port + 1234 + + + _coordinate + (395, 240) + + + _rotation + 0 + + + + gr_throttle + + id + gr_throttle + + + _enabled + True + + + type + float + + + samples_per_second + samp_rate + + + vlen + 1 + + + _coordinate + (386, 93) + + + _rotation + 0 + + + + wxgui_scopesink2 + + id + wxgui_scopesink2 + + + _enabled + True + + + type + float + + + title + Scope Plot + + + samp_rate + samp_rate + + + frame_decim + 15 + + + v_scale + 0 + + + t_scale + .001 + + + marker + set_format_line + + + num_inputs + 1 + + + grid_pos + 0, 0, 2, 4 + + + _coordinate + (623, 28) + + + _rotation + 0 + + + + wxgui_fftsink2 + + id + wxgui_fftsink2 + + + _enabled + True + + + type + float + + + title + FFT Plot + + + samp_rate + samp_rate + + + baseband_freq + 0 + + + y_per_div + 10 + + + y_divs + 8 + + + ref_level + 50 + + + fft_size + 512 + + + fft_rate + 15 + + + avg_alpha + 0 + + + average + False + + + peak_hold + False + + + grid_pos + 2, 0, 2, 4 + + + _coordinate + (630, 233) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + _enabled + True + + + value + 32000 + + + _coordinate + (11, 160) + + + _rotation + 0 + + + + variable + + id + freq + + + _enabled + True + + + value + 1000 + + + _coordinate + (11, 237) + + + _rotation + 0 + + + + variable + + id + ampl + + + _enabled + True + + + value + 1 + + + _coordinate + (13, 315) + + + _rotation + 0 + + + + gr_sig_source_x + gr_throttle + 0 + 0 + + + gr_throttle + wxgui_scopesink2 + 0 + 0 + + + gr_throttle + wxgui_fftsink2 + 0 + 0 + + \ No newline at end of file diff --git a/grc/freedesktop/Makefile.am b/grc/freedesktop/Makefile.am new file mode 100644 index 00000000..79388ba3 --- /dev/null +++ b/grc/freedesktop/Makefile.am @@ -0,0 +1,55 @@ +# +# Copyright 2008,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. +# + +include $(top_srcdir)/grc/Makefile.inc + +ourdatadir = $(pkgdatadir)/grc/freedesktop + +dist_ourdata_DATA = \ + grc-icon-256.png \ + grc-icon-128.png \ + grc-icon-64.png \ + grc-icon-48.png \ + grc-icon-32.png \ + gnuradio-grc.xml \ + gnuradio-grc.desktop \ + gnuradio-usrp2_probe.desktop \ + gnuradio-usrp_probe.desktop + +dist_bin_SCRIPTS = grc_setup_freedesktop + +grc_setup_freedesktop: $(srcdir)/grc_setup_freedesktop.in Makefile + sed -e 's|@SRCDIR[@]|$(ourdatadir)|g' $< > $@ + +EXTRA_DIST = $(srcdir)/grc_setup_freedesktop.in +BUILT_SOURCES = grc_setup_freedesktop + +install-data-hook: + @printf "\n*** GRC Post-Install Message ***\ + \nTo install icons, mime type, and menu items\ + \nfor a freedesktop.org system (Gnome/KDE/Xfce):\ + \n >>> sudo grc_setup_freedesktop install\n\n" + +uninstall-hook: + @printf "\n*** GRC Post-Uninstall Message ***\ + \nTo uninstall icons, mime type, and menu items\ + \nfor a freedesktop.org system (Gnome/KDE/Xfce):\ + \n >>> sudo grc_setup_freedesktop uninstall\n\n" diff --git a/grc/freedesktop/Makefile.in b/grc/freedesktop/Makefile.in new file mode 100644 index 00000000..59a76ac5 --- /dev/null +++ b/grc/freedesktop/Makefile.in @@ -0,0 +1,988 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008,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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(dist_bin_SCRIPTS) $(dist_ourdata_DATA) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/grc/Makefile.inc +subdir = grc/freedesktop +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourdatadir)" +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +ourdatadir = $(pkgdatadir)/grc/freedesktop +dist_ourdata_DATA = \ + grc-icon-256.png \ + grc-icon-128.png \ + grc-icon-64.png \ + grc-icon-48.png \ + grc-icon-32.png \ + gnuradio-grc.xml \ + gnuradio-grc.desktop \ + gnuradio-usrp2_probe.desktop \ + gnuradio-usrp_probe.desktop + +dist_bin_SCRIPTS = grc_setup_freedesktop +EXTRA_DIST = $(srcdir)/grc_setup_freedesktop.in +BUILT_SOURCES = grc_setup_freedesktop +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/freedesktop/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/freedesktop/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS uninstall-dist_ourdataDATA + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook + +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-data-hook \ + install-dist_binSCRIPTS install-dist_ourdataDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dist_binSCRIPTS \ + uninstall-dist_ourdataDATA uninstall-hook + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +grc_setup_freedesktop: $(srcdir)/grc_setup_freedesktop.in Makefile + sed -e 's|@SRCDIR[@]|$(ourdatadir)|g' $< > $@ + +install-data-hook: + @printf "\n*** GRC Post-Install Message ***\ + \nTo install icons, mime type, and menu items\ + \nfor a freedesktop.org system (Gnome/KDE/Xfce):\ + \n >>> sudo grc_setup_freedesktop install\n\n" + +uninstall-hook: + @printf "\n*** GRC Post-Uninstall Message ***\ + \nTo uninstall icons, mime type, and menu items\ + \nfor a freedesktop.org system (Gnome/KDE/Xfce):\ + \n >>> sudo grc_setup_freedesktop uninstall\n\n" +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/freedesktop/README b/grc/freedesktop/README new file mode 100644 index 00000000..0857ecc2 --- /dev/null +++ b/grc/freedesktop/README @@ -0,0 +1,20 @@ +################################################## +# Freedesktop Notes +################################################## + +This directory contains icons, a mime type, and menu files for grc. +Installation of these files requires a set of tools called xdg-utils. +xdg-utils will install files in a standard way according to the freedesktop.org standards. + +Desktop enviroments that implement these standards are gnome, kde, xfce, and others. +If you have one of these desktop enviroments, xdg-utils should come installed. +If xdg-utils is not installed, then this directory will be ignored by the build. + +The gtk IconTheme module locates the installed icons for use inside the grc app. +On recent versions of gtk, IconTheme ignores the icons installed into the default theme. +This presents a problem for the gnome file system browser, nautilus, and the grc app. +As a solution, icons are also installed under the gnome theme. + +*.png files - these are the icons of various sizes +*.desktop files - these are the menu items for grc executables +*.xml file - this is the mime type for the saved flow graphs diff --git a/grc/freedesktop/gnuradio-grc.desktop b/grc/freedesktop/gnuradio-grc.desktop new file mode 100644 index 00000000..d9c70ca9 --- /dev/null +++ b/grc/freedesktop/gnuradio-grc.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=GRC +Exec=grc %F +Categories=Development; +MimeType=application/gnuradio-grc; +Icon=gnuradio-grc diff --git a/grc/freedesktop/gnuradio-grc.xml b/grc/freedesktop/gnuradio-grc.xml new file mode 100644 index 00000000..a5cb95d9 --- /dev/null +++ b/grc/freedesktop/gnuradio-grc.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/grc/freedesktop/gnuradio-usrp2_probe.desktop b/grc/freedesktop/gnuradio-usrp2_probe.desktop new file mode 100644 index 00000000..c71a092b --- /dev/null +++ b/grc/freedesktop/gnuradio-usrp2_probe.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=USRP2 Probe +Exec=usrp2_probe +Categories=Development; +Icon=gnuradio-grc diff --git a/grc/freedesktop/gnuradio-usrp_probe.desktop b/grc/freedesktop/gnuradio-usrp_probe.desktop new file mode 100644 index 00000000..13632199 --- /dev/null +++ b/grc/freedesktop/gnuradio-usrp_probe.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=USRP Probe +Exec=usrp_probe +Categories=Development; +Icon=gnuradio-grc diff --git a/grc/freedesktop/grc-icon-128.png b/grc/freedesktop/grc-icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..d94ef35dc3fc7dc91c8c8e820082f113d02b5bf5 GIT binary patch literal 3570 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 literal 0 HcmV?d00001 diff --git a/grc/freedesktop/grc_setup_freedesktop b/grc/freedesktop/grc_setup_freedesktop new file mode 100644 index 00000000..b3539cf8 --- /dev/null +++ b/grc/freedesktop/grc_setup_freedesktop @@ -0,0 +1,58 @@ +#!/bin/bash +################################################## +# setup grc on a freedesktop platform +# $1 should be install or uninstall +# $2 is the optional path to the files +# when $2 is unspecified, the path is: +# /home/jcorgan/.local/share/gnuradio/grc/freedesktop +################################################## + +ICON_SIZES="32 48 64 128 256" +MENU_ITEMS="grc usrp2_probe usrp_probe" +if [ -n "$2" ]; then + SRCDIR="$2" +else + SRCDIR="/home/jcorgan/.local/share/gnuradio/grc/freedesktop" +fi + +case "$1" in +'install') + echo "Begin freedesktop install..." + for size in ${ICON_SIZES}; do \ + echo "Install icon: ${size}x${size}" + xdg-icon-resource install --context mimetypes --theme gnome --size ${size} ${SRCDIR}/grc-icon-${size}.png application-gnuradio-grc; \ + xdg-icon-resource install --context mimetypes --size ${size} ${SRCDIR}/grc-icon-${size}.png application-gnuradio-grc; \ + xdg-icon-resource install --context apps --theme gnome --size ${size} ${SRCDIR}/grc-icon-${size}.png gnuradio-grc; \ + xdg-icon-resource install --context apps --size ${size} ${SRCDIR}/grc-icon-${size}.png gnuradio-grc; \ + done + echo "Install mime type" + xdg-mime install ${SRCDIR}/gnuradio-grc.xml + echo "Install menu items" + for menu_item in ${MENU_ITEMS}; do \ + xdg-desktop-menu install ${SRCDIR}/gnuradio-${menu_item}.desktop; \ + done + echo "Done!" + echo "" + ;; +'uninstall') + echo "Begin freedesktop uninstall..." + for size in ${ICON_SIZES}; do \ + echo "Uninstall icon: ${size}x${size}" + xdg-icon-resource uninstall --context mimetypes --theme gnome --size ${size} application-gnuradio-grc; \ + xdg-icon-resource uninstall --context mimetypes --size ${size} application-gnuradio-grc; \ + xdg-icon-resource uninstall --context apps --theme gnome --size ${size} gnuradio-grc; \ + xdg-icon-resource uninstall --context apps --size ${size} gnuradio-grc; \ + done + echo "Uninstall mime type" + xdg-mime uninstall ${SRCDIR}/gnuradio-grc.xml + echo "Uninstall menu items" + for menu_item in ${MENU_ITEMS}; do \ + xdg-desktop-menu uninstall gnuradio-${menu_item}.desktop; \ + done + echo "Done!" + echo "" + ;; +*) + echo "Usage: $0 [install|uninstall]" + ;; +esac diff --git a/grc/freedesktop/grc_setup_freedesktop.in b/grc/freedesktop/grc_setup_freedesktop.in new file mode 100644 index 00000000..33fc4e1a --- /dev/null +++ b/grc/freedesktop/grc_setup_freedesktop.in @@ -0,0 +1,58 @@ +#!/bin/bash +################################################## +# setup grc on a freedesktop platform +# $1 should be install or uninstall +# $2 is the optional path to the files +# when $2 is unspecified, the path is: +# @SRCDIR@ +################################################## + +ICON_SIZES="32 48 64 128 256" +MENU_ITEMS="grc usrp2_probe usrp_probe" +if [ -n "$2" ]; then + SRCDIR="$2" +else + SRCDIR="@SRCDIR@" +fi + +case "$1" in +'install') + echo "Begin freedesktop install..." + for size in ${ICON_SIZES}; do \ + echo "Install icon: ${size}x${size}" + xdg-icon-resource install --context mimetypes --theme gnome --size ${size} ${SRCDIR}/grc-icon-${size}.png application-gnuradio-grc; \ + xdg-icon-resource install --context mimetypes --size ${size} ${SRCDIR}/grc-icon-${size}.png application-gnuradio-grc; \ + xdg-icon-resource install --context apps --theme gnome --size ${size} ${SRCDIR}/grc-icon-${size}.png gnuradio-grc; \ + xdg-icon-resource install --context apps --size ${size} ${SRCDIR}/grc-icon-${size}.png gnuradio-grc; \ + done + echo "Install mime type" + xdg-mime install ${SRCDIR}/gnuradio-grc.xml + echo "Install menu items" + for menu_item in ${MENU_ITEMS}; do \ + xdg-desktop-menu install ${SRCDIR}/gnuradio-${menu_item}.desktop; \ + done + echo "Done!" + echo "" + ;; +'uninstall') + echo "Begin freedesktop uninstall..." + for size in ${ICON_SIZES}; do \ + echo "Uninstall icon: ${size}x${size}" + xdg-icon-resource uninstall --context mimetypes --theme gnome --size ${size} application-gnuradio-grc; \ + xdg-icon-resource uninstall --context mimetypes --size ${size} application-gnuradio-grc; \ + xdg-icon-resource uninstall --context apps --theme gnome --size ${size} gnuradio-grc; \ + xdg-icon-resource uninstall --context apps --size ${size} gnuradio-grc; \ + done + echo "Uninstall mime type" + xdg-mime uninstall ${SRCDIR}/gnuradio-grc.xml + echo "Uninstall menu items" + for menu_item in ${MENU_ITEMS}; do \ + xdg-desktop-menu uninstall gnuradio-${menu_item}.desktop; \ + done + echo "Done!" + echo "" + ;; +*) + echo "Usage: $0 [install|uninstall]" + ;; +esac diff --git a/grc/grc.conf b/grc/grc.conf new file mode 100644 index 00000000..348e18e3 --- /dev/null +++ b/grc/grc.conf @@ -0,0 +1,9 @@ +# This file contains system wide configuration data for GNU Radio. +# You may override any setting on a per-user basis by editing +# ~/.gnuradio/config.conf + +[grc] +pythonw = python +doc_dir = /home/jcorgan/.local/share/doc/gnuradio-3.2.2 +global_blocks_path = /home/jcorgan/.local/share/gnuradio/grc/blocks +local_blocks_path = diff --git a/grc/grc.conf.in b/grc/grc.conf.in new file mode 100644 index 00000000..37a04997 --- /dev/null +++ b/grc/grc.conf.in @@ -0,0 +1,9 @@ +# This file contains system wide configuration data for GNU Radio. +# You may override any setting on a per-user basis by editing +# ~/.gnuradio/config.conf + +[grc] +pythonw = @pythonw@ +doc_dir = @docdir@ +global_blocks_path = @blocksdir@ +local_blocks_path = diff --git a/grc/grc_gnuradio/Makefile.am b/grc/grc_gnuradio/Makefile.am new file mode 100644 index 00000000..63bb7282 --- /dev/null +++ b/grc/grc_gnuradio/Makefile.am @@ -0,0 +1,50 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +grc_gnuradio_prefix = $(pythondir)/grc_gnuradio + +root_pythondir = $(grc_gnuradio_prefix) +root_python_PYTHON = __init__.py + +blks2_pythondir = $(grc_gnuradio_prefix)/blks2 +blks2_python_PYTHON = \ + blks2/__init__.py \ + blks2/error_rate.py \ + blks2/packet.py \ + blks2/probe.py \ + blks2/selector.py \ + blks2/tcp.py \ + blks2/variable_sink.py + +usrp_pythondir = $(grc_gnuradio_prefix)/usrp +usrp_python_PYTHON = \ + usrp/__init__.py \ + usrp/common.py \ + usrp/dual_usrp.py \ + usrp/simple_usrp.py + +wxgui_pythondir = $(grc_gnuradio_prefix)/wxgui +wxgui_python_PYTHON = \ + wxgui/__init__.py \ + wxgui/panel.py \ + wxgui/top_block_gui.py diff --git a/grc/grc_gnuradio/Makefile.in b/grc/grc_gnuradio/Makefile.in new file mode 100644 index 00000000..13ed100e --- /dev/null +++ b/grc/grc_gnuradio/Makefile.in @@ -0,0 +1,1035 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(blks2_python_PYTHON) $(root_python_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(usrp_python_PYTHON) \ + $(wxgui_python_PYTHON) +subdir = grc/grc_gnuradio +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(blks2_pythondir)" \ + "$(DESTDIR)$(root_pythondir)" "$(DESTDIR)$(usrp_pythondir)" \ + "$(DESTDIR)$(wxgui_pythondir)" +blks2_pythonPYTHON_INSTALL = $(INSTALL_DATA) +root_pythonPYTHON_INSTALL = $(INSTALL_DATA) +usrp_pythonPYTHON_INSTALL = $(INSTALL_DATA) +wxgui_pythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_gnuradio_prefix = $(pythondir)/grc_gnuradio +root_pythondir = $(grc_gnuradio_prefix) +root_python_PYTHON = __init__.py +blks2_pythondir = $(grc_gnuradio_prefix)/blks2 +blks2_python_PYTHON = \ + blks2/__init__.py \ + blks2/error_rate.py \ + blks2/packet.py \ + blks2/probe.py \ + blks2/selector.py \ + blks2/tcp.py \ + blks2/variable_sink.py + +usrp_pythondir = $(grc_gnuradio_prefix)/usrp +usrp_python_PYTHON = \ + usrp/__init__.py \ + usrp/common.py \ + usrp/dual_usrp.py \ + usrp/simple_usrp.py + +wxgui_pythondir = $(grc_gnuradio_prefix)/wxgui +wxgui_python_PYTHON = \ + wxgui/__init__.py \ + wxgui/panel.py \ + wxgui/top_block_gui.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/grc_gnuradio/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/grc_gnuradio/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-blks2_pythonPYTHON: $(blks2_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(blks2_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(blks2_pythondir)" + @list='$(blks2_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(blks2_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(blks2_pythondir)/$$f'"; \ + $(blks2_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(blks2_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(blks2_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(blks2_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-blks2_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(blks2_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(blks2_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(blks2_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(blks2_pythondir)/$${f}o"; \ + done +install-root_pythonPYTHON: $(root_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(root_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(root_pythondir)" + @list='$(root_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(root_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(root_pythondir)/$$f'"; \ + $(root_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(root_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(root_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(root_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-root_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(root_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(root_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(root_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(root_pythondir)/$${f}o"; \ + done +install-usrp_pythonPYTHON: $(usrp_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(usrp_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_pythondir)" + @list='$(usrp_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(usrp_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(usrp_pythondir)/$$f'"; \ + $(usrp_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(usrp_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(usrp_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(usrp_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-usrp_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(usrp_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(usrp_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(usrp_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(usrp_pythondir)/$${f}o"; \ + done +install-wxgui_pythonPYTHON: $(wxgui_python_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(wxgui_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(wxgui_pythondir)" + @list='$(wxgui_python_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(wxgui_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(wxgui_pythondir)/$$f'"; \ + $(wxgui_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(wxgui_pythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(wxgui_pythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(wxgui_pythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-wxgui_pythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(wxgui_python_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(wxgui_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(wxgui_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(wxgui_pythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(blks2_pythondir)" "$(DESTDIR)$(root_pythondir)" "$(DESTDIR)$(usrp_pythondir)" "$(DESTDIR)$(wxgui_pythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-blks2_pythonPYTHON install-root_pythonPYTHON \ + install-usrp_pythonPYTHON install-wxgui_pythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-blks2_pythonPYTHON uninstall-root_pythonPYTHON \ + uninstall-usrp_pythonPYTHON uninstall-wxgui_pythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-blks2_pythonPYTHON install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-root_pythonPYTHON \ + install-strip install-usrp_pythonPYTHON \ + install-wxgui_pythonPYTHON installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-blks2_pythonPYTHON \ + uninstall-root_pythonPYTHON uninstall-usrp_pythonPYTHON \ + uninstall-wxgui_pythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/grc_gnuradio/README b/grc/grc_gnuradio/README new file mode 100644 index 00000000..5a89da54 --- /dev/null +++ b/grc/grc_gnuradio/README @@ -0,0 +1,14 @@ +This is the grc_gnuradio module. +It contains supplemental python modules that grc uses at runtime. +The supplemental modules are meant to mimic modules in gnuradio. +These will be phased-out as new functionaility is merged into gnuradio. + +The blk2s module wraps many blocks in blks2 and gives them streaming outputs. +Will be phased-out by new message passing implementations. +Other blks2 blocks will hopefully make their way into blks2impl. + +The usrp module contains the simple and dual usrp wrappers. +Will be phased-out by generic usrp and/or new usrp api. + +The wxgui module contains a top_block + wxgui frame. +Will be phased-out by gui.py in wxgui and a new top block template. diff --git a/grc/grc_gnuradio/__init__.py b/grc/grc_gnuradio/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/grc/grc_gnuradio/__init__.py @@ -0,0 +1 @@ + diff --git a/grc/grc_gnuradio/blks2/__init__.py b/grc/grc_gnuradio/blks2/__init__.py new file mode 100644 index 00000000..cb1196f2 --- /dev/null +++ b/grc/grc_gnuradio/blks2/__init__.py @@ -0,0 +1,28 @@ +# Copyright 2008, 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. +# + +from selector import selector, valve +from packet import options, packet_encoder, packet_decoder, \ + packet_mod_b, packet_mod_s, packet_mod_i, packet_mod_f, packet_mod_c, \ + packet_demod_b, packet_demod_s, packet_demod_i, packet_demod_f, packet_demod_c +from error_rate import error_rate +from probe import probe_function, probe_avg_mag_sqrd_c, probe_avg_mag_sqrd_f, probe_density_b, probe_mpsk_snr_c +from variable_sink import variable_sink_b, variable_sink_s, variable_sink_i, variable_sink_f, variable_sink_c +from tcp import tcp_source, tcp_sink diff --git a/grc/grc_gnuradio/blks2/error_rate.py b/grc/grc_gnuradio/blks2/error_rate.py new file mode 100644 index 00000000..9b2df58e --- /dev/null +++ b/grc/grc_gnuradio/blks2/error_rate.py @@ -0,0 +1,137 @@ +# Copyright 2008 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. +# + +default_win_size = 1000 + +from gnuradio import gr +import gnuradio.gr.gr_threading as _threading +import numpy + +#generate 1s counts array +_1s_counts = [sum([1&(i>>j) for j in range(8)]) for i in range(2**8)] + +class input_watcher(_threading.Thread): + """ + Read samples from the message queue and hand them to the callback. + """ + + def __init__(self, msgq, callback): + self._msgq = msgq + self._callback = callback + _threading.Thread.__init__(self) + self.setDaemon(1) + self.keep_running = True + self.start() + + def run(self): + r = '' + while True: + msg = self._msgq.delete_head() + itemsize = int(msg.arg1()) + nitems = int(msg.arg2()) + s = r + msg.to_string() + i = (nitems-nitems%2)*itemsize + r = s[i:] + s = s[:i] + samples = numpy.fromstring(s, numpy.int8) + self._callback(samples) + +class error_rate(gr.hier_block2): + """ + Sample the incoming data streams (byte) and calculate the bit or symbol error rate. + Write the running rate to the output data stream (float). + """ + + def __init__(self, type='BER', win_size=default_win_size, bits_per_symbol=2): + """ + Error rate constructor. + @param type a string 'BER' or 'SER' + @param win_size the number of samples to calculate over + @param bits_per_symbol the number of information bits per symbol (BER only) + """ + #init + gr.hier_block2.__init__( + self, 'error_rate', + gr.io_signature(2, 2, gr.sizeof_char), + gr.io_signature(1, 1, gr.sizeof_float), + ) + assert type in ('BER', 'SER') + self._max_samples = win_size + self._bits_per_symbol = bits_per_symbol + #setup message queue + msg_source = gr.message_source(gr.sizeof_float, 1) + self._msgq_source = msg_source.msgq() + msgq_sink = gr.msg_queue(2) + msg_sink = gr.message_sink(gr.sizeof_char, msgq_sink, False) #False -> blocking + inter = gr.interleave(gr.sizeof_char) + #start thread + self._num_errs = 0 + self._err_index = 0 + self._num_samps = 0 + self._err_array = numpy.zeros(self._max_samples, numpy.int8) + if type == 'BER': + input_watcher(msgq_sink, self._handler_ber) + elif type == 'SER': + input_watcher(msgq_sink, self._handler_ser) + #connect + self.connect(msg_source, self) + self.connect((self, 0), (inter, 0)) + self.connect((self, 1), (inter, 1)) + self.connect(inter, msg_sink) + + def _handler_ber(self, samples): + num = len(samples)/2 + arr = numpy.zeros(num, numpy.float32) + for i in range(num): + old_err = self._err_array[self._err_index] + #record error + self._err_array[self._err_index] = _1s_counts[samples[i*2] ^ samples[i*2 + 1]] + self._num_errs = self._num_errs + self._err_array[self._err_index] - old_err + #increment index + self._err_index = (self._err_index + 1)%self._max_samples + self._num_samps = min(self._num_samps + 1, self._max_samples) + #write sample + arr[i] = float(self._num_errs)/float(self._num_samps*self._bits_per_symbol) + #write message + msg = gr.message_from_string(arr.tostring(), 0, gr.sizeof_float, num) + self._msgq_source.insert_tail(msg) + + def _handler_ser(self, samples): + num = len(samples)/2 + arr = numpy.zeros(num, numpy.float32) + for i in range(num): + old_err = self._err_array[self._err_index] + #record error + ref = samples[i*2] + res = samples[i*2 + 1] + if ref == res: + self._err_array[self._err_index] = 0 + else: + self._err_array[self._err_index] = 1 + #update number of errors + self._num_errs = self._num_errs + self._err_array[self._err_index] - old_err + #increment index + self._err_index = (self._err_index + 1)%self._max_samples + self._num_samps = min(self._num_samps + 1, self._max_samples) + #write sample + arr[i] = float(self._num_errs)/float(self._num_samps) + #write message + msg = gr.message_from_string(arr.tostring(), 0, gr.sizeof_float, num) + self._msgq_source.insert_tail(msg) diff --git a/grc/grc_gnuradio/blks2/packet.py b/grc/grc_gnuradio/blks2/packet.py new file mode 100644 index 00000000..50de99ac --- /dev/null +++ b/grc/grc_gnuradio/blks2/packet.py @@ -0,0 +1,241 @@ +# Copyright 2008, 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. +# + +from gnuradio import gr, packet_utils +import gnuradio.gr.gr_threading as _threading + +##payload length in bytes +DEFAULT_PAYLOAD_LEN = 512 + +##how many messages in a queue +DEFAULT_MSGQ_LIMIT = 2 + +##threshold for unmaking packets +DEFAULT_THRESHOLD = 12 + +################################################## +## Options Class for OFDM +################################################## +class options(object): + def __init__(self, **kwargs): + for key, value in kwargs.iteritems(): setattr(self, key, value) + +################################################## +## Packet Encoder +################################################## +class _packet_encoder_thread(_threading.Thread): + + def __init__(self, msgq, payload_length, send): + self._msgq = msgq + self._payload_length = payload_length + self._send = send + _threading.Thread.__init__(self) + self.setDaemon(1) + self.keep_running = True + self.start() + + def run(self): + sample = '' #residual sample + while self.keep_running: + msg = self._msgq.delete_head() #blocking read of message queue + sample = sample + msg.to_string() #get the body of the msg as a string + while len(sample) >= self._payload_length: + payload = sample[:self._payload_length] + sample = sample[self._payload_length:] + self._send(payload) + +class packet_encoder(gr.hier_block2): + """ + Hierarchical block for wrapping packet-based modulators. + """ + + def __init__(self, samples_per_symbol, bits_per_symbol, access_code='', pad_for_usrp=True): + """ + packet_mod constructor. + @param samples_per_symbol number of samples per symbol + @param bits_per_symbol number of bits per symbol + @param access_code AKA sync vector + @param pad_for_usrp If true, packets are padded such that they end up a multiple of 128 samples + @param payload_length number of bytes in a data-stream slice + """ + #setup parameters + self._samples_per_symbol = samples_per_symbol + self._bits_per_symbol = bits_per_symbol + self._pad_for_usrp = pad_for_usrp + if not access_code: #get access code + access_code = packet_utils.default_access_code + if not packet_utils.is_1_0_string(access_code): + raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,) + self._access_code = access_code + self._pad_for_usrp = pad_for_usrp + #create blocks + msg_source = gr.message_source(gr.sizeof_char, DEFAULT_MSGQ_LIMIT) + self._msgq_out = msg_source.msgq() + #initialize hier2 + gr.hier_block2.__init__( + self, + "packet_encoder", + gr.io_signature(0, 0, 0), # Input signature + gr.io_signature(1, 1, gr.sizeof_char) # Output signature + ) + #connect + self.connect(msg_source, self) + + def send_pkt(self, payload): + """ + Wrap the payload in a packet and push onto the message queue. + @param payload string, data to send + """ + packet = packet_utils.make_packet( + payload, + self._samples_per_symbol, + self._bits_per_symbol, + self._access_code, + self._pad_for_usrp + ) + msg = gr.message_from_string(packet) + self._msgq_out.insert_tail(msg) + +################################################## +## Packet Decoder +################################################## +class _packet_decoder_thread(_threading.Thread): + + def __init__(self, msgq, callback): + _threading.Thread.__init__(self) + self.setDaemon(1) + self._msgq = msgq + self.callback = callback + self.keep_running = True + self.start() + + def run(self): + while self.keep_running: + msg = self._msgq.delete_head() + ok, payload = packet_utils.unmake_packet(msg.to_string(), int(msg.arg1())) + if self.callback: + self.callback(ok, payload) + +class packet_decoder(gr.hier_block2): + """ + Hierarchical block for wrapping packet-based demodulators. + """ + + def __init__(self, access_code='', threshold=-1, callback=None): + """ + packet_demod constructor. + @param access_code AKA sync vector + @param threshold detect access_code with up to threshold bits wrong (0 -> use default) + @param callback a function of args: ok, payload + """ + #access code + if not access_code: #get access code + access_code = packet_utils.default_access_code + if not packet_utils.is_1_0_string(access_code): + raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,) + self._access_code = access_code + #threshold + if threshold < 0: threshold = DEFAULT_THRESHOLD + self._threshold = threshold + #blocks + msgq = gr.msg_queue(DEFAULT_MSGQ_LIMIT) #holds packets from the PHY + correlator = gr.correlate_access_code_bb(self._access_code, self._threshold) + framer_sink = gr.framer_sink_1(msgq) + #initialize hier2 + gr.hier_block2.__init__( + self, + "packet_decoder", + gr.io_signature(1, 1, gr.sizeof_char), # Input signature + gr.io_signature(0, 0, 0) # Output signature + ) + #connect + self.connect(self, correlator, framer_sink) + #start thread + _packet_decoder_thread(msgq, callback) + +################################################## +## Packet Mod for OFDM Mod and Packet Encoder +################################################## +class packet_mod_base(gr.hier_block2): + """ + Hierarchical block for wrapping packet source block. + """ + + def __init__(self, packet_source=None, payload_length=0): + if not payload_length: #get payload length + payload_length = DEFAULT_PAYLOAD_LEN + if payload_length%self._item_size_in != 0: #verify that packet length is a multiple of the stream size + raise ValueError, 'The payload length: "%d" is not a mutiple of the stream size: "%d".'%(payload_length, self._item_size_in) + #initialize hier2 + gr.hier_block2.__init__( + self, + "ofdm_mod", + gr.io_signature(1, 1, self._item_size_in), # Input signature + gr.io_signature(1, 1, packet_source._hb.output_signature().sizeof_stream_item(0)) # Output signature + ) + #create blocks + msgq = gr.msg_queue(DEFAULT_MSGQ_LIMIT) + msg_sink = gr.message_sink(self._item_size_in, msgq, False) #False -> blocking + #connect + self.connect(self, msg_sink) + self.connect(packet_source, self) + #start thread + _packet_encoder_thread(msgq, payload_length, packet_source.send_pkt) + +class packet_mod_b(packet_mod_base): _item_size_in = gr.sizeof_char +class packet_mod_s(packet_mod_base): _item_size_in = gr.sizeof_short +class packet_mod_i(packet_mod_base): _item_size_in = gr.sizeof_int +class packet_mod_f(packet_mod_base): _item_size_in = gr.sizeof_float +class packet_mod_c(packet_mod_base): _item_size_in = gr.sizeof_gr_complex + +################################################## +## Packet Demod for OFDM Demod and Packet Decoder +################################################## +class packet_demod_base(gr.hier_block2): + """ + Hierarchical block for wrapping packet sink block. + """ + + def __init__(self, packet_sink=None): + #initialize hier2 + gr.hier_block2.__init__( + self, + "ofdm_mod", + gr.io_signature(1, 1, packet_sink._hb.input_signature().sizeof_stream_item(0)), # Input signature + gr.io_signature(1, 1, self._item_size_out) # Output signature + ) + #create blocks + msg_source = gr.message_source(self._item_size_out, DEFAULT_MSGQ_LIMIT) + self._msgq_out = msg_source.msgq() + #connect + self.connect(self, packet_sink) + self.connect(msg_source, self) + if packet_sink._hb.output_signature().sizeof_stream_item(0): + self.connect(packet_sink, gr.null_sink(packet_sink._hb.output_signature().sizeof_stream_item(0))) + + def recv_pkt(self, ok, payload): + msg = gr.message_from_string(payload, 0, self._item_size_out, len(payload)/self._item_size_out) + if ok: self._msgq_out.insert_tail(msg) + +class packet_demod_b(packet_demod_base): _item_size_out = gr.sizeof_char +class packet_demod_s(packet_demod_base): _item_size_out = gr.sizeof_short +class packet_demod_i(packet_demod_base): _item_size_out = gr.sizeof_int +class packet_demod_f(packet_demod_base): _item_size_out = gr.sizeof_float +class packet_demod_c(packet_demod_base): _item_size_out = gr.sizeof_gr_complex diff --git a/grc/grc_gnuradio/blks2/probe.py b/grc/grc_gnuradio/blks2/probe.py new file mode 100644 index 00000000..8db81f05 --- /dev/null +++ b/grc/grc_gnuradio/blks2/probe.py @@ -0,0 +1,123 @@ +# +# Copyright 2008 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 import gr +import threading +import numpy +import time + +####################################################################################### +## Probe: Function +####################################################################################### +class probe_function(gr.hier_block2, threading.Thread): + """ + The thread polls the function for values and writes to a message source. + """ + + def __init__(self, probe_callback, probe_rate): + #init hier block + gr.hier_block2.__init__( + self, 'probe_function', + gr.io_signature(0, 0, 0), + gr.io_signature(1, 1, gr.sizeof_float), + ) + self._probe_callback = probe_callback + self.set_probe_rate(probe_rate) + #create message source + message_source = gr.message_source(gr.sizeof_float, 1) + self._msgq = message_source.msgq() + #connect + self.connect(message_source, self) + #setup thread + threading.Thread.__init__(self) + self.setDaemon(True) + self.start() + + def run(self): + """ + Infinite polling loop. + """ + while True: + time.sleep(1.0/self._probe_rate) + arr = numpy.array(self._probe_callback(), numpy.float32) + msg = gr.message_from_string(arr.tostring(), 0, gr.sizeof_float, 1) + self._msgq.insert_tail(msg) + + def set_probe_rate(self, probe_rate): + self._probe_rate = probe_rate + +class _probe_base(gr.hier_block2): + def __init__(self, probe_block, probe_callback, probe_rate): + #init hier block + gr.hier_block2.__init__( + self, 'probe', + gr.io_signature(1, 1, probe_block.input_signature().sizeof_stream_items()[0]), + gr.io_signature(1, 1, gr.sizeof_float), + ) + probe_function_block = probe_function(probe_callback, probe_rate) + #forward callbacks + self.set_probe_rate = probe_function_block.set_probe_rate + #connect + self.connect(self, probe_block) + self.connect(probe_function_block, self) + +####################################################################################### +## Probe: Average Magnitude Squared +####################################################################################### +class _probe_avg_mag_sqrd_base(_probe_base): + def __init__(self, threshold, alpha, probe_rate): + #create block + probe_block = self._probe_block_contructor[0](threshold, alpha) + #forward callbacks + self.set_alpha = probe_block.set_alpha + self.set_threshold = probe_block.set_threshold + #init + _probe_base.__init__(self, probe_block, probe_block.level, probe_rate) + +class probe_avg_mag_sqrd_c(_probe_avg_mag_sqrd_base): _probe_block_contructor = (gr.probe_avg_mag_sqrd_c,) +class probe_avg_mag_sqrd_f(_probe_avg_mag_sqrd_base): _probe_block_contructor = (gr.probe_avg_mag_sqrd_f,) + +####################################################################################### +## Probe: Density +####################################################################################### +class probe_density_b(_probe_base): + def __init__(self, alpha, probe_rate): + #create block + probe_block = gr.probe_density_b(alpha) + #forward callbacks + self.set_alpha = probe_block.set_alpha + #init + _probe_base.__init__(self, probe_block, probe_block.density, probe_rate) + +####################################################################################### +## Probe: MPSK SNR +####################################################################################### +class probe_mpsk_snr_c(_probe_base): + def __init__(self, type, alpha, probe_rate): + """ + Type can be "snr", "signal_mean", or "noise_variance" + """ + #create block + probe_block = gr.probe_mpsk_snr_c(alpha) + #forward callbacks + self.set_alpha = probe_block.set_alpha + #init + _probe_base.__init__(self, probe_block, getattr(probe_block, type), probe_rate) diff --git a/grc/grc_gnuradio/blks2/selector.py b/grc/grc_gnuradio/blks2/selector.py new file mode 100644 index 00000000..f0f6d5dd --- /dev/null +++ b/grc/grc_gnuradio/blks2/selector.py @@ -0,0 +1,128 @@ +# +# Copyright 2008 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 import gr + +class selector(gr.hier_block2): + """A hier2 block with N inputs and M outputs, where data is only forwarded through input n to output m.""" + def __init__(self, item_size, num_inputs, num_outputs, input_index, output_index): + """ + Selector constructor. + @param item_size the size of the gr data stream in bytes + @param num_inputs the number of inputs (integer) + @param num_outputs the number of outputs (integer) + @param input_index the index for the source data + @param output_index the index for the destination data + """ + gr.hier_block2.__init__( + self, 'selector', + gr.io_signature(num_inputs, num_inputs, item_size), + gr.io_signature(num_outputs, num_outputs, item_size), + ) + #terminator blocks for unused inputs and outputs + self.input_terminators = [gr.null_sink(item_size) for i in range(num_inputs)] + self.output_terminators = [gr.head(item_size, 0) for i in range(num_outputs)] + self.copy = gr.kludge_copy(item_size) + #connections + for i in range(num_inputs): self.connect((self, i), self.input_terminators[i]) + for i in range(num_outputs): self.connect(gr.null_source(item_size), self.output_terminators[i], (self, i)) + self.item_size = item_size + self.input_index = input_index + self.output_index = output_index + self.num_inputs = num_inputs + self.num_outputs = num_outputs + self._connect_current() + + def _indexes_valid(self): + """ + Are the input and output indexes within range of the number of inputs and outputs? + @return true if input index and output index are in range + """ + return self.input_index in range(self.num_inputs) and self.output_index in range(self.num_outputs) + + def _connect_current(self): + """If the input and output indexes are valid: + disconnect the blocks at the input and output index from their terminators, + and connect them to one another. Then connect the terminators to one another.""" + if self._indexes_valid(): + self.disconnect((self, self.input_index), self.input_terminators[self.input_index]) + self.disconnect(self.output_terminators[self.output_index], (self, self.output_index)) + self.connect((self, self.input_index), self.copy) + self.connect(self.copy, (self, self.output_index)) + self.connect(self.output_terminators[self.output_index], self.input_terminators[self.input_index]) + + def _disconnect_current(self): + """If the input and output indexes are valid: + disconnect the blocks at the input and output index from one another, + and the terminators at the input and output index from one another. + Reconnect the blocks to the terminators.""" + if self._indexes_valid(): + self.disconnect((self, self.input_index), self.copy) + self.disconnect(self.copy, (self, self.output_index)) + self.disconnect(self.output_terminators[self.output_index], self.input_terminators[self.input_index]) + self.connect((self, self.input_index), self.input_terminators[self.input_index]) + self.connect(self.output_terminators[self.output_index], (self, self.output_index)) + + def set_input_index(self, input_index): + """ + Change the block to the new input index if the index changed. + @param input_index the new input index + """ + if self.input_index != input_index: + self.lock() + self._disconnect_current() + self.input_index = input_index + self._connect_current() + self.unlock() + + def set_output_index(self, output_index): + """ + Change the block to the new output index if the index changed. + @param output_index the new output index + """ + if self.output_index != output_index: + self.lock() + self._disconnect_current() + self.output_index = output_index + self._connect_current() + self.unlock() + +class valve(selector): + """Wrapper for selector with 1 input and 1 output.""" + + def __init__(self, item_size, open): + """ + Constructor for valve. + @param item_size the size of the gr data stream in bytes + @param open true if initial valve state is open + """ + if open: output_index = -1 + else: output_index = 0 + selector.__init__(self, item_size, 1, 1, 0, output_index) + + def set_open(self, open): + """ + Callback to set open state. + @param open true to set valve state to open + """ + if open: output_index = -1 + else: output_index = 0 + self.set_output_index(output_index) diff --git a/grc/grc_gnuradio/blks2/tcp.py b/grc/grc_gnuradio/blks2/tcp.py new file mode 100644 index 00000000..c6739b71 --- /dev/null +++ b/grc/grc_gnuradio/blks2/tcp.py @@ -0,0 +1,66 @@ +# +# 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. +# + +from gnuradio import gr +import socket +import os + +def _get_sock_fd(addr, port, server): + """ + Get the file descriptor for the socket. + As a client, block on connect, dup the socket descriptor. + As a server, block on accept, dup the client descriptor. + @param addr the ip address string + @param port the tcp port number + @param server true for server mode, false for client mode + @return the file descriptor number + """ + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + if server: + sock.bind((addr, port)) + sock.listen(1) + clientsock, address = sock.accept() + return os.dup(clientsock.fileno()) + else: + sock.connect((addr, port)) + return os.dup(sock.fileno()) + +class tcp_source(gr.hier_block2): + def __init__(self, itemsize, addr, port, server=True): + #init hier block + gr.hier_block2.__init__( + self, 'tcp_source', + gr.io_signature(0, 0, 0), + gr.io_signature(1, 1, itemsize), + ) + fd = _get_sock_fd(addr, port, server) + self.connect(gr.file_descriptor_source(itemsize, fd), self) + +class tcp_sink(gr.hier_block2): + def __init__(self, itemsize, addr, port, server=False): + #init hier block + gr.hier_block2.__init__( + self, 'tcp_sink', + gr.io_signature(1, 1, itemsize), + gr.io_signature(0, 0, 0), + ) + fd = _get_sock_fd(addr, port, server) + self.connect(self, gr.file_descriptor_sink(itemsize, fd)) diff --git a/grc/grc_gnuradio/blks2/variable_sink.py b/grc/grc_gnuradio/blks2/variable_sink.py new file mode 100644 index 00000000..cad3b8b0 --- /dev/null +++ b/grc/grc_gnuradio/blks2/variable_sink.py @@ -0,0 +1,64 @@ +# +# 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. +# + +from gnuradio import gr +import threading +import numpy + +class _variable_sink_base(gr.hier_block2, threading.Thread): + """ + The thread polls the message queue for values and writes to a callback. + """ + + def __init__(self, vlen, decim, callback): + self._vlen = vlen + self._callback = callback + self._item_size = self._size*self._vlen + #init hier block + gr.hier_block2.__init__( + self, 'variable_sink', + gr.io_signature(1, 1, self._item_size), + gr.io_signature(0, 0, 0), + ) + #create blocks + self._decimator = gr.keep_one_in_n(self._item_size, decim) + self._msgq = gr.msg_queue(2) + message_sink = gr.message_sink(self._item_size, self._msgq, False) + #connect + self.connect(self, self._decimator, message_sink) + #setup thread + threading.Thread.__init__(self) + self.setDaemon(True) + self.start() + + def set_decim(self, decim): self._decimator.set_n(decim) + + def run(self): + while True: #truncate to item size, convert to array, callback + msg = self._msgq.delete_head().to_string()[-self._item_size:] + arr = map(self._cast, numpy.fromstring(msg, self._numpy)) + self._callback(self._vlen > 1 and arr or arr[0]) + +class variable_sink_b(_variable_sink_base): _numpy, _size, _cast = numpy.int8, gr.sizeof_char, int +class variable_sink_s(_variable_sink_base): _numpy, _size, _cast = numpy.int16, gr.sizeof_short, int +class variable_sink_i(_variable_sink_base): _numpy, _size, _cast = numpy.int32, gr.sizeof_int, int +class variable_sink_f(_variable_sink_base): _numpy, _size, _cast = numpy.float32, gr.sizeof_float, float +class variable_sink_c(_variable_sink_base): _numpy, _size, _cast = numpy.complex64, gr.sizeof_gr_complex, complex diff --git a/grc/grc_gnuradio/usrp/__init__.py b/grc/grc_gnuradio/usrp/__init__.py new file mode 100644 index 00000000..1956bbd5 --- /dev/null +++ b/grc/grc_gnuradio/usrp/__init__.py @@ -0,0 +1,26 @@ +# Copyright 2008 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 simple_usrp import \ + simple_source_c, simple_source_s, \ + simple_sink_c, simple_sink_s +from dual_usrp import \ + dual_source_c, dual_source_s, \ + dual_sink_c, dual_sink_s diff --git a/grc/grc_gnuradio/usrp/common.py b/grc/grc_gnuradio/usrp/common.py new file mode 100644 index 00000000..65c1e7e2 --- /dev/null +++ b/grc/grc_gnuradio/usrp/common.py @@ -0,0 +1,75 @@ +# 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. +# + +import sys +from gnuradio import usrp, gr + +################################################## +# USRP base class with common methods +################################################## +class usrp_helper(object): + def _make_usrp(self, *args, **kwargs): self._u = self._usrp_args[0](*args, **kwargs) + def _get_u(self): return self._u + def _get_io_size(self): return self._usrp_args[1] + def _set_frequency(self, chan, subdev, frequency, verbose=False): + """ + Set the carrier frequency for the given subdevice. + @param chan specifies the DDC/DUC number + @param frequency the carrier frequency in Hz + @param verbose if true, print usrp tuning information + """ + r = self._get_u().tune(chan, subdev, frequency) + if not verbose: return + print subdev.side_and_name() + if r: + print "\tr.baseband_frequency =", r.baseband_freq + print "\tr.dxc_frequency =", r.dxc_freq + print "\tr.residual_frequency =", r.residual_freq + print "\tr.inverted =", r.inverted, "\n" + else: print >> sys.stderr, 'Error calling tune on subdevice.' + def set_format(self, width, shift): self._get_u().set_format(self._get_u().make_format(width, shift)) + +################################################## +# Classes to associate usrp constructor w/ io size +################################################## +class usrp_source_c(usrp_helper): _usrp_args = (usrp.source_c, gr.sizeof_gr_complex) +class usrp_source_s(usrp_helper): _usrp_args = (usrp.source_s, gr.sizeof_short) +class usrp_sink_c(usrp_helper): _usrp_args = (usrp.sink_c, gr.sizeof_gr_complex) +class usrp_sink_s(usrp_helper): _usrp_args = (usrp.sink_s, gr.sizeof_short) + +################################################## +# Side spec and antenna spec functions +################################################## +def is_flex(rx_ant): return rx_ant.upper() in ('TX/RX', 'RX2') +def to_spec(side, rx_ant='RXA'): + """ + Convert the side to a spec number. + @param side A or B + @param rx_ant antenna type + @return the spec (0/1, 0/1/2) + """ + #determine the side spec + try: side_spec = {'A': 0, 'B': 1}[side.upper()] + except: raise ValueError, 'Side A or B expected.' + #determine the subdevice spec + if rx_ant.upper() == 'RXB': subdev_spec = 1 + elif rx_ant.upper() == 'RXAB': subdev_spec = 2 + else: subdev_spec = 0 + return (side_spec, subdev_spec) diff --git a/grc/grc_gnuradio/usrp/dual_usrp.py b/grc/grc_gnuradio/usrp/dual_usrp.py new file mode 100644 index 00000000..1ecf7c47 --- /dev/null +++ b/grc/grc_gnuradio/usrp/dual_usrp.py @@ -0,0 +1,132 @@ +# 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. +# + +import common +from gnuradio import gr, usrp + +#################################################################### +# Dual USRP Source +#################################################################### +class _dual_source(gr.hier_block2): + """A dual usrp source of IO type short or complex.""" + + def __init__(self, which, rx_ant_a='RXA', rx_ant_b='RXA'): + """ + USRP dual source contructor. + @param which the unit number + @param rx_ant_a the antenna choice + @param rx_ant_b the antenna choice + """ + #initialize hier2 block + gr.hier_block2.__init__( + self, 'usrp_dual_source', + gr.io_signature(0, 0, 0), + gr.io_signature(2, 2, self._get_io_size()), + ) + #create usrp object + self._make_usrp(which=which, nchan=2) + subdev_spec_a = common.to_spec('A', rx_ant_a) + subdev_spec_b = common.to_spec('B', rx_ant_b) + self._get_u().set_mux(self._get_u().determine_rx_mux_value(subdev_spec_a, subdev_spec_b)) + self._subdev_a = self._get_u().selected_subdev(subdev_spec_a) + self._subdev_b = self._get_u().selected_subdev(subdev_spec_b) + #connect + deinter = gr.deinterleave(self._get_io_size()) + self.connect(self._get_u(), deinter) + for i in range(2): self.connect((deinter, i), (self, i)) + + def set_decim_rate(self, decim): self._get_u().set_decim_rate(int(decim)) + def set_frequency_a(self, frequency, verbose=False): + self._set_frequency( + chan=0, #ddc0 + subdev=self._subdev_a, + frequency=frequency, + verbose=verbose, + ) + def set_frequency_b(self, frequency, verbose=False): + self._set_frequency( + chan=1, #ddc1 + subdev=self._subdev_b, + frequency=frequency, + verbose=verbose, + ) + def set_lo_offset_a(self, lo_offset): self._subdev_a.set_lo_offset(lo_offset) + def set_lo_offset_b(self, lo_offset): self._subdev_b.set_lo_offset(lo_offset) + def set_gain_a(self, gain): self._subdev_a.set_gain(gain) + def set_gain_b(self, gain): self._subdev_b.set_gain(gain) + +class dual_source_c(_dual_source, common.usrp_source_c): pass +class dual_source_s(_dual_source, common.usrp_source_s): pass + +#################################################################### +# Dual USRP Sink +#################################################################### +class _dual_sink(gr.hier_block2): + """A dual usrp sink of IO type short or complex.""" + + def __init__(self, which): + """ + USRP simple sink contructor. + @param which the unit number + """ + #initialize hier2 block + gr.hier_block2.__init__( + self, 'usrp_dual_sink', + gr.io_signature(2, 2, self._get_io_size()), + gr.io_signature(0, 0, 0), + ) + #create usrp object + self._make_usrp(which=which, nchan=2) + subdev_spec_a = common.to_spec('A') + subdev_spec_b = common.to_spec('B') + self._get_u().set_mux(self._get_u().determine_tx_mux_value(subdev_spec_a, subdev_spec_b)) + self._subdev_a = self._get_u().selected_subdev(subdev_spec_a) + self._subdev_b = self._get_u().selected_subdev(subdev_spec_b) + #connect + inter = gr.interleave(self._get_io_size()) + self.connect(inter, self._get_u()) + for i in range(2): self.connect((self, i), (inter, i)) + + def set_interp_rate(self, interp): self._get_u().set_interp_rate(int(interp)) + def set_frequency_a(self, frequency, verbose=False): + self._set_frequency( + chan=self._subdev_a.which(), + subdev=self._subdev_a, + frequency=frequency, + verbose=verbose, + ) + def set_frequency_b(self, frequency, verbose=False): + self._set_frequency( + chan=self._subdev_b.which(), + subdev=self._subdev_b, + frequency=frequency, + verbose=verbose, + ) + def set_lo_offset_a(self, lo_offset): self._subdev_a.set_lo_offset(lo_offset) + def set_lo_offset_b(self, lo_offset): self._subdev_b.set_lo_offset(lo_offset) + def set_gain_a(self, gain): self._subdev_a.set_gain(gain) + def set_gain_b(self, gain): self._subdev_b.set_gain(gain) + def set_enable_a(self, enable): self._subdev_a.set_enable(enable) + def set_enable_b(self, enable): self._subdev_b.set_enable(enable) + def set_auto_tr_a(self, auto_tr): self._subdev_a.set_auto_tr(auto_tr) + def set_auto_tr_b(self, auto_tr): self._subdev_b.set_auto_tr(auto_tr) + +class dual_sink_c(_dual_sink, common.usrp_sink_c): pass +class dual_sink_s(_dual_sink, common.usrp_sink_s): pass diff --git a/grc/grc_gnuradio/usrp/simple_usrp.py b/grc/grc_gnuradio/usrp/simple_usrp.py new file mode 100644 index 00000000..9065c7fe --- /dev/null +++ b/grc/grc_gnuradio/usrp/simple_usrp.py @@ -0,0 +1,113 @@ +# 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. +# + +import common +from gnuradio import gr, usrp + +#################################################################### +# Simple USRP Source +#################################################################### +class _simple_source(gr.hier_block2): + """A single usrp source of IO type short or complex.""" + + def __init__(self, which, side='A', rx_ant='RXA', no_hb=False): + """ + USRP simple source contructor. + @param which the unit number + @param side the usrp side A or B + @param rx_ant the antenna choice + @param no_hb disable half band filters + """ + self._no_hb = no_hb + #initialize hier2 block + gr.hier_block2.__init__( + self, 'usrp_simple_source', + gr.io_signature(0, 0, 0), + gr.io_signature(1, 1, self._get_io_size()), + ) + #create usrp object + if self._no_hb: self._make_usrp(which=which, nchan=1, fpga_filename="std_4rx_0tx.rbf") + else: self._make_usrp(which=which, nchan=1) + subdev_spec = common.to_spec(side, rx_ant) + self._get_u().set_mux(self._get_u().determine_rx_mux_value(subdev_spec)) + self._subdev = self._get_u().selected_subdev(subdev_spec) + if common.is_flex(rx_ant): self._subdev.select_rx_antenna(rx_ant) + #connect + self.connect(self._get_u(), self) + + def set_decim_rate(self, decim): + self._get_u().set_decim_rate(int(decim)) + if self._no_hb: #set the BW to half the sample rate + self._subdev.set_bw(self._get_u().converter_rate()/decim/2) + def set_lo_offset(self, lo_offset): self._subdev.set_lo_offset(lo_offset) + def set_frequency(self, frequency, verbose=False): + self._set_frequency( + chan=0, #ddc0 + subdev=self._subdev, + frequency=frequency, + verbose=verbose, + ) + def set_gain(self, gain): self._subdev.set_gain(gain) + +class simple_source_c(_simple_source, common.usrp_source_c): pass +class simple_source_s(_simple_source, common.usrp_source_s): pass + +#################################################################### +# Simple USRP Sink +#################################################################### +class _simple_sink(gr.hier_block2): + """A single usrp sink of IO type short or complex.""" + + def __init__(self, which, side='A'): + """ + USRP simple sink contructor. + @param which the unit number + @param side the usrp side A or B + """ + #initialize hier2 block + gr.hier_block2.__init__( + self, 'usrp_simple_sink', + gr.io_signature(1, 1, self._get_io_size()), + gr.io_signature(0, 0, 0), + ) + #create usrp object + self._make_usrp(which=which, nchan=1) + subdev_spec = common.to_spec(side) + self._get_u().set_mux(self._get_u().determine_tx_mux_value(subdev_spec)) + self._subdev = self._get_u().selected_subdev(subdev_spec) + #connect + self.connect(self, self._get_u()) + + def set_interp_rate(self, interp): self._get_u().set_interp_rate(int(interp)) + def set_frequency(self, frequency, verbose=False): + self._set_frequency( + chan=self._subdev.which(), + subdev=self._subdev, + frequency=frequency, + verbose=verbose, + ) + def set_lo_offset(self, lo_offset): self._subdev.set_lo_offset(lo_offset) + def set_gain(self, gain): self._subdev.set_gain(gain) + def set_enable(self, enable): self._subdev.set_enable(enable) + def set_auto_tr(self, auto_tr): self._subdev.set_auto_tr(auto_tr) + +class simple_sink_c(_simple_sink, common.usrp_sink_c): pass +class simple_sink_s(_simple_sink, common.usrp_sink_s): pass + diff --git a/grc/grc_gnuradio/wxgui/__init__.py b/grc/grc_gnuradio/wxgui/__init__.py new file mode 100644 index 00000000..81427253 --- /dev/null +++ b/grc/grc_gnuradio/wxgui/__init__.py @@ -0,0 +1,22 @@ +# Copyright 2008, 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. +# + +from top_block_gui import top_block_gui +from panel import Panel diff --git a/grc/grc_gnuradio/wxgui/panel.py b/grc/grc_gnuradio/wxgui/panel.py new file mode 100644 index 00000000..e62133ca --- /dev/null +++ b/grc/grc_gnuradio/wxgui/panel.py @@ -0,0 +1,49 @@ +# 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. +# + +import wx + +class Panel(wx.Panel): + def __init__(self, parent, orient=wx.VERTICAL): + wx.Panel.__init__(self, parent) + self._box = wx.BoxSizer(orient) + self._grid = wx.GridBagSizer(5, 5) + self.Add(self._grid) + self.SetSizer(self._box) + + def GetWin(self): return self + + def Add(self, win): + """ + Add a window to the wx vbox. + @param win the wx window + """ + self._box.Add(win, 0, wx.EXPAND) + + def GridAdd(self, win, row, col, row_span=1, col_span=1): + """ + Add a window to the wx grid at the given position. + @param win the wx window + @param row the row specification (integer >= 0) + @param col the column specification (integer >= 0) + @param row_span the row span specification (integer >= 1) + @param col_span the column span specification (integer >= 1) + """ + self._grid.Add(win, wx.GBPosition(row, col), wx.GBSpan(row_span, col_span), wx.EXPAND) diff --git a/grc/grc_gnuradio/wxgui/top_block_gui.py b/grc/grc_gnuradio/wxgui/top_block_gui.py new file mode 100644 index 00000000..99857589 --- /dev/null +++ b/grc/grc_gnuradio/wxgui/top_block_gui.py @@ -0,0 +1,75 @@ +# Copyright 2008, 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. +# + +import wx +import sys, os +from gnuradio import gr +import panel + +default_gui_size = (200, 100) + +class top_block_gui(gr.top_block): + """gr top block with wx gui app and grid sizer.""" + + def __init__(self, title='', size=default_gui_size): + """ + Initialize the gr top block. + Create the wx gui elements. + @param title the main window title + @param size the main window size tuple in pixels + @param icon the file path to an icon or None + """ + #initialize + gr.top_block.__init__(self) + self._size = size + #create gui elements + self._app = wx.App() + self._frame = wx.Frame(None, title=title) + self._panel = panel.Panel(self._frame) + self.Add = self._panel.Add + self.GridAdd = self._panel.GridAdd + self.GetWin = self._panel.GetWin + + def SetIcon(self, *args, **kwargs): self._frame.SetIcon(*args, **kwargs) + + def Run(self, start=True): + """ + Setup the wx gui elements. + Start the gr top block. + Block with the wx main loop. + """ + #set minimal window size + self._frame.SetSizeHints(*self._size) + #create callback for quit + def _quit(event): + self.stop(); self.wait() + self._frame.Destroy() + #setup app + self._frame.Bind(wx.EVT_CLOSE, _quit) + self._sizer = wx.BoxSizer(wx.VERTICAL) + self._sizer.Add(self._panel, 0, wx.EXPAND) + self._frame.SetSizerAndFit(self._sizer) + self._frame.SetAutoLayout(True) + self._frame.Show(True) + self._app.SetTopWindow(self._frame) + #start flow graph + if start: self.start() + #blocking main loop + self._app.MainLoop() diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py new file mode 100644 index 00000000..ff137f66 --- /dev/null +++ b/grc/gui/ActionHandler.py @@ -0,0 +1,408 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import os +import signal +from Constants import IMAGE_FILE_EXTENSION +import Actions +import pygtk +pygtk.require('2.0') +import gtk +import gobject +import Preferences +from threading import Thread +import Messages +from .. base import ParseXML +import random +from Platform import Platform +from MainWindow import MainWindow +from ParamsDialog import ParamsDialog +import Dialogs +from FileDialogs import OpenFlowGraphFileDialog, SaveFlowGraphFileDialog, SaveImageFileDialog + +gobject.threads_init() + +class ActionHandler: + """ + The action handler will setup all the major window components, + and handle button presses and flow graph operations from the GUI. + """ + + def __init__(self, file_paths, platform): + """ + ActionHandler constructor. + Create the main window, setup the message handler, import the preferences, + and connect all of the action handlers. Finally, enter the gtk main loop and block. + @param file_paths a list of flow graph file passed from command line + @param platform platform module + """ + self.clipboard = None + platform = Platform(platform) + for action in Actions.get_all_actions(): action.connect('activate', self._handle_actions) + #setup the main window + self.main_window = MainWindow(self.handle_states, platform) + self.main_window.connect('delete_event', self._quit) + self.main_window.connect('key-press-event', self._handle_key_press) + self.get_page = self.main_window.get_page + self.get_flow_graph = self.main_window.get_flow_graph + self.get_focus_flag = self.main_window.get_focus_flag + #setup the messages + Messages.register_messenger(self.main_window.add_report_line) + Messages.send_init(platform) + #initialize + self.init_file_paths = file_paths + self.handle_states(Actions.APPLICATION_INITIALIZE) + #enter the mainloop + gtk.main() + + def _handle_key_press(self, widget, event): + """ + Handle key presses from the keyboard and translate key combinations into actions. + This key press handler is called prior to the gtk key press handler. + This handler bypasses built in accelerator key handling when in focus because + * some keys are ignored by the accelerators like the direction keys, + * some keys are not registered to any accelerators but are still used. + When not in focus, gtk and the accelerators handle the the key press. + @return false to let gtk handle the key action + """ + #dont allow key presses to queue up + if gtk.events_pending(): return True + #extract action name from this key press + key_name = gtk.gdk.keyval_name(event.keyval) + mod_mask = event.state + action_name = Actions.get_action_name_from_key_name(key_name, mod_mask) + #handle the action if flow graph is in focus + if action_name and self.get_focus_flag(): + self.handle_states(action_name) + return True #handled by this method + return False #let gtk handle the key press + + def _quit(self, window, event): + """ + Handle the delete event from the main window. + Generated by pressing X to close, alt+f4, or right click+close. + This method in turns calls the state handler to quit. + @return true + """ + self.handle_states(Actions.APPLICATION_QUIT) + return True + + def _handle_actions(self, event): + """ + Handle all of the activate signals from the gtk actions. + The action signals derive from clicking on a toolbar or menu bar button. + Forward the action to the state handler. + """ + self.handle_states(event.get_name()) + + def handle_states(self, state=''): + """ + Handle the state changes in the GUI. + Handle all of the state changes that arise from the action handler or other gui and + inputs in the application. The state passed to the handle_states method is a string descriping + the change. A series of if/elif statements handle the state by greying out action buttons, causing + changes in the flow graph, saving/opening files... The handle_states method is passed to the + contructors of many of the classes used in this application enabling them to report any state change. + @param state a string describing the state change + """ + #print state + ################################################## + # Initalize/Quit + ################################################## + if state == Actions.APPLICATION_INITIALIZE: + for action in Actions.get_all_actions(): action.set_sensitive(False) #set all actions disabled + # enable a select few actions + for action in ( + Actions.APPLICATION_QUIT, Actions.FLOW_GRAPH_NEW, + Actions.FLOW_GRAPH_OPEN, Actions.FLOW_GRAPH_SAVE_AS, + Actions.FLOW_GRAPH_CLOSE, Actions.ABOUT_WINDOW_DISPLAY, + Actions.FLOW_GRAPH_SCREEN_CAPTURE, Actions.HELP_WINDOW_DISPLAY, + Actions.COLORS_WINDOW_DISPLAY, + ): Actions.get_action_from_name(action).set_sensitive(True) + if not self.init_file_paths: + self.init_file_paths = Preferences.files_open() + if not self.init_file_paths: self.init_file_paths = [''] + for file_path in self.init_file_paths: + if file_path: self.main_window.new_page(file_path) #load pages from file paths + if Preferences.file_open() in self.init_file_paths: + self.main_window.new_page(Preferences.file_open(), show=True) + if not self.get_page(): self.main_window.new_page() #ensure that at least a blank page exists + elif state == Actions.APPLICATION_QUIT: + if self.main_window.close_pages(): + gtk.main_quit() + exit(0) + ################################################## + # Selections + ################################################## + elif state == Actions.ELEMENT_SELECT: + pass #do nothing, update routines below + elif state == Actions.NOTHING_SELECT: + self.get_flow_graph().unselect() + ################################################## + # Enable/Disable + ################################################## + elif state == Actions.BLOCK_ENABLE: + if self.get_flow_graph().enable_selected(True): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.BLOCK_DISABLE: + if self.get_flow_graph().enable_selected(False): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + ################################################## + # Cut/Copy/Paste + ################################################## + elif state == Actions.BLOCK_CUT: + self.handle_states(Actions.BLOCK_COPY) + self.handle_states(Actions.ELEMENT_DELETE) + elif state == Actions.BLOCK_COPY: + self.clipboard = self.get_flow_graph().copy_to_clipboard() + elif state == Actions.BLOCK_PASTE: + if self.clipboard: + self.get_flow_graph().paste_from_clipboard(self.clipboard) + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + ################################################## + # Move/Rotate/Delete/Create + ################################################## + elif state == Actions.BLOCK_MOVE: + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.BLOCK_ROTATE_CCW: + if self.get_flow_graph().rotate_selected(90): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.BLOCK_ROTATE_CW: + if self.get_flow_graph().rotate_selected(-90): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.ELEMENT_DELETE: + if self.get_flow_graph().remove_selected(): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.handle_states(Actions.NOTHING_SELECT) + self.get_page().set_saved(False) + elif state == Actions.ELEMENT_CREATE: + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.handle_states(Actions.NOTHING_SELECT) + self.get_page().set_saved(False) + elif state == Actions.BLOCK_INC_TYPE: + if self.get_flow_graph().type_controller_modify_selected(1): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.BLOCK_DEC_TYPE: + if self.get_flow_graph().type_controller_modify_selected(-1): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.PORT_CONTROLLER_INC: + if self.get_flow_graph().port_controller_modify_selected(1): + self.get_flow_graph().update() + self.get_flow_graph().update() #2 times + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + elif state == Actions.PORT_CONTROLLER_DEC: + if self.get_flow_graph().port_controller_modify_selected(-1): + self.get_flow_graph().update() + self.get_flow_graph().update() #2 times + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + ################################################## + # Window stuff + ################################################## + elif state == Actions.ABOUT_WINDOW_DISPLAY: + Dialogs.AboutDialog(self.get_flow_graph().get_parent()) + elif state == Actions.HELP_WINDOW_DISPLAY: + Dialogs.HelpDialog() + elif state == Actions.COLORS_WINDOW_DISPLAY: + Dialogs.ColorsDialog(self.get_flow_graph().get_parent()) + ################################################## + # Param Modifications + ################################################## + elif state == Actions.BLOCK_PARAM_MODIFY: + selected_block = self.get_flow_graph().get_selected_block() + if selected_block and ParamsDialog(selected_block).run(): + self.get_flow_graph().update() + self.get_page().get_state_cache().save_new_state(self.get_flow_graph().export_data()) + self.get_page().set_saved(False) + ################################################## + # Undo/Redo + ################################################## + elif state == Actions.FLOW_GRAPH_UNDO: + n = self.get_page().get_state_cache().get_prev_state() + if n: + self.get_flow_graph().unselect() + self.get_flow_graph().import_data(n) + self.get_flow_graph().update() + self.get_page().set_saved(False) + elif state == Actions.FLOW_GRAPH_REDO: + n = self.get_page().get_state_cache().get_next_state() + if n: + self.get_flow_graph().unselect() + self.get_flow_graph().import_data(n) + self.get_flow_graph().update() + self.get_page().set_saved(False) + ################################################## + # New/Open/Save/Close + ################################################## + elif state == Actions.FLOW_GRAPH_NEW: + self.main_window.new_page() + elif state == Actions.FLOW_GRAPH_OPEN: + file_paths = OpenFlowGraphFileDialog(self.get_page().get_file_path()).run() + if file_paths: #open a new page for each file, show only the first + for i,file_path in enumerate(file_paths): + self.main_window.new_page(file_path, show=(i==0)) + elif state == Actions.FLOW_GRAPH_CLOSE: + self.main_window.close_page() + elif state == Actions.FLOW_GRAPH_SAVE: + #read-only or undefined file path, do save-as + if self.get_page().get_read_only() or not self.get_page().get_file_path(): + self.handle_states(Actions.FLOW_GRAPH_SAVE_AS) + #otherwise try to save + else: + try: + ParseXML.to_file(self.get_flow_graph().export_data(), self.get_page().get_file_path()) + self.get_page().set_saved(True) + except IOError: + Messages.send_fail_save(self.get_page().get_file_path()) + self.get_page().set_saved(False) + elif state == Actions.FLOW_GRAPH_SAVE_AS: + file_path = SaveFlowGraphFileDialog(self.get_page().get_file_path()).run() + if file_path is not None: + self.get_page().set_file_path(file_path) + self.handle_states(Actions.FLOW_GRAPH_SAVE) + elif state == Actions.FLOW_GRAPH_SCREEN_CAPTURE: + file_path = SaveImageFileDialog(self.get_page().get_file_path()).run() + if file_path is not None: + pixbuf = self.get_flow_graph().get_drawing_area().get_pixbuf() + pixbuf.save(file_path, IMAGE_FILE_EXTENSION[1:]) + ################################################## + # Gen/Exec/Stop + ################################################## + elif state == Actions.FLOW_GRAPH_GEN: + if not self.get_page().get_pid(): + if not self.get_page().get_saved() or not self.get_page().get_file_path(): + self.handle_states(Actions.FLOW_GRAPH_SAVE) #only save if file path missing or not saved + if self.get_page().get_saved() and self.get_page().get_file_path(): + generator = self.get_page().get_generator() + try: + Messages.send_start_gen(generator.get_file_path()) + generator.write() + except Exception,e: Messages.send_fail_gen(e) + else: self.generator = None + elif state == Actions.FLOW_GRAPH_EXEC: + if not self.get_page().get_pid(): + self.handle_states(Actions.FLOW_GRAPH_GEN) + if self.get_page().get_saved() and self.get_page().get_file_path(): + ExecFlowGraphThread(self) + elif state == Actions.FLOW_GRAPH_KILL: + if self.get_page().get_pid(): + try: os.kill(self.get_page().get_pid(), signal.SIGKILL) + except: print "could not kill pid: %s"%self.get_page().get_pid() + elif state == '': #pass and run the global actions + pass + else: print '!!! State "%s" not handled !!!'%state + ################################################## + # Global Actions for all States + ################################################## + #update general buttons + Actions.get_action_from_name(Actions.ELEMENT_DELETE).set_sensitive(bool(self.get_flow_graph().get_selected_elements())) + Actions.get_action_from_name(Actions.BLOCK_PARAM_MODIFY).set_sensitive(bool(self.get_flow_graph().get_selected_block())) + Actions.get_action_from_name(Actions.BLOCK_ROTATE_CCW).set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + Actions.get_action_from_name(Actions.BLOCK_ROTATE_CW).set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + #update cut/copy/paste + Actions.get_action_from_name(Actions.BLOCK_CUT).set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + Actions.get_action_from_name(Actions.BLOCK_COPY).set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + Actions.get_action_from_name(Actions.BLOCK_PASTE).set_sensitive(bool(self.clipboard)) + #update enable/disable + Actions.get_action_from_name(Actions.BLOCK_ENABLE).set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + Actions.get_action_from_name(Actions.BLOCK_DISABLE).set_sensitive(bool(self.get_flow_graph().get_selected_blocks())) + #set the exec and stop buttons + self.update_exec_stop() + #saved status + Actions.get_action_from_name(Actions.FLOW_GRAPH_SAVE).set_sensitive(not self.get_page().get_saved()) + self.main_window.update() + try: #set the size of the flow graph area (if changed) + new_size = self.get_flow_graph().get_option('window_size') + if self.get_flow_graph().get_size() != tuple(new_size): + self.get_flow_graph().set_size(*new_size) + except: pass + #draw the flow graph + self.get_flow_graph().update_selected() + self.get_flow_graph().queue_draw() + + def update_exec_stop(self): + """ + Update the exec and stop buttons. + Lock and unlock the mutex for race conditions with exec flow graph threads. + """ + sensitive = self.get_flow_graph().is_valid() and not self.get_page().get_pid() + Actions.get_action_from_name(Actions.FLOW_GRAPH_GEN).set_sensitive(sensitive) + Actions.get_action_from_name(Actions.FLOW_GRAPH_EXEC).set_sensitive(sensitive) + Actions.get_action_from_name(Actions.FLOW_GRAPH_KILL).set_sensitive(self.get_page().get_pid() != None) + +class ExecFlowGraphThread(Thread): + """Execute the flow graph as a new process and wait on it to finish.""" + + def __init__ (self, action_handler): + """ + ExecFlowGraphThread constructor. + @param action_handler an instance of an ActionHandler + """ + Thread.__init__(self) + self.update_exec_stop = action_handler.update_exec_stop + self.flow_graph = action_handler.get_flow_graph() + #store page and dont use main window calls in run + self.page = action_handler.get_page() + Messages.send_start_exec(self.page.get_generator().get_file_path()) + #get the popen + try: + self.p = self.page.get_generator().get_popen() + self.page.set_pid(self.p.pid) + #update + self.update_exec_stop() + self.start() + except Exception, e: + Messages.send_verbose_exec(str(e)) + Messages.send_end_exec() + + def run(self): + """ + Wait on the executing process by reading from its stdout. + Use gobject.idle_add when calling functions that modify gtk objects. + """ + #handle completion + r = "\n" + while(r): + gobject.idle_add(Messages.send_verbose_exec, r) + r = os.read(self.p.stdout.fileno(), 1024) + gobject.idle_add(self.done) + + def done(self): + """Perform end of execution tasks.""" + Messages.send_end_exec() + self.page.set_pid(None) + self.update_exec_stop() diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py new file mode 100644 index 00000000..3695e09e --- /dev/null +++ b/grc/gui/Actions.py @@ -0,0 +1,169 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk + +###################################################################################################### +# Action Names +###################################################################################################### +APPLICATION_INITIALIZE = 'app init' +APPLICATION_QUIT = 'app quit' +PARAM_MODIFY = 'param modify' +BLOCK_MOVE = 'block move' +BLOCK_ROTATE_CCW = 'block rotate ccw' +BLOCK_ROTATE_CW = 'block rotate cw' +BLOCK_PARAM_MODIFY = 'block param modify' +BLOCK_INC_TYPE = 'block increment type' +BLOCK_DEC_TYPE = 'block decrement type' +BLOCK_ENABLE = 'block enable' +BLOCK_DISABLE = 'block disable' +BLOCK_CUT = 'block cut' +BLOCK_COPY = 'block copy' +BLOCK_PASTE = 'block paste' +PORT_CONTROLLER_INC = 'port controller increment' +PORT_CONTROLLER_DEC = 'port controller decrement' +ELEMENT_CREATE = 'element create' +ELEMENT_DELETE = 'element delete' +ELEMENT_SELECT = 'element select' +NOTHING_SELECT = 'nothing select' +FLOW_GRAPH_OPEN = 'flow graph open' +FLOW_GRAPH_UNDO = 'flow graph undo' +FLOW_GRAPH_REDO = 'flow graph redo' +FLOW_GRAPH_SAVE = 'flow graph save' +FLOW_GRAPH_SAVE_AS = 'flow graph save as' +FLOW_GRAPH_CLOSE = 'flow graph close' +FLOW_GRAPH_NEW = 'flow graph new' +FLOW_GRAPH_GEN = 'flow graph gen' +FLOW_GRAPH_EXEC = 'flow graph exec' +FLOW_GRAPH_KILL = 'flow graph kill' +FLOW_GRAPH_SCREEN_CAPTURE = 'flow graph screen capture' +ABOUT_WINDOW_DISPLAY = 'about window display' +HELP_WINDOW_DISPLAY = 'help window display' +COLORS_WINDOW_DISPLAY = 'colors window display' + +###################################################################################################### +# Action Key Map +###################################################################################################### +_actions_key_list = ( + #action name, key name, mod mask + (FLOW_GRAPH_NEW, 'n', gtk.gdk.CONTROL_MASK), + (FLOW_GRAPH_OPEN, 'o', gtk.gdk.CONTROL_MASK), + (FLOW_GRAPH_SAVE, 's', gtk.gdk.CONTROL_MASK), + (FLOW_GRAPH_SAVE_AS, 's', gtk.gdk.CONTROL_MASK | gtk.gdk.SHIFT_MASK), + (FLOW_GRAPH_CLOSE, 'w', gtk.gdk.CONTROL_MASK), + (APPLICATION_QUIT, 'q', gtk.gdk.CONTROL_MASK), + (FLOW_GRAPH_UNDO, 'z', gtk.gdk.CONTROL_MASK), + (FLOW_GRAPH_REDO, 'y', gtk.gdk.CONTROL_MASK), + (ELEMENT_DELETE, 'Delete', 0), + (BLOCK_ROTATE_CCW, 'Left', 0), + (BLOCK_ROTATE_CW, 'Right', 0), + (BLOCK_DEC_TYPE, 'Up', 0), + (BLOCK_INC_TYPE, 'Down', 0), + (BLOCK_PARAM_MODIFY, 'Return', 0), + (BLOCK_ENABLE, 'e', 0), + (BLOCK_DISABLE, 'd', 0), + (BLOCK_CUT, 'x', gtk.gdk.CONTROL_MASK), + (BLOCK_COPY, 'c', gtk.gdk.CONTROL_MASK), + (BLOCK_PASTE, 'v', gtk.gdk.CONTROL_MASK), + (FLOW_GRAPH_GEN, 'F5', 0), + (FLOW_GRAPH_EXEC, 'F6', 0), + (FLOW_GRAPH_KILL, 'F7', 0), + (FLOW_GRAPH_SCREEN_CAPTURE, 'Print', 0), + (HELP_WINDOW_DISPLAY, 'F1', 0), + #the following have no associated gtk.Action + (PORT_CONTROLLER_INC, 'equal', 0), + (PORT_CONTROLLER_INC, 'plus', 0), + (PORT_CONTROLLER_INC, 'KP_Add', 0), + (PORT_CONTROLLER_DEC, 'minus', 0), + (PORT_CONTROLLER_DEC, 'KP_Subtract', 0), +) + +_actions_key_dict = dict(((key_name, mod_mask), action_name) for action_name, key_name, mod_mask in _actions_key_list) +def get_action_name_from_key_name(key_name, mod_mask=0): + """ + Get the action name associated with the key name and mask. + Both keyname and mask have to match. + @param key_name the name of the key + @param mod_mask the key press mask (shift, ctrl) 0 for none + @return the action name or blank string + """ + key_name_mod_mask = (key_name, mod_mask) + if key_name_mod_mask in _actions_key_dict: return _actions_key_dict[key_name_mod_mask] + return '' + +###################################################################################################### +# Actions +###################################################################################################### +_actions_list = ( + gtk.Action(FLOW_GRAPH_NEW, '_New', 'Create a new flow graph', gtk.STOCK_NEW), + gtk.Action(FLOW_GRAPH_OPEN, '_Open', 'Open an existing flow graph', gtk.STOCK_OPEN), + gtk.Action(FLOW_GRAPH_SAVE, '_Save', 'Save the current flow graph', gtk.STOCK_SAVE), + gtk.Action(FLOW_GRAPH_SAVE_AS, 'Save _As', 'Save the current flow graph as...', gtk.STOCK_SAVE_AS), + gtk.Action(FLOW_GRAPH_CLOSE, '_Close', 'Close the current flow graph', gtk.STOCK_CLOSE), + gtk.Action(APPLICATION_QUIT, '_Quit', 'Quit program', gtk.STOCK_QUIT), + gtk.Action(FLOW_GRAPH_UNDO, '_Undo', 'Undo a change to the flow graph', gtk.STOCK_UNDO), + gtk.Action(FLOW_GRAPH_REDO, '_Redo', 'Redo a change to the flow graph', gtk.STOCK_REDO), + gtk.Action(ELEMENT_DELETE, '_Delete', 'Delete the selected blocks', gtk.STOCK_DELETE), + gtk.Action(BLOCK_ROTATE_CCW, 'Rotate Counterclockwise', 'Rotate the selected blocks 90 degrees to the left', gtk.STOCK_GO_BACK), + gtk.Action(BLOCK_ROTATE_CW, 'Rotate Clockwise', 'Rotate the selected blocks 90 degrees to the right', gtk.STOCK_GO_FORWARD), + gtk.Action(BLOCK_PARAM_MODIFY, '_Properties', 'Modify params for the selected block', gtk.STOCK_PROPERTIES), + gtk.Action(BLOCK_ENABLE, 'E_nable', 'Enable the selected blocks', gtk.STOCK_CONNECT), + gtk.Action(BLOCK_DISABLE, 'D_isable', 'Disable the selected blocks', gtk.STOCK_DISCONNECT), + gtk.Action(BLOCK_CUT, 'Cu_t', 'Cut', gtk.STOCK_CUT), + gtk.Action(BLOCK_COPY, '_Copy', 'Copy', gtk.STOCK_COPY), + gtk.Action(BLOCK_PASTE, '_Paste', 'Paste', gtk.STOCK_PASTE), + gtk.Action(ABOUT_WINDOW_DISPLAY, '_About', 'About this program', gtk.STOCK_ABOUT), + gtk.Action(HELP_WINDOW_DISPLAY, '_Help', 'Usage Tips', gtk.STOCK_HELP), + gtk.Action(COLORS_WINDOW_DISPLAY, '_Colors', 'Color Mapping', gtk.STOCK_DIALOG_INFO), + gtk.Action(FLOW_GRAPH_GEN, '_Generate', 'Generate the flow graph', gtk.STOCK_CONVERT), + gtk.Action(FLOW_GRAPH_EXEC, '_Execute', 'Execute the flow graph', gtk.STOCK_EXECUTE), + gtk.Action(FLOW_GRAPH_KILL, '_Kill', 'Kill the flow graph', gtk.STOCK_STOP), + gtk.Action(FLOW_GRAPH_SCREEN_CAPTURE, 'S_creen Capture', 'Create a screen capture of the flow graph', gtk.STOCK_PRINT), +) +def get_all_actions(): return _actions_list + +_actions_dict = dict((action.get_name(), action) for action in _actions_list) +def get_action_from_name(action_name): + """ + Retrieve the action from the action list. + Search the list and find an action with said name. + @param action_name the action name(string) + @throw KeyError bad action name + @return a gtk action object + """ + if action_name in _actions_dict: return _actions_dict[action_name] + raise KeyError('Action Name: "%s" does not exist'%action_name) + +###################################################################################################### +# Accelerators +###################################################################################################### +_accel_group = gtk.AccelGroup() +def get_accel_group(): return _accel_group + +#set the accelerator group, and accelerator path +#register the key name and mod mask with the accelerator path +for action_name, key_name, mod_mask in _actions_key_list: + try: + accel_path = '
/'+action_name + get_action_from_name(action_name).set_accel_group(get_accel_group()) + get_action_from_name(action_name).set_accel_path(accel_path) + gtk.accel_map_add_entry(accel_path, gtk.gdk.keyval_from_name(key_name), mod_mask) + except KeyError: pass #no action was created for this action name diff --git a/grc/gui/Bars.py b/grc/gui/Bars.py new file mode 100644 index 00000000..e0c547eb --- /dev/null +++ b/grc/gui/Bars.py @@ -0,0 +1,138 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import Actions +import pygtk +pygtk.require('2.0') +import gtk + +##The list of actions for the toolbar. +TOOLBAR_LIST = ( + Actions.FLOW_GRAPH_NEW, + Actions.FLOW_GRAPH_OPEN, + Actions.FLOW_GRAPH_SAVE, + Actions.FLOW_GRAPH_CLOSE, + None, + Actions.FLOW_GRAPH_SCREEN_CAPTURE, + None, + Actions.BLOCK_CUT, + Actions.BLOCK_COPY, + Actions.BLOCK_PASTE, + Actions.ELEMENT_DELETE, + None, + Actions.FLOW_GRAPH_UNDO, + Actions.FLOW_GRAPH_REDO, + None, + Actions.FLOW_GRAPH_GEN, + Actions.FLOW_GRAPH_EXEC, + Actions.FLOW_GRAPH_KILL, + None, + Actions.BLOCK_ROTATE_CCW, + Actions.BLOCK_ROTATE_CW, + None, + Actions.BLOCK_ENABLE, + Actions.BLOCK_DISABLE, +) + +##The list of actions and categories for the menu bar. +MENU_BAR_LIST = ( + (gtk.Action('File', '_File', None, None), [ + Actions.FLOW_GRAPH_NEW, + Actions.FLOW_GRAPH_OPEN, + None, + Actions.FLOW_GRAPH_SAVE, + Actions.FLOW_GRAPH_SAVE_AS, + None, + Actions.FLOW_GRAPH_SCREEN_CAPTURE, + None, + Actions.FLOW_GRAPH_CLOSE, + Actions.APPLICATION_QUIT, + ]), + (gtk.Action('Edit', '_Edit', None, None), [ + Actions.FLOW_GRAPH_UNDO, + Actions.FLOW_GRAPH_REDO, + None, + Actions.BLOCK_CUT, + Actions.BLOCK_COPY, + Actions.BLOCK_PASTE, + Actions.ELEMENT_DELETE, + None, + Actions.BLOCK_ROTATE_CCW, + Actions.BLOCK_ROTATE_CW, + None, + Actions.BLOCK_ENABLE, + Actions.BLOCK_DISABLE, + None, + Actions.BLOCK_PARAM_MODIFY, + ]), + (gtk.Action('Build', '_Build', None, None), [ + Actions.FLOW_GRAPH_GEN, + Actions.FLOW_GRAPH_EXEC, + Actions.FLOW_GRAPH_KILL, + ]), + (gtk.Action('Help', '_Help', None, None), [ + Actions.HELP_WINDOW_DISPLAY, + Actions.COLORS_WINDOW_DISPLAY, + None, + Actions.ABOUT_WINDOW_DISPLAY, + ]), +) + +class Toolbar(gtk.Toolbar): + """The gtk toolbar with actions added from the toolbar list.""" + + def __init__(self): + """ + Parse the list of action names in the toolbar list. + Look up the action for each name in the action list and add it to the toolbar. + """ + gtk.Toolbar.__init__(self) + self.set_style(gtk.TOOLBAR_ICONS) + for action_name in TOOLBAR_LIST: + if action_name: #add a tool item + action = Actions.get_action_from_name(action_name) + self.add(action.create_tool_item()) + #this reset of the tooltip property is required (after creating the tool item) for the tooltip to show + action.set_property('tooltip', action.get_property('tooltip')) + else: self.add(gtk.SeparatorToolItem()) + +class MenuBar(gtk.MenuBar): + """The gtk menu bar with actions added from the menu bar list.""" + + def __init__(self): + """ + Parse the list of submenus from the menubar list. + For each submenu, get a list of action names. + Look up the action for each name in the action list and add it to the submenu. + Add the submenu to the menu bar. + """ + gtk.MenuBar.__init__(self) + for main_action,action_names in MENU_BAR_LIST: + #create the main menu item + main_menu_item = main_action.create_menu_item() + self.append(main_menu_item) + #create the menu + main_menu = gtk.Menu() + main_menu_item.set_submenu(main_menu) + for action_name in action_names: + if action_name: #append a menu item + action = Actions.get_action_from_name(action_name) + main_menu.append(action.create_menu_item()) + else: main_menu.append(gtk.SeparatorMenuItem()) + main_menu.show_all() #this show all is required for the separators to show diff --git a/grc/gui/Block.py b/grc/gui/Block.py new file mode 100644 index 00000000..0496f0a2 --- /dev/null +++ b/grc/gui/Block.py @@ -0,0 +1,199 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Element import Element +import Utils +import Colors +from .. base import odict +from Constants import BORDER_PROXIMITY_SENSITIVITY +from Constants import \ + BLOCK_LABEL_PADDING, \ + PORT_SEPARATION, LABEL_SEPARATION, \ + PORT_BORDER_SEPARATION, POSSIBLE_ROTATIONS +import pygtk +pygtk.require('2.0') +import gtk + +BLOCK_MARKUP_TMPL="""\ +#set $foreground = $block.is_valid() and 'black' or 'red' +$encode($block.get_name())""" + +class Block(Element): + """The graphical signal block.""" + + def __init__(self, *args, **kwargs): + """ + Block contructor. + Add graphics related params to the block. + """ + #add the position param + self._params['_coordinate'] = self.get_parent().get_parent().Param( + self, + odict({ + 'name': 'GUI Coordinate', + 'key': '_coordinate', + 'type': 'raw', + 'value': '(0, 0)', + 'hide': 'all', + }) + ) + self._params['_rotation'] = self.get_parent().get_parent().Param( + self, + odict({ + 'name': 'GUI Rotation', + 'key': '_rotation', + 'type': 'raw', + 'value': '0', + 'hide': 'all', + }) + ) + Element.__init__(self) + + def get_coordinate(self): + """ + Get the coordinate from the position param. + @return the coordinate tuple (x, y) or (0, 0) if failure + """ + try: #should evaluate to tuple + coor = eval(self.get_param('_coordinate').get_value()) + x, y = map(int, coor) + fgW,fgH = self.get_parent().get_size() + if x <= 0: + x = 0 + elif x >= fgW - BORDER_PROXIMITY_SENSITIVITY: + x = fgW - BORDER_PROXIMITY_SENSITIVITY + if y <= 0: + y = 0 + elif y >= fgH - BORDER_PROXIMITY_SENSITIVITY: + y = fgH - BORDER_PROXIMITY_SENSITIVITY + return (x, y) + except: + self.set_coordinate((0, 0)) + return (0, 0) + + def set_coordinate(self, coor): + """ + Set the coordinate into the position param. + @param coor the coordinate tuple (x, y) + """ + self.get_param('_coordinate').set_value(str(coor)) + + def get_rotation(self): + """ + Get the rotation from the position param. + @return the rotation in degrees or 0 if failure + """ + try: #should evaluate to dict + rotation = eval(self.get_param('_rotation').get_value()) + return int(rotation) + except: + self.set_rotation(POSSIBLE_ROTATIONS[0]) + return POSSIBLE_ROTATIONS[0] + + def set_rotation(self, rot): + """ + Set the rotation into the position param. + @param rot the rotation in degrees + """ + self.get_param('_rotation').set_value(str(rot)) + + def update(self): + """Update the block, parameters, and ports when a change occurs.""" + self._bg_color = self.get_enabled() and Colors.BLOCK_ENABLED_COLOR or Colors.BLOCK_DISABLED_COLOR + self.clear() + self._create_labels() + self.W = self.label_width + 2*BLOCK_LABEL_PADDING + self.H = max(*( + [self.label_height+2*BLOCK_LABEL_PADDING] + [2*PORT_BORDER_SEPARATION + \ + sum([port.H + PORT_SEPARATION for port in ports]) - PORT_SEPARATION + for ports in (self.get_sources(), self.get_sinks())] + )) + if self.is_horizontal(): self.add_area((0, 0), (self.W, self.H)) + elif self.is_vertical(): self.add_area((0, 0), (self.H, self.W)) + map(lambda p: p.update(), self.get_ports()) + + def _create_labels(self): + """Create the labels for the signal block.""" + layouts = list() + #create the main layout + layout = gtk.DrawingArea().create_pango_layout('') + layouts.append(layout) + layout.set_markup(Utils.parse_template(BLOCK_MARKUP_TMPL, block=self)) + self.label_width, self.label_height = layout.get_pixel_size() + #display the params + for param in filter(lambda p: p.get_hide() not in ('all', 'part'), self.get_params()): + layout = param.get_layout() + layouts.append(layout) + w,h = layout.get_pixel_size() + self.label_width = max(w, self.label_width) + self.label_height = self.label_height + h + LABEL_SEPARATION + width = self.label_width + height = self.label_height + #setup the pixmap + pixmap = self.get_parent().new_pixmap(width, height) + gc = pixmap.new_gc() + gc.set_foreground(self._bg_color) + pixmap.draw_rectangle(gc, True, 0, 0, width, height) + #draw the layouts + h_off = 0 + for i,layout in enumerate(layouts): + w,h = layout.get_pixel_size() + if i == 0: w_off = (width-w)/2 + else: w_off = 0 + pixmap.draw_layout(gc, w_off, h_off, layout) + h_off = h + h_off + LABEL_SEPARATION + #create vertical and horizontal images + self.horizontal_label = image = pixmap.get_image(0, 0, width, height) + if self.is_vertical(): + self.vertical_label = vimage = gtk.gdk.Image(gtk.gdk.IMAGE_NORMAL, pixmap.get_visual(), height, width) + for i in range(width): + for j in range(height): vimage.put_pixel(j, width-i-1, image.get_pixel(i, j)) + map(lambda p: p._create_labels(), self.get_ports()) + + def draw(self, gc, window): + """ + Draw the signal block with label and inputs/outputs. + @param gc the graphics context + @param window the gtk window to draw on + """ + x, y = self.get_coordinate() + #draw main block + Element.draw( + self, gc, window, bg_color=self._bg_color, + border_color=self.is_highlighted() and Colors.HIGHLIGHT_COLOR or Colors.BORDER_COLOR, + ) + #draw label image + if self.is_horizontal(): + window.draw_image(gc, self.horizontal_label, 0, 0, x+BLOCK_LABEL_PADDING, y+(self.H-self.label_height)/2, -1, -1) + elif self.is_vertical(): + window.draw_image(gc, self.vertical_label, 0, 0, x+(self.H-self.label_height)/2, y+BLOCK_LABEL_PADDING, -1, -1) + #draw ports + for port in self.get_ports(): port.draw(gc, window) + + def what_is_selected(self, coor, coor_m=None): + """ + Get the element that is selected. + @param coor the (x,y) tuple + @param coor_m the (x_m, y_m) tuple + @return this block, a port, or None + """ + for port in self.get_ports(): + port_selected = port.what_is_selected(coor, coor_m) + if port_selected: return port_selected + return Element.what_is_selected(self, coor, coor_m) diff --git a/grc/gui/BlockTreeWindow.py b/grc/gui/BlockTreeWindow.py new file mode 100644 index 00000000..379c4a6a --- /dev/null +++ b/grc/gui/BlockTreeWindow.py @@ -0,0 +1,168 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import DEFAULT_BLOCKS_WINDOW_WIDTH, DND_TARGETS +import Utils +import pygtk +pygtk.require('2.0') +import gtk +import gobject + +NAME_INDEX = 0 +KEY_INDEX = 1 +DOC_INDEX = 2 + +class BlockTreeWindow(gtk.VBox): + """The block selection panel.""" + + def __init__(self, platform, get_flow_graph): + """ + BlockTreeWindow constructor. + Create a tree view of the possible blocks in the platform. + The tree view nodes will be category names, the leaves will be block names. + A mouse double click or button press action will trigger the add block event. + @param platform the particular platform will all block prototypes + @param get_flow_graph get the selected flow graph + """ + gtk.VBox.__init__(self) + self.platform = platform + self.get_flow_graph = get_flow_graph + #make the tree model for holding blocks + self.treestore = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) + self.treeview = gtk.TreeView(self.treestore) + self.treeview.set_enable_search(False) #disable pop up search box + self.treeview.add_events(gtk.gdk.BUTTON_PRESS_MASK) + self.treeview.connect('button_press_event', self._handle_mouse_button_press) + selection = self.treeview.get_selection() + selection.set_mode('single') + selection.connect('changed', self._handle_selection_change) + renderer = gtk.CellRendererText() + column = gtk.TreeViewColumn('Blocks', renderer, text=NAME_INDEX) + self.treeview.append_column(column) + #try to enable the tooltips (available in pygtk 2.12 and above) + try: self.treeview.set_tooltip_column(DOC_INDEX) + except: pass + #setup drag and drop + self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, DND_TARGETS, gtk.gdk.ACTION_COPY) + self.treeview.connect('drag-data-get', self._handle_drag_get_data) + #make the scrolled window to hold the tree view + scrolled_window = gtk.ScrolledWindow() + scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scrolled_window.add_with_viewport(self.treeview) + scrolled_window.set_size_request(DEFAULT_BLOCKS_WINDOW_WIDTH, -1) + self.pack_start(scrolled_window) + #add button + self.add_button = gtk.Button(None, gtk.STOCK_ADD) + self.add_button.connect('clicked', self._handle_add_button) + self.pack_start(self.add_button, False) + #map categories to iters, automatic mapping for root + self._categories = {tuple(): None} + #add blocks and categories + self.platform.load_block_tree(self) + #initialize + self._update_add_button() + + ############################################################ + ## Block Tree Methods + ############################################################ + def add_block(self, category, block=None): + """ + Add a block with category to this selection window. + Add only the category when block is None. + @param category the category list or path string + @param block the block object or None + """ + if isinstance(category, str): category = category.split('/') + category = tuple(filter(lambda x: x, category)) #tuple is hashable + #add category and all sub categories + for i, cat_name in enumerate(category): + sub_category = category[:i+1] + if sub_category not in self._categories: + iter = self.treestore.insert_before(self._categories[sub_category[:-1]], None) + self.treestore.set_value(iter, NAME_INDEX, '[ %s ]'%cat_name) + self.treestore.set_value(iter, KEY_INDEX, '') + self.treestore.set_value(iter, DOC_INDEX, Utils.xml_encode('Category: %s'%cat_name)) + self._categories[sub_category] = iter + #add block + if block is None: return + iter = self.treestore.insert_before(self._categories[category], None) + self.treestore.set_value(iter, NAME_INDEX, block.get_name()) + self.treestore.set_value(iter, KEY_INDEX, block.get_key()) + self.treestore.set_value(iter, DOC_INDEX, Utils.xml_encode(block.get_doc() or 'undocumented')) + + ############################################################ + ## Helper Methods + ############################################################ + def _get_selected_block_key(self): + """ + Get the currently selected block key. + @return the key of the selected block or a empty string + """ + selection = self.treeview.get_selection() + treestore, iter = selection.get_selected() + return iter and treestore.get_value(iter, KEY_INDEX) or '' + + def _update_add_button(self): + """ + Update the add button's sensitivity. + The button should be active only if a block is selected. + """ + key = self._get_selected_block_key() + self.add_button.set_sensitive(bool(key)) + + def _add_selected_block(self): + """ + Add the selected block with the given key to the flow graph. + """ + key = self._get_selected_block_key() + if key: self.get_flow_graph().add_new_block(key) + + ############################################################ + ## Event Handlers + ############################################################ + def _handle_drag_get_data(self, widget, drag_context, selection_data, info, time): + """ + Handle a drag and drop by setting the key to the selection object. + This will call the destination handler for drag and drop. + Only call set when the key is valid to ignore DND from categories. + """ + key = self._get_selected_block_key() + if key: selection_data.set(selection_data.target, 8, key) + + def _handle_mouse_button_press(self, widget, event): + """ + Handle the mouse button press. + If a left double click is detected, call add selected block. + """ + if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: + self._add_selected_block() + + def _handle_selection_change(self, selection): + """ + Handle a selection change in the tree view. + If a selection changes, set the add button sensitive. + """ + self._update_add_button() + + def _handle_add_button(self, widget): + """ + Handle the add button clicked signal. + Call add selected block. + """ + self._add_selected_block() diff --git a/grc/gui/Colors.py b/grc/gui/Colors.py new file mode 100644 index 00000000..f0b989b3 --- /dev/null +++ b/grc/gui/Colors.py @@ -0,0 +1,37 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk + +_COLORMAP = gtk.gdk.colormap_get_system() #create all of the colors +def get_color(color_code): return _COLORMAP.alloc_color(color_code, True, True) + +HIGHLIGHT_COLOR = get_color('#00FFFF') +BORDER_COLOR = get_color('black') +#flow graph color constants +FLOWGRAPH_BACKGROUND_COLOR = get_color('#FFF9FF') +#block color constants +BLOCK_ENABLED_COLOR = get_color('#F1ECFF') +BLOCK_DISABLED_COLOR = get_color('#CCCCCC') +#connection color constants +CONNECTION_ENABLED_COLOR = get_color('black') +CONNECTION_DISABLED_COLOR = get_color('#999999') +CONNECTION_ERROR_COLOR = get_color('red') diff --git a/grc/gui/Connection.py b/grc/gui/Connection.py new file mode 100644 index 00000000..013bcb00 --- /dev/null +++ b/grc/gui/Connection.py @@ -0,0 +1,140 @@ +""" +Copyright 2007, 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import Utils +from Element import Element +import Colors +from Constants import CONNECTOR_ARROW_BASE, CONNECTOR_ARROW_HEIGHT + +class Connection(Element): + """ + A graphical connection for ports. + The connection has 2 parts, the arrow and the wire. + The coloring of the arrow and wire exposes the status of 3 states: + enabled/disabled, valid/invalid, highlighted/non-highlighted. + The wire coloring exposes the enabled and highlighted states. + The arrow coloring exposes the enabled and valid states. + """ + + def get_coordinate(self): + """ + Get the 0,0 coordinate. + Coordinates are irrelevant in connection. + @return 0, 0 + """ + return (0, 0) + + def get_rotation(self): + """ + Get the 0 degree rotation. + Rotations are irrelevant in connection. + @return 0 + """ + return 0 + + def update(self): + """Precalculate relative coordinates.""" + self._sink_rot = None + self._source_rot = None + self._sink_coor = None + self._source_coor = None + #get the source coordinate + connector_length = self.get_source().get_connector_length() + self.x1, self.y1 = Utils.get_rotated_coordinate((connector_length, 0), self.get_source().get_rotation()) + #get the sink coordinate + connector_length = self.get_sink().get_connector_length() + CONNECTOR_ARROW_HEIGHT + self.x2, self.y2 = Utils.get_rotated_coordinate((-connector_length, 0), self.get_sink().get_rotation()) + #build the arrow + self.arrow = [(0, 0), + Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, -CONNECTOR_ARROW_BASE/2), self.get_sink().get_rotation()), + Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, CONNECTOR_ARROW_BASE/2), self.get_sink().get_rotation()), + ] + self._update_after_move() + if not self.get_enabled(): self._arrow_color = Colors.CONNECTION_DISABLED_COLOR + elif not self.is_valid(): self._arrow_color = Colors.CONNECTION_ERROR_COLOR + else: self._arrow_color = Colors.CONNECTION_ENABLED_COLOR + + def _update_after_move(self): + """Calculate coordinates.""" + self.clear() + #source connector + source = self.get_source() + X, Y = source.get_connector_coordinate() + x1, y1 = self.x1 + X, self.y1 + Y + self.add_line((x1, y1), (X, Y)) + #sink connector + sink = self.get_sink() + X, Y = sink.get_connector_coordinate() + x2, y2 = self.x2 + X, self.y2 + Y + self.add_line((x2, y2), (X, Y)) + #adjust arrow + self._arrow = [(x+X, y+Y) for x,y in self.arrow] + #add the horizontal and vertical lines in this connection + if abs(source.get_connector_direction() - sink.get_connector_direction()) == 180: + #2 possible point sets to create a 3-line connector + mid_x, mid_y = (x1 + x2)/2.0, (y1 + y2)/2.0 + points = [((mid_x, y1), (mid_x, y2)), ((x1, mid_y), (x2, mid_y))] + #source connector -> points[0][0] should be in the direction of source (if possible) + if Utils.get_angle_from_coordinates((x1, y1), points[0][0]) != source.get_connector_direction(): points.reverse() + #points[0][0] -> sink connector should not be in the direction of sink + if Utils.get_angle_from_coordinates(points[0][0], (x2, y2)) == sink.get_connector_direction(): points.reverse() + #points[0][0] -> source connector should not be in the direction of source + if Utils.get_angle_from_coordinates(points[0][0], (x1, y1)) == source.get_connector_direction(): points.reverse() + #create 3-line connector + p1, p2 = map(int, points[0][0]), map(int, points[0][1]) + self.add_line((x1, y1), p1) + self.add_line(p1, p2) + self.add_line((x2, y2), p2) + else: + #2 possible points to create a right-angled connector + points = [(x1, y2), (x2, y1)] + #source connector -> points[0] should be in the direction of source (if possible) + if Utils.get_angle_from_coordinates((x1, y1), points[0]) != source.get_connector_direction(): points.reverse() + #points[0] -> sink connector should not be in the direction of sink + if Utils.get_angle_from_coordinates(points[0], (x2, y2)) == sink.get_connector_direction(): points.reverse() + #points[0] -> source connector should not be in the direction of source + if Utils.get_angle_from_coordinates(points[0], (x1, y1)) == source.get_connector_direction(): points.reverse() + #create right-angled connector + self.add_line((x1, y1), points[0]) + self.add_line((x2, y2), points[0]) + + def draw(self, gc, window): + """ + Draw the connection. + @param gc the graphics context + @param window the gtk window to draw on + """ + sink = self.get_sink() + source = self.get_source() + #check for changes + if self._sink_rot != sink.get_rotation() or self._source_rot != source.get_rotation(): self.update() + elif self._sink_coor != sink.get_coordinate() or self._source_coor != source.get_coordinate(): self._update_after_move() + #cache values + self._sink_rot = sink.get_rotation() + self._source_rot = source.get_rotation() + self._sink_coor = sink.get_coordinate() + self._source_coor = source.get_coordinate() + #draw + if self.is_highlighted(): border_color = Colors.HIGHLIGHT_COLOR + elif self.get_enabled(): border_color = Colors.CONNECTION_ENABLED_COLOR + else: border_color = Colors.CONNECTION_DISABLED_COLOR + Element.draw(self, gc, window, bg_color=None, border_color=border_color) + #draw arrow on sink port + gc.set_foreground(self._arrow_color) + window.draw_polygon(gc, True, self._arrow) diff --git a/grc/gui/Constants.py b/grc/gui/Constants.py new file mode 100644 index 00000000..7fabcfc0 --- /dev/null +++ b/grc/gui/Constants.py @@ -0,0 +1,83 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk +import os + +##default path for the open/save dialogs +DEFAULT_FILE_PATH = os.getcwd() + +##file extensions +IMAGE_FILE_EXTENSION = '.png' + +##name for new/unsaved flow graphs +NEW_FLOGRAPH_TITLE = 'untitled' + +##main window constraints +MIN_WINDOW_WIDTH = 600 +MIN_WINDOW_HEIGHT = 400 +##dialog constraints +MIN_DIALOG_WIDTH = 500 +MIN_DIALOG_HEIGHT = 500 +##default sizes +DEFAULT_BLOCKS_WINDOW_WIDTH = 100 +DEFAULT_REPORTS_WINDOW_WIDTH = 100 + +##The size of the state saving cache in the flow graph (for undo/redo functionality) +STATE_CACHE_SIZE = 42 + +##Shared targets for drag and drop of blocks +DND_TARGETS = [('STRING', gtk.TARGET_SAME_APP, 0)] + +#label constraint dimensions +LABEL_SEPARATION = 3 +BLOCK_LABEL_PADDING = 7 +PORT_LABEL_PADDING = 2 + +#port constraint dimensions +PORT_SEPARATION = 17 +PORT_BORDER_SEPARATION = 9 +PORT_MIN_WIDTH = 20 + +#minimal length of connector +CONNECTOR_EXTENSION_MINIMAL = 11 + +#increment length for connector +CONNECTOR_EXTENSION_INCREMENT = 11 + +#connection arrow dimensions +CONNECTOR_ARROW_BASE = 13 +CONNECTOR_ARROW_HEIGHT = 17 + +#possible rotations in degrees +POSSIBLE_ROTATIONS = (0, 90, 180, 270) + +#How close can the mouse get to the window border before mouse events are ignored. +BORDER_PROXIMITY_SENSITIVITY = 50 + +#How close the mouse can get to the edge of the visible window before scrolling is invoked. +SCROLL_PROXIMITY_SENSITIVITY = 30 + +#When the window has to be scrolled, move it this distance in the required direction. +SCROLL_DISTANCE = 15 + +#How close the mouse click can be to a line and register a connection select. +LINE_SELECT_SENSITIVITY = 5 diff --git a/grc/gui/Dialogs.py b/grc/gui/Dialogs.py new file mode 100644 index 00000000..8d764e28 --- /dev/null +++ b/grc/gui/Dialogs.py @@ -0,0 +1,105 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk +import Preferences +import Utils + +class TextDisplay(gtk.TextView): + """A non editable gtk text view.""" + + def __init__(self, text=''): + """ + TextDisplay constructor. + @param text the text to display (string) + """ + text_buffer = gtk.TextBuffer() + text_buffer.set_text(text) + self.set_text = text_buffer.set_text + self.insert = lambda line: text_buffer.insert(text_buffer.get_end_iter(), line) + gtk.TextView.__init__(self, text_buffer) + self.set_editable(False) + self.set_cursor_visible(False) + self.set_wrap_mode(gtk.WRAP_WORD_CHAR) + +def MessageDialogHelper(type, buttons, title=None, markup=None): + """ + Create a modal message dialog and run it. + @param type the type of message: gtk.MESSAGE_INFO, gtk.MESSAGE_WARNING, gtk.MESSAGE_QUESTION or gtk.MESSAGE_ERROR + @param buttons the predefined set of buttons to use: + gtk.BUTTONS_NONE, gtk.BUTTONS_OK, gtk.BUTTONS_CLOSE, gtk.BUTTONS_CANCEL, gtk.BUTTONS_YES_NO, gtk.BUTTONS_OK_CANCEL + @param tittle the title of the window (string) + @param markup the message text with pango markup + @return the gtk response from run() + """ + message_dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL, type, buttons) + if title: message_dialog.set_title(title) + if markup: message_dialog.set_markup(markup) + response = message_dialog.run() + message_dialog.destroy() + return response + +class AboutDialog(gtk.AboutDialog): + """A cute little about dialog.""" + + def __init__(self, platform): + """AboutDialog constructor.""" + gtk.AboutDialog.__init__(self) + self.set_name(platform.get_name()) + self.set_version(platform.get_version()) + self.set_license(platform.get_license()) + self.set_copyright(platform.get_license().splitlines()[0]) + self.set_website(platform.get_website()) + self.run() + self.destroy() + +def HelpDialog(): MessageDialogHelper( + type=gtk.MESSAGE_INFO, + buttons=gtk.BUTTONS_CLOSE, + title='Help', + markup="""\ +Usage Tips + +Add block: drag and drop or double click a block in the block selection window. +Rotate block: Select a block, press left/right on the keyboard. +Change type: Select a block, press up/down on the keyboard. +Edit parameters: double click on a block in the flow graph. +Make connection: click on the source port of one block, then click on the sink port of another block. +Remove connection: select the connection and press delete, or drag the connection. + +* See the menu for other keyboard shortcuts.""") + +COLORS_DIALOG_MARKUP_TMPL = """\ +Color Mapping + +#if $colors + #set $max_len = max([len(color[0]) for color in $colors]) + 10 + #for $title, $color_spec in $colors +$($encode($title).center($max_len)) + #end for +#end if +""" + +def ColorsDialog(platform): MessageDialogHelper( + type=gtk.MESSAGE_INFO, + buttons=gtk.BUTTONS_CLOSE, + title='Colors', + markup=Utils.parse_template(COLORS_DIALOG_MARKUP_TMPL, colors=platform.get_colors())) diff --git a/grc/gui/DrawingArea.py b/grc/gui/DrawingArea.py new file mode 100644 index 00000000..b70468ed --- /dev/null +++ b/grc/gui/DrawingArea.py @@ -0,0 +1,131 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk +from Constants import MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT, DND_TARGETS + +class DrawingArea(gtk.DrawingArea): + """ + DrawingArea is the gtk pixel map that graphical elements may draw themselves on. + The drawing area also responds to mouse and key events. + """ + + def __init__(self, flow_graph): + """ + DrawingArea contructor. + Connect event handlers. + @param main_window the main_window containing all flow graphs + """ + self.ctrl_mask = False + self._flow_graph = flow_graph + gtk.DrawingArea.__init__(self) + self.set_size_request(MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT) + self.connect('realize', self._handle_window_realize) + self.connect('configure-event', self._handle_window_configure) + self.connect('expose-event', self._handle_window_expose) + self.connect('motion-notify-event', self._handle_mouse_motion) + self.connect('button-press-event', self._handle_mouse_button_press) + self.connect('button-release-event', self._handle_mouse_button_release) + self.add_events( + gtk.gdk.BUTTON_PRESS_MASK | \ + gtk.gdk.POINTER_MOTION_MASK | \ + gtk.gdk.BUTTON_RELEASE_MASK | \ + gtk.gdk.LEAVE_NOTIFY_MASK | \ + gtk.gdk.ENTER_NOTIFY_MASK + ) + #setup drag and drop + self.drag_dest_set(gtk.DEST_DEFAULT_ALL, DND_TARGETS, gtk.gdk.ACTION_COPY) + self.connect('drag-data-received', self._handle_drag_data_received) + #setup the focus flag + self._focus_flag = False + self.get_focus_flag = lambda: self._focus_flag + def _handle_focus_event(widget, event, focus_flag): self._focus_flag = focus_flag + self.connect('leave-notify-event', _handle_focus_event, False) + self.connect('enter-notify-event', _handle_focus_event, True) + + def new_pixmap(self, width, height): return gtk.gdk.Pixmap(self.window, width, height, -1) + def get_pixbuf(self): + width, height = self._pixmap.get_size() + pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 0, 8, width, height) + pixbuf.get_from_drawable(self._pixmap, self._pixmap.get_colormap(), 0, 0, 0, 0, width, height) + return pixbuf + + ########################################################################## + ## Handlers + ########################################################################## + def _handle_drag_data_received(self, widget, drag_context, x, y, selection_data, info, time): + """ + Handle a drag and drop by adding a block at the given coordinate. + """ + self._flow_graph.add_new_block(selection_data.data, (x, y)) + + def _handle_mouse_button_press(self, widget, event): + """ + Forward button click information to the flow graph. + """ + self.ctrl_mask = event.state & gtk.gdk.CONTROL_MASK + self._flow_graph.handle_mouse_button_press( + left_click=(event.button == 1), + double_click=(event.type == gtk.gdk._2BUTTON_PRESS), + coordinate=(event.x, event.y), + ) + + def _handle_mouse_button_release(self, widget, event): + """ + Forward button release information to the flow graph. + """ + self.ctrl_mask = event.state & gtk.gdk.CONTROL_MASK + self._flow_graph.handle_mouse_button_release( + left_click=(event.button == 1), + coordinate=(event.x, event.y), + ) + + def _handle_mouse_motion(self, widget, event): + """ + Forward mouse motion information to the flow graph. + """ + self.ctrl_mask = event.state & gtk.gdk.CONTROL_MASK + self._flow_graph.handle_mouse_motion( + coordinate=(event.x, event.y), + ) + + def _handle_window_realize(self, widget): + """ + Called when the window is realized. + Update the flowgraph, which calls new pixmap. + """ + self._flow_graph.update() + + def _handle_window_configure(self, widget, event): + """ + Called when the window is resized. + Create a new pixmap for background buffer. + """ + self._pixmap = self.new_pixmap(*self.get_size_request()) + + def _handle_window_expose(self, widget, event): + """ + Called when window is exposed, or queue_draw is called. + Double buffering: draw to pixmap, then draw pixmap to window. + """ + gc = self.window.new_gc() + self._flow_graph.draw(gc, self._pixmap) + self.window.draw_drawable(gc, self._pixmap, 0, 0, 0, 0, -1, -1) diff --git a/grc/gui/Element.py b/grc/gui/Element.py new file mode 100644 index 00000000..31519172 --- /dev/null +++ b/grc/gui/Element.py @@ -0,0 +1,226 @@ +""" +Copyright 2007 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import Colors +import pygtk +pygtk.require('2.0') +import gtk +import pango +from Constants import LINE_SELECT_SENSITIVITY +from Constants import POSSIBLE_ROTATIONS + +class Element(object): + """ + GraphicalElement is the base class for all graphical elements. + It contains an X,Y coordinate, a list of rectangular areas that the element occupies, + and methods to detect selection of those areas. + """ + + def __init__(self, *args, **kwargs): + """ + Make a new list of rectangular areas and lines, and set the coordinate and the rotation. + """ + self.set_rotation(POSSIBLE_ROTATIONS[0]) + self.set_coordinate((0, 0)) + self.clear() + self.set_highlighted(False) + + def is_horizontal(self, rotation=None): + """ + Is this element horizontal? + If rotation is None, use this element's rotation. + @param rotation the optional rotation + @return true if rotation is horizontal + """ + rotation = rotation or self.get_rotation() + return rotation in (0, 180) + + def is_vertical(self, rotation=None): + """ + Is this element vertical? + If rotation is None, use this element's rotation. + @param rotation the optional rotation + @return true if rotation is vertical + """ + rotation = rotation or self.get_rotation() + return rotation in (90, 270) + + def draw(self, gc, window, border_color, bg_color): + """ + Draw in the given window. + @param gc the graphics context + @param window the gtk window to draw on + @param border_color the color for lines and rectangle borders + @param bg_color the color for the inside of the rectangle + """ + X,Y = self.get_coordinate() + for (rX,rY),(W,H) in self.areas_dict[self.get_rotation()]: + aX = X + rX + aY = Y + rY + gc.set_foreground(bg_color) + window.draw_rectangle(gc, True, aX, aY, W, H) + gc.set_foreground(border_color) + window.draw_rectangle(gc, False, aX, aY, W, H) + for (x1, y1),(x2, y2) in self.lines_dict[self.get_rotation()]: + gc.set_foreground(border_color) + window.draw_line(gc, X+x1, Y+y1, X+x2, Y+y2) + + def rotate(self, rotation): + """ + Rotate all of the areas by 90 degrees. + @param rotation multiple of 90 degrees + """ + self.set_rotation((self.get_rotation() + rotation)%360) + + def clear(self): + """Empty the lines and areas.""" + self.areas_dict = dict((rotation, list()) for rotation in POSSIBLE_ROTATIONS) + self.lines_dict = dict((rotation, list()) for rotation in POSSIBLE_ROTATIONS) + + def set_coordinate(self, coor): + """ + Set the reference coordinate. + @param coor the coordinate tuple (x,y) + """ + self.coor = coor + + def get_parent(self): + """ + Get the parent of this element. + @return the parent + """ + return self.parent + + def set_highlighted(self, highlighted): + """ + Set the highlight status. + @param highlighted true to enable highlighting + """ + self.highlighted = highlighted + + def is_highlighted(self): + """ + Get the highlight status. + @return true if highlighted + """ + return self.highlighted + + def get_coordinate(self): + """Get the coordinate. + @return the coordinate tuple (x,y) + """ + return self.coor + + def move(self, delta_coor): + """ + Move the element by adding the delta_coor to the current coordinate. + @param delta_coor (delta_x,delta_y) tuple + """ + deltaX, deltaY = delta_coor + X, Y = self.get_coordinate() + self.set_coordinate((X+deltaX, Y+deltaY)) + + def add_area(self, rel_coor, area, rotation=None): + """ + Add an area to the area list. + An area is actually a coordinate relative to the main coordinate + with a width/height pair relative to the area coordinate. + A positive width is to the right of the coordinate. + A positive height is above the coordinate. + The area is associated with a rotation. + If rotation is not specified, the element's current rotation is used. + @param rel_coor (x,y) offset from this element's coordinate + @param area (width,height) tuple + @param rotation rotation in degrees + """ + self.areas_dict[rotation or self.get_rotation()].append((rel_coor, area)) + + def add_line(self, rel_coor1, rel_coor2, rotation=None): + """ + Add a line to the line list. + A line is defined by 2 relative coordinates. + Lines must be horizontal or vertical. + The line is associated with a rotation. + If rotation is not specified, the element's current rotation is used. + @param rel_coor1 relative (x1,y1) tuple + @param rel_coor2 relative (x2,y2) tuple + @param rotation rotation in degrees + """ + self.lines_dict[rotation or self.get_rotation()].append((rel_coor1, rel_coor2)) + + def what_is_selected(self, coor, coor_m=None): + """ + One coordinate specified: + Is this element selected at given coordinate? + ie: is the coordinate encompassed by one of the areas or lines? + Both coordinates specified: + Is this element within the rectangular region defined by both coordinates? + ie: do any area corners or line endpoints fall within the region? + @param coor the selection coordinate, tuple x, y + @param coor_m an additional selection coordinate. + @return self if one of the areas/lines encompasses coor, else None. + """ + #function to test if p is between a and b (inclusive) + in_between = lambda p, a, b: p >= min(a, b) and p <= max(a, b) + #relative coordinate + x, y = [a-b for a,b in zip(coor, self.get_coordinate())] + if coor_m: + x_m, y_m = [a-b for a,b in zip(coor_m, self.get_coordinate())] + #handle rectangular areas + for (x1,y1), (w,h) in self.areas_dict[self.get_rotation()]: + if in_between(x1, x, x_m) and in_between(y1, y, y_m) or \ + in_between(x1+w, x, x_m) and in_between(y1, y, y_m) or \ + in_between(x1, x, x_m) and in_between(y1+h, y, y_m) or \ + in_between(x1+w, x, x_m) and in_between(y1+h, y, y_m): + return self + #handle horizontal or vertical lines + for (x1, y1), (x2, y2) in self.lines_dict[self.get_rotation()]: + if in_between(x1, x, x_m) and in_between(y1, y, y_m) or \ + in_between(x2, x, x_m) and in_between(y2, y, y_m): + return self + return None + else: + #handle rectangular areas + for (x1,y1), (w,h) in self.areas_dict[self.get_rotation()]: + if in_between(x, x1, x1+w) and in_between(y, y1, y1+h): return self + #handle horizontal or vertical lines + for (x1, y1), (x2, y2) in self.lines_dict[self.get_rotation()]: + if x1 == x2: x1, x2 = x1-LINE_SELECT_SENSITIVITY, x2+LINE_SELECT_SENSITIVITY + if y1 == y2: y1, y2 = y1-LINE_SELECT_SENSITIVITY, y2+LINE_SELECT_SENSITIVITY + if in_between(x, x1, x2) and in_between(y, y1, y2): return self + return None + + def get_rotation(self): + """ + Get the rotation in degrees. + @return the rotation + """ + return self.rotation + + def set_rotation(self, rotation): + """ + Set the rotation in degrees. + @param rotation the rotation""" + if rotation not in POSSIBLE_ROTATIONS: + raise Exception('"%s" is not one of the possible rotations: (%s)'%(rotation, POSSIBLE_ROTATIONS)) + self.rotation = rotation + + def update(self): + """Do nothing for the update. Dummy method.""" + pass diff --git a/grc/gui/FileDialogs.py b/grc/gui/FileDialogs.py new file mode 100644 index 00000000..3b210c33 --- /dev/null +++ b/grc/gui/FileDialogs.py @@ -0,0 +1,175 @@ +""" +Copyright 2007 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk +from Dialogs import MessageDialogHelper +from Constants import \ + DEFAULT_FILE_PATH, IMAGE_FILE_EXTENSION, \ + NEW_FLOGRAPH_TITLE +import Preferences +from os import path +import Utils + +################################################## +# Constants +################################################## +OPEN_FLOW_GRAPH = 'open flow graph' +SAVE_FLOW_GRAPH = 'save flow graph' +SAVE_IMAGE = 'save image' + +FILE_OVERWRITE_MARKUP_TMPL="""\ +File $encode($filename) Exists!\nWould you like to overwrite the existing file?""" + +FILE_DNE_MARKUP_TMPL="""\ +File $encode($filename) Does not Exist!""" + +################################################## +# File Filters +################################################## +##the filter for flow graph files +def get_flow_graph_files_filter(): + filter = gtk.FileFilter() + filter.set_name('Flow Graph Files') + filter.add_pattern('*'+Preferences.file_extension()) + return filter + +##the filter for image files +def get_image_files_filter(): + filter = gtk.FileFilter() + filter.set_name('Image Files') + filter.add_pattern('*'+IMAGE_FILE_EXTENSION) + return filter + +##the filter for all files +def get_all_files_filter(): + filter = gtk.FileFilter() + filter.set_name('All Files') + filter.add_pattern('*') + return filter + +################################################## +# File Dialogs +################################################## +class FileDialogHelper(gtk.FileChooserDialog): + """ + A wrapper class for the gtk file chooser dialog. + Implement a file chooser dialog with only necessary parameters. + """ + + def __init__(self, action, title): + """ + FileDialogHelper contructor. + Create a save or open dialog with cancel and ok buttons. + Use standard settings: no multiple selection, local files only, and the * filter. + @param action gtk.FILE_CHOOSER_ACTION_OPEN or gtk.FILE_CHOOSER_ACTION_SAVE + @param title the title of the dialog (string) + """ + ok_stock = {gtk.FILE_CHOOSER_ACTION_OPEN : 'gtk-open', gtk.FILE_CHOOSER_ACTION_SAVE : 'gtk-save'}[action] + gtk.FileChooserDialog.__init__(self, title, None, action, ('gtk-cancel', gtk.RESPONSE_CANCEL, ok_stock, gtk.RESPONSE_OK)) + self.set_select_multiple(False) + self.set_local_only(True) + self.add_filter(get_all_files_filter()) + +class FileDialog(FileDialogHelper): + """A dialog box to save or open flow graph files. This is a base class, do not use.""" + + def __init__(self, current_file_path=''): + """ + FileDialog constructor. + @param current_file_path the current directory or path to the open flow graph + """ + if not current_file_path: current_file_path = path.join(DEFAULT_FILE_PATH, NEW_FLOGRAPH_TITLE + Preferences.file_extension()) + if self.type == OPEN_FLOW_GRAPH: + FileDialogHelper.__init__(self, gtk.FILE_CHOOSER_ACTION_OPEN, 'Open a Flow Graph from a File...') + self.add_and_set_filter(get_flow_graph_files_filter()) + self.set_select_multiple(True) + elif self.type == SAVE_FLOW_GRAPH: + FileDialogHelper.__init__(self, gtk.FILE_CHOOSER_ACTION_SAVE, 'Save a Flow Graph to a File...') + self.add_and_set_filter(get_flow_graph_files_filter()) + self.set_current_name(path.basename(current_file_path)) #show the current filename + elif self.type == SAVE_IMAGE: + FileDialogHelper.__init__(self, gtk.FILE_CHOOSER_ACTION_SAVE, 'Save a Flow Graph Screen Shot...') + self.add_and_set_filter(get_image_files_filter()) + current_file_path = current_file_path + IMAGE_FILE_EXTENSION + self.set_current_name(path.basename(current_file_path)) #show the current filename + self.set_current_folder(path.dirname(current_file_path)) #current directory + + def add_and_set_filter(self, filter): + """ + Add the gtk file filter to the list of filters and set it as the default file filter. + @param filter a gtk file filter. + """ + self.add_filter(filter) + self.set_filter(filter) + + def get_rectified_filename(self): + """ + Run the dialog and get the filename. + If this is a save dialog and the file name is missing the extension, append the file extension. + If the file name with the extension already exists, show a overwrite dialog. + If this is an open dialog, return a list of filenames. + @return the complete file path + """ + if gtk.FileChooserDialog.run(self) != gtk.RESPONSE_OK: return None #response was cancel + ############################################# + # Handle Save Dialogs + ############################################# + if self.type in (SAVE_FLOW_GRAPH, SAVE_IMAGE): + filename = self.get_filename() + extension = { + SAVE_FLOW_GRAPH: Preferences.file_extension(), + SAVE_IMAGE: IMAGE_FILE_EXTENSION, + }[self.type] + #append the missing file extension if the filter matches + if path.splitext(filename)[1].lower() != extension: filename += extension + self.set_current_name(path.basename(filename)) #show the filename with extension + if path.exists(filename): #ask the user to confirm overwrite + if MessageDialogHelper( + gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, 'Confirm Overwrite!', + Utils.parse_template(FILE_OVERWRITE_MARKUP_TMPL, filename=filename), + ) == gtk.RESPONSE_NO: return self.get_rectified_filename() + return filename + ############################################# + # Handle Open Dialogs + ############################################# + elif self.type in (OPEN_FLOW_GRAPH,): + filenames = self.get_filenames() + for filename in filenames: + if not path.exists(filename): #show a warning and re-run + MessageDialogHelper( + gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, 'Cannot Open!', + Utils.parse_template(FILE_DNE_MARKUP_TMPL, filename=filename), + ) + return self.get_rectified_filename() + return filenames + + def run(self): + """ + Get the filename and destroy the dialog. + @return the filename or None if a close/cancel occured. + """ + filename = self.get_rectified_filename() + self.destroy() + return filename + +class OpenFlowGraphFileDialog(FileDialog): type = OPEN_FLOW_GRAPH +class SaveFlowGraphFileDialog(FileDialog): type = SAVE_FLOW_GRAPH +class SaveImageFileDialog(FileDialog): type = SAVE_IMAGE diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py new file mode 100644 index 00000000..f8028f19 --- /dev/null +++ b/grc/gui/FlowGraph.py @@ -0,0 +1,493 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import SCROLL_PROXIMITY_SENSITIVITY, SCROLL_DISTANCE +from Actions import \ + ELEMENT_CREATE, ELEMENT_SELECT, \ + BLOCK_PARAM_MODIFY, BLOCK_MOVE, \ + ELEMENT_DELETE +import Colors +import Utils +from Element import Element +from .. base import FlowGraph as _FlowGraph +import pygtk +pygtk.require('2.0') +import gtk +import random +import Messages + +class FlowGraph(Element): + """ + FlowGraph is the data structure to store graphical signal blocks, + graphical inputs and outputs, + and the connections between inputs and outputs. + """ + + def __init__(self, *args, **kwargs): + """ + FlowGraph contructor. + Create a list for signal blocks and connections. Connect mouse handlers. + """ + Element.__init__(self) + #when is the flow graph selected? (used by keyboard event handler) + self.is_selected = lambda: bool(self.get_selected_elements()) + #important vars dealing with mouse event tracking + self.element_moved = False + self.mouse_pressed = False + self.unselect() + self.press_coor = (0, 0) + #selected ports + self._old_selected_port = None + self._new_selected_port = None + + ########################################################################### + # Access Drawing Area + ########################################################################### + def get_drawing_area(self): return self.drawing_area + def queue_draw(self): self.get_drawing_area().queue_draw() + def get_size(self): return self.get_drawing_area().get_size_request() + def set_size(self, *args): self.get_drawing_area().set_size_request(*args) + def get_scroll_pane(self): return self.drawing_area.get_parent() + def get_ctrl_mask(self): return self.drawing_area.ctrl_mask + def new_pixmap(self, *args): return self.get_drawing_area().new_pixmap(*args) + + def add_new_block(self, key, coor=None): + """ + Add a block of the given key to this flow graph. + @param key the block key + @param coor an optional coordinate or None for random + """ + id = self._get_unique_id(key) + #calculate the position coordinate + h_adj = self.get_scroll_pane().get_hadjustment() + v_adj = self.get_scroll_pane().get_vadjustment() + if coor is None: coor = ( + int(random.uniform(.25, .75)*h_adj.page_size + h_adj.get_value()), + int(random.uniform(.25, .75)*v_adj.page_size + v_adj.get_value()), + ) + #get the new block + block = self.get_new_block(key) + block.set_coordinate(coor) + block.set_rotation(0) + block.get_param('id').set_value(id) + self.handle_states(ELEMENT_CREATE) + + ########################################################################### + # Copy Paste + ########################################################################### + def copy_to_clipboard(self): + """ + Copy the selected blocks and connections into the clipboard. + @return the clipboard + """ + #get selected blocks + blocks = self.get_selected_blocks() + if not blocks: return None + #calc x and y min + x_min, y_min = blocks[0].get_coordinate() + for block in blocks: + x, y = block.get_coordinate() + x_min = min(x, x_min) + y_min = min(y, y_min) + #get connections between selected blocks + connections = filter( + lambda c: c.get_source().get_parent() in blocks and c.get_sink().get_parent() in blocks, + self.get_connections(), + ) + clipboard = ( + (x_min, y_min), + [block.export_data() for block in blocks], + [connection.export_data() for connection in connections], + ) + return clipboard + + def paste_from_clipboard(self, clipboard): + """ + Paste the blocks and connections from the clipboard. + @param clipboard the nested data of blocks, connections + """ + selected = set() + (x_min, y_min), blocks_n, connections_n = clipboard + old_id2block = dict() + #recalc the position + h_adj = self.get_scroll_pane().get_hadjustment() + v_adj = self.get_scroll_pane().get_vadjustment() + x_off = h_adj.get_value() - x_min + h_adj.page_size/4 + y_off = v_adj.get_value() - y_min + v_adj.page_size/4 + #create blocks + for block_n in blocks_n: + block_key = block_n.find('key') + if block_key == 'options': continue + block = self.get_new_block(block_key) + selected.add(block) + #set params + params_n = block_n.findall('param') + for param_n in params_n: + param_key = param_n.find('key') + param_value = param_n.find('value') + #setup id parameter + if param_key == 'id': + old_id2block[param_value] = block + #if the block id is not unique, get a new block id + if param_value in [block.get_id() for block in self.get_blocks()]: + param_value = self._get_unique_id(param_value) + #set value to key + block.get_param(param_key).set_value(param_value) + #move block to offset coordinate + block.move((x_off, y_off)) + #update before creating connections + self.update() + #create connections + for connection_n in connections_n: + source = old_id2block[connection_n.find('source_block_id')].get_source(connection_n.find('source_key')) + sink = old_id2block[connection_n.find('sink_block_id')].get_sink(connection_n.find('sink_key')) + self.connect(source, sink) + #set all pasted elements selected + for block in selected: selected = selected.union(set(block.get_connections())) + self._selected_elements = list(selected) + + ########################################################################### + # Modify Selected + ########################################################################### + def type_controller_modify_selected(self, direction): + """ + Change the registered type controller for the selected signal blocks. + @param direction +1 or -1 + @return true for change + """ + return any([sb.type_controller_modify(direction) for sb in self.get_selected_blocks()]) + + def port_controller_modify_selected(self, direction): + """ + Change port controller for the selected signal blocks. + @param direction +1 or -1 + @return true for changed + """ + return any([sb.port_controller_modify(direction) for sb in self.get_selected_blocks()]) + + def enable_selected(self, enable): + """ + Enable/disable the selected blocks. + @param enable true to enable + @return true if changed + """ + changed = False + for selected_block in self.get_selected_blocks(): + if selected_block.get_enabled() != enable: + selected_block.set_enabled(enable) + changed = True + return changed + + def move_selected(self, delta_coordinate): + """ + Move the element and by the change in coordinates. + @param delta_coordinate the change in coordinates + """ + for selected_block in self.get_selected_blocks(): + selected_block.move(delta_coordinate) + self.element_moved = True + + def rotate_selected(self, rotation): + """ + Rotate the selected blocks by multiples of 90 degrees. + @param rotation the rotation in degrees + @return true if changed, otherwise false. + """ + if not self.get_selected_blocks(): return False + #initialize min and max coordinates + min_x, min_y = self.get_selected_block().get_coordinate() + max_x, max_y = self.get_selected_block().get_coordinate() + #rotate each selected block, and find min/max coordinate + for selected_block in self.get_selected_blocks(): + selected_block.rotate(rotation) + #update the min/max coordinate + x, y = selected_block.get_coordinate() + min_x, min_y = min(min_x, x), min(min_y, y) + max_x, max_y = max(max_x, x), max(max_y, y) + #calculate center point of slected blocks + ctr_x, ctr_y = (max_x + min_x)/2, (max_y + min_y)/2 + #rotate the blocks around the center point + for selected_block in self.get_selected_blocks(): + x, y = selected_block.get_coordinate() + x, y = Utils.get_rotated_coordinate((x - ctr_x, y - ctr_y), rotation) + selected_block.set_coordinate((x + ctr_x, y + ctr_y)) + return True + + def remove_selected(self): + """ + Remove selected elements + @return true if changed. + """ + changed = False + for selected_element in self.get_selected_elements(): + self.remove_element(selected_element) + changed = True + return changed + + def draw(self, gc, window): + """ + Draw the background and grid if enabled. + Draw all of the elements in this flow graph onto the pixmap. + Draw the pixmap to the drawable window of this flow graph. + """ + W,H = self.get_size() + #draw the background + gc.set_foreground(Colors.FLOWGRAPH_BACKGROUND_COLOR) + window.draw_rectangle(gc, True, 0, 0, W, H) + #draw multi select rectangle + if self.mouse_pressed and (not self.get_selected_elements() or self.get_ctrl_mask()): + #coordinates + x1, y1 = self.press_coor + x2, y2 = self.get_coordinate() + #calculate top-left coordinate and width/height + x, y = int(min(x1, x2)), int(min(y1, y2)) + w, h = int(abs(x1 - x2)), int(abs(y1 - y2)) + #draw + gc.set_foreground(Colors.HIGHLIGHT_COLOR) + window.draw_rectangle(gc, True, x, y, w, h) + gc.set_foreground(Colors.BORDER_COLOR) + window.draw_rectangle(gc, False, x, y, w, h) + #draw blocks on top of connections + for element in self.get_connections() + self.get_blocks(): + element.draw(gc, window) + #draw selected blocks on top of selected connections + for selected_element in self.get_selected_connections() + self.get_selected_blocks(): + selected_element.draw(gc, window) + + def update_selected(self): + """ + Remove deleted elements from the selected elements list. + Update highlighting so only the selected are highlighted. + """ + selected_elements = self.get_selected_elements() + elements = self.get_elements() + #remove deleted elements + for selected in selected_elements: + if selected in elements: continue + selected_elements.remove(selected) + try: assert self._old_selected_port.get_parent() in elements + except: self._old_selected_port = None + try: assert self._new_selected_port.get_parent() in elements + except: self._new_selected_port = None + #update highlighting + for element in elements: + element.set_highlighted(element in selected_elements) + + def update(self): + """ + Call update on all elements. + """ + self.validate() + for element in self.get_elements(): element.update() + + ########################################################################## + ## Get Selected + ########################################################################## + def unselect(self): + """ + Set selected elements to an empty set. + """ + self._selected_elements = [] + + def what_is_selected(self, coor, coor_m=None): + """ + What is selected? + At the given coordinate, return the elements found to be selected. + If coor_m is unspecified, return a list of only the first element found to be selected: + Iterate though the elements backwards since top elements are at the end of the list. + If an element is selected, place it at the end of the list so that is is drawn last, + and hence on top. Update the selected port information. + @param coor the coordinate of the mouse click + @param coor_m the coordinate for multi select + @return the selected blocks and connections or an empty list + """ + selected_port = None + selected = set() + #check the elements + for element in reversed(self.get_elements()): + selected_element = element.what_is_selected(coor, coor_m) + if not selected_element: continue + #update the selected port information + if selected_element.is_port(): + if not coor_m: selected_port = selected_element + selected_element = selected_element.get_parent() + selected.add(selected_element) + #place at the end of the list + self.get_elements().remove(element) + self.get_elements().append(element) + #single select mode, break + if not coor_m: break + #update selected ports + self._old_selected_port = self._new_selected_port + self._new_selected_port = selected_port + return list(selected) + + def get_selected_connections(self): + """ + Get a group of selected connections. + @return sub set of connections in this flow graph + """ + selected = set() + for selected_element in self.get_selected_elements(): + if selected_element.is_connection(): selected.add(selected_element) + return list(selected) + + def get_selected_blocks(self): + """ + Get a group of selected blocks. + @return sub set of blocks in this flow graph + """ + selected = set() + for selected_element in self.get_selected_elements(): + if selected_element.is_block(): selected.add(selected_element) + return list(selected) + + def get_selected_block(self): + """ + Get the selected block when a block or port is selected. + @return a block or None + """ + return self.get_selected_blocks() and self.get_selected_blocks()[0] or None + + def get_selected_elements(self): + """ + Get the group of selected elements. + @return sub set of elements in this flow graph + """ + return self._selected_elements + + def get_selected_element(self): + """ + Get the selected element. + @return a block, port, or connection or None + """ + return self.get_selected_elements() and self.get_selected_elements()[0] or None + + def update_selected_elements(self): + """ + Update the selected elements. + The update behavior depends on the state of the mouse button. + When the mouse button pressed the selection will change when + the control mask is set or the new selection is not in the current group. + When the mouse button is released the selection will change when + the mouse has moved and the control mask is set or the current group is empty. + Attempt to make a new connection if the old and ports are filled. + If the control mask is set, merge with the current elements. + """ + selected_elements = None + if self.mouse_pressed: + new_selections = self.what_is_selected(self.get_coordinate()) + #update the selections if the new selection is not in the current selections + #allows us to move entire selected groups of elements + if self.get_ctrl_mask() or not ( + new_selections and new_selections[0] in self.get_selected_elements() + ): selected_elements = new_selections + else: #called from a mouse release + if not self.element_moved and (not self.get_selected_elements() or self.get_ctrl_mask()): + selected_elements = self.what_is_selected(self.get_coordinate(), self.press_coor) + #this selection and the last were ports, try to connect them + if self._old_selected_port and self._new_selected_port and \ + self._old_selected_port is not self._new_selected_port: + try: + self.connect(self._old_selected_port, self._new_selected_port) + self.handle_states(ELEMENT_CREATE) + except: Messages.send_fail_connection() + self._old_selected_port = None + self._new_selected_port = None + return + #update selected elements + if selected_elements is None: return + old_elements = set(self.get_selected_elements()) + self._selected_elements = list(set(selected_elements)) + new_elements = set(self.get_selected_elements()) + #if ctrl, set the selected elements to the union - intersection of old and new + if self.get_ctrl_mask(): + self._selected_elements = list( + set.union(old_elements, new_elements) - set.intersection(old_elements, new_elements) + ) + self.handle_states(ELEMENT_SELECT) + + ########################################################################## + ## Event Handlers + ########################################################################## + def handle_mouse_button_press(self, left_click, double_click, coordinate): + """ + A mouse button is pressed, only respond to left clicks. + Find the selected element. Attempt a new connection if possible. + Open the block params window on a double click. + Update the selection state of the flow graph. + """ + if not left_click: return + self.press_coor = coordinate + self.set_coordinate(coordinate) + self.time = 0 + self.mouse_pressed = True + if double_click: self.unselect() + self.update_selected_elements() + #double click detected, bring up params dialog if possible + if double_click and self.get_selected_block(): + self.mouse_pressed = False + self.handle_states(BLOCK_PARAM_MODIFY) + + def handle_mouse_button_release(self, left_click, coordinate): + """ + A mouse button is released, record the state. + """ + if not left_click: return + self.set_coordinate(coordinate) + self.time = 0 + self.mouse_pressed = False + if self.element_moved: + self.handle_states(BLOCK_MOVE) + self.element_moved = False + self.update_selected_elements() + + def handle_mouse_motion(self, coordinate): + """ + The mouse has moved, respond to mouse dragging. + Move a selected element to the new coordinate. + Auto-scroll the scroll bars at the boundaries. + """ + #to perform a movement, the mouse must be pressed, no pending events + if gtk.events_pending() or not self.mouse_pressed: return + #perform autoscrolling + width, height = self.get_size() + x, y = coordinate + h_adj = self.get_scroll_pane().get_hadjustment() + v_adj = self.get_scroll_pane().get_vadjustment() + for pos, length, adj, adj_val, adj_len in ( + (x, width, h_adj, h_adj.get_value(), h_adj.page_size), + (y, height, v_adj, v_adj.get_value(), v_adj.page_size), + ): + #scroll if we moved near the border + if pos-adj_val > adj_len-SCROLL_PROXIMITY_SENSITIVITY and adj_val+SCROLL_DISTANCE < length-adj_len: + adj.set_value(adj_val+SCROLL_DISTANCE) + adj.emit('changed') + elif pos-adj_val < SCROLL_PROXIMITY_SENSITIVITY: + adj.set_value(adj_val-SCROLL_DISTANCE) + adj.emit('changed') + #remove the connection if selected in drag event + if len(self.get_selected_elements()) == 1 and self.get_selected_element().is_connection(): + self.handle_states(ELEMENT_DELETE) + #move the selected elements and record the new coordinate + X, Y = self.get_coordinate() + if not self.get_ctrl_mask(): self.move_selected((int(x - X), int(y - Y))) + self.set_coordinate((x, y)) + #queue draw for animation + self.queue_draw() diff --git a/grc/gui/MainWindow.py b/grc/gui/MainWindow.py new file mode 100644 index 00000000..6d36f4cf --- /dev/null +++ b/grc/gui/MainWindow.py @@ -0,0 +1,324 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import \ + NEW_FLOGRAPH_TITLE, DEFAULT_REPORTS_WINDOW_WIDTH +from Actions import \ + APPLICATION_QUIT, FLOW_GRAPH_KILL, \ + FLOW_GRAPH_SAVE, get_accel_group +import pygtk +pygtk.require('2.0') +import gtk +import Bars +from BlockTreeWindow import BlockTreeWindow +from Dialogs import TextDisplay, MessageDialogHelper +from NotebookPage import NotebookPage +import Preferences +import Messages +import Utils +import os + +MAIN_WINDOW_TITLE_TMPL = """\ +#if not $saved +*#slurp +#end if +#if $basename +$basename#slurp +#else +$new_flowgraph_title#slurp +#end if +#if $read_only + (read only)#slurp +#end if +#if $dirname + - $dirname#slurp +#end if + - $platform_name#slurp +""" + +PAGE_TITLE_MARKUP_TMPL = """\ +#set $foreground = $saved and 'black' or 'red' +$encode($title or $new_flowgraph_title)#slurp +#if $read_only + (ro)#slurp +#end if +""" + +############################################################ +# Main window +############################################################ + +class MainWindow(gtk.Window): + """The topmost window with menus, the tool bar, and other major windows.""" + + def __init__(self, handle_states, platform): + """ + MainWindow contructor. + @param handle_states the callback function + """ + self._platform = platform + #setup window + self.handle_states = handle_states + gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) + vbox = gtk.VBox() + self.hpaned = gtk.HPaned() + self.add(vbox) + #create the menu bar and toolbar + self.add_accel_group(get_accel_group()) + vbox.pack_start(Bars.MenuBar(), False) + vbox.pack_start(Bars.Toolbar(), False) + vbox.pack_start(self.hpaned) + #create the notebook + self.notebook = gtk.Notebook() + self.page_to_be_closed = None + self.current_page = None + self.notebook.set_show_border(False) + self.notebook.set_scrollable(True) #scroll arrows for page tabs + self.notebook.connect('switch-page', self._handle_page_change) + #setup containers + self.flow_graph_vpaned = gtk.VPaned() + #flow_graph_box.pack_start(self.scrolled_window) + self.flow_graph_vpaned.pack1(self.notebook) + self.hpaned.pack1(self.flow_graph_vpaned) + self.hpaned.pack2(BlockTreeWindow(platform, self.get_flow_graph), False) #dont allow resize + #create the reports window + self.text_display = TextDisplay() + #house the reports in a scrolled window + self.reports_scrolled_window = gtk.ScrolledWindow() + self.reports_scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.reports_scrolled_window.add_with_viewport(self.text_display) + self.reports_scrolled_window.set_size_request(-1, DEFAULT_REPORTS_WINDOW_WIDTH) + self.flow_graph_vpaned.pack2(self.reports_scrolled_window, False) #dont allow resize + #load preferences and show the main window + Preferences.load(platform) + self.resize(*Preferences.main_window_size()) + self.flow_graph_vpaned.set_position(Preferences.reports_window_position()) + self.hpaned.set_position(Preferences.blocks_window_position()) + self.show_all() + + ############################################################ + # Event Handlers + ############################################################ + + def _quit(self, window, event): + """ + Handle the delete event from the main window. + Generated by pressing X to close, alt+f4, or right click+close. + This method in turns calls the state handler to quit. + @return true + """ + self.handle_states(APPLICATION_QUIT) + return True + + def _handle_page_change(self, notebook, page, page_num): + """ + Handle a page change. When the user clicks on a new tab, + reload the flow graph to update the vars window and + call handle states (select nothing) to update the buttons. + @param notebook the notebook + @param page new page + @param page_num new page number + """ + self.current_page = self.notebook.get_nth_page(page_num) + Messages.send_page_switch(self.current_page.get_file_path()) + self.handle_states() + + ############################################################ + # Report Window + ############################################################ + + def add_report_line(self, line): + """ + Place line at the end of the text buffer, then scroll its window all the way down. + @param line the new text + """ + self.text_display.insert(line) + vadj = self.reports_scrolled_window.get_vadjustment() + vadj.set_value(vadj.upper) + vadj.emit('changed') + + ############################################################ + # Pages: create and close + ############################################################ + + def new_page(self, file_path='', show=False): + """ + Create a new notebook page. + Set the tab to be selected. + @param file_path optional file to load into the flow graph + @param show true if the page should be shown after loading + """ + #if the file is already open, show the open page and return + if file_path and file_path in self._get_files(): #already open + page = self.notebook.get_nth_page(self._get_files().index(file_path)) + self._set_page(page) + return + try: #try to load from file + if file_path: Messages.send_start_load(file_path) + flow_graph = self._platform.get_new_flow_graph() + page = NotebookPage( + self, + flow_graph=flow_graph, + file_path=file_path, + ) + if file_path: Messages.send_end_load() + except Exception, e: #return on failure + Messages.send_fail_load(e) + return + #add this page to the notebook + self.notebook.append_page(page, page.get_tab()) + try: self.notebook.set_tab_reorderable(page, True) + except: pass #gtk too old + self.notebook.set_tab_label_packing(page, False, False, gtk.PACK_START) + #only show if blank or manual + if not file_path or show: self._set_page(page) + + def close_pages(self): + """ + Close all the pages in this notebook. + @return true if all closed + """ + open_files = filter(lambda file: file, self._get_files()) #filter blank files + open_file = self.get_page().get_file_path() + #close each page + for page in self._get_pages(): + self.page_to_be_closed = page + self.close_page(False) + if self.notebook.get_n_pages(): return False + #save state before closing + Preferences.files_open(open_files) + Preferences.file_open(open_file) + Preferences.main_window_size(self.get_size()) + Preferences.reports_window_position(self.flow_graph_vpaned.get_position()) + Preferences.blocks_window_position(self.hpaned.get_position()) + Preferences.save() + return True + + def close_page(self, ensure=True): + """ + Close the current page. + If the notebook becomes empty, and ensure is true, + call new page upon exit to ensure that at least one page exists. + @param ensure boolean + """ + if not self.page_to_be_closed: self.page_to_be_closed = self.get_page() + #show the page if it has an executing flow graph or is unsaved + if self.page_to_be_closed.get_pid() or not self.page_to_be_closed.get_saved(): + self._set_page(self.page_to_be_closed) + #unsaved? ask the user + if not self.page_to_be_closed.get_saved() and self._save_changes(): + self.handle_states(FLOW_GRAPH_SAVE) #try to save + if not self.page_to_be_closed.get_saved(): #still unsaved? + self.page_to_be_closed = None #set the page to be closed back to None + return + #stop the flow graph if executing + if self.page_to_be_closed.get_pid(): self.handle_states(FLOW_GRAPH_KILL) + #remove the page + self.notebook.remove_page(self.notebook.page_num(self.page_to_be_closed)) + if ensure and self.notebook.get_n_pages() == 0: self.new_page() #no pages, make a new one + self.page_to_be_closed = None #set the page to be closed back to None + + ############################################################ + # Misc + ############################################################ + + def update(self): + """ + Set the title of the main window. + Set the titles on the page tabs. + Show/hide the reports window. + @param title the window title + """ + gtk.Window.set_title(self, Utils.parse_template(MAIN_WINDOW_TITLE_TMPL, + basename=os.path.basename(self.get_page().get_file_path()), + dirname=os.path.dirname(self.get_page().get_file_path()), + new_flowgraph_title=NEW_FLOGRAPH_TITLE, + read_only=self.get_page().get_read_only(), + saved=self.get_page().get_saved(), + platform_name=self._platform.get_name(), + ) + ) + #set tab titles + for page in self._get_pages(): page.set_markup( + Utils.parse_template(PAGE_TITLE_MARKUP_TMPL, + #get filename and strip out file extension + title=os.path.splitext(os.path.basename(page.get_file_path()))[0], + read_only=page.get_read_only(), saved=page.get_saved(), + new_flowgraph_title=NEW_FLOGRAPH_TITLE, + ) + ) + #show/hide notebook tabs + self.notebook.set_show_tabs(len(self._get_pages()) > 1) + + def get_page(self): + """ + Get the selected page. + @return the selected page + """ + return self.current_page + + def get_flow_graph(self): + """ + Get the selected flow graph. + @return the selected flow graph + """ + return self.get_page().get_flow_graph() + + def get_focus_flag(self): + """ + Get the focus flag from the current page. + @return the focus flag + """ + return self.get_page().get_drawing_area().get_focus_flag() + + ############################################################ + # Helpers + ############################################################ + + def _set_page(self, page): + """ + Set the current page. + @param page the page widget + """ + self.current_page = page + self.notebook.set_current_page(self.notebook.page_num(self.current_page)) + + def _save_changes(self): + """ + Save changes to flow graph? + @return true if yes + """ + return MessageDialogHelper( + gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, 'Unsaved Changes!', + 'Would you like to save changes before closing?' + ) == gtk.RESPONSE_YES + + def _get_files(self): + """ + Get the file names for all the pages, in order. + @return list of file paths + """ + return map(lambda page: page.get_file_path(), self._get_pages()) + + def _get_pages(self): + """ + Get a list of all pages in the notebook. + @return list of pages + """ + return [self.notebook.get_nth_page(page_num) for page_num in range(self.notebook.get_n_pages())] diff --git a/grc/gui/Makefile.am b/grc/gui/Makefile.am new file mode 100644 index 00000000..cb45d535 --- /dev/null +++ b/grc/gui/Makefile.am @@ -0,0 +1,49 @@ +# +# Copyright 2008, 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. +# + +include $(top_srcdir)/grc/Makefile.inc + +ourpythondir = $(grc_src_prefix)/gui +ourpython_PYTHON = \ + Block.py \ + Colors.py \ + Constants.py \ + Connection.py \ + Element.py \ + FlowGraph.py \ + Param.py \ + Platform.py \ + Port.py \ + Utils.py \ + ActionHandler.py \ + Actions.py \ + Bars.py \ + BlockTreeWindow.py \ + Dialogs.py \ + DrawingArea.py \ + FileDialogs.py \ + MainWindow.py \ + Messages.py \ + NotebookPage.py \ + ParamsDialog.py \ + Preferences.py \ + StateCache.py \ + __init__.py diff --git a/grc/gui/Makefile.in b/grc/gui/Makefile.in new file mode 100644 index 00000000..7c336a7b --- /dev/null +++ b/grc/gui/Makefile.in @@ -0,0 +1,963 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008, 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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(ourpython_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/grc/Makefile.inc +subdir = grc/gui +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourpythondir)" +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +ourpythondir = $(grc_src_prefix)/gui +ourpython_PYTHON = \ + Block.py \ + Colors.py \ + Constants.py \ + Connection.py \ + Element.py \ + FlowGraph.py \ + Param.py \ + Platform.py \ + Port.py \ + Utils.py \ + ActionHandler.py \ + Actions.py \ + Bars.py \ + BlockTreeWindow.py \ + Dialogs.py \ + DrawingArea.py \ + FileDialogs.py \ + MainWindow.py \ + Messages.py \ + NotebookPage.py \ + ParamsDialog.py \ + Preferences.py \ + StateCache.py \ + __init__.py + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/gui/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/gui/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(ourpythondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-ourpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-ourpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/gui/Messages.py b/grc/gui/Messages.py new file mode 100644 index 00000000..80057e0b --- /dev/null +++ b/grc/gui/Messages.py @@ -0,0 +1,104 @@ +""" +Copyright 2007 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import traceback +import sys + +## A list of functions that can receive a message. +MESSENGERS_LIST = list() + +def register_messenger(messenger): + """ + Append the given messenger to the list of messengers. + @param messenger a method thats takes a string + """ + MESSENGERS_LIST.append(messenger) + +def send(message): + """ + Give the message to each of the messengers. + @param message a message string + """ + for messenger in MESSENGERS_LIST: messenger(message) + +#register stdout by default +register_messenger(sys.stdout.write) + +########################################################################### +# Special functions for specific program functionalities +########################################################################### +def send_init(platform): + send("""<<< Welcome to %s %s >>>\n"""%(platform.get_name(), platform.get_version())) + +def send_page_switch(file_path): + send('\nShowing: "%s"\n'%file_path) + +################# functions for loading flow graphs ######################################## +def send_start_load(file_path): + send('\nLoading: "%s"'%file_path + '\n') + +def send_error_load(error): + send('>>> Error: %s\n'%error) + traceback.print_exc() + +def send_end_load(): + send('>>> Done\n') + +def send_fail_load(error): + send('Error: %s\n'%error) + send('>>> Failue\n') + traceback.print_exc() + +################# functions for generating flow graphs ######################################## +def send_start_gen(file_path): + send('\nGenerating: "%s"'%file_path + '\n') + +def send_fail_gen(error): + send('Generate Error: %s\n'%error) + send('>>> Failue\n') + traceback.print_exc() + +################# functions for executing flow graphs ######################################## +def send_start_exec(file_path): + send('\nExecuting: "%s"'%file_path + '\n') + +def send_verbose_exec(verbose): + send(verbose) + +def send_end_exec(): + send('\n>>> Done\n') + +################# functions for saving flow graphs ######################################## +def send_fail_save(file_path): + send('>>> Error: Cannot save: %s\n'%file_path) + +################# functions for connections ######################################## +def send_fail_connection(): + send('>>> Error: Cannot create connection.\n') + +################# functions for preferences ######################################## +def send_fail_load_preferences(prefs_file_path): + send('>>> Error: Cannot load preferences file: "%s"\n'%prefs_file_path) + +def send_fail_save_preferences(prefs_file_path): + send('>>> Error: Cannot save preferences file: "%s"\n'%prefs_file_path) + +################# functions for warning ######################################## +def send_warning(warning): + send('>>> Warning: %s\n'%warning) diff --git a/grc/gui/NotebookPage.py b/grc/gui/NotebookPage.py new file mode 100644 index 00000000..cb6b7ed3 --- /dev/null +++ b/grc/gui/NotebookPage.py @@ -0,0 +1,188 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Actions import FLOW_GRAPH_CLOSE +import pygtk +pygtk.require('2.0') +import gtk +from StateCache import StateCache +from Constants import MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT +from DrawingArea import DrawingArea +import os + +############################################################ +## Notebook Page +############################################################ + +class NotebookPage(gtk.HBox): + """A page in the notebook.""" + + def __init__(self, main_window, flow_graph, file_path=''): + """ + Page constructor. + @param main_window main window + @param file_path path to a flow graph file + """ + self._flow_graph = flow_graph + self.set_pid(None) + #import the file + self.main_window = main_window + self.set_file_path(file_path) + initial_state = flow_graph.get_parent().parse_flow_graph(file_path) + self.state_cache = StateCache(initial_state) + self.set_saved(True) + #import the data to the flow graph + self.get_flow_graph().import_data(initial_state) + #initialize page gui + gtk.HBox.__init__(self, False, 0) + self.show() + #tab box to hold label and close button + self.tab = gtk.HBox(False, 0) + #setup tab label + self.label = gtk.Label() + self.tab.pack_start(self.label, False) + #setup button image + image = gtk.Image() + image.set_from_stock('gtk-close', gtk.ICON_SIZE_MENU) + #setup image box + image_box = gtk.HBox(False, 0) + image_box.pack_start(image, True, False, 0) + #setup the button + button = gtk.Button() + button.connect("clicked", self._handle_button) + button.set_relief(gtk.RELIEF_NONE) + button.add(image_box) + #button size + w, h = gtk.icon_size_lookup_for_settings(button.get_settings(), gtk.ICON_SIZE_MENU) + button.set_size_request(w+6, h+6) + self.tab.pack_start(button, False) + self.tab.show_all() + #setup scroll window and drawing area + self.scrolled_window = gtk.ScrolledWindow() + self.scrolled_window.set_size_request(MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT) + self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.drawing_area = DrawingArea(self.get_flow_graph()) + self.scrolled_window.add_with_viewport(self.get_drawing_area()) + self.pack_start(self.scrolled_window) + #inject drawing area and handle states into flow graph + self.get_flow_graph().drawing_area = self.get_drawing_area() + self.get_flow_graph().handle_states = main_window.handle_states + self.show_all() + + def get_drawing_area(self): return self.drawing_area + + def get_generator(self): + """ + Get the generator object for this flow graph. + @return generator + """ + return self.get_flow_graph().get_parent().get_generator()( + self.get_flow_graph(), + self.get_file_path(), + ) + + def _handle_button(self, button): + """ + The button was clicked. + Make the current page selected, then close. + @param the button + """ + self.main_window.page_to_be_closed = self + self.main_window.handle_states(FLOW_GRAPH_CLOSE) + + def set_markup(self, markup): + """ + Set the markup in this label. + @param markup the new markup text + """ + self.label.set_markup(markup) + + def get_tab(self): + """ + Get the gtk widget for this page's tab. + @return gtk widget + """ + return self.tab + + def get_pid(self): + """ + Get the pid for the flow graph. + @return the pid number + """ + return self.pid + + def set_pid(self, pid): + """ + Set the pid number. + @param pid the new pid number + """ + self.pid = pid + + def get_flow_graph(self): + """ + Get the flow graph. + @return the flow graph + """ + return self._flow_graph + + def get_read_only(self): + """ + Get the read-only state of the file. + Always false for empty path. + @return true for read-only + """ + if not self.get_file_path(): return False + return os.path.exists(self.get_file_path()) and \ + not os.access(self.get_file_path(), os.W_OK) + + def get_file_path(self): + """ + Get the file path for the flow graph. + @return the file path or '' + """ + return self.file_path + + def set_file_path(self, file_path=''): + """ + Set the file path, '' for no file path. + @param file_path file path string + """ + if file_path: self.file_path = os.path.abspath(file_path) + else: self.file_path = '' + + def get_saved(self): + """ + Get the saved status for the flow graph. + @return true if saved + """ + return self.saved + + def set_saved(self, saved=True): + """ + Set the saved status. + @param saved boolean status + """ + self.saved = saved + + def get_state_cache(self): + """ + Get the state cache for the flow graph. + @return the state cache + """ + return self.state_cache diff --git a/grc/gui/Param.py b/grc/gui/Param.py new file mode 100644 index 00000000..a11fd906 --- /dev/null +++ b/grc/gui/Param.py @@ -0,0 +1,103 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import Utils +from Element import Element +import pygtk +pygtk.require('2.0') +import gtk + +PARAM_MARKUP_TMPL="""\ +#set $foreground = $param.is_valid() and 'black' or 'red' +$encode($param.get_name()): $encode(repr($param))""" + +PARAM_LABEL_MARKUP_TMPL="""\ +#set $foreground = $param.is_valid() and 'black' or 'red' +#set $underline = $has_cb and 'low' or 'none' +$encode($param.get_name())""" + +TIP_MARKUP_TMPL="""\ +Key: $param.get_key() +Type: $param.get_type() +#if $param.is_valid() +Value: $param.get_evaluated() +#elif len($param.get_error_messages()) == 1 +Error: $(param.get_error_messages()[0]) +#else +Error: + #for $error_msg in $param.get_error_messages() + * $error_msg + #end for +#end if""" + +class Param(Element): + """The graphical parameter.""" + + def update(self): + """ + Called when an external change occurs. + Update the graphical input by calling the change handler. + """ + if hasattr(self, '_input'): self._handle_changed() + + def get_input_object(self, callback=None): + """ + Get the graphical gtk object to represent this parameter. + Create the input object with this data type and the handle changed method. + @param callback a function of one argument(this param) to be called from the change handler + @return gtk input object + """ + self._callback = callback + self._input = self.get_input_class()(self, self._handle_changed) + if not self._callback: self.update() + return self._input + + def _handle_changed(self, widget=None): + """ + When the input changes, write the inputs to the data type. + Finish by calling the exteral callback. + """ + self.set_value(self._input.get_text()) + self.validate() + #is param is involved in a callback? #FIXME: messy + has_cb = \ + hasattr(self.get_parent(), 'get_callbacks') and \ + filter(lambda c: self.get_key() in c, self.get_parent()._callbacks) + self._input.set_markup(Utils.parse_template(PARAM_LABEL_MARKUP_TMPL, param=self, has_cb=has_cb)) + #hide/show + if self.get_hide() == 'all': self._input.hide_all() + else: self._input.show_all() + #set the color + self._input.set_color(self.get_color()) + #set the tooltip + if self._input.tp: self._input.tp.set_tip( + self._input.entry, + Utils.parse_template(TIP_MARKUP_TMPL, param=self).strip(), + ) + #execute the external callback + if self._callback: self._callback(self) + + def get_layout(self): + """ + Create a layout based on the current markup. + @return the pango layout + """ + layout = gtk.DrawingArea().create_pango_layout('') + layout.set_markup(Utils.parse_template(PARAM_MARKUP_TMPL, param=self)) + return layout diff --git a/grc/gui/ParamsDialog.py b/grc/gui/ParamsDialog.py new file mode 100644 index 00000000..ccf19d1a --- /dev/null +++ b/grc/gui/ParamsDialog.py @@ -0,0 +1,145 @@ +""" +Copyright 2007, 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk + +from Dialogs import TextDisplay +from Constants import MIN_DIALOG_WIDTH, MIN_DIALOG_HEIGHT + +def get_title_label(title): + """ + Get a title label for the params window. + The title will be bold, underlined, and left justified. + @param title the text of the title + @return a gtk object + """ + label = gtk.Label() + label.set_markup('\n%s:\n'%title) + hbox = gtk.HBox() + hbox.pack_start(label, False, False, padding=11) + return hbox + +class ParamsDialog(gtk.Dialog): + """A dialog box to set block parameters.""" + + def __init__(self, block): + """ + SignalBlockParamsDialog contructor. + @param block the signal block + """ + gtk.Dialog.__init__(self, + title='Properties: %s'%block.get_name(), + buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE), + ) + self.block = block + self.set_size_request(MIN_DIALOG_WIDTH, MIN_DIALOG_HEIGHT) + vbox = gtk.VBox() + #Add the title label + vbox.pack_start(get_title_label('Parameters'), False) + #Create the scrolled window to hold all the parameters + scrolled_window = gtk.ScrolledWindow() + scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scrolled_window.add_with_viewport(vbox) + self.vbox.pack_start(scrolled_window, True) + #Error Messages for the block + self._error_box = gtk.VBox() + self._error_messages_text_display = TextDisplay() + self._error_box.pack_start(gtk.Label(), False, False, 7) #spacing + self._error_box.pack_start(get_title_label('Error Messages'), False) + self._error_box.pack_start(self._error_messages_text_display, False) + #Docs for the block + self._docs_box = err_box = gtk.VBox() + self._docs_text_display = TextDisplay() + self._docs_box.pack_start(gtk.Label(), False, False, 7) #spacing + self._docs_box.pack_start(get_title_label('Documentation'), False) + self._docs_box.pack_start(self._docs_text_display, False) + #Add all the parameters + for param in self.block.get_params(): + vbox.pack_start(param.get_input_object(self._handle_changed), False) + #Add the error and docs box + vbox.pack_start(self._error_box, False) + vbox.pack_start(self._docs_box, False) + #connect and show + self.connect('key_press_event', self._handle_key_press) + self.show_all() + #initial update + for param in self.block.get_params(): param.update() + self._update() + + def _update(self): + """ + Update the error messages box. + Hide the box if there are no errors. + Update the documentation block. + Hide the box if there are no docs. + """ + self.block.validate() + #update the errors box + if self.block.is_valid(): self._error_box.hide() + else: self._error_box.show() + messages = '\n\n'.join(self.block.get_error_messages()) + self._error_messages_text_display.set_text(messages) + #update the docs box + if self.block.get_doc(): self._docs_box.show() + else: self._docs_box.hide() + self._docs_text_display.set_text(self.block.get_doc()) + + def _handle_key_press(self, widget, event): + """ + Handle key presses from the keyboard. + Call the ok response when enter is pressed. + @return false to forward the keypress + """ + keyname = gtk.gdk.keyval_name(event.keyval) + if keyname == 'Return': self.response(gtk.RESPONSE_OK) + return False #forward the keypress + + def _handle_changed(self, param): + """ + A change occured, update any dependent parameters: + The enum inside the variable type may have changed and, + the variable param will need an external update. + @param param the graphical parameter that initiated the callback + """ + #update dependent params + if param.is_enum(): + for other_param in param.get_parent().get_params(): + if param.get_key() is not other_param.get_key() and ( + param.get_key() in other_param._type or \ + param.get_key() in other_param._hide): other_param.update() + #update + self._update() + return True + + def run(self): + """ + Call run(). + @return true if a change occured. + """ + original_data = list() + for param in self.block.get_params(): + original_data.append(param.get_value()) + gtk.Dialog.run(self) + self.destroy() + new_data = list() + for param in self.block.get_params(): + new_data.append(param.get_value()) + return original_data != new_data diff --git a/grc/gui/Platform.py b/grc/gui/Platform.py new file mode 100644 index 00000000..a32b0209 --- /dev/null +++ b/grc/gui/Platform.py @@ -0,0 +1,48 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from FlowGraph import FlowGraph +from Connection import Connection +from Block import Block +from Port import Port +from Param import Param + +def conjoin_classes(name, c1, c2): + exec(""" +class %s(c1, c2): + def __init__(self, *args, **kwargs): + c1.__init__(self, *args, **kwargs) + c2.__init__(self, *args, **kwargs) +"""%name, locals()) + return locals()[name] + +def Platform(platform): + #combine with gui class + for attr, value in ( + ('FlowGraph', FlowGraph), + ('Connection', Connection), + ('Block', Block), + ('Source', Port), + ('Sink', Port), + ('Param', Param), + ): + old_value = getattr(platform, attr) + c = conjoin_classes(attr, old_value, value) + setattr(platform, attr, c) + return platform diff --git a/grc/gui/Port.py b/grc/gui/Port.py new file mode 100644 index 00000000..d1f36f8b --- /dev/null +++ b/grc/gui/Port.py @@ -0,0 +1,190 @@ +""" +Copyright 2007 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Element import Element +from Constants import \ + PORT_SEPARATION, CONNECTOR_EXTENSION_MINIMAL, \ + CONNECTOR_EXTENSION_INCREMENT, \ + PORT_LABEL_PADDING, PORT_MIN_WIDTH +import Utils +import Colors +import pygtk +pygtk.require('2.0') +import gtk + +PORT_MARKUP_TMPL="""\ +$encode($port.get_name())""" + +class Port(Element): + """The graphical port.""" + + def __init__(self, *args, **kwargs): + """ + Port contructor. + Create list of connector coordinates. + """ + Element.__init__(self) + self.connector_coordinates = dict() + + def update(self): + """Create new areas and labels for the port.""" + self.clear() + #get current rotation + rotation = self.get_rotation() + #get all sibling ports + if self.is_source(): ports = self.get_parent().get_sources() + elif self.is_sink(): ports = self.get_parent().get_sinks() + #get the max width + self.W = max([port.W for port in ports] + [PORT_MIN_WIDTH]) + #get a numeric index for this port relative to its sibling ports + index = ports.index(self) + length = len(ports) + #reverse the order of ports for these rotations + if rotation in (180, 270): index = length-index-1 + offset = (self.get_parent().H - length*self.H - (length-1)*PORT_SEPARATION)/2 + #create areas and connector coordinates + if (self.is_sink() and rotation == 0) or (self.is_source() and rotation == 180): + x = -1*self.W + y = (PORT_SEPARATION+self.H)*index+offset + self.add_area((x, y), (self.W, self.H)) + self._connector_coordinate = (x-1, y+self.H/2) + elif (self.is_source() and rotation == 0) or (self.is_sink() and rotation == 180): + x = self.get_parent().W + y = (PORT_SEPARATION+self.H)*index+offset + self.add_area((x, y), (self.W, self.H)) + self._connector_coordinate = (x+1+self.W, y+self.H/2) + elif (self.is_source() and rotation == 90) or (self.is_sink() and rotation == 270): + y = -1*self.W + x = (PORT_SEPARATION+self.H)*index+offset + self.add_area((x, y), (self.H, self.W)) + self._connector_coordinate = (x+self.H/2, y-1) + elif (self.is_sink() and rotation == 90) or (self.is_source() and rotation == 270): + y = self.get_parent().W + x = (PORT_SEPARATION+self.H)*index+offset + self.add_area((x, y), (self.H, self.W)) + self._connector_coordinate = (x+self.H/2, y+1+self.W) + #the connector length + self._connector_length = CONNECTOR_EXTENSION_MINIMAL + CONNECTOR_EXTENSION_INCREMENT*index + + def _create_labels(self): + """Create the labels for the socket.""" + self._bg_color = Colors.get_color(self.get_color()) + #create the layout + layout = gtk.DrawingArea().create_pango_layout('') + layout.set_markup(Utils.parse_template(PORT_MARKUP_TMPL, port=self)) + self.w, self.h = layout.get_pixel_size() + self.W, self.H = 2*PORT_LABEL_PADDING+self.w, 2*PORT_LABEL_PADDING+self.h + #create the pixmap + pixmap = self.get_parent().get_parent().new_pixmap(self.w, self.h) + gc = pixmap.new_gc() + gc.set_foreground(self._bg_color) + pixmap.draw_rectangle(gc, True, 0, 0, self.w, self.h) + pixmap.draw_layout(gc, 0, 0, layout) + #create the images + self.horizontal_label = image = pixmap.get_image(0, 0, self.w, self.h) + if self.is_vertical(): + self.vertical_label = vimage = gtk.gdk.Image(gtk.gdk.IMAGE_NORMAL, pixmap.get_visual(), self.h, self.w) + for i in range(self.w): + for j in range(self.h): vimage.put_pixel(j, self.w-i-1, image.get_pixel(i, j)) + + def draw(self, gc, window): + """ + Draw the socket with a label. + @param gc the graphics context + @param window the gtk window to draw on + """ + Element.draw( + self, gc, window, bg_color=self._bg_color, + border_color=self.is_highlighted() and Colors.HIGHLIGHT_COLOR or Colors.BORDER_COLOR, + ) + X,Y = self.get_coordinate() + (x,y),(w,h) = self.areas_dict[self.get_rotation()][0] #use the first area's sizes to place the labels + if self.is_horizontal(): + window.draw_image(gc, self.horizontal_label, 0, 0, x+X+(self.W-self.w)/2, y+Y+(self.H-self.h)/2, -1, -1) + elif self.is_vertical(): + window.draw_image(gc, self.vertical_label, 0, 0, x+X+(self.H-self.h)/2, y+Y+(self.W-self.w)/2, -1, -1) + + def get_connector_coordinate(self): + """ + Get the coordinate where connections may attach to. + @return the connector coordinate (x, y) tuple + """ + x,y = self._connector_coordinate + X,Y = self.get_coordinate() + return (x+X, y+Y) + + def get_connector_direction(self): + """ + Get the direction that the socket points: 0,90,180,270. + This is the rotation degree if the socket is an output or + the rotation degree + 180 if the socket is an input. + @return the direction in degrees + """ + if self.is_source(): return self.get_rotation() + elif self.is_sink(): return (self.get_rotation() + 180)%360 + + def get_connector_length(self): + """ + Get the length of the connector. + The connector length increases as the port index changes. + @return the length in pixels + """ + return self._connector_length + + def get_rotation(self): + """ + Get the parent's rotation rather than self. + @return the parent's rotation + """ + return self.get_parent().get_rotation() + + def move(self, delta_coor): + """ + Move the parent rather than self. + @param delta_corr the (delta_x, delta_y) tuple + """ + self.get_parent().move(delta_coor) + + def rotate(self, direction): + """ + Rotate the parent rather than self. + @param direction degrees to rotate + """ + self.get_parent().rotate(direction) + + def get_coordinate(self): + """ + Get the parent's coordinate rather than self. + @return the parents coordinate + """ + return self.get_parent().get_coordinate() + + def set_highlighted(self, highlight): + """ + Set the parent highlight rather than self. + @param highlight true to enable highlighting + """ + self.get_parent().set_highlighted(highlight) + + def is_highlighted(self): + """ + Get the parent's is highlight rather than self. + @return the parent's highlighting status + """ + return self.get_parent().is_highlighted() diff --git a/grc/gui/Preferences.py b/grc/gui/Preferences.py new file mode 100644 index 00000000..1d89920d --- /dev/null +++ b/grc/gui/Preferences.py @@ -0,0 +1,86 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import ConfigParser +import os + +_platform = None +_config_parser = ConfigParser.ConfigParser() + +def file_extension(): return '.'+_platform.get_key() +def _prefs_file(): return os.path.join(os.path.expanduser('~'), file_extension()) + +def load(platform): + global _platform + _platform = platform + #create sections + _config_parser.add_section('main') + _config_parser.add_section('files_open') + try: _config_parser.read(_prefs_file()) + except: pass +def save(): + try: _config_parser.write(open(_prefs_file(), 'w')) + except: pass + +########################################################################### +# Special methods for specific program functionalities +########################################################################### + +def main_window_size(size=None): + if size is not None: + _config_parser.set('main', 'main_window_width', size[0]) + _config_parser.set('main', 'main_window_height', size[1]) + else: + try: return ( + _config_parser.getint('main', 'main_window_width'), + _config_parser.getint('main', 'main_window_height'), + ) + except: return (1, 1) + +def file_open(file=None): + if file is not None: _config_parser.set('main', 'file_open', file) + else: + try: return _config_parser.get('main', 'file_open') + except: return '' + +def files_open(files=None): + if files is not None: + _config_parser.remove_section('files_open') #clear section + _config_parser.add_section('files_open') + for i, file in enumerate(files): + _config_parser.set('files_open', 'file_open_%d'%i, file) + else: + files = list() + i = 0 + while True: + try: files.append(_config_parser.get('files_open', 'file_open_%d'%i)) + except: return files + i = i + 1 + +def reports_window_position(pos=None): + if pos is not None: _config_parser.set('main', 'reports_window_position', pos) + else: + try: return _config_parser.getint('main', 'reports_window_position') or 1 #greater than 0 + except: return -1 + +def blocks_window_position(pos=None): + if pos is not None: _config_parser.set('main', 'blocks_window_position', pos) + else: + try: return _config_parser.getint('main', 'blocks_window_position') or 1 #greater than 0 + except: return -1 diff --git a/grc/gui/StateCache.py b/grc/gui/StateCache.py new file mode 100644 index 00000000..04b18b18 --- /dev/null +++ b/grc/gui/StateCache.py @@ -0,0 +1,92 @@ +""" +Copyright 2007 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Actions import FLOW_GRAPH_UNDO, FLOW_GRAPH_REDO, get_action_from_name +from Constants import STATE_CACHE_SIZE + +class StateCache(object): + """ + The state cache is an interface to a list to record data/states and to revert to previous states. + States are recorded into the list in a circular fassion by using an index for the current state, + and counters for the range where states are stored. + """ + + def __init__(self, initial_state): + """ + StateCache constructor. + @param initial_state the intial state (nested data) + """ + self.states = [None] * STATE_CACHE_SIZE #fill states + self.current_state_index = 0 + self.num_prev_states = 0 + self.num_next_states = 0 + self.states[0] = initial_state + self.update_actions() + + def save_new_state(self, state): + """ + Save a new state. + Place the new state at the next index and add one to the number of previous states. + @param state the new state + """ + self.current_state_index = (self.current_state_index + 1)%STATE_CACHE_SIZE + self.states[self.current_state_index] = state + self.num_prev_states = self.num_prev_states + 1 + if self.num_prev_states == STATE_CACHE_SIZE: self.num_prev_states = STATE_CACHE_SIZE - 1 + self.num_next_states = 0 + self.update_actions() + + def get_current_state(self): + """ + Get the state at the current index. + @return the current state (nested data) + """ + self.update_actions() + return self.states[self.current_state_index] + + def get_prev_state(self): + """ + Get the previous state and decrement the current index. + @return the previous state or None + """ + if self.num_prev_states > 0: + self.current_state_index = (self.current_state_index + STATE_CACHE_SIZE -1)%STATE_CACHE_SIZE + self.num_next_states = self.num_next_states + 1 + self.num_prev_states = self.num_prev_states - 1 + return self.get_current_state() + return None + + def get_next_state(self): + """ + Get the nest state and increment the current index. + @return the next state or None + """ + if self.num_next_states > 0: + self.current_state_index = (self.current_state_index + 1)%STATE_CACHE_SIZE + self.num_next_states = self.num_next_states - 1 + self.num_prev_states = self.num_prev_states + 1 + return self.get_current_state() + return None + + def update_actions(self): + """ + Update the undo and redo actions based on the number of next and prev states. + """ + get_action_from_name(FLOW_GRAPH_REDO).set_sensitive(self.num_next_states != 0) + get_action_from_name(FLOW_GRAPH_UNDO).set_sensitive(self.num_prev_states != 0) diff --git a/grc/gui/Utils.py b/grc/gui/Utils.py new file mode 100644 index 00000000..ee6dc6cd --- /dev/null +++ b/grc/gui/Utils.py @@ -0,0 +1,82 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import POSSIBLE_ROTATIONS +from Cheetah.Template import Template + +def get_rotated_coordinate(coor, rotation): + """ + Rotate the coordinate by the given rotation. + @param coor the coordinate x, y tuple + @param rotation the angle in degrees + @return the rotated coordinates + """ + #handles negative angles + rotation = (rotation + 360)%360 + assert rotation in POSSIBLE_ROTATIONS + #determine the number of degrees to rotate + cos_r, sin_r = { + 0: (1, 0), + 90: (0, 1), + 180: (-1, 0), + 270: (0, -1), + }[rotation] + x, y = coor + return (x*cos_r + y*sin_r, -x*sin_r + y*cos_r) + +def get_angle_from_coordinates((x1,y1), (x2,y2)): + """ + Given two points, calculate the vector direction from point1 to point2, directions are multiples of 90 degrees. + @param (x1,y1) the coordinate of point 1 + @param (x2,y2) the coordinate of point 2 + @return the direction in degrees + """ + if y1 == y2:#0 or 180 + if x2 > x1: return 0 + else: return 180 + else:#90 or 270 + if y2 > y1: return 270 + else: return 90 + +def xml_encode(string): + """ + Encode a string into an xml safe string by replacing special characters. + Needed for gtk pango markup in labels. + @param string the input string + @return output string with safe characters + """ + string = str(string) + for char, safe in ( + ('&', '&'), + ('<', '<'), + ('>', '>'), + ('"', '"'), + ("'", '''), + ): string = string.replace(char, safe) + return string + +def parse_template(tmpl_str, **kwargs): + """ + Parse the template string with the given args. + Pass in the xml encode method for pango escape chars. + @param tmpl_str the template as a string + @return a string of the parsed template + """ + kwargs['encode'] = xml_encode + return str(Template(tmpl_str, kwargs)) diff --git a/grc/gui/__init__.py b/grc/gui/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/grc/gui/__init__.py @@ -0,0 +1 @@ + diff --git a/grc/python/Block.py b/grc/python/Block.py new file mode 100644 index 00000000..957fee18 --- /dev/null +++ b/grc/python/Block.py @@ -0,0 +1,159 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from .. base.Block import Block as _Block +import extract_docs +import extract_category + +class Block(_Block): + + ##for make source to keep track of indexes + _source_count = 0 + ##for make sink to keep track of indexes + _sink_count = 0 + + def __init__(self, flow_graph, n): + """ + Make a new block from nested data. + @param flow graph the parent element + @param n the nested odict + @return block a new block + """ + #grab the data + self._doc = n.find('doc') or '' + self._imports = map(lambda i: i.strip(), n.findall('import')) + self._make = n.find('make') + self._var_make = n.find('var_make') + self._checks = n.findall('check') + self._callbacks = n.findall('callback') + #build the block + _Block.__init__( + self, + flow_graph=flow_graph, + n=n, + ) + + def validate(self): + """ + Validate this block. + Call the base class validate. + Evaluate the checks: each check must evaluate to True. + Adjust the nports. + """ + _Block.validate(self) + #evaluate the checks + for check in self._checks: + check_res = self.resolve_dependencies(check) + try: + check_eval = self.get_parent().evaluate(check_res) + try: assert check_eval + except AssertionError: self.add_error_message('Check "%s" failed.'%check) + except: self.add_error_message('Check "%s" did not evaluate.'%check) + #adjust nports + for ports, Port in ( + (self._sources, self.get_parent().get_parent().Source), + (self._sinks, self.get_parent().get_parent().Sink), + ): + #how many ports? + num_ports = len(ports) + #do nothing for 0 ports + if not num_ports: continue + #get the nports setting + port0 = ports[str(0)] + nports = port0.get_nports() + #do nothing for no nports + if not nports: continue + #do nothing if nports is already num ports + if nports == num_ports: continue + #remove excess ports and connections + if nports < num_ports: + #remove the connections + for key in map(str, range(nports, num_ports)): + port = ports[key] + for connection in port.get_connections(): + self.get_parent().remove_element(connection) + #remove the ports + for key in map(str, range(nports, num_ports)): ports.pop(key) + continue + #add more ports + if nports > num_ports: + for key in map(str, range(num_ports, nports)): + n = port0._n + n['key'] = key + port = Port(self, n) + ports[key] = port + continue + + def port_controller_modify(self, direction): + """ + Change the port controller. + @param direction +1 or -1 + @return true for change + """ + changed = False + #concat the nports string from the private nports settings of both port0 + nports_str = \ + (self.get_sinks() and self.get_sinks()[0]._nports or '') + \ + (self.get_sources() and self.get_sources()[0]._nports or '') + #modify all params whose keys appear in the nports string + for param in self.get_params(): + if param.is_enum() or param.get_key() not in nports_str: continue + #try to increment the port controller by direction + try: + value = param.get_evaluated() + value = value + direction + assert 0 < value + param.set_value(value) + changed = True + except: pass + return changed + + def get_doc(self): + doc = self._doc.strip('\n').replace('\\\n', '') + #merge custom doc with doxygen docs + return '\n'.join([doc, extract_docs.extract(self.get_key())]).strip('\n') + + def get_category(self): + category = extract_category.extract(self.get_key()) + #if category: return category + return _Block.get_category(self) + + def get_imports(self): + """ + Resolve all import statements. + Split each import statement at newlines. + Combine all import statments into a list. + Filter empty imports. + @return a list of import statements + """ + return filter(lambda i: i, sum(map(lambda i: self.resolve_dependencies(i).split('\n'), self._imports), [])) + + def get_make(self): return self.resolve_dependencies(self._make) + def get_var_make(self): return self.resolve_dependencies(self._var_make) + + def get_callbacks(self): + """ + Get a list of function callbacks for this block. + @return a list of strings + """ + def make_callback(callback): + callback = self.resolve_dependencies(callback) + if 'self.' in callback: return callback + return 'self.%s.%s'%(self.get_id(), callback) + return map(make_callback, self._callbacks) diff --git a/grc/python/Connection.py b/grc/python/Connection.py new file mode 100644 index 00000000..d8a894bb --- /dev/null +++ b/grc/python/Connection.py @@ -0,0 +1,34 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from .. base.Connection import Connection as _Connection + +class Connection(_Connection): + + def validate(self): + """ + Validate the connections. + The ports must match in type and vector length. + """ + _Connection.validate(self) #checks type + #check vector length + source_vlen = self.get_source().get_vlen() + sink_vlen = self.get_sink().get_vlen() + try: assert source_vlen == sink_vlen + except AssertionError: self.add_error_message('Source vector length "%s" does not match sink vector length "%s".'%(source_vlen, sink_vlen)) diff --git a/grc/python/Constants.py b/grc/python/Constants.py new file mode 100644 index 00000000..5f203237 --- /dev/null +++ b/grc/python/Constants.py @@ -0,0 +1,63 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import os +import sys +import stat +from gnuradio import gr + +_gr_prefs = gr.prefs() + +PYEXEC = os.environ.get('PYTHONW', _gr_prefs.get_string('grc', 'pythonw', '')) + +#setup paths +PATH_SEP = ':' +DOCS_DIR = os.environ.get('GR_DOC_DIR', _gr_prefs.get_string('grc', 'doc_dir', '')) +HIER_BLOCKS_LIB_DIR = os.path.join(os.path.expanduser('~'), '.grc_gnuradio') +BLOCKS_DIRS = filter( #filter blank strings + lambda x: x, PATH_SEP.join([ + os.environ.get('GRC_BLOCKS_PATH', ''), + _gr_prefs.get_string('grc', 'local_blocks_path', ''), + _gr_prefs.get_string('grc', 'global_blocks_path', ''), + ]).split(PATH_SEP), +) + [HIER_BLOCKS_LIB_DIR] + +#file creation modes +TOP_BLOCK_FILE_MODE = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP | stat.S_IROTH +HIER_BLOCK_FILE_MODE = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH + +#data files +DATA_DIR = os.path.dirname(__file__) +FLOW_GRAPH_TEMPLATE = os.path.join(DATA_DIR, 'flow_graph.tmpl') +BLOCK_DTD = os.path.join(DATA_DIR, 'block.dtd') +DEFAULT_FLOW_GRAPH = os.path.join(DATA_DIR, 'default_flow_graph.grc') + +#coloring +COMPLEX_COLOR_SPEC = '#3399FF' +FLOAT_COLOR_SPEC = '#FF8C69' +INT_COLOR_SPEC = '#00FF99' +SHORT_COLOR_SPEC = '#FFFF66' +BYTE_COLOR_SPEC = '#FF66FF' +COMPLEX_VECTOR_COLOR_SPEC = '#3399AA' +FLOAT_VECTOR_COLOR_SPEC = '#CC8C69' +INT_VECTOR_COLOR_SPEC = '#00CC99' +SHORT_VECTOR_COLOR_SPEC = '#CCCC33' +BYTE_VECTOR_COLOR_SPEC = '#CC66CC' +ID_COLOR_SPEC = '#DDDDDD' +WILDCARD_COLOR_SPEC = '#FFFFFF' diff --git a/grc/python/FlowGraph.py b/grc/python/FlowGraph.py new file mode 100644 index 00000000..8cad8be4 --- /dev/null +++ b/grc/python/FlowGraph.py @@ -0,0 +1,146 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import expr_utils +from .. base.FlowGraph import FlowGraph as _FlowGraph +from Block import Block +from Connection import Connection +import re + +_variable_matcher = re.compile('^(variable\w*)$') +_parameter_matcher = re.compile('^(parameter)$') + +class FlowGraph(_FlowGraph): + + _eval_cache = dict() + def _eval(self, code, namespace, namespace_hash): + """ + Evaluate the code with the given namespace. + @param code a string with python code + @param namespace a dict representing the namespace + @param namespace_hash a unique hash for the namespace + @return the resultant object + """ + my_hash = hash(code) ^ namespace_hash + #cache if does not exist + if not self._eval_cache.has_key(my_hash): + self._eval_cache[my_hash] = eval(code, namespace, namespace) + #return from cache + return self._eval_cache[my_hash] + + def _get_io_signature(self, pad_key): + """ + Get an io signature for this flow graph. + The pad key determines the directionality of the io signature. + @param pad_key a string of pad_source or pad_sink + @return a dict with: type, nports, vlen, size + """ + pads = filter(lambda b: b.get_key() == pad_key, self.get_enabled_blocks()) + if not pads: return { + 'nports': '0', + 'type': '', + 'vlen': '0', + 'size': '0', + } + pad = pads[0] #take only the first, user should not have more than 1 + #load io signature + return { + 'nports': str(pad.get_param('nports').get_evaluated()), + 'type': str(pad.get_param('type').get_evaluated()), + 'vlen': str(pad.get_param('vlen').get_evaluated()), + 'size': pad.get_param('type').get_opt('size'), + } + + def get_input_signature(self): + """ + Get the io signature for the input side of this flow graph. + The io signature with be "0", "0" if no pad source is present. + @return a string tuple of type, num_ports, port_size + """ + return self._get_io_signature('pad_source') + + def get_output_signature(self): + """ + Get the io signature for the output side of this flow graph. + The io signature with be "0", "0" if no pad sink is present. + @return a string tuple of type, num_ports, port_size + """ + return self._get_io_signature('pad_sink') + + def get_imports(self): + """ + Get a set of all import statments in this flow graph namespace. + @return a set of import statements + """ + imports = sum([block.get_imports() for block in self.get_enabled_blocks()], []) + imports = sorted(set(imports)) + return imports + + def get_variables(self): + """ + Get a list of all variables in this flow graph namespace. + Exclude paramterized variables. + @return a sorted list of variable blocks in order of dependency (indep -> dep) + """ + variables = filter(lambda b: _variable_matcher.match(b.get_key()), self.get_enabled_blocks()) + return expr_utils.sort_objects(variables, lambda v: v.get_id(), lambda v: v.get_var_make()) + + def get_parameters(self): + """ + Get a list of all paramterized variables in this flow graph namespace. + @return a list of paramterized variables + """ + parameters = filter(lambda b: _parameter_matcher.match(b.get_key()), self.get_enabled_blocks()) + return parameters + + def evaluate(self, expr): + """ + Evaluate the expression. + @param expr the string expression + @throw Exception bad expression + @return the evaluated data + """ + if self.is_flagged(): + self.deflag() + #reload namespace + n = dict() + #load imports + for imp in self.get_imports(): + try: exec imp in n + except: pass + #load parameters + np = dict() + for parameter in self.get_parameters(): + try: + e = eval(parameter.get_param('value').to_code(), n, n) + np[parameter.get_id()] = e + except: pass + n.update(np) #merge param namespace + #load variables + for variable in self.get_variables(): + try: + e = eval(variable.get_param('value').to_code(), n, n) + n[variable.get_id()] = e + except: pass + #make namespace public + self.n = n + self.n_hash = hash(str(n)) + #evaluate + e = self._eval(expr, self.n, self.n_hash) + return e diff --git a/grc/python/Generator.py b/grc/python/Generator.py new file mode 100644 index 00000000..33be4a72 --- /dev/null +++ b/grc/python/Generator.py @@ -0,0 +1,132 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import os +import subprocess +from Cheetah.Template import Template +import expr_utils +from Constants import \ + TOP_BLOCK_FILE_MODE, HIER_BLOCK_FILE_MODE, \ + HIER_BLOCKS_LIB_DIR, PYEXEC, \ + FLOW_GRAPH_TEMPLATE +import convert_hier +from .. gui import Messages + +class Generator(object): + + def __init__(self, flow_graph, file_path): + """ + Initialize the generator object. + Determine the file to generate. + @param flow_graph the flow graph object + @param file_path the path to write the file to + """ + self._flow_graph = flow_graph + self._generate_options = self._flow_graph.get_option('generate_options') + if self._generate_options == 'hb': + self._mode = HIER_BLOCK_FILE_MODE + dirname = HIER_BLOCKS_LIB_DIR + else: + self._mode = TOP_BLOCK_FILE_MODE + dirname = os.path.dirname(file_path) + filename = self._flow_graph.get_option('id') + '.py' + self._file_path = os.path.join(dirname, filename) + + def get_file_path(self): return self._file_path + + def write(self): + #do throttle warning + all_keys = ' '.join(map(lambda b: b.get_key(), self._flow_graph.get_enabled_blocks())) + if ('usrp' not in all_keys) and ('audio' not in all_keys) and ('throttle' not in all_keys) and self._generate_options != 'hb': + Messages.send_warning('''\ +This flow graph may not have flow control: no audio or usrp blocks found. \ +Add a Misc->Throttle block to your flow graph to avoid CPU congestion.''') + #generate + open(self.get_file_path(), 'w').write(str(self)) + if self._generate_options == 'hb': + #convert hier block to xml wrapper + convert_hier.convert_hier(self._flow_graph, self.get_file_path()) + os.chmod(self.get_file_path(), self._mode) + + def get_popen(self): + """ + Execute this python flow graph. + @return a popen object + """ + #execute + cmds = [PYEXEC, '-u', self.get_file_path()] #-u is unbuffered stdio + if self._generate_options == 'no_gui': + cmds = ['xterm', '-e'] + cmds + p = subprocess.Popen(args=cmds, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, universal_newlines=True) + return p + + def __str__(self): + """ + Convert the flow graph to python code. + @return a string of python code + """ + title = self._flow_graph.get_option('title') or self._flow_graph.get_option('id').replace('_', ' ').title() + imports = self._flow_graph.get_imports() + variables = self._flow_graph.get_variables() + parameters = self._flow_graph.get_parameters() + #list of variables with controls + controls = filter(lambda v: v.get_make(), variables) + #list of blocks not including variables and imports and parameters and disabled + blocks = sorted(self._flow_graph.get_enabled_blocks(), lambda x, y: cmp(x.get_id(), y.get_id())) + probes = filter(lambda b: b.get_key().startswith('probe_'), blocks) #ensure probes are last in the block list + #get a list of notebooks and sort them according dependencies + notebooks = expr_utils.sort_objects( + filter(lambda b: b.get_key() == 'notebook', blocks), + lambda n: n.get_id(), lambda n: n.get_param('notebook').get_value(), + ) + #list of regular blocks (all blocks minus the special ones) + blocks = filter(lambda b: b not in (imports + parameters + variables + probes + notebooks), blocks) + probes + #list of connections where each endpoint is enabled + connections = self._flow_graph.get_enabled_connections() + #list of variable names + var_ids = [var.get_id() for var in parameters + variables] + #prepend self. + replace_dict = dict([(var_id, 'self.%s'%var_id) for var_id in var_ids]) + #list of callbacks + callbacks = [ + expr_utils.expr_replace(cb, replace_dict) + for cb in sum([block.get_callbacks() for block in self._flow_graph.get_enabled_blocks()], []) + ] + #map var id to callbacks + var_id2cbs = dict( + [(var_id, filter(lambda c: expr_utils.get_variable_dependencies(c, [var_id]), callbacks)) + for var_id in var_ids] + ) + #load the namespace + namespace = { + 'title': title, + 'imports': imports, + 'flow_graph': self._flow_graph, + 'variables': variables, + 'notebooks': notebooks, + 'controls': controls, + 'parameters': parameters, + 'blocks': blocks, + 'connections': connections, + 'generate_options': self._generate_options, + 'var_id2cbs': var_id2cbs, + } + #build the template + t = Template(open(FLOW_GRAPH_TEMPLATE, 'r').read(), namespace) + return str(t) diff --git a/grc/python/Makefile.am b/grc/python/Makefile.am new file mode 100644 index 00000000..0a62c082 --- /dev/null +++ b/grc/python/Makefile.am @@ -0,0 +1,44 @@ +# +# Copyright 2008, 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. +# + +include $(top_srcdir)/grc/Makefile.inc + +ourpythondir = $(grc_src_prefix)/python +ourpython_PYTHON = \ + convert_hier.py \ + expr_utils.py \ + extract_category.py \ + extract_docs.py \ + Block.py \ + Connection.py \ + Constants.py \ + FlowGraph.py \ + Generator.py \ + Param.py \ + Platform.py \ + Port.py \ + __init__.py + +ourdatadir = $(grc_src_prefix)/python +dist_ourdata_DATA = \ + block.dtd \ + default_flow_graph.grc \ + flow_graph.tmpl diff --git a/grc/python/Makefile.in b/grc/python/Makefile.in new file mode 100644 index 00000000..60deee53 --- /dev/null +++ b/grc/python/Makefile.in @@ -0,0 +1,981 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008, 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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_ourdata_DATA) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/grc/Makefile.inc +subdir = grc/python +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourpythondir)" \ + "$(DESTDIR)$(ourdatadir)" +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +dist_ourdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_ourdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +ourpythondir = $(grc_src_prefix)/python +ourpython_PYTHON = \ + convert_hier.py \ + expr_utils.py \ + extract_category.py \ + extract_docs.py \ + Block.py \ + Connection.py \ + Constants.py \ + FlowGraph.py \ + Generator.py \ + Param.py \ + Platform.py \ + Port.py \ + __init__.py + +ourdatadir = $(grc_src_prefix)/python +dist_ourdata_DATA = \ + block.dtd \ + default_flow_graph.grc \ + flow_graph.tmpl + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/python/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/python/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(MKDIR_P) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +install-dist_ourdataDATA: $(dist_ourdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(ourdatadir)" || $(MKDIR_P) "$(DESTDIR)$(ourdatadir)" + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_ourdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(ourdatadir)/$$f'"; \ + $(dist_ourdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(ourdatadir)/$$f"; \ + done + +uninstall-dist_ourdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_ourdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(ourdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(ourdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(ourdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_ourdataDATA install-ourpythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_ourdataDATA uninstall-ourpythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_ourdataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man \ + install-ourpythonPYTHON install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_ourdataDATA \ + uninstall-ourpythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/python/Param.py b/grc/python/Param.py new file mode 100644 index 00000000..f971d0c3 --- /dev/null +++ b/grc/python/Param.py @@ -0,0 +1,404 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import expr_utils +from .. base.Param import Param as _Param, EntryParam +import Constants +import numpy +import os +import pygtk +pygtk.require('2.0') +import gtk +from gnuradio import eng_notation +import re +from gnuradio import gr + +_check_id_matcher = re.compile('^[a-z|A-Z]\w*$') +_show_id_matcher = re.compile('^(variable\w*|parameter|options|notebook)$') + +class FileParam(EntryParam): + """Provide an entry box for filename and a button to browse for a file.""" + + def __init__(self, *args, **kwargs): + EntryParam.__init__(self, *args, **kwargs) + input = gtk.Button('...') + input.connect('clicked', self._handle_clicked) + self.pack_start(input, False) + + def _handle_clicked(self, widget=None): + """ + If the button was clicked, open a file dialog in open/save format. + Replace the text in the entry with the new filename from the file dialog. + """ + #get the paths + file_path = self.param.is_valid() and self.param.get_evaluated() or '' + (dirname, basename) = os.path.isfile(file_path) and os.path.split(file_path) or (file_path, '') + if not os.path.exists(dirname): dirname = os.getcwd() #fix bad paths + #build the dialog + if self.param.get_type() == 'file_open': + file_dialog = gtk.FileChooserDialog('Open a Data File...', None, + gtk.FILE_CHOOSER_ACTION_OPEN, ('gtk-cancel',gtk.RESPONSE_CANCEL,'gtk-open',gtk.RESPONSE_OK)) + elif self.param.get_type() == 'file_save': + file_dialog = gtk.FileChooserDialog('Save a Data File...', None, + gtk.FILE_CHOOSER_ACTION_SAVE, ('gtk-cancel',gtk.RESPONSE_CANCEL, 'gtk-save',gtk.RESPONSE_OK)) + file_dialog.set_do_overwrite_confirmation(True) + file_dialog.set_current_name(basename) #show the current filename + file_dialog.set_current_folder(dirname) #current directory + file_dialog.set_select_multiple(False) + file_dialog.set_local_only(True) + if gtk.RESPONSE_OK == file_dialog.run(): #run the dialog + file_path = file_dialog.get_filename() #get the file path + self.entry.set_text(file_path) + self._handle_changed() + file_dialog.destroy() #destroy the dialog + +#blacklist certain ids, its not complete, but should help +import __builtin__ +ID_BLACKLIST = ['self', 'options', 'gr', 'blks2', 'wxgui', 'wx', 'math', 'forms', 'firdes'] + \ + filter(lambda x: not x.startswith('_'), dir(gr.top_block())) + dir(__builtin__) +#define types, native python + numpy +VECTOR_TYPES = (tuple, list, set, numpy.ndarray) +COMPLEX_TYPES = [complex, numpy.complex, numpy.complex64, numpy.complex128] +REAL_TYPES = [float, numpy.float, numpy.float32, numpy.float64] +INT_TYPES = [int, long, numpy.int, numpy.int8, numpy.int16, numpy.int32, numpy.uint64, + numpy.uint, numpy.uint8, numpy.uint16, numpy.uint32, numpy.uint64] +#cast to tuple for isinstance, concat subtypes +COMPLEX_TYPES = tuple(COMPLEX_TYPES + REAL_TYPES + INT_TYPES) +REAL_TYPES = tuple(REAL_TYPES + INT_TYPES) +INT_TYPES = tuple(INT_TYPES) + +class Param(_Param): + + _init = False + _hostage_cells = list() + + ##possible param types + TYPES = _Param.TYPES + [ + 'complex', 'real', 'int', + 'complex_vector', 'real_vector', 'int_vector', + 'hex', 'string', 'bool', + 'file_open', 'file_save', + 'id', + 'grid_pos', 'notebook', + 'import', + ] + + def __repr__(self): + """ + Get the repr (nice string format) for this param. + @return the string representation + """ + if not self.is_valid(): return self.get_value() + if self.get_value() in self.get_option_keys(): return self.get_option(self.get_value()).get_name() + ################################################## + # display logic for numbers + ################################################## + def num_to_str(num): + if isinstance(num, COMPLEX_TYPES): + num = complex(num) #cast to python complex + if num == 0: return '0' #value is zero + elif num.imag == 0: return '%s'%eng_notation.num_to_str(num.real) #value is real + elif num.real == 0: return '%sj'%eng_notation.num_to_str(num.imag) #value is imaginary + elif num.imag < 0: return '%s-%sj'%(eng_notation.num_to_str(num.real), eng_notation.num_to_str(abs(num.imag))) + else: return '%s+%sj'%(eng_notation.num_to_str(num.real), eng_notation.num_to_str(num.imag)) + else: return str(num) + ################################################## + # split up formatting by type + ################################################## + truncate = 0 #default center truncate + max_len = max(27 - len(self.get_name()), 3) + e = self.get_evaluated() + t = self.get_type() + if isinstance(e, bool): return str(e) + elif isinstance(e, COMPLEX_TYPES): dt_str = num_to_str(e) + elif isinstance(e, VECTOR_TYPES): #vector types + if len(e) > 8: + dt_str = self.get_value() #large vectors use code + truncate = 1 + else: dt_str = ', '.join(map(num_to_str, e)) #small vectors use eval + elif t in ('file_open', 'file_save'): + dt_str = self.get_value() + truncate = -1 + else: dt_str = str(e) #other types + ################################################## + # truncate + ################################################## + if len(dt_str) > max_len: + if truncate < 0: #front truncate + dt_str = '...' + dt_str[3-max_len:] + elif truncate == 0: #center truncate + dt_str = dt_str[:max_len/2 -3] + '...' + dt_str[-max_len/2:] + elif truncate > 0: #rear truncate + dt_str = dt_str[:max_len-3] + '...' + return dt_str + + def get_input_class(self): + if self.get_type() in ('file_open', 'file_save'): return FileParam + return _Param.get_input_class(self) + + def get_color(self): + """ + Get the color that represents this param's type. + @return a hex color code. + """ + try: + return { + #number types + 'complex': Constants.COMPLEX_COLOR_SPEC, + 'real': Constants.FLOAT_COLOR_SPEC, + 'int': Constants.INT_COLOR_SPEC, + #vector types + 'complex_vector': Constants.COMPLEX_VECTOR_COLOR_SPEC, + 'real_vector': Constants.FLOAT_VECTOR_COLOR_SPEC, + 'int_vector': Constants.INT_VECTOR_COLOR_SPEC, + #special + 'bool': Constants.INT_COLOR_SPEC, + 'hex': Constants.INT_COLOR_SPEC, + 'string': Constants.BYTE_VECTOR_COLOR_SPEC, + 'id': Constants.ID_COLOR_SPEC, + 'grid_pos': Constants.INT_VECTOR_COLOR_SPEC, + 'notebook': Constants.INT_VECTOR_COLOR_SPEC, + 'raw': Constants.WILDCARD_COLOR_SPEC, + }[self.get_type()] + except: return _Param.get_color(self) + + def get_hide(self): + """ + Get the hide value from the base class. + Hide the ID parameter for most blocks. Exceptions below. + If the parameter controls a port type, vlen, or nports, return part. + If the parameter is an empty grid position, return part. + These parameters are redundant to display in the flow graph view. + @return hide the hide property string + """ + hide = _Param.get_hide(self) + if hide: return hide + #hide ID in non variable blocks + if self.get_key() == 'id' and not _show_id_matcher.match(self.get_parent().get_key()): return 'part' + #hide port controllers for type and nports + if self.get_key() in ' '.join(map( + lambda p: ' '.join([p._type, p._nports]), self.get_parent().get_ports()) + ): return 'part' + #hide port controllers for vlen, when == 1 + if self.get_key() in ' '.join(map( + lambda p: p._vlen, self.get_parent().get_ports()) + ): + try: + assert int(self.get_evaluated()) == 1 + return 'part' + except: pass + #hide empty grid positions + if self.get_key() in ('grid_pos', 'notebook') and not self.get_value(): return 'part' + return hide + + def validate(self): + """ + Validate the param. + A test evaluation is performed + """ + _Param.validate(self) #checks type + self._evaluated = None + try: self._evaluated = self.evaluate() + except Exception, e: self.add_error_message(str(e)) + + def get_evaluated(self): return self._evaluated + + def evaluate(self): + """ + Evaluate the value. + @return evaluated type + """ + self._init = True + self._lisitify_flag = False + self._stringify_flag = False + self._hostage_cells = list() + def eval_string(v): + try: + e = self.get_parent().get_parent().evaluate(v) + assert isinstance(e, str) + return e + except: + self._stringify_flag = True + return v + t = self.get_type() + v = self.get_value() + ######################### + # Enum Type + ######################### + if self.is_enum(): return v + ######################### + # Numeric Types + ######################### + elif t in ('raw', 'complex', 'real', 'int', 'complex_vector', 'real_vector', 'int_vector', 'hex', 'bool'): + #raise exception if python cannot evaluate this value + try: e = self.get_parent().get_parent().evaluate(v) + except Exception, e: raise Exception, 'Value "%s" cannot be evaluated: %s'%(v, e) + #raise an exception if the data is invalid + if t == 'raw': return e + elif t == 'complex': + try: assert isinstance(e, COMPLEX_TYPES) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type complex.'%str(e) + return e + elif t == 'real': + try: assert isinstance(e, REAL_TYPES) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type real.'%str(e) + return e + elif t == 'int': + try: assert isinstance(e, INT_TYPES) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type integer.'%str(e) + return e + ######################### + # Numeric Vector Types + ######################### + elif t == 'complex_vector': + if not isinstance(e, VECTOR_TYPES): + self._lisitify_flag = True + e = [e] + try: + for ei in e: assert isinstance(ei, COMPLEX_TYPES) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type complex vector.'%str(e) + return e + elif t == 'real_vector': + if not isinstance(e, VECTOR_TYPES): + self._lisitify_flag = True + e = [e] + try: + for ei in e: assert isinstance(ei, REAL_TYPES) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type real vector.'%str(e) + return e + elif t == 'int_vector': + if not isinstance(e, VECTOR_TYPES): + self._lisitify_flag = True + e = [e] + try: + for ei in e: assert isinstance(ei, INT_TYPES) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type integer vector.'%str(e) + return e + elif t == 'hex': return hex(e) + elif t == 'bool': + try: assert isinstance(e, bool) + except AssertionError: raise Exception, 'Expression "%s" is invalid for type bool.'%str(e) + return e + else: raise TypeError, 'Type "%s" not handled'%t + ######################### + # String Types + ######################### + elif t in ('string', 'file_open', 'file_save'): + #do not check if file/directory exists, that is a runtime issue + e = eval_string(v) + return str(e) + ######################### + # Unique ID Type + ######################### + elif t == 'id': + #can python use this as a variable? + try: assert _check_id_matcher.match(v) + except AssertionError: raise Exception, 'ID "%s" must begin with a letter and may contain letters, numbers, and underscores.'%v + params = self.get_all_params('id') + keys = [param.get_value() for param in params] + try: assert keys.count(v) <= 1 #id should only appear once, or zero times if block is disabled + except: raise Exception, 'ID "%s" is not unique.'%v + try: assert v not in ID_BLACKLIST + except: raise Exception, 'ID "%s" is blacklisted.'%v + return v + ######################### + # Grid Position Type + ######################### + elif t == 'grid_pos': + if not v: return '' #allow for empty grid pos + e = self.get_parent().get_parent().evaluate(v) + try: + assert isinstance(e, (list, tuple)) and len(e) == 4 + for ei in e: assert isinstance(ei, int) + except AssertionError: raise Exception, 'A grid position must be a list of 4 integers.' + row, col, row_span, col_span = e + #check row, col + try: assert row >= 0 and col >= 0 + except AssertionError: raise Exception, 'Row and column must be non-negative.' + #check row span, col span + try: assert row_span > 0 and col_span > 0 + except AssertionError: raise Exception, 'Row and column span must be greater than zero.' + #get hostage cell parent + try: my_parent = self.get_parent().get_param('notebook').evaluate() + except: my_parent = '' + #calculate hostage cells + for r in range(row_span): + for c in range(col_span): + self._hostage_cells.append((my_parent, (row+r, col+c))) + #avoid collisions + params = filter(lambda p: p is not self, self.get_all_params('grid_pos')) + for param in params: + for parent, cell in param._hostage_cells: + if (parent, cell) in self._hostage_cells: + raise Exception, 'Another graphical element is using parent "%s", cell "%s".'%(str(parent), str(cell)) + return e + ######################### + # Notebook Page Type + ######################### + elif t == 'notebook': + if not v: return '' #allow for empty notebook + #get a list of all notebooks + notebook_blocks = filter(lambda b: b.get_key() == 'notebook', self.get_parent().get_parent().get_enabled_blocks()) + #check for notebook param syntax + try: notebook_id, page_index = map(str.strip, v.split(',')) + except: raise Exception, 'Bad notebook page format.' + #check that the notebook id is valid + try: notebook_block = filter(lambda b: b.get_id() == notebook_id, notebook_blocks)[0] + except: raise Exception, 'Notebook id "%s" is not an existing notebook id.'%notebook_id + #check that page index exists + try: assert int(page_index) in range(len(notebook_block.get_param('labels').get_evaluated())) + except: raise Exception, 'Page index "%s" is not a valid index number.'%page_index + return notebook_id, page_index + ######################### + # Import Type + ######################### + elif t == 'import': + n = dict() #new namespace + try: exec v in n + except ImportError: raise Exception, 'Import "%s" failed.'%v + except Exception: raise Exception, 'Bad import syntax: "%s".'%v + return filter(lambda k: str(k) != '__builtins__', n.keys()) + ######################### + else: raise TypeError, 'Type "%s" not handled'%t + + def to_code(self): + """ + Convert the value to code. + @return a string representing the code + """ + #run init tasks in evaluate + #such as setting flags + if not self._init: self.evaluate() + v = self.get_value() + t = self.get_type() + if t in ('string', 'file_open', 'file_save'): #string types + if self._stringify_flag: return '"%s"'%v.replace('"', '\"') + else: return v + elif t in ('complex_vector', 'real_vector', 'int_vector'): #vector types + if self._lisitify_flag: return '(%s, )'%v + else: return '(%s)'%v + else: return v + + def get_all_params(self, type): + """ + Get all the params from the flowgraph that have the given type. + @param type the specified type + @return a list of params + """ + return sum([filter(lambda p: p.get_type() == type, block.get_params()) for block in self.get_parent().get_parent().get_enabled_blocks()], []) diff --git a/grc/python/Platform.py b/grc/python/Platform.py new file mode 100644 index 00000000..8718fe95 --- /dev/null +++ b/grc/python/Platform.py @@ -0,0 +1,81 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import os +from .. import VERSION #TEMP: until gnuradio has __version__ +from .. base.Platform import Platform as _Platform +from FlowGraph import FlowGraph as _FlowGraph +from Connection import Connection as _Connection +from Block import Block as _Block +from Port import Source,Sink +from Param import Param as _Param +from Generator import Generator +from Constants import \ + HIER_BLOCKS_LIB_DIR, BLOCK_DTD, \ + DEFAULT_FLOW_GRAPH, BLOCKS_DIRS +import Constants + +COLORS = (#title, #color spec + ('Complex', Constants.COMPLEX_COLOR_SPEC), + ('Float', Constants.FLOAT_COLOR_SPEC), + ('Integer', Constants.INT_COLOR_SPEC), + ('Short', Constants.SHORT_COLOR_SPEC), + ('Byte', Constants.BYTE_COLOR_SPEC), + ('Complex Vector', Constants.COMPLEX_VECTOR_COLOR_SPEC), + ('Float Vector', Constants.FLOAT_VECTOR_COLOR_SPEC), + ('Integer Vector', Constants.INT_VECTOR_COLOR_SPEC), + ('Short Vector', Constants.SHORT_VECTOR_COLOR_SPEC), + ('Byte Vector', Constants.BYTE_VECTOR_COLOR_SPEC), + ('Wildcard Type', Constants.WILDCARD_COLOR_SPEC), +) + +class Platform(_Platform): + + def __init__(self): + """ + Make a platform for gnuradio. + """ + #ensure hier dir + if not os.path.exists(HIER_BLOCKS_LIB_DIR): os.mkdir(HIER_BLOCKS_LIB_DIR) + #convert block paths to absolute paths + block_paths = set(map(os.path.abspath, BLOCKS_DIRS)) + #init + _Platform.__init__( + self, + name='GNU Radio Companion', + version=VERSION, + key='grc', + license=__doc__.strip(), + website='http://gnuradio.org/trac/wiki/GNURadioCompanion', + block_paths=block_paths, + block_dtd=BLOCK_DTD, + default_flow_graph=DEFAULT_FLOW_GRAPH, + generator=Generator, + colors=COLORS, + ) + + ############################################## + # Constructors + ############################################## + FlowGraph = _FlowGraph + Connection = _Connection + Block = _Block + Source = Source + Sink = Sink + Param = _Param diff --git a/grc/python/Port.py b/grc/python/Port.py new file mode 100644 index 00000000..5a2b047f --- /dev/null +++ b/grc/python/Port.py @@ -0,0 +1,129 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from .. base.Port import Port as _Port +import Constants + +class Port(_Port): + + ##possible port types + TYPES = ['complex', 'float', 'int', 'short', 'byte'] + + def __init__(self, block, n): + """ + Make a new port from nested data. + @param block the parent element + @param n the nested odict + @return a new port + """ + vlen = n.find('vlen') or '1' + nports = n.find('nports') or '' + optional = n.find('optional') or '' + #build the port + _Port.__init__( + self, + block=block, + n=n, + ) + self._nports = nports + self._vlen = vlen + self._optional = bool(optional) + + def validate(self): + _Port.validate(self) + try: assert self.get_enabled_connections() or self.get_optional() + except AssertionError: self.add_error_message('Port is not connected.') + try: assert self.is_source() or len(self.get_enabled_connections()) <= 1 + except AssertionError: self.add_error_message('Port has too many connections.') + + def get_vlen(self): + """ + Get the vector length. + If the evaluation of vlen cannot be cast to an integer, return 1. + @return the vector length or 1 + """ + vlen = self.get_parent().resolve_dependencies(self._vlen) + try: return int(self.get_parent().get_parent().evaluate(vlen)) + except: return 1 + + def get_nports(self): + """ + Get the number of ports. + If already blank, return a blank + If the evaluation of nports cannot be cast to an integer, return 1. + @return the number of ports or 1 + """ + nports = self.get_parent().resolve_dependencies(self._nports) + #return blank if nports is blank + if not nports: return '' + try: + nports = int(self.get_parent().get_parent().evaluate(nports)) + assert 0 < nports + return nports + except: return 1 + + def get_optional(self): return bool(self._optional) + + def get_color(self): + """ + Get the color that represents this port's type. + Codes differ for ports where the vec length is 1 or greater than 1. + @return a hex color code. + """ + try: + if self.get_vlen() == 1: + return {#vlen is 1 + 'complex': Constants.COMPLEX_COLOR_SPEC, + 'float': Constants.FLOAT_COLOR_SPEC, + 'int': Constants.INT_COLOR_SPEC, + 'short': Constants.SHORT_COLOR_SPEC, + 'byte': Constants.BYTE_COLOR_SPEC, + }[self.get_type()] + return {#vlen is non 1 + 'complex': Constants.COMPLEX_VECTOR_COLOR_SPEC, + 'float': Constants.FLOAT_VECTOR_COLOR_SPEC, + 'int': Constants.INT_VECTOR_COLOR_SPEC, + 'short': Constants.SHORT_VECTOR_COLOR_SPEC, + 'byte': Constants.BYTE_VECTOR_COLOR_SPEC, + }[self.get_type()] + except: return _Port.get_color(self) + +class Source(Port): + + def __init__(self, block, n): + self._n = n #save n + #key is port index + n['key'] = str(block._source_count) + block._source_count = block._source_count + 1 + Port.__init__(self, block, n) + + def __del__(self): + self.get_parent()._source_count = self.get_parent()._source_count - 1 + +class Sink(Port): + + def __init__(self, block, n): + self._n = n #save n + #key is port index + n['key'] = str(block._sink_count) + block._sink_count = block._sink_count + 1 + Port.__init__(self, block, n) + + def __del__(self): + self.get_parent()._sink_count = self.get_parent()._sink_count - 1 diff --git a/grc/python/__init__.py b/grc/python/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/grc/python/__init__.py @@ -0,0 +1 @@ + diff --git a/grc/python/block.dtd b/grc/python/block.dtd new file mode 100644 index 00000000..7c6c3981 --- /dev/null +++ b/grc/python/block.dtd @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/grc/python/convert_hier.py b/grc/python/convert_hier.py new file mode 100644 index 00000000..bdafbcbc --- /dev/null +++ b/grc/python/convert_hier.py @@ -0,0 +1,79 @@ +""" +Copyright 2008 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import BLOCK_DTD +from .. base import ParseXML +from .. base import odict + +def convert_hier(flow_graph, python_file): + #extract info from the flow graph + input_sig = flow_graph.get_input_signature() + output_sig = flow_graph.get_output_signature() + parameters = flow_graph.get_parameters() + block_key = flow_graph.get_option('id') + block_name = flow_graph.get_option('title') + block_category = flow_graph.get_option('category') + block_desc = flow_graph.get_option('description') + block_author = flow_graph.get_option('author') + #build the nested data + block_n = odict() + block_n['name'] = block_name + block_n['key'] = block_key + block_n['category'] = block_category + block_n['import'] = 'execfile("%s")'%python_file + #make data + if parameters: block_n['make'] = '%s(\n\t%s,\n)'%( + block_key, + ',\n\t'.join(['%s=$%s'%(param.get_id(), param.get_id()) for param in parameters]), + ) + else: block_n['make'] = '%s()'%block_key + #callback data + block_n['callback'] = ['set_%s($%s)'%(param.get_id(), param.get_id()) for param in parameters] + #param data + params_n = list() + for param in parameters: + param_n = odict() + param_n['name'] = param.get_param('label').get_value() or param.get_id() + param_n['key'] = param.get_id() + param_n['value'] = param.get_param('value').get_value() + param_n['type'] = 'raw' + params_n.append(param_n) + block_n['param'] = params_n + #sink data + if int(input_sig['nports']): + sink_n = odict() + sink_n['name'] = 'in' + sink_n['type'] = input_sig['type'] + sink_n['vlen'] = input_sig['vlen'] + sink_n['nports'] = input_sig['nports'] + block_n['sink'] = sink_n + #source data + if int(output_sig['nports']): + source_n = odict() + source_n['name'] = 'out' + source_n['type'] = output_sig['type'] + source_n['vlen'] = output_sig['vlen'] + source_n['nports'] = output_sig['nports'] + block_n['source'] = source_n + #doc data + block_n['doc'] = "%s\n%s\n%s"%(block_author, block_desc, python_file) + #write the block_n to file + xml_file = python_file + '.xml' + ParseXML.to_file({'block': block_n}, xml_file) + ParseXML.validate_dtd(xml_file, BLOCK_DTD) diff --git a/grc/python/default_flow_graph.grc b/grc/python/default_flow_graph.grc new file mode 100644 index 00000000..dea26f3a --- /dev/null +++ b/grc/python/default_flow_graph.grc @@ -0,0 +1,43 @@ + + + + + options + + id + top_block + + + _coordinate + (10, 10) + + + _rotation + 0 + + + + variable + + id + samp_rate + + + value + 32000 + + + _coordinate + (10, 170) + + + _rotation + 0 + + + diff --git a/grc/python/expr_utils.py b/grc/python/expr_utils.py new file mode 100644 index 00000000..3c39f5d8 --- /dev/null +++ b/grc/python/expr_utils.py @@ -0,0 +1,153 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import string +VAR_CHARS = string.letters + string.digits + '_' + +class graph(object): + """ + Simple graph structure held in a dictionary. + """ + + def __init__(self): self._graph = dict() + + def __str__(self): return str(self._graph) + + def add_node(self, node_key): + if self._graph.has_key(node_key): return + self._graph[node_key] = set() + + def remove_node(self, node_key): + if not self._graph.has_key(node_key): return + for edges in self._graph.values(): + if node_key in edges: edges.remove(node_key) + self._graph.pop(node_key) + + def add_edge(self, src_node_key, dest_node_key): + self._graph[src_node_key].add(dest_node_key) + + def remove_edge(self, src_node_key, dest_node_key): + self._graph[src_node_key].remove(dest_node_key) + + def get_nodes(self): return self._graph.keys() + + def get_edges(self, node_key): return self._graph[node_key] + +def expr_split(expr): + """ + Split up an expression by non alphanumeric characters, including underscore. + Leave strings in-tact. + #TODO ignore escaped quotes, use raw strings. + @param expr an expression string + @return a list of string tokens that form expr + """ + toks = list() + tok = '' + quote = '' + for char in expr: + if quote or char in VAR_CHARS: + if char == quote: quote = '' + tok += char + elif char in ("'", '"'): + toks.append(tok) + tok = char + quote = char + else: + toks.append(tok) + toks.append(char) + tok = '' + toks.append(tok) + return filter(lambda t: t, toks) + +def expr_replace(expr, replace_dict): + """ + Search for vars in the expression and add the prepend. + @param expr an expression string + @param replace_dict a dict of find:replace + @return a new expression with the prepend + """ + expr_splits = expr_split(expr) + for i, es in enumerate(expr_splits): + if es in replace_dict.keys(): + expr_splits[i] = replace_dict[es] + return ''.join(expr_splits) + +def get_variable_dependencies(expr, vars): + """ + Return a set of variables used in this expression. + @param expr an expression string + @param vars a list of variable names + @return a subset of vars used in the expression + """ + expr_toks = expr_split(expr) + return set(filter(lambda v: v in expr_toks, vars)) + +def get_graph(exprs): + """ + Get a graph representing the variable dependencies + @param exprs a mapping of variable name to expression + @return a graph of variable deps + """ + vars = exprs.keys() + #get dependencies for each expression, load into graph + var_graph = graph() + for var in vars: var_graph.add_node(var) + for var, expr in exprs.iteritems(): + for dep in get_variable_dependencies(expr, vars): + if dep != var: var_graph.add_edge(dep, var) + return var_graph + +def sort_variables(exprs): + """ + Get a list of variables in order of dependencies. + @param exprs a mapping of variable name to expression + @return a list of variable names + @throws AssertionError circular dependencies + """ + var_graph = get_graph(exprs) + sorted_vars = list() + #determine dependency order + while var_graph.get_nodes(): + #get a list of nodes with no edges + indep_vars = filter(lambda var: not var_graph.get_edges(var), var_graph.get_nodes()) + assert indep_vars + #add the indep vars to the end of the list + sorted_vars.extend(sorted(indep_vars)) + #remove each edge-less node from the graph + for var in indep_vars: var_graph.remove_node(var) + return reversed(sorted_vars) + +def sort_objects(objects, get_id, get_expr): + """ + Sort a list of objects according to their expressions. + @param objects the list of objects to sort + @param get_id the function to extract an id from the object + @param get_expr the function to extract an expression from the object + @return a list of sorted objects + """ + id2obj = dict([(get_id(obj), obj) for obj in objects]) + #map obj id to expression code + id2expr = dict([(get_id(obj), get_expr(obj)) for obj in objects]) + #sort according to dependency + sorted_ids = sort_variables(id2expr) + #return list of sorted objects + return [id2obj[id] for id in sorted_ids] + +if __name__ == '__main__': + for i in sort_variables({'x':'1', 'y':'x+1', 'a':'x+y', 'b':'y+1', 'c':'a+b+x+y'}): print i diff --git a/grc/python/extract_category.py b/grc/python/extract_category.py new file mode 100644 index 00000000..f9358f61 --- /dev/null +++ b/grc/python/extract_category.py @@ -0,0 +1,61 @@ +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import DOCS_DIR +from lxml import etree +import os +import re + +DOXYGEN_TITLE_XPATH = '/doxygen/compounddef/title' +DOXYGEN_CLASS_XPATH = '/doxygen/compounddef/innerclass' + +#map a group/category to a list of blocks +_category_map = dict() + +#extract the group/category information +docs_dir = os.path.join(DOCS_DIR, 'xml') +if os.path.exists(docs_dir): + group_file_matcher = re.compile('^group__\w*\..*$') #xml or xml.gz + matches = filter(lambda f: group_file_matcher.match(f), os.listdir(docs_dir)) + for match in matches: + try: + xml_file = os.path.join(docs_dir, match) + xml = etree.parse(xml_file) + category = xml.xpath(DOXYGEN_TITLE_XPATH)[0].text + blocks = map(lambda x: x.text, xml.xpath(DOXYGEN_CLASS_XPATH)) + _category_map[category] = blocks + except: pass + +def extract(key): + """ + Match the given key to a key in an existing category. + If no match can be made, return an empty string. + @param key the block key + @return the category or empty string + """ + pattern = key.replace('_', '_*').replace('x', '\w') + class_name_matcher = re.compile('^%s$'%pattern) + for category, blocks in _category_map.iteritems(): + for block in blocks: + if class_name_matcher.match(block): return category + return '' + +if __name__ == '__main__': + import sys + print extract(sys.argv[1]) diff --git a/grc/python/extract_docs.py b/grc/python/extract_docs.py new file mode 100644 index 00000000..f0c1e749 --- /dev/null +++ b/grc/python/extract_docs.py @@ -0,0 +1,90 @@ +""" +Copyright 2008, 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from Constants import DOCS_DIR +from lxml import etree +import os +import re + +DOXYGEN_NAME_XPATH = '/doxygen/compounddef/compoundname' +DOXYGEN_BRIEFDESC_GR_XPATH = '/doxygen/compounddef/briefdescription' +DOXYGEN_DETAILDESC_GR_XPATH = '/doxygen/compounddef/detaileddescription' + +def extract_txt(xml): + """ + Recursivly pull the text out of an xml tree. + @param xml the xml tree + @return a string + """ + text = (xml.text or '').replace('\n', '') + tail = (xml.tail or '').replace('\n', '') + if xml.tag == 'para': tail += '\n\n' + if xml.tag == 'linebreak': text += '\n' + if xml.tag == 'parametername': text += ': ' + return text + ''.join( + map(lambda x: extract_txt(x), xml) + ) + tail + +def _extract(key): + """ + Extract the documentation from the doxygen generated xml files. + If multiple files match, combine the docs. + @param key the block key + @return a string with documentation + """ + docs_dir = os.path.join(DOCS_DIR, 'xml') + if not os.path.exists(docs_dir): return '' + #extract matches + pattern = key.replace('_', '_*').replace('x', '\w') + class_file_matcher = re.compile('^class%s\..*$'%pattern) #xml or xml.gz + matches = filter(lambda f: class_file_matcher.match(f), os.listdir(docs_dir)) + #combine all matches + doc_strs = list() + for match in matches: + try: + xml_file = os.path.join(docs_dir, match) + xml = etree.parse(xml_file) + #extract descriptions + comp_name = extract_txt(xml.xpath(DOXYGEN_NAME_XPATH)[0]).strip() + comp_name = ' --- ' + comp_name + ' --- ' + if re.match('(gr|usrp2|trellis)_.*', key): + brief_desc = extract_txt(xml.xpath(DOXYGEN_BRIEFDESC_GR_XPATH)[0]).strip() + detailed_desc = extract_txt(xml.xpath(DOXYGEN_DETAILDESC_GR_XPATH)[0]).strip() + else: + brief_desc = '' + detailed_desc = '' + #combine + doc_strs.append('\n\n'.join([comp_name, brief_desc, detailed_desc]).strip()) + except IndexError: pass #bad format + return '\n\n'.join(doc_strs) + +_docs_cache = dict() +def extract(key): + """ + Call the private extract and cache the result. + @param key the block key + @return a string with documentation + """ + try: assert _docs_cache.has_key(key) + except: _docs_cache[key] = _extract(key) + return _docs_cache[key] + +if __name__ == '__main__': + import sys + print extract(sys.argv[1]) diff --git a/grc/python/flow_graph.tmpl b/grc/python/flow_graph.tmpl new file mode 100644 index 00000000..b537c43e --- /dev/null +++ b/grc/python/flow_graph.tmpl @@ -0,0 +1,214 @@ +#!/usr/bin/env python +######################################################## +##Cheetah template - gnuradio_python +## +##@param imports the import statements +##@param flow_graph the flow_graph +##@param variables the variable blocks +##@param notebooks a list of notebook blocks +##@param controls the variables with gui controls +##@param parameters the paramater blocks +##@param blocks the signal blocks +##@param connections the connections +##@param generate_options the type of flow graph +##@param var_id2cbs variable id map to callback strings +######################################################## +#def indent($code) +#set $code = '\n\t\t'.join(str($code).splitlines()) +$code#slurp +#end def +#import time +#set $DIVIDER = '#'*50 +$DIVIDER +# Gnuradio Python Flow Graph +# Title: $title +#if $flow_graph.get_option('author') +# Author: $flow_graph.get_option('author') +#end if +#if $flow_graph.get_option('description') +# Description: $flow_graph.get_option('description') +#end if +# Generated: $time.ctime() +$DIVIDER + +######################################################## +##Create Imports +######################################################## +#for $imp in $imports +$imp +#end for + +######################################################## +##Create Class +## Write the class declaration for a top or hier block. +## The parameter names are the arguments to __init__. +## Determine the absolute icon path (wx gui only). +## Setup the IO signature (hier block only). +######################################################## +#set $class_name = $flow_graph.get_option('id') +#set $param_str = ', '.join(['self'] + ['%s=%s'%(param.get_id(), param.get_make()) for param in $parameters]) +#if $generate_options == 'wx_gui' + #import gtk + #set $icon = gtk.IconTheme().lookup_icon('gnuradio-grc', 32, 0) +class $(class_name)(grc_wxgui.top_block_gui): + + def __init__($param_str): + grc_wxgui.top_block_gui.__init__(self, title="$title") + #if $icon + _icon_path = "$icon.get_filename()" + self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) + #end if +#elif $generate_options == 'no_gui' +class $(class_name)(gr.top_block): + + def __init__($param_str): + gr.top_block.__init__(self, "$title") +#elif $generate_options == 'hb' + #set $in_sig = $flow_graph.get_input_signature() + #set $out_sig = $flow_graph.get_output_signature() +class $(class_name)(gr.hier_block2): + + def __init__($param_str): + gr.hier_block2.__init__( + self, "$title", + gr.io_signature($in_sig.nports, $in_sig.nports, $in_sig.size*$in_sig.vlen), + gr.io_signature($out_sig.nports, $out_sig.nports, $out_sig.size*$out_sig.vlen), + ) +#end if +######################################################## +##Create Parameters +## Set the parameter to a property of self. +######################################################## +#if $parameters + + $DIVIDER + # Parameters + $DIVIDER +#end if +#for $param in $parameters + $indent($param.get_var_make()) +#end for +######################################################## +##Create Variables +######################################################## +#if $variables + + $DIVIDER + # Variables + $DIVIDER +#end if +#for $var in $variables + $indent($var.get_var_make()) +#end for +######################################################## +##Create Notebooks +######################################################## +#if $notebooks + + $DIVIDER + # Notebooks + $DIVIDER +#end if +#for $notebook in $notebooks + $indent($notebook.get_make()) +#end for +######################################################## +##Create Controls +######################################################## +#if $controls + + $DIVIDER + # Controls + $DIVIDER +#end if +#for $ctrl in $controls + $indent($ctrl.get_make()) +#end for +######################################################## +##Create Blocks +######################################################## +#if $blocks + + $DIVIDER + # Blocks + $DIVIDER +#end if +#for $blk in filter(lambda b: b.get_make(), $blocks) + self.$blk.get_id() = $indent($blk.get_make()) +#end for +######################################################## +##Create Connections +## The port name should be the id of the parent block. +## However, port names for IO pads should be self. +######################################################## +#if $connections + + $DIVIDER + # Connections + $DIVIDER +#end if +#for $con in $connections + #set $source = $con.get_source() + #set $sink = $con.get_sink() + #if $source.get_parent().get_key() == 'pad_source' + #set $source_name = 'self' + #else + #set $source_name = 'self.' + $source.get_parent().get_id() + #end if + #if $sink.get_parent().get_key() == 'pad_sink' + #set $sink_name = 'self' + #else + #set $sink_name = 'self.' + $sink.get_parent().get_id() + #end if + self.connect(($source_name, $source.get_key()), ($sink_name, $sink.get_key())) +#end for + +######################################################## +##Create Callbacks +## Write a set method for this variable that calls the callbacks +######################################################## +#for $var in $parameters + $variables + #set $id = $var.get_id() + def set_$(id)(self, $id): + self.$id = $id + #for $callback in $var_id2cbs[$id] + $indent($callback) + #end for + +#end for +######################################################## +##Create Main +## For top block code, generate a main routine. +## Instantiate the top block and run as gui or cli. +######################################################## +#if $generate_options != 'hb' +if __name__ == '__main__': + parser = OptionParser(option_class=eng_option, usage="%prog: [options]") + #set $params_eq_list = list() + #for $param in $parameters + #set $type = $param.get_param('type').get_value() + #if $type + #silent $params_eq_list.append('%s=options.%s'%($param.get_id(), $param.get_id())) + #set $short_id = $param.get_param('short_id').get_evaluated() + #if $short_id + #set $short_id = '-' + $short_id + #end if + parser.add_option("$short_id", "--$param.get_id()", dest="$param.get_id()", type="$type", default=$param.get_make(), + help="Set $($param.get_param('label').evaluate() or $param.get_id()) [default=%default]") + #end if + #end for + (options, args) = parser.parse_args() + #if $flow_graph.get_option('realtime_scheduling') + if gr.enable_realtime_scheduling() != gr.RT_OK: + print "Error: failed to enable realtime scheduling." + #end if + tb = $(class_name)($(', '.join($params_eq_list))) + #if $generate_options == 'wx_gui' + tb.Run($flow_graph.get_option('run')) + #elif $generate_options == 'no_gui' + tb.start() + raw_input('Press Enter to quit: ') + tb.stop() + #end if +#end if + diff --git a/grc/scripts/Makefile.am b/grc/scripts/Makefile.am new file mode 100644 index 00000000..35c75d5f --- /dev/null +++ b/grc/scripts/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/grc/Makefile.inc + +dist_bin_SCRIPTS = grc usrp2_probe usrp_probe diff --git a/grc/scripts/Makefile.in b/grc/scripts/Makefile.in new file mode 100644 index 00000000..c56b362f --- /dev/null +++ b/grc/scripts/Makefile.in @@ -0,0 +1,924 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_bin_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common \ + $(top_srcdir)/grc/Makefile.inc +subdir = grc/scripts +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +dist_binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(dist_bin_SCRIPTS) +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grc_src_prefix = $(pythondir)/gnuradio/grc +grc_blocksdir = $(pkgdatadir)/grc/blocks +dist_bin_SCRIPTS = grc usrp2_probe usrp_probe +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/grc/Makefile.inc $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grc/scripts/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu grc/scripts/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(dist_binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(dist_binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-dist_binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-dist_binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_binSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_binSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_binSCRIPTS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grc/scripts/grc b/grc/scripts/grc new file mode 100755 index 00000000..8a6cc0af --- /dev/null +++ b/grc/scripts/grc @@ -0,0 +1,54 @@ +#!/usr/bin/env python +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +import pygtk +pygtk.require('2.0') +import gtk + +try: from gnuradio import gr +except ImportError, e: + d = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_CLOSE, message_format=""" +Cannot import gnuradio. Are your PYTHONPATH and LD_LIBRARY_PATH set correctly?""") + d.set_title(str(e)) + d.run() + exit(-1) + +from gnuradio.grc import VERSION +from optparse import OptionParser + +if __name__ == "__main__": + usage = 'usage: %prog [options] [saved flow graphs]' + version = """ +GNU Radio Companion %s + +This program is part of GNU Radio +GRC comes with ABSOLUTELY NO WARRANTY. +This is free software, +and you are welcome to redistribute it. +"""%VERSION + parser = OptionParser(usage=usage, version=version) + (options, args) = parser.parse_args() + from gnuradio.grc.python.Platform import Platform + from gnuradio.grc.gui.ActionHandler import ActionHandler + #setup icon using icon theme + try: gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc', 256, 0)) + except: pass + ActionHandler(args, Platform()) + diff --git a/grc/scripts/usrp2_probe b/grc/scripts/usrp2_probe new file mode 100755 index 00000000..00d4366d --- /dev/null +++ b/grc/scripts/usrp2_probe @@ -0,0 +1,161 @@ +#!/usr/bin/env python +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from gnuradio import usrp2 +import subprocess +import os + +import pygtk +pygtk.require('2.0') +import gtk +import gobject + +from gnuradio.grc.gui.Dialogs import TextDisplay + +from gnuradio.grc.python.Platform import Platform +platform = Platform() + +from gnuradio.grc.gui.Platform import Platform +platform = Platform(platform) + +flow_graph = platform.get_new_flow_graph() +block = flow_graph.get_new_block('usrp2_probe') + +##all params +usrp_interface_param = block.get_param('interface') +usrp_type_param = block.get_param('type') + +class USRP2ProbeWindow(gtk.Window): + """ + The main window for USRP Dignostics. + """ + + def delete_event(self, widget, event, data=None): return False + + def destroy(self, widget, data=None): gtk.main_quit() + + def __init__(self): + """ + USRP2ProbeWindow contructor. + Create a new gtk Dialog with a close button, USRP2 input paramaters, and output labels. + """ + self.usrp2_macs = list() + gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) + #quit signals + self.connect("delete_event", self.delete_event) + self.connect("destroy", self.destroy) + #set the title + self.set_title('USRP2 Probe') + #create decorative frame + frame = gtk.Frame() + self.add(frame) + #create vbox for storage + vbox = gtk.VBox() + frame.add(vbox) + vbox.pack_start(usrp_interface_param.get_input_object(), False) + vbox.pack_start(usrp_type_param.get_input_object(), False) + #make the tree model for holding mac addrs + self.treestore = gtk.TreeStore(gobject.TYPE_STRING) + self.treeview = gtk.TreeView(self.treestore) + self.treeview.set_enable_search(False) #disable pop up search box + self.treeview.add_events(gtk.gdk.BUTTON_PRESS_MASK) + self.treeview.connect('button_press_event', self._handle_selection) + selection = self.treeview.get_selection() + selection.set_mode('single') + selection.connect('changed', self._handle_selection) + renderer = gtk.CellRendererText() + column = gtk.TreeViewColumn('Select a USRP2 MAC Address', renderer, text=0) + self.treeview.append_column(column) + vbox.pack_start(self.treeview, False) + #create probe button + self.probe_button = gtk.Button('Probe') + self.probe_button.connect('clicked', self._probe_usrp2) + vbox.pack_start(self.probe_button, False) + #Create a text box for USRP queries + self.query_buffer = TextDisplay() + self.query_buffer.set_text(block.get_doc()) + vbox.pack_start(self.query_buffer) + self.show_all() + self.treeview.hide() + + def _probe_usrp2(self, widget=None): + """Probe the USRP2 device and copy the results into the query text box.""" + #call find usrps + args = ['find_usrps'] + interface = usrp_interface_param.evaluate() + if interface: args.extend(['-e', interface]) + p = subprocess.Popen(args=args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, universal_newlines=True) + msg = p.stdout.read() + #extract mac addrs + self.usrp2_macs = sorted(map(lambda l: l.split()[0], filter(lambda l: l.count(':') >= 5, msg.strip().splitlines()))) + #set the tree store with the mac addrs + self.treestore.clear() + for usrp2_mac in self.usrp2_macs: self.treestore.append(None, (usrp2_mac,)) + #set the text with the error message for 0 found, hide the list + #when only 1 usrp2, auto handle selection, hide the list + #for multiple usrp2, show the list + if not self.usrp2_macs: + self.treeview.hide() + self.query_buffer.set_text(msg) + elif len(self.usrp2_macs) == 1: + self.treeview.hide() + self.query_buffer.set_text('') + self._handle_selection() + else: + self.treeview.show() + self.query_buffer.set_text('') + + def _handle_selection(self, *args, **kwargs): + """A selection change or click occured.""" + #get the mac addr + selection = self.treeview.get_selection() + treestore, iter = selection.get_selected() + mac_addr = iter and treestore.get_value(iter, 0) or '' + if not mac_addr and len(self.usrp2_macs) > 1: + return #no empty mac addrs for when multiple found + #make the usrp2 object + make, rate_attr = { + 'rx': (usrp2.source_32fc, 'adc_rate'), + 'tx': (usrp2.sink_32fc, 'dac_rate'), + }[usrp_type_param.evaluate()] + interface = usrp_interface_param.evaluate() + try: + if not interface and not mac_addr: u = make() + elif not mac_addr: u = make(interface) + else: u = make(interface, mac_addr) + msg = ">>> USRP2 Probe\n" + msg = "%s\nMAC Addr:\n\t%s\n"%(msg, u.mac_addr()) + msg = "%s\nName (ID):\n\t%s\n"%(msg, u.daughterboard_id()) + msg = "%s\nConverter Rate:\n\t%s Hz\n"%(msg, getattr(u, rate_attr)()) + gain_min, gain_max, gain_step = u.gain_range() + msg = "%s\nGain Range (min, max, step size):\n\t%s\n\t%s\n\t%s\n"%(msg, gain_min, gain_max, gain_step) + freq_min, freq_max = u.freq_range() + msg = "%s\nFreq Range (min, max):\n\t%s Hz\n\t%s Hz\n"%(msg, freq_min, freq_max) + self.query_buffer.set_text(msg) + except Exception, e: #display the error message + self.query_buffer.set_text('>>> Error\n%s'%str(e)) + +if __name__ == '__main__': + #setup icon using icon theme + try: gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc', 256, 0)) + except: pass + #enter the mainloop + USRP2ProbeWindow() + gtk.main() diff --git a/grc/scripts/usrp_probe b/grc/scripts/usrp_probe new file mode 100755 index 00000000..6565612c --- /dev/null +++ b/grc/scripts/usrp_probe @@ -0,0 +1,113 @@ +#!/usr/bin/env python +""" +Copyright 2009 Free Software Foundation, Inc. +This file is part of GNU Radio + +GNU Radio Companion 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 +of the License, or (at your option) any later version. + +GNU Radio Companion 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 +""" + +from gnuradio import usrp +import os + +import pygtk +pygtk.require('2.0') +import gtk + +from gnuradio.grc.gui.Dialogs import TextDisplay + +from gnuradio.grc.python.Platform import Platform +platform = Platform() + +from gnuradio.grc.gui.Platform import Platform +platform = Platform(platform) + +flow_graph = platform.get_new_flow_graph() +block = flow_graph.get_new_block('usrp_probe') + +##all params +usrp_which_param = block.get_param('which') +usrp_dboard_param = block.get_param('dboard') + +class USRPProbeWindow(gtk.Window): + """ + The main window for USRP Dignostics. + """ + + def delete_event(self, widget, event, data=None): return False + + def destroy(self, widget, data=None): gtk.main_quit() + + def __init__(self): + """ + USRPProbeWindow contructor. + Create a new gtk Dialog with a close button, USRP input paramaters, and output labels. + """ + gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) + #quit signals + self.connect("delete_event", self.delete_event) + self.connect("destroy", self.destroy) + #set the title + self.set_title('USRP Probe') + #create decorative frame + frame = gtk.Frame() + self.add(frame) + #create vbox for storage + vbox = gtk.VBox() + frame.add(vbox) + vbox.pack_start(usrp_which_param.get_input_object(), False) + vbox.pack_start(usrp_dboard_param.get_input_object(), False) + self.probe_button = gtk.Button('Probe') + self.probe_button.connect('clicked', self._probe_usrp) + vbox.pack_start(self.probe_button, False) + #Create a text box for USRP queries + self.query_buffer = TextDisplay() + self.query_buffer.set_text(block.get_doc()) + vbox.pack_start(self.query_buffer) + self.show_all() + + def _probe_usrp(self, widget=None): + """Probe the USRP device and copy the results into the query text box.""" + dboard = usrp_dboard_param.evaluate() + side = {'a': 0, 'b': 1}[dboard[-1]] + if dboard.startswith('rx'): make = usrp.source_c + elif dboard.startswith('tx'): make = usrp.sink_c + try: + u = make(which=usrp_which_param.evaluate()) + subdev_spec = (side, 0) + subdev = usrp.selected_subdev(u, subdev_spec) #get the subdev + msg = ">>> USRP Probe\n" + msg = "%s\nName:\n\t%s\n"%(msg, str(subdev.name())) + msg = "%s\nConverter Rate:\n\t%s\n"%(msg, u.converter_rate()) + msg = "%s\nUses Quadrature:\n\t%s\n"%(msg, str(subdev.is_quadrature())) + gain_min, gain_max, gain_step = subdev.gain_range() + msg = "%s\nGain Range (min, max, step size):\n\t%s\n\t%s\n\t%s\n"%(msg, gain_min, gain_max, gain_step) + freq_min, freq_max, freq_step = subdev.freq_range() + msg = "%s\nFreq Range (min, max, step size):\n\t%s\n\t%s\n\t%s\n"%(msg, freq_min, freq_max, freq_step) + self.query_buffer.set_text(msg) + except Exception, e: #display the error message + self.query_buffer.set_text('''\ +>>> Error\n%s + +If the USRP cannot be found, make sure that the USRP is plugged-in and restart this program. \ +If the problem persists, there may be a problem with you gnuradio installation or USB 2.0. +'''%str(e)) + +if __name__ == '__main__': + #setup icon using icon theme + try: gtk.window_set_default_icon(gtk.IconTheme().load_icon('gnuradio-grc', 256, 0)) + except: pass + #enter the mainloop + USRPProbeWindow() + gtk.main() diff --git a/gruel/Makefile.am b/gruel/Makefile.am new file mode 100644 index 00000000..93f56a7d --- /dev/null +++ b/gruel/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + gruel.pc.in + +SUBDIRS = src + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gruel.pc diff --git a/gruel/Makefile.in b/gruel/Makefile.in new file mode 100644 index 00000000..e2058ed5 --- /dev/null +++ b/gruel/Makefile.in @@ -0,0 +1,1068 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gruel.pc.in $(top_srcdir)/Makefile.common +subdir = gruel +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gruel.pc +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + gruel.pc.in + +SUBDIRS = src +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gruel.pc +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gruel/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gruel/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gruel.pc: $(top_builddir)/config.status $(srcdir)/gruel.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gruel/README b/gruel/README new file mode 100644 index 00000000..585cf026 --- /dev/null +++ b/gruel/README @@ -0,0 +1,30 @@ +# +# Copyright 2008 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. +# + +The GNU Radio Utility Etcetera Library, a collection of low-level routines +to avoid dependencies on the full GNU Radio core or other libraries. + +Over time, some code from libgnuradio-core, libpmt, libmblock, libusrp, +and libusrp2 will migrate here, to avoid duplication of code and simplify +dependencies. + +By design, this library will not have dependencies on any other part +of GNU Radio, but may have external dependencies such as Boost. diff --git a/gruel/gruel.pc.in b/gruel/gruel.pc.in new file mode 100644 index 00000000..6377f5bb --- /dev/null +++ b/gruel/gruel.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: gruel +Description: The GNU Radio Utility Etcetera Library +Requires: +Version: @VERSION@ +Libs: -L${libdir} -lgruel +Cflags: -I${includedir} diff --git a/gruel/src/Makefile.am b/gruel/src/Makefile.am new file mode 100644 index 00000000..90c0f88b --- /dev/null +++ b/gruel/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2008 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. +# + +SUBDIRS = include lib diff --git a/gruel/src/Makefile.in b/gruel/src/Makefile.in new file mode 100644 index 00000000..a202ee18 --- /dev/null +++ b/gruel/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gruel/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = include lib +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gruel/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gruel/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gruel/src/include/Makefile.am b/gruel/src/include/Makefile.am new file mode 100644 index 00000000..7a178810 --- /dev/null +++ b/gruel/src/include/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2008 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. +# + +SUBDIRS = gruel diff --git a/gruel/src/include/Makefile.in b/gruel/src/include/Makefile.in new file mode 100644 index 00000000..c4668266 --- /dev/null +++ b/gruel/src/include/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = gruel/src/include +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = gruel +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gruel/src/include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gruel/src/include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gruel/src/include/gruel/Makefile.am b/gruel/src/include/gruel/Makefile.am new file mode 100644 index 00000000..648d53e2 --- /dev/null +++ b/gruel/src/include/gruel/Makefile.am @@ -0,0 +1,34 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +BUILT_SOURCES = \ + inet.h + +gruelincludedir = $(prefix)/include/gruel + +gruelinclude_HEADERS = \ + $(BUILT_SOURCES) \ + realtime.h \ + sys_pri.h \ + thread_body_wrapper.h \ + thread_group.h diff --git a/gruel/src/include/gruel/Makefile.in b/gruel/src/include/gruel/Makefile.in new file mode 100644 index 00000000..396e115b --- /dev/null +++ b/gruel/src/include/gruel/Makefile.in @@ -0,0 +1,964 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(gruelinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/inet.h.in \ + $(top_srcdir)/Makefile.common +subdir = gruel/src/include/gruel +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = inet.h +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(gruelincludedir)" +gruelincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(gruelinclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +BUILT_SOURCES = \ + inet.h + +gruelincludedir = $(prefix)/include/gruel +gruelinclude_HEADERS = \ + $(BUILT_SOURCES) \ + realtime.h \ + sys_pri.h \ + thread_body_wrapper.h \ + thread_group.h + +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gruel/src/include/gruel/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gruel/src/include/gruel/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +inet.h: $(top_builddir)/config.status $(srcdir)/inet.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-gruelincludeHEADERS: $(gruelinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(gruelincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gruelincludedir)" + @list='$(gruelinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(gruelincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(gruelincludedir)/$$f'"; \ + $(gruelincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(gruelincludedir)/$$f"; \ + done + +uninstall-gruelincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(gruelinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(gruelincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(gruelincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(gruelincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-gruelincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-gruelincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-gruelincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-gruelincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gruel/src/include/gruel/inet.h b/gruel/src/include/gruel/inet.h new file mode 100644 index 00000000..61a14683 --- /dev/null +++ b/gruel/src/include/gruel/inet.h @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_INET_H +#define INCLUDED_INET_H + +#if 1 /* GR_HAVE_ARPA_INET */ +#include +#elif 1 /* GR_HAVE_NETINET_IN */ +#include +#else +#include + +#if 0 /* GR_ARCH_BIGENDIAN */ +// Nothing to do... +static inline uint32_t htonl(uint32_t x){ return x; } +static inline uint16_t htons(uint16_t x){ return x; } +static inline uint32_t ntohl(uint32_t x){ return x; } +static inline uint16_t ntohs(uint16_t x){ return x; } +#else +#if 1 /* GR_HAVE_BYTESWAP */ +#include +#else +static inline uint16_t +bswap_16 (uint16_t x) +{ + return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)); +} + +static inline uint32_t +bswap_32 (uint32_t x) +{ + return ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \ + | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)); +} +#endif /* GR_HAVE_BYTESWAP */ + +static inline uint32_t htonl(uint32_t x){ return bswap_32(x); } +static inline uint16_t htons(uint16_t x){ return bswap_16(x); } +static inline uint32_t ntohl(uint32_t x){ return bswap_32(x); } +static inline uint16_t ntohs(uint16_t x){ return bswap_16(x); } +#endif /* GR_ARCH_BIGENDIAN */ + +#endif /* !(GR_HAVE_NETINET_IN || GR_HAVE_ARPA_INET) */ + +static inline uint8_t ntohx(uint8_t x){ return x; } +static inline uint16_t ntohx(uint16_t x){ return ntohs(x); } +static inline uint32_t ntohx(uint32_t x){ return ntohl(x); } +static inline uint8_t htonx(uint8_t x){ return x; } +static inline uint16_t htonx(uint16_t x){ return htons(x); } +static inline uint32_t htonx(uint32_t x){ return htonl(x); } + +#endif /* INCLUDED_INET_H */ diff --git a/gruel/src/include/gruel/inet.h.in b/gruel/src/include/gruel/inet.h.in new file mode 100644 index 00000000..a98d83e9 --- /dev/null +++ b/gruel/src/include/gruel/inet.h.in @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_INET_H +#define INCLUDED_INET_H + +#if @GR_HAVE_ARPA_INET@ /* GR_HAVE_ARPA_INET */ +#include +#elif @GR_HAVE_NETINET_IN@ /* GR_HAVE_NETINET_IN */ +#include +#else +#include + +#if @GR_ARCH_BIGENDIAN@ /* GR_ARCH_BIGENDIAN */ +// Nothing to do... +static inline uint32_t htonl(uint32_t x){ return x; } +static inline uint16_t htons(uint16_t x){ return x; } +static inline uint32_t ntohl(uint32_t x){ return x; } +static inline uint16_t ntohs(uint16_t x){ return x; } +#else +#if @GR_HAVE_BYTESWAP@ /* GR_HAVE_BYTESWAP */ +#include +#else +static inline uint16_t +bswap_16 (uint16_t x) +{ + return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)); +} + +static inline uint32_t +bswap_32 (uint32_t x) +{ + return ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \ + | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)); +} +#endif /* GR_HAVE_BYTESWAP */ + +static inline uint32_t htonl(uint32_t x){ return bswap_32(x); } +static inline uint16_t htons(uint16_t x){ return bswap_16(x); } +static inline uint32_t ntohl(uint32_t x){ return bswap_32(x); } +static inline uint16_t ntohs(uint16_t x){ return bswap_16(x); } +#endif /* GR_ARCH_BIGENDIAN */ + +#endif /* !(GR_HAVE_NETINET_IN || GR_HAVE_ARPA_INET) */ + +static inline uint8_t ntohx(uint8_t x){ return x; } +static inline uint16_t ntohx(uint16_t x){ return ntohs(x); } +static inline uint32_t ntohx(uint32_t x){ return ntohl(x); } +static inline uint8_t htonx(uint8_t x){ return x; } +static inline uint16_t htonx(uint16_t x){ return htons(x); } +static inline uint32_t htonx(uint32_t x){ return htonl(x); } + +#endif /* INCLUDED_INET_H */ diff --git a/gruel/src/include/gruel/realtime.h b/gruel/src/include/gruel/realtime.h new file mode 100644 index 00000000..d110ec95 --- /dev/null +++ b/gruel/src/include/gruel/realtime.h @@ -0,0 +1,95 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifndef INCLUDED_GRUEL_REALTIME_H +#define INCLUDED_GRUEL_REALTIME_H + +#include + +/*! + * \brief System independent way to ask for realtime scheduling + * + * \sa sys_pri.h + */ + +namespace gruel { + + typedef enum { + RT_OK = 0, + RT_NOT_IMPLEMENTED, + RT_NO_PRIVS, + RT_OTHER_ERROR + } rt_status_t; + + + enum rt_sched_policy { + RT_SCHED_RR = 0, // round robin + RT_SCHED_FIFO = 1, // first in first out + }; + + /* + * Define the range for our virtual priorities (don't change these) + * + * Processes (or threads) with numerically higher priority values + * are scheduled before processes with numerically lower priority + * values. Thus, the value returned by rt_priority_max() will be + * greater than the value returned by rt_priority_min(). + */ + static inline int rt_priority_min() { return 0; } + static inline int rt_priority_max() { return 15; } + static inline int rt_priority_default() { return 1; } + + struct rt_sched_param { + int priority; + rt_sched_policy policy; + + rt_sched_param() + : priority(rt_priority_default()), policy(RT_SCHED_RR){} + + rt_sched_param(int priority_, rt_sched_policy policy_ = RT_SCHED_RR) + { + if (priority_ < rt_priority_min() || priority_ > rt_priority_max()) + throw std::invalid_argument("rt_sched_param: priority out of range"); + + priority = priority_; + policy = policy_; + } + }; + + /*! + * \brief If possible, enable "realtime" scheduling. + * \ingroup misc + * + * In general, this means that the code will be scheduled before any + * non-realtime (normal) processes. Note that if your code contains + * an non-blocking infinite loop and you enable realtime scheduling, + * it's possible to hang the system. + */ + + // NOTE: If you change this, you need to change the code in + // gnuradio-core/src/lib/runtime/gr_realtime.i, see note there. + rt_status_t + enable_realtime_scheduling(rt_sched_param = rt_sched_param()); + +} // namespace gruel + +#endif /* INCLUDED_GRUEL_REALTIME_H */ diff --git a/gruel/src/include/gruel/sys_pri.h b/gruel/src/include/gruel/sys_pri.h new file mode 100644 index 00000000..b0fd8365 --- /dev/null +++ b/gruel/src/include/gruel/sys_pri.h @@ -0,0 +1,41 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_GRUEL_SYS_PRI_H +#define INCLUDED_GRUEL_SYS_PRI_H + +#include + +/* + * A single place to define real-time priorities used by the system itself + */ +namespace gruel { + + struct sys_pri { + static rt_sched_param python(); // python code + static rt_sched_param normal(); // normal blocks + static rt_sched_param gcell_event_handler(); + static rt_sched_param usrp2_backend(); // thread that services the ethernet + }; + +} + +#endif /* INCLUDED_GRUEL_SYS_PRI_H */ diff --git a/gruel/src/include/gruel/thread_body_wrapper.h b/gruel/src/include/gruel/thread_body_wrapper.h new file mode 100644 index 00000000..27dbbf7b --- /dev/null +++ b/gruel/src/include/gruel/thread_body_wrapper.h @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_THREAD_BODY_WRAPPER_H +#define INCLUDED_THREAD_BODY_WRAPPER_H + +#include +#include +#include + +namespace gruel +{ + + void mask_signals(); + + template + class thread_body_wrapper + { + F d_f; + std::string d_name; + + public: + + explicit thread_body_wrapper(F f, const std::string &name="") + : d_f(f), d_name(name) {} + + void operator()() + { + mask_signals(); + + try { + d_f(); + } + catch(boost::thread_interrupted const &) + { + } + catch(std::exception const &e) + { + std::cerr << "thread[" << d_name << "]: " + << e.what() << std::endl; + } + catch(...) + { + std::cerr << "thread[" << d_name << "]: " + << "caught unrecognized exception\n"; + } + } + }; +} + +#endif /* INCLUDED_THREAD_BODY_WRAPPER_H */ diff --git a/gruel/src/include/gruel/thread_group.h b/gruel/src/include/gruel/thread_group.h new file mode 100644 index 00000000..ae9a4250 --- /dev/null +++ b/gruel/src/include/gruel/thread_group.h @@ -0,0 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright (C) 2001-2003 William E. Kempf + * Copyright (C) 2007 Anthony Williams + * Copyright 2008 Free Software Foundation, Inc. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +/* + * This was extracted from Boost 1.35.0 and fixed. + */ + +#ifndef INCLUDED_GRUEL_THREAD_GROUP_H +#define INCLUDED_GRUEL_THREAD_GROUP_H + +#include +#include +#include +#include + +namespace gruel +{ + class thread_group : public boost::noncopyable + { + public: + thread_group(); + ~thread_group(); + + boost::thread* create_thread(const boost::function0& threadfunc); + void add_thread(boost::thread* thrd); + void remove_thread(boost::thread* thrd); + void join_all(); + void interrupt_all(); + size_t size() const; + + private: + std::list m_threads; + mutable boost::shared_mutex m_mutex; + }; +} + +#endif /* INCLUDED_GRUEL_THREAD_GROUP_H */ diff --git a/gruel/src/lib/Makefile.am b/gruel/src/lib/Makefile.am new file mode 100644 index 00000000..c2a008e4 --- /dev/null +++ b/gruel/src/lib/Makefile.am @@ -0,0 +1,41 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(DEFINES) $(BOOST_CPPFLAGS) $(GRUEL_INCLUDES) $(WITH_INCLUDES) + +lib_LTLIBRARIES = libgruel.la + +# magic flags +libgruel_la_LDFLAGS = $(NO_UNDEFINED) $(BOOST_LDFLAGS) -version-info 0:0:0 + +# These are the source files that go into the gruel shared library +libgruel_la_SOURCES = \ + realtime.cc \ + sys_pri.cc \ + thread_body_wrapper.cc \ + thread_group.cc + +libgruel_la_LIBADD = \ + $(BOOST_THREAD_LIB) + +noinst_HEADERS = diff --git a/gruel/src/lib/Makefile.in b/gruel/src/lib/Makefile.in new file mode 100644 index 00000000..dd4f56db --- /dev/null +++ b/gruel/src/lib/Makefile.in @@ -0,0 +1,1036 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = gruel/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgruel_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_libgruel_la_OBJECTS = realtime.lo sys_pri.lo thread_body_wrapper.lo \ + thread_group.lo +libgruel_la_OBJECTS = $(am_libgruel_la_OBJECTS) +libgruel_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgruel_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libgruel_la_SOURCES) +DIST_SOURCES = $(libgruel_la_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(DEFINES) $(BOOST_CPPFLAGS) $(GRUEL_INCLUDES) $(WITH_INCLUDES) +lib_LTLIBRARIES = libgruel.la + +# magic flags +libgruel_la_LDFLAGS = $(NO_UNDEFINED) $(BOOST_LDFLAGS) -version-info 0:0:0 + +# These are the source files that go into the gruel shared library +libgruel_la_SOURCES = \ + realtime.cc \ + sys_pri.cc \ + thread_body_wrapper.cc \ + thread_group.cc + +libgruel_la_LIBADD = \ + $(BOOST_THREAD_LIB) + +noinst_HEADERS = +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gruel/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gruel/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgruel.la: $(libgruel_la_OBJECTS) $(libgruel_la_DEPENDENCIES) + $(libgruel_la_LINK) -rpath $(libdir) $(libgruel_la_OBJECTS) $(libgruel_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realtime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_pri.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread_body_wrapper.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread_group.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gruel/src/lib/realtime.cc b/gruel/src/lib/realtime.cc new file mode 100644 index 00000000..7397cf3d --- /dev/null +++ b/gruel/src/lib/realtime.cc @@ -0,0 +1,146 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#ifdef HAVE_SCHED_H +#include +#endif + +#include +#include +#include +#include +#include + +#if defined(HAVE_PTHREAD_SETSCHEDPARAM) || defined(HAVE_SCHED_SETSCHEDULER) +#include + +namespace gruel { + + /*! + * Rescale our virtual priority so that it maps to the middle 1/2 of + * the priorities given by min_real_pri and max_real_pri. + */ + static int + rescale_virtual_pri(int virtual_pri, int min_real_pri, int max_real_pri) + { + float rmin = min_real_pri + (0.25 * (max_real_pri - min_real_pri)); + float rmax = min_real_pri + (0.75 * (max_real_pri - min_real_pri)); + float m = (rmax - rmin) / (rt_priority_max() - rt_priority_min()); + float y = m * (virtual_pri - rt_priority_min()) + rmin; + int y_int = static_cast(rint(y)); + return std::max(min_real_pri, std::min(max_real_pri, y_int)); + } + +} // namespace gruel + +#endif + + +#if defined(HAVE_PTHREAD_SETSCHEDPARAM) + +namespace gruel { + + rt_status_t + enable_realtime_scheduling(rt_sched_param p) + { + int policy = p.policy == RT_SCHED_FIFO ? SCHED_FIFO : SCHED_RR; + int min_real_pri = sched_get_priority_min(policy); + int max_real_pri = sched_get_priority_max(policy); + int pri = rescale_virtual_pri(p.priority, min_real_pri, max_real_pri); + + // FIXME check hard and soft limits with getrlimit, and limit the value we ask for. + // fprintf(stderr, "pthread_setschedparam: policy = %d, pri = %d\n", policy, pri); + + struct sched_param param; + memset (¶m, 0, sizeof (param)); + param.sched_priority = pri; + int result = pthread_setschedparam (pthread_self(), policy, ¶m); + if (result != 0) { + if (result == EPERM) // N.B., return value, not errno + return RT_NO_PRIVS; + else { + fprintf(stderr, + "pthread_setschedparam: failed to set real time priority: %s\n", + strerror(result)); + return RT_OTHER_ERROR; + } + } + + //printf("SCHED_FIFO enabled with priority = %d\n", pri); + return RT_OK; + } +} // namespace gruel + + +#elif defined(HAVE_SCHED_SETSCHEDULER) + +namespace gruel { + + rt_status_t + enable_realtime_scheduling(rt_sched_param p) + { + int policy = p.policy == RT_SCHED_FIFO ? SCHED_FIFO : SCHED_RR; + int min_real_pri = sched_get_priority_min(policy); + int max_real_pri = sched_get_priority_max(policy); + int pri = rescale_virtual_pri(p.priority, min_real_pri, max_real_pri); + + // FIXME check hard and soft limits with getrlimit, and limit the value we ask for. + // fprintf(stderr, "sched_setscheduler: policy = %d, pri = %d\n", policy, pri); + + int pid = 0; // this process + struct sched_param param; + memset(¶m, 0, sizeof(param)); + param.sched_priority = pri; + int result = sched_setscheduler(pid, policy, ¶m); + if (result != 0){ + if (errno == EPERM) + return RT_NO_PRIVS; + else { + perror ("sched_setscheduler: failed to set real time priority"); + return RT_OTHER_ERROR; + } + } + + //printf("SCHED_FIFO enabled with priority = %d\n", pri); + return RT_OK; + } + +} // namespace gruel + +#else + +namespace gruel { + + rt_status_t + enable_realtime_scheduling(rt_sched_param p) + { + return RT_NOT_IMPLEMENTED; + } +} // namespace gruel + +#endif diff --git a/gruel/src/lib/sys_pri.cc b/gruel/src/lib/sys_pri.cc new file mode 100644 index 00000000..dc0164d7 --- /dev/null +++ b/gruel/src/lib/sys_pri.cc @@ -0,0 +1,61 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +namespace gruel { + + /* + * These may need per-OS tweaking. + * + * Under linux virtual_pri -> system_pri + * 0 -> 0 + * 1 -> 5 + * 2 -> 10 + * 3 -> 15 + * 4 -> 20 // typically used by jack and pulse audio + * 5 -> 25 + * 6 -> 30 + * 7 -> 35 + * 8 -> 40 + * 9 -> 45 + * 10 -> 50 + * 11 -> 54 + * 12 -> 59 + * 13 -> 64 + * 14 -> 69 + * 15 -> 74 + */ + rt_sched_param + sys_pri::python() { return rt_sched_param(0, RT_SCHED_RR); } + + rt_sched_param + sys_pri::normal() { return rt_sched_param(2, RT_SCHED_RR); } + + rt_sched_param + sys_pri::gcell_event_handler(){ return rt_sched_param(5, RT_SCHED_FIFO); } + + rt_sched_param + sys_pri::usrp2_backend() { return rt_sched_param(6, RT_SCHED_FIFO); } +} diff --git a/gruel/src/lib/thread_body_wrapper.cc b/gruel/src/lib/thread_body_wrapper.cc new file mode 100644 index 00000000..86c4edb5 --- /dev/null +++ b/gruel/src/lib/thread_body_wrapper.cc @@ -0,0 +1,85 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#ifdef HAVE_SIGNAL_H +#include +#endif +#include + +namespace gruel { + +#if defined(HAVE_PTHREAD_SIGMASK) && defined(HAVE_SIGNAL_H) + + void mask_signals() + { + sigset_t new_set; + int r; + + sigemptyset(&new_set); + sigaddset(&new_set, SIGHUP); // block these... + sigaddset(&new_set, SIGINT); + sigaddset(&new_set, SIGPIPE); + sigaddset(&new_set, SIGALRM); + sigaddset(&new_set, SIGTERM); + sigaddset(&new_set, SIGUSR1); + sigaddset(&new_set, SIGCHLD); +#ifdef SIGPOLL + sigaddset(&new_set, SIGPOLL); +#endif +#ifdef SIGPROF + sigaddset(&new_set, SIGPROF); +#endif +#ifdef SIGSYS + sigaddset(&new_set, SIGSYS); +#endif +#ifdef SIGTRAP + sigaddset(&new_set, SIGTRAP); +#endif +#ifdef SIGURG + sigaddset(&new_set, SIGURG); +#endif +#ifdef SIGVTALRM + sigaddset(&new_set, SIGVTALRM); +#endif +#ifdef SIGXCPU + sigaddset(&new_set, SIGXCPU); +#endif +#ifdef SIGXFSZ + sigaddset(&new_set, SIGXFSZ); +#endif + r = pthread_sigmask(SIG_BLOCK, &new_set, 0); + if (r != 0) + perror("pthread_sigmask"); + } + +#else + + void mask_signals() + { + } + +#endif + +}; diff --git a/gruel/src/lib/thread_group.cc b/gruel/src/lib/thread_group.cc new file mode 100644 index 00000000..fa78567e --- /dev/null +++ b/gruel/src/lib/thread_group.cc @@ -0,0 +1,99 @@ +/* -*- c++ -*- */ +/* + * Copyright (C) 2001-2003 William E. Kempf + * Copyright (C) 2007 Anthony Williams + * Copyright 2008 Free Software Foundation, Inc. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +/* + * This was extracted from Boost 1.35.0 and fixed. + */ + +#include + +namespace gruel +{ + thread_group::thread_group() + { + } + + thread_group::~thread_group() + { + // We shouldn't have to scoped_lock here, since referencing this object + // from another thread while we're deleting it in the current thread is + // going to lead to undefined behavior any way. + for (std::list::iterator it = m_threads.begin(); + it != m_threads.end(); ++it) + { + delete (*it); + } + } + + boost::thread* thread_group::create_thread(const boost::function0& threadfunc) + { + // No scoped_lock required here since the only "shared data" that's + // modified here occurs inside add_thread which does scoped_lock. + std::auto_ptr thrd(new boost::thread(threadfunc)); + add_thread(thrd.get()); + return thrd.release(); + } + + void thread_group::add_thread(boost::thread* thrd) + { + boost::lock_guard guard(m_mutex); + + // For now we'll simply ignore requests to add a thread object multiple + // times. Should we consider this an error and either throw or return an + // error value? + std::list::iterator it = std::find(m_threads.begin(), + m_threads.end(), thrd); + BOOST_ASSERT(it == m_threads.end()); + if (it == m_threads.end()) + m_threads.push_back(thrd); + } + + void thread_group::remove_thread(boost::thread* thrd) + { + boost::lock_guard guard(m_mutex); + + // For now we'll simply ignore requests to remove a thread object that's + // not in the group. Should we consider this an error and either throw or + // return an error value? + std::list::iterator it = std::find(m_threads.begin(), + m_threads.end(), thrd); + BOOST_ASSERT(it != m_threads.end()); + if (it != m_threads.end()) + m_threads.erase(it); + } + + void thread_group::join_all() + { + boost::shared_lock guard(m_mutex); + for (std::list::iterator it = m_threads.begin(); + it != m_threads.end(); ++it) + { + (*it)->join(); + } + } + + void thread_group::interrupt_all() + { + boost::shared_lock guard(m_mutex); + for(std::list::iterator it=m_threads.begin(),end=m_threads.end(); + it!=end; + ++it) + { + (*it)->interrupt(); + } + } + + size_t thread_group::size() const + { + boost::shared_lock guard(m_mutex); + return m_threads.size(); + } + +} // namespace gruel diff --git a/install-sh b/install-sh index 4d4a9519..a5897de6 100755 --- a/install-sh +++ b/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2005-05-14.22 +scriptversion=2006-12-25.00 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -39,38 +39,68 @@ scriptversion=2005-05-14.22 # when there is no Makefile. # # This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. +# from scratch. + +nl=' +' +IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi -# put in absolute paths if you don't have them in your path; or use env. vars. +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" +posix_mkdir= + +# Desired mode of installed file. +mode=0755 -chmodcmd="$chmodprog 0755" -chowncmd= chgrpcmd= -stripcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog rmcmd="$rmprog -f" -mvcmd="$mvprog" +stripcmd= + src= dst= dir_arg= -dstarg= +dst_arg= + +copy_on_change=false no_target_directory= -usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... @@ -80,81 +110,86 @@ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --c (ignored) --d create directories instead of installing files. --g GROUP $chgrpprog installed files to GROUP. --m MODE $chmodprog installed files to MODE. --o USER $chownprog installed files to USER. --s $stripprog installed files. --t DIRECTORY install into DIRECTORY. --T report an error if DSTFILE is a directory. ---help display this help and exit. ---version display version info and exit. + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG " -while test -n "$1"; do +while test $# -ne 0; do case $1 in - -c) shift - continue;; + -c) ;; + + -C) copy_on_change=true;; - -d) dir_arg=true - shift - continue;; + -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; + shift;; --help) echo "$usage"; exit $?;; - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift - shift - continue;; + shift;; - -s) stripcmd=$stripprog - shift - continue;; + -s) stripcmd=$stripprog;; - -t) dstarg=$2 - shift - shift - continue;; + -t) dst_arg=$2 + shift;; - -T) no_target_directory=true - shift - continue;; + -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; - *) # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - test -n "$dir_arg$dstarg" && break - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dstarg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dstarg" - shift # fnord - fi - shift # arg - dstarg=$arg - done + --) shift break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; esac + shift done -if test -z "$1"; then +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 @@ -164,24 +199,47 @@ if test -z "$1"; then exit 0 fi +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + for src do # Protect names starting with `-'. case $src in - -*) src=./$src ;; + -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src - src= - - if test -d "$dst"; then - mkdircmd=: - chmodcmd= - else - mkdircmd=$mkdirprog - fi + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? else + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. @@ -190,71 +248,199 @@ do exit 1 fi - if test -z "$dstarg"; then + if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi - dst=$dstarg + dst=$dst_arg # Protect names starting with `-'. case $dst in - -*) dst=./$dst ;; + -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then - echo "$0: $dstarg: Is a directory" >&2 + echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi - dst=$dst/`basename "$src"` + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? fi fi - # This sed command emulates the dirname command. - dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac - # Make sure that the destination directory exists. + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else - # Skip lots of stat calls in the usual case. - if test ! -d "$dstdir"; then - defaultIFS=' - ' - IFS="${IFS-$defaultIFS}" + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. - oIFS=$IFS - # Some sh's can't handle IFS=/ for some reason. - IFS='%' - set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` - shift - IFS=$oIFS + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac - pathcomp= + eval "$initialize_posix_glob" - while test $# -ne 0 ; do - pathcomp=$pathcomp$1 + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir shift - if test ! -d "$pathcomp"; then - $mkdirprog "$pathcomp" - # mkdir can fail with a `File exist' error in case several - # install-sh are creating the directory concurrently. This - # is OK. - test -d "$pathcomp" || exit + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi - pathcomp=$pathcomp/ - done + fi fi if test -n "$dir_arg"; then - $doit $mkdircmd "$dst" \ - && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } - + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else - dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ @@ -262,10 +448,9 @@ do # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. - $doit $cpprog "$src" "$dsttmp" && + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # @@ -273,48 +458,59 @@ do # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && - - # Now rename the file to the real destination. - { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ - || { - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - if test -f "$dstdir/$dstfile"; then - $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ - || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ - || { - echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 - (exit 1); exit 1 - } - else - : - fi - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" - } - } - fi || { (exit 1); exit 1; } + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi done -# The final little trick to "correctly" pass the exit status to the exit trap. -{ - (exit 0); exit 0 -} - # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" diff --git a/ltmain.sh b/ltmain.sh old mode 100644 new mode 100755 index c715b594..b612e9a6 --- a/ltmain.sh +++ b/ltmain.sh @@ -1,30 +1,174 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun configure. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 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. + +# GNU Libtool 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 of the License, or # (at your option) any later version. # -# This program is distributed in the hope that it will be useful, but +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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. +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. # -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 Debian-2.2.6a-1ubuntu1 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION="2.2.6 Debian-2.2.6a-1ubuntu1" +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/bin/grep -E"} +: ${FGREP="/bin/grep -F"} +: ${GREP="/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} -basename="s,^.*/,,g" +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of @@ -34,112 +178,174 @@ basename="s,^.*/,,g" progpath="$0" # The name of this program: -progname=`echo "$progpath" | $SED $basename` -modename="$progname" +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac -PROGRAM=ltmain.sh -PACKAGE=libtool -VERSION="1.5.22 Debian 1.5.22-4" -TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes. -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell, and then maybe $echo will work. - exec $SHELL "$progpath" --no-reexec ${1+"$@"} -fi + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <&2 +} -default_mode= -help="Try \`$progname --help' for more information." -magic="%%%MAGIC variable%%%" -mkdir="mkdir" -mv="mv -f" -rm="rm -f" +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - SP2NL='tr \040 \012' - NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - SP2NL='tr \100 \n' - NL2SP='tr \r\n \100\100' - ;; -esac + # bash bug again: + : +} -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -# We save the old values to restore during execute mode. -if test "${LC_ALL+set}" = set; then - save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL -fi -if test "${LANG+set}" = set; then - save_LANG="$LANG"; LANG=C; export LANG -fi +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default -if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - $echo "$modename: not configured to build any kind of library" 1>&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE -fi -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -duplicate_deps=no -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} -##################################### -# Shell function definitions: -# This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running @@ -149,7 +355,7 @@ func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" - if test "$run" = ":"; then + if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else @@ -158,546 +364,818 @@ func_mktempdir () my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" - save_mktempdir_umask=`umask` - umask 0077 - $mkdir "$my_tmpdir" - umask $save_mktempdir_umask + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || { - $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 - exit $EXIT_FAILURE - } + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi - $echo "X$my_tmpdir" | $Xsed + $ECHO "X$my_tmpdir" | $Xsed } -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -func_win32_libid () +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () { - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ - $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then - win32_nmres=`eval $NM -f posix -A $1 | \ - $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac - ;; - esac - $echo $win32_libid_type } -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () { - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - CC_quoted="$CC_quoted $arg" - done - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) - for z in $available_tags; do - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - CC_quoted="$CC_quoted $arg" - done - case "$@ " in - " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - $echo "$modename: unable to infer tagged configuration" - $echo "$modename: specify a tag with \`--tag'" 1>&2 - exit $EXIT_FAILURE -# else -# $echo "$modename: using $tagname tagged configuration" - fi - ;; - esac - fi + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" } -# func_extract_an_archive dir oldlib -func_extract_an_archive () +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () { - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" + my_cmd="$1" + my_fail_exp="${2-:}" - $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" - $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 - exit $EXIT_FAILURE + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi fi } -# func_extract_archives gentop oldlib ... -func_extract_archives () + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () { - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - my_status="" - - $show "${rm}r $my_gentop" - $run ${rm}r "$my_gentop" - $show "$mkdir $my_gentop" - $run $mkdir "$my_gentop" - my_status=$? - if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then - exit $my_status - fi + my_cmd="$1" + my_fail_exp="${2-:}" - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xdir="$my_gentop/$my_xlib" - - $show "${rm}r $my_xdir" - $run ${rm}r "$my_xdir" - $show "$mkdir $my_xdir" - $run $mkdir "$my_xdir" - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then - exit $exit_status + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" fi - case $host in - *-darwin*) - $show "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - if test -z "$run"; then - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` - darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` - if test -n "$darwin_arches"; then - darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - $show "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we have a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` - lipo -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - ${rm}r unfat-$$ - cd "$darwin_orig_dir" - else - cd "$darwin_orig_dir" - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - fi # $run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` - done - func_extract_archives_result="$my_oldobjs" + fi } -# End of Shell function definitions -##################################### -# Darwin sucks -eval std_shrext=\"$shrext_cmds\" -disable_libs=no -# Parse our command line options once, thoroughly. -while test "$#" -gt 0 -do - arg="$1" + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi - case $arg in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 - exit $EXIT_FAILURE - ;; - esac +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" - case $tagname in - CC) - # Don't test for the "default" C tag, as we know, it's there, but - # not specially marked. - ;; - *) - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then - taglist="$taglist $tagname" - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" - else - $echo "$progname: ignoring unknown tag $tagname" 1>&2 - fi - ;; - esac - ;; - *) - eval "$prev=\$arg" - ;; - esac +# Global variables. +# $mode is unset +nonopt= +execute_dlfiles= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 - prev= - prevopt= - continue - fi +opt_dry_run=false +opt_duplicate_deps=false +opt_silent=false +opt_debug=: - # Have we seen a non-optional argument yet? - case $arg in - --help) - show_help=yes - ;; +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= - --version) - $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - $echo - $echo "Copyright (C) 2005 Free Software Foundation, Inc." - $echo "This is free software; see the source for copying conditions. There is NO" - $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - exit $? - ;; +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - --config) - ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do - ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done - exit $? - ;; - - --debug) - $echo "$progname: enabling shell trace mode" - set -x - preserve_args="$preserve_args $arg" - ;; - --dry-run | -n) - run=: - ;; + exit $? +} - --features) - $echo "host: $host" +# func_features +# Display the features supported by this script. +func_features () +{ + $ECHO "host: $host" if test "$build_libtool_libs" = yes; then - $echo "enable shared libraries" + $ECHO "enable shared libraries" else - $echo "disable shared libraries" + $ECHO "disable shared libraries" fi if test "$build_old_libs" = yes; then - $echo "enable static libraries" + $ECHO "enable static libraries" else - $echo "disable static libraries" + $ECHO "disable static libraries" fi + exit $? - ;; +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" - --finish) mode="finish" ;; + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac - --preserve-dup-deps) duplicate_deps="yes" ;; + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} - --quiet | --silent) - show=: - preserve_args="$preserve_args $arg" - ;; +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ - --tag) - prevopt="--tag" - prev=tag - preserve_args="$preserve_args --tag" + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift ;; - --tag=*) - set tag "$optarg" ${1+"$@"} - shift - prev=tag - preserve_args="$preserve_args --tag" + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift ;; - - *) - nonopt="$arg" - break + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac -done -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE -fi + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift -case $disable_libs in -no) - ;; -shared) - build_libtool_libs=no - build_old_libs=yes - ;; -static) - build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` - ;; -esac + case $opt in + --config) func_config ;; -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; -if test -z "$show_help"; then + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; - # Infer the operation mode. - if test -z "$mode"; then - $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 - $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 - case $nonopt in - *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) - mode=link - for arg - do - case $arg in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx | *strace | *truss) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: ;; *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF fi - ;; - esac + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" fi + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." + help="Try \`$progname --help --mode=$mode' for more information." +} - # These modes are in order of execution frequency so that they run quickly. - case $mode in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} - target ) - libobj="$arg" - arg_mode=normal - continue - ;; +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} - normal ) - # Accept any command-line options. - case $arg in - -o) - if test -n "$libobj" ; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit $EXIT_FAILURE - fi - arg_mode=target - continue - ;; +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} - -static | -prefer-pic | -prefer-non-pic) - later="$later $arg" - continue - ;; +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} - -no-suppress) - suppress_opt=no - continue - ;; +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; esac - lastarg="$lastarg $arg" + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - base_compile="$base_compile $lastarg" + func_quote_for_eval "$lastarg" + base_compile="$base_compile $func_quote_for_eval_result" done # for arg case $arg_mode in arg) - $echo "$modename: you must specify an argument for -Xcompile" - exit $EXIT_FAILURE + func_fatal_error "you must specify an argument for -Xcompile" ;; target) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit $EXIT_FAILURE + func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. - [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo - xform='[cCFSifmso]' case $libobj in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.ii) xform=ii ;; - *.class) xform=class ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; - *.java) xform=java ;; + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.obj | *.sx) + func_xform "$libobj" + libobj=$func_xform_result + ;; esac - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - case $libobj in - *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) - $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 - exit $EXIT_FAILURE + func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac @@ -774,7 +1230,15 @@ if test -z "$show_help"; then for arg in $later; do case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + -static) + build_libtool_libs=no build_old_libs=yes continue ;; @@ -791,28 +1255,17 @@ if test -z "$show_help"; then esac done - qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` - case $qlibobj in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qlibobj="\"$qlibobj\"" ;; - esac - test "X$libobj" != "X$qlibobj" \ - && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." - objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir= - else - xdir=$xdir/ - fi + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then @@ -821,12 +1274,9 @@ if test -z "$show_help"; then removelist="$lobj $libobj ${libobj}T" fi - $run $rm $removelist - trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 - # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in - cygwin* | mingw* | pw32* | os2*) + cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac @@ -838,10 +1288,8 @@ if test -z "$show_help"; then # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then - output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no @@ -851,13 +1299,13 @@ if test -z "$show_help"; then # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then - until $run ln "$progpath" "$lockfile" 2>/dev/null; do - $show "Waiting for $lockfile to be removed" + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then - $echo "\ + $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` @@ -868,34 +1316,22 @@ repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." - $run $rm $removelist + $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi - $echo "$srcfile" > "$lockfile" + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" fi + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi - qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` - case $qsrcfile in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qsrcfile="\"$qsrcfile\"" ;; - esac - - $run $rm "$libobj" "${libobj}T" - - # Create a libtool object file (analogous to a ".la" file), - # but don't create it if we're doing a dry run. - test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then - $echo "\ + $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` @@ -948,45 +1371,27 @@ repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." - $run $rm $removelist + $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - $show "$mv $output_obj $lobj" - if $run $mv $output_obj $lobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi - # Append the name of the PIC object to the libtool object file. - test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then - $echo "\ + $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` @@ -1020,5431 +1420,6783 @@ repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." - $run $rm $removelist + $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi - - # Append the name of the non-PIC object the libtool object file. - # Only append if the libtool object file exists. - test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - else - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - fi - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test - ;; - *) qarg=$arg ;; - esac - libtool_args="$libtool_args $qarg" + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac +Compile a source file into a libtool library object. - case $prev in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - if test ! -f "$arg"; then - $echo "$modename: symbol file \`$arg' does not exist" - exit $EXIT_FAILURE - fi - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat $save_arg` - do -# moreargs="$moreargs $fil" - arg=$fil - # A libtool-controlled object. +This mode accepts the following additional options: - # Check to see that this really is a libtool object. - if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - pic_object= - non_pic_object= + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking - # Read the .lo file - # If there is no directory component, then add one. - case $arg in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. - if test -z "$pic_object" || \ - test -z "$non_pic_object" || - test "$pic_object" = none && \ - test "$non_pic_object" = none; then - $echo "$modename: cannot find name of object for \`$arg'" 1>&2 - exit $EXIT_FAILURE - fi +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" +Automatically set library path, then run a program. - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi +This mode accepts the following additional options: - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi + -dlopen FILE add the directory containing FILE to the library path - # A PIC object. - libobjs="$libobjs $pic_object" - arg="$pic_object" - fi +This mode sets the library path environment variable according to \`-dlopen' +flags. - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. - # A standard non-PIC object - non_pic_objects="$non_pic_objects $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if test -z "$run"; then - $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 - exit $EXIT_FAILURE - else - # Dry-run case. +Then, COMMAND is executed, with ARGS as arguments." + ;; - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` - non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` - libobjs="$libobjs $pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - fi - done - else - $echo "$modename: link input file \`$save_arg' does not exist" - exit $EXIT_FAILURE - fi - arg=$save_arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit $EXIT_FAILURE - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - compile_command="$compile_command $wl$qarg" - finalize_command="$finalize_command $wl$qarg" - continue - ;; - xcclinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - darwin_framework|darwin_framework_skip) - test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - prev= - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" +Complete the installation of libtool libraries. - prevarg="$arg" +Each LIBDIR is a directory that contains libtool libraries. - case $arg in - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -avoid-version) - avoid_version=yes - continue - ;; +Install executables or libraries. - -dlopen) - prev=dlfiles - continue - ;; +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. - -dlpreopen) - prev=dlprefiles - continue - ;; +The following components of INSTALL-COMMAND are treated specially: - -export-dynamic) - export_dynamic=yes - continue - ;; + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: more than one -exported-symbols argument is not allowed" - exit $EXIT_FAILURE - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; - -framework|-arch|-isysroot) - case " $CC " in - *" ${arg} ${1} "* | *" ${arg} ${1} "*) - prev=darwin_framework_skip ;; - *) compiler_flags="$compiler_flags $arg" - prev=darwin_framework ;; - esac - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - continue - ;; + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -inst-prefix-dir) - prev=inst_prefix - continue - ;; +Link object files or libraries together to form another library, or to +create an executable program. - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - ;; - esac - continue - ;; +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. - -L*) - dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - notinst_path="$notinst_path $dir" - fi - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - continue - ;; +The following components of LINK-COMMAND are treated specially: - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - deplibs="$deplibs -framework System" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - -model) - compile_command="$compile_command $arg" - compiler_flags="$compiler_flags $arg" - finalize_command="$finalize_command $arg" - prev=xcompiler - continue - ;; +All other options (arguments beginning with \`-') are ignored. - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) - compiler_flags="$compiler_flags $arg" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - continue - ;; +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. - -module) - module=yes - continue - ;; +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. - # -64, -mips[0-9] enable 64-bit mode on the SGI compiler - # -r[0-9][0-9]* specifies the processor on the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler - # +DA*, +DD* enable 64-bit mode on the HP compiler - # -q* pass through compiler args for the IBM compiler - # -m* pass through architecture-specific compiler args for GCC - # -m*, -t[45]*, -txscale* pass through architecture-specific - # compiler args for GCC - # -pg pass through profiling flag for GCC - # @file GCC response files - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ - -t[45]*|-txscale*|@*) +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - compiler_flags="$compiler_flags $arg" - continue +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." ;; - -shrext) - prev=shrext - continue - ;; + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -no-fast-install) - fast_install=no - continue - ;; +Remove libraries from an installation directory. - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - # The PATH hackery in wrapper scripts is required on Windows - # in order for the loader to find any dlls it needs. - $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 - $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. - -no-undefined) - allow_undefined=no - continue - ;; +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; - -objectlist) - prev=objectlist - continue - ;; + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac - -o) prev=output ;; + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." - -precious-files-regex) - prev=precious_regex - continue - ;; + exit $? +} - -release) - prev=release - continue - ;; + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help - -rpath) - prev=rpath - continue - ;; - -R) - prev=xrpath - continue - ;; +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" - -R*) - dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit $EXIT_FAILURE - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -static) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" - -thread-safe) - thread_safe=yes - continue - ;; + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" - -version-info) - prev=vinfo - continue - ;; - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; + # Read the libtool library. + dlname= + library_names= + func_source "$file" - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi - -Wl,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case $flag in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $wl$flag" - linker_flags="$linker_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; + func_dirname "$file" "" "." + dir="$func_dirname_result" - -Xcompiler) - prev=xcompiler - continue + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi ;; - -Xlinker) - prev=xlinker - continue + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" ;; - -XCClinker) - prev=xcclinker + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; + esac - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" - *.$objext) - # A standard object. - objs="$objs $arg" - ;; + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done - *.lo) - # A libtool-controlled object. + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" - # Check to see that this really is a libtool object. - if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - pic_object= - non_pic_object= + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done - # Read the .lo file - # If there is no directory component, then add one. - case $arg in - */* | *\\*) . $arg ;; - *) . ./$arg ;; - esac + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi - if test -z "$pic_object" || \ - test -z "$non_pic_object" || - test "$pic_object" = none && \ - test "$non_pic_object" = none; then - $echo "$modename: cannot find name of object for \`$arg'" 1>&2 - exit $EXIT_FAILURE - fi + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" +test "$mode" = execute && func_mode_execute ${1+"$@"} - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles $pic_object" - prev= - fi +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= - # A PIC object. - libobjs="$libobjs $pic_object" - arg="$pic_object" - fi + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi - # A standard non-PIC object - non_pic_objects="$non_pic_objects $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if test -z "$run"; then - $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 - exit $EXIT_FAILURE - else - # Dry-run case. + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS - # Extract subdirectory from the argument. - xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$arg"; then - xdir= - else - xdir="$xdir/" - fi + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" - pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` - non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` - libobjs="$libobjs $pic_object" - non_pic_objects="$non_pic_objects $non_pic_object" - fi - fi - ;; + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} - *.la) - # A libtool-controlled library. +test "$mode" = finish && func_mode_finish ${1+"$@"} - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - fi - continue - ;; - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - esac # arg +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue fi - done # argument parsing loop - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done - oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. - if test ! -d "$output_objdir"; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then - exit $exit_status + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" fi fi - # Determine the type of output - case $output in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result - case $host in - *cygwin* | *mingw* | *pw32*) - # don't eliminate duplications in $postdeps and $predeps - duplicate_compiler_generated_deps=yes - ;; + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; *) - duplicate_compiler_generated_deps=$duplicate_deps + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done ;; esac - specialdeplibs= - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if test "X$duplicate_deps" = "Xyes" ; then - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - libs="$libs $deplib" - done + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; esac - pre_post_deps="$pre_post_deps $pre_post_dep" - done - fi - pre_post_deps= - fi + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - case $linkmode in - lib) - passes="conv link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 - exit $EXIT_FAILURE + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac ;; esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; - esac - for pass in $passes; do - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result ;; - esac - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - compiler_flags="$compiler_flags $deplib" - fi - continue + *.$objext) + staticdest="$destfile" + destfile= ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 - continue - fi - name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` - for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if (${SED} -e '2q' $lib | - grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - library_names= - old_library= - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" fi - fi - ;; # -l - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result fi - newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; - *) - $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method - match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` - if eval $echo \"$deplib\" 2>/dev/null \ - | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - $echo - $echo "*** Warning: Trying to link with static lib archive $deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because the file extensions .$libext of this argument makes me believe" - $echo "*** that it is just a static archive that I should not used here." - else - $echo - $echo "*** Warning: Linking the shared library $output against the" - $echo "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - continue + *) + wrapper=$file ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 - exit $EXIT_FAILURE fi - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" fi + ;; + esac + done - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - # Read the .la file - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit $EXIT_FAILURE - fi - continue - fi # $pass = conv + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi +test "$mode" = install && func_mode_install ${1+"$@"} - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 - exit $EXIT_FAILURE - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - dlprefiles="$dlprefiles $lib $dependency_libs" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi # $pass = dlopen - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - abs_ladir="$ladir" +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } fi - ;; - esac - laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - $echo "$modename: warning: library \`$lib' was moved." 1>&2 - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - notinst_path="$notinst_path $abs_ladir" + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } fi - fi # $installed = yes - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + fi - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir"; then - $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 - exit $EXIT_FAILURE + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" fi - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - newdlprefiles="$newdlprefiles $dir/$dlname" + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : else - newdlprefiles="$newdlprefiles $dir/$linklib" + $GREP -v "^: " < "$nlist" > "$nlist"S fi - fi # $pass = dlpreopen - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else - deplibs="$lib $deplibs" # used for prog,scan pass + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi - continue - fi - - if test "$linkmode" = prog && test "$pass" != link; then - newlib_search_path="$newlib_search_path $ladir" - deplibs="$lib $deplibs" + $ECHO >> "$output_objdir/$my_dlsyms" "\ - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done # for deplib - continue - fi # $linkmode = prog... + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *" $absdir "*) ;; - *) temp_rpath="$temp_rpath $absdir" ;; - esac - fi + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi # $linkmode,$pass = prog,link... +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes ; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - if test "$installed" = no; then - notinst_deplibs="$notinst_deplibs $lib" - need_relink=yes - fi - # This is a shared library - - # Warn about portability, can't link against -module's on - # some systems (darwin) - if test "$shouldnotlink" = yes && test "$pass" = link ; then - $echo - if test "$linkmode" = prog; then - $echo "*** Warning: Linking the executable $output against the loadable module" - else - $echo "*** Warning: Linking the shared library $output against the loadable module" + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" fi - $echo "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - realname="$2" - shift; shift - libname=`eval \\$echo \"$libname_spec\"` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw*) - major=`expr $current - $age` - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - soname=`$echo $soroot | ${SED} -e 's/^.*\///'` - newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - $show "extracting exported symbol list from \`$soname'" - save_ifs="$IFS"; IFS='~' - cmds=$extract_expsyms_cmds - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - $show "generating import library for \`$soname'" - save_ifs="$IFS"; IFS='~' - cmds=$old_archive_from_expsyms_cmds - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} - if test "$linkmode" = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a module then we can not link against - # it, someone is ignoring the new warnings I added - if /usr/bin/file -L $add 2> /dev/null | - $EGREP ": [^:]* bundle" >/dev/null ; then - $echo "** Warning, lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - $echo - $echo "** And there doesn't seem to be a static archive available" - $echo "** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit $EXIT_FAILURE - fi - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - if test "$linkmode" = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - add_dir="$add_dir -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - $echo - $echo "*** Warning: This system can not link to static lib archive $lib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - $echo "*** But as you try to build a module library, libtool will still create " - $echo "*** a static module, that should work as long as the dlopening application" - $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - $echo - $echo "*** However, this would only work if libtool was able to extract symbol" - $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - $echo "*** not find such a program. So, this module is probably useless." - $echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi + func_extract_archives_result="$my_oldobjs" +} - newlib_search_path="$newlib_search_path $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - if test "X$duplicate_deps" = "Xyes" ; then - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - fi - tmp_libs="$tmp_libs $deplib" - done - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case $deplib in - -L*) path="$deplib" ;; - *.la) - dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$deplib" && dir="." - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - fi - ;; - esac - if grep "^installed=no" $deplib > /dev/null; then - path="$absdir/$objdir" - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - if test "$absdir" != "$libdir"; then - $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 - fi - path="$absdir" - fi - depdepl= - case $host in - *-*-darwin*) - # we do not want to link against static libs, - # but need to link against shared - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$path/$depdepl" ; then - depdepl="$path/$depdepl" - fi - # do not add paths which are already there - case " $newlib_search_path " in - *" $path "*) ;; - *) newlib_search_path="$newlib_search_path $path";; - esac - fi - path="" - ;; - *) - path="-L$path" - ;; - esac - ;; - -l*) - case $host in - *-*-darwin*) - # Again, we only want to link against shared libraries - eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` - for tmp in $newlib_search_path ; do - if test -f "$tmp/lib$tmp_libs.dylib" ; then - eval depdepl="$tmp/lib$tmp_libs.dylib" - break - fi - done - path="" - ;; - *) continue ;; - esac - ;; - *) continue ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - case " $deplibs " in - *" $depdepl "*) ;; - *) deplibs="$depdepl $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - newlib_search_path= + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 fi - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - tmp_libs="$tmp_libs $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - case $linkmode in - oldlib) - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 - fi + $ECHO "\ - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 - fi + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 - fi + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 - fi + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 - fi + file=\"\$\$-\$program\" - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 - fi + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; + $ECHO "\ - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - if test "$module" = no; then - $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - fi - ;; - esac + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 - exit $EXIT_FAILURE + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" else - $echo - $echo "*** Warning: Linking the shared library $output against the non-libtool" - $echo "*** objects $objs is not portable!" - libobjs="$libobjs $objs" + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" fi - fi - if test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 - fi + $ECHO "\ - set dummy $rpath - if test "$#" -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" + if test -f \"\$progdir/\$program\"; then" - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 - fi + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + export $shlibpath_var +" fi - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - IFS="$save_ifs" - if test -n "$8"; then - $echo "$modename: too many parameters to \`-version-info'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" fi - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$2" - number_minor="$3" - number_revision="$4" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - darwin|linux|osf|windows) - current=`expr $number_major + $number_minor` - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - current=`expr $number_major + $number_minor - 1` - age="$number_minor" - revision="$number_minor" - ;; - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE - ;; - esac - ;; - no) - current="$2" - revision="$3" - age="$4" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" ;; - esac - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" ;; esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE - ;; - esac - if test "$age" -gt "$current"; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit $EXIT_FAILURE +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 fi - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - minor_current=`expr $current + 1` - verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - ;; - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist - irix | nonstopux) - major=`expr $current - $age + 1` +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include - osf) - major=.`expr $current - $age` - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" - done +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - major=`expr $current - $age` - versuffix="-$major" - ;; +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit $EXIT_FAILURE - ;; - esac +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - fi +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif - if test "$mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$echo "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - removelist="$removelist $p" - ;; - *) ;; - esac - done - if test -n "$removelist"; then - $show "${rm}r $removelist" - $run ${rm}r $removelist - fi - fi +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif - # Transform .lo files to .o files. - oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi +const char *program_name = NULL; - # Eliminate all temporary directories. - for path in $notinst_path; do - lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` - deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` - dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` - done +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat < conftest.c </dev/null` - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null \ - | grep " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ - | ${SED} 10q \ - | $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $echo - $echo "*** Warning: linker path does not have real file for library $a_deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $echo "*** with $libname but no candidates were found. (...for file magic test)" - else - $echo "*** with $libname and none of the candidates passed a file format test" - $echo "*** using a file magic. Last file checked: $potlib" - fi - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method - match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` - for a_deplib in $deplibs; do - name=`expr $a_deplib : '-l\(.*\)'` - # If $name is empty we are operating on a -L argument. - if test -n "$name" && test "$name" != "0"; then - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval \\$echo \"$libname_spec\"` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval $echo \"$potent_lib\" 2>/dev/null \ - | ${SED} 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - $echo - $echo "*** Warning: linker path does not have real file for library $a_deplib." - $echo "*** I have the capability to make that library automatically link in when" - $echo "*** you link to this library. But I can only do this if you have a" - $echo "*** shared version of the library, which you do not appear to have" - $echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $echo "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $echo "*** with $libname and none of the candidates passed a file format test" - $echo "*** using a regex pattern. Last file checked: $potlib" - fi - fi else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + cat <<"EOF" +const char * EXE_PATH_VARNAME = ""; +const char * EXE_PATH_VALUE = ""; +EOF fi - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ - -e 's/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` - done - fi - if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ - | grep . >/dev/null; then - $echo - if test "X$deplibs_check_method" = "Xnone"; then - $echo "*** Warning: inter-library dependencies are not supported in this platform." + + if test "$fast_install" = yes; then + cat < \"${export_symbols}T\"" - $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - $show "$mv \"${export_symbols}T\" \"$export_symbols\"" - $run eval '$mv "${export_symbols}T" "$export_symbols"' - fi - fi - fi + cat <<"EOF" + printf ("%s", script_text_part1); + printf ("%s", script_text_part2); + return 0; + } + } - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' - fi + newargz = XMALLOC (char *, argc + 1); + tmp_pathspec = find_executable (argv[0]); + if (tmp_pathspec == NULL) + lt_fatal ("Couldn't find %s", argv[0]); + LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n", + tmp_pathspec)); + + actual_cwrapper_path = chase_symlinks (tmp_pathspec); + LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n", + actual_cwrapper_path)); + XFREE (tmp_pathspec); + + actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path)); + strendzap (actual_cwrapper_path, actual_cwrapper_name); + + /* wrapper name transforms */ + strendzap (actual_cwrapper_name, ".exe"); + tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); + XFREE (actual_cwrapper_name); + actual_cwrapper_name = tmp_pathspec; + tmp_pathspec = 0; + + /* target_name transforms -- use actual target program name; might have lt- prefix */ + target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); + strendzap (target_name, ".exe"); + tmp_pathspec = lt_extend_str (target_name, ".exe", 1); + XFREE (target_name); + target_name = tmp_pathspec; + tmp_pathspec = 0; + + LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n", + target_name)); +EOF - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - tmp_deplibs="$tmp_deplibs $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" + cat </dev/null` && - test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise. - $echo "creating reloadable object files..." + cat <<"EOF" + XFREE (target_name); + XFREE (actual_cwrapper_path); + XFREE (actual_cwrapper_name); - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - output_la=`$echo "X$output" | $Xsed -e "$basename"` + lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ + lt_setenv ("DUALCASE", "1"); /* for MSK sh */ + lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); + lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - delfiles= - last_robj= - k=1 - output=$output_objdir/$output_la-${k}.$objext - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - eval test_cmds=\"$reload_cmds $objlist $last_robj\" - if test "X$objlist" = X || - { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && - test "$len" -le "$max_cmd_len"; }; then - objlist="$objlist $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - eval concat_cmds=\"$reload_cmds $objlist $last_robj\" - else - # All subsequent reloadable object files will link in - # the last one created. - eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - k=`expr $k + 1` - output=$output_objdir/$output_la-${k}.$objext - objlist=$obj - len=1 - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" - - if ${skipped_export-false}; then - $show "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $run $rm $export_symbols - libobjs=$output - # Append the command to create the export file. - eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" - fi - - # Set up a command to remove the reloadable object files - # after they are used. - i=0 - while test "$i" -lt "$k" - do - i=`expr $i + 1` - delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" - done + newargc=0; + for (i = 1; i < argc; i++) + { + if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0) + { + if (argv[i][env_set_opt_len] == '=') + { + const char *p = argv[i] + env_set_opt_len + 1; + lt_opt_process_env_set (p); + } + else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc) + { + lt_opt_process_env_set (argv[++i]); /* don't copy */ + } + else + lt_fatal ("%s missing required argument", env_set_opt); + continue; + } + if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0) + { + if (argv[i][env_prepend_opt_len] == '=') + { + const char *p = argv[i] + env_prepend_opt_len + 1; + lt_opt_process_env_prepend (p); + } + else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc) + { + lt_opt_process_env_prepend (argv[++i]); /* don't copy */ + } + else + lt_fatal ("%s missing required argument", env_prepend_opt); + continue; + } + if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0) + { + if (argv[i][env_append_opt_len] == '=') + { + const char *p = argv[i] + env_append_opt_len + 1; + lt_opt_process_env_append (p); + } + else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc) + { + lt_opt_process_env_append (argv[++i]); /* don't copy */ + } + else + lt_fatal ("%s missing required argument", env_append_opt); + continue; + } + if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0) + { + /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX + namespace, but it is not one of the ones we know about and + have already dealt with, above (inluding dump-script), then + report an error. Otherwise, targets might begin to believe + they are allowed to use options in the LTWRAPPER_OPTION_PREFIX + namespace. The first time any user complains about this, we'll + need to make LTWRAPPER_OPTION_PREFIX a configure-time option + or a configure.ac-settable value. + */ + lt_fatal ("Unrecognized option in %s namespace: '%s'", + ltwrapper_option_prefix, argv[i]); + } + /* otherwise ... */ + newargz[++newargc] = xstrdup (argv[i]); + } + newargz[++newargc] = NULL; - $echo "creating a temporary reloadable object file: $output" + LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : ""))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" +EOF - libobjs=$output - # Restore the value of output. - output=$save_output + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. + cat <<"EOF" +} - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); - # Append the command to remove the reloadable object files - # to the just-reset $cmds. - eval cmds=\"\$cmds~\$rm $delfiles\" - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || { - lt_exit=$? + return p; +} - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' - fi +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} - exit $lt_exit - } - done - IFS="$save_ifs" +const char * +base_name (const char *name) +{ + const char *base; - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - fi - fi + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} - exit $EXIT_SUCCESS - fi +int +check_executable (const char *path) +{ + struct stat st; - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? - fi - done + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} - obj) - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 - fi +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 - fi + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 - fi + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 - fi +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 - fi + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 - fi + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; - case $output in - *.lo) - if test -n "$objs$old_deplibs"; then - $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 - exit $EXIT_FAILURE - fi - libobj="$output" - obj=`$echo "X$output" | $Xsed -e "$lo2o"` - ;; - *) - libobj= - obj="$output" - ;; - esac + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif - # Delete the old objects. - $run $rm $obj $libobj + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec - wl= + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${obj}x" - generated="$generated $gentop" +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + if (!has_symlinks) + { + return xstrdup (pathspec); + } - output="$obj" - cmds=$reload_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; - exit $EXIT_SUCCESS - fi + assert (str != NULL); + assert (pat != NULL); - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi + len = strlen (str); + patlen = strlen (pat); - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $run eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - cmds=$reload_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi + if (exit_status >= 0) + exit (exit_status); +} - exit $EXIT_SUCCESS - ;; +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} - prog) - case $host in - *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; - esac - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 - fi +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 - fi +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} - if test "$preload" = yes; then - if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && - test "$dlopen_self_static" = unknown; then - $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." - fi - fi +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` - ;; - esac + p = strchr (arg, (int)'='); - case $host in - *darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - if test "$tagname" = CXX ; then - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" - fi - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; - esac - ;; - *) new_libs="$new_libs $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) - testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - *) dllsearchpath="$dllsearchpath:$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - dlsyms="${outputname}S.c" - else - $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 - fi - fi - - if test -n "$dlsyms"; then - case $dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${outputname}.nm" - - $show "$rm $nlist ${nlist}S ${nlist}T" - $run $rm "$nlist" "${nlist}S" "${nlist}T" - - # Parse the name list into a source file. - $show "creating $output_objdir/$dlsyms" - - test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define lt_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - $show "generating symbol list for \`$output'" - - test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for arg in $progfiles; do - $show "extracting global C symbols from \`$arg'" - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi + if (!p) + return 1; - if test -n "$export_symbols_regex"; then - $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi + *value = xstrdup (++p); - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $run $rm $export_symbols - $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* ) - $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - else - $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* ) - $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - fi - fi + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" - name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` - $run eval '$echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done + return 0; +} - if test -z "$run"; then - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $mv "$nlist"T "$nlist" - fi + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } - # Try sorting and uniquifying the output. - if grep -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - grep -v "^: " < "$nlist" > "$nlist"S - fi + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' - else - $echo '/* NONE */' >> "$output_objdir/$dlsyms" - fi +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; - $echo >> "$output_objdir/$dlsyms" "\ + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } -#undef lt_preloaded_symbols + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} -#if defined (__STDC__) && __STDC__ -# define lt_ptr void * -#else -# define lt_ptr char * -# define const -#endif +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; -/* The mapping between symbol names and symbols. */ -" + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } - case $host in - *cygwin* | *mingw* ) - $echo >> "$output_objdir/$dlsyms" "\ -/* DATA imports from DLLs on WIN32 can't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs */ -struct { -" - ;; - * ) - $echo >> "$output_objdir/$dlsyms" "\ -const struct { -" - ;; - esac + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); - $echo >> "$output_objdir/$dlsyms" "\ - const char *name; - lt_ptr address; + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } } -lt_preloaded_symbols[] = -{\ -" - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" - - $echo >> "$output_objdir/$dlsyms" "\ - {0, (lt_ptr) 0} -}; +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_preloaded_symbols; + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } } -#endif -#ifdef __cplusplus -} -#endif\ -" - fi - pic_flag_for_symtable= - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag";; - esac - esac +EOF +} +# end: func_emit_cwrapperexe_src - # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" - $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt - # Transform the symbol file into the correct name. - case $host in - *cygwin* | *mingw* ) - if test -f "$output_objdir/${outputname}.def" ; then - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` - else - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - fi - ;; - * ) - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - ;; - esac - ;; - *) - $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 - exit $EXIT_FAILURE - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= - # Nullify the symbol file. - compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done - # We have no uninstalled library dependencies, so finalize right now. - $show "$link_command" - $run eval "$link_command" - exit_status=$? + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes - # Delete the generated files. - if test -n "$dlsyms"; then - $show "$rm $output_objdir/${outputname}S.${objext}" - $run $rm "$output_objdir/${outputname}S.${objext}" - fi + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" - exit $exit_status - fi + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac - if test -n "$shlibpath_var"; then - # We should set the shlibpath_var - rpath= - for dir in $temp_rpath; do - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) - # Absolute path. - rpath="$rpath$dir:" + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue ;; *) - # Relative path: add a thisdir entry. - rpath="$rpath\$thisdir/$dir:" + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue ;; esac - done - temp_rpath="$rpath" - fi + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - rpath="$rpath$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi + # Read the .lo file + func_source "$arg" - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $run $rm $output - # Link the executable and exit - $show "$link_command" - $run eval "$link_command" || exit $? - exit $EXIT_SUCCESS - fi + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" - $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 - $echo "$modename: \`$output' will be relinked during installation" 1>&2 - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi - # Delete the old output files. - $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi - $show "$link_command" - $run eval "$link_command" || exit $? + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi - # Now create the wrapper script. - $show "creating $output" + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" + func_fatal_error "link input file \`$arg' does not exist" fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $echo for shipping. - if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then - case $progpath in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; - *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; - esac - qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if our run command is non-null. - if test -z "$run"; then - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; - *) exeext= ;; + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; esac - case $host in - *cygwin* | *mingw* ) - output_name=`basename $output` - output_path=`dirname $output` - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $rm $cwrappersource $cwrapper - trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - cat > $cwrappersource <> $cwrappersource<<"EOF" -#include -#include -#include -#include -#include -#include -#include -#include -#include + prevarg="$arg" -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif + -avoid-version) + avoid_version=yes + continue + ;; -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ + -dlopen) + prev=dlfiles + continue + ;; -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ + -dlpreopen) + prev=dlprefiles + continue + ;; -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) + -export-dynamic) + export_dynamic=yes + continue + ;; -/* -DDEBUG is fairly common in CFLAGS. */ -#undef DEBUG -#if defined DEBUGWRAPPER -# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) -#else -# define DEBUG(format, ...) -#endif + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; -const char *program_name = NULL; + -framework) + prev=framework + continue + ;; -void * xmalloc (size_t num); -char * xstrdup (const char *string); -const char * base_name (const char *name); -char * find_executable(const char *wrapper); -int check_executable(const char *path); -char * strendzap(char *str, const char *pat); -void lt_fatal (const char *message, ...); + -inst-prefix-dir) + prev=inst_prefix + continue + ;; -int -main (int argc, char *argv[]) -{ - char **newargz; - int i; + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; - program_name = (char *) xstrdup (base_name (argv[0])); - DEBUG("(main) argv[0] : %s\n",argv[0]); - DEBUG("(main) program_name : %s\n",program_name); - newargz = XMALLOC(char *, argc+2); -EOF + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; - cat >> $cwrappersource <> $cwrappersource <<"EOF" - newargz[1] = find_executable(argv[0]); - if (newargz[1] == NULL) - lt_fatal("Couldn't find %s", argv[0]); - DEBUG("(main) found exe at : %s\n",newargz[1]); - /* we know the script has the same name, without the .exe */ - /* so make sure newargz[1] doesn't end in .exe */ - strendzap(newargz[1],".exe"); - for (i = 1; i < argc; i++) - newargz[i+1] = xstrdup(argv[i]); - newargz[argc+1] = NULL; + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; - for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" - return 127; -} + -multi_module) + single_module="${wl}-multi_module" + continue + ;; -void * -xmalloc (size_t num) -{ - void * p = (void *) malloc (num); - if (!p) - lt_fatal ("Memory exhausted"); + -no-fast-install) + fast_install=no + continue + ;; - return p; -} + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; -char * -xstrdup (const char *string) -{ - return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL -; -} + -no-undefined) + allow_undefined=no + continue + ;; -const char * -base_name (const char *name) -{ - const char *base; + -objectlist) + prev=objectlist + continue + ;; -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha ((unsigned char)name[0]) && name[1] == ':') - name += 2; -#endif + -o) prev=output ;; - for (base = name; *name; name++) - if (IS_DIR_SEPARATOR (*name)) - base = name + 1; - return base; -} + -precious-files-regex) + prev=precious_regex + continue + ;; -int -check_executable(const char * path) -{ - struct stat st; + -release) + prev=release + continue + ;; - DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); - if ((!path) || (!*path)) - return 0; + -rpath) + prev=rpath + continue + ;; - if ((stat (path, &st) >= 0) && - ( - /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ -#if defined (S_IXOTH) - ((st.st_mode & S_IXOTH) == S_IXOTH) || -#endif -#if defined (S_IXGRP) - ((st.st_mode & S_IXGRP) == S_IXGRP) || -#endif - ((st.st_mode & S_IXUSR) == S_IXUSR)) - ) - return 1; - else - return 0; -} + -R) + prev=xrpath + continue + ;; -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise */ -char * -find_executable (const char* wrapper) -{ - int has_slash = 0; - const char* p; - const char* p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char* concat_name; + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; - DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; + -shrext) + prev=shrext + continue + ;; - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char* path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char* q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR(*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen(tmp); - concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal ("getcwd failed"); - tmp_len = strlen(tmp); - concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); + -thread-safe) + thread_safe=yes + continue + ;; - if (check_executable(concat_name)) - return concat_name; - XFREE(concat_name); - return NULL; -} + -version-info) + prev=vinfo + continue + ;; -char * -strendzap(char *str, const char *pat) -{ - size_t len, patlen; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; - assert(str != NULL); - assert(pat != NULL); + -weak) + prev=weak + continue + ;; - len = strlen(str); - patlen = strlen(pat); + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; - if (patlen <= len) - { - str += len - patlen; - if (strcmp(str, pat) == 0) - *str = '\0'; - } - return str; -} + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; -static void -lt_error_core (int exit_status, const char * mode, - const char * message, va_list ap) -{ - fprintf (stderr, "%s: %s: ", program_name, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); + -Xcompiler) + prev=xcompiler + continue + ;; - if (exit_status >= 0) - exit (exit_status); -} + -Xlinker) + prev=xlinker + continue + ;; -void -lt_fatal (const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, "FATAL", message, ap); - va_end (ap); -} -EOF - # we should really use a build-platform specific compiler - # here, but OTOH, the wrappers (shell script and this C one) - # are only useful if you want to execute the "real" binary. - # Since the "real" binary is built for $host, then this - # wrapper might as well be built for $host, too. - $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource - ;; - esac - $rm $output - trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + -XCClinker) + prev=xcclinker + continue + ;; - $echo > $output "\ -#! $SHELL + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='${SED} -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + *.$objext) + # A standard object. + objs="$objs $arg" + ;; -relink_command=\"$relink_command\" + *.lo) + # A libtool-controlled object. -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variable: - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$echo are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - echo=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$echo works! - : + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else - # Restart under the correct shell, and then maybe \$echo will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + shlib_search_path= fi - fi\ -" - $echo >> $output "\ + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - # Find the directory that this script lives in. - thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi - file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` - done + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi - if test "$fast_install" = yes; then - $echo >> $output "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done - if test ! -f \"\$progdir/\$program\" || \\ - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= - file=\"\$\$-\$program\" + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi - if test ! -d \"\$progdir\"; then - $mkdir \"\$progdir\" - else - $rm \"\$progdir/\$file\" - fi" + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac - $echo >> $output "\ + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $echo \"\$relink_command_output\" >&2 - $rm \"\$progdir/\$file\" - exit $EXIT_FAILURE - fi - fi + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi - $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $rm \"\$progdir/\$program\"; - $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $rm \"\$progdir/\$file\" - fi" - else - $echo >> $output "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi - $echo >> $output "\ + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" - if test -f \"\$progdir/\$program\"; then" + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $echo >> $output "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi - export $shlibpath_var -" + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $echo >> $output "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi fi - $echo >> $output "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2*) - $echo >> $output "\ - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. - *) - $echo >> $output "\ - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" - exit $EXIT_FAILURE - fi - else - # The program doesn't exist. - \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$echo \"This script is just a wrapper for \$program.\" 1>&2 - $echo \"See the $PACKAGE documentation for more information.\" 1>&2 - exit $EXIT_FAILURE - fi -fi\ -" - chmod +x $output - fi - exit $EXIT_SUCCESS - ;; - esac + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - fi - addlibs="$old_convenience" - fi + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + else + output= + fi - func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" - fi + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - $echo "X$obj" | $Xsed -e 's%^.*/%%' - done | sort | sort -uc >/dev/null 2>&1); then - : - else - $echo "copying selected object files to avoid basename conflicts..." + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" - if test -z "$gentop"; then - gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "$mkdir $gentop" - $run $mkdir "$gentop" - exit_status=$? - if test "$exit_status" -ne 0 && test ! -d "$gentop"; then - exit $exit_status + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - counter=`expr $counter + 1` - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - $run ln "$obj" "$gentop/$newobj" || - $run cp "$obj" "$gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" - ;; - *) oldobjs="$oldobjs $obj" ;; - esac - done - fi + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi - eval cmds=\"$old_archive_cmds\" + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi - if len=`expr "X$cmds" : ".*"` && - test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - $echo "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs + libobjs=$output + # Restore the value of output. + output=$save_output - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - for obj in $save_oldobjs - do - oldobjs="$objlist $obj" - objlist="$objlist $obj" - eval test_cmds=\"$old_archive_cmds\" - if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && - test "$len" -le "$max_cmd_len"; then - : + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= + cmds=$module_cmds fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi fi fi - fi - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - eval cmd=\"$cmd\" - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - if test -n "$generated"; then - $show "${rm}r$generated" - $run ${rm}r$generated - fi + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - $show "creating $output" + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` - relink_command="$var=\"$var_value\"; export $var; $relink_command" + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? - # Only create the output if not a dry run. - if test -z "$run"; then - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - newdlfiles="$newdlfiles $libdir/$name" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit $EXIT_FAILURE - fi - newdlprefiles="$newdlprefiles $libdir/$name" - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlfiles="$newdlfiles $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - newdlprefiles="$newdlprefiles $abs" - done - dlprefiles="$newdlprefiles" fi - $rm $output - # place dlname in correct position for cygwin - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; - esac - $echo > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# Please DO NOT delete this file! -# It is necessary for linking the library. -# The name that we can dlopen(3). -dlname='$tdlname' + exit $EXIT_SUCCESS + fi -# Names of this library. -library_names='$library_names' + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi -# The name of the static archive. -old_library='$old_library' + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' -# Version information for $libname. -current=$current -age=$age -revision=$revision + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi -# Is this an already installed library? -installed=$installed + exit $EXIT_SUCCESS + fi -# Should we warn about portability when linking against -modules? -shouldnotlink=$module + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $echo >> $output "\ -relink_command=\"$relink_command\"" - fi - done + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' fi - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" - $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? - ;; - esac - exit $EXIT_SUCCESS - ;; + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi - # libtool install mode - install) - modename="$modename: install" + exit $EXIT_SUCCESS + ;; - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - $echo "X$nonopt" | grep shtool > /dev/null; then - # Aesthetically quote it. - arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; esac - install_prog="$arg " - arg="$1" - shift - else - install_prog= - arg=$nonopt - fi + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog$arg" + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest=$arg - continue - fi + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - case $arg in - -d) isdir=yes ;; - -f) - case " $install_prog " in - *[\\\ /]cp\ *) ;; - *) prev=$arg ;; - esac - ;; - -g | -m | -o) prev=$arg ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest=$arg - continue - fi + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac - # Aesthetically quote the argument. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case $arg in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac - install_prog="$install_prog $arg" - done - - if test -z "$install_prog"; then - $echo "$modename: you must specify an install program" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - if test -n "$prev"; then - $echo "$modename: the \`$prev' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - if test -z "$files"; then - if test -z "$dest"; then - $echo "$modename: no file or destination specified" 1>&2 - else - $echo "$modename: you must specify a destination" 1>&2 - fi - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Strip any trailing slash from the destination. - dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` - test "X$destdir" = "X$dest" && destdir=. - destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - # Not a directory, so check to see that there is only one file specified. - set dummy $files - if test "$#" -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; *) - $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac ;; esac done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - staticlibs="$staticlibs $file" - ;; - *.la) - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" - library_names= - old_library= - relink_command= - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; + *) perm_rpath="$perm_rpath $libdir" ;; esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ - test "X$dir" = "X$file/" && dir= - dir="$dir$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - if test "$inst_prefix_dir" = "$destdir"; then - $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 - exit $EXIT_FAILURE - fi + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - $echo "$modename: warning: relinking \`$file'" 1>&2 - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - exit $EXIT_FAILURE - fi - fi + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$srcname $destdir/$realname" - $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? - if test -n "$stripme" && test -n "$striplib"; then - $show "$striplib $destdir/$realname" - $run eval "$striplib $destdir/$realname" || exit $? - fi + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - if test "$linkname" != "$realname"; then - $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" - $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" - fi - done - fi + exit $exit_status + fi - # Do each command in the postinstall commands. - lib="$destdir/$realname" - cmds=$postinstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$mode" = relink; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' - fi + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi - exit $lt_exit - } + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" done - IFS="$save_ifs" + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi - # Install the pseudo-library for information purposes. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - instname="$dir/$name"i - $show "$install_prog $instname $destdir/$name" - $run eval "$install_prog $instname $destdir/$name" || exit $? - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" - ;; + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi - *.lo) - # Install (i.e. copy) a libtool object. + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" fi + fi - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; - esac + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - # Install the libtool object if requested. - if test -n "$destfile"; then - $show "$install_prog $file $destfile" - $run eval "$install_prog $file $destfile" || exit $? - fi + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + func_show_eval "$link_command" 'exit $?' - $show "$install_prog $staticobj $staticdest" - $run eval "$install_prog \$staticobj \$staticdest" || exit $? - fi - exit $EXIT_SUCCESS - ;; + # Now create the wrapper script. + func_verbose "creating $output" - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - file=`$echo $file|${SED} 's,.exe$,,'` - stripped_ext=".exe" - fi - ;; + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi - # Do a test to see if this is really a libtool program. + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions case $host in - *cygwin*|*mingw*) - wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` - ;; - *) - wrapper=$file - ;; + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; esac - if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then - notinst_deplibs= - relink_command= - - # Note that it is not necessary on cygwin/mingw to append a dot to - # foo even if both foo and FILE.exe exist: automatic-append-.exe - # behavior happens only for exec(3), not for open(2)! Also, sourcing - # `FILE.' does not work on cygwin managed mounts. - # - # If there is no directory component, then add one. - case $wrapper in - */* | *\\*) . ${wrapper} ;; - *) . ./${wrapper} ;; - esac - - # Check the variables that should have been set. - if test -z "$notinst_deplibs"; then - $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 - exit $EXIT_FAILURE - fi - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - # If there is no directory component, then add one. - case $lib in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - fi - libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - relink_command= - # Note that it is not necessary on cygwin/mingw to append a dot to - # foo even if both foo and FILE.exe exist: automatic-append-.exe - # behavior happens only for exec(3), not for open(2)! Also, sourcing - # `FILE.' does not work on cygwin managed mounts. - # - # If there is no directory component, then add one. - case $wrapper in - */* | *\\*) . ${wrapper} ;; - *) . ./${wrapper} ;; - esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - if test "$finalize" = yes && test -z "$run"; then - tmpdir=`func_mktempdir` - file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $show "$relink_command" - if $run eval "$relink_command"; then : + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - ${rm}r "$tmpdir" - continue + func_emit_wrapper no > $func_ltwrapper_scriptname_result fi - file="$outputname" - else - $echo "$modename: warning: cannot relink \`$file'" 1>&2 - fi - else - # Install the binary that we compiled earlier. - file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` - ;; - esac + func_emit_wrapper no > $output + chmod +x $output ;; esac - $show "$install_prog$stripme $file $destfile" - $run eval "$install_prog\$stripme \$file \$destfile" || exit $? - test -n "$outputname" && ${rm}r "$tmpdir" - ;; - esac - done - - for file in $staticlibs; do - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - # Set up the ranlib parameters. - oldlib="$destdir/$name" + } + exit $EXIT_SUCCESS + ;; + esac - $show "$install_prog $file $oldlib" - $run eval "$install_prog \$file \$oldlib" || exit $? + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do - if test -n "$stripme" && test -n "$old_striplib"; then - $show "$old_striplib $oldlib" - $run eval "$old_striplib $oldlib" || exit $? + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" fi - # Do each command in the postinstall commands. - cmds=$old_postinstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" - if test -n "$future_libdirs"; then - $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 - fi + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - test -n "$run" && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi - ;; + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else - # libtool finish mode - finish) - modename="$modename: finish" - libdirs="$nonopt" - admincmds= + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - cmds=$finish_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" || admincmds="$admincmds - $cmd" + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac done - IFS="$save_ifs" - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $run eval "$cmds" || admincmds="$admincmds - $cmds" fi - done - fi - - # Exit here if they wanted silent mode. - test "$show" = : && exit $EXIT_SUCCESS + eval cmds=\"$old_archive_cmds\" - $echo "X----------------------------------------------------------------------" | $Xsed - $echo "Libraries have been installed in:" - for libdir in $libdirs; do - $echo " $libdir" + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' done - $echo - $echo "If you ever happen to want to link against installed libraries" - $echo "in a given directory, LIBDIR, you must either use libtool, and" - $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - $echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - $echo " during execution" - fi - if test -n "$runpath_var"; then - $echo " - add LIBDIR to the \`$runpath_var' environment variable" - $echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $echo " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $echo " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - $echo - $echo "See any operating system documentation about shared libraries for" - $echo "more information, such as the ld(1) and ld.so(8) manual pages." - $echo "X----------------------------------------------------------------------" | $Xsed - exit $EXIT_SUCCESS - ;; - # libtool execute mode - execute) - modename="$modename: execute" - - # The first argument is the command name. - cmd="$nonopt" - if test -z "$cmd"; then - $echo "$modename: you must specify a COMMAND" 1>&2 - $echo "$help" - exit $EXIT_FAILURE - fi + test -n "$generated" && \ + func_show_eval "${RM}r$generated" - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - if test ! -f "$file"; then - $echo "$modename: \`$file' is not a file" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" - dir= - case $file in - *.la) - # Check to see that this really is a libtool archive. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi - # Read the libtool library. - dlname= - library_names= + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac +# The name that we can dlopen(3). +dlname='$tdlname' - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" - continue - fi +# Names of this library. +library_names='$library_names' - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. +# The name of the static archive. +old_library='$old_library' - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit $EXIT_FAILURE - fi - ;; +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' - *.lo) - # Just add the directory containing the .lo file. - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - ;; +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' - *) - $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 - continue - ;; - esac +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" +# Version information for $libname. +current=$current +age=$age +revision=$revision - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done +# Is this an already installed library? +installed=$installed - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" +# Should we warn about portability when linking against -modules? +shouldnotlink=$module - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case $file in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` - args="$args \"$file\"" - done +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } - if test -z "$run"; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} - # Restore saved environment variables - if test "${save_LC_ALL+set}" = set; then - LC_ALL="$save_LC_ALL"; export LC_ALL - fi - if test "${save_LANG+set}" = set; then - LANG="$save_LANG"; export LANG - fi +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" - $echo "export $shlibpath_var" - fi - $echo "$cmd$args" - exit $EXIT_SUCCESS - fi - ;; - # libtool clean and uninstall mode - clean | uninstall) - modename="$modename: $mode" - rm="$nonopt" +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" files= rmforce= exit_status=0 @@ -6456,30 +8208,28 @@ relink_command=\"$relink_command\"" for arg do case $arg in - -f) rm="$rm $arg"; rmforce=yes ;; - -*) rm="$rm $arg" ;; + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done - if test -z "$rm"; then - $echo "$modename: you must specify an RM program" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - fi + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$file"; then - dir=. + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + func_basename "$file" + name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates @@ -6491,9 +8241,9 @@ relink_command=\"$relink_command\"" fi # Don't error if the file doesn't exist and rm -f was used. - if (test -L "$file") >/dev/null 2>&1 \ - || (test -h "$file") >/dev/null 2>&1 \ - || test -f "$file"; then + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then : elif test -d "$file"; then exit_status=1 @@ -6507,8 +8257,8 @@ relink_command=\"$relink_command\"" case $name in *.la) # Possibly a libtool archive, so verify it. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name + if func_lalib_p "$file"; then + func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do @@ -6523,39 +8273,17 @@ relink_command=\"$relink_command\"" *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. - cmds=$postuninstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" - if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. - cmds=$old_postuninstall_cmds - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $show "$cmd" - $run eval "$cmd" - if test "$?" -ne 0 && test "$rmforce" != yes; then - exit_status=1 - fi - done - IFS="$save_ifs" + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; @@ -6565,20 +8293,20 @@ relink_command=\"$relink_command\"" *.lo) # Possibly a libtool object, so verify it. - if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + if func_lalib_p "$file"; then # Read the .lo file - . $dir/$name + func_source $dir/$name # Add PIC object to the list of files to remove. - if test -n "$pic_object" \ - && test "$pic_object" != none; then + if test -n "$pic_object" && + test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" \ - && test "$non_pic_object" != none; then + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi @@ -6589,17 +8317,26 @@ relink_command=\"$relink_command\"" noexename=$name case $file in *.exe) - file=`$echo $file|${SED} 's,.exe$,,'` - noexename=`$echo $name|${SED} 's,.exe$,,'` + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. - if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$noexename + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles @@ -6614,237 +8351,38 @@ relink_command=\"$relink_command\"" fi ;; esac - $show "$rm $rmfiles" - $run $rm $rmfiles || exit_status=1 + func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then - $show "rmdir $dir" - $run rmdir $dir >/dev/null 2>&1 + func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status - ;; +} - "") - $echo "$modename: you must specify a MODE" 1>&2 - $echo "$generic_help" 1>&2 - exit $EXIT_FAILURE - ;; - esac +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} - if test -z "$exec_cmd"; then - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit $EXIT_FAILURE - fi -fi # test -z "$show_help" +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then - eval exec $exec_cmd + eval exec "$exec_cmd" exit $EXIT_FAILURE fi -# We need to display help for each of the modes. -case $mode in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - - --config show all configuration variables - --debug enable verbose shell tracing --n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --finish same as \`--mode=finish' - --help display this help message and exit - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - --version print version information - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for -a more detailed description of MODE. - -Report bugs to ." - exit $EXIT_SUCCESS - ;; - -clean) - $echo \ -"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - -compile) - $echo \ -"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -prefer-pic try to building PIC objects only - -prefer-non-pic try to building non-PIC objects only - -static always build a \`.o' file suitable for static linking - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - -execute) - $echo \ -"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - -finish) - $echo \ -"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - -install) - $echo \ -"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - -link) - $echo \ -"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -static do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - -uninstall) - $echo \ -"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. +exit $exit_status -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - -*) - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$help" 1>&2 - exit $EXIT_FAILURE - ;; -esac - -$echo -$echo "Try \`$modename --help' for more information about other modes." - -exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting @@ -6858,14 +8396,17 @@ exit $? # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared -disable_libs=shared +build_libtool_libs=no +build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static -disable_libs=static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: +# vi:sw=2 + diff --git a/mblock/Makefile.am b/mblock/Makefile.am new file mode 100644 index 00000000..69e2f22c --- /dev/null +++ b/mblock/Makefile.am @@ -0,0 +1,31 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + mblock.pc.in + +SUBDIRS = src +DIST_SUBDIRS = src doc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = mblock.pc diff --git a/mblock/Makefile.in b/mblock/Makefile.in new file mode 100644 index 00000000..05a2259a --- /dev/null +++ b/mblock/Makefile.in @@ -0,0 +1,1068 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/mblock.pc.in $(top_srcdir)/Makefile.common +subdir = mblock +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = mblock.pc +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = \ + mblock.pc.in + +SUBDIRS = src +DIST_SUBDIRS = src doc +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = mblock.pc +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +mblock.pc: $(top_builddir)/config.status $(srcdir)/mblock.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/README b/mblock/README new file mode 100644 index 00000000..1f3ba697 --- /dev/null +++ b/mblock/README @@ -0,0 +1,24 @@ +# +# Copyright 2006,2007 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. +# + +The "Message block" implementation, a work in progress... + +http://gnuradio.org/trac/wiki/MessageBlocks diff --git a/mblock/doc/Makefile.am b/mblock/doc/Makefile.am new file mode 100644 index 00000000..a806b25c --- /dev/null +++ b/mblock/doc/Makefile.am @@ -0,0 +1,44 @@ +# +# Copyright 2004,2005,2006 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. +# + +TARGETS = + + +# To avoid build problems for folks who don't have xmlto installed, we +# don't build the docs by default. + +# html: $(TARGETS) +all: $(TARGETS) + + +EXTRA_DIST = + +BUILT_XML_FILES = + + +# ---------------------------------------------------------------- + +clean: + -rm -f $(TARGETS) $(BUILT_XML_FILES) + +# This is non-portable pattern rule. +#%.html : %.xml +# xmlto html-nochunks $< diff --git a/mblock/doc/Makefile.in b/mblock/doc/Makefile.in new file mode 100644 index 00000000..3b3db751 --- /dev/null +++ b/mblock/doc/Makefile.in @@ -0,0 +1,753 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,2006 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = mblock/doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +TARGETS = +EXTRA_DIST = +BUILT_XML_FILES = +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# To avoid build problems for folks who don't have xmlto installed, we +# don't build the docs by default. + +# html: $(TARGETS) +all: $(TARGETS) + +# ---------------------------------------------------------------- + +clean: + -rm -f $(TARGETS) $(BUILT_XML_FILES) + +# This is non-portable pattern rule. +#%.html : %.xml +# xmlto html-nochunks $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/mblock.pc.in b/mblock/mblock.pc.in new file mode 100644 index 00000000..ec72b104 --- /dev/null +++ b/mblock/mblock.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: mblock +Description: The GNU Radio message block library +Requires: pmt gnuradio-omnithread +Version: @VERSION@ +Libs: -L${libdir} -lmblock +Cflags: -I${includedir} @DEFINES@ diff --git a/mblock/src/Makefile.am b/mblock/src/Makefile.am new file mode 100644 index 00000000..60995c97 --- /dev/null +++ b/mblock/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2004,2006,2008 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. +# + +SUBDIRS = include lib scheme diff --git a/mblock/src/Makefile.in b/mblock/src/Makefile.in new file mode 100644 index 00000000..c05546f0 --- /dev/null +++ b/mblock/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2006,2008 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = mblock/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = include lib scheme +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/src/include/Makefile.am b/mblock/src/include/Makefile.am new file mode 100644 index 00000000..d5672989 --- /dev/null +++ b/mblock/src/include/Makefile.am @@ -0,0 +1,24 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = mblock diff --git a/mblock/src/include/Makefile.in b/mblock/src/include/Makefile.in new file mode 100644 index 00000000..a8bb9c3b --- /dev/null +++ b/mblock/src/include/Makefile.in @@ -0,0 +1,1030 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = mblock/src/include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = mblock +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/src/include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/src/include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/src/include/mblock/Makefile.am b/mblock/src/include/mblock/Makefile.am new file mode 100644 index 00000000..e36215aa --- /dev/null +++ b/mblock/src/include/mblock/Makefile.am @@ -0,0 +1,37 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +mbincludedir = $(includedir)/mblock + +mbinclude_HEADERS = \ + common.h \ + class_registry.h \ + exception.h \ + mblock.h \ + message.h \ + msg_accepter.h \ + msg_queue.h \ + port.h \ + protocol_class.h \ + runtime.h \ + time.h diff --git a/mblock/src/include/mblock/Makefile.in b/mblock/src/include/mblock/Makefile.in new file mode 100644 index 00000000..ee0d4c2f --- /dev/null +++ b/mblock/src/include/mblock/Makefile.in @@ -0,0 +1,960 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(mbinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = mblock/src/include/mblock +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(mbincludedir)" +mbincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(mbinclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +mbincludedir = $(includedir)/mblock +mbinclude_HEADERS = \ + common.h \ + class_registry.h \ + exception.h \ + mblock.h \ + message.h \ + msg_accepter.h \ + msg_queue.h \ + port.h \ + protocol_class.h \ + runtime.h \ + time.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/src/include/mblock/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/src/include/mblock/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-mbincludeHEADERS: $(mbinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(mbincludedir)" || $(MKDIR_P) "$(DESTDIR)$(mbincludedir)" + @list='$(mbinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(mbincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(mbincludedir)/$$f'"; \ + $(mbincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(mbincludedir)/$$f"; \ + done + +uninstall-mbincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(mbinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(mbincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(mbincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(mbincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-mbincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-mbincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-mbincludeHEADERS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-mbincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/src/include/mblock/class_registry.h b/mblock/src/include/mblock/class_registry.h new file mode 100644 index 00000000..b94a7cbc --- /dev/null +++ b/mblock/src/include/mblock/class_registry.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_CLASS_REGISTRY_H +#define INCLUDED_MB_CLASS_REGISTRY_H + +#include + +//! conceptually, pointer to constructor +typedef mb_mblock_sptr (*mb_mblock_maker_t)(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg); + +/* + * \brief Maintain mapping between mblock class_name and factory (maker) + */ +class mb_class_registry : public boost::noncopyable { +public: + static bool register_maker(const std::string &name, mb_mblock_maker_t maker); + static bool lookup_maker(const std::string &name, mb_mblock_maker_t *maker); +}; + +template +mb_mblock_sptr mb_mblock_maker(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg) +{ + return mb_mblock_sptr(new mblock(runtime, instance_name, user_arg)); +} + +#define REGISTER_MBLOCK_CLASS(name) \ + bool __RBC__ ## name = mb_class_registry::register_maker(#name, &mb_mblock_maker) + +#endif /* INCLUDED_MB_CLASS_REGISTRY_H */ diff --git a/mblock/src/include/mblock/common.h b/mblock/src/include/mblock/common.h new file mode 100644 index 00000000..2507d053 --- /dev/null +++ b/mblock/src/include/mblock/common.h @@ -0,0 +1,94 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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 INCLUDED_MB_COMMON_H +#define INCLUDED_MB_COMMON_H + +#include +#include +#include +#include +#include +#include + +/* + * The priority type and valid range + */ +typedef unsigned int mb_pri_t; +static const mb_pri_t MB_PRI_BEST = 0; +static const mb_pri_t MB_PRI_DEFAULT = 4; +static const mb_pri_t MB_PRI_WORST = 7; +static const mb_pri_t MB_NPRI = MB_PRI_WORST + 1; // number of valid priorities + +/*! + * \brief return true iff priority a is better than priority b + */ +inline static bool +mb_pri_better(mb_pri_t a, mb_pri_t b) +{ + return a < b; +} + +/*! + * \brief return true iff priority a is worse than priority b + */ +inline static bool +mb_pri_worse(mb_pri_t a, mb_pri_t b) +{ + return a > b; +} + +/*! + * \brief ensure that pri is valid + */ +inline static mb_pri_t +mb_pri_clamp(mb_pri_t p) +{ + return p < MB_NPRI ? p : MB_NPRI - 1; +} + +class mb_runtime; +typedef boost::shared_ptr mb_runtime_sptr; + +//class mb_runtime_impl; +//typedef boost::shared_ptr mb_runtime_impl_sptr; + +class mb_mblock; +typedef boost::shared_ptr mb_mblock_sptr; + +class mb_mblock_impl; +typedef boost::shared_ptr mb_mblock_impl_sptr; + +class mb_port; +typedef boost::shared_ptr mb_port_sptr; + +//class mb_port_detail; +//typedef boost::shared_ptr mb_port_detail_sptr; + +class mb_msg_accepter; +typedef boost::shared_ptr mb_msg_accepter_sptr; + +class mb_message; +typedef boost::shared_ptr mb_message_sptr; + +class mb_msg_queue; +typedef boost::shared_ptr mb_msg_queue_sptr; + +#endif /* INCLUDED_MB_COMMON_H */ diff --git a/mblock/src/include/mblock/exception.h b/mblock/src/include/mblock/exception.h new file mode 100644 index 00000000..6cc45665 --- /dev/null +++ b/mblock/src/include/mblock/exception.h @@ -0,0 +1,118 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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 INCLUDED_MB_EXCEPTION_H +#define INCLUDED_MB_EXCEPTION_H + +#include + +class mb_mblock; + + +class mbe_base : public std::logic_error +{ +public: + mbe_base(mb_mblock *mb, const std::string &msg); +}; + +class mbe_not_implemented : public mbe_base +{ +public: + mbe_not_implemented(mb_mblock *mb, const std::string &msg); +}; + +class mbe_no_such_class : public mbe_base +{ +public: + mbe_no_such_class(mb_mblock *, const std::string &class_name); +}; + +class mbe_no_such_component : public mbe_base +{ +public: + mbe_no_such_component(mb_mblock *, const std::string &component_name); +}; + +class mbe_duplicate_component : public mbe_base +{ +public: + mbe_duplicate_component(mb_mblock *, const std::string &component_name); +}; + +class mbe_no_such_port : public mbe_base +{ +public: + mbe_no_such_port(mb_mblock *, const std::string &port_name); +}; + + +class mbe_duplicate_port : public mbe_base +{ +public: + mbe_duplicate_port(mb_mblock *, const std::string &port_name); +}; + +class mbe_already_connected : public mbe_base +{ +public: + mbe_already_connected(mb_mblock *, const std::string &comp_name, + const std::string &port_name); +}; + +class mbe_incompatible_ports : public mbe_base +{ +public: + mbe_incompatible_ports(mb_mblock *, + const std::string &comp1_name, + const std::string &port1_name, + const std::string &comp2_name, + const std::string &port2_name); +}; + +class mbe_invalid_port_type : public mbe_base +{ +public: + mbe_invalid_port_type(mb_mblock *, const std::string &comp_name, + const std::string &port_name); +}; + +class mbe_mblock_failed : public mbe_base +{ +public: + mbe_mblock_failed(mb_mblock *, const std::string &msg); +}; + + + +// not derived from mbe_base to simplify try/catch +class mbe_terminate +{ +public: + mbe_terminate(); +}; + +// not derived from mbe_base to simplify try/catch +class mbe_exit +{ +public: + mbe_exit(); +}; + +#endif /* INCLUDED_MB_EXCEPTION_H */ diff --git a/mblock/src/include/mblock/mblock.h b/mblock/src/include/mblock/mblock.h new file mode 100644 index 00000000..bbc40f1e --- /dev/null +++ b/mblock/src/include/mblock/mblock.h @@ -0,0 +1,318 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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 INCLUDED_MB_MBLOCK_H +#define INCLUDED_MB_MBLOCK_H + +#include +#include +#include +#include + + +/*! + * Abstract class implementing visitor pattern + * \ingroup internal + */ +class mb_visitor +{ +public: + virtual ~mb_visitor(); + virtual bool operator()(mb_mblock *mblock) = 0; +}; + +// ---------------------------------------------------------------------- + +/*! + * \brief Parent class for all message passing blocks + * + * Subclass this to define your mblocks. + */ +class mb_mblock : boost::noncopyable, + public boost::enable_shared_from_this +{ +private: + mb_mblock_impl_sptr d_impl; // implementation details + + friend class mb_runtime; + friend class mb_mblock_impl; + friend class mb_worker; + +protected: + /*! + * \brief mblock constructor. + * + * Initializing all mblocks in the system is a 3 step procedure. + * + * The top level mblock's constructor is run. That constructor + * (a) registers all of its ports using define_port, (b) registers any + * subcomponents it may have via the define_component method, and + * then (c) issues connect calls to wire its subcomponents together. + * + * \param runtime the runtime associated with this mblock + * \param instance_name specify the name of this instance + * (for debugging, NUMA mapping, etc) + * \param user_arg argument passed by user to constructor + * (ignored by the mb_mblock base class) + */ + mb_mblock(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + +public: + /*! + * \brief Called by the runtime system to execute the initial + * transition of the finite state machine. + * + * This method is called by the runtime after all blocks are + * constructed and before the first message is delivered. Override + * this to initialize your finite state machine. + */ + virtual void initial_transition(); + +protected: + /*! + * \brief Called by the runtime system when there's a message to handle. + * + * Override this to define your behavior. + * + * Do not issue any potentially blocking calls in this method. This + * includes things such reads or writes on sockets, pipes or slow + * i/o devices. + */ + virtual void handle_message(mb_message_sptr msg); + + /*! + * \brief Define a port. + * + * EXTERNAL and RELAY ports are part of our peer interface. + * INTERNAL ports are used to talk to sub-components. + * + * \param port_name The name of the port (must be unique within this mblock). + * \param protocol_class_name The name of the protocol class associated with + * this port. It must already be defined. + * \param conjugated Are the incoming and outgoing message sets swapped? + * \param port_type INTERNAL, EXTERNAL or RELAY. + */ + mb_port_sptr + define_port(const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type); + + /*! + * \brief Define a subcomponent by name. + * + * Called within the constructor to tell the system the + * names and identities of our sub-component mblocks. + * + * \param component_name The name of the sub-component (must be unique with this mblock). + * \param class_name The class of the instance that is to be created. + * \param user_arg The argument to pass to the constructor of the component. + */ + void + define_component(const std::string &component_name, + const std::string &class_name, + pmt_t user_arg = PMT_NIL); + + /*! + * \brief connect endpoint_1 to endpoint_2 + * + * \param comp_name1 component on one end of the connection + * \param port_name1 the name of the port on comp1 + * \param comp_name2 component on the other end of the connection + * \param port_name2 the name of the port on comp2 + * + * An endpoint is specified by the component's local name (given as + * component_name in the call to register_component) and the name of + * the port on that component. + * + * To connect an internal or relay port, use "self" as the component name. + */ + void + connect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2); + + /*! + * \brief disconnect endpoint_1 from endpoint_2 + * + * \param comp_name1 component on one end of the connection + * \param port_name1 the name of the port on comp1 + * \param comp_name2 component on the other end of the connection + * \param port_name2 the name of the port on comp2 + * + * An endpoint is specified by the component's local name (given as + * component_name in the call to register_component) and the name of + * the port on that component. + * + * To disconnect an internal or relay port, use "self" as the component name. + */ + void + disconnect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2); + + /*! + * \brief disconnect all connections to specified component + * \param component_name component to disconnect + */ + void + disconnect_component(const std::string &component_name); + + /*! + * \brief disconnect all connections to all components + */ + void + disconnect_all(); + + /*! + * \brief Return number of connections (QA mostly) + */ + int + nconnections() const; + + //! Set the class name + void set_class_name(const std::string &name); + + /*! + * \brief Tell runtime that we are done. + * + * This method does not return. + */ + void exit(); + + /*! + * \brief Ask runtime to execute the shutdown procedure for all blocks. + * + * \param result sets value of \p result output argument of runtime->run(...) + * + * The runtime first sends a maximum priority %shutdown message to + * all blocks. All blocks should handle the %shutdown message, + * perform whatever clean up is required, and call this->exit(); + * + * After a period of time (~100ms), any blocks which haven't yet + * called this->exit() are sent a maximum priority %halt message. + * %halt is detected in main_loop, and this->exit() is called. + * + * After an additional period of time (~100ms), any blocks which + * still haven't yet called this->exit() are sent a SIG (TBD) + * signal, which will blow them out of any blocking system calls and + * raise an mbe_terminate exception. The default top-level + * runtime-provided exception handler will call this->exit() to + * finish the process. + * + * runtime->run(...) returns when all blocks have called exit. + */ + void shutdown_all(pmt_t result); + + /*! + * \brief main event dispatching loop + * + * Although it is possible to override this, the default implementation + * should work for virtually all cases. + */ + virtual void main_loop(); + +public: + virtual ~mb_mblock(); + + //! Return instance name of this block + std::string instance_name() const; + + //! Return the class name of this block + std::string class_name() const; + + //! Set the instance name of this block. + void set_instance_name(const std::string &name); + + //! Return the parent of this mblock, or 0 if we're the top-level block. + mb_mblock *parent() const; + + /*! + * \brief Schedule a "one shot" timeout. + * + * \param abs_time the absolute time at which the timeout should fire + * \param user_data the data passed in the %timeout message. + * + * When the timeout fires, a message will be sent to the mblock. + * + * The message will have port_id = %sys-port, signal = %timeout, + * data = user_data, metadata = the handle returned from + * schedule_one_shot_timeout, pri = MB_PRI_BEST. + * + * \returns a handle that can be used in cancel_timeout, and is passed + * as the metadata field of the generated %timeout message. + * + * To cancel a pending timeout, call cancel_timeout. + */ + pmt_t + schedule_one_shot_timeout(const mb_time &abs_time, pmt_t user_data); + + /*! + * \brief Schedule a periodic timeout. + * + * \param first_abs_time The absolute time at which the first timeout should fire. + * \param delta_time The relative delay between the first and successive timeouts. + * \param user_data the data passed in the %timeout message. + * + * When the timeout fires, a message will be sent to the mblock, and a + * new timeout will be scheduled for previous absolute time + delta_time. + * + * The message will have port_id = %sys-port, signal = %timeout, + * data = user_data, metadata = the handle returned from + * schedule_one_shot_timeout, pri = MB_PRI_BEST. + * + * \returns a handle that can be used in cancel_timeout, and is passed + * as the metadata field of the generated %timeout message. + * + * To cancel a pending timeout, call cancel_timeout. + */ + pmt_t + schedule_periodic_timeout(const mb_time &first_abs_time, + const mb_time &delta_time, + pmt_t user_data); + + /*! + * \brief Attempt to cancel a pending timeout. + * + * Note that this only stops a future timeout from firing. It is + * possible that a timeout may have already fired and enqueued a + * %timeout message, but that that message has not yet been seen by + * handle_message. + * + * \param handle returned from schedule_one_shot_timeout or schedule_periodic_timeout. + */ + void cancel_timeout(pmt_t handle); + + /*! + * \brief Perform a pre-order depth-first traversal of the hierarchy. + * + * The traversal stops and returns false if any call to visitor returns false. + */ + bool + walk_tree(mb_visitor *visitor); + + + //! \internal + // internal use only + mb_mblock_impl_sptr + impl() const { return d_impl; } + +}; + + +#endif /* INCLUDED_MB_MBLOCK_H */ diff --git a/mblock/src/include/mblock/message.h b/mblock/src/include/mblock/message.h new file mode 100644 index 00000000..8fbee2ff --- /dev/null +++ b/mblock/src/include/mblock/message.h @@ -0,0 +1,88 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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 INCLUDED_MB_MESSAGE_H +#define INCLUDED_MB_MESSAGE_H + +#include +#include + +#define MB_MESSAGE_LOCAL_ALLOCATOR 0 // define to 0 or 1 + +class mb_message; +typedef boost::shared_ptr mb_message_sptr; + +/*! + * \brief construct a message and return boost::shared_ptr + * + * \param signal identifier of the message + * \param data the data to be operated on + * \param metadata information about the data + * \param priority urgency + */ +mb_message_sptr +mb_make_message(pmt_t signal, + pmt_t data = PMT_NIL, + pmt_t metadata = PMT_NIL, + mb_pri_t priority = MB_PRI_DEFAULT); + +class mb_message { + mb_message_sptr d_next; // link field for msg queue + pmt_t d_signal; + pmt_t d_data; + pmt_t d_metadata; + mb_pri_t d_priority; + pmt_t d_port_id; // name of port msg was rcvd on (symbol) + + friend class mb_msg_queue; + + friend mb_message_sptr + mb_make_message(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority); + + // private constructor + mb_message(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority); + +public: + ~mb_message(); + + pmt_t signal() const { return d_signal; } + pmt_t data() const { return d_data; } + pmt_t metadata() const { return d_metadata; } + mb_pri_t priority() const { return d_priority; } + pmt_t port_id() const { return d_port_id; } + + void set_port_id(pmt_t port_id){ d_port_id = port_id; } + +#if (MB_MESSAGE_LOCAL_ALLOCATOR) + void *operator new(size_t); + void operator delete(void *, size_t); +#endif +}; + +std::ostream& operator<<(std::ostream& os, const mb_message &msg); + +inline +std::ostream& operator<<(std::ostream& os, const mb_message_sptr msg) +{ + os << *(msg.get()); + return os; +} + +#endif /* INCLUDED_MB_MESSAGE_H */ diff --git a/mblock/src/include/mblock/msg_accepter.h b/mblock/src/include/mblock/msg_accepter.h new file mode 100644 index 00000000..69be1311 --- /dev/null +++ b/mblock/src/include/mblock/msg_accepter.h @@ -0,0 +1,48 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_MSG_ACCEPTER_H +#define INCLUDED_MB_MSG_ACCEPTER_H + +#include + +/*! + * \brief Abstract class that accepts messages + * + * The mb_port::send method ultimately resolves the (local) + * destination of a send to an object of this type. The resulting + * object is called to deliver the message. + * + * Expect derived classes such as these: + * + * smp : target is visible in this address space + * mpi : target is on the other end of an MPI link + * ppe->spe : sending from Cell PPE to Cell SPE + * spe->ppe : sending from Cell SPE to Cell PPE + */ +class mb_msg_accepter { +public: + mb_msg_accepter(){}; + virtual ~mb_msg_accepter(); + + virtual void operator()(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority) = 0; +}; + +#endif /* INCLUDED_MB_MSG_ACCEPTER_H */ diff --git a/mblock/src/include/mblock/msg_queue.h b/mblock/src/include/mblock/msg_queue.h new file mode 100644 index 00000000..a2339708 --- /dev/null +++ b/mblock/src/include/mblock/msg_queue.h @@ -0,0 +1,82 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_MSG_QUEUE_H +#define INCLUDED_MB_MSG_QUEUE_H + +#include +#include +#include + +/*! + * \brief priority queue for mblock messages + */ +class mb_msg_queue : boost::noncopyable +{ + // When empty both head and tail are zero. + struct subq { + mb_message_sptr head; + mb_message_sptr tail; + + bool empty_p() const { return head == 0; } + }; + + omni_mutex d_mutex; + omni_condition d_not_empty; // reader waits on this + + // FIXME add bitmap to indicate which queues are non-empty. + subq d_queue[MB_NPRI]; + + mb_message_sptr get_highest_pri_msg_helper(); + +public: + mb_msg_queue(); + ~mb_msg_queue(); + + //! Insert \p msg into priority queue. + void insert(mb_message_sptr msg); + + /* + * \brief Delete highest pri message from the queue and return it. + * Returns equivalent of zero pointer if queue is empty. + */ + mb_message_sptr get_highest_pri_msg_nowait(); + + /* + * \brief Delete highest pri message from the queue and return it. + * If the queue is empty, this call blocks until it can return a message. + */ + mb_message_sptr get_highest_pri_msg(); + + /* + * \brief Delete highest pri message from the queue and return it. + * If the queue is empty, this call blocks until it can return a message + * or real-time exceeds the absolute time, abs_time. + * + * \param abs_time specifies the latest absolute time to wait until. + * \sa mb_time::time + * + * \returns a valid mb_message_sptr, or the equivalent of a zero pointer + * if the call timed out while waiting. + */ + mb_message_sptr get_highest_pri_msg_timedwait(const mb_time &abs_time); +}; + +#endif /* INCLUDED_MB_MSG_QUEUE_H */ diff --git a/mblock/src/include/mblock/port.h b/mblock/src/include/mblock/port.h new file mode 100644 index 00000000..782bb128 --- /dev/null +++ b/mblock/src/include/mblock/port.h @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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 INCLUDED_MB_PORT_H +#define INCLUDED_MB_PORT_H + +#include + +/*! + * \brief Abstract port characteristics + */ +class mb_port : boost::noncopyable +{ +public: + + //! port classification + enum port_type_t { + EXTERNAL, //< Externally visible + RELAY, //< Externally visible but really connected to a sub-component + INTERNAL //< Visible to self only + }; + +private: + + std::string d_port_name; + pmt_t d_port_symbol; // the port_name as a pmt symbol + pmt_t d_protocol_class; + bool d_conjugated; + port_type_t d_port_type; + +protected: + mb_mblock *d_mblock; // mblock we're defined in + + // protected constructor + mb_port(mb_mblock *mblock, + const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type); + + mb_mblock *mblock() const { return d_mblock; } + +public: + std::string port_name() const { return d_port_name; } + pmt_t port_symbol() const { return d_port_symbol; } + pmt_t protocol_class() const { return d_protocol_class; } + bool conjugated() const { return d_conjugated; } + port_type_t port_type() const { return d_port_type; } + + pmt_t incoming_message_set() const; + pmt_t outgoing_message_set() const; + + virtual ~mb_port(); + + /*! + * \brief send a message + * + * \param signal the event name + * \param data optional data + * \param metadata optional metadata + * \param priority the urgency at which the message is sent + */ + virtual void + send(pmt_t signal, + pmt_t data = PMT_F, + pmt_t metadata = PMT_F, + mb_pri_t priority = MB_PRI_DEFAULT) = 0; + + /* + * \brief Invalidate any cached peer resolutions + * \internal + */ + virtual void invalidate_cache() = 0; +}; + +#endif /* INCLUDED_MB_PORT_H */ diff --git a/mblock/src/include/mblock/protocol_class.h b/mblock/src/include/mblock/protocol_class.h new file mode 100644 index 00000000..33c5d711 --- /dev/null +++ b/mblock/src/include/mblock/protocol_class.h @@ -0,0 +1,52 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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 INCLUDED_MB_PROTOCOL_CLASS_H +#define INCLUDED_MB_PROTOCOL_CLASS_H + +#include + +/*! + * \brief construct a protocol_class + * + * \param name the name of the class (symbol) + * \param incoming incoming message set (list of symbols) + * \param outgoing outgoing message set (list of symbols) + */ +pmt_t mb_make_protocol_class(pmt_t name, pmt_t incoming, pmt_t outgoing); + +// Accessors +pmt_t mb_protocol_class_name(pmt_t pc); //< return name of protocol class +pmt_t mb_protocol_class_incoming(pmt_t pc); //< return incoming message set +pmt_t mb_protocol_class_outgoing(pmt_t pc); //< return outgoing message set + +pmt_t mb_protocol_class_lookup(pmt_t name); //< lookup an existing protocol class by name + + +/*! + * \brief Initialize one or more protocol class from a serialized description. + * Used by machine generated code. + */ +class mb_protocol_class_init { +public: + mb_protocol_class_init(const char *data, size_t len); +}; + +#endif /* INCLUDED_MB_PROTOCOL_CLASS_H */ diff --git a/mblock/src/include/mblock/runtime.h b/mblock/src/include/mblock/runtime.h new file mode 100644 index 00000000..86687571 --- /dev/null +++ b/mblock/src/include/mblock/runtime.h @@ -0,0 +1,69 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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 INCLUDED_MB_RUNTIME_H +#define INCLUDED_MB_RUNTIME_H + +#include +#include + +/*! + * \brief Public constructor (factory) for mb_runtime objects. + */ +mb_runtime_sptr mb_make_runtime(); + +/*! + * \brief Abstract runtime support for m-blocks + * + * There should generally be only a single instance of this class. + */ +class mb_runtime : boost::noncopyable, + public boost::enable_shared_from_this +{ +protected: + mb_mblock_sptr d_top; + +public: + mb_runtime(){} + virtual ~mb_runtime(); + + /*! + * \brief Construct and run the specified mblock hierarchy. + * + * This routine turns into the m-block scheduler, and + * blocks until the system is shutdown. + * + * \param instance_name name of the top-level mblock (conventionally "top") + * \param class_name The class of the top-level mblock to create. + * \param user_arg The argument to pass to the top-level mblock constructor + * \param result The value passed to shutdown_all. + * + * \returns true if the system ran successfully. + */ + virtual bool run(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg, + pmt_t *result = 0) = 0; + + // QA only... + mb_mblock_sptr top() { return d_top; } +}; + +#endif /* INCLUDED_MB_RUNTIME_H */ diff --git a/mblock/src/include/mblock/time.h b/mblock/src/include/mblock/time.h new file mode 100644 index 00000000..630fa845 --- /dev/null +++ b/mblock/src/include/mblock/time.h @@ -0,0 +1,27 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_MB_TIME_H +#define INCLUDED_MB_TIME_H + +#include +typedef omni_time mb_time; + +#endif /* INCLUDED_MB_TIME_H */ diff --git a/mblock/src/lib/Makefile.am b/mblock/src/lib/Makefile.am new file mode 100644 index 00000000..81079f03 --- /dev/null +++ b/mblock/src/lib/Makefile.am @@ -0,0 +1,132 @@ +# +# Copyright 2006,2007,2008,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. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(PMT_INCLUDES) \ + $(BOOST_CPPFLAGS) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) \ + $(MBLOCK_INCLUDES) + +# disable test until we fix ticket:180 +# TESTS = test_mblock + +lib_LTLIBRARIES = libmblock.la libmblock-qa.la + +EXTRA_DIST = \ + README.locking \ + qa_bitset.mbh + + +BUILT_SOURCES = \ + qa_bitset_mbh.cc + +qa_bitset_mbh.cc : qa_bitset.mbh + $(COMPILE_MBH) $(srcdir)/qa_bitset.mbh qa_bitset_mbh.cc + +# These are the source files that go into the mblock shared library +libmblock_la_SOURCES = \ + mb_class_registry.cc \ + mb_connection.cc \ + mb_endpoint.cc \ + mb_exception.cc \ + mb_gettid.cc \ + mb_mblock.cc \ + mb_mblock_impl.cc \ + mb_message.cc \ + mb_msg_accepter.cc \ + mb_msg_accepter_msgq.cc \ + mb_msg_accepter_smp.cc \ + mb_msg_queue.cc \ + mb_port.cc \ + mb_port_simple.cc \ + mb_protocol_class.cc \ + mb_runtime.cc \ + mb_runtime_base.cc \ + mb_runtime_nop.cc \ + mb_runtime_thread_per_block.cc \ + mb_timer_queue.cc \ + mb_util.cc \ + mb_worker.cc + + +# magic flags +libmblock_la_LDFLAGS = $(NO_UNDEFINED) + +# link the library against the c++ standard library +libmblock_la_LIBADD = \ + $(OMNITHREAD_LA) \ + $(PMT_LA) \ + -lstdc++ + +noinst_HEADERS = \ + mb_gettid.h \ + mb_msg_accepter_msgq.h \ + mb_port_simple.h \ + mb_util.h \ + mb_connection.h \ + mb_endpoint.h \ + mb_mblock_impl.h \ + mb_msg_accepter_smp.h \ + mb_runtime_base.h \ + mb_runtime_nop.h \ + mb_runtime_thread_per_block.h \ + mb_timer_queue.h \ + mb_worker.h \ + mbi_runtime_lock.h \ + qa_mblock.h \ + qa_mblock_prims.h \ + qa_mblock_send.h \ + qa_mblock_sys.h \ + qa_timeouts.h + + +# Build the qa code into its own library + +libmblock_qa_la_SOURCES = \ + qa_bitset.cc \ + qa_bitset_mbh.cc \ + qa_disconnect.cc \ + qa_mblock.cc \ + qa_mblock_prims.cc \ + qa_mblock_send.cc \ + qa_mblock_sys.cc \ + qa_timeouts.cc + + +# magic flags +libmblock_qa_la_LDFLAGS = $(NO_UNDEFINED) -avoid-version + +# link the library against the c++ standard library +libmblock_qa_la_LIBADD = \ + libmblock.la \ + $(CPPUNIT_LIBS) \ + -lstdc++ + + +noinst_PROGRAMS = \ + test_mblock \ + benchmark_send + +test_mblock_SOURCES = test_mblock.cc +test_mblock_LDADD = libmblock-qa.la + +benchmark_send_SOURCES = benchmark_send.cc +benchmark_send_LDADD = libmblock-qa.la diff --git a/mblock/src/lib/Makefile.in b/mblock/src/lib/Makefile.in new file mode 100644 index 00000000..b41d073b --- /dev/null +++ b/mblock/src/lib/Makefile.in @@ -0,0 +1,1193 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2006,2007,2008,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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +noinst_PROGRAMS = test_mblock$(EXEEXT) benchmark_send$(EXEEXT) +subdir = mblock/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libmblock_qa_la_DEPENDENCIES = libmblock.la $(am__DEPENDENCIES_1) +am_libmblock_qa_la_OBJECTS = qa_bitset.lo qa_bitset_mbh.lo \ + qa_disconnect.lo qa_mblock.lo qa_mblock_prims.lo \ + qa_mblock_send.lo qa_mblock_sys.lo qa_timeouts.lo +libmblock_qa_la_OBJECTS = $(am_libmblock_qa_la_OBJECTS) +libmblock_qa_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libmblock_qa_la_LDFLAGS) $(LDFLAGS) -o $@ +libmblock_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libmblock_la_OBJECTS = mb_class_registry.lo mb_connection.lo \ + mb_endpoint.lo mb_exception.lo mb_gettid.lo mb_mblock.lo \ + mb_mblock_impl.lo mb_message.lo mb_msg_accepter.lo \ + mb_msg_accepter_msgq.lo mb_msg_accepter_smp.lo mb_msg_queue.lo \ + mb_port.lo mb_port_simple.lo mb_protocol_class.lo \ + mb_runtime.lo mb_runtime_base.lo mb_runtime_nop.lo \ + mb_runtime_thread_per_block.lo mb_timer_queue.lo mb_util.lo \ + mb_worker.lo +libmblock_la_OBJECTS = $(am_libmblock_la_OBJECTS) +libmblock_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libmblock_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(noinst_PROGRAMS) +am_benchmark_send_OBJECTS = benchmark_send.$(OBJEXT) +benchmark_send_OBJECTS = $(am_benchmark_send_OBJECTS) +benchmark_send_DEPENDENCIES = libmblock-qa.la +am_test_mblock_OBJECTS = test_mblock.$(OBJEXT) +test_mblock_OBJECTS = $(am_test_mblock_OBJECTS) +test_mblock_DEPENDENCIES = libmblock-qa.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libmblock_qa_la_SOURCES) $(libmblock_la_SOURCES) \ + $(benchmark_send_SOURCES) $(test_mblock_SOURCES) +DIST_SOURCES = $(libmblock_qa_la_SOURCES) $(libmblock_la_SOURCES) \ + $(benchmark_send_SOURCES) $(test_mblock_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(PMT_INCLUDES) \ + $(BOOST_CPPFLAGS) $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) \ + $(MBLOCK_INCLUDES) + + +# disable test until we fix ticket:180 +# TESTS = test_mblock +lib_LTLIBRARIES = libmblock.la libmblock-qa.la +EXTRA_DIST = \ + README.locking \ + qa_bitset.mbh + +BUILT_SOURCES = \ + qa_bitset_mbh.cc + + +# These are the source files that go into the mblock shared library +libmblock_la_SOURCES = \ + mb_class_registry.cc \ + mb_connection.cc \ + mb_endpoint.cc \ + mb_exception.cc \ + mb_gettid.cc \ + mb_mblock.cc \ + mb_mblock_impl.cc \ + mb_message.cc \ + mb_msg_accepter.cc \ + mb_msg_accepter_msgq.cc \ + mb_msg_accepter_smp.cc \ + mb_msg_queue.cc \ + mb_port.cc \ + mb_port_simple.cc \ + mb_protocol_class.cc \ + mb_runtime.cc \ + mb_runtime_base.cc \ + mb_runtime_nop.cc \ + mb_runtime_thread_per_block.cc \ + mb_timer_queue.cc \ + mb_util.cc \ + mb_worker.cc + + +# magic flags +libmblock_la_LDFLAGS = $(NO_UNDEFINED) + +# link the library against the c++ standard library +libmblock_la_LIBADD = \ + $(OMNITHREAD_LA) \ + $(PMT_LA) \ + -lstdc++ + +noinst_HEADERS = \ + mb_gettid.h \ + mb_msg_accepter_msgq.h \ + mb_port_simple.h \ + mb_util.h \ + mb_connection.h \ + mb_endpoint.h \ + mb_mblock_impl.h \ + mb_msg_accepter_smp.h \ + mb_runtime_base.h \ + mb_runtime_nop.h \ + mb_runtime_thread_per_block.h \ + mb_timer_queue.h \ + mb_worker.h \ + mbi_runtime_lock.h \ + qa_mblock.h \ + qa_mblock_prims.h \ + qa_mblock_send.h \ + qa_mblock_sys.h \ + qa_timeouts.h + + +# Build the qa code into its own library +libmblock_qa_la_SOURCES = \ + qa_bitset.cc \ + qa_bitset_mbh.cc \ + qa_disconnect.cc \ + qa_mblock.cc \ + qa_mblock_prims.cc \ + qa_mblock_send.cc \ + qa_mblock_sys.cc \ + qa_timeouts.cc + + +# magic flags +libmblock_qa_la_LDFLAGS = $(NO_UNDEFINED) -avoid-version + +# link the library against the c++ standard library +libmblock_qa_la_LIBADD = \ + libmblock.la \ + $(CPPUNIT_LIBS) \ + -lstdc++ + +test_mblock_SOURCES = test_mblock.cc +test_mblock_LDADD = libmblock-qa.la +benchmark_send_SOURCES = benchmark_send.cc +benchmark_send_LDADD = libmblock-qa.la +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libmblock-qa.la: $(libmblock_qa_la_OBJECTS) $(libmblock_qa_la_DEPENDENCIES) + $(libmblock_qa_la_LINK) -rpath $(libdir) $(libmblock_qa_la_OBJECTS) $(libmblock_qa_la_LIBADD) $(LIBS) +libmblock.la: $(libmblock_la_OBJECTS) $(libmblock_la_DEPENDENCIES) + $(libmblock_la_LINK) -rpath $(libdir) $(libmblock_la_OBJECTS) $(libmblock_la_LIBADD) $(LIBS) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +benchmark_send$(EXEEXT): $(benchmark_send_OBJECTS) $(benchmark_send_DEPENDENCIES) + @rm -f benchmark_send$(EXEEXT) + $(CXXLINK) $(benchmark_send_OBJECTS) $(benchmark_send_LDADD) $(LIBS) +test_mblock$(EXEEXT): $(test_mblock_OBJECTS) $(test_mblock_DEPENDENCIES) + @rm -f test_mblock$(EXEEXT) + $(CXXLINK) $(test_mblock_OBJECTS) $(test_mblock_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark_send.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_class_registry.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_connection.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_endpoint.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_exception.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_gettid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_mblock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_mblock_impl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_message.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_msg_accepter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_msg_accepter_msgq.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_msg_accepter_smp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_msg_queue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_port.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_port_simple.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_protocol_class.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_runtime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_runtime_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_runtime_nop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_runtime_thread_per_block.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_timer_queue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mb_worker.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_bitset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_bitset_mbh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_disconnect.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_mblock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_mblock_prims.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_mblock_send.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_mblock_sys.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_timeouts.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mblock.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS ctags \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +qa_bitset_mbh.cc : qa_bitset.mbh + $(COMPILE_MBH) $(srcdir)/qa_bitset.mbh qa_bitset_mbh.cc +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/src/lib/README.locking b/mblock/src/lib/README.locking new file mode 100644 index 00000000..12d4735e --- /dev/null +++ b/mblock/src/lib/README.locking @@ -0,0 +1,4 @@ +The Big Runtime Lock must be held when: + +Manipulating or traversing any mblock's d_port_map, d_comp_map or d_conn_table. + diff --git a/mblock/src/lib/benchmark_send.cc b/mblock/src/lib/benchmark_send.cc new file mode 100644 index 00000000..fe873a69 --- /dev/null +++ b/mblock/src/lib/benchmark_send.cc @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#include +#include + +int +main(int argc, char **argv) +{ + mb_runtime_sptr rt = mb_make_runtime(); + pmt_t result = PMT_NIL; + + long nmsgs = 1000000; + long batch_size = 100; + + pmt_t arg = pmt_list2(pmt_from_long(nmsgs), // # of messages to send through pipe + pmt_from_long(batch_size)); + + rt->run("top", "qa_bitset_top", arg, &result); + + if (!pmt_equal(PMT_T, result)){ + std::cerr << "benchmark_send: incorrect result"; + return 1; + } + + return 0; +} diff --git a/mblock/src/lib/mb_class_registry.cc b/mblock/src/lib/mb_class_registry.cc new file mode 100644 index 00000000..7ccee296 --- /dev/null +++ b/mblock/src/lib/mb_class_registry.cc @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + +static std::map s_registry; + +bool +mb_class_registry::register_maker(const std::string &name, mb_mblock_maker_t maker) +{ + s_registry[name] = maker; + return true; +} + +bool +mb_class_registry::lookup_maker(const std::string &name, mb_mblock_maker_t *maker) +{ + if (s_registry.count(name) == 0){ // not registered + *maker = (mb_mblock_maker_t) 0; + return false; + } + + *maker = s_registry[name]; + return true; +} diff --git a/mblock/src/lib/mb_connection.cc b/mblock/src/lib/mb_connection.cc new file mode 100644 index 00000000..7e3bb897 --- /dev/null +++ b/mblock/src/lib/mb_connection.cc @@ -0,0 +1,126 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +bool +mb_conn_table::lookup_conn_by_name(const std::string &component_name, + const std::string &port_name, + mb_conn_iter *itp, int *which_ep) +{ + mb_conn_iter end = d_connections.end(); + for (mb_conn_iter it = d_connections.begin(); it != end; ++it){ + + if (it->d_ep[0].component_name() == component_name + && it->d_ep[0].port_name() == port_name){ + *itp = it; + *which_ep = 0; + return true; + } + + if (it->d_ep[1].component_name() == component_name + && it->d_ep[1].port_name() == port_name){ + *itp = it; + *which_ep = 1; + return true; + } + } + + return false; +} + +bool +mb_conn_table::lookup_conn_by_port(const mb_port *port, + mb_conn_iter *itp, int *which_ep) +{ + mb_conn_iter end = d_connections.end(); + for (mb_conn_iter it = d_connections.begin(); it != end; ++it){ + if (it->d_ep[0].port().get() == port){ + *itp = it; + *which_ep = 0; + return true; + } + if (it->d_ep[1].port().get() == port){ + *itp = it; + *which_ep = 1; + return true; + } + } + + return false; +} + +void +mb_conn_table::create_conn(const mb_endpoint &ep0, const mb_endpoint &ep1) +{ + d_connections.push_back(mb_connection(ep0, ep1)); +} + +void +mb_conn_table::disconnect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2) +{ + mb_conn_iter it; + int which_ep; + + // look for comp_name1/port_name1 + bool found = lookup_conn_by_name(comp_name1, port_name1, &it, &which_ep); + + if (!found) // no error if not found + return; + + // FIXME if/when we do replicated ports, we may have one-to-many, + // or many-to-many bindings. For now, be paranoid + assert(it->d_ep[which_ep^1].component_name() == comp_name2); + assert(it->d_ep[which_ep^1].port_name() == port_name2); + + d_connections.erase(it); // Poof! +} + +void +mb_conn_table::disconnect_component(const std::string component_name) +{ + mb_conn_iter next; + mb_conn_iter end = d_connections.end(); + for (mb_conn_iter it = d_connections.begin(); it != end; it = next){ + if (it->d_ep[0].component_name() == component_name + || it->d_ep[1].component_name() == component_name) + next = d_connections.erase(it); // Poof! + else + next = ++it; + } +} + +void +mb_conn_table::disconnect_all() +{ + d_connections.clear(); // All gone! +} + +int +mb_conn_table::nconnections() const +{ + return d_connections.size(); +} diff --git a/mblock/src/lib/mb_connection.h b/mblock/src/lib/mb_connection.h new file mode 100644 index 00000000..2aa60405 --- /dev/null +++ b/mblock/src/lib/mb_connection.h @@ -0,0 +1,78 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 INCLUDED_MB_CONNECTION_H +#define INCLUDED_MB_CONNECTION_H + +#include +#include + +/*! + * \brief Representation of a connection + */ +struct mb_connection { + mb_endpoint d_ep[2]; + + mb_connection(const mb_endpoint &ep0, const mb_endpoint &ep1){ + d_ep[0] = ep0; + d_ep[1] = ep1; + } +}; + +typedef std::list::iterator mb_conn_iter; +typedef std::list::const_iterator mb_conn_const_iter; + +/*! + * \brief data structure that keeps track of connections + */ +class mb_conn_table { + std::list d_connections; + +public: + bool + lookup_conn_by_name(const std::string &component_name, + const std::string &port_name, + mb_conn_iter *it, int *which_ep); + + bool + lookup_conn_by_port(const mb_port *port, + mb_conn_iter *it, int *which_ep); + + void + create_conn(const mb_endpoint &ep0, const mb_endpoint &ep1); + + + void + disconnect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2); + + void + disconnect_component(const std::string component_name); + + void + disconnect_all(); + + int + nconnections() const; + +}; + +#endif /* INCLUDED_MB_CONNECTION_H */ diff --git a/mblock/src/lib/mb_endpoint.cc b/mblock/src/lib/mb_endpoint.cc new file mode 100644 index 00000000..80e05f50 --- /dev/null +++ b/mblock/src/lib/mb_endpoint.cc @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +bool +mb_endpoint::inside_of_relay_port_p() const +{ + return d_port->port_type() == mb_port::RELAY && d_component_name == "self"; +} + +pmt_t +mb_endpoint::incoming_message_set() const +{ + if (inside_of_relay_port_p()) // swap incoming and outgoing + return port()->outgoing_message_set(); + else + return port()->incoming_message_set(); +} + +pmt_t +mb_endpoint::outgoing_message_set() const +{ + if (inside_of_relay_port_p()) // swap incoming and outgoing + return port()->incoming_message_set(); + else + return port()->outgoing_message_set(); +} diff --git a/mblock/src/lib/mb_endpoint.h b/mblock/src/lib/mb_endpoint.h new file mode 100644 index 00000000..aae376a5 --- /dev/null +++ b/mblock/src/lib/mb_endpoint.h @@ -0,0 +1,58 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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 INCLUDED_MB_ENDPOINT_H +#define INCLUDED_MB_ENDPOINT_H + +#include +#include + +/*! + * \brief Endpoint specification for connection + */ +class mb_endpoint +{ + std::string d_component_name; + std::string d_port_name; + mb_port_sptr d_port; // the port object that this maps to + +public: + mb_endpoint(){} + + mb_endpoint(const std::string &component_name, + const std::string &port_name, + mb_port_sptr port) + : d_component_name(component_name), + d_port_name(port_name), + d_port(port) {} + + const std::string &component_name() const { return d_component_name; } + const std::string &port_name() const { return d_port_name; } + mb_port_sptr port() const { return d_port; } + + //! Does this endpoint represent the inside of a relay port + bool inside_of_relay_port_p() const; + + pmt_t incoming_message_set() const; + pmt_t outgoing_message_set() const; +}; + +#endif /* INCLUDED_MB_ENDPOINT_H */ diff --git a/mblock/src/lib/mb_exception.cc b/mblock/src/lib/mb_exception.cc new file mode 100644 index 00000000..81013184 --- /dev/null +++ b/mblock/src/lib/mb_exception.cc @@ -0,0 +1,106 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + + +mbe_base::mbe_base(mb_mblock *mb, const std::string &msg) + : logic_error(msg) // FIXME extract block class name and id and add to msg +{ +} + +mbe_not_implemented::mbe_not_implemented(mb_mblock *mb, const std::string &msg) + : mbe_base(mb, "Not implemented: " + msg) +{ +} + +mbe_no_such_class::mbe_no_such_class(mb_mblock *mb, const std::string &class_name) + : mbe_base(mb, "No such class: " + class_name) +{ +} + +mbe_no_such_component::mbe_no_such_component(mb_mblock *mb, const std::string &component_name) + : mbe_base(mb, "No such component: " + component_name) +{ +} + + +mbe_duplicate_component::mbe_duplicate_component(mb_mblock *mb, const std::string &component_name) + : mbe_base(mb, "Duplicate component: " + component_name) +{ +} + +mbe_no_such_port::mbe_no_such_port(mb_mblock *mb, const std::string &port_name) + : mbe_base(mb, "No such port: " + port_name) +{ +} + +mbe_duplicate_port::mbe_duplicate_port(mb_mblock *mb, const std::string &port_name) + : mbe_base(mb, "Duplicate port: " + port_name) +{ +} + +mbe_already_connected::mbe_already_connected(mb_mblock *mb, + const std::string &comp_name, + const std::string &port_name) + : mbe_base(mb, "Port already connected: " + mb_util::join_names(comp_name, port_name)) +{ +} + + + +mbe_incompatible_ports::mbe_incompatible_ports(mb_mblock *mb, + const std::string &comp1_name, + const std::string &port1_name, + const std::string &comp2_name, + const std::string &port2_name) + : mbe_base(mb, "Incompatible ports: " + + mb_util::join_names(comp1_name, port1_name) + " " + + mb_util::join_names(comp2_name, port2_name)) +{ +} + +mbe_invalid_port_type::mbe_invalid_port_type(mb_mblock *mb, + const std::string &comp_name, + const std::string &port_name) + : mbe_base(mb, "Invalid port type for connection: " + mb_util::join_names(comp_name, port_name)) +{ +} + +mbe_mblock_failed::mbe_mblock_failed(mb_mblock *mb, + const std::string &msg) + : mbe_base(mb, "Message block failed: " + msg) +{ +} + +mbe_terminate::mbe_terminate() +{ +} + +mbe_exit::mbe_exit() +{ +} diff --git a/mblock/src/lib/mb_gettid.cc b/mblock/src/lib/mb_gettid.cc new file mode 100644 index 00000000..9383d35a --- /dev/null +++ b/mblock/src/lib/mb_gettid.cc @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +#define NEED_STUB + +#if defined(HAVE_SYS_SYSCALL_H) && defined(HAVE_UNISTD_H) + +#include +#include + +#if defined(SYS_gettid) +#undef NEED_STUB + +int mb_gettid() +{ + return syscall(SYS_gettid); +} + +#endif +#endif + +#if defined(NEED_STUB) + +int +mb_gettid() +{ + return 0; +} + +#endif diff --git a/mblock/src/lib/mb_gettid.h b/mblock/src/lib/mb_gettid.h new file mode 100644 index 00000000..adbad126 --- /dev/null +++ b/mblock/src/lib/mb_gettid.h @@ -0,0 +1,26 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +/*! + * \brief Return Linux taskid, or 0 if not available + */ +int mb_gettid(); + diff --git a/mblock/src/lib/mb_mblock.cc b/mblock/src/lib/mb_mblock.cc new file mode 100644 index 00000000..b2f76362 --- /dev/null +++ b/mblock/src/lib/mb_mblock.cc @@ -0,0 +1,229 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + + +static pmt_t s_sys_port = pmt_intern("%sys-port"); +static pmt_t s_halt = pmt_intern("%halt"); + +mb_visitor::~mb_visitor() +{ + // nop base case for virtual destructor. +} + + +mb_mblock::mb_mblock(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg) + : d_impl(mb_mblock_impl_sptr( + new mb_mblock_impl(dynamic_cast(runtime), + this, instance_name))) +{ +} + +mb_mblock::~mb_mblock() +{ +} + + +void +mb_mblock::initial_transition() +{ + // default implementation does nothing +} + +void +mb_mblock::handle_message(mb_message_sptr msg) +{ + // default implementation does nothing +} + + +void +mb_mblock::main_loop() +{ + while (1){ + mb_message_sptr msg; + try { + while (1){ + msg = impl()->msgq().get_highest_pri_msg(); + + // check for %halt from %sys-port + if (pmt_eq(msg->port_id(), s_sys_port) && pmt_eq(msg->signal(), s_halt)) + exit(); + + handle_message(msg); + } + } + catch (pmt_exception e){ + std::cerr << "\nmb_mblock::main_loop: ignored pmt_exception: " + << e.what() + << "\nin mblock instance \"" << instance_name() + << "\" while handling message:" + << "\n port_id = " << msg->port_id() + << "\n signal = " << msg->signal() + << "\n data = " << msg->data() + << "\n metatdata = " << msg->metadata() << std::endl; + } + } +} + +//////////////////////////////////////////////////////////////////////// +// Forward other methods to implementation class // +//////////////////////////////////////////////////////////////////////// + +mb_port_sptr +mb_mblock::define_port(const std::string &port_name_string, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type) +{ + return d_impl->define_port(port_name_string, protocol_class_name, + conjugated, port_type); +} + +void +mb_mblock::define_component(const std::string &component_name, + const std::string &class_name, + pmt_t user_arg) + +{ + d_impl->define_component(component_name, class_name, user_arg); +} + +void +mb_mblock::connect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2) +{ + d_impl->connect(comp_name1, port_name1, + comp_name2, port_name2); +} + + +void +mb_mblock::disconnect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2) +{ + d_impl->disconnect(comp_name1, port_name1, + comp_name2, port_name2); +} + +void +mb_mblock::disconnect_component(const std::string &component_name) +{ + d_impl->disconnect_component(component_name); +} + +void +mb_mblock::disconnect_all() +{ + d_impl->disconnect_all(); +} + +int +mb_mblock::nconnections() const +{ + return d_impl->nconnections(); +} + +bool +mb_mblock::walk_tree(mb_visitor *visitor) +{ + return d_impl->walk_tree(visitor); +} + +std::string +mb_mblock::instance_name() const +{ + return d_impl->instance_name(); +} + +void +mb_mblock::set_instance_name(const std::string &name) +{ + d_impl->set_instance_name(name); +} + +std::string +mb_mblock::class_name() const +{ + return d_impl->class_name(); +} + +void +mb_mblock::set_class_name(const std::string &name) +{ + d_impl->set_class_name(name); +} + +mb_mblock * +mb_mblock::parent() const +{ + return d_impl->mblock_parent(); +} + +void +mb_mblock::exit() +{ + throw mbe_exit(); // adios... +} + +void +mb_mblock::shutdown_all(pmt_t result) +{ + d_impl->runtime()->request_shutdown(result); +} + +pmt_t +mb_mblock::schedule_one_shot_timeout(const mb_time &abs_time, pmt_t user_data) +{ + mb_msg_accepter_sptr accepter = impl()->make_accepter(s_sys_port); + return d_impl->runtime()->schedule_one_shot_timeout(abs_time, user_data, + accepter); +} + +pmt_t +mb_mblock::schedule_periodic_timeout(const mb_time &first_abs_time, + const mb_time &delta_time, + pmt_t user_data) +{ + mb_msg_accepter_sptr accepter = impl()->make_accepter(s_sys_port); + return d_impl->runtime()->schedule_periodic_timeout(first_abs_time, + delta_time, + user_data, + accepter); +} + +void +mb_mblock::cancel_timeout(pmt_t handle) +{ + d_impl->runtime()->cancel_timeout(handle); +} + diff --git a/mblock/src/lib/mb_mblock_impl.cc b/mblock/src/lib/mb_mblock_impl.cc new file mode 100644 index 00000000..e11b0089 --- /dev/null +++ b/mblock/src/lib/mb_mblock_impl.cc @@ -0,0 +1,327 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static pmt_t s_self = pmt_intern("self"); + +//////////////////////////////////////////////////////////////////////// + +bool +mb_mblock_impl::port_is_defined(const std::string &name) +{ + return d_port_map.count(name) != 0; +} + +bool +mb_mblock_impl::comp_is_defined(const std::string &name) +{ + return name == "self" || d_comp_map.count(name) != 0; +} + +//////////////////////////////////////////////////////////////////////// + +mb_mblock_impl::mb_mblock_impl(mb_runtime_base *runtime, mb_mblock *mb, + const std::string &instance_name) + : d_runtime(runtime), d_mb(mb), d_mb_parent(0), + d_instance_name(instance_name), d_class_name("mblock") +{ +} + +mb_mblock_impl::~mb_mblock_impl() +{ + d_mb = 0; // we don't own it +} + + +mb_port_sptr +mb_mblock_impl::define_port(const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type) +{ + mbi_runtime_lock l(this); + + if (port_is_defined(port_name)) + throw mbe_duplicate_port(d_mb, port_name); + + mb_port_sptr p = + mb_port_sptr(new mb_port_simple(d_mb, + port_name, protocol_class_name, + conjugated, port_type)); + d_port_map[port_name] = p; + return p; +} + +void +mb_mblock_impl::define_component(const std::string &name, + const std::string &class_name, + pmt_t user_arg) +{ + { + mbi_runtime_lock l(this); + + if (comp_is_defined(name)) // check for duplicate name + throw mbe_duplicate_component(d_mb, name); + } + + // We ask the runtime to create the component so that it can worry about + // mblock placement on a NUMA machine or on a distributed multicomputer + + mb_mblock_sptr component = + d_runtime->create_component(instance_name() + "/" + name, + class_name, user_arg); + { + mbi_runtime_lock l(this); + + component->d_impl->d_mb_parent = d_mb; // set component's parent link + d_comp_map[name] = component; + } +} + +void +mb_mblock_impl::connect(const std::string &comp_name1, + const std::string &port_name1, + const std::string &comp_name2, + const std::string &port_name2) +{ + mbi_runtime_lock l(this); + + mb_endpoint ep0 = check_and_resolve_endpoint(comp_name1, port_name1); + mb_endpoint ep1 = check_and_resolve_endpoint(comp_name2, port_name2); + + if (!endpoints_are_compatible(ep0, ep1)) + throw mbe_incompatible_ports(d_mb, + comp_name1, port_name1, + comp_name2, port_name2); + // FIXME more checks? + + d_conn_table.create_conn(ep0, ep1); +} + +void +mb_mblock_impl::disconnect(const std::string &comp_name1, + const std::string &port_name1, + const std::string &comp_name2, + const std::string &port_name2) +{ + mbi_runtime_lock l(this); + + d_conn_table.disconnect(comp_name1, port_name1, comp_name2, port_name2); + invalidate_all_port_caches(); +} + +void +mb_mblock_impl::disconnect_component(const std::string component_name) +{ + mbi_runtime_lock l(this); + + d_conn_table.disconnect_component(component_name); + invalidate_all_port_caches(); +} + +void +mb_mblock_impl::disconnect_all() +{ + mbi_runtime_lock l(this); + + d_conn_table.disconnect_all(); + invalidate_all_port_caches(); +} + +int +mb_mblock_impl::nconnections() +{ + mbi_runtime_lock l(this); + + return d_conn_table.nconnections(); +} + +//////////////////////////////////////////////////////////////////////// + +mb_endpoint +mb_mblock_impl::check_and_resolve_endpoint(const std::string &comp_name, + const std::string &port_name) +{ + mb_conn_iter it; + int which_ep; + mb_port_sptr port = resolve_port(comp_name, port_name); + + // Confirm that we're not trying to connect to the inside of one of + // our EXTERNAL ports. Connections that include "self" as the + // component name must be either INTERNAL or RELAY. + + if (comp_name == "self" && port->port_type() == mb_port::EXTERNAL) + throw mbe_invalid_port_type(d_mb, comp_name, port_name); + + // Is this endpoint already connected? + if (d_conn_table.lookup_conn_by_name(comp_name, port_name, &it, &which_ep)) + throw mbe_already_connected(d_mb, comp_name, port_name); + + return mb_endpoint(comp_name, port_name, port); +} + +mb_port_sptr +mb_mblock_impl::resolve_port(const std::string &comp_name, + const std::string &port_name) +{ + if (comp_name == "self"){ + // Look through our ports. + if (!port_is_defined(port_name)) + throw mbe_no_such_port(d_mb, mb_util::join_names("self", port_name)); + return d_port_map[port_name]; + } + else { + // Look through the specified child's ports. + if (!comp_is_defined(comp_name)) + throw mbe_no_such_component(d_mb, comp_name); + + mb_mblock_impl_sptr c_impl = d_comp_map[comp_name]->d_impl; // childs impl pointer + if (!c_impl->port_is_defined(port_name)) + throw mbe_no_such_port(d_mb, mb_util::join_names(comp_name, port_name)); + + mb_port_sptr c_port = c_impl->d_port_map[port_name]; + + if (c_port->port_type() == mb_port::INTERNAL) // can't "see" a child's internal ports + throw mbe_no_such_port(d_mb, mb_util::join_names(comp_name, port_name)); + + return c_port; + } +} + + + +bool +mb_mblock_impl::endpoints_are_compatible(const mb_endpoint &ep0, + const mb_endpoint &ep1) +{ + pmt_t p0_outgoing = ep0.outgoing_message_set(); + pmt_t p0_incoming = ep0.incoming_message_set(); + + pmt_t p1_outgoing = ep1.outgoing_message_set(); + pmt_t p1_incoming = ep1.incoming_message_set(); + + return (pmt_subsetp(p0_outgoing, p1_incoming) + && pmt_subsetp(p1_outgoing, p0_incoming)); +} + +bool +mb_mblock_impl::walk_tree(mb_visitor *visitor) +{ + if (!(*visitor)(d_mb)) + return false; + + mb_comp_map_t::iterator it; + for (it = d_comp_map.begin(); it != d_comp_map.end(); ++it) + if (!(it->second->walk_tree(visitor))) + return false; + + return true; +} + +mb_msg_accepter_sptr +mb_mblock_impl::make_accepter(pmt_t port_name) +{ + // FIXME this should probably use some kind of configurable factory + mb_msg_accepter *ma = + new mb_msg_accepter_smp(d_mb->shared_from_this(), port_name); + + return mb_msg_accepter_sptr(ma); +} + +bool +mb_mblock_impl::lookup_other_endpoint(const mb_port *port, mb_endpoint *ep) +{ + mb_conn_iter it; + int which_ep = 0; + + if (!d_conn_table.lookup_conn_by_port(port, &it, &which_ep)) + return false; + + *ep = it->d_ep[which_ep^1]; + return true; +} + +mb_mblock_sptr +mb_mblock_impl::component(const std::string &comp_name) +{ + if (comp_name == "self") + return d_mb->shared_from_this(); + + if (d_comp_map.count(comp_name) == 0) + return mb_mblock_sptr(); // null pointer + + return d_comp_map[comp_name]; +} + +void +mb_mblock_impl::set_instance_name(const std::string &name) +{ + d_instance_name = name; +} + +void +mb_mblock_impl::set_class_name(const std::string &name) +{ + d_class_name = name; +} + +/* + * This is the "Big Hammer" port cache invalidator. + * It invalidates _all_ of the port caches in the entire mblock tree. + * It's overkill, but was simple to code. + */ +void +mb_mblock_impl::invalidate_all_port_caches() +{ + class invalidator : public mb_visitor + { + public: + bool operator()(mb_mblock *mblock) + { + mb_mblock_impl_sptr impl = mblock->impl(); + mb_port_map_t::iterator it = impl->d_port_map.begin(); + mb_port_map_t::iterator end = impl->d_port_map.end(); + for (; it != end; ++it) + it->second->invalidate_cache(); + return true; + } + }; + + invalidator visitor; + + // Always true, except in early QA code + if (runtime()->top()) + runtime()->top()->walk_tree(&visitor); +} diff --git a/mblock/src/lib/mb_mblock_impl.h b/mblock/src/lib/mb_mblock_impl.h new file mode 100644 index 00000000..99145791 --- /dev/null +++ b/mblock/src/lib/mb_mblock_impl.h @@ -0,0 +1,226 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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 INCLUDED_MB_MBLOCK_IMPL_H +#define INCLUDED_MB_MBLOCK_IMPL_H + +#include +#include +#include +#include +#include +#include + + +typedef std::map mb_port_map_t; +typedef std::map mb_comp_map_t; + + +/*! + * \brief The private implementation details of the mblock system. + */ +class mb_mblock_impl : boost::noncopyable +{ + mb_runtime_base *d_runtime; // pointer to runtime + mb_mblock *d_mb; // pointer to our associated mblock + mb_mblock *d_mb_parent; // pointer to our parent + + std::string d_instance_name; // hierarchical name + std::string d_class_name; // name of this (derived) class + + mb_port_map_t d_port_map; // our ports + mb_comp_map_t d_comp_map; // our components + mb_conn_table d_conn_table; // our connections + + mb_msg_queue d_msgq; // incoming messages for us + +public: + mb_mblock_impl(mb_runtime_base *runtime, mb_mblock *mb, + const std::string &instance_name); + ~mb_mblock_impl(); + + /*! + * \brief Define a port. + * + * EXTERNAL and RELAY ports are part of our peer interface. + * INTERNAL ports are used to talk to sub-components. + * + * \param port_name The name of the port (must be unique within this mblock). + * \param protocol_class_name The name of the protocol class associated with + * this port. It must already be defined. + * \param conjugated Are the incoming and outgoing message sets swapped? + * \param port_type INTERNAL, EXTERNAL or RELAY. + */ + mb_port_sptr + define_port(const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type); + + /*! + * \brief Define a subcomponent by name. + * + * Called within the constructor to tell the system the + * names and identities of our sub-component mblocks. + * + * \param component_name The name of the sub-component (must be unique with this mblock). + * \param class_name The class of the instance that is to be created. + * \param user_arg The argument to pass to the constructor of the component. + */ + void + define_component(const std::string &component_name, + const std::string &class_name, + pmt_t user_arg); + + /*! + * \brief connect endpoint_1 to endpoint_2 + * + * \param comp_name1 component on one end of the connection + * \param port_name1 the name of the port on comp1 + * \param comp_name2 component on the other end of the connection + * \param port_name2 the name of the port on comp2 + * + * An endpoint is specified by the component's local name (given as + * component_name in the call to register_component) and the name of + * the port on that component. + * + * To connect an internal or relay port, use "self" as the component name. + */ + void + connect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2); + + /*! + * \brief disconnect endpoint_1 from endpoint_2 + * + * \param comp_name1 component on one end of the connection + * \param port_name1 the name of the port on comp1 + * \param comp_name2 component on the other end of the connection + * \param port_name2 the name of the port on comp2 + * + * An endpoint is specified by the component's local name (given as + * component_name in the call to register_component) and the name of + * the port on that component. + * + * To disconnect an internal or relay port, use "self" as the component name. + */ + void + disconnect(const std::string &comp_name1, const std::string &port_name1, + const std::string &comp_name2, const std::string &port_name2); + + /*! + * \brief disconnect all connections to specified component + * \param component_name component to disconnect + */ + void + disconnect_component(const std::string component_name); + + /*! + * \brief disconnect all connections to all components + */ + void + disconnect_all(); + + /*! + * \brief Return number of connections (QA mostly) + */ + int + nconnections(); + + bool + walk_tree(mb_visitor *visitor); + + mb_msg_accepter_sptr + make_accepter(pmt_t port_name); + + mb_msg_queue & + msgq() { return d_msgq; } + + //! Return instance name of this block + std::string instance_name() const { return d_instance_name; } + + //! Set the instance name of this block + void set_instance_name(const std::string &name); + + //! Return the class name of this block + std::string class_name() const { return d_class_name; } + + //! Set the class name + void set_class_name(const std::string &name); + + /*! + * \brief If bound, store endpoint from the other end of the connection. + * + * \param port [in] port the port that we're searching for. + * \param ep [out] the other end point from the matching connection. + * + * \returns true iff there's a matching connection. + */ + bool + lookup_other_endpoint(const mb_port *port, mb_endpoint *ep); + + + //! Return point to associated mblock + mb_mblock *mblock() const { return d_mb; } + + //! Return pointer to the parent of our mblock + mb_mblock *mblock_parent() const { return d_mb_parent; } + + //! Lookup a component by name + mb_mblock_sptr component(const std::string &comp_name); + + //! Return the runtime instance + mb_runtime_base *runtime() { return d_runtime; } + + //! Set the runtime instance + void set_runtime(mb_runtime_base *runtime) { d_runtime = runtime; } + + /* + * Our implementation methods + */ +private: + //bool port_is_defined(pmt_t name); + bool port_is_defined(const std::string &name); + //bool comp_is_defined(pmt_t name); + bool comp_is_defined(const std::string &name); + + mb_endpoint + check_and_resolve_endpoint(const std::string &comp_name, + const std::string &port_name); + + + mb_port_sptr + resolve_port(const std::string &comp_name, + const std::string &port_name); + + static bool + endpoints_are_compatible(const mb_endpoint &ep0, + const mb_endpoint &ep1); + + /*! + * \brief walk mblock tree and invalidate all port resolution caches. + * \internal + */ + void + invalidate_all_port_caches(); +}; + + +#endif /* INCLUDED_MB_MBLOCK_IMPL_H */ diff --git a/mblock/src/lib/mb_message.cc b/mblock/src/lib/mb_message.cc new file mode 100644 index 00000000..664e369f --- /dev/null +++ b/mblock/src/lib/mb_message.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + +static const int CACHE_LINE_SIZE = 64; // good guess +static const int MAX_MESSAGES = 1024; // KLUDGE max number of messages in sys + // 0 -> no limit +#if MB_MESSAGE_LOCAL_ALLOCATOR + +static pmt_pool +global_msg_pool(sizeof(mb_message), CACHE_LINE_SIZE, 16*1024, MAX_MESSAGES); + +void * +mb_message::operator new(size_t size) +{ + void *p = global_msg_pool.malloc(); + + // fprintf(stderr, "mb_message::new p = %p\n", p); + assert((reinterpret_cast(p) & (CACHE_LINE_SIZE - 1)) == 0); + return p; +} + +void +mb_message::operator delete(void *p, size_t size) +{ + global_msg_pool.free(p); +} + +#endif + + +mb_message_sptr +mb_make_message(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority) +{ + return mb_message_sptr(new mb_message(signal, data, metadata, priority)); +} + +mb_message::mb_message(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority) + : d_signal(signal), d_data(data), d_metadata(metadata), d_priority(priority), + d_port_id(PMT_NIL) +{ +} + +mb_message::~mb_message() +{ + // NOP +} + +std::ostream& +operator<<(std::ostream& os, const mb_message &msg) +{ + os << ""; + + return os; +} diff --git a/mblock/src/lib/mb_msg_accepter.cc b/mblock/src/lib/mb_msg_accepter.cc new file mode 100644 index 00000000..88b92394 --- /dev/null +++ b/mblock/src/lib/mb_msg_accepter.cc @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +mb_msg_accepter::~mb_msg_accepter() +{ + // nop +} diff --git a/mblock/src/lib/mb_msg_accepter_msgq.cc b/mblock/src/lib/mb_msg_accepter_msgq.cc new file mode 100644 index 00000000..fb97914e --- /dev/null +++ b/mblock/src/lib/mb_msg_accepter_msgq.cc @@ -0,0 +1,46 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + +pmt_t s_sys_port = pmt_intern("%sys-port"); + +mb_msg_accepter_msgq::mb_msg_accepter_msgq(mb_msg_queue *msgq) + : d_msgq(msgq) +{ +} + +mb_msg_accepter_msgq::~mb_msg_accepter_msgq() +{ +} + +void +mb_msg_accepter_msgq::operator()(pmt_t signal, pmt_t data, + pmt_t metadata, mb_pri_t priority) +{ + mb_message_sptr msg = mb_make_message(signal, data, metadata, priority); + msg->set_port_id(s_sys_port); + d_msgq->insert(msg); +} diff --git a/mblock/src/lib/mb_msg_accepter_msgq.h b/mblock/src/lib/mb_msg_accepter_msgq.h new file mode 100644 index 00000000..6c743bb4 --- /dev/null +++ b/mblock/src/lib/mb_msg_accepter_msgq.h @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_MSG_ACCEPTER_MSGQ_H +#define INCLUDED_MB_MSG_ACCEPTER_MSGQ_H + +#include +#include + +/*! + * \brief Concrete class that accepts messages and inserts them into a message queue. + */ +class mb_msg_accepter_msgq : public mb_msg_accepter { + mb_msg_queue *d_msgq; + +public: + mb_msg_accepter_msgq(mb_msg_queue *msgq); + ~mb_msg_accepter_msgq(); + void operator()(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority); +}; + +#endif /* INCLUDED_MB_MSG_ACCEPTER_MSGQ_H */ diff --git a/mblock/src/lib/mb_msg_accepter_smp.cc b/mblock/src/lib/mb_msg_accepter_smp.cc new file mode 100644 index 00000000..3b392a8c --- /dev/null +++ b/mblock/src/lib/mb_msg_accepter_smp.cc @@ -0,0 +1,48 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include + +mb_msg_accepter_smp::mb_msg_accepter_smp(mb_mblock_sptr mblock, pmt_t port_name) + : d_mb(mblock), d_port_name(port_name) +{ +} + +mb_msg_accepter_smp::~mb_msg_accepter_smp() +{ + // nop +} + +void +mb_msg_accepter_smp::operator()(pmt_t signal, pmt_t data, + pmt_t metadata, mb_pri_t priority) +{ + mb_message_sptr msg = mb_make_message(signal, data, metadata, priority); + msg->set_port_id(d_port_name); + d_mb->impl()->msgq().insert(msg); +} diff --git a/mblock/src/lib/mb_msg_accepter_smp.h b/mblock/src/lib/mb_msg_accepter_smp.h new file mode 100644 index 00000000..0e0cd7c6 --- /dev/null +++ b/mblock/src/lib/mb_msg_accepter_smp.h @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_MB_MSG_ACCEPTER_SMP_H +#define INCLUDED_MB_MSG_ACCEPTER_SMP_H + +#include + +/*! + * \brief Concrete message acceptor that does an mb_msg_queue insertion + */ +class mb_msg_accepter_smp : public mb_msg_accepter +{ + mb_mblock_sptr d_mb; + pmt_t d_port_name; + +public: + mb_msg_accepter_smp(mb_mblock_sptr mblock, pmt_t port_name); + ~mb_msg_accepter_smp(); + + void operator()(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority); +}; + + +#endif /* INCLUDED_MB_MSG_ACCEPTER_SMP_H */ diff --git a/mblock/src/lib/mb_msg_queue.cc b/mblock/src/lib/mb_msg_queue.cc new file mode 100644 index 00000000..c68c5fd6 --- /dev/null +++ b/mblock/src/lib/mb_msg_queue.cc @@ -0,0 +1,128 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + + +mb_msg_queue::mb_msg_queue() + : d_not_empty(&d_mutex) +{ +} + +mb_msg_queue::~mb_msg_queue() +{ +} + +void +mb_msg_queue::insert(mb_message_sptr msg) +{ + omni_mutex_lock l(d_mutex); + + mb_pri_t q = mb_pri_clamp(msg->priority()); + + if (d_queue[q].empty_p()){ + d_queue[q].tail = d_queue[q].head = msg; + msg->d_next.reset(); //msg->d_next = 0; + } + else { + d_queue[q].tail->d_next = msg; + d_queue[q].tail = msg; + msg->d_next.reset(); // msg->d_next = 0; + } + + // FIXME set bit in bitmap + + d_not_empty.signal(); +} + +/* + * Delete highest pri message from the queue and return it. + * Returns equivalent of zero pointer if queue is empty. + * + * Caller must be holding d_mutex + */ +mb_message_sptr +mb_msg_queue::get_highest_pri_msg_helper() +{ + // FIXME use bitmap and ffz to find best queue in O(1) + + for (mb_pri_t q = 0; q <= MB_PRI_WORST; q++){ + + if (!d_queue[q].empty_p()){ + mb_message_sptr msg = d_queue[q].head; + d_queue[q].head = msg->d_next; + if (d_queue[q].head == 0){ + d_queue[q].tail.reset(); // d_queue[q].tail = 0; + // FIXME clear bit in bitmap + } + + msg->d_next.reset(); // msg->d_next = 0; + return msg; + } + } + + return mb_message_sptr(); // eqv to a zero pointer +} + + +mb_message_sptr +mb_msg_queue::get_highest_pri_msg_nowait() +{ + omni_mutex_lock l(d_mutex); + + return get_highest_pri_msg_helper(); +} + +mb_message_sptr +mb_msg_queue::get_highest_pri_msg() +{ + omni_mutex_lock l(d_mutex); + + while (1){ + mb_message_sptr msg = get_highest_pri_msg_helper(); + if (msg) // Got one; return it + return msg; + + d_not_empty.wait(); // Wait for something + } +} + +mb_message_sptr +mb_msg_queue::get_highest_pri_msg_timedwait(const mb_time &abs_time) +{ + unsigned long secs = abs_time.d_secs; + unsigned long nsecs = abs_time.d_nsecs; + + omni_mutex_lock l(d_mutex); + + while (1){ + mb_message_sptr msg = get_highest_pri_msg_helper(); + if (msg) // Got one; return it + return msg; + + if (!d_not_empty.timedwait(secs, nsecs)) // timed out + return mb_message_sptr(); // eqv to zero pointer + } +} diff --git a/mblock/src/lib/mb_port.cc b/mblock/src/lib/mb_port.cc new file mode 100644 index 00000000..a13f49f2 --- /dev/null +++ b/mblock/src/lib/mb_port.cc @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +mb_port::mb_port(mb_mblock *mblock, + const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type) + : d_port_name(port_name), d_port_symbol(pmt_intern(port_name)), + d_conjugated(conjugated), d_port_type(port_type), + d_mblock(mblock) +{ + pmt_t pc = mb_protocol_class_lookup(pmt_intern(protocol_class_name)); + if (pmt_is_null(pc)){ + throw std::runtime_error("mb_port: unknown protocol class '" + + protocol_class_name + "'"); + } + d_protocol_class = pc; +} + +mb_port::~mb_port() +{ + // nop +} + +pmt_t +mb_port::incoming_message_set() const +{ + if (!conjugated()) + return mb_protocol_class_incoming(protocol_class()); + else // swap the sets + return mb_protocol_class_outgoing(protocol_class()); +} + +pmt_t +mb_port::outgoing_message_set() const +{ + if (!conjugated()) + return mb_protocol_class_outgoing(protocol_class()); + else // swap the sets + return mb_protocol_class_incoming(protocol_class()); +} diff --git a/mblock/src/lib/mb_port_simple.cc b/mblock/src/lib/mb_port_simple.cc new file mode 100644 index 00000000..1b4b35cb --- /dev/null +++ b/mblock/src/lib/mb_port_simple.cc @@ -0,0 +1,151 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + + +mb_port_simple::mb_port_simple(mb_mblock *mblock, + const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type) + : mb_port(mblock, port_name, protocol_class_name, conjugated, port_type), + d_cache_valid(false) +{ +} + +mb_port_simple::~mb_port_simple() +{ + // nop +} + +void +mb_port_simple::send(pmt_t signal, pmt_t data, pmt_t metadata, mb_pri_t priority) +{ + if (port_type() == mb_port::RELAY) // Can't send directly to a RELAY port + throw mbe_invalid_port_type(mblock(), mblock()->instance_name(), port_name()); + + mb_msg_accepter_sptr accepter = find_accepter(this); + if (accepter) + (*accepter)(signal, data, metadata, priority); +} + + +mb_msg_accepter_sptr +mb_port_simple::find_accepter(mb_port_simple *start) +{ + mb_port_simple *p = start; + mb_port_simple *pp = 0; + mb_mblock *context = 0; + mb_endpoint peer_ep; + mb_msg_accepter_sptr r; + + if (start->d_cache_valid) + return start->d_cached_accepter; + + mbi_runtime_lock l(p->mblock()); + + // Set up initial context. + + switch(p->port_type()){ + case mb_port::INTERNAL: // binding is in our name space + context = p->mblock(); + break; + + case mb_port::EXTERNAL: // binding is in parent's name space + context = p->mblock()->parent(); + if (!context) // can't be bound if there's no parent + return mb_msg_accepter_sptr(); // not bound + break; + + default: + throw std::logic_error("Can't happen: mb_port_simple::find_accepter [1]"); + } + + + traverse: + + if (!context->impl()->lookup_other_endpoint(p, &peer_ep)) + return mb_msg_accepter_sptr(); // not bound + + pp = dynamic_cast(peer_ep.port().get()); // peer port + assert(pp); + + switch (pp->port_type()){ + case mb_port::INTERNAL: // Terminate here. + case mb_port::EXTERNAL: + r = pp->make_accepter(); + + // cache the result + + start->d_cached_accepter = r; + start->d_cache_valid = true; + return r; + + case mb_port::RELAY: // Traverse to other side of relay port. + if (peer_ep.inside_of_relay_port_p()){ + // We're on inside of relay port, headed out. + p = pp; + context = p->mblock()->parent(); + + // Corner case: we're attempting to traverse a relay port on the border + // of the top block... + if (!context) + return mb_msg_accepter_sptr(); // not bound + + goto traverse; + } + else { + // We're on the outside of relay port, headed in. + p = pp; + context = p->mblock(); + goto traverse; + } + break; + + default: + throw std::logic_error("Can't happen: mb_port_simple::find_accepter [2]"); + } +} + + +mb_msg_accepter_sptr +mb_port_simple::make_accepter() +{ + return d_mblock->impl()->make_accepter(port_symbol()); +} + +void +mb_port_simple::invalidate_cache() +{ + d_cache_valid = false; + d_cached_accepter.reset(); +} diff --git a/mblock/src/lib/mb_port_simple.h b/mblock/src/lib/mb_port_simple.h new file mode 100644 index 00000000..87b7654b --- /dev/null +++ b/mblock/src/lib/mb_port_simple.h @@ -0,0 +1,72 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_PORT_SIMPLE_H +#define INCLUDED_MB_PORT_SIMPLE_H + +#include + +/*! + * \brief Concrete port realization + */ +class mb_port_simple : public mb_port +{ + bool d_cache_valid; + mb_msg_accepter_sptr d_cached_accepter; + +protected: + static mb_msg_accepter_sptr + find_accepter(mb_port_simple *start); + + mb_msg_accepter_sptr + make_accepter(); + +public: + mb_port_simple(mb_mblock *mblock, + const std::string &port_name, + const std::string &protocol_class_name, + bool conjugated, + mb_port::port_type_t port_type); + + ~mb_port_simple(); + + /*! + * \brief send a message + * + * \param signal the event name + * \param data optional data + * \param metadata optional metadata + * \param priority the urgency at which the message is sent + */ + void + send(pmt_t signal, + pmt_t data = PMT_NIL, + pmt_t metadata = PMT_NIL, + mb_pri_t priority = MB_PRI_DEFAULT); + + /* + * \brief Invalidate any cached peer resolutions + * \internal + */ + void invalidate_cache(); + +}; + +#endif /* INCLUDED_MB_PORT_SIMPLE_H */ diff --git a/mblock/src/lib/mb_protocol_class.cc b/mblock/src/lib/mb_protocol_class.cc new file mode 100644 index 00000000..f076909e --- /dev/null +++ b/mblock/src/lib/mb_protocol_class.cc @@ -0,0 +1,105 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +static pmt_t s_ALL_PROTOCOL_CLASSES = PMT_NIL; + +pmt_t +mb_make_protocol_class(pmt_t name, pmt_t incoming, pmt_t outgoing) +{ + // (protocol-class ) + + if (!pmt_is_symbol(name)) + throw pmt_wrong_type("mb_make_protocol_class: NAME must be symbol", name); + if (!(pmt_is_pair(incoming) || pmt_is_null(incoming))) + throw pmt_wrong_type("mb_make_protocol_class: INCOMING must be a list", name); + if (!(pmt_is_pair(outgoing) || pmt_is_null(outgoing))) + throw pmt_wrong_type("mb_make_protocol_class: OUTGOING must be a list", name); + + pmt_t t = pmt_cons(pmt_intern("protocol-class"), + pmt_cons(name, + pmt_cons(incoming, + pmt_cons(outgoing, PMT_NIL)))); + + // Remember this protocol class. + s_ALL_PROTOCOL_CLASSES = pmt_cons(t, s_ALL_PROTOCOL_CLASSES); + return t; +} + +pmt_t +mb_protocol_class_name(pmt_t pc) +{ + return pmt_nth(1, pc); +} + +pmt_t +mb_protocol_class_incoming(pmt_t pc) +{ + return pmt_nth(2, pc); +} + +pmt_t +mb_protocol_class_outgoing(pmt_t pc) +{ + return pmt_nth(3, pc); +} + +pmt_t +mb_protocol_class_lookup(pmt_t name) +{ + pmt_t lst = s_ALL_PROTOCOL_CLASSES; + + while (pmt_is_pair(lst)){ + if (pmt_eq(name, mb_protocol_class_name(pmt_car(lst)))) + return pmt_car(lst); + lst = pmt_cdr(lst); + } + + return PMT_NIL; +} + +mb_protocol_class_init::mb_protocol_class_init(const char *data, size_t len) +{ + std::stringbuf sb; + sb.str(std::string(data, len)); + + while (1){ + pmt_t obj = pmt_deserialize(sb); + + if (0){ + pmt_write(obj, std::cout); + std::cout << std::endl; + } + + if (pmt_is_eof_object(obj)) + return; + + mb_make_protocol_class(pmt_nth(0, obj), // protocol-class name + pmt_nth(1, obj), // list of incoming msg names + pmt_nth(2, obj)); // list of outgoing msg names + } +} diff --git a/mblock/src/lib/mb_runtime.cc b/mblock/src/lib/mb_runtime.cc new file mode 100644 index 00000000..57a05c41 --- /dev/null +++ b/mblock/src/lib/mb_runtime.cc @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +mb_runtime_sptr +mb_make_runtime() +{ + return mb_runtime_sptr(new mb_runtime_thread_per_block()); +} + +mb_runtime::~mb_runtime() +{ + // nop +} + diff --git a/mblock/src/lib/mb_runtime_base.cc b/mblock/src/lib/mb_runtime_base.cc new file mode 100644 index 00000000..1dea4d46 --- /dev/null +++ b/mblock/src/lib/mb_runtime_base.cc @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +/* + * Default nop implementations... + */ + +void +mb_runtime_base::request_shutdown(pmt_t result) +{ +} + +pmt_t +mb_runtime_base::schedule_one_shot_timeout(const mb_time &abs_time, + pmt_t user_data, + mb_msg_accepter_sptr accepter) +{ + return PMT_F; +} + +pmt_t +mb_runtime_base::schedule_periodic_timeout(const mb_time &first_abs_time, + const mb_time &delta_time, + pmt_t user_data, + mb_msg_accepter_sptr accepter) +{ + return PMT_F; +} + +void +mb_runtime_base::cancel_timeout(pmt_t handle) +{ +} + diff --git a/mblock/src/lib/mb_runtime_base.h b/mblock/src/lib/mb_runtime_base.h new file mode 100644 index 00000000..98b5f3e0 --- /dev/null +++ b/mblock/src/lib/mb_runtime_base.h @@ -0,0 +1,78 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_MB_RUNTIME_BASE_H +#define INCLUDED_MB_RUNTIME_BASE_H + +#include +#include +#include + +/* + * \brief This is the runtime class used by the implementation. + */ +class mb_runtime_base : public mb_runtime +{ + omni_mutex d_brl; // big runtime lock (avoid using this if possible...) + +protected: + mb_msg_accepter_sptr d_accepter; + +public: + + /*! + * \brief lock the big runtime lock + * \internal + */ + inline void lock() { d_brl.lock(); } + + /*! + * \brief unlock the big runtime lock + * \internal + */ + inline void unlock() { d_brl.unlock(); } + + virtual void request_shutdown(pmt_t result); + + virtual mb_mblock_sptr + create_component(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg) = 0; + + virtual pmt_t + schedule_one_shot_timeout(const mb_time &abs_time, pmt_t user_data, + mb_msg_accepter_sptr accepter); + + virtual pmt_t + schedule_periodic_timeout(const mb_time &first_abs_time, + const mb_time &delta_time, + pmt_t user_data, + mb_msg_accepter_sptr accepter); + virtual void + cancel_timeout(pmt_t handle); + + mb_msg_accepter_sptr + accepter() { return d_accepter; } + +}; + + +#endif /* INCLUDED_MB_RUNTIME_BASE_H */ diff --git a/mblock/src/lib/mb_runtime_nop.cc b/mblock/src/lib/mb_runtime_nop.cc new file mode 100644 index 00000000..603d5add --- /dev/null +++ b/mblock/src/lib/mb_runtime_nop.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + +mb_runtime_sptr +mb_make_runtime_nop() +{ + return mb_runtime_sptr(new mb_runtime_nop()); +} + + +mb_runtime_nop::mb_runtime_nop() +{ + // nop for now +} + +mb_runtime_nop::~mb_runtime_nop() +{ + // nop for now +} + + +bool +mb_runtime_nop::run(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg, pmt_t *result) +{ + class initial_visitor : public mb_visitor + { + public: + bool operator()(mb_mblock *mblock) + { + mblock->initial_transition(); + return true; + } + }; + + initial_visitor visitor; + + if (result) + *result = PMT_T; + + d_top = create_component(instance_name, class_name, user_arg); + d_top->walk_tree(&visitor); + + return true; +} + +mb_mblock_sptr +mb_runtime_nop::create_component(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg) +{ + mb_mblock_maker_t maker; + if (!mb_class_registry::lookup_maker(class_name, &maker)) + throw mbe_no_such_class(0, class_name + " (in " + instance_name + ")"); + + return maker(this, instance_name, user_arg); +} diff --git a/mblock/src/lib/mb_runtime_nop.h b/mblock/src/lib/mb_runtime_nop.h new file mode 100644 index 00000000..9d1f574d --- /dev/null +++ b/mblock/src/lib/mb_runtime_nop.h @@ -0,0 +1,52 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_MB_RUNTIME_NOP_H +#define INCLUDED_MB_RUNTIME_NOP_H + +#include + +/*! + * \brief Public constructor (factory) for mb_runtime_nop objects. + */ +mb_runtime_sptr mb_make_runtime_nop(); + +/*! + * \brief Concrete runtime that does nothing. Used only during early QA tests. + */ +class mb_runtime_nop : public mb_runtime_base +{ +public: + mb_runtime_nop(); + ~mb_runtime_nop(); + + bool run(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg, + pmt_t *result); + +protected: + mb_mblock_sptr + create_component(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg); +}; + +#endif /* INCLUDED_MB_RUNTIME_NOP_H */ diff --git a/mblock/src/lib/mb_runtime_thread_per_block.cc b/mblock/src/lib/mb_runtime_thread_per_block.cc new file mode 100644 index 00000000..ed292ee7 --- /dev/null +++ b/mblock/src/lib/mb_runtime_thread_per_block.cc @@ -0,0 +1,349 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static pmt_t s_halt = pmt_intern("%halt"); +static pmt_t s_sys_port = pmt_intern("%sys-port"); +static pmt_t s_shutdown = pmt_intern("%shutdown"); +static pmt_t s_request_shutdown = pmt_intern("%request-shutdown"); +static pmt_t s_worker_state_changed = pmt_intern("%worker-state-changed"); +static pmt_t s_timeout = pmt_intern("%timeout"); +static pmt_t s_request_timeout = pmt_intern("%request-timeout"); +static pmt_t s_cancel_timeout = pmt_intern("%cancel-timeout"); +static pmt_t s_send_halt = pmt_intern("send-halt"); +static pmt_t s_exit_now = pmt_intern("exit-now"); + +static void +send_sys_msg(mb_msg_queue &msgq, pmt_t signal, + pmt_t data = PMT_F, pmt_t metadata = PMT_F, + mb_pri_t priority = MB_PRI_BEST) +{ + mb_message_sptr msg = mb_make_message(signal, data, metadata, priority); + msg->set_port_id(s_sys_port); + msgq.insert(msg); +} + + +mb_runtime_thread_per_block::mb_runtime_thread_per_block() + : d_shutdown_in_progress(false), + d_shutdown_result(PMT_T) +{ + d_accepter = mb_msg_accepter_sptr(new mb_msg_accepter_msgq(&d_msgq)); +} + +mb_runtime_thread_per_block::~mb_runtime_thread_per_block() +{ + // FIXME iterate over workers and ensure that they are dead. + + if (!d_workers.empty()) + std::cerr << "\nmb_runtime_thread_per_block: dtor (# workers = " + << d_workers.size() << ")\n"; +} + +void +mb_runtime_thread_per_block::request_shutdown(pmt_t result) +{ + (*accepter())(s_request_shutdown, result, PMT_F, MB_PRI_BEST); +} + +bool +mb_runtime_thread_per_block::run(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg, pmt_t *result) +{ + if (result) // set it to something now, in case we throw + *result = PMT_F; + + // reset the shutdown state + d_shutdown_in_progress = false; + d_shutdown_result = PMT_T; + + assert(d_workers.empty()); + + while (!d_timer_queue.empty()) // ensure timer queue is empty + d_timer_queue.pop(); + + /* + * Create the top-level component, and recursively all of its + * subcomponents. + */ + d_top = create_component(instance_name, class_name, user_arg); + + try { + run_loop(); + } + catch (...){ + d_top.reset(); + throw; + } + + if (result) + *result = d_shutdown_result; + + d_top.reset(); + return true; +} + +void +mb_runtime_thread_per_block::run_loop() +{ + while (1){ + mb_message_sptr msg; + + if (d_timer_queue.empty()) // Any timeouts pending? + msg = d_msgq.get_highest_pri_msg(); // Nope. Block forever. + + else { + mb_timeout_sptr to = d_timer_queue.top(); // Yep. Get earliest timeout. + + // wait for a msg or the timeout... + msg = d_msgq.get_highest_pri_msg_timedwait(to->d_when); + + if (!msg){ // We timed out. + d_timer_queue.pop(); // Remove timeout from timer queue. + + // send the %timeout msg + (*to->d_accepter)(s_timeout, to->d_user_data, to->handle(), MB_PRI_BEST); + + if (to->d_is_periodic){ + to->d_when = to->d_when + to->d_delta; // update time of next firing + d_timer_queue.push(to); // push it back into the queue + } + continue; + } + } + + pmt_t signal = msg->signal(); + + if (pmt_eq(signal, s_worker_state_changed)){ // %worker-state-changed + omni_mutex_lock l1(d_workers_mutex); + reap_dead_workers(); + if (d_workers.empty()) // no work left to do... + return; + } + else if (pmt_eq(signal, s_request_shutdown)){ // %request-shutdown + if (!d_shutdown_in_progress){ + d_shutdown_in_progress = true; + d_shutdown_result = msg->data(); + + // schedule a timeout for ourselves... + schedule_one_shot_timeout(mb_time::time(0.100), s_send_halt, d_accepter); + send_all_sys_msg(s_shutdown); + } + } + else if (pmt_eq(signal, s_request_timeout)){ // %request-timeout + mb_timeout_sptr to = + boost::any_cast(pmt_any_ref(msg->data())); + d_timer_queue.push(to); + } + else if (pmt_eq(signal, s_cancel_timeout)){ // %cancel-timeout + d_timer_queue.cancel(msg->data()); + } + else if (pmt_eq(signal, s_timeout) + && pmt_eq(msg->data(), s_send_halt)){ // %timeout, send-halt + + // schedule another timeout for ourselves... + schedule_one_shot_timeout(mb_time::time(0.100), s_exit_now, d_accepter); + send_all_sys_msg(s_halt); + } + else if (pmt_eq(signal, s_timeout) + && pmt_eq(msg->data(), s_exit_now)){ // %timeout, exit-now + + // We only get here if we've sent all workers %shutdown followed + // by %halt, and one or more of them is still alive. They must + // be blocked in the kernel. FIXME We could add one more step: + // pthread_kill(...) but for now, we'll just ignore them... + return; + } + else { + std::cerr << "mb_runtime_thread_per_block: unhandled msg: " << msg << std::endl; + } + } +} + +void +mb_runtime_thread_per_block::reap_dead_workers() +{ + // Already holding mutex + // omni_mutex_lock l1(d_workers_mutex); + + for (worker_iter_t wi = d_workers.begin(); wi != d_workers.end(); ){ + bool is_dead; + + // We can't join while holding the worker mutex, since that would + // attempt to destroy the mutex we're holding (omnithread's join + // deletes the omni_thread object after the pthread_join + // completes) Instead, we lock just long enough to figure out if + // the worker is dead. + { + omni_mutex_lock l2((*wi)->d_mutex); + is_dead = (*wi)->d_state == mb_worker::TS_DEAD; + } + + if (is_dead){ + if (0) + std::cerr << "\nruntime: " + << "(" << (*wi)->id() << ") " + << (*wi)->d_mblock->instance_name() << " is TS_DEAD\n"; + void *ignore; + (*wi)->join(&ignore); + wi = d_workers.erase(wi); + continue; + } + ++wi; + } +} + +// +// Create the thread, then create the component in the thread. +// Return a pointer to the created mblock. +// +// Can be invoked from any thread +// +mb_mblock_sptr +mb_runtime_thread_per_block::create_component(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg) +{ + mb_mblock_maker_t maker; + if (!mb_class_registry::lookup_maker(class_name, &maker)) + throw mbe_no_such_class(0, class_name + " (in " + instance_name + ")"); + + // FIXME here's where we'd lookup NUMA placement requests & mblock + // priorities and communicate them to the worker we're creating... + + // Create the worker thread + mb_worker *w = + new mb_worker(this, maker, instance_name, user_arg); + + w->start_undetached(); // start it + + // Wait for it to reach TS_RUNNING or TS_DEAD + + bool is_dead; + mb_worker::cause_of_death_t why_dead; + { + omni_mutex_lock l(w->d_mutex); + while (!(w->d_state == mb_worker::TS_RUNNING + || w->d_state == mb_worker::TS_DEAD)) + w->d_state_cond.wait(); + + is_dead = w->d_state == mb_worker::TS_DEAD; + why_dead = w->d_why_dead; + } + + // If the worker failed to init (constructor or initial_transition + // raised an exception), reap the worker now and raise an exception. + + if (is_dead && why_dead != mb_worker::RIP_EXIT){ + + void *ignore; + w->join(&ignore); + + // FIXME with some work we ought to be able to propagate the + // exception from the worker. + throw mbe_mblock_failed(0, instance_name); + } + + assert(w->d_mblock); + + // Add w to the vector of workers, and return the mblock. + { + omni_mutex_lock l(d_workers_mutex); + d_workers.push_back(w); + } + + if (0) + std::cerr << "\nruntime: created " + << "(" << w->id() << ") " + << w->d_mblock->instance_name() << "\n"; + + return w->d_mblock; +} + +void +mb_runtime_thread_per_block::send_all_sys_msg(pmt_t signal, + pmt_t data, + pmt_t metadata, + mb_pri_t priority) +{ + omni_mutex_lock l1(d_workers_mutex); + + for (worker_iter_t wi = d_workers.begin(); wi != d_workers.end(); ++wi){ + send_sys_msg((*wi)->d_mblock->impl()->msgq(), + signal, data, metadata, priority); + } +} + +// +// Can be invoked from any thread. +// Sends a message to the runtime. +// +pmt_t +mb_runtime_thread_per_block::schedule_one_shot_timeout + (const mb_time &abs_time, + pmt_t user_data, + mb_msg_accepter_sptr accepter) +{ + mb_timeout_sptr to(new mb_timeout(abs_time, user_data, accepter)); + (*d_accepter)(s_request_timeout, pmt_make_any(to), PMT_F, MB_PRI_BEST); + return to->handle(); +} + +// +// Can be invoked from any thread. +// Sends a message to the runtime. +// +pmt_t +mb_runtime_thread_per_block::schedule_periodic_timeout + (const mb_time &first_abs_time, + const mb_time &delta_time, + pmt_t user_data, + mb_msg_accepter_sptr accepter) +{ + mb_timeout_sptr to(new mb_timeout(first_abs_time, delta_time, + user_data, accepter)); + (*d_accepter)(s_request_timeout, pmt_make_any(to), PMT_F, MB_PRI_BEST); + return to->handle(); +} + +// +// Can be invoked from any thread. +// Sends a message to the runtime. +// +void +mb_runtime_thread_per_block::cancel_timeout(pmt_t handle) +{ + (*d_accepter)(s_cancel_timeout, handle, PMT_F, MB_PRI_BEST); +} diff --git a/mblock/src/lib/mb_runtime_thread_per_block.h b/mblock/src/lib/mb_runtime_thread_per_block.h new file mode 100644 index 00000000..185ed32b --- /dev/null +++ b/mblock/src/lib/mb_runtime_thread_per_block.h @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_MB_RUNTIME_THREAD_PER_BLOCK_H +#define INCLUDED_MB_RUNTIME_THREAD_PER_BLOCK_H + +#include +#include +#include +#include + +/*! + * \brief Concrete runtime that uses a thread per mblock + * \internal + * + * These are all implementation details. + */ +class mb_runtime_thread_per_block : public mb_runtime_base +{ +public: + omni_mutex d_workers_mutex; // hold while manipulating d_workers + std::vector d_workers; + bool d_shutdown_in_progress; + pmt_t d_shutdown_result; + mb_msg_queue d_msgq; + mb_timer_queue d_timer_queue; + + typedef std::vector::iterator worker_iter_t; + + mb_runtime_thread_per_block(); + ~mb_runtime_thread_per_block(); + + bool run(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg, + pmt_t *result); + + void request_shutdown(pmt_t result); + +protected: + mb_mblock_sptr + create_component(const std::string &instance_name, + const std::string &class_name, + pmt_t user_arg); + + pmt_t + schedule_one_shot_timeout(const mb_time &abs_time, pmt_t user_data, + mb_msg_accepter_sptr accepter); + + pmt_t + schedule_periodic_timeout(const mb_time &first_abs_time, + const mb_time &delta_time, + pmt_t user_data, + mb_msg_accepter_sptr accepter); + void + cancel_timeout(pmt_t handle); + +private: + void reap_dead_workers(); + void run_loop(); + + void send_all_sys_msg(pmt_t signal, pmt_t data = PMT_F, + pmt_t metadata = PMT_F, + mb_pri_t priority = MB_PRI_BEST); +}; + +#endif /* INCLUDED_MB_RUNTIME_THREAD_PER_BLOCK_H */ diff --git a/mblock/src/lib/mb_timer_queue.cc b/mblock/src/lib/mb_timer_queue.cc new file mode 100644 index 00000000..1293e8a4 --- /dev/null +++ b/mblock/src/lib/mb_timer_queue.cc @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +static pmt_t +make_handle() +{ + static long counter = 0; + pmt_t n = pmt_from_long(counter++); + return pmt_list1(n); // guaranteed to be a unique object +} + +// one-shot constructor +mb_timeout::mb_timeout(const mb_time &abs_time, + pmt_t user_data, mb_msg_accepter_sptr accepter) + : d_when(abs_time), d_is_periodic(false), + d_user_data(user_data), d_handle(make_handle()), d_accepter(accepter) +{ +} + +// periodic constructor +mb_timeout::mb_timeout(const mb_time &first_abs_time, const mb_time &delta_time, + pmt_t user_data, mb_msg_accepter_sptr accepter) + : d_when(first_abs_time), d_delta(delta_time), d_is_periodic(true), + d_user_data(user_data), d_handle(make_handle()), d_accepter(accepter) +{ +} + +void +mb_timer_queue::cancel(pmt_t handle) +{ + container_type::iterator it; + + for (it = c.begin(); it != c.end();){ + if (pmt_equal((*it)->handle(), handle)) + it = c.erase(it); + else + ++it; + } + std::make_heap(c.begin(), c.end(), comp); +} diff --git a/mblock/src/lib/mb_timer_queue.h b/mblock/src/lib/mb_timer_queue.h new file mode 100644 index 00000000..e8b8e1b6 --- /dev/null +++ b/mblock/src/lib/mb_timer_queue.h @@ -0,0 +1,73 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_TIMER_QUEUE_H +#define INCLUDED_MB_TIMER_QUEUE_H + +#include +#include +#include +#include +#include + +class mb_timeout { +public: + mb_time d_when; // absolute time to fire timeout + mb_time d_delta; // if periodic, delta_t to next timeout + bool d_is_periodic; // true iff this is a periodic timeout + pmt_t d_user_data; // data from %timeout msg + pmt_t d_handle; // handle for cancellation + mb_msg_accepter_sptr d_accepter; // where to send the message + + // one-shot constructor + mb_timeout(const mb_time &abs_time, + pmt_t user_data, mb_msg_accepter_sptr accepter); + + // periodic constructor + mb_timeout(const mb_time &first_abs_time, const mb_time &delta_time, + pmt_t user_data, mb_msg_accepter_sptr accepter); + + pmt_t handle() const { return d_handle; } +}; + +typedef boost::shared_ptr mb_timeout_sptr; + + +//! Sort criterion for priority_queue +class timeout_later +{ +public: + bool operator() (const mb_timeout_sptr t1, const mb_timeout_sptr t2) + { + return t1->d_when > t2->d_when; + } +}; + + +class mb_timer_queue : public std::priority_queue, + timeout_later> +{ +public: + void cancel(pmt_t handle); +}; + +#endif /* INCLUDED_MB_TIMER_QUEUE_H */ diff --git a/mblock/src/lib/mb_util.cc b/mblock/src/lib/mb_util.cc new file mode 100644 index 00000000..60a0e44f --- /dev/null +++ b/mblock/src/lib/mb_util.cc @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + + +std::string +mb_util::join_names(const std::string &comp_name, + const std::string &port_name) +{ + return comp_name + ":" + port_name; +} diff --git a/mblock/src/lib/mb_util.h b/mblock/src/lib/mb_util.h new file mode 100644 index 00000000..fe420d6e --- /dev/null +++ b/mblock/src/lib/mb_util.h @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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 INCLUDED_MB_UTIL_H +#define INCLUDED_MB_UTIL_H + +#include + +class mb_util +{ +public: + static std::string + join_names(const std::string &comp_name, + const std::string &port_name); +}; + +#endif /* INCLUDED_MB_UTIL_H */ diff --git a/mblock/src/lib/mb_worker.cc b/mblock/src/lib/mb_worker.cc new file mode 100644 index 00000000..3b984875 --- /dev/null +++ b/mblock/src/lib/mb_worker.cc @@ -0,0 +1,179 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_SCHED_H +#include +#endif + +#define VERBOSE 0 // define to 0 or 1 + + +static pmt_t s_worker_state_changed = pmt_intern("%worker-state-changed"); + + +mb_worker::mb_worker(mb_runtime_thread_per_block *runtime, + mb_mblock_maker_t maker, + const std::string &instance_name, + pmt_t user_arg) + : omni_thread((void *) 0, PRIORITY_NORMAL), + d_runtime(runtime), d_maker(maker), + d_instance_name(instance_name), d_user_arg(user_arg), + d_state_cond(&d_mutex), d_state(TS_UNINITIALIZED), + d_why_dead(RIP_NOT_DEAD_YET) +{ +} + +#if 0 +mb_worker::~mb_worker() +{ +} +#endif + +#ifdef HAVE_SCHED_SETAFFINITY +static void +set_affinity(const std::string &instance_name, const std::string &class_name) +{ + //static int counter = 0; + cpu_set_t mask; + CPU_ZERO(&mask); + + if (0){ + + //CPU_SET(counter & 0x1, &mask); + //counter++; + CPU_SET(0, &mask); + + int r = sched_setaffinity(mb_gettid(), sizeof(mask), &mask); + if (r == -1) + perror("sched_setaffinity"); + } +} +#else +static void +set_affinity(const std::string &instance_name, const std::string &class_name) +{ +} +#endif + +void +mb_worker::set_state(worker_state_t state) +{ + { + omni_mutex_lock l2(d_mutex); + + d_state = state; // update our state + d_state_cond.broadcast(); // Notify everybody who cares... + } + + // send msg to runtime, telling it something changed. + (*d_runtime->accepter())(s_worker_state_changed, PMT_F, PMT_F, MB_PRI_BEST); +} + +void * +mb_worker::run_undetached(void *ignored) +{ + // FIXME add pthread_sigmask stuff + + //set_affinity(d_instance_name, d_class_name); + set_affinity(d_instance_name, ""); + + try { + worker_thread_top_level(); + d_why_dead = RIP_EXIT; + } + catch (mbe_terminate){ + d_why_dead = RIP_TERMINATE; + } + catch (mbe_exit){ + d_why_dead = RIP_EXIT; + } + catch (std::logic_error e){ + if (d_why_dead == RIP_NOT_DEAD_YET) + d_why_dead = RIP_UNHANDLED_EXCEPTION; + + std::cerr << "\nmb_worker::run_undetached: unhandled exception:\n"; + std::cerr << " " << e.what() << std::endl; + } + catch (...){ + if (d_why_dead == RIP_NOT_DEAD_YET) + d_why_dead = RIP_UNHANDLED_EXCEPTION; + } + + if (VERBOSE) + std::cerr << "\nrun_undetached: about to return, d_why_dead = " + << d_why_dead << std::endl; + + set_state(TS_DEAD); + return 0; +} + +void +mb_worker::worker_thread_top_level() +{ + if (VERBOSE) + std::cerr << "worker_thread_top_level (enter):" << std::endl + << " instance_name: " << d_instance_name << std::endl + << " omnithread id: " << id() << std::endl + << " gettid: " << mb_gettid() << std::endl + << " getpid: " << getpid() << std::endl; + + cause_of_death_t pending_cause_of_death = RIP_NOT_DEAD_YET; + + try { + pending_cause_of_death = RIP_CTOR_EXCEPTION; + d_mblock = d_maker(d_runtime, d_instance_name, d_user_arg); + + if (VERBOSE) + std::cerr << "worker_thread_top_level (post-construction):" << std::endl + << " instance_name: " << d_instance_name << std::endl; + + pending_cause_of_death = RIP_INIT_EXCEPTION; + d_mblock->initial_transition(); + + if (VERBOSE) + std::cerr << "worker_thread_top_level (post-initial-transition):" << std::endl + << " instance_name: " << d_instance_name << std::endl; + + set_state(TS_RUNNING); + + pending_cause_of_death = RIP_UNHANDLED_EXCEPTION; + d_mblock->main_loop(); + } + catch (...){ + d_why_dead = pending_cause_of_death; + throw; + } + + if (VERBOSE) + std::cerr << "worker_thread_top_level (exit):" << std::endl + << " instance_name: " << d_instance_name << std::endl; +} diff --git a/mblock/src/lib/mb_worker.h b/mblock/src/lib/mb_worker.h new file mode 100644 index 00000000..59d12545 --- /dev/null +++ b/mblock/src/lib/mb_worker.h @@ -0,0 +1,106 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MB_WORKER_H +#define INCLUDED_MB_WORKER_H + +#include +#include +#include + + +class mb_worker; +//typedef boost::shared_ptr mb_worker_sptr; + +class mb_runtime_thread_per_block; + +/*! + * \brief Worker thread for thread_per_block runtime + * \internal + */ +class mb_worker : public omni_thread +{ +public: + //! worker thread states + enum worker_state_t { + TS_UNINITIALIZED, // new, uninitialized + TS_RUNNING, // normal steady-state condition. + TS_DEAD // thread is dead + }; + + //! why we're dead + enum cause_of_death_t { + RIP_NOT_DEAD_YET, // not dead + RIP_EXIT, // normal exit + RIP_TERMINATE, // caught terminate exception + RIP_CTOR_EXCEPTION, // constructor raised an exception + RIP_INIT_EXCEPTION, // initial_transition rasised an exception + RIP_UNHANDLED_EXCEPTION // somebody (most likely handle_message) raised an exception + }; + + /* + * Args used by new thread to create mb_mblock + */ + mb_runtime_thread_per_block *d_runtime; + mb_mblock_maker_t d_maker; + std::string d_instance_name; + pmt_t d_user_arg; + + mb_mblock_sptr d_mblock; //< holds pointer to created mblock + + /*! + * \brief General mutex for all these fields. + * + * They are accessed by both the main runtime thread and the newly + * created thread that runs the mblock's main loop. + */ + omni_mutex d_mutex; + omni_condition d_state_cond; //< state change notifications + worker_state_t d_state; + cause_of_death_t d_why_dead; + + mb_worker(mb_runtime_thread_per_block *runtime, + mb_mblock_maker_t maker, + const std::string &instance_name, + pmt_t user_arg); + + // ~mb_worker(); + + + /*! + * \brief This code runs as the top-level of the new thread + */ + void worker_thread_top_level(); + + /*! + * \brief Invokes the top-level of the new thread (name kind of sucks) + */ + void *run_undetached(void *arg); + +private: + // Neither d_mutex nor runtime->d_mutex may be held while calling this. + // It locks and unlocks them itself. + void set_state(worker_state_t state); +}; + + + +#endif /* INCLUDED_MB_WORKER_H */ diff --git a/mblock/src/lib/mbi_runtime_lock.h b/mblock/src/lib/mbi_runtime_lock.h new file mode 100644 index 00000000..020cd733 --- /dev/null +++ b/mblock/src/lib/mbi_runtime_lock.h @@ -0,0 +1,61 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_MBI_RUNTIME_LOCK_H +#define INCLUDED_MBI_RUNTIME_LOCK_H + +#include +#include +#include + +/*! + * \brief acquire and release big runtime lock + * + * As an alternative to: + * { + * rt->lock(); + * ..... + * rt->unlock(); + * } + * + * you can use a single instance of the mbi_runtime_lock class: + * + * { + * mbi_runtime_lock l(rt); + * .... + * } + * + * This has the advantage that rt->unlock() will be called automatically + * when an exception is thrown. + */ + +class mbi_runtime_lock : boost::noncopyable { + mb_runtime_base *d_rt; +public: + mbi_runtime_lock(mb_runtime_base *rt) : d_rt(rt) { d_rt->lock(); } + mbi_runtime_lock(mb_mblock_impl *mi) : d_rt(mi->runtime()) { d_rt->lock(); } + mbi_runtime_lock(mb_mblock *mb) : d_rt(mb->impl()->runtime()) { d_rt->lock(); } + ~mbi_runtime_lock(void) { d_rt->unlock(); } + +}; + +#endif /* INCLUDED_MBI_RUNTIME_LOCK_H */ + diff --git a/mblock/src/lib/qa_bitset.cc b/mblock/src/lib/qa_bitset.cc new file mode 100644 index 00000000..0ed78d9f --- /dev/null +++ b/mblock/src/lib/qa_bitset.cc @@ -0,0 +1,494 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +static pmt_t s_in = pmt_intern("in"); +static pmt_t s_out = pmt_intern("out"); +static pmt_t s_data = pmt_intern("data"); +static pmt_t s_start = pmt_intern("start"); +static pmt_t s_send_batch = pmt_intern("send-batch"); +static pmt_t s_long0 = pmt_from_long(0); + +static std::string +str(long x) +{ + std::ostringstream s; + s << x; + return s.str(); +} + +/*! + * \brief mblock used for QA. + * + * Messages arriving on "in" consist of a pair containing a (long) + * message number in the car, and a (long) bitmap in the cdr. For + * each message received on "in", a new message is sent on "out". The + * new message is the same format as the input, but the bitmap in + * the cdr has a "1" or'd into it that corresponds to the bit number + * specified in the constructor. + * + * The bitmap can be used by the ultimate receiver to confirm + * traversal of a set of blocks, if the blocks are assigned unique bit + * numbers. + */ +class qa_bitset : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + int d_bitno; + +public: + qa_bitset(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void handle_message(mb_message_sptr msg); +}; + +qa_bitset::qa_bitset(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_bitno = pmt_to_long(user_arg); // The bit we are to set + + d_in = define_port("in", "qa-bitset", false, mb_port::EXTERNAL); + d_out = define_port("out", "qa-bitset", true, mb_port::EXTERNAL); +} + +void +qa_bitset::handle_message(mb_message_sptr msg) +{ + if (pmt_eq(msg->port_id(), s_in) && pmt_eq(msg->signal(), s_data)){ + d_out->send(s_data, + pmt_cons(pmt_car(msg->data()), + pmt_from_long((1L << d_bitno) | pmt_to_long(pmt_cdr(msg->data()))))); + } +} + +REGISTER_MBLOCK_CLASS(qa_bitset); + +// ------------------------------------------------------------------------ + +/*! + * \brief mblock used for QA. Compose two qa_bitset mblocks. + */ +class qa_bitset2 : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + +public: + qa_bitset2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); +}; + +qa_bitset2::qa_bitset2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + long bitno = pmt_to_long(user_arg); // The bit we are to set + + d_in = define_port("in", "qa-bitset", false, mb_port::RELAY); + d_out = define_port("out", "qa-bitset", true, mb_port::RELAY); + + define_component("bs0", "qa_bitset", pmt_from_long(bitno)); + define_component("bs1", "qa_bitset", pmt_from_long(bitno + 1)); + connect("self", "in", "bs0", "in"); + connect("bs0", "out", "bs1", "in"); + connect("bs1", "out", "self", "out"); +} + +REGISTER_MBLOCK_CLASS(qa_bitset2); + +// ------------------------------------------------------------------------ + +/*! + * \brief mblock used for QA. Compose two qa_bitset2 mblocks. + */ +class qa_bitset4 : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + +public: + qa_bitset4(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); +}; + +qa_bitset4::qa_bitset4(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + long bitno = pmt_to_long(user_arg); // The bit we are to set + + d_in = define_port("in", "qa-bitset", false, mb_port::RELAY); + d_out = define_port("out", "qa-bitset", true, mb_port::RELAY); + + define_component("bs0", "qa_bitset2", pmt_from_long(bitno)); + define_component("bs1", "qa_bitset2", pmt_from_long(bitno + 2)); + connect("self", "in", "bs0", "in"); + connect("bs0", "out", "bs1", "in"); + connect("bs1", "out", "self", "out"); +} + +REGISTER_MBLOCK_CLASS(qa_bitset4); + +// ------------------------------------------------------------------------ + +/*! + * \brief mblock used for QA. Compose two qa_bitset4 mblocks. + */ +class qa_bitset8 : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + +public: + qa_bitset8(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); +}; + +qa_bitset8::qa_bitset8(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + long bitno = pmt_to_long(user_arg); // The bit we are to set + + d_in = define_port("in", "qa-bitset", false, mb_port::RELAY); + d_out = define_port("out", "qa-bitset", true, mb_port::RELAY); + + define_component("bs0", "qa_bitset4", pmt_from_long(bitno)); + define_component("bs1", "qa_bitset4", pmt_from_long(bitno + 4)); + connect("self", "in", "bs0", "in"); + connect("bs0", "out", "bs1", "in"); + connect("bs1", "out", "self", "out"); +} + +REGISTER_MBLOCK_CLASS(qa_bitset8); + +// ------------------------------------------------------------------------ + +/*! + * \brief mblock used for QA. Compose two qa_bitset8 mblocks. + */ +class qa_bitset16 : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + +public: + qa_bitset16(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); +}; + +qa_bitset16::qa_bitset16(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + long bitno = pmt_to_long(user_arg); // The bit we are to set + + d_in = define_port("in", "qa-bitset", false, mb_port::RELAY); + d_out = define_port("out", "qa-bitset", true, mb_port::RELAY); + + define_component("bs0", "qa_bitset8", pmt_from_long(bitno)); + define_component("bs1", "qa_bitset8", pmt_from_long(bitno + 8)); + connect("self", "in", "bs0", "in"); + connect("bs0", "out", "bs1", "in"); + connect("bs1", "out", "self", "out"); +} + +REGISTER_MBLOCK_CLASS(qa_bitset16); + +// ------------------------------------------------------------------------ + +/*! + * \brief mblock used for QA. Compose two qa_bitset16 mblocks. + */ +class qa_bitset32 : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + +public: + qa_bitset32(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); +}; + +qa_bitset32::qa_bitset32(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + long bitno = pmt_to_long(user_arg); // The bit we are to set + + d_in = define_port("in", "qa-bitset", false, mb_port::RELAY); + d_out = define_port("out", "qa-bitset", true, mb_port::RELAY); + + define_component("bs0", "qa_bitset16", pmt_from_long(bitno)); + define_component("bs1", "qa_bitset16", pmt_from_long(bitno + 16)); + connect("self", "in", "bs0", "in"); + connect("bs0", "out", "bs1", "in"); + connect("bs1", "out", "self", "out"); +} + +REGISTER_MBLOCK_CLASS(qa_bitset32); + +// ------------------------------------------------------------------------ + +class qa_bitset_src : public mb_mblock +{ + mb_port_sptr d_cs_top; + mb_port_sptr d_cs; + + mb_port_sptr d_out; + + long d_msg_number; // starting message number + long d_nmsgs_to_send; // # of messages to send + long d_batch_size; // # of messages to send per batch + +public: + qa_bitset_src(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void handle_message(mb_message_sptr msg); + +protected: + void send_one(); + void send_batch(); +}; + +qa_bitset_src::qa_bitset_src(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_msg_number = pmt_to_long(pmt_nth(0, user_arg)); + d_nmsgs_to_send = pmt_to_long(pmt_nth(1, user_arg)); + d_batch_size = pmt_to_long(pmt_nth(2, user_arg)); + + d_cs_top = define_port("cs_top", "qa-bitset-cs", true, mb_port::EXTERNAL); + d_cs = define_port("cs", "qa-bitset-cs", true, mb_port::EXTERNAL); + + d_out = define_port("out", "qa-bitset", true, mb_port::EXTERNAL); +} + +void +qa_bitset_src::handle_message(mb_message_sptr msg) +{ + if ((pmt_eq(msg->port_id(), d_cs_top->port_symbol()) + || pmt_eq(msg->port_id(), d_cs->port_symbol())) + && pmt_eq(msg->signal(), s_send_batch)){ + send_batch(); + } +} + +void +qa_bitset_src::send_batch() +{ + for (int i = 0; i < d_batch_size; i++) + send_one(); +} + +void +qa_bitset_src::send_one() +{ + if (d_nmsgs_to_send > 0){ + pmt_t msg_number = pmt_from_long(d_msg_number++); + d_out->send(s_data, pmt_cons(msg_number, s_long0)); + } + if (--d_nmsgs_to_send <= 0) + exit(); +} + +REGISTER_MBLOCK_CLASS(qa_bitset_src); + +// ------------------------------------------------------------------------ + +class qa_bitset_sink : public mb_mblock +{ + // Maximum number of messages we can track + static const size_t MAX_MSGS = 1 * 1024 * 1024; + + mb_port_sptr d_cs0; + mb_port_sptr d_cs1; + mb_port_sptr d_cs2; + mb_port_sptr d_cs3; + + mb_port_sptr d_in0; + mb_port_sptr d_in1; + mb_port_sptr d_in2; + mb_port_sptr d_in3; + + long d_nmsgs_to_recv; // # of messages to receive + long d_batch_size; // # of messages to receive per batch + uint32_t d_expected_mask; + + std::bitset d_bitset; + long d_nrecvd; + +public: + qa_bitset_sink(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void handle_message(mb_message_sptr msg); + +protected: + void receive_one(mb_message_sptr msg); +}; + +qa_bitset_sink::qa_bitset_sink(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg), + d_nrecvd(0) +{ + d_nmsgs_to_recv = pmt_to_long(pmt_nth(0, user_arg)); + d_batch_size = pmt_to_long(pmt_nth(1, user_arg)); + d_expected_mask = pmt_to_long(pmt_nth(2, user_arg)); + + if (d_nmsgs_to_recv > (long) MAX_MSGS) + throw std::out_of_range("qa_bitset_sink: nmsgs_to_recv is too big"); + + if (d_batch_size < 1) + throw std::out_of_range("qa_bitset_sink: batch_size must be >= 1"); + + d_cs0 = define_port("cs0", "qa-bitset-cs", true, mb_port::EXTERNAL); + d_cs1 = define_port("cs1", "qa-bitset-cs", true, mb_port::EXTERNAL); + d_cs2 = define_port("cs2", "qa-bitset-cs", true, mb_port::EXTERNAL); + d_cs3 = define_port("cs3", "qa-bitset-cs", true, mb_port::EXTERNAL); + + d_in0 = define_port("in0", "qa-bitset", false, mb_port::EXTERNAL); + d_in1 = define_port("in1", "qa-bitset", false, mb_port::EXTERNAL); + d_in2 = define_port("in2", "qa-bitset", false, mb_port::EXTERNAL); + d_in3 = define_port("in3", "qa-bitset", false, mb_port::EXTERNAL); +} + +void +qa_bitset_sink::handle_message(mb_message_sptr msg) +{ + if ((pmt_eq(msg->port_id(), d_in0->port_symbol()) + || pmt_eq(msg->port_id(), d_in1->port_symbol()) + || pmt_eq(msg->port_id(), d_in2->port_symbol()) + || pmt_eq(msg->port_id(), d_in3->port_symbol())) + && pmt_eq(msg->signal(), s_data)){ + + receive_one(msg); + } +} + +void +qa_bitset_sink::receive_one(mb_message_sptr msg) +{ + long msg_number = pmt_to_long(pmt_car(msg->data())); + uint32_t mask = pmt_to_long(pmt_cdr(msg->data())); + + // std::cout << msg->data() << std::endl; + + d_nrecvd++; + if (d_nrecvd % d_batch_size == d_batch_size - 1){ + d_cs0->send(s_send_batch); + d_cs1->send(s_send_batch); + d_cs2->send(s_send_batch); + d_cs3->send(s_send_batch); + } + + if (msg_number >= d_nmsgs_to_recv){ + std::cerr << "qa_bitset_sink::receive_one: msg_number too big (" + << msg_number << ")\n"; + shutdown_all(PMT_F); + return; + } + if (mask != d_expected_mask){ + fprintf(stderr, + "qa_bitset_sink::receive_one: Wrong mask. Expected 0x%08x, got 0x%08x\n", + d_expected_mask, mask); + shutdown_all(PMT_F); + return; + } + + if (d_bitset.test((size_t) msg_number)){ + std::cerr << "qa_bitset_sink::receive_one: duplicate msg_number (" + << msg_number << ")\n"; + shutdown_all(PMT_F); + return; + } + + d_bitset.set((size_t) msg_number); + if (d_nrecvd == d_nmsgs_to_recv) + shutdown_all(PMT_T); // we're done! +} + +REGISTER_MBLOCK_CLASS(qa_bitset_sink); + +// ------------------------------------------------------------------------ + +class qa_bitset_top : public mb_mblock +{ + static const int NPIPES = 4; + + std::vector d_cs; + + long d_nmsgs; // # of messages to send + long d_batch_size; // # of messages to receive per batch + +public: + qa_bitset_top(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void initial_transition(); +}; + +qa_bitset_top::qa_bitset_top(mb_runtime *runtime, + const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_nmsgs = pmt_to_long(pmt_nth(0, user_arg)); + d_nmsgs = (d_nmsgs / NPIPES) * NPIPES; + d_batch_size = pmt_to_long(pmt_nth(1, user_arg)); + + /* + * We build NPIPES sources which feed NPIPES pipelines, each of which + * consists of 8-mblocks. All pipelines feed into a single sink + * which keeps track the results. + */ + for (int i = 0; i < NPIPES; i++){ + d_cs.push_back(define_port("cs"+str(i), "qa-bitset-cs", false, mb_port::INTERNAL)); + + // sources of test messages + define_component("src"+str(i), "qa_bitset_src", + pmt_list3(pmt_from_long(i * d_nmsgs/NPIPES), + pmt_from_long(d_nmsgs/NPIPES), + pmt_from_long(d_batch_size))); + + // 8-mblock processing pipelines + define_component("pipeline"+str(i), "qa_bitset8", pmt_from_long(0)); + } + + // sink for output of pipelines + define_component("sink", "qa_bitset_sink", + pmt_list3(pmt_from_long(d_nmsgs), + pmt_from_long(d_batch_size * NPIPES), + pmt_from_long(0x000000ff))); + + for (int i = 0; i < NPIPES; i++){ + connect("self", "cs"+str(i), "src"+str(i), "cs_top"); + connect("src"+str(i), "out", "pipeline"+str(i), "in"); + connect("src"+str(i), "cs", "sink", "cs"+str(i)); + connect("pipeline"+str(i), "out", "sink", "in"+str(i)); + } +} + +void +qa_bitset_top::initial_transition() +{ + for (int i = 0; i < NPIPES; i++){ + d_cs[i]->send(s_send_batch); // prime the pump + d_cs[i]->send(s_send_batch); + } +} + +REGISTER_MBLOCK_CLASS(qa_bitset_top); diff --git a/mblock/src/lib/qa_bitset.mbh b/mblock/src/lib/qa_bitset.mbh new file mode 100644 index 00000000..3fbcb80d --- /dev/null +++ b/mblock/src/lib/qa_bitset.mbh @@ -0,0 +1,61 @@ +;; -*- scheme -*- ; not really, but tells emacs how to format this +;; +;; Copyright 2007 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. +;; + +;; ---------------------------------------------------------------- +;; qa-bitset -- interface to mblock QA code +;; + +(define-protocol-class qa-bitset + + (:incoming + + (data n bitmask) + + ) + ) + +(define-protocol-class qa-bitset-cs + + (:outgoing + + (send-batch) + + ) + ) + +;; ---------------------------------------------------------------- +;; qa-disconnect -- interface to mblock QA code +;; + +(define-protocol-class qa-disconnect-cs + + (:outgoing + + (select-pipe n) + + ) + + (:incoming + + (ack n) + + ) + ) diff --git a/mblock/src/lib/qa_bitset_mbh.cc b/mblock/src/lib/qa_bitset_mbh.cc new file mode 100644 index 00000000..5940818c --- /dev/null +++ b/mblock/src/lib/qa_bitset_mbh.cc @@ -0,0 +1,18 @@ +// +// Machine generated by compile-mbh from ./qa_bitset.mbh +// +// protocol-classes: qa-disconnect-cs qa-bitset-cs qa-bitset +// +#include +#include +static const char +protocol_class_init_data[108] = { + 7, 2, 0, 16, 113, 97, 45, 100, 105, 115, 99, 111, 110, 110, 101, 99, + 116, 45, 99, 115, 7, 7, 2, 0, 3, 97, 99, 107, 6, 7, 7, 2, + 0, 11, 115, 101, 108, 101, 99, 116, 45, 112, 105, 112, 101, 6, 6, 7, + 2, 0, 12, 113, 97, 45, 98, 105, 116, 115, 101, 116, 45, 99, 115, 7, + 6, 7, 7, 2, 0, 10, 115, 101, 110, 100, 45, 98, 97, 116, 99, 104, + 6, 6, 7, 2, 0, 9, 113, 97, 45, 98, 105, 116, 115, 101, 116, 7, + 7, 2, 0, 4, 100, 97, 116, 97, 6, 7, 6, 6, +}; +static mb_protocol_class_init _init_(protocol_class_init_data, sizeof(protocol_class_init_data)); diff --git a/mblock/src/lib/qa_disconnect.cc b/mblock/src/lib/qa_disconnect.cc new file mode 100644 index 00000000..3f44bb5f --- /dev/null +++ b/mblock/src/lib/qa_disconnect.cc @@ -0,0 +1,239 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +static pmt_t s_in = pmt_intern("in"); +static pmt_t s_out = pmt_intern("out"); +static pmt_t s_data = pmt_intern("data"); +static pmt_t s_ack = pmt_intern("ack"); +static pmt_t s_select_pipe = pmt_intern("select-pipe"); +static pmt_t s_long0 = pmt_from_long(0); +static pmt_t s_sys_port = pmt_intern("%sys-port"); +static pmt_t s_shutdown = pmt_intern("%shutdown"); + +class qa_disconnect_mux : public mb_mblock +{ + mb_port_sptr d_in; + mb_port_sptr d_out; + mb_port_sptr d_cs; + +public: + qa_disconnect_mux(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void initial_transition(); + void handle_message(mb_message_sptr msg); +}; + +qa_disconnect_mux::qa_disconnect_mux(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_in = define_port("in", "qa-bitset", false, mb_port::RELAY); + d_out = define_port("out", "qa-bitset", true, mb_port::RELAY); + d_cs = define_port("cs", "qa-disconnect-cs", true, mb_port::EXTERNAL); + + define_component("pipeline0", "qa_bitset8", pmt_from_long(0)); + define_component("pipeline1", "qa_bitset8", pmt_from_long(8)); +} + +void +qa_disconnect_mux::initial_transition(){} + +void +qa_disconnect_mux::handle_message(mb_message_sptr msg) +{ + if (pmt_eq(msg->port_id(), d_cs->port_symbol()) // select-pipe on cs + && pmt_eq(msg->signal(), s_select_pipe)){ + + long which_pipe = pmt_to_long(pmt_nth(0, msg->data())); + + disconnect_component("pipeline0"); + disconnect_component("pipeline1"); + + switch(which_pipe){ + + case 0: + connect("self", "in", "pipeline0", "in"); + connect("self", "out", "pipeline0", "out"); + break; + + case 1: + connect("self", "in", "pipeline1", "in"); + connect("self", "out", "pipeline1", "out"); + break; + } + + d_cs->send(s_ack, msg->data()); + return; + } +} + +REGISTER_MBLOCK_CLASS(qa_disconnect_mux); + +// ------------------------------------------------------------------------ + +class qa_disconnect_top : public mb_mblock +{ + enum state_t { + UNINITIALIZED, + WAIT_FOR_ACK, + WAIT_FOR_DATA + }; + + state_t d_state; + int d_msg_number; + int d_nmsgs_to_send; + + mb_port_sptr d_in; + mb_port_sptr d_out; + mb_port_sptr d_cs; + + void check_pipe_send_next_msg(); + void send_next_msg(); + void select_pipe(int n); + + // alternate pipes every 128 messages + static int which_pipe(int msg_number) { return (msg_number >> 7) & 0x1; } + bool time_to_switch() { return (d_msg_number & 0x7f) == 0; } + +public: + qa_disconnect_top(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void initial_transition(); + void handle_message(mb_message_sptr msg); +}; + +qa_disconnect_top::qa_disconnect_top(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg), + d_state(UNINITIALIZED), d_msg_number(0) +{ + d_nmsgs_to_send = pmt_to_long(pmt_nth(0, user_arg)); + + d_in = define_port("in", "qa-bitset", false, mb_port::INTERNAL); + d_out = define_port("out", "qa-bitset", true, mb_port::INTERNAL); + d_cs = define_port("cs", "qa-disconnect-cs", false, mb_port::INTERNAL); + + define_component("mux", "qa_disconnect_mux", PMT_F); + + connect("self", "cs", "mux", "cs"); + connect("self", "out", "mux", "in"); + connect("self", "in", "mux", "out"); +} + +void +qa_disconnect_top::initial_transition() +{ + check_pipe_send_next_msg(); +} + +void +qa_disconnect_top::handle_message(mb_message_sptr msg) +{ + if (0) + std::cerr << "qa_disconnect_top::handle_msg state = " + << d_state << "\n msg = " << msg << std::endl; + + if (pmt_eq(msg->port_id(), d_cs->port_symbol()) // ack on cs + && pmt_eq(msg->signal(), s_ack) + && d_state == WAIT_FOR_ACK){ + + send_next_msg(); + return; + } + + if (pmt_eq(msg->port_id(), d_in->port_symbol()) // data on in + && pmt_eq(msg->signal(), s_data) + && d_state == WAIT_FOR_DATA){ + + /* + * Confirm that msg passed through the pipe that we expect... + */ + static const long expected_mask[2] = { 0x000000ff, 0x0000ff00 }; + + long msg_number = pmt_to_long(pmt_car(msg->data())); + long mask = pmt_to_long(pmt_cdr(msg->data())); + + if (mask != expected_mask[which_pipe(msg_number)]){ + fprintf(stderr, "\nqa_disconnect_top: wrong mask in msg_number = 0x%08lx\n", + msg_number); + fprintf(stderr, " expected = 0x%08lx, actual = 0x%08lx\n", + expected_mask[which_pipe(msg_number)], mask); + shutdown_all(PMT_F); + return; + } + + if (msg_number == d_nmsgs_to_send - 1){ // we're done (and were successful) + shutdown_all(PMT_T); + return; + } + + check_pipe_send_next_msg(); + return; + } + + if (pmt_eq(msg->port_id(), s_sys_port) // ignore %shutdown on %sys-port + && pmt_eq(msg->signal(), s_shutdown)) + return; + + std::cerr << "qa_disconnect_top: unhandled msg: state = " + << d_state << "\n msg = " << msg << std::endl; +} + +void +qa_disconnect_top::select_pipe(int n) +{ + d_cs->send(s_select_pipe, pmt_list1(pmt_from_long(n))); + d_state = WAIT_FOR_ACK; +} + +void +qa_disconnect_top::send_next_msg() +{ + d_state = WAIT_FOR_DATA; + if (d_msg_number == d_nmsgs_to_send) // we've sent all we're supposed to + return; + + d_out->send(s_data, pmt_cons(pmt_from_long(d_msg_number), s_long0)); + d_msg_number++; +} + +void +qa_disconnect_top::check_pipe_send_next_msg() +{ + if (time_to_switch()) + select_pipe(which_pipe(d_msg_number)); + else + send_next_msg(); +} + +REGISTER_MBLOCK_CLASS(qa_disconnect_top); diff --git a/mblock/src/lib/qa_mblock.cc b/mblock/src/lib/qa_mblock.cc new file mode 100644 index 00000000..c0629790 --- /dev/null +++ b/mblock/src/lib/qa_mblock.cc @@ -0,0 +1,44 @@ +/* + * Copyright 2006 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* + * This class gathers together all the test cases for mblock into + * a single test suite. As you create new test cases, add them here. + */ + +#include +#include +#include +#include +#include + +CppUnit::TestSuite * +qa_mblock::suite() +{ + CppUnit::TestSuite *s = new CppUnit::TestSuite("mblock"); + + s->addTest (qa_mblock_prims::suite()); + s->addTest (qa_mblock_send::suite()); + s->addTest (qa_mblock_sys::suite()); + s->addTest (qa_timeouts::suite()); + + return s; +} diff --git a/mblock/src/lib/qa_mblock.h b/mblock/src/lib/qa_mblock.h new file mode 100644 index 00000000..056c4223 --- /dev/null +++ b/mblock/src/lib/qa_mblock.h @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef INCLUDED_QA_MBLOCK_H +#define INCLUDED_QA_MBLOCK_H + +#include + +//! collect all the tests for mblock + +class qa_mblock { + public: + //! return suite of tests for all of mblock + static CppUnit::TestSuite *suite(); +}; + +#endif /* INCLUDED_QA_MBLOCK_H */ diff --git a/mblock/src/lib/qa_mblock_prims.cc b/mblock/src/lib/qa_mblock_prims.cc new file mode 100644 index 00000000..2eed3afd --- /dev/null +++ b/mblock/src/lib/qa_mblock_prims.cc @@ -0,0 +1,446 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static pmt_t s_cs = pmt_intern("cs"); +static pmt_t s_debug = pmt_intern("debug"); +static pmt_t s_in = pmt_intern("in"); +static pmt_t s_out = pmt_intern("out"); + + +// ================================================================ + +class dp_1 : public mb_mblock +{ +public: + dp_1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~dp_1(); +}; + +dp_1::dp_1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ +} + +dp_1::~dp_1(){} + +REGISTER_MBLOCK_CLASS(dp_1); + +// ---------------------------------------------------------------- + +class dp_2 : public mb_mblock +{ +public: + dp_2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~dp_2(); +}; + +dp_2::dp_2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + define_port("cs", "cs-protocol", false, mb_port::EXTERNAL); +} + +dp_2::~dp_2(){} + +REGISTER_MBLOCK_CLASS(dp_2); + +// ---------------------------------------------------------------- + +class dp_3 : public mb_mblock +{ +public: + dp_3(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~dp_3(); +}; + +dp_3::dp_3(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + define_port("cs", "cs-protocol", false, mb_port::EXTERNAL); + define_port("cs", "cs-protocol", false, mb_port::EXTERNAL); // duplicate def +} + +dp_3::~dp_3(){} + +REGISTER_MBLOCK_CLASS(dp_3); + +// ---------------------------------------------------------------- + +void +qa_mblock_prims::test_define_ports() +{ + + mb_runtime_sptr rts = mb_make_runtime(); + mb_runtime *rt = rts.get(); + + // Should work + mb_mblock_sptr mb1 = mb_mblock_sptr(new dp_1(rt, "top", PMT_F)); + + // raises runtime_error because of unknown protocol "cs-protocol" + CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dp_2(rt, "top", PMT_F)), + std::runtime_error); + + // define the protocol class + pmt_t pc = mb_make_protocol_class(pmt_intern("cs-protocol"), + pmt_list2(pmt_intern("start"), + pmt_intern("stop")), + PMT_NIL); + + // std::cout << "pc = " << pc << '\n'; + + mb_mblock_sptr mb2 = mb_mblock_sptr(new dp_2(rt, "top", PMT_F)); + + // raises pmt_exception because of duplicate port definition of "cs" + CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dp_3(rt, "top", PMT_F)), + mbe_duplicate_port); +} + +// ================================================================ + +class dc_0 : public mb_mblock +{ +public: + dc_0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~dc_0(); +}; + +dc_0::dc_0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ +} + +dc_0::~dc_0() {} + +REGISTER_MBLOCK_CLASS(dc_0); + +// ---------------------------------------------------------------- + +class dc_ok : public mb_mblock +{ +public: + dc_ok(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~dc_ok(); +}; + +dc_ok::dc_ok(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + define_component("c0", "dc_0"); + define_component("c1", "dc_0"); + define_component("c2", "dc_0"); +} + +dc_ok::~dc_ok(){} + +REGISTER_MBLOCK_CLASS(dc_ok); + +// ---------------------------------------------------------------- + +class dc_not_ok : public mb_mblock +{ +public: + dc_not_ok(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~dc_not_ok(); +}; + +dc_not_ok::dc_not_ok(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + define_component("c0", "dc_0"); + define_component("c0", "dc_0"); // duplicate name +} + +dc_not_ok::~dc_not_ok(){} + +REGISTER_MBLOCK_CLASS(dc_not_ok); + +// ---------------------------------------------------------------- + +void +qa_mblock_prims::test_define_components() +{ + mb_runtime_sptr rts = mb_make_runtime(); + mb_runtime *rt = rts.get(); + + // Should work + mb_mblock_sptr mb1 = mb_mblock_sptr(new dc_ok(rt, "top", PMT_F)); + + // raises pmt_exception because of duplicate component definition of "c0" + CPPUNIT_ASSERT_THROW(mb_mblock_sptr(new dc_not_ok(rt, "top", PMT_F)), + mbe_duplicate_component); +} + +// ================================================================ + +class tc_norm : public mb_mblock +{ +public: + tc_norm(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) + { + define_port("data", "i/o", false, mb_port::EXTERNAL); + define_port("norm", "i/o", false, mb_port::EXTERNAL); + define_port("conj", "i/o", true, mb_port::EXTERNAL); + define_port("int", "i/o", false, mb_port::INTERNAL); + } + + ~tc_norm(); +}; + +tc_norm::~tc_norm(){} + +REGISTER_MBLOCK_CLASS(tc_norm); + +//////////////////////////////////////////////////////////////// + +class tc_0 : public mb_mblock +{ +public: + tc_0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) + { + define_port("norm", "i/o", false, mb_port::EXTERNAL); + define_port("conj", "i/o", true, mb_port::EXTERNAL); + define_port("int", "i/o", false, mb_port::INTERNAL); + + define_component("c0", "tc_norm"); + define_component("c1", "tc_norm"); + define_component("c2", "tc_norm"); + define_component("c3", "tc_norm"); + define_component("c4", "tc_norm"); + define_component("c5", "tc_norm"); + + // OK + connect("c0", "norm", "c1", "conj"); + + // No: No such component name + CPPUNIT_ASSERT_THROW(connect("foo", "data", "c1", "norm"), mbe_no_such_component); + + // No: No such port name + CPPUNIT_ASSERT_THROW(connect("c0", "data", "c1", "foo"), mbe_no_such_port); + + // No: already connected + CPPUNIT_ASSERT_THROW(connect("c0", "norm", "c2", "data"), mbe_already_connected); + + // No: already connected + CPPUNIT_ASSERT_THROW(connect("c2", "data", "c0", "norm"), mbe_already_connected); + + // No: incompatible ports + CPPUNIT_ASSERT_THROW(connect("c1", "norm", "c2", "norm"), mbe_incompatible_ports); + + // OK + connect("c1", "norm", "c2", "conj"); + + // No: No such port name + CPPUNIT_ASSERT_THROW(connect("c2", "norm", "self", "foo"), mbe_no_such_port); + + // No: can't connect to child's internal port + CPPUNIT_ASSERT_THROW(connect("c0", "conj", "c2", "int"), mbe_no_such_port); + + // No: can't connect to our own external port + CPPUNIT_ASSERT_THROW(connect("self", "norm", "c0", "conj"), mbe_invalid_port_type); + + // OK: connecting to one of our internal ports + connect("self", "int", "c3", "conj"); + + // ===== Now test disconnecting some stuff ===== + + // Confirm we're already connected + CPPUNIT_ASSERT_THROW(connect("self", "int", "c3", "conj"), mbe_already_connected); + + int nc = nconnections(); + disconnect("self", "int", "c3", "conj"); // disconnect + CPPUNIT_ASSERT_EQUAL(nc-1, nconnections()); + + connect("self", "int", "c3", "conj"); // reconnect + CPPUNIT_ASSERT_EQUAL(nc, nconnections()); + + // confirm we're already connected + CPPUNIT_ASSERT_THROW(connect("self", "int", "c3", "conj"), mbe_already_connected); + + + connect("c0", "conj", "c5", "data"); + connect("c4", "norm", "c5", "conj"); + connect("c4", "conj", "c5", "norm"); + + nc = nconnections(); + disconnect_component("c4"); + CPPUNIT_ASSERT_EQUAL(nc-2, nconnections()); + + disconnect_component("c5"); + CPPUNIT_ASSERT_EQUAL(nc-3, nconnections()); + + disconnect_all(); + CPPUNIT_ASSERT_EQUAL(0, nconnections()); + + } + + ~tc_0(); +}; + +tc_0::~tc_0(){} + +REGISTER_MBLOCK_CLASS(tc_0); + +//////////////////////////////////////////////////////////////// + +class tc_1 : public mb_mblock +{ +public: + tc_1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) + { + define_component("c0", "tc_norm"); + define_component("c1", "tc_norm"); + + connect("c0", "norm", "c1", "conj"); + } + + ~tc_1(); +}; + +tc_1::~tc_1(){} + +REGISTER_MBLOCK_CLASS(tc_1); + +//////////////////////////////////////////////////////////////// + +void +qa_mblock_prims::test_connect() +{ + // define the protocol class + mb_make_protocol_class(pmt_intern("data"), // name of class + pmt_list1(pmt_intern("data")), // in + PMT_NIL); // out + + mb_make_protocol_class(pmt_intern("i/o"), // name of class + pmt_list1(pmt_intern("in")), // in + pmt_list1(pmt_intern("out"))); // out + + mb_runtime_sptr rts = mb_make_runtime(); + mb_runtime *rt = rts.get(); + + mb_mblock_sptr mb0 = mb_mblock_sptr(new tc_0(rt, "top", PMT_F)); +} + +//////////////////////////////////////////////////////////////// + +void +qa_mblock_prims::test_msg_queue() +{ + mb_msg_queue q; + + // check initial state + CPPUNIT_ASSERT(q.get_highest_pri_msg_nowait() == 0); + + CPPUNIT_ASSERT(MB_NPRI >= 5); // sanity check for this test + + // insert three messages at the same pri and ensure that they come out in order + // signal data metadata pri + q.insert(mb_make_message(PMT_NIL, pmt_from_long(0), PMT_NIL, MB_PRI_BEST + 2)); + q.insert(mb_make_message(PMT_NIL, pmt_from_long(1), PMT_NIL, MB_PRI_BEST + 2)); + q.insert(mb_make_message(PMT_NIL, pmt_from_long(2), PMT_NIL, MB_PRI_BEST + 2)); + + CPPUNIT_ASSERT_EQUAL(0L, pmt_to_long(q.get_highest_pri_msg_nowait()->data())); + CPPUNIT_ASSERT_EQUAL(1L, pmt_to_long(q.get_highest_pri_msg_nowait()->data())); + CPPUNIT_ASSERT_EQUAL(2L, pmt_to_long(q.get_highest_pri_msg_nowait()->data())); + + CPPUNIT_ASSERT(q.get_highest_pri_msg_nowait() == 0); + + + // insert messages of different priorities in pseudo-random order + // signal data metadata pri + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 3)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 2)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 4)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 0)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 1)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 3)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 2)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 4)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 0)); + q.insert(mb_make_message(PMT_NIL, PMT_NIL, PMT_NIL, MB_PRI_BEST + 1)); + + // confirm that they come out in order + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 0, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 0, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 1, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 1, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 2, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 2, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 3, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 3, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 4, q.get_highest_pri_msg_nowait()->priority()); + CPPUNIT_ASSERT_EQUAL(MB_PRI_BEST + 4, q.get_highest_pri_msg_nowait()->priority()); + + // check final state + CPPUNIT_ASSERT(q.get_highest_pri_msg_nowait() == 0); +} + +//////////////////////////////////////////////////////////////// + +void +qa_mblock_prims::test_make_accepter() +{ + mb_runtime_sptr rts = mb_make_runtime(); + mb_runtime *rt = rts.get(); + + // create a block + mb_mblock_sptr mb = mb_mblock_sptr(new dp_2(rt, "top", PMT_F)); + + // use "internal use only" method... + mb_msg_accepter_sptr accepter = mb->impl()->make_accepter(pmt_intern("cs")); + + // Now push a few messages into it... + // signal data metadata pri + (*accepter)(PMT_NIL, pmt_from_long(0), PMT_NIL, MB_PRI_BEST + 2); + (*accepter)(PMT_NIL, pmt_from_long(1), PMT_NIL, MB_PRI_BEST + 2); + (*accepter)(PMT_NIL, pmt_from_long(2), PMT_NIL, MB_PRI_BEST + 2); + + // try to pull them out + + pmt_t cs = pmt_intern("cs"); + + mb_message_sptr msg = mb->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(pmt_eq(cs, msg->port_id())); // confirm that port_id is set + CPPUNIT_ASSERT_EQUAL(0L, pmt_to_long(msg->data())); // and that data is correct + + CPPUNIT_ASSERT_EQUAL(1L, pmt_to_long(mb->impl()->msgq().get_highest_pri_msg_nowait()->data())); + CPPUNIT_ASSERT_EQUAL(2L, pmt_to_long(mb->impl()->msgq().get_highest_pri_msg_nowait()->data())); +} diff --git a/mblock/src/lib/qa_mblock_prims.h b/mblock/src/lib/qa_mblock_prims.h new file mode 100644 index 00000000..cf928ee4 --- /dev/null +++ b/mblock/src/lib/qa_mblock_prims.h @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef INCLUDED_QA_MBLOCK_PRIMS_H +#define INCLUDED_QA_MBLOCK_PRIMS_H + +#include +#include + +class qa_mblock_prims : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_mblock_prims); + CPPUNIT_TEST(test_define_ports); + CPPUNIT_TEST(test_define_components); + CPPUNIT_TEST(test_connect); + CPPUNIT_TEST(test_msg_queue); + CPPUNIT_TEST(test_make_accepter); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_define_ports(); + void test_define_components(); + void test_connect(); + void test_msg_queue(); + void test_make_accepter(); +}; + +#endif /* INCLUDED_QA_MBLOCK_PRIMS_H */ + diff --git a/mblock/src/lib/qa_mblock_send.cc b/mblock/src/lib/qa_mblock_send.cc new file mode 100644 index 00000000..114dbdc4 --- /dev/null +++ b/mblock/src/lib/qa_mblock_send.cc @@ -0,0 +1,475 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include // QA only +#include +#include +#include +#include +#include +#include +#include +#include + +static pmt_t s_data = pmt_intern("data"); +static pmt_t s_status = pmt_intern("status"); +static pmt_t s_control = pmt_intern("control"); +static pmt_t s_p0 = pmt_intern("p0"); +static pmt_t s_p1 = pmt_intern("p1"); +static pmt_t s_p2 = pmt_intern("p2"); +static pmt_t s_p3 = pmt_intern("p3"); +static pmt_t s_e1 = pmt_intern("e1"); +static pmt_t s_r1 = pmt_intern("r1"); + +static void +define_protocol_classes() +{ + // Defined from client point-of-view. + mb_make_protocol_class(pmt_intern("qa-send-cs"), // name + pmt_list1(s_status), // incoming + pmt_list1(s_control)); // outgoing + +} + +mb_mblock_sptr +get_top(mb_runtime_sptr rts) +{ + return dynamic_cast(rts.get())->top(); +} + +// ================================================================ +// test_simple_routing +// ================================================================ + +// sub-block for test_simple_routing + +class sr1 : public mb_mblock +{ + mb_port_sptr d_p1; + mb_port_sptr d_p2; + mb_port_sptr d_p3; + +public: + sr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~sr1(); + void initial_transition(); +}; + +sr1::sr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_p1 = define_port("p1", "qa-send-cs", true, mb_port::EXTERNAL); + d_p2 = define_port("p2", "qa-send-cs", true, mb_port::EXTERNAL); + d_p3 = define_port("p3", "qa-send-cs", false, mb_port::EXTERNAL); +} + +sr1::~sr1(){} + +void +sr1::initial_transition() +{ + // std::cout << instance_name() << "[sr1]: initial_transition\n"; + + // send two messages to each port + pmt_t our_name = pmt_intern(instance_name()); + d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(0))); + d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(1))); + + d_p2->send(s_status, pmt_list3(our_name, s_p2, pmt_from_long(0))); + d_p2->send(s_status, pmt_list3(our_name, s_p2, pmt_from_long(1))); +} + +REGISTER_MBLOCK_CLASS(sr1); + +// ---------------------------------------------------------------- + +// top-level container block for test_simple_routing +class sr0 : public mb_mblock +{ + mb_port_sptr d_p0; + +public: + sr0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~sr0(); + void initial_transition(); +}; + +sr0::sr0(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_p0 = define_port("p0", "qa-send-cs", false, mb_port::INTERNAL); + + define_component("mb1", "sr1"); + define_component("mb2", "sr1"); + + connect("self", "p0", "mb1", "p1"); + connect("mb1", "p2", "mb2", "p3"); + connect("mb1", "p3", "mb2", "p2"); +} + +sr0::~sr0(){} + +void +sr0::initial_transition() +{ + // std::cout << instance_name() << "[sr0]: initial_transition\n"; + + // send two messages to p0 + pmt_t our_name = pmt_intern(instance_name()); + d_p0->send(s_control, pmt_list3(our_name, s_p0, pmt_from_long(0))); + d_p0->send(s_control, pmt_list3(our_name, s_p0, pmt_from_long(1))); +} + +REGISTER_MBLOCK_CLASS(sr0); + +// ---------------------------------------------------------------- + +/* + * This tests basic message routing using INTERNAL and EXTERNAL ports. + * It does not rely on the guts of the runtime being complete, + * which is good, because at the time this is being written, it isn't. + */ +void +qa_mblock_send::test_simple_routing() +{ + define_protocol_classes(); + + mb_message_sptr msg; + + mb_runtime_sptr rt = mb_make_runtime_nop(); + rt->run("top", "sr0", PMT_F); + + mb_mblock_sptr mb0 = get_top(rt); + + // Reach into the guts and see if the messages ended up where they should have + + // mb0 should have received two messages sent from mb1 via its p1 + msg = mb0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p0, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p1, pmt_from_long(0)), + msg->data())); + + msg = mb0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p0, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p1, pmt_from_long(1)), + msg->data())); + + // mb1 should have received + // two messages from mb0 via its p0 and + // two messages from mb2 via its p3 + + mb_mblock_sptr mb1 = mb0->impl()->component("mb1"); + + msg = mb1->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p1, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top"), s_p0, pmt_from_long(0)), + msg->data())); + + msg = mb1->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p1, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top"), s_p0, pmt_from_long(1)), + msg->data())); + + msg = mb1->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb2"), s_p2, pmt_from_long(0)), + msg->data())); + + msg = mb1->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb2"), s_p2, pmt_from_long(1)), + msg->data())); + + + // mb2 should have received + // two messages from mb2 via its p2 + + mb_mblock_sptr mb2 = mb0->impl()->component("mb2"); + + msg = mb2->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p2, pmt_from_long(0)), + msg->data())); + + msg = mb2->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p3, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/mb1"), s_p2, pmt_from_long(1)), + msg->data())); +} + +// ================================================================ +// test_relay_routing_1 +// ================================================================ + +// internal block for test_relay_routing + +class rr2 : public mb_mblock +{ + mb_port_sptr d_p1; + mb_port_sptr d_p2; + +public: + rr2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~rr2(); + void initial_transition(); +}; + +rr2::rr2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_p1 = define_port("p1", "qa-send-cs", true, mb_port::EXTERNAL); + d_p2 = define_port("p2", "qa-send-cs", false, mb_port::EXTERNAL); +} + +rr2::~rr2(){} + +void +rr2::initial_transition() +{ + // std::cout << instance_name() << "[rr2]: initial_transition\n"; + + // send two messages via p1 + pmt_t our_name = pmt_intern(instance_name()); + d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(0))); + d_p1->send(s_status, pmt_list3(our_name, s_p1, pmt_from_long(1))); +} + +REGISTER_MBLOCK_CLASS(rr2); + +// ---------------------------------------------------------------- + +// intermediate block for test_relay_routing + +class rr1 : public mb_mblock +{ + mb_port_sptr d_p1; + mb_port_sptr d_p2; + +public: + rr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~rr1(); +}; + +rr1::rr1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_p1 = define_port("p1", "qa-send-cs", true, mb_port::RELAY); + d_p2 = define_port("p2", "qa-send-cs", false, mb_port::RELAY); + + define_component("c0", "rr2"); + + connect("self", "p1", "c0", "p1"); + connect("self", "p2", "c0", "p2"); +} + +rr1::~rr1(){} + +REGISTER_MBLOCK_CLASS(rr1); + +// ---------------------------------------------------------------- + +// top-level container for test_relay_routing + +class rr0_a : public mb_mblock +{ +public: + rr0_a(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~rr0_a(); +}; + +rr0_a::rr0_a(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + define_component("c0", "rr1"); + define_component("c1", "rr2"); + + connect("c0", "p1", "c1", "p2"); + connect("c0", "p2", "c1", "p1"); +} + +rr0_a::~rr0_a(){} + +REGISTER_MBLOCK_CLASS(rr0_a); + +/* + * This tests basic message routing using RELAY and EXTERNAL ports. + * It does not rely on the guts of the runtime being complete, + * which is good, because at the time this is being written, it isn't. + */ +void +qa_mblock_send::test_relay_routing_1() +{ + mb_message_sptr msg; + + mb_runtime_sptr rt = mb_make_runtime_nop(); + rt->run("top", "rr0_a", PMT_F); + mb_mblock_sptr top = get_top(rt); + + // Reach into the guts and see if the messages ended up where they should have + + mb_mblock_sptr c0 = top->impl()->component("c0"); + mb_mblock_sptr c0c0 = c0->impl()->component("c0"); + + mb_mblock_sptr c1 = top->impl()->component("c1"); + + // c0c0 should have received + // two message from c1 via its p2 + + msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + //std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1"), s_p1, pmt_from_long(0)), + msg->data())); + + msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + //std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1"), s_p1, pmt_from_long(1)), + msg->data())); + + // c1 should have received + // two message from c0c0 via its p2 + + msg = c1->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + //std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(0)), + msg->data())); + + msg = c1->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + //std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(1)), + msg->data())); +} + +// ================================================================ +// test_relay_routing_2 +// ================================================================ + +// top-level container for test_relay_routing_2 + +class rr0_b : public mb_mblock +{ +public: + rr0_b(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~rr0_b(); +}; + +rr0_b::rr0_b(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + define_component("c0", "rr1"); + define_component("c1", "rr1"); + + connect("c0", "p1", "c1", "p2"); + connect("c0", "p2", "c1", "p1"); +} + +rr0_b::~rr0_b(){} + +REGISTER_MBLOCK_CLASS(rr0_b); + +/* + * This tests basic message routing using RELAY and EXTERNAL ports. + * It does not rely on the guts of the runtime being complete, + * which is good, because at the time this is being written, it isn't. + */ +void +qa_mblock_send::test_relay_routing_2() +{ + mb_message_sptr msg; + + mb_runtime_sptr rt = mb_make_runtime_nop(); + rt->run("top", "rr0_b", PMT_F); + mb_mblock_sptr top = get_top(rt); + + // Reach into the guts and see if the messages ended up where they should have + + mb_mblock_sptr c0 = top->impl()->component("c0"); + mb_mblock_sptr c0c0 = c0->impl()->component("c0"); + + mb_mblock_sptr c1 = top->impl()->component("c1"); + mb_mblock_sptr c1c0 = c1->impl()->component("c0"); + + // c0c0 should have received + // two message from c1c0 via its p2 + + msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1/c0"), s_p1, pmt_from_long(0)), + msg->data())); + + msg = c0c0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c1/c0"), s_p1, pmt_from_long(1)), + msg->data())); + + // c1c0 should have received + // two message from c0c0 via its p2 + + msg = c1c0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(0)), + msg->data())); + + msg = c1c0->impl()->msgq().get_highest_pri_msg_nowait(); + CPPUNIT_ASSERT(msg); + // std::cerr << msg->data() << std::endl; + CPPUNIT_ASSERT_EQUAL(s_p2, msg->port_id()); + CPPUNIT_ASSERT(pmt_equal(pmt_list3(pmt_intern("top/c0/c0"), s_p1, pmt_from_long(1)), + msg->data())); +} diff --git a/mblock/src/lib/qa_mblock_send.h b/mblock/src/lib/qa_mblock_send.h new file mode 100644 index 00000000..b1a6832c --- /dev/null +++ b/mblock/src/lib/qa_mblock_send.h @@ -0,0 +1,43 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef INCLUDED_QA_MBLOCK_SEND_H +#define INCLUDED_QA_MBLOCK_SEND_H + +#include +#include + +class qa_mblock_send : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_mblock_send); + CPPUNIT_TEST(test_simple_routing); + CPPUNIT_TEST(test_relay_routing_1); + CPPUNIT_TEST(test_relay_routing_2); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_simple_routing(); + void test_relay_routing_1(); + void test_relay_routing_2(); +}; + +#endif /* INCLUDED_QA_MBLOCK_SEND_H */ + diff --git a/mblock/src/lib/qa_mblock_sys.cc b/mblock/src/lib/qa_mblock_sys.cc new file mode 100644 index 00000000..58e48f71 --- /dev/null +++ b/mblock/src/lib/qa_mblock_sys.cc @@ -0,0 +1,271 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007,2008 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include // QA only +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static pmt_t s_data = pmt_intern("data"); +static pmt_t s_status = pmt_intern("status"); +static pmt_t s_control = pmt_intern("control"); +static pmt_t s_p0 = pmt_intern("p0"); +static pmt_t s_p1 = pmt_intern("p1"); +static pmt_t s_p2 = pmt_intern("p2"); +static pmt_t s_p3 = pmt_intern("p3"); +static pmt_t s_e1 = pmt_intern("e1"); +static pmt_t s_r1 = pmt_intern("r1"); + +static void +define_protocol_classes() +{ + mb_make_protocol_class(s_data, // name + pmt_list1(s_data), // incoming + pmt_list1(s_data)); // outgoing +} + + +// ================================================================ +// test_sys_1 +// ================================================================ + +class sys_1 : public mb_mblock +{ + pmt_t d_user_arg; + mb_port_sptr d_data; + +public: + sys_1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + ~sys_1(); + void initial_transition(); +}; + +sys_1::sys_1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg), + d_user_arg(user_arg) +{ + d_data = define_port("data", "data", true, mb_port::EXTERNAL); +} + +sys_1::~sys_1(){} + +void +sys_1::initial_transition() +{ + shutdown_all(d_user_arg); +} + +REGISTER_MBLOCK_CLASS(sys_1); + +void +qa_mblock_sys::test_sys_1() +{ + define_protocol_classes(); + + pmt_t result; + pmt_t n1 = pmt_from_long(1); + pmt_t n2 = pmt_from_long(2); + + mb_runtime_sptr rt1 = mb_make_runtime(); + +#if 0 + try { + rt1->run("top-1", "sys_1", n1, &result); + } + catch (omni_thread_fatal e){ + std::cerr << "caught omni_thread_fatal: error = " << e.error + << ": " << strerror(e.error) << std::endl; + } + catch (omni_thread_invalid){ + std::cerr << "caught omni_thread_invalid\n"; + } +#else + rt1->run("top-1", "sys_1", n1, &result); +#endif + CPPUNIT_ASSERT(pmt_equal(n1, result)); + + // Execute run a second time, with the same rt, to ensure sanity. + rt1->run("top-2", "sys_1", n2, &result); + CPPUNIT_ASSERT(pmt_equal(n2, result)); +} + +// ================================================================ +// test_sys_2 +// ================================================================ + +class squarer : public mb_mblock +{ + mb_port_sptr d_data; + +public: + squarer(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + + void handle_message(mb_message_sptr msg); +}; + +squarer::squarer(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_data = define_port("data", "data", true, mb_port::EXTERNAL); +} + +void +squarer::handle_message(mb_message_sptr msg) +{ + if (!pmt_eq(msg->signal(), s_data)) // we only handle the "data" message + return; + + // long x -> (long x . long (x * x)) + + pmt_t x_pmt = msg->data(); + long x = pmt_to_long(x_pmt); + d_data->send(s_data, pmt_cons(x_pmt, pmt_from_long(x * x))); +} + +REGISTER_MBLOCK_CLASS(squarer); + +// ---------------------------------------------------------------- + +class sys_2 : public mb_mblock +{ + mb_port_sptr d_data; + +public: + sys_2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg); + void initial_transition(); + void handle_message(mb_message_sptr msg); +}; + +sys_2::sys_2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg) +{ + d_data = define_port("data", "data", true, mb_port::INTERNAL); + define_component("squarer", "squarer"); + connect("self", "data", "squarer", "data"); +} + +void +sys_2::initial_transition() +{ + // FIXME start timer to detect general failure + + d_data->send(s_data, pmt_from_long(0)); // send initial message +} + +void +sys_2::handle_message(mb_message_sptr msg) +{ + if (!pmt_eq(msg->signal(), s_data)) // we only handle the "data" message + return; + + // first check correctness of message + + long x = pmt_to_long(pmt_car(msg->data())); + long y = pmt_to_long(pmt_cdr(msg->data())); + + // std::cout << msg->data() << std::endl; + + if (y != x * x){ + std::cerr << "sys_2::handle_message: Expected y == x * x. Got y = " + << y << " for x = " << x << std::endl; + + shutdown_all(PMT_F); // failed + } + + if (x == 100) + shutdown_all(PMT_T); // done, OK + else + d_data->send(s_data, pmt_from_long(x + 1)); // send next request +} + +REGISTER_MBLOCK_CLASS(sys_2); + +// ---------------------------------------------------------------- + +void +qa_mblock_sys::test_sys_2() +{ + mb_runtime_sptr rt = mb_make_runtime(); + pmt_t result = PMT_NIL; + + // std::cerr << "qa_mblock_sys::test_sys_2 (enter)\n"; + + rt->run("top-sys-2", "sys_2", PMT_F, &result); + CPPUNIT_ASSERT(pmt_equal(PMT_T, result)); +} + +// ================================================================ +// test_bitset_1 +// ================================================================ + +void +qa_mblock_sys::test_bitset_1() +{ + mb_runtime_sptr rt = mb_make_runtime(); + pmt_t result = PMT_NIL; + + long nmsgs = 1000; + long batch_size = 8; + + pmt_t arg = pmt_list2(pmt_from_long(nmsgs), // # of messages to send through pipe + pmt_from_long(batch_size)); + + rt->run("top", "qa_bitset_top", arg, &result); + + CPPUNIT_ASSERT(pmt_equal(PMT_T, result)); +} + +// ================================================================ +// test_disconnect +// ================================================================ + +void +qa_mblock_sys::test_disconnect() +{ + mb_runtime_sptr rt = mb_make_runtime(); + pmt_t result = PMT_NIL; + + long nmsgs = 10240; + + pmt_t arg = pmt_list1(pmt_from_long(nmsgs)); // # of messages to send through pipe + + + rt->run("top", "qa_disconnect_top", arg, &result); + + CPPUNIT_ASSERT(pmt_equal(PMT_T, result)); +} diff --git a/mblock/src/lib/qa_mblock_sys.h b/mblock/src/lib/qa_mblock_sys.h new file mode 100644 index 00000000..0e0053a5 --- /dev/null +++ b/mblock/src/lib/qa_mblock_sys.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef INCLUDED_QA_MBLOCK_SYS_H +#define INCLUDED_QA_MBLOCK_SYS_H + +#include +#include + +class qa_mblock_sys : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_mblock_sys); + CPPUNIT_TEST(test_sys_1); + CPPUNIT_TEST(test_sys_2); + CPPUNIT_TEST(test_bitset_1); + CPPUNIT_TEST(test_disconnect); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_sys_1(); + void test_sys_2(); + void test_bitset_1(); + void test_disconnect(); +}; + +#endif /* INCLUDED_QA_MBLOCK_SYS_H */ + diff --git a/mblock/src/lib/qa_timeouts.cc b/mblock/src/lib/qa_timeouts.cc new file mode 100644 index 00000000..2505635c --- /dev/null +++ b/mblock/src/lib/qa_timeouts.cc @@ -0,0 +1,290 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static pmt_t s_timeout = pmt_intern("%timeout"); +static pmt_t s_done = pmt_intern("done"); + + +// ------------------------------------------------------------------------ +// Exercise the priority queue used to implement timeouts. +// ------------------------------------------------------------------------ +void +qa_timeouts::test_timer_queue() +{ + mb_timer_queue tq; + mb_msg_accepter_sptr accepter; + + mb_timeout_sptr t1000_000 = + mb_timeout_sptr(new mb_timeout(mb_time(1000,0), PMT_F, accepter)); + + mb_timeout_sptr t2000_000 = + mb_timeout_sptr(new mb_timeout(mb_time(2000,0), PMT_F, accepter)); + + mb_timeout_sptr t3000_000 = + mb_timeout_sptr(new mb_timeout(mb_time(3000,0), PMT_F, accepter)); + + mb_timeout_sptr t3000_125 = + mb_timeout_sptr(new mb_timeout(mb_time(3000,125), PMT_F, accepter)); + + mb_timeout_sptr t3000_250 = + mb_timeout_sptr(new mb_timeout(mb_time(3000,250), PMT_F, accepter)); + + mb_timeout_sptr t4000_000 = + mb_timeout_sptr(new mb_timeout(mb_time(4000,0), PMT_F, accepter)); + + // insert in pseudo-random order + + tq.push(t3000_125); + tq.push(t1000_000); + tq.push(t4000_000); + tq.push(t3000_250); + tq.push(t2000_000); + tq.push(t3000_000); + + CPPUNIT_ASSERT_EQUAL(t1000_000, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t2000_000, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t3000_000, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t3000_125, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t3000_250, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t4000_000, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT(tq.empty()); + + // insert in pseudo-random order + + tq.push(t3000_000); + tq.push(t4000_000); + tq.push(t3000_125); + tq.push(t1000_000); + tq.push(t2000_000); + tq.push(t3000_250); + + tq.cancel(t1000_000->handle()); + + CPPUNIT_ASSERT_EQUAL(t2000_000, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t3000_000, tq.top()); + tq.pop(); + + tq.cancel(t3000_250->handle()); + + CPPUNIT_ASSERT_EQUAL(t3000_125, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT_EQUAL(t4000_000, tq.top()); + tq.pop(); + + CPPUNIT_ASSERT(tq.empty()); +} + +// ------------------------------------------------------------------------ +// Test one-shot timeouts +// ------------------------------------------------------------------------ + +// FWIW, on SuSE 10.1 for x86-64, clock_getres returns 0.004 seconds. + +// #define TIMING_MARGIN 0.010 // seconds // was failing on some systems +#define TIMING_MARGIN 0.025 // seconds (really sloppy; consider enabling RT scheduler) + + +class qa_timeouts_1_top : public mb_mblock +{ + int d_nleft; + int d_nerrors; + mb_time d_t0; + +public: + qa_timeouts_1_top(mb_runtime *runtime, + const std::string &instance_name, pmt_t user_arg); + + void initial_transition(); + void handle_message(mb_message_sptr msg); +}; + +qa_timeouts_1_top::qa_timeouts_1_top(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg), + d_nleft(0), d_nerrors(0) +{ +} + +void +qa_timeouts_1_top::initial_transition() +{ + d_t0 = mb_time::time(); // now + + schedule_one_shot_timeout(d_t0 + 0.200, pmt_from_double(0.200)); + schedule_one_shot_timeout(d_t0 + 0.125, pmt_from_double(0.125)); + schedule_one_shot_timeout(d_t0 + 0.075, pmt_from_double(0.075)); + schedule_one_shot_timeout(d_t0 + 0.175, pmt_from_double(0.175)); + + d_nleft = 4; +} + +void +qa_timeouts_1_top::handle_message(mb_message_sptr msg) +{ + if (pmt_eq(msg->signal(), s_timeout)){ + mb_time t_now = mb_time::time(); + double expected_delta_t = pmt_to_double(msg->data()); + double actual_delta_t = (t_now - d_t0).double_time(); + double delta = expected_delta_t - actual_delta_t; + + if (fabs(delta) > TIMING_MARGIN){ + std::cerr << "qa_timeouts_1_top: expected_delta_t = " << expected_delta_t + << " actual_delta_t = " << actual_delta_t << std::endl; + d_nerrors++; + } + + if (--d_nleft <= 0) + shutdown_all(d_nerrors == 0 ? PMT_T : PMT_F); + } +} + +REGISTER_MBLOCK_CLASS(qa_timeouts_1_top); + +void +qa_timeouts::test_timeouts_1() +{ + mb_runtime_sptr rt = mb_make_runtime(); + pmt_t result = PMT_NIL; + + rt->run("top", "qa_timeouts_1_top", PMT_F, &result); + + CPPUNIT_ASSERT(pmt_equal(PMT_T, result)); +} + +// ------------------------------------------------------------------------ +// Test periodic timeouts +// ------------------------------------------------------------------------ + +class qa_timeouts_2_top : public mb_mblock +{ + int d_nhandled; + int d_nerrors; + double d_delta_t; + mb_time d_t0; + +public: + qa_timeouts_2_top(mb_runtime *runtime, + const std::string &instance_name, pmt_t user_arg); + + void initial_transition(); + void handle_message(mb_message_sptr msg); +}; + +qa_timeouts_2_top::qa_timeouts_2_top(mb_runtime *runtime, + const std::string &instance_name, + pmt_t user_arg) + : mb_mblock(runtime, instance_name, user_arg), + d_nhandled(0), d_nerrors(0), d_delta_t(0.075) +{ +} + +void +qa_timeouts_2_top::initial_transition() +{ + d_t0 = mb_time::time(); // now + + schedule_periodic_timeout(d_t0 + d_delta_t, mb_time(d_delta_t), PMT_T); +} + +void +qa_timeouts_2_top::handle_message(mb_message_sptr msg) +{ + static const int NMSGS_TO_HANDLE = 5; + + if (pmt_eq(msg->signal(), s_timeout) + && !pmt_eq(msg->data(), s_done)){ + + mb_time t_now = mb_time::time(); + + d_nhandled++; + + double expected_delta_t = d_delta_t * d_nhandled; + double actual_delta_t = (t_now - d_t0).double_time(); + double delta = expected_delta_t - actual_delta_t; + + if (fabs(delta) > TIMING_MARGIN){ + std::cerr << "qa_timeouts_2_top: expected_delta_t = " << expected_delta_t + << " actual_delta_t = " << actual_delta_t << std::endl; + d_nerrors++; + } + + if (d_nhandled == NMSGS_TO_HANDLE){ + cancel_timeout(msg->metadata()); // test cancel_timeout... + schedule_one_shot_timeout(d_t0 + (d_delta_t * (d_nhandled + 2)), s_done); + } + } + + if (pmt_eq(msg->signal(), s_timeout) + && pmt_eq(msg->data(), s_done)){ + if (d_nhandled != NMSGS_TO_HANDLE){ + std::cerr << "qa_timeouts_2_top: d_nhandled = " << d_nhandled + << " expected d_nhandled = " << NMSGS_TO_HANDLE + << " (cancel_timeout didn't work)\n"; + d_nerrors++; + } + shutdown_all(d_nerrors == 0 ? PMT_T : PMT_F); + } +} + +REGISTER_MBLOCK_CLASS(qa_timeouts_2_top); + +void +qa_timeouts::test_timeouts_2() +{ + mb_runtime_sptr rt = mb_make_runtime(); + pmt_t result = PMT_NIL; + + rt->run("top", "qa_timeouts_2_top", PMT_F, &result); + + CPPUNIT_ASSERT(pmt_equal(PMT_T, result)); +} diff --git a/mblock/src/lib/qa_timeouts.h b/mblock/src/lib/qa_timeouts.h new file mode 100644 index 00000000..7c644364 --- /dev/null +++ b/mblock/src/lib/qa_timeouts.h @@ -0,0 +1,43 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,2007 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef INCLUDED_QA_TIMEOUTS_H +#define INCLUDED_QA_TIMEOUTS_H + +#include +#include + +class qa_timeouts : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_timeouts); + CPPUNIT_TEST(test_timer_queue); + CPPUNIT_TEST(test_timeouts_1); + CPPUNIT_TEST(test_timeouts_2); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_timer_queue(); + void test_timeouts_1(); + void test_timeouts_2(); +}; + +#endif /* INCLUDED_QA_TIMEOUTS_H */ + diff --git a/mblock/src/lib/test_mblock.cc b/mblock/src/lib/test_mblock.cc new file mode 100644 index 00000000..b98d1b5a --- /dev/null +++ b/mblock/src/lib/test_mblock.cc @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include +#include + +int +main(int argc, char **argv) +{ + + CppUnit::TextTestRunner runner; + + runner.addTest(qa_mblock::suite ()); + + bool was_successful = runner.run("", false); + + return was_successful ? 0 : 1; +} diff --git a/mblock/src/scheme/Makefile.am b/mblock/src/scheme/Makefile.am new file mode 100644 index 00000000..4980063d --- /dev/null +++ b/mblock/src/scheme/Makefile.am @@ -0,0 +1,21 @@ +# +# Copyright 2007 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. +# + +SUBDIRS = gnuradio diff --git a/mblock/src/scheme/Makefile.in b/mblock/src/scheme/Makefile.in new file mode 100644 index 00000000..313e8b22 --- /dev/null +++ b/mblock/src/scheme/Makefile.in @@ -0,0 +1,895 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = mblock/src/scheme +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = gnuradio +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/src/scheme/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/src/scheme/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/src/scheme/gnuradio/Makefile.am b/mblock/src/scheme/gnuradio/Makefile.am new file mode 100644 index 00000000..e9bfc88e --- /dev/null +++ b/mblock/src/scheme/gnuradio/Makefile.am @@ -0,0 +1,23 @@ +# +# 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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +EXTRA_DIST = \ + compile-mbh.scm + diff --git a/mblock/src/scheme/gnuradio/Makefile.in b/mblock/src/scheme/gnuradio/Makefile.in new file mode 100644 index 00000000..4ea5d048 --- /dev/null +++ b/mblock/src/scheme/gnuradio/Makefile.in @@ -0,0 +1,739 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = mblock/src/scheme/gnuradio +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +EXTRA_DIST = \ + compile-mbh.scm + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mblock/src/scheme/gnuradio/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu mblock/src/scheme/gnuradio/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/mblock/src/scheme/gnuradio/compile-mbh.scm b/mblock/src/scheme/gnuradio/compile-mbh.scm new file mode 100755 index 00000000..30085340 --- /dev/null +++ b/mblock/src/scheme/gnuradio/compile-mbh.scm @@ -0,0 +1,231 @@ +#!/usr/bin/guile \ +-e main -s +!# +;; -*-scheme-*- +;; +;; Copyright 2007,2008 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. +;; + +;; usage: compile-mbh + +(use-modules (ice-9 getopt-long)) +(use-modules (ice-9 format)) +(use-modules (ice-9 pretty-print)) +;(use-modules (ice-9 slib)) +(use-modules (gnuradio pmt-serialize)) +(use-modules (gnuradio macros-etc)) + +(debug-enable 'backtrace) + +;; ---------------------------------------------------------------- + +(define (main args) + + (define (usage) + (format 0 "usage: ~a input-file output-file~%" (car args))) + + (when (not (= (length args) 3)) + (usage) + (exit 1)) + + (let ((input-filename (cadr args)) + (output-filename (caddr args))) + (if (compile-mbh-file input-filename output-filename) + (exit 0) + (exit 1)))) + + +;; ---------------------------------------------------------------- +;; constructor and accessors for protocol-class + +(define %protocol-class-tag (string->symbol "[PROTOCOL-CLASS-TAG]")) + +(define (make-protocol-class name incoming outgoing) + (vector %protocol-class-tag name incoming outgoing)) + +(define (protocol-class? obj) + (and (vector? obj) (eq? %protocol-class-tag (vector-ref obj 0)))) + +(define (protocol-class-name pc) + (vector-ref pc 1)) + +(define (protocol-class-incoming pc) + (vector-ref pc 2)) + +(define (protocol-class-outgoing pc) + (vector-ref pc 3)) + + +;; ---------------------------------------------------------------- + +(define (syntax-error msg e) + (throw 'syntax-error msg e)) + +(define (unrecognized-form form) + (syntax-error "Unrecognized form" form)) + + +(define (mbh-chk-length= e y n) + (cond ((and (null? y)(zero? n)) + #f) + ((null? y) + (syntax-error "Expression has too few subexpressions" e)) + ((atom? y) + (syntax-error (if (atom? e) + "List expected" + "Expression ends with `dotted' atom") + e)) + ((zero? n) + (syntax-error "Expression has too many subexpressions" e)) + (else + (mbh-chk-length= e (cdr y) (- n 1))))) + +(define (mbh-chk-length>= e y n) + (cond ((and (null? y)(< n 1)) + #f) + ((atom? y) + (mbh-chk-length= e y -1)) + (else + (mbh-chk-length>= e (cdr y) (- n 1))))) + + +(define (compile-mbh-file input-filename output-filename) + (let ((i-port (open-input-file input-filename)) + (o-port (open-output-file output-filename))) + + (letrec + ((protocol-classes '()) ; alist + + (lookup-protocol-class ; returns protocol-class or #f + (lambda (name) + (cond ((assq name protocol-classes) => cdr) + (else #f)))) + + (register-protocol-class + (lambda (pc) + (set! protocol-classes (acons (protocol-class-name pc) + pc protocol-classes)) + pc)) + + (parse-top-level-form + (lambda (form) + (mbh-chk-length>= form form 1) + (case (car form) + ((define-protocol-class) (parse-define-protocol-class form)) + (else (syntax-error form))))) + + (parse-define-protocol-class + (lambda (form) + (mbh-chk-length>= form form 2) + ;; form => (define-protocol-class name + ;; (:include protocol-class-name) + ;; (:incoming list-of-msgs) + ;; (:outgoing list-of-msgs)) + (let ((name (cadr form)) + (incoming '()) + (outgoing '())) + (if (lookup-protocol-class name) + (syntax-error "Duplicate protocol-class name" name)) + (for-each + (lambda (sub-form) + (mbh-chk-length>= sub-form sub-form 1) + (case (car sub-form) + ((:include) + (mbh-chk-length>= sub-form sub-form 2) + (cond ((lookup-protocol-class (cadr sub-form)) => + (lambda (pc) + (set! incoming (append incoming (protocol-class-incoming pc))) + (set! outgoing (append outgoing (protocol-class-outgoing pc))))) + (else + (syntax-error "Unknown protocol-class-name" (cadr sub-form))))) + ((:incoming) + (set! incoming (append incoming (cdr sub-form)))) + ((:outgoing) + (set! outgoing (append outgoing (cdr sub-form)))) + (else + (unrecognized-form (car sub-form))))) + (cddr form)) + + (register-protocol-class (make-protocol-class name incoming outgoing))))) + + ) ; end of bindings + + (for-each-in-file i-port parse-top-level-form) + + ;; generate the output here... + + (letrec ((classes (map cdr protocol-classes)) + (so-stream (make-serial-output-stream)) + (format-output-for-c++ + (lambda (output) + (format o-port "//~%") + (format o-port "// Machine generated by compile-mbh from ~a~%" input-filename) + (format o-port "//~%") + (format o-port "// protocol-classes: ~{~a ~}~%" (map car protocol-classes)) + (format o-port "//~%") + + (format o-port "#include ~%") + (format o-port "#include ~%") + (format o-port + "static const char~%protocol_class_init_data[~d] = {~% " + (length output)) + + (do ((lst output (cdr lst)) + (i 0 (+ i 1))) + ((null? lst) #t) + (format o-port "~a, " (car lst)) + (when (= 15 (modulo i 16)) + (format o-port "~% "))) + + (format o-port "~&};~%") + (format o-port "static mb_protocol_class_init _init_(protocol_class_init_data, sizeof(protocol_class_init_data));~%") + ))) + + + (map (lambda (pc) + (let ((obj-to-dump + (list (protocol-class-name pc) ; class name + (map car (protocol-class-incoming pc)) ; incoming msg names + (map car (protocol-class-outgoing pc)) ; outgoing msg names + ;;(protocol-class-incoming pc) ; full incoming msg descriptions + ;;(protocol-class-outgoing pc) ; full outgoing msg descriptions + ))) + ;;(pretty-print obj-to-dump) + (pmt-serialize obj-to-dump (so-stream 'put-byte)))) + classes) + + (format-output-for-c++ ((so-stream 'get-output))) + + #t)))) + + +(define (make-serial-output-stream) + (letrec ((output '()) + (put-byte + (lambda (byte) + (set! output (cons byte output)))) + (get-output + (lambda () + (reverse output)))) + (lambda (key) + (case key + ((put-byte) put-byte) + ((get-output) get-output) + (else (error "Unknown key" key)))))) + diff --git a/missing b/missing index 894e786e..1c8ff704 100755 --- a/missing +++ b/missing @@ -1,9 +1,9 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2005-06-08.21 +scriptversion=2006-05-10.23 -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. @@ -33,6 +33,8 @@ if test $# -eq 0; then fi run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. @@ -44,7 +46,7 @@ fi msg="missing on your system" -case "$1" in +case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= @@ -77,6 +79,7 @@ Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c @@ -106,7 +109,7 @@ esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). -case "$1" in +case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; @@ -135,7 +138,7 @@ esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. -case "$1" in +case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if @@ -164,7 +167,7 @@ WARNING: \`$1' is $msg. You should only need it if test -z "$files" && files="config.h" touch_files= for f in $files; do - case "$f" in + case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; @@ -192,8 +195,8 @@ WARNING: \`$1' is needed, but is $msg. You can get \`$1' as part of \`Autoconf' from any GNU archive site." - file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` - test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else @@ -214,25 +217,25 @@ WARNING: \`$1' $msg. You should only need it if in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then + if test $# -ne 1; then eval LASTARG="\${$#}" - case "$LASTARG" in + case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then + if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then + if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi - if [ ! -f y.tab.h ]; then + if test ! -f y.tab.h; then echo >y.tab.h fi - if [ ! -f y.tab.c ]; then + if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; @@ -244,18 +247,18 @@ WARNING: \`$1' is $msg. You should only need it if in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c - if [ $# -ne 1 ]; then + if test $# -ne 1; then eval LASTARG="\${$#}" - case "$LASTARG" in + case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then + if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi - if [ ! -f lex.yy.c ]; then + if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; @@ -267,11 +270,9 @@ WARNING: \`$1' is $msg. You should only need it if \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then touch $file else test -z "$file" || exec >$file @@ -289,11 +290,17 @@ WARNING: \`$1' is $msg. You should only need it if DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi @@ -317,13 +324,13 @@ WARNING: \`$1' is $msg. You should only need it if fi firstarg="$1" if shift; then - case "$firstarg" in + case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac - case "$firstarg" in + case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 diff --git a/omnithread/Makefile.am b/omnithread/Makefile.am new file mode 100644 index 00000000..88df2714 --- /dev/null +++ b/omnithread/Makefile.am @@ -0,0 +1,70 @@ +# +# Copyright 2003,2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = gnuradio + +# This is the omnithread package, +# extracted from the omniORB-4.0.1 distribution + +# we should do some configure hacking to determine these on the fly +OMNITHREAD_DEFINES = -DPthreadDraftVersion=10 + +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_DEFINES) $(OMNITHREAD_INCLUDES) \ + $(WITH_INCLUDES) + +# we call it libgromnithread to avoid a collision with libomnithread on Debian +lib_LTLIBRARIES = libgromnithread.la + +# At this point we only support the posix and nt pthreads i/f... + +if OMNITHREAD_POSIX +libgromnithread_la_SOURCES = \ + omni_time.cc \ + posix.cc +endif + +if OMNITHREAD_NT +libgromnithread_la_SOURCES = \ + omni_time.cc \ + nt.cc +endif + +libgromnithread_la_LDFLAGS = $(NO_UNDEFINED) + +libgromnithread_la_LIBADD = \ + $(PTHREAD_LIBS) + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gnuradio-omnithread.pc + +# ... but this code also came with the package + +EXTRA_DIST = \ + gnuradio-omnithread.pc.in \ + mach.cc \ + nt.cc \ + posix.cc \ + solaris.cc \ + threaddata.cc \ + vxWorks.cc \ + dir.mk diff --git a/omnithread/Makefile.in b/omnithread/Makefile.in new file mode 100644 index 00000000..220dc75a --- /dev/null +++ b/omnithread/Makefile.in @@ -0,0 +1,1198 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2003,2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/gnuradio-omnithread.pc.in \ + $(top_srcdir)/Makefile.common +subdir = omnithread +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = gnuradio-omnithread.pc +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgromnithread_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__libgromnithread_la_SOURCES_DIST = omni_time.cc nt.cc posix.cc +@OMNITHREAD_NT_FALSE@@OMNITHREAD_POSIX_TRUE@am_libgromnithread_la_OBJECTS = \ +@OMNITHREAD_NT_FALSE@@OMNITHREAD_POSIX_TRUE@ omni_time.lo \ +@OMNITHREAD_NT_FALSE@@OMNITHREAD_POSIX_TRUE@ posix.lo +@OMNITHREAD_NT_TRUE@am_libgromnithread_la_OBJECTS = omni_time.lo nt.lo +libgromnithread_la_OBJECTS = $(am_libgromnithread_la_OBJECTS) +libgromnithread_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libgromnithread_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libgromnithread_la_SOURCES) +DIST_SOURCES = $(am__libgromnithread_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = gnuradio + +# This is the omnithread package, +# extracted from the omniORB-4.0.1 distribution + +# we should do some configure hacking to determine these on the fly +OMNITHREAD_DEFINES = -DPthreadDraftVersion=10 +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_DEFINES) $(OMNITHREAD_INCLUDES) \ + $(WITH_INCLUDES) + + +# we call it libgromnithread to avoid a collision with libomnithread on Debian +lib_LTLIBRARIES = libgromnithread.la +@OMNITHREAD_NT_TRUE@libgromnithread_la_SOURCES = \ +@OMNITHREAD_NT_TRUE@ omni_time.cc \ +@OMNITHREAD_NT_TRUE@ nt.cc + + +# At this point we only support the posix and nt pthreads i/f... +@OMNITHREAD_POSIX_TRUE@libgromnithread_la_SOURCES = \ +@OMNITHREAD_POSIX_TRUE@ omni_time.cc \ +@OMNITHREAD_POSIX_TRUE@ posix.cc + +libgromnithread_la_LDFLAGS = $(NO_UNDEFINED) +libgromnithread_la_LIBADD = \ + $(PTHREAD_LIBS) + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = gnuradio-omnithread.pc + +# ... but this code also came with the package +EXTRA_DIST = \ + gnuradio-omnithread.pc.in \ + mach.cc \ + nt.cc \ + posix.cc \ + solaris.cc \ + threaddata.cc \ + vxWorks.cc \ + dir.mk + +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu omnithread/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu omnithread/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +gnuradio-omnithread.pc: $(top_builddir)/config.status $(srcdir)/gnuradio-omnithread.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgromnithread.la: $(libgromnithread_la_OBJECTS) $(libgromnithread_la_DEPENDENCIES) + $(libgromnithread_la_LINK) -rpath $(libdir) $(libgromnithread_la_OBJECTS) $(libgromnithread_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omni_time.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-libLTLIBRARIES \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnuradio-core/src/lib/omnithread/dir.mk b/omnithread/dir.mk similarity index 100% rename from gnuradio-core/src/lib/omnithread/dir.mk rename to omnithread/dir.mk diff --git a/omnithread/gnuradio-omnithread.pc.in b/omnithread/gnuradio-omnithread.pc.in new file mode 100644 index 00000000..0a94562e --- /dev/null +++ b/omnithread/gnuradio-omnithread.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/gnuradio + +Name: gnuradio-omnithread +Description: The GNU Radio omniORB threading library +Requires: +Version: @VERSION@ +Libs: -L${libdir} -lgromnithread +Cflags: -I${includedir} @DEFINES@ @PTHREAD_CFLAGS@ diff --git a/omnithread/gnuradio/Makefile.am b/omnithread/gnuradio/Makefile.am new file mode 100644 index 00000000..1ec56129 --- /dev/null +++ b/omnithread/gnuradio/Makefile.am @@ -0,0 +1,32 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +grinclude_HEADERS = \ + omnithread.h \ + omni_time.h \ + ot_mach.h \ + ot_nt.h \ + ot_posix.h \ + ot_pthread_nt.h \ + ot_solaris.h \ + ot_VxThread.h diff --git a/omnithread/gnuradio/Makefile.in b/omnithread/gnuradio/Makefile.in new file mode 100644 index 00000000..3615dde6 --- /dev/null +++ b/omnithread/gnuradio/Makefile.in @@ -0,0 +1,956 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grinclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = omnithread/gnuradio +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(grincludedir)" +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +grinclude_HEADERS = \ + omnithread.h \ + omni_time.h \ + ot_mach.h \ + ot_nt.h \ + ot_posix.h \ + ot_pthread_nt.h \ + ot_solaris.h \ + ot_VxThread.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu omnithread/gnuradio/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu omnithread/gnuradio/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(MKDIR_P) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(grincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-grincludeHEADERS install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/omnithread/gnuradio/omni_time.h b/omnithread/gnuradio/omni_time.h new file mode 100644 index 00000000..bfb15161 --- /dev/null +++ b/omnithread/gnuradio/omni_time.h @@ -0,0 +1,89 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 INCLUDED_OMNI_TIME_H +#define INCLUDED_OMNI_TIME_H + +struct omni_time { + long int d_secs; // seconds. + long int d_nsecs; // nanoseconds. Always in [0, 1e9-1] + + omni_time() : d_secs(0), d_nsecs(0) {} + omni_time(long secs, long nanosecs=0) : d_secs(secs), d_nsecs(nanosecs) {} + + // N.B., this only makes sense for differences between times. + // Double doesn't have enough bits to precisely represent an absolute time. + omni_time(double secs); + + // N.B. This only makes sense for differences between times. + // Double doesn't have enough bits to precisely represent an absolute time. + double double_time() const { return (double)d_secs + d_nsecs * 1e-9; } + + /*! + * \brief Return an absolute time suitable for use with + * schedule_one_shot_timeout & schedule_periodic_timeout + * + * The return value is the current time plus the given relative offset. + */ + static omni_time time(const omni_time &relative_offset = omni_time()); +}; + + +inline static bool +operator<(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs < y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs < y.d_nsecs)); +} + +inline static bool +operator>(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs > y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs > y.d_nsecs)); +} + +inline static bool +operator>=(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs > y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs >= y.d_nsecs)); +} + +inline static bool +operator<=(const omni_time &x, const omni_time &y) +{ + return ((x.d_secs < y.d_secs) + || (x.d_secs == y.d_secs && x.d_nsecs <= y.d_nsecs)); +} + +inline static bool +operator==(const omni_time &x, const omni_time &y) +{ + return (x.d_secs == y.d_secs && x.d_nsecs == y.d_nsecs); +} + + +omni_time operator+(const omni_time &x, const omni_time &y); +omni_time operator+(const omni_time &x, double y); +omni_time operator-(const omni_time &x, const omni_time &y); +omni_time operator-(const omni_time &x, double y); + +#endif /* INCLUDED_OMNI_TIME_H */ diff --git a/omnithread/gnuradio/omnithread.h b/omnithread/gnuradio/omnithread.h new file mode 100644 index 00000000..8e8162b1 --- /dev/null +++ b/omnithread/gnuradio/omnithread.h @@ -0,0 +1,626 @@ +// -*- Mode: C++; -*- +// Package : omnithread +// omnithread.h Created : 7/94 tjr +// +// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 1994,1995,1996, 1997 Olivetti & Oracle Research Laboratory +// +// This file is part of the omnithread library +// +// The omnithread library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Boston, MA +// 02110-1301, USA +// + +// +// Interface to OMNI thread abstraction. +// +// This file declares classes for threads and synchronisation objects +// (mutexes, condition variables and counting semaphores). +// +// Wherever a seemingly arbitrary choice has had to be made as to the interface +// provided, the intention here has been to be as POSIX-like as possible. This +// is why there is no semaphore timed wait, for example. +// + +#ifndef __omnithread_h_ +#define __omnithread_h_ + +#ifndef NULL +#define NULL 0 +#endif + +class omni_mutex; +class omni_condition; +class omni_semaphore; +class omni_thread; + +// +// OMNI_THREAD_EXPOSE can be defined as public or protected to expose the +// implementation class - this may be useful for debugging. Hopefully this +// won't change the underlying structure which the compiler generates so that +// this can work without recompiling the library. +// + +#ifndef OMNI_THREAD_EXPOSE +#define OMNI_THREAD_EXPOSE private +#endif + +// +// Include implementation-specific header file. +// +// This must define 4 CPP macros of the form OMNI_x_IMPLEMENTATION for mutex, +// condition variable, semaphore and thread. Each should define any +// implementation-specific members of the corresponding classes. +// + + +// +// For now, we assume they've always got a Posix Threads implementation. +// If not, it'll take some configure hacking to sort it out, along with +// the relevant libraries to link with, etc. +// + +#if !defined(OMNITHREAD_POSIX) && !defined(OMNITHREAD_NT) && defined HAVE_CONFIG_H +// #include // No, No, No! Never include from a header +#endif + +#if defined(OMNITHREAD_POSIX) +#include + +#elif defined(OMNITHREAD_NT) +#include + +#ifdef _MSC_VER + +// Using MSVC++ to compile. If compiling library as a DLL, +// define _OMNITHREAD_DLL. If compiling as a statuc library, define +// _WINSTATIC +// If compiling an application that is to be statically linked to omnithread, +// define _WINSTATIC (if the application is to be dynamically linked, +// there is no need to define any of these macros). + +#if defined (_OMNITHREAD_DLL) && defined(_WINSTATIC) +#error "Both _OMNITHREAD_DLL and _WINSTATIC are defined." +#elif defined(_OMNITHREAD_DLL) +#define _OMNITHREAD_NTDLL_ __declspec(dllexport) +#elif !defined(_WINSTATIC) +#define _OMNITHREAD_NTDLL_ __declspec(dllimport) +#elif defined(_WINSTATIC) +#define _OMNITHREAD_NTDLL_ +#endif + // _OMNITHREAD_DLL && _WINSTATIC + +#else + +// Not using MSVC++ to compile +#define _OMNITHREAD_NTDLL_ + +#endif + // _MSC_VER + +#elif defined(__vxWorks__) +#include + +#elif defined(__sunos__) +#if __OSVERSION__ != 5 +// XXX Workaround for SUN C++ compiler (seen on 4.2) Template.DB code +// regeneration bug. See omniORB2/CORBA_sysdep.h for details. +#if !defined(__SUNPRO_CC) || __OSVERSION__ != '5' +#error "Only SunOS 5.x or later is supported." +#endif +#endif +#ifdef UseSolarisThreads +#include +#else +#include +#endif + +#elif defined(__rtems__) +#include +#include + +#elif defined(__macos__) +#include +#include + +#else +#error "No implementation header file" +#endif + + +#if !defined(__WIN32__) +#define _OMNITHREAD_NTDLL_ +#endif + +#if (!defined(OMNI_MUTEX_IMPLEMENTATION) || \ + !defined(OMNI_MUTEX_LOCK_IMPLEMENTATION) || \ + !defined(OMNI_MUTEX_TRYLOCK_IMPLEMENTATION)|| \ + !defined(OMNI_MUTEX_UNLOCK_IMPLEMENTATION) || \ + !defined(OMNI_CONDITION_IMPLEMENTATION) || \ + !defined(OMNI_SEMAPHORE_IMPLEMENTATION) || \ + !defined(OMNI_THREAD_IMPLEMENTATION)) +#error "Implementation header file incomplete" +#endif + + +// +// This exception is thrown in the event of a fatal error. +// + +class _OMNITHREAD_NTDLL_ omni_thread_fatal { +public: + int error; + omni_thread_fatal(int e = 0) : error(e) {} +}; + + +// +// This exception is thrown when an operation is invoked with invalid +// arguments. +// + +class _OMNITHREAD_NTDLL_ omni_thread_invalid {}; + + +/////////////////////////////////////////////////////////////////////////// +// +// Mutex +// +/////////////////////////////////////////////////////////////////////////// + +class _OMNITHREAD_NTDLL_ omni_mutex { + +public: + omni_mutex(void); + ~omni_mutex(void); + + inline void lock(void) { OMNI_MUTEX_LOCK_IMPLEMENTATION } + inline void unlock(void) { OMNI_MUTEX_UNLOCK_IMPLEMENTATION } + inline int trylock(void) { return OMNI_MUTEX_TRYLOCK_IMPLEMENTATION } + // if mutex is unlocked, lock it and return 1 (true). + // If it's already locked then return 0 (false). + + inline void acquire(void) { lock(); } + inline void release(void) { unlock(); } + // the names lock and unlock are preferred over acquire and release + // since we are attempting to be as POSIX-like as possible. + + friend class omni_condition; + +private: + // dummy copy constructor and operator= to prevent copying + omni_mutex(const omni_mutex&); + omni_mutex& operator=(const omni_mutex&); + +OMNI_THREAD_EXPOSE: + OMNI_MUTEX_IMPLEMENTATION +}; + +// +// As an alternative to: +// { +// mutex.lock(); +// ..... +// mutex.unlock(); +// } +// +// you can use a single instance of the omni_mutex_lock class: +// +// { +// omni_mutex_lock l(mutex); +// .... +// } +// +// This has the advantage that mutex.unlock() will be called automatically +// when an exception is thrown. +// + +class _OMNITHREAD_NTDLL_ omni_mutex_lock { + omni_mutex& mutex; +public: + omni_mutex_lock(omni_mutex& m) : mutex(m) { mutex.lock(); } + ~omni_mutex_lock(void) { mutex.unlock(); } +private: + // dummy copy constructor and operator= to prevent copying + omni_mutex_lock(const omni_mutex_lock&); + omni_mutex_lock& operator=(const omni_mutex_lock&); +}; + + +/////////////////////////////////////////////////////////////////////////// +// +// Condition variable +// +/////////////////////////////////////////////////////////////////////////// + +class _OMNITHREAD_NTDLL_ omni_condition { + + omni_mutex* mutex; + +public: + omni_condition(omni_mutex* m); + // constructor must be given a pointer to an existing mutex. The + // condition variable is then linked to the mutex, so that there is an + // implicit unlock and lock around wait() and timed_wait(). + + ~omni_condition(void); + + void wait(void); + // wait for the condition variable to be signalled. The mutex is + // implicitly released before waiting and locked again after waking up. + // If wait() is called by multiple threads, a signal may wake up more + // than one thread. See POSIX threads documentation for details. + + int timedwait(unsigned long secs, unsigned long nanosecs = 0); + // timedwait() is given an absolute time to wait until. To wait for a + // relative time from now, use omni_thread::get_time. See POSIX threads + // documentation for why absolute times are better than relative. + // Returns 1 (true) if successfully signalled, 0 (false) if time + // expired. + + void signal(void); + // if one or more threads have called wait(), signal wakes up at least + // one of them, possibly more. See POSIX threads documentation for + // details. + + void broadcast(void); + // broadcast is like signal but wakes all threads which have called + // wait(). + +private: + // dummy copy constructor and operator= to prevent copying + omni_condition(const omni_condition&); + omni_condition& operator=(const omni_condition&); + +OMNI_THREAD_EXPOSE: + OMNI_CONDITION_IMPLEMENTATION +}; + + +/////////////////////////////////////////////////////////////////////////// +// +// Counting (or binary) semaphore +// +/////////////////////////////////////////////////////////////////////////// + +class _OMNITHREAD_NTDLL_ omni_semaphore { + +public: + // if max_count == 1, you've got a binary semaphore. + omni_semaphore(unsigned int initial = 1, unsigned int max_count = 0x7fffffff); + ~omni_semaphore(void); + + void wait(void); + // if semaphore value is > 0 then decrement it and carry on. If it's + // already 0 then block. + + int trywait(void); + // if semaphore value is > 0 then decrement it and return 1 (true). + // If it's already 0 then return 0 (false). + + void post(void); + // if any threads are blocked in wait(), wake one of them up. Otherwise + // increment the value of the semaphore. + +private: + // dummy copy constructor and operator= to prevent copying + omni_semaphore(const omni_semaphore&); + omni_semaphore& operator=(const omni_semaphore&); + +OMNI_THREAD_EXPOSE: + OMNI_SEMAPHORE_IMPLEMENTATION +}; + +// +// A helper class for semaphores, similar to omni_mutex_lock above. +// + +class _OMNITHREAD_NTDLL_ omni_semaphore_lock { + omni_semaphore& sem; +public: + omni_semaphore_lock(omni_semaphore& s) : sem(s) { sem.wait(); } + ~omni_semaphore_lock(void) { sem.post(); } +private: + // dummy copy constructor and operator= to prevent copying + omni_semaphore_lock(const omni_semaphore_lock&); + omni_semaphore_lock& operator=(const omni_semaphore_lock&); +}; + + +/////////////////////////////////////////////////////////////////////////// +// +// Thread +// +/////////////////////////////////////////////////////////////////////////// + +class _OMNITHREAD_NTDLL_ omni_thread { + +public: + + enum priority_t { + PRIORITY_LOW, + PRIORITY_NORMAL, + PRIORITY_HIGH + }; + + enum state_t { + STATE_NEW, // thread object exists but thread hasn't + // started yet. + STATE_RUNNING, // thread is running. + STATE_TERMINATED // thread has terminated but storage has not + // been reclaimed (i.e. waiting to be joined). + }; + + // + // Constructors set up the thread object but the thread won't start until + // start() is called. The create method can be used to construct and start + // a thread in a single call. + // + + omni_thread(void (*fn)(void*), void* arg = NULL, + priority_t pri = PRIORITY_NORMAL); + omni_thread(void* (*fn)(void*), void* arg = NULL, + priority_t pri = PRIORITY_NORMAL); + // these constructors create a thread which will run the given function + // when start() is called. The thread will be detached if given a + // function with void return type, undetached if given a function + // returning void*. If a thread is detached, storage for the thread is + // reclaimed automatically on termination. Only an undetached thread + // can be joined. + + void start(void); + // start() causes a thread created with one of the constructors to + // start executing the appropriate function. + +protected: + + omni_thread(void* arg = NULL, priority_t pri = PRIORITY_NORMAL); + // this constructor is used in a derived class. The thread will + // execute the run() or run_undetached() member functions depending on + // whether start() or start_undetached() is called respectively. + +public: + + void start_undetached(void); + // can be used with the above constructor in a derived class to cause + // the thread to be undetached. In this case the thread executes the + // run_undetached member function. + +protected: + + virtual ~omni_thread(void); + // destructor cannot be called by user (except via a derived class). + // Use exit() or cancel() instead. This also means a thread object must + // be allocated with new - it cannot be statically or automatically + // allocated. The destructor of a class that inherits from omni_thread + // shouldn't be public either (otherwise the thread object can be + // destroyed while the underlying thread is still running). + +public: + + void join(void**); + // join causes the calling thread to wait for another's completion, + // putting the return value in the variable of type void* whose address + // is given (unless passed a null pointer). Only undetached threads + // may be joined. Storage for the thread will be reclaimed. + + void set_priority(priority_t); + // set the priority of the thread. + + static omni_thread* create(void (*fn)(void*), void* arg = NULL, + priority_t pri = PRIORITY_NORMAL); + static omni_thread* create(void* (*fn)(void*), void* arg = NULL, + priority_t pri = PRIORITY_NORMAL); + // create spawns a new thread executing the given function with the + // given argument at the given priority. Returns a pointer to the + // thread object. It simply constructs a new thread object then calls + // start. + + static void exit(void* return_value = NULL); + // causes the calling thread to terminate. + + static omni_thread* self(void); + // returns the calling thread's omni_thread object. If the + // calling thread is not the main thread and is not created + // using this library, returns 0. (But see create_dummy() + // below.) + + static void yield(void); + // allows another thread to run. + + static void sleep(unsigned long secs, unsigned long nanosecs = 0); + // sleeps for the given time. + + static void get_time(unsigned long* abs_sec, unsigned long* abs_nsec, + unsigned long rel_sec = 0, unsigned long rel_nsec=0); + // calculates an absolute time in seconds and nanoseconds, suitable for + // use in timed_waits on condition variables, which is the current time + // plus the given relative offset. + + + static void stacksize(unsigned long sz); + static unsigned long stacksize(); + // Use this value as the stack size when spawning a new thread. + // The default value (0) means that the thread library default is + // to be used. + + + // Per-thread data + // + // These functions allow you to attach additional data to an + // omni_thread. First allocate a key for yourself with + // allocate_key(). Then you can store any object whose class is + // derived from value_t. Any values still stored in the + // omni_thread when the thread exits are deleted. + // + // These functions are NOT thread safe, so you should be very + // careful about setting/getting data in a different thread to the + // current thread. + + typedef unsigned int key_t; + static key_t allocate_key(); + + class value_t { + public: + virtual ~value_t() {} + }; + + value_t* set_value(key_t k, value_t* v); + // Sets a value associated with the given key. The key must + // have been allocated with allocate_key(). If a value has + // already been set with the specified key, the old value_t + // object is deleted and replaced. Returns the value which was + // set, or zero if the key is invalid. + + value_t* get_value(key_t k); + // Returns the value associated with the key. If the key is + // invalid, or there is no value for the key, returns zero. + + value_t* remove_value(key_t k); + // Removes the value associated with the key and returns it. + // If the key is invalid, or there is no value for the key, + // returns zero. + + + // Dummy omni_thread + // + // Sometimes, an application finds itself with threads created + // outside of omnithread which must interact with omnithread + // features such as the per-thread data. In this situation, + // omni_thread::self() would normally return 0. These functions + // allow the application to create a suitable dummy omni_thread + // object. + + static omni_thread* create_dummy(void); + // creates a dummy omni_thread for the calling thread. Future + // calls to self() will return the dummy omni_thread. Throws + // omni_thread_invalid if this thread already has an + // associated omni_thread (real or dummy). + + static void release_dummy(); + // release the dummy omni_thread for this thread. This + // function MUST be called before the thread exits. Throws + // omni_thread_invalid if the calling thread does not have a + // dummy omni_thread. + + // class ensure_self should be created on the stack. If created in + // a thread without an associated omni_thread, it creates a dummy + // thread which is released when the ensure_self object is deleted. + + class ensure_self { + public: + inline ensure_self() : _dummy(0) + { + _self = omni_thread::self(); + if (!_self) { + _dummy = 1; + _self = omni_thread::create_dummy(); + } + } + inline ~ensure_self() + { + if (_dummy) + omni_thread::release_dummy(); + } + inline omni_thread* self() { return _self; } + private: + omni_thread* _self; + int _dummy; + }; + + +private: + + virtual void run(void* /*arg*/) {} + virtual void* run_undetached(void* /*arg*/) { return NULL; } + // can be overridden in a derived class. When constructed using the + // the constructor omni_thread(void*, priority_t), these functions are + // called by start() and start_undetached() respectively. + + void common_constructor(void* arg, priority_t pri, int det); + // implements the common parts of the constructors. + + omni_mutex mutex; + // used to protect any members which can change after construction, + // i.e. the following 2 members. + + state_t _state; + priority_t _priority; + + static omni_mutex* next_id_mutex; + static int next_id; + int _id; + + void (*fn_void)(void*); + void* (*fn_ret)(void*); + void* thread_arg; + int detached; + int _dummy; + value_t** _values; + unsigned long _value_alloc; + + omni_thread(const omni_thread&); + omni_thread& operator=(const omni_thread&); + // Not implemented + +public: + + priority_t priority(void) { + + // return this thread's priority. + + omni_mutex_lock l(mutex); + return _priority; + } + + state_t state(void) { + + // return thread state (invalid, new, running or terminated). + + omni_mutex_lock l(mutex); + return _state; + } + + int id(void) { return _id; } + // return unique thread id within the current process. + + + // This class plus the instance of it declared below allows us to execute + // some initialisation code before main() is called. + + class _OMNITHREAD_NTDLL_ init_t { + public: + init_t(void); + ~init_t(void); + }; + + friend class init_t; + friend class omni_thread_dummy; + +OMNI_THREAD_EXPOSE: + OMNI_THREAD_IMPLEMENTATION +}; + +#ifndef __rtems__ +static omni_thread::init_t omni_thread_init; +#else +// RTEMS calls global Ctor/Dtor in a context that is not +// a posix thread. Calls to functions to pthread_self() in +// that context returns NULL. +// So, for RTEMS we will make the thread initialization at the +// beginning of the Init task that has a posix context. +#endif + +#endif diff --git a/gnuradio-core/src/lib/omnithread/ot_VxThread.h b/omnithread/gnuradio/ot_VxThread.h similarity index 100% rename from gnuradio-core/src/lib/omnithread/ot_VxThread.h rename to omnithread/gnuradio/ot_VxThread.h diff --git a/gnuradio-core/src/lib/omnithread/ot_mach.h b/omnithread/gnuradio/ot_mach.h similarity index 100% rename from gnuradio-core/src/lib/omnithread/ot_mach.h rename to omnithread/gnuradio/ot_mach.h diff --git a/gnuradio-core/src/lib/omnithread/ot_nt.h b/omnithread/gnuradio/ot_nt.h similarity index 100% rename from gnuradio-core/src/lib/omnithread/ot_nt.h rename to omnithread/gnuradio/ot_nt.h diff --git a/gnuradio-core/src/lib/omnithread/ot_posix.h b/omnithread/gnuradio/ot_posix.h similarity index 100% rename from gnuradio-core/src/lib/omnithread/ot_posix.h rename to omnithread/gnuradio/ot_posix.h diff --git a/omnithread/gnuradio/ot_pthread_nt.h b/omnithread/gnuradio/ot_pthread_nt.h new file mode 100644 index 00000000..324b5257 --- /dev/null +++ b/omnithread/gnuradio/ot_pthread_nt.h @@ -0,0 +1,186 @@ +/* Package : omnithread + omnithread/pthread_nt.h Created : Steven Brenneis + + Copyright (C) 1998 Steven Brennes + + This file is part of the omnithread library + + The omnithread library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 51 Franklin Street, Boston, MA + 02110-1301, USA + + Posix Threads implementation for Windows NT, version 4.0 +*/ + +#ifndef PTHREAD_NT_H_INCLUDED +#define PTHREAD_NT_H_INCLUDED + +#include + +#ifndef ETIMEDOUT +// May have to be changed if NT starts supporting more errno values +#define ETIMEDOUT 60 +#endif + +#undef PthreadDraftVersion +#define PthreadDraftVersion 10 + +#define NoNanoSleep + +#define PthreadSupportThreadPriority + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _TIMERS_T_ +#define _TIMERS_T_ + typedef struct timespec { + unsigned long tv_sec; + long tv_nsec; + } timespec_t; +#endif + +typedef char* __pthreadLongString_t; +typedef void* __pthreadLongAddr_t; +typedef __pthreadLongAddr_t* __pthreadLongAddr_p; +typedef long __pthreadLongInt_t; +typedef unsigned long __pthreadLongUint_t; +typedef __pthreadLongAddr_p __pthreadTsd_t; + +typedef struct __pthread_mutex_t { + unsigned int lock; /* LOCK, SLOW, TYPE, RECURSIVE */ + unsigned int valid; /* Validation info */ + __pthreadLongString_t name; /* Name of mutex */ + unsigned int arg; /* printf argument for name */ + unsigned int depth; /* Recursive lock depth */ + unsigned long sequence; /* Mutex sequence number */ + unsigned long owner; /* Current owner (if known */ + __pthreadLongAddr_t block; /* Pointer to blocking struct */ +} pthread_mutex_t; + +typedef struct __pthread_mutexattr_t { + long valid; + __pthreadLongUint_t reserved[15]; +} pthread_mutexattr_t; + +typedef struct __pthread_cond_t { + unsigned int state; /* EVENT, SLOW, REFCNT */ + unsigned int valid; /* Validation info */ + __pthreadLongString_t name; /* Name of condition variable */ + unsigned int arg; /* printf argument for name */ + unsigned long sequence; /* Condition variable seq # */ + __pthreadLongAddr_t block; /* Pointer to blocking struct */ +} pthread_cond_t ; + +typedef struct __pthread_condattr_t { + long valid; + __pthreadLongUint_t reserved[13]; +} pthread_condattr_t ; + +typedef struct __pthread_transp_t { + __pthreadLongAddr_t reserved1; /* Reserved to posix_nt */ + __pthreadLongAddr_t reserved2; /* Reserved to posix_nt */ + unsigned short size; /* Size of data structure */ + unsigned char reserved3[2]; /* Reserved to posix_nt */ + __pthreadLongAddr_t reserved4; /* Reserved to posix_nt */ + __pthreadLongUint_t sequence; /* Thread sequence number */ + __pthreadLongUint_t reserved5[2]; /* Reserved to posix_nt */ + __pthreadLongAddr_t per_kt_area; /* Pointer to kernel context */ + __pthreadLongAddr_t stack_base; /* Current stack base */ + __pthreadLongAddr_t stack_reserve; /* Current stack reserve zone */ + __pthreadLongAddr_t stack_yellow; /* Current stack yellow zone */ + __pthreadLongAddr_t stack_guard; /* Current stack guard zone */ + __pthreadLongUint_t stack_size; /* Size of stack */ + __pthreadTsd_t tsd_values; /* TSD array (indexed by key) */ + unsigned long tsd_count; /* Number of TSD cells */ + __pthreadLongAddr_t reserved6; /* Reserved to posix_nt */ + __pthreadLongAddr_t reserved7; /* Reserved to posix_nt */ + unsigned int thread_flags; /* Dynamic external state */ +} pthread_transp_t, *pthread_transp_p; + +typedef pthread_transp_p pthread_t; + +typedef struct __pthread_attr_t { + long valid; + __pthreadLongString_t name; + __pthreadLongUint_t arg; + __pthreadLongUint_t reserved[19]; +} pthread_attr_t ; + +typedef unsigned int pthread_key_t; + +typedef struct sched_param { + int sched_priority; +} sched_param_t; + +/* Function Prototypes */ + +int pthread_create(pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine)(void*), void *arg); +int pthread_detach(pthread_t thread); +int pthread_join(pthread_t thread, void **value_ptr); +void pthread_exit(void *value_ptr); +int pthread_attr_init(pthread_attr_t *attr); +int pthread_attr_destroy(pthread_attr_t *attr); +int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); +int pthread_attr_getstacksize(const pthread_attr_t *attr, + size_t *stacksize); +int pthread_cond_init(pthread_cond_t *cond, + const pthread_condattr_t *attr); +int pthread_cond_destroy(pthread_cond_t *cond); +int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); +int pthread_cond_timedwait(pthread_cond_t *cond, + pthread_mutex_t *mutex, + const struct timespec *abstime); +int pthread_cond_signal(pthread_cond_t *cond); +int pthread_cond_broadcast(pthread_cond_t *cond); +int pthread_key_create(pthread_key_t *key, void (*destructor)(void*)); +int pthread_key_delete(pthread_key_t key); +int pthread_mutex_destroy(pthread_mutex_t *mutex); +int pthread_mutex_init(pthread_mutex_t *mutex, + const pthread_mutexattr_t *attr); +int pthread_mutex_lock(pthread_mutex_t *mutex); +int pthread_mutex_trylock(pthread_mutex_t *mutex); +int pthread_mutex_unlock(pthread_mutex_t *mutex); +pthread_t pthread_self(); +int pthread_setspecific(pthread_key_t key, const void *value); +void *pthread_getspecific(pthread_key_t key); +int pthread_getschedparam(pthread_t thread, int *policy, + struct sched_param *param); +int pthread_setschedparam(pthread_t thread, int policy, + const struct sched_param *param); +int pthread_attr_setschedparam(pthread_attr_t *attr, + const struct sched_param *param); +int pthread_attr_getschedparam(const pthread_attr_t *attr, + struct sched_param *param); + +int pthread_delay_np(const struct timespec *interval); +int pthread_get_expiration_np(const struct timespec *delta, + struct timespec *abstime); + +# define SCHED_FIFO 1 +# define SCHED_RR 2 +# define SCHED_OTHER 3 + +int sched_yield(); +int sched_get_priority_max(int policy); +int sched_get_priority_min(int policy); + + +#ifdef __cplusplus +} +#endif + +#endif // PTHREAD_NT_H_INCLUDED diff --git a/gnuradio-core/src/lib/omnithread/ot_solaris.h b/omnithread/gnuradio/ot_solaris.h similarity index 100% rename from gnuradio-core/src/lib/omnithread/ot_solaris.h rename to omnithread/gnuradio/ot_solaris.h diff --git a/omnithread/mach.cc b/omnithread/mach.cc new file mode 100644 index 00000000..aa0465f4 --- /dev/null +++ b/omnithread/mach.cc @@ -0,0 +1,714 @@ +// Package : omnithread +// omnithread/mach.cc Created : 7/97 lars immisch lars@ibp.de +// +// Copyright (C) 1997 Immisch, Becker & Partner +// +// This file is part of the omnithread library +// +// The omnithread library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Boston, MA +// 02110-1301, USA +// + +// +// Implementation of OMNI thread abstraction for mach threads +// +// to the author's pleasure, mach cthreads are very similar to posix threads +// + +#include +#include +#include +#include +#include "gnuradio/omnithread.h" + +#define DB(x) // x +// #include or #include if DB is on. + +#define ERRNO(x) (x) + +// +// static variables +// + +int omni_thread::init_t::count = 0; + +omni_mutex* omni_thread::next_id_mutex; +int omni_thread::next_id = 0; + +static int normal_priority; +static int highest_priority; + +static size_t stack_size = 0; + +/////////////////////////////////////////////////////////////////////////// +// +// Mutex +// +/////////////////////////////////////////////////////////////////////////// + + +omni_mutex::omni_mutex(void) +{ + mutex_init(&mach_mutex); +} + + +omni_mutex::~omni_mutex(void) +{ + mutex_clear(&mach_mutex); +} + + +void omni_mutex::lock(void) +{ + mutex_lock(&mach_mutex); +} + + +void omni_mutex::unlock(void) +{ + mutex_unlock(&mach_mutex); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Condition variable +// +/////////////////////////////////////////////////////////////////////////// + + +omni_condition::omni_condition(omni_mutex* m) : mutex(m) +{ + condition_init(&mach_cond); +} + + +omni_condition::~omni_condition(void) +{ + condition_clear(&mach_cond); +} + +void +omni_condition::wait(void) +{ + condition_wait(&mach_cond, &mutex->mach_mutex); +} + +typedef struct alarmclock_args { + unsigned long secs; + unsigned long nsecs; + bool wakeup; + condition_t condition; + mutex_t mutex; +}; + +any_t alarmclock(any_t arg) +{ + alarmclock_args* alarm = (alarmclock_args*)arg; + + omni_thread::sleep(alarm->secs, alarm->nsecs); + + mutex_lock(alarm->mutex); + + alarm->wakeup = TRUE; + + condition_signal(alarm->condition); + + mutex_unlock(alarm->mutex); + + return (any_t)TRUE; +} + +int omni_condition::timedwait(unsigned long abs_secs, unsigned long abs_nsecs) +{ + alarmclock_args alarm; + + omni_thread::get_time(&alarm.secs, &alarm.nsecs, 0, 0); + + if (abs_secs < alarm.secs || (abs_secs == alarm.secs && abs_nsecs <= alarm.nsecs)) + return ETIMEDOUT; + + alarm.secs = abs_secs - alarm.secs; + if (abs_nsecs <= alarm.nsecs) { + alarm.nsecs = 1000000 - alarm.nsecs + abs_nsecs; + alarm.secs--; + } + else { + alarm.nsecs = abs_nsecs - alarm.nsecs; + } + + alarm.mutex = &mutex->mach_mutex; + alarm.condition = &mach_cond; + alarm.wakeup = FALSE; + + cthread_t ct = cthread_fork((cthread_fn_t)alarmclock, (any_t)&alarm); + cthread_detach(ct); + + condition_wait(&mach_cond, &mutex->mach_mutex); + + if (alarm.wakeup) { + return 0; + } + + // interrupt the alarmclock thread sleep + cthread_abort(ct); + + // wait until it has signalled the condition + condition_wait(&mach_cond, &mutex->mach_mutex); + + return 1; +} + + +void omni_condition::signal(void) +{ + condition_signal(&mach_cond); +} + + +void omni_condition::broadcast(void) +{ + condition_signal(&mach_cond); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Counting semaphore +// +/////////////////////////////////////////////////////////////////////////// + + +omni_semaphore::omni_semaphore(unsigned int initial) : c(&m) +{ + value = initial; +} + + +omni_semaphore::~omni_semaphore(void) +{ +} + + +void +omni_semaphore::wait(void) +{ + omni_mutex_lock l(m); + + while (value == 0) + c.wait(); + + value--; +} + + +int +omni_semaphore::trywait(void) +{ + omni_mutex_lock l(m); + + if (value == 0) + return 0; + + value--; + return 1; +} + + +void +omni_semaphore::post(void) +{ + omni_mutex_lock l(m); + + if (value == 0) + c.signal(); + + value++; +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Thread +// +/////////////////////////////////////////////////////////////////////////// + + + +// +// Initialisation function (gets called before any user code). +// + +omni_thread::init_t::init_t(void) +{ + if (count++ != 0) // only do it once however many objects get created. + return; + + // + // find base and max priority. + // This is the initial thread, so the max priority of this + // thread also applies to any newly created thread. + // + + kern_return_t error; + struct thread_sched_info info; + unsigned int info_count = THREAD_SCHED_INFO_COUNT; + + error = thread_info(thread_self(), THREAD_SCHED_INFO, (thread_info_t)&info, &info_count); + if (error != KERN_SUCCESS) { + DB(cerr << "omni_thread::init: error determining thread_info" << endl); + ::exit(1); + } + else { + normal_priority = info.base_priority; + highest_priority = info.max_priority; + } + + next_id_mutex = new omni_mutex; + + // + // Create object for this (i.e. initial) thread. + // + + omni_thread* t = new omni_thread; + + if (t->_state != STATE_NEW) { + DB(cerr << "omni_thread::init: problem creating initial thread object\n"); + ::exit(1); + } + + t->_state = STATE_RUNNING; + + t->mach_thread = cthread_self(); + + DB(cerr << "initial thread " << t->id() << endl); + + cthread_set_data(t->mach_thread, (any_t)t); +} + + +// +// Wrapper for thread creation. +// + +extern "C" void* +omni_thread_wrapper(void* ptr) +{ + omni_thread* me = (omni_thread*)ptr; + + DB(cerr << "omni_thread::wrapper: thread " << me->id() + << " started\n"); + + cthread_set_data(cthread_self(), (any_t)me); + + // + // Now invoke the thread function with the given argument. + // + + if (me->fn_void != NULL) { + (*me->fn_void)(me->thread_arg); + omni_thread::exit(); + } + + if (me->fn_ret != NULL) { + void* return_value = (*me->fn_ret)(me->thread_arg); + omni_thread::exit(return_value); + } + + if (me->detached) { + me->run(me->thread_arg); + omni_thread::exit(); + } else { + void* return_value = me->run_undetached(me->thread_arg); + omni_thread::exit(return_value); + } + + // should never get here. + + return NULL; +} + + +// +// Constructors for omni_thread - set up the thread object but don't +// start it running. +// + +// construct a detached thread running a given function. + +omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = fn; + fn_ret = NULL; +} + +// construct an undetached thread running a given function. + +omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 0); + fn_void = NULL; + fn_ret = fn; +} + +// construct a thread which will run either run() or run_undetached(). + +omni_thread::omni_thread(void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = NULL; + fn_ret = NULL; +} + +// common part of all constructors. + +void omni_thread::common_constructor(void* arg, priority_t pri, int det) +{ + _state = STATE_NEW; + _priority = pri; + + next_id_mutex->lock(); + _id = next_id++; + next_id_mutex->unlock(); + + thread_arg = arg; + detached = det; // may be altered in start_undetached() + + _dummy = 0; + _values = 0; + _value_alloc = 0; + // posix_thread is set up in initialisation routine or start(). +} + + +// +// Destructor for omni_thread. +// + +omni_thread::~omni_thread(void) +{ + DB(cerr << "destructor called for thread " << id() << endl); + if (_values) { + for (key_t i=0; i < _value_alloc; i++) { + if (_values[i]) { + delete _values[i]; + } + } + delete [] _values; + } +} + + +// +// Start the thread +// + +void +omni_thread::start(void) +{ + omni_mutex_lock l(mutex); + + int rc; + + if (_state != STATE_NEW) + throw omni_thread_invalid(); + + mach_thread = cthread_fork(omni_thread_wrapper, (any_t)this); + + _state = STATE_RUNNING; + + if (detached) { + cthread_detach(mach_thread); + } +} + +// +// Start a thread which will run the member function run_undetached(). +// + +void +omni_thread::start_undetached(void) +{ + if ((fn_void != NULL) || (fn_ret != NULL)) + throw omni_thread_invalid(); + + detached = 0; + start(); +} + + +// +// join - simply check error conditions & call cthread_join. +// + +void +omni_thread::join(void** status) +{ + mutex.lock(); + + if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { + mutex.unlock(); + throw omni_thread_invalid(); + } + + mutex.unlock(); + + if (this == self()) + throw omni_thread_invalid(); + + if (detached) + throw omni_thread_invalid(); + + DB(cerr << "omni_thread::join: doing cthread_join\n"); + + *status = cthread_join(mach_thread); + + delete this; +} + + +// +// Change this thread's priority. +// + +void +omni_thread::set_priority(priority_t pri) +{ + omni_mutex_lock l(mutex); + + if (_state != STATE_RUNNING) + throw omni_thread_invalid(); + + _priority = pri; + + kern_return_t rc = cthread_priority(mach_thread, mach_priority(pri), FALSE); + + if (rc != KERN_SUCCESS) + throw omni_thread_fatal(errno); +} + +// +// create - construct a new thread object and start it running. Returns thread +// object if successful, null pointer if not. +// + +// detached version + +omni_thread* +omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + +// undetached version + +omni_thread* +omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + +// +// exit() _must_ lock the mutex even in the case of a detached thread. This is +// because a thread may run to completion before the thread that created it has +// had a chance to get out of start(). By locking the mutex we ensure that the +// creating thread must have reached the end of start() before we delete the +// thread object. Of course, once the call to start() returns, the user can +// still incorrectly refer to the thread object, but that's their problem. +// + +void omni_thread::exit(void* return_value) +{ + omni_thread* me = self(); + + if (me) + { + me->mutex.lock(); + + if (me->_state != STATE_RUNNING) + DB(cerr << "omni_thread::exit: thread not in \"running\" state\n"); + + me->_state = STATE_TERMINATED; + + me->mutex.unlock(); + + DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " + << me->detached << " return value " << return_value << endl); + + if (me->detached) + delete me; + } + else + { + DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); + } + cthread_exit(return_value); +} + +omni_thread* omni_thread::self(void) +{ + omni_thread* me; + + me = (omni_thread*)cthread_data(cthread_self()); + + if (!me) { + // This thread is not created by omni_thread::start because it + // doesn't has a class omni_thread instance attached to its key. + DB(cerr << "omni_thread::self: called with a non-ominthread. NULL is returned." << endl); + } + + return me; +} + +void omni_thread::yield(void) +{ + cthread_yield(); +} + +#define MAX_SLEEP_SECONDS (unsigned)4294966 // (2**32-2)/1000 + +void +omni_thread::sleep(unsigned long secs, unsigned long nanosecs) +{ + if (secs <= MAX_SLEEP_SECONDS) { + thread_switch(THREAD_NULL, SWITCH_OPTION_WAIT, secs * 1000 + nanosecs / 1000000); + return; + } + + unsigned no_of_max_sleeps = secs / MAX_SLEEP_SECONDS; + + for (unsigned i = 0; i < no_of_max_sleeps; i++) + thread_switch(THREAD_NULL, SWITCH_OPTION_WAIT, MAX_SLEEP_SECONDS * 1000); + + thread_switch(THREAD_NULL, SWITCH_OPTION_WAIT, + (secs % MAX_SLEEP_SECONDS) * 1000 + nanosecs / 1000000); + + return; +} + +void +omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, + unsigned long rel_sec, unsigned long rel_nsec) +{ + int rc; + unsigned long tv_sec; + unsigned long tv_nsec; + struct timeval tv; + + rc = gettimeofday(&tv, NULL); + if (rc) throw omni_thread_fatal(rc); + + tv_sec = tv.tv_sec; + tv_nsec = tv.tv_usec * 1000; + + tv_nsec += rel_nsec; + tv_sec += rel_sec + tv_nsec / 1000000000; + tv_nsec = tv_nsec % 1000000000; + + *abs_sec = tv_sec; + *abs_nsec = tv_nsec; +} + + +int +omni_thread::mach_priority(priority_t pri) +{ + switch (pri) { + + case PRIORITY_LOW: + return 0; + + case PRIORITY_NORMAL: + return normal_priority; + + case PRIORITY_HIGH: + return highest_priority; + + default: + return -1; + } +} + +void +omni_thread::stacksize(unsigned long sz) +{ + stack_size = sz; +} + +unsigned long +omni_thread::stacksize() +{ + return stack_size; +} + + +// +// Dummy thread +// + +#error This dummy thread code is not tested. It might work if you're lucky. + +class omni_thread_dummy : public omni_thread { +public: + inline omni_thread_dummy() : omni_thread() + { + _dummy = 1; + _state = STATE_RUNNING; + mach_thread = cthread_self(); + cthread_set_data(mach_thread, (any_t)this)); + } + inline ~omni_thread_dummy() + { + cthread_set_data(mach_thread, (any_t)0)); + } +}; + +omni_thread* +omni_thread::create_dummy() +{ + if (omni_thread::self()) + throw omni_thread_invalid(); + + return new omni_thread_dummy; +} + +void +omni_thread::release_dummy() +{ + omni_thread* self = omni_thread::self(); + if (!self || !self->_dummy) + throw omni_thread_invalid(); + + omni_thread_dummy* dummy = (omni_thread_dummy*)self; + delete dummy; +} + + +#define INSIDE_THREAD_IMPL_CC +#include "threaddata.cc" +#undef INSIDE_THREAD_IMPL_CC diff --git a/omnithread/nt.cc b/omnithread/nt.cc new file mode 100644 index 00000000..2c97d621 --- /dev/null +++ b/omnithread/nt.cc @@ -0,0 +1,969 @@ +// Package : omnithread +// omnithread/nt.cc Created : 6/95 tjr +// +// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 1995-1999 AT&T Laboratories Cambridge +// +// This file is part of the omnithread library +// +// The omnithread library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Boston, MA +// 02110-1301, USA +// + +// +// Implementation of OMNI thread abstraction for NT threads +// + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#define DB(x) // x +//#include or #include if DB is on. + +static void get_time_now(unsigned long* abs_sec, unsigned long* abs_nsec); + +/////////////////////////////////////////////////////////////////////////// +// +// Mutex +// +/////////////////////////////////////////////////////////////////////////// + + +omni_mutex::omni_mutex(void) +{ + InitializeCriticalSection(&crit); +} + +omni_mutex::~omni_mutex(void) +{ + DeleteCriticalSection(&crit); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Condition variable +// +/////////////////////////////////////////////////////////////////////////// + + +// +// Condition variables are tricky to implement using NT synchronisation +// primitives, since none of them have the atomic "release mutex and wait to be +// signalled" which is central to the idea of a condition variable. To get +// around this the solution is to record which threads are waiting and +// explicitly wake up those threads. +// +// Here we implement a condition variable using a list of waiting threads +// (protected by a critical section), and a per-thread semaphore (which +// actually only needs to be a binary semaphore). +// +// To wait on the cv, a thread puts itself on the list of waiting threads for +// that cv, then releases the mutex and waits on its own personal semaphore. A +// signalling thread simply takes a thread from the head of the list and kicks +// that thread's semaphore. Broadcast is simply implemented by kicking the +// semaphore of each waiting thread. +// +// The only other tricky part comes when a thread gets a timeout from a timed +// wait on its semaphore. Between returning with a timeout from the wait and +// entering the critical section, a signalling thread could get in, kick the +// waiting thread's semaphore and remove it from the list. If this happens, +// the waiting thread's semaphore is now out of step so it needs resetting, and +// the thread should indicate that it was signalled rather than that it timed +// out. +// +// It is possible that the thread calling wait or timedwait is not a +// omni_thread. In this case we have to provide a temporary data structure, +// i.e. for the duration of the call, for the thread to link itself on the +// list of waiting threads. _internal_omni_thread_dummy provides such +// a data structure and _internal_omni_thread_helper is a helper class to +// deal with this special case for wait() and timedwait(). Once created, +// the _internal_omni_thread_dummy is cached for use by the next wait() or +// timedwait() call from a non-omni_thread. This is probably worth doing +// because creating a Semaphore is quite heavy weight. + +class _internal_omni_thread_helper; + +class _internal_omni_thread_dummy : public omni_thread { +public: + inline _internal_omni_thread_dummy() : next(0) { } + inline ~_internal_omni_thread_dummy() { } + friend class _internal_omni_thread_helper; +private: + _internal_omni_thread_dummy* next; +}; + +class _internal_omni_thread_helper { +public: + inline _internal_omni_thread_helper() { + d = 0; + t = omni_thread::self(); + if (!t) { + omni_mutex_lock sync(cachelock); + if (cache) { + d = cache; + cache = cache->next; + } + else { + d = new _internal_omni_thread_dummy; + } + t = d; + } + } + inline ~_internal_omni_thread_helper() { + if (d) { + omni_mutex_lock sync(cachelock); + d->next = cache; + cache = d; + } + } + inline operator omni_thread* () { return t; } + inline omni_thread* operator->() { return t; } + + static _internal_omni_thread_dummy* cache; + static omni_mutex cachelock; + +private: + _internal_omni_thread_dummy* d; + omni_thread* t; +}; + +_internal_omni_thread_dummy* _internal_omni_thread_helper::cache = 0; +omni_mutex _internal_omni_thread_helper::cachelock; + + +omni_condition::omni_condition(omni_mutex* m) : mutex(m) +{ + InitializeCriticalSection(&crit); + waiting_head = waiting_tail = NULL; +} + + +omni_condition::~omni_condition(void) +{ + DeleteCriticalSection(&crit); + DB( if (waiting_head != NULL) { + cerr << "omni_condition::~omni_condition: list of waiting threads " + << "is not empty\n"; + } ) +} + + +void +omni_condition::wait(void) +{ + _internal_omni_thread_helper me; + + EnterCriticalSection(&crit); + + me->cond_next = NULL; + me->cond_prev = waiting_tail; + if (waiting_head == NULL) + waiting_head = me; + else + waiting_tail->cond_next = me; + waiting_tail = me; + me->cond_waiting = TRUE; + + LeaveCriticalSection(&crit); + + mutex->unlock(); + + DWORD result = WaitForSingleObject(me->cond_semaphore, INFINITE); + + mutex->lock(); + + if (result != WAIT_OBJECT_0) + throw omni_thread_fatal(GetLastError()); +} + + +int +omni_condition::timedwait(unsigned long abs_sec, unsigned long abs_nsec) +{ + _internal_omni_thread_helper me; + + EnterCriticalSection(&crit); + + me->cond_next = NULL; + me->cond_prev = waiting_tail; + if (waiting_head == NULL) + waiting_head = me; + else + waiting_tail->cond_next = me; + waiting_tail = me; + me->cond_waiting = TRUE; + + LeaveCriticalSection(&crit); + + mutex->unlock(); + + unsigned long now_sec, now_nsec; + + get_time_now(&now_sec, &now_nsec); + + DWORD timeout; + if ((abs_sec <= now_sec) && ((abs_sec < now_sec) || (abs_nsec < now_nsec))) + timeout = 0; + else { + timeout = (abs_sec-now_sec) * 1000; + + if( abs_nsec < now_nsec ) timeout -= (now_nsec-abs_nsec) / 1000000; + else timeout += (abs_nsec-now_nsec) / 1000000; + } + + DWORD result = WaitForSingleObject(me->cond_semaphore, timeout); + + if (result == WAIT_TIMEOUT) { + EnterCriticalSection(&crit); + + if (me->cond_waiting) { + if (me->cond_prev != NULL) + me->cond_prev->cond_next = me->cond_next; + else + waiting_head = me->cond_next; + if (me->cond_next != NULL) + me->cond_next->cond_prev = me->cond_prev; + else + waiting_tail = me->cond_prev; + me->cond_waiting = FALSE; + + LeaveCriticalSection(&crit); + + mutex->lock(); + return 0; + } + + // + // We timed out but another thread still signalled us. Wait for + // the semaphore (it _must_ have been signalled) to decrement it + // again. Return that we were signalled, not that we timed out. + // + + LeaveCriticalSection(&crit); + + result = WaitForSingleObject(me->cond_semaphore, INFINITE); + } + + if (result != WAIT_OBJECT_0) + throw omni_thread_fatal(GetLastError()); + + mutex->lock(); + return 1; +} + + +void +omni_condition::signal(void) +{ + EnterCriticalSection(&crit); + + if (waiting_head != NULL) { + omni_thread* t = waiting_head; + waiting_head = t->cond_next; + if (waiting_head == NULL) + waiting_tail = NULL; + else + waiting_head->cond_prev = NULL; + t->cond_waiting = FALSE; + + if (!ReleaseSemaphore(t->cond_semaphore, 1, NULL)) { + int rc = GetLastError(); + LeaveCriticalSection(&crit); + throw omni_thread_fatal(rc); + } + } + + LeaveCriticalSection(&crit); +} + + +void +omni_condition::broadcast(void) +{ + EnterCriticalSection(&crit); + + while (waiting_head != NULL) { + omni_thread* t = waiting_head; + waiting_head = t->cond_next; + if (waiting_head == NULL) + waiting_tail = NULL; + else + waiting_head->cond_prev = NULL; + t->cond_waiting = FALSE; + + if (!ReleaseSemaphore(t->cond_semaphore, 1, NULL)) { + int rc = GetLastError(); + LeaveCriticalSection(&crit); + throw omni_thread_fatal(rc); + } + } + + LeaveCriticalSection(&crit); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Counting semaphore +// +/////////////////////////////////////////////////////////////////////////// + + +#define SEMAPHORE_MAX 0x7fffffff + + +omni_semaphore::omni_semaphore(unsigned int initial, unsigned int max_count) +{ + if (max_count > SEMAPHORE_MAX) + max_count= SEMAPHORE_MAX; + + nt_sem = CreateSemaphore(NULL, initial, max_count, NULL); + + if (nt_sem == NULL) { + DB( cerr << "omni_semaphore::omni_semaphore: CreateSemaphore error " + << GetLastError() << endl ); + throw omni_thread_fatal(GetLastError()); + } +} + + +omni_semaphore::~omni_semaphore(void) +{ + if (!CloseHandle(nt_sem)) { + DB( cerr << "omni_semaphore::~omni_semaphore: CloseHandle error " + << GetLastError() << endl ); + throw omni_thread_fatal(GetLastError()); + } +} + + +void +omni_semaphore::wait(void) +{ + if (WaitForSingleObject(nt_sem, INFINITE) != WAIT_OBJECT_0) + throw omni_thread_fatal(GetLastError()); +} + + +int +omni_semaphore::trywait(void) +{ + switch (WaitForSingleObject(nt_sem, 0)) { + + case WAIT_OBJECT_0: + return 1; + case WAIT_TIMEOUT: + return 0; + } + + throw omni_thread_fatal(GetLastError()); + return 0; /* keep msvc++ happy */ +} + + +void +omni_semaphore::post(void) +{ + if (!ReleaseSemaphore(nt_sem, 1, NULL) + && GetLastError() != ERROR_TOO_MANY_POSTS ) // MinGW fix--see ticket:95 in trac + throw omni_thread_fatal(GetLastError()); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Thread +// +/////////////////////////////////////////////////////////////////////////// + + +// +// Static variables +// + +omni_mutex* omni_thread::next_id_mutex; +int omni_thread::next_id = 0; +static DWORD self_tls_index; + +static unsigned int stack_size = 0; + +// +// Initialisation function (gets called before any user code). +// + +static int& count() { + static int the_count = 0; + return the_count; +} + +omni_thread::init_t::init_t(void) +{ + if (count()++ != 0) // only do it once however many objects get created. + return; + + DB(cerr << "omni_thread::init: NT implementation initialising\n"); + + self_tls_index = TlsAlloc(); + + if (self_tls_index == 0xffffffff) + throw omni_thread_fatal(GetLastError()); + + next_id_mutex = new omni_mutex; + + // + // Create object for this (i.e. initial) thread. + // + + omni_thread* t = new omni_thread; + + t->_state = STATE_RUNNING; + + if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), + GetCurrentProcess(), &t->handle, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + throw omni_thread_fatal(GetLastError()); + + t->nt_id = GetCurrentThreadId(); + + DB(cerr << "initial thread " << t->id() << " NT thread id " << t->nt_id + << endl); + + if (!TlsSetValue(self_tls_index, (LPVOID)t)) + throw omni_thread_fatal(GetLastError()); + + if (!SetThreadPriority(t->handle, nt_priority(PRIORITY_NORMAL))) + throw omni_thread_fatal(GetLastError()); +} + +omni_thread::init_t::~init_t(void) +{ + if (--count() != 0) return; + + omni_thread* self = omni_thread::self(); + if (!self) return; + + TlsSetValue(self_tls_index, (LPVOID)0); + delete self; + + delete next_id_mutex; + + TlsFree(self_tls_index); +} + +// +// Wrapper for thread creation. +// + +extern "C" +#ifndef __BCPLUSPLUS__ +unsigned __stdcall +#else +void _USERENTRY +#endif +omni_thread_wrapper(void* ptr) +{ + omni_thread* me = (omni_thread*)ptr; + + DB(cerr << "omni_thread_wrapper: thread " << me->id() + << " started\n"); + + if (!TlsSetValue(self_tls_index, (LPVOID)me)) + throw omni_thread_fatal(GetLastError()); + + // + // Now invoke the thread function with the given argument. + // + + if (me->fn_void != NULL) { + (*me->fn_void)(me->thread_arg); + omni_thread::exit(); + } + + if (me->fn_ret != NULL) { + void* return_value = (*me->fn_ret)(me->thread_arg); + omni_thread::exit(return_value); + } + + if (me->detached) { + me->run(me->thread_arg); + omni_thread::exit(); + } else { + void* return_value = me->run_undetached(me->thread_arg); + omni_thread::exit(return_value); + } + + // should never get here. +#ifndef __BCPLUSPLUS__ + return 0; +#endif +} + + +// +// Constructors for omni_thread - set up the thread object but don't +// start it running. +// + +// construct a detached thread running a given function. + +omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = fn; + fn_ret = NULL; +} + +// construct an undetached thread running a given function. + +omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 0); + fn_void = NULL; + fn_ret = fn; +} + +// construct a thread which will run either run() or run_undetached(). + +omni_thread::omni_thread(void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = NULL; + fn_ret = NULL; +} + +// common part of all constructors. + +void +omni_thread::common_constructor(void* arg, priority_t pri, int det) +{ + _state = STATE_NEW; + _priority = pri; + + next_id_mutex->lock(); + _id = next_id++; + next_id_mutex->unlock(); + + thread_arg = arg; + detached = det; // may be altered in start_undetached() + + cond_semaphore = CreateSemaphore(NULL, 0, SEMAPHORE_MAX, NULL); + + if (cond_semaphore == NULL) + throw omni_thread_fatal(GetLastError()); + + cond_next = cond_prev = NULL; + cond_waiting = FALSE; + + handle = NULL; + + _dummy = 0; + _values = 0; + _value_alloc = 0; +} + + +// +// Destructor for omni_thread. +// + +omni_thread::~omni_thread(void) +{ + DB(cerr << "destructor called for thread " << id() << endl); + if (_values) { + for (key_t i=0; i < _value_alloc; i++) { + if (_values[i]) { + delete _values[i]; + } + } + delete [] _values; + } + if (handle && !CloseHandle(handle)) + throw omni_thread_fatal(GetLastError()); + if (cond_semaphore && !CloseHandle(cond_semaphore)) + throw omni_thread_fatal(GetLastError()); +} + + +// +// Start the thread +// + +void +omni_thread::start(void) +{ + omni_mutex_lock l(mutex); + + if (_state != STATE_NEW) + throw omni_thread_invalid(); + +#ifndef __BCPLUSPLUS__ + // MSVC++ or compatiable + unsigned int t; + handle = (HANDLE)_beginthreadex( + NULL, + stack_size, + omni_thread_wrapper, + (LPVOID)this, + CREATE_SUSPENDED, + &t); + nt_id = t; + if (handle == NULL) + throw omni_thread_fatal(GetLastError()); +#else + // Borland C++ + handle = (HANDLE)_beginthreadNT(omni_thread_wrapper, + stack_size, + (void*)this, + NULL, + CREATE_SUSPENDED, + &nt_id); + if (handle == INVALID_HANDLE_VALUE) + throw omni_thread_fatal(errno); +#endif + + if (!SetThreadPriority(handle, nt_priority(_priority))) + throw omni_thread_fatal(GetLastError()); + + if (ResumeThread(handle) == 0xffffffff) + throw omni_thread_fatal(GetLastError()); + + _state = STATE_RUNNING; +} + + +// +// Start a thread which will run the member function run_undetached(). +// + +void +omni_thread::start_undetached(void) +{ + if ((fn_void != NULL) || (fn_ret != NULL)) + throw omni_thread_invalid(); + + detached = 0; + start(); +} + + +// +// join - simply check error conditions & call WaitForSingleObject. +// + +void +omni_thread::join(void** status) +{ + mutex.lock(); + + if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { + mutex.unlock(); + throw omni_thread_invalid(); + } + + mutex.unlock(); + + if (this == self()) + throw omni_thread_invalid(); + + if (detached) + throw omni_thread_invalid(); + + DB(cerr << "omni_thread::join: doing WaitForSingleObject\n"); + + if (WaitForSingleObject(handle, INFINITE) != WAIT_OBJECT_0) + throw omni_thread_fatal(GetLastError()); + + DB(cerr << "omni_thread::join: WaitForSingleObject succeeded\n"); + + if (status) + *status = return_val; + + delete this; +} + + +// +// Change this thread's priority. +// + +void +omni_thread::set_priority(priority_t pri) +{ + omni_mutex_lock l(mutex); + + if (_state != STATE_RUNNING) + throw omni_thread_invalid(); + + _priority = pri; + + if (!SetThreadPriority(handle, nt_priority(pri))) + throw omni_thread_fatal(GetLastError()); +} + + +// +// create - construct a new thread object and start it running. Returns thread +// object if successful, null pointer if not. +// + +// detached version + +omni_thread* +omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + t->start(); + return t; +} + +// undetached version + +omni_thread* +omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + t->start(); + return t; +} + + +// +// exit() _must_ lock the mutex even in the case of a detached thread. This is +// because a thread may run to completion before the thread that created it has +// had a chance to get out of start(). By locking the mutex we ensure that the +// creating thread must have reached the end of start() before we delete the +// thread object. Of course, once the call to start() returns, the user can +// still incorrectly refer to the thread object, but that's their problem. +// + +void +omni_thread::exit(void* return_value) +{ + omni_thread* me = self(); + + if (me) + { + me->mutex.lock(); + + me->_state = STATE_TERMINATED; + + me->mutex.unlock(); + + DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " + << me->detached << " return value " << return_value << endl); + + if (me->detached) { + delete me; + } else { + me->return_val = return_value; + } + } + else + { + DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); + } +#ifndef __BCPLUSPLUS__ + // MSVC++ or compatiable + // _endthreadex() does not automatically closes the thread handle. + // The omni_thread dtor closes the thread handle. + _endthreadex(0); +#else + // Borland C++ + // _endthread() does not automatically closes the thread handle. + // _endthreadex() is only available if __MFC_COMPAT__ is defined and + // all it does is to call _endthread(). + _endthread(); +#endif +} + + +omni_thread* +omni_thread::self(void) +{ + LPVOID me; + + me = TlsGetValue(self_tls_index); + + if (me == NULL) { + DB(cerr << "omni_thread::self: called with a non-ominthread. NULL is returned." << endl); + } + return (omni_thread*)me; +} + + +void +omni_thread::yield(void) +{ + Sleep(0); +} + + +#define MAX_SLEEP_SECONDS (DWORD)4294966 // (2**32-2)/1000 + +void +omni_thread::sleep(unsigned long secs, unsigned long nanosecs) +{ + if (secs <= MAX_SLEEP_SECONDS) { + Sleep(secs * 1000 + nanosecs / 1000000); + return; + } + + DWORD no_of_max_sleeps = secs / MAX_SLEEP_SECONDS; + + for (DWORD i = 0; i < no_of_max_sleeps; i++) + Sleep(MAX_SLEEP_SECONDS * 1000); + + Sleep((secs % MAX_SLEEP_SECONDS) * 1000 + nanosecs / 1000000); +} + + +void +omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, + unsigned long rel_sec, unsigned long rel_nsec) +{ + get_time_now(abs_sec, abs_nsec); + *abs_nsec += rel_nsec; + *abs_sec += rel_sec + *abs_nsec / 1000000000; + *abs_nsec = *abs_nsec % 1000000000; +} + + +int +omni_thread::nt_priority(priority_t pri) +{ + switch (pri) { + + case PRIORITY_LOW: + return THREAD_PRIORITY_LOWEST; + + case PRIORITY_NORMAL: + return THREAD_PRIORITY_NORMAL; + + case PRIORITY_HIGH: + return THREAD_PRIORITY_HIGHEST; + } + + throw omni_thread_invalid(); + return 0; /* keep msvc++ happy */ +} + + +static void +get_time_now(unsigned long* abs_sec, unsigned long* abs_nsec) +{ + static int days_in_preceding_months[12] + = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; + static int days_in_preceding_months_leap[12] + = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; + + SYSTEMTIME st; + + GetSystemTime(&st); + *abs_nsec = st.wMilliseconds * 1000000; + + // this formula should work until 1st March 2100 + + DWORD days = ((st.wYear - 1970) * 365 + (st.wYear - 1969) / 4 + + ((st.wYear % 4) + ? days_in_preceding_months[st.wMonth - 1] + : days_in_preceding_months_leap[st.wMonth - 1]) + + st.wDay - 1); + + *abs_sec = st.wSecond + 60 * (st.wMinute + 60 * (st.wHour + 24 * days)); +} + +void +omni_thread::stacksize(unsigned long sz) +{ + stack_size = sz; +} + +unsigned long +omni_thread::stacksize() +{ + return stack_size; +} + +// +// Dummy thread +// + +class omni_thread_dummy : public omni_thread { +public: + inline omni_thread_dummy() : omni_thread() + { + _dummy = 1; + _state = STATE_RUNNING; + + if (!DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), + GetCurrentProcess(), &handle, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + throw omni_thread_fatal(GetLastError()); + + nt_id = GetCurrentThreadId(); + + if (!TlsSetValue(self_tls_index, (LPVOID)this)) + throw omni_thread_fatal(GetLastError()); + } + inline ~omni_thread_dummy() + { + if (!TlsSetValue(self_tls_index, (LPVOID)0)) + throw omni_thread_fatal(GetLastError()); + } +}; + +omni_thread* +omni_thread::create_dummy() +{ + if (omni_thread::self()) + throw omni_thread_invalid(); + + return new omni_thread_dummy; +} + +void +omni_thread::release_dummy() +{ + omni_thread* self = omni_thread::self(); + if (!self || !self->_dummy) + throw omni_thread_invalid(); + + omni_thread_dummy* dummy = (omni_thread_dummy*)self; + delete dummy; +} + + +#if defined(__DMC__) && defined(_WINDLL) +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + return TRUE; +} +#endif + + +#define INSIDE_THREAD_IMPL_CC +#include "threaddata.cc" +#undef INSIDE_THREAD_IMPL_CC diff --git a/omnithread/omni_time.cc b/omnithread/omni_time.cc new file mode 100644 index 00000000..4920a683 --- /dev/null +++ b/omnithread/omni_time.cc @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include + + +omni_time::omni_time(double real_secs) +{ + double floor_secs = floor(real_secs); + d_secs = (long) floor_secs; + d_nsecs = (long) ((real_secs - floor_secs) * 1e9); // always positive +} + +omni_time +omni_time::time(const omni_time &delta_t) +{ + unsigned long abs_sec, abs_nsec; + unsigned long rel_sec = delta_t.d_secs; + unsigned long rel_nsec = delta_t.d_nsecs; + + omni_thread::get_time(&abs_sec, &abs_nsec, rel_sec, rel_nsec); + return omni_time(abs_sec, abs_nsec); +} + + +omni_time +operator+(const omni_time &x, const omni_time &y) +{ + omni_time r(x.d_secs + y.d_secs, x.d_nsecs + y.d_nsecs); + while (r.d_nsecs >= 1000000000){ + r.d_nsecs -= 1000000000; + r.d_secs++; + } + return r; +} + +omni_time +operator-(const omni_time &x, const omni_time &y) +{ + // assert(!(x < y)); + + omni_time r(x.d_secs - y.d_secs, x.d_nsecs - y.d_nsecs); + while (r.d_nsecs < 0){ + r.d_nsecs += 1000000000; + r.d_secs--; + } + return r; +} + +omni_time +operator+(const omni_time &x, double y) +{ + return x + omni_time(y); +} + +omni_time +operator-(const omni_time &x, double y) +{ + return x - omni_time(y); +} diff --git a/omnithread/posix.cc b/omnithread/posix.cc new file mode 100644 index 00000000..5574a8a0 --- /dev/null +++ b/omnithread/posix.cc @@ -0,0 +1,982 @@ +// Package : omnithread +// omnithread/posix.cc Created : 7/94 tjr +// +// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 1994-1999 AT&T Laboratories Cambridge +// +// This file is part of the omnithread library +// +// The omnithread library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Boston, MA +// 02110-1301, USA +// + +// +// Implementation of OMNI thread abstraction for posix threads +// +// The source below tests for the definition of the macros: +// PthreadDraftVersion +// PthreadSupportThreadPriority +// NoNanoSleep +// NeedPthreadInit +// +// As different draft versions of the pthread standard P1003.4a/P1003.1c +// define slightly different APIs, the macro 'PthreadDraftVersion' +// identifies the draft version supported by this particular platform. +// +// Some unix variants do not support thread priority unless a real-time +// kernel option is installed. The macro 'PthreadSupportThreadPriority', +// if defined, enables the use of thread priority. If it is not defined, +// setting or changing thread priority will be silently ignored. +// +// nanosleep() is defined in Posix P1003.4 since Draft 9 (?). +// Not all platforms support this standard. The macro 'NoNanoSleep' +// identifies platform that don't. +// + +#include +#include +#include +#include +#include + +#if (PthreadDraftVersion == 0) +#error "PthreadDraftVersion not defined. If not sure, define it to 10" +#endif + +#ifdef HAVE_NANOSLEEP +#undef NoNanoSleep +#else +#define NoNanoSleep +#endif + +#ifdef HAVE_SYS_TIME_H +// typedef of struct timeval and gettimeofday(); +#include +#include +#endif + +#if defined(__linux__) && defined(_MIT_POSIX_THREADS) +#include +#endif + +#if defined(__irix__) && defined(PthreadSupportThreadPriority) +#if _POSIX_THREAD_PRIORITY_SCHEDULING +#include +#endif +#endif + +#if 1 +#define DB(x) // x +#else +#define DB(x) x +#include +using std::cerr; +using std::endl; +#endif + +#if (PthreadDraftVersion <= 6) +#define ERRNO(x) (((x) != 0) ? (errno) : 0) +#ifdef __VMS +// pthread_setprio returns old priority on success (draft version 4: +// OpenVms version < 7) +#define THROW_ERRORS(x) { if ((x) == -1) throw omni_thread_fatal(errno); } +#else +#define THROW_ERRORS(x) { if ((x) != 0) throw omni_thread_fatal(errno); } +#endif +#else +#define ERRNO(x) (x) +#define THROW_ERRORS(x) { int rc = (x); \ + if (rc != 0) throw omni_thread_fatal(rc); } +#endif + + + +/////////////////////////////////////////////////////////////////////////// +// +// Mutex +// +/////////////////////////////////////////////////////////////////////////// + + +omni_mutex::omni_mutex(void) +{ +#if (PthreadDraftVersion == 4) + THROW_ERRORS(pthread_mutex_init(&posix_mutex, pthread_mutexattr_default)); +#else + THROW_ERRORS(pthread_mutex_init(&posix_mutex, 0)); +#endif +} + +omni_mutex::~omni_mutex(void) +{ + THROW_ERRORS(pthread_mutex_destroy(&posix_mutex)); +} + + +/////////////////////////////////////////////////////////////////////////// +// +// Condition variable +// +/////////////////////////////////////////////////////////////////////////// + + +omni_condition::omni_condition(omni_mutex* m) : mutex(m) +{ +#if (PthreadDraftVersion == 4) + THROW_ERRORS(pthread_cond_init(&posix_cond, pthread_condattr_default)); +#else + THROW_ERRORS(pthread_cond_init(&posix_cond, 0)); +#endif +} + +omni_condition::~omni_condition(void) +{ + THROW_ERRORS(pthread_cond_destroy(&posix_cond)); +} + +void +omni_condition::wait(void) +{ + THROW_ERRORS(pthread_cond_wait(&posix_cond, &mutex->posix_mutex)); +} + +int +omni_condition::timedwait(unsigned long secs, unsigned long nanosecs) +{ + timespec rqts = { secs, nanosecs }; + +again: + int rc = ERRNO(pthread_cond_timedwait(&posix_cond, + &mutex->posix_mutex, &rqts)); + if (rc == 0) + return 1; + +#if (PthreadDraftVersion <= 6) + if (rc == EAGAIN) + return 0; +#endif + + // Some versions of unix produces this errno when the wait was + // interrupted by a unix signal or fork. + // Some versions of the glibc 2.0.x produces this errno when the + // program is debugged under gdb. Straightly speaking this is non-posix + // compliant. We catch this here to make debugging possible. + if (rc == EINTR) + goto again; + + if (rc == ETIMEDOUT) + return 0; + + throw omni_thread_fatal(rc); +#ifdef _MSC_VER + return 0; +#endif +} + +void +omni_condition::signal(void) +{ + THROW_ERRORS(pthread_cond_signal(&posix_cond)); +} + +void +omni_condition::broadcast(void) +{ + THROW_ERRORS(pthread_cond_broadcast(&posix_cond)); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Counting (or binary) semaphore +// +/////////////////////////////////////////////////////////////////////////// + + +omni_semaphore::omni_semaphore(unsigned int initial, unsigned int _max_count) : c(&m) +{ + value = initial; + max_count = _max_count; + if (value < 0 || max_count < 1) + throw omni_thread_fatal(0); +} + +omni_semaphore::~omni_semaphore(void) +{ +} + +void +omni_semaphore::wait(void) +{ + omni_mutex_lock l(m); + + while (value == 0) + c.wait(); + + value--; +} + +int +omni_semaphore::trywait(void) +{ + omni_mutex_lock l(m); + + if (value == 0) + return 0; + + value--; + return 1; +} + +void +omni_semaphore::post(void) +{ + { + omni_mutex_lock l(m); + if (value < max_count) + value++; + } + + c.signal(); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Thread +// +/////////////////////////////////////////////////////////////////////////// + + +// +// static variables +// + +omni_mutex* omni_thread::next_id_mutex; +int omni_thread::next_id = 0; + +static pthread_key_t self_key; + +#ifdef PthreadSupportThreadPriority +static int lowest_priority; +static int normal_priority; +static int highest_priority; +#endif + +#if defined(__osf1__) && defined(__alpha__) || defined(__VMS) +// omniORB requires a larger stack size than the default (21120) on OSF/1 +static size_t stack_size = 32768; +#elif defined(__rtems__) +static size_t stack_size = ThreadStackSize; +#elif defined(__aix__) +static size_t stack_size = 262144; +#else +static size_t stack_size = 0; +#endif + +// +// Initialisation function (gets called before any user code). +// + +static int& count() { + static int the_count = 0; + return the_count; +} + +omni_thread::init_t::init_t(void) +{ + if (count()++ != 0) // only do it once however many objects get created. + return; + + DB(cerr << "omni_thread::init: posix 1003.4a/1003.1c (draft " + << PthreadDraftVersion << ") implementation initialising\n"); + +#ifdef NeedPthreadInit + + pthread_init(); + +#endif + +#if (PthreadDraftVersion == 4) + THROW_ERRORS(pthread_keycreate(&self_key, NULL)); +#else + THROW_ERRORS(pthread_key_create(&self_key, NULL)); +#endif + +#ifdef PthreadSupportThreadPriority + +#if defined(__osf1__) && defined(__alpha__) || defined(__VMS) + + lowest_priority = PRI_OTHER_MIN; + highest_priority = PRI_OTHER_MAX; + +#elif defined(__hpux__) + + lowest_priority = PRI_OTHER_MIN; + highest_priority = PRI_OTHER_MAX; + +#elif defined(__sunos__) && (__OSVERSION__ == 5) + + // a bug in pthread_attr_setschedparam means lowest priority is 1 not 0 + + lowest_priority = 1; + highest_priority = 3; + +#else + + lowest_priority = sched_get_priority_min(SCHED_FIFO); + highest_priority = sched_get_priority_max(SCHED_FIFO); + +#endif + + switch (highest_priority - lowest_priority) { + + case 0: + case 1: + normal_priority = lowest_priority; + break; + + default: + normal_priority = lowest_priority + 1; + break; + } + +#endif /* PthreadSupportThreadPriority */ + + next_id_mutex = new omni_mutex; + + // + // Create object for this (i.e. initial) thread. + // + + omni_thread* t = new omni_thread; + + t->_state = STATE_RUNNING; + + t->posix_thread = pthread_self (); + + DB(cerr << "initial thread " << t->id() << endl); + + THROW_ERRORS(pthread_setspecific(self_key, (void*)t)); + +#ifdef PthreadSupportThreadPriority + +#if (PthreadDraftVersion == 4) + + THROW_ERRORS(pthread_setprio(t->posix_thread, + posix_priority(PRIORITY_NORMAL))); + +#elif (PthreadDraftVersion == 6) + + pthread_attr_t attr; + pthread_attr_init(&attr); + + THROW_ERRORS(pthread_attr_setprio(&attr, posix_priority(PRIORITY_NORMAL))); + + THROW_ERRORS(pthread_setschedattr(t->posix_thread, attr)); + +#else + + struct sched_param sparam; + + sparam.sched_priority = posix_priority(PRIORITY_NORMAL); + + THROW_ERRORS(pthread_setschedparam(t->posix_thread, SCHED_OTHER, &sparam)); + +#endif /* PthreadDraftVersion */ + +#endif /* PthreadSupportThreadPriority */ +} + +omni_thread::init_t::~init_t(void) +{ + if (--count() != 0) return; + + omni_thread* self = omni_thread::self(); + if (!self) return; + + pthread_setspecific(self_key, 0); + delete self; + + delete next_id_mutex; +} + +// +// Wrapper for thread creation. +// + +extern "C" void* +omni_thread_wrapper(void* ptr) +{ + omni_thread* me = (omni_thread*)ptr; + + DB(cerr << "omni_thread_wrapper: thread " << me->id() + << " started\n"); + + THROW_ERRORS(pthread_setspecific(self_key, me)); + + // + // Now invoke the thread function with the given argument. + // + + if (me->fn_void != NULL) { + (*me->fn_void)(me->thread_arg); + omni_thread::exit(); + } + + if (me->fn_ret != NULL) { + void* return_value = (*me->fn_ret)(me->thread_arg); + omni_thread::exit(return_value); + } + + if (me->detached) { + me->run(me->thread_arg); + omni_thread::exit(); + } else { + void* return_value = me->run_undetached(me->thread_arg); + omni_thread::exit(return_value); + } + + // should never get here. + + return NULL; +} + + +// +// Constructors for omni_thread - set up the thread object but don't +// start it running. +// + +// construct a detached thread running a given function. + +omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = fn; + fn_ret = NULL; +} + +// construct an undetached thread running a given function. + +omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 0); + fn_void = NULL; + fn_ret = fn; +} + +// construct a thread which will run either run() or run_undetached(). + +omni_thread::omni_thread(void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = NULL; + fn_ret = NULL; +} + +// common part of all constructors. + +void +omni_thread::common_constructor(void* arg, priority_t pri, int det) +{ + _state = STATE_NEW; + _priority = pri; + + next_id_mutex->lock(); + _id = next_id++; + next_id_mutex->unlock(); + + thread_arg = arg; + detached = det; // may be altered in start_undetached() + + _dummy = 0; + _values = 0; + _value_alloc = 0; + // posix_thread is set up in initialisation routine or start(). +} + + +// +// Destructor for omni_thread. +// + +omni_thread::~omni_thread(void) +{ + DB(cerr << "destructor called for thread " << id() << endl); + if (_values) { + for (key_t i=0; i < _value_alloc; i++) { + if (_values[i]) { + delete _values[i]; + } + } + delete [] _values; + } +} + + +// +// Start the thread +// + +void +omni_thread::start(void) +{ + omni_mutex_lock l(mutex); + + if (_state != STATE_NEW) + throw omni_thread_invalid(); + + pthread_attr_t attr; + +#if (PthreadDraftVersion == 4) + pthread_attr_create(&attr); +#else + pthread_attr_init(&attr); +#endif + +#if (PthreadDraftVersion == 8) + pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_UNDETACHED); +#endif + +#ifdef PthreadSupportThreadPriority + +#if (PthreadDraftVersion <= 6) + + THROW_ERRORS(pthread_attr_setprio(&attr, posix_priority(_priority))); + +#else + + struct sched_param sparam; + + sparam.sched_priority = posix_priority(_priority); + + THROW_ERRORS(pthread_attr_setschedparam(&attr, &sparam)); + +#endif /* PthreadDraftVersion */ + +#endif /* PthreadSupportThreadPriority */ + +#if !defined(__linux__) + if (stack_size) { + THROW_ERRORS(pthread_attr_setstacksize(&attr, stack_size)); + } +#endif + + +#if (PthreadDraftVersion == 4) + THROW_ERRORS(pthread_create(&posix_thread, attr, omni_thread_wrapper, + (void*)this)); + pthread_attr_delete(&attr); +#else + THROW_ERRORS(pthread_create(&posix_thread, &attr, omni_thread_wrapper, + (void*)this)); + pthread_attr_destroy(&attr); +#endif + + _state = STATE_RUNNING; + + if (detached) { + +#if (PthreadDraftVersion <= 6) + THROW_ERRORS(pthread_detach(&posix_thread)); +#else + THROW_ERRORS(pthread_detach(posix_thread)); +#endif + } +} + + +// +// Start a thread which will run the member function run_undetached(). +// + +void +omni_thread::start_undetached(void) +{ + if ((fn_void != NULL) || (fn_ret != NULL)) + throw omni_thread_invalid(); + + detached = 0; + start(); +} + + +// +// join - simply check error conditions & call pthread_join. +// + +void +omni_thread::join(void** status) +{ + mutex.lock(); + + if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { + mutex.unlock(); + throw omni_thread_invalid(); + } + + mutex.unlock(); + + if (this == self()) + throw omni_thread_invalid(); + + if (detached) + throw omni_thread_invalid(); + + DB(cerr << "omni_thread::join: doing pthread_join\n"); + + THROW_ERRORS(pthread_join(posix_thread, status)); + + DB(cerr << "omni_thread::join: pthread_join succeeded\n"); + +#if (PthreadDraftVersion == 4) + // With draft 4 pthreads implementations (HPUX 10.x and + // Digital Unix 3.2), have to detach the thread after + // join. If not, the storage for the thread will not be + // be reclaimed. + THROW_ERRORS(pthread_detach(&posix_thread)); +#endif + + delete this; +} + + +// +// Change this thread's priority. +// + +void +omni_thread::set_priority(priority_t pri) +{ + omni_mutex_lock l(mutex); + + if (_state != STATE_RUNNING) + throw omni_thread_invalid(); + + _priority = pri; + +#ifdef PthreadSupportThreadPriority + +#if (PthreadDraftVersion == 4) + + THROW_ERRORS(pthread_setprio(posix_thread, posix_priority(pri))); + +#elif (PthreadDraftVersion == 6) + + pthread_attr_t attr; + pthread_attr_init(&attr); + + THROW_ERRORS(pthread_attr_setprio(&attr, posix_priority(pri))); + + THROW_ERRORS(pthread_setschedattr(posix_thread, attr)); + +#else + + struct sched_param sparam; + + sparam.sched_priority = posix_priority(pri); + + THROW_ERRORS(pthread_setschedparam(posix_thread, SCHED_OTHER, &sparam)); + +#endif /* PthreadDraftVersion */ + +#endif /* PthreadSupportThreadPriority */ +} + + +// +// create - construct a new thread object and start it running. Returns thread +// object if successful, null pointer if not. +// + +// detached version + +omni_thread* +omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + +// undetached version + +omni_thread* +omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + + +// +// exit() _must_ lock the mutex even in the case of a detached thread. This is +// because a thread may run to completion before the thread that created it has +// had a chance to get out of start(). By locking the mutex we ensure that the +// creating thread must have reached the end of start() before we delete the +// thread object. Of course, once the call to start() returns, the user can +// still incorrectly refer to the thread object, but that's their problem. +// + +void +omni_thread::exit(void* return_value) +{ + omni_thread* me = self(); + + if (me) + { + me->mutex.lock(); + + me->_state = STATE_TERMINATED; + + me->mutex.unlock(); + + DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " + << me->detached << " return value " << return_value << endl); + + if (me->detached) + delete me; + } + else + { + DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); + } + + pthread_exit(return_value); +} + + +omni_thread* +omni_thread::self(void) +{ + omni_thread* me; + +#if (PthreadDraftVersion <= 6) + + THROW_ERRORS(pthread_getspecific(self_key, (void**)&me)); + +#else + + me = (omni_thread *)pthread_getspecific(self_key); + +#endif + + if (!me) { + // This thread is not created by omni_thread::start because it + // doesn't has a class omni_thread instance attached to its key. + DB(cerr << "omni_thread::self: called with a non-omnithread. NULL is returned." << endl); + } + + return me; +} + + +void +omni_thread::yield(void) +{ +#if (PthreadDraftVersion == 6) + + pthread_yield(NULL); + +#elif (PthreadDraftVersion < 9) + + pthread_yield(); + +#else + + THROW_ERRORS(sched_yield()); + +#endif +} + + +void +omni_thread::sleep(unsigned long secs, unsigned long nanosecs) +{ + timespec rqts = { secs, nanosecs }; + +#ifndef NoNanoSleep + + timespec remain; + while (nanosleep(&rqts, &remain)) { + if (errno == EINTR) { + rqts.tv_sec = remain.tv_sec; + rqts.tv_nsec = remain.tv_nsec; + continue; + } + else + throw omni_thread_fatal(errno); + } +#else + +#if defined(__osf1__) && defined(__alpha__) || defined(__hpux__) && (__OSVERSION__ == 10) || defined(__VMS) || defined(__SINIX__) || defined (__POSIX_NT__) + + if (pthread_delay_np(&rqts) != 0) + throw omni_thread_fatal(errno); + +#elif defined(__linux__) || defined(__aix__) + + if (secs > 2000) { + while ((secs = ::sleep(secs))) ; + } else { + usleep(secs * 1000000 + (nanosecs / 1000)); + } + +#elif defined(__darwin__) || defined(__macos__) + + // Single UNIX Specification says argument of usleep() must be + // less than 1,000,000. + secs += nanosecs / 1000000000; + nanosecs %= 1000000000; + while ((secs = ::sleep(secs))) ; + usleep(nanosecs / 1000); + +#else + + throw omni_thread_invalid(); + +#endif +#endif /* NoNanoSleep */ +} + + +void +omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, + unsigned long rel_sec, unsigned long rel_nsec) +{ + timespec abs; + +#if defined(__osf1__) && defined(__alpha__) || defined(__hpux__) && (__OSVERSION__ == 10) || defined(__VMS) || defined(__SINIX__) || defined(__POSIX_NT__) + + timespec rel; + rel.tv_sec = rel_sec; + rel.tv_nsec = rel_nsec; + THROW_ERRORS(pthread_get_expiration_np(&rel, &abs)); + +#else + +#ifdef HAVE_CLOCK_GETTIME /* __linux__ || __aix__ */ + + clock_gettime(CLOCK_REALTIME, &abs); + +#elif defined(HAVE_GETTIMEOFDAY) /* defined(__linux__) || defined(__aix__) || defined(__SCO_VERSION__) || defined(__darwin__) || defined(__macos__) */ + + struct timeval tv; + gettimeofday(&tv, NULL); + abs.tv_sec = tv.tv_sec; + abs.tv_nsec = tv.tv_usec * 1000; + +#else +#error no get time support +#endif /* __linux__ || __aix__ */ + + abs.tv_nsec += rel_nsec; + abs.tv_sec += rel_sec + abs.tv_nsec / 1000000000; + abs.tv_nsec = abs.tv_nsec % 1000000000; + +#endif /* __osf1__ && __alpha__ */ + + *abs_sec = abs.tv_sec; + *abs_nsec = abs.tv_nsec; +} + + +int +omni_thread::posix_priority(priority_t pri) +{ +#ifdef PthreadSupportThreadPriority + switch (pri) { + + case PRIORITY_LOW: + return lowest_priority; + + case PRIORITY_NORMAL: + return normal_priority; + + case PRIORITY_HIGH: + return highest_priority; + + } +#endif + + throw omni_thread_invalid(); +#ifdef _MSC_VER + return 0; +#endif +} + +void +omni_thread::stacksize(unsigned long sz) +{ + stack_size = sz; +} + +unsigned long +omni_thread::stacksize() +{ + return stack_size; +} + +// +// Dummy thread +// + +class omni_thread_dummy : public omni_thread { +public: + inline omni_thread_dummy() : omni_thread() + { + _dummy = 1; + _state = STATE_RUNNING; + posix_thread = pthread_self(); + THROW_ERRORS(pthread_setspecific(self_key, (void*)this)); + } + inline ~omni_thread_dummy() + { + THROW_ERRORS(pthread_setspecific(self_key, 0)); + } +}; + +omni_thread* +omni_thread::create_dummy() +{ + if (omni_thread::self()) + throw omni_thread_invalid(); + + return new omni_thread_dummy; +} + +void +omni_thread::release_dummy() +{ + omni_thread* self = omni_thread::self(); + if (!self || !self->_dummy) + throw omni_thread_invalid(); + + omni_thread_dummy* dummy = (omni_thread_dummy*)self; + delete dummy; +} + + +#define INSIDE_THREAD_IMPL_CC +#include "threaddata.cc" +#undef INSIDE_THREAD_IMPL_CC diff --git a/omnithread/solaris.cc b/omnithread/solaris.cc new file mode 100644 index 00000000..eedaaa99 --- /dev/null +++ b/omnithread/solaris.cc @@ -0,0 +1,615 @@ +// Package : omnithread +// omnithread/solaris.cc Created : 7/94 tjr +// +// Copyright (C) 1994-1999 AT&T Laboratories Cambridge +// +// This file is part of the omnithread library +// +// The omnithread library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library 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 +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 51 Franklin Street, Boston, MA +// 02110-1301, USA +// +// +// Implementation of OMNI thread abstraction for solaris threads. +// + +#include +#include +#include + +#define DB(x) // x +// #include or #include if DB is on. + +#define THROW_ERRORS(x) { int rc = (x); \ + if (rc != 0) throw omni_thread_fatal(rc); } + + + +/////////////////////////////////////////////////////////////////////////// +// +// Mutex +// +/////////////////////////////////////////////////////////////////////////// + + +omni_mutex::omni_mutex(void) +{ + THROW_ERRORS(mutex_init(&sol_mutex, USYNC_THREAD, 0)); +} + +omni_mutex::~omni_mutex(void) +{ + THROW_ERRORS(mutex_destroy(&sol_mutex)); +} + +void +omni_mutex::lock(void) +{ + THROW_ERRORS(mutex_lock(&sol_mutex)); +} + +void +omni_mutex::unlock(void) +{ + THROW_ERRORS(mutex_unlock(&sol_mutex)); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Condition variable +// +/////////////////////////////////////////////////////////////////////////// + + +omni_condition::omni_condition(omni_mutex* m) : mutex(m) +{ + THROW_ERRORS(cond_init(&sol_cond, USYNC_THREAD, 0)); +} + +omni_condition::~omni_condition(void) +{ + THROW_ERRORS(cond_destroy(&sol_cond)); +} + +void +omni_condition::wait(void) +{ + THROW_ERRORS(cond_wait(&sol_cond, &mutex->sol_mutex)); +} + +int +omni_condition::timedwait(unsigned long secs, unsigned long nanosecs) +{ + timespec rqts = { secs, nanosecs }; + + again: + int rc = cond_timedwait(&sol_cond, &mutex->sol_mutex, &rqts); + + if (rc == 0) + return 1; + + if (rc == EINTR) + goto again; + + if (rc == ETIME) + return 0; + + throw omni_thread_fatal(rc); +} + +void +omni_condition::signal(void) +{ + THROW_ERRORS(cond_signal(&sol_cond)); +} + +void +omni_condition::broadcast(void) +{ + THROW_ERRORS(cond_broadcast(&sol_cond)); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Counting semaphore +// +/////////////////////////////////////////////////////////////////////////// + + +omni_semaphore::omni_semaphore(unsigned int initial) +{ + THROW_ERRORS(sema_init(&sol_sem, initial, USYNC_THREAD, NULL)); +} + +omni_semaphore::~omni_semaphore(void) +{ + THROW_ERRORS(sema_destroy(&sol_sem)); +} + +void +omni_semaphore::wait(void) +{ + THROW_ERRORS(sema_wait(&sol_sem)); +} + +void +omni_semaphore::post(void) +{ + THROW_ERRORS(sema_post(&sol_sem)); +} + + + +/////////////////////////////////////////////////////////////////////////// +// +// Thread +// +/////////////////////////////////////////////////////////////////////////// + + +// +// Static variables +// + +int omni_thread::init_t::count = 0; + +omni_mutex* omni_thread::next_id_mutex; +int omni_thread::next_id = 0; + +static thread_key_t self_key; + +static size_t stack_size = 0; + +// +// Initialisation function (gets called before any user code). +// + +omni_thread::init_t::init_t(void) +{ + if (count++ != 0) // only do it once however many objects get created. + return; + + DB(cerr << "omni_thread::init: solaris implementation initialising\n"); + + THROW_ERRORS(thr_keycreate(&self_key, NULL)); + + next_id_mutex = new omni_mutex; + + // + // Create object for this (i.e. initial) thread. + // + + omni_thread* t = new omni_thread; + + t->_state = STATE_RUNNING; + + t->sol_thread = thr_self(); + + DB(cerr << "initial thread " << t->id() << " sol_thread " << t->sol_thread + << endl); + + THROW_ERRORS(thr_setspecific(self_key, (void*)t)); + + THROW_ERRORS(thr_setprio(t->sol_thread, sol_priority(PRIORITY_NORMAL))); +} + + +// +// Wrapper for thread creation. +// + +extern "C" void* +omni_thread_wrapper(void* ptr) +{ + omni_thread* me = (omni_thread*)ptr; + + DB(cerr << "omni_thread::wrapper: thread " << me->id() + << " started\n"); + + THROW_ERRORS(thr_setspecific(self_key, me)); + + // + // Now invoke the thread function with the given argument. + // + + if (me->fn_void != NULL) { + (*me->fn_void)(me->thread_arg); + omni_thread::exit(); + } + + if (me->fn_ret != NULL) { + void* return_value = (*me->fn_ret)(me->thread_arg); + omni_thread::exit(return_value); + } + + if (me->detached) { + me->run(me->thread_arg); + omni_thread::exit(); + } else { + void* return_value = me->run_undetached(me->thread_arg); + omni_thread::exit(return_value); + } + + // should never get here. + + return NULL; +} + + +// +// Constructors for omni_thread - set up the thread object but don't +// start it running. +// + +// construct a detached thread running a given function. + +omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = fn; + fn_ret = NULL; +} + +// construct an undetached thread running a given function. + +omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 0); + fn_void = NULL; + fn_ret = fn; +} + +// construct a thread which will run either run() or run_undetached(). + +omni_thread::omni_thread(void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = NULL; + fn_ret = NULL; +} + +// common part of all constructors. + +void +omni_thread::common_constructor(void* arg, priority_t pri, int det) +{ + _state = STATE_NEW; + _priority = pri; + + next_id_mutex->lock(); + _id = next_id++; + next_id_mutex->unlock(); + + thread_arg = arg; + detached = det; // may be altered in start_undetached() + + _dummy = 0; + _values = 0; + _value_alloc = 0; + // sol_thread is set up in initialisation routine or start(). +} + + +// +// Destructor for omni_thread. +// + +omni_thread::~omni_thread(void) +{ + DB(cerr << "destructor called for thread " << id() << endl); + if (_values) { + for (key_t i=0; i < _value_alloc; i++) { + if (_values[i]) { + delete _values[i]; + } + } + delete [] _values; + } +} + + +// +// Start the thread +// + +void +omni_thread::start(void) +{ + long flags = 0; + + if (detached) + flags |= THR_DETACHED; + + omni_mutex_lock l(mutex); + + if (_state != STATE_NEW) + throw omni_thread_invalid(); + + THROW_ERRORS(thr_create(0, stack_size, omni_thread_wrapper, (void*)this, flags, + &sol_thread)); + + _state = STATE_RUNNING; + + THROW_ERRORS(thr_setprio(sol_thread, sol_priority(_priority))); +} + + +// +// Start a thread which will run the member function run_undetached(). +// + +void +omni_thread::start_undetached(void) +{ + if ((fn_void != NULL) || (fn_ret != NULL)) + throw omni_thread_invalid(); + + detached = 0; + start(); +} + + +// +// join - simply check error conditions & call thr_join. +// + +void +omni_thread::join(void** status) +{ + mutex.lock(); + + if ((_state != STATE_RUNNING) && (_state != STATE_TERMINATED)) { + mutex.unlock(); + throw omni_thread_invalid(); + } + + mutex.unlock(); + + if (this == self()) + throw omni_thread_invalid(); + + if (detached) + throw omni_thread_invalid(); + + DB(cerr << "omni_thread::join: doing thr_join\n"); + + THROW_ERRORS(thr_join(sol_thread, (thread_t *)NULL, status)); + + DB(cerr << "omni_thread::join: thr_join succeeded\n"); + + delete this; +} + + +// +// Change this thread's priority. +// + +void +omni_thread::set_priority(priority_t pri) +{ + omni_mutex_lock l(mutex); + + if (_state != STATE_RUNNING) + throw omni_thread_invalid(); + + _priority = pri; + + THROW_ERRORS(thr_setprio(sol_thread, sol_priority(pri))); +} + + +// +// create - construct a new thread object and start it running. Returns thread +// object if successful, null pointer if not. +// + +// detached version + +omni_thread* +omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + +// undetached version + +omni_thread* +omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + + +// +// exit() _must_ lock the mutex even in the case of a detached thread. This is +// because a thread may run to completion before the thread that created it has +// had a chance to get out of start(). By locking the mutex we ensure that the +// creating thread must have reached the end of start() before we delete the +// thread object. Of course, once the call to start() returns, the user can +// still incorrectly refer to the thread object, but that's their problem. +// + +void +omni_thread::exit(void* return_value) +{ + omni_thread* me = self(); + + if (me) + { + me->mutex.lock(); + + me->_state = STATE_TERMINATED; + + me->mutex.unlock(); + + DB(cerr << "omni_thread::exit: thread " << me->id() << " detached " + << me->detached << " return value " << return_value << endl); + + if (me->detached) + delete me; + } + else + { + DB(cerr << "omni_thread::exit: called with a non-omnithread. Exit quietly." << endl); + } + + thr_exit(return_value); +} + + +omni_thread* +omni_thread::self(void) +{ + omni_thread* me; + + THROW_ERRORS(thr_getspecific(self_key, (void**)&me)); + + if (!me) { + // This thread is not created by omni_thread::start because it + // doesn't has a class omni_thread instance attached to its key. + DB(cerr << "omni_thread::self: called with a non-ominthread. NULL is returned." << endl); + } + + return me; +} + + +void +omni_thread::yield(void) +{ + thr_yield(); +} + + +void +omni_thread::sleep(unsigned long secs, unsigned long nanosecs) +{ + timespec rqts = { secs, nanosecs }; + timespec remain; + while (nanosleep(&rqts, &remain)) { + if (errno == EINTR) { + rqts.tv_sec = remain.tv_sec; + rqts.tv_nsec = remain.tv_nsec; + continue; + } + else + throw omni_thread_fatal(errno); + } +} + + +void +omni_thread::get_time(unsigned long* abs_sec, unsigned long* abs_nsec, + unsigned long rel_sec, unsigned long rel_nsec) +{ + timespec abs; + clock_gettime(CLOCK_REALTIME, &abs); + abs.tv_nsec += rel_nsec; + abs.tv_sec += rel_sec + abs.tv_nsec / 1000000000; + abs.tv_nsec = abs.tv_nsec % 1000000000; + *abs_sec = abs.tv_sec; + *abs_nsec = abs.tv_nsec; +} + + +int +omni_thread::sol_priority(priority_t pri) +{ + switch (pri) { + + case PRIORITY_LOW: + return 0; + + case PRIORITY_NORMAL: + return 1; + + case PRIORITY_HIGH: + return 2; + } + + throw omni_thread_invalid(); +} + + +void +omni_thread::stacksize(unsigned long sz) +{ + stack_size = sz; +} + +unsigned long +omni_thread::stacksize() +{ + return stack_size; +} + + +// +// Dummy thread +// + +#error This dummy thread code is not tested. It might work if you're lucky. + +class omni_thread_dummy : public omni_thread { +public: + inline omni_thread_dummy() : omni_thread() + { + _dummy = 1; + _state = STATE_RUNNING; + sol_thread = thr_self(); + THROW_ERRORS(thr_setspecific(self_key, (void*)this)); + } + inline ~omni_thread_dummy() + { + THROW_ERRORS(thr_setspecific(self_key, 0)); + } +}; + +omni_thread* +omni_thread::create_dummy() +{ + if (omni_thread::self()) + throw omni_thread_invalid(); + + return new omni_thread_dummy; +} + +void +omni_thread::release_dummy() +{ + omni_thread* self = omni_thread::self(); + if (!self || !self->_dummy) + throw omni_thread_invalid(); + + omni_thread_dummy* dummy = (omni_thread_dummy*)self; + delete dummy; +} + + +#define INSIDE_THREAD_IMPL_CC +#include "threaddata.cc" +#undef INSIDE_THREAD_IMPL_CC diff --git a/gnuradio-core/src/lib/omnithread/threaddata.cc b/omnithread/threaddata.cc similarity index 100% rename from gnuradio-core/src/lib/omnithread/threaddata.cc rename to omnithread/threaddata.cc diff --git a/omnithread/vxWorks.cc b/omnithread/vxWorks.cc new file mode 100644 index 00000000..aaff6cdb --- /dev/null +++ b/omnithread/vxWorks.cc @@ -0,0 +1,1160 @@ +////////////////////////////////////////////////////////////////////////////// +// Filename: vxWorks.cc +// Author: Tihomir Sokcevic +// Acterna, Eningen. +// Description: vxWorks adaptation of the omnithread wrapper classes +// Notes: Munching strategy is imperative +////////////////////////////////////////////////////////////////////////////// +// $Log$ +// Revision 1.1 2004/04/10 18:00:52 eb +// Initial revision +// +// Revision 1.1.1.1 2004/03/01 00:20:27 eb +// initial checkin +// +// Revision 1.1 2003/05/25 05:29:04 eb +// see ChangeLog +// +// Revision 1.1.2.1 2003/02/17 02:03:11 dgrisby +// vxWorks port. (Thanks Michael Sturm / Acterna Eningen GmbH). +// +// Revision 1.1.1.1 2002/11/19 14:58:04 sokcevti +// OmniOrb4.0.0 VxWorks port +// +// Revision 1.4 2002/10/15 07:54:09 kuttlest +// change semaphore from SEM_FIFO to SEM_PRIO +// --- +// +// Revision 1.3 2002/07/05 07:38:52 engeln +// made priority redefinable on load time by defining int variables +// omni_thread_prio_low = 220; +// omni_thread_prio_normal = 110; +// omni_thread_prio_high = 55; +// the default priority is prio_normal. +// The normal priority default has been increased from 200 to 110 and the +// high priority from 100 to 55. +// --- +// +// Revision 1.2 2002/06/14 12:44:57 engeln +// replaced possibly unsafe wakeup procedure in broadcast. +// --- +// +// Revision 1.1.1.1 2002/04/02 10:09:34 sokcevti +// omniORB4 initial realease +// +// Revision 1.0 2001/10/23 14:22:45 sokcevti +// Initial Version 4.00 +// --- +// +////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////// +// Include files +////////////////////////////////////////////////////////////////////////////// +#include +#include +#include +#include +#include +#include + +#include // assert +#include // intContext + + +////////////////////////////////////////////////////////////////////////////// +// Local defines +////////////////////////////////////////////////////////////////////////////// +#define ERRNO(x) (((x) != 0) ? (errno) : 0) +#define THROW_ERRORS(x) { if((x) != OK) throw omni_thread_fatal(errno); } +#define OMNI_THREAD_ID 0x7F7155AAl +#define OMNI_STACK_SIZE 32768l + +#ifdef _DEBUG + #include + #define DBG_TRACE(X) X +#else // _DEBUG + #define DBG_TRACE(X) +#endif // _DEBUG + +#define DBG_ASSERT(X) + +#define DBG_THROW(X) X + +int omni_thread_prio_low = 220; +int omni_thread_prio_normal = 110; +int omni_thread_prio_high = 55; +/////////////////////////////////////////////////////////////////////////// +// +// Mutex +// +/////////////////////////////////////////////////////////////////////////// +omni_mutex::omni_mutex(void):m_bConstructed(false) +{ + mutexID = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE); + + DBG_ASSERT(assert(mutexID != NULL)); + + if(mutexID==NULL) + { + DBG_TRACE(cout<<"Exception: omni_mutex::omni_mutex() tid: "<<(int)taskIdSelf()<mutexID<<" tid:"<<(int)taskIdSelf()<mutexID<<" tid:"<<(int)taskIdSelf()< count. + + STATUS status = semTake(waiters_lock_,WAIT_FOREVER); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::wait"<unlock(); + + // Wait to be awakened by a cond_signal() or cond_broadcast(). + status = semTake(sema_,WAIT_FOREVER); + + // reenable task rescheduling + taskUnlock(); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::wait"< count. + status = semTake(waiters_lock_,WAIT_FOREVER); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::wait"<, even when errors + // occur because that's the guarantee that we give to our callers. + mutex->lock(); +} + + +// The time given is absolute. Return 0 is timeout +int omni_condition::timedwait(unsigned long secs, unsigned long nanosecs) +{ + STATUS result = OK; + timespec now; + unsigned long timeout; + int ticks; + + // Prevent race conditions on the count. + STATUS status = semTake(waiters_lock_, WAIT_FOREVER); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::timedwait"<unlock(); + + // Wait to be awakened by a signal() or broadcast(). + ticks = (timeout * sysClkRateGet()) / 1000L; + result = semTake(sema_, ticks); + + // reenable task rescheduling + taskUnlock(); + + // Reacquire lock to avoid race conditions. + status = semTake(waiters_lock_, WAIT_FOREVER); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::timedwait"<id()<<" SemID:"<<(int)sema_<<" errno:"<, even when errors + // occur because that's the guarantee that we give to our callers. + mutex->lock(); + + if(result!=OK) // timeout + return 0; + + return 1; +} + +void omni_condition::signal(void) +{ + DBG_TRACE(cout<<"omni_condition::signal mutexID: "<<(int)mutex->mutexID<<" tid:"<<(int)taskIdSelf()< 0; + + status = semGive(waiters_lock_); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::signal"<mutexID<<" tid:"<<(int)taskIdSelf()< must be locked before this call is made. + // This is needed to ensure that and are + // consistent relative to each other. + STATUS status = semTake(waiters_lock_, WAIT_FOREVER); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::signal"< 0) + { + // We are broadcasting, even if there is just one waiter... + // Record the fact that we are broadcasting. This helps the + // cond_wait() method know how to optimize itself. Be sure to + // set this with the held. + have_waiters = 1; + } + + status = semGive(waiters_lock_); + + DBG_ASSERT(assert(status == OK)); + + if(status != OK) + { + DBG_TRACE(cout<<"Exception: omni_condition::signal"<id()<<" SemID:"<<(int)sema_<<" errno:"<spare1 = 0; + delete self; + + delete next_id_mutex; +} + + +// +// Wrapper for thread creation. +// +extern "C" void omni_thread_wrapper(void* ptr) +{ + omni_thread* me = (omni_thread*)ptr; + + DBG_TRACE(cout<<"omni_thread_wrapper: thread "<id()<<" started\n"); + + // + // We can now tweaked the task info since the tcb exist now + // + me->mutex.lock(); // To ensure that start has had time to finish + taskTcb(me->tid)->spare1 = OMNI_THREAD_ID; + taskTcb(me->tid)->spare2 = (int)ptr; + me->mutex.unlock(); + + // + // Now invoke the thread function with the given argument. + // + if(me->fn_void != NULL) + { + (*me->fn_void)(me->thread_arg); + omni_thread::exit(); + } + + if(me->fn_ret != NULL) + { + void* return_value = (*me->fn_ret)(me->thread_arg); + omni_thread::exit(return_value); + } + + if(me->detached) + { + me->run(me->thread_arg); + omni_thread::exit(); + } + else + { + void* return_value = me->run_undetached(me->thread_arg); + omni_thread::exit(return_value); + } +} + + +// +// Special functions for VxWorks only +// +void omni_thread::attach(void) +{ + DBG_TRACE(cout<<"omni_thread_attach: VxWorks mapping thread initialising\n"); + + int _tid = taskIdSelf(); + + // Check the task is not already attached + if(taskTcb(_tid)->spare1 == OMNI_THREAD_ID) + return; + + // Create the mutex required to lock the threads debugging id (create before the thread!!!) + if(next_id_mutex == 0) + next_id_mutex = new omni_mutex; + + // Create a thread object for THIS running process + omni_thread* t = new omni_thread; + + // Lock its mutex straigh away! + omni_mutex_lock l(t->mutex); + + // Adjust data members of this instance + t->_state = STATE_RUNNING; + t->tid = taskIdSelf(); + + // Set the thread values so it can be recongnised as a omni_thread + // Set the id last can possibly prevent race condition + taskTcb(t->tid)->spare2 = (int)t; + taskTcb(t->tid)->spare1 = OMNI_THREAD_ID; + + // Create the running_mutex at this stage, but leave it empty. We are not running + // in the task context HERE, so taking it would be disastrous. + t->running_cond = new omni_condition(&t->mutex); +} + + +void omni_thread::detach(void) +{ + DBG_TRACE(cout<<"omni_thread_detach: VxWorks detaching thread mapping\n"); + + int _tid = taskIdSelf(); + + // Check the task has a OMNI_THREAD attached + if(taskTcb(_tid)->spare1 != OMNI_THREAD_ID) + return; + + // Invalidate the id NOW ! + taskTcb(_tid)->spare1 = 0; + + // Even if NULL, it is safe to delete the thread + omni_thread* t = (omni_thread*)taskTcb(_tid)->spare2; + // Fininsh cleaning the tcb structure + taskTcb(_tid)->spare2 = 0; + + delete t; +} + + +// +// Constructors for omni_thread - set up the thread object but don't +// start it running. +// + +// construct a detached thread running a given function. +omni_thread::omni_thread(void (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = fn; + fn_ret = NULL; +} + +// construct an undetached thread running a given function. +omni_thread::omni_thread(void* (*fn)(void*), void* arg, priority_t pri) +{ + common_constructor(arg, pri, 0); + fn_void = NULL; + fn_ret = fn; +} + +// construct a thread which will run either run() or run_undetached(). + +omni_thread::omni_thread(void* arg, priority_t pri) +{ + common_constructor(arg, pri, 1); + fn_void = NULL; + fn_ret = NULL; +} + +// common part of all constructors. +void omni_thread::common_constructor(void* arg, priority_t pri, int det) +{ + _state = STATE_NEW; + _priority = pri; + + // Set the debugging id + next_id_mutex->lock(); + _id = next_id++; + next_id_mutex->unlock(); + + // Note : tid can only be setup when the task is up and running + tid = 0; + + thread_arg = arg; + detached = det; // may be altered in start_undetached() + + _dummy = 0; + _values = 0; + _value_alloc = 0; +} + +// +// Destructor for omni_thread. +// +omni_thread::~omni_thread(void) +{ + DBG_TRACE(cout<<"omni_thread::~omni_thread for thread "<wait(); + mutex.unlock(); + + if(status) + *status = return_val; + + delete this; +} + + +// +// Change this thread's priority. +// +void omni_thread::set_priority(priority_t pri) +{ + omni_mutex_lock l(mutex); + + DBG_ASSERT(assert(_state == STATE_RUNNING)); + + if(_state != STATE_RUNNING) + { + DBG_THROW(throw omni_thread_invalid()); + } + + _priority = pri; + + if(taskPrioritySet(tid, vxworks_priority(pri))==ERROR) + { + DBG_ASSERT(assert(false)); + + DBG_THROW(throw omni_thread_fatal(errno)); + } +} + + +// +// create - construct a new thread object and start it running. Returns thread +// object if successful, null pointer if not. +// + +// detached version (the entry point is a void) +omni_thread* omni_thread::create(void (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + +// undetached version (the entry point is a void*) +omni_thread* omni_thread::create(void* (*fn)(void*), void* arg, priority_t pri) +{ + omni_thread* t = new omni_thread(fn, arg, pri); + + t->start(); + + return t; +} + + +// +// exit() _must_ lock the mutex even in the case of a detached thread. This is +// because a thread may run to completion before the thread that created it has +// had a chance to get out of start(). By locking the mutex we ensure that the +// creating thread must have reached the end of start() before we delete the +// thread object. Of course, once the call to start() returns, the user can +// still incorrectly refer to the thread object, but that's their problem. +// +void omni_thread::exit(void* return_value) +{ + omni_thread* me = self(); + + if(me) + { + me->mutex.lock(); + + me->return_val = return_value; + me->_state = STATE_TERMINATED; + me->running_cond->signal(); + + me->mutex.unlock(); + + DBG_TRACE(cout<<"omni_thread::exit: thread "<id()<<" detached "<detached<<" return value "<<(int)return_value<detached) + delete me; + } + else + DBG_TRACE(cout<<"omni_thread::exit: called with a non-omnithread. Exit quietly."<spare1 != OMNI_THREAD_ID) + return NULL; + + return (omni_thread*)taskTcb(taskIdSelf())->spare2; +} + + +void omni_thread::yield(void) +{ + taskDelay(NO_WAIT); +} + + +void omni_thread::sleep(unsigned long secs, unsigned long nanosecs) +{ + int tps = sysClkRateGet(); + + // Convert to us to avoid overflow in the multiplication + // tps should always be less than 1000 ! + nanosecs /= 1000; + + taskDelay(secs*tps + (nanosecs*tps)/1000000l); +} + + +void omni_thread::get_time( unsigned long* abs_sec, + unsigned long* abs_nsec, + unsigned long rel_sec, + unsigned long rel_nsec) +{ + timespec abs; + clock_gettime(CLOCK_REALTIME, &abs); + abs.tv_nsec += rel_nsec; + abs.tv_sec += rel_sec + abs.tv_nsec / 1000000000; + abs.tv_nsec = abs.tv_nsec % 1000000000; + *abs_sec = abs.tv_sec; + *abs_nsec = abs.tv_nsec; +} + + +int omni_thread::vxworks_priority(priority_t pri) +{ + switch (pri) + { + case PRIORITY_LOW: + return omni_thread_prio_low; + + case PRIORITY_NORMAL: + return omni_thread_prio_normal; + + case PRIORITY_HIGH: + return omni_thread_prio_high; + } + + DBG_ASSERT(assert(false)); + + DBG_THROW(throw omni_thread_invalid()); +} + + +void omni_thread::stacksize(unsigned long sz) +{ + stack_size = sz; +} + + +unsigned long omni_thread::stacksize() +{ + return stack_size; +} + + +void omni_thread::show(void) +{ + omni_thread *pThread; + int s1, s2; + int tid = taskIdSelf(); + + printf("TaskId is %.8x\n", tid); + + s1 = taskTcb(tid)->spare1; + + if(s1 != OMNI_THREAD_ID) + { + printf("Spare 1 is %.8x, and not recongnized\n", s1); + + return; + } + else + { + printf("Spare 1 indicate an omni_thread.\n"); + } + + s2 = taskTcb(tid)->spare2; + + if(s2 == 0) + { + printf("Spare 2 is NULL! - No thread object attached !!\n"); + + return; + } + else + { + printf("Thread object at %.8x\n", s2); + } + + pThread = (omni_thread *)s2; + + state_t status = pThread->_state; + + printf(" | Thread status is "); + + switch (status) + { + case STATE_NEW: + printf("NEW\n"); break; + case STATE_RUNNING: + printf("STATE_RUNNING\n"); break; + case STATE_TERMINATED: + printf("TERMINATED\n"); break; + default: + printf("Illegal (=%.8x)\n", (unsigned int)status); + + return; + } + + if(pThread->tid != tid) + { + printf(" | Task ID in thread object is different!! (=%.8x)\n", pThread->tid); + + return; + } + else + { + printf(" | Task ID in thread consistent\n"); + } + + printf("\n"); +} + + +// +// Dummy thread +// + +class omni_thread_dummy : public omni_thread { +public: + inline omni_thread_dummy() : omni_thread() + { + _dummy = 1; + _state = STATE_RUNNING; + + // Adjust data members of this instance + tid = taskIdSelf(); + + // Set the thread values so it can be recongnised as a omni_thread + // Set the id last can possibly prevent race condition + taskTcb(tid)->spare2 = (int)this; + taskTcb(tid)->spare1 = OMNI_THREAD_ID; + } + inline ~omni_thread_dummy() + { + taskTcb(taskIdSelf())->spare1 = 0; + } +}; + +omni_thread* +omni_thread::create_dummy() +{ + if (omni_thread::self()) + throw omni_thread_invalid(); + + return new omni_thread_dummy; +} + +void +omni_thread::release_dummy() +{ + omni_thread* self = omni_thread::self(); + if (!self || !self->_dummy) + throw omni_thread_invalid(); + + omni_thread_dummy* dummy = (omni_thread_dummy*)self; + delete dummy; +} + + +#define INSIDE_THREAD_IMPL_CC +#include "threaddata.cc" +#undef INSIDE_THREAD_IMPL_CC diff --git a/pmt/Makefile.am b/pmt/Makefile.am new file mode 100644 index 00000000..758eb1d9 --- /dev/null +++ b/pmt/Makefile.am @@ -0,0 +1,30 @@ +# +# Copyright 2004,2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = pmt.pc.in + +SUBDIRS = src +DIST_SUBDIRS = src doc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = pmt.pc diff --git a/pmt/Makefile.in b/pmt/Makefile.in new file mode 100644 index 00000000..0e20a31f --- /dev/null +++ b/pmt/Makefile.in @@ -0,0 +1,1066 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/pmt.pc.in $(top_srcdir)/Makefile.common +subdir = pmt +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = pmt.pc +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +EXTRA_DIST = pmt.pc.in +SUBDIRS = src +DIST_SUBDIRS = src doc +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = pmt.pc +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pmt/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu pmt/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +pmt.pc: $(top_builddir)/config.status $(srcdir)/pmt.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pmt/README b/pmt/README new file mode 100644 index 00000000..59a1f4ac --- /dev/null +++ b/pmt/README @@ -0,0 +1,26 @@ +# +# Copyright 2006 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. +# + +This directory hierarchy contains an implementation of +polymorphic types. These are similar to lisp or python data objects, +and implement transparent reference counting using the boost shared_ptr +templates. + diff --git a/pmt/doc/Makefile.am b/pmt/doc/Makefile.am new file mode 100644 index 00000000..a806b25c --- /dev/null +++ b/pmt/doc/Makefile.am @@ -0,0 +1,44 @@ +# +# Copyright 2004,2005,2006 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. +# + +TARGETS = + + +# To avoid build problems for folks who don't have xmlto installed, we +# don't build the docs by default. + +# html: $(TARGETS) +all: $(TARGETS) + + +EXTRA_DIST = + +BUILT_XML_FILES = + + +# ---------------------------------------------------------------- + +clean: + -rm -f $(TARGETS) $(BUILT_XML_FILES) + +# This is non-portable pattern rule. +#%.html : %.xml +# xmlto html-nochunks $< diff --git a/pmt/doc/Makefile.in b/pmt/doc/Makefile.in new file mode 100644 index 00000000..9da82ede --- /dev/null +++ b/pmt/doc/Makefile.in @@ -0,0 +1,753 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2004,2005,2006 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = pmt/doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +TARGETS = +EXTRA_DIST = +BUILT_XML_FILES = +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pmt/doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu pmt/doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# To avoid build problems for folks who don't have xmlto installed, we +# don't build the docs by default. + +# html: $(TARGETS) +all: $(TARGETS) + +# ---------------------------------------------------------------- + +clean: + -rm -f $(TARGETS) $(BUILT_XML_FILES) + +# This is non-portable pattern rule. +#%.html : %.xml +# xmlto html-nochunks $< +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pmt/pmt.pc.in b/pmt/pmt.pc.in new file mode 100644 index 00000000..5a48ea20 --- /dev/null +++ b/pmt/pmt.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: pmt +Description: The GNU Radio Polymorphic Type library +Requires: gnuradio-omnithread +Version: @VERSION@ +Libs: -L${libdir} -lpmt +Cflags: -I${includedir} @DEFINES@ diff --git a/pmt/src/Makefile.am b/pmt/src/Makefile.am new file mode 100644 index 00000000..8ce9b3d0 --- /dev/null +++ b/pmt/src/Makefile.am @@ -0,0 +1,22 @@ +# +# Copyright 2006,2007 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. +# + +SUBDIRS = lib scheme diff --git a/pmt/src/Makefile.in b/pmt/src/Makefile.in new file mode 100644 index 00000000..ba8bc230 --- /dev/null +++ b/pmt/src/Makefile.in @@ -0,0 +1,896 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2006,2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = pmt/src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = lib scheme +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pmt/src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu pmt/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pmt/src/lib/Makefile.am b/pmt/src/lib/Makefile.am new file mode 100644 index 00000000..32e5210d --- /dev/null +++ b/pmt/src/lib/Makefile.am @@ -0,0 +1,123 @@ +# +# Copyright 2006,2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(BOOST_CPPFLAGS) \ + $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + +TESTS = test_pmt + +lib_LTLIBRARIES = libpmt.la libpmt-qa.la + +# ---------------------------------------------------------------- +# these scripts generate code + +code_generator = \ + generate_unv.py \ + unv_template.h.t \ + unv_template.cc.t \ + unv_qa_template.cc.t + +GENERATED_H = \ + pmt_unv_int.h \ + qa_pmt_unv.h + +GENERATED_CC = \ + pmt_unv.cc \ + qa_pmt_unv.cc + +python_built_sources = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC) + +BUILT_SOURCES = $(python_built_sources) pmt_serial_tags.h + +# ---------------------------------------------------------------- + +EXTRA_DIST = \ + $(code_generator) + +# These are the source files that go into the pmt shared library +libpmt_la_SOURCES = \ + pmt.cc \ + pmt_io.cc \ + pmt_pool.cc \ + pmt_serialize.cc \ + pmt_unv.cc + +# magic flags +libpmt_la_LDFLAGS = $(NO_UNDEFINED) + +# link the library against the c++ standard library +libpmt_la_LIBADD = \ + $(OMNITHREAD_LA) \ + -lstdc++ + +include_HEADERS = \ + pmt.h \ + pmt_pool.h \ + pmt_serial_tags.h + +noinst_HEADERS = \ + $(GENERATED_H) \ + pmt_int.h \ + qa_pmt.h \ + qa_pmt_prims.h + + +# Build the qa code into its own library + +libpmt_qa_la_SOURCES = \ + qa_pmt.cc \ + qa_pmt_prims.cc \ + qa_pmt_unv.cc + +# magic flags +libpmt_qa_la_LDFLAGS = $(NO_UNDEFINED) -avoid version + +libpmt_qa_la_LIBADD = \ + libpmt.la \ + $(CPPUNIT_LIBS) \ + -lstdc++ + + +noinst_PROGRAMS = \ + test_pmt + + +LIBPMT = libpmt.la +LIBPMTQA = libpmt-qa.la $(LIBPMT) + +test_pmt_SOURCES = test_pmt.cc +test_pmt_LDADD = $(LIBPMTQA) + +# Do creation and inclusion of other Makefiles last + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(python_built_sources) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/pmt/src/lib srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_unv.py +include $(top_srcdir)/Makefile.par.gen + +# Rule to create the build header file using GUILE +# Doesn't need parallel protections because there is a single target +pmt_serial_tags.h: $(srcdir)/../scheme/gnuradio/gen-serial-tags.scm $(srcdir)/../scheme/gnuradio/pmt-serial-tags.scm + $(RUN_GUILE) $(srcdir)/../scheme/gnuradio/gen-serial-tags.scm $(srcdir)/../scheme/gnuradio/pmt-serial-tags.scm pmt_serial_tags.h diff --git a/pmt/src/lib/Makefile.in b/pmt/src/lib/Makefile.in new file mode 100644 index 00000000..c98245f0 --- /dev/null +++ b/pmt/src/lib/Makefile.in @@ -0,0 +1,1296 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2006,2008 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 -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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. +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.par.gen +TESTS = test_pmt$(EXEEXT) +noinst_PROGRAMS = test_pmt$(EXEEXT) +subdir = pmt/src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libpmt_qa_la_DEPENDENCIES = libpmt.la $(am__DEPENDENCIES_1) +am_libpmt_qa_la_OBJECTS = qa_pmt.lo qa_pmt_prims.lo qa_pmt_unv.lo +libpmt_qa_la_OBJECTS = $(am_libpmt_qa_la_OBJECTS) +libpmt_qa_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libpmt_qa_la_LDFLAGS) $(LDFLAGS) -o $@ +libpmt_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am_libpmt_la_OBJECTS = pmt.lo pmt_io.lo pmt_pool.lo pmt_serialize.lo \ + pmt_unv.lo +libpmt_la_OBJECTS = $(am_libpmt_la_OBJECTS) +libpmt_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libpmt_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(noinst_PROGRAMS) +am_test_pmt_OBJECTS = test_pmt.$(OBJEXT) +test_pmt_OBJECTS = $(am_test_pmt_OBJECTS) +test_pmt_DEPENDENCIES = $(LIBPMTQA) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libpmt_qa_la_SOURCES) $(libpmt_la_SOURCES) \ + $(test_pmt_SOURCES) +DIST_SOURCES = $(libpmt_qa_la_SOURCES) $(libpmt_la_SOURCES) \ + $(test_pmt_SOURCES) +includeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(include_HEADERS) $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/stamp-sources-generate* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT stamp-sources-generate +AM_CPPFLAGS = $(DEFINES) $(OMNITHREAD_INCLUDES) $(BOOST_CPPFLAGS) \ + $(CPPUNIT_INCLUDES) $(WITH_INCLUDES) + +lib_LTLIBRARIES = libpmt.la libpmt-qa.la + +# ---------------------------------------------------------------- +# these scripts generate code +code_generator = \ + generate_unv.py \ + unv_template.h.t \ + unv_template.cc.t \ + unv_qa_template.cc.t + +GENERATED_H = \ + pmt_unv_int.h \ + qa_pmt_unv.h + +GENERATED_CC = \ + pmt_unv.cc \ + qa_pmt_unv.cc + +python_built_sources = $(GENERATED_H) $(GENERATED_I) $(GENERATED_CC) +BUILT_SOURCES = $(python_built_sources) pmt_serial_tags.h + +# ---------------------------------------------------------------- +EXTRA_DIST = $(code_generator) stamp-sources-generate + +# These are the source files that go into the pmt shared library +libpmt_la_SOURCES = \ + pmt.cc \ + pmt_io.cc \ + pmt_pool.cc \ + pmt_serialize.cc \ + pmt_unv.cc + + +# magic flags +libpmt_la_LDFLAGS = $(NO_UNDEFINED) + +# link the library against the c++ standard library +libpmt_la_LIBADD = \ + $(OMNITHREAD_LA) \ + -lstdc++ + +include_HEADERS = \ + pmt.h \ + pmt_pool.h \ + pmt_serial_tags.h + +noinst_HEADERS = \ + $(GENERATED_H) \ + pmt_int.h \ + qa_pmt.h \ + qa_pmt_prims.h + + +# Build the qa code into its own library +libpmt_qa_la_SOURCES = \ + qa_pmt.cc \ + qa_pmt_prims.cc \ + qa_pmt_unv.cc + + +# magic flags +libpmt_qa_la_LDFLAGS = $(NO_UNDEFINED) -avoid version +libpmt_qa_la_LIBADD = \ + libpmt.la \ + $(CPPUNIT_LIBS) \ + -lstdc++ + +LIBPMT = libpmt.la +LIBPMTQA = libpmt-qa.la $(LIBPMT) +test_pmt_SOURCES = test_pmt.cc +test_pmt_LDADD = $(LIBPMTQA) + +# Do creation and inclusion of other Makefiles last + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(python_built_sources) +gen_sources_deps = $(core_generator) +par_gen_command = PYTHONPATH=$(top_srcdir)/pmt/src/lib srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_unv.py +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.par.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pmt/src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu pmt/src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libpmt-qa.la: $(libpmt_qa_la_OBJECTS) $(libpmt_qa_la_DEPENDENCIES) + $(libpmt_qa_la_LINK) -rpath $(libdir) $(libpmt_qa_la_OBJECTS) $(libpmt_qa_la_LIBADD) $(LIBS) +libpmt.la: $(libpmt_la_OBJECTS) $(libpmt_la_DEPENDENCIES) + $(libpmt_la_LINK) -rpath $(libdir) $(libpmt_la_OBJECTS) $(libpmt_la_LIBADD) $(LIBS) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +test_pmt$(EXEEXT): $(test_pmt_OBJECTS) $(test_pmt_DEPENDENCIES) + @rm -f test_pmt$(EXEEXT) + $(CXXLINK) $(test_pmt_OBJECTS) $(test_pmt_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmt_io.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmt_pool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmt_serialize.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmt_unv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_pmt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_pmt_prims.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qa_pmt_unv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_pmt.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ + $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ + rm -f "$(DESTDIR)$(includedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-includeHEADERS install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +STAMPS ?= +EXTRA_DIST ?= +MOSTLYCLEANFILES ?= + +stamp-sources-generate: $(gen_sources_deps) + @rm -f $(DEPDIR)/stamp-sources-generate-tmp + @touch $(DEPDIR)/stamp-sources-generate-tmp + $(par_gen_command) + @mv -f $(DEPDIR)/stamp-sources-generate-tmp $@ + +$(gen_sources): stamp-sources-generate + @if test -f $@; then :; else \ + trap 'rm -rf $(DEPDIR)/stamp-sources-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/stamp-sources-generate-lock 2>/dev/null; then \ + rm -f stamp-sources-generate; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-sources-generate; \ + rmdir $(DEPDIR)/stamp-sources-generate-lock; \ + else \ + while test -d $(DEPDIR)/stamp-sources-generate-lock; do sleep 1; done; \ + test -f stamp-sources-generate; exit $$?; \ + fi; \ + fi; + +# Rule to create the build header file using GUILE +# Doesn't need parallel protections because there is a single target +pmt_serial_tags.h: $(srcdir)/../scheme/gnuradio/gen-serial-tags.scm $(srcdir)/../scheme/gnuradio/pmt-serial-tags.scm + $(RUN_GUILE) $(srcdir)/../scheme/gnuradio/gen-serial-tags.scm $(srcdir)/../scheme/gnuradio/pmt-serial-tags.scm pmt_serial_tags.h +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pmt/src/lib/generate_unv.py b/pmt/src/lib/generate_unv.py new file mode 100755 index 00000000..2abafa4c --- /dev/null +++ b/pmt/src/lib/generate_unv.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python +# +# Copyright 2006 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. +# + +""" +Generate code for uniform numeric vectors +""" + +import re, os, os.path + + +unv_types = ( + ('u8', 'uint8_t'), + ('s8', 'int8_t'), + ('u16', 'uint16_t'), + ('s16', 'int16_t'), + ('u32', 'uint32_t'), + ('s32', 'int32_t'), + ('u64', 'uint64_t'), + ('s64', 'int64_t'), + ('f32', 'float'), + ('f64', 'double'), + ('c32', 'std::complex'), + ('c64', 'std::complex') + ) + +header = """\ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ +""" + +guard_tail = """ +#endif +""" + +includes = """ +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include "pmt_int.h" + +""" + +qa_includes = """ +#include +#include +#include +#include + +""" + + +# set srcdir to the directory that contains Makefile.am +try: + srcdir = os.environ['srcdir'] +except KeyError, e: + srcdir = "." +srcdir = srcdir + '/' + + +def open_src (name, mode): + global srcdir + return open(os.path.join (srcdir, name), mode) + + +def guard_name(filename): + return 'INCLUDED_' + re.sub('\.', '_', filename.upper()) + +def guard_head(filename): + guard = guard_name(filename) + return """ +#ifndef %s +#define %s +""" % (guard, guard) + + +def do_substitution (d, input, out_file): + def repl (match_obj): + key = match_obj.group (1) + # print key + return d[key] + + out = re.sub (r"@([a-zA-Z0-9_]+)@", repl, input) + out_file.write (out) + + +def generate_h(): + template = open_src('unv_template.h.t', 'r').read() + output_filename = 'pmt_unv_int.h' + output = open(output_filename, 'w') + output.write(header) + output.write(guard_head(output_filename)) + for tag, typ in unv_types: + d = { 'TAG' : tag, 'TYPE' : typ } + do_substitution(d, template, output) + output.write(guard_tail) + +def generate_cc(): + template = open_src('unv_template.cc.t', 'r').read() + output = open('pmt_unv.cc', 'w') + output.write(header) + output.write(includes) + for tag, typ in unv_types: + d = { 'TAG' : tag, 'TYPE' : typ } + do_substitution(d, template, output) + + +def generate_qa_h(): + output_filename = 'qa_pmt_unv.h' + output = open(output_filename, 'w') + output.write(header) + output.write(guard_head(output_filename)) + + output.write(''' +#include +#include + +class qa_pmt_unv : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_pmt_unv); +''') + for tag, typ in unv_types: + output.write(' CPPUNIT_TEST(test_%svector);\n' % (tag,)) + output.write('''\ + CPPUNIT_TEST_SUITE_END(); + + private: +''') + for tag, typ in unv_types: + output.write(' void test_%svector();\n' % (tag,)) + output.write('};\n') + output.write(guard_tail) + +def generate_qa_cc(): + template = open_src('unv_qa_template.cc.t', 'r').read() + output = open('qa_pmt_unv.cc', 'w') + output.write(header) + output.write(qa_includes) + for tag, typ in unv_types: + d = { 'TAG' : tag, 'TYPE' : typ } + do_substitution(d, template, output) + + +def main(): + generate_h() + generate_cc() + generate_qa_h() + generate_qa_cc() + +if __name__ == '__main__': + main() diff --git a/pmt/src/lib/pmt.cc b/pmt/src/lib/pmt.cc new file mode 100644 index 00000000..f233a139 --- /dev/null +++ b/pmt/src/lib/pmt.cc @@ -0,0 +1,1028 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include "pmt_int.h" +#include +#include +#include + +static const int CACHE_LINE_SIZE = 64; // good guess + +# if (PMT_LOCAL_ALLOCATOR) + +static pmt_pool global_pmt_pool(sizeof(pmt_pair), CACHE_LINE_SIZE); + +void * +pmt_base::operator new(size_t size) +{ + void *p = global_pmt_pool.malloc(); + + // fprintf(stderr, "pmt_base::new p = %p\n", p); + assert((reinterpret_cast(p) & (CACHE_LINE_SIZE - 1)) == 0); + return p; +} + +void +pmt_base::operator delete(void *p, size_t size) +{ + global_pmt_pool.free(p); +} + +#endif + + +pmt_base::~pmt_base() +{ + // nop -- out of line virtual destructor +} + +//////////////////////////////////////////////////////////////////////////// +// Exceptions +//////////////////////////////////////////////////////////////////////////// + +pmt_exception::pmt_exception(const std::string &msg, pmt_t obj) + : logic_error(msg + ": " + pmt_write_string(obj)) +{ +} + +pmt_wrong_type::pmt_wrong_type(const std::string &msg, pmt_t obj) + : pmt_exception(msg + ": wrong_type ", obj) +{ +} + +pmt_out_of_range::pmt_out_of_range(const std::string &msg, pmt_t obj) + : pmt_exception(msg + ": out of range ", obj) +{ +} + +pmt_notimplemented::pmt_notimplemented(const std::string &msg, pmt_t obj) + : pmt_exception(msg + ": notimplemented ", obj) +{ +} + +//////////////////////////////////////////////////////////////////////////// +// Dynamic Casts +//////////////////////////////////////////////////////////////////////////// + +static pmt_symbol * +_symbol(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_integer * +_integer(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_real * +_real(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_complex * +_complex(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_pair * +_pair(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_vector * +_vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_uniform_vector * +_uniform_vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_dict * +_dict(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +static pmt_any * +_any(pmt_t x) +{ + return dynamic_cast(x.get()); +} + +//////////////////////////////////////////////////////////////////////////// +// Globals +//////////////////////////////////////////////////////////////////////////// + +const pmt_t PMT_T = pmt_t(new pmt_bool()); // singleton +const pmt_t PMT_F = pmt_t(new pmt_bool()); // singleton +const pmt_t PMT_NIL = pmt_t(new pmt_null()); // singleton +const pmt_t PMT_EOF = pmt_cons(PMT_NIL, PMT_NIL); // singleton + +//////////////////////////////////////////////////////////////////////////// +// Booleans +//////////////////////////////////////////////////////////////////////////// + +pmt_bool::pmt_bool(){} + +bool +pmt_is_true(pmt_t obj) +{ + return obj != PMT_F; +} + +bool +pmt_is_false(pmt_t obj) +{ + return obj == PMT_F; +} + +bool +pmt_is_bool(pmt_t obj) +{ + return obj->is_bool(); +} + +pmt_t +pmt_from_bool(bool val) +{ + return val ? PMT_T : PMT_F; +} + +bool +pmt_to_bool(pmt_t val) +{ + if (val == PMT_T) + return true; + if (val == PMT_F) + return false; + throw pmt_wrong_type("pmt_to_bool", val); +} + +//////////////////////////////////////////////////////////////////////////// +// Symbols +//////////////////////////////////////////////////////////////////////////// + +static const unsigned int SYMBOL_HASH_TABLE_SIZE = 701; +static std::vector s_symbol_hash_table(SYMBOL_HASH_TABLE_SIZE); + +pmt_symbol::pmt_symbol(const std::string &name) : d_name(name){} + + +static unsigned int +hash_string(const std::string &s) +{ + unsigned int h = 0; + unsigned int g = 0; + + for (std::string::const_iterator p = s.begin(); p != s.end(); ++p){ + h = (h << 4) + (*p & 0xff); + g = h & 0xf0000000; + if (g){ + h = h ^ (g >> 24); + h = h ^ g; + } + } + return h; +} + +bool +pmt_is_symbol(pmt_t obj) +{ + return obj->is_symbol(); +} + +pmt_t +pmt_string_to_symbol(const std::string &name) +{ + unsigned hash = hash_string(name) % SYMBOL_HASH_TABLE_SIZE; + + // Does a symbol with this name already exist? + for (pmt_t sym = s_symbol_hash_table[hash]; sym; sym = _symbol(sym)->next()){ + if (name == _symbol(sym)->name()) + return sym; // Yes. Return it + } + + // Nope. Make a new one. + pmt_t sym = pmt_t(new pmt_symbol(name)); + _symbol(sym)->set_next(s_symbol_hash_table[hash]); + s_symbol_hash_table[hash] = sym; + return sym; +} + +// alias... +pmt_t +pmt_intern(const std::string &name) +{ + return pmt_string_to_symbol(name); +} + +const std::string +pmt_symbol_to_string(pmt_t sym) +{ + if (!sym->is_symbol()) + throw pmt_wrong_type("pmt_symbol_to_string", sym); + + return _symbol(sym)->name(); +} + + + +//////////////////////////////////////////////////////////////////////////// +// Number +//////////////////////////////////////////////////////////////////////////// + +bool +pmt_is_number(pmt_t x) +{ + return x->is_number(); +} + +//////////////////////////////////////////////////////////////////////////// +// Integer +//////////////////////////////////////////////////////////////////////////// + +pmt_integer::pmt_integer(long value) : d_value(value) {} + +bool +pmt_is_integer(pmt_t x) +{ + return x->is_integer(); +} + + +pmt_t +pmt_from_long(long x) +{ + return pmt_t(new pmt_integer(x)); +} + +long +pmt_to_long(pmt_t x) +{ + if (x->is_integer()) + return _integer(x)->value(); + + throw pmt_wrong_type("pmt_to_long", x); +} + +//////////////////////////////////////////////////////////////////////////// +// Real +//////////////////////////////////////////////////////////////////////////// + +pmt_real::pmt_real(double value) : d_value(value) {} + +bool +pmt_is_real(pmt_t x) +{ + return x->is_real(); +} + +pmt_t +pmt_from_double(double x) +{ + return pmt_t(new pmt_real(x)); +} + +double +pmt_to_double(pmt_t x) +{ + if (x->is_real()) + return _real(x)->value(); + if (x->is_integer()) + return _integer(x)->value(); + + throw pmt_wrong_type("pmt_to_double", x); +} + +//////////////////////////////////////////////////////////////////////////// +// Complex +//////////////////////////////////////////////////////////////////////////// + +pmt_complex::pmt_complex(std::complex value) : d_value(value) {} + +bool +pmt_is_complex(pmt_t x) +{ + return x->is_complex(); +} + +pmt_t +pmt_make_rectangular(double re, double im) +{ + return pmt_t(new pmt_complex(std::complex(re, im))); +} + +std::complex +pmt_to_complex(pmt_t x) +{ + if (x->is_complex()) + return _complex(x)->value(); + if (x->is_real()) + return _real(x)->value(); + if (x->is_integer()) + return _integer(x)->value(); + + throw pmt_wrong_type("pmt_to_complex", x); +} + +//////////////////////////////////////////////////////////////////////////// +// Pairs +//////////////////////////////////////////////////////////////////////////// + +pmt_null::pmt_null() {} +pmt_pair::pmt_pair(pmt_t car, pmt_t cdr) : d_car(car), d_cdr(cdr) {} + +bool +pmt_is_null(pmt_t x) +{ + return x == PMT_NIL; +} + +bool +pmt_is_pair(pmt_t obj) +{ + return obj->is_pair(); +} + +pmt_t +pmt_cons(pmt_t x, pmt_t y) +{ + return pmt_t(new pmt_pair(x, y)); +} + +pmt_t +pmt_car(pmt_t pair) +{ + if (pair->is_pair()) + return _pair(pair)->car(); + + throw pmt_wrong_type("pmt_car", pair); +} + +pmt_t +pmt_cdr(pmt_t pair) +{ + if (pair->is_pair()) + return _pair(pair)->cdr(); + + throw pmt_wrong_type("pmt_cdr", pair); +} + +void +pmt_set_car(pmt_t pair, pmt_t obj) +{ + if (pair->is_pair()) + _pair(pair)->set_car(obj); + else + throw pmt_wrong_type("pmt_set_car", pair); +} + +void +pmt_set_cdr(pmt_t pair, pmt_t obj) +{ + if (pair->is_pair()) + _pair(pair)->set_cdr(obj); + else + throw pmt_wrong_type("pmt_set_cdr", pair); +} + +//////////////////////////////////////////////////////////////////////////// +// Vectors +//////////////////////////////////////////////////////////////////////////// + +pmt_vector::pmt_vector(size_t len, pmt_t fill) + : d_v(len) +{ + for (size_t i = 0; i < len; i++) + d_v[i] = fill; +} + +pmt_t +pmt_vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_vector::set(size_t k, pmt_t obj) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_vector_set", pmt_from_long(k)); + d_v[k] = obj; +} + +void +pmt_vector::fill(pmt_t obj) +{ + for (size_t i = 0; i < length(); i++) + d_v[i] = obj; +} + +bool +pmt_is_vector(pmt_t obj) +{ + return obj->is_vector(); +} + +pmt_t +pmt_make_vector(size_t k, pmt_t fill) +{ + return pmt_t(new pmt_vector(k, fill)); +} + +pmt_t +pmt_vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_vector()) + throw pmt_wrong_type("pmt_vector_ref", vector); + return _vector(vector)->ref(k); +} + +void +pmt_vector_set(pmt_t vector, size_t k, pmt_t obj) +{ + if (!vector->is_vector()) + throw pmt_wrong_type("pmt_vector_set", vector); + _vector(vector)->set(k, obj); +} + +void +pmt_vector_fill(pmt_t vector, pmt_t obj) +{ + if (!vector->is_vector()) + throw pmt_wrong_type("pmt_vector_set", vector); + _vector(vector)->fill(obj); +} + +//////////////////////////////////////////////////////////////////////////// +// Uniform Numeric Vectors +//////////////////////////////////////////////////////////////////////////// + +bool +pmt_is_uniform_vector(pmt_t x) +{ + return x->is_uniform_vector(); +} + +const void * +pmt_uniform_vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_uniform_vector()) + throw pmt_wrong_type("pmt_uniform_vector_elements", vector); + return _uniform_vector(vector)->uniform_elements(len); +} + +void * +pmt_uniform_vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_uniform_vector()) + throw pmt_wrong_type("pmt_uniform_vector_writable_elements", vector); + return _uniform_vector(vector)->uniform_writable_elements(len); +} + +//////////////////////////////////////////////////////////////////////////// +// Dictionaries +//////////////////////////////////////////////////////////////////////////// + +pmt_dict::pmt_dict() + : d_alist(PMT_NIL) +{ +} + +void +pmt_dict::set(pmt_t key, pmt_t value) +{ + pmt_t p = pmt_assv(key, d_alist); // look for (key . value) pair + if (pmt_is_pair(p)){ // found existing pair... + pmt_set_cdr(p, value); // overrwrite cdr with new value + } + else { // not in the dict + d_alist = pmt_cons(pmt_cons(key, value), d_alist); // add new (key . value) pair + } +} + +pmt_t +pmt_dict::ref(pmt_t key, pmt_t not_found) const +{ + pmt_t p = pmt_assv(key, d_alist); // look for (key . value) pair + if (pmt_is_pair(p)) + return pmt_cdr(p); + else + return not_found; +} + +bool +pmt_dict::has_key(pmt_t key) const +{ + return pmt_is_pair(pmt_assv(key, d_alist)); +} + +pmt_t +pmt_dict::items() const +{ + return d_alist; +} + +pmt_t +pmt_dict::keys() const +{ + return pmt_map(pmt_car, d_alist); +} + +pmt_t +pmt_dict::values() const +{ + return pmt_map(pmt_cdr, d_alist); +} + +bool +pmt_is_dict(pmt_t obj) +{ + return obj->is_dict(); +} + +pmt_t +pmt_make_dict() +{ + return pmt_t(new pmt_dict()); +} + +void +pmt_dict_set(pmt_t dict, pmt_t key, pmt_t value) +{ + if (!dict->is_dict()) + throw pmt_wrong_type("pmt_dict_set", dict); + + _dict(dict)->set(key, value); +} + +bool +pmt_dict_has_key(pmt_t dict, pmt_t key) +{ + if (!dict->is_dict()) + throw pmt_wrong_type("pmt_dict_has_key", dict); + + return _dict(dict)->has_key(key); +} + +pmt_t +pmt_dict_ref(pmt_t dict, pmt_t key, pmt_t not_found) +{ + if (!dict->is_dict()) + throw pmt_wrong_type("pmt_dict_ref", dict); + + return _dict(dict)->ref(key, not_found); +} + +pmt_t +pmt_dict_items(pmt_t dict) +{ + if (!dict->is_dict()) + throw pmt_wrong_type("pmt_dict_items", dict); + + return _dict(dict)->items(); +} + +pmt_t +pmt_dict_keys(pmt_t dict) +{ + if (!dict->is_dict()) + throw pmt_wrong_type("pmt_dict_keys", dict); + + return _dict(dict)->keys(); +} + +pmt_t +pmt_dict_values(pmt_t dict) +{ + if (!dict->is_dict()) + throw pmt_wrong_type("pmt_dict_values", dict); + + return _dict(dict)->values(); +} + +//////////////////////////////////////////////////////////////////////////// +// Any +//////////////////////////////////////////////////////////////////////////// + +pmt_any::pmt_any(const boost::any &any) : d_any(any) {} + +bool +pmt_is_any(pmt_t obj) +{ + return obj->is_any(); +} + +pmt_t +pmt_make_any(const boost::any &any) +{ + return pmt_t(new pmt_any(any)); +} + +boost::any +pmt_any_ref(pmt_t obj) +{ + if (!obj->is_any()) + throw pmt_wrong_type("pmt_any_ref", obj); + return _any(obj)->ref(); +} + +void +pmt_any_set(pmt_t obj, const boost::any &any) +{ + if (!obj->is_any()) + throw pmt_wrong_type("pmt_any_set", obj); + _any(obj)->set(any); +} + +//////////////////////////////////////////////////////////////////////////// +// General Functions +//////////////////////////////////////////////////////////////////////////// + +bool +pmt_eq(pmt_t x, pmt_t y) +{ + return x == y; +} + +bool +pmt_eqv(pmt_t x, pmt_t y) +{ + if (x == y) + return true; + + if (x->is_integer() && y->is_integer()) + return _integer(x)->value() == _integer(y)->value(); + + if (x->is_real() && y->is_real()) + return _real(x)->value() == _real(y)->value(); + + if (x->is_complex() && y->is_complex()) + return _complex(x)->value() == _complex(y)->value(); + + return false; +} + +bool +pmt_equal(pmt_t x, pmt_t y) +{ + if (pmt_eqv(x, y)) + return true; + + if (x->is_pair() && y->is_pair()) + return pmt_equal(pmt_car(x), pmt_car(y)) && pmt_equal(pmt_cdr(x), pmt_cdr(y)); + + if (x->is_vector() && y->is_vector()){ + pmt_vector *xv = _vector(x); + pmt_vector *yv = _vector(y); + if (xv->length() != yv->length()) + return false; + + for (unsigned i = 0; i < xv->length(); i++) + if (!pmt_equal(xv->_ref(i), yv->_ref(i))) + return false; + + return true; + } + + if (x->is_uniform_vector() && y->is_uniform_vector()){ + pmt_uniform_vector *xv = _uniform_vector(x); + pmt_uniform_vector *yv = _uniform_vector(y); + if (xv->length() != yv->length()) + return false; + + size_t len_x, len_y; + if (memcmp(xv->uniform_elements(len_x), + yv->uniform_elements(len_y), + len_x) == 0) + return true; + + return true; + } + + // FIXME add other cases here... + + return false; +} + +size_t +pmt_length(pmt_t x) +{ + if (x->is_vector()) + return _vector(x)->length(); + + if (x->is_uniform_vector()) + return _uniform_vector(x)->length(); + + if (x->is_pair() || x->is_null()) { + size_t length=0; + while (pmt_is_pair(x)){ + length++; + x = pmt_cdr(x); + } + if (pmt_is_null(x)) + return length; + + // not a proper list + throw pmt_wrong_type("pmt_length", x); + } + + // FIXME dictionary length (number of entries) + + throw pmt_wrong_type("pmt_length", x); +} + +pmt_t +pmt_assq(pmt_t obj, pmt_t alist) +{ + while (pmt_is_pair(alist)){ + pmt_t p = pmt_car(alist); + if (!pmt_is_pair(p)) // malformed alist + return PMT_F; + + if (pmt_eq(obj, pmt_car(p))) + return p; + + alist = pmt_cdr(alist); + } + return PMT_F; +} + +pmt_t +pmt_assv(pmt_t obj, pmt_t alist) +{ + while (pmt_is_pair(alist)){ + pmt_t p = pmt_car(alist); + if (!pmt_is_pair(p)) // malformed alist + return PMT_F; + + if (pmt_eqv(obj, pmt_car(p))) + return p; + + alist = pmt_cdr(alist); + } + return PMT_F; +} + +pmt_t +pmt_assoc(pmt_t obj, pmt_t alist) +{ + while (pmt_is_pair(alist)){ + pmt_t p = pmt_car(alist); + if (!pmt_is_pair(p)) // malformed alist + return PMT_F; + + if (pmt_equal(obj, pmt_car(p))) + return p; + + alist = pmt_cdr(alist); + } + return PMT_F; +} + +pmt_t +pmt_map(pmt_t proc(pmt_t), pmt_t list) +{ + pmt_t r = PMT_NIL; + + while(pmt_is_pair(list)){ + r = pmt_cons(proc(pmt_car(list)), r); + list = pmt_cdr(list); + } + + return pmt_reverse_x(r); +} + +pmt_t +pmt_reverse(pmt_t listx) +{ + pmt_t list = listx; + pmt_t r = PMT_NIL; + + while(pmt_is_pair(list)){ + r = pmt_cons(pmt_car(list), r); + list = pmt_cdr(list); + } + if (pmt_is_null(list)) + return r; + else + throw pmt_wrong_type("pmt_reverse", listx); +} + +pmt_t +pmt_reverse_x(pmt_t list) +{ + // FIXME do it destructively + return pmt_reverse(list); +} + +pmt_t +pmt_nth(size_t n, pmt_t list) +{ + pmt_t t = pmt_nthcdr(n, list); + if (pmt_is_pair(t)) + return pmt_car(t); + else + return PMT_NIL; +} + +pmt_t +pmt_nthcdr(size_t n, pmt_t list) +{ + if (!(pmt_is_null(list) || pmt_is_pair(list))) + throw pmt_wrong_type("pmt_nthcdr", list); + + while (n > 0){ + if (pmt_is_pair(list)){ + list = pmt_cdr(list); + n--; + continue; + } + if (pmt_is_null(list)) + return PMT_NIL; + else + throw pmt_wrong_type("pmt_nthcdr: not a LIST", list); + } + return list; +} + +pmt_t +pmt_memq(pmt_t obj, pmt_t list) +{ + while (pmt_is_pair(list)){ + if (pmt_eq(obj, pmt_car(list))) + return list; + list = pmt_cdr(list); + } + return PMT_F; +} + +pmt_t +pmt_memv(pmt_t obj, pmt_t list) +{ + while (pmt_is_pair(list)){ + if (pmt_eqv(obj, pmt_car(list))) + return list; + list = pmt_cdr(list); + } + return PMT_F; +} + +pmt_t +pmt_member(pmt_t obj, pmt_t list) +{ + while (pmt_is_pair(list)){ + if (pmt_equal(obj, pmt_car(list))) + return list; + list = pmt_cdr(list); + } + return PMT_F; +} + +bool +pmt_subsetp(pmt_t list1, pmt_t list2) +{ + while (pmt_is_pair(list1)){ + pmt_t p = pmt_car(list1); + if (pmt_is_false(pmt_memv(p, list2))) + return false; + list1 = pmt_cdr(list1); + } + return true; +} + +pmt_t +pmt_list1(pmt_t x1) +{ + return pmt_cons(x1, PMT_NIL); +} + +pmt_t +pmt_list2(pmt_t x1, pmt_t x2) +{ + return pmt_cons(x1, pmt_cons(x2, PMT_NIL)); +} + +pmt_t +pmt_list3(pmt_t x1, pmt_t x2, pmt_t x3) +{ + return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, PMT_NIL))); +} + +pmt_t +pmt_list4(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4) +{ + return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, pmt_cons(x4, PMT_NIL)))); +} + +pmt_t +pmt_list5(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5) +{ + return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, pmt_cons(x4, pmt_cons(x5, PMT_NIL))))); +} + +pmt_t +pmt_list6(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5, pmt_t x6) +{ + return pmt_cons(x1, pmt_cons(x2, pmt_cons(x3, pmt_cons(x4, pmt_cons(x5, pmt_cons(x6, PMT_NIL)))))); +} + +pmt_t +pmt_list_add(pmt_t list, pmt_t item) +{ + return pmt_reverse(pmt_cons(item, pmt_reverse(list))); +} + +pmt_t +pmt_caar(pmt_t pair) +{ + return (pmt_car(pmt_car(pair))); +} + +pmt_t +pmt_cadr(pmt_t pair) +{ + return pmt_car(pmt_cdr(pair)); +} + +pmt_t +pmt_cdar(pmt_t pair) +{ + return pmt_cdr(pmt_car(pair)); +} + +pmt_t +pmt_cddr(pmt_t pair) +{ + return pmt_cdr(pmt_cdr(pair)); +} + +pmt_t +pmt_caddr(pmt_t pair) +{ + return pmt_car(pmt_cdr(pmt_cdr(pair))); +} + +pmt_t +pmt_cadddr(pmt_t pair) +{ + return pmt_car(pmt_cdr(pmt_cdr(pmt_cdr(pair)))); +} + +bool +pmt_is_eof_object(pmt_t obj) +{ + return pmt_eq(obj, PMT_EOF); +} + +void +pmt_dump_sizeof() +{ + printf("sizeof(pmt_t) = %3zd\n", sizeof(pmt_t)); + printf("sizeof(pmt_base) = %3zd\n", sizeof(pmt_base)); + printf("sizeof(pmt_bool) = %3zd\n", sizeof(pmt_bool)); + printf("sizeof(pmt_symbol) = %3zd\n", sizeof(pmt_symbol)); + printf("sizeof(pmt_integer) = %3zd\n", sizeof(pmt_integer)); + printf("sizeof(pmt_real) = %3zd\n", sizeof(pmt_real)); + printf("sizeof(pmt_complex) = %3zd\n", sizeof(pmt_complex)); + printf("sizeof(pmt_null) = %3zd\n", sizeof(pmt_null)); + printf("sizeof(pmt_pair) = %3zd\n", sizeof(pmt_pair)); + printf("sizeof(pmt_vector) = %3zd\n", sizeof(pmt_vector)); + printf("sizeof(pmt_dict) = %3zd\n", sizeof(pmt_dict)); + printf("sizeof(pmt_uniform_vector) = %3zd\n", sizeof(pmt_uniform_vector)); +} diff --git a/pmt/src/lib/pmt.h b/pmt/src/lib/pmt.h new file mode 100644 index 00000000..a69d24a0 --- /dev/null +++ b/pmt/src/lib/pmt.h @@ -0,0 +1,678 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006,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. + */ + +#ifndef INCLUDED_PMT_H +#define INCLUDED_PMT_H + +#include +#include +#include +#include +#include +#include +#include + +/*! + * This file defines a polymorphic type and the operations on it. + * + * It draws heavily on the idea of scheme and lisp data types. + * The interface parallels that in Guile 1.8, with the notable + * exception that these objects are transparently reference counted. + */ + +/*! + * \brief base class of all pmt types + */ +class pmt_base; + +/*! + * \brief typedef for shared pointer (transparent reference counting). + * See http://www.boost.org/libs/smart_ptr/smart_ptr.htm + */ +typedef boost::shared_ptr pmt_t; + + +class pmt_exception : public std::logic_error +{ +public: + pmt_exception(const std::string &msg, pmt_t obj); +}; + +class pmt_wrong_type : public pmt_exception +{ +public: + pmt_wrong_type(const std::string &msg, pmt_t obj); +}; + +class pmt_out_of_range : public pmt_exception +{ +public: + pmt_out_of_range(const std::string &msg, pmt_t obj); +}; + +class pmt_notimplemented : public pmt_exception +{ +public: + pmt_notimplemented(const std::string &msg, pmt_t obj); +}; + +/* + * ------------------------------------------------------------------------ + * Booleans. Two constants, #t and #f. + * + * In predicates, anything that is not #f is considered true. + * I.e., there is a single false value, #f. + * ------------------------------------------------------------------------ + */ +extern const pmt_t PMT_T; //< \#t : boolean true constant +extern const pmt_t PMT_F; //< \#f : boolean false constant + +//! Return true if obj is \#t or \#f, else return false. +bool pmt_is_bool(pmt_t obj); + +//! Return false if obj is \#f, else return true. +bool pmt_is_true(pmt_t obj); + +//! Return true if obj is \#f, else return true. +bool pmt_is_false(pmt_t obj); + +//! Return \#f is val is false, else return \#t. +pmt_t pmt_from_bool(bool val); + +//! Return true if val is PMT_T, return false when val is PMT_F, +// else raise wrong_type exception. +bool pmt_to_bool(pmt_t val); + +/* + * ------------------------------------------------------------------------ + * Symbols + * ------------------------------------------------------------------------ + */ + +//! Return true if obj is a symbol, else false. +bool pmt_is_symbol(pmt_t obj); + +//! Return the symbol whose name is \p s. +pmt_t pmt_string_to_symbol(const std::string &s); + +//! Alias for pmt_string_to_symbol +pmt_t pmt_intern(const std::string &s); + + +/*! + * If \p is a symbol, return the name of the symbol as a string. + * Otherwise, raise the wrong_type exception. + */ +const std::string pmt_symbol_to_string(pmt_t sym); + +/* + * ------------------------------------------------------------------------ + * Numbers: we support integer, real and complex + * ------------------------------------------------------------------------ + */ + +//! Return true if obj is any kind of number, else false. +bool pmt_is_number(pmt_t obj); + +/* + * ------------------------------------------------------------------------ + * Integers + * ------------------------------------------------------------------------ + */ + +//! Return true if \p x is an integer number, else false +bool pmt_is_integer(pmt_t x); + +//! Return the pmt value that represents the integer \p x. +pmt_t pmt_from_long(long x); + +/*! + * \brief Convert pmt to long if possible. + * + * When \p x represents an exact integer that fits in a long, + * return that integer. Else raise an exception, either wrong_type + * when x is not an exact integer, or out_of_range when it doesn't fit. + */ +long pmt_to_long(pmt_t x); + +/* + * ------------------------------------------------------------------------ + * Reals + * ------------------------------------------------------------------------ + */ + +/* + * \brief Return true if \p obj is a real number, else false. + */ +bool pmt_is_real(pmt_t obj); + +//! Return the pmt value that represents double \p x. +pmt_t pmt_from_double(double x); + +/*! + * \brief Convert pmt to double if possible. + * + * Returns the number closest to \p val that is representable + * as a double. The argument \p val must be a real or integer, otherwise + * a wrong_type exception is raised. + */ +double pmt_to_double(pmt_t x); + +/* + * ------------------------------------------------------------------------ + * Complex + * ------------------------------------------------------------------------ + */ + +/*! + * \brief return true if \p obj is a complex number, false otherwise. + */ +bool pmt_is_complex(pmt_t obj); + +//! Return a complex number constructed of the given real and imaginary parts. +pmt_t pmt_make_rectangular(double re, double im); + +/*! + * If \p z is complex, real or integer, return the closest complex. + * Otherwise, raise the wrong_type exception. + */ +std::complex pmt_to_complex(pmt_t z); + +/* + * ------------------------------------------------------------------------ + * Pairs + * ------------------------------------------------------------------------ + */ + +extern const pmt_t PMT_NIL; //< the empty list + +//! Return true if \p x is the empty list, otherwise return false. +bool pmt_is_null(pmt_t x); + +//! Return true if \p obj is a pair, else false. +bool pmt_is_pair(pmt_t obj); + +//! Return a newly allocated pair whose car is \p x and whose cdr is \p y. +pmt_t pmt_cons(pmt_t x, pmt_t y); + +//! If \p pair is a pair, return the car of the \p pair, otherwise raise wrong_type. +pmt_t pmt_car(pmt_t pair); + +//! If \p pair is a pair, return the cdr of the \p pair, otherwise raise wrong_type. +pmt_t pmt_cdr(pmt_t pair); + +//! Stores \p value in the car field of \p pair. +void pmt_set_car(pmt_t pair, pmt_t value); + +//! Stores \p value in the cdr field of \p pair. +void pmt_set_cdr(pmt_t pair, pmt_t value); + +pmt_t pmt_caar(pmt_t pair); +pmt_t pmt_cadr(pmt_t pair); +pmt_t pmt_cdar(pmt_t pair); +pmt_t pmt_cddr(pmt_t pair); +pmt_t pmt_caddr(pmt_t pair); +pmt_t pmt_cadddr(pmt_t pair); + +/* + * ------------------------------------------------------------------------ + * Vectors + * + * These vectors can hold any kind of objects. Indexing is zero based. + * ------------------------------------------------------------------------ + */ + +//! Return true if \p x is a vector, othewise false. +bool pmt_is_vector(pmt_t x); + +//! Make a vector of length \p k, with initial values set to \p fill +pmt_t pmt_make_vector(size_t k, pmt_t fill); + +/*! + * Return the contents of position \p k of \p vector. + * \p k must be a valid index of \p vector. + */ +pmt_t pmt_vector_ref(pmt_t vector, size_t k); + +//! Store \p obj in position \p k. +void pmt_vector_set(pmt_t vector, size_t k, pmt_t obj); + +//! Store \p fill in every position of \p vector +void pmt_vector_fill(pmt_t vector, pmt_t fill); + +/*! + *
+ * ------------------------------------------------------------------------
+ *		       Uniform Numeric Vectors
+ *
+ * A uniform numeric vector is a vector whose elements are all of single
+ * numeric type.  pmt offers uniform numeric vectors for signed and
+ * unsigned 8-bit, 16-bit, 32-bit, and 64-bit integers, two sizes of
+ * floating point values, and complex floating-point numbers of these
+ * two sizes.  Indexing is zero based.
+ *
+ * The names of the functions include these tags in their names:
+ *
+ *    u8  unsigned 8-bit integers
+ *    s8  signed 8-bit integers
+ *   u16  unsigned 16-bit integers
+ *   s16  signed 16-bit integers
+ *   u32  unsigned 32-bit integers
+ *   s32  signed 32-bit integers
+ *   u64  unsigned 64-bit integers
+ *   s64  signed 64-bit integers
+ *   f32  the C++ type float
+ *   f64  the C++ type double
+ *   c32  the C++ type complex
+ *   c64  the C++ type complex
+ * ------------------------------------------------------------------------
+ * 
+ */ + +//! true if \p x is any kind of uniform numeric vector +bool pmt_is_uniform_vector(pmt_t x); + +bool pmt_is_u8vector(pmt_t x); +bool pmt_is_s8vector(pmt_t x); +bool pmt_is_u16vector(pmt_t x); +bool pmt_is_s16vector(pmt_t x); +bool pmt_is_u32vector(pmt_t x); +bool pmt_is_s32vector(pmt_t x); +bool pmt_is_u64vector(pmt_t x); +bool pmt_is_s64vector(pmt_t x); +bool pmt_is_f32vector(pmt_t x); +bool pmt_is_f64vector(pmt_t x); +bool pmt_is_c32vector(pmt_t x); +bool pmt_is_c64vector(pmt_t x); + +pmt_t pmt_make_u8vector(size_t k, uint8_t fill); +pmt_t pmt_make_s8vector(size_t k, int8_t fill); +pmt_t pmt_make_u16vector(size_t k, uint16_t fill); +pmt_t pmt_make_s16vector(size_t k, int16_t fill); +pmt_t pmt_make_u32vector(size_t k, uint32_t fill); +pmt_t pmt_make_s32vector(size_t k, int32_t fill); +pmt_t pmt_make_u64vector(size_t k, uint64_t fill); +pmt_t pmt_make_s64vector(size_t k, int64_t fill); +pmt_t pmt_make_f32vector(size_t k, float fill); +pmt_t pmt_make_f64vector(size_t k, double fill); +pmt_t pmt_make_c32vector(size_t k, std::complex fill); +pmt_t pmt_make_c64vector(size_t k, std::complex fill); + +pmt_t pmt_init_u8vector(size_t k, const uint8_t *data); +pmt_t pmt_init_s8vector(size_t k, const int8_t *data); +pmt_t pmt_init_u16vector(size_t k, const uint16_t *data); +pmt_t pmt_init_s16vector(size_t k, const int16_t *data); +pmt_t pmt_init_u32vector(size_t k, const uint32_t *data); +pmt_t pmt_init_s32vector(size_t k, const int32_t *data); +pmt_t pmt_init_u64vector(size_t k, const uint64_t *data); +pmt_t pmt_init_s64vector(size_t k, const int64_t *data); +pmt_t pmt_init_f32vector(size_t k, const float *data); +pmt_t pmt_init_f64vector(size_t k, const double *data); +pmt_t pmt_init_c32vector(size_t k, const std::complex *data); +pmt_t pmt_init_c64vector(size_t k, const std::complex *data); + +uint8_t pmt_u8vector_ref(pmt_t v, size_t k); +int8_t pmt_s8vector_ref(pmt_t v, size_t k); +uint16_t pmt_u16vector_ref(pmt_t v, size_t k); +int16_t pmt_s16vector_ref(pmt_t v, size_t k); +uint32_t pmt_u32vector_ref(pmt_t v, size_t k); +int32_t pmt_s32vector_ref(pmt_t v, size_t k); +uint64_t pmt_u64vector_ref(pmt_t v, size_t k); +int64_t pmt_s64vector_ref(pmt_t v, size_t k); +float pmt_f32vector_ref(pmt_t v, size_t k); +double pmt_f64vector_ref(pmt_t v, size_t k); +std::complex pmt_c32vector_ref(pmt_t v, size_t k); +std::complex pmt_c64vector_ref(pmt_t v, size_t k); + +void pmt_u8vector_set(pmt_t v, size_t k, uint8_t x); //< v[k] = x +void pmt_s8vector_set(pmt_t v, size_t k, int8_t x); +void pmt_u16vector_set(pmt_t v, size_t k, uint16_t x); +void pmt_s16vector_set(pmt_t v, size_t k, int16_t x); +void pmt_u32vector_set(pmt_t v, size_t k, uint32_t x); +void pmt_s32vector_set(pmt_t v, size_t k, int32_t x); +void pmt_u64vector_set(pmt_t v, size_t k, uint64_t x); +void pmt_s64vector_set(pmt_t v, size_t k, int64_t x); +void pmt_f32vector_set(pmt_t v, size_t k, float x); +void pmt_f64vector_set(pmt_t v, size_t k, double x); +void pmt_c32vector_set(pmt_t v, size_t k, std::complex x); +void pmt_c64vector_set(pmt_t v, size_t k, std::complex x); + +// Return const pointers to the elements + +const void *pmt_uniform_vector_elements(pmt_t v, size_t &len); //< works with any; len is in bytes + +const uint8_t *pmt_u8vector_elements(pmt_t v, size_t &len); //< len is in elements +const int8_t *pmt_s8vector_elements(pmt_t v, size_t &len); //< len is in elements +const uint16_t *pmt_u16vector_elements(pmt_t v, size_t &len); //< len is in elements +const int16_t *pmt_s16vector_elements(pmt_t v, size_t &len); //< len is in elements +const uint32_t *pmt_u32vector_elements(pmt_t v, size_t &len); //< len is in elements +const int32_t *pmt_s32vector_elements(pmt_t v, size_t &len); //< len is in elements +const uint64_t *pmt_u64vector_elements(pmt_t v, size_t &len); //< len is in elements +const int64_t *pmt_s64vector_elements(pmt_t v, size_t &len); //< len is in elements +const float *pmt_f32vector_elements(pmt_t v, size_t &len); //< len is in elements +const double *pmt_f64vector_elements(pmt_t v, size_t &len); //< len is in elements +const std::complex *pmt_c32vector_elements(pmt_t v, size_t &len); //< len is in elements +const std::complex *pmt_c64vector_elements(pmt_t v, size_t &len); //< len is in elements + +// Return non-const pointers to the elements + +void *pmt_uniform_vector_writable_elements(pmt_t v, size_t &len); //< works with any; len is in bytes + +uint8_t *pmt_u8vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +int8_t *pmt_s8vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +uint16_t *pmt_u16vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +int16_t *pmt_s16vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +uint32_t *pmt_u32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +int32_t *pmt_s32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +uint64_t *pmt_u64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +int64_t *pmt_s64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +float *pmt_f32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +double *pmt_f64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +std::complex *pmt_c32vector_writable_elements(pmt_t v, size_t &len); //< len is in elements +std::complex *pmt_c64vector_writable_elements(pmt_t v, size_t &len); //< len is in elements + +/* + * ------------------------------------------------------------------------ + * Dictionary (a.k.a associative array, hash, map) + * ------------------------------------------------------------------------ + */ + +//! Return true if \p obj is a dictionary +bool pmt_is_dict(pmt_t obj); + +//! make an empty dictionary +pmt_t pmt_make_dict(); + +//! dict[key] = value +void pmt_dict_set(pmt_t dict, pmt_t key, pmt_t value); + +//! Return true if \p key exists in \p dict +bool pmt_dict_has_key(pmt_t dict, pmt_t key); + +//! If \p key exists in \p dict, return associated value; otherwise return \p not_found. +pmt_t pmt_dict_ref(pmt_t dict, pmt_t key, pmt_t not_found); + +//! Return list of (key . value) pairs +pmt_t pmt_dict_items(pmt_t dict); + +//! Return list of keys +pmt_t pmt_dict_keys(pmt_t dict); + +//! Return list of values +pmt_t pmt_dict_values(pmt_t dict); + +/* + * ------------------------------------------------------------------------ + * Any (wraps boost::any -- can be used to wrap pretty much anything) + * + * Cannot be serialized or used across process boundaries. + * See http://www.boost.org/doc/html/any.html + * ------------------------------------------------------------------------ + */ + +//! Return true if \p obj is an any +bool pmt_is_any(pmt_t obj); + +//! make an any +pmt_t pmt_make_any(const boost::any &any); + +//! Return underlying boost::any +boost::any pmt_any_ref(pmt_t obj); + +//! Store \p any in \p obj +void pmt_any_set(pmt_t obj, const boost::any &any); + + +/* + * ------------------------------------------------------------------------ + * General functions + * ------------------------------------------------------------------------ + */ + +//! Return true if x and y are the same object; otherwise return false. +bool pmt_eq(pmt_t x, pmt_t y); + +/*! + * \brief Return true if x and y should normally be regarded as the same object, else false. + * + *
+ * eqv returns true if:
+ *   x and y are the same object.
+ *   x and y are both \#t or both \#f.
+ *   x and y are both symbols and their names are the same.
+ *   x and y are both numbers, and are numerically equal.
+ *   x and y are both the empty list (nil).
+ *   x and y are pairs or vectors that denote same location in store.
+ * 
+ */ +bool pmt_eqv(pmt_t x, pmt_t y); + +/*! + * pmt_equal recursively compares the contents of pairs and vectors, + * applying pmt_eqv on other objects such as numbers and symbols. + * pmt_equal may fail to terminate if its arguments are circular data + * structures. + */ +bool pmt_equal(pmt_t x, pmt_t y); + + +//! Return the number of elements in v +size_t pmt_length(pmt_t v); + +/*! + * \brief Find the first pair in \p alist whose car field is \p obj + * and return that pair. + * + * \p alist (for "association list") must be a list of pairs. If no pair + * in \p alist has \p obj as its car then \#f is returned. + * Uses pmt_eq to compare \p obj with car fields of the pairs in \p alist. + */ +pmt_t pmt_assq(pmt_t obj, pmt_t alist); + +/*! + * \brief Find the first pair in \p alist whose car field is \p obj + * and return that pair. + * + * \p alist (for "association list") must be a list of pairs. If no pair + * in \p alist has \p obj as its car then \#f is returned. + * Uses pmt_eqv to compare \p obj with car fields of the pairs in \p alist. + */ +pmt_t pmt_assv(pmt_t obj, pmt_t alist); + +/*! + * \brief Find the first pair in \p alist whose car field is \p obj + * and return that pair. + * + * \p alist (for "association list") must be a list of pairs. If no pair + * in \p alist has \p obj as its car then \#f is returned. + * Uses pmt_equal to compare \p obj with car fields of the pairs in \p alist. + */ +pmt_t pmt_assoc(pmt_t obj, pmt_t alist); + +/*! + * \brief Apply \p proc element-wise to the elements of list and returns + * a list of the results, in order. + * + * \p list must be a list. The dynamic order in which \p proc is + * applied to the elements of \p list is unspecified. + */ +pmt_t pmt_map(pmt_t proc(pmt_t), pmt_t list); + +/*! + * \brief reverse \p list. + * + * \p list must be a proper list. + */ +pmt_t pmt_reverse(pmt_t list); + +/*! + * \brief destructively reverse \p list. + * + * \p list must be a proper list. + */ +pmt_t pmt_reverse_x(pmt_t list); + +/*! + * \brief (acons x y a) == (cons (cons x y) a) + */ +inline static pmt_t +pmt_acons(pmt_t x, pmt_t y, pmt_t a) +{ + return pmt_cons(pmt_cons(x, y), a); +} + +/*! + * \brief locates \p nth element of \n list where the car is the 'zeroth' element. + */ +pmt_t pmt_nth(size_t n, pmt_t list); + +/*! + * \brief returns the tail of \p list that would be obtained by calling + * cdr \p n times in succession. + */ +pmt_t pmt_nthcdr(size_t n, pmt_t list); + +/*! + * \brief Return the first sublist of \p list whose car is \p obj. + * If \p obj does not occur in \p list, then \#f is returned. + * pmt_memq use pmt_eq to compare \p obj with the elements of \p list. + */ +pmt_t pmt_memq(pmt_t obj, pmt_t list); + +/*! + * \brief Return the first sublist of \p list whose car is \p obj. + * If \p obj does not occur in \p list, then \#f is returned. + * pmt_memv use pmt_eqv to compare \p obj with the elements of \p list. + */ +pmt_t pmt_memv(pmt_t obj, pmt_t list); + +/*! + * \brief Return the first sublist of \p list whose car is \p obj. + * If \p obj does not occur in \p list, then \#f is returned. + * pmt_member use pmt_equal to compare \p obj with the elements of \p list. + */ +pmt_t pmt_member(pmt_t obj, pmt_t list); + +/*! + * \brief Return true if every element of \p list1 appears in \p list2, and false otherwise. + * Comparisons are done with pmt_eqv. + */ +bool pmt_subsetp(pmt_t list1, pmt_t list2); + +/*! + * \brief Return a list of length 1 containing \p x1 + */ +pmt_t pmt_list1(pmt_t x1); + +/*! + * \brief Return a list of length 2 containing \p x1, \p x2 + */ +pmt_t pmt_list2(pmt_t x1, pmt_t x2); + +/*! + * \brief Return a list of length 3 containing \p x1, \p x2, \p x3 + */ +pmt_t pmt_list3(pmt_t x1, pmt_t x2, pmt_t x3); + +/*! + * \brief Return a list of length 4 containing \p x1, \p x2, \p x3, \p x4 + */ +pmt_t pmt_list4(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4); + +/*! + * \brief Return a list of length 5 containing \p x1, \p x2, \p x3, \p x4, \p x5 + */ +pmt_t pmt_list5(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5); + +/*! + * \brief Return a list of length 6 containing \p x1, \p x2, \p x3, \p x4, \p + * x5, \p x6 + */ +pmt_t pmt_list6(pmt_t x1, pmt_t x2, pmt_t x3, pmt_t x4, pmt_t x5, pmt_t x6); + +/*! + * \brief Return \p list with \p item added to it. + */ +pmt_t pmt_list_add(pmt_t list, pmt_t item); + + +/* + * ------------------------------------------------------------------------ + * read / write + * ------------------------------------------------------------------------ + */ +extern const pmt_t PMT_EOF; //< The end of file object + +//! return true if obj is the EOF object, otherwise return false. +bool pmt_is_eof_object(pmt_t obj); + +/*! + * read converts external representations of pmt objects into the + * objects themselves. Read returns the next object parsable from + * the given input port, updating port to point to the first + * character past the end of the external representation of the + * object. + * + * If an end of file is encountered in the input before any + * characters are found that can begin an object, then an end of file + * object is returned. The port remains open, and further attempts + * to read will also return an end of file object. If an end of file + * is encountered after the beginning of an object's external + * representation, but the external representation is incomplete and + * therefore not parsable, an error is signaled. + */ +pmt_t pmt_read(std::istream &port); + +/*! + * Write a written representation of \p obj to the given \p port. + */ +void pmt_write(pmt_t obj, std::ostream &port); + +/*! + * Return a string representation of \p obj. + * This is the same output as would be generated by pmt_write. + */ +std::string pmt_write_string(pmt_t obj); + + +std::ostream& operator<<(std::ostream &os, pmt_t obj); + + +/* + * ------------------------------------------------------------------------ + * portable byte stream representation + * ------------------------------------------------------------------------ + */ +/*! + * \brief Write portable byte-serial representation of \p obj to \p sink + */ +bool pmt_serialize(pmt_t obj, std::streambuf &sink); + +/*! + * \brief Create obj from portable byte-serial representation + */ +pmt_t pmt_deserialize(std::streambuf &source); + + +void pmt_dump_sizeof(); // debugging + +#endif /* INCLUDED_PMT_H */ diff --git a/pmt/src/lib/pmt_int.h b/pmt/src/lib/pmt_int.h new file mode 100644 index 00000000..285244cb --- /dev/null +++ b/pmt/src/lib/pmt_int.h @@ -0,0 +1,224 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ +#ifndef INCLUDED_PMT_INT_H +#define INCLUDED_PMT_INT_H + +#include +#include + +/* + * EVERYTHING IN THIS FILE IS PRIVATE TO THE IMPLEMENTATION! + * + * See pmt.h for the public interface + */ + +#define PMT_LOCAL_ALLOCATOR 0 // define to 0 or 1 + +class pmt_base : boost::noncopyable { +protected: + pmt_base(){}; + virtual ~pmt_base(); + +public: + virtual bool is_bool() const { return false; } + virtual bool is_symbol() const { return false; } + virtual bool is_number() const { return false; } + virtual bool is_integer() const { return false; } + virtual bool is_real() const { return false; } + virtual bool is_complex() const { return false; } + virtual bool is_null() const { return false; } + virtual bool is_pair() const { return false; } + virtual bool is_vector() const { return false; } + virtual bool is_dict() const { return false; } + virtual bool is_any() const { return false; } + + virtual bool is_uniform_vector() const { return false; } + virtual bool is_u8vector() const { return false; } + virtual bool is_s8vector() const { return false; } + virtual bool is_u16vector() const { return false; } + virtual bool is_s16vector() const { return false; } + virtual bool is_u32vector() const { return false; } + virtual bool is_s32vector() const { return false; } + virtual bool is_u64vector() const { return false; } + virtual bool is_s64vector() const { return false; } + virtual bool is_f32vector() const { return false; } + virtual bool is_f64vector() const { return false; } + virtual bool is_c32vector() const { return false; } + virtual bool is_c64vector() const { return false; } + +# if (PMT_LOCAL_ALLOCATOR) + void *operator new(size_t); + void operator delete(void *, size_t); +#endif +}; + +class pmt_bool : public pmt_base +{ +public: + pmt_bool(); + //~pmt_bool(){} + + bool is_bool() const { return true; } +}; + + +class pmt_symbol : public pmt_base +{ + std::string d_name; + pmt_t d_next; + +public: + pmt_symbol(const std::string &name); + //~pmt_symbol(){} + + bool is_symbol() const { return true; } + const std::string name() { return d_name; } + + pmt_t next() { return d_next; } // symbol table link + void set_next(pmt_t next) { d_next = next; } +}; + +class pmt_integer : public pmt_base +{ + long d_value; + +public: + pmt_integer(long value); + //~pmt_integer(){} + + bool is_number() const { return true; } + bool is_integer() const { return true; } + long value() const { return d_value; } +}; + +class pmt_real : public pmt_base +{ + double d_value; + +public: + pmt_real(double value); + //~pmt_real(){} + + bool is_number() const { return true; } + bool is_real() const { return true; } + double value() const { return d_value; } +}; + +class pmt_complex : public pmt_base +{ + std::complex d_value; + +public: + pmt_complex(std::complex value); + //~pmt_complex(){} + + bool is_number() const { return true; } + bool is_complex() const { return true; } + std::complex value() const { return d_value; } +}; + +class pmt_null : public pmt_base +{ +public: + pmt_null(); + //~pmt_null(){} + + bool is_null() const { return true; } +}; + +class pmt_pair : public pmt_base +{ + pmt_t d_car; + pmt_t d_cdr; + +public: + pmt_pair(pmt_t car, pmt_t cdr); + //~pmt_pair(){}; + + bool is_pair() const { return true; } + pmt_t car() const { return d_car; } + pmt_t cdr() const { return d_cdr; } + + void set_car(pmt_t car) { d_car = car; } + void set_cdr(pmt_t cdr) { d_cdr = cdr; } +}; + +class pmt_vector : public pmt_base +{ + std::vector d_v; + +public: + pmt_vector(size_t len, pmt_t fill); + //~pmt_vector(); + + bool is_vector() const { return true; } + pmt_t ref(size_t k) const; + void set(size_t k, pmt_t obj); + void fill(pmt_t fill); + size_t length() const { return d_v.size(); } + + pmt_t _ref(size_t k) const { return d_v[k]; } +}; + +class pmt_dict : public pmt_base +{ + pmt_t d_alist; // list of (key . value) pairs + +public: + pmt_dict(); + //~pmt_dict(); + + bool is_dict() const { return true; } + void set(pmt_t key, pmt_t value); + pmt_t ref(pmt_t key, pmt_t default_value) const; + bool has_key(pmt_t key) const; + pmt_t items() const; + pmt_t keys() const; + pmt_t values() const; +}; + +class pmt_any : public pmt_base +{ + boost::any d_any; + +public: + pmt_any(const boost::any &any); + //~pmt_any(); + + bool is_any() const { return true; } + const boost::any &ref() const { return d_any; } + void set(const boost::any &any) { d_any = any; } +}; + + +class pmt_uniform_vector : public pmt_base +{ +public: + bool is_uniform_vector() const { return true; } + virtual const void *uniform_elements(size_t &len) = 0; + virtual void *uniform_writable_elements(size_t &len) = 0; + virtual size_t length() const = 0; +}; + +#include "pmt_unv_int.h" + +#endif /* INCLUDED_PMT_INT_H */ diff --git a/pmt/src/lib/pmt_io.cc b/pmt/src/lib/pmt_io.cc new file mode 100644 index 00000000..3bbf430e --- /dev/null +++ b/pmt/src/lib/pmt_io.cc @@ -0,0 +1,138 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include "pmt_int.h" +#include + +static void +pmt_write_list_tail(pmt_t obj, std::ostream &port) +{ + pmt_write(pmt_car(obj), port); // write the car + obj = pmt_cdr(obj); // step to cdr + + if (pmt_is_null(obj)) // () + port << ")"; + + else if (pmt_is_pair(obj)){ // normal list + port << " "; + pmt_write_list_tail(obj, port); + } + else { // dotted pair + port << " . "; + pmt_write(obj, port); + port << ")"; + } +} + +void +pmt_write(pmt_t obj, std::ostream &port) +{ + if (pmt_is_bool(obj)){ + if (pmt_is_true(obj)) + port << "#t"; + else + port << "#f"; + } + else if (pmt_is_symbol(obj)){ + port << pmt_symbol_to_string(obj); + } + else if (pmt_is_number(obj)){ + if (pmt_is_integer(obj)) + port << pmt_to_long(obj); + else if (pmt_is_real(obj)) + port << pmt_to_double(obj); + else if (pmt_is_complex(obj)){ + std::complex c = pmt_to_complex(obj); + port << c.real() << '+' << c.imag() << 'i'; + } + else + goto error; + } + else if (pmt_is_null(obj)){ + port << "()"; + } + else if (pmt_is_pair(obj)){ + port << "("; + pmt_write_list_tail(obj, port); + } + else if (pmt_is_dict(obj)){ + // FIXME + // port << "#"; + port << "#"; + } + else if (pmt_is_vector(obj)){ + // FIXME + // port << "#"; + port << "#"; + } + else if (pmt_is_uniform_vector(obj)){ + // FIXME + // port << "#"; + port << "#"; + } + else { + error: + // FIXME + // port << "#<" << obj << ">"; + port << "#"; + } +} + +std::ostream& operator<<(std::ostream &os, pmt_t obj) +{ + pmt_write(obj, os); + return os; +} + +std::string +pmt_write_string(pmt_t obj) +{ + std::ostringstream s; + s << obj; + return s.str(); +} + +pmt_t +pmt_read(std::istream &port) +{ + throw pmt_notimplemented("notimplemented: pmt_read", PMT_NIL); +} + +void +pmt_serialize(pmt_t obj, std::ostream &sink) +{ + throw pmt_notimplemented("notimplemented: pmt_serialize", obj); +} + +/*! + * \brief Create obj from portable byte-serial representation + */ +pmt_t +pmt_deserialize(std::istream &source) +{ + throw pmt_notimplemented("notimplemented: pmt_deserialize", PMT_NIL); +} + diff --git a/pmt/src/lib/pmt_pool.cc b/pmt/src/lib/pmt_pool.cc new file mode 100644 index 00000000..05d9c005 --- /dev/null +++ b/pmt/src/lib/pmt_pool.cc @@ -0,0 +1,109 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include + +static inline size_t +ROUNDUP(size_t x, size_t stride) +{ + return ((((x) + (stride) - 1)/(stride)) * (stride)); +} + +pmt_pool::pmt_pool(size_t itemsize, size_t alignment, + size_t allocation_size, size_t max_items) + : d_cond(&d_mutex), + d_itemsize(ROUNDUP(itemsize, alignment)), + d_alignment(alignment), + d_allocation_size(std::max(allocation_size, 16 * itemsize)), + d_max_items(max_items), d_n_items(0), + d_freelist(0) +{ +} + +pmt_pool::~pmt_pool() +{ + for (unsigned int i = 0; i < d_allocations.size(); i++){ + delete [] d_allocations[i]; + } +} + +void * +pmt_pool::malloc() +{ + omni_mutex_lock l(d_mutex); + item *p; + + if (d_max_items != 0){ + while (d_n_items >= d_max_items) + d_cond.wait(); + } + + if (d_freelist){ // got something? + p = d_freelist; + d_freelist = p->d_next; + d_n_items++; + return p; + } + + // allocate a new chunk + char *alloc = new char[d_allocation_size + d_alignment - 1]; + d_allocations.push_back(alloc); + + // get the alignment we require + char *start = (char *)(((uintptr_t)alloc + d_alignment-1) & -d_alignment); + char *end = alloc + d_allocation_size + d_alignment - 1; + size_t n = (end - start) / d_itemsize; + + // link the new items onto the free list. + p = (item *) start; + for (size_t i = 0; i < n; i++){ + p->d_next = d_freelist; + d_freelist = p; + p = (item *)((char *) p + d_itemsize); + } + + // now return the first one + p = d_freelist; + d_freelist = p->d_next; + d_n_items++; + return p; +} + +void +pmt_pool::free(void *foo) +{ + if (!foo) + return; + + omni_mutex_lock l(d_mutex); + + item *p = (item *) foo; + p->d_next = d_freelist; + d_freelist = p; + d_n_items--; + if (d_max_items != 0) + d_cond.signal(); +} diff --git a/pmt/src/lib/pmt_pool.h b/pmt/src/lib/pmt_pool.h new file mode 100644 index 00000000..dd63d44a --- /dev/null +++ b/pmt/src/lib/pmt_pool.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_PMT_POOL_H +#define INCLUDED_PMT_POOL_H + +#include +#include +#include + +/*! + * \brief very simple thread-safe fixed-size allocation pool + * + * FIXME may want to go to global allocation with per-thread free list. + * This would eliminate virtually all lock contention. + */ +class pmt_pool { + + struct item { + struct item *d_next; + }; + + omni_mutex d_mutex; + omni_condition d_cond; + + size_t d_itemsize; + size_t d_alignment; + size_t d_allocation_size; + size_t d_max_items; + size_t d_n_items; + item *d_freelist; + std::vector d_allocations; + +public: + /*! + * \param itemsize size in bytes of the items to be allocated. + * \param alignment alignment in bytes of all objects to be allocated (must be power-of-2). + * \param allocation_size number of bytes to allocate at a time from the underlying allocator. + * \param max_items is the maximum number of items to allocate. If this number is exceeded, + * the allocate blocks. 0 implies no limit. + */ + pmt_pool(size_t itemsize, size_t alignment = 16, + size_t allocation_size = 4096, size_t max_items = 0); + ~pmt_pool(); + + void *malloc(); + void free(void *p); +}; + +#endif /* INCLUDED_PMT_POOL_H */ diff --git a/pmt/src/lib/pmt_serial_tags.h b/pmt/src/lib/pmt_serial_tags.h new file mode 100644 index 00000000..6dbe649a --- /dev/null +++ b/pmt/src/lib/pmt_serial_tags.h @@ -0,0 +1,58 @@ +// +// Copyright 2007 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. +// +// +// THIS FILE IS MACHINE GENERATED FROM pmt-serial-tags.scm. DO NOT EDIT BY HAND. +// See pmt-serial-tags.scm for additional commentary. +// +#ifndef INCLUDED_PMT_SERIAL_TAGS_H +#define INCLUDED_PMT_SERIAL_TAGS_H + +enum pst_tags { + PST_TRUE = 0x0, + PST_FALSE = 0x1, + PST_SYMBOL = 0x2, + PST_INT32 = 0x3, + PST_DOUBLE = 0x4, + PST_COMPLEX = 0x5, + PST_NULL = 0x6, + PST_PAIR = 0x7, + PST_VECTOR = 0x8, + PST_DICT = 0x9, + PST_UNIFORM_VECTOR = 0xa, + UVI_ENDIAN_MASK = 0x80, + UVI_SUBTYPE_MASK = 0x7f, + UVI_LITTLE_ENDIAN = 0x0, + UVI_BIG_ENDIAN = 0x80, + UVI_U8 = 0x0, + UVI_S8 = 0x1, + UVI_U16 = 0x2, + UVI_S16 = 0x3, + UVI_U32 = 0x4, + UVI_S32 = 0x5, + UVI_U64 = 0x6, + UVI_S64 = 0x7, + UVI_F32 = 0x8, + UVI_F64 = 0x9, + UVI_C32 = 0xa, + UVI_C64 = 0xb, + PST_COMMENT = 0x3b, + PST_COMMENT_END = 0xa, +}; +#endif diff --git a/pmt/src/lib/pmt_serialize.cc b/pmt/src/lib/pmt_serialize.cc new file mode 100644 index 00000000..1f1b57c8 --- /dev/null +++ b/pmt/src/lib/pmt_serialize.cc @@ -0,0 +1,353 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include "pmt_int.h" +#include "pmt_serial_tags.h" + +static pmt_t parse_pair(std::streambuf &sb); + +// ---------------------------------------------------------------- +// output primitives +// ---------------------------------------------------------------- + +static bool +serialize_untagged_u8(unsigned int i, std::streambuf &sb) +{ + return sb.sputc((i >> 0) & 0xff) != std::streambuf::traits_type::eof(); +} + +// always writes big-endian +static bool +serialize_untagged_u16(unsigned int i, std::streambuf &sb) +{ + sb.sputc((i >> 8) & 0xff); + return sb.sputc((i >> 0) & 0xff) != std::streambuf::traits_type::eof(); +} + +// always writes big-endian +static bool +serialize_untagged_u32(unsigned int i, std::streambuf &sb) +{ + sb.sputc((i >> 24) & 0xff); + sb.sputc((i >> 16) & 0xff); + sb.sputc((i >> 8) & 0xff); + return sb.sputc((i >> 0) & 0xff) != std::streambuf::traits_type::eof(); +} + +#if 0 +// always writes big-endian +static bool +serialize_untagged_u64(uint64_t i, std::streambuf &sb) +{ + sb.sputc((i >> 56) & 0xff); + sb.sputc((i >> 48) & 0xff); + sb.sputc((i >> 40) & 0xff); + sb.sputc((i >> 32) & 0xff); + sb.sputc((i >> 24) & 0xff); + sb.sputc((i >> 16) & 0xff); + sb.sputc((i >> 8) & 0xff); + return sb.sputc((i >> 0) & 0xff) != std::streambuf::traits_type::eof(); +} +#endif + +// ---------------------------------------------------------------- +// input primitives +// ---------------------------------------------------------------- + + +// always reads big-endian +static bool +deserialize_untagged_u8(uint8_t *ip, std::streambuf &sb) +{ + std::streambuf::traits_type::int_type t; + int i; + + t = sb.sbumpc(); + i = t & 0xff; + + *ip = i; + return t != std::streambuf::traits_type::eof(); +} + +// always reads big-endian +static bool +deserialize_untagged_u16(uint16_t *ip, std::streambuf &sb) +{ + std::streambuf::traits_type::int_type t; + int i; + + t = sb.sbumpc(); + i = t & 0xff; + + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + + *ip = i; + return t != std::streambuf::traits_type::eof(); +} + +// always reads big-endian +static bool +deserialize_untagged_u32(uint32_t *ip, std::streambuf &sb) +{ + std::streambuf::traits_type::int_type t; + int i; + + t = sb.sbumpc(); + i = t & 0xff; + + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + + *ip = i; + return t != std::streambuf::traits_type::eof(); +} + +#if 0 +// always reads big-endian +static bool +deserialize_untagged_u64(uint64_t *ip, std::streambuf &sb) +{ + std::streambuf::traits_type::int_type t; + uint64_t i; + + t = sb.sbumpc(); + i = t & 0xff; + + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + t = sb.sbumpc(); + i = (i << 8) | (t & 0xff); + + *ip = i; + return t != std::streambuf::traits_type::eof(); +} +#endif + +/* + * Write portable byte-serial representation of \p obj to \p sb + * + * N.B., Circular structures cause infinite recursion. + */ +bool +pmt_serialize(pmt_t obj, std::streambuf &sb) +{ + bool ok = true; + + tail_recursion: + + if (pmt_is_bool(obj)){ + if (pmt_eq(obj, PMT_T)) + return serialize_untagged_u8(PST_TRUE, sb); + else + return serialize_untagged_u8(PST_FALSE, sb); + } + + if (pmt_is_null(obj)) + return serialize_untagged_u8(PST_NULL, sb); + + if (pmt_is_symbol(obj)){ + const std::string s = pmt_symbol_to_string(obj); + size_t len = s.size(); + ok = serialize_untagged_u8(PST_SYMBOL, sb); + ok &= serialize_untagged_u16(len, sb); + for (size_t i = 0; i < len; i++) + ok &= serialize_untagged_u8(s[i], sb); + return ok; + } + + if (pmt_is_pair(obj)){ + ok = serialize_untagged_u8(PST_PAIR, sb); + ok &= pmt_serialize(pmt_car(obj), sb); + if (!ok) + return false; + obj = pmt_cdr(obj); + goto tail_recursion; + } + + if (pmt_is_number(obj)){ + + if (pmt_is_integer(obj)){ + long i = pmt_to_long(obj); + if (sizeof(long) > 4){ + if (i < -2147483647 || i > 2147483647) + throw pmt_notimplemented("pmt_serialize (64-bit integers)", obj); + } + ok = serialize_untagged_u8(PST_INT32, sb); + ok &= serialize_untagged_u32(i, sb); + return ok; + } + + if (pmt_is_real(obj)) + throw pmt_notimplemented("pmt_serialize (real)", obj); + + if (pmt_is_complex(obj)) + throw pmt_notimplemented("pmt_serialize (complex)", obj); + } + + if (pmt_is_vector(obj)) + throw pmt_notimplemented("pmt_serialize (vector)", obj); + + if (pmt_is_uniform_vector(obj)) + throw pmt_notimplemented("pmt_serialize (uniform-vector)", obj); + + if (pmt_is_dict(obj)) + throw pmt_notimplemented("pmt_serialize (dict)", obj); + + + throw pmt_notimplemented("pmt_serialize (?)", obj); +} + +/* + * Create obj from portable byte-serial representation + * + * Returns next obj from streambuf, or PMT_EOF at end of file. + * Throws exception on malformed input. + */ +pmt_t +pmt_deserialize(std::streambuf &sb) +{ + uint8_t tag; + //uint8_t u8; + uint16_t u16; + uint32_t u32; + //uint32_t u64; + static char tmpbuf[1024]; + + if (!deserialize_untagged_u8(&tag, sb)) + return PMT_EOF; + + switch (tag){ + case PST_TRUE: + return PMT_T; + + case PST_FALSE: + return PMT_F; + + case PST_NULL: + return PMT_NIL; + + case PST_SYMBOL: + if (!deserialize_untagged_u16(&u16, sb)) + goto error; + if (u16 > sizeof(tmpbuf)) + throw pmt_notimplemented("pmt_deserialize: very long symbol", + PMT_F); + if (sb.sgetn(tmpbuf, u16) != u16) + goto error; + return pmt_intern(std::string(tmpbuf, u16)); + + case PST_INT32: + if (!deserialize_untagged_u32(&u32, sb)) + goto error; + return pmt_from_long((int32_t) u32); + + case PST_PAIR: + return parse_pair(sb); + + case PST_DOUBLE: + case PST_COMPLEX: + case PST_VECTOR: + case PST_DICT: + case PST_UNIFORM_VECTOR: + case PST_COMMENT: + throw pmt_notimplemented("pmt_deserialize: tag value = ", + pmt_from_long(tag)); + + default: + throw pmt_exception("pmt_deserialize: malformed input stream, tag value = ", + pmt_from_long(tag)); + } + + error: + throw pmt_exception("pmt_deserialize: malformed input stream", PMT_F); +} + +/* + * This is a mostly non-recursive implementation that allows us to + * deserialize very long lists w/o exhausting the evaluation stack. + * + * On entry we've already eaten the PST_PAIR tag. + */ +pmt_t +parse_pair(std::streambuf &sb) +{ + uint8_t tag; + pmt_t val, expr, lastnptr, nptr; + + // + // Keep appending nodes until we get a non-PAIR cdr. + // + lastnptr = PMT_NIL; + while (1){ + expr = pmt_deserialize(sb); // read the car + + nptr = pmt_cons(expr, PMT_NIL); // build new cell + if (pmt_is_null(lastnptr)) + val = nptr; + else + pmt_set_cdr(lastnptr, nptr); + lastnptr = nptr; + + if (!deserialize_untagged_u8(&tag, sb)) // get tag of cdr + throw pmt_exception("pmt_deserialize: malformed input stream", PMT_F); + + if (tag == PST_PAIR) + continue; // keep on looping... + + if (tag == PST_NULL){ + expr = PMT_NIL; + break; + } + + // + // default: push tag back and use pmt_deserialize to get the cdr + // + sb.sungetc(); + expr = pmt_deserialize(sb); + break; + } + + // + // At this point, expr contains the value of the final cdr in the list. + // + pmt_set_cdr(lastnptr, expr); + return val; +} diff --git a/pmt/src/lib/pmt_unv.cc b/pmt/src/lib/pmt_unv.cc new file mode 100644 index 00000000..cdd33d3a --- /dev/null +++ b/pmt/src/lib/pmt_unv.cc @@ -0,0 +1,1445 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include "pmt_int.h" + +//////////////////////////////////////////////////////////////////////////// +// pmt_u8vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_u8vector * +_u8vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_u8vector::pmt_u8vector(size_t k, uint8_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_u8vector::pmt_u8vector(size_t k, const uint8_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +uint8_t +pmt_u8vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u8vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_u8vector::set(size_t k, uint8_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u8vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const uint8_t * +pmt_u8vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +uint8_t * +pmt_u8vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_u8vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(uint8_t); + return &d_v[0]; +} + +void* +pmt_u8vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(uint8_t); + return &d_v[0]; +} + +bool +pmt_is_u8vector(pmt_t obj) +{ + return obj->is_u8vector(); +} + +pmt_t +pmt_make_u8vector(size_t k, uint8_t fill) +{ + return pmt_t(new pmt_u8vector(k, fill)); +} + +pmt_t +pmt_init_u8vector(size_t k, const uint8_t *data) +{ + return pmt_t(new pmt_u8vector(k, data)); +} + +uint8_t +pmt_u8vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_u8vector()) + throw pmt_wrong_type("pmt_u8vector_ref", vector); + return _u8vector(vector)->ref(k); +} + +void +pmt_u8vector_set(pmt_t vector, size_t k, uint8_t obj) +{ + if (!vector->is_u8vector()) + throw pmt_wrong_type("pmt_u8vector_set", vector); + _u8vector(vector)->set(k, obj); +} + +const uint8_t * +pmt_u8vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u8vector()) + throw pmt_wrong_type("pmt_u8vector_elements", vector); + return _u8vector(vector)->elements(len); +} + +uint8_t * +pmt_u8vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u8vector()) + throw pmt_wrong_type("pmt_u8vector_writable_elements", vector); + return _u8vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_s8vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_s8vector * +_s8vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_s8vector::pmt_s8vector(size_t k, int8_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_s8vector::pmt_s8vector(size_t k, const int8_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +int8_t +pmt_s8vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s8vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_s8vector::set(size_t k, int8_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s8vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const int8_t * +pmt_s8vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +int8_t * +pmt_s8vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_s8vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(int8_t); + return &d_v[0]; +} + +void* +pmt_s8vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(int8_t); + return &d_v[0]; +} + +bool +pmt_is_s8vector(pmt_t obj) +{ + return obj->is_s8vector(); +} + +pmt_t +pmt_make_s8vector(size_t k, int8_t fill) +{ + return pmt_t(new pmt_s8vector(k, fill)); +} + +pmt_t +pmt_init_s8vector(size_t k, const int8_t *data) +{ + return pmt_t(new pmt_s8vector(k, data)); +} + +int8_t +pmt_s8vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_s8vector()) + throw pmt_wrong_type("pmt_s8vector_ref", vector); + return _s8vector(vector)->ref(k); +} + +void +pmt_s8vector_set(pmt_t vector, size_t k, int8_t obj) +{ + if (!vector->is_s8vector()) + throw pmt_wrong_type("pmt_s8vector_set", vector); + _s8vector(vector)->set(k, obj); +} + +const int8_t * +pmt_s8vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s8vector()) + throw pmt_wrong_type("pmt_s8vector_elements", vector); + return _s8vector(vector)->elements(len); +} + +int8_t * +pmt_s8vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s8vector()) + throw pmt_wrong_type("pmt_s8vector_writable_elements", vector); + return _s8vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_u16vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_u16vector * +_u16vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_u16vector::pmt_u16vector(size_t k, uint16_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_u16vector::pmt_u16vector(size_t k, const uint16_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +uint16_t +pmt_u16vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u16vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_u16vector::set(size_t k, uint16_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u16vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const uint16_t * +pmt_u16vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +uint16_t * +pmt_u16vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_u16vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(uint16_t); + return &d_v[0]; +} + +void* +pmt_u16vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(uint16_t); + return &d_v[0]; +} + +bool +pmt_is_u16vector(pmt_t obj) +{ + return obj->is_u16vector(); +} + +pmt_t +pmt_make_u16vector(size_t k, uint16_t fill) +{ + return pmt_t(new pmt_u16vector(k, fill)); +} + +pmt_t +pmt_init_u16vector(size_t k, const uint16_t *data) +{ + return pmt_t(new pmt_u16vector(k, data)); +} + +uint16_t +pmt_u16vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_u16vector()) + throw pmt_wrong_type("pmt_u16vector_ref", vector); + return _u16vector(vector)->ref(k); +} + +void +pmt_u16vector_set(pmt_t vector, size_t k, uint16_t obj) +{ + if (!vector->is_u16vector()) + throw pmt_wrong_type("pmt_u16vector_set", vector); + _u16vector(vector)->set(k, obj); +} + +const uint16_t * +pmt_u16vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u16vector()) + throw pmt_wrong_type("pmt_u16vector_elements", vector); + return _u16vector(vector)->elements(len); +} + +uint16_t * +pmt_u16vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u16vector()) + throw pmt_wrong_type("pmt_u16vector_writable_elements", vector); + return _u16vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_s16vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_s16vector * +_s16vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_s16vector::pmt_s16vector(size_t k, int16_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_s16vector::pmt_s16vector(size_t k, const int16_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +int16_t +pmt_s16vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s16vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_s16vector::set(size_t k, int16_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s16vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const int16_t * +pmt_s16vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +int16_t * +pmt_s16vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_s16vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(int16_t); + return &d_v[0]; +} + +void* +pmt_s16vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(int16_t); + return &d_v[0]; +} + +bool +pmt_is_s16vector(pmt_t obj) +{ + return obj->is_s16vector(); +} + +pmt_t +pmt_make_s16vector(size_t k, int16_t fill) +{ + return pmt_t(new pmt_s16vector(k, fill)); +} + +pmt_t +pmt_init_s16vector(size_t k, const int16_t *data) +{ + return pmt_t(new pmt_s16vector(k, data)); +} + +int16_t +pmt_s16vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_s16vector()) + throw pmt_wrong_type("pmt_s16vector_ref", vector); + return _s16vector(vector)->ref(k); +} + +void +pmt_s16vector_set(pmt_t vector, size_t k, int16_t obj) +{ + if (!vector->is_s16vector()) + throw pmt_wrong_type("pmt_s16vector_set", vector); + _s16vector(vector)->set(k, obj); +} + +const int16_t * +pmt_s16vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s16vector()) + throw pmt_wrong_type("pmt_s16vector_elements", vector); + return _s16vector(vector)->elements(len); +} + +int16_t * +pmt_s16vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s16vector()) + throw pmt_wrong_type("pmt_s16vector_writable_elements", vector); + return _s16vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_u32vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_u32vector * +_u32vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_u32vector::pmt_u32vector(size_t k, uint32_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_u32vector::pmt_u32vector(size_t k, const uint32_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +uint32_t +pmt_u32vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u32vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_u32vector::set(size_t k, uint32_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u32vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const uint32_t * +pmt_u32vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +uint32_t * +pmt_u32vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_u32vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(uint32_t); + return &d_v[0]; +} + +void* +pmt_u32vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(uint32_t); + return &d_v[0]; +} + +bool +pmt_is_u32vector(pmt_t obj) +{ + return obj->is_u32vector(); +} + +pmt_t +pmt_make_u32vector(size_t k, uint32_t fill) +{ + return pmt_t(new pmt_u32vector(k, fill)); +} + +pmt_t +pmt_init_u32vector(size_t k, const uint32_t *data) +{ + return pmt_t(new pmt_u32vector(k, data)); +} + +uint32_t +pmt_u32vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_u32vector()) + throw pmt_wrong_type("pmt_u32vector_ref", vector); + return _u32vector(vector)->ref(k); +} + +void +pmt_u32vector_set(pmt_t vector, size_t k, uint32_t obj) +{ + if (!vector->is_u32vector()) + throw pmt_wrong_type("pmt_u32vector_set", vector); + _u32vector(vector)->set(k, obj); +} + +const uint32_t * +pmt_u32vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u32vector()) + throw pmt_wrong_type("pmt_u32vector_elements", vector); + return _u32vector(vector)->elements(len); +} + +uint32_t * +pmt_u32vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u32vector()) + throw pmt_wrong_type("pmt_u32vector_writable_elements", vector); + return _u32vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_s32vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_s32vector * +_s32vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_s32vector::pmt_s32vector(size_t k, int32_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_s32vector::pmt_s32vector(size_t k, const int32_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +int32_t +pmt_s32vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s32vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_s32vector::set(size_t k, int32_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s32vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const int32_t * +pmt_s32vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +int32_t * +pmt_s32vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_s32vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(int32_t); + return &d_v[0]; +} + +void* +pmt_s32vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(int32_t); + return &d_v[0]; +} + +bool +pmt_is_s32vector(pmt_t obj) +{ + return obj->is_s32vector(); +} + +pmt_t +pmt_make_s32vector(size_t k, int32_t fill) +{ + return pmt_t(new pmt_s32vector(k, fill)); +} + +pmt_t +pmt_init_s32vector(size_t k, const int32_t *data) +{ + return pmt_t(new pmt_s32vector(k, data)); +} + +int32_t +pmt_s32vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_s32vector()) + throw pmt_wrong_type("pmt_s32vector_ref", vector); + return _s32vector(vector)->ref(k); +} + +void +pmt_s32vector_set(pmt_t vector, size_t k, int32_t obj) +{ + if (!vector->is_s32vector()) + throw pmt_wrong_type("pmt_s32vector_set", vector); + _s32vector(vector)->set(k, obj); +} + +const int32_t * +pmt_s32vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s32vector()) + throw pmt_wrong_type("pmt_s32vector_elements", vector); + return _s32vector(vector)->elements(len); +} + +int32_t * +pmt_s32vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s32vector()) + throw pmt_wrong_type("pmt_s32vector_writable_elements", vector); + return _s32vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_u64vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_u64vector * +_u64vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_u64vector::pmt_u64vector(size_t k, uint64_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_u64vector::pmt_u64vector(size_t k, const uint64_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +uint64_t +pmt_u64vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u64vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_u64vector::set(size_t k, uint64_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_u64vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const uint64_t * +pmt_u64vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +uint64_t * +pmt_u64vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_u64vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(uint64_t); + return &d_v[0]; +} + +void* +pmt_u64vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(uint64_t); + return &d_v[0]; +} + +bool +pmt_is_u64vector(pmt_t obj) +{ + return obj->is_u64vector(); +} + +pmt_t +pmt_make_u64vector(size_t k, uint64_t fill) +{ + return pmt_t(new pmt_u64vector(k, fill)); +} + +pmt_t +pmt_init_u64vector(size_t k, const uint64_t *data) +{ + return pmt_t(new pmt_u64vector(k, data)); +} + +uint64_t +pmt_u64vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_u64vector()) + throw pmt_wrong_type("pmt_u64vector_ref", vector); + return _u64vector(vector)->ref(k); +} + +void +pmt_u64vector_set(pmt_t vector, size_t k, uint64_t obj) +{ + if (!vector->is_u64vector()) + throw pmt_wrong_type("pmt_u64vector_set", vector); + _u64vector(vector)->set(k, obj); +} + +const uint64_t * +pmt_u64vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u64vector()) + throw pmt_wrong_type("pmt_u64vector_elements", vector); + return _u64vector(vector)->elements(len); +} + +uint64_t * +pmt_u64vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_u64vector()) + throw pmt_wrong_type("pmt_u64vector_writable_elements", vector); + return _u64vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_s64vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_s64vector * +_s64vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_s64vector::pmt_s64vector(size_t k, int64_t fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_s64vector::pmt_s64vector(size_t k, const int64_t *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +int64_t +pmt_s64vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s64vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_s64vector::set(size_t k, int64_t x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_s64vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const int64_t * +pmt_s64vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +int64_t * +pmt_s64vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_s64vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(int64_t); + return &d_v[0]; +} + +void* +pmt_s64vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(int64_t); + return &d_v[0]; +} + +bool +pmt_is_s64vector(pmt_t obj) +{ + return obj->is_s64vector(); +} + +pmt_t +pmt_make_s64vector(size_t k, int64_t fill) +{ + return pmt_t(new pmt_s64vector(k, fill)); +} + +pmt_t +pmt_init_s64vector(size_t k, const int64_t *data) +{ + return pmt_t(new pmt_s64vector(k, data)); +} + +int64_t +pmt_s64vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_s64vector()) + throw pmt_wrong_type("pmt_s64vector_ref", vector); + return _s64vector(vector)->ref(k); +} + +void +pmt_s64vector_set(pmt_t vector, size_t k, int64_t obj) +{ + if (!vector->is_s64vector()) + throw pmt_wrong_type("pmt_s64vector_set", vector); + _s64vector(vector)->set(k, obj); +} + +const int64_t * +pmt_s64vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s64vector()) + throw pmt_wrong_type("pmt_s64vector_elements", vector); + return _s64vector(vector)->elements(len); +} + +int64_t * +pmt_s64vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_s64vector()) + throw pmt_wrong_type("pmt_s64vector_writable_elements", vector); + return _s64vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_f32vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_f32vector * +_f32vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_f32vector::pmt_f32vector(size_t k, float fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_f32vector::pmt_f32vector(size_t k, const float *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +float +pmt_f32vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_f32vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_f32vector::set(size_t k, float x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_f32vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const float * +pmt_f32vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +float * +pmt_f32vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_f32vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(float); + return &d_v[0]; +} + +void* +pmt_f32vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(float); + return &d_v[0]; +} + +bool +pmt_is_f32vector(pmt_t obj) +{ + return obj->is_f32vector(); +} + +pmt_t +pmt_make_f32vector(size_t k, float fill) +{ + return pmt_t(new pmt_f32vector(k, fill)); +} + +pmt_t +pmt_init_f32vector(size_t k, const float *data) +{ + return pmt_t(new pmt_f32vector(k, data)); +} + +float +pmt_f32vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_f32vector()) + throw pmt_wrong_type("pmt_f32vector_ref", vector); + return _f32vector(vector)->ref(k); +} + +void +pmt_f32vector_set(pmt_t vector, size_t k, float obj) +{ + if (!vector->is_f32vector()) + throw pmt_wrong_type("pmt_f32vector_set", vector); + _f32vector(vector)->set(k, obj); +} + +const float * +pmt_f32vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_f32vector()) + throw pmt_wrong_type("pmt_f32vector_elements", vector); + return _f32vector(vector)->elements(len); +} + +float * +pmt_f32vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_f32vector()) + throw pmt_wrong_type("pmt_f32vector_writable_elements", vector); + return _f32vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_f64vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_f64vector * +_f64vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_f64vector::pmt_f64vector(size_t k, double fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_f64vector::pmt_f64vector(size_t k, const double *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +double +pmt_f64vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_f64vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_f64vector::set(size_t k, double x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_f64vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const double * +pmt_f64vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +double * +pmt_f64vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_f64vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(double); + return &d_v[0]; +} + +void* +pmt_f64vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(double); + return &d_v[0]; +} + +bool +pmt_is_f64vector(pmt_t obj) +{ + return obj->is_f64vector(); +} + +pmt_t +pmt_make_f64vector(size_t k, double fill) +{ + return pmt_t(new pmt_f64vector(k, fill)); +} + +pmt_t +pmt_init_f64vector(size_t k, const double *data) +{ + return pmt_t(new pmt_f64vector(k, data)); +} + +double +pmt_f64vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_f64vector()) + throw pmt_wrong_type("pmt_f64vector_ref", vector); + return _f64vector(vector)->ref(k); +} + +void +pmt_f64vector_set(pmt_t vector, size_t k, double obj) +{ + if (!vector->is_f64vector()) + throw pmt_wrong_type("pmt_f64vector_set", vector); + _f64vector(vector)->set(k, obj); +} + +const double * +pmt_f64vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_f64vector()) + throw pmt_wrong_type("pmt_f64vector_elements", vector); + return _f64vector(vector)->elements(len); +} + +double * +pmt_f64vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_f64vector()) + throw pmt_wrong_type("pmt_f64vector_writable_elements", vector); + return _f64vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_c32vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_c32vector * +_c32vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_c32vector::pmt_c32vector(size_t k, std::complex fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_c32vector::pmt_c32vector(size_t k, const std::complex *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +std::complex +pmt_c32vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_c32vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_c32vector::set(size_t k, std::complex x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_c32vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const std::complex * +pmt_c32vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +std::complex * +pmt_c32vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_c32vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(std::complex); + return &d_v[0]; +} + +void* +pmt_c32vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(std::complex); + return &d_v[0]; +} + +bool +pmt_is_c32vector(pmt_t obj) +{ + return obj->is_c32vector(); +} + +pmt_t +pmt_make_c32vector(size_t k, std::complex fill) +{ + return pmt_t(new pmt_c32vector(k, fill)); +} + +pmt_t +pmt_init_c32vector(size_t k, const std::complex *data) +{ + return pmt_t(new pmt_c32vector(k, data)); +} + +std::complex +pmt_c32vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_c32vector()) + throw pmt_wrong_type("pmt_c32vector_ref", vector); + return _c32vector(vector)->ref(k); +} + +void +pmt_c32vector_set(pmt_t vector, size_t k, std::complex obj) +{ + if (!vector->is_c32vector()) + throw pmt_wrong_type("pmt_c32vector_set", vector); + _c32vector(vector)->set(k, obj); +} + +const std::complex * +pmt_c32vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_c32vector()) + throw pmt_wrong_type("pmt_c32vector_elements", vector); + return _c32vector(vector)->elements(len); +} + +std::complex * +pmt_c32vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_c32vector()) + throw pmt_wrong_type("pmt_c32vector_writable_elements", vector); + return _c32vector(vector)->writable_elements(len); +} +//////////////////////////////////////////////////////////////////////////// +// pmt_c64vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_c64vector * +_c64vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_c64vector::pmt_c64vector(size_t k, std::complex fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_c64vector::pmt_c64vector(size_t k, const std::complex *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +std::complex +pmt_c64vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_c64vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_c64vector::set(size_t k, std::complex x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_c64vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const std::complex * +pmt_c64vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +std::complex * +pmt_c64vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_c64vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(std::complex); + return &d_v[0]; +} + +void* +pmt_c64vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(std::complex); + return &d_v[0]; +} + +bool +pmt_is_c64vector(pmt_t obj) +{ + return obj->is_c64vector(); +} + +pmt_t +pmt_make_c64vector(size_t k, std::complex fill) +{ + return pmt_t(new pmt_c64vector(k, fill)); +} + +pmt_t +pmt_init_c64vector(size_t k, const std::complex *data) +{ + return pmt_t(new pmt_c64vector(k, data)); +} + +std::complex +pmt_c64vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_c64vector()) + throw pmt_wrong_type("pmt_c64vector_ref", vector); + return _c64vector(vector)->ref(k); +} + +void +pmt_c64vector_set(pmt_t vector, size_t k, std::complex obj) +{ + if (!vector->is_c64vector()) + throw pmt_wrong_type("pmt_c64vector_set", vector); + _c64vector(vector)->set(k, obj); +} + +const std::complex * +pmt_c64vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_c64vector()) + throw pmt_wrong_type("pmt_c64vector_elements", vector); + return _c64vector(vector)->elements(len); +} + +std::complex * +pmt_c64vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_c64vector()) + throw pmt_wrong_type("pmt_c64vector_writable_elements", vector); + return _c64vector(vector)->writable_elements(len); +} diff --git a/pmt/src/lib/pmt_unv_int.h b/pmt/src/lib/pmt_unv_int.h new file mode 100644 index 00000000..e54ff6cd --- /dev/null +++ b/pmt/src/lib/pmt_unv_int.h @@ -0,0 +1,302 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_PMT_UNV_INT_H +#define INCLUDED_PMT_UNV_INT_H + +//////////////////////////////////////////////////////////////////////////// +// pmt_u8vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_u8vector : public pmt_uniform_vector +{ + std::vector< uint8_t > d_v; + +public: + pmt_u8vector(size_t k, uint8_t fill); + pmt_u8vector(size_t k, const uint8_t *data); + // ~pmt_u8vector(); + + bool is_u8vector() const { return true; } + size_t length() const { return d_v.size(); } + uint8_t ref(size_t k) const; + void set(size_t k, uint8_t x); + const uint8_t *elements(size_t &len); + uint8_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_s8vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_s8vector : public pmt_uniform_vector +{ + std::vector< int8_t > d_v; + +public: + pmt_s8vector(size_t k, int8_t fill); + pmt_s8vector(size_t k, const int8_t *data); + // ~pmt_s8vector(); + + bool is_s8vector() const { return true; } + size_t length() const { return d_v.size(); } + int8_t ref(size_t k) const; + void set(size_t k, int8_t x); + const int8_t *elements(size_t &len); + int8_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_u16vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_u16vector : public pmt_uniform_vector +{ + std::vector< uint16_t > d_v; + +public: + pmt_u16vector(size_t k, uint16_t fill); + pmt_u16vector(size_t k, const uint16_t *data); + // ~pmt_u16vector(); + + bool is_u16vector() const { return true; } + size_t length() const { return d_v.size(); } + uint16_t ref(size_t k) const; + void set(size_t k, uint16_t x); + const uint16_t *elements(size_t &len); + uint16_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_s16vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_s16vector : public pmt_uniform_vector +{ + std::vector< int16_t > d_v; + +public: + pmt_s16vector(size_t k, int16_t fill); + pmt_s16vector(size_t k, const int16_t *data); + // ~pmt_s16vector(); + + bool is_s16vector() const { return true; } + size_t length() const { return d_v.size(); } + int16_t ref(size_t k) const; + void set(size_t k, int16_t x); + const int16_t *elements(size_t &len); + int16_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_u32vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_u32vector : public pmt_uniform_vector +{ + std::vector< uint32_t > d_v; + +public: + pmt_u32vector(size_t k, uint32_t fill); + pmt_u32vector(size_t k, const uint32_t *data); + // ~pmt_u32vector(); + + bool is_u32vector() const { return true; } + size_t length() const { return d_v.size(); } + uint32_t ref(size_t k) const; + void set(size_t k, uint32_t x); + const uint32_t *elements(size_t &len); + uint32_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_s32vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_s32vector : public pmt_uniform_vector +{ + std::vector< int32_t > d_v; + +public: + pmt_s32vector(size_t k, int32_t fill); + pmt_s32vector(size_t k, const int32_t *data); + // ~pmt_s32vector(); + + bool is_s32vector() const { return true; } + size_t length() const { return d_v.size(); } + int32_t ref(size_t k) const; + void set(size_t k, int32_t x); + const int32_t *elements(size_t &len); + int32_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_u64vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_u64vector : public pmt_uniform_vector +{ + std::vector< uint64_t > d_v; + +public: + pmt_u64vector(size_t k, uint64_t fill); + pmt_u64vector(size_t k, const uint64_t *data); + // ~pmt_u64vector(); + + bool is_u64vector() const { return true; } + size_t length() const { return d_v.size(); } + uint64_t ref(size_t k) const; + void set(size_t k, uint64_t x); + const uint64_t *elements(size_t &len); + uint64_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_s64vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_s64vector : public pmt_uniform_vector +{ + std::vector< int64_t > d_v; + +public: + pmt_s64vector(size_t k, int64_t fill); + pmt_s64vector(size_t k, const int64_t *data); + // ~pmt_s64vector(); + + bool is_s64vector() const { return true; } + size_t length() const { return d_v.size(); } + int64_t ref(size_t k) const; + void set(size_t k, int64_t x); + const int64_t *elements(size_t &len); + int64_t *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_f32vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_f32vector : public pmt_uniform_vector +{ + std::vector< float > d_v; + +public: + pmt_f32vector(size_t k, float fill); + pmt_f32vector(size_t k, const float *data); + // ~pmt_f32vector(); + + bool is_f32vector() const { return true; } + size_t length() const { return d_v.size(); } + float ref(size_t k) const; + void set(size_t k, float x); + const float *elements(size_t &len); + float *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_f64vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_f64vector : public pmt_uniform_vector +{ + std::vector< double > d_v; + +public: + pmt_f64vector(size_t k, double fill); + pmt_f64vector(size_t k, const double *data); + // ~pmt_f64vector(); + + bool is_f64vector() const { return true; } + size_t length() const { return d_v.size(); } + double ref(size_t k) const; + void set(size_t k, double x); + const double *elements(size_t &len); + double *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_c32vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_c32vector : public pmt_uniform_vector +{ + std::vector< std::complex > d_v; + +public: + pmt_c32vector(size_t k, std::complex fill); + pmt_c32vector(size_t k, const std::complex *data); + // ~pmt_c32vector(); + + bool is_c32vector() const { return true; } + size_t length() const { return d_v.size(); } + std::complex ref(size_t k) const; + void set(size_t k, std::complex x); + const std::complex *elements(size_t &len); + std::complex *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +//////////////////////////////////////////////////////////////////////////// +// pmt_c64vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_c64vector : public pmt_uniform_vector +{ + std::vector< std::complex > d_v; + +public: + pmt_c64vector(size_t k, std::complex fill); + pmt_c64vector(size_t k, const std::complex *data); + // ~pmt_c64vector(); + + bool is_c64vector() const { return true; } + size_t length() const { return d_v.size(); } + std::complex ref(size_t k) const; + void set(size_t k, std::complex x); + const std::complex *elements(size_t &len); + std::complex *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; + +#endif diff --git a/pmt/src/lib/qa_pmt.cc b/pmt/src/lib/qa_pmt.cc new file mode 100644 index 00000000..250befaf --- /dev/null +++ b/pmt/src/lib/qa_pmt.cc @@ -0,0 +1,40 @@ +/* + * Copyright 2006 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. + */ + +/* + * This class gathers together all the test cases for pmt into + * a single test suite. As you create new test cases, add them here. + */ + +#include +#include +#include + +CppUnit::TestSuite * +qa_pmt::suite () +{ + CppUnit::TestSuite *s = new CppUnit::TestSuite ("pmt"); + + s->addTest (qa_pmt_prims::suite ()); + s->addTest (qa_pmt_unv::suite ()); + + return s; +} diff --git a/pmt/src/lib/qa_pmt.h b/pmt/src/lib/qa_pmt.h new file mode 100644 index 00000000..43a6dbf6 --- /dev/null +++ b/pmt/src/lib/qa_pmt.h @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_QA_PMT_H +#define INCLUDED_QA_PMT_H + +#include + +//! collect all the tests for pmt + +class qa_pmt { + public: + //! return suite of tests for all of pmt + static CppUnit::TestSuite *suite (); +}; + +#endif /* INCLUDED_QA_PMT_H */ diff --git a/pmt/src/lib/qa_pmt_prims.cc b/pmt/src/lib/qa_pmt_prims.cc new file mode 100644 index 00000000..57db4a1a --- /dev/null +++ b/pmt/src/lib/qa_pmt_prims.cc @@ -0,0 +1,415 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + +void +qa_pmt_prims::test_symbols() +{ + CPPUNIT_ASSERT(!pmt_is_symbol(PMT_T)); + CPPUNIT_ASSERT(!pmt_is_symbol(PMT_F)); + CPPUNIT_ASSERT_THROW(pmt_symbol_to_string(PMT_F), pmt_wrong_type); + + pmt_t sym1 = pmt_string_to_symbol("test"); + CPPUNIT_ASSERT(pmt_is_symbol(sym1)); + CPPUNIT_ASSERT_EQUAL(std::string("test"), pmt_symbol_to_string(sym1)); + CPPUNIT_ASSERT(pmt_is_true(sym1)); + CPPUNIT_ASSERT(!pmt_is_false(sym1)); + + pmt_t sym2 = pmt_string_to_symbol("foo"); + pmt_t sym3 = pmt_string_to_symbol("test"); + CPPUNIT_ASSERT_EQUAL(sym1, sym3); + CPPUNIT_ASSERT(sym1 != sym2); + CPPUNIT_ASSERT(sym1 == sym3); + + static const int N = 2048; + std::vector v1(N); + std::vector v2(N); + + // generate a bunch of symbols + for (int i = 0; i < N; i++){ + char buf[100]; + snprintf(buf, sizeof(buf), "test-%d", i); + v1[i] = pmt_string_to_symbol(buf); + } + + // confirm that they are all unique + for (int i = 0; i < N; i++) + for (int j = i + 1; j < N; j++) + CPPUNIT_ASSERT(v1[i] != v1[j]); + + // generate the same symbols again + for (int i = 0; i < N; i++){ + char buf[100]; + snprintf(buf, sizeof(buf), "test-%d", i); + v2[i] = pmt_string_to_symbol(buf); + } + + // confirm that we get the same ones back + for (int i = 0; i < N; i++) + CPPUNIT_ASSERT(v1[i] == v2[i]); +} + +void +qa_pmt_prims::test_booleans() +{ + pmt_t sym = pmt_string_to_symbol("test"); + CPPUNIT_ASSERT(pmt_is_bool(PMT_T)); + CPPUNIT_ASSERT(pmt_is_bool(PMT_F)); + CPPUNIT_ASSERT(!pmt_is_bool(sym)); + CPPUNIT_ASSERT_EQUAL(pmt_from_bool(false), PMT_F); + CPPUNIT_ASSERT_EQUAL(pmt_from_bool(true), PMT_T); + CPPUNIT_ASSERT_EQUAL(false, pmt_to_bool(PMT_F)); + CPPUNIT_ASSERT_EQUAL(true, pmt_to_bool(PMT_T)); + CPPUNIT_ASSERT_THROW(pmt_to_bool(sym), pmt_wrong_type); +} + +void +qa_pmt_prims::test_integers() +{ + pmt_t p1 = pmt_from_long(1); + pmt_t m1 = pmt_from_long(-1); + CPPUNIT_ASSERT(!pmt_is_integer(PMT_T)); + CPPUNIT_ASSERT(pmt_is_integer(p1)); + CPPUNIT_ASSERT(pmt_is_integer(m1)); + CPPUNIT_ASSERT_THROW(pmt_to_long(PMT_T), pmt_wrong_type); + CPPUNIT_ASSERT_EQUAL(-1L, pmt_to_long(m1)); + CPPUNIT_ASSERT_EQUAL(1L, pmt_to_long(p1)); +} + +void +qa_pmt_prims::test_reals() +{ + pmt_t p1 = pmt_from_double(1); + pmt_t m1 = pmt_from_double(-1); + CPPUNIT_ASSERT(!pmt_is_real(PMT_T)); + CPPUNIT_ASSERT(pmt_is_real(p1)); + CPPUNIT_ASSERT(pmt_is_real(m1)); + CPPUNIT_ASSERT_THROW(pmt_to_double(PMT_T), pmt_wrong_type); + CPPUNIT_ASSERT_EQUAL(-1.0, pmt_to_double(m1)); + CPPUNIT_ASSERT_EQUAL(1.0, pmt_to_double(p1)); + CPPUNIT_ASSERT_EQUAL(1.0, pmt_to_double(pmt_from_long(1))); +} + +void +qa_pmt_prims::test_complexes() +{ + pmt_t p1 = pmt_make_rectangular(2, -3); + pmt_t m1 = pmt_make_rectangular(-3, 2); + CPPUNIT_ASSERT(!pmt_is_complex(PMT_T)); + CPPUNIT_ASSERT(pmt_is_complex(p1)); + CPPUNIT_ASSERT(pmt_is_complex(m1)); + CPPUNIT_ASSERT_THROW(pmt_to_complex(PMT_T), pmt_wrong_type); + CPPUNIT_ASSERT_EQUAL(std::complex(2, -3), pmt_to_complex(p1)); + CPPUNIT_ASSERT_EQUAL(std::complex(-3, 2), pmt_to_complex(m1)); + CPPUNIT_ASSERT_EQUAL(std::complex(1.0, 0), pmt_to_complex(pmt_from_long(1))); + CPPUNIT_ASSERT_EQUAL(std::complex(1.0, 0), pmt_to_complex(pmt_from_double(1.0))); +} + +void +qa_pmt_prims::test_pairs() +{ + CPPUNIT_ASSERT(pmt_is_null(PMT_NIL)); + CPPUNIT_ASSERT(!pmt_is_pair(PMT_NIL)); + pmt_t s1 = pmt_string_to_symbol("s1"); + pmt_t s2 = pmt_string_to_symbol("s2"); + pmt_t s3 = pmt_string_to_symbol("s3"); + + + CPPUNIT_ASSERT_EQUAL((size_t)0, pmt_length(PMT_NIL)); + CPPUNIT_ASSERT_THROW(pmt_length(s1), pmt_wrong_type); + CPPUNIT_ASSERT_THROW(pmt_length(pmt_from_double(42)), pmt_wrong_type); + + pmt_t c1 = pmt_cons(s1, PMT_NIL); + CPPUNIT_ASSERT(pmt_is_pair(c1)); + CPPUNIT_ASSERT(!pmt_is_pair(s1)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_car(c1)); + CPPUNIT_ASSERT_EQUAL(PMT_NIL, pmt_cdr(c1)); + CPPUNIT_ASSERT_EQUAL((size_t) 1, pmt_length(c1)); + + pmt_t c3 = pmt_cons(s3, PMT_NIL); + pmt_t c2 = pmt_cons(s2, c3); + pmt_set_cdr(c1, c2); + CPPUNIT_ASSERT_EQUAL(c2, pmt_cdr(c1)); + pmt_set_car(c1, s3); + CPPUNIT_ASSERT_EQUAL(s3, pmt_car(c1)); + CPPUNIT_ASSERT_EQUAL((size_t)1, pmt_length(c3)); + CPPUNIT_ASSERT_EQUAL((size_t)2, pmt_length(c2)); + + CPPUNIT_ASSERT_THROW(pmt_cdr(PMT_NIL), pmt_wrong_type); + CPPUNIT_ASSERT_THROW(pmt_car(PMT_NIL), pmt_wrong_type); + CPPUNIT_ASSERT_THROW(pmt_set_car(s1, PMT_NIL), pmt_wrong_type); + CPPUNIT_ASSERT_THROW(pmt_set_cdr(s1, PMT_NIL), pmt_wrong_type); +} + +void +qa_pmt_prims::test_vectors() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_vector(N, PMT_NIL); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + pmt_t s0 = pmt_string_to_symbol("s0"); + pmt_t s1 = pmt_string_to_symbol("s1"); + pmt_t s2 = pmt_string_to_symbol("s2"); + + pmt_vector_set(v1, 0, s0); + pmt_vector_set(v1, 1, s1); + pmt_vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_vector_set(v1, N, PMT_NIL), pmt_out_of_range); + + pmt_vector_fill(v1, s0); + for (size_t i = 0; i < N; i++) + CPPUNIT_ASSERT_EQUAL(s0, pmt_vector_ref(v1, i)); +} + +void +qa_pmt_prims::test_equivalence() +{ + pmt_t s0 = pmt_string_to_symbol("s0"); + pmt_t s1 = pmt_string_to_symbol("s1"); + pmt_t s2 = pmt_string_to_symbol("s2"); + pmt_t list0 = pmt_cons(s0, pmt_cons(s1, pmt_cons(s2, PMT_NIL))); + pmt_t list1 = pmt_cons(s0, pmt_cons(s1, pmt_cons(s2, PMT_NIL))); + pmt_t i0 = pmt_from_long(42); + pmt_t i1 = pmt_from_long(42); + pmt_t r0 = pmt_from_double(42); + pmt_t r1 = pmt_from_double(42); + pmt_t r2 = pmt_from_double(43); + + CPPUNIT_ASSERT(pmt_eq(s0, s0)); + CPPUNIT_ASSERT(!pmt_eq(s0, s1)); + CPPUNIT_ASSERT(pmt_eqv(s0, s0)); + CPPUNIT_ASSERT(!pmt_eqv(s0, s1)); + + CPPUNIT_ASSERT(pmt_eqv(i0, i1)); + CPPUNIT_ASSERT(pmt_eqv(r0, r1)); + CPPUNIT_ASSERT(!pmt_eqv(r0, r2)); + CPPUNIT_ASSERT(!pmt_eqv(i0, r0)); + + CPPUNIT_ASSERT(!pmt_eq(list0, list1)); + CPPUNIT_ASSERT(!pmt_eqv(list0, list1)); + CPPUNIT_ASSERT(pmt_equal(list0, list1)); + + pmt_t v0 = pmt_make_vector(3, s0); + pmt_t v1 = pmt_make_vector(3, s0); + pmt_t v2 = pmt_make_vector(4, s0); + CPPUNIT_ASSERT(!pmt_eqv(v0, v1)); + CPPUNIT_ASSERT(pmt_equal(v0, v1)); + CPPUNIT_ASSERT(!pmt_equal(v0, v2)); + + pmt_vector_set(v0, 0, list0); + pmt_vector_set(v0, 1, list0); + pmt_vector_set(v1, 0, list1); + pmt_vector_set(v1, 1, list1); + CPPUNIT_ASSERT(pmt_equal(v0, v1)); +} + +void +qa_pmt_prims::test_misc() +{ + pmt_t k0 = pmt_string_to_symbol("k0"); + pmt_t k1 = pmt_string_to_symbol("k1"); + pmt_t k2 = pmt_string_to_symbol("k2"); + pmt_t k3 = pmt_string_to_symbol("k3"); + pmt_t v0 = pmt_string_to_symbol("v0"); + pmt_t v1 = pmt_string_to_symbol("v1"); + pmt_t v2 = pmt_string_to_symbol("v2"); + pmt_t p0 = pmt_cons(k0, v0); + pmt_t p1 = pmt_cons(k1, v1); + pmt_t p2 = pmt_cons(k2, v2); + + pmt_t alist = pmt_cons(p0, pmt_cons(p1, pmt_cons(p2, PMT_NIL))); + CPPUNIT_ASSERT(pmt_eq(p1, pmt_assv(k1, alist))); + CPPUNIT_ASSERT(pmt_eq(PMT_F, pmt_assv(k3, alist))); + + pmt_t keys = pmt_cons(k0, pmt_cons(k1, pmt_cons(k2, PMT_NIL))); + pmt_t vals = pmt_cons(v0, pmt_cons(v1, pmt_cons(v2, PMT_NIL))); + CPPUNIT_ASSERT(pmt_equal(keys, pmt_map(pmt_car, alist))); + CPPUNIT_ASSERT(pmt_equal(vals, pmt_map(pmt_cdr, alist))); +} + +void +qa_pmt_prims::test_dict() +{ + pmt_t dict = pmt_make_dict(); + CPPUNIT_ASSERT(pmt_is_dict(dict)); + + pmt_t k0 = pmt_string_to_symbol("k0"); + pmt_t k1 = pmt_string_to_symbol("k1"); + pmt_t k2 = pmt_string_to_symbol("k2"); + pmt_t k3 = pmt_string_to_symbol("k3"); + pmt_t v0 = pmt_string_to_symbol("v0"); + pmt_t v1 = pmt_string_to_symbol("v1"); + pmt_t v2 = pmt_string_to_symbol("v2"); + pmt_t v3 = pmt_string_to_symbol("v3"); + pmt_t not_found = pmt_cons(PMT_NIL, PMT_NIL); + + CPPUNIT_ASSERT(!pmt_dict_has_key(dict, k0)); + pmt_dict_set(dict, k0, v0); + CPPUNIT_ASSERT(pmt_dict_has_key(dict, k0)); + CPPUNIT_ASSERT(pmt_eqv(pmt_dict_ref(dict, k0, not_found), v0)); + CPPUNIT_ASSERT(pmt_eqv(pmt_dict_ref(dict, k1, not_found), not_found)); + pmt_dict_set(dict, k1, v1); + pmt_dict_set(dict, k2, v2); + CPPUNIT_ASSERT(pmt_eqv(pmt_dict_ref(dict, k1, not_found), v1)); + pmt_dict_set(dict, k1, v3); + CPPUNIT_ASSERT(pmt_eqv(pmt_dict_ref(dict, k1, not_found), v3)); + + pmt_t keys = pmt_cons(k2, pmt_cons(k1, pmt_cons(k0, PMT_NIL))); + pmt_t vals = pmt_cons(v2, pmt_cons(v3, pmt_cons(v0, PMT_NIL))); + CPPUNIT_ASSERT(pmt_equal(keys, pmt_dict_keys(dict))); + CPPUNIT_ASSERT(pmt_equal(vals, pmt_dict_values(dict))); +} + +void +qa_pmt_prims::test_io() +{ + pmt_t k0 = pmt_string_to_symbol("k0"); + pmt_t k1 = pmt_string_to_symbol("k1"); + pmt_t k2 = pmt_string_to_symbol("k2"); + pmt_t k3 = pmt_string_to_symbol("k3"); + + CPPUNIT_ASSERT_EQUAL(std::string("k0"), pmt_write_string(k0)); +} + +void +qa_pmt_prims::test_lists() +{ + pmt_t s0 = pmt_intern("s0"); + pmt_t s1 = pmt_intern("s1"); + pmt_t s2 = pmt_intern("s2"); + pmt_t s3 = pmt_intern("s3"); + + pmt_t l1 = pmt_list4(s0, s1, s2, s3); + pmt_t l2 = pmt_list3(s0, s1, s2); + pmt_t l3 = pmt_list_add(l2, s3); + CPPUNIT_ASSERT(pmt_equal(l1, l3)); +} + +// ------------------------------------------------------------------------ + +// class foo is used in test_any below. +// It can't be declared in the scope of test_any because of template +// namespace problems. + +class foo { +public: + double d_double; + int d_int; + foo(double d=0, int i=0) : d_double(d), d_int(i) {} +}; + +bool operator==(const foo &a, const foo &b) +{ + return a.d_double == b.d_double && a.d_int == b.d_int; +} + +std::ostream& operator<<(std::ostream &os, const foo obj) +{ + os << ""; + return os; +} + +void +qa_pmt_prims::test_any() +{ + boost::any a0; + boost::any a1; + boost::any a2; + + a0 = std::string("Hello!"); + a1 = 42; + a2 = foo(3.250, 21); + + pmt_t p0 = pmt_make_any(a0); + pmt_t p1 = pmt_make_any(a1); + pmt_t p2 = pmt_make_any(a2); + + CPPUNIT_ASSERT_EQUAL(std::string("Hello!"), + boost::any_cast(pmt_any_ref(p0))); + + CPPUNIT_ASSERT_EQUAL(42, + boost::any_cast(pmt_any_ref(p1))); + + CPPUNIT_ASSERT_EQUAL(foo(3.250, 21), + boost::any_cast(pmt_any_ref(p2))); +} + +// ------------------------------------------------------------------------ + +void +qa_pmt_prims::test_serialize() +{ + std::stringbuf sb; // fake channel + pmt_t a = pmt_intern("a"); + pmt_t b = pmt_intern("b"); + pmt_t c = pmt_intern("c"); + + sb.str(""); // reset channel to empty + + // write stuff to channel + + pmt_serialize(PMT_NIL, sb); + pmt_serialize(pmt_intern("foobarvia"), sb); + pmt_serialize(pmt_from_long(123456789), sb); + pmt_serialize(pmt_from_long(-123456789), sb); + pmt_serialize(pmt_cons(PMT_NIL, PMT_NIL), sb); + pmt_serialize(pmt_cons(a, b), sb); + pmt_serialize(pmt_list1(a), sb); + pmt_serialize(pmt_list2(a, b), sb); + pmt_serialize(pmt_list3(a, b, c), sb); + pmt_serialize(pmt_list3(a, pmt_list3(c, b, a), c), sb); + pmt_serialize(PMT_T, sb); + pmt_serialize(PMT_F, sb); + + // read it back + + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), PMT_NIL)); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_intern("foobarvia"))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_from_long(123456789))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_from_long(-123456789))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_cons(PMT_NIL, PMT_NIL))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_cons(a, b))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_list1(a))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_list2(a, b))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_list3(a, b, c))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), pmt_list3(a, pmt_list3(c, b, a), c))); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), PMT_T)); + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), PMT_F)); + + CPPUNIT_ASSERT(pmt_equal(pmt_deserialize(sb), PMT_EOF)); // last item + + + // FIXME add tests for real, complex, vector, uniform-vector, dict + // FIXME add tests for malformed input too. + +} diff --git a/pmt/src/lib/qa_pmt_prims.h b/pmt/src/lib/qa_pmt_prims.h new file mode 100644 index 00000000..919fc2dc --- /dev/null +++ b/pmt/src/lib/qa_pmt_prims.h @@ -0,0 +1,65 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ +#ifndef INCLUDED_QA_PMT_PRIMS_H +#define INCLUDED_QA_PMT_PRIMS_H + +#include +#include + +class qa_pmt_prims : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_pmt_prims); + CPPUNIT_TEST(test_symbols); + CPPUNIT_TEST(test_booleans); + CPPUNIT_TEST(test_integers); + CPPUNIT_TEST(test_reals); + CPPUNIT_TEST(test_complexes); + CPPUNIT_TEST(test_pairs); + CPPUNIT_TEST(test_vectors); + CPPUNIT_TEST(test_equivalence); + CPPUNIT_TEST(test_misc); + CPPUNIT_TEST(test_dict); + CPPUNIT_TEST(test_any); + CPPUNIT_TEST(test_io); + CPPUNIT_TEST(test_lists); + CPPUNIT_TEST(test_serialize); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_symbols(); + void test_booleans(); + void test_integers(); + void test_reals(); + void test_complexes(); + void test_pairs(); + void test_vectors(); + void test_equivalence(); + void test_misc(); + void test_dict(); + void test_any(); + void test_io(); + void test_lists(); + void test_serialize(); +}; + +#endif /* INCLUDED_QA_PMT_PRIMS_H */ + diff --git a/pmt/src/lib/qa_pmt_unv.cc b/pmt/src/lib/qa_pmt_unv.cc new file mode 100644 index 00000000..b3edf00c --- /dev/null +++ b/pmt/src/lib/qa_pmt_unv.cc @@ -0,0 +1,447 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include + +void +qa_pmt_unv::test_u8vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_u8vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + uint8_t s0 = uint8_t(10); + uint8_t s1 = uint8_t(20); + uint8_t s2 = uint8_t(30); + + pmt_u8vector_set(v1, 0, s0); + pmt_u8vector_set(v1, 1, s1); + pmt_u8vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_u8vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_u8vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_u8vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_u8vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_u8vector_set(v1, N, uint8_t(0)), pmt_out_of_range); + + size_t len; + const uint8_t *rd = pmt_u8vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + uint8_t *wr = pmt_u8vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = uint8_t(0); + CPPUNIT_ASSERT_EQUAL(uint8_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_s8vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_s8vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + int8_t s0 = int8_t(10); + int8_t s1 = int8_t(20); + int8_t s2 = int8_t(30); + + pmt_s8vector_set(v1, 0, s0); + pmt_s8vector_set(v1, 1, s1); + pmt_s8vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_s8vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_s8vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_s8vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_s8vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_s8vector_set(v1, N, int8_t(0)), pmt_out_of_range); + + size_t len; + const int8_t *rd = pmt_s8vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + int8_t *wr = pmt_s8vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = int8_t(0); + CPPUNIT_ASSERT_EQUAL(int8_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_u16vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_u16vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + uint16_t s0 = uint16_t(10); + uint16_t s1 = uint16_t(20); + uint16_t s2 = uint16_t(30); + + pmt_u16vector_set(v1, 0, s0); + pmt_u16vector_set(v1, 1, s1); + pmt_u16vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_u16vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_u16vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_u16vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_u16vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_u16vector_set(v1, N, uint16_t(0)), pmt_out_of_range); + + size_t len; + const uint16_t *rd = pmt_u16vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + uint16_t *wr = pmt_u16vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = uint16_t(0); + CPPUNIT_ASSERT_EQUAL(uint16_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_s16vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_s16vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + int16_t s0 = int16_t(10); + int16_t s1 = int16_t(20); + int16_t s2 = int16_t(30); + + pmt_s16vector_set(v1, 0, s0); + pmt_s16vector_set(v1, 1, s1); + pmt_s16vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_s16vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_s16vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_s16vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_s16vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_s16vector_set(v1, N, int16_t(0)), pmt_out_of_range); + + size_t len; + const int16_t *rd = pmt_s16vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + int16_t *wr = pmt_s16vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = int16_t(0); + CPPUNIT_ASSERT_EQUAL(int16_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_u32vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_u32vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + uint32_t s0 = uint32_t(10); + uint32_t s1 = uint32_t(20); + uint32_t s2 = uint32_t(30); + + pmt_u32vector_set(v1, 0, s0); + pmt_u32vector_set(v1, 1, s1); + pmt_u32vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_u32vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_u32vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_u32vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_u32vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_u32vector_set(v1, N, uint32_t(0)), pmt_out_of_range); + + size_t len; + const uint32_t *rd = pmt_u32vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + uint32_t *wr = pmt_u32vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = uint32_t(0); + CPPUNIT_ASSERT_EQUAL(uint32_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_s32vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_s32vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + int32_t s0 = int32_t(10); + int32_t s1 = int32_t(20); + int32_t s2 = int32_t(30); + + pmt_s32vector_set(v1, 0, s0); + pmt_s32vector_set(v1, 1, s1); + pmt_s32vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_s32vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_s32vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_s32vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_s32vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_s32vector_set(v1, N, int32_t(0)), pmt_out_of_range); + + size_t len; + const int32_t *rd = pmt_s32vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + int32_t *wr = pmt_s32vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = int32_t(0); + CPPUNIT_ASSERT_EQUAL(int32_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_u64vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_u64vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + uint64_t s0 = uint64_t(10); + uint64_t s1 = uint64_t(20); + uint64_t s2 = uint64_t(30); + + pmt_u64vector_set(v1, 0, s0); + pmt_u64vector_set(v1, 1, s1); + pmt_u64vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_u64vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_u64vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_u64vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_u64vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_u64vector_set(v1, N, uint64_t(0)), pmt_out_of_range); + + size_t len; + const uint64_t *rd = pmt_u64vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + uint64_t *wr = pmt_u64vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = uint64_t(0); + CPPUNIT_ASSERT_EQUAL(uint64_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_s64vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_s64vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + int64_t s0 = int64_t(10); + int64_t s1 = int64_t(20); + int64_t s2 = int64_t(30); + + pmt_s64vector_set(v1, 0, s0); + pmt_s64vector_set(v1, 1, s1); + pmt_s64vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_s64vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_s64vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_s64vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_s64vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_s64vector_set(v1, N, int64_t(0)), pmt_out_of_range); + + size_t len; + const int64_t *rd = pmt_s64vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + int64_t *wr = pmt_s64vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = int64_t(0); + CPPUNIT_ASSERT_EQUAL(int64_t(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_f32vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_f32vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + float s0 = float(10); + float s1 = float(20); + float s2 = float(30); + + pmt_f32vector_set(v1, 0, s0); + pmt_f32vector_set(v1, 1, s1); + pmt_f32vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_f32vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_f32vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_f32vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_f32vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_f32vector_set(v1, N, float(0)), pmt_out_of_range); + + size_t len; + const float *rd = pmt_f32vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + float *wr = pmt_f32vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = float(0); + CPPUNIT_ASSERT_EQUAL(float(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_f64vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_f64vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + double s0 = double(10); + double s1 = double(20); + double s2 = double(30); + + pmt_f64vector_set(v1, 0, s0); + pmt_f64vector_set(v1, 1, s1); + pmt_f64vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_f64vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_f64vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_f64vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_f64vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_f64vector_set(v1, N, double(0)), pmt_out_of_range); + + size_t len; + const double *rd = pmt_f64vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + double *wr = pmt_f64vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = double(0); + CPPUNIT_ASSERT_EQUAL(double(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_c32vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_c32vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + std::complex s0 = std::complex(10); + std::complex s1 = std::complex(20); + std::complex s2 = std::complex(30); + + pmt_c32vector_set(v1, 0, s0); + pmt_c32vector_set(v1, 1, s1); + pmt_c32vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_c32vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_c32vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_c32vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_c32vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_c32vector_set(v1, N, std::complex(0)), pmt_out_of_range); + + size_t len; + const std::complex *rd = pmt_c32vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + std::complex *wr = pmt_c32vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = std::complex(0); + CPPUNIT_ASSERT_EQUAL(std::complex(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} +void +qa_pmt_unv::test_c64vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_c64vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + std::complex s0 = std::complex(10); + std::complex s1 = std::complex(20); + std::complex s2 = std::complex(30); + + pmt_c64vector_set(v1, 0, s0); + pmt_c64vector_set(v1, 1, s1); + pmt_c64vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_c64vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_c64vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_c64vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_c64vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_c64vector_set(v1, N, std::complex(0)), pmt_out_of_range); + + size_t len; + const std::complex *rd = pmt_c64vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + std::complex *wr = pmt_c64vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = std::complex(0); + CPPUNIT_ASSERT_EQUAL(std::complex(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} diff --git a/pmt/src/lib/qa_pmt_unv.h b/pmt/src/lib/qa_pmt_unv.h new file mode 100644 index 00000000..ce051b61 --- /dev/null +++ b/pmt/src/lib/qa_pmt_unv.h @@ -0,0 +1,61 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef INCLUDED_QA_PMT_UNV_H +#define INCLUDED_QA_PMT_UNV_H + +#include +#include + +class qa_pmt_unv : public CppUnit::TestCase { + + CPPUNIT_TEST_SUITE(qa_pmt_unv); + CPPUNIT_TEST(test_u8vector); + CPPUNIT_TEST(test_s8vector); + CPPUNIT_TEST(test_u16vector); + CPPUNIT_TEST(test_s16vector); + CPPUNIT_TEST(test_u32vector); + CPPUNIT_TEST(test_s32vector); + CPPUNIT_TEST(test_u64vector); + CPPUNIT_TEST(test_s64vector); + CPPUNIT_TEST(test_f32vector); + CPPUNIT_TEST(test_f64vector); + CPPUNIT_TEST(test_c32vector); + CPPUNIT_TEST(test_c64vector); + CPPUNIT_TEST_SUITE_END(); + + private: + void test_u8vector(); + void test_s8vector(); + void test_u16vector(); + void test_s16vector(); + void test_u32vector(); + void test_s32vector(); + void test_u64vector(); + void test_s64vector(); + void test_f32vector(); + void test_f64vector(); + void test_c32vector(); + void test_c64vector(); +}; + +#endif diff --git a/pmt/src/lib/stamp-sources-generate b/pmt/src/lib/stamp-sources-generate new file mode 100644 index 00000000..e69de29b diff --git a/pmt/src/lib/test_pmt.cc b/pmt/src/lib/test_pmt.cc new file mode 100644 index 00000000..034785f4 --- /dev/null +++ b/pmt/src/lib/test_pmt.cc @@ -0,0 +1,37 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include + +int +main(int argc, char **argv) +{ + + CppUnit::TextTestRunner runner; + + runner.addTest(qa_pmt::suite ()); + + bool was_successful = runner.run("", false); + + return was_successful ? 0 : 1; +} diff --git a/pmt/src/lib/unv_qa_template.cc.t b/pmt/src/lib/unv_qa_template.cc.t new file mode 100644 index 00000000..1e2c8e8e --- /dev/null +++ b/pmt/src/lib/unv_qa_template.cc.t @@ -0,0 +1,35 @@ +void +qa_pmt_unv::test_@TAG@vector() +{ + static const size_t N = 3; + pmt_t v1 = pmt_make_@TAG@vector(N, 0); + CPPUNIT_ASSERT_EQUAL(N, pmt_length(v1)); + @TYPE@ s0 = @TYPE@(10); + @TYPE@ s1 = @TYPE@(20); + @TYPE@ s2 = @TYPE@(30); + + pmt_@TAG@vector_set(v1, 0, s0); + pmt_@TAG@vector_set(v1, 1, s1); + pmt_@TAG@vector_set(v1, 2, s2); + + CPPUNIT_ASSERT_EQUAL(s0, pmt_@TAG@vector_ref(v1, 0)); + CPPUNIT_ASSERT_EQUAL(s1, pmt_@TAG@vector_ref(v1, 1)); + CPPUNIT_ASSERT_EQUAL(s2, pmt_@TAG@vector_ref(v1, 2)); + + CPPUNIT_ASSERT_THROW(pmt_@TAG@vector_ref(v1, N), pmt_out_of_range); + CPPUNIT_ASSERT_THROW(pmt_@TAG@vector_set(v1, N, @TYPE@(0)), pmt_out_of_range); + + size_t len; + const @TYPE@ *rd = pmt_@TAG@vector_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + CPPUNIT_ASSERT_EQUAL(s0, rd[0]); + CPPUNIT_ASSERT_EQUAL(s1, rd[1]); + CPPUNIT_ASSERT_EQUAL(s2, rd[2]); + + @TYPE@ *wr = pmt_@TAG@vector_writable_elements(v1, len); + CPPUNIT_ASSERT_EQUAL(len, N); + wr[0] = @TYPE@(0); + CPPUNIT_ASSERT_EQUAL(@TYPE@(0), wr[0]); + CPPUNIT_ASSERT_EQUAL(s1, wr[1]); + CPPUNIT_ASSERT_EQUAL(s2, wr[2]); +} diff --git a/pmt/src/lib/unv_template.cc.t b/pmt/src/lib/unv_template.cc.t new file mode 100644 index 00000000..1e86caea --- /dev/null +++ b/pmt/src/lib/unv_template.cc.t @@ -0,0 +1,118 @@ +//////////////////////////////////////////////////////////////////////////// +// pmt_@TAG@vector +//////////////////////////////////////////////////////////////////////////// + +static pmt_@TAG@vector * +_@TAG@vector(pmt_t x) +{ + return dynamic_cast(x.get()); +} + + +pmt_@TAG@vector::pmt_@TAG@vector(size_t k, @TYPE@ fill) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = fill; +} + +pmt_@TAG@vector::pmt_@TAG@vector(size_t k, const @TYPE@ *data) + : d_v(k) +{ + for (size_t i = 0; i < k; i++) + d_v[i] = data[i]; +} + +@TYPE@ +pmt_@TAG@vector::ref(size_t k) const +{ + if (k >= length()) + throw pmt_out_of_range("pmt_@TAG@vector_ref", pmt_from_long(k)); + return d_v[k]; +} + +void +pmt_@TAG@vector::set(size_t k, @TYPE@ x) +{ + if (k >= length()) + throw pmt_out_of_range("pmt_@TAG@vector_set", pmt_from_long(k)); + d_v[k] = x; +} + +const @TYPE@ * +pmt_@TAG@vector::elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +@TYPE@ * +pmt_@TAG@vector::writable_elements(size_t &len) +{ + len = length(); + return &d_v[0]; +} + +const void* +pmt_@TAG@vector::uniform_elements(size_t &len) +{ + len = length() * sizeof(@TYPE@); + return &d_v[0]; +} + +void* +pmt_@TAG@vector::uniform_writable_elements(size_t &len) +{ + len = length() * sizeof(@TYPE@); + return &d_v[0]; +} + +bool +pmt_is_@TAG@vector(pmt_t obj) +{ + return obj->is_@TAG@vector(); +} + +pmt_t +pmt_make_@TAG@vector(size_t k, @TYPE@ fill) +{ + return pmt_t(new pmt_@TAG@vector(k, fill)); +} + +pmt_t +pmt_init_@TAG@vector(size_t k, const @TYPE@ *data) +{ + return pmt_t(new pmt_@TAG@vector(k, data)); +} + +@TYPE@ +pmt_@TAG@vector_ref(pmt_t vector, size_t k) +{ + if (!vector->is_@TAG@vector()) + throw pmt_wrong_type("pmt_@TAG@vector_ref", vector); + return _@TAG@vector(vector)->ref(k); +} + +void +pmt_@TAG@vector_set(pmt_t vector, size_t k, @TYPE@ obj) +{ + if (!vector->is_@TAG@vector()) + throw pmt_wrong_type("pmt_@TAG@vector_set", vector); + _@TAG@vector(vector)->set(k, obj); +} + +const @TYPE@ * +pmt_@TAG@vector_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_@TAG@vector()) + throw pmt_wrong_type("pmt_@TAG@vector_elements", vector); + return _@TAG@vector(vector)->elements(len); +} + +@TYPE@ * +pmt_@TAG@vector_writable_elements(pmt_t vector, size_t &len) +{ + if (!vector->is_@TAG@vector()) + throw pmt_wrong_type("pmt_@TAG@vector_writable_elements", vector); + return _@TAG@vector(vector)->writable_elements(len); +} diff --git a/pmt/src/lib/unv_template.h.t b/pmt/src/lib/unv_template.h.t new file mode 100644 index 00000000..83ba0be0 --- /dev/null +++ b/pmt/src/lib/unv_template.h.t @@ -0,0 +1,23 @@ + +//////////////////////////////////////////////////////////////////////////// +// pmt_@TAG@vector +//////////////////////////////////////////////////////////////////////////// + +class pmt_@TAG@vector : public pmt_uniform_vector +{ + std::vector< @TYPE@ > d_v; + +public: + pmt_@TAG@vector(size_t k, @TYPE@ fill); + pmt_@TAG@vector(size_t k, const @TYPE@ *data); + // ~pmt_@TAG@vector(); + + bool is_@TAG@vector() const { return true; } + size_t length() const { return d_v.size(); } + @TYPE@ ref(size_t k) const; + void set(size_t k, @TYPE@ x); + const @TYPE@ *elements(size_t &len); + @TYPE@ *writable_elements(size_t &len); + const void *uniform_elements(size_t &len); + void *uniform_writable_elements(size_t &len); +}; diff --git a/pmt/src/scheme/Makefile.am b/pmt/src/scheme/Makefile.am new file mode 100644 index 00000000..4980063d --- /dev/null +++ b/pmt/src/scheme/Makefile.am @@ -0,0 +1,21 @@ +# +# Copyright 2007 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. +# + +SUBDIRS = gnuradio diff --git a/pmt/src/scheme/Makefile.in b/pmt/src/scheme/Makefile.in new file mode 100644 index 00000000..2132bbf3 --- /dev/null +++ b/pmt/src/scheme/Makefile.in @@ -0,0 +1,895 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007 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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = pmt/src/scheme +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = gnuradio +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pmt/src/scheme/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu pmt/src/scheme/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pmt/src/scheme/gnuradio/Makefile.am b/pmt/src/scheme/gnuradio/Makefile.am new file mode 100644 index 00000000..0ce01f6f --- /dev/null +++ b/pmt/src/scheme/gnuradio/Makefile.am @@ -0,0 +1,31 @@ +# +# Copyright 2007,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +#pkgdatadir = $(datadir)/gnuradio + +EXTRA_DIST = \ + gen-serial-tags.scm + +# really scheme source files +dist_pkgdata_DATA = \ + pmt-serial-tags.scm \ + pmt-serialize.scm \ + macros-etc.scm + diff --git a/pmt/src/scheme/gnuradio/Makefile.in b/pmt/src/scheme/gnuradio/Makefile.in new file mode 100644 index 00000000..9b7a9023 --- /dev/null +++ b/pmt/src/scheme/gnuradio/Makefile.in @@ -0,0 +1,780 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +#pkgdatadir = $(datadir)/gnuradio + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = pmt/src/scheme/gnuradio +DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgdatadir)" +dist_pkgdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_pkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +EXTRA_DIST = \ + gen-serial-tags.scm + + +# really scheme source files +dist_pkgdata_DATA = \ + pmt-serial-tags.scm \ + pmt-serialize.scm \ + macros-etc.scm + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pmt/src/scheme/gnuradio/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu pmt/src/scheme/gnuradio/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_pkgdataDATA: $(dist_pkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" + @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done + +uninstall-dist_pkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(pkgdatadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_pkgdataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_pkgdataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_pkgdataDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_pkgdataDATA + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pmt/src/scheme/gnuradio/gen-serial-tags.scm b/pmt/src/scheme/gnuradio/gen-serial-tags.scm new file mode 100755 index 00000000..7b908722 --- /dev/null +++ b/pmt/src/scheme/gnuradio/gen-serial-tags.scm @@ -0,0 +1,118 @@ +#!/usr/bin/guile \ +-e main -s +!# +;;; -*-scheme-*- +;;; +;;; Copyright 2007 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. +;;; + +(use-modules (ice-9 format)) + +(defmacro when (pred . body) + `(if ,pred (begin ,@body) #f)) + +;; ---------------------------------------------------------------- + +(define (main args) + + (define (usage) + (format 0 + "usage: ~a ~%" + (car args))) + + (when (not (= (length args) 3)) + (usage) + (format 0 "args: ~s~%" args) + (exit 1)) + + (let ((i-file (open-input-file (cadr args))) + (h-file (open-output-file (caddr args)))) + + (write-header-comment h-file "// ") + (display "#ifndef INCLUDED_PMT_SERIAL_TAGS_H\n" h-file) + (display "#define INCLUDED_PMT_SERIAL_TAGS_H\n" h-file) + (newline h-file) + (display "enum pst_tags {\n" h-file) + + (for-each-in-file i-file + (lambda (form) + (let* ((name (cadr form)) + (c-name (string-upcase (c-ify name))) + (value (caddr form))) + ;;(format h-file "static const int ~a\t= 0x~x;~%" c-name value) + (format h-file " ~a\t= 0x~x,~%" c-name value)))) + + (display "};\n" h-file) + (display "#endif\n" h-file))) + +(define (c-ify name) + (list->string (map (lambda (c) + (if (eqv? c #\-) #\_ c)) + (string->list (symbol->string name))))) + + +(define (write-header-comment o-port prefix) + (for-each (lambda (comment) + (format o-port "~a~a~%" prefix comment)) + header-comment)) + +(define header-comment + '( + "" + "Copyright 2007 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." + "" + "" + "THIS FILE IS MACHINE GENERATED FROM pmt-serial-tags.scm. DO NOT EDIT BY HAND." + "See pmt-serial-tags.scm for additional commentary." + "")) + + + +(define (for-each-in-file file f) + (let ((port (if (port? file) + file + (open-input-file file)))) + (letrec + ((loop + (lambda (port form) + (cond ((eof-object? form) + (when (not (eq? port file)) + (close-input-port port)) + #t) + (else + (f form) + (set! form #f) ; for GC + (loop port (read port))))))) + (loop port (read port))))) diff --git a/pmt/src/scheme/gnuradio/macros-etc.scm b/pmt/src/scheme/gnuradio/macros-etc.scm new file mode 100644 index 00000000..ac2a4a34 --- /dev/null +++ b/pmt/src/scheme/gnuradio/macros-etc.scm @@ -0,0 +1,50 @@ +;;; -*- scheme -*- +;;; +;;; Copyright 2007 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. +;;; + +(define-module (gnuradio macros-etc) + :export (atom? when unless for-each-in-file)) + +(define (atom? obj) + (not (pair? obj))) + +(defmacro when (pred . body) + `(if ,pred (begin ,@body) #f)) + +(defmacro unless (pred . body) + `(if (not ,pred) (begin ,@body) #f)) + + +(define (for-each-in-file file f) + (let ((port (if (port? file) + file + (open-input-file file)))) + (letrec + ((loop + (lambda (port form) + (cond ((eof-object? form) + (when (not (eq? port file)) + (close-input-port port)) + #t) + (else + (f form) + (set! form #f) ; for GC + (loop port (read port))))))) + (loop port (read port))))) diff --git a/pmt/src/scheme/gnuradio/pmt-serial-tags.scm b/pmt/src/scheme/gnuradio/pmt-serial-tags.scm new file mode 100644 index 00000000..646a751e --- /dev/null +++ b/pmt/src/scheme/gnuradio/pmt-serial-tags.scm @@ -0,0 +1,75 @@ +;;; -*-scheme-*- +;;; +;;; Copyright 2007 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 (define 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. +;;; + +;;; definitions of tag values used for marshalling pmt data + +(define pst-true #x00) +(define pst-false #x01) +(define pst-symbol #x02) ; untagged-int16 n; followed by n bytes of symbol name +(define pst-int32 #x03) +(define pst-double #x04) +(define pst-complex #x05) ; complex: real, imag +(define pst-null #x06) +(define pst-pair #x07) ; followed by two objects +(define pst-vector #x08) ; untagged-int32 n; followed by n objects +(define pst-dict #x09) ; untagged-int32 n; followed by n key/value tuples + +(define pst-uniform-vector #x0a) + +;; u8, s8, u16, s16, u32, s32, u64, s64, f32, f64, c32, c64 +;; +;; untagged-uint8 tag +;; untagged-uint8 uvi (define uniform vector info, see below) +;; untagged-int32 n-items +;; untagged-uint8 npad +;; npad bytes of zeros to align binary data +;; n-items binary numeric items +;; +;; uvi: +;; +-+-+-+-+-+-+-+-+ +;; |B| subtype | +;; +-+-+-+-+-+-+-+-+ +;; +;; B == 0, numeric data is little-endian. +;; B == 1, numeric data is big-endian. + + (define uvi-endian-mask #x80) + (define uvi-subtype-mask #x7f) + + (define uvi-little-endian #x00) + (define uvi-big-endian #x80) + + (define uvi-u8 #x00) + (define uvi-s8 #x01) + (define uvi-u16 #x02) + (define uvi-s16 #x03) + (define uvi-u32 #x04) + (define uvi-s32 #x05) + (define uvi-u64 #x06) + (define uvi-s64 #x07) + (define uvi-f32 #x08) + (define uvi-f64 #x09) + (define uvi-c32 #x0a) + (define uvi-c64 #x0b) + + +(define pst-comment #x3b) ; ascii ';' +(define pst-comment-end #x0a) ; ascii '\n' diff --git a/pmt/src/scheme/gnuradio/pmt-serialize.scm b/pmt/src/scheme/gnuradio/pmt-serialize.scm new file mode 100644 index 00000000..c1d32d75 --- /dev/null +++ b/pmt/src/scheme/gnuradio/pmt-serialize.scm @@ -0,0 +1,48 @@ +;;; +;;; Copyright 2007 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. +;;; + +;;; An implementation of pmt_serialize in scheme. +;;; Currently handles only symbols and pairs. They're all we need for now. + +(define-module (gnuradio pmt-serialize) + :export (pmt-serialize)) + +(load-from-path "gnuradio/pmt-serial-tags") + +(define (pmt-serialize obj put-byte) + (define (put-u16 x) + (put-byte (logand (ash x -8) #xff)) + (put-byte (logand x #xff))) + + (cond ((null? obj) + (put-byte pst-null)) + ((symbol? obj) + (let* ((sym-as-bytes (map char->integer (string->list (symbol->string obj)))) + (len (length sym-as-bytes))) + (put-byte pst-symbol) + (put-u16 len) + (for-each put-byte sym-as-bytes))) + + ((pair? obj) + (put-byte pst-pair) + (pmt-serialize (car obj) put-byte) + (pmt-serialize (cdr obj) put-byte)) + (else + (throw 'not-implemented "pmt-serialize" obj)))) diff --git a/run_tests.sh.in b/run_tests.sh.in index 5e1cbdc9..69fbe26d 100644 --- a/run_tests.sh.in +++ b/run_tests.sh.in @@ -4,6 +4,15 @@ # Second argument is absolute path to top of component build directory # Third argument is component source directory for qa tests +# Absolute path to the top of the source directory +abs_top_srcdir=@abs_top_srcdir@ + +# Absolute path to the top of the build directory +abs_top_builddir=@abs_top_builddir@ + +# current QA srcdir +export srcdir=$3 + # Where to find my swig generated shared library mylibdir=$2/src:$2/src/.libs:$2/src/lib:$2/src/lib/.libs @@ -13,27 +22,115 @@ mysrcdir=$1/src:$1/src/lib # Where to find my hand written python modules mypydir=$1/src:$1/src/python -# Where to find core's swig generated shared libraries -grswigdir=@abs_top_builddir@/gnuradio-core/src/lib/swig -grswigdir=$grswigdir:$grswigdir/.libs +# Where to find core's swig generated shared libraries, +# and hand generated swig glue +grswigdir=@gnuradio_core_SWIGDIRPATH@ # Where to find core's python modules -grpydir=@abs_top_srcdir@/gnuradio-core/src/python +grpydir=@gnuradio_core_PYDIRPATH@ -# Where to find core's master library files -grlibdir=@abs_top_builddir@/gnuradio-core/src/lib -grlibdir=$grlibdir:$grlibdir/.libs +# Construct search path for python modules, if each exists +for dir in $grswigdir $grpydir +do + if [ "$dir" != "" ] + then + if [ "$PYTHONPATH" = "" ] + then + PYTHONPATH="$dir" + else + PYTHONPATH="$dir:$PYTHONPATH" + fi + fi +done -# Construct search path for python modules -PYTHONPATH="$mylibdir:$mysrcdir:$mypydir:$grswigdir:$grpydir:$PYTHONPATH" +# Where to find pre-installed python modules +withpydirs=@with_PYDIRPATH@ + +# Add the 'with' dirs to the end of the python search path, if it exists +if [ "$withpydirs" != "" ] +then + PYTHONPATH="$PYTHONPATH:$withpydirs" +fi + +# Add the "my" dirs to the absolute front of the python search path +PYTHONPATH="$mylibdir:$mysrcdir:$mypydir:$PYTHONPATH" export PYTHONPATH -# For OS/X -DYLD_LIBRARY_PATH=$grlibdir:$DYLD_LIBRARY_PATH -export DYLD_LIBRARY_PATH +# Where to find omnithread library files +gromnidir=@omnithread_LIBDIRPATH@ + +# Where to find gruel library files +grueldir=@gruel_LIBDIRPATH@ + +# Where to find gnuradio core's library files +grcoredir=@gnuradio_core_LIBDIRPATH@ + +# Construct search path for python modules +# Check each one to make sure it's not "" before adding +grlibdir="" +for dir in $gromnidir $grcoredir $grueldir +do + if [ "$dir" != "" ] + then + if [ "$grlibdir" = "" ] + then + grlibdir="$dir" + else + grlibdir="$dir:$grlibdir" + fi + fi +done + +# Add 'mylibdir' to the start of the library load path, to get local +# (to this component) created libraries + +# Where to find pre-installed libraries +withlibdirs=@with_LIBDIRPATH@ -# For Win32 -PATH=$grlibdir:$PATH +case "@host_os@" in + darwin*) + # Special Code for executing on Darwin / Mac OS X only + if [ "$DYLD_LIBRARY_PATH" = "" ] + then + DYLD_LIBRARY_PATH=$mylibdir + else + DYLD_LIBRARY_PATH=$mylibdir:$DYLD_LIBRARY_PATH + fi + # DYLD_LIBRARY_PATH will not be empty now + # Add the grlibdir paths to the front of any library load variable + if [ "$grlibdir" != "" ] + then + DYLD_LIBRARY_PATH=$grlibdir:$DYLD_LIBRARY_PATH + fi + # Add the withdirs paths to the end of any library load variable + if [ "$withlibdirs" != "" ] + then + DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$withlibdirs + fi + export DYLD_LIBRARY_PATH + ;; + cygwin*|win*|mingw*) + # Special Code for executing on Win32 variants only + if [ "$PATH" = "" ] + then + PATH=$mylibdir + else + PATH=$mylibdir:$PATH + fi + # PATH will not be empty now + # Add the grlibdir paths to the front of any library load variable + if [ "$grlibdir" != "" ] + then + PATH=$grlibdir:$PATH + fi + # Add the withdirs paths to the end of any library load variable + if [ "$withlibdirs" != "" ] + then + PATH=$PATH:$withlibdirs + fi + export PATH + ;; +esac # Don't load user or system prefs GR_DONT_LOAD_PREFS=1 @@ -44,8 +141,15 @@ export GR_DONT_LOAD_PREFS ok=yes for file in $3/qa_*.py do - if ! @PYTHON@ $file + # echo $file + @PYTHON@ $file + r=$? + if [ $r -ne 0 ] then + if [ $r -ge 128 ] # killed by a signal + then + exit $r + fi ok=no fi done diff --git a/usrp/AUTHORS b/usrp/AUTHORS deleted file mode 100644 index bdfe42dc..00000000 --- a/usrp/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -Matt Ettus -Eric Blossom -Michael Dickens Fast USB support for OS/X -Martin Dudok van Heel Multi usrp synchronisation, 8 bit support diff --git a/usrp/ChangeLog b/usrp/ChangeLog deleted file mode 100644 index 12ceb4e5..00000000 --- a/usrp/ChangeLog +++ /dev/null @@ -1,1061 +0,0 @@ -2006-10-10 Greg Troxel - - * firmware/include/Makefile.am: avoid nonportable use of $< (first - prereq in GNU make, implied source for pattern rule in BSD make) - used in a non-pattern rule. - -2006-06-25 Eric Blossom - - * firmware/include/fpga_regs_standard.h: doc fix to reflect current reality. - -2006-06-10 Eric Blossom - - * host/apps/usrper.cc: removed dead (#if 0'd) code, that's no longer applicable. - -2006-05-11 Martin Dudok van Heel - Added synchronised multi_usrp support using a new fpga firmware build in a new toplevel usrp_multi. - A few changes were needed in the mainline code, but they shouldn't affect anyone - (No functionality changes in the existing code, just a few API additions) - - * firmware/include/fpga_regs_standard.v: added Master/slave control register FR_RX_MASTER_SLAVE - * firmware/include/fpga_regs_common.h: added 32 bit counter support bmFR_MODE_RX_COUNTING_32BIT - * firmware/include/generate_regs.py: added support for bitno and bm defines - * firmware/include/fpga_regs_standard.h: added Master/slave control register FR_RX_MASTER_SLAVE - * host/lib/usrp_basic.h: added _write_fpga_reg_masked - * host/lib/usrp_basic.cc: added _write_fpga_reg_masked - * host/lib/usrp_standard.h: added FPGA_MODE_COUNTING_32BIT - * fpga/Makefile.extra: regenerated to add new usrp_multi files - * fpga/rbf/rev4/multi_2rxhb_2tx.rbf: new (fpga firmware for synchronised multi_usrp support) - * fpga/rbf/rev4/multi_4rx_0tx.rbf: new (fpga firmware for synchronised multi_usrp support) - * fpga/rbf/Makefile.am: added commented out rev2/multi_2rxhb_2tx.rbf and rev4/multi_2rxhb_2tx.rbf - * fpga/rbf/rev2/multi_2rxhb_2tx.rbf: new (fpga firmware for synchronised multi_usrp support) - * fpga/rbf/rev2/multi_4rx_0tx.rbf: new (fpga firmware for synchronised multi_usrp support) - * fpga/toplevel/usrp_std/usrp_std.v: split rx_buffer reset into dsp reset and reset_regs - * fpga/toplevel/usrp_multi: new fpga toplevel for synchronised multi_usrp support - * fpga/toplevel/usrp_multi/usrp_multi.esf: new - * fpga/toplevel/usrp_multi/usrp_multi.vh: new toplevel verilog include, - to turn on/off multi usrp support and number of rx/tx channels and halfband - * fpga/toplevel/usrp_multi/usrp_std.vh: new wrapper for usrp_multi.vh - * fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh: new - * fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh: new - * fpga/toplevel/usrp_multi/usrp_multi.v: new toplevel verilog file for multi_usrp support. - The multi_usrp support can be turned on and off in usrp_multi.vh. - If it is turned off this file will generate exactly the same as usrp_std.v - (just do a diff between usrp_std.v and usrp_multi.v to see how this is done) - * fpga/toplevel/usrp_multi/usrp_multi.qpf: new - * fpga/toplevel/usrp_multi/usrp_multi.psf: new - * fpga/toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh: new - * fpga/toplevel/usrp_multi/usrp_multi.qsf: new - * fpga/toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh: new - * fpga/toplevel/usrp_multi/usrp_multi.csf: new - * fpga/toplevel/usrp_multi/.cvsignore: new - * fpga/sdr_lib/rx_buffer.v: split reset into dsp reset and reset registers - * fpga/sdr_lib/master_control_multi.v: new wrapper for master_control.v which adds multi_usrp support - * fpga/sdr_lib/phase_acc.v: set reset of FREQADDR register to 1'b0 - This way reset can be used to reset phase_acc without resetting the frequency - (this reset was not used untill now) - * fpga/sdr_lib/setting_reg_masked.v: new masked 16 bit register - -2006-05-01 Michael Dickens - - * host/lib/Makefile.am, host/lib/fusb_darwin.{h,cc}: mods for - higher speed OS/X support. - * host/lib/darwin_libusb.h, host/lib/mld_threads.h, - host/lib/circular_buffer.h, host/lib/circular_linked_list.h, - README_OSX: new files for higher speed OS/X support. - - -2006-03-29 Eric Blossom - - * fpga/Makefile.am: regenerated Makefile.extra so that make distcheck - passes. - * fpga/rbf/Makefile.am: simplified installation of FPGA rbf - files. It actually works again ;) - -2006-03-09 Eric Blossom - - * fpga/gen_makefile_extra.py, fpga/Makefile.am, - fpga/Makefile.extra: based on an idea by Martin, we now machine - generate the list of FPGA related files that should go into the - tarball distribution. After adding or removing fpga files from - CVS, you must run gen_makefile_extra.py to regenerate the Makefile - fragment. - -2006-03-09 Martin Dudok van Heel - - * firmware/src/usrp2/Makefile.am, usrp/rbf/Makefile.am: fixed - make distcheck failures. - -2006-03-06 Eric Blossom - - * host/lib/usrp_standard.cc (compute_freq_control_word_fpga): - Removed host-side truncation of frequency control word. - Tuning resolution is now approximately 0.03 Hz. - -2006-02-18 Eric Blossom - - * host/lib/usrp_prims.{h,cc}, host/lib/usrp_basic.{h,cc}, - host/lib/usrp_standard.{h,cc}: added support for specifying the - firmware and fpga files that is to be loaded. Also provided - default override via USRP_FPGA and USRP_FIRMWARE environment - variables. - -2006-02-17 Eric Blossom - - * host/lib/usrp_basic.{h,cc}, host/lib/usrp_prims.{h,cc}: added - methods to retrieve serial number from usrp motherboard. - * host/apps/burn-serial-number: burn a serial number into usrp motherboard. - * firmware/src/usrp2/eeprom_io.{h,c}: routines to read and write eeprom. - * firmware/src/usrp2/usrp_main.c (patch_usb_descriptors): read h/w - rev and serial number out of boot eeprom and patch into returned - usb descriptors. - - * host/apps/test_usrp0.cc, host/lib/usrp0.{h,cc}: removed usrp0 - host code. - * firmware/src/Makefile.am: removed all rev0 and rev1 usrp firmware. - -2006-02-09 Eric Blossom - - * fpga/toplevel/usrp_std/usrp_std.vh: refactored condition compilation. - * fpga/toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh: new - * fpga/toplevel/usrp_std/usrp_std_config_4rx_0tx.vh: new - - * firmware/include/fpga_regs_common.{h,v}, host/lib/usrp_basic.cc: - removed reference to FR_ATR_CTL. - * fpga/sdr_lib/rx_chain_hb.v: deleted. Capability was folded into rx_chain.v - -2006-02-01 Eric Blossom - - * host/lib/usrp_prims.cc (usrp_open_interface): reenabled - usb_set_configuration for WIN32 platform. Thanks Martin! - -2006-01-30 Eric Blossom - - * fpga/sdr_lib/master_control.v: modified code so that it appears - that atr_ctl is always asserted. This allows us to simplify the - daughterboard and applications code. They can control everything - via the other three ATR_* regs. - * fpga/rbf/usrp_fpga_rev2.rbf: updated with new binary. - - * host/lib/usrp_prims.cc (_usrp_load_fpga): manually reset fpga - regs by writing zero to them. - -2006-01-25 Eric Blossom - - * host/lib/usrp_standard.{h,cc}: new methods for reporting on FPGA - capabilities. - * firmware/include/fpga_regs_standard.h (FR_RB_CAPS): new reg that - describes FPGA capabilities. - -2005-12-15 Eric Blossom - - * fpga/Makefile.am: Added missing files to EXTRA_DIST. - -2005-12-08 Martin Dudok van Heel - - tagged RBF_2005_12_08 - - * fpga/rbf/usrp_fpga_rev2.rbf: updated. - * fpga/toplevel/usrp_std/usrp_std.v: fixed counter mode bug - related to half-band filter. - -2005-12-07 Eric Blossom - - Tagged all files: RBF_2005_12_07 - - * fpga/rbf/usrp_fpga_rev2.rbf: updated with new Auto T/R switching code. - -2005-12-06 Eric Blossom - - * host/swig/Makefile.am (prims.cc usrp_prims.py): added new dependencies. - * host/lib/usrp_basic.cc: disabled printing of daughterboard types. - -2005-12-05 Eric Blossom - - * firmware/include/fpga_regs_standard.h: renumbed - FR_TX_FORMAT and FR_RX_FORMAT to remove gap. - * firmware/include/fpga_regs_common.h: moved FR_ATR regs here from - fpga_regs_standard.h. - * host/lib/usrp_basic.cc: zero Auto T/R regs at init time. - -2005-12-01 Eric Blossom - - * host/swig/usrp_fpga_regs.py: define all fpga register names and - bit masks. This is effectively a python binding for the contents - of firmware/include/fpga_regs_{common,standard}.h - * host/swig/prims.i: swigged fpga_regs_{common,standard}.h - -2005-11-30 Eric Blossom - - * firmware/include/fpga_regs_standard.h: fixed typo in FR_ATR_* - series. Renumbered to start after the 16 registers reserved for - custom user definition. - * firmware/include/generate_regs.py (generate_fpga_regs): changed - generated register const width to 7 bits. - -2005-11-19 Martin Dudok van Heel - - * host/apps/Makefile.am: make make-dist work again by - added new burn-db-eeprom and removing burn-dbs-eeprom - and burn-tvrx-eeprom from noinst_PYTHON. - * fpga/Makefile.am: make make-dist work again by making - EXTRA_DIST consistant with latest cleanup of old files. - -2005-11-18 Eric Blossom - - * firmware/include/fpga_regs_standard.h: redefined auto - transmit/receive control registers. - -2005-11-17 Eric Blossom - - * host/lib/fusb_linux.cc (write): added code to minimize transmit - buffering. This allows the higher level code to control buffering - of USB transfers. - -2005-11-15 Eric Blossom - - * host/lib/usrp_basic.cc: zero the daughterboard i/o registers on open. - * fpga/rbf/usrp_fgpa_rev2.rbf: new RBF_2005_11_15 - -2005-11-15 Matt Ettus - - * fpga/sdr_lib/master_control.v, fpga/sdr_lib/io_pins.v: - Refactored resets to fix problem where starting Rx side was - killing Tx side. - -2005-11-13 Eric Blossom - - * host/lib/usrp_prims.cc (usrp_open_interface): removed call to usb_set_configuration. - -2005-11-02 Eric Blossom - - * host/lib/usrp_basic.h (class usrp_basic_tx): fixed pga_db_per_step. - -2005-10-31 Eric Blossom - - * host/lib/usrp_prims.cc (usrp_open_interface): ignore error on - usb_set_configuration. - -2005-10-28 Eric Blossom - - * fpga/rbf/Makefile.am (install-data-local): conditionally install - fpga .rbf files. If a file named DONT_INSTALL_RBF exists in the - install directory, the install will not be done. - -2005-10-24 Eric Blossom - - * host/lib/usrp_standard.{h,cc}: mods to use halfband decimator - in FPGA. - - * fpga/sdr_lib/hb/halfband_decim.v: added documentation. - -2005-10-20 Eric Blossom - - * host/lib/usrp_standard.{h,cc} (class usrp_standard_rx): support - setting and getting rx format (8-bit values, etc). - * host/lib/usrp_basic.cc (usrp_basic): disable FPGA DEBUG_EN in ctor. - * host/lib/gen_usrp_dbid.py, host/lib/usrp_prims.h: handle and - cases. - * host/apps/test_usrp_standard_rx.cc (main): added support for 8-bit samples. - - * fpga/sdr_lib/rx_buffer.v: fixed misspelled netname. - * fpga/toplevel/usrp_std/usrp_std.v: added additional ../ to includes. - * fpga/sdr_lib/master_control.v: put FR_DEBUG_EN back to single reg. - -2005-10-17 Eric Blossom - - * firmware/include/fpga_regs_standard.h: redefined RX_FORMAT register. - * firmware/include/fpga_regs_common.h: split FR_DEBUG_EN into a TX - and an RX register. - -2005-10-13 Eric Blossom - - * host/lib/usrp_standard.cc: initialize nchannels before interp/decim - rate. Fixed problem computing polling iterval. - * host/apps/test_usrp_standard_tx.cc (main): added -M megabytes option. - -2005-09-21 Eric Blossom - - * host/lib/usrp_basic.h: adc_freq() -> adc_rate(); dac_freq() -> - dac_rate(). Also added converter_rate() which is defined on both - Tx and Rx sides. - -2005-09-20 Eric Blossom - - * host/apps/burn-db-eeprom: new. Burns eeproms on all kinds of - daughterboards. - -2005-09-17 Eric Blossom - - * host/swig/prims.i: added interface for usrp_dbid_to_string. - -2005-09-09 Larry Doolittle - - * host/apps/test_usrp_standard_rx.cc: Added -M option to specify - how many megabytes to transfer. - -2005-09-06 Martin Dudok van Heel - - * host/lib/fusb_win32.cc: Solved missing samples bug in usb code. - (Which you could see by running test_counting.py example) - -2005-08-26 Eric Blossom - - * firmware/include/fpga_regs_standard.{h,v}: Added defs for new - FR_TX_FORMAT and FR_RX_FORMAT registers. - -2005-08-19 Eric Blossom - - * doc/Makefile.am: clean-local now uses $(RM) -fr - -2005-07-29 Martin Dvh , Stephane Fillod - - * host/lib/fusb_win32.{cc,h}: WTH made win32 fast usb buffer work - * host/lib/usrp_prims.cc: Get usrp basepath for firmware from - environment variable USRP_PATH. Needed for win32 binary installer - -2005-07-24 Stephane Fillod - - * config/usrp_fusb_tech.m4: select win32 fusb for Cygwin - -2005-07-19 Eric Blossom - - * host/apps/usrp_cal_dc_offset.cc: new. control system for - determining ADC DC offset correction. Works, but really ought to - be reimplemented in FPGA and run constantly. Part of the problem - is that the offset correction varies with temperature, pga gain, - and daughterboard. - - * firmware/src/common/build_eeprom.py (build_shell_script): added - sleep 1 after each command. - - * host/lib/usrp_standard.h (class usrp_standard_rx): new method: - set_ddc_phase. - - * host/lib/usrp_basic.{h,cc}, host/lib/usrp_standard.{h,cc}: added - fusb_block_size and fusb_nblocks args to constructors so that - application code can control "fast usb" buffer. - -2005-07-11 Eric Blossom - - * host/lib/gen_usrp_dbid.py: new. Generate usrp_dbid.h, - usrp_dbid.py and usrp_dbid.cc using usrp_dbid.dat as the input file. - * host/apps/burn-basic-eeprom, host/apps/burn-dbs-eeprom, - host/apps/burn-tvrx-eeprom: import usrp_dbid - -2005-07-02 Eric Blossom - - * config/gr_no_undefined.m4, config/gr_x86_64.m4: new, x86_64 support. - * config/gr_python.m4: backed out search for libpython, making - x86_64 work and breaking Cygwin/MinGW. - * configure.ac, host/lib/Makefile.am, host/swig/Makefile.am: mods - for x86_64, $(NO_UNDEFINED) - -2005-05-18 Eric Blossom - - * host/lib/usrp_standard.{h,cc}, host/lib/usrp_basic.{h,cc}: new - start and stop methods to kick off data xfer. (Useful for - minimizing latency). - * host/apps/test_usrp_standard_{tx,rx}.cc: modified to use new - start method. - -2005-05-09 Stephane Fillod - - * config/gr_sysv_shm.m4: SysV shared memory not mandatory - * config/gr_pwin32.m4, config/gr_python.m4, config/lf_cxx.m4: - fixes for Cygwin, MinGW - * usrp.inf, usrp.iss.in: new for windows installer - -2005-05-01 Stephane Fillod - - * config/usrp_fusb_tech.m4,host/lib/Makefile.am: added win32 - fusb support. - * host/lib/fusb_sysconfig_win32.cc, host/lib/fusb_win32.{h,cc}: - new files - * host/apps/test_usrp0.cc, host/apps/test_usrp_standard_rx.cc, - host/apps/test_usrp_standard_tx.cc, host/lib/fusb.h, - host/lib/fusb_linux.cc, host/lib/fusb_sysconfig_darwin.cc, - host/lib/fusb_sysconfig_generic.cc, host/lib/fusb_sysconfig_linux.cc, - host/lib/usrp0.cc, host/lib/usrp0.h, host/lib/usrp_basic.cc, - host/lib/usrp_basic.h: do not hardcode the usb driver block_size. - * host/lib/fusb_darwin.cc, host/lib/fusb_generic.cc: typo and read - endpoint fix. - -2005-03-31 Eric Blossom - - * firmware/include/usrp_spi_defs.h,firmware/include/Makefile.am: - renamed from spi_defs.h to usrp_spi_defs.h. It's now installed. - -2005-03-26 Eric Blossom - - * host/lib/fusb_linux.cc (read): fix for x86_64 compile. - -2005-03-15 Eric Blossom - - * host/lib/usrp_basic.{h,cc}: hoisted write_aux_dac and read_aux_dac - methods out of usrp_basic and into usrp_basic_rx and usrp_basic_tx. - -2005-03-11 Eric Blossom - - * host/lib/usrp_basic.{h,cc}: new methods: set_adc_offset, - set_dac_offset, set_adc_buffer_bypass. - -2005-03-03 Eric Blossom - - * host/lib/usrp_standard.cc (set_decim_rate): added warning about rates > 128. - -2005-02-22 Eric Blossom - - * firmware/src/usrp1/spi.c (read_byte_msb): rewritten to work - around SDCC 2.4.0 bug. - -2005-02-20 Eric Blossom - - * firmware/include/usrp_ids.h (USB_PID_FSF_SSRP_reserved): added - PID for SSRP. - -2005-02-18 Eric Blossom - - * host/lib/usrp_standard.cc (set_interp_rate,set_decim_rate): added range check. - * host/lib/usrp_standard.h: doc fix. - -2005-02-16 Eric Blossom - - * host/lib/usrp_dbid.cc: new ID. - * host/lib/usrp_daughterboards.h (USRP_DBID_DBS_RX): new ID. - * host/lib/usrp_basic.{h,cc}: added read_i2c and write_i2c methods. - * host/apps/burn-dbs-eeprom: init eeprom on DBS Rx daughterboard. - -2005-02-11 Eric Blossom - - * doc/Makefile.am: fixes for distcheck. - * src/host/apps/Makefile.am: add burn-basic-eeprom to tarball. - -2005-02-10 Eric Blossom - - * configure.ac, doc/Makefile.am: build html from DocBook if - they've got xmlto installed. - -2005-02-09 Eric Blossom - - * host/lib/std_paths.h.in (std_paths): new. Use prefix to locate - fpga and firmware binaries. - - * host/lib/usrp_prims.cc (compute_hash): rewritten to use embedded - md5 code instead of calling out to program. - * host/lib/md5.{h,c}: new. imported from core-utils. - -2005-02-08 Eric Blossom - - * host/apps/usrper.cc (usage): added missing parameter. - -2005-02-06 Eric Blossom - - * configure.ac: upped rev to 0.7 for release. - * host/swig/Makefile.am: backed out dependency on libpython - * host/apps/Makefile.am, host/apps/test_fusb.cc: removed test_fusb.cc - * doc/Makefile.am: new. Generate doxygen docs. - -2005-02-05 Eric Blossom - - * fpga/Makefile.am: new. distribute verilog with tarball. - * fpga/rbf/Makefile.am: new. distribute rbf's with tarball - * host/apps/test_usrp_standard_rx.cc (main): fixed calling sequence. - -2005-02-02 Eric Blossom - - * fpga/toplevel/usrp_basic/usrp_basic.v: Removed - ch?tx_freq from list of signals passed to serial_io in order to - get it to compile. - -2005-01-28 Stephane Fillod - - * src/Makefile.am: fixes for MinGW. - -2005-01-10 Eric Blossom - - * host/lib/usrp_standard.{h,cc}: changed default strategy on mux values. - - * host/lib/usrp_basic.{h,cc}: probe d'boards and initialize - fpga adc_offset and oe regs. Add methods to control all knobs. - Includes d'board i/o pins, PGA's, query daugherboard ids. - - * host/lib/usrp_prims.{h,cc},host/lib/usrp_dbid.cc: new code to - read, parse and write d'board EEPROMs. - -2005-01-08 Eric Blossom - - * firmware/include/usrp_i2c_addr.h: doc fix on d'board EEPROM contents - -2005-01-05 Eric Blossom - - * host/lib/usrp_basic.cc (set_pga): fixed incorrect upper limit. - -2005-01-04 Eric Blossom - - * host/lib/usrp_basic.{h,cc} (class usrp_basic_rx): new methods - for controlling Rx PGA. - -2004-12-20 Eric Blossom - - * firmware/src/common/build_eeprom.py: new. builds shell script - to burn low-power code into usrp motherboard EEPROM. - -2004-12-19 Eric Blossom - - * firmware/src/usrp1/{eeprom_boot.a51,eeprom_init.c}: new. Mimimum - code that will put board in low-power state at boot time. - - * firmware/src/usrp2/Makefile.am: reorg to remove duplicate code - between rev1 and rev2. - * firmware/src/usrp2/{fpga.h,fpga_load.h,fpga_rev2.c,fpga_rev2,usrp_common.h, - usrp_globals.h,usrp_rev2_regs.h}: removed. - * firmware/src/usrp2/fpga_rev1.c: new - -2004-12-08 Eric Blossom - - * host/lib/usrp_prims.{h,cc}, host/lib/usrp_basic.cc: minor tweaks for rev2 h/w. - - * firmware/src/usrp2/.cvsignore,Makefile.am,_startup.a51,blink_leds.c, - board_specific.c,check_mdelay.c,check_udelay.c,edit-gpif,fpga.h, - fpga_load.c,fpga_load.h,fpga_rev2.c,fpga_rev2.h,gpif.c,gpif.gpf,init_gpif.c, - spi.c,spi.h,usb_descriptors.a51,usrp_common.c,usrp_common.h,usrp_globals.h, - usrp_main.c,usrp_rev2_regs.h,vectors.a51: new. copied from usrp1. - Should remerge this after we're sorted out. - -2004-11-29 Berndt Josef Wulf - - * configure.ac, config/usrp_sdcc.m4: new. check for proper version - of SDCC 8051 compiler and assembler. - * config/usrp_libusb.m4: fixed check for usb.h - -2004-11-14 Eric Blossom - - * firmware/src/usrp1/usrp_rev1_regs.h (bmMISC_OUTPUTS): removed - unused define. - (bmPORT_E_OUTPUTS): made bmPE_FPGA_CLR_STATUS an output (as it - should have been all along). - -2004-10-20 Stephane Fillod - - * configure.ac, config/Makefile.am, config/gr_pwin32.m4, - host/Makefile.am, host/apps/Makefile.am, - host/apps/time_stuff.c, host/lib/Makefile.am, - host/swig/Makefile.am: detect missing functions under Win32. - - * config/mkstemp.m4, config/onceonly.m4, - host/misc/bug_work_around_8.cc, host/misc/getopt.c, - host/misc/getopt.h, host/misc/gettimeofday.c, - host/misc/Makefile.am, host/misc/mkstemp.c, - host/misc/tempname.c, host/misc/usleep.c, - host/misc/.cvsignore: new files, replacements for win32 support - - * host/lib/usrp_prims.cc: fix libusb init on systems not as - clever as Linux (no easy shared global variable, and no - auto set_configuration). - -2004-10-20 Eric Blossom - - * firmware/src/common/Makefile.am, firmware/lib/Makefile.am, - firmware/src/common/Makefile.am, firmware/src/usrp0/Makefile.am, - firmware/src/usrp1/Makefile.am: make distcheck now works! - -2004-10-20 Stephane Fillod - - * firmware/src/common/Makefile.am, - firmware/src/common/edit-gpif, firmware/src/usrp0/Makefile.am, - firmware/src/usrp1/Makefile.am, firmware/src/usrp1/edit-gpif: - allow VPATH building. - -2004-10-18 Eric Blossom - - * fpga/sdr_lib/serial_io.v: removed dac_offset stuff. - * fpga/toplevel/usrp_basic/usrp_basic.v: removed dac_offset stuff. - Conditionalized debug output. - * host/swig/util.py: fixed import - - * fpga/toplevel/usrp_basic/usrp_basic.v,fpga/sdr_lib/serial_io.v: - modified to use 0-based naming on frequencies. - - * firmware/include/generate_all.py (generate_fpga_regs): new. - Generate fpga_regs.v from fpga_regs.h - * fpga/sdr_lib/serial_io.v: now use symbolic defines for register numbers. - -2004-10-13 Eric Blossom - - * configure.ac: upped rev to 0.5cvs - -2004-10-11 Eric Blossom - - * configure.ac: bumped rev to 0.5, made release - * Makefile.am (EXTRA_DIST): added config.h.in - -2004-09-30 Eric Blossom - - * firmware/include/usrp_i2c_addr.h: renamed from i2c_addr.h. - Now installed. - - * host/lib/usrp_basic.{h,cc}: added methods for writing/reading - aux dac/adc and eeproms. - -2004-09-29 Eric Blossom - - * host/lib/usrp_prims.{h,cc} (usrp_read_aux_adc, usrp_write_aux_dac): - Redefined the interface such that aux i/o values are 12-bit. - This buys us a bit of independence from the AD9862. - -2004-09-24 Eric Blossom - - * fpga/toplevel/usrp_basic/usrp_basic.v: subtract adc offset from - buffered input values. - -2004-09-23 Eric Blossom - - * config/usrp_fusb_tech.m4, config/bnv_have_qt.m4, config/cppunit.m4, - config/gr_check_mc4020.m4, config/gr_check_usrp.m4, config/gr_doxygen.m4, - config/gr_gprof.m4, config/gr_scripting.m4, config/gr_set_md_cpu.m4, - config/pkg.m4, config/usrp_fusb_tech.m4: added additional quoting - to first arg of AC_DEFUN to silence automake warning. - -2004-08-19 Eric Blossom - - * host/lib/usrp_basic.{h,cc}, host/lib/usrp_standard.cc: make - verbose output conditional. - -2004-08-14 Matt Ettus - - Rx timing problem fixed! - - * fpga/sdr_lib/rx_buffer.v: revised to use extended RD assertion - timing. - -2004-08-14 Eric Blossom - - * firmware/src/usrp1/{edit-gpif,gpif.gpf}: copied for common and - modified. For the time being we've got a different gpif program - for the usrp0 and usrp1, though the usrp0 should get updated to - use the new organization. - * firmware/src/usrp1/{usrp_gpif.c,usrp_gpif_inline.h}: removed - links to common. Now generated in usrp1 from usrp1 specific gpif.c - -2004-08-06 Eric Blossom - - * host/lib/fusb_linux.cc (write): failure of submit_urb is now - propagated upward as an error. - -2004-08-04 Eric Blossom - - Rx counting and Rx/Tx digital loopback are now working, modulo the - problem at the beginning of the packet. The good news is that it - is completely reproducible, and there's no PLL being used in the FPGA. - - * host/lib/usrp_basic.{h,cc} (set_usb_data_rate,usb_data_rate): new methods. - * host/lib/usrp_standard.{h,cc}: polling rate is now - f(usb_data_rate). Moved fpga_mode into rx only, and changed - constructor to take optional mode. - * host/apps/test_usrp_standard_rx.cc (main): changes to match new - constructor. - * host/apps/test_usrp_standard_tx.cc (main): -c generates counting - sequence. - * fpga/toplevel/usrp_basic/usrp_basic.v: Fixed race. Changed - strobe_decim to strobe_interp in loopback setup. - * fpga/sdr_lib/tx_buffer.v: Removed unnecessary zero assignment. - -2004-07-31 Eric Blossom - - * host/apps/test_usrp_standard_tx.cc (main): added -l (loopback) option - * host/apps/test_usrp_standard_tx.cc (main): added -l (loopback) option - - * firmware/include/fpga_regs.h (FR_MODE): added new mode register. - * host/lib/usrp_basic.cc (usrp_basic): init to non-loopback mode - - * host/apps/test_usrp_standard_tx.cc (main): changed default - interp rate to 16 (=> 32MB/sec). - - * host/lib/usrp_bytesex.h (host_to_usrp_short): New. Conditional - byte swapping between host and usrp. - * host/app/test_usrp0.cc: added conditional byte swapping. - * host/app/test_usrp_standard_{rx,tx}.cc: added conditional byte swapping. - -2004-07-30 Eric Blossom - - * host/swig/Makefile.am: now installs usrp_prims.* directly in site-packages. - One could argue that this isn't particularly pretty, but it does - get it into the namespace where we want it. - -2004-07-29 Eric Blossom - - * host/apps/test_usrp0.cc (main): added code to set tx frequency. - -2004-07-12 Eric Blossom - - * configure.ac: upped rev to 0.4cvs - -2004-07-11 Eric Blossom - - * host/lib/usrp_basic.cc: invert TX_SYNC - - * host/lib/usrp_basic.{h,cc},usrp_standard.cc: now temporarily - disable tx and rx paths when changing interpolation or decimation - rate. Didn't fix the problem, but shouldn't hurt either. - -2004-07-07 Eric Blossom - - * firmware/src/common/_startup.a51 (__sdcc_external_startup): - Rewritten to avoid fragile kludge. Now requires that all firmware - be compiled with --no-xinit-opt. - - * firmware/src/usrp{0,1}/Makefile.am: pass in linker option to - place usb descriptors at 0xE000 absolute. This works around the - fact that the assembler and linker don't really implement the - .even directive. - * firmware/src/usrp{0,1}/usb_descriptors.a51: now place - descriptors in USBDESCSEG, which we force to 0xE000. - - * firmware/src/usrp1/board_specific.c (power_down_9862s): - Power down the 9862's when the firmware is loaded to keep from - burning up the board. Note to Analog Devices: put a power pad - on these or some other way to get the heat out of them. - - * host/lib/usrp_prims.cc (_usrp_load_fpga): Since loading the FPGA - wiggles the shared reset line with the 9862s, we now once again - power down the 9862's. - -2004-07-06 Eric Blossom - - * firmware/src/common/_startup.a51 (__sdcc_external_startup): - picked up bug fixes from 2.4.0 release, and added a fragile kludge - that ensures that our variables are all initialized properly. - - * firmware/src/usrp0/usrp_main.c, firmware/src/usrp1/usrp_main.c, - firmware/src/common/usb_common.c: removed deprecated use of - pragma NOIV. - -2004-07-05 Eric Blossom - - * host/lib/fusb_linux.cc (alloc_urb): removed - USBDEVFS_URB_QUEUE_BULK flag. - -2004-07-02 Eric Blossom - - * host/lib/usrp_basic.h: added adc_freq and dac_freq - to disambiguate the interpretation of interpolation and decimation - ratios. - -2004-07-01 Eric Blossom - - * host/swig/prims.i: renamed from usrp_prims.i Module is now - installed as usrp.prims - * host/lib/usrp_basic.cc (usrp_basic_tx, usrp_basic_rx): power - down 9862 tx or rx path in destructor. - * host/lib/usrp_standard.cc: now control coarse and fine - modulators transparently, based on user provided center freq. - * fpga/sdr_lib/gen_cordic_consts.py: new. generate magic constants for cordic. - * fpga/sdr_lib/cordic.v: `define constants. integer c00 = - wasn't being synthesized correctly by Quartus II 4.0 - -2004-05-28 Eric Blossom - - * host/lib/usrp_standard.{h,cc}: Now uses 4x interpolator and - 9862 cordic. Tx path looks great up to +/- 44 MHz! - This code still twiddles the coarse modulator manually. - -2004-05-27 Eric Blossom - - * Tagged everything with BEFORE_CLOCK_REVAMP_2004_05_27. - We're about to rework the boards, host code and the verilog to - directly feed the 64 MHz oscillator to the 9862's and the FPGA. - With any luck, life will drastically improve... - - -2004-05-25 Eric Blossom - - * host/lib/usrp_standard.{h,cc} (class usrp_standard_tx_use_nco): - new. Class that utilizes the AD9862's built-in NCO for up conversion. - There's still something slightly flaky going on. - - * host/lib/usrp_basic.cc: initialize 9862 Tx FTW - -2004-05-21 Eric Blossom - - * firmware/src/usrp1/usrp_main.c (main): work around compiler - data initialization bug. - - * firmware/src/usrp1/fpga_rev1.{h,c}: added support for {TX,RX}_RESET - -2004-05-10 Eric Blossom - - * host/lib/usrp_basic.cc (~usrp_basic_rx): turn off rx_enable. - - * firmware/src/usrp1/usrp_main.c: removed unneeded global - g_fpga_reset. - -2004-05-08 Eric Blossom - - * firmware/src/usrp1/usrp_main.c (main): enabled GSTATE output. - -2004-05-07 Eric Blossom - - * host/lib/usrp_standard.cc (make): changed constructors and make - to pass the interp/decim rate. This ensures that the rate is set - to something the user wants when the rx and tx paths are first - enabled. - - * host/lib/usrp_basic.cc (initialize): enabled xrun status polling. - (set_fpga_rx_sample_rate_divisor,set_fpga_rx_sample_rate_divisor): - set FPGA register to N-1. - - * host/lib/usrp_standard.cc (set_interp_rate, set_decim_rate): now - set FPGA register to N-1. - -2004-04-18 Eric Blossom - - * firmware/src/usrp1/spi.c (spi_read, spi_write): removed extra - clocks. FPGA is now doing the right thing. - - * host/lib/ad9862.h: new. register defs for AD962 codec. - - * firmware/src/usrp1/spi.c (spi_write,spi_read): clock once w/o - enables for the FPGA's benefit. We're also clocking one extra - cycle at the end with enables again for the FPGA. I think we - should remove the extra clocking at the end. - -2004-04-17 Eric Blossom - - * host/lib/usrp_prims.{h,cc} (usrp_read_aux_adc,usrp_write_aux_dac): new. - * host/lib/usrp_prims.{h,cc} (usrp_eeprom_write,usrp_eeprom_read): new. - -2004-04-16 Eric Blossom - - * firmware/include/i2c_addr.h: new. I2C addresses. - -2004-04-12 Eric Blossom - - * host/apps/test_usrp0.cc: renamed from test_usrp.cc - * firmware/include/fpga_regs.h: corrected to match latest control_bus.v - -2004-04-11 Eric Blossom - - * host/lib/usrp0.{h,cc}: new. copies of original usrp.{h,cc} - * host/lib/usrp_basic.{h,cc}: new. reflect rev1 hardware. - -2004-04-10 Eric Blossom - - * host/swig/usrp_prims.i: new. SWIG'd usrp_prims. - * host/lib/usrp_prims.cc: added usrp_rescan; dispatch on hardware revision - when appropriate; added usrp_read_fpga_reg - * firmware/src/usrp1/fpga_rev1.h: added declarations - * firmware/src/usrp1/fpga_rev.c: added implementations for - fpga_write_reg, fpga_set_reset, fpga_set_tx_enable, fpga_set_rx_enable. - * firmware/include/fpga_regs0.h: renamed prev fpga_regs.h to fpga_regs0.h - * firmware/include/fpga_regs.h: new for usrp rev1. Needs checking - against verilog. - - -2004-03-01 Eric Blossom - - * host/lib/rate_to_regval.h: new. mapping table. - * host/lib/usrp.cc (map_rate_to_regval): now support all 97 legal - values. - -2004-01-11 Eric Blossom - - * configure.ac: configure fast usb technique as f(os) - * config/usrp_fusb_tech.m4: new autoconf macro - * host/lib/fusb.{h,cc}: refactored in to abstract class - * host/lib/fusb_{darwin,generic,linux}.{h,cc}: new concrete classes - * host/lib/fusb_sysconfig_{darwin,generic,linux}.cc: new - - * config/usrp_libusb.m4: new. check for libusb. - * configure.ac: check for libusb - - * firmware/src/Makefile.am: fixed dependencies - * firmware/src/fpga.{h,c}, firmware/src/usrp_main.c: cleanup to - make board with no FPGA usable again. - * firmware/include/usrp_config.h: doc fix. - -2003-12-30 Eric Blossom - - * host/lib/fusb.cc (alloc_urb): fixes for linux 2.5/2.6 - -2003-12-12 Eric Blossom - - * firmware/lib/i2c.c (i2c_read): worked around sdcc compiler bug. - -2003-12-07 Eric Blossom - - * configure.ac: autoconfiscated the firmware directory. It now - builds from the top along with the host code. - - * I've touched just about every file in the tree, both - firmware and host side. The combo is now working well. It is - capable of half duplex reading or writing at 31.25 MB/sec and - (pseudo) full duplex reading and writing at 15.625 MS/sec in each - direction. - - In addition, the receive side is decoupled from the transmit side - so that separate processes can open each side. - - -2003-11-27 Eric Blossom - - * firmware/src/fpga.c (clock_out_config_byte): assembly speedup - for loading fpga. - - basic support for interrupts is now working. - - * firmware/lib/{isr.c,timer.c}: new - * firmware/include/{isr.h,timer.h}: new - * firmware/src/command_loop.c (isr_tick): blink led - -2003-11-21 Eric Blossom - - * firmware/src/edit-gpif (edit_gpif): now leave xdata alone - * firmware/src/init_gpif.c: added xdata storage qualifer - * firmware/Makefile: added linker opts to get xdata located properly - - Rearranged the firmware directory. - firmware/basic_fw/include --> firmware/include - firmware/basic_fw/src --> firmware/src - All older firmware stuff was removed - -2003-11-15 Eric Blossom - - * host/lib/fusb.cc (fusb_devhandle, _cancel_pending_rqsts): now - use reverse_iterator to cancel pending requests from the back to - the front. This removes the mystery of more than one cancelled - urb having a non-zero transfer count. - - * host/lib/test_fusb.cc (test_output): fixed defective test case - that was having me think the tx code wasn't working. - -2003-11-13 Eric Blossom - - * host/lib/fusb.{h,cc}: work in progress on the Rx path. - -2003-11-11 Eric Blossom - - * host/lib/fusb.{h,cc}: halved net Tx memory requirement by using - a single user mode buffer. - -2003-11-10 Eric Blossom - - System is now sustaining 31MB/sec on the TX path, no underruns ;-) - - * firmware/basic_fw/src/edit-gpif: now machine generate inline - definitions for setup_flowstate_common, setup_flowstate_read and - setup_flowstate_write. - - * firmware/basic_fw/src/usrp_common.c: clear_usrp_error now clears - over and underrun flags from status word. - * firmware/basic_fw/src/usrp_comands.c: added bit defs for overrun - and underrun status indicators. - * firmware/basic_fw/src/command_loop.c (poll_gpif): now checks for - over and underruns and clears fpga status. - - * firmware/basic_fw/include/usrp_regs.h (bmFCB_CLR_STATUS): moved - FPGA clear_status line to the previous location of SDO. This - means that firmware from here out will only work with the latest - FPGA bitstreams that have this pin configurd as an input. - - * host/lib/fusb.{h,cc}: fast streaming usb library built on top of libusb. - This version uses linux specific magic. - - * host/lib/test_fusb.cc: test and benchmarking code for fusb. - -2003-11-08 Eric Blossom - - * firmware/basic_fw/src/gpif.gpf: moved BOGUS ctl line to CTL5. - Added clear_status as CTL3. - * firmware/basic_fw/src/usrp_common.c (init_usrp): removed - obsolete ENABLE_FIFO ifdef. Disabled RX pump priming. - * firmware/basic_fw/src/command_loop.c (main): enable both RX and TX. - -2003-10-22 Eric Blossom - - * host/lib/Usrp.{h,cc}: added accessors for get_rx_freq, get_tx_freq - -2003-10-17 Eric Blossom - - * host/usrper/test_input.cc (main): new program to exercise USRP - input path. - - * host/lib/Usrp.{h,cc} (read): changed return value from bool to int - -2003-09-30 Eric Blossom - - * host/lib/Usrp.{h,cc}: handle new format interp and decim regs. - * firmware/basic_fw/src/command_loop.c (g_enable_read): disabled - read for the time being. - -2003-09-17 Eric Blossom - - * host/lib/Usrp.cc (find_file): changed load path for firmware and - fpga bits to to /usr/local/share/usrp. - (Usrp): now set gstate, sleep, fpga_reset and tx_enable per Matt's - script. - -2003-09-16 Eric Blossom - - * AUTHORS, NEWS, README: new & empty - * bootstrap, configure.ac, Makefile.am: new for autoconfiscation - * host/Makefile.am, host/lib/Makefile.am, host/usrper/Makefile.am: new - * host/lib/{Makefile.am,Usrp.{h,cc}}: new class to interface to USRP. - * host/usrper/usrper2.cc: new code to exercise Usrp.{h,cc} - - * host/usrper/usrper.cc: removed uneeded includes - -2003-09-04 Eric Blossom - - * firmware/basic_fw/src/usrp_commands.h, - firmware/basic_fw/src/command_loop.c (do_set_sleep_bits), - host/usrper/usrper.cc (usrp_set_sleep_bits): added command to slam - the A/D and D/A sleep control lines. - - -2003-08-30 Eric Blossom - - * firmware/basic_fw/src/usrp_commands.h: removed obsolete - foo_CLR_bar commands. Added UCMD_SET_GSTATE_OUTPUT_ENABLE to - enable the output of the GPIF state on the low 3 bits of Port E. - - * host/usrper/usrper.cc (usrper_load_firmware): now implements - "load_firmware" command. - -2003-08-17 Eric Blossom - - * host/usrper/usrper.cc (usrper_load_fpga), - firmware/basic_fw/src/fpga.c: changed load_fpga to expect a byte - count, not a bit count in the xfer packet. - - * firmware/basic_fw/src/fpga.c (do_fpga_config_start): cleanup, - add appropriate delay. - - * firmware/basic_fw/src/usrp_common.c (udelay1, udelay): new delay functions - -2003-07-30 Eric Blossom - - * firmware/basic_fw/include/fx2regs.h: changed sfr and sbit syntax - to match what SDCC expects. Now the SFR's are really allocated - where they are supposed to be ;-) - -# -# Copyright 2003,2004,2005 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. -# diff --git a/usrp/Makefile.am b/usrp/Makefile.am index 697dfc62..c3e529da 100644 --- a/usrp/Makefile.am +++ b/usrp/Makefile.am @@ -19,8 +19,13 @@ # Boston, MA 02110-1301, USA. # -EXTRA_DIST = usrp.pc.in usrp.iss.in usrp.inf +EXTRA_DIST = \ + usrp.pc.in \ + usrp.iss.in \ + usrp.inf + SUBDIRS = host firmware fpga doc pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = usrp.pc +pkgconfig_DATA = \ + usrp.pc diff --git a/usrp/Makefile.in b/usrp/Makefile.in index 5dac8717..04886ba8 100644 --- a/usrp/Makefile.in +++ b/usrp/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -35,15 +35,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,27 +56,37 @@ host_triplet = @host@ target_triplet = @target@ subdir = usrp DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/usrp.iss.in $(srcdir)/usrp.pc.in AUTHORS ChangeLog + $(srcdir)/usrp.iss.in $(srcdir)/usrp.pc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -89,15 +95,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -114,10 +140,11 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -127,6 +154,8 @@ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfigdir)" pkgconfigDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -134,10 +163,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -145,9 +173,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -155,6 +190,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -167,73 +204,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -243,49 +273,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -293,15 +363,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -311,16 +524,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -329,16 +560,45 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -EXTRA_DIST = usrp.pc.in usrp.iss.in usrp.inf +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +EXTRA_DIST = \ + usrp.pc.in \ + usrp.iss.in \ + usrp.inf + SUBDIRS = host firmware fpga doc pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = usrp.pc +pkgconfig_DATA = \ + usrp.pc + all: all-recursive .SUFFIXES: @@ -346,8 +606,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -381,13 +641,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)" + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -434,8 +690,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -479,8 +734,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -505,8 +760,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -516,13 +771,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -536,22 +790,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -565,7 +818,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -573,6 +826,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -583,7 +838,7 @@ all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -615,8 +870,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -630,12 +884,20 @@ info-am: install-data-am: install-pkgconfigDATA +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -654,22 +916,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am uninstall-pkgconfigDATA +uninstall-am: uninstall-pkgconfigDATA -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-pkgconfigDATA \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/usrp/doc/Doxyfile.in b/usrp/doc/Doxyfile.in index c8a114fd..5043b147 100644 --- a/usrp/doc/Doxyfile.in +++ b/usrp/doc/Doxyfile.in @@ -586,7 +586,7 @@ IGNORE_PREFIX = # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. -GENERATE_HTML = YES +GENERATE_HTML = @enable_html_docs@ # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be @@ -698,7 +698,7 @@ TREEVIEW_WIDTH = 250 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. -GENERATE_LATEX = NO +GENERATE_LATEX = @enable_latex_docs@ # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be @@ -845,7 +845,7 @@ MAN_LINKS = NO # generate an XML file that captures the structure of # the code including all documentation. -GENERATE_XML = YES +GENERATE_XML = @enable_xml_docs@ # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be diff --git a/usrp/doc/Makefile.am b/usrp/doc/Makefile.am index b5784e01..1c01e43f 100644 --- a/usrp/doc/Makefile.am +++ b/usrp/doc/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2005 Free Software Foundation, Inc. +# Copyright 2001,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -25,7 +25,7 @@ include $(top_srcdir)/Makefile.common SUBDIRS = other man3dir = $(mandir)/man3 -docdir = $(prefix)/share/doc/@PACKAGE@-@VERSION@ +usrp_docdir = $(prefix)/share/doc/usrp-@VERSION@ EXTRA_DIST = \ Doxyfile.in \ @@ -44,9 +44,11 @@ DOCBOOK_HTML_FILES= all-local: dox endif +dist_usrp_doc_DATA = $(top_srcdir)/usrp/README + dox: html/index.html html/index.html: - mkdir -p html + $(MKDIR_P) html @DOXYGEN@ docbook-html: usrp_guide.html @@ -55,25 +57,15 @@ usrp_guide.html: usrp_guide.xml xmlto html-nochunks $(top_srcdir)/usrp/doc/usrp_guide.xml install-data-local: - $(mkinstalldirs) $(DESTDIR)$(docdir) - @for i in $(top_srcdir)/usrp/README $(top_srcdir)/usrp/ChangeLog; do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir); \ - done - - mkdir -p $(DESTDIR)$(docdir)/html + $(MKDIR_P) $(DESTDIR)$(usrp_docdir)/html @for i in $(DOCBOOK_HTML_FILES); do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html; \ + echo "$(INSTALL_DATA) $$i $(DESTDIR)$(usrp_docdir)/html"; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(usrp_docdir)/html; \ done - cp -r html $(DESTDIR)$(docdir) + cp -r html $(DESTDIR)$(usrp_docdir) uninstall-local: - @for i in README ChangeLog; do \ - echo "$(RM) $(DESTDIR)$(docdir)/$$i;"; \ - $(RM) $(DESTDIR)$(docdir)/$$i; \ - done - $(RM) -fr $(DESTDIR)$(docdir)/html + $(RM) -fr $(DESTDIR)$(usrp_docdir)/html clean-local: $(RM) -fr latex html man xml $(DOCBOOK_HTML_FILES) diff --git a/usrp/doc/Makefile.in b/usrp/doc/Makefile.in index 7974ec80..5922ee12 100644 --- a/usrp/doc/Makefile.in +++ b/usrp/doc/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2005 Free Software Foundation, Inc. +# Copyright 2001,2005,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,12 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -79,29 +76,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +DIST_COMMON = $(dist_usrp_doc_DATA) $(srcdir)/Doxyfile.in \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = usrp/doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +118,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -135,10 +163,22 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(usrp_docdir)" +dist_usrp_docDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_usrp_doc_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -146,10 +186,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -157,9 +196,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -167,6 +213,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -179,73 +227,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -255,49 +296,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -305,15 +386,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ -docdir = $(prefix)/share/doc/@PACKAGE@-@VERSION@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -323,16 +547,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -341,65 +583,135 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT SUBDIRS = other man3dir = $(mandir)/man3 +usrp_docdir = $(prefix)/share/doc/usrp-@VERSION@ EXTRA_DIST = \ Doxyfile.in \ ddc.eps \ @@ -411,6 +723,7 @@ EXTRA_DIST = \ @HAS_XMLTO_FALSE@DOCBOOK_HTML_FILES = @HAS_XMLTO_TRUE@DOCBOOK_HTML_FILES = usrp_guide.html +dist_usrp_doc_DATA = $(top_srcdir)/usrp/README all: all-recursive .SUFFIXES: @@ -418,8 +731,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -451,10 +764,23 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs +install-dist_usrp_docDATA: $(dist_usrp_doc_DATA) + @$(NORMAL_INSTALL) + test -z "$(usrp_docdir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_docdir)" + @list='$(dist_usrp_doc_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_usrp_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(usrp_docdir)/$$f'"; \ + $(dist_usrp_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(usrp_docdir)/$$f"; \ + done -distclean-libtool: - -rm -f libtool -uninstall-info-am: +uninstall-dist_usrp_docDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_usrp_doc_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(usrp_docdir)/$$f'"; \ + rm -f "$(DESTDIR)$(usrp_docdir)/$$f"; \ + done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -487,8 +813,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -532,8 +857,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -558,8 +883,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -569,13 +894,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -589,23 +913,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -619,7 +941,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -627,15 +949,23 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-recursive -all-am: Makefile all-local +all-am: Makefile $(DATA) all-local installdirs: installdirs-recursive installdirs-am: + for dir in "$(DESTDIR)$(usrp_docdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive @@ -651,6 +981,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -666,8 +997,7 @@ clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -679,14 +1009,22 @@ info: info-recursive info-am: -install-data-am: install-data-local +install-data-am: install-data-local install-dist_usrp_docDATA + +install-dvi: install-dvi-recursive install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -705,30 +1043,43 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am uninstall-local - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local check \ - check-am clean clean-generic clean-libtool clean-local \ - clean-recursive ctags ctags-recursive distclean \ - distclean-generic distclean-libtool distclean-recursive \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am \ - install-data-local install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am uninstall-local - +uninstall-am: uninstall-dist_usrp_docDATA uninstall-local + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist-hook \ + distclean distclean-generic distclean-libtool distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-data-local \ + install-dist_usrp_docDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-dist_usrp_docDATA uninstall-local + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; @HAS_XMLTO_TRUE@all-local: dox docbook-html @HAS_XMLTO_FALSE@all-local: dox dox: html/index.html html/index.html: - mkdir -p html + $(MKDIR_P) html @DOXYGEN@ docbook-html: usrp_guide.html @@ -737,25 +1088,15 @@ usrp_guide.html: usrp_guide.xml xmlto html-nochunks $(top_srcdir)/usrp/doc/usrp_guide.xml install-data-local: - $(mkinstalldirs) $(DESTDIR)$(docdir) - @for i in $(top_srcdir)/usrp/README $(top_srcdir)/usrp/ChangeLog; do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir); \ - done - - mkdir -p $(DESTDIR)$(docdir)/html + $(MKDIR_P) $(DESTDIR)$(usrp_docdir)/html @for i in $(DOCBOOK_HTML_FILES); do \ - echo "$(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html"; \ - $(INSTALL_DATA) $$i $(DESTDIR)$(docdir)/html; \ + echo "$(INSTALL_DATA) $$i $(DESTDIR)$(usrp_docdir)/html"; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(usrp_docdir)/html; \ done - cp -r html $(DESTDIR)$(docdir) + cp -r html $(DESTDIR)$(usrp_docdir) uninstall-local: - @for i in README ChangeLog; do \ - echo "$(RM) $(DESTDIR)$(docdir)/$$i;"; \ - $(RM) $(DESTDIR)$(docdir)/$$i; \ - done - $(RM) -fr $(DESTDIR)$(docdir)/html + $(RM) -fr $(DESTDIR)$(usrp_docdir)/html clean-local: $(RM) -fr latex html man xml $(DOCBOOK_HTML_FILES) diff --git a/usrp/doc/other/Makefile.in b/usrp/doc/other/Makefile.in index 0988dfde..d9d4ff98 100644 --- a/usrp/doc/other/Makefile.in +++ b/usrp/doc/other/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -56,15 +56,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -83,25 +79,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.common subdir = usrp/doc/other ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +116,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -137,10 +163,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -148,9 +173,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -158,6 +190,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -170,73 +204,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -246,49 +273,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -296,15 +363,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -314,16 +524,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -332,63 +560,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = \ mainpage.dox @@ -399,8 +696,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -430,10 +727,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -442,23 +735,21 @@ CTAGS: distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -469,6 +760,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile @@ -488,6 +782,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -503,7 +798,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -517,12 +812,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -541,18 +844,32 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am +.MAKE: install-am install-strip +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/firmware/Makefile.in b/usrp/firmware/Makefile.in index c51d9d1c..3d4b459e 100644 --- a/usrp/firmware/Makefile.in +++ b/usrp/firmware/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = usrp/firmware DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,12 +549,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = include lib src all: all-recursive @@ -332,8 +586,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -364,10 +618,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -399,8 +649,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -444,8 +693,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -470,8 +719,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -481,13 +730,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -501,22 +749,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -530,7 +777,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -538,6 +785,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -577,8 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -592,12 +840,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -616,22 +872,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/usrp/firmware/include/Makefile.am b/usrp/firmware/include/Makefile.am index 30fa4831..97ca60bf 100644 --- a/usrp/firmware/include/Makefile.am +++ b/usrp/firmware/include/Makefile.am @@ -21,14 +21,14 @@ include_HEADERS = \ usrp_i2c_addr.h \ - usrp_spi_defs.h + usrp_spi_defs.h \ + fpga_regs_common.h \ + fpga_regs_standard.h noinst_HEADERS = \ delay.h \ - fpga_regs_common.h \ fpga_regs_common.v \ - fpga_regs_standard.h \ fpga_regs_standard.v \ fpga_regs0.h \ fx2regs.h \ @@ -53,7 +53,7 @@ EXTRA_DIST = \ $(CODE_GENERATOR) fpga_regs_common.v: fpga_regs_common.h generate_regs.py - PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py fpga_regs_common.h $@ + PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py $(srcdir)/fpga_regs_common.h $@ fpga_regs_standard.v: fpga_regs_standard.h generate_regs.py - PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py fpga_regs_standard.h $@ + PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py $(srcdir)/fpga_regs_standard.h $@ diff --git a/usrp/firmware/include/Makefile.in b/usrp/firmware/include/Makefile.in index 00cd59e9..766ba6a8 100644 --- a/usrp/firmware/include/Makefile.in +++ b/usrp/firmware/include/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -35,15 +35,11 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -62,25 +58,35 @@ subdir = usrp/firmware/include DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -89,15 +95,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -127,10 +153,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -138,9 +163,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -148,6 +180,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -160,73 +194,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -236,49 +263,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -286,15 +353,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -304,16 +514,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -322,21 +550,44 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ include_HEADERS = \ usrp_i2c_addr.h \ - usrp_spi_defs.h + usrp_spi_defs.h \ + fpga_regs_common.h \ + fpga_regs_standard.h noinst_HEADERS = \ delay.h \ - fpga_regs_common.h \ fpga_regs_common.v \ - fpga_regs_standard.h \ fpga_regs_standard.v \ fpga_regs0.h \ fx2regs.h \ @@ -366,8 +617,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -397,13 +648,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -424,8 +671,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -437,8 +684,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -448,13 +695,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -468,22 +714,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -499,7 +744,7 @@ check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -531,8 +776,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am @@ -546,12 +790,20 @@ info-am: install-data-am: install-includeHEADERS +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -570,26 +822,29 @@ ps: ps-am ps-am: -uninstall-am: uninstall-includeHEADERS uninstall-info-am +uninstall-am: uninstall-includeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS \ - uninstall-info-am + ps ps-am tags uninstall uninstall-am uninstall-includeHEADERS fpga_regs_common.v: fpga_regs_common.h generate_regs.py - PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py fpga_regs_common.h $@ + PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py $(srcdir)/fpga_regs_common.h $@ fpga_regs_standard.v: fpga_regs_standard.h generate_regs.py - PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py fpga_regs_standard.h $@ + PYTHONPATH=$(top_srcdir)/usrp/firmware/include $(PYTHON) $(srcdir)/generate_regs.py $(srcdir)/fpga_regs_standard.h $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/firmware/include/fpga_regs_common.h b/usrp/firmware/include/fpga_regs_common.h index 8b91aa86..b4a496af 100644 --- a/usrp/firmware/include/fpga_regs_common.h +++ b/usrp/firmware/include/fpga_regs_common.h @@ -32,8 +32,7 @@ #define FR_TX_SAMPLE_RATE_DIV 0 #define FR_RX_SAMPLE_RATE_DIV 1 -// 2 is available. -// 3 is available. +// 2 and 3 are defined in the ATR section #define FR_MASTER_CTRL 4 // master enable and reset controls # define bmFR_MC_ENABLE_TX (1 << 0) @@ -144,4 +143,8 @@ #define FR_ATR_TXVAL_3 30 #define FR_ATR_RXVAL_3 31 +// Clock ticks to delay rising and falling edge of T/R signal +#define FR_ATR_TX_DELAY 2 +#define FR_ATR_RX_DELAY 3 + #endif /* INCLUDED_FPGA_REGS_COMMON_H */ diff --git a/usrp/firmware/include/fpga_regs_common.v b/usrp/firmware/include/fpga_regs_common.v index ee87ac02..8035d856 100644 --- a/usrp/firmware/include/fpga_regs_common.v +++ b/usrp/firmware/include/fpga_regs_common.v @@ -1,5 +1,5 @@ // -// This file is machine generated from fpga_regs_common.h +// This file is machine generated from ./fpga_regs_common.h // Do not edit by hand; your edits will be overwritten. // @@ -13,8 +13,7 @@ `define FR_TX_SAMPLE_RATE_DIV 7'd0 `define FR_RX_SAMPLE_RATE_DIV 7'd1 -// 2 is available. -// 3 is available. +// 2 and 3 are defined in the ATR section `define FR_MASTER_CTRL 7'd4 // master enable and reset controls @@ -112,3 +111,7 @@ `define FR_ATR_TXVAL_3 7'd30 `define FR_ATR_RXVAL_3 7'd31 +// Clock ticks to delay rising and falling edge of T/R signal +`define FR_ATR_TX_DELAY 7'd2 +`define FR_ATR_RX_DELAY 7'd3 + diff --git a/usrp/firmware/include/fpga_regs_standard.h b/usrp/firmware/include/fpga_regs_standard.h index bfd1cb30..7485e2ba 100644 --- a/usrp/firmware/include/fpga_regs_standard.h +++ b/usrp/firmware/include/fpga_regs_standard.h @@ -185,7 +185,7 @@ // FIXME register numbers 50 to 63 are available // ------------------------------------------------------------------------ -// Registers 64 to 79 are reserved for user custom FPGA builds. +// Registers 64 to 95 are reserved for user custom FPGA builds. // The standard USRP software will not touch these. #define FR_USER_0 64 @@ -204,6 +204,22 @@ #define FR_USER_13 77 #define FR_USER_14 78 #define FR_USER_15 79 +#define FR_USER_16 80 +#define FR_USER_17 81 +#define FR_USER_18 82 +#define FR_USER_19 83 +#define FR_USER_20 84 +#define FR_USER_21 85 +#define FR_USER_22 86 +#define FR_USER_23 87 +#define FR_USER_24 88 +#define FR_USER_25 89 +#define FR_USER_26 90 +#define FR_USER_27 91 +#define FR_USER_28 92 +#define FR_USER_29 93 +#define FR_USER_30 94 +#define FR_USER_31 95 //Registers needed for multi usrp master/slave configuration // diff --git a/usrp/firmware/include/fpga_regs_standard.v b/usrp/firmware/include/fpga_regs_standard.v index cc67be21..d09aa611 100644 --- a/usrp/firmware/include/fpga_regs_standard.v +++ b/usrp/firmware/include/fpga_regs_standard.v @@ -1,5 +1,5 @@ // -// This file is machine generated from fpga_regs_standard.h +// This file is machine generated from ./fpga_regs_standard.h // Do not edit by hand; your edits will be overwritten. // @@ -157,7 +157,7 @@ // FIXME register numbers 50 to 63 are available // ------------------------------------------------------------------------ -// Registers 64 to 79 are reserved for user custom FPGA builds. +// Registers 64 to 95 are reserved for user custom FPGA builds. // The standard USRP software will not touch these. `define FR_USER_0 7'd64 @@ -176,6 +176,22 @@ `define FR_USER_13 7'd77 `define FR_USER_14 7'd78 `define FR_USER_15 7'd79 +`define FR_USER_16 7'd80 +`define FR_USER_17 7'd81 +`define FR_USER_18 7'd82 +`define FR_USER_19 7'd83 +`define FR_USER_20 7'd84 +`define FR_USER_21 7'd85 +`define FR_USER_22 7'd86 +`define FR_USER_23 7'd87 +`define FR_USER_24 7'd88 +`define FR_USER_25 7'd89 +`define FR_USER_26 7'd90 +`define FR_USER_27 7'd91 +`define FR_USER_28 7'd92 +`define FR_USER_29 7'd93 +`define FR_USER_30 7'd94 +`define FR_USER_31 7'd95 //Registers needed for multi usrp master/slave configuration // diff --git a/usrp/firmware/include/fx2regs.h b/usrp/firmware/include/fx2regs.h index c4892712..fae7bdf3 100644 --- a/usrp/firmware/include/fx2regs.h +++ b/usrp/firmware/include/fx2regs.h @@ -26,8 +26,8 @@ // Contents: EZ-USB FX2 register declarations and bit mask definitions. // // $Archive: /USB/Target/Inc/fx2regs.h $ -// $Date: 2007-07-26 14:08:09 -0700 (Thu, 26 Jul 2007) $ -// $Revision: 6077 $ +// $Date: 2007-07-20 20:44:38 -0700 (Fri, 20 Jul 2007) $ +// $Revision: 6044 $ // // // Copyright (c) 2000 Cypress Semiconductor, All rights reserved diff --git a/usrp/firmware/include/isr.h b/usrp/firmware/include/isr.h index 892edcdf..85653289 100644 --- a/usrp/firmware/include/isr.h +++ b/usrp/firmware/include/isr.h @@ -106,20 +106,20 @@ * FIFO/GPIF Auto Vector numbers */ -#define FGV_EP2PF 0x80 -#define FGV_EP4PF 0x84 -#define FGV_EP6PF 0x88 -#define FGV_EP8PF 0x8c -#define FGV_EP2EF 0x90 -#define FGV_EP4EF 0x94 -#define FGV_EP6EF 0x98 -#define FGV_EP8EF 0x9c -#define FGV_EP2FF 0xa0 -#define FGV_EP4FF 0xa4 -#define FGV_EP6FF 0xa8 -#define FGV_EP8FF 0xac -#define FGV_GPIFDONE 0xb0 -#define FGV_GPIFWF 0xb4 +#define FGV_EP2PF 0x00 +#define FGV_EP4PF 0x04 +#define FGV_EP6PF 0x08 +#define FGV_EP8PF 0x0c +#define FGV_EP2EF 0x10 +#define FGV_EP4EF 0x14 +#define FGV_EP6EF 0x18 +#define FGV_EP8EF 0x1c +#define FGV_EP2FF 0x20 +#define FGV_EP4FF 0x24 +#define FGV_EP6FF 0x28 +#define FGV_EP8FF 0x2c +#define FGV_GPIFDONE 0x30 +#define FGV_GPIFWF 0x34 #define FGV_MIN FGV_EP2PF #define FGV_MAX FGV_GPIFWF diff --git a/usrp/firmware/include/usrp_ids.h b/usrp/firmware/include/usrp_ids.h index c5cb2949..4f9ac4f9 100644 --- a/usrp/firmware/include/usrp_ids.h +++ b/usrp/firmware/include/usrp_ids.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003 Free Software Foundation, Inc. + * Copyright 2003,2006,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -42,6 +42,18 @@ #define USB_PID_FSF_SSRP_reserved 0x0005 // Simple Software Radio Peripheral #define USB_PID_FSF_HPSDR 0x0006 // High Performance Software Defined Radio (Internal Boot) #define USB_PID_FSF_HPSDR_HA 0x0007 // High Performance Software Defined Radio (Host Assisted Boot) +#define USB_PID_FSF_QS1R 0x0008 // QS1R HF receiver +#define USB_PID_FSF_EZDOP 0x0009 // ezdop +#define USB_PID_FSF_BDALE_0 0x000a // Bdale Garbee +#define USB_PID_FSF_BDALE_1 0x000b // Bdale Garbee +#define USB_PID_FSF_BDALE_2 0x000c // Bdale Garbee +#define USB_PID_FSF_BDALE_3 0x000d // Bdale Garbee +#define USB_PID_FSF_BDALE_4 0x000e // Bdale Garbee +#define USB_PID_FSF_BDALE_5 0x000f // Bdale Garbee +#define USB_PID_FSF_BDALE_6 0x0010 // Bdale Garbee +#define USB_PID_FSF_BDALE_7 0x0011 // Bdale Garbee +#define USB_PID_FSF_BDALE_8 0x0012 // Bdale Garbee +#define USB_PID_FSF_BDALE_9 0x0013 // Bdale Garbee #define USB_PID_FSF_LBNL_UXO 0x0018 // http://recycle.lbl.gov/~ldoolitt/uxo/ diff --git a/usrp/firmware/lib/Makefile.am b/usrp/firmware/lib/Makefile.am index eb42f55e..a6790f01 100644 --- a/usrp/firmware/lib/Makefile.am +++ b/usrp/firmware/lib/Makefile.am @@ -30,7 +30,7 @@ EXTRA_DIST = \ DEFINES= -INCLUDES=-I$(top_srcdir)/usrp/firmware/include +FW_INCLUDES=-I$(top_srcdir)/usrp/firmware/include # with EA = 0, the FX2 implements a portion of the 8051 "external memory" # on chip. This memory is mapped like this: @@ -58,7 +58,7 @@ LIBOBJS = \ all: libfx2.lib .c.rel: - $(XCC) $(INCLUDES) $(DEFINES) -c $< -o $@ + $(XCC) $(FW_INCLUDES) $(DEFINES) -c $< -o $@ $(LIBRARY): $(LIBOBJS) -rm -f $(LIBRARY) diff --git a/usrp/firmware/lib/Makefile.in b/usrp/firmware/lib/Makefile.in index e20fec03..8d4bd5e7 100644 --- a/usrp/firmware/lib/Makefile.in +++ b/usrp/firmware/lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = usrp/firmware/lib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -114,10 +140,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +150,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +167,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,49 +181,46 @@ DEFINES = DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = \ @@ -202,25 +233,21 @@ LIBOBJS = \ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -230,49 +257,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -280,15 +347,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -298,16 +508,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -316,12 +544,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ EXTRA_DIST = \ delay.c \ fx2utils.c \ @@ -330,7 +581,7 @@ EXTRA_DIST = \ timer.c \ usb_common.c -INCLUDES = -I$(top_srcdir)/usrp/firmware/include +FW_INCLUDES = -I$(top_srcdir)/usrp/firmware/include # with EA = 0, the FX2 implements a portion of the 8051 "external memory" # on chip. This memory is mapped like this: @@ -356,8 +607,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -387,10 +638,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -399,22 +646,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -460,7 +706,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -474,12 +720,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -498,23 +752,26 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am all: libfx2.lib .c.rel: - $(XCC) $(INCLUDES) $(DEFINES) -c $< -o $@ + $(XCC) $(FW_INCLUDES) $(DEFINES) -c $< -o $@ $(LIBRARY): $(LIBOBJS) -rm -f $(LIBRARY) diff --git a/usrp/firmware/src/Makefile.in b/usrp/firmware/src/Makefile.in index eb0e2821..487762db 100644 --- a/usrp/firmware/src/Makefile.in +++ b/usrp/firmware/src/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = usrp/firmware/src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,12 +549,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = common usrp2 all: all-recursive @@ -332,8 +586,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -364,10 +618,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -399,8 +649,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -444,8 +693,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -470,8 +719,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -481,13 +730,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -501,22 +749,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -530,7 +777,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -538,6 +785,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -577,8 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -592,12 +840,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -616,22 +872,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/usrp/firmware/src/common/Makefile.in b/usrp/firmware/src/common/Makefile.in index 6ef71717..c38f8623 100644 --- a/usrp/firmware/src/common/Makefile.in +++ b/usrp/firmware/src/common/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = usrp/firmware/src/common DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -114,10 +140,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -125,9 +150,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -135,6 +167,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -147,73 +181,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -223,49 +250,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -273,15 +340,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -291,16 +501,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -309,12 +537,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ EXTRA_DIST = \ _startup.a51 \ blink_leds.c \ @@ -347,8 +598,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -378,10 +629,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -390,22 +637,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -452,7 +698,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -466,12 +712,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -490,17 +744,20 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am all: usrp_gpif.c diff --git a/usrp/firmware/src/usrp2/Makefile.am b/usrp/firmware/src/usrp2/Makefile.am index 3f5b74f7..e380b190 100644 --- a/usrp/firmware/src/usrp2/Makefile.am +++ b/usrp/firmware/src/usrp2/Makefile.am @@ -54,7 +54,7 @@ EXTRA_DIST = \ DEFINES=-DHAVE_USRP2 -INCLUDES=-I$(top_srcdir)/usrp/firmware/include \ +FW_INCLUDES=-I$(top_srcdir)/usrp/firmware/include \ -I$(top_srcdir)/usrp/firmware/src/usrp2 \ -I$(top_srcdir)/usrp/firmware/src/common \ -I$(top_builddir)/usrp/firmware/src/common @@ -91,7 +91,7 @@ noinst_SCRIPTS = \ .c.rel: - $(XCC) $(INCLUDES) $(DEFINES) \ + $(XCC) $(FW_INCLUDES) $(DEFINES) \ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .a51.rel: diff --git a/usrp/firmware/src/usrp2/Makefile.in b/usrp/firmware/src/usrp2/Makefile.in index 297ead58..a62ec7c0 100644 --- a/usrp/firmware/src/usrp2/Makefile.in +++ b/usrp/firmware/src/usrp2/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -36,15 +36,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -62,25 +58,35 @@ target_triplet = @target@ subdir = usrp/firmware/src/usrp2 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -89,15 +95,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -128,10 +154,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -139,9 +164,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -149,6 +181,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -161,73 +195,66 @@ DEFINES = -DHAVE_USRP2 DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -237,49 +264,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -287,15 +354,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -305,16 +515,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -323,12 +551,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ firmware2dir = $(prefix)/share/usrp/rev2 firmware2_DATA = std.ihx @@ -361,7 +612,7 @@ EXTRA_DIST = \ usrp_rev2_regs.h \ vectors.a51 -INCLUDES = -I$(top_srcdir)/usrp/firmware/include \ +FW_INCLUDES = -I$(top_srcdir)/usrp/firmware/include \ -I$(top_srcdir)/usrp/firmware/src/usrp2 \ -I$(top_srcdir)/usrp/firmware/src/common \ -I$(top_builddir)/usrp/firmware/src/common @@ -420,8 +671,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -451,13 +702,9 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: install-firmware2DATA: $(firmware2_DATA) @$(NORMAL_INSTALL) - test -z "$(firmware2dir)" || $(mkdir_p) "$(DESTDIR)$(firmware2dir)" + test -z "$(firmware2dir)" || $(MKDIR_P) "$(DESTDIR)$(firmware2dir)" @list='$(firmware2_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -474,7 +721,7 @@ uninstall-firmware2DATA: done install-firmware4DATA: $(firmware4_DATA) @$(NORMAL_INSTALL) - test -z "$(firmware4dir)" || $(mkdir_p) "$(DESTDIR)$(firmware4dir)" + test -z "$(firmware4dir)" || $(MKDIR_P) "$(DESTDIR)$(firmware4dir)" @list='$(firmware4_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ @@ -497,22 +744,21 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -528,7 +774,7 @@ check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(firmware2dir)" "$(DESTDIR)$(firmware4dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -562,7 +808,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -576,12 +822,20 @@ info-am: install-data-am: install-firmware2DATA install-firmware4DATA +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -600,24 +854,26 @@ ps: ps-am ps-am: -uninstall-am: uninstall-firmware2DATA uninstall-firmware4DATA \ - uninstall-info-am +uninstall-am: uninstall-firmware2DATA uninstall-firmware4DATA + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-firmware2DATA install-firmware4DATA install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-firmware2DATA \ + install-firmware4DATA install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-firmware2DATA uninstall-firmware4DATA \ - uninstall-info-am + uninstall-firmware2DATA uninstall-firmware4DATA .c.rel: - $(XCC) $(INCLUDES) $(DEFINES) \ + $(XCC) $(FW_INCLUDES) $(DEFINES) \ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .a51.rel: diff --git a/usrp/fpga/Makefile.extra b/usrp/fpga/Makefile.extra index 0a994962..56df23c9 100644 --- a/usrp/fpga/Makefile.extra +++ b/usrp/fpga/Makefile.extra @@ -1,150 +1,181 @@ -EXTRA_DIST = \ - gen_makefile_extra.py \ - megacells/accum32.bsf \ - megacells/accum32.cmp \ - megacells/accum32.inc \ - megacells/accum32.v \ - megacells/accum32_bb.v \ - megacells/accum32_inst.v \ - megacells/add32.bsf \ - megacells/add32.cmp \ - megacells/add32.inc \ - megacells/add32.v \ - megacells/add32_bb.v \ - megacells/add32_inst.v \ - megacells/addsub16.bsf \ - megacells/addsub16.cmp \ - megacells/addsub16.inc \ - megacells/addsub16.v \ - megacells/addsub16_bb.v \ - megacells/addsub16_inst.v \ - megacells/bustri.bsf \ - megacells/bustri.cmp \ - megacells/bustri.inc \ - megacells/bustri.v \ - megacells/bustri_bb.v \ - megacells/bustri_inst.v \ - megacells/clk_doubler.v \ - megacells/clk_doubler_bb.v \ - megacells/dspclkpll.v \ - megacells/dspclkpll_bb.v \ - megacells/fifo_2k.v \ - megacells/fifo_2k_bb.v \ - megacells/fifo_4k.v \ - megacells/fifo_4k_bb.v \ - megacells/mylpm_addsub.bsf \ - megacells/mylpm_addsub.cmp \ - megacells/mylpm_addsub.inc \ - megacells/mylpm_addsub.v \ - megacells/mylpm_addsub_bb.v \ - megacells/mylpm_addsub_inst.v \ - megacells/pll.v \ - megacells/pll_bb.v \ - megacells/pll_inst.v \ - megacells/sub32.bsf \ - megacells/sub32.cmp \ - megacells/sub32.inc \ - megacells/sub32.v \ - megacells/sub32_bb.v \ - megacells/sub32_inst.v \ - models/bustri.v \ - models/fifo.v \ - models/fifo_1c_1k.v \ - models/fifo_1c_2k.v \ - models/fifo_1c_4k.v \ - models/fifo_1k.v \ - models/fifo_2k.v \ - models/fifo_4k.v \ - models/pll.v \ - models/ssram.v \ - sdr_lib/adc_interface.v \ - sdr_lib/bidir_reg.v \ - sdr_lib/cic_decim.v \ - sdr_lib/cic_int_shifter.v \ - sdr_lib/cic_interp.v \ - sdr_lib/clk_divider.v \ - sdr_lib/cordic.v \ - sdr_lib/cordic_stage.v \ - sdr_lib/ddc.v \ - sdr_lib/dpram.v \ - sdr_lib/duc.v \ - sdr_lib/ext_fifo.v \ - sdr_lib/gen_cordic_consts.py \ - sdr_lib/gen_sync.v \ - sdr_lib/hb/acc.v \ - sdr_lib/hb/coeff_ram.v \ - sdr_lib/hb/coeff_rom.v \ - sdr_lib/hb/halfband_decim.v \ - sdr_lib/hb/halfband_interp.v \ - sdr_lib/hb/hbd_tb/test_hbd.v \ - sdr_lib/hb/mac.v \ - sdr_lib/hb/mult.v \ - sdr_lib/hb/ram16_2port.v \ - sdr_lib/hb/ram16_2sum.v \ - sdr_lib/hb/ram32_2sum.v \ - sdr_lib/io_pins.v \ - sdr_lib/master_control.v \ - sdr_lib/master_control_multi.v \ - sdr_lib/phase_acc.v \ - sdr_lib/ram.v \ - sdr_lib/ram16.v \ - sdr_lib/ram32.v \ - sdr_lib/ram64.v \ - sdr_lib/rssi.v \ - sdr_lib/rx_buffer.v \ - sdr_lib/rx_chain.v \ - sdr_lib/rx_chain_dual.v \ - sdr_lib/rx_dcoffset.v \ - sdr_lib/serial_io.v \ - sdr_lib/setting_reg.v \ - sdr_lib/setting_reg_masked.v \ - sdr_lib/sign_extend.v \ - sdr_lib/strobe_gen.v \ - sdr_lib/tx_buffer.v \ - sdr_lib/tx_chain.v \ - sdr_lib/tx_chain_hb.v \ - tb/cbus_tb.v \ - tb/cordic_tb.v \ - tb/decim_tb.v \ - tb/fullchip_tb.v \ - tb/interp_tb.v \ - tb/justinterp_tb.v \ - tb/usrp_tasks.v \ - toplevel/mrfm/biquad_2stage.v \ - toplevel/mrfm/biquad_6stage.v \ - toplevel/mrfm/mrfm.csf \ - toplevel/mrfm/mrfm.esf \ - toplevel/mrfm/mrfm.psf \ - toplevel/mrfm/mrfm.py \ - toplevel/mrfm/mrfm.qpf \ - toplevel/mrfm/mrfm.qsf \ - toplevel/mrfm/mrfm.v \ - toplevel/mrfm/mrfm.vh \ - toplevel/mrfm/mrfm_compensator.v \ - toplevel/mrfm/mrfm_fft.py \ - toplevel/mrfm/mrfm_proc.v \ - toplevel/mrfm/shifter.v \ - toplevel/sizetest/sizetest.csf \ - toplevel/sizetest/sizetest.psf \ - toplevel/sizetest/sizetest.v \ - toplevel/usrp_multi/usrp_multi.csf \ - toplevel/usrp_multi/usrp_multi.esf \ - toplevel/usrp_multi/usrp_multi.psf \ - toplevel/usrp_multi/usrp_multi.qpf \ - toplevel/usrp_multi/usrp_multi.qsf \ - toplevel/usrp_multi/usrp_multi.v \ - toplevel/usrp_multi/usrp_multi.vh \ - toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh \ - toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh \ - toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh \ - toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh \ - toplevel/usrp_multi/usrp_std.vh \ - toplevel/usrp_std/usrp_std.csf \ - toplevel/usrp_std/usrp_std.esf \ - toplevel/usrp_std/usrp_std.psf \ - toplevel/usrp_std/usrp_std.qpf \ - toplevel/usrp_std/usrp_std.qsf \ - toplevel/usrp_std/usrp_std.v \ - toplevel/usrp_std/usrp_std.vh \ - toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh \ - toplevel/usrp_std/usrp_std_config_4rx_0tx.vh +EXTRA_DIST = \ + gen_makefile_extra.py \ + inband_lib/chan_fifo_reader.v \ + inband_lib/channel_demux.v \ + inband_lib/channel_ram.v \ + inband_lib/cmd_reader.v \ + inband_lib/packet_builder.v \ + inband_lib/register_io.v \ + inband_lib/rx_buffer_inband.v \ + inband_lib/tx_buffer_inband.v \ + inband_lib/tx_packer.v \ + inband_lib/usb_packet_fifo.v \ + megacells/accum32.bsf \ + megacells/accum32.cmp \ + megacells/accum32.inc \ + megacells/accum32.v \ + megacells/accum32_bb.v \ + megacells/accum32_inst.v \ + megacells/add32.bsf \ + megacells/add32.cmp \ + megacells/add32.inc \ + megacells/add32.v \ + megacells/add32_bb.v \ + megacells/add32_inst.v \ + megacells/addsub16.bsf \ + megacells/addsub16.cmp \ + megacells/addsub16.inc \ + megacells/addsub16.v \ + megacells/addsub16_bb.v \ + megacells/addsub16_inst.v \ + megacells/bustri.bsf \ + megacells/bustri.cmp \ + megacells/bustri.inc \ + megacells/bustri.v \ + megacells/bustri_bb.v \ + megacells/bustri_inst.v \ + megacells/clk_doubler.v \ + megacells/clk_doubler_bb.v \ + megacells/dspclkpll.v \ + megacells/dspclkpll_bb.v \ + megacells/fifo_1kx16.bsf \ + megacells/fifo_1kx16.cmp \ + megacells/fifo_1kx16.inc \ + megacells/fifo_1kx16.v \ + megacells/fifo_1kx16_bb.v \ + megacells/fifo_1kx16_inst.v \ + megacells/fifo_2k.v \ + megacells/fifo_2k_bb.v \ + megacells/fifo_4k.v \ + megacells/fifo_4k_18.v \ + megacells/fifo_4k_bb.v \ + megacells/fifo_4kx16_dc.bsf \ + megacells/fifo_4kx16_dc.cmp \ + megacells/fifo_4kx16_dc.inc \ + megacells/fifo_4kx16_dc.v \ + megacells/fifo_4kx16_dc_bb.v \ + megacells/fifo_4kx16_dc_inst.v \ + megacells/mylpm_addsub.bsf \ + megacells/mylpm_addsub.cmp \ + megacells/mylpm_addsub.inc \ + megacells/mylpm_addsub.v \ + megacells/mylpm_addsub_bb.v \ + megacells/mylpm_addsub_inst.v \ + megacells/pll.v \ + megacells/pll_bb.v \ + megacells/pll_inst.v \ + megacells/sub32.bsf \ + megacells/sub32.cmp \ + megacells/sub32.inc \ + megacells/sub32.v \ + megacells/sub32_bb.v \ + megacells/sub32_inst.v \ + models/bustri.v \ + models/fifo.v \ + models/fifo_1c_1k.v \ + models/fifo_1c_2k.v \ + models/fifo_1c_4k.v \ + models/fifo_1k.v \ + models/fifo_2k.v \ + models/fifo_4k.v \ + models/fifo_4k_18.v \ + models/pll.v \ + models/ssram.v \ + sdr_lib/adc_interface.v \ + sdr_lib/atr_delay.v \ + sdr_lib/bidir_reg.v \ + sdr_lib/cic_dec_shifter.v \ + sdr_lib/cic_decim.v \ + sdr_lib/cic_int_shifter.v \ + sdr_lib/cic_interp.v \ + sdr_lib/clk_divider.v \ + sdr_lib/cordic.v \ + sdr_lib/cordic_stage.v \ + sdr_lib/ddc.v \ + sdr_lib/dpram.v \ + sdr_lib/duc.v \ + sdr_lib/ext_fifo.v \ + sdr_lib/gen_cordic_consts.py \ + sdr_lib/gen_sync.v \ + sdr_lib/hb/acc.v \ + sdr_lib/hb/coeff_rom.v \ + sdr_lib/hb/halfband_decim.v \ + sdr_lib/hb/halfband_interp.v \ + sdr_lib/hb/hbd_tb/test_hbd.v \ + sdr_lib/hb/mac.v \ + sdr_lib/hb/mult.v \ + sdr_lib/hb/ram16_2port.v \ + sdr_lib/hb/ram16_2sum.v \ + sdr_lib/hb/ram32_2sum.v \ + sdr_lib/io_pins.v \ + sdr_lib/master_control.v \ + sdr_lib/master_control_multi.v \ + sdr_lib/phase_acc.v \ + sdr_lib/ram.v \ + sdr_lib/ram16.v \ + sdr_lib/ram32.v \ + sdr_lib/ram64.v \ + sdr_lib/rssi.v \ + sdr_lib/rx_buffer.v \ + sdr_lib/rx_chain.v \ + sdr_lib/rx_chain_dual.v \ + sdr_lib/rx_dcoffset.v \ + sdr_lib/serial_io.v \ + sdr_lib/setting_reg.v \ + sdr_lib/setting_reg_masked.v \ + sdr_lib/sign_extend.v \ + sdr_lib/strobe_gen.v \ + sdr_lib/tx_buffer.v \ + sdr_lib/tx_chain.v \ + sdr_lib/tx_chain_hb.v \ + tb/cbus_tb.v \ + tb/cordic_tb.v \ + tb/decim_tb.v \ + tb/fullchip_tb.v \ + tb/interp_tb.v \ + tb/justinterp_tb.v \ + tb/usrp_tasks.v \ + toplevel/include/common_config_1rxhb_1tx.vh \ + toplevel/include/common_config_2rx_0tx.vh \ + toplevel/include/common_config_2rxhb_0tx.vh \ + toplevel/include/common_config_2rxhb_2tx.vh \ + toplevel/include/common_config_4rx_0tx.vh \ + toplevel/include/common_config_bottom.vh \ + toplevel/mrfm/biquad_2stage.v \ + toplevel/mrfm/biquad_6stage.v \ + toplevel/mrfm/mrfm.csf \ + toplevel/mrfm/mrfm.esf \ + toplevel/mrfm/mrfm.psf \ + toplevel/mrfm/mrfm.py \ + toplevel/mrfm/mrfm.qpf \ + toplevel/mrfm/mrfm.qsf \ + toplevel/mrfm/mrfm.v \ + toplevel/mrfm/mrfm.vh \ + toplevel/mrfm/mrfm_compensator.v \ + toplevel/mrfm/mrfm_fft.py \ + toplevel/mrfm/mrfm_proc.v \ + toplevel/mrfm/shifter.v \ + toplevel/sizetest/sizetest.csf \ + toplevel/sizetest/sizetest.psf \ + toplevel/sizetest/sizetest.v \ + toplevel/usrp_inband_usb/config.vh \ + toplevel/usrp_inband_usb/usrp_inband_usb.csf \ + toplevel/usrp_inband_usb/usrp_inband_usb.esf \ + toplevel/usrp_inband_usb/usrp_inband_usb.psf \ + toplevel/usrp_inband_usb/usrp_inband_usb.qpf \ + toplevel/usrp_inband_usb/usrp_inband_usb.qsf \ + toplevel/usrp_inband_usb/usrp_inband_usb.v \ + toplevel/usrp_multi/config.vh \ + toplevel/usrp_multi/usrp_multi.csf \ + toplevel/usrp_multi/usrp_multi.esf \ + toplevel/usrp_multi/usrp_multi.psf \ + toplevel/usrp_multi/usrp_multi.qpf \ + toplevel/usrp_multi/usrp_multi.qsf \ + toplevel/usrp_multi/usrp_multi.v \ + toplevel/usrp_std/config.vh \ + toplevel/usrp_std/usrp_std.csf \ + toplevel/usrp_std/usrp_std.esf \ + toplevel/usrp_std/usrp_std.psf \ + toplevel/usrp_std/usrp_std.qpf \ + toplevel/usrp_std/usrp_std.qsf \ + toplevel/usrp_std/usrp_std.v diff --git a/usrp/fpga/Makefile.in b/usrp/fpga/Makefile.in index b19d3e21..5d978507 100644 --- a/usrp/fpga/Makefile.in +++ b/usrp/fpga/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -61,25 +57,35 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.extra \ $(srcdir)/Makefile.in TODO subdir = usrp/fpga ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -88,15 +94,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -113,10 +139,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -124,10 +153,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -135,9 +163,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -145,6 +180,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -157,73 +194,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -233,49 +263,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -283,15 +353,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -301,16 +514,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -319,163 +550,217 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = rbf EXTRA_DIST = \ - gen_makefile_extra.py \ - megacells/accum32.bsf \ - megacells/accum32.cmp \ - megacells/accum32.inc \ - megacells/accum32.v \ - megacells/accum32_bb.v \ - megacells/accum32_inst.v \ - megacells/add32.bsf \ - megacells/add32.cmp \ - megacells/add32.inc \ - megacells/add32.v \ - megacells/add32_bb.v \ - megacells/add32_inst.v \ - megacells/addsub16.bsf \ - megacells/addsub16.cmp \ - megacells/addsub16.inc \ - megacells/addsub16.v \ - megacells/addsub16_bb.v \ - megacells/addsub16_inst.v \ - megacells/bustri.bsf \ - megacells/bustri.cmp \ - megacells/bustri.inc \ - megacells/bustri.v \ - megacells/bustri_bb.v \ - megacells/bustri_inst.v \ - megacells/clk_doubler.v \ - megacells/clk_doubler_bb.v \ - megacells/dspclkpll.v \ - megacells/dspclkpll_bb.v \ - megacells/fifo_2k.v \ - megacells/fifo_2k_bb.v \ - megacells/fifo_4k.v \ - megacells/fifo_4k_bb.v \ - megacells/mylpm_addsub.bsf \ - megacells/mylpm_addsub.cmp \ - megacells/mylpm_addsub.inc \ - megacells/mylpm_addsub.v \ - megacells/mylpm_addsub_bb.v \ - megacells/mylpm_addsub_inst.v \ - megacells/pll.v \ - megacells/pll_bb.v \ - megacells/pll_inst.v \ - megacells/sub32.bsf \ - megacells/sub32.cmp \ - megacells/sub32.inc \ - megacells/sub32.v \ - megacells/sub32_bb.v \ - megacells/sub32_inst.v \ - models/bustri.v \ - models/fifo.v \ - models/fifo_1c_1k.v \ - models/fifo_1c_2k.v \ - models/fifo_1c_4k.v \ - models/fifo_1k.v \ - models/fifo_2k.v \ - models/fifo_4k.v \ - models/pll.v \ - models/ssram.v \ - sdr_lib/adc_interface.v \ - sdr_lib/bidir_reg.v \ - sdr_lib/cic_decim.v \ - sdr_lib/cic_int_shifter.v \ - sdr_lib/cic_interp.v \ - sdr_lib/clk_divider.v \ - sdr_lib/cordic.v \ - sdr_lib/cordic_stage.v \ - sdr_lib/ddc.v \ - sdr_lib/dpram.v \ - sdr_lib/duc.v \ - sdr_lib/ext_fifo.v \ - sdr_lib/gen_cordic_consts.py \ - sdr_lib/gen_sync.v \ - sdr_lib/hb/acc.v \ - sdr_lib/hb/coeff_ram.v \ - sdr_lib/hb/coeff_rom.v \ - sdr_lib/hb/halfband_decim.v \ - sdr_lib/hb/halfband_interp.v \ - sdr_lib/hb/hbd_tb/test_hbd.v \ - sdr_lib/hb/mac.v \ - sdr_lib/hb/mult.v \ - sdr_lib/hb/ram16_2port.v \ - sdr_lib/hb/ram16_2sum.v \ - sdr_lib/hb/ram32_2sum.v \ - sdr_lib/io_pins.v \ - sdr_lib/master_control.v \ - sdr_lib/master_control_multi.v \ - sdr_lib/phase_acc.v \ - sdr_lib/ram.v \ - sdr_lib/ram16.v \ - sdr_lib/ram32.v \ - sdr_lib/ram64.v \ - sdr_lib/rssi.v \ - sdr_lib/rx_buffer.v \ - sdr_lib/rx_chain.v \ - sdr_lib/rx_chain_dual.v \ - sdr_lib/rx_dcoffset.v \ - sdr_lib/serial_io.v \ - sdr_lib/setting_reg.v \ - sdr_lib/setting_reg_masked.v \ - sdr_lib/sign_extend.v \ - sdr_lib/strobe_gen.v \ - sdr_lib/tx_buffer.v \ - sdr_lib/tx_chain.v \ - sdr_lib/tx_chain_hb.v \ - tb/cbus_tb.v \ - tb/cordic_tb.v \ - tb/decim_tb.v \ - tb/fullchip_tb.v \ - tb/interp_tb.v \ - tb/justinterp_tb.v \ - tb/usrp_tasks.v \ - toplevel/mrfm/biquad_2stage.v \ - toplevel/mrfm/biquad_6stage.v \ - toplevel/mrfm/mrfm.csf \ - toplevel/mrfm/mrfm.esf \ - toplevel/mrfm/mrfm.psf \ - toplevel/mrfm/mrfm.py \ - toplevel/mrfm/mrfm.qpf \ - toplevel/mrfm/mrfm.qsf \ - toplevel/mrfm/mrfm.v \ - toplevel/mrfm/mrfm.vh \ - toplevel/mrfm/mrfm_compensator.v \ - toplevel/mrfm/mrfm_fft.py \ - toplevel/mrfm/mrfm_proc.v \ - toplevel/mrfm/shifter.v \ - toplevel/sizetest/sizetest.csf \ - toplevel/sizetest/sizetest.psf \ - toplevel/sizetest/sizetest.v \ - toplevel/usrp_multi/usrp_multi.csf \ - toplevel/usrp_multi/usrp_multi.esf \ - toplevel/usrp_multi/usrp_multi.psf \ - toplevel/usrp_multi/usrp_multi.qpf \ - toplevel/usrp_multi/usrp_multi.qsf \ - toplevel/usrp_multi/usrp_multi.v \ - toplevel/usrp_multi/usrp_multi.vh \ - toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh \ - toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh \ - toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh \ - toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh \ - toplevel/usrp_multi/usrp_std.vh \ - toplevel/usrp_std/usrp_std.csf \ - toplevel/usrp_std/usrp_std.esf \ - toplevel/usrp_std/usrp_std.psf \ - toplevel/usrp_std/usrp_std.qpf \ - toplevel/usrp_std/usrp_std.qsf \ - toplevel/usrp_std/usrp_std.v \ - toplevel/usrp_std/usrp_std.vh \ - toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh \ - toplevel/usrp_std/usrp_std_config_4rx_0tx.vh + gen_makefile_extra.py \ + inband_lib/chan_fifo_reader.v \ + inband_lib/channel_demux.v \ + inband_lib/channel_ram.v \ + inband_lib/cmd_reader.v \ + inband_lib/packet_builder.v \ + inband_lib/register_io.v \ + inband_lib/rx_buffer_inband.v \ + inband_lib/tx_buffer_inband.v \ + inband_lib/tx_packer.v \ + inband_lib/usb_packet_fifo.v \ + megacells/accum32.bsf \ + megacells/accum32.cmp \ + megacells/accum32.inc \ + megacells/accum32.v \ + megacells/accum32_bb.v \ + megacells/accum32_inst.v \ + megacells/add32.bsf \ + megacells/add32.cmp \ + megacells/add32.inc \ + megacells/add32.v \ + megacells/add32_bb.v \ + megacells/add32_inst.v \ + megacells/addsub16.bsf \ + megacells/addsub16.cmp \ + megacells/addsub16.inc \ + megacells/addsub16.v \ + megacells/addsub16_bb.v \ + megacells/addsub16_inst.v \ + megacells/bustri.bsf \ + megacells/bustri.cmp \ + megacells/bustri.inc \ + megacells/bustri.v \ + megacells/bustri_bb.v \ + megacells/bustri_inst.v \ + megacells/clk_doubler.v \ + megacells/clk_doubler_bb.v \ + megacells/dspclkpll.v \ + megacells/dspclkpll_bb.v \ + megacells/fifo_1kx16.bsf \ + megacells/fifo_1kx16.cmp \ + megacells/fifo_1kx16.inc \ + megacells/fifo_1kx16.v \ + megacells/fifo_1kx16_bb.v \ + megacells/fifo_1kx16_inst.v \ + megacells/fifo_2k.v \ + megacells/fifo_2k_bb.v \ + megacells/fifo_4k.v \ + megacells/fifo_4k_18.v \ + megacells/fifo_4k_bb.v \ + megacells/fifo_4kx16_dc.bsf \ + megacells/fifo_4kx16_dc.cmp \ + megacells/fifo_4kx16_dc.inc \ + megacells/fifo_4kx16_dc.v \ + megacells/fifo_4kx16_dc_bb.v \ + megacells/fifo_4kx16_dc_inst.v \ + megacells/mylpm_addsub.bsf \ + megacells/mylpm_addsub.cmp \ + megacells/mylpm_addsub.inc \ + megacells/mylpm_addsub.v \ + megacells/mylpm_addsub_bb.v \ + megacells/mylpm_addsub_inst.v \ + megacells/pll.v \ + megacells/pll_bb.v \ + megacells/pll_inst.v \ + megacells/sub32.bsf \ + megacells/sub32.cmp \ + megacells/sub32.inc \ + megacells/sub32.v \ + megacells/sub32_bb.v \ + megacells/sub32_inst.v \ + models/bustri.v \ + models/fifo.v \ + models/fifo_1c_1k.v \ + models/fifo_1c_2k.v \ + models/fifo_1c_4k.v \ + models/fifo_1k.v \ + models/fifo_2k.v \ + models/fifo_4k.v \ + models/fifo_4k_18.v \ + models/pll.v \ + models/ssram.v \ + sdr_lib/adc_interface.v \ + sdr_lib/atr_delay.v \ + sdr_lib/bidir_reg.v \ + sdr_lib/cic_dec_shifter.v \ + sdr_lib/cic_decim.v \ + sdr_lib/cic_int_shifter.v \ + sdr_lib/cic_interp.v \ + sdr_lib/clk_divider.v \ + sdr_lib/cordic.v \ + sdr_lib/cordic_stage.v \ + sdr_lib/ddc.v \ + sdr_lib/dpram.v \ + sdr_lib/duc.v \ + sdr_lib/ext_fifo.v \ + sdr_lib/gen_cordic_consts.py \ + sdr_lib/gen_sync.v \ + sdr_lib/hb/acc.v \ + sdr_lib/hb/coeff_rom.v \ + sdr_lib/hb/halfband_decim.v \ + sdr_lib/hb/halfband_interp.v \ + sdr_lib/hb/hbd_tb/test_hbd.v \ + sdr_lib/hb/mac.v \ + sdr_lib/hb/mult.v \ + sdr_lib/hb/ram16_2port.v \ + sdr_lib/hb/ram16_2sum.v \ + sdr_lib/hb/ram32_2sum.v \ + sdr_lib/io_pins.v \ + sdr_lib/master_control.v \ + sdr_lib/master_control_multi.v \ + sdr_lib/phase_acc.v \ + sdr_lib/ram.v \ + sdr_lib/ram16.v \ + sdr_lib/ram32.v \ + sdr_lib/ram64.v \ + sdr_lib/rssi.v \ + sdr_lib/rx_buffer.v \ + sdr_lib/rx_chain.v \ + sdr_lib/rx_chain_dual.v \ + sdr_lib/rx_dcoffset.v \ + sdr_lib/serial_io.v \ + sdr_lib/setting_reg.v \ + sdr_lib/setting_reg_masked.v \ + sdr_lib/sign_extend.v \ + sdr_lib/strobe_gen.v \ + sdr_lib/tx_buffer.v \ + sdr_lib/tx_chain.v \ + sdr_lib/tx_chain_hb.v \ + tb/cbus_tb.v \ + tb/cordic_tb.v \ + tb/decim_tb.v \ + tb/fullchip_tb.v \ + tb/interp_tb.v \ + tb/justinterp_tb.v \ + tb/usrp_tasks.v \ + toplevel/include/common_config_1rxhb_1tx.vh \ + toplevel/include/common_config_2rx_0tx.vh \ + toplevel/include/common_config_2rxhb_0tx.vh \ + toplevel/include/common_config_2rxhb_2tx.vh \ + toplevel/include/common_config_4rx_0tx.vh \ + toplevel/include/common_config_bottom.vh \ + toplevel/mrfm/biquad_2stage.v \ + toplevel/mrfm/biquad_6stage.v \ + toplevel/mrfm/mrfm.csf \ + toplevel/mrfm/mrfm.esf \ + toplevel/mrfm/mrfm.psf \ + toplevel/mrfm/mrfm.py \ + toplevel/mrfm/mrfm.qpf \ + toplevel/mrfm/mrfm.qsf \ + toplevel/mrfm/mrfm.v \ + toplevel/mrfm/mrfm.vh \ + toplevel/mrfm/mrfm_compensator.v \ + toplevel/mrfm/mrfm_fft.py \ + toplevel/mrfm/mrfm_proc.v \ + toplevel/mrfm/shifter.v \ + toplevel/sizetest/sizetest.csf \ + toplevel/sizetest/sizetest.psf \ + toplevel/sizetest/sizetest.v \ + toplevel/usrp_inband_usb/config.vh \ + toplevel/usrp_inband_usb/usrp_inband_usb.csf \ + toplevel/usrp_inband_usb/usrp_inband_usb.esf \ + toplevel/usrp_inband_usb/usrp_inband_usb.psf \ + toplevel/usrp_inband_usb/usrp_inband_usb.qpf \ + toplevel/usrp_inband_usb/usrp_inband_usb.qsf \ + toplevel/usrp_inband_usb/usrp_inband_usb.v \ + toplevel/usrp_multi/config.vh \ + toplevel/usrp_multi/usrp_multi.csf \ + toplevel/usrp_multi/usrp_multi.esf \ + toplevel/usrp_multi/usrp_multi.psf \ + toplevel/usrp_multi/usrp_multi.qpf \ + toplevel/usrp_multi/usrp_multi.qsf \ + toplevel/usrp_multi/usrp_multi.v \ + toplevel/usrp_std/config.vh \ + toplevel/usrp_std/usrp_std.csf \ + toplevel/usrp_std/usrp_std.esf \ + toplevel/usrp_std/usrp_std.psf \ + toplevel/usrp_std/usrp_std.qpf \ + toplevel/usrp_std/usrp_std.qsf \ + toplevel/usrp_std/usrp_std.v all: all-recursive @@ -484,8 +769,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.extra $(am__con @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -516,10 +801,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -551,8 +832,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -596,8 +876,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -622,8 +902,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -633,13 +913,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -653,23 +932,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/megacells $(distdir)/models $(distdir)/sdr_lib $(distdir)/sdr_lib/hb $(distdir)/sdr_lib/hb/hbd_tb $(distdir)/tb $(distdir)/toplevel/mrfm $(distdir)/toplevel/sizetest $(distdir)/toplevel/usrp_multi $(distdir)/toplevel/usrp_std - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -683,7 +960,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -691,6 +968,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -730,8 +1009,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -745,12 +1023,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -769,22 +1055,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/usrp/fpga/inband_lib/chan_fifo_reader.v b/usrp/fpga/inband_lib/chan_fifo_reader.v new file mode 100755 index 00000000..69da9ec5 --- /dev/null +++ b/usrp/fpga/inband_lib/chan_fifo_reader.v @@ -0,0 +1,219 @@ +module chan_fifo_reader + (reset, tx_clock, tx_strobe, timestamp_clock, samples_format, + fifodata, pkt_waiting, rdreq, skip, tx_q, tx_i, + underrun, tx_empty, debug, rssi, threshhold, rssi_wait) ; + + input wire reset ; + input wire tx_clock ; + input wire tx_strobe ; //signal to output tx_i and tx_q + input wire [31:0] timestamp_clock ; //current time + input wire [3:0] samples_format ;// not useful at this point + input wire [31:0] fifodata ; //the data input + input wire pkt_waiting ; //signal the next packet is ready + output reg rdreq ; //actually an ack to the current fifodata + output reg skip ; //finish reading current packet + output reg [15:0] tx_q ; //top 16 bit output of fifodata + output reg [15:0] tx_i ; //bottom 16 bit output of fifodata + output reg underrun ; + output reg tx_empty ; //cause 0 to be the output + input wire [31:0] rssi; + input wire [31:0] threshhold; + input wire [31:0] rssi_wait; + + output wire [14:0] debug; + assign debug = {7'd0, rdreq, skip, reader_state, pkt_waiting, tx_strobe, tx_clock}; + + //Samples format + // 16 bits interleaved complex samples + `define QI16 4'b0 + + // States + parameter IDLE = 3'd0; + parameter HEADER = 3'd1; + parameter TIMESTAMP = 3'd2; + parameter WAIT = 3'd3; + parameter WAITSTROBE = 3'd4; + parameter SEND = 3'd5; + + // Header format + `define PAYLOAD 8:2 + `define ENDOFBURST 27 + `define STARTOFBURST 28 + `define RSSI_FLAG 26 + + + /* State registers */ + reg [2:0] reader_state; + /* Local registers */ + reg [6:0] payload_len; + reg [6:0] read_len; + reg [31:0] timestamp; + reg burst; + reg trash; + reg rssi_flag; + reg [31:0] time_wait; + + always @(posedge tx_clock) + begin + if (reset) + begin + reader_state <= IDLE; + rdreq <= 0; + skip <= 0; + underrun <= 0; + burst <= 0; + tx_empty <= 1; + tx_q <= 0; + tx_i <= 0; + trash <= 0; + rssi_flag <= 0; + time_wait <= 0; + end + else + begin + case (reader_state) + IDLE: + begin + /* + * reset all the variables and wait for a tx_strobe + * it is assumed that the ram connected to this fifo_reader + * is a short hand fifo meaning that the header to the next packet + * is already available to this fifo_reader when pkt_waiting is on + */ + skip <=0; + time_wait <= 0; + if (pkt_waiting == 1) + begin + reader_state <= HEADER; + rdreq <= 1; + underrun <= 0; + end + if (burst == 1 && pkt_waiting == 0) + underrun <= 1; + if (tx_strobe == 1) + tx_empty <= 1 ; + end + + /* Process header */ + HEADER: + begin + if (tx_strobe == 1) + tx_empty <= 1 ; + + rssi_flag <= fifodata[`RSSI_FLAG]&fifodata[`STARTOFBURST]; + //Check Start/End burst flag + if (fifodata[`STARTOFBURST] == 1 + && fifodata[`ENDOFBURST] == 1) + burst <= 0; + else if (fifodata[`STARTOFBURST] == 1) + burst <= 1; + else if (fifodata[`ENDOFBURST] == 1) + burst <= 0; + + if (trash == 1 && fifodata[`STARTOFBURST] == 0) + begin + skip <= 1; + reader_state <= IDLE; + rdreq <= 0; + end + else + begin + payload_len <= fifodata[`PAYLOAD] ; + read_len <= 0; + rdreq <= 1; + reader_state <= TIMESTAMP; + end + end + + TIMESTAMP: + begin + timestamp <= fifodata; + reader_state <= WAIT; + if (tx_strobe == 1) + tx_empty <= 1 ; + rdreq <= 0; + end + + // Decide if we wait, send or discard samples + WAIT: + begin + if (tx_strobe == 1) + tx_empty <= 1 ; + + time_wait <= time_wait + 32'd1; + // Outdated + if ((timestamp < timestamp_clock) || + (time_wait >= rssi_wait && rssi_wait != 0 && rssi_flag)) + begin + trash <= 1; + reader_state <= IDLE; + skip <= 1; + end + // Let's send it + else if (timestamp == timestamp_clock + || timestamp == 32'hFFFFFFFF) + begin + if (rssi <= threshhold || rssi_flag == 0) + begin + trash <= 0; + reader_state <= WAITSTROBE; + end + else + reader_state <= WAIT; + end + else + reader_state <= WAIT; + end + + // Wait for the transmit chain to be ready + WAITSTROBE: + begin + // If end of payload... + if (read_len == payload_len) + begin + reader_state <= IDLE; + skip <= 1; + if (tx_strobe == 1) + tx_empty <= 1 ; + end + else if (tx_strobe == 1) + begin + reader_state <= SEND; + rdreq <= 1; + end + end + + // Send the samples to the tx_chain + SEND: + begin + reader_state <= WAITSTROBE; + read_len <= read_len + 7'd1; + tx_empty <= 0; + rdreq <= 0; + + case(samples_format) + `QI16: + begin + tx_i <= fifodata[15:0]; + tx_q <= fifodata[31:16]; + end + + // Assume 16 bits complex samples by default + default: + begin + tx_i <= fifodata[15:0]; + tx_q <= fifodata[31:16]; + end + endcase + end + + default: + begin + //error handling + reader_state <= IDLE; + end + endcase + end + end + +endmodule diff --git a/usrp/fpga/inband_lib/channel_demux.v b/usrp/fpga/inband_lib/channel_demux.v new file mode 100644 index 00000000..cca5cdb6 --- /dev/null +++ b/usrp/fpga/inband_lib/channel_demux.v @@ -0,0 +1,78 @@ +module channel_demux + #(parameter NUM_CHAN = 2) ( //usb Side + input [31:0]usbdata_final, + input WR_final, + // TX Side + input reset, + input txclk, + output reg [NUM_CHAN:0] WR_channel, + output reg [31:0] ram_data, + output reg [NUM_CHAN:0] WR_done_channel ); + /* Parse header and forward to ram */ + + reg [2:0]reader_state; + reg [4:0]channel ; + reg [6:0]read_length ; + + // States + parameter IDLE = 3'd0; + parameter HEADER = 3'd1; + parameter WAIT = 3'd2; + parameter FORWARD = 3'd3; + + `define CHANNEL 20:16 + `define PKT_SIZE 127 + wire [4:0] true_channel; + assign true_channel = (usbdata_final[`CHANNEL] == 5'h1f) ? + NUM_CHAN : (usbdata_final[`CHANNEL]); + + always @(posedge txclk) + begin + if (reset) + begin + reader_state <= IDLE; + WR_channel <= 0; + WR_done_channel <= 0; + end + else + case (reader_state) + IDLE: begin + if (WR_final) + reader_state <= HEADER; + end + + // Store channel and forware header + HEADER: begin + channel <= true_channel; + WR_channel[true_channel] <= 1; + ram_data <= usbdata_final; + read_length <= 7'd0 ; + + reader_state <= WAIT; + end + + WAIT: begin + WR_channel[channel] <= 0; + + if (read_length == `PKT_SIZE) + reader_state <= IDLE; + else if (WR_final) + reader_state <= FORWARD; + end + + FORWARD: begin + WR_channel[channel] <= 1; + ram_data <= usbdata_final; + read_length <= read_length + 7'd1; + + reader_state <= WAIT; + end + + default: + begin + //error handling + reader_state <= IDLE; + end + endcase + end +endmodule diff --git a/usrp/fpga/inband_lib/channel_ram.v b/usrp/fpga/inband_lib/channel_ram.v new file mode 100755 index 00000000..9621246c --- /dev/null +++ b/usrp/fpga/inband_lib/channel_ram.v @@ -0,0 +1,107 @@ +module channel_ram + ( // System + input txclk, input reset, + // USB side + input [31:0] datain, input WR, input WR_done, output have_space, + // Reader side + output [31:0] dataout, input RD, input RD_done, output packet_waiting); + + reg [6:0] wr_addr, rd_addr; + reg [1:0] which_ram_wr, which_ram_rd; + reg [2:0] nb_packets; + + reg [31:0] ram0 [0:127]; + reg [31:0] ram1 [0:127]; + reg [31:0] ram2 [0:127]; + reg [31:0] ram3 [0:127]; + + reg [31:0] dataout0; + reg [31:0] dataout1; + reg [31:0] dataout2; + reg [31:0] dataout3; + + wire wr_done_int; + wire rd_done_int; + wire [6:0] rd_addr_final; + wire [1:0] which_ram_rd_final; + + // USB side + always @(posedge txclk) + if(WR & (which_ram_wr == 2'd0)) ram0[wr_addr] <= datain; + + always @(posedge txclk) + if(WR & (which_ram_wr == 2'd1)) ram1[wr_addr] <= datain; + + always @(posedge txclk) + if(WR & (which_ram_wr == 2'd2)) ram2[wr_addr] <= datain; + + always @(posedge txclk) + if(WR & (which_ram_wr == 2'd3)) ram3[wr_addr] <= datain; + + assign wr_done_int = ((WR && (wr_addr == 7'd127)) || WR_done); + + always @(posedge txclk) + if(reset) + wr_addr <= 0; + else if (WR_done) + wr_addr <= 0; + else if (WR) + wr_addr <= wr_addr + 7'd1; + + always @(posedge txclk) + if(reset) + which_ram_wr <= 0; + else if (wr_done_int) + which_ram_wr <= which_ram_wr + 2'd1; + + assign have_space = (nb_packets < 3'd3); + + // Reader side + // short hand fifo + // rd_addr_final is what rd_addr is going to be next clock cycle + // which_ram_rd_final is what which_ram_rd is going to be next clock cycle + always @(posedge txclk) dataout0 <= ram0[rd_addr_final]; + always @(posedge txclk) dataout1 <= ram1[rd_addr_final]; + always @(posedge txclk) dataout2 <= ram2[rd_addr_final]; + always @(posedge txclk) dataout3 <= ram3[rd_addr_final]; + + assign dataout = (which_ram_rd_final[1]) ? + (which_ram_rd_final[0] ? dataout3 : dataout2) : + (which_ram_rd_final[0] ? dataout1 : dataout0); + + //RD_done is the only way to signal the end of one packet + assign rd_done_int = RD_done; + + always @(posedge txclk) + if (reset) + rd_addr <= 0; + else if (RD_done) + rd_addr <= 0; + else if (RD) + rd_addr <= rd_addr + 7'd1; + + assign rd_addr_final = (reset|RD_done) ? (6'd0) : + ((RD)?(rd_addr+7'd1):rd_addr); + + always @(posedge txclk) + if (reset) + which_ram_rd <= 0; + else if (rd_done_int) + which_ram_rd <= which_ram_rd + 2'd1; + + assign which_ram_rd_final = (reset) ? (2'd0): + ((rd_done_int) ? (which_ram_rd + 2'd1) : which_ram_rd); + + //packet_waiting is set to zero if rd_done_int is high + //because there is no guarantee that nb_packets will be pos. + + assign packet_waiting = (nb_packets > 1) | ((nb_packets == 1)&(~rd_done_int)); + always @(posedge txclk) + if (reset) + nb_packets <= 0; + else if (wr_done_int & ~rd_done_int) + nb_packets <= nb_packets + 3'd1; + else if (rd_done_int & ~wr_done_int) + nb_packets <= nb_packets - 3'd1; + +endmodule diff --git a/usrp/fpga/inband_lib/cmd_reader.v b/usrp/fpga/inband_lib/cmd_reader.v new file mode 100755 index 00000000..b69ea02b --- /dev/null +++ b/usrp/fpga/inband_lib/cmd_reader.v @@ -0,0 +1,305 @@ +module cmd_reader + (//System + input reset, input txclk, input [31:0] timestamp_clock, + //FX2 Side + output reg skip, output reg rdreq, + input [31:0] fifodata, input pkt_waiting, + //Rx side + input rx_WR_enabled, output reg [15:0] rx_databus, + output reg rx_WR, output reg rx_WR_done, + //register io + input wire [31:0] reg_data_out, output reg [31:0] reg_data_in, + output reg [6:0] reg_addr, output reg [1:0] reg_io_enable, + output wire [14:0] debug, output reg stop, output reg [15:0] stop_time); + + // States + parameter IDLE = 4'd0; + parameter HEADER = 4'd1; + parameter TIMESTAMP = 4'd2; + parameter WAIT = 4'd3; + parameter TEST = 4'd4; + parameter SEND = 4'd5; + parameter PING = 4'd6; + parameter WRITE_REG = 4'd7; + parameter WRITE_REG_MASKED = 4'd8; + parameter READ_REG = 4'd9; + parameter DELAY = 4'd14; + + `define OP_PING_FIXED 8'd0 + `define OP_PING_FIXED_REPLY 8'd1 + `define OP_WRITE_REG 8'd2 + `define OP_WRITE_REG_MASKED 8'd3 + `define OP_READ_REG 8'd4 + `define OP_READ_REG_REPLY 8'd5 + `define OP_DELAY 8'd12 + + reg [6:0] payload; + reg [6:0] payload_read; + reg [3:0] state; + reg [15:0] high; + reg [15:0] low; + reg pending; + reg [31:0] value0; + reg [31:0] value1; + reg [31:0] value2; + reg [1:0] lines_in; + reg [1:0] lines_out; + reg [1:0] lines_out_total; + + `define JITTER 5 + `define OP_CODE 31:24 + `define PAYLOAD 8:2 + + wire [7:0] ops; + assign ops = value0[`OP_CODE]; + assign debug = {state[3:0], lines_out[1:0], pending, rx_WR, rx_WR_enabled, value0[2:0], ops[2:0]}; + + always @(posedge txclk) + if (reset) + begin + pending <= 0; + state <= IDLE; + skip <= 0; + rdreq <= 0; + rx_WR <= 0; + reg_io_enable <= 0; + reg_data_in <= 0; + reg_addr <= 0; + stop <= 0; + end + else case (state) + IDLE : + begin + payload_read <= 0; + skip <= 0; + lines_in <= 0; + if(pkt_waiting) + begin + state <= HEADER; + rdreq <= 1; + end + end + + HEADER : + begin + payload <= fifodata[`PAYLOAD]; + state <= TIMESTAMP; + end + + TIMESTAMP : + begin + value0 <= fifodata; + state <= WAIT; + rdreq <= 0; + end + + WAIT : + begin + // Let's send it + if ((value0 <= timestamp_clock + `JITTER + && value0 > timestamp_clock) + || value0 == 32'hFFFFFFFF) + state <= TEST; + // Wait a little bit more + else if (value0 > timestamp_clock + `JITTER) + state <= WAIT; + // Outdated + else if (value0 < timestamp_clock) + begin + state <= IDLE; + skip <= 1; + end + end + + TEST : + begin + reg_io_enable <= 0; + rx_WR <= 0; + rx_WR_done <= 1; + stop <= 0; + if (payload_read == payload) + begin + skip <= 1; + state <= IDLE; + rdreq <= 0; + end + else + begin + value0 <= fifodata; + lines_in <= 2'd1; + rdreq <= 1; + payload_read <= payload_read + 7'd1; + lines_out <= 0; + case (fifodata[`OP_CODE]) + `OP_PING_FIXED: + begin + state <= PING; + end + `OP_WRITE_REG: + begin + state <= WRITE_REG; + pending <= 1; + end + `OP_WRITE_REG_MASKED: + begin + state <= WRITE_REG_MASKED; + pending <= 1; + end + `OP_READ_REG: + begin + state <= READ_REG; + end + `OP_DELAY: + begin + state <= DELAY; + end + default: + begin + //error, skip this packet + skip <= 1; + state <= IDLE; + end + endcase + end + end + + SEND: + begin + rdreq <= 0; + rx_WR_done <= 0; + if (pending) + begin + rx_WR <= 1; + rx_databus <= high; + pending <= 0; + if (lines_out == lines_out_total) + state <= TEST; + else case (ops) + `OP_READ_REG: + begin + state <= READ_REG; + end + default: + begin + state <= TEST; + end + endcase + end + else + begin + if (rx_WR_enabled) + begin + rx_WR <= 1; + rx_databus <= low; + pending <= 1; + lines_out <= lines_out + 2'd1; + end + else + rx_WR <= 0; + end + end + + PING: + begin + rx_WR <= 0; + rdreq <= 0; + rx_WR_done <= 0; + lines_out_total <= 2'd1; + pending <= 0; + state <= SEND; + high <= {`OP_PING_FIXED_REPLY, 8'd2}; + low <= value0[15:0]; + end + + READ_REG: + begin + rx_WR <= 0; + rx_WR_done <= 0; + rdreq <= 0; + lines_out_total <= 2'd2; + pending <= 0; + state <= SEND; + if (lines_out == 0) + begin + high <= {`OP_READ_REG_REPLY, 8'd6}; + low <= value0[15:0]; + reg_io_enable <= 2'd3; + reg_addr <= value0[6:0]; + end + else + begin + high <= reg_data_out[31:16]; + low <= reg_data_out[15:0]; + end + end + + WRITE_REG: + begin + rx_WR <= 0; + if (pending) + pending <= 0; + else + begin + if (lines_in == 2'd1) + begin + payload_read <= payload_read + 7'd1; + lines_in <= lines_in + 2'd1; + value1 <= fifodata; + rdreq <= 0; + end + else + begin + reg_io_enable <= 2'd2; + reg_data_in <= value1; + reg_addr <= value0[6:0]; + state <= TEST; + end + end + end + + WRITE_REG_MASKED: + begin + rx_WR <= 0; + if (pending) + pending <= 0; + else + begin + if (lines_in == 2'd1) + begin + rdreq <= 1; + payload_read <= payload_read + 7'd1; + lines_in <= lines_in + 2'd1; + value1 <= fifodata; + end + else if (lines_in == 2'd2) + begin + rdreq <= 0; + payload_read <= payload_read + 7'd1; + lines_in <= lines_in + 2'd1; + value2 <= fifodata; + end + else + begin + reg_io_enable <= 2'd2; + reg_data_in <= (value1 & value2); + reg_addr <= value0[6:0]; + state <= TEST; + end + end + end + + DELAY : + begin + rdreq <= 0; + stop <= 1; + stop_time <= value0[15:0]; + state <= TEST; + end + + default : + begin + //error state handling + state <= IDLE; + end + endcase +endmodule diff --git a/usrp/fpga/inband_lib/packet_builder.v b/usrp/fpga/inband_lib/packet_builder.v new file mode 100755 index 00000000..2c912239 --- /dev/null +++ b/usrp/fpga/inband_lib/packet_builder.v @@ -0,0 +1,152 @@ +module packet_builder #(parameter NUM_CHAN = 2)( + // System + input rxclk, + input reset, + input [31:0] timestamp_clock, + input [3:0] channels, + // ADC side + input [15:0]chan_fifodata, + input [NUM_CHAN:0]chan_empty, + input [9:0]chan_usedw, + output reg [3:0]rd_select, + output reg chan_rdreq, + // FX2 side + output reg WR, + output reg [15:0]fifodata, + input have_space, + input wire [31:0]rssi_0, input wire [31:0]rssi_1, input wire [31:0]rssi_2, + input wire [31:0]rssi_3, output wire [7:0] debugbus, + input [NUM_CHAN:0] underrun); + + + // States + `define IDLE 3'd0 + `define HEADER1 3'd1 + `define HEADER2 3'd2 + `define TIMESTAMP 3'd3 + `define FORWARD 3'd4 + + `define MAXPAYLOAD 504 + + `define PAYLOAD_LEN 8:0 + `define TAG 12:9 + `define MBZ 15:13 + + `define CHAN 4:0 + `define RSSI 10:5 + `define BURST 12:11 + `define DROPPED 13 + `define UNDERRUN 14 + `define OVERRUN 15 + + reg [NUM_CHAN:0] overrun; + reg [2:0] state; + reg [8:0] read_length; + reg [8:0] payload_len; + reg timestamp_complete; + reg [3:0] check_next; + + wire [31:0] true_rssi; + wire [4:0] true_channel; + wire ready_to_send; + + assign debugbus = {chan_empty[0], rd_select[0], have_space, + (chan_usedw >= 10'd504), (chan_usedw ==0), + ready_to_send, state[1:0]}; + + assign true_rssi = (rd_select[1]) ? ((rd_select[0]) ? rssi_3:rssi_2) : + ((rd_select[0]) ? rssi_1:rssi_0); + assign true_channel = (check_next == 4'd0 ? 5'h1f : {1'd0, check_next - 4'd1}); + assign ready_to_send = (chan_usedw >= 10'd504) || (chan_usedw == 0) || + ((rd_select == NUM_CHAN)&&(chan_usedw > 0)); + + always @(posedge rxclk) + begin + if (reset) + begin + overrun <= 0; + WR <= 0; + rd_select <= 0; + chan_rdreq <= 0; + timestamp_complete <= 0; + check_next <= 0; + state <= `IDLE; + end + else case (state) + `IDLE: begin + chan_rdreq <= #1 0; + //check if the channel is full + if(~chan_empty[check_next]) + begin + if (have_space) + begin + //transmit if the usb buffer have space + //check if we should send + if (ready_to_send) + state <= #1 `HEADER1; + + overrun[check_next] <= 0; + end + else + begin + state <= #1 `IDLE; + overrun[check_next] <= 1; + end + rd_select <= #1 check_next; + end + check_next <= #1 (check_next == channels ? 4'd0 : check_next + 4'd1); + end + + `HEADER1: begin + fifodata[`PAYLOAD_LEN] <= #1 9'd504; + payload_len <= #1 9'd504; + fifodata[`TAG] <= #1 0; + fifodata[`MBZ] <= #1 0; + WR <= #1 1; + + state <= #1 `HEADER2; + read_length <= #1 0; + end + + `HEADER2: begin + fifodata[`CHAN] <= #1 true_channel; + fifodata[`RSSI] <= #1 true_rssi[5:0]; + fifodata[`BURST] <= #1 0; + fifodata[`DROPPED] <= #1 0; + fifodata[`UNDERRUN] <= #1 (check_next == 0) ? 1'b0 : underrun[true_channel]; + fifodata[`OVERRUN] <= #1 (check_next == 0) ? 1'b0 : overrun[true_channel]; + state <= #1 `TIMESTAMP; + end + + `TIMESTAMP: begin + fifodata <= #1 (timestamp_complete ? timestamp_clock[31:16] : timestamp_clock[15:0]); + timestamp_complete <= #1 ~timestamp_complete; + + if (~timestamp_complete) + chan_rdreq <= #1 1; + + state <= #1 (timestamp_complete ? `FORWARD : `TIMESTAMP); + end + + `FORWARD: begin + read_length <= #1 read_length + 9'd2; + fifodata <= #1 (read_length >= payload_len ? 16'hDEAD : chan_fifodata); + + if (read_length >= `MAXPAYLOAD) + begin + WR <= #1 0; + state <= #1 `IDLE; + chan_rdreq <= #1 0; + end + else if (read_length == payload_len - 4) + chan_rdreq <= #1 0; + end + + default: begin + //handling error state + state <= `IDLE; + end + endcase + end +endmodule + diff --git a/usrp/fpga/inband_lib/register_io.v b/usrp/fpga/inband_lib/register_io.v new file mode 100755 index 00000000..2b0cd173 --- /dev/null +++ b/usrp/fpga/inband_lib/register_io.v @@ -0,0 +1,82 @@ +module register_io + (clk, reset, enable, addr, datain, dataout, debugbus, addr_wr, data_wr, strobe_wr, + rssi_0, rssi_1, rssi_2, rssi_3, threshhold, rssi_wait, reg_0, reg_1, reg_2, reg_3, + debug_en, misc, txmux); + + input clk; + input reset; + input wire [1:0] enable; + input wire [6:0] addr; + input wire [31:0] datain; + output reg [31:0] dataout; + output wire [15:0] debugbus; + output reg [6:0] addr_wr; + output reg [31:0] data_wr; + output wire strobe_wr; + input wire [31:0] rssi_0; + input wire [31:0] rssi_1; + input wire [31:0] rssi_2; + input wire [31:0] rssi_3; + output wire [31:0] threshhold; + output wire [31:0] rssi_wait; + input wire [15:0] reg_0; + input wire [15:0] reg_1; + input wire [15:0] reg_2; + input wire [15:0] reg_3; + input wire [3:0] debug_en; + input wire [7:0] misc; + input wire [31:0] txmux; + + reg strobe; + wire [31:0] out[2:1]; + assign debugbus = {clk, enable, addr[2:0], datain[4:0], dataout[4:0]}; + assign threshhold = out[1]; + assign rssi_wait = out[2]; + assign strobe_wr = strobe; + + always @(*) + if (reset | ~enable[1]) + begin + strobe <= 0; + dataout <= 0; + end + else + begin + if (enable[0]) + begin + //read + if (addr <= 7'd52 && addr > 7'd50) + dataout <= out[addr-7'd50]; + else + dataout <= 32'hFFFFFFFF; + strobe <= 0; + end + else + begin + //write + dataout <= dataout; + strobe <= 1; + data_wr <= datain; + addr_wr <= addr; + end + end + +//register declarations + /*setting_reg #(50) setting_reg0(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[0]));*/ + setting_reg #(51) setting_reg1(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[1])); + setting_reg #(52) setting_reg2(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[2])); + /*setting_reg #(53) setting_reg3(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[3])); + setting_reg #(54) setting_reg4(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[4])); + setting_reg #(55) setting_reg5(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[5])); + setting_reg #(56) setting_reg6(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[6])); + setting_reg #(57) setting_reg7(.clock(clk),.reset(reset), + .strobe(strobe_wr),.addr(addr_wr),.in(data_wr),.out(out[7]));*/ + +endmodule diff --git a/usrp/fpga/inband_lib/rx_buffer_inband.v b/usrp/fpga/inband_lib/rx_buffer_inband.v new file mode 100755 index 00000000..cbd2d895 --- /dev/null +++ b/usrp/fpga/inband_lib/rx_buffer_inband.v @@ -0,0 +1,209 @@ +//`include "../../firmware/include/fpga_regs_common.v" +//`include "../../firmware/include/fpga_regs_standard.v" +module rx_buffer_inband + ( input usbclk, + input bus_reset, + input reset, // DSP side reset (used here), do not reset registers + input reset_regs, //Only reset registers + output [15:0] usbdata, + input RD, + output wire have_pkt_rdy, + output reg rx_overrun, + input wire [3:0] channels, + input wire [15:0] ch_0, + input wire [15:0] ch_1, + input wire [15:0] ch_2, + input wire [15:0] ch_3, + input wire [15:0] ch_4, + input wire [15:0] ch_5, + input wire [15:0] ch_6, + input wire [15:0] ch_7, + input rxclk, + input rxstrobe, + input clear_status, + input [6:0] serial_addr, + input [31:0] serial_data, + input serial_strobe, + output wire [15:0] debugbus, + + //Connection with tx_inband + input rx_WR, + input [15:0] rx_databus, + input rx_WR_done, + output reg rx_WR_enabled, + //signal strength + input wire [31:0] rssi_0, input wire [31:0] rssi_1, + input wire [31:0] rssi_2, input wire [31:0] rssi_3, + input wire [1:0] tx_underrun + ); + + parameter NUM_CHAN = 1; + genvar i ; + + // FX2 Bug Fix + reg [8:0] read_count; + always @(negedge usbclk) + if(bus_reset) + read_count <= #1 9'd0; + else if(RD & ~read_count[8]) + read_count <= #1 read_count + 9'd1; + else + read_count <= #1 RD ? read_count : 9'b0; + + // Time counter + reg [31:0] timestamp_clock; + always @(posedge rxclk) + if (reset) + timestamp_clock <= 0; + else + timestamp_clock <= timestamp_clock + 1; + + // USB side fifo + wire [11:0] rdusedw; + wire [11:0] wrusedw; + wire [15:0] fifodata; + wire [15:0] fifodata_il[0:NUM_CHAN]; + wire WR; + wire have_space; + reg sel; + reg wr; + + always@(posedge rxclk) + begin + if(reset) + begin + sel<=1; + wr<=0; + end + else if(rxstrobe) + begin + sel<=0; + wr<=1; + end + else if(wr&~sel) + sel<=1; + else if(wr&sel) + wr<=0; + else + wr<=0; + end + + assign fifodata_il[0] = (sel)?ch_1:ch_0; + assign fifodata_il[1] = (sel)?ch_3:ch_2; + + fifo_4kx16_dc rx_usb_fifo ( + .aclr ( reset ), + .data ( fifodata ), + .rdclk ( ~usbclk ), + .rdreq ( RD & ~read_count[8] ), + .wrclk ( rxclk ), + .wrreq ( WR ), + .q ( usbdata ), + .rdempty ( ), + .rdusedw ( rdusedw ), + .wrfull ( ), + .wrusedw ( wrusedw ) ); + + assign have_pkt_rdy = (rdusedw >= 12'd256); + assign have_space = (wrusedw < 12'd760); + + // Rx side fifos + // These are of size [NUM_CHAN:0] because the extra channel is used for the + // RX command channel. If there were no command channel, they would be + // NUM_CHAN-1. + wire chan_rdreq; + wire [15:0] chan_fifodata; + wire [9:0] chan_usedw; + wire [NUM_CHAN:0] chan_empty; + wire [3:0] rd_select; + wire [NUM_CHAN:0] rx_full; + + packet_builder #(NUM_CHAN) rx_pkt_builer ( + .rxclk ( rxclk ), + .reset ( reset ), + .timestamp_clock ( timestamp_clock ), + .channels ( NUM_CHAN ), + .chan_rdreq ( chan_rdreq ), + .chan_fifodata ( chan_fifodata ), + .chan_empty ( chan_empty ), + .rd_select ( rd_select ), + .chan_usedw ( chan_usedw ), + .WR ( WR ), + .fifodata ( fifodata ), + .have_space ( have_space ), + .rssi_0(rssi_0), .rssi_1(rssi_1), + .rssi_2(rssi_2),.rssi_3(rssi_3), .debugbus(debug), + .underrun(tx_underrun)); + + // Detect overrun + always @(posedge rxclk) + if(reset) + rx_overrun <= 1'b0; + else if(rx_full[0]) + rx_overrun <= 1'b1; + else if(clear_status) + rx_overrun <= 1'b0; + + + // FIXME: what is the purpose of these two lines? + wire [15:0]ch[NUM_CHAN:0]; + assign ch[0] = ch_0; + + wire cmd_empty; + + always @(posedge rxclk) + if(reset) + rx_WR_enabled <= 1; + else if(cmd_empty) + rx_WR_enabled <= 1; + else if(rx_WR_done) + rx_WR_enabled <= 0; + + + // Of Size 0:NUM_CHAN due to extra command channel. + wire [15:0] dataout [0:NUM_CHAN]; + wire [9:0] usedw [0:NUM_CHAN]; + wire empty[0:NUM_CHAN]; + + generate for (i = 0 ; i < NUM_CHAN; i = i + 1) + begin : generate_channel_fifos + + wire rdreq; + + assign rdreq = (rd_select == i) & chan_rdreq; + + fifo_1kx16 rx_chan_fifo ( + .aclr ( reset ), + .clock ( rxclk ), + .data ( fifodata_il[i] ), + .rdreq ( rdreq ), + .wrreq ( ~rx_full[i] & wr), + .empty (empty[i]), + .full (rx_full[i]), + .q ( dataout[i]), + .usedw ( usedw[i]), + .almost_empty(chan_empty[i]) + ); + end + endgenerate + + wire [7:0] debug; + + fifo_1kx16 rx_cmd_fifo ( + .aclr ( reset ), + .clock ( rxclk ), + .data ( rx_databus ), + .rdreq ( (rd_select == NUM_CHAN) & chan_rdreq ), + .wrreq ( rx_WR & rx_WR_enabled), + .empty ( cmd_empty), + .full ( rx_full[NUM_CHAN] ), + .q ( dataout[NUM_CHAN]), + .usedw ( usedw[NUM_CHAN] ) + ); + + assign chan_empty[NUM_CHAN] = cmd_empty | rx_WR_enabled; + assign chan_fifodata = dataout[rd_select]; + assign chan_usedw = usedw[rd_select]; + assign debugbus = {4'd0, rxclk, rxstrobe, rx_full[0], rx_full[1], sel, wr}; + +endmodule diff --git a/usrp/fpga/inband_lib/tx_buffer_inband.v b/usrp/fpga/inband_lib/tx_buffer_inband.v new file mode 100755 index 00000000..2dd75f42 --- /dev/null +++ b/usrp/fpga/inband_lib/tx_buffer_inband.v @@ -0,0 +1,143 @@ +module tx_buffer_inband + ( //System + input wire usbclk, input wire bus_reset, input wire reset, + input wire [15:0] usbdata, output wire have_space, input wire [3:0] channels, + //output transmit signals + output wire [15:0] tx_i_0, output wire [15:0] tx_q_0, + output wire [15:0] tx_i_1, output wire [15:0] tx_q_1, + output wire [15:0] tx_i_2, output wire [15:0] tx_q_2, + output wire [15:0] tx_i_3, output wire [15:0] tx_q_3, + input wire txclk, input wire txstrobe, input wire WR, + input wire clear_status, output wire tx_empty, output wire [15:0] debugbus, + //command reader io + output wire [15:0] rx_databus, output wire rx_WR, output wire rx_WR_done, + input wire rx_WR_enabled, + //register io + output wire [1:0] reg_io_enable, output wire [31:0] reg_data_in, output wire [6:0] reg_addr, + input wire [31:0] reg_data_out, + //input characteristic signals + input wire [31:0] rssi_0, input wire [31:0] rssi_1, input wire [31:0] rssi_2, + input wire [31:0] rssi_3, input wire [31:0] rssi_wait, input wire [31:0] threshhold, + output wire [1:0] tx_underrun, + //system stop + output wire stop, output wire [15:0] stop_time); + + parameter NUM_CHAN = 1 ; + + /* To generate channel readers */ + genvar i ; + + /* These will eventually be external register */ + reg [31:0] timestamp_clock ; + wire [7:0] txstrobe_rate [NUM_CHAN-1:0] ; + wire [31:0] rssi [3:0]; + assign rssi[0] = rssi_0; + assign rssi[1] = rssi_1; + assign rssi[2] = rssi_2; + assign rssi[3] = rssi_3; + + always @(posedge txclk) + if (reset) + timestamp_clock <= 0; + else + timestamp_clock <= timestamp_clock + 1; + + + /* Connections between tx_usb_fifo_reader and + cnannel/command processing blocks */ + wire [31:0] tx_data_bus ; + wire [NUM_CHAN:0] chan_WR ; + wire [NUM_CHAN:0] chan_done ; + + /* Connections between data block and the + FX2/TX chains */ + wire [NUM_CHAN:0] chan_underrun; + wire [NUM_CHAN:0] chan_txempty; + + /* Conections between tx_data_packet_fifo and + its reader + strobe generator */ + wire [31:0] chan_fifodata [NUM_CHAN:0] ; + wire chan_pkt_waiting [NUM_CHAN:0] ; + wire chan_rdreq [NUM_CHAN:0] ; + wire chan_skip [NUM_CHAN:0] ; + wire chan_have_space [NUM_CHAN:0] ; + + wire [14:0] debug [NUM_CHAN:0]; + + /* Outputs to transmit chains */ + wire [15:0] tx_i [NUM_CHAN:0] ; + wire [15:0] tx_q [NUM_CHAN:0] ; + + assign tx_i[NUM_CHAN] = 0; + assign tx_q[NUM_CHAN] = 0; + + assign have_space = chan_have_space[0] & chan_have_space[1]; + assign tx_empty = chan_txempty[0] & chan_txempty[1] ; + + assign tx_i_0 = chan_txempty[0] ? 16'b0 : tx_i[0] ; + assign tx_q_0 = chan_txempty[0] ? 16'b0 : tx_q[0] ; + assign tx_i_1 = chan_txempty[1] ? 16'b0 : tx_i[1] ; + assign tx_q_1 = chan_txempty[1] ? 16'b0 : tx_q[1] ; + + assign tx_q_2 = 16'b0 ; + assign tx_i_2 = 16'b0 ; + assign tx_q_3 = 16'b0 ; + assign tx_i_3 = 16'b0 ; + assign tx_i_3 = 16'b0 ; + + assign debugbus = {have_space, txclk, WR, WR_final, chan_WR, chan_done, + chan_pkt_waiting[0], chan_pkt_waiting[1], + chan_rdreq[0], chan_rdreq[1], chan_txempty[0], chan_txempty[1]}; + + wire [31:0] usbdata_final; + wire WR_final; + + tx_packer tx_usb_packer + (.bus_reset(bus_reset), .usbclk(usbclk), .WR_fx2(WR), + .usbdata(usbdata), .reset(reset), .txclk(txclk), + .usbdata_final(usbdata_final), .WR_final(WR_final)); + + channel_demux #(NUM_CHAN) channel_demuxer + (.usbdata_final(usbdata_final), .WR_final(WR_final), + .reset(reset), .txclk(txclk), .WR_channel(chan_WR), + .WR_done_channel(chan_done), .ram_data(tx_data_bus)); + + generate for (i = 0 ; i < NUM_CHAN; i = i + 1) + begin : generate_channel_readers + assign tx_underrun[i] = chan_underrun[i]; + + channel_ram tx_data_packet_fifo + (.reset(reset), .txclk(txclk), .datain(tx_data_bus), + .WR(chan_WR[i]), .WR_done(chan_done[i]), + .have_space(chan_have_space[i]), .dataout(chan_fifodata[i]), + .packet_waiting(chan_pkt_waiting[i]), .RD(chan_rdreq[i]), + .RD_done(chan_skip[i])); + + chan_fifo_reader tx_chan_reader + (.reset(reset), .tx_clock(txclk), .tx_strobe(txstrobe), + .timestamp_clock(timestamp_clock), .samples_format(4'b0), + .tx_q(tx_q[i]), .tx_i(tx_i[i]), .underrun(chan_underrun[i]), + .skip(chan_skip[i]), .rdreq(chan_rdreq[i]), + .fifodata(chan_fifodata[i]), .pkt_waiting(chan_pkt_waiting[i]), + .tx_empty(chan_txempty[i]), .rssi(rssi[i]), .debug(debug[i]), + .threshhold(threshhold), .rssi_wait(rssi_wait)); + end + endgenerate + + + channel_ram tx_cmd_packet_fifo + (.reset(reset), .txclk(txclk), .datain(tx_data_bus), .WR(chan_WR[NUM_CHAN]), + .WR_done(chan_done[NUM_CHAN]), .have_space(chan_have_space[NUM_CHAN]), + .dataout(chan_fifodata[NUM_CHAN]), .packet_waiting(chan_pkt_waiting[NUM_CHAN]), + .RD(chan_rdreq[NUM_CHAN]), .RD_done(chan_skip[NUM_CHAN])); + + cmd_reader tx_cmd_reader + (.reset(reset), .txclk(txclk), .timestamp_clock(timestamp_clock), .skip(chan_skip[NUM_CHAN]), + .rdreq(chan_rdreq[NUM_CHAN]), .fifodata(chan_fifodata[NUM_CHAN]), + .pkt_waiting(chan_pkt_waiting[NUM_CHAN]), .rx_databus(rx_databus), + .rx_WR(rx_WR), .rx_WR_done(rx_WR_done), .rx_WR_enabled(rx_WR_enabled), + .reg_data_in(reg_data_in), .reg_data_out(reg_data_out), .reg_addr(reg_addr), + .reg_io_enable(reg_io_enable), .debug(debug[NUM_CHAN]), .stop(stop), .stop_time(stop_time)); + +endmodule // tx_buffer + diff --git a/usrp/fpga/inband_lib/tx_packer.v b/usrp/fpga/inband_lib/tx_packer.v new file mode 100644 index 00000000..2f19b21f --- /dev/null +++ b/usrp/fpga/inband_lib/tx_packer.v @@ -0,0 +1,119 @@ +module tx_packer + ( //FX2 Side + input bus_reset, + input usbclk, + input WR_fx2, + input [15:0]usbdata, + + // TX Side + input reset, + input txclk, + output reg [31:0] usbdata_final, + output reg WR_final); + + reg [8:0] write_count; + + /* Fix FX2 bug */ + always @(posedge usbclk) + begin + if(bus_reset) // Use bus reset because this is on usbclk + write_count <= #1 0; + else if(WR_fx2 & ~write_count[8]) + write_count <= #1 write_count + 9'd1; + else + write_count <= #1 WR_fx2 ? write_count : 9'b0; + end + + reg WR_fx2_fixed; + reg [15:0]usbdata_fixed; + + always @(posedge usbclk) + begin + WR_fx2_fixed <= WR_fx2 & ~write_count[8]; + usbdata_fixed <= usbdata; + end + + /* Used to convert 16 bits bus_data to the 32 bits wide fifo */ + reg word_complete ; + reg [15:0] usbdata_delayed ; + reg writing ; + wire [31:0] usbdata_packed ; + wire WR_packed ; + + always @(posedge usbclk) + begin + if (bus_reset) + begin + word_complete <= 0 ; + writing <= 0 ; + end + else if (WR_fx2_fixed) + begin + writing <= 1 ; + if (word_complete) + word_complete <= 0 ; + else + begin + usbdata_delayed <= usbdata_fixed ; + word_complete <= 1 ; + end + end + else + writing <= 0 ; + end + + assign usbdata_packed = {usbdata_fixed, usbdata_delayed} ; + assign WR_packed = word_complete & writing ; + + /* Make sure data are sync with usbclk */ + reg [31:0]usbdata_usbclk; + reg WR_usbclk; + + always @(posedge usbclk) + begin + if (WR_packed) + usbdata_usbclk <= usbdata_packed; + WR_usbclk <= WR_packed; + end + + /* Cross clock boundaries */ + reg [31:0] usbdata_tx ; + reg WR_tx; + reg WR_1; + reg WR_2; + + always @(posedge txclk) usbdata_tx <= usbdata_usbclk; + + always @(posedge txclk) + if (reset) + WR_1 <= 0; + else + WR_1 <= WR_usbclk; + + always @(posedge txclk) + if (reset) + WR_2 <= 0; + else + WR_2 <= WR_1; + + always @(posedge txclk) + begin + if (reset) + WR_tx <= 0; + else + WR_tx <= WR_1 & ~WR_2; + end + + always @(posedge txclk) + begin + if (reset) + WR_final <= 0; + else + begin + WR_final <= WR_tx; + if (WR_tx) + usbdata_final <= usbdata_tx; + end + end + +endmodule diff --git a/usrp/fpga/inband_lib/usb_packet_fifo.v b/usrp/fpga/inband_lib/usb_packet_fifo.v new file mode 100755 index 00000000..c416e2bd --- /dev/null +++ b/usrp/fpga/inband_lib/usb_packet_fifo.v @@ -0,0 +1,112 @@ +module usb_packet_fifo + ( input reset, + input clock_in, + input clock_out, + input [15:0]ram_data_in, + input write_enable, + output reg [15:0]ram_data_out, + output reg pkt_waiting, + output reg have_space, + input read_enable, + input skip_packet ) ; + + /* Some parameters for usage later on */ + parameter DATA_WIDTH = 16 ; + parameter NUM_PACKETS = 4 ; + + /* Create the RAM here */ + reg [DATA_WIDTH-1:0] usb_ram [256*NUM_PACKETS-1:0] ; + + /* Create the address signals */ + reg [7-2+NUM_PACKETS:0] usb_ram_ain ; + reg [7:0] usb_ram_offset ; + reg [1:0] usb_ram_packet ; + + wire [7-2+NUM_PACKETS:0] usb_ram_aout ; + reg isfull; + + assign usb_ram_aout = {usb_ram_packet,usb_ram_offset} ; + + // Check if there is one full packet to process + always @(usb_ram_ain, usb_ram_aout) + begin + if (reset) + pkt_waiting <= 0; + else if (usb_ram_ain == usb_ram_aout) + pkt_waiting <= isfull; + else if (usb_ram_ain > usb_ram_aout) + pkt_waiting <= (usb_ram_ain - usb_ram_aout) >= 256; + else + pkt_waiting <= (usb_ram_ain + 10'b1111111111 - usb_ram_aout) >= 256; + end + + // Check if there is room + always @(usb_ram_ain, usb_ram_aout) + begin + if (reset) + have_space <= 1; + else if (usb_ram_ain == usb_ram_aout) + have_space <= ~isfull; + else if (usb_ram_ain > usb_ram_aout) + have_space <= (usb_ram_ain - usb_ram_aout) <= 256 * (NUM_PACKETS - 1); + else + have_space <= (usb_ram_aout - usb_ram_ain) >= 256; + end + + /* RAM Write Address process */ + always @(posedge clock_in) + begin + if( reset ) + usb_ram_ain <= 0 ; + else + if( write_enable ) + begin + usb_ram_ain <= usb_ram_ain + 1 ; + if (usb_ram_ain + 1 == usb_ram_aout) + isfull <= 1; + end + end + + /* RAM Writing process */ + always @(posedge clock_in) + begin + if( write_enable ) + begin + usb_ram[usb_ram_ain] <= ram_data_in ; + end + end + + /* RAM Read Address process */ + always @(posedge clock_out) + begin + if( reset ) + begin + usb_ram_packet <= 0 ; + usb_ram_offset <= 0 ; + isfull <= 0; + end + else + if( skip_packet ) + begin + usb_ram_packet <= usb_ram_packet + 1 ; + usb_ram_offset <= 0 ; + end + else if(read_enable) + if( usb_ram_offset == 8'b11111111 ) + begin + usb_ram_offset <= 0 ; + usb_ram_packet <= usb_ram_packet + 1 ; + end + else + usb_ram_offset <= usb_ram_offset + 1 ; + if (usb_ram_ain == usb_ram_aout) + isfull <= 0; + end + + /* RAM Reading Process */ + always @(posedge clock_out) + begin + ram_data_out <= usb_ram[usb_ram_aout] ; + end + +endmodule \ No newline at end of file diff --git a/usrp/fpga/megacells/fifo_1kx16.bsf b/usrp/fpga/megacells/fifo_1kx16.bsf new file mode 100755 index 00000000..2de80816 --- /dev/null +++ b/usrp/fpga/megacells/fifo_1kx16.bsf @@ -0,0 +1,107 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2006 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 160) + (text "fifo_1kx16" (rect 51 1 119 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 144 25 156)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 50 45 63)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "rdreq" (rect 0 0 30 14)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 66 44 79)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 90 49 103)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 0 128) + (input) + (text "aclr" (rect 0 0 21 14)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 122 37 135)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 16 128)(line_width 1)) + ) + (port + (pt 160 32) + (output) + (text "q[15..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[15..0]" (rect 105 26 141 39)(font "Arial" (font_size 8))) + (line (pt 160 32)(pt 144 32)(line_width 3)) + ) + (port + (pt 160 56) + (output) + (text "full" (rect 0 0 16 14)(font "Arial" (font_size 8))) + (text "full" (rect 127 50 142 63)(font "Arial" (font_size 8))) + (line (pt 160 56)(pt 144 56)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "empty" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "empty" (rect 112 66 141 79)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 144 72)(line_width 1)) + ) + (port + (pt 160 88) + (output) + (text "almost_empty" (rect 0 0 77 14)(font "Arial" (font_size 8))) + (text "almost_empty" (rect 75 82 141 95)(font "Arial" (font_size 8))) + (line (pt 160 88)(pt 144 88)(line_width 1)) + ) + (port + (pt 160 104) + (output) + (text "usedw[9..0]" (rect 0 0 68 14)(font "Arial" (font_size 8))) + (text "usedw[9..0]" (rect 83 98 136 111)(font "Arial" (font_size 8))) + (line (pt 160 104)(pt 144 104)(line_width 3)) + ) + (drawing + (text "16 bits x 1024 words" (rect 58 132 144 144)(font "Arial" )) + (text "almost_empty < 504" (rect 58 122 144 134)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 144)(line_width 1)) + (line (pt 144 144)(pt 16 144)(line_width 1)) + (line (pt 16 144)(pt 16 16)(line_width 1)) + (line (pt 16 116)(pt 144 116)(line_width 1)) + (line (pt 16 90)(pt 22 96)(line_width 1)) + (line (pt 22 96)(pt 16 102)(line_width 1)) + ) +) diff --git a/usrp/fpga/megacells/fifo_1kx16.cmp b/usrp/fpga/megacells/fifo_1kx16.cmp new file mode 100755 index 00000000..9b2c2c0c --- /dev/null +++ b/usrp/fpga/megacells/fifo_1kx16.cmp @@ -0,0 +1,30 @@ +--Copyright (C) 1991-2006 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +component fifo_1kx16 + PORT + ( + aclr : IN STD_LOGIC ; + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + rdreq : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + almost_empty : OUT STD_LOGIC ; + empty : OUT STD_LOGIC ; + full : OUT STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); + usedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); +end component; diff --git a/usrp/fpga/megacells/fifo_1kx16.inc b/usrp/fpga/megacells/fifo_1kx16.inc new file mode 100755 index 00000000..0b70afe6 --- /dev/null +++ b/usrp/fpga/megacells/fifo_1kx16.inc @@ -0,0 +1,31 @@ +--Copyright (C) 1991-2006 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION fifo_1kx16 +( + aclr, + clock, + data[15..0], + rdreq, + wrreq +) + +RETURNS ( + almost_empty, + empty, + full, + q[15..0], + usedw[9..0] +); diff --git a/usrp/fpga/megacells/fifo_1kx16.v b/usrp/fpga/megacells/fifo_1kx16.v new file mode 100755 index 00000000..4f7e94ef --- /dev/null +++ b/usrp/fpga/megacells/fifo_1kx16.v @@ -0,0 +1,175 @@ +// megafunction wizard: %FIFO% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: scfifo + +// ============================================================ +// File Name: fifo_1kx16.v +// Megafunction Name(s): +// scfifo +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 5.1 Build 213 01/19/2006 SP 1 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2006 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module fifo_1kx16 ( + aclr, + clock, + data, + rdreq, + wrreq, + almost_empty, + empty, + full, + q, + usedw); + + input aclr; + input clock; + input [15:0] data; + input rdreq; + input wrreq; + output almost_empty; + output empty; + output full; + output [15:0] q; + output [9:0] usedw; + + wire [9:0] sub_wire0; + wire sub_wire1; + wire sub_wire2; + wire [15:0] sub_wire3; + wire sub_wire4; + wire [9:0] usedw = sub_wire0[9:0]; + wire empty = sub_wire1; + wire almost_empty = sub_wire2; + wire [15:0] q = sub_wire3[15:0]; + wire full = sub_wire4; + + scfifo scfifo_component ( + .rdreq (rdreq), + .aclr (aclr), + .clock (clock), + .wrreq (wrreq), + .data (data), + .usedw (sub_wire0), + .empty (sub_wire1), + .almost_empty (sub_wire2), + .q (sub_wire3), + .full (sub_wire4) + // synopsys translate_off + , + .sclr (), + .almost_full () + // synopsys translate_on + ); + defparam + scfifo_component.add_ram_output_register = "OFF", + scfifo_component.almost_empty_value = 504, + scfifo_component.intended_device_family = "Cyclone", + scfifo_component.lpm_hint = "RAM_BLOCK_TYPE=M4K", + scfifo_component.lpm_numwords = 1024, + scfifo_component.lpm_showahead = "OFF", + scfifo_component.lpm_type = "scfifo", + scfifo_component.lpm_width = 16, + scfifo_component.lpm_widthu = 10, + scfifo_component.overflow_checking = "ON", + scfifo_component.underflow_checking = "ON", + scfifo_component.use_eab = "ON"; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "1" +// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "504" +// Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "0" +// Retrieval info: PRIVATE: Depth NUMERIC "1024" +// Retrieval info: PRIVATE: Empty NUMERIC "1" +// Retrieval info: PRIVATE: Full NUMERIC "1" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0" +// Retrieval info: PRIVATE: Optimize NUMERIC "2" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "2" +// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0" +// Retrieval info: PRIVATE: UsedW NUMERIC "1" +// Retrieval info: PRIVATE: Width NUMERIC "16" +// Retrieval info: PRIVATE: dc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +// Retrieval info: PRIVATE: rsFull NUMERIC "0" +// Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +// Retrieval info: PRIVATE: sc_aclr NUMERIC "1" +// Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +// Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +// Retrieval info: PRIVATE: wsFull NUMERIC "1" +// Retrieval info: PRIVATE: wsUsedW NUMERIC "0" +// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +// Retrieval info: CONSTANT: ALMOST_EMPTY_VALUE NUMERIC "504" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_HINT STRING "RAM_BLOCK_TYPE=M4K" +// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "1024" +// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +// Retrieval info: CONSTANT: LPM_TYPE STRING "scfifo" +// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "10" +// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON" +// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON" +// Retrieval info: CONSTANT: USE_EAB STRING "ON" +// Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT NODEFVAL aclr +// Retrieval info: USED_PORT: almost_empty 0 0 0 0 OUTPUT NODEFVAL almost_empty +// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +// Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +// Retrieval info: USED_PORT: empty 0 0 0 0 OUTPUT NODEFVAL empty +// Retrieval info: USED_PORT: full 0 0 0 0 OUTPUT NODEFVAL full +// Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0] +// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +// Retrieval info: USED_PORT: usedw 0 0 10 0 OUTPUT NODEFVAL usedw[9..0] +// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +// Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +// Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0 +// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +// Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +// Retrieval info: CONNECT: full 0 0 0 0 @full 0 0 0 0 +// Retrieval info: CONNECT: empty 0 0 0 0 @empty 0 0 0 0 +// Retrieval info: CONNECT: usedw 0 0 10 0 @usedw 0 0 10 0 +// Retrieval info: CONNECT: almost_empty 0 0 0 0 @almost_empty 0 0 0 0 +// Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.inc TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.cmp TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.bsf TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_inst.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_bb.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_waveforms.html FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_wave*.jpg FALSE diff --git a/usrp/fpga/megacells/fifo_1kx16_bb.v b/usrp/fpga/megacells/fifo_1kx16_bb.v new file mode 100755 index 00000000..9d9912bc --- /dev/null +++ b/usrp/fpga/megacells/fifo_1kx16_bb.v @@ -0,0 +1,127 @@ +// megafunction wizard: %FIFO%VBB% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: scfifo + +// ============================================================ +// File Name: fifo_1kx16.v +// Megafunction Name(s): +// scfifo +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 5.1 Build 213 01/19/2006 SP 1 SJ Web Edition +// ************************************************************ + +//Copyright (C) 1991-2006 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + +module fifo_1kx16 ( + aclr, + clock, + data, + rdreq, + wrreq, + almost_empty, + empty, + full, + q, + usedw); + + input aclr; + input clock; + input [15:0] data; + input rdreq; + input wrreq; + output almost_empty; + output empty; + output full; + output [15:0] q; + output [9:0] usedw; + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "1" +// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "504" +// Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "0" +// Retrieval info: PRIVATE: Depth NUMERIC "1024" +// Retrieval info: PRIVATE: Empty NUMERIC "1" +// Retrieval info: PRIVATE: Full NUMERIC "1" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0" +// Retrieval info: PRIVATE: Optimize NUMERIC "2" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "2" +// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0" +// Retrieval info: PRIVATE: UsedW NUMERIC "1" +// Retrieval info: PRIVATE: Width NUMERIC "16" +// Retrieval info: PRIVATE: dc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +// Retrieval info: PRIVATE: rsFull NUMERIC "0" +// Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +// Retrieval info: PRIVATE: sc_aclr NUMERIC "1" +// Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +// Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +// Retrieval info: PRIVATE: wsFull NUMERIC "1" +// Retrieval info: PRIVATE: wsUsedW NUMERIC "0" +// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +// Retrieval info: CONSTANT: ALMOST_EMPTY_VALUE NUMERIC "504" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_HINT STRING "RAM_BLOCK_TYPE=M4K" +// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "1024" +// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +// Retrieval info: CONSTANT: LPM_TYPE STRING "scfifo" +// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "10" +// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON" +// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON" +// Retrieval info: CONSTANT: USE_EAB STRING "ON" +// Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT NODEFVAL aclr +// Retrieval info: USED_PORT: almost_empty 0 0 0 0 OUTPUT NODEFVAL almost_empty +// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +// Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +// Retrieval info: USED_PORT: empty 0 0 0 0 OUTPUT NODEFVAL empty +// Retrieval info: USED_PORT: full 0 0 0 0 OUTPUT NODEFVAL full +// Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0] +// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +// Retrieval info: USED_PORT: usedw 0 0 10 0 OUTPUT NODEFVAL usedw[9..0] +// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +// Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +// Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0 +// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +// Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +// Retrieval info: CONNECT: full 0 0 0 0 @full 0 0 0 0 +// Retrieval info: CONNECT: empty 0 0 0 0 @empty 0 0 0 0 +// Retrieval info: CONNECT: usedw 0 0 10 0 @usedw 0 0 10 0 +// Retrieval info: CONNECT: almost_empty 0 0 0 0 @almost_empty 0 0 0 0 +// Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.inc TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.cmp TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16.bsf TRUE FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_inst.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_bb.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_waveforms.html FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_1kx16_wave*.jpg FALSE diff --git a/usrp/fpga/megacells/fifo_1kx16_inst.v b/usrp/fpga/megacells/fifo_1kx16_inst.v new file mode 100755 index 00000000..73662dea --- /dev/null +++ b/usrp/fpga/megacells/fifo_1kx16_inst.v @@ -0,0 +1,12 @@ +fifo_1kx16 fifo_1kx16_inst ( + .aclr ( aclr_sig ), + .clock ( clock_sig ), + .data ( data_sig ), + .rdreq ( rdreq_sig ), + .wrreq ( wrreq_sig ), + .almost_empty ( almost_empty_sig ), + .empty ( empty_sig ), + .full ( full_sig ), + .q ( q_sig ), + .usedw ( usedw_sig ) + ); diff --git a/usrp/fpga/megacells/fifo_4k_18.v b/usrp/fpga/megacells/fifo_4k_18.v new file mode 100755 index 00000000..ad76121b --- /dev/null +++ b/usrp/fpga/megacells/fifo_4k_18.v @@ -0,0 +1,186 @@ +// megafunction wizard: %FIFO% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: dcfifo + +// ============================================================ +// File Name: fifo_4k_18.v +// Megafunction Name(s): +// dcfifo +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 7.1 Build 178 06/25/2007 SP 1 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2007 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module fifo_4k_18 ( + aclr, + data, + rdclk, + rdreq, + wrclk, + wrreq, + q, + rdempty, + rdusedw, + wrfull, + wrusedw); + + input aclr; + input [17:0] data; + input rdclk; + input rdreq; + input wrclk; + input wrreq; + output [17:0] q; + output rdempty; + output [11:0] rdusedw; + output wrfull; + output [11:0] wrusedw; + + wire sub_wire0; + wire [11:0] sub_wire1; + wire sub_wire2; + wire [17:0] sub_wire3; + wire [11:0] sub_wire4; + wire rdempty = sub_wire0; + wire [11:0] wrusedw = sub_wire1[11:0]; + wire wrfull = sub_wire2; + wire [17:0] q = sub_wire3[17:0]; + wire [11:0] rdusedw = sub_wire4[11:0]; + + dcfifo dcfifo_component ( + .wrclk (wrclk), + .rdreq (rdreq), + .aclr (aclr), + .rdclk (rdclk), + .wrreq (wrreq), + .data (data), + .rdempty (sub_wire0), + .wrusedw (sub_wire1), + .wrfull (sub_wire2), + .q (sub_wire3), + .rdusedw (sub_wire4) + // synopsys translate_off + , + .rdfull (), + .wrempty () + // synopsys translate_on + ); + defparam + dcfifo_component.add_ram_output_register = "OFF", + dcfifo_component.clocks_are_synchronized = "FALSE", + dcfifo_component.intended_device_family = "Cyclone", + dcfifo_component.lpm_numwords = 4096, + dcfifo_component.lpm_showahead = "ON", + dcfifo_component.lpm_type = "dcfifo", + dcfifo_component.lpm_width = 18, + dcfifo_component.lpm_widthu = 12, + dcfifo_component.overflow_checking = "OFF", + dcfifo_component.underflow_checking = "OFF", + dcfifo_component.use_eab = "ON"; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +// Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "4" +// Retrieval info: PRIVATE: Depth NUMERIC "4096" +// Retrieval info: PRIVATE: Empty NUMERIC "1" +// Retrieval info: PRIVATE: Full NUMERIC "1" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "0" +// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: Optimize NUMERIC "2" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: UsedW NUMERIC "1" +// Retrieval info: PRIVATE: Width NUMERIC "18" +// Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +// Retrieval info: PRIVATE: diff_widths NUMERIC "0" +// Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +// Retrieval info: PRIVATE: output_width NUMERIC "18" +// Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +// Retrieval info: PRIVATE: rsFull NUMERIC "0" +// Retrieval info: PRIVATE: rsUsedW NUMERIC "1" +// Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +// Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +// Retrieval info: PRIVATE: wsFull NUMERIC "1" +// Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +// Retrieval info: CONSTANT: CLOCKS_ARE_SYNCHRONIZED STRING "FALSE" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "4096" +// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "ON" +// Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "18" +// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "12" +// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: USE_EAB STRING "ON" +// Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +// Retrieval info: USED_PORT: data 0 0 18 0 INPUT NODEFVAL data[17..0] +// Retrieval info: USED_PORT: q 0 0 18 0 OUTPUT NODEFVAL q[17..0] +// Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +// Retrieval info: USED_PORT: rdempty 0 0 0 0 OUTPUT NODEFVAL rdempty +// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +// Retrieval info: USED_PORT: rdusedw 0 0 12 0 OUTPUT NODEFVAL rdusedw[11..0] +// Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +// Retrieval info: USED_PORT: wrfull 0 0 0 0 OUTPUT NODEFVAL wrfull +// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +// Retrieval info: USED_PORT: wrusedw 0 0 12 0 OUTPUT NODEFVAL wrusedw[11..0] +// Retrieval info: CONNECT: @data 0 0 18 0 data 0 0 18 0 +// Retrieval info: CONNECT: q 0 0 18 0 @q 0 0 18 0 +// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +// Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +// Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +// Retrieval info: CONNECT: rdempty 0 0 0 0 @rdempty 0 0 0 0 +// Retrieval info: CONNECT: rdusedw 0 0 12 0 @rdusedw 0 0 12 0 +// Retrieval info: CONNECT: wrfull 0 0 0 0 @wrfull 0 0 0 0 +// Retrieval info: CONNECT: wrusedw 0 0 12 0 @wrusedw 0 0 12 0 +// Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18_bb.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18_waveforms.html FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4k_18_wave*.jpg FALSE +// Retrieval info: LIB_FILE: altera_mf diff --git a/usrp/fpga/megacells/fifo_4kx16_dc.bsf b/usrp/fpga/megacells/fifo_4kx16_dc.bsf new file mode 100755 index 00000000..b80add8d --- /dev/null +++ b/usrp/fpga/megacells/fifo_4kx16_dc.bsf @@ -0,0 +1,117 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2006 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 184) + (text "fifo_4kx16_dc" (rect 41 1 134 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 168 25 180)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 50 45 63)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "wrclk" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "wrclk" (rect 26 66 48 79)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "rdreq" (rect 0 0 30 14)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 98 44 111)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "rdclk" (rect 0 0 27 14)(font "Arial" (font_size 8))) + (text "rdclk" (rect 26 114 47 127)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "aclr" (rect 0 0 21 14)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 154 37 167)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 16 160)(line_width 1)) + ) + (port + (pt 160 40) + (output) + (text "wrfull" (rect 0 0 33 14)(font "Arial" (font_size 8))) + (text "wrfull" (rect 113 34 138 47)(font "Arial" (font_size 8))) + (line (pt 160 40)(pt 144 40)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "wrusedw[11..0]" (rect 0 0 92 14)(font "Arial" (font_size 8))) + (text "wrusedw[11..0]" (rect 63 66 132 79)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 144 72)(line_width 3)) + ) + (port + (pt 160 96) + (output) + (text "q[15..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[15..0]" (rect 105 90 141 103)(font "Arial" (font_size 8))) + (line (pt 160 96)(pt 144 96)(line_width 3)) + ) + (port + (pt 160 120) + (output) + (text "rdempty" (rect 0 0 46 14)(font "Arial" (font_size 8))) + (text "rdempty" (rect 102 114 140 127)(font "Arial" (font_size 8))) + (line (pt 160 120)(pt 144 120)(line_width 1)) + ) + (port + (pt 160 136) + (output) + (text "rdusedw[11..0]" (rect 0 0 87 14)(font "Arial" (font_size 8))) + (text "rdusedw[11..0]" (rect 67 130 135 143)(font "Arial" (font_size 8))) + (line (pt 160 136)(pt 144 136)(line_width 3)) + ) + (drawing + (text "(ack)" (rect 51 99 72 111)(font "Arial" )) + (text "16 bits x 4096 words" (rect 58 156 144 168)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 168)(line_width 1)) + (line (pt 144 168)(pt 16 168)(line_width 1)) + (line (pt 16 168)(pt 16 16)(line_width 1)) + (line (pt 16 84)(pt 144 84)(line_width 1)) + (line (pt 16 148)(pt 144 148)(line_width 1)) + (line (pt 16 66)(pt 22 72)(line_width 1)) + (line (pt 22 72)(pt 16 78)(line_width 1)) + (line (pt 16 114)(pt 22 120)(line_width 1)) + (line (pt 22 120)(pt 16 126)(line_width 1)) + ) +) diff --git a/usrp/fpga/megacells/fifo_4kx16_dc.cmp b/usrp/fpga/megacells/fifo_4kx16_dc.cmp new file mode 100755 index 00000000..356de4d6 --- /dev/null +++ b/usrp/fpga/megacells/fifo_4kx16_dc.cmp @@ -0,0 +1,31 @@ +--Copyright (C) 1991-2006 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +component fifo_4kx16_dc + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); + rdempty : OUT STD_LOGIC ; + rdusedw : OUT STD_LOGIC_VECTOR (11 DOWNTO 0); + wrfull : OUT STD_LOGIC ; + wrusedw : OUT STD_LOGIC_VECTOR (11 DOWNTO 0) + ); +end component; diff --git a/usrp/fpga/megacells/fifo_4kx16_dc.inc b/usrp/fpga/megacells/fifo_4kx16_dc.inc new file mode 100755 index 00000000..c14c0183 --- /dev/null +++ b/usrp/fpga/megacells/fifo_4kx16_dc.inc @@ -0,0 +1,32 @@ +--Copyright (C) 1991-2006 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION fifo_4kx16_dc +( + aclr, + data[15..0], + rdclk, + rdreq, + wrclk, + wrreq +) + +RETURNS ( + q[15..0], + rdempty, + rdusedw[11..0], + wrfull, + wrusedw[11..0] +); diff --git a/usrp/fpga/megacells/fifo_4kx16_dc.v b/usrp/fpga/megacells/fifo_4kx16_dc.v new file mode 100755 index 00000000..1f09000e --- /dev/null +++ b/usrp/fpga/megacells/fifo_4kx16_dc.v @@ -0,0 +1,178 @@ +// megafunction wizard: %FIFO% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: dcfifo + +// ============================================================ +// File Name: fifo_4kx16_dc.v +// Megafunction Name(s): +// dcfifo +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 5.1 Build 213 01/19/2006 SP 1 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2006 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module fifo_4kx16_dc ( + aclr, + data, + rdclk, + rdreq, + wrclk, + wrreq, + q, + rdempty, + rdusedw, + wrfull, + wrusedw); + + input aclr; + input [15:0] data; + input rdclk; + input rdreq; + input wrclk; + input wrreq; + output [15:0] q; + output rdempty; + output [11:0] rdusedw; + output wrfull; + output [11:0] wrusedw; + + wire sub_wire0; + wire [11:0] sub_wire1; + wire sub_wire2; + wire [15:0] sub_wire3; + wire [11:0] sub_wire4; + wire rdempty = sub_wire0; + wire [11:0] wrusedw = sub_wire1[11:0]; + wire wrfull = sub_wire2; + wire [15:0] q = sub_wire3[15:0]; + wire [11:0] rdusedw = sub_wire4[11:0]; + + dcfifo dcfifo_component ( + .wrclk (wrclk), + .rdreq (rdreq), + .aclr (aclr), + .rdclk (rdclk), + .wrreq (wrreq), + .data (data), + .rdempty (sub_wire0), + .wrusedw (sub_wire1), + .wrfull (sub_wire2), + .q (sub_wire3), + .rdusedw (sub_wire4) + // synopsys translate_off + , + .wrempty (), + .rdfull () + // synopsys translate_on + ); + defparam + dcfifo_component.add_ram_output_register = "OFF", + dcfifo_component.clocks_are_synchronized = "FALSE", + dcfifo_component.intended_device_family = "Cyclone", + dcfifo_component.lpm_numwords = 4096, + dcfifo_component.lpm_showahead = "ON", + dcfifo_component.lpm_type = "dcfifo", + dcfifo_component.lpm_width = 16, + dcfifo_component.lpm_widthu = 12, + dcfifo_component.overflow_checking = "OFF", + dcfifo_component.underflow_checking = "OFF", + dcfifo_component.use_eab = "ON"; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +// Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "4" +// Retrieval info: PRIVATE: Depth NUMERIC "4096" +// Retrieval info: PRIVATE: Empty NUMERIC "1" +// Retrieval info: PRIVATE: Full NUMERIC "1" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "0" +// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: Optimize NUMERIC "2" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: UsedW NUMERIC "1" +// Retrieval info: PRIVATE: Width NUMERIC "16" +// Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +// Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +// Retrieval info: PRIVATE: rsFull NUMERIC "0" +// Retrieval info: PRIVATE: rsUsedW NUMERIC "1" +// Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +// Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +// Retrieval info: PRIVATE: wsFull NUMERIC "1" +// Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +// Retrieval info: CONSTANT: CLOCKS_ARE_SYNCHRONIZED STRING "FALSE" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "4096" +// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "ON" +// Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "12" +// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: USE_EAB STRING "ON" +// Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +// Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +// Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0] +// Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +// Retrieval info: USED_PORT: rdempty 0 0 0 0 OUTPUT NODEFVAL rdempty +// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +// Retrieval info: USED_PORT: rdusedw 0 0 12 0 OUTPUT NODEFVAL rdusedw[11..0] +// Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +// Retrieval info: USED_PORT: wrfull 0 0 0 0 OUTPUT NODEFVAL wrfull +// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +// Retrieval info: USED_PORT: wrusedw 0 0 12 0 OUTPUT NODEFVAL wrusedw[11..0] +// Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +// Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0 +// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +// Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +// Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +// Retrieval info: CONNECT: rdempty 0 0 0 0 @rdempty 0 0 0 0 +// Retrieval info: CONNECT: rdusedw 0 0 12 0 @rdusedw 0 0 12 0 +// Retrieval info: CONNECT: wrfull 0 0 0 0 @wrfull 0 0 0 0 +// Retrieval info: CONNECT: wrusedw 0 0 12 0 @wrusedw 0 0 12 0 +// Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.inc TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.cmp TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.bsf TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_inst.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_bb.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_waveforms.html FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_wave*.jpg FALSE diff --git a/usrp/fpga/megacells/fifo_4kx16_dc_bb.v b/usrp/fpga/megacells/fifo_4kx16_dc_bb.v new file mode 100755 index 00000000..91c3c322 --- /dev/null +++ b/usrp/fpga/megacells/fifo_4kx16_dc_bb.v @@ -0,0 +1,130 @@ +// megafunction wizard: %FIFO%VBB% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: dcfifo + +// ============================================================ +// File Name: fifo_4kx16_dc.v +// Megafunction Name(s): +// dcfifo +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 5.1 Build 213 01/19/2006 SP 1 SJ Web Edition +// ************************************************************ + +//Copyright (C) 1991-2006 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + +module fifo_4kx16_dc ( + aclr, + data, + rdclk, + rdreq, + wrclk, + wrreq, + q, + rdempty, + rdusedw, + wrfull, + wrusedw); + + input aclr; + input [15:0] data; + input rdclk; + input rdreq; + input wrclk; + input wrreq; + output [15:0] q; + output rdempty; + output [11:0] rdusedw; + output wrfull; + output [11:0] wrusedw; + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +// Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +// Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +// Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +// Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +// Retrieval info: PRIVATE: Clock NUMERIC "4" +// Retrieval info: PRIVATE: Depth NUMERIC "4096" +// Retrieval info: PRIVATE: Empty NUMERIC "1" +// Retrieval info: PRIVATE: Full NUMERIC "1" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +// Retrieval info: PRIVATE: LegacyRREQ NUMERIC "0" +// Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +// Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: Optimize NUMERIC "2" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +// Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "1" +// Retrieval info: PRIVATE: UsedW NUMERIC "1" +// Retrieval info: PRIVATE: Width NUMERIC "16" +// Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +// Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +// Retrieval info: PRIVATE: rsFull NUMERIC "0" +// Retrieval info: PRIVATE: rsUsedW NUMERIC "1" +// Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +// Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +// Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +// Retrieval info: PRIVATE: wsFull NUMERIC "1" +// Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +// Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +// Retrieval info: CONSTANT: CLOCKS_ARE_SYNCHRONIZED STRING "FALSE" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +// Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "4096" +// Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "ON" +// Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +// Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +// Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "12" +// Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "OFF" +// Retrieval info: CONSTANT: USE_EAB STRING "ON" +// Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +// Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +// Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0] +// Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +// Retrieval info: USED_PORT: rdempty 0 0 0 0 OUTPUT NODEFVAL rdempty +// Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +// Retrieval info: USED_PORT: rdusedw 0 0 12 0 OUTPUT NODEFVAL rdusedw[11..0] +// Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +// Retrieval info: USED_PORT: wrfull 0 0 0 0 OUTPUT NODEFVAL wrfull +// Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +// Retrieval info: USED_PORT: wrusedw 0 0 12 0 OUTPUT NODEFVAL wrusedw[11..0] +// Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +// Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0 +// Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +// Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +// Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +// Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +// Retrieval info: CONNECT: rdempty 0 0 0 0 @rdempty 0 0 0 0 +// Retrieval info: CONNECT: rdusedw 0 0 12 0 @rdusedw 0 0 12 0 +// Retrieval info: CONNECT: wrfull 0 0 0 0 @wrfull 0 0 0 0 +// Retrieval info: CONNECT: wrusedw 0 0 12 0 @wrusedw 0 0 12 0 +// Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.inc TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.cmp TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc.bsf TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_inst.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_bb.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_waveforms.html FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL fifo_4kx16_dc_wave*.jpg FALSE diff --git a/usrp/fpga/megacells/fifo_4kx16_dc_inst.v b/usrp/fpga/megacells/fifo_4kx16_dc_inst.v new file mode 100755 index 00000000..566f27a1 --- /dev/null +++ b/usrp/fpga/megacells/fifo_4kx16_dc_inst.v @@ -0,0 +1,13 @@ +fifo_4kx16_dc fifo_4kx16_dc_inst ( + .aclr ( aclr_sig ), + .data ( data_sig ), + .rdclk ( rdclk_sig ), + .rdreq ( rdreq_sig ), + .wrclk ( wrclk_sig ), + .wrreq ( wrreq_sig ), + .q ( q_sig ), + .rdempty ( rdempty_sig ), + .rdusedw ( rdusedw_sig ), + .wrfull ( wrfull_sig ), + .wrusedw ( wrusedw_sig ) + ); diff --git a/usrp/fpga/models/fifo.v b/usrp/fpga/models/fifo.v index a04e7da6..0ade49e9 100644 --- a/usrp/fpga/models/fifo.v +++ b/usrp/fpga/models/fifo.v @@ -77,5 +77,6 @@ module fifo( data, wrreq, rdreq, rdclk, wrclk, aclr, q, assign rdempty = (rdusedw == 0); assign rdfull = (rdusedw == depth-1); -endmodule // fifo_1c_1k +endmodule // fifo + diff --git a/usrp/fpga/models/fifo_4k_18.v b/usrp/fpga/models/fifo_4k_18.v new file mode 100644 index 00000000..3efbf74f --- /dev/null +++ b/usrp/fpga/models/fifo_4k_18.v @@ -0,0 +1,26 @@ + + +module fifo_4k_18 + (input [17:0] data, + input wrreq, + input wrclk, + output wrfull, + output wrempty, + output [11:0] wrusedw, + + output [17:0] q, + input rdreq, + input rdclk, + output rdfull, + output rdempty, + output [11:0] rdusedw, + + input aclr ); + +fifo #(.width(18),.depth(4096),.addr_bits(12)) fifo_4k + ( data, wrreq, rdreq, rdclk, wrclk, aclr, q, + rdfull, rdempty, rdusedw, wrfull, wrempty, wrusedw); + +endmodule // fifo_4k_18 + + diff --git a/usrp/fpga/rbf/Makefile.am b/usrp/fpga/rbf/Makefile.am index 49d2f259..7bce77d5 100644 --- a/usrp/fpga/rbf/Makefile.am +++ b/usrp/fpga/rbf/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -19,31 +19,4 @@ # Boston, MA 02110-1301, USA. # -include $(top_srcdir)/Makefile.common - -datadir = $(prefix)/share/usrp - -rbfs = \ - rev2/std_2rxhb_2tx.rbf \ - rev2/std_4rx_0tx.rbf \ - rev4/std_2rxhb_2tx.rbf \ - rev4/std_4rx_0tx.rbf \ - rev2/multi_2rxhb_2tx.rbf \ - rev4/multi_2rxhb_2tx.rbf - - -EXTRA_DIST = \ - $(rbfs) - - -install-data-local: - @for file in $(rbfs); do \ - echo "$(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(datadir)/$$file"; \ - $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(datadir)/$$file; \ - done - -uninstall-local: - @for file in $(rbfs); do \ - echo "$(RM) $(DESTDIR)$(datadir)/$$file"; \ - $(RM) $(DESTDIR)$(datadir)/$$file; \ - done +SUBDIRS = rev2 rev4 diff --git a/usrp/fpga/rbf/Makefile.in b/usrp/fpga/rbf/Makefile.in index 48045cf8..e4a56a81 100644 --- a/usrp/fpga/rbf/Makefile.in +++ b/usrp/fpga/rbf/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2005,2006 Free Software Foundation, Inc. +# Copyright 2005,2006,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,37 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # - -# -*- Makefile -*- -# -# Copyright 2004,2006,2007 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. -# -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -79,29 +53,38 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common subdir = usrp/fpga/rbf +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -110,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -133,14 +136,25 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -148,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -158,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -170,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -246,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -296,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ -datadir = $(prefix)/share/usrp +builddir = @builddir@ +datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -314,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -332,83 +549,45 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ - -# includes -grincludedir = $(includedir)/gnuradio - -# swig includes -swigincludedir = $(grincludedir)/swig - -# Install this stuff in the appropriate subdirectory -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -grpythondir = $(pythondir)/gnuradio -grpyexecdir = $(pyexecdir)/gnuradio - -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern - -# Where to find gnuradio include files in the current build tree -# top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - - -# How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la - -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i - -# How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include - -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la - -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) - -# Fix for BSD make not defining $(RM). We define it now in configure.ac -# using AM_PATH_PROG, but now here have to add a -f to be like GNU make -RM = $(RM_PROG) -f -rbfs = \ - rev2/std_2rxhb_2tx.rbf \ - rev2/std_4rx_0tx.rbf \ - rev4/std_2rxhb_2tx.rbf \ - rev4/std_4rx_0tx.rbf \ - rev2/multi_2rxhb_2tx.rbf \ - rev4/multi_2rxhb_2tx.rbf - -EXTRA_DIST = \ - $(rbfs) - -all: all-am +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +SUBDIRS = rev2 rev4 +all: all-recursive .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -439,34 +618,152 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique tags: TAGS -TAGS: +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi ctags: CTAGS -CTAGS: - +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. $(distdir)/rev2 $(distdir)/rev4 - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -477,19 +774,37 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done check-am: all-am -check: check-am +check: check-recursive all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-am +installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ @@ -505,74 +820,77 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-am +clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am -distclean: distclean-am +distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic distclean-tags -dvi: dvi-am +dvi: dvi-recursive dvi-am: -html: html-am +html: html-recursive -info: info-am +info: info-recursive info-am: -install-data-am: install-data-local +install-data-am: + +install-dvi: install-dvi-recursive install-exec-am: -install-info: install-info-am +install-html: install-html-recursive + +install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: -maintainer-clean: maintainer-clean-am +maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-am +mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool -pdf: pdf-am +pdf: pdf-recursive pdf-am: -ps: ps-am +ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am uninstall-local - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-data-local install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-info-am uninstall-local - +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am -install-data-local: - @for file in $(rbfs); do \ - echo "$(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(datadir)/$$file"; \ - $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(datadir)/$$file; \ - done - -uninstall-local: - @for file in $(rbfs); do \ - echo "$(RM) $(DESTDIR)$(datadir)/$$file"; \ - $(RM) $(DESTDIR)$(datadir)/$$file; \ - done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/fpga/rbf/rev2/Makefile.am b/usrp/fpga/rbf/rev2/Makefile.am new file mode 100644 index 00000000..487650e1 --- /dev/null +++ b/usrp/fpga/rbf/rev2/Makefile.am @@ -0,0 +1,31 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +rbf2datadir = $(prefix)/share/usrp/rev2 + +dist_rbf2data_DATA = \ + std_2rxhb_2tx.rbf \ + std_4rx_0tx.rbf \ + inband_1rxhb_1tx.rbf \ + inband_2rxhb_2tx.rbf \ + multi_2rxhb_2tx.rbf diff --git a/usrp/fpga/rbf/rev2/Makefile.in b/usrp/fpga/rbf/rev2/Makefile.in new file mode 100644 index 00000000..23d98c06 --- /dev/null +++ b/usrp/fpga/rbf/rev2/Makefile.in @@ -0,0 +1,911 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_rbf2data_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = usrp/fpga/rbf/rev2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(rbf2datadir)" +dist_rbf2dataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_rbf2data_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +rbf2datadir = $(prefix)/share/usrp/rev2 +dist_rbf2data_DATA = \ + std_2rxhb_2tx.rbf \ + std_4rx_0tx.rbf \ + inband_1rxhb_1tx.rbf \ + inband_2rxhb_2tx.rbf \ + multi_2rxhb_2tx.rbf + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp/fpga/rbf/rev2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp/fpga/rbf/rev2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_rbf2dataDATA: $(dist_rbf2data_DATA) + @$(NORMAL_INSTALL) + test -z "$(rbf2datadir)" || $(MKDIR_P) "$(DESTDIR)$(rbf2datadir)" + @list='$(dist_rbf2data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_rbf2dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(rbf2datadir)/$$f'"; \ + $(dist_rbf2dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(rbf2datadir)/$$f"; \ + done + +uninstall-dist_rbf2dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_rbf2data_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rbf2datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(rbf2datadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(rbf2datadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_rbf2dataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_rbf2dataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_rbf2dataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_rbf2dataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp/fpga/rbf/rev2/inband_1rxhb_1tx.rbf b/usrp/fpga/rbf/rev2/inband_1rxhb_1tx.rbf new file mode 100755 index 0000000000000000000000000000000000000000..c1c9af2cec2629cd455515cfea4ffefe6143cae9 GIT binary patch literal 161180 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Ǘ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%0D8mi*oL0;&HrzpnIjm0=H{iR6j`Y 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℘Rv5Qok+(^-lnkOuz!^guPhh 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%0DkMmg9g@Z(L7EDjN`Qhfm(be?g+VqG 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 z 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

pLPDH9|%*;VEs-Fng>n2Bal4s+S;15!TV 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 A{{R30 literal 0 HcmV?d00001 diff --git a/usrp/fpga/rbf/rev2/std_2rxhb_2tx.rbf b/usrp/fpga/rbf/rev2/std_2rxhb_2tx.rbf index 966bae86571ebe351704d2266efc50bfc8168c8c..ee3c30d664793e974d9a4dfca51cf4472100ca0f 100755 GIT binary patch literal 181588 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�YY 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

fb+mvhC>Q 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 literal 174171 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 MImd=?{69_q6JsQkQ2+n{ diff --git a/usrp/fpga/rbf/rev4/Makefile.am b/usrp/fpga/rbf/rev4/Makefile.am new file mode 100644 index 00000000..54de9b81 --- /dev/null +++ b/usrp/fpga/rbf/rev4/Makefile.am @@ -0,0 +1,31 @@ +# +# 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. +# + +include $(top_srcdir)/Makefile.common + +rbf4datadir = $(prefix)/share/usrp/rev4 + +dist_rbf4data_DATA = \ + std_2rxhb_2tx.rbf \ + std_4rx_0tx.rbf \ + inband_1rxhb_1tx.rbf \ + inband_2rxhb_2tx.rbf \ + multi_2rxhb_2tx.rbf diff --git a/usrp/fpga/rbf/rev4/Makefile.in b/usrp/fpga/rbf/rev4/Makefile.in new file mode 100644 index 00000000..faa0a6cb --- /dev/null +++ b/usrp/fpga/rbf/rev4/Makefile.in @@ -0,0 +1,911 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# 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 -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(dist_rbf4data_DATA) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = usrp/fpga/rbf/rev4 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(rbf4datadir)" +dist_rbf4dataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(dist_rbf4data_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +rbf4datadir = $(prefix)/share/usrp/rev4 +dist_rbf4data_DATA = \ + std_2rxhb_2tx.rbf \ + std_4rx_0tx.rbf \ + inband_1rxhb_1tx.rbf \ + inband_2rxhb_2tx.rbf \ + multi_2rxhb_2tx.rbf + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp/fpga/rbf/rev4/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp/fpga/rbf/rev4/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_rbf4dataDATA: $(dist_rbf4data_DATA) + @$(NORMAL_INSTALL) + test -z "$(rbf4datadir)" || $(MKDIR_P) "$(DESTDIR)$(rbf4datadir)" + @list='$(dist_rbf4data_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(dist_rbf4dataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(rbf4datadir)/$$f'"; \ + $(dist_rbf4dataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(rbf4datadir)/$$f"; \ + done + +uninstall-dist_rbf4dataDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_rbf4data_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(rbf4datadir)/$$f'"; \ + rm -f "$(DESTDIR)$(rbf4datadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(rbf4datadir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-dist_rbf4dataDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_rbf4dataDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + dist-hook distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am \ + install-dist_rbf4dataDATA install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dist_rbf4dataDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp/fpga/rbf/rev4/inband_1rxhb_1tx.rbf b/usrp/fpga/rbf/rev4/inband_1rxhb_1tx.rbf new file mode 100755 index 0000000000000000000000000000000000000000..c1c9af2cec2629cd455515cfea4ffefe6143cae9 GIT binary patch literal 161180 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Ǘ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%0D8mi*oL0;&HrzpnIjm0=H{iR6j`Y z%1C5eZXOo%RInx>@>N*T>Gt#K;C#0QL_McA(k-35ZJU(SsKvpOt7LV-u0tpigm=sm z?P}~ne6v712gtT!Ub0JmB*TJ#RMEv`j#RpvSWSvs+yvHu>TDlSy6d|ma*io?(7goZ z3(7p@I*=#+)w(_m{u+TmwpJ3Ps2bcUIz`x6(8P{m0f$YFM!vW}OY;1(Sv6(N6){pJ z-PS6sQShNB4|lfNxo;tNpi#b#Ut1B0c7D&ZRvGbBlU81dDjqzw`8%NKgBN>kvB-gM zNLDIzQQL)Jn+JB7oX<%kuwijOhM%d5*FT1&8j?+&EYgarsGAi}vAkK?4z|y;lIDtPHC0+#JNO;8 zz;JVhiD+xB_XSk);m$@+$9svxKNMpG&#rrPY&gjm&lY2}I+QrPbr=7Se!(r=zf%&z z69IXZgWnkqCta`cb`IiP1fh)DxpD}&SK)Ah>h6>8w+^A}(*N1kg?b{JwQ6)MkvJTQ zHaiY$y?FQG&Lm&4O@943aQjD%3x=DtD#w=Nu62Q9d!G~cEfflf zz4HY*igS`T7jJHF=^GXvU#jF4FBx{FCuQ88V1*a^34R*FdKrDon68-n{djXi-V#gj zaz?Z>qmJf@?Z?Ho=vzP9<)0(ZAvfjN9z%KQD|=qxM`+&lUCX*2U+=l1MAT_1w``3x zS~gl+A^IcPO6X{#-cuWi$X$0Wp%aL;`=1 zI48)P6Hnu^(8{`w)AvO0M;b&D)U_>ow|9ixUzjB&Ch5BE?Z4Q0`1Q7e-~Q^p#UH!# zHclRnOx-!>AWeGezjt)Iez+&uR-1*6+;OJtnmvulrfXNnX3zg03+_iR`A#pYo;`T2 zyd9s;4HX2E3Vvy1BDcOkT31mkR&Drj{o?O0&irtEa#03Mx?@}!0~-fF;d)|xbyJfD zKkK&5h$8UHuOwRFrxzC%geD~$sE-@2S)Bg;obQ)sjZQ4~zMW{xd24t)H0dwSuYGCr zYdLf3n#`7_ ziK3zw|CzR{zqz7d=b43zK7H`mrZ+q52j(Z6>>oZcvEe@W^c=TJ1)ehtGgrRMRfk&h zr=&m#;+y!GlAFW}?}nfZ1`Z7A)ykUo@NYV!xz(ZM()n3^r(LcceS>O^`U`y$2^&Y- zaIe3B+|_utOH2fEWXH0ps!+kIap@R6vuxqUyOQD14m72RdtBo`eBtJG;yp_? z;6^1hA+%<$s7N*)-h{L%iYe&UYF@CSQVpI!d#J6>t|@l?+HE$CFvD+RVQdB<98Q*v|lzx<*iIT(Ff zTKThyx-}~oPteH9`zGolS@%uQ10{E#t&3FO{Bd;6!DByLcFOznxvSnd-I6x-uMY-X z2tx5Z5=#Vd?x%iC2=sr9DdshK7!J z_5Nw5iG?5m952LikSOgqp_s+;U1V75VAC`zSe1JMT)7evV}4EdpjrAM0S5$W-u#MQ zo{=14pM!ep=p(otkM6#p8Af^+xU|st!abN2YFGi=`=AS;AHR z5X5>!ct_(vc;Oxh)BUk>WDTcb52vmr`von$fy5M5&U5fN5*zgM!sFmjw<;mMmaoz4 zwH#V`GZh}S6$>80+z)3(((O?-XAONQK=gxhZC*`8XWEB_J+~`$2?+OQumGDQ6lPAt zs_KKC4Z&nlIDvWsc8DR-YSuI;L7wLxk8qX|sZ6s}n7}^R0vq{oJV$|F#`|t4v~z2w zun%)CcCHa|%;fWH#Q+`#BVvofrqQ8VSw%wxqByBotI8r4U)Uy*Aj{NfgmEghl9Ovs z%+$dwI2oIeYT-?!v{HYrGX|l5d0=bZqVhwz4NBcU(JuM}jAU;cShls&C&+lN0DIWj ztrnAxdWZet42-po*D_*FZGu@KROlE+10tpS5D{jD4@7Ew8HE#zG)~XM@uL#$^b6iv zNw%+`-5}SLH4x)SxI+S))4R#Diw}2_5uTY1J5$5uqIFW{7a_Cere7x-oPh75FCtDp z6v3Jjh%j9yy5~Jpu)?jGsI#*N;thC40gt>^#7wG+A?`(2cRW$SL99W7fo@eJ z97fYZ3D)B3!4M(?=HyJ?k|0=R2}7*Z!Fo(+Sh__qH;^DQsSvRuX;{2%;ZF#W;B&Dv zLlE4=ka>aqqmoX+e0mnwikTj!+gj5M(LIW&m@;amW`5M>a|EYNo3bx5+TPj9TX zn?@}=;fStA1dWzF3PDvS!gMK}EOQ&27c+}az=~yXF4j@6*zE&D*~6Q77l$o)MZ0rA zGy+cMh&6Jsg4J~ihQj2BChcq|SnZwc7Q{&q`b(Gwh4Ju|g<}qzW>5(UFji)*sM5wU z3l~(_u%j}ry(MW!P**0+o8@Y^MKG>2%kgYDqDqBpygH4^iiqFl8m($2-P39Qa; zh=ph1cv=7ln~;Q2CV{AYLgbuUK2Nl9YS80H;7eGeb&QA|s4q9pQJrCyF00pZ+%HS* z_)VG1dTpj)#N$JJHYu7}6S44HVNE317(}_J`-qDCL6a-$?uK}h8QvZ#9o2Ut>6eOB zM%F1N8;oNJCYY##q=bQSf86fi;${XW8PQbo`wvqMm(Eyb zGIsd&%$;R3m^fHu5ctLb|AZ-sQ#fs)&J&Ga=7n<+!A@>8$Z7Bb5*!czI-IZ@nlo8x zYGyPCHr>+0$GQWQs=1_5s}Uu&-qVH@hz=l2X+mSez2ah$F-FIYb0Wbzk=oq2pnbEZ zOBvCvbJDe(D18bEl*<;gam{FXRMqFG+e&NlpNMUf!l&#bz!7fjX2GSa_N99K(H%Do(*FPs6-6X1dN7Ugdt&g;`F-fzbirO_xYf-TNW!Oy) z9=Ps!S||WJUd1r`;Bt9Q6r|#yQm=R#6$s--ZAkT5t*}ABj}>CQ7kjnC*|pea60-pU z`+`y56V$RIu+6jB)$wLNw<;Q#zXIDL^;+;g>`1!Ax#UwaLaE!2pIKI;FF`GIB3G{J zyx&*8F5^IP{95BorCZgcOIhW&FE zWVdeoA?z`^7sOVId)))B%Hlu>j-KV&SMU7PmE>(D{yK0tzmKz{2V0Na+2)>4*4BV46h!|#J5dczouaD1?890WX4S{w6}9bbDjVWtf_$T2H#Qt z4+XBV(qa44|1VE(1J=Zuwtpuv>r&r+o_}UC2}49+hDjJOfW(N@TH&7D2@?#2gs9ZI z#XwZFS_Dzqwp*Prfnc!+($@BAYf z>OU^Id*QKII-~nB+xVe=o4&NHZXjmbGHyiPVE&zZ^y8Cr&iaN@R@6yELJFOe{4yG6 zChC^w*7*IKC#=aGwlmhcBR7}x!-6oySsr9I)udKmvMtt;^s*Si>ElZ+Rp%zieElhI zA|pR#Nvi)O_jW#*bTGJ5@>wwUM56T4ZHA&5He-R=K5a6mwnnX_-A8I}@qGKOd${+= z=Xuk!hW$dToEw_Pm2LHg88SIX*Zg@fN+owNd4~OThZLo0XmAR0+(#!&E3);uLM$JA zK?Bx~NJGJjeA_6#EHs#6*2Q(`fp#3n7-FRIUO31KOHrZAT_SsG*FE@6&E=4w`}<;d!CQqBE%2(UKf|l)YA1FlySMDval1Dk;&7I? zmR?`+X5YuNuL6PRiCkjJ{90Y-6u%tudYQ}Jf4Cq{oShGIb=k1ArQ_C)nj7CtYzX(A zd3eoC!C%Lvc+=o-(D0_)hT7pxe@vM=|0dk+S+n-4pv=l6O%^h-C6}=BWR`{G4R4c| zd1-*m9MJO1|8oSxShR^PDX6)D>|y`^1GKz3!k1dWQZ2K(T2|NO{|D(CGD@oUSyT2C zB$K9I$T=<8G&l9~y?)o6Ol77r%W3j*`6>%z*$!7S(iIfs&Smyy?FfmEko6{ltKjq& zE}z^$xY!8SpMN0lM6yc5lhsE<97$SD0Tz-P+D?u?z+O#6T6_|Dc=m^V{@=+W3H})Y zahyhlG$d9p;<9N7OKTC>wlKjt1x$K43SkAJdcm#Sv;C80coVqRO|A{?T}(hhGCJ>BP5~{TLNKI>(bHBx+OkD z*}P{pLF~J`NEVdkP+$=DdF8?FdH)wSO_f&0aKCTaOr>Q1 zjtVOKbF?Hz-3)$4`OlG4>TbHbJYDaVNCji}`41F0)#XGn*+FID@<_HWK6xBl*X$4l0qzJ z6J>>6r7)_n&LB7NxCE0!#Lc#bC8&>RI?JODMmS-@cr^eNrJe40$ikYv5U)+ej@&7BGf9d=~6~9 zB5IK;R8P@@YCEZ_tPde9sWIUo?}}(ty66|*C^SElXUil7C#Mnc(>RTq;ATH^Mv+Y= zsmqy2k{V*0g2ZTlh83+WW{p_Mk;UB~Q30@ltM%24;?I_Wuw9LcR7{aTv#Oq1OGY`X z@q)1z3+nAiMN|GH9Z6OsQ^Gr>qOuhaLij&t=L|y z(p+SfMp>oD}3DlGg0 z)#kP2>69AAMtU~PN1`q`cRkvyLZrimD}vpeUCC℘Rv5Qok+(^-lnkOuz!^guPhh zq6ja)2n;O{=H(Ju)?-mTSZ&M$$0dRCoI&D}On8ZPL>@|KReEYHZw!r9G7)GN^x)Ae zO5k)TFQO<9&r&K9nAs=r2Lws6(xxcqz>Eabdb6+Hu0kO7AxM)1ismZ7%}79^be|HY z(29=spDRKMMV0$Ni(_SlWKVFa?XyG`g^bQ(Xt5NUcDaivvLG=3Lsh<42``tJS>vUF z73R~+|7L@A2e_~ zJwwP=O=YkPv3Q!G{tjHEZmP`y~R_b|&HBgry3ibjumQRWF7su#f5 z?jv#>cD9E|8mo^luoiGQWKCxtCo(o&EgtRx$I8-fB&1sJ_N|sOHsP&lVLzW%!Lg z=!{qSxUYKa?Y}|=1hItHsggXk?~vQrp46&2Z=HJb!q+n;50Cf8OR6`0^8xu|>W_(! zdoo_4%g6`l)+57TPd09J4>T?Kaa-xIZ90(rU0LCgDM#|*&QZgdc7mha#R21CYdmMy z?rX&;H9u}{97YXmrhN-Kg6|Ry_MM5-`GIYLcN*R2B0F;PE_B7pGWOI@>Q}pW*K_gR zDRiptN$2UF`kHS{Q%q#?^TF8ClnrAKU2spXUS~K;^ckmDq~spG*YN1%`~|5@W7#bO znaf0%<$P!E_OZ+vG=gc-h{E==)PFWif#D4u`e>eSW#z>CqHl}Z^u1TrQ+ce z7t*hJr%JQG{CLW;x$xS^#s+8vP+|1K^_U}L&(4WlXJ`f+s~RVE7uVHaxOYePbn*Om zyr)mZ)0ghq5M$Tuso1$@%0$69d6IU%qusM)!ux1dr|-U1lg7f`o-g#{_UJl&T~ECs zmg3FbG@<98$oqj@?G8mB*fM@BZZPyQ(fq8ANNlXTi1>Iry7@@4oy;zy}q`?8YKnyr_-g6b_CyAyzAGu^Yw1w3IR`cCDv6> zJAOPJYN(BJfjx~eN51>(Xrq1D_NH^E_=ltmyW)*Lcku*aT{D6)p6`vBx<(yMG8|Ny}1T`VR(IQU+<(>=({?RMGp^r zd^=j0vMC*Mt8BEu@R-o|(j+Y0Y8kNq-7)<2)MG2^aCG;|{i}YwzwlJFLddmGaI32F zCrY%t9<|0S)>2Exnc+?G-4%t^vC_;A`D=Zg*;uz^La^?cj;FZ4^FH~C@ATyKQk=8I zZQQXY4tEuVLQ&g&kClyAOgy@I%snvr>w5j?*CzGrhOfS{E^4UE4Mpkv>)JcPc}vgi zxA&bHogJy~O1Vg_P8~1U?YPWCVZUrc?0thV_T3Bmrfuh?>GyJ(re*(Fc6*sQ`^?c1 zc9zb3yJg38;0cRA_4q+k$8ir^_5EhldM>>Cz09WkuZi0$O#34*Gy5-HM=8~3uNLes z{g$8O{;ooD~BKF5?&YdgtO#Z4YmzZoS%k7+A z$JS}5lMCwZdAiVj&(q8H^i8iU7|xx3u;8cFcUmq#Ho5K9zD>9H@Ex0O=ht^!zpcLy z9?1GH?LX!J>VI~+|1`bQ>b~dGl8Na@P7hA}V@F}jmAc6~zT>e;|0}u0w|6gl?A-Xl zsb8HNCnjsp^>t3UzOGw5h`3EcYixs&%1w`+|B5T}&k%xrPAwe2CdZ|Enk!uvi z8rck`d_KZj_2U2UfH6`H2k^R}6{QU_whe;7c{yz(`i%04rRV@YFpwUVA!lw^6+qp% zb@3D73jTAsHd(;Ei2;K!mlL^K4yea%V_3=C1)jCC3avNhqewNZv2}_0b%zTnt&*&(&ngKYg+CV}9;Gwn)YA7#hra!~h zUP;<$LZvu%RT5ylXIPTXQIcH^Ie?wPT8e2C95BXF7?m6U3*whh656OxOGKdbV?9b) zLkXnM$>w~CRA4=C^b+6oCt+@*bBnNRwkcn?sy7-mWv;Hp7-RVWunW}AMG5Dj`^ulmS z`~vb&uToJxV+4{%Hucd$>bV8zZm(R_#8Zc8O_@snc`#Oyr zbb%+vtS$}q3yL0?6f%heP9Fl198-!xKxb)`XOu9A2M!l>XiiQki^B3$FY`fo5xDubo~WtVlo;7bLG3u6hl3qpOeLu7GKwZLG98Kj=BWF)ExH$nQAP=r{I zNMZBOi>@-=u>Irkp}UgD^au4HF@pxH-OylyV>3_6zC-tQo6N)rmL#Faor4*XW1Q&_a zLL)9(zM8t2cY{&C3M~*u8?UsHK5086 zTA5~WwuGBVK9X7S4*}GGWaT<|Hw7LVzWwtOgLajyiRhRNn+|1lk}VK*E@v@^aQkc^ zL00S)67~{VFw{gE)mMz9a;YGTq0R<<4TYuAmwy3XsU*oF&szFj3`rz(YvAK&6oOwr z56=$VNv!yaQ8^HYR8EjuV5$vHF%%Fu#Q}gzK>7bW4vNrbbxyk@>WW^pXD-2w2HN7<#lDCBD4`@BA>vKnFKH7VLCnNmG_<~Il+5`G&P4@b2z#$)(|~YJwO4~UdXv`wNXtffu~KJkFSWe!&F9mN=?`3WqCKwUxXdn^L^375pG zjs1j%^#QGCJz-WYf^h-Kk&sY!IMjkem98#2!YqQoEDW=YAoizG$PF6vmq=0Kshz-e6VsOl8`o zxV2?HbML|>4MaWZ>8hxejL#bVy7NSjtIJfDq`(1hDbD0hw5W3opiZbH?5Y=*u55AYNfPwU_(NIrRXWktl zGT3s?c$LfJ*q);>JHQ!CF=OA_la7RWSrK9L7!hvdW z>sa+CvY;})iSvX^zij6-1iVbx(YVD5xv;g3M}NN1mc8u*$AZjjF+sdm{L9x~zo$dE zjET6t_Jisiz9SgBn}7UrK7Aw7DP~;D-q+W5`!D8~IpZyF$?L59NZgh4FLu6ZC9BOB z3Ub80o=Gv>Dz%M0v{Tq6_)7M>Iye^pF)J=)jR!6r>rTGkYPb~I@jyfJ5zn&FqswNn zxNuEwU?+cS-Bd}*!kq>t8dz8M>A`{YMC+GdH)t#VRG8Peaz)~Wsylarm#e+PqdQA} zw67kQ;y`EFYPMA!&4Lcn%LFfxk z@mViR9o=JXgDIPsj6iX3S=k0Jo5A(Hxyuh zm3lpnKd!w^iu;`h<7XYMc4USb=q_OJv*kH_b*-Yd}X5Uo%y>xp)cQwF649a znNoel5Rz-+;6;Z0BxV`&l@ivtk8T$NoM) zW?FhjHI|+!{&ZusVEH!vgLxTDZfGiH z^{`yO@y(P*^H_U4;2JkhZe87Hj3#e&%adN(5G`2e4qdvI@YaqT=UX+U&X<`5o3F!v z7cRd&UB>=)w$iW2N&Rg_@bLFL?ymQLE<*jD)npkXZ?C}H&NPpZD^jxkXX8O|=f{p% zoU!Z6>@#N!>9I?*3PE@&^aYl4V9Xh%9yJVHy3Wk*ciCNfV|EkRGCODv;JHt)H-bLU zK4Zc|7N3HNU{LaA0q_Cc zX7xp8j9Dy`Im%`X6oL0wv$VoqE$4{o5^%d}S!}9COs82U<9&~Pb?6YOQ*q>e{a(*8 zK+Spt-EyL>(}XD5>CuMq?Z0FQ-6Nb1&C4=Ruo*RqHdBo?<~_EjYkLcsyi zEUAiv{b0-S%MMj3v*2$NYK=aj+yaX0L5i`( zaW&Ev%rEGn&Z?!Ie$-wq8ChjwkJ&3}EEJ=Eo-AsBv2!^fRYSmr;U{Q;I}ik~d5=&E z8~ksq2mjHtlymFKcV{;he$q)eesY+?)}1B^i9?qzD@pa|0jWIYMQGImI!sYWoBIW@JhLPm*1Ektvc3yb2TK=`<<^a6C%5RpU93`eeah zuPRb=Fv<&2SPe!k&%MF0WK6(NO|8SC3d_d1Qig;VkVRw@Nmt6ylqE@BSeH8$eM%%jptKafl=v#i-}s{Rqp0nPZt70(lFCB;tNE@+A4? zEqQv*BbG9=^LQ(pOtBt57+Srrm17d~$xL+UJgYj3b8ePI6Le=xN))>ZdX{ibHjYgLG+HVKL}c8u%H zBaZqwJ?#a$3-=;p9AuM#vXUfRg4zxTl_hYJWNHPa@$^Cva(Oi;QyT2`l_($g+6PL? z#Z+o!BU1GfNV2A>ig*>sLtP9Y@RYw}DRqZcr4Z%WD!k}zq8qIQ{2rzS0w^Y8FJd5) zAw!D;^yN-*yHoYt(hoCBl&=#qkthH`uRW-OF)&pAQc%0p!b2Uml3T?MaEq8ltc!vw z*Q849ve)CeWD3se@k!cFhQf}Ld35GZ=wZon6jHlDE!)q%Y;4{sTEt>v_@Dp9Ae~Hk z0TSJY1hUKIA<}?;rd&kAY>AU)&hD3cjWU?r06Z$oDlps$incu9DZ+P7<~UJ7z!OHJ zI{1HZD@n*jLOs65%!LXVXOY}F+V0$7)%dFkO(kpVW&~qU_&f^@P&z+bTp@?l`Lt@W ziYONVwUS3t+>?390wW1`f;|jTBXv$S=I@ec&(T$On5 z2?{kC)HcG)l_gWOK?t+BfF_Z6fW8OOZO<4?QAtG+N-NM`!*pN3oTwL%}-?X z8taj&2+c9&QA{z6OB&KuHg)nDj3mzWF?fLpd<4b^dVz@u`!UAtYK#%rgVP)EzCA^5b3YBlVU0UA=&>CPz^YBNhj3}_plcUKv%0E z7|dZsT7Zvz!FfT=TSyKW1Pc0mwzAiOZ|HTLERZ`=*x$zy90Xh zlVBGYS{16XY{)oAwMq_OdeLnb1CvC(0H|hTu6n!_F{cWH75Pd!>t05{&%CFaJA z+Nb{J>DfkY2hR3Ul;!s`sZ7*IC&My_P%W&SIFTHoQ&ztJq?eU3^Xs132}B;+-?Dyf zXf&Uw6m%3xu;l8<0yA1Q1Hb8!YHfFkqf1;WFNxWO-=Gc(2T=a*4HmT0@i=!H`*bPd z<964i=z3bZ4;*5PxJ-gY0xRKBlkQwev(O7Okc?jBr;TNFtmKh{A2U>C`n?7wHB9|H zX_THS<}y{s#zGAx6@+oF{_Tu<<59A%+L!$)-1L3T3-QzPGgDf2>jcR;;1aXelb3-- zHx39NiU6#(rI3?&{zFVI(`jXT`_KsXgx1ubT|hTF^c<%wGq+;rVsh1I`v$ACMK8*17EQeBXnfO*q%O ztNK>Smh19qYy2Tx*EnT&A6{}{;|MzfHT#OXtCQ}Et#MCPYWM9Dalfl?Q=D|vUAypZ ztbp$5oFGAa0Ma5<`@JyJ_v#H%o9kMW-BWS?B!4T1%Zk-!cAS~WG2daUgB?AdL;GvT z2Vz;1SN`gC@0?uq2*h~j&p-V}bcg%t_!m`oqLWoQ8&+pz7f(0-y13BVShMEKFF%Qw zqN>K|s>IYyaV(^snp(N?bZ^|bvT$muxOmUlWYv9luIZ)N2SADQ~#Pd_wzKiHYl)InU+MZN1X8cKEr;=aZ; z*u@TTOW6nUe4P48(*yCXxN2}}r@jZx~$*-|@Pefjc=r`P>kTXknc^#1v&#z}3(!3#^{&du4Y z$KUgA+{R`*>aI?el?inXpLE2{+t!Q?dqIiXxS{S;+$ogVPM?a~Y^Qg{ZSFgGdi9zw zubG%+g|P1;K9c1?o~-SMU?URzdocCxy@a7i>Z@lH=Y{TbV7$%XU-yvzM5 zoBSF6ZHcL9WNEZQ_v_UQGdhGf12N9{C7j)YzN1rH;hY9~UoYtZ|5wd0`me$(k1xsCZd<9$e=Zc)ee@1a|F8zA*7h=;R!?FZ~A#-h6O0x@EufFX8ly zUCQQNrUn<|6 zl$DI;0SW?yP7n7LqDBUAC&oXJJR&A=K}BYsm`GOL`-|d`M{Xgz@L-7}<>PJ=>4{{>0JyYz z(UQ!B*t~-5!Gj|`;#D%C4cnZfgAWn7TsRP1szat{T{^;wt>*`c+#q!!NYSI*K!Ldu z?!HPX$wxX7RgVHeW9CReO&Bkdm14Icp(dFf;hN~~;Ab8P|0a!#f(?|XwblwcFYXxLih+RTHaePN}xsz&Cikbr8oYER0LYbnnJT9@ zj5q-EwvamL3$~^g53)}XmvR}EOY1S%x@nL7qBLkGd+h;y%u~=x>$g7hc_dgCGz(vg zo%?bI^)&1=Qr1=40#b3HmETXcM}jRg>z2Y!r9qMa)53Of2;2N{1N=%P8j(JLi^4w> zpHvHCk)=eTaU^g^;ZQFDkhXa?HOTeQ3V(<_5!U*`;ZTAUmPExF$ueN>4U^@e?Rlj5 z3(Aq8IA9>oG?7XTo+o}3QRX7`6Z)b?bcoc<#UHWo_2htUSw7p=NSR73@AYxANu3=e zO@qL*wvwh(q;jnD@adl=3QGVrmLjC9sT{98;a@?fQEaOh29Y^{U1Z5%ZF#LLB82?B z`&r3nZMH1O8oM{R&QsFaK194PZMkal%9>}X_1_c+>HQ|a_PtN+46~yGfeu+Y*WEm5 zm0{7#r(f>5=Upn`Whxo?$8S~@i<}^DM;1ybs>JQwfJjzKnJqJvBdnKIE+r5M<#Kru zl`)uADeNUmR8JUO!l79->3=^p$O5$}z?yr4-zMnkdCgIflkutIPb zCHX3=14Z+EjFdryuc3=xGQeOMLPMZF)F%3S_)<|*qWYa)6=6`pM-iWt4wLYJl#TaZ ziX@~27x8s+zF8)EJ&ood=h?vOp9e9| z7A3E*kXuwdQuHFsC^R-7Y@zGt7Ll(i0bm|h`W2dLq}Z%10v;)mP|8hI3Tc&HT(4Z@ zf*5{L!t3OEi71a`^rU&@2Z>DO-Aa3c1eh$Myr&4;eMCQnCGch~BOzvBbWq_=m;qCw z`hdYGs3Tk(!AJl2?u)D)zBzzMV`TFVgUm!s2n;qj!qT~dN|(U3h`@eX$1vrBQN*fT z0p;;&svK7Ag#eL4hN(J(1yG>OKkFA6k<28|p?aN2Yi)Bni>v^(Oekt(X~-kFNhGu* z2c4kkEDEZN=BBYK%=$&>*;E=qsqWz>%RW2e9x63%8&BvmQw~J(NZF>T^(I}yt zrZq5kmXo|g^6zNj{1QoHuq2i9TxgD6Ot7nZ0kLKF@_d>nE27ApQ_g+WGlC(fET=IM z5(TivAb#7MR4mL5L3rsovt~41@NvIkJirKxisSU;^b#^wAfpY-Yy`Iz^-gmq1LN}H9QC$5(=j(kXj*119_1<&$U zHuPzMM6K>-o}8iOqsmeflbV>jx`B6$fHG$uY03BWmNT(XFoIhnl)pL(n)$BO*$ba zLGNf4ZB%7Rp0wfq2R{;oXBg%qhnLR~i@A)5jJf?}I`Iudt0X2Rn9E!gl!LBIf|A=b zR7Q0>D%p>OOP-|{K62op;Hl6MpU7W@AO=}pz(Ze_&Z^x{dxn_vxYEa)B0NxxvBFGq)ru)#FrpX@?yCWG>+MZzYGrS+Vxo}e!t!wtf8d z*y*V~YhVcw@i(Gj!>==MCZ`-;GD%X8SyL>jZ%ihyyR*B#CTcXMKK0ALorx_5p!gg5 zN&TeT{rcVVezxy=bcKG{|Ih57J;arA+A*%tw2Nyr#<^4WQ{2pvtiF90ANrho>EH_% z;~^Hx^;0SD-59^|@bN}_Tu+sJ+cTNGtfTpnDe6V+QD)aGg@?@u0{oKCH|H)HaP z=i{YYhfhr;k?tkY`lVGr-h8?%w}nDO2&aDTisBXbt%pWkwV`f?sF-JNa4nw&>Sp_e-l^>3HSef7#bJ_3@^Q&$(jNCa5k`7w=gzSy2J4 znQ_}Y4-Pw~7Uxyr7-eM(e?RTYDb#)1Ikn+zAraf)cjM{ZS~reuGJU!F+sZ$E+>6Ux z?j4`L_tVwDc+CXjN=>F%roVJUsi~B!0%W<-Ed(#`yBNOpt?9MncROeH1^3OEy4_c9 znSVR{LA3O^`@x&Cysvjb-Tpf_YCB$PD!J|2IxI|oy>A%LjB)P2{`8V#=<(;jzY0iu zoM{6R(YtZy{m{zI*A{lho$1q4g)fcns=xcTN&jGa_Tt0u#dGdYeERgRSnjqeU!y;6 z{#D`8Pd=a2R(-kc_Lu(?8U;{{b@%S!vd_NGTb@z^nLz^fHtDm|?`Sy1no1rDAUFK@JX1zH^+3 zU3sCk^J#EPT@Uxw3`WLl2Ht;}dG6hmQOldj(XJhTUy_@7kSaXBg8~J`8NL3(cK>sb z#c+XJ>iC{zV@GZq$o4zSNVjK2&=t?G`O-0|w;ld^lJpN>oyy;IcyOwB_vy2--rc`p zs@|Qh;OkaQKf-^%1{_m+CO5y*xBJIE{6nAQYN!7B4>)v+r@1pyme}e=AqRLQR-M_0Ye*a0X@yA!bUwF3Tn|Hi-j^C;~ z`{$lt9R0=9a=|9qv>S<*b&Dz!2UC!=5cQ+b4dPMqw(Q-z)7kEq_btXIt7!gJWrD2{ zeNItBNJ3#ZQDAt2Or!aPecC|DSGAiZ7av9K(1~P9hVDb*-vH2_VZxVrbd@KsmJo3% z%T^pFk~@PTq&!<8!jQ+NYGt-l7eW8%2NlFqqJh0Cnx`t64B-ck1U`&R6?w#LGm*lA zdcZV$IX9#fGdnRXG776pMOZi|F=&ZjHa7ADCDaRYc`~PQ5>fqB@@DgM>I;KC5(#U4)BBM=v|rsQzCf>(qy&7aWDX_mh(q0 zE%~QWxJdW_EQD}Ur_iGdj&Q28UsKA}hjOYYb@34?l^Vk%S%E{rq!E6Q7#8pxhUZo_ zdd1v1@_W9I#JgUXY-gIKHgSwe$RO+qHI-ayCTikPKCuW7HXfH;&keMV(CW6CziO>5 zIA2K43p-SgBCkjWidp^xq^ksaCr<0Mw+7QFun<#~15_YQWws}93ieVneOBLW4N8la zwE#Uo!QMrN69+OQB#)&7Y{h+T_$yu+>OrZo6%S$~^?v2O!bkqM2}V^k^uv1TbOEhxlZ5+pzvZ=kOMta=>!^VMbZhy1=<(})*t77<& zh1uXK;pk#s8$G-jrvD2#G16G@PVfg%Jy2!E+QG+%)_3-M`M?6+r3}ezPykeS(J3T_eHd0`&lh)Z znQ9t&I63sp>WE3_fGh(OBRcd}IN|^id;b<-If{q-padyqK!-XT3&YZj||j zt-j$@&OvOh7n&^Lf`N5y77@LwboeA8EuzO(sJZs*35`z_u=%Pa=<`I*%PbIc^u6pN zOIjBbP&ie;#BwH|=i?p^DfTts1|p%Qo9w4d8^a`G!+aXRc=@4rA-d91Bzh>OmnaAS zohzusx<-a2lSDO<&FgKIkew&9lvkkfaT23EIT&ni$b^77lOsBn{i1ap3KAAFOX&9I z&wb^6pQt$HkT(Qz`Y{v=#>h1l2c;IJqTjDb=ltw4rMSSKsdA3e&{v7e&SDuHihG}cPR0Rc&1`%`JGg4W;5r>XZUQ*gH;vv?=~>ILtVtbzm!8+su_ zt7)K-OwOei;qU>GU0zTUR!Bv!F)!k;xJ#^b1}8aaQYgSqVL9ScK&=sud6qriyw^u5 zmZ5JYAIMgcZIE9i7}fS8KAma_i3uNH8VnZmlF7|^5^brIe|Nsr4Mm3nKQSzx*e zfKHLJc}|fG8{5_ki#8(*hh(G7g{)+bxEC`0B_vjrSr*kg1Hu8eT-+`uq32v%A^N@ZfvycFKZdI&LDS5ga_o2eaeMuH@1L?URx{cI_< zH?YAt!|2OItx8&`wV$E`(9tPzE5T(;pivzPl~^2RLA)qdRtqB2{`nECisb%5IDx&v z619d^iA7{MBD{!0gMvYoMAo8y(S;K!kJ1Azlg9|guQ*uFM*R$ zXGoxrqXcLu)kam?E7ELM17O68qM6cWg@Te^6de#kS;Wc;$O|Pv-@-LxN#>L+Rxl8n zk@&rSNg>nC%n2ISY6=cDnhljW6BKEPz=ON5T+ogcG>Q*D{(C2U8Om6KOyQwtOo5F? zz4p|g&m!P%_Nwh9`1>*n7U3s9=@H)cs!O?oO5;ho27T0ainFrCEyYZrn9P~a8Q-QO z$saK7mEN=-K9 z_!ly{o)Ma|yuZmD4NoKono(mi=V@;r9T*ft^bNQX%WHx*ScWaFD%hXNKkgUz<7Tz= zIB~|_L>Fjj=9ghRwbr3gx1mddk3HtP5e(EW3^Ey_09|%*@3)pK>s!RXR)WAX$jj{x zTFG!iTMhMrJ=4d(Cp70}wO#A#rP`kq#AGj->iaYlUBzcG_94F3@kub6;_#O7JZc{;_+<26ZBQ|v1Dl{Dj^!7_t*>NRnWCRwYPN!cu=e3UtvdYVv=cqQ zxi2Taa%G=!^8Wjwp)(#OQlFe&dp~qKslTlHbW;30arDWXWJ=$qOKUDYdFPAne?0s+ zK1@y3xes^8%iMS3Z_!c2LQ1>ho-Z$47|&ba-ZY6nta>kA>KY%2Ch2k;2e+NpO5k65 zJg@L*G`V~H?WPWW6H*t(Z$JP1m*PZ*sV)}d`i9TN%)NDGe>`%FJ+i0dv6rrAuFB$p zNt#oTb?@puZ%jUNPwpF&^H<*Kj%Swior?u@_wqe1NGj{A%6P;qD7oyN(kWO%!J%AFUjSa*H$`bg+@ znd=MturKbKZFE+w-EIH!+782Ke~ivgIy_Ntxc%G{r)Me$>^?_n@tvWY&xPuC$4sX2 zPyToPQ}0W4TW*NsoCRIjlcX5iiZI`t;^nZVmZ-lDlSPUu=o*aQE%*$>HbX2(`*p4RM?Q*Ts7p z-`ow$6R(+{?n}k%!RrbUv}Ee;)n8vI=lZ`P*#Z1FN|*LXba6i?7STMk+kM7#AK_7XHN4`}afeJGiML z`S!Am3r-owCVhWGmx4}9=4 z(Lp?xGD59h_r#7*2cNKj18mv-bn3SR;F(~H!!MS;=X%&8KentJ$g3+-O2v}I{a)t36YnI1hTEQ?!qx287S-i3x^ zH%VJZZ1z=0>pI6S#^n27=jsYBh=6y3R}GVia_U1n+%q@wzm#Vldui!@_r`b0I6w8E zr{nUU$tm;Yx{>%3RSGjP)G%V2%cU#R>(LE@;{CFX>6J31C$xiRWu>%FyHy~#Jh(Q= z5%f64oF`1(a{8o9>MJ=#KMM>V@HWx^tIZ5r(f=C?cd4K@Ac5yv{ne2be_8kTfNFXB zV0fQ{7!BeeOLQ3pgPybXa_C+w(0op=ltvhNqvv&2cKQW?&@}R+l4E0M(a-e8YU)at zxSpY1atYQv7`(#AT$c#6dsVBrKy==bPCwKCYO_KRV`c*AN*3Cl^9nPzqPd9svbx0C8@O0F2lE7zBcG!uqNHsWOB#Oxle zmN`$VWlB-1HR+X_1j#;+g>)!&$co!Uq?GLo1!0IR^76w({KO4_@su0xLGni=ng^*B zb{G3CA+WHx0r2H>v=sF$A(h#KXtyMi2D?fRC{BMo>n3sjRl*GD*y zEh+GZBaE(AYHLWfiX7TY_O#q*4+I5bzt-GD8}&W1{;rV9-KpBjSb{ZPdBfFaJL8ox zp}WXZ7kPsB7>wQF-<&QN%O&o~aGnlqE_ww-X9WuP^O_-&uq!nJphaOVeY%qAH7bz; zqx2vWRUDi&;Qf%zsur~_!DyA6RSJPVdg)}ry#QrL62M3iV2y^zMFuKBNa+MX=@ewS zd;t2m9tC_(s_!V_sM5&V2l?h8%yC^RNvGyCHZjPvYFQs6kR6QTSEWWyEg1o>mf3&e z{>)a?mbca{khST9#cW8G+)aoD@1I>9x*^me{Y)=e)jKM5CWRF)A^8+v4;lg?L|NL| z$c`mbm89Uvmn=^Qzv`Ls^X*5N2V}-PZyUj9ODREPcS?CUMdY9G0!_(jCF$aD`;vDk z1Efvp5X+4X{Op8A$Rm>x-a>S*7hC{A)m!OcxzJTEv?-C3>m=!%lJ!9Z{h3+E4bnZe zu-3r3C>RLW?sb+x_pWHMh$Nu2_@bG|ca`^8aC?MY#O?*|3r<%a#3usEW`~PQy2@_V zhCYW4PWy@V1LiqAqq}HTUb0dC7NRGR+(U*u5+5w(7kGrz)9> zh%AN;pfvx3izE~a==B4FiGrn27F$1;MqN50Sty69sEcr^gg4c|@1i=m1RiUWxGp)} zg4%c_;D2I2fF?7OpQZb+S176d0=0Zl+z!cN+kX5ZSn5l zSEgio;MqV5F1(}M+J!4f6(zZ#mEjqX5!UyXBk;X9UO6dQx_wHd$oO$2)B#u65 zxBG5p7{U+{GQ%Vck#nP^uC1BLBuv6d5EZp8CPo{rmWsC0Zd)_MfCHikMVEHlm0)UV z*Ve<*uH9`P31Y<_7Ef($x2;NPYY)2$1VlxBzwG<|uJ`x6zw6q4e*f3&k_#p?lY8#D z=brof{eBLT6i78^v-w6Ek>&ZlCPAipm2yY3+DOE2eD0TkBik5H37R;AMVN9z6RV#3 z$km*zZ_cjQY*8?Hg5nq=&tL%6J31A_lM=#$V3s=AG%iQN@YpVpE*{z~QjG zJJwNBki~m6SsY*R>pz8=eejTQQhY00R;!(hgNs8->vEVaYQk8P3<;(3pdxE9fpd>= zbU7Jsqv|Q9MUH1{ba=khO_BI~{)%FYIppyvZj2IiYO@iA2j2amA!+Fy49m<1(FSKh zt{9@h?v2x{WulnEv0^ZXr|g1~%hMK6*XG?9%d|~G55;(>xkQX6RHHNLg4wvf<+=oJxpb?4=5~gVt+5)*a^%khTE1UxX_`0D*uC5|0RW zqi((r;T#xZ~VsBIJS_<)-!GX^TBltxU zH-fbg2k#muctwD?8HvzBFMI<7TBW3cOAw%p)19xsC=)HxeWJitu!d=oVs3z*KAFxeOSqtvsJN?~OX|AjPI^$Ag1 z>_`6TSYo!Zrs@M`Oh)j3J37gZRu2T?f35kY(20oWZN2VtoIW=_e z^jCI%+Vb(2Dm3|{8F{DrJ4RwkGqZ={_)L65ta6T?$g`w)Ax6MUDi(gtjg~I@b!^kl zE@q<;y(nkeMr{lF*MIZyjkuVmgZv))!B}GEuPcsz?HHhkJ2uVx)9`CKDJv_-pG+)! zV8xKK`}X5QGj@GPtuw4MroV8R0-v`d7e}ks68Ci6%&YW{EGm8ZhA29Q3j&uxGi~lXX%Q~u~Fjg&7VA35;b$hw&>%r^PEq>*sz&MIx*~h zCqETfJb%f^JXH1d->gFq9j~1b#E%T$F|RkI8#BL|cp+zh_=}E<-%K&F&V|20V@0{Ba`&# z9sgvp7^`zWZkw2MPhn&~7Ww)Hmhi;yN8}aX{FBF$yMErjY)8^xbFsMh;-6mej-xu~ z_|aE36drvAn+ufrt7*wib2b(Kxdo42oKuqY1~xkS`#f&(WXb4wp;GCPo}Qyj3e0jp z&7HM2n&aN>1B1EqKJXX*a&0B{$wy<#hT9SF82&rxzK$$TE1tVy^H0yNf99uWhgLQM zb7d3x=*NI4W6y&iR@$fYvOg)f9p^nS!cmu@+6YH&-Z$b*t6(=gJP|V7J|2B_QNnVE@L;-nliJ`KX4;1(!X?g%YuG!c<-{y`I8|}6a4towu*lMsO%p@ zg=*$^*DC5C{p!a^|G>M(3HGmlxcJdO9*NW!(;|K}XUJmUHpYkmfBFe4>r26eJnSS< zjgKoa3ZhqI{60*8*TXQEkZ=}+j|kTx;Hwm~Q#o@vWA1~PXIg((7_=T~c7HqLpDt9>ixg+>uqQn1v$>`T0f?ZlV()^86OT-8oa=RTD% z4*Az26`xsqfFFP89p;gS`JBSD(iVoAv2i}146uFoX<`uE719Xq)hTK44xPcD%w&`U)kNG$^zoywAr_u_rJ>SDpOO;s~;0uQ&%s@yRak3es=Az4KJuGq%Cssxs^I^3c zNsU1p7cmPe+krVtr6L^Eh-e}u1WtK)cUsL*aY|NAK_6zv+YDJuSYOHjR4=9)!kJ#t z((9)3DA9s;WBE971}&x~oVR&n*KigYF4FP2T*?PrL@wB*t;mTll4&Q-Bp*%#ZgG7N zqX^=$aSl(;*HOvW%oWcq=@4e&=4N$g2f3+(J%$r_S2DI~x;7nfe#@1ZA)YKK;pS7g z;WMK)j&Vy>3}2S~AO#pIns9PYQw7zwg`O?3Qi@r~JQG=3vYky2?DmF0ZAad@_ch!Y_bnnt29u6VS7ZwBow?j+I4FbI~wM2K#VLTC{@0$DfV zW0O%xq1I^;5~mNaK$V9A6$0KGQGj4qx==2TyH_ahd}g-nG!6zVHM(#Ti6vE zqMc`#col#QY6=Z}9t&Q{V0hibc+lzm6(4_6E|Vz88Y_Mm#g~dm+A3aum{x}GJNB6E z`LZouAvt2DcJh0Zw^O$Txp)C*-!f<^rjVqaRUjAOp5_dD@q`T!5+?LZa+$KfRSMt}e|kyXOcdJ@#E1<@oi+Jr7fgV6dm z+|fgQjmxF%a%pSX%QVl4?-OYqTs{Y&p)#yM=rtC|J{D%^qX%79 zOX4zaE2C!x?GEw*qCqnWL*#geHcw*HTA&=B4i8GbGh6Hy5a+q%US_$%72s%q%cBxd zf?0ct5ISgvEKf#LBaEHxpuNCH)8o;@kIZ+wtFi%vwWK$|SwtVlJyt$IOi7^7pm4ljpYaoL)qyt7_+o8h`&5FC)qE81QaEq9H{K!i4@H|#)fbkVXIcFM~>P~DomUJXyLt}-)tHkL+*KtzrX z37koWu)wONoSI`H0k6TBW;SBf?#?dsGU?)c7*Yb2i$VG;LE6c0p*`ppoVx&0131)E zv|^Z*#Q8++$9xOJ+e-**2^ZW~nl0*~oa`u}cstIauCy@Ij!ObLSH_~uiz6OV3m7vY z3ql9Q3+*a}&_qRfgjhvuXasSgP}^C~Q(&uy-~xhBHn7()ftk0UAhgo-sz)oBP{b4> z5IbsOfJP-w1)~m77S;kSpGWwxeHRV;GfD_z_CqBMuT6j{jT2eWA^?pm_MLloVvq2z z3tL#?t0apjfm_NvijgS^Y1u}+X;w>leV7qmVR*i`$j=s~#R+V73cZjC zQ@hsZ)DTrf3``yw#H(-)U~I{Xjmjhp&DJekXeO0%^gzz=^zTouV4^u^<}szo<|@xf z-l_`c)y2!c8H-Cy$LBF`x(91V7i|KX!^+;goFmSNJmDFx z(6Z7s>?kE>jZoC)6<_ zvp|*FOby+=>5+$X?*~sj;WkW~S-HveEu%yUv<4-9`ons>&G~-mG;kDvEgCIhzqOe?ZGe1a-NA9p^_^XT%XNU>>5rt zS1cMcrxdRku`mxOGl_UQo4I0yNlE^qs+u2Jmw1o)PhI9Sk3h}k-6x-2l(}*UH#|(O za~+9|mO7HYi$1*g@~2~d^TLVR-&WqZG5em%g;%eA{+o|}+hra}U9~x7Y*`ZAj@gz< zU#ZJocCgac<*1^r@~aD}_+c}anKR66N|`lp&0l`|KsJOr)Y#)p?9sB!ycQxkg55); z$4pPo^bMPt;?m)D>xxT9QdSlFhVM_i?AwsAlubUhX4sap`)Nm2)hD*-v$Ot}BSxY3 zqmsVG=; z#$@5;sf8fq3zENyP&fREAK#F%P6n%u>N#iexs!WmM=j<^@g!G2Fv-;iZ;UBP|9IO_ zwX$)1LmCJGe9`;t{a-Wy7v|Z-v-rJrGn&A%Wo_JLY-8Z+bnizgx3RP3!|yD9otY%- z4}Y9EuXcC~Fz?4g_is{?ei(ArZ~pPg1vjW8x3RHHe}XRy>^y>f`t*&YlBTke-3#`+ zz*z5f2wg@UX%&I>j%%SsM_Pwpo}JV>e)ryaJBPDhshl-7@$x*-0Imf!-?^^|j0)nNFxR12Sa<9gG%W{RcQ)svykK_7lr#sw8$#Y+#&Q~O%Xoy3c(u-aTmX7G^H zbT_M1{VqfOSq^76#xtMrk$^oHUp3AdUhEOVG*BaF;Sa98!m$Fsq~;KhUE&2LN0LBzu6n4}SUVt?+lcpy3EMmHOla0Y3gy>WXg_r>h5^U6sn6kB z{!CBy4i)@5HcI><_1smy%KeWb0JQOXfBmNj}ui~qxX@BJ6WOHaFB_`jW5z% za)>AO%>ugw?_;(Xk$yWFAzd~$lhCFE8CA^S%hCw1>j1;c8d}cc=!aD@mGOBweMho4 zkre_+L05oh$T_@nfVtmCT1Oed*i6oK4mjKJBwG30cgYdS@%Sm%F`nihq})$+4GSu{ z(2vp4DXU_t3>1i{HVf3ui^->H z8&k;T^LnWkKO25goX-~w?!E&-g4${xp(zB>Gul0TU-HdqGiwal%p+VDmbIuGbLn;f`Flk!-p)27+)|YiB~@1es5de!xmwGU~;!v2-=`tl;5`Tfym5S_4#J$ZpQf*O}*xD zK$Ko^2=CgCvWXrly>Z@q+L?7su;ws3>;j`is>NCBHNI9yi_$J(>-Jas_|&Tc>5;O1 z`)uP>h7gC5W{GOe;o?zH9$?!ko@wW~Tz!k`NPbf#cqLm(!97!EvZ6)%S4+?**tN`u zt7&l7JD@7?24Bna5)J;sz^MpW)Br9*MQh$$98K)x38O$o1lGmmqsckO$DFU>7M0hK zHK!?R0h@~DN`?-?l4D@o%~&DOpQIYUY}!zGDA~}cNFwd${t(!LrAfS>X|7B5kP3f{ zztWcrX@ycXxtaFdyN7b-lwg!WGlOB~L$lloVG1+JTCb?oKnf*p;P ze*n~^EYT9#K0s)Z1V-n^C3FYn0M~IX8%$so9!2U}6bms0F;{z0JBrX|5hn)^-Lnup z&52|$HXAq$c0mY}m=VCPK5ltTp%6zVhkzb~j)8d|UG?iu+d2I5l&E*gvLHDx%j zr(xYL$4oJ4@nT$YO~pW*Su~*s%-Ku{RxB_sEi5dZXeQmO*lC=TPxD%#{+!=c<%R16 zf1>{MU+AR)OoJH(!1?JKF^vf%g9X$Ae2ExZIK^?k{TpHCYRI` zXEBb^v@>>MkfsOdoLLEcxWla|sMT=DtSz9mLG5xrn3Ka_@rE;iIV{Gb@q5v0z#!I6K|O+tJi1F8s$nVzrE@>p1E!! z`rt=~V|!zgc8xt%wf~jTjZas&df)EP8)L#iXMfm#-Z3<9*X7Ta zWPu0FjopPAwR zuDAd5+nY8O9~+7#lWyD+N=tXYJo@BAw-*mZ!%gEiH(4qJ<2CT^o%nvR;)Q=K8Z5fy z_b)ChG#9hC$K>DKUiQxJTYq+iCzibwSCS{(+Pitlt+Bn2sF`bSy!Gb!SFde7k-i~w z=Jkx!{+6-Ab;Y-C|LJ0-QI+H-B&n~#uh&bn5cRv9zQ7W}QDKXC7x#oV!Tx6U;+ zMoDrj)*p$MfBxKun{KC!tpVcspsj1cs93!Do2%cR-&{1Yk!H-pISc0Py}Gn?f8BS# z{Vr~pUE8m8eBQM9Y6aGG_wZl-^R{#<=Av!r-p!Sxqi-E9{>`n2EtPA=>y&&o>D;Yw zef)5!HpA@1hNLZ-n{Rf!+5fj&FTL^P=x5J=6`4-VC`(HCG41b_H+Iz(uQ^0u^w%C5A8$C{LkyZ2FU&q403 z#EAFA#p=b|{%OExh#sAD>4X2^MpWnnG&e0Q` zv_8u4^o+82yhmgYn8QF;bl^I1hczi(IH-smN@9*E3pqiM)UshtJey(>2f>78q1;Z( zQWr(>D9c^IQ6Yxt6AldGy_^Yka%4xJqX()KnBw4CM2s~v*)%ZD75-G@KJl@Q3fd?^ z5s8u0h8css%WXXcB_UnHA9)y$QWK`emdkNv)K(#=<&4@A%RWMhbA1S|AI?um&3j%+ zbgZXTtQ9AVX@#5`(?wQsHa9`l4&nzrgzgUnvU~6UC|Dq8IfBw5Fh;gaYd7TKdKI2WP~_Q+`V_g~64tCP(xh@v)6HVM&&9I2 z7zDIG@IxH?VUH-pcm@C`5RpFd#%2}FZkwGJ!RbOiW=IgREJ)iPu=WYm2j0fR;(A^T z)D`!jEqVz>(!k3C=LygpCQ3!#jfzqNqY$v(gdW-CbM$eU=aKxLETW!~ zloxRiujDcf^s&9JY$ZhwYFXo;)Enl5nm34_?mcG;~71*$x3ASss?bXmI$Wzat)vX{t*{7m*ndp$0>M z_(X$Rg=EW(I=+EcbX#de4C;Jz5VhVdB0cR4Vp6oQ7?f=y-7cFXln+M4H{6tI3Oidl zEyxkJUXw)F*d!%{>zP%~%+!c76T&^Eld&iUGzaIC5+Do3rcI%_Og5w>*SOR$#afhI zOkYqKU&z%|anK_^em^Va;v(CCHdZl;ff??c9o%ciJzn0}#o|B7)Yo#Pq<(-S(z=+v zl65fcpwK~Nq>&!F3u<&c-N#;#d$_HvrxViWm-y{D^#t5?$tGCBtVq*a6ucN~Wj%L_ z*1d}B5*uRJcCx1tU8UIAhI`6LC@4}2N#$=q7iA5J<#(uuEk9VNh%D z^Ny+QSbHoI)W~)PAZ8{l@1bao7}VgVDLmB31SCfcPSYze{lF;GD~uMA5U^DWYIydt zaSESH@**VE43`9-WQ7`aLN7rF#Co}xWy?9wp7L%y23@0p$D79M!~9m+Jx#Red?M}k zD(`chU3TU_r~+;Mz7_SITo70PgJ<8@cr>2(7cBUNhh`}0V-}FC+Sy?&gAj{Yw}s(5 zX}7YI^mIa{hBQQc-J(@TnrMsKBh*Y21NBD>M8p%RZn$%u$eO$kD~r}cO(Kh>ORZ@d zk22Ld9!^2v@e>7{4$73)RL`6_Lt zVeG4BIeJYFK9{?clFVg7dzwe?!0EgiV+$#^`yLG_#^k$<8l&cPep#ScfP$vIlU~E1 z%ax2vH7T+-7_P;OgaZo2XssO<8t#y%<6C-Q2aCM$GTA-6qJB!dU{pdv`BSpofsr}J z4zAoyO%vY;c;MY+441d$x~E#T?R3F3MIZM08d24*^C;{}XRwu_X$0nMMqwDm%%G;Q zAbTuP?%Wm5y}K2r3nVz+(vq2aF9;2?Kqp}s4ndMyqi*+a6$DW;Q?IqOBx{f$d{7KB z9mu~rtO$a|jiL_eek-Oz>gM3dPS$|tEtKGw^PrHcOl}J1;=m`Kyf+pUd5qIddRVLf zb+_Q;rsDHc;CL862r_vvB2NC*pn)H795T5J(*9pR+%8war|@-?g9d@|^?&^Ve@~7h zWb$mtl|ze&dV)ofZoEMQ$5{M49F@>2O7QV^*f#mK76ryG_s`ufupny$yG@S3|7X+T zd22v25ze4elY0Y!4=ykk8nzvWE1GO52d5;;VV?_=@4El96ZGr_wqz|)3l9yFNll`% z1z1N3&@RqBxe@LOlq>$tRw=2K01cX8b<3P<|D_=U`v3Xb|Gi1C`@b3|>Lh5&P|<$- zWK)tSTN1=!XAlz;VT(Lj7=cS+IcS>%?qm}5`u}?y+`)ft%3MDu4sIn}Dp302Op`YW zdIP=>?)GGF{_hRYhY+MdSN@-ydinFoyYk=oH!*kae`7D$8f3wsoyG;)i8dZ$=>b=-xI=9h zio~{>eNtP)y##*9+QT?eg%zz@7fI^2NVV0X$ex(>M~}|Lcoov56Aot)95-J);ghX+ zm)I*RTU1_YR9_`kL%11I_`HpwSuaRgpCn0xH>f9CU&tm{CrWRnLBth4YYaaiHgqPmP2BU7zE6}yD2$j6Dh*IT z(CdOI$Oov1NsTBnhdZ=LeW`*>(oz{}YETz!R!lf5(KKs?WNt%5t<{NJC4B#T+8Pk3 zV^LgfCk2)RcmTVVr$q%a$)K<%>2?t6atEYvxd7BrjZ@_sGph*#9h2*30DM5GDCC^g zPHFo?cTYu%M9Bn{pZ0iwy>U=~{g5DZa&Tk$VG;H~jP-JW1Grx|!+}CIsgq4M6_H=y z6jd%2Xe3BiiJ~q`^dyXvZAj(0Um`&Xz9}Rl_A-G(GK6kXs(~yzRBseS#Z6QVuV|er zPNFr6TBgFyYOJSp`J_Rqr=j4K!$PLJoe1hKWY2!d&Z7J_k_`4KBnje%T77wM7DFSZ zYEiulCsn*%a^YpNP;WnWHRY>BVDpqG0UpO~D=mMi>gfTM&{!=vW=# zBhh$;(77;HQ$%&goX}=5jY5kb@xc+&Ov;3@Q?LB>AvPG`=iuJ!%avE3dnxbgpdpV?pNwO`eeK)+BcB>TCNpH$ZoX6Wgqv za?b~3yHs^pv5qr@&~T9-lvthNaJkaqZ!danus*cWR8J{U^R*x*rg19Q*@EB}v=6T( zh)aUDUaL=7t2Aij48;|YXghP55Ea<3u~cCrEbc%_zWxq;hf2@s6WR(GsYh(oHp+u4 z)vJ0a7Q3`0cR-;%&>Qx1LP)8Rb=(DKUmvnueve?y15TACE{RfyV9iybrb0K%TkBL<$@_BS~`h# zz@L_i4O1<`AXMH#MWmILlmfOkS6E(a3ds_ZZxt5lg31&CM6l?ZHWCmA0lPh0Sj`-MIv zWJ_Te3WQ^j#1j1A=-DDLT<+3%KV_i`Z4L>UN%|6~$-#O>WKx=WT#0jp5PR*n^BSAK0J#Ot*Es_ znsyl%f|^=gsW4z-qK(>fNHh?|ok{{}7{+ z)-Y#fG~@-oj@d_M(4MzJ_2UrldwDx%?PBj-vqnljNXlU#X(r5BB|4_$fwr4punuz5 z=3u=Qh|qjcg$TLM=l}qJ2om8hJBu|Ps?U0quj)zIvrceBgeuP4<~I z^#c1ssnAY=Oq4>IwB7gxs!C|XkQznj%cmR~R$mS*W>`KXN>^fq3>;jhC0K0$a^NvK zL`WW#wa^LyHUGGr+vk1-IC>1B6;@zqy~fn+eUZ`P`d-d>37{zYh`57b>jjBz=2!vz zUb+Q5LD3){UGQ!JhR<_apI*!E;9a!t0o$v=UeHE`erWuq6PO6hR*cy}SzEyb1TR>K z;i6GTH`93>-pxfOD`qX_qYcJt>3gPK(9Y7$+;o8C3#pKGN zS!f`rj}LPnp81uMn@B1-CVHTQ<}~)t$Z7Nru|?X-W#X;5!1JIKu~xP2@tHWLn)3Cn-vAK;)VEEL6m=IPN(~C_M|IXxp7&zhezG$ahc|cpeQtWmD?}-APz> zh;GcrH2OVZXzMo80<;m%a5ydj*US*W%o-K4B9^FVmbY=s@#Rz&t3Jxo!5m)9^v}D0 zIgUs?v4h~)9TZa1E$-APcAZnlLy6dg;V|0jdlWXfh~X{5Mp1*9WYFB=GK6H%E&!$4 zpmr~rLrWrZz}mV2;q+K@E`oLB3PPjC-i8s1Nn>ZG)}o5ts!P>mDTqmE1G__%W_lZS z!Ctll(dRIHs;rgjQ4#3_kIe4Mktt1e9rzY0@m@S9pT1Bt!m1W3R5m@iUwV&pj1bhv zFe4?(|D$Eq5on`z?sq7&(Un(f?Na_u9t}-EZT=8UBtQu#O$LZP-b2Lof z&j30kU#5!X)JzzckY*IgCW=(j(mV5T?j^w@l9%waTvh5yF(cs$WixS1 z)sress;lcfemb67?=EWNL_Vc)9nN-RwI$(%u}123@0=dYFtBh?2@7Vip_k?Iq#_R} zk%%;S3l-EnCEgw2C6(INz&;Q-9>Py(Ar>H;rrP3EOKu9`9 z4r3R3vI)m9D*~3T$lWb6TWVP=KJZ?PP#>mGbgbW^e&nyo;p&df+J@zk4}=2=7x5|q zP)~D~QpJ|mYcKr%k-sE4Mq1yj_pJjpWS|7ZgKvN zu8zv5Zmmn(U4HA*p8Xj=5r+b|pda73{Q8l@KQ!Lz8UO0@eKmN54HK(8d_?gU6U_UfAZM%7C&Hn76 z$3MQk_SOd;^AP8VU0?8pYvRSdGV&W*x5jT7fSy!^?KZPVuOC(fVy?apoaFNv-%*F}3@yu5mR zZ&yB5EZ+R`qstTH#cR*MaE(lFY5}*G^IzR~!ckoQ_cLR!UcdeN#8K(5CtiB`{IRGv z`_}dS+)!6n@#^dHdz)Lw`a-+kxV2TzB*wscQR(V@_uP>euFJ1Ay>adHa}V*E;piG` zW@|Kl<6}94_@wp}x91`@+px|15xsrG`Ht_|Gt6*gj(aHLZ~|vx)MK);=pg1P+~q+irFa@>~9+@CYccUo*}A0z2{hJE}ro0oIxV@1>j5+tvnHJ zU2wkcdTUPFc;qSf^$2KM{nSkVQ`AaLaaeE7Ve)&yay?PG|B)GH@K|4M1}^n#3|Q5L z=E~;ix|HI3Z$4wG$i10hsrb)PC%Aq*zU0!HQ78Mx6BWw%q25ikmrH@jaOCsr2JXlr zP|p4G^-ApQiDBi;{^P^pGvGz?&dnukMeZ})c<9sL)+YUClr}G};foB6|4x0?CmGt0(1>i)p( z|KTsj=$h?+@c#X^AGynK3EA9%C*>;VAfMv~k&B(x-af7tgeB{xYWxyQg+#$UwE_Q$ zM@>?$Ax;61uL_XvRb60@{S!;c5r#B}bGbK!Zg3E%hd6Z`SFiQx_|!@Jb>DWJ-p&J7 zn9Fc=pWd^jGl8zx07yF?g|&{HLCz=_#31?@$Pd-52OZi*8>uF|Md*xu^mEF3MjS3n zGx_Gh4vh_SkYPqzXSkDM2w+dH84xnj04Z>2g0NTbtpHs%S9U!sx8p)F^-s1O8c>#{dMUeRuFjuDQEN2H ze0Ks$;wCd&i*A2=!!MUBbe_^qEC*LZu~*_iB#J$Zqvh=cUCuf*bT`on2yZ8^@k|SL zQgl3{b;utJS{0$&xpzYG>RIAo+HA3LT75^`6K%DIOU6s`!IvrJiPlT1 z{Do|WSj96?{)*DXtx+Du*@hL3bduU4LsfGUL+uwyOexTsP`(W-xI+(FM8eA zf!R8#Fvg)sK5K`ZmOjK?0CgWzFWGMH-gs2kT>@z`p;6U9VnSypNDbG5V98<7g}@v- zZh4FH5{I}6ucB9F;(0E3*Zf-f{X-0fRtOuV5JA?21%h9y5zFf(#V=jCc>~dxlQj_v zr!g}N6ljWwr?N{BHAX{;dCJKU270ma8o}Nx02xN#=Pb3O0s*ezB8MRbk_NG3fUJ~E zk}hN0hF{pLF`Z!28Yx)cCuk_CRwDa^gh4+ggak0~mH{dnnJ>jq8a?DuUOWpCs>WJI z2*#;Ku+OV9z>A5m)XCFR;+`;7w zW{Qho+eM^Slfdi}X;4e5i3R6V4dmZ~9oTY$ln6v6O(6-XWfk;`S^EI}jgT>AfH6HO z=?F?M(zz0K;4r2oO&m%Hg5VMM`8{ROSc21WTu@--K$$%oTz}+{pl`+yQBPi~@8E-H zS5FNN)}Zw~N7__ecCKNV8j8`8c9fxxMscAA)t3==LDCe2A$>+)BBu~sugFTlurQrl z!yM%H@b*^073MBr3`*ETE`U@|HT6<88c?&9SWZ$75Fv@t`y>Ytq;{}${eUc^Ot6Qw z-xb7llAS>Hq7ddyfO2)BK~d2`K3Gpl4B(@;ynslE!a8j%5bwQ`9tXO8C(8y)Wh;+T zuPe3clFs=muqsMbJ5i=ubO}1ntqO1^dn}3o+ZsWPx**A-YWKCH|G`SrVc3>m8%0xT+V9qEcbNxHKMsqQ;@&W`>seepjJ1jLg&E2g!6<(ic!@cXP{PGK zzsGs6uzV4h@T9@Fu4=|u7JZEY*)|7LIrrSQU`+^1wSS(=K) zo(5-=EO1C1ltIqxeQ~Sun1S*dxnr0{ETS3@73^Hwhp0PP^&p{Zt9TONO?XX$*lS!$LdY+_ntRa&1I)0!T8Rw*frEmMzuBeWKPCY5wis1lg+e79{_CwjZ>k)*{g+Q}U20M%J~(>$ksI~(u+y6_0qM7m z8uq^0|JALb>hq2p(YcSN-Xnjh6rXrf{U-J*^ZI%B%d?8OBCf*uook}^*z~}h--H{- zBV2#Xjhn60-?{!xEAcyNyEOgn*M8dehG(nd=p6i^7fb$CQ_GlpNm6WdiCE-LsvDX6 z%=y=^HT>e3|Lutzjs4XVm4T*DZapYAO-%gb$I8U(k3M?&jT`;X zH@!4o|Nj1;Zv5xgBPYg{H!Jf0{PJ%~HZr68zWLx*lQjD7`0kz2z`o;=B=Ooy_5YKv zH;-%L-n++VVr*k?@AG7aNtlE{GLr#^fFKbyQmdI^z+p26(4t)+h%I)rxU_V+H8V^k z2pBZPe{Zolj#X z4@&QMb$(TQYq9tl+wlv3e)nCvH_KWguPt@A5FKUbPmR3rO^f0Bxqfr~^_P@ncH;Bw z&aR2Czdrx<#MQ?SMUI!{o_}ESNT2I}Zgpnf9{=f{-~C@LJUF>|b8*r2y?f6W-Dui> ze(_uP{Kj56|JlU$*#oD3ADi6BubnY?`ub~4FZY|J5l>qn`dXnIi>6!!7xNGL_9Pbf zKG&g?lTq)QW3G}Pv>6I8)0;b9@A_%-+@9LS1Im2=p11lUFZMz5RbbN_OCQRDsqgZ6 zEr-Xx*|G4=$#YGv)z_QkWXDI@p@#mzw>Rp4`4u8h$_Bn1|Nh4{i*Nn>$?cJmTOa?r z^X87tod+jB_Z1(z@lj3GE1&GmX~q}v1E1ac;`I5m*Cs!{-)iRbmkyk}{+j=_qL#=X zzW$Fc#U0H(IolO+Ab9gklbP@CxQB3wlS1Xc4;34(M1ANc+}M_e*Bd_gwf_3$Jr9vz z?-hP}OGvK%?__sx)*IF z-1JDg3%~gZGh=X9@XE@Ne)X}5rsvQ1g-vUHX`d^9R1LTy!|N zD>(EY?12NOt1q0YzY-rYdL%7tWXPC(eJIAd9&*sv)!i62)dt@<`uX54$U)yb=Thzs zoC|z99FbL>2~|U`W8>g{5#WEoH{A5^n&Bf~o12D}lXG7VJi76T%h}hSs7cOw@xJRF z+o8;OXZsr6=oMeGZv5wuHe%y!VzJ}410n?vIfjqi-_kei+XjIwZP%b`cy1)mzwrKN z@0*~uCu5^OzXz{d9d>@2@!pz<)63!AUY+hr`3HsWZsN^I7-)Xi zx6l`A+n>M%{`Da~dbuva^Z8qAbe9sRvX)Ku+&Fc!-k&wW`Avm;@Pi!N-$`9ym-gp~ z)@_Bg)aHmMv$?m(4q175(}P@XJE!16mcs~H=zdw?cn45QJxY48kc(6v*y zW+?YkLlaca}N2Q5s##6we)p(8fLu~<80+fNeXgxKdSXULAlO{sN9(xpWE7kHGy zc~yqHBh-b6vIw6UB=Ue*rLh1`mEl@-x(%BuVj{MgXruTl)T@N9|I+FgX&>6kNCgrj z(dcmn`Vc`;!lhQzvRtaK=Hb;GXHv7?ey)VTmMDn9CQxNqmB38{%&Xq2kOC2*#>9P+ znxt{bS>aB5-djPXk~&mTBJ$H|&WSRDE?eN#lpCud_#sIt#7)pSMcjBqAFc)HLAVPk zeTsiKSL)7Gr!WkM)#Fjj2{|7U13l?W*5XB`$QQ?Kwt1g6nz>V*7M#UN4#3PPl z@w}%m6V;Wb7Hvvto*`Ymw44&}cwCjE}h|y(F&y+Zw z#_3T^syIyDDnCVmizw!8hd6WZRD`zR8XQ0s31EbbW=OFAL2X0^g;Gd0?Nwn!D`{0r z7WB8a-MxEyjC2mz|7J~vH1k%>kIz(+B|*vT$O5BYHeEv?mI~;YTh#tWT$;&5U_y}L zOL7r#dZf$KBTz9B;F^pexqgY|L$xjY@D5mer4@~&ZT+4%XIvIGqj_xRTS`*DZA#U{ z!OUi20av{_7kmKb_{CcOLaluZ{$16Va(p5Aq~Ac5ESj35kenH%e}~nNB?TgV282n#bgg@OT1I20qd>q zu2W!iSjx%wDPKt)a*Wtq7uPKI+kJGcbivQ0`t5b<)xow%3rkyyfZ5kXZXwebtr`?z9|vF=c^1Hn5YukbKD;8DGc3&fh0T3#I!G@1HdSLv@fMO(td{;J&x1tZ&OIbpzbCYm=z%F#015&8r3uDtS zHK+|z7E}rRR7243C+L|z1M2i(Gcma5WUHMZ5HgWPG1!+=#q7f!_{P`ol$UI_sN2{R zI2x~_v?>eCd`diz0jryySrjyJFlZ+1PNQV9g?L^*XNPw3UwDPXfC5W>uSC&7Hr z0$PkdRq)q1znxVWDPvl-4?(EyM$SQ#UvXF?yOZa{X_QF?+ypJ|GhnDBfqVkm7m~uG zNFJ>%q;z*!QQ3lW97kDFgh1I{C31tbgc1})TBTMbCn`vEwGy|TV-;*G<&@NHRWn6@ z$^k6*`z_1BCuyodGn1ntB$Py^hbQMKy}FJ<@#a?Ig_Pfyz`1bCnGo55K#5HHYfv5Z zm3MWY4i7F*aSFhVs7oZwprMyCcciPmTvy>rD)BF*Q>j9=;QvI))1gHZj~dTBdnb#< zlDG=K*R60OiN%n+y`SW2O8XH>%eGOPzz>t=aYH{B{BrG z4C#SXA!hH~e;dF(ji-ghGz-p6YUIs!n)PsWzf&S!0T@>=XePoL@ju#pVU)!dn?Ii(u~FevKDxM8myTR5~gLH z;fGBT=_irRYRg@0I-EhKNy)?nT+QeEPxPgItuSnC_6mD_+#N>8IVG>{C{qUOFmdxE`NeR=6?m=1Z>+9Q$b5dnaMy_x00{Ej2%}C{(&Sa9}*a zwlTFZ4UAsX`Gs?SnSbcy_%olZd2GaPe=-;_-5R-a{$IClE`7x9Iz9gL7Xz-peSBMR z-R_$_G{@XkL5@VEZsdn!%q`Fq`(8utd zrmIP}uUtLvdNJ?YEJKY#K(23aRKZeBOc%wB^Z2>r6CyW{Qm zKe&1QdZ6X@;HBc|`U+Q+n zUwQ2MEG&86p;MF9zSv+!!D#T*{O@PHfAad*n`h+z>tw>W;K`+rDDM5s^z*Fz17SlX(|n`plb8z_aW!n^ z3dkRN3ll+O?nEeNI>htkR*pdcGxGtf7o{Df45zC zRjBOl>+9qj`vCjL_~6TDe4T42pj+@FMD!gBhwa_``$lX(JK{SP$QV&hfeF$_H!H#~ z^GvqA{PI!rb0JUN!u$VLFwylM6b;w^_yJ|WczxTNg7G}7>$&sE!yO~PQp4Z3EPP{l z_qK(*N84VW3q?bS>tFc%L;<<*(U0)apZ+I->r8@_zJIkp#tqE9t8}Z)hCj)#?2vi- zDbHm%fX#i4S$zbevvLd~XocqbF?3G6XL)4)58HaY-A(OJ}fg$lO}hkvz!`7+NgE6c`nQ(sN21XCA|sS)(kBC`FMK(J+mg3-{W#+-$c9yPI3 z!8_4{!?KXBZe^FE1P{NPoo8^ekj`!J;7Emb74sB^Lln5`Y7y4?h#G)KrpP%Yx`g8_ zeVhal1qc==Fn}?r%R~w%ARKMc@SK+fNgXAirn?Q;)Dn@?U%;mV4&ozF1i*9u{Z)F- zPBEaMAZQzQ2W8-4#pD1bI2$u`DkTB}qHvUCf!}gs;P#`@5&4pLkk(*Uj3iXCXe2a2 z2!x+OXjN_6wZ!F`DW9r1FHtUYoU@V0k}iV{1P7`J5!b0DBY_6MNl)^kq|FZ{Lfsur z934S`xq~3?5&cJ`DKixZRs*OSge<5$lk}=uy3$T{EJ|g(f+ns^E{wAiE75z(sgj5+ zRfGy#L^Uy4T^#on*@0t>0j1gOTr`g2(TvAsu=C~AIvZD7=kI$HQx}pw7{d}UxSuat zr?ugf_LqUX!H3n!!McqLICxAVK7~MeEd;l#5sO5j8JJ%XC^hEPWcoD(Mt(Vr0een?zDi_N(>lC^0GH5(lbGIsc!7S*g90dgUwdMjJt(IOIU*%iDJJa zaKCynCLuOK!HMY((M+nN_=fy^~1)K2ttTdYWjqDsi{Wf~BFrt){0|?T?oW z{Yj(QbbrvYpH|nhTg8`{kW%R=TGmkm1fMS}u8n&`1{_*LLmKn+&8&X0;gYpny6>nYrH7}`LG|;h;OwwwdQAs zfoY8G@bP#B(V?)ai;q%XluDqq7|s=8qzO~tl1x-%OC++DiuLPKF-xkT`wQ7hAT=J+ zd5$mQ7=hZ{2mUBtbt2}8g=j!E5+MJA6l!gl26M_{A%!@nfRqR^3I%>(?MYUP`TbnH z(4>S-R{?%$)y}&t7^jvP5)`r|)${Z)qMhdRNF_4X7F)`aD^+?vpTm3-3bG}iN@0MP zMlCpqKuN)@5Fk+73gv?z*_01QGlMT-5dq^nqH&U%$@3O!=#e|)@(GDx7$+C@E(rrI z?NrRdVV}B@9-!!u z)+o5xAjTHq8TpFDk^2Y_UFYVv2_Pb_;xsSuZEg~%cs#ug!;I8>rrCvD`e|U`-JD?L zG&2QZlbXY++#((qQurPjLwXUdy#60|rZ>jt=EoaUw62JqO{#iW2~s)X-gK^zTX_tb z$qCMK%u>!F%Q(*-Ct0YNgr;W1srGrODoiL;s6Iq1sB%&0Wg;efK_S%_E}vL81z&nK zgTbFVgP2XNAWlk=h=YZ|L33hsA0q1s792L56!AC(Ngh~+7!%N3{x?i&8vj4@F(r zP~*2k0N3^DBQf^%WImaXWJ^LbjvLDq#H(Hcx*!Am)xwOwE}49yJG-WfxRdC+b#{@pF%Uex08u_d@AZof!(lv?=yB7?l1 zWt&-xN`fn_2+9pYFQWA|Qj_ePhG4#CN?Ws*?PBmZ+3)yX(W0i0rz|st1dh$Ysq9#l zKA))?qR_0^-54*`uG%3Hpueh`&66PXVXS=ec@P^{_m zD}w0z6!)DJpmnlISWkV%1UA+tO=do zVI}A;>dc#kf7cUMV)-852RTE;2Jyl{HBK%T326zLKa*?Vza`Q))I0j>D6C2Fod$1W zxbW6D>=gB?*uKS`Tm_hVsU#)784TLe+X>bwpMG_!tMJ<2o<8*BdzGWP?v{>g_ofZJ zF(&4l-D5`mBA+qjp6wbQd3<(p^|eZV@%PhDzAAuw>7$P=SRQp|Vf@cqo-tiFu;&kt zR5k~iCyuZBy#4c6w=|i*xw7+T)B8szzcB@fOW5h{6ZOi!cLeGtj~(lL{N~}`KL-R2 z(jj8KGWzniExq?$T{XPuaLzgNxvs?Fm9|d&xx{Y_6EDB?dTjC!fB(U?_-b9@mbNt= zMf*dJB%dS8p-qjOiYCWGI)u+iMQ zX9|mpCX^koA0OB`dF-<_A5Z?x^wzwLTs)5^iZ(J!{F`FJ8CG0EE5 zoB!JO$-P#HuA{q?et7cw>t83wj*8h&KAhZl`kO@~OJBTw_S)KYH;pZ^r(eDH+_No@ zjAbp#A&QR-aUQN%8vK6b-c^CKV?{TAUj)h@C>&1j&pJSj&)f0(_49S_8OGcdPsX1= ze6zkTP&fX>NB;oh(Uz=_f|JJv2X_Aa&FKB&w$r)^U!80D#Ia+6{>fw42mF&Y(&mXH zLUiB8N_HaM?}~TR$;{;8!)vab`h7U@%CGl9g!uX48wVSb=XIBjKl)R0=e2)jzb$lx zPwPJ~+$-E3y7sq?k8IzuA^pa)j|G~>ip5{goH-UE@Epv=QK5u;k`G*a@!9i7hq-Wi zxsZ2z(*e&gSJV>qpL-|oCtG}D%d-M6UHi)4a&GeR#GD;DJGL}^JvsQ*|9laMzWJbN zE-c*H()@n&b?J*&>jrk-{K_AA?Vxm-d_lbO!u6JB{RQz^eV;J!&Eyw52fBun6I(Vd z8$2%$`%T5x->pp2qi=s=Jhz7#wUsaC56!qc8KiU`0Q^L%(KIK<^krg5S$DR>^#_ax zbUxG@YWoA4AFo`u7t$LR2gBQbwBi!>Nz7?NKY4uJ8G!LwA)xR9^DidMzfct(!0_wN zae(84o%f%d1LeVs#-Jw{a6ALeAp38BBt4+!U%K%1p1tziqY!-8(c78c4H0$OA3Sv7 zblSxk{{#^J*xWVS*FSa*uefa=*5{okASnCajBDQZ#NwM{tJvF>8@S0`_eJ&rZ_m{& zEO?>d2DQBt8@=*z=j_q=`cBXmy$`&7H1PKDst;dF1iRF%^5XZO&6;RyX;DVoVp^2R z?z%(1q3nr*tiY2K`R>5KCL&gUzGuxD=q*&As-@OA!fgKvsMhKl|9K|)(P#2*w$C|# zdZJr-=Dj4PlN!C;)EU2@oiIK+Alz7%UR?&@4Zp;v7HKtr*MpoS)}eKBn5|cO*dBKC zTA`fxk{VyQ6VT+}>eu=mM(|FRC0W=)bAJb$BFlR29Nq-JP2TzNDkM(r>tL&eICXBS z(TORbhOFZtoPd_NUT`=iEQDL~LM#!LT2sOCm4G(GJdO!Kvqbp&c#EKkV4-*GZ0EEn z!fXG+D_*s7KKYI-;K1DWBv(zPo6B!-nN9~iP-)K zugXfPFu)&dZa;luQ#*!uRo~GNEfE_>Z^yBxaKGxiDm6?zyo2+MaXj)Gbn^)k+l&I6 zhUnHq>t6tIg@OuONnVSAhInSG3Ge4jcQ`v3#-#T3@v-F?1@ND>V5-e036z#HDZG&- zB~Y!44@BJo{r;y&sawzWV>WIr^wqTjujDUf=TU{YRKt}M{BE~Wk6BfqU*FC~b6ZzA zh12u}!5-z3%P4I_X)Be;G%|@aRW}GcueYp?shP4u-6ke*u8;p35lx5~r!wK3iag<= zv1u5fcVO<|8~0LhCY-3Bw!jb*>BJ?J;S$kAKA5(T?d6av6*aS{`~;UOMPCL+P5`+_ zY#A7z8#Gnr5~xZPKhEmljllFyw#cFiEYVsMor9vRCM?s65Qx3fWQul-MxrR%V&_X_ z;(XzM=V6PVkn--W#!#^h039jM0vB+&nL1%>28J3@^{gDI2a%j6P44Ib2necF)dmxSfo2k z=n}=mu@HkB!8??i6sia7p{UGPlvdI^%@QQ2B?@6I74{IdT%x+3!exZU=_PG=W;5Qv z3i!M`Sq9JS#hc7ye_6E2s3HK{yXjpW#w?XZCgAg?rmHjiIcoEMqo#@>n-v_~=4kP< z*q5kiFCB)-LC{d6)LW>`^oxmI-RC?uCxk(qY8N*r;vCk!>7{#-0Scu-aCj`T1A@F@%h;K)F}u(6Y62GA`Z`# zEQT8ZQ6f;7l2AEuRIiF=1t(Cb@D7j@*u-ej9=-uEfeO(#@)p_g-X1%K7$h`86``OA zhFQvpI7)5d`~rnSU|^gomg7|MG_Hw*lyyQy&4J)yzK0@~#3!nvMH)*%Xh_;)iC>?+ z!vc^LegSW*otmynSAq0MF=V7tnM%5n4w58XJc2@^aw%b#EliDSF-2Q&VPXTV zZzLEol4264B&rxM;7g~U*H~37Wl{4FZfM0Z5;58-Eqo%c8hRI?N|K;6fQYzLP*8|E zv#6{YlB$Qo^C%+@Gb%XxKHg2Kt8jZfm?(+}yLjYOl^UL1P#L#T(A$cTRR$hIAv}cC zEb%o%;#?LOD^eU$Lc)~^)h>vGve87;HziKhAW70<4xua<%wo9C2vVY-z~Ia~(NaCC z9~5Y=46J2q@IETNmy!&-@XSFn=&?z5#()pPzyK&oDAv$HLoXy9rOBBz%|as-Lut`F z1ttvRcvUo3xe`bPm8IR&$}h%vi^?+9NL6s^9Ne-C#4047y<1np?{U(qWo#+OdR3Y5 zSDQL8i;7N96=;~V!4#TN@m`vOK7fS@9TUCnf(4w5Eo!66fsjrgp|jzZ8)oRH@^3GyLPaQN@l!bVg1JldZ~a$Ct1{ zn)R`3v)M9u5b~5w>0t0c%H1{p`m&e6-N4!4mDmB+Ecl#M$9%SP%DM1 zDW*_ahH=06hLFBiP>ETkrM4k!h)HZ`AChx8lH`m-m`AX6l+D>+_;<>hLgP_f4i_Qy zinNmWcVaPa8zP37KHSoGY|9s~3;LB1!Fa*=1F@ewP_cVf68YRvX8LqA6&1AKd;-J5+k+{|G2*K`9n>=zntcJWF&Uuz>yKFHK%OufvWLm zGF-x~AAOJHu30svdvDF^-34oy3NEzFUL5()(jUsMrRvR_8tLNk4dj>ZZhG9xn%?5; z%MZ=nzV^9GvFZdY{YdGf*XYl-eI<=^o+lxCZYdVmmYF^3@kGr|dlwtR_H+BOP)e*T zeSEzTjwUEB`mpJDoh}D2&bfX1Sc~$#E|iiwaQeN_&l_)F+yBW+36YPuZy&ujfBHuL zf_*&U@qtEsC~b1+2iLhjRq z3K$dM_HY6FTzA6sWNNoy-Omr_=cm0(kMDnusIPd@6Gh)g=(!Xsno9CKcdf#aR%N}2 zbz$#P!zrOPVJ@9&d%fXx%+T$*6$*X+pc!jhWo{g1{kJQxk17j)O}MTn77Z;-*}e4M z={cu27K{plnfRoAa{Jukf{|sPx?B)U9nB?|4OdhoKl0dpH!%sXOn4EZd)Rpw%fh(R6 zLHrzXk1l5A#>`9l;jF}rvE4to9+;TEq4<$^58NX1r|ZnjDD5^+zxH&g>*1k{kvaJE zQWwOk-HclC#7e{ZoT3^yK(=ymfjRD7`_uWuI3AOqkTE?jIi)*a1+i!#)OTTjf^hv+ z$A&+dbQ?hMAb{!$z{A4HIDv&5u|f_l2}&U09^w2pc;xFZfH~u38p#ZWC0E0hkuM7)rKB6jd1?c%KNQu4} z^v$}@os5me$NovYSA0tW9A8bj=D%kc?kE7g&HZL&*cTC2z-$1?z22-`Z&w!jhWMKW zTp)WA&kFF95uRf=^jWoW0HVd=O{Z#xj~d}c$014~`N@%tykGRieYd*%HtrtcC-Vye z*|+k!0e-Sz4sLPMfB2X|dyHW^qXBbBg$D-D&!B^IMtxy`zH4v|#m1)0rn9GS<} z5?)N5<*>V0RJN&Nm@L5UbP!fdb6+o4EtEhLIY9>q+{?Q=5d#p=ssP_pzx>m1Bl zBdC7P*qE_ZzzkEBY~tD6WtXifDfU<(?F(8O?=C?+mL<(gDCQb$lK#73bCX2DTu2?Gwq+E*|}ao!pS zJ=td8!RpXOIwyL7>Xj^VurS3)2KfjTlA`aUzQ8f%^{ftNk^CF9;#r}ss-m%th*$UI zv(dP&vaCpcs8L$h4$-%~sLEB>=!c7Vi|QDb{#H|6TVZ{Ehcul}j{h&5YtVw#s|_W? zle=)9!gz@crw8y9))US~P)HiEs-j}_dvGtNauxwi2XF@RPW{RY^OphSf=ehCv=$bL z;WbK$gn&?=O$VjPRtiUyI9Uy=zfR5KPLw~vpa=wBgD%^tq2dUYeBwVEx`%c8``8Rs z9P1JN6eeeSNVnHcWRZ$mMji!JLCf(Pu)d#mLJ=?XnkC9slG?o8(V8VePaYAt8bxDx zSE1BJ7IobG*l5wKs)wEi9#HAk&SuVs`at!~^>BV1z^Ip()lv+NXq%bVSPrSCoGB#F z!Nf=pjv*O^k`vY61y0B8Z>OKNs9<|UX)Xcp_01ZrgeSif?(%9_oaNbO3;5|8)rhR* ziom6N_ju%G8u;b}K+GnplObiFb$!-jC0MT)`5|hSs-CX zp$%U}qj6{r=q+G;x?F-}V^rHnZlxupMkVnSo{dWQ?d8(|96HsQgtJ?TaG?oM5hC|s zVi%JvaN4#)4+F$bFk6pEcn{oxoC-b!k_davyONJ=2f(ZpR^c2g1u=q9jPUwx5^BQ8 zE=;1iA_+cfiDaZJ;!#Uj>i~oNni9BKm?g4PLvH0sAj!$!F1`x(6Npx&5HLHc)o@U! za5EXLi6Ey%(E?T_bA7rvxQl27BS=IK4FnuvsyPc}R#BA7SuQj1WI*w&_x$X<&QOXI zJ#8z+bs_{R;!yo*^rQylKq87uUtsuFhCHDJ*;XsuKXIg=Y9yf&!E01ry1@>|w*Bn&V5UYMD`dclk8Z)@)-J-%E;hSntk}oFYLwqEZBHT?MI5N43j2UpYvUq{u1< z454Fn)F5eRl(=#*+(^gTtT3m7LDK^283bo$;$BX(HwDy8K9v!LPvtA?lLD*$g7`>G zqd*UBiW4OX1xinZ+)5o09hd}{2UJRU5(9;f9doiMsjx;XSd6odI#mn^>OqvIXf;(S zxbs58to86dQY&SVB)$zN6&p&I@ZdC$z&+Cr<~-co?mM&J^f0*2w1DYR4LJAVUj08sv5$qC;cg@icyMCct2duN;GAbs!~{%tdh{0HoP{)qN4VtsRD32 z`JI;~x1UV{v!7<7T6!vy52ePQJ$$XSv(0U4_?B?>jyNc@Je-*7`m}A9dD{@?ZoZ!m zz-aQDYfcSQOyKZ{Bi`lirb0SXt=$ER7WS*bx)4b%xHl%%RV@u;_twv@pMCytTS`*f zKe3k^BZjaL$tF3{y4Y@0h;%Gq9SKyuU0S%i&6>Px#KCs%3N0W8F2d~d8xdct6+#R9!+vB`Ktpt0iKiBu-7EuwhayQWYo^PnLR z(arW!(erBYS0n0n+4cQoRhvDDjQfCHm)4Ibq$Jrpt1i+b#-zOY7qJN#&1`=+ZJ15# ztokAD+6pny5i*K_AO5*)#C41~9~_Cjw=-1mMvD|mF$^>e&mdlwUY&LJh>PE4kCb1< zUZVo1MiOgor=R@xq$%W>@v6N=9+?qcKW}-+K)#kT=c{1IU<#f;TAIEf^+B?@>g3?a z{Mdnl8~3o0jV<_EGQ`fSlLr061X)kkb&-SqkR86sg>SUc$<|$Tr}bTSSfBW7`a$C` z%O(MI9;8RgD?8sf>mQCW))pprjHM>-#y=%m($~&DwV*2^#qe6RD}U|mE7--uLtHo0 zZmlOTNN`fVI)SfKIT_xj{Pu7emY(m&}tI{f)HJ z&g${X%E0c^n@5YXJHJ2h@OpCEpP(70TL;P11xaCo`C1+cd0e4jS_Y8Ob)lixr%REa z0=~T}RoYLJlSXC$`vVFGxno0rYz&3Z-faX3Tf*B`MSg1gbK6l8Xznn`9>NyH1h8d^ zz+LD41aq^n>pVL^a@_pOJp7Ld*96G8N(gpxjh|T?e)iaf!O|_uIcZ16$CxT!FZuWOMt6W0WyVEC}=AUbaxq#w9*hCV=DCbuw0!y zfwKUc5w<)Sr%rN2tdJWJ!ig1tqNf+&U{NwZjqTm>sO zto_wAuD~N51-~E-gOlGen1d9VKC#He4 zQl}wns77ig@FXO(=ut_p0>B1us%(Xx=?t(VSz>%p=x);Iq83h4#Wm^>S_}GDjLT9R za9mmsT%D*>;UzSp6FC)D)fXqRIIMIgrh(Dllf?~!*ro{{y`j#IL{2peYjy%OmpWwpLm@uNOv$>8s{EWBGidI_M7ZX6v7>(6G*fb|e9du9n+p3i$FIX|}i|2F+0{~6`8EH*Fr<|)`x`1C?=$PZz4d+dd-bN8l2 z8;hIlE4b-ctuVcyX8o+mlXS7=b9fD2MR%BJ;UE&M& z?fnZ6Pvmzmg-x%JUnUNb2VyE$eT1+5-))0w#Z3oSG%B#)KG^T%th(gb`+aO);}*{s z_!iH9+KT(^FnOChJY*DLKt}Mt9Sfn}ux)zHf|Gw6gCWc;IN@59%u>~< zGGC!Z5NzFTrQIa*6xl{mCP_tFQOu&T2xSTwPQhvS<15h;=;h#YiR@Q;ig-m!;_KOa z&k6A6gqA?z+D0(S3I0GhOaSy?f|gckfx<*AkR(K~aMgf>9qu>^E^NF9WDF`BI>7!{ zSe1m*@RxL4bE#y3g1m+=^@jmH9Vr2fcS_LFar)tpNG~em0urwV0k)PU_YiQ;Z0d_i zU(}2>IXU?765LCD7{NKGY9(BwIMoud8@$%0w>dTN8MGwFs}KqxCZdJ%0WRn{Di&H3 z@^I%r5s;363JtU$YOO{gv|PAu!(dWZlOAN?a}iPr1$PKMZWK6tCCoiTYr-i{xjHYI z)WVDV} zCP7MHHN5IFLPV1aC}ZG3K;pp&)PO>9N@655PXNGs;oHJ3Tnek@8u9SM37mSgDvExe zssOHA52L3j(las?j|H$LaMrnAcfG*ATa}THbab_qP0;f zpGxx4yb2T}P8CZ-)Vp^IzK_I)NAHD$z%V3Ia`wZs!KXBmhudigjLM=)Wq4Y!GvQC6 zX2X1%SPeWl;dm?hGunMo-y-T>Mn0tK!j zmUsm|i$LYER$Qe>Oci$*<11}*+TgqKLTT7TdnJ|Ks-kRkciNqO?ywBK!ASvyjRHx` z!G(_OY$ghqNF}&ljOF2>_>=*}SeRr0ouCuO8z>*Eq7VoVM7!pDKfylWwM5!s2CD?^g1t$jvtr0!S+5kB&q)Eg$;o9}{(%{D?BJCs%& z%AcMT3YZ_B-DW4r=~B&MNAW-YOIjrP4P6)-8SGOUpgm&ZBvc}#9WbeDm;$;bQ~LL^ zDkGJ!4AFLo9VhiPeL-%dF~-KTz3?&HX*_|Ztc|o*#$_JAOt(eQM&N4tY0|X7O>!n` z8rfqYmiTk992jCCT~&wK7)E!Amw5#k_$oIBBiIetjFglFnx26XkDNTwxRzawD?~MA z*KaPR@D3w?msAT}N}?o9iK~%SN<5~r;<5+m{3q@>V;VK-Vp5hv8(^?{utE1Xa#SG6 zon3|yNz_N1xe=;kq~Nuvln1(_hZEml^jUODG!_60fRpZ18K58@NC!QOZQZQrO@+_Y zj3nF>kZ%~-md4>(QMN8y$hhYXTivOo6ms`T|A>(_meOXWn_fx9&~*F=6=j=n0J=@K zb{XGwc&LPkgm4W)rq#~sJUnZyecmMVWYViB97%Wmc%SB=?X=Far zg7bshL*ajSvm?9r?{rH?fLqUtHa8ZqhkA!o>4aHH)`k39(}%N0*jb0FdZ`xqf_?ZN zM-rW63%va*?#tgCXgejZV=L`9*t7-qv{^K>fR4eFQr-=+wRC{qWqsQYb&DNOz^1na z~tRS?hW4n~he`+jX$%ls{V zscB$aX!d+_@Wz|7k4ol-Ao-du5FDOmi<-6Zhc+tN+K%08t`06t>1J=-L)FsT-zSIf zN$9LP#lD^PNLxS}v_WlPwCR6p4?R!D;QC=aty3Ox*aB_C>|2MnmCA6K?LqtL1TOcxz>K6?d0ZR8lO(-hoRzYUzawK=Ggsy{7L@>8MqH>H~jA#ZN4;P zGPO2s-S{1U)&>JWsMmWg4q-2uTz?h^T=Cv8^$i%{^*_bw>#n8)OI$FS7W-#y@GCY< zz{>u=o9E%?y{9@tL1T0n@!KOmH2_&Y3yKLG*zz?{Ow1Vi4>beAh5!H3BaZ~tj2s&J z#9HAw?w@)@Ep4t0fX4Z`2EInu(wQWl9{M^1KV)XZ-63(f>(*>5(a1GD|Yqw1b z%hZ9v_1YOo(PG0z070sq{;=RBPD4XHJPcuJB>E{&KX~0B?4Qzgyp;+o-m8MAPHmT5 z=TKRT3eqBjA_$~T6r@2ym4!P9`azOijy014TLVK)r92sz=#g=t2IEn(N(N6vTH}Ki zluX1lJ_t3WDJebzoh~hr&G_Klsnu8?(6Yj7gsfH9ah%YQ;?&TNr^p6O0^?1^ib`}3 z>GjBU80zKZQV9r4zZLIgEwFPAze}OnC9sSq;IJSk6|X#A!^lju+pAu#j-n7zNdb*J z=R_l!4B)$zeg|U__Twr-qNei%SI2CgP1WQB)*)qRA2)KiMFpc=|KO#%K3R`}!HKvv zpIJ<8d|OjhNM?|zg`mqgh^|!{4NF8qe2Pt_v?5F-NwnLCBsLOoAlf>jNJ${Hg(3x3 zt2nMHgMP4$$G|=)n8>ky7?#rZe_hr0Xj6vDi7sMV34;o$B{H+!04lQz30j9A%)@4r zCGc9o+JwiKVs$BWtneBy1_#KDQmar;>(@3oL?-U88HFhpK8V+0Wd5eQLUGf|HlxSi zBgWt#1?k_eS7=e4NJ(lF6BH~eof;NFHe5+?pff3ywCWNbs5dE0v?CTt1%)DF;ZsBq zb3iW!1Obz?T&cR**1Dq*GFZ%z`cP(+Cf^7FJr3fo8l4 zU@LzYAYSbHwoOa~3ML;CoqmdcMA*kv^$P+wlLW3hz_&wyud?Za50X#o0Z_7bq6QZ~ z6J_mXDV16xJN;d_hNIt5;^^J@=1a0>uQfyC-A)@jsC_bwo3%?bE|*enld6U|mdY6P z;MW1DNEDnJ9jUh0t!FeI97yiu+j3?njs^ znF-2(F%vbe15;{H3#HD+_wX4k+HN5f07DP^8MI1zK+ek4NPd=dYAmHdiY^OdN~5NS zuac|oYE@_(3M%ABC>oKiXyUAMjwTXwaw(*+Q%1KkF!L#jT(cn52pPb}0-^_4hr7i- zEe0@-sdA88$)`v);8w3%@QRwPEDoav5>kiO4|sWX6&fHkoE8KNS!feN>I8s%h>vR^ zolGGKa^?mvsw4YE8nHxbj9~IC*|HQ~4XgkS+sSwp+H)pI3ejYf-qTcqX~{iQx`!j0 z0GSe!P{l|BQ1NhX0Uw1tJbBRHPH|5OYKtLE@S@-OInAqB z$pPRL1dYsTn4otRRF<*FP~Ug`;44l?jK zbFxaIlBNC}gxE|wF{Bkb@aaOXu%~dhrds(<$!BRq+M4p)p{Mt8p5Q*10G$~tWT4=< zQlkRba*3=5TxwA1`oj10B92R^q)ZO2QDMhaV#y|6Bsq#^?0WfWQocmXLNl0h-Yf4b zZT@dR@mPS{BZOC({bT9>F6@TEj0!N71YaTF?hPN#X6R+(i5 z_qf^2R1##{yLl=7FtdeDYH})f+7!Q{l!1phTQ3^@f~J~MPTeVSfRFc3fYLo!hT4Y~ za$7+?y&U8EN$7vz7O{++$y9;Os>ZgP0YoVx0-aSBLNIC*sCYy{6ts;BV(k!=Y!!%pY`EG9=-R6QOjldf78HhEknGWa z^}$0zgiDO*gBF(Bt1dU)fn=*l-oo6$1Brh^WYoYZDey{|=kTh8aIp(Dr&o<2-`LOQ zZWA&Xi7H=I&-o@<@kkS~M2LjnTDOoGU@v8-$}=<|H8$H=TK4G?#n1&&6NJpNz@aK9QR0!pCy4v%zSQ%yYN+##bfU zP8Ehs+yHmu2V350^N!K^tA3p`o>lbdkND&YPs{5QgM+T@k=*rxs>#0NpN(ba2c*-= z1^(T#Yn6Qi)Y`UN%=+Zrqb~?+%J!Gv{Aoo%namdhb))$=0$XnPt_2Iu&pr<*FPZAe z&e*@d1Ou_I`bm>;KM{$Ei`)3o%+ z*yClcMQ45PhAQBlGfWTuZD85jtgEXh@Kjg!tyOsgp8adjHe9QuY6Y`?yzR=X9|!pH z$IEUtx$1uIIFNm5(Fo&6da<+Y>7OR;N-{UXl&;AfpP!wuA;2D5(InOi0e14aq9i_f z%dK-O63$fbo?(1v#oLb*KO&?&dtP_?o8bq=7HMpGeBk7`C$Xh!e1oY)sUS`ZA@>93 zBcY{#8;H0z|ID>u@k`^0tEvmm9x+#4TlH)peM!}m_!R-6f}C8oIC<60MIX%> z$7xr_Sm}#_Bcu5j0(BpSoi=OxYV$hZm^@h2+3{ojwJ(j++up&=FTIyNXC&HmUKq_X z1RBP&!s_$*_yPTRY^>|$anh94hLKrg*z$p;V~&)TqvM{e05QsX&Tkq|F%>Ig84p(L zTHu(A%wL8oJuTI1-PcX_$3Af7yv04V_TJ?Kx?zXAMH%+24&dE2ll@pC69Dw4V!|y28|0I3J|dM{4@1KteY`I%}~6TyD{|o zpF7U2v^Vv3a<6RK)zJGNZpJSK0~r9#SHq7DtH)M&KreIVv|*&Lc*jUnWX;H#VzUzd zu_^TZ#>h?QZ(Z~FZ=b!jjy!+%R+{_#eYe1!a_OY8;(X+-m<`}$RQJrQb6oR2WJiwN z2J5BmW`Ol=K>4>^2yy+LpWi4D2M$jdxqvJDW6^}M;`80Vy5FlD*>Yd)oHdoNIf{QC z;~Z<=gdd-L8L1>KgJPh&Z{hBtoC&-#kTa2A6o9gz^4N_zqIr0ljD!U%ZvQ~s%sSg^qMf&?}a7+9{tU!MP*pE2$E_M zU4+pRfTWi*1#eS^lI2mBqMu_tffKN{Z0$hOrL|n0B=dWC$vUL)jzWcRV_Vy*d=bhk zg+j8VbmQu}J8XB?rYKn?)Y+QU;blL-t5MJQV8+6stDTU*rH)^_bm5Gy@BipADFdZ=yfc6TjD(Q19a@p+%; zcRkm8UETNhe?c(JdG7n3d+z)DIeeQ1zz+W8NDwk?%~aX&UMl-4uUSXpZMa^g z@0Ap%f+U`OH}h6n&cQ?s)7_sDSj4EQQcm}~so?PjuPDqQ91_uZwlI4#$F9TFqlD&l zD-q_fpua`2>?O7pansmO$TL-EnLe%?XPJC&LwLJ_Q5C`jpEa7OQU`INxpdi1&HiGO zP=K@U06@Ly8Aa-6xI>&a4mA@Qwsdnf)=&yD!8!}fL|Sps`{m%wCDuhsW{mA&ZR*4( z2;2$>G**5SaaPiDl!|jy(Zn8-il3FA9w#l1C#Cy;@cyIBH)_?!Pe@=01xQbdT$l}F$v8Bw6^}z> zVb@em7l&Xq8%PC{vvq+fjSvqs^+DKJFrgMy06#@cJ71af&6h^J1WXh4+C0+K&LOQZ2*Dalz>eqs@>CThG5r6d3_OkH8AEYvw!k}J(^D*}c~7bfN5%Q=N(nMz#^ zreH_#CR0c>MIfIMh`Y!O(Ai(GhY{yO9FuD5sTuA#4WTg({K~FAYouwtON*zKw3Es% zB3Lr3F&nj8@I-7@gIklrHZI4MN%%#a!fml&0lTeP-zbaup7DaB#EZQmNJuc0BfJh(6B4rM1O(K#s{w9dbpqwn`N-~UrBY|prJ^soNb!tB41m~y z)P}Wx?BJ+l#CV}tYs5OZYHFZJEU|Gto_6UC0e7qHh3GpisC9$^SEN1 zpbyCL&6Sg*^RdKcmO4{>m@H)~+sIm&O}D`_KR+Ayx`Oc&pJ>cX3=^pNQW`(_=_Vw5 z_+i!@VFEo1uqi^e3%B_24SeCOJxwdpMQIYxrqO&$oW%}4+#jXLju#0YyPQ~v8wN`hov zlP%Mj=prF(ByYhY-L#x5V|{@@TYRD>_o^hKDIAX1=1L!qWxsh*`bKzS)-BuY)6$4o zdivCrs?Y1b_V)c|{py{*_2*L|Mj z?W1P#IokHahtYc5n$F1u$=h!7{j)|)HH$w%|J z-K{@9_V8qL8WkBJ>H7VkUQK>!q-b&d{R6XiIUfJg|LlVsKfMvRVshWfTRm&aJcsOW zZXN#PnzD`?%>1eUG4a9!!{yKA#}7aBU@|uR)W2Vdzy4I-GQ-9PpEV3Rt!4Q2f`_kV zT=%bcytQKi=x+^|cZ{y~*H0U^J155{w~lZNI+>A*;9Psw?y=c?{p%es+J~Hnlizwv zy=EDW-q;^seIz(~DeKz(eZ?bd26KiR$hi|cnM=OWC7D@`Wg>5RYJg3A{AZdy{)Gp(*)` z(QHfd7b7cwowdKO%Vvk|OL{P1&x-tT;=B5}qnl0~mtrIIrK25@3vFZHJe&3M?VUpx zT5p{ovzl(dmvUk6Xom6kbXMg+qjSo>~(K{u>Yv-IkIVdLOn}=vuK3C#g zc6j7D{(ldO^9w#)wDYmSg<>zvdM%VY$n~KW0?sB_*Xi zFAhKIt-1^{Sauj+{jqg3_6|F!JW~tCH$dMyHEZ{dQRV3uD&Kexe&+4oG3GpQyy~m7 zH)j>>{`@9PDn5tF!G#?+lLEVcKeTK8@qI(eo1OH~$!Cu58{PiHJNuGvZhm}>+Pu4R zY-;D7seXTS8_UzN0@jqr=yB2@vwb`dBxpE3amctu6v?kyuN^@aE{w%j`?6x`kEi zWWQn+fTqlETHVWqwY7jNsIS?!0)e(((I&C1x0JVB9h_CKh9~ivJP(dH`{TO|?jC-= z#Lti*nx}HTpl}0$*(5%q#f`coSzdY{z~E#}0U45_QY}es!y$PVt+`)nkHd76$cu6| z-HXel`Fvb?mC!(@iHqcIB8JCBa~J~k*U^(qquvJBJ3D1Q+T(e{DC=(3*-Sj5?8_| zOJ^yKMZ-;78zEUP#b4r_bVah>=W&klp zGg?i`Qwe=L$sym7XF6KJ;zrp7PWE6yuNrh&g;{i}pQ>|Cl;SV@%V|~XptvTQwOo-V z+|OAil2_;kF{v?{Ixd4^kdK9Vq)A)GkI>?4Tt{oPtB}mJ2;$`}8Zr+L2LlTUp$p4P zsv}OUnYc8U-gn-7BoSVbkOJwIQpqy-+b{Gax(?U5#|aRGei-ub-4Cqa7ojYH%HaiH zHoXF4I2{JIKRw*`Oa;8l-6GZ|a&}#+Ms>Sjywxly@;2DJ)c?usQx=W5g+Y)MLE@`j z?WKrS+X&`EM$375y$b-Ce6g0pg78CDD7a{i-j7cj+6cNlExOjiR zY?*!zAJIsZOJS5=v!rRrD~RKoECSNdXw^}n27%fVB&!>6CR9#!C@{$2NPs77R8%E> zS34e5vN0H-vsJ)KD^%(l2}2VRB>mgSuJvCornhm6Y;G;a)DcQAWkBgT49A3f5tf2s z@#RVsJo41ZIKssHfL_v_ThDN=*T#7@kH-e0}n_4=ZR0PSZ1%^=As|C?>U>&4}uxb&Ewet75 z`DWY-Az%vWA}F9?xPx*Hx<%dwBF3^OCm_i3h?_y(e%?f|+&Bq>4+5zm5#Xe8`d>(H z_6kolfzKfWfFt4_&jx_U!wL`y=FYbwi8CI9fIfKCOSs#~rr`{eEd-Ty#sY{66jgQ! zWHn5nA#f~MVB$p}7UA9#pq*qQeioK8NPzO9FsTOWeaLu;A+A!AsyUuD0VWM>6W+z} zkb_I%sxyF_1d>ajDt$TVnNl3) zAgWe>R;IaUuj}4^v1f>B2Zau1LIUT3CSj$stF|&I(zV?IqAF&qd7GW z*Ou((pq?cO;RQyKx&%ClJHr$bVu_oOHLCY>o3q57_^d+0vnO*4YP>F7kg^Y3{nlLk zJfmfm*XgZl^?hADl9&0Z8utsJ!66sF z%O+h5smMaE*4EZ0;d%DJ{y z5=fH_1!TT<3Q^9`sxHQsln~_AQc_J)YuJx*&qHnI@*?ftBfSCYn-W`KFEgLZGZvM# z?d6gZDFfs^@bbBZB}pK9t+G_LPsa8u(pJLVq?}QTin9OA1bM5sx2`>4DC8x5b6foh zyfmmkq8?6Nubda1)+vn5cSY{*ND0$B0oeJdK%L^s9$L0}9WgV3oIEjnqO_LTBJ4dv z^s)R|p~0}W0&m1-1h7TwLZ2f#U@X87aF;2nPw3-6S-5b%#aguXel;af+k7qj9v1ij zOjngtti>f;O6|2|V6tkx8YC<5LYhl!e`U@KjaYhQ11BD4zL`m9qK**;^z*Y6aZR>vCR^Vu6a z<^9o>|FpfU6m^tczHEPJRcCNhqRU&x|6qOZ)QT<4>9(QK;KH6xZm_Py;TdXk*1lFB z>1lSPzO(%g>d=w8e5d1t|BiQK!H!24k{=h;?>oC{SS)gUwejiaoPIvd?>IF?F3y@Z z5V!0HZ>`|#Zy#95zrOU2W#o&-&9B^ET>QHw$t5F(2Fm}I!d7FZwas2ga;9f85hDfuUU_wo-(FM9{u4wOwEbRPR^ za9>;5p5tq#=jJhQymxx?;rD*maV_-h1V( zk>n-ymu@H2=Kp%cyK5`)GG2CdEdIA;UyWSb*tvRB)`LBNkxq*@CRLYxJD`x)vOjy{ zYW1b+Lpv*yemvY22ZZ;*oVa(h0G1Xae>rpW;wTi!%GqCH8{7-N9Jbcaj z<0r+HSF8Ud{%+3Py0rMRz2y)5wQZOeiw82-I4aN9jpQtyY@I?|v}?ZJ^JLK=x%Arh z4ct+&e{FfuEk55789sNRGwlz*9r24<=LQ}zbdKBz|1rF`I-k2?kkhtjwch%u;JD-Z zquCGioGi#Y{o+96<;T8tM8|3xJF8b$e{!Ry@!I8^%Ffzq&kf>mnf(UQURHZE^YAr# zG$+@0EOqdJa_zgJ_Gj}y9q#|+8Z**M?&v-G@tgH0bSV!c4%?Zs_`6=31LBJ4f2==u zm2D(|gTyR5;2pm7XbevnTc5iS=)!3y!CA-ftg#P&E~(G36s8mB-c#;+;}4uPt{n)x zJhhzLB_*7ixycCZE2f!UN~F6Tfjd@4xMr0qP}`a`7Ib}9=P$~EBPI_v#Z~D8GLn^ zdApUdw|57!hqmCe+NG;H|SrT_ne*2#Q-5Lo*5i;*Q93U=7fDSy3%k zrZC>~(pXqO92NGx1KmPQAitJiN=;T^*GpAkXBhsE}01 z0<}WtPtQfpK#CpJt$NM}j1!cq62#EKc@)*dmgn9aG= zenp(F)-&CrL9w^7EEV^6%6?hE`-C>qm)izThw#qYgpAk_G7 zS7~@XLH3gN0;T@SeJKmP6dwoQ@mfwVA0`N_LPQ%9iE0x>Gaa7bP0sjk3v zVhgt%<3oca5x+^Ln-pxhYKj-Nl)FKtRDt)vsNI65OD2$%R%@55MA-sVWPu#TJWf%+ zF8H3HyF@x5QGi9U4gnhs;F4gCN|vLv@oCar#DXyrCE{cqW95s&kZ^Yz84gh7!J5X* z>Hy`YKP78+kX2jj{K_QpdsVDcqs^q`tiL>SeJ=(1vI}8;QjjX@QA-KT1(oG(%iGsw zKTm!zPOZfq3~`A<=`K8;Wv9sr${AALD3iTBc|Zff<}q3oA*)nvf2DBMC}gr{6wPua ztdYKFvA_OP-%KMWf(YUZaVD42*6rZyM6DF`$_YVkQLDR|mhehdr9fp<=OS2MMI!Kr z6M!GJi*yFI;RYF3HImfSZ6Z6!DwW*IraLAzRRPs3j?0WQ7D?0UG!)?xnh774L$DP@ zG$%32f`Z77T~csTOVP6#M#5T!gF*=vul4HmnHW{aji-P-cV6V57p+7q>s=wS#;D9F z^N2~(?(7L}cwq5d=rfoQK!B4<1$_ocu&rbq2DOVoFdc#fTr9P(o793LnWM2D2*%@7 zled@A^O|f9cvhb7*6<6Bp!kvS7d86C20SEW>ry3WuD3a(ZyS9I$Eo-~$h^eMoXk^v zw#dIL5>1JVb(Ega#)0{}tf9=9Q9O^2|3p5^Zc5a4Q50USu?~FmmL7MJ3o(nz1q&q~ zE;<6Ny?jE~<1Y{od$5R|5JI$^ojT##E$v;~%9*;g_^ ztf9#x>-ss3TL7E&$(XbV2ePDEqB0gi+ty?9E0tQVsttz(_GAS)mclKkQaH~giuCZr zFV^9NfL2l4L_|t#%B|w((@*HII++(izh&2$zU0v5(@YRvNuW|Sh{ANmdn*j9IX#0F zGVAOpE!i`a1Rm-`Yva$lrp{o%qz0IE=t96|wFaRB%V{tpdZ2h9UeGW%@YR}iL?Z+C zJzDn$PPdTTszSzKGBYf%@4@?;Lj^<{m)A@@61U6O!-Ol|zDHoZqOq0o4q|<0luRiG zh`84XR7hhKupk~nf#J!Kb(~y4O*9LrnSut|wYb_PrVHs}XoGMc;=2!FyjmgE1&+f7 zqE{F11XgLDOlB&NOxu-_02*TokO(xS0m9UBMc>B9K7}Z)i3q?7*^O2*%mh8iSF%+! z1e27Qc#Lvu%d+kvTbfz~kwX-~aFBJl1}Pz7euIP4sTmd6L=b^%IMYP533?}7V1T76 zP^q}0WkZcJiy-tZSGQ76wR`g|R7Q^KYg`yzIJ{3V1QQe;lS|E2 zjd~ZpUlKZ72RHiC@g-BrIhI&lg+cDe>4YcBg$gp${0Qg0sFJ*Leyn2WVcC&B# z1NJ_?oW`7XTO*w}FYI4z;}VLU={YNfv*2-t$7wD~eN-D3U#j>rg_LMcBVi*B1k%b= zFuTU!p*1)prIgZyo@52xDt!V7u-u+2%i?SCtzV5_+1TXW!Izcj(k9jkpRmz9M#vW{ z*bToW$wMSQ{6MEGD>_mb=g1fZNf{v z=5k?4-d}<*g!4Tct=GxoWzt*tU`0YbH$1U;_qlUxp7~(RiDw-t*#D@I6#xFx-94F0 zABi51AKsaiFAXf|o4@w;HF?zza;y@6>o%b#jD35fZ);iUrm7!&pFCiDrgnGITWcYf zyuiL}@z`M*k_GQ=DqAyi=gP)eA3Lv2o%Q0}q^!uf;gO_*NBJ4;$A)vf^EX%$f4~VK z_RsHZAC5B~#|EBu&gSAbWtZm;`urDG48_k*OZzk~bp(58-rUn02aJWsqva1>oqUs_ z9U0}uKb{zv$ep%qGz@du+XwPKTb36!COx$I)1x_8*rL|t-rEn)PY_<-ay&2~S2{|^ zah0QAl-+ueM_v%Z>w#rHP>&D1)_R+$C>y+#Ik!4q| zFI~{-8qQvj+&;`N_@?mW$b)1W1S}oX1{PG@=^lOZuiq^BLimfgtZA@>I=y)C*=L?? z%WoPkimQKfbn4Uj2^(_We`L^m%uzZ>xbl{GmpJb1J@>`!B<_^3yMK&OFT|hw_ko;+ zY5&Yu=TvX0&AK(r=l*4TXZEHGKjJ&`#j&%(zgHb!eIxb#{JPsu22M69E54VSBxVC3I0?YwGdyMPL1SU`x}>mGc8H%Vq2h!-5NQ z#&)U8PW)KNeIY;#b}flv9ZiH{DnrfUB5{)C=8Kd$F) z{R0S3W6x~K+B@+0$GyF9|xUHkai&+bgA>ntDsn*uxkO*x+N_STz8^J`t#X1iV3HvhtCwzeQsFC;?(gvDt%5Y#~|* z)%+C;!=&Xr8?Z7Oe6h2}H@O^T9R*r*k~ z<(jC5XZkSnF1}VWOci+wuzg5;6}OY(d_8vSz3slrCG13@o8%NqKr*O2E}X$jM2Uzo zE(Hm56(n82h6)%=@*WX67rVS?hikIcFB*z4m6~>Y?01XWb2ZTM^R2rm)Q$6^#?rtN z*+QX;S&JBwe-Wbn5uJc6GVq3SQMZV|M9M8v8W28Y;u3R);m)Z{19L_cjx^(obA(!4 zO4V^`?_ZjEeoi}ur7*r|LfckKN(rVtt~PiK-V_yb|mpIVqLxBQn8&5QP7}6ETpLVL9s}!6W$c@$|4qN zTC0(KU@gwG78oHR7YRy01vM8m$LMkjRHR18{&pj)fq9rM;=_KNp<96&gOav>Cdbbh z8d#GuSA3lG=Th(R4c!tS>Me59bVE^fNh&yNx{SFRDID3tk=l0A)J9Y_QIlyryh=Vu z_SkbMR?BZAtka*_1up-)IGXNj)8sR#QDf<51s1H|TaT zF9xz3*mL?NrV6Mt5^BK&s!-wp5fgyo<52<|XwJwBm+gQ5nrYAnDF#Ftl4 zOfE`#x(P;a(Q*{Ugr?yo-#2b|YniZEUIWv=EgZ54Ta;mKrn%(==V=nL0$R_xD1c`u z_dUo#2CSgs7(k!Q_yZ|IegNPAy`P~VU*0y}%f}0ToN#~eZMcEcms-+E3r~8YFv&ZH zip(NT;3a`$m13R2Zo}O(#GIC4O82YB7xQi zg=b!YUG;*FW5iHTOmf8{AwjAHF&_xcax{G1+z%{VDW#;OnEPZW{(@QILmc+BxY#M# zaDpk3+}s>KXcaSX;4o450r&7sZnw3IWhb$5<;VUWccEQPc+LrC%GxtLW1qxEi} znDHs|y+WbD6p_Xq*5CfeLH@J0vn+~D64S(pb|Otlba~Dp^2*eHBi^6KmYQsxCZj7ggofdC@NdfJpg?>xWY8ea~C=WW{#n_JEitNHg z_vnkSxEz$Lc)!!(8ksLn`{D7kozu^$LxHEvpGj?W7CpFW#ct;Yad1H}nSc6;CL!ys zZ+zzUVfjw&^=VTG`H`i^|OM!ux$HCPIlxkdk+JS5Z&K6DYb0RK|$@qc;|= z45Tedb3TMEq#s-5@Xy{jck%JVL)rF8{$v+`635^9djCf5CeVda=+^1;)*s(LIP3A> zIgck?ub`$_E;RMu9(l5`?1}5SkLLRtmmEI=;`OTVg%cY+>+iogZ%!_MmL6G_U)3Ys zUQu5-n#;_OPMY2M{9w{U`6VYy9$=C)hH$^*vC$Q)W;~F;esn$aYwKoyz_}s$$tA1O zf?4ICEnO-siy!4?Yz~YXi2PO8SFQRrUi7Hn5v*7>IJ^b+|6=OMgKJJ5Iv#&=R`TBA z)&4AM@R_F*_Qm`_FDG25XHR+h&S%%lz6Rsbl~3i}$bIh4xzY8{U3lVp#Ule*t$ptf z&9nWm^vUwhOGB#@%jf}vA?wO;_QG?YB@LGTWAjN+ku(i5$;VF&ZpN2QAHk_*mf<)& zIeuiRH*4jF8N>d!p6{sQEJF;T><|nQbE6ea(FlAo#NFbjs-?(@Ef~5}btaWdE z&M>v&*MByL_m`(V*s1i@4&aM-8?FZn_BYLY=Cv8-0h)Hi4P~s(N*K*pwXEXF4gDMq z#;4cb83|O}sk*-6vC~HeF#Na#xdQ4BU-uGQl8=9R*f2;CNxsgW4f!{$lTYKrTxr7R z`HdCKjjVYuB|Wop^8?Yv$;_d+VQz80;kws3cX8Ru^@eUHpZ}5?%~+AY@j9I{dsQ+d z99Wqg9Q8jrbEr_rPkEa^#J74ETFb1%lV4xwyh1!NYuE?5f9r|q^AeXP-bE~cr1bQX z!D#WS!ApOgOo0gc+4Zp@ej?06PZM*DyXMWykHHYn^u^K!oP0V8NQ9XD&u8$lKx*#T z`qV9;p}9;vJ8M{o?uh~r5jc4{^NTH)V;P0(5{54oe}Cz(DO~ag3IHMM^!6S|1t82J zCtvw;KN_}`R!+i5*E~3hm?mpQ-+kdPV*4>^H&Wi{^WB52bLym ze`6I)9-N=gh&a~&fOE&M$9_F|0}tGJ^9Mur9T)6(XAkUmjT$=n(4D>DVS2qi`ROM; zxAx9R?iri?&O0Zw*5ARscb>e1bGsja{Vv4+Fx|5|eyDx%Z>QyF9wLXndMLSS=;Y$$ zs)4VbOsGo!4QM&a=5JnqW5ck+JpAnNWUgK~hQGb`_lD7TKQ`&4n2-XL6fsny3XE0| z)p7C?>#Zw+R7n0hEBc>nB(WN7+K)Levl8%|OftTT_n@%}gqX)w<0Z8Ft`QT&j9AYK z{>&u<009l)jbFq65;}fLU&zs-1(m>pw+P>6z@i8ZuRxg>=1?q`+sH$JTOahNYL^EW zQSm}hK-?O5AB8Rleo>=qf_FV7CD8DqhR{BA7{ou!(&mlRn1Jh~0cV522E`F^+yhkppbvicFbxaCig9 zGD-3FDq9P>A%gmk6m){;=J1Kyo(O{EV-} zd^wlG`#5@xCs-;%W0`(B`>n)Z)kx4QlPnMi=xw+Or=2iHJVUA)eX}v7NtLufz{!An zl$Li>szF4>kR+%Yc-I>`WYD*EGbT=SkwzUIKmBd-dlDuA_>0cz7a7pxX}98RCEcpT zaleYtf8hGacH=RHJJh=vmlFSG*3kIGXigjq3fUKU`%|8s%_qSv5U=aUd&C9YJaP*^ zh4iS4nN?S)R$@wBJad){ie_(NPB??y)_9N@o|&EAxJXJYfXmQK5hyvGqT;kwv}rsT zl7uuQjI&Tq4uS4<9WWnEtOWB*xFHSF0ii=MFwuh{Wa&X_-XrdIE*+N~l7?sFG!pv? zNMt9&>vgnVMU%kA2H6JGZjHEH(gXcoa<^k(vW1v5^7r5Vp$k{G zl}aJ{62sv~eBH75V&d6eTR_g4DyB{)L+fSMg(I~hzR-#H;t)~a%JR?h!?c(hh*DeZ zBC;h2GW?955O;J{_@qBE=_;?QS9_bC2iY|e?%aB7F`7q;34H#PF~nFES;TP}k$Q6{3hs06|x z;EwZ$*?ac1@<=R9j>OCgs)j%(8!IQh4p9(52od-XW(UxqRDB17fWla#fc#uX11AjG z#!4oQg2bMf@7wl5BSWMRRFg>uR4awvrh+jMY>KpnGz!!OvIxZUuo2L{;Gp2^$%DI$ zNz%#BPOWFRk>Y%wjl!62(t}ch0=eLHoh&fWbdpLduqL}ya_c5#$5yFiY*nTa*iyRK zJ`%rNy1T{{lo1CT?U>x4XLais1y{y+AKbtyG{k^{hy$A>7X4l|Dk@v;R}m{XQ|j4w z#a>PlX??Sb*RvTSTyYM*i6u6bf|iwuf?*S@jX)*BI+%IVA?*|;)SGA4L56X90azY{ zwOyqNN~VfPb%&tlUfd_Z)=H!x6PahSop>iA~h;5*^XO1FUi5zktpb1rMl@7McSz z0yimkND2b}S3Gcw>QE(wD$ttX)X?F=k48q;UH><@T!ev&32E)nQ`L2IQWvX`O6XoI ztAPfHrvuI`>8~mPNQ0&yunPoP1avqy%0to_c;nE;v)_U;g>OodLb`*r431TaXf@tJ zL3_pkP6cHSSPUUBNvo20VG-1(D#vDQT@)utEkrE`8g9fi{Bj&zSVX5le+t*PToFyN zyMWWNECS*jcs2kP#Ut>rzy`D=<)C#EOfR6(-0}R%AHzFhI~J;nVuGg(K0|S6;l?FN zQcP&*E;|bmp*%^DFvq^`=GXw9UF@@hn9x|+fOsf&aJV2fq(PLBhK7|;LLnlSJPjH9 z5~@iT`;K`xxpg%flLk@2Mom{MBE_Cr__Avi@R5Q?CH6=D{n}Wu#|jxrOo^El zbg6)#z%uxE_X4_D*vy;?%BjD@;}v$3VkR zeGnglPErpC93SGLj3R6%^s2Z7OIanPb!Up*N)ido zIAr%zzk=(prIZL9g$6s#SU)6H>X2#>g3%x_3k4O)q*Z+6CV*e7HF}lBGFe3l$+SX{ z(3tsJa2`G(w!j*Fu(&;nb!*dpkI?%Gp=wE==8 zD6wcqDD!`A25m7kHas`>8i2M2%?^HG8PwrV{IzwOSqq!|pD(zG|Ni>FK3^QjX%L|U zKvG*{kAoFD79_Fh?vj|W3+RhHoU)6njTA(N`#f^ zch5@$%?CxqbzCnT7G4Ljv%-)Vt|f$m^AL)d?ivh1z5LgPkWCRbbVylGClc!2lf<4e zD+;CfFBZUE-reJ$i~qa2e)2=t=@a9Aa)bX~dFPY=#|>}Ine*Q}{p5%5Pyat|`13{n zWH~~U{<$Q7x`cjilRsTP$j?vrPZ!Y7UC>XL&(B@ZzbGH%=Pu}9l+e#z&`%f8&t1?@ zm(R~#(7!03pSz%cRX{&?K|ftWKX*YtT|Pf|LI0wBe(r+)RRR6n1^sjh{r~EM6rQa1 zsv1BoI>Jt*#mct?l^jJ;n7yLX*o?C^ttzCEWD$EM-Nu{R1^+@Y!mNa7bdAQynmf!8 zi#DOv42|-lnA5KAWP6Xq{VLQhh=yiJlH68P!&2kmuz+lcwITosA&He*GeLqu)2yA* z`dAb&q86^Pg{)!iavOjdA&8Aez^b)f>^1867A(u9sTGVR0Juq#u4WHrf|IrZU_O2g z>eCsos;xxLUsRjgp|Yk|!GVJ2Y1VgC>;V;2J0^=YwtL~wuSgKMw(kqt+XO^3!W9st z@#@i8cS5L1W1@5j4#|jUI|`Iv34-t;n=T}^Niu*P2&9uYDG^4~0w7OFRzYrohO|hx zY@!ruEU^>8i^MJxsgWtF%?6-B8=r%=^dJEL)kv!SUVzbpp+-22nk0%cLdvFAETo0+ z@giUXEz-q_GhB6OQ8ijiAh_CsAuM8|A-b0ib@V@>QMnP(5SQM zd!2Ay!PvDLm39@`{ig}Q2+YwSEmRGw!hbwq2D%oZ*rm#dQAe6&E#!~U(#S<+LJN^Y zwMw#Tgg`rFx&X+7&jCH3MD-s35~NRn_>d+b=dzH$dOTE_NuhK(sL@uInXU<@4D8*9laFAsgHdT|Wp?!dJ7{ntuN*zo@^LV!wNyWG) zI98hu9@`t(CccHMZuA}Z-V;Mv5V3_0=>YX$v>_chUjw>AqX2Rsruz_R4hRyabS%>1 zYPk!lw5WarnKQkvP72Fcq;@PkzSib%RGl5Kwmw`V{avEpE=B3{Dt`8_V)JiAXo4M) z#+`D<#OmLZw5ups9o)*2a&7Cv-nzP0;iB>e)mYQUb`({&u{no}Xy%Bzhd1sK@Mblq zbz#SD70rQSN8P%himS$U$*!Vyl+6@L`66VNGTAL{EHX=H_jORv+*+ATxtVVv$gcsx zZfO-&6-b2IkkZPU+Lh3y-_Q7#<((m-18XtzAvQe0)VhO37P8QAsu@y8cbm}04hcvV zkUCKtQYk@YbsuShtlYxY@-z_K(V|UYeGsZ1{Q4iuC6iVJ_x5JouB(%EqMgE3$lRll zez!Uv+C9y-OVH|Etf@^5ri(HTPT8S*?b;em@E|KOGCM9*$7pKQo~jk&T3jYnuZ|Dt zOdU%@x*V<8VuMEwzYJAiRJF8P*UE$#xm|8-u_5BCU=D(-w24J~0T_^JyhSv2crI?& zO3UF{KxrQfMh~I3b{zcWs2T=!0&+N2g#HV`eLx&Wmq$#BP9pghU>~TehEC8Nx{0P~BT(omt)3%jSrAyr1SN2HKEGGNZTD>Bztx0rkv5~Nv|9+b4wO|PiC_zBXqF8D z^D`TbN2PF&Kvv0!{?&FNC%}OtHYl_zR0a|$ysQdPcA3JlS^I>$h)5W%mJ8M8GW0?v zJf904r&bRrj0De&++|*j($FOInFM&Ihd2@h2Qd^>i*yOnE)5`kZZLZXc&(boAk~l- zfh0{J-Da0dvF?%n{{1fyMzHs*J@$Y}V5DwZ(GS>gDrX$O_Za^Qy&sEofU{=nD;m%& zw?N|B6D2YdX>QH6XzaQ$lfkDEzMkpfd)=?%56Ya(;1fKR3dOX76IABYZZHU}V#o+k zLKKY|7hM@kJ)a~M0SP_58F@4@67;nwCe3oLYXhxt zxvf0NSi2xcFQ0#T90GlhLz;0Ir(qad69&kd}$) zyTO=A)`p?;2NuATiZ4Imn;2vpW(zXO953@)uiVOKtkT43=Mz?C=@g?tH&KRmmdwU+ zG|zd4(^^r%r}E>$bBOFn2Zwfhb$~~5wI(g&Wq|2Fp0c6Lvfqr;_iz?bgXl$+;y}9D z>LWOm(lfkDkPPG-Xr~zv%4*&1d^(=a$gPyZLAEe$E~k~u8bycz37xZP((!QjKRwx6 z@6+6U*hIXWiR_^ei?(h9#y9X@oyRFy(fmqmEfa1xWH&OVMutk^X)>L5xBG;3U}D38 zOxmuq_TVgK#~95SUR$U2=E#lwhxikCH;>x}{}G2IqKcc1if&yACqy`$T}sAP0Kc2H zX(^=1y-B#LY6MPSWOEa1Wu#h@Zm-m~Q$32(SOdPoB&&()OSx(eg_qcYj1z>XL5P|# zcEIOH*yVT=;_C&*Ju#Wv^Oay|6Zlt{Lv`&$YKL4#A0`GWWZAw}Eww6NFKmASx&~;( z;0e2cwjXMj1L72-9k?2Jn!+0)hcjio-0&-LNiWHSc)^Hsik6CK9;As3pz@a*mMeKi zipdcU`%C!cek2!ND1f+KlsptJ7Q?fo?C4d}iODsdLo%sb0W_Cp<*1M+hh(mI=7}0% z1FLZmj51xMPcR?gEQh7G`>~)9pSqM=rK6?gw5d_{jI(LY-E6?;$Ll1NtrT>$Sr?{p zCwmeIc??u&Oj;7c`-SN_qWK>Gx5KS}T*tytr;eV^A*)EO$yb$ug{k(GYa5$eExI+GsqmKNu}=@RNw`v`_O;22E(k_)xvB62Etr1d~=4ZG?9qK5yOwR5^BD(!Tnl?gZ5{rtl6 zu<{wx&3i9330J}V*GlmLB0+inEDg>`@gMOEusqeikFpH5)4%rTXN>izs$+=p*9`S3p@teQO8)W?+WrZnqJ9+#2{#`?xPQ9?u+;AY;S3+@zYzMwe~P|-K8}t z0iN0ePX%t4lg?x6 z_XIDc)m;;RSfb|JpOzo~0M9p%bxg0$G(u+DL09F%R~^0)k$9BPXO8egC5cbFW`8oY z^5L?tNAvhe*uo;mzR|o@$uquwVQ{X?!4J~Tr1A^V5kBvIU;T_XS3KdpF_)>wuTKp^ z-c?I-^5w=y7y2K~S!gUf_0G+Gck&+_Y^$72J7(VA{Q9JSb}qc}(a`Lb`IQxGhp$#l zzMZeEpZ?Fk-K>+zBr;`B{fY|LD44?)BL9&E*#kf4RTEeWci5-#*N+kF}Kr$K)MZe?QCI-1l}? z(T`tNeYf?Rbp6Q-ou0DH&k;hzx%1_!>LT3QpO*x9O_zJ)o-*h7(xD1#zIkvure)G<9;gg-mJ50N4tHF{GB!@K&(>b%R&P)2l|; zSidcw_oLkGXe}qtb}W`1)j!yeq?qA6Z?~6;HyUd`m9L!`J3J+c`IMQ@=Zo((-LQUM zpEmrzd3qbTDC#_Ze0CjutzGy3?F_>*EGxS+3^>3FvXY^h?92}9Eb<^oiB_kJWT+*I zXw-G*&M?3%EUpk4nH>*qh7aWvl|9_?(5mEFrjmJGU1^kF=cO#mLuC5@(EWdZloi}r z*xmWg%=`2CydUlqzIo+HV6-^f|N1z+awD_ZHp+5GmS2pmH1<)~F_5^9C|kd%&1bhV zp;HT&fKk8W&egxoJ{1+5b@;(EnWv{h0PZdnKIuDzHTHcs4Aj+~^UfKRt)P;6A5ho|)u*Ac`$~Vc}rxBIBD^|3m%PeV!drmw$2iE!z^-e0Zw@sR26; z|Mvk8o=L8r?KlK>Jb(Fg-?3GHiyf?3^yi07M;-_-jD$o0xH&eqIPF$MICkFo_eU4m z$}`{wVtF4~Sl%`KNNnnlBL&vC7Mp{2Y#(Nx3fsCtxcYE6JdkZUg1uvfFyBu)%b$D6 znxFBuHFV0nTDcoAt_b=kw{kcC7Y#PC+?3k?i!tkn<7Xo`b>sfev0K<+$}heZetM*P zdE?YC;}+(34ZCCgKW=s3gb-jKgaBWfuqlV!N0yv4jy?}x{O65wZv6ZMc2p?iQUnkB z8~vu~D5s77je3rNMwE4@2yv8F+}wATt4kvC=xYuNgqq6#X(YN%D!!62#HK+CcqpNFGjLh95nw4frYS1xnRWvpodb$&CEKx=6!uFNr~YOZW2FTNa_^)LktkoE~S4I-$3_%un;xk;8I)(K!tJR#)LuqTWpTWEw z4;fp_WC(@9d+|rWGL*AGu&U7pI=L5{cq6f!w6a`~7Wf?QenIjUDzk+-B+bRCx*R~j zA(dDok{s8-&N121&%_`RcR^vHSXMe$V-ICmd2+g4ExaaumQ_I$Hewc4v!pT!ly^Cm ztedIskH`|1hPVi8NOW*G=Adl*SFXc0E1)OC)F=4r=A?)+b{1JnmDMNRkjN}8u6m1v zeKWH(x!yU%QF0_e%u&IMvg%y;-JWGGYkWUWS>h@-zw588t~Ns&Q&k#AJo+a9C@bL|{})7Ht$wpHj6-R+q?o7qABP0;@|9 zJH?uttN5LZ!Zi3Ahg6oE1#Ga&$R_N|nd!*}e~E|t8cl&HipP*7Oa`H?%nh&zqICpu1{pCEakr1@2E1m&grG;Ax45&T1mVn zQ#2irRF{o*%Z%(I&`$}g&Zy{A#uFwM+gq~IUST3JLxDJp#u-ZBq&O}*J&U^zIb}!V zB@G131yoL@XE7X)bCA}sC0)CO-7ILG+AM7ifv3}4KNp8m7L*|qoMjyW#>e#^xa6c- zvK47I9#})?atT^bg@9-8X2t9*QasBn!nF@WO&2e{pmadmwj-ZlTcwaCUWeq#7P?Ee zh~%K~;JcWRM?0@F*BGTje9x&()Y4W3pT0pr&4M5knx|!yDkHO{8_aP?sGxHt_G}Kt zGtm`lP@s|p%l<4nS;=POXUfK70>cJ4F&m9T8wIHP;ETq=Np2d$FN@DkC>e?u(`kt^ zG5zsKf=E>`Y4PM|1VwYr8GQCf=`0(Me#;Z6hbdCbRDiV-XqJ|5KOU>hJx(_B!WCc` zzsE=eeBYSaDSxTjQQlf}pCnTLvI@o8`Jhe}@I^Z0YlIx5~-#4CrM zG%U!jlk;0D8MZR6-$u@!Z`e;zeu^IMXZ}#rmBTZSatB#mG~L22Ejt`mIvxGICrGm; zIis>*92lC@GDm2=vb5Mow-CHTbsblR*lhYL8$B3K#QL(&%a`#=vVcy`%H#ho%qd{F z>So?)Tar^Mh!FxCcIEhm(#qMeDrXOu6x0+Fd)x~c#>#j0cbfShcpH^n$l;k6YGobR zDRZA5w@eT+nN+`b(CSV?JX_=dE&F8Uen5MnA||6JqDDe&>hX<0TK6ua7S_<|~sGuCKUvQ6YfRvgOLXhMrG%Hzx*#X4{>e57urHkRQL~1{0KXO2@`nollj6>Y03JH zUnMVy8i?Ipu5^DnB#swd%(n)WRN)7H?1%n*`qo>alAzytbKSkci^;+KydS^L^v&70 zX#+sg6~>;o;U{faxI-9sKbIGG?}rh5{_N`Hl6#@C!gZ-24DRdief4;1&aWYOz8_W`XSNH0bE($j zLw64kr4Ee+@h`2v_WzW>Vf4Z&rf1(+T3jr4uVeVJ;@6VTKREtW#SZ5vot}ASBpom3 zLtFlw`PA6Mf4l|JUvFf75t_s1Xo8)1kQ8<+iZ%yB+K96h689V#{!ykosuly2+>cO(h$J)cEh?M@#vQCFS|Q^6O@$ zxXT^S@^{tKYu_IG{`BAeJXR_!70R=IwF%|ciJTJuoF3M{HPZ~6DBf4EmMA94p05}v+X5x!3Eu->`uD0gmmM-I-KICryW-I#Sl ze(5`Wm@oW8;h#&AOCj*BzcTfy;q>F>OMj6oU%wkH+&EeuKPKjEDqXs6=~#a5Na5-H zu5jt6$&aT}-&;T7ldJr9?wh?lWvVtYgpJ~x?&}ezN3A=zevz=#2G%QfI@2tu&?Yh$Bq&9l?gM#fxLzr@qU0_L(0+Lwj}Mk|gut0?Pc;LlIF^nwv2w1>DUCxOR_2Ex8_0MK>P$m8rQU)R;sq{ZJzBAkMPHx zi;T%b|LL1E{^Gw1e!*Smmk&c0@bcjZ_xVdBkGjqmfSmQbV?xim`T|2*6@?5 z`Rs63-dl#%!J&;Kxs9ogsug$WK>2fH8xEJJg*Pav*jP%SJR-blfBB+O>wYMLtO?*Y znwwIdxb4Zw&iP-Qerx+`aK#GmI2EFmTThN{@NHaq#CZ~bXVWhRw}0?Hs#wacJavP| z`UzaXqk^$qjg?zO@Jpq*Q3ZO|1nbh|GT;v?G8_Zmr(B)WP6U!%85Q{eKtO;nbtjsD zrVzKUnoQv?;#(0{UQ`ZI`D|j7qD*BKa4AY(%DIRvH?>sI_lxm;C3@7&3Qmx43iJ9Y zp4S(MVh8C(4a1Dsn-ePwxTBMt!{pFRvyh-N3*r~^7M(%X8EkIaI@gb=T?~r-CX4}YE~Liq~`>R zu!$}=)6U%f=ow^LttUu5LKbp}0W#Uj zF;neD5jk;ysRox))Z1j@LED6I)dQjtz0K_BA;UO;#R%-fNnbOy@^YFjO;KuPw1^ER zoUzeai3K*MA>eCyFPhinAaI9)(M87<&6 z6(!;j&jXiwE?CbfGiEvW5!$#xu^B8uB+gD2Gwm3_{1VAtEJkK9&H*M7Maoqac9pIj z-gT>nwiii=K&irJLKQI*t=2B#cY$}kfb=p(aJcC?qgx^ybPJ2f0FoCW2g~(#mF5=L2I? zO=2slBwfjl`u#pl;ssLR$t%!>rl3;el{yM@LQ|YKNr$P#CKnQS+=n7u;_v52CkUuV zzEG2>C1*p#b#@bj991N_CCCbjp5^bKKY$}^=49O%_`Oqr$*Eoxbb6*wv@klMMpxQ5 zUqvOz7=|&jrpzbmJUn=B%r(K}lwT&&vm2-Kbql>(1)0QSu%cc^7?}3JgFkcrT(UJk>NV^EWg$Y597kNmE@Nh8Y z=(C7;z~&6J7_UfBEt5Hfjz{#qV}uTua~QUR5kG5XVQovO{wAGyqWwv!DI1@eP$jA* zlz{*b)>8>8R|R`c$>S)2_!d-M1lv78il6*oU~slQTE(l(`7wKHIdG)MEXAwn;AEjBuppl7kECA(mp2O;GftuOTb{}aRG)9 z-!g8A-^>Ll*^?ot`F)*_*F_4|N?@;dcgvSH%tE9~JRhO4Tq3)GSs_CjaaYpCX!s8Jlj{#Lv-sY{AE+lskn zzDRFVhlI2mF^BCC`FeH$LyYP%vIT=N#9ZpATdSxZFg82Q06I52&-lHm&!Epe<0 z@T`X}aDm_rY(Z^wbs&O{m=Ud6*>Alhe`yL(?bK}izz@Vs*Aku-sml_aicgACh9qVU ziKfzMkIr|j_^Psnq+}FEpNiP7wD&K1;2(%0DkMmg9g@Z(L7EDjN`Qhfm(be?g+VqG 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 z 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

pLPDH9|%*;VEs-Fng>n2Bal4s+S;15!TV zW2h)ci8{A4Z{8)o4=k7ST2Xx%&Uq5xvzfdjVo9LT&rmvt(M(cJv?Tr7K{s9F=kaO$ z8T?}LgB}<<#Lt|UFG8pZd;^JlRCpyB&O z1^$w{Pw->ZBWmA++w&;Y{|w$zLipx34FsC~Xy7CzCo^j7rV$kxf_wO4d?m3FhvhvU z-ri0uCfPi?giJIMqEQm&0Y*Q^FHZ;9sdfN;{kIcGSwEzk=w2 z>5W%Y;XzV&vBpxc5Oe&JA`ZfpDJiv+)PB6e!HWmYvN)J@{?Yzv=)sHk{(PAav-98*6#2ObAM;&pjU+ z=?(OY(T(4NW|Rd`9F)mA6*Ng}!wik^IaE7L2FAN`Q2hg3H{M2So6QW;`~VE8OH|N; zQ_(z62?qgsuni`6Dd1r4-Sn%FR<2>?)X%*vgfM$i-$r^+eG+YDZBda8tmLTYT~djy zf*90Ga|6Cns)xTsSFuWUFHJ*>xD@Cd6!?P-x{^{V{Hz?&dji@}&u8y4nOI7Yz)Le( z4In!O5PyLkX1d&MW=9F04l3(7nY)xFr&w}@KOh91$a$Z&WjcBH?{>%PG%N5 z#@2B0B9|@ERu3=us-3TspYXm$d14Rr`3FfIblw9dwbkUHYZ((@bD|Qf9HFZ@f*91P zPK1q$bUkxgyi|qv8V_6zFyWON0f3SP)xr6dNxrAL5pr5 zr|aNid!_hmq`DL2i86C;nM0E1r;0APGskVgZH&_{%JPoGZ*iX_vN=M^e8$bRHK%tm ziT)NE%`4%wqp%A2OI|QS>*=WU25aEQZhoOf5g*CO6XphB`aUhqgTH7gG9TqpYXdzj zmZ0zrQa+4g%#2gsZA#3})6tTg7(n{8iq`@p?F1+^R|t|?(Wq!yx<~858P@HXLnlC7 zC(>{M63~a49C?6W#4VC&L#Hdyod=plNIGfyB^S(1$a<}wkn;qvO34h96t1S6{KfR3_! zEE{R#Y?P6r^>VEM7g}#iwRD&1xXjlf(I6i{yx~!4_0{-dQCx!N2O9ptghXYZ1a$Ib z{UT{2XOPFrb6k)>SxJy_L_(PCz{FM(S31rWcZn6O78|yzgbpU}0@leaNYFEL2!A!v z+We%8PsUR?pq6QPIcDe(Xbf)ADgst{99~#_xw#BSpzg7Fmd-KRl+~P8&O$l|axvse zh$rFm19mg3bIfe2n4>_*Gre+HrojLfL!{ZOX%#&m+YldtL2%L?G8D5gK_f?yA%GzO zfNH{+64}uNG7vd1&J_>U4W*%9Q(Xu;kS-6cuoxmIS(~NXrj?=z~Vc& zTsFRrj8Xy*Stt{h!G44X{z%H!w}WOKH$uDAwi-|qb}?noR>vknu)#auU?p1@zTRbQ z;jYnK2RJCHM>z#m_4c6ddSL$Vr9TAlfO_Kgd%z~vy5^=z*h@DtyM`0a!IydVBbF|M zGHk?wE>I^-gsEILYhCNHyHuPL#^B0g#6MFV_IMQv4XISFnbBuUg(=O|9j(&2pib;- zCWEQL7emZ<^6jW&sP`~OjdHZd>8MUTs~+PR7i&P*5p?s2xgEf*5pC@kOl$_<$HhiV z2n{>Rss$T{1%))BIzwGT=4Uq_wwZ|2Cj3&0%)_ZhxnNV@k`mz$A?CNde{uoc`;QAm z0#{>m6AoS%+LmKW)G5Tb`x`q_=%TappCC4xit3&u7lhL&uO*s{ueh+?q}iy}ir`J%^{mPewEO?%$B_EF^F@rGY*IX?Ex>(52}eTGRg99P$n zaAzB{Y;WA=Z+1m&e@)dNUGr7T#0e_*m3IOyKN@RCBm05!i^@nb6}P&8wGZi{)@AG2 zqJqy$C){Gni|5Xj9MMfy9xpOYo@6&96}prW?rekeEH#of^}$+Ae6g;uQS;cu2Ux?J zFG?eoV#=fhGD;>YJGKf>Z1Fz$;tL+af=?v9-;h66qSIteHLcy#RrV*%zNvTr_D%cw zZz7jZSd8LqB7Dg!BjYZioS4|w_;HD*^W1`ozgb^>`>65cdqt;AgBivrds~gUtvk*Z zjF;(Nt!v;`Wfn3I>n-5#n||2*>XEUD{(z&s7QJK(epLaNkVzn zOjEt(vFO>|<>q@rsb%5B+4nVdGvwdl_x5UUhU=5P4GEFmUs&qzx#G&R?#8*wS4Ej$ zmJ`#l;}Ecj9?L5idZ&a>R`8Y&Z+~=U&*ZNCGvP^UZ@S*wHJS0#fziqDGCn)<^_~ex z+pL<{$Cp32`O}H-KTRtr_Rmhz%63ZO~8lS2jF$>vG4_p*O9T_?wL#MQg8DPS$mJ z3&%TpGu*e$;|-5Zy!A^<{p8r%^4QHuHMW~fY{Rm9A6Oe4(UC?CnBwy-T~nuiQ(hIV z_I}fM=L$%6q(K4N#DNV*2RA=E^Igj~ompw0osYU+Z^)Y55WHcZbbR0HINkhK)N$&w zEfa=<=V2k2*E&Sh;USloggAt2-BdhF+8CE`8l%jzad}DHDhEU%&=HjQis>Bj5T5vm zDp56>z07w1YEbJofd4$Kf-*M=;+kNxHGTLU>))WPf40jxtEIK_>^0gXY4(|AY^iM7LP@WrbcTDbeK%Ni`JbEaZe}c-BdeIW%^9&1YnORrC%#<&6D0iMCbEor>L3#Dq_ zXU0#Qg=b-S7~a}YKiV++b^nD_R40yZoK_9M7(p2PetkyenyH$Qewe9>NSAN8BPV`n zxDxsFhx#i!rnjz}x|UIXax!?M{`7%or}uLQuK%Sq`u*wORo}S&^`gzzq9ym47D&dx zx7Ey2Zb=Pu4(De768|Pz9w@-i0OhD#_FN{;>1vo+9!BS4D`n4QkB#JsKkmC1NtpxGdyzQ6gqCZlQX}M8F+V&Rsw@ zD|C`Dga;N-vUE{LO1f)majwsdi|STZ*So#t1l7hGfMTzS>X!7-vioWKO}g;F4aLfb$RxlIy>NHsGD7J(6R?P08jl>}7l!YM6$N27^FJ^N%o zt1~^@5@4XTtDB}?XQ@1om=ge@a16ZBaMBNs??+L z9TZq7s+cuoIAeFN!*CMd;c-d*L zVi6BPfS(puL0OKQ=Ewk_4n_Wfzx?wOXSIC`ih-jYH#Pqn%clZ;ywWcYvvnlQDtkiT zDpe%VsV&;My0{vWf=+}X66TJqvQqGm{*OIbQfkQf5l>!wm)#=r)S`Y7O%45ZKAi{5 zu0ieL_iDMmfMW<7?MxO!TsmVEWNWAe2?!(vDWybGCWhhLk^)4x#3Czz<1q?J@K9Jc z=5@tHbCZ<- zEs%N};(Up{A*Uer2GqtDu@l610ud(I?GI`tNQ08%Mzw~{1_|7-QSo?5YjX?Krb)U` zn0}q7obpsw$@kHQK54t${naC`L^_j_1PIcKNzyB#jC*Dw^d-&qGg-bb)Mg^F9gA z)o={X#-P||aY+CpwJ4?z>QV%`mJR|=s|Z*J*baoUcL@wliaer|w}@~(4g$z451-Js z7Xx0U`#XM^lcYY;hAP>f_U6wqlyS}%7Yl5TSW7Xo)C3BF!lppH=w?|Z=VpG@DISDL zk0ok0lN0w2!1^w+*kLw`Jw}vHf?&rNEo(ul2^>Qf1Dw%{B#(my7QQ_E6_4*} zQM0f@u6emBMINt!ZWg3j;ZPLfZ7^(fAmD&KyP^~z+nQGLr@16LrI@P3TpcWHNfb==0FFe zkQtiV1`Fq??ehmKSl*W?O*uYpa~X{k3~yBi8CWPSLsreDeT`^ej36tN9D#R@ErZD0zQ&AZ80J z@$~@|>3K^;i{7vaGQ1nA)VMXr#Df%kt-{SYEXo?s5&xi4I`J61#H~cBlz@UxbT&Fg zQO?`ggkS76Y*FWh8{KaNATd)MSRrmFur4dMfVY)oYZXYiWm)bl-XO$0HT<|RQ|1E3Pa0|@ayYY}z$KCh!)Uh!ly!(5)@PH2 zO>rEd^Y5dY)&#nR?QgbN*92m?!;-s?*|w_j5qcZ9jcw^{Zpx-9?)4tw+Io5i_rO!^ z0&XF}FX~*?QM|yWVd+sAgkz+o0VeS+4~%;U`=poEOz9g~ehb;$g)OsEy7x`A&^M4K z5D7#W=kt0J9=*fiS4IeOatqcpeCTt2P#|^k*ulZ~@eZbV=Y@c|soGY{)xr*k(Xe82 zryQnjjBuY*?ls0BoiLcWL5z{FuZusT=Q^$N@il^n*X?DKsZ?G+g7?zA?pk)8ZeUbOrU)wCx%>@bdl!?& z81N2$&tLzy#x_RO=GJSfmlmhhdR1e|Lzd+6#=mE{ZtKMi>Lu%h(!MU)yJUi0vXHYz z!Eo9V%Z681M~)1^qN$x7%aSq-Gg;P#)IV$*7an~xZvAViOEiVIK3A>Z?~T7%qOAJB z7D*bmEVxs;wEUNm4;K9Mv!m^|^WtH1Rodl-_LuW-e^;=h8X^=@b1FKJ-0;T5-BZ@o z-DOW1%89AwzN6>9k|63Us=9D$aPYKPq>r@z<^8WKCrG`f>{0M^$em^!sio$-lH z-WPA3U8UJDw!8GrVoTbsvnI=nS6{w&MvsK*vp zmv1azesAe5%h^}0Gj9xOmj7Azs&)LM&6+!ZIeqct$)JA!6>rzY@~IJf+;q|2sbrTe z`i#wb=iAFg&rLr2<19!Sgdim<`b3 zn|7^VP+lJ?S*r1jTbJhk3#C95Rn=a!WLkA|L8B$# zJoKAhz4hiYjrVqq-b)+-wGgFn-iL2}5b}P0@9z71et&b#aSL|u``?t`7=2~p^^_az zOTnlJX_bkLpO!h^*}BJm=Q-v}chULiGiz@>QXagsQ97{i$G*|tk4{ZKd#Y$;>ioz5 zLMdm7D2^visPIKD<~~ZXP7au?(SN~@y8H0s|AtbQfcszudTb!0()5yP6rc6t%yKU< z=6qmB_Npcr%B|Ul*A2|O4^aY^lhVH-%J3_e0}n6r#ziY3FuCc9%ZR;oAEK=Npy;8Q zb^Q>c=*(^u1r9@={K`qr)Me%u;a+j8Kg>2;q%h>{*YaQ)5G2d=#F?2YShZp^sCFB$l6 zEtoRgsSHb)h8twKMfbH}1+!YP(w`*;v#JkC_*w_%CuZeh=kPE{aRJgcfU6+(0w|Hv{gP(OGWr-^fCX}d@U99^z(6TL zA)!3X32;@Hl+qPW#+k%U(YJ-{q)tN8VG#7ib_xZipE;7s>tn6$&3S=N#|nYk#wi_o zDxgRgIR`FpK|cX>k#tV%^0ahW;{ud@>d#MK;x7P9hPBz%>~lD!XznDI_Y*L0;5?zY z#9mOr)EOyIVs55Auz3k>m2z>clAQ0v0sR7Hmfn#>!%~5Pm9cZ16>WYf99L9u+oY5= zp}a(@EYN(8I5$Q%%U8Gz^nfy*?N*kNVk*h7rfycp$ekg|QEVQM z2duK6F_ES78PMj^%5&J>H3mUply8+1MAQkGA&|v%!#7Yh;_MH|U}-T-tP_s`KE%Ao zDcDd_09@m`1YaFLM6US!n9}h}Rt@4im<+at66jwME*j(WF_t@~cW|CeYE6#LrB>&< z130OdFg@Y-unPf#XJDOccBlnj_B*1uEGQc9Q%;K(O6ZJA0a{H zB56@p+sku#aPC;R>;2ajfmn|np%dh@h@_2#9xM$l7Z+nx2=1`s)U-K3T%)wXQPVLz z1lv{QG#x7!VF!+0Fb87#I9U8r&4va*PBkl41PD!Op6q$kA$&;HleCC4cz9#zFmMJ9 zg(^7D{>Yk1dnThpMJ@xAKuc#Cf?G$c12Tp$;VAb4(A~UE5;MdfrGY#$uhnq@JT7tF zB9o$D!zj-Og3#7FZ!ooYkmXbT1r560p>8Zj*^_xNBu~eEE18l5Dn~29`VU=FXE#mE;LYRNAj{@CkzQf zWtH+2-e1j7oMR1>0u35!zJe3u!_cE8*D9I=BTy0u%_3U#pi7_XL?Sd&0R*s zNvZq%zM(GQ=2Oa=Px0?bl4Fgy@z+a!6AW5q$O@9%TEYQ}qp9Z!$fs!MB^84Q36s!< zRX;W-UrjmZXzP3NOn_m>gscIo5fcZXVXiD6ATZ)hIu64x8Q2du$WxL%Aop)Ej6HY@ zS*%B346+s{V1$-WLPZ~I#sKC+dEyL9;xa9i*?5o`ay!JX5MTx99K|s@9 z+tEqo_G+tMo`lA+33K^Wl6I-&YAqi0T%rPlL>dX=53%YRvX@CTaf_&gUxBga^td=CFW6b?c1?vN|QY>8V z7fT>WKq^@1{h}9hDNeyC*UP$Tty)gTxVW55OpB`HAv4him3t(OTG6Io02P6uQpN$=qQW0mL0a7MjRA{Ud3p^T8R!sko{7h_I}X{Q|5 zNEFb^!EDi-`Ehj66x;<-5Li%y=`MyQs%s%`Bihvni~?$h3mTH*7K@xulBh;}F4gL8rIe^0r>ZFp&z>WL zJsj1|I^~1|<7E4>)NIKiQ*w$pKDLux=~$T{Z~`nl9%RLBeH9=FwU2aJ-itvInvX$Y zOafq8#D_ZHYl6rnQR1QA3zDBej_{Y5fP&D;p{I!<43kRpO48ZuvJPXN5}r?5-&&(f zaM5`|)dGOEa%o)3!XD|t_mX~AgEPb`qG=~#do~*Y_?k-F(PT$l$bHb&C8n}TV<}|cO8z{>>A1J#&*PGr z`gJE%BXoeAkf`n^w36G2cfb8J5J=}klxo=IWNIj^KiC=fY^Ib%nON!=7rV-p7*!wt zS$+IWO3P{YBC=(Iqg%=2eRSnll3SA4xNC7IB|R6I|0`&%8vOal=AW^$qU0LSEgW0G z6q<53dzFXY|GN0c>@j_3>hFr4KEL*+zRnx>xh_I-c@vzl;z3J(f77%lF87696OEw^ z^Vlk#H}!D)ly1T~rpGf3cibN@++0pgbTY|l8nz!qJj0gM@iDHUZ`y;cd!h06&cTe> zu`1nX+s7IQ_guMHjYmasd! ziL~~Yex=(?j)P3=O|~}nasktG`8X3xaWY5jeUl zx~xh=e)o87_;S*OvLoZA+LL2ZPE&KF@~=Vf#t0s_Vq*DizpE(q)n)xmw1zCA8cs$t z-4@~YzT|fjcO-q$bNi!Z-rq((1xL@Hdv`EcKIpDJDt*;>XIttG<5V)I>DZ#X?L1z7 zF{PfD$NUbJv(1cc=;XgGsjI{ zdrj?F{br3j8auu&uADp1d>uRO*;({(e(bE(VwiF7hOM?oaA@i_?Mj>Q zrjMO}$FljhZdC&{t#YkqHQZOr?pB@kLi0=R(eLircOH0X?90-leN(kZ3lH2dMy^Wf zd!2VqQ{JtU>rY!k6G`7+CB8X%@~86PG}m}zW8@TfU~q~P-!cBqd7$~nst03ViLgl) z{Y?mRH6pAS4dcIV>Erm6K;|Mq=39|`(1+!s}MT9OZJok~5exfsnge5N}8&yyQI z>;21yJFY%W8~dO+xPQu z>wO>0$-w^+c0IdfXwyuV&9eEHs@SsmCSKD3&+ZGm#v3wbAq9EaO_@e`$%wXn9f z!4~agbJnMEh|%*-qr*fRsAUEfU4z#zZr3F-38^;yE?SxA`7oQ8*6r!~`Cy;H+p z*bO#vV+J0sLpj&?*Z)h~b^WK|MH^-Z0;BRkRO&kL+S3x8)$A->Q zDKK#Dp@-`hiefHEs0Lb?#49dm6Mjtr%z2mu|GD{Sg}z%|7j`S7R7t)lH#Lm zzU?@4(kkofO0ZmEZ?WXBVXrZ6!dcS61-L$Xdlz^(z}VGwu53@6v6(OnQf%G8ZQExR zEL^GQNTk?9BKi&zruWL=Mmk=R$jW`L#OzEpV)7|56ibvFIy1AI7@iC(+fxV^9L#eR zaqRQe^WsCiZ>~h~$Al(!i4Z?8mLwJ3B#{QxP~+QNO#0vpGYR$aaJxn(_Tlg?5o(S4 zAkCdKpz8*3^NFv-^g(M*7X=$KRVE467ZNa+RIcU5-ni<6^9=77I61-K+9QN$V)<^0 z)%rU+p~$NzF9o`vX_*0Zaq1Kxr(l(d^_(czLi(bKLn*GeSq^LgIe{3&GSI2L_Fnjv z@&9ly#uhWxDmk`XmIXSjty$G=9s;4*CuIxNKCB1Rb_9_G5Ex}76C6jvWFf;JV|#tf zh(vX;jUtX8*7G_7hlZe*u-+^n70pFyxg-mL2Lfj?4%+i6G(|LLc2in8*~jiBWj?gI zgB5X~yp8fxN-*ab374UA2qx4Xo)-uNImUMLy6|_K!YlV8L_UMxnY9)k|{z=dqdY zy{&cTYPR~J9$3HWwQ4O5M>4$4O{qm6(X zgn?t#C3vc1JL(I}zZ8(?CKIM~hrF8hg}F2ErxnPMWbul(VCL5dFK^*{I0+!UejYDqdp`g?+==t_ zDwNktzo1HVnL_hP7U_2TS#C}!;Gn{w0zybUzWIctl)-(tySWE%rX>X}7J`6}QiKBO zP=zA$>9ok@DSQe({a02PI}v17QaDiNh5$m+i_0(yZ{t$JQUz2%@!e|LF6p8`bfR2< z=2me62YPTP6b%NNW$jj!i{bV{Tr1?sIfREE9^~gOdk}hs8c{(I(1Am4O{SCCTrl4b z$pNwi3B_nN2};ozT)@pFTtC}Tj6~WDj1ea~;56t!d8oqbWO?n-Xkz{-CYICcmia>9Rz3X|eu3E@N<3aSv*1FCksg>%KHxM7|X#p7kH81E)ls<&|l zsbr9sj`6M;=0DgN8I5&Im`+BKrshmjzFNH!x00w8!0%=ze9==gDBwW=6j7`w&#Pkx zAo~oB&n?Alf;yjGLxXF})& z$p#=j&9Djc7+`aw!Mt zGGE^Sf*^hHp9uf?AWHDb0|!3)-^eVuz})b&973i@@OeeaPW2?>2zyLOxW>p}jJQvR zAZ&$GWEV3&BB0=@K_7=gz62tKV{g2VwR17MSmwzPsB2y44}%19*#2Vi5E#_2lE?p% z`3Oehi_$z}SkPw@xiIFppJES>94a$aVM%r3Io8c$#%ydMn=o+twc>|9qzA25=EZ=k zMO#e`{021DhJN(8rR_s}wj=2pTQ;~oT)km1jsJOV8gPgvhQ%mVgn{>rTESP~ed!F7 z)A&Fx{s?=T$S3WlN1*_hUa{j@;UjEbj&RLt)Nw8&Vf7>_)pM76=maPXmM9pGUgk&) zORw}%If8sK@VhBLtEbt~3t3BuB+L#uyiOKRm=nXSf?@AHCgpF*jlD_0%@JumYlV++ z@mq5KK?cG4c50W4ZeM=8Wun$>ZKkmpj97*E5i|>5(eS`kOo9 zJ{!v0n6UEp$EhDDZp!_s{M4Wcn` z4dW;3y)Vw#8kZR}9*TBc^)8#N7d81~@A%j6+%R$_`uE_=yEj|lt4oTAuZnM5 z&zBG0+);Y^4>$VnZFd~~!_8|);aPIu(H|#%YAvGf=q0$k{(gGHYd4NWif$Yjnt0Ar zzUxl)-;NGVy|?kR_oAWqeh6puMX#|L`|fP~)A8cU`pxC$b9fzFYaM5-86_XAyJMXw zGJNkI%K~20I8+C%z1PHe*@jI~7pK9afGf9ubgO3kvgRw(PibRkl@`l4rhBIm?<`+3bHo#8UkDqi3hdDLu#?;Khv?Vai*rE zi|~v8gAuasYo$K44bMh>8Sm2&nvKh;ID24OZo>WaFjJHm&<$fyRJ9AVZhGu8y%Ta3 zvsadBHa^V$3nf5zd*alCpx}Nl>oBJJG5i095)QB(P*gSST)O(HvKm7T^2s8%R`q_e};i^V1Bxou9n3ltub~Qx-SU%OBc$ zV`}*7t&`W+&4PrhvmoJ$cNQc(GyVN(!}RIv&rFq+o0U91Ko#p%3_d4Q3H4Ha$ymxu zDq%?V5gw70bb&HHgkuG!+0^B9Lg`|aHLg+2!>WeaT0$7Q4;3CLD8}-zcJsfkbKfNL z6WpPr6H|R0?q*3<32OIJPXqoyKz?60~oTPhjsqi#4Z07$V?&LVT+9q zB^ldo`w1*L5uE1eG=LStdHKOL4C&|?VB+vR>KruaOUm0$T)CwrTWI;h7GVOMAs_}8 z&3#SGGt&he6$h0swg-g*7D_s}sa*5VLT{2Jt02>W7XKwc9szMMZv|DN*g+^Ord`A_ z9SL9D6X2FTsRwRhX&xr#8!$SYpzBn#xwA`sls-r~Jz`rmw88Em9MypBMeJvrvY#c? z2%KA#GHiC^3U4t6bK^PO93)0)C$(tIoXi-~!~l$dD?SCjpkyVv(vXAp#-qF0HYP?v zVq_Z|gGa!IgQ83e7?~cRIv49(iu*gw2u1TM3L~ipkOg|3%z(O5$oXv^gyHoj%SdwM|wg4z=Ks(OC^e44;4#)F;lIkZ>oW+}$#Ok2N z0ne8>+L#G|u9(%zkMVv~2Z#i0n3Z!36@z7QBR~<(AVn9;LmiYZNFZxcWLA`<^93zh*-mkYyF0HphwXrm7N_M55>L!$;^i$Yf%O5T zQIdaC{vSCwiW$i;mJEmb=S}iO%t0Kg2-CTkOsTq6=`+Zno0A{KWz@0WMEN2?&&sr$ zB@rl$1dkGVMiW5Nr5tJ$;1b-WvwZ>BYa4ULl=a2K_6oWJem5CZ4R9X{6U>|_^E^Y~ z@?^kw3s4=wQ48XkV`ScUD!Hx$Fl`{cy|SeQM(4suI|p;Z;rdB*TL~RQiwR5sCz=&> z`Qs1JK8Auacajz1hgqh*KHjob22-4ru3#R+&u}aEelBprX?0W}g?bn1B_}gtj1p zK&%Q|(<(xO!WO{_Lr+6aQiN`=58;C|$Z<8LMa9{>q9jOp49XjN24X~3$m~xiNQ_Ve zcvnqY7^RIT^byt`P(g^4$Rph>1xpe+)Y>cR2$~o9DGOT3;$#XCoBTSs}pw1wC z#&95qlZcUG`67GH2u1}?;^J(3QU%XZE7?_`Hk**e%HWeJP&)wg$;fu%k{X3K*yfVL zG1pj+cxHbQDN(XTl=cv#M&oc;QAv`>Vj{=IAvq|wLPGF1`1=hCC>oLt>czIdvYAf0 z5uBs5X^5_m1;|_xdX{VoiJ`ReOHwGd*e630cT#Et!-}HJjv`7xWxI4F8eoV71>?hr z&f+|jR#O;~&hWhNAz10z#TJk}<6}{V)p9P6PzaiUypM$bW@gXti`WjVg7mql7|;j< z6k&{WLMKquwsuNwoDfXixLs8C;$jvgt0?@zFqcHSV9OBghc&b6-U=29SyP-GFMm=D zSNl|RTG>-5a$?@4fN21Z=`#4MOCqr0^9g9$N8BBbcrPIQ=?F~2_LDSqUAq6{HLTtl)L~-Bs%cyG|+s79s)hUc!&wAKgntnz23$Zx&sv!2UjWUc4Ln_$(}8-+ow_VomGnm#ts%!&3vsF^Wk2-4o}YD#>8Ked5Yvr9|va@@-4v_-;n?HfMw*ZxvWRiWHF0wQM+HX{r5e`1DKk z*ZbtazqCIQqqKZS-Bm0C_tQ} zA3q=KE-5_!X4L{$gZ1Uc`tV3nRM}zKQaf^FC>mGe)!zn^=*14NyQkZ>KR3fLiNm2} zS?R*RuP}I*Mr!tGE>1KtM-Pn^{CdwnCVIG|U7g7@d#|w{4Mg;=pI$33o7`?Y`qG^| zD7PB=N0fZ$onJSA2!DFVsUt0A@9pTF>T`ZJIPuoUL~>lY{_pE<=3>caP4XAHH!DBz zuKHoic#Yq?{tz|pQEk4px&Fml$zNowj&N%qnQs z49SL!#}6I3qdHtf-HQ<3@;j>zy;|E)d98Hl(V?Yx$P=2{nO}NuydM4XPk+0(=cAin zZaF%2@%PhdpBz0Ey|HgYuppRmF}mZgH+r{jxXbVV&w|fRPHfn|R3@~MkE{v7?yV+Z~)nfJqI6O$Wu9B4i4zoYjTx$nGI zFw-?z^x8M4C!8C0hqiTob28%nY|r=6X5O2A#~IqO51t+P@ecn((Te}|FKc)aw1zKo zLBIF^F;M(BCcy7wg8P%c2~PUDf#J&g^uoW~824ENXbG=zHBD}^{SQ0<1x&4#u$<+; z1WYNB;Z|L(YoE9bdcvvR(0xPro9X*9ryhp;{%9q{0ny6U|35^KJu^OQv%s^;AG*2e z{z0YL3N=g+5!fMR(2zUJ8z}!LZve>y=m`HWe+K*-cs6^0yur)$qc4sB%byXx@6R}T z1Nt+L-k8E?9pNf?_&04(9XavI%#V@q@moJ$zj`YS0YP{c5WvHg4YL}ilLxN9F#=r{ zswq>R88#3Pz;Ry%KSD%sZk9Em*8WSKq+B`6DHK4sKrsI$UgFAd?!UE5XZ{s*1vvo^ zT;Sd33y2VK(a-!(1aRqa7D)3i;Irnkm@XFUXwvnY)cpXib)iwsnv3(c0X8=tFuBHf z@;S1wH&KFC{(gL3-;)G;$n+!!C7AH#Z%j(?+YWb?(NCVlogIy@0|VbF`qd|$0li0R z!9VW>wVbIh*DTl%2kOZ2*RQs%Rmq>n(3LpGK)uqzBowB3#FJ>ET99$aFtza-fi7dS zap-E48%uB)IK^Te*n?~6N+xfRB{yRxLj^?!1dlzNYci899n|c5b_WZSMGmt=y~{of zsF5~22kxriV2mOh?0`s6AV!q#7P?s|Y=C<(Nuia&OK1P&p-3Bi1IrnE2lp{1 zb2n)dW|4xwgh)VF5=M%IV`VH#;8caFn}R|pD%bQlynt>Ka%e)3rw|T_#@SC<%Falj zjA$uipDh7Ci7OTVy!3bR?HFQ&1A}Z4WHwX;9wM!1PBDjgD#+P8MQQ1AoTH9mt^|t1 zS-R5~CdlaAuN@F8P0H1eRFp30aOD;o$NwKpT6gF36H} zP)9YLbF1zYppKe3IA#KYOg~td)%xQx#P|7b{^ch9HM7k(_qizXX78 zwN)(TsES1}0l zsJS;M#W0A)Q!+Z9s!<8330n2_q&UQ&-Py5V$jZz?7RN$ueWj>~#do=xSUGJNFYR?; z?F1CcFcfK2>rwj=yNDKoM3p=h#L#stt)SDw<9jl5FiGaa1*Jp@jd%}v3}A3~hpEot zP$;oDme%4ho#znL&k!W)%u+VmQHLBU&I?gu9y>s>ObZMCzsjx!s);KN-;7fa>vlbv z$rz%IH8Yun;i16@Lc1!t!vG0_NT9S`+ttJ@(wE0}yF&4?tzFbs zx97BH8=|&3wzZYIu6@~ReXVO%9@R)u_Md>(p0nrd*?TydxpQac{<#U6|MC6b&t&s^ zM4%Z>hI)+e-JWju8g-G;6D2J>+5`U4cV0P}u^eb_FUTMeeI;6#3a z#(?Q=qEn)j$4C+1$~2Lj&^l8T#6lwM5o8n4TA34sC+wH1Jd9S>B+C%P%Ot~;g(mHu zMB16Qi;--!her&vKwh{vFl-K8$TcY7^mf3?2S+7LVvo_oY_jAI1XE=ON@EHEXP#5T z<82DcCq!58<`bk1fUm5eDa_c*rWiOIxxYJ495Egm+O_11Ic+=4{Tfomg}Gw50k zX=i9&W_k7mMPwL)4k+6*kxtbyOhb8Xqnm@mA!J}N?_}M4o}7?NT8Mn5_q8;WrVw*^ zgcIeu6aw%xh@$5}7Op1fC$>2SQ-UdhLzJ|K6I&D@Y>=T8A*ABUd=MaF$Pc7cK}cFS z(>!gusf6!bRi;?R9~JFB>9(L;#eDwW39Y7@8RMRt9G(VF7DNheyoM z3{smUb_^*<4if%+IK330ed^b>;L1E1F(j?h9*6fv5N>LW$T(bWd{VG>MazMdt$ zR$lrjXbBz)ju#G}96LQ=mZaf4&)E@8IW!g)a(W`7m0idict3IEJ21f7*c4d=Y!C9| zK&d=Oc7V>RMEwcRbcBu@M+8E{HwMdLVYxKBlFLV1pS|BmBEd$HvMIqq=rSGM zgZ?NEni2#g>y~3x@S>p80tQY3uBS=7SfQ!=25kiJR44p-$}f=tt_6%xx(q*?#zQ!_ zbqq%79XhCFN@~Fh41=o!iQFhgC6NM43n>{0QhgjE5uQdrL7D?+OW~J1qR%!4G{v;; zIcl3;Ptd||c47Tq#;&)p9W1?#HjE++4`e)~F_Rn>G%xPs-AplCD(DzZA)9e9 z(Sk}%U!e~h>9z>5syoKz>K+@3V&g}s+O(P+Wkmp{sORS5-e*RQT)ALEbE zY110S7y0~h!v>{Ri2)Mu4VBw!*SH^Cow=Dy3o6FaqxZX)`Bt#q+pk06b-m@aZr(nt zV6A7mcSfRZQny7cI$s{!mo;11zq6)d`TQFJeU5O;%_S|*S=dwCSu<&!-s`mqKdv}a z0~zr7wlz28tkQ4Yea%@lLRW2P`-P=5dNz!C=Vbf#W$SLVRIGjN>xR0e+`Bva@}hq# zv_*O^*_v!0PY?Aj*qw8-d!wuA@ceaES&bW_Gg3a7|9VQ#R?n=)oU)#Ly6~;UE}f;) zdbHw6&-vcTtqjju{RT|t9s73 z|2VhW8l&5CY-RcyYrk%%ZS4a>C;r{{&bX_)y9yV6({l5rnxsPW z*DrNXXe<%4JI1pE_5HSu>-*Y6Uu`|{(VCQg=ZEiYInjRJ8`~umglui^%NwKKqvLEd zx+=0}`~Fd|;?X7Ut|d$V=&LF3TUl4Vw(H#Fl11H<`I5>mDXV1FfyC>&b4ibul)rFp z_LAG~?bTCz4zJ7+1|F$BMdhUJZ@IOqwmR$LtgZ_$EUK+$`@kAlcXN454SU^EXDf?X z9`DPnvn{*yWX~sSUWyIuUwyLY%Qf#U_$G6JU%&HD)$W|ycNH}81C z^~$>H%KnT4C0-yzo@}jI)+0T-wyegzLONG*fbF&9JzZxT*L6N|)~Ot}{}^>tms2!A zovB&TS8?_gd$sUm#*S)FZ1bdQ#8*3)-I$DXR;lDr zt9ofq&C2U~PY#en_2m2xFhn+w3LmQMIR_Y`p1T;Lcy!>uV2G%@7@~*oVu+^P8ngv^ zTfpLtz4>{;dC|3O>5|0Yvh?SECHyCzZT?yZxSo28a$^fat)g_pi*K{eJAy zg&KGniVgrhRPyaB5G6R#`}63)ahkNWaP#iQ2J%$$+_*IW@F6R+#B&H+B{h|yIAHEl zbTb)h5I;0Tj0=ejPRkwq5OEhjG?p_n$Hd_lmf`}>^R9rG6(BzoQ6l)i#ItOhtRI%@ z42~hPH`#;Pf*Ci%)0EfkeT*<{!%X(f0CGr?v?9GG|Nh)gQEE6Y9tU0(($zbf*>=g| zn`olMHb%&0b+kQ$gXgitq3LcbZEnbrxvd19f?EX|h)O{%Mu}{prdAHz$LVl3Wk83l zjQMN?U<6);9WP08evonglg+7u=a2&)Jn?pSXQ+SA=Gxu?(*oA7F?C4T;6VnH29#tg z;H{B~B7m|Ix5}Fs&OA)gaga^wugjocRkAsKkVxl+5P>~{;y=XaGg~?ot>)8n6YYMO zlNqDIk^!lY@i0G=LSY)22*5BvCMc-dqEj(rA{}T?P%Qy0CJvrg-Lgr~A|Aw$z*!2F zk_A{jRZ5j&7J*%%0raxqA`M7%2qQQ^^bnFqKu$rMpvdUcK;}aZg)o!I0v3$Z?toc1 zEvbrPfXPkZd6WI6QX|2J85GD>63}Q4+Pcc(f)TV(NL^LC(QzHp!rrr9+8&f89hE3&de4%sHe(ji3t=#V%8;C?=C)_`|us z0^ER~P-T%!8c=Or8qhug!IaLWP=qQESRa^hgeaoTMBi_sWja$}1y~9sq>*9q+TXM0 zaGamaMxvZdr0;cdCQ{Iv$BZHwgHuNWRzD0%hv+9v&bF=K%eIuJiLIstRAeA?iS)dB zq29}*sPgt_Bh?kW)8P9E`pKQ%&{m0WrFp-IZ{sU|=L~fb;d`TA1|J1{fwf>$!TzVR zekAxj)mu3<4q|8v<*gBXaM07jJBCx^O{-zyg0^8leG|du3L|&r0Hx^O7Mk=8f-CN6 z>Iong2%=7gFmyo_m>=3TcMM)(mxV#lr{f*GYWJt+P{p^E4I4TF^A6rS-j6TH&>pC`AQ;>s`%R5{qo2lxE>$-UK#^mZebReYJ2LJcEH60`NK=j7vb)9sR z!Nu6QL{OkwV36&fnt~GZwfsRE85vGyd?EsT>|{QQ(PB@VfaxX}Fanx!Z~$uQfaX3w z1knxkcwy8tM?|2T*GF*xS=$6uPmJ3)(l}f<95mylID%OSR0dgK$PQy*Q6P1s(Fgs+ zG`OdXg67j8raIyb%m_kl9Xe=U(h)hv(z3KkvG{~CNN>@RSVHykN%zgO1OH$957%N9 A{{R30 literal 0 HcmV?d00001 diff --git a/usrp/fpga/rbf/rev4/std_2rxhb_2tx.rbf b/usrp/fpga/rbf/rev4/std_2rxhb_2tx.rbf index 966bae86571ebe351704d2266efc50bfc8168c8c..ee3c30d664793e974d9a4dfca51cf4472100ca0f 100755 GIT binary patch literal 181588 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�YY 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

+   * The 4 low bits are significant:
+   *
+   *   ADC0 = (1 << 0)
+   *   ADC1 = (1 << 1)
+   *   ADC2 = (1 << 2)
+   *   ADC3 = (1 << 3)
+   * 
+ * + * By default the control loop is enabled on all ADC's. + */ + bool set_dc_offset_cl_enable(int bits, int mask); + + /*! + * \brief return the usrp's serial number. + * + * \returns non-zero length string iff successful. + */ + std::string serial_number(); + + /*! + * \brief Return daughterboard ID for given side [0,1]. + * + * \param which_side [0,1] which daughterboard + * + * \return daughterboard id >= 0 if successful + * \return -1 if no daugherboard + * \return -2 if invalid EEPROM on daughterboard + */ + virtual int daughterboard_id (int which_side) const = 0; + + /*! + * \brief Clock ticks to delay rising of T/R signal + * \sa write_atr_mask, write_atr_txval, write_atr_rxval + */ + bool write_atr_tx_delay(int value); + + /*! + * \brief Clock ticks to delay falling edge of T/R signal + * \sa write_atr_mask, write_atr_txval, write_atr_rxval + */ + bool write_atr_rx_delay(int value); + + + // ================================================================ + // Routines to access and control daughterboard specific i/o + // + // Those with a common_ prefix access either the Tx or Rx side depending + // on the txrx parameter. Those without the common_ prefix are virtual + // and are overriden in usrp_basic_rx and usrp_basic_tx to access the + // the Rx or Tx sides automatically. We provide the common_ versions + // for those daughterboards such as the WBX and XCVR2450 that share + // h/w resources (such as the LO) between the Tx and Rx sides. + + // ---------------------------------------------------------------- + // BEGIN common_ daughterboard control functions + + /*! + * \brief Set Programmable Gain Amplifier(PGA) + * + * \param txrx Tx or Rx? + * \param which_amp which amp [0,3] + * \param gain_in_db gain value(linear in dB) + * + * gain is rounded to closest setting supported by hardware. + * + * \returns true iff sucessful. + * + * \sa pga_min(), pga_max(), pga_db_per_step() + */ + bool common_set_pga(txrx_t txrx, int which_amp, double gain_in_db); + + /*! + * \brief Return programmable gain amplifier gain setting in dB. + * + * \param txrx Tx or Rx? + * \param which_amp which amp [0,3] + */ + double common_pga(txrx_t txrx, int which_amp) const; + + /*! + * \brief Return minimum legal PGA gain in dB. + * \param txrx Tx or Rx? + */ + double common_pga_min(txrx_t txrx) const; + + /*! + * \brief Return maximum legal PGA gain in dB. + * \param txrx Tx or Rx? + */ + double common_pga_max(txrx_t txrx) const; + + /*! + * \brief Return hardware step size of PGA(linear in dB). + * \param txrx Tx or Rx? + */ + double common_pga_db_per_step(txrx_t txrx) const; + + /*! + * \brief Write direction register(output enables) for pins that go to daughterboard. + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which size + * \param value value to write into register + * \param mask which bits of value to write into reg + * + * Each d'board has 16-bits of general purpose i/o. + * Setting the bit makes it an output from the FPGA to the d'board. + * + * This register is initialized based on a value stored in the + * d'board EEPROM. In general, you shouldn't be using this routine + * without a very good reason. Using this method incorrectly will + * kill your USRP motherboard and/or daughterboard. + */ + bool _common_write_oe(txrx_t txrx, int which_side, int value, int mask); + + /*! + * \brief Write daughterboard i/o pin value + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * \param value value to write into register + * \param mask which bits of value to write into reg + */ + bool common_write_io(txrx_t txrx, int which_side, int value, int mask); + + /*! + * \brief Read daughterboard i/o pin value + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * \param value output + */ + bool common_read_io(txrx_t txrx, int which_side, int *value); + + /*! + * \brief Read daughterboard i/o pin value + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * \returns register value if successful, else READ_FAILED + */ + int common_read_io(txrx_t txrx, int which_side); + + /*! + * \brief Write daughterboard refclk config register + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * \param value value to write into register, see below + * + *
+   * Control whether a reference clock is sent to the daughterboards,
+   * and what frequency.  The refclk is sent on d'board i/o pin 0.
+   * 
+   *     3                   2                   1                       
+   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   *  +-----------------------------------------------+-+------------+
+   *  |             Reserved (Must be zero)           |E|   DIVISOR  |
+   *  +-----------------------------------------------+-+------------+
+   * 
+   *  Bit 7  -- 1 turns on refclk, 0 allows IO use
+   *  Bits 6:0 Divider value
+   * 
+ */ + bool common_write_refclk(txrx_t txrx, int which_side, int value); + + /*! + * \brief Automatic Transmit/Receive switching + *
+   *
+   * If automatic transmit/receive (ATR) switching is enabled in the
+   * FR_ATR_CTL register, the presence or absence of data in the FPGA
+   * transmit fifo selects between two sets of values for each of the 4
+   * banks of daughterboard i/o pins.
+   *
+   * Each daughterboard slot has 3 16-bit registers associated with it:
+   *   FR_ATR_MASK_*, FR_ATR_TXVAL_* and FR_ATR_RXVAL_*
+   *
+   * FR_ATR_MASK_{0,1,2,3}: 
+   *
+   *   These registers determine which of the daugherboard i/o pins are
+   *   affected by ATR switching.  If a bit in the mask is set, the
+   *   corresponding i/o bit is controlled by ATR, else it's output
+   *   value comes from the normal i/o pin output register:
+   *   FR_IO_{0,1,2,3}.
+   *
+   * FR_ATR_TXVAL_{0,1,2,3}:
+   * FR_ATR_RXVAL_{0,1,2,3}:
+   *
+   *   If the Tx fifo contains data, then the bits from TXVAL that are
+   *   selected by MASK are output.  Otherwise, the bits from RXVAL that
+   *   are selected by MASK are output.
+   * 
+ */ + bool common_write_atr_mask(txrx_t txrx, int which_side, int value); + bool common_write_atr_txval(txrx_t txrx, int which_side, int value); + bool common_write_atr_rxval(txrx_t txrx, int which_side, int value); + + /*! + * \brief Write auxiliary digital to analog converter. + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. + * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. + * \param which_dac [2,3] TX slots must use only 2 and 3. + * \param value [0,4095] + * \returns true iff successful + */ + bool common_write_aux_dac(txrx_t txrx, int which_side, int which_dac, int value); + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * \param which_adc [0,1] + * \param value return 12-bit value [0,4095] + * \returns true iff successful + */ + bool common_read_aux_adc(txrx_t txrx, int which_side, int which_adc, int *value); + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param txrx Tx or Rx? + * \param which_side [0,1] which d'board + * \param which_adc [0,1] + * \returns value in the range [0,4095] if successful, else READ_FAILED. + */ + int common_read_aux_adc(txrx_t txrx, int which_side, int which_adc); + + // END common_ daughterboard control functions + // ---------------------------------------------------------------- + // BEGIN virtual daughterboard control functions + + /*! + * \brief Set Programmable Gain Amplifier (PGA) + * + * \param which_amp which amp [0,3] + * \param gain_in_db gain value (linear in dB) + * + * gain is rounded to closest setting supported by hardware. + * + * \returns true iff sucessful. + * + * \sa pga_min(), pga_max(), pga_db_per_step() + */ + virtual bool set_pga (int which_amp, double gain_in_db) = 0; + + /*! + * \brief Return programmable gain amplifier gain setting in dB. + * + * \param which_amp which amp [0,3] + */ + virtual double pga (int which_amp) const = 0; + + /*! + * \brief Return minimum legal PGA gain in dB. + */ + virtual double pga_min () const = 0; + + /*! + * \brief Return maximum legal PGA gain in dB. + */ + virtual double pga_max () const = 0; + + /*! + * \brief Return hardware step size of PGA (linear in dB). + */ + virtual double pga_db_per_step () const = 0; + + /*! + * \brief Write direction register (output enables) for pins that go to daughterboard. + * + * \param which_side [0,1] which size + * \param value value to write into register + * \param mask which bits of value to write into reg + * + * Each d'board has 16-bits of general purpose i/o. + * Setting the bit makes it an output from the FPGA to the d'board. + * + * This register is initialized based on a value stored in the + * d'board EEPROM. In general, you shouldn't be using this routine + * without a very good reason. Using this method incorrectly will + * kill your USRP motherboard and/or daughterboard. + */ + virtual bool _write_oe (int which_side, int value, int mask) = 0; + + /*! + * \brief Write daughterboard i/o pin value + * + * \param which_side [0,1] which d'board + * \param value value to write into register + * \param mask which bits of value to write into reg + */ + virtual bool write_io (int which_side, int value, int mask) = 0; + + /*! + * \brief Read daughterboard i/o pin value + * + * \param which_side [0,1] which d'board + * \param value output + */ + virtual bool read_io (int which_side, int *value) = 0; + + /*! + * \brief Read daughterboard i/o pin value + * + * \param which_side [0,1] which d'board + * \returns register value if successful, else READ_FAILED + */ + virtual int read_io (int which_side) = 0; + + /*! + * \brief Write daughterboard refclk config register + * + * \param which_side [0,1] which d'board + * \param value value to write into register, see below + * + *
+   * Control whether a reference clock is sent to the daughterboards,
+   * and what frequency.  The refclk is sent on d'board i/o pin 0.
+   * 
+   *     3                   2                   1                       
+   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   *  +-----------------------------------------------+-+------------+
+   *  |             Reserved (Must be zero)           |E|   DIVISOR  |
+   *  +-----------------------------------------------+-+------------+
+   * 
+   *  Bit 7  -- 1 turns on refclk, 0 allows IO use
+   *  Bits 6:0 Divider value
+   * 
+ */ + virtual bool write_refclk(int which_side, int value) = 0; + + virtual bool write_atr_mask(int which_side, int value) = 0; + virtual bool write_atr_txval(int which_side, int value) = 0; + virtual bool write_atr_rxval(int which_side, int value) = 0; + + /*! + * \brief Write auxiliary digital to analog converter. + * + * \param which_side [0,1] which d'board + * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. + * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. + * \param which_dac [2,3] TX slots must use only 2 and 3. + * \param value [0,4095] + * \returns true iff successful + */ + virtual bool write_aux_dac (int which_side, int which_dac, int value) = 0; + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param which_side [0,1] which d'board + * \param which_adc [0,1] + * \param value return 12-bit value [0,4095] + * \returns true iff successful + */ + virtual bool read_aux_adc (int which_side, int which_adc, int *value) = 0; + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param which_side [0,1] which d'board + * \param which_adc [0,1] + * \returns value in the range [0,4095] if successful, else READ_FAILED. + */ + virtual int read_aux_adc (int which_side, int which_adc) = 0; + + /*! + * \brief returns current fusb block size + */ + virtual int block_size() const = 0; + + /*! + * \brief returns A/D or D/A converter rate in Hz + */ + virtual long converter_rate() const = 0; + + // END virtual daughterboard control functions + + // ---------------------------------------------------------------- + // Low level implementation routines. + // You probably shouldn't be using these... + // + + bool _set_led (int which_led, bool on); + + /*! + * \brief Write FPGA register. + * \param regno 7-bit register number + * \param value 32-bit value + * \returns true iff successful + */ + bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value + + /*! + * \brief Read FPGA register. + * \param regno 7-bit register number + * \param value 32-bit value + * \returns true iff successful + */ + bool _read_fpga_reg (int regno, int *value); //< 7-bit regno, 32-bit value + + /*! + * \brief Read FPGA register. + * \param regno 7-bit register number + * \returns register value if successful, else READ_FAILED + */ + int _read_fpga_reg (int regno); + + /*! + * \brief Write FPGA register with mask. + * \param regno 7-bit register number + * \param value 16-bit value + * \param mask 16-bit value + * \returns true if successful + * Only use this for registers who actually implement a mask in the verilog firmware, like FR_RX_MASTER_SLAVE + */ + bool _write_fpga_reg_masked (int regno, int value, int mask); + + /*! + * \brief Write AD9862 register. + * \param which_codec 0 or 1 + * \param regno 6-bit register number + * \param value 8-bit value + * \returns true iff successful + */ + bool _write_9862 (int which_codec, int regno, unsigned char value); + + /*! + * \brief Read AD9862 register. + * \param which_codec 0 or 1 + * \param regno 6-bit register number + * \param value 8-bit value + * \returns true iff successful + */ + bool _read_9862 (int which_codec, int regno, unsigned char *value) const; + + /*! + * \brief Read AD9862 register. + * \param which_codec 0 or 1 + * \param regno 6-bit register number + * \returns register value if successful, else READ_FAILED + */ + int _read_9862 (int which_codec, int regno) const; + + /*! + * \brief Write data to SPI bus peripheral. + * + * \param optional_header 0,1 or 2 bytes to write before buf. + * \param enables bitmask of peripherals to write. See usrp_spi_defs.h + * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* + * \param buf the data to write + * \returns true iff successful + * Writes are limited to a maximum of 64 bytes. + * + * If \p format specifies that optional_header bytes are present, they are + * written to the peripheral immediately prior to writing \p buf. + */ + bool _write_spi (int optional_header, int enables, int format, std::string buf); + + /* + * \brief Read data from SPI bus peripheral. + * + * \param optional_header 0,1 or 2 bytes to write before buf. + * \param enables bitmask of peripheral to read. See usrp_spi_defs.h + * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* + * \param len number of bytes to read. Must be in [0,64]. + * \returns the data read if sucessful, else a zero length string. + * + * Reads are limited to a maximum of 64 bytes. + * + * If \p format specifies that optional_header bytes are present, they + * are written to the peripheral first. Then \p len bytes are read from + * the peripheral and returned. + */ + std::string _read_spi (int optional_header, int enables, int format, int len); + + /*! + * \brief Start data transfers. + * Called in base class to derived class order. + */ + bool start (); + + /*! + * \brief Stop data transfers. + * Called in base class to derived class order. + */ + bool stop (); +}; + + /*! + * \brief class for accessing the receive side of the USRP + * \ingroup usrp + */ +class usrp_basic_rx : public usrp_basic +{ +private: + fusb_devhandle *d_devhandle; + fusb_ephandle *d_ephandle; + int d_bytes_seen; // how many bytes we've seen + bool d_first_read; + bool d_rx_enable; + +protected: + /*! + * \param which_board Which USRP board on usb (not particularly useful; use 0) + * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. + * Use zero for a reasonable default. + * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. + * \param fpga_filename name of the rbf file to load + * \param firmware_filename name of ihx file to load + */ + usrp_basic_rx (int which_board, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); // throws if trouble + + bool set_rx_enable (bool on); + bool rx_enable () const { return d_rx_enable; } + + bool disable_rx (); // conditional disable, return prev state + void restore_rx (bool on); // conditional set + + void probe_rx_slots (bool verbose); + +public: + ~usrp_basic_rx (); + + /*! + * \brief invokes constructor, returns instance or 0 if trouble + * + * \param which_board Which USRP board on usb (not particularly useful; use 0) + * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. + * Use zero for a reasonable default. + * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. + * \param fpga_filename name of file that contains image to load into FPGA + * \param firmware_filename name of file that contains image to load into FX2 + */ + static usrp_basic_rx *make (int which_board, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); + + /*! + * \brief tell the fpga the rate rx samples are coming from the A/D's + * + * div = fpga_master_clock_freq () / sample_rate + * + * sample_rate is determined by a myriad of registers + * in the 9862. That's why you have to tell us, so + * we can tell the fpga. + */ + bool set_fpga_rx_sample_rate_divisor (unsigned int div); + + /*! + * \brief read data from the D/A's via the FPGA. + * \p len must be a multiple of 512 bytes. + * + * \returns the number of bytes read, or -1 on error. + * + * If overrun is non-NULL it will be set true iff an RX overrun is detected. + */ + int read (void *buf, int len, bool *overrun); + + + //! sampling rate of A/D converter + virtual long converter_rate() const { return fpga_master_clock_freq(); } // 64M + long adc_rate() const { return converter_rate(); } + int daughterboard_id (int which_side) const { return d_dbid[which_side & 0x1]; } + + bool set_pga (int which_amp, double gain_in_db); + double pga (int which_amp) const; + double pga_min () const; + double pga_max () const; + double pga_db_per_step () const; + + bool _write_oe (int which_side, int value, int mask); + bool write_io (int which_side, int value, int mask); + bool read_io (int which_side, int *value); + int read_io (int which_side); + bool write_refclk(int which_side, int value); + bool write_atr_mask(int which_side, int value); + bool write_atr_txval(int which_side, int value); + bool write_atr_rxval(int which_side, int value); + + bool write_aux_dac (int which_side, int which_dac, int value); + bool read_aux_adc (int which_side, int which_adc, int *value); + int read_aux_adc (int which_side, int which_adc); + + int block_size() const; + + // called in base class to derived class order + bool start (); + bool stop (); +}; + + /*! + * \brief class for accessing the transmit side of the USRP + * \ingroup usrp + */ +class usrp_basic_tx : public usrp_basic +{ +private: + fusb_devhandle *d_devhandle; + fusb_ephandle *d_ephandle; + int d_bytes_seen; // how many bytes we've seen + bool d_first_write; + bool d_tx_enable; + + protected: + /*! + * \param which_board Which USRP board on usb (not particularly useful; use 0) + * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. + * Use zero for a reasonable default. + * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. + * \param fpga_filename name of file that contains image to load into FPGA + * \param firmware_filename name of file that contains image to load into FX2 + */ + usrp_basic_tx (int which_board, + int fusb_block_size=0, + int fusb_nblocks=0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); // throws if trouble + + bool set_tx_enable (bool on); + bool tx_enable () const { return d_tx_enable; } + + bool disable_tx (); // conditional disable, return prev state + void restore_tx (bool on); // conditional set + + void probe_tx_slots (bool verbose); + +public: + + ~usrp_basic_tx (); + + /*! + * \brief invokes constructor, returns instance or 0 if trouble + * + * \param which_board Which USRP board on usb (not particularly useful; use 0) + * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. + * Use zero for a reasonable default. + * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. + * \param fpga_filename name of file that contains image to load into FPGA + * \param firmware_filename name of file that contains image to load into FX2 + */ + static usrp_basic_tx *make (int which_board, int fusb_block_size=0, int fusb_nblocks=0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); + + /*! + * \brief tell the fpga the rate tx samples are going to the D/A's + * + * div = fpga_master_clock_freq () * 2 + * + * sample_rate is determined by a myriad of registers + * in the 9862. That's why you have to tell us, so + * we can tell the fpga. + */ + bool set_fpga_tx_sample_rate_divisor (unsigned int div); + + /*! + * \brief Write data to the A/D's via the FPGA. + * + * \p len must be a multiple of 512 bytes. + * \returns number of bytes written or -1 on error. + * + * if \p underrun is non-NULL, it will be set to true iff + * a transmit underrun condition is detected. + */ + int write (const void *buf, int len, bool *underrun); + + /* + * Block until all outstanding writes have completed. + * This is typically used to assist with benchmarking + */ + void wait_for_completion (); + + //! sampling rate of D/A converter + virtual long converter_rate() const { return fpga_master_clock_freq () * 2; } // 128M + long dac_rate() const { return converter_rate(); } + int daughterboard_id (int which_side) const { return d_dbid[which_side & 0x1]; } + + bool set_pga (int which_amp, double gain_in_db); + double pga (int which_amp) const; + double pga_min () const; + double pga_max () const; + double pga_db_per_step () const; + + bool _write_oe (int which_side, int value, int mask); + bool write_io (int which_side, int value, int mask); + bool read_io (int which_side, int *value); + int read_io (int which_side); + bool write_refclk(int which_side, int value); + bool write_atr_mask(int which_side, int value); + bool write_atr_txval(int which_side, int value); + bool write_atr_rxval(int which_side, int value); + + bool write_aux_dac (int which_side, int which_dac, int value); + bool read_aux_adc (int which_side, int which_adc, int *value); + int read_aux_adc (int which_side, int which_adc); + + int block_size() const; + + // called in base class to derived class order + bool start (); + bool stop (); +}; + +#endif diff --git a/usrp/host/lib/legacy/usrp_bytesex.h b/usrp/host/lib/legacy/usrp_bytesex.h new file mode 100644 index 00000000..331db31c --- /dev/null +++ b/usrp/host/lib/legacy/usrp_bytesex.h @@ -0,0 +1,108 @@ +/* -*- c++ -*- */ +/* + * 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. + */ +#ifndef INCLUDED_USRP_BYTESEX_H +#define INCLUDED_USRP_BYTESEX_H + +/*! + * \brief routines for convertering between host and usrp byte order + * + * Prior to including this file, the user must include "config.h" + * which will or won't define WORDS_BIGENDIAN based on the + * result of the AC_C_BIGENDIAN autoconf test. + */ + +#ifdef HAVE_BYTESWAP_H +#include +#else + +#warning Using non-portable code (likely wrong other than ILP32). + +static inline unsigned short int +bswap_16 (unsigned short int x) +{ + return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)); +} + +static inline unsigned int +bswap_32 (unsigned int x) +{ + return ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \ + | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)); +} +#endif + + +#ifdef WORDS_BIGENDIAN + +static inline unsigned int +host_to_usrp_u32 (unsigned int x) +{ + return bswap_32(x); +} + +static inline unsigned int +usrp_to_host_u32 (unsigned int x) +{ + return bswap_32(x); +} + +static inline short int +host_to_usrp_short (short int x) +{ + return bswap_16 (x); +} + +static inline short int +usrp_to_host_short (short int x) +{ + return bswap_16 (x); +} + +#else + +static inline unsigned int +host_to_usrp_u32 (unsigned int x) +{ + return x; +} + +static inline unsigned int +usrp_to_host_u32 (unsigned int x) +{ + return x; +} + +static inline short int +host_to_usrp_short (short int x) +{ + return x; +} + +static inline short int +usrp_to_host_short (unsigned short int x) +{ + return x; +} + +#endif + +#endif /* INCLUDED_USRP_BYTESEX_H */ diff --git a/usrp/host/lib/usrp_config.cc b/usrp/host/lib/legacy/usrp_config.cc similarity index 100% rename from usrp/host/lib/usrp_config.cc rename to usrp/host/lib/legacy/usrp_config.cc diff --git a/usrp/host/lib/usrp_config.h b/usrp/host/lib/legacy/usrp_config.h similarity index 100% rename from usrp/host/lib/usrp_config.h rename to usrp/host/lib/legacy/usrp_config.h diff --git a/usrp/host/lib/legacy/usrp_dbid.cc b/usrp/host/lib/legacy/usrp_dbid.cc new file mode 100644 index 00000000..f33cab2d --- /dev/null +++ b/usrp/host/lib/legacy/usrp_dbid.cc @@ -0,0 +1,102 @@ +// +// Machine generated by gen_usrp_dbid.py from usrp_dbid.dat +// Do not edit by hand. All edits will be overwritten. +// + +/* + * Copyright 2005 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include + +#define NELEM(x) sizeof(x)/sizeof(x[0]) + +static struct { + unsigned short dbid; + const char *name; +} dbid_map[] = { + { USRP_DBID_BASIC_TX, "Basic Tx" }, + { USRP_DBID_BASIC_RX, "Basic Rx" }, + { USRP_DBID_DBS_RX, "DBS Rx" }, + { USRP_DBID_TV_RX, "TV Rx" }, + { USRP_DBID_FLEX_400_RX, "Flex 400 Rx" }, + { USRP_DBID_FLEX_900_RX, "Flex 900 Rx" }, + { USRP_DBID_FLEX_1200_RX, "Flex 1200 Rx" }, + { USRP_DBID_FLEX_2400_RX, "Flex 2400 Rx" }, + { USRP_DBID_FLEX_400_TX, "Flex 400 Tx" }, + { USRP_DBID_FLEX_900_TX, "Flex 900 Tx" }, + { USRP_DBID_FLEX_1200_TX, "Flex 1200 Tx" }, + { USRP_DBID_FLEX_2400_TX, "Flex 2400 Tx" }, + { USRP_DBID_TV_RX_REV_2, "TV Rx Rev 2" }, + { USRP_DBID_DBS_RX_CLKMOD, "DBS Rx ClkMod" }, + { USRP_DBID_LF_TX, "LF Tx" }, + { USRP_DBID_LF_RX, "LF Rx" }, + { USRP_DBID_FLEX_400_RX_MIMO_A, "Flex 400 Rx MIMO A" }, + { USRP_DBID_FLEX_900_RX_MIMO_A, "Flex 900 Rx MIMO A" }, + { USRP_DBID_FLEX_1200_RX_MIMO_A, "Flex 1200 Rx MIMO A" }, + { USRP_DBID_FLEX_2400_RX_MIMO_A, "Flex 2400 Rx MIMO A" }, + { USRP_DBID_FLEX_400_TX_MIMO_A, "Flex 400 Tx MIMO A" }, + { USRP_DBID_FLEX_900_TX_MIMO_A, "Flex 900 Tx MIMO A" }, + { USRP_DBID_FLEX_1200_TX_MIMO_A, "Flex 1200 Tx MIMO A" }, + { USRP_DBID_FLEX_2400_TX_MIMO_A, "Flex 2400 Tx MIMO A" }, + { USRP_DBID_FLEX_400_RX_MIMO_B, "Flex 400 Rx MIMO B" }, + { USRP_DBID_FLEX_900_RX_MIMO_B, "Flex 900 Rx MIMO B" }, + { USRP_DBID_FLEX_1200_RX_MIMO_B, "Flex 1200 Rx MIMO B" }, + { USRP_DBID_FLEX_2400_RX_MIMO_B, "Flex 2400 Rx MIMO B" }, + { USRP_DBID_FLEX_400_TX_MIMO_B, "Flex 400 Tx MIMO B" }, + { USRP_DBID_FLEX_900_TX_MIMO_B, "Flex 900 Tx MIMO B" }, + { USRP_DBID_FLEX_1200_TX_MIMO_B, "Flex 1200 Tx MIMO B" }, + { USRP_DBID_FLEX_2400_TX_MIMO_B, "Flex 2400 Tx MIMO B" }, + { USRP_DBID_FLEX_1800_RX, "Flex 1800 Rx" }, + { USRP_DBID_FLEX_1800_TX, "Flex 1800 Tx" }, + { USRP_DBID_FLEX_1800_RX_MIMO_A, "Flex 1800 Rx MIMO A" }, + { USRP_DBID_FLEX_1800_TX_MIMO_A, "Flex 1800 Tx MIMO A" }, + { USRP_DBID_FLEX_1800_RX_MIMO_B, "Flex 1800 Rx MIMO B" }, + { USRP_DBID_FLEX_1800_TX_MIMO_B, "Flex 1800 Tx MIMO B" }, + { USRP_DBID_TV_RX_REV_3, "TV Rx Rev 3" }, + { USRP_DBID_DTT754, "DTT754" }, + { USRP_DBID_DTT768, "DTT768" }, + { USRP_DBID_WBX_LO_TX, "WBX LO TX" }, + { USRP_DBID_WBX_LO_RX, "WBX LO RX" }, + { USRP_DBID_XCVR2450_TX, "XCVR2450 Tx" }, + { USRP_DBID_XCVR2450_RX, "XCVR2450 Rx" }, + { USRP_DBID_EXPERIMENTAL_TX, "Experimental Tx" }, + { USRP_DBID_EXPERIMENTAL_RX, "Experimental Rx" }, +}; + +const std::string +usrp_dbid_to_string (int dbid) +{ + if (dbid == -1) + return ""; + + if (dbid == -2) + return ""; + + for (unsigned i = 0; i < NELEM (dbid_map); i++) + if (dbid == dbid_map[i].dbid) + return dbid_map[i].name; + + char tmp[64]; + snprintf (tmp, sizeof (tmp), "Unknown (0x%04x)", dbid); + return tmp; +} diff --git a/usrp/host/lib/legacy/usrp_dbid.dat b/usrp/host/lib/legacy/usrp_dbid.dat new file mode 100644 index 00000000..bd7fd7ec --- /dev/null +++ b/usrp/host/lib/legacy/usrp_dbid.dat @@ -0,0 +1,82 @@ +# +# Copyright 2005,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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# + +# This file is used to generate usrp_dbid.h, usrp_dbid.cc and usrp_dbid.py + +"Basic Tx" 0x0000 +"Basic Rx" 0x0001 +"DBS Rx" 0x0002 +"TV Rx" 0x0003 + +"Flex 400 Rx" 0x0004 +"Flex 900 Rx" 0x0005 +"Flex 1200 Rx" 0x0006 +"Flex 2400 Rx" 0x0007 + +"Flex 400 Tx" 0x0008 +"Flex 900 Tx" 0x0009 +"Flex 1200 Tx" 0x000a +"Flex 2400 Tx" 0x000b + +"TV Rx Rev 2" 0x000c +"DBS Rx ClkMod" 0x000d + +"LF Tx" 0x000e +"LF Rx" 0x000f + +"Flex 400 Rx MIMO A" 0x0014 +"Flex 900 Rx MIMO A" 0x0015 +"Flex 1200 Rx MIMO A" 0x0016 +"Flex 2400 Rx MIMO A" 0x0017 + +"Flex 400 Tx MIMO A" 0x0018 +"Flex 900 Tx MIMO A" 0x0019 +"Flex 1200 Tx MIMO A" 0x001a +"Flex 2400 Tx MIMO A" 0x001b + +"Flex 400 Rx MIMO B" 0x0024 +"Flex 900 Rx MIMO B" 0x0025 +"Flex 1200 Rx MIMO B" 0x0026 +"Flex 2400 Rx MIMO B" 0x0027 + +"Flex 400 Tx MIMO B" 0x0028 +"Flex 900 Tx MIMO B" 0x0029 +"Flex 1200 Tx MIMO B" 0x002a +"Flex 2400 Tx MIMO B" 0x002b + +"Flex 1800 Rx" 0x0030 +"Flex 1800 Tx" 0x0031 +"Flex 1800 Rx MIMO A" 0x0032 +"Flex 1800 Tx MIMO A" 0x0033 +"Flex 1800 Rx MIMO B" 0x0034 +"Flex 1800 Tx MIMO B" 0x0035 + +"TV Rx Rev 3" 0x0040 +"DTT754" 0x0041 +"DTT768" 0x0042 + +"WBX LO TX" 0x0050 +"WBX LO RX" 0x0051 + +"XCVR2450 Tx" 0x0060 +"XCVR2450 Rx" 0x0061 + +"Experimental Tx" 0xfffe +"Experimental Rx" 0xffff diff --git a/usrp/host/lib/legacy/usrp_dbid.h b/usrp/host/lib/legacy/usrp_dbid.h new file mode 100644 index 00000000..10ce62a4 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_dbid.h @@ -0,0 +1,61 @@ +// +// Machine generated by gen_usrp_dbid.py from usrp_dbid.dat +// Do not edit by hand. All edits will be overwritten. +// + +// +// USRP Daughterboard ID's +// + +#ifndef INCLUDED_USRP_DBID_H +#define INCLUDED_USRP_DBID_H + +#define USRP_DBID_BASIC_TX 0x0000 +#define USRP_DBID_BASIC_RX 0x0001 +#define USRP_DBID_DBS_RX 0x0002 +#define USRP_DBID_TV_RX 0x0003 +#define USRP_DBID_FLEX_400_RX 0x0004 +#define USRP_DBID_FLEX_900_RX 0x0005 +#define USRP_DBID_FLEX_1200_RX 0x0006 +#define USRP_DBID_FLEX_2400_RX 0x0007 +#define USRP_DBID_FLEX_400_TX 0x0008 +#define USRP_DBID_FLEX_900_TX 0x0009 +#define USRP_DBID_FLEX_1200_TX 0x000a +#define USRP_DBID_FLEX_2400_TX 0x000b +#define USRP_DBID_TV_RX_REV_2 0x000c +#define USRP_DBID_DBS_RX_CLKMOD 0x000d +#define USRP_DBID_LF_TX 0x000e +#define USRP_DBID_LF_RX 0x000f +#define USRP_DBID_FLEX_400_RX_MIMO_A 0x0014 +#define USRP_DBID_FLEX_900_RX_MIMO_A 0x0015 +#define USRP_DBID_FLEX_1200_RX_MIMO_A 0x0016 +#define USRP_DBID_FLEX_2400_RX_MIMO_A 0x0017 +#define USRP_DBID_FLEX_400_TX_MIMO_A 0x0018 +#define USRP_DBID_FLEX_900_TX_MIMO_A 0x0019 +#define USRP_DBID_FLEX_1200_TX_MIMO_A 0x001a +#define USRP_DBID_FLEX_2400_TX_MIMO_A 0x001b +#define USRP_DBID_FLEX_400_RX_MIMO_B 0x0024 +#define USRP_DBID_FLEX_900_RX_MIMO_B 0x0025 +#define USRP_DBID_FLEX_1200_RX_MIMO_B 0x0026 +#define USRP_DBID_FLEX_2400_RX_MIMO_B 0x0027 +#define USRP_DBID_FLEX_400_TX_MIMO_B 0x0028 +#define USRP_DBID_FLEX_900_TX_MIMO_B 0x0029 +#define USRP_DBID_FLEX_1200_TX_MIMO_B 0x002a +#define USRP_DBID_FLEX_2400_TX_MIMO_B 0x002b +#define USRP_DBID_FLEX_1800_RX 0x0030 +#define USRP_DBID_FLEX_1800_TX 0x0031 +#define USRP_DBID_FLEX_1800_RX_MIMO_A 0x0032 +#define USRP_DBID_FLEX_1800_TX_MIMO_A 0x0033 +#define USRP_DBID_FLEX_1800_RX_MIMO_B 0x0034 +#define USRP_DBID_FLEX_1800_TX_MIMO_B 0x0035 +#define USRP_DBID_TV_RX_REV_3 0x0040 +#define USRP_DBID_DTT754 0x0041 +#define USRP_DBID_DTT768 0x0042 +#define USRP_DBID_WBX_LO_TX 0x0050 +#define USRP_DBID_WBX_LO_RX 0x0051 +#define USRP_DBID_XCVR2450_TX 0x0060 +#define USRP_DBID_XCVR2450_RX 0x0061 +#define USRP_DBID_EXPERIMENTAL_TX 0xfffe +#define USRP_DBID_EXPERIMENTAL_RX 0xffff + +#endif /* INCLUDED_USRP_DBID_H */ diff --git a/usrp/host/lib/legacy/usrp_dbid.py b/usrp/host/lib/legacy/usrp_dbid.py new file mode 100644 index 00000000..4c2c6518 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_dbid.py @@ -0,0 +1,56 @@ +# +# Machine generated by gen_usrp_dbid.py from usrp_dbid.dat +# Do not edit by hand. All edits will be overwritten. +# + +# +# USRP Daughterboard ID's +# + +BASIC_TX = 0x0000 +BASIC_RX = 0x0001 +DBS_RX = 0x0002 +TV_RX = 0x0003 +FLEX_400_RX = 0x0004 +FLEX_900_RX = 0x0005 +FLEX_1200_RX = 0x0006 +FLEX_2400_RX = 0x0007 +FLEX_400_TX = 0x0008 +FLEX_900_TX = 0x0009 +FLEX_1200_TX = 0x000a +FLEX_2400_TX = 0x000b +TV_RX_REV_2 = 0x000c +DBS_RX_CLKMOD = 0x000d +LF_TX = 0x000e +LF_RX = 0x000f +FLEX_400_RX_MIMO_A = 0x0014 +FLEX_900_RX_MIMO_A = 0x0015 +FLEX_1200_RX_MIMO_A = 0x0016 +FLEX_2400_RX_MIMO_A = 0x0017 +FLEX_400_TX_MIMO_A = 0x0018 +FLEX_900_TX_MIMO_A = 0x0019 +FLEX_1200_TX_MIMO_A = 0x001a +FLEX_2400_TX_MIMO_A = 0x001b +FLEX_400_RX_MIMO_B = 0x0024 +FLEX_900_RX_MIMO_B = 0x0025 +FLEX_1200_RX_MIMO_B = 0x0026 +FLEX_2400_RX_MIMO_B = 0x0027 +FLEX_400_TX_MIMO_B = 0x0028 +FLEX_900_TX_MIMO_B = 0x0029 +FLEX_1200_TX_MIMO_B = 0x002a +FLEX_2400_TX_MIMO_B = 0x002b +FLEX_1800_RX = 0x0030 +FLEX_1800_TX = 0x0031 +FLEX_1800_RX_MIMO_A = 0x0032 +FLEX_1800_TX_MIMO_A = 0x0033 +FLEX_1800_RX_MIMO_B = 0x0034 +FLEX_1800_TX_MIMO_B = 0x0035 +TV_RX_REV_3 = 0x0040 +DTT754 = 0x0041 +DTT768 = 0x0042 +WBX_LO_TX = 0x0050 +WBX_LO_RX = 0x0051 +XCVR2450_TX = 0x0060 +XCVR2450_RX = 0x0061 +EXPERIMENTAL_TX = 0xfffe +EXPERIMENTAL_RX = 0xffff diff --git a/usrp/host/lib/legacy/usrp_local_sighandler.cc b/usrp/host/lib/legacy/usrp_local_sighandler.cc new file mode 100644 index 00000000..69cde0b3 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_local_sighandler.cc @@ -0,0 +1,191 @@ +/* -*- c++ -*- */ +/* + * 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. + */ + +/* + * This is actually the same as gr_local_signhandler, but with a different name. + * We don't have a common library to put this in, so... + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include + +usrp_local_sighandler::usrp_local_sighandler (int signum, + void (*new_handler)(int)) + : d_signum (signum) +{ +#ifdef HAVE_SIGACTION + struct sigaction new_action; + memset (&new_action, 0, sizeof (new_action)); + + new_action.sa_handler = new_handler; + sigemptyset (&new_action.sa_mask); + new_action.sa_flags = 0; + + if (sigaction (d_signum, &new_action, &d_old_action) < 0){ + perror ("sigaction (install new)"); + throw std::runtime_error ("sigaction"); + } +#endif +} + +usrp_local_sighandler::~usrp_local_sighandler () +{ +#ifdef HAVE_SIGACTION + if (sigaction (d_signum, &d_old_action, 0) < 0){ + perror ("sigaction (restore old)"); + throw std::runtime_error ("sigaction"); + } +#endif +} + +void +usrp_local_sighandler::throw_signal(int signum) throw(usrp_signal) +{ + throw usrp_signal (signum); +} + +/* + * Semi-hideous way to may a signal number into a signal name + */ + +#define SIGNAME(x) case x: return #x + +std::string +usrp_signal::name () const +{ + char tmp[128]; + + switch (signal ()){ +#ifdef SIGHUP + SIGNAME (SIGHUP); +#endif +#ifdef SIGINT + SIGNAME (SIGINT); +#endif +#ifdef SIGQUIT + SIGNAME (SIGQUIT); +#endif +#ifdef SIGILL + SIGNAME (SIGILL); +#endif +#ifdef SIGTRAP + SIGNAME (SIGTRAP); +#endif +#ifdef SIGABRT + SIGNAME (SIGABRT); +#endif +#ifdef SIGBUS + SIGNAME (SIGBUS); +#endif +#ifdef SIGFPE + SIGNAME (SIGFPE); +#endif +#ifdef SIGKILL + SIGNAME (SIGKILL); +#endif +#ifdef SIGUSR1 + SIGNAME (SIGUSR1); +#endif +#ifdef SIGSEGV + SIGNAME (SIGSEGV); +#endif +#ifdef SIGUSR2 + SIGNAME (SIGUSR2); +#endif +#ifdef SIGPIPE + SIGNAME (SIGPIPE); +#endif +#ifdef SIGALRM + SIGNAME (SIGALRM); +#endif +#ifdef SIGTERM + SIGNAME (SIGTERM); +#endif +#ifdef SIGSTKFLT + SIGNAME (SIGSTKFLT); +#endif +#ifdef SIGCHLD + SIGNAME (SIGCHLD); +#endif +#ifdef SIGCONT + SIGNAME (SIGCONT); +#endif +#ifdef SIGSTOP + SIGNAME (SIGSTOP); +#endif +#ifdef SIGTSTP + SIGNAME (SIGTSTP); +#endif +#ifdef SIGTTIN + SIGNAME (SIGTTIN); +#endif +#ifdef SIGTTOU + SIGNAME (SIGTTOU); +#endif +#ifdef SIGURG + SIGNAME (SIGURG); +#endif +#ifdef SIGXCPU + SIGNAME (SIGXCPU); +#endif +#ifdef SIGXFSZ + SIGNAME (SIGXFSZ); +#endif +#ifdef SIGVTALRM + SIGNAME (SIGVTALRM); +#endif +#ifdef SIGPROF + SIGNAME (SIGPROF); +#endif +#ifdef SIGWINCH + SIGNAME (SIGWINCH); +#endif +#ifdef SIGIO + SIGNAME (SIGIO); +#endif +#ifdef SIGPWR + SIGNAME (SIGPWR); +#endif +#ifdef SIGSYS + SIGNAME (SIGSYS); +#endif + default: +#if defined (HAVE_SNPRINTF) +#if defined (SIGRTMIN) && defined (SIGRTMAX) + if (signal () >= SIGRTMIN && signal () <= SIGRTMAX){ + snprintf (tmp, sizeof (tmp), "SIGRTMIN + %d", signal ()); + return tmp; + } +#endif + snprintf (tmp, sizeof (tmp), "SIGNAL %d", signal ()); + return tmp; +#else + return "Unknown signal"; +#endif + } +} diff --git a/usrp/host/lib/usrp_local_sighandler.h b/usrp/host/lib/legacy/usrp_local_sighandler.h similarity index 100% rename from usrp/host/lib/usrp_local_sighandler.h rename to usrp/host/lib/legacy/usrp_local_sighandler.h diff --git a/usrp/host/lib/legacy/usrp_prims.cc b/usrp/host/lib/legacy/usrp_prims.cc new file mode 100644 index 00000000..c2f74f5f --- /dev/null +++ b/usrp/host/lib/legacy/usrp_prims.cc @@ -0,0 +1,1357 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003,2004,2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "usrp_prims.h" +#include "usrp_commands.h" +#include "usrp_ids.h" +#include "usrp_i2c_addr.h" +#include "fpga_regs_common.h" +#include "fpga_regs_standard.h" +#include +#include +#include +#include +#include +#include +#include +#include // FIXME should check with autoconf (nanosleep) +#include +#include +#include + +extern "C" { +#include "md5.h" +}; + +#define VERBOSE 0 + +using namespace ad9862; + +static const int FIRMWARE_HASH_SLOT = 0; +static const int FPGA_HASH_SLOT = 1; + +static const int hash_slot_addr[2] = { + USRP_HASH_SLOT_0_ADDR, + USRP_HASH_SLOT_1_ADDR +}; + +static const char *default_firmware_filename = "std.ihx"; +static const char *default_fpga_filename = "std_2rxhb_2tx.rbf"; + +#include "std_paths.h" +#include + +static char * +find_file (const char *filename, int hw_rev) +{ + const char **sp = std_paths; + static char path[1000]; + char *s; + + s = getenv("USRP_PATH"); + if (s) { + snprintf (path, sizeof (path), "%s/rev%d/%s", s, hw_rev, filename); + if (access (path, R_OK) == 0) + return path; + } + + while (*sp){ + snprintf (path, sizeof (path), "%s/rev%d/%s", *sp, hw_rev, filename); + if (access (path, R_OK) == 0) + return path; + sp++; + } + return 0; +} + +static const char * +get_proto_filename(const std::string user_filename, const char *env_var, const char *def) +{ + if (user_filename.length() != 0) + return user_filename.c_str(); + + char *s = getenv(env_var); + if (s && *s) + return s; + + return def; +} + + +static void power_down_9862s (struct usb_dev_handle *udh); + +void +usrp_one_time_init () +{ + static bool first = true; + + if (first){ + first = false; + usb_init (); // usb library init + usb_find_busses (); + usb_find_devices (); + } +} + +void +usrp_rescan () +{ + usb_find_busses (); + usb_find_devices (); +} + + +// ---------------------------------------------------------------- +// Danger, big, fragile KLUDGE. The problem is that we want to be +// able to get from a usb_dev_handle back to a usb_device, and the +// right way to do this is buried in a non-installed include file. + +static struct usb_device * +dev_handle_to_dev (usb_dev_handle *udh) +{ + struct usb_dev_handle_kludge { + int fd; + struct usb_bus *bus; + struct usb_device *device; + }; + + return ((struct usb_dev_handle_kludge *) udh)->device; +} + +// ---------------------------------------------------------------- + +/* + * q must be a real USRP, not an FX2. Return its hardware rev number. + */ +int +usrp_hw_rev (struct usb_device *q) +{ + return q->descriptor.bcdDevice & 0x00FF; +} + +/* + * q must be a real USRP, not an FX2. Return true if it's configured. + */ +static bool +_usrp_configured_p (struct usb_device *q) +{ + return (q->descriptor.bcdDevice & 0xFF00) != 0; +} + +bool +usrp_usrp_p (struct usb_device *q) +{ + return (q->descriptor.idVendor == USB_VID_FSF + && q->descriptor.idProduct == USB_PID_FSF_USRP); +} + +bool +usrp_fx2_p (struct usb_device *q) +{ + return (q->descriptor.idVendor == USB_VID_CYPRESS + && q->descriptor.idProduct == USB_PID_CYPRESS_FX2); +} + +bool +usrp_usrp0_p (struct usb_device *q) +{ + return usrp_usrp_p (q) && usrp_hw_rev (q) == 0; +} + +bool +usrp_usrp1_p (struct usb_device *q) +{ + return usrp_usrp_p (q) && usrp_hw_rev (q) == 1; +} + +bool +usrp_usrp2_p (struct usb_device *q) +{ + return usrp_usrp_p (q) && usrp_hw_rev (q) == 2; +} + + +bool +usrp_unconfigured_usrp_p (struct usb_device *q) +{ + return usrp_usrp_p (q) && !_usrp_configured_p (q); +} + +bool +usrp_configured_usrp_p (struct usb_device *q) +{ + return usrp_usrp_p (q) && _usrp_configured_p (q); +} + +// ---------------------------------------------------------------- + +struct usb_device * +usrp_find_device (int nth, bool fx2_ok_p) +{ + struct usb_bus *p; + struct usb_device *q; + int n_found = 0; + + usrp_one_time_init (); + + p = usb_get_busses(); + while (p != NULL){ + q = p->devices; + while (q != NULL){ + if (usrp_usrp_p (q) || (fx2_ok_p && usrp_fx2_p (q))){ + if (n_found == nth) // return this one + return q; + n_found++; // keep looking + } + q = q->next; + } + p = p->next; + } + return 0; // not found +} + +static struct usb_dev_handle * +usrp_open_interface (struct usb_device *dev, int interface, int altinterface) +{ + struct usb_dev_handle *udh = usb_open (dev); + if (udh == 0) + return 0; + + if (dev != dev_handle_to_dev (udh)){ + fprintf (stderr, "%s:%d: internal error!\n", __FILE__, __LINE__); + abort (); + } + +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) + // There's no get get_configuration function, and with some of the newer kernels + // setting the configuration, even if to the same value, hoses any other processes + // that have it open. Hence we opt to not set it at all (We've only + // got a single configuration anyway). This may hose the win32 stuff... + + // Appears to be required for libusb-win32 and Cygwin -- dew 09/20/06 + if (usb_set_configuration (udh, 1) < 0){ + /* + * Ignore this error. + * + * Seems that something changed in drivers/usb/core/devio.c:proc_setconfig such that + * it returns -EBUSY if _any_ of the interfaces of a device are open. + * We've only got a single configuration, so setting it doesn't even seem + * like it should be required. + */ + } +#endif + + if (usb_claim_interface (udh, interface) < 0){ + fprintf (stderr, "%s:usb_claim_interface: failed interface %d\n", __FUNCTION__,interface); + fprintf (stderr, "%s\n", usb_strerror()); + usb_close (udh); + return 0; + } + + if (usb_set_altinterface (udh, altinterface) < 0){ + fprintf (stderr, "%s:usb_set_alt_interface: failed\n", __FUNCTION__); + fprintf (stderr, "%s\n", usb_strerror()); + usb_release_interface (udh, interface); + usb_close (udh); + return 0; + } + + return udh; +} + +struct usb_dev_handle * +usrp_open_cmd_interface (struct usb_device *dev) +{ + return usrp_open_interface (dev, USRP_CMD_INTERFACE, USRP_CMD_ALTINTERFACE); +} + +struct usb_dev_handle * +usrp_open_rx_interface (struct usb_device *dev) +{ + return usrp_open_interface (dev, USRP_RX_INTERFACE, USRP_RX_ALTINTERFACE); +} + +struct usb_dev_handle * +usrp_open_tx_interface (struct usb_device *dev) +{ + return usrp_open_interface (dev, USRP_TX_INTERFACE, USRP_TX_ALTINTERFACE); +} + +bool +usrp_close_interface (struct usb_dev_handle *udh) +{ + // we're assuming that closing an interface automatically releases it. + return usb_close (udh) == 0; +} + +// ---------------------------------------------------------------- +// write internal ram using Cypress vendor extension + +static bool +write_internal_ram (struct usb_dev_handle *udh, unsigned char *buf, + int start_addr, size_t len) +{ + int addr; + int n; + int a; + int quanta = MAX_EP0_PKTSIZE; + + for (addr = start_addr; addr < start_addr + (int) len; addr += quanta){ + n = len + start_addr - addr; + if (n > quanta) + n = quanta; + + a = usb_control_msg (udh, 0x40, 0xA0, + addr, 0, (char *)(buf + (addr - start_addr)), n, 1000); + + if (a < 0){ + fprintf(stderr,"write_internal_ram failed: %s\n", usb_strerror()); + return false; + } + } + return true; +} + +// ---------------------------------------------------------------- +// whack the CPUCS register using the upload RAM vendor extension + +static bool +reset_cpu (struct usb_dev_handle *udh, bool reset_p) +{ + unsigned char v; + + if (reset_p) + v = 1; // hold processor in reset + else + v = 0; // release reset + + return write_internal_ram (udh, &v, 0xE600, 1); +} + +// ---------------------------------------------------------------- +// Load intel format file into cypress FX2 (8051) + +static bool +_usrp_load_firmware (struct usb_dev_handle *udh, const char *filename, + unsigned char hash[USRP_HASH_SIZE]) +{ + FILE *f = fopen (filename, "ra"); + if (f == 0){ + perror (filename); + return false; + } + + if (!reset_cpu (udh, true)) // hold CPU in reset while loading firmware + goto fail; + + + char s[1024]; + int length; + int addr; + int type; + unsigned char data[256]; + unsigned char checksum, a; + unsigned int b; + int i; + + while (!feof(f)){ + fgets(s, sizeof (s), f); /* we should not use more than 263 bytes normally */ + if(s[0]!=':'){ + fprintf(stderr,"%s: invalid line: \"%s\"\n", filename, s); + goto fail; + } + sscanf(s+1, "%02x", &length); + sscanf(s+3, "%04x", &addr); + sscanf(s+7, "%02x", &type); + + if(type==0){ + + a=length+(addr &0xff)+(addr>>8)+type; + for(i=0;i 0){ + if (write_cmd (udh, VRQ_FPGA_LOAD, 0, FL_XFER, buf, n) != n) + goto fail; + } + + if (write_cmd (udh, VRQ_FPGA_LOAD, 0, FL_END, 0, 0) != 0) + goto fail; + + fclose (fp); + + if (!usrp_set_hash (udh, FPGA_HASH_SLOT, hash)) + fprintf (stderr, "usrp: failed to write fpga hash slot\n"); + + // On the rev1 USRP, the {tx,rx}_{enable,reset} bits are + // controlled over the serial bus, and hence aren't observed until + // we've got a good fpga bitstream loaded. + + usrp_set_fpga_reset (udh, 0); // fpga out of master reset + + // now these commands will work + + ok &= usrp_set_fpga_tx_enable (udh, 0); + ok &= usrp_set_fpga_rx_enable (udh, 0); + + ok &= usrp_set_fpga_tx_reset (udh, 1); // reset tx and rx paths + ok &= usrp_set_fpga_rx_reset (udh, 1); + ok &= usrp_set_fpga_tx_reset (udh, 0); // reset tx and rx paths + ok &= usrp_set_fpga_rx_reset (udh, 0); + + if (!ok) + fprintf (stderr, "usrp: failed to reset tx and/or rx path\n"); + + // Manually reset all regs except master control to zero. + // FIXME may want to remove this when we rework FPGA reset strategy. + // In the mean while, this gets us reproducible behavior. + for (int i = 0; i < FR_USER_0; i++){ + if (i == FR_MASTER_CTRL) + continue; + usrp_write_fpga_reg(udh, i, 0); + } + + power_down_9862s (udh); // on the rev1, power these down! + usrp_set_led (udh, 1, 0); // led 1 off + + return true; + + fail: + power_down_9862s (udh); // on the rev1, power these down! + fclose (fp); + return false; +} + +// ---------------------------------------------------------------- + +bool +usrp_set_led (struct usb_dev_handle *udh, int which, bool on) +{ + int r = write_cmd (udh, VRQ_SET_LED, on, which, 0, 0); + + return r == 0; +} + +bool +usrp_set_hash (struct usb_dev_handle *udh, int which, + const unsigned char hash[USRP_HASH_SIZE]) +{ + which &= 1; + + // we use the Cypress firmware down load command to jam it in. + int r = usb_control_msg (udh, 0x40, 0xa0, hash_slot_addr[which], 0, + (char *) hash, USRP_HASH_SIZE, 1000); + return r == USRP_HASH_SIZE; +} + +bool +usrp_get_hash (struct usb_dev_handle *udh, int which, + unsigned char hash[USRP_HASH_SIZE]) +{ + which &= 1; + + // we use the Cypress firmware upload command to fetch it. + int r = usb_control_msg (udh, 0xc0, 0xa0, hash_slot_addr[which], 0, + (char *) hash, USRP_HASH_SIZE, 1000); + return r == USRP_HASH_SIZE; +} + +static bool +usrp_set_switch (struct usb_dev_handle *udh, int cmd_byte, bool on) +{ + return write_cmd (udh, cmd_byte, on, 0, 0, 0) == 0; +} + + +static bool +usrp1_fpga_write (struct usb_dev_handle *udh, + int regno, int value) +{ + // on the rev1 usrp, we use the generic spi_write interface + + unsigned char buf[4]; + + buf[0] = (value >> 24) & 0xff; // MSB first + buf[1] = (value >> 16) & 0xff; + buf[2] = (value >> 8) & 0xff; + buf[3] = (value >> 0) & 0xff; + + return usrp_spi_write (udh, 0x00 | (regno & 0x7f), + SPI_ENABLE_FPGA, + SPI_FMT_MSB | SPI_FMT_HDR_1, + buf, sizeof (buf)); +} + +static bool +usrp1_fpga_read (struct usb_dev_handle *udh, + int regno, int *value) +{ + *value = 0; + unsigned char buf[4]; + + bool ok = usrp_spi_read (udh, 0x80 | (regno & 0x7f), + SPI_ENABLE_FPGA, + SPI_FMT_MSB | SPI_FMT_HDR_1, + buf, sizeof (buf)); + + if (ok) + *value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; + + return ok; +} + + +bool +usrp_write_fpga_reg (struct usb_dev_handle *udh, int reg, int value) +{ + switch (usrp_hw_rev (dev_handle_to_dev (udh))){ + case 0: // not supported ;) + abort(); + + default: + return usrp1_fpga_write (udh, reg, value); + } +} + +bool +usrp_read_fpga_reg (struct usb_dev_handle *udh, int reg, int *value) +{ + switch (usrp_hw_rev (dev_handle_to_dev (udh))){ + case 0: // not supported ;) + abort(); + + default: + return usrp1_fpga_read (udh, reg, value); + } +} + +bool +usrp_set_fpga_reset (struct usb_dev_handle *udh, bool on) +{ + return usrp_set_switch (udh, VRQ_FPGA_SET_RESET, on); +} + +bool +usrp_set_fpga_tx_enable (struct usb_dev_handle *udh, bool on) +{ + return usrp_set_switch (udh, VRQ_FPGA_SET_TX_ENABLE, on); +} + +bool +usrp_set_fpga_rx_enable (struct usb_dev_handle *udh, bool on) +{ + return usrp_set_switch (udh, VRQ_FPGA_SET_RX_ENABLE, on); +} + +bool +usrp_set_fpga_tx_reset (struct usb_dev_handle *udh, bool on) +{ + return usrp_set_switch (udh, VRQ_FPGA_SET_TX_RESET, on); +} + +bool +usrp_set_fpga_rx_reset (struct usb_dev_handle *udh, bool on) +{ + return usrp_set_switch (udh, VRQ_FPGA_SET_RX_RESET, on); +} + + +// ---------------------------------------------------------------- +// conditional load stuff + +static bool +compute_hash (const char *filename, unsigned char hash[USRP_HASH_SIZE]) +{ + assert (USRP_HASH_SIZE == 16); + memset (hash, 0, USRP_HASH_SIZE); + + FILE *fp = fopen (filename, "rb"); + if (fp == 0){ + perror (filename); + return false; + } + int r = md5_stream (fp, hash); + fclose (fp); + + return r == 0; +} + +static usrp_load_status_t +usrp_conditionally_load_something (struct usb_dev_handle *udh, + const char *filename, + bool force, + int slot, + bool loader (struct usb_dev_handle *, + const char *, + unsigned char [USRP_HASH_SIZE])) +{ + unsigned char file_hash[USRP_HASH_SIZE]; + unsigned char usrp_hash[USRP_HASH_SIZE]; + + if (access (filename, R_OK) != 0){ + perror (filename); + return ULS_ERROR; + } + + if (!compute_hash (filename, file_hash)) + return ULS_ERROR; + + if (!force + && usrp_get_hash (udh, slot, usrp_hash) + && memcmp (file_hash, usrp_hash, USRP_HASH_SIZE) == 0) + return ULS_ALREADY_LOADED; + + bool r = loader (udh, filename, file_hash); + + if (!r) + return ULS_ERROR; + + return ULS_OK; +} + +usrp_load_status_t +usrp_load_firmware (struct usb_dev_handle *udh, + const char *filename, + bool force) +{ + return usrp_conditionally_load_something (udh, filename, force, + FIRMWARE_HASH_SLOT, + _usrp_load_firmware); +} + +usrp_load_status_t +usrp_load_fpga (struct usb_dev_handle *udh, + const char *filename, + bool force) +{ + return usrp_conditionally_load_something (udh, filename, force, + FPGA_HASH_SLOT, + _usrp_load_fpga); +} + +static usb_dev_handle * +open_nth_cmd_interface (int nth) +{ + struct usb_device *udev = usrp_find_device (nth); + if (udev == 0){ + fprintf (stderr, "usrp: failed to find usrp[%d]\n", nth); + return 0; + } + + struct usb_dev_handle *udh; + + udh = usrp_open_cmd_interface (udev); + if (udh == 0){ + // FIXME this could be because somebody else has it open. + // We should delay and retry... + fprintf (stderr, "open_nth_cmd_interface: open_cmd_interface failed\n"); + usb_strerror (); + return 0; + } + + return udh; + } + +static bool +our_nanosleep (const struct timespec *delay) +{ + struct timespec new_delay = *delay; + struct timespec remainder; + + while (1){ + int r = nanosleep (&new_delay, &remainder); + if (r == 0) + return true; + if (errno == EINTR) + new_delay = remainder; + else { + perror ("nanosleep"); + return false; + } + } +} + +static bool +mdelay (int millisecs) +{ + struct timespec ts; + ts.tv_sec = millisecs / 1000; + ts.tv_nsec = (millisecs - (1000 * ts.tv_sec)) * 1000000; + return our_nanosleep (&ts); +} + +usrp_load_status_t +usrp_load_firmware_nth (int nth, const char *filename, bool force){ + struct usb_dev_handle *udh = open_nth_cmd_interface (nth); + if (udh == 0) + return ULS_ERROR; + + usrp_load_status_t s = usrp_load_firmware (udh, filename, force); + usrp_close_interface (udh); + + switch (s){ + + case ULS_ALREADY_LOADED: // nothing changed... + return ULS_ALREADY_LOADED; + break; + + case ULS_OK: + // we loaded firmware successfully. + + // It's highly likely that the board will renumerate (simulate a + // disconnect/reconnect sequence), invalidating our current + // handle. + + // FIXME. Turn this into a loop that rescans until we refind ourselves + + struct timespec t; // delay for 1 second + t.tv_sec = 2; + t.tv_nsec = 0; + our_nanosleep (&t); + + usb_find_busses (); // rescan busses and devices + usb_find_devices (); + + return ULS_OK; + + default: + case ULS_ERROR: // some kind of problem + return ULS_ERROR; + } +} + +static void +load_status_msg (usrp_load_status_t s, const char *type, const char *filename) +{ + char *e = getenv("USRP_VERBOSE"); + bool verbose = e != 0; + + switch (s){ + case ULS_ERROR: + fprintf (stderr, "usrp: failed to load %s %s.\n", type, filename); + break; + + case ULS_ALREADY_LOADED: + if (verbose) + fprintf (stderr, "usrp: %s %s already loaded.\n", type, filename); + break; + + case ULS_OK: + if (verbose) + fprintf (stderr, "usrp: %s %s loaded successfully.\n", type, filename); + break; + } +} + +bool +usrp_load_standard_bits (int nth, bool force, + const std::string fpga_filename, + const std::string firmware_filename) +{ + usrp_load_status_t s; + const char *filename; + const char *proto_filename; + int hw_rev; + + // first, figure out what hardware rev we're dealing with + { + struct usb_device *udev = usrp_find_device (nth); + if (udev == 0){ + fprintf (stderr, "usrp: failed to find usrp[%d]\n", nth); + return false; + } + hw_rev = usrp_hw_rev (udev); + } + + // start by loading the firmware + + proto_filename = get_proto_filename(firmware_filename, "USRP_FIRMWARE", + default_firmware_filename); + filename = find_file(proto_filename, hw_rev); + if (filename == 0){ + fprintf (stderr, "Can't find firmware: %s\n", proto_filename); + return false; + } + + s = usrp_load_firmware_nth (nth, filename, force); + load_status_msg (s, "firmware", filename); + + if (s == ULS_ERROR) + return false; + + // if we actually loaded firmware, we must reload fpga ... + if (s == ULS_OK) + force = true; + + // now move on to the fpga configuration bitstream + + proto_filename = get_proto_filename(fpga_filename, "USRP_FPGA", + default_fpga_filename); + filename = find_file (proto_filename, hw_rev); + if (filename == 0){ + fprintf (stderr, "Can't find fpga bitstream: %s\n", proto_filename); + return false; + } + + struct usb_dev_handle *udh = open_nth_cmd_interface (nth); + if (udh == 0) + return false; + + s = usrp_load_fpga (udh, filename, force); + usrp_close_interface (udh); + load_status_msg (s, "fpga bitstream", filename); + + if (s == ULS_ERROR) + return false; + + return true; +} + +bool +_usrp_get_status (struct usb_dev_handle *udh, int which, bool *trouble) +{ + unsigned char status; + *trouble = true; + + if (write_cmd (udh, VRQ_GET_STATUS, 0, which, + &status, sizeof (status)) != sizeof (status)) + return false; + + *trouble = status; + return true; +} + +bool +usrp_check_rx_overrun (struct usb_dev_handle *udh, bool *overrun_p) +{ + return _usrp_get_status (udh, GS_RX_OVERRUN, overrun_p); +} + +bool +usrp_check_tx_underrun (struct usb_dev_handle *udh, bool *underrun_p) +{ + return _usrp_get_status (udh, GS_TX_UNDERRUN, underrun_p); +} + + +bool +usrp_i2c_write (struct usb_dev_handle *udh, int i2c_addr, + const void *buf, int len) +{ + if (len < 1 || len > MAX_EP0_PKTSIZE) + return false; + + return write_cmd (udh, VRQ_I2C_WRITE, i2c_addr, 0, + (unsigned char *) buf, len) == len; +} + + +bool +usrp_i2c_read (struct usb_dev_handle *udh, int i2c_addr, + void *buf, int len) +{ + if (len < 1 || len > MAX_EP0_PKTSIZE) + return false; + + return write_cmd (udh, VRQ_I2C_READ, i2c_addr, 0, + (unsigned char *) buf, len) == len; +} + +bool +usrp_spi_write (struct usb_dev_handle *udh, + int optional_header, int enables, int format, + const void *buf, int len) +{ + if (len < 0 || len > MAX_EP0_PKTSIZE) + return false; + + return write_cmd (udh, VRQ_SPI_WRITE, + optional_header, + ((enables & 0xff) << 8) | (format & 0xff), + (unsigned char *) buf, len) == len; +} + + +bool +usrp_spi_read (struct usb_dev_handle *udh, + int optional_header, int enables, int format, + void *buf, int len) +{ + if (len < 0 || len > MAX_EP0_PKTSIZE) + return false; + + return write_cmd (udh, VRQ_SPI_READ, + optional_header, + ((enables & 0xff) << 8) | (format & 0xff), + (unsigned char *) buf, len) == len; +} + +bool +usrp_9862_write (struct usb_dev_handle *udh, int which_codec, + int regno, int value) +{ + if (0) + fprintf (stderr, "usrp_9862_write which = %d, reg = %2d, val = %3d (0x%02x)\n", + which_codec, regno, value, value); + + unsigned char buf[1]; + + buf[0] = value; + + return usrp_spi_write (udh, 0x00 | (regno & 0x3f), + which_codec == 0 ? SPI_ENABLE_CODEC_A : SPI_ENABLE_CODEC_B, + SPI_FMT_MSB | SPI_FMT_HDR_1, + buf, 1); +} + +bool +usrp_9862_read (struct usb_dev_handle *udh, int which_codec, + int regno, unsigned char *value) +{ + return usrp_spi_read (udh, 0x80 | (regno & 0x3f), + which_codec == 0 ? SPI_ENABLE_CODEC_A : SPI_ENABLE_CODEC_B, + SPI_FMT_MSB | SPI_FMT_HDR_1, + value, 1); +} + +bool +usrp_9862_write_many (struct usb_dev_handle *udh, + int which_codec, + const unsigned char *buf, + int len) +{ + if (len & 0x1) + return false; // must be even + + bool result = true; + + while (len > 0){ + result &= usrp_9862_write (udh, which_codec, buf[0], buf[1]); + len -= 2; + buf += 2; + } + + return result; +} + + +bool +usrp_9862_write_many_all (struct usb_dev_handle *udh, + const unsigned char *buf, int len) +{ + // FIXME handle 2/2 and 4/4 versions + + bool result; + result = usrp_9862_write_many (udh, 0, buf, len); + result &= usrp_9862_write_many (udh, 1, buf, len); + return result; +} + +static void +power_down_9862s (struct usb_dev_handle *udh) +{ + static const unsigned char regs[] = { + REG_RX_PWR_DN, 0x01, // everything + REG_TX_PWR_DN, 0x0f, // pwr dn digital and analog_both + REG_TX_MODULATOR, 0x00 // coarse & fine modulators disabled + }; + + switch (usrp_hw_rev (dev_handle_to_dev (udh))){ + case 0: + break; + + default: + usrp_9862_write_many_all (udh, regs, sizeof (regs)); + break; + } +} + + + +static const int EEPROM_PAGESIZE = 16; + +bool +usrp_eeprom_write (struct usb_dev_handle *udh, int i2c_addr, + int eeprom_offset, const void *buf, int len) +{ + unsigned char cmd[2]; + const unsigned char *p = (unsigned char *) buf; + + // The simplest thing that could possibly work: + // all writes are single byte writes. + // + // We could speed this up using the page write feature, + // but we write so infrequently, why bother... + + while (len-- > 0){ + cmd[0] = eeprom_offset++; + cmd[1] = *p++; + bool r = usrp_i2c_write (udh, i2c_addr, cmd, sizeof (cmd)); + mdelay (10); // delay 10ms worst case write time + if (!r) + return false; + } + + return true; +} + +bool +usrp_eeprom_read (struct usb_dev_handle *udh, int i2c_addr, + int eeprom_offset, void *buf, int len) +{ + unsigned char *p = (unsigned char *) buf; + + // We setup a random read by first doing a "zero byte write". + // Writes carry an address. Reads use an implicit address. + + unsigned char cmd[1]; + cmd[0] = eeprom_offset; + if (!usrp_i2c_write (udh, i2c_addr, cmd, sizeof (cmd))) + return false; + + while (len > 0){ + int n = std::min (len, MAX_EP0_PKTSIZE); + if (!usrp_i2c_read (udh, i2c_addr, p, n)) + return false; + len -= n; + p += n; + } + return true; +} + +// ---------------------------------------------------------------- + +static bool +slot_to_codec (int slot, int *which_codec) +{ + *which_codec = 0; + + switch (slot){ + case SLOT_TX_A: + case SLOT_RX_A: + *which_codec = 0; + break; + + case SLOT_TX_B: + case SLOT_RX_B: + *which_codec = 1; + break; + + default: + fprintf (stderr, "usrp_prims:slot_to_codec: invalid slot = %d\n", slot); + return false; + } + return true; +} + +static bool +tx_slot_p (int slot) +{ + switch (slot){ + case SLOT_TX_A: + case SLOT_TX_B: + return true; + + default: + return false; + } +} + +bool +usrp_write_aux_dac (struct usb_dev_handle *udh, int slot, + int which_dac, int value) +{ + int which_codec; + + if (!slot_to_codec (slot, &which_codec)) + return false; + + if (!(0 <= which_dac && which_dac < 4)){ + fprintf (stderr, "usrp_write_aux_dac: invalid dac = %d\n", which_dac); + return false; + } + + value &= 0x0fff; // mask to 12-bits + + if (which_dac == 3){ + // dac 3 is really 12-bits. Use value as is. + bool r = true; + r &= usrp_9862_write (udh, which_codec, 43, (value >> 4)); // most sig + r &= usrp_9862_write (udh, which_codec, 42, (value & 0xf) << 4); // least sig + return r; + } + else { + // dac 0, 1, and 2 are really 8 bits. + value = value >> 4; // shift value appropriately + return usrp_9862_write (udh, which_codec, 36 + which_dac, value); + } +} + + +bool +usrp_read_aux_adc (struct usb_dev_handle *udh, int slot, + int which_adc, int *value) +{ + *value = 0; + int which_codec; + + if (!slot_to_codec (slot, &which_codec)) + return false; + + if (!(0 <= which_codec && which_codec < 2)){ + fprintf (stderr, "usrp_read_aux_adc: invalid adc = %d\n", which_adc); + return false; + } + + unsigned char aux_adc_control = + AUX_ADC_CTRL_REFSEL_A // on chip reference + | AUX_ADC_CTRL_REFSEL_B; // on chip reference + + int rd_reg = 26; // base address of two regs to read for result + + // program the ADC mux bits + if (tx_slot_p (slot)) + aux_adc_control |= AUX_ADC_CTRL_SELECT_A2 | AUX_ADC_CTRL_SELECT_B2; + else { + rd_reg += 2; + aux_adc_control |= AUX_ADC_CTRL_SELECT_A1 | AUX_ADC_CTRL_SELECT_B1; + } + + // I'm not sure if we can set the mux and issue a start conversion + // in the same cycle, so let's do them one at a time. + + usrp_9862_write (udh, which_codec, 34, aux_adc_control); + + if (which_adc == 0) + aux_adc_control |= AUX_ADC_CTRL_START_A; + else { + rd_reg += 4; + aux_adc_control |= AUX_ADC_CTRL_START_B; + } + + // start the conversion + usrp_9862_write (udh, which_codec, 34, aux_adc_control); + + // read the 10-bit result back + unsigned char v_lo = 0; + unsigned char v_hi = 0; + bool r = usrp_9862_read (udh, which_codec, rd_reg, &v_lo); + r &= usrp_9862_read (udh, which_codec, rd_reg + 1, &v_hi); + + if (r) + *value = ((v_hi << 2) | ((v_lo >> 6) & 0x3)) << 2; // format as 12-bit + + return r; +} + +// ---------------------------------------------------------------- + +static int slot_to_i2c_addr (int slot) +{ + switch (slot){ + case SLOT_TX_A: return I2C_ADDR_TX_A; + case SLOT_RX_A: return I2C_ADDR_RX_A; + case SLOT_TX_B: return I2C_ADDR_TX_B; + case SLOT_RX_B: return I2C_ADDR_RX_B; + default: return -1; + } +} + +static void +set_chksum (unsigned char *buf) +{ + int sum = 0; + unsigned int i; + for (i = 0; i < DB_EEPROM_CLEN - 1; i++) + sum += buf[i]; + buf[i] = -sum; +} + +static usrp_dbeeprom_status_t +read_dboard_eeprom (struct usb_dev_handle *udh, + int slot_id, unsigned char *buf) +{ + int i2c_addr = slot_to_i2c_addr (slot_id); + if (i2c_addr == -1) + return UDBE_BAD_SLOT; + + if (!usrp_eeprom_read (udh, i2c_addr, 0, buf, DB_EEPROM_CLEN)) + return UDBE_NO_EEPROM; + + if (buf[DB_EEPROM_MAGIC] != DB_EEPROM_MAGIC_VALUE) + return UDBE_INVALID_EEPROM; + + int sum = 0; + for (unsigned int i = 0; i < DB_EEPROM_CLEN; i++) + sum += buf[i]; + + if ((sum & 0xff) != 0) + return UDBE_INVALID_EEPROM; + + return UDBE_OK; +} + +usrp_dbeeprom_status_t +usrp_read_dboard_eeprom (struct usb_dev_handle *udh, + int slot_id, usrp_dboard_eeprom *eeprom) +{ + unsigned char buf[DB_EEPROM_CLEN]; + + memset (eeprom, 0, sizeof (*eeprom)); + + usrp_dbeeprom_status_t s = read_dboard_eeprom (udh, slot_id, buf); + if (s != UDBE_OK) + return s; + + eeprom->id = (buf[DB_EEPROM_ID_MSB] << 8) | buf[DB_EEPROM_ID_LSB]; + eeprom->oe = (buf[DB_EEPROM_OE_MSB] << 8) | buf[DB_EEPROM_OE_LSB]; + eeprom->offset[0] = (buf[DB_EEPROM_OFFSET_0_MSB] << 8) | buf[DB_EEPROM_OFFSET_0_LSB]; + eeprom->offset[1] = (buf[DB_EEPROM_OFFSET_1_MSB] << 8) | buf[DB_EEPROM_OFFSET_1_LSB]; + + return UDBE_OK; +} + +bool +usrp_write_dboard_offsets (struct usb_dev_handle *udh, int slot_id, + short offset0, short offset1) +{ + unsigned char buf[DB_EEPROM_CLEN]; + + usrp_dbeeprom_status_t s = read_dboard_eeprom (udh, slot_id, buf); + if (s != UDBE_OK) + return false; + + buf[DB_EEPROM_OFFSET_0_LSB] = (offset0 >> 0) & 0xff; + buf[DB_EEPROM_OFFSET_0_MSB] = (offset0 >> 8) & 0xff; + buf[DB_EEPROM_OFFSET_1_LSB] = (offset1 >> 0) & 0xff; + buf[DB_EEPROM_OFFSET_1_MSB] = (offset1 >> 8) & 0xff; + set_chksum (buf); + + return usrp_eeprom_write (udh, slot_to_i2c_addr (slot_id), + 0, buf, sizeof (buf)); +} + +std::string +usrp_serial_number(struct usb_dev_handle *udh) +{ + unsigned char iserial = usb_device(udh)->descriptor.iSerialNumber; + if (iserial == 0) + return ""; + + char buf[1024]; + if (usb_get_string_simple(udh, iserial, buf, sizeof(buf)) < 0) + return ""; + + return buf; +} diff --git a/usrp/host/lib/usrp_prims.h b/usrp/host/lib/legacy/usrp_prims.h similarity index 100% rename from usrp/host/lib/usrp_prims.h rename to usrp/host/lib/legacy/usrp_prims.h diff --git a/usrp/host/lib/usrp_slots.h b/usrp/host/lib/legacy/usrp_slots.h similarity index 100% rename from usrp/host/lib/usrp_slots.h rename to usrp/host/lib/legacy/usrp_slots.h diff --git a/usrp/host/lib/legacy/usrp_standard.cc b/usrp/host/lib/legacy/usrp_standard.cc new file mode 100644 index 00000000..b810f99c --- /dev/null +++ b/usrp/host/lib/legacy/usrp_standard.cc @@ -0,0 +1,1167 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +#include "usrp_prims.h" +#include "fpga_regs_common.h" +#include "fpga_regs_standard.h" +#include +#include +#include +#include +#include + + +static const int OLD_CAPS_VAL = 0xaa55ff77; +static const int DEFAULT_CAPS_VAL = ((2 << bmFR_RB_CAPS_NDUC_SHIFT) + | (2 << bmFR_RB_CAPS_NDDC_SHIFT) + | bmFR_RB_CAPS_RX_HAS_HALFBAND); + +// #define USE_FPGA_TX_CORDIC + + +using namespace ad9862; + +#define NELEM(x) (sizeof (x) / sizeof (x[0])) + + +void +usrp_standard_common::calc_dxc_freq(double target_freq, double baseband_freq, double fs, + double *dxc_freq, bool *inverted) +{ + /* + Calculate the frequency to use for setting the digital up or down converter. + + @param target_freq: desired RF frequency (Hz) + @param baseband_freq: the RF frequency that corresponds to DC in the IF. + @param fs: converter sample rate + + @returns: 2-tuple (ddc_freq, inverted) where ddc_freq is the value + for the ddc and inverted is True if we're operating in an inverted + Nyquist zone. + */ + +#if 0 + printf("calc_dxc_freq:\n"); + printf(" target = %f\n", target_freq); + printf(" baseband = %f\n", baseband_freq); + printf(" fs = %f\n", fs); +#endif + + double delta = target_freq - baseband_freq; + + if(delta >= 0) { + while(delta > fs) { + delta -= fs; + } + if(delta <= fs/2) { // non-inverted region + *dxc_freq = -delta; + *inverted = false; + } + else { // inverted region + *dxc_freq = delta - fs; + *inverted = true; + } + } + else { + while(delta < -fs) { + delta += fs; + } + if(delta >= -fs/2) { + *dxc_freq = -delta; // non-inverted region + *inverted = false; + } + else { // inverted region + *dxc_freq = delta + fs; + *inverted = true; + } + } + +#if 0 + printf(" dxc_freq = %f\n", *dxc_freq); + printf(" inverted = %s\n", *inverted ? "true" : "false"); +#endif +} + + +/* + * Real lambda expressions would be _so_ much easier... + */ +class dxc_control { +public: + virtual bool is_tx() = 0; + virtual bool set_dxc_freq(double dxc_freq) = 0; + virtual double dxc_freq() = 0; +}; + +class ddc_control : public dxc_control { + usrp_standard_rx *d_u; + int d_chan; + +public: + ddc_control(usrp_standard_rx *u, int chan) + : d_u(u), d_chan(chan) {} + + bool is_tx(){ return false; } + bool set_dxc_freq(double dxc_freq){ return d_u->set_rx_freq(d_chan, dxc_freq); } + double dxc_freq(){ return d_u->rx_freq(d_chan); } +}; + +class duc_control : public dxc_control { + usrp_standard_tx *d_u; + int d_chan; + +public: + duc_control(usrp_standard_tx *u, int chan) + : d_u(u), d_chan(chan) {} + + bool is_tx(){ return true; } + bool set_dxc_freq(double dxc_freq){ return d_u->set_tx_freq(d_chan, dxc_freq); } + double dxc_freq() { return d_u->tx_freq(d_chan); } +}; + + +/*! + * \brief Tune such that target_frequency ends up at DC in the complex baseband + * + * \param db the daughterboard to use + * \param target_freq the center frequency we want at baseband (DC) + * \param fs the sample rate + * \param dxc DDC or DUC access and control object + * \param[out] result details of what we did + * + * \returns true iff operation was successful + * + * Tuning is a two step process. First we ask the front-end to + * tune as close to the desired frequency as it can. Then we use + * the result of that operation and our target_frequency to + * determine the value for the digital down converter. + */ +static bool +tune_a_helper(db_base_sptr db, double target_freq, double fs, + dxc_control &dxc, usrp_tune_result *result) +{ + bool inverted = false; + double dxc_freq; + double actual_dxc_freq; + + // Ask the d'board to tune as closely as it can to target_freq +#if 0 + bool ok = db->set_freq(target_freq, &result->baseband_freq); +#else + bool ok; + { + freq_result_t fr = db->set_freq(target_freq); + ok = fr.ok; + result->baseband_freq = fr.baseband_freq; + } +#endif + + // Calculate the DDC setting that will downconvert the baseband from the + // daughterboard to our target frequency. + usrp_standard_common::calc_dxc_freq(target_freq, result->baseband_freq, fs, + &dxc_freq, &inverted); + + // If the spectrum is inverted, and the daughterboard doesn't do + // quadrature downconversion, we can fix the inversion by flipping the + // sign of the dxc_freq... (This only happens using the basic_rx board) + + if(db->spectrum_inverted()) + inverted = !inverted; + + if(inverted && !db->is_quadrature()){ + dxc_freq = -dxc_freq; + inverted = !inverted; + } + + if (dxc.is_tx() && !db->i_and_q_swapped()) // down conversion versus up conversion + dxc_freq = -dxc_freq; + + ok &= dxc.set_dxc_freq(dxc_freq); + actual_dxc_freq = dxc.dxc_freq(); + + result->dxc_freq = dxc_freq; + result->residual_freq = dxc_freq - actual_dxc_freq; + result->inverted = inverted; + return ok; +} + + +static unsigned int +compute_freq_control_word_fpga (double master_freq, double target_freq, + double *actual_freq, bool verbose) +{ + static const int NBITS = 14; + + int v = (int) rint (target_freq / master_freq * pow (2.0, 32.0)); + + if (0) + v = (v >> (32 - NBITS)) << (32 - NBITS); // keep only top NBITS + + *actual_freq = v * master_freq / pow (2.0, 32.0); + + if (verbose) + fprintf (stderr, + "compute_freq_control_word_fpga: target = %g actual = %g delta = %g\n", + target_freq, *actual_freq, *actual_freq - target_freq); + + return (unsigned int) v; +} + +// The 9862 uses an unsigned 24-bit frequency tuning word and +// a separate register to control the sign. + +static unsigned int +compute_freq_control_word_9862 (double master_freq, double target_freq, + double *actual_freq, bool verbose) +{ + double sign = 1.0; + + if (target_freq < 0) + sign = -1.0; + + int v = (int) rint (fabs (target_freq) / master_freq * pow (2.0, 24.0)); + *actual_freq = v * master_freq / pow (2.0, 24.0) * sign; + + if (verbose) + fprintf (stderr, + "compute_freq_control_word_9862: target = %g actual = %g delta = %g v = %8d\n", + target_freq, *actual_freq, *actual_freq - target_freq, v); + + return (unsigned int) v; +} + +// ---------------------------------------------------------------- + +usrp_standard_common::usrp_standard_common(usrp_basic *parent) +{ + // read new FPGA capability register + if (!parent->_read_fpga_reg(FR_RB_CAPS, &d_fpga_caps)){ + fprintf (stderr, "usrp_standard_common: failed to read FPGA cap register.\n"); + throw std::runtime_error ("usrp_standard_common::ctor"); + } + // If we don't have the cap register, set the value to what it would + // have had if we did have one ;) + if (d_fpga_caps == OLD_CAPS_VAL) + d_fpga_caps = DEFAULT_CAPS_VAL; + + if (0){ + fprintf(stdout, "has_rx_halfband = %d\n", has_rx_halfband()); + fprintf(stdout, "nddcs = %d\n", nddcs()); + fprintf(stdout, "has_tx_halfband = %d\n", has_tx_halfband()); + fprintf(stdout, "nducs = %d\n", nducs()); + } +} + +bool +usrp_standard_common::has_rx_halfband() const +{ + return (d_fpga_caps & bmFR_RB_CAPS_RX_HAS_HALFBAND) ? true : false; +} + +int +usrp_standard_common::nddcs() const +{ + return (d_fpga_caps & bmFR_RB_CAPS_NDDC_MASK) >> bmFR_RB_CAPS_NDDC_SHIFT; +} + +bool +usrp_standard_common::has_tx_halfband() const +{ + return (d_fpga_caps & bmFR_RB_CAPS_TX_HAS_HALFBAND) ? true : false; +} + +int +usrp_standard_common::nducs() const +{ + return (d_fpga_caps & bmFR_RB_CAPS_NDUC_MASK) >> bmFR_RB_CAPS_NDUC_SHIFT; +} + +// ---------------------------------------------------------------- + +static int +real_rx_mux_value (int mux, int nchan) +{ + if (mux != -1) + return mux; + + return 0x32103210; +} + +usrp_standard_rx::usrp_standard_rx (int which_board, + unsigned int decim_rate, + int nchan, int mux, int mode, + int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) + : usrp_basic_rx (which_board, fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename), + usrp_standard_common(this), + d_nchan (1), d_sw_mux (0x0), d_hw_mux (0x0) +{ + if (!set_format(make_format())){ + fprintf (stderr, "usrp_standard_rx: set_format failed\n"); + throw std::runtime_error ("usrp_standard_rx::ctor"); + } + if (!set_nchannels (nchan)){ + fprintf (stderr, "usrp_standard_rx: set_nchannels failed\n"); + throw std::runtime_error ("usrp_standard_rx::ctor"); + } + if (!set_decim_rate (decim_rate)){ + fprintf (stderr, "usrp_standard_rx: set_decim_rate failed\n"); + throw std::runtime_error ("usrp_standard_rx::ctor"); + } + if (!set_mux (real_rx_mux_value (mux, nchan))){ + fprintf (stderr, "usrp_standard_rx: set_mux failed\n"); + throw std::runtime_error ("usrp_standard_rx::ctor"); + } + if (!set_fpga_mode (mode)){ + fprintf (stderr, "usrp_standard_rx: set_fpga_mode failed\n"); + throw std::runtime_error ("usrp_standard_rx::ctor"); + } + + for (int i = 0; i < MAX_CHAN; i++){ + set_rx_freq(i, 0); + set_ddc_phase(i, 0); + } +} + +usrp_standard_rx::~usrp_standard_rx () +{ + // fprintf(stderr, "\nusrp_standard_rx: dtor\n"); +} + +bool +usrp_standard_rx::start () +{ + if (!usrp_basic_rx::start ()) + return false; + + // add our code here + + return true; +} + +bool +usrp_standard_rx::stop () +{ + bool ok = usrp_basic_rx::stop (); + + // add our code here + + return ok; +} + +usrp_standard_rx_sptr +usrp_standard_rx::make (int which_board, + unsigned int decim_rate, + int nchan, int mux, int mode, + int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) +{ + try { + usrp_standard_rx_sptr u = + usrp_standard_rx_sptr(new usrp_standard_rx(which_board, decim_rate, + nchan, mux, mode, + fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename)); + u->init_db(u); + return u; + } + catch (...){ + return usrp_standard_rx_sptr(); + } +} + +bool +usrp_standard_rx::set_decim_rate(unsigned int rate) +{ + if (has_rx_halfband()){ + if ((rate & 0x1) || rate < 4 || rate > 256){ + fprintf (stderr, "usrp_standard_rx::set_decim_rate: rate must be EVEN and in [4, 256]\n"); + return false; + } + } + else { + if (rate < 4 || rate > 128){ + fprintf (stderr, "usrp_standard_rx::set_decim_rate: rate must be in [4, 128]\n"); + return false; + } + } + + d_decim_rate = rate; + set_usb_data_rate ((adc_rate () / rate * nchannels ()) + * (2 * sizeof (short))); + + bool s = disable_rx (); + int v = has_rx_halfband() ? d_decim_rate/2 - 1 : d_decim_rate - 1; + bool ok = _write_fpga_reg (FR_DECIM_RATE, v); + restore_rx (s); + return ok; +} + +bool usrp_standard_rx::set_nchannels (int nchan) +{ + if (!(nchan == 1 || nchan == 2 || nchan == 4)) + return false; + + if (nchan > nddcs()) + return false; + + d_nchan = nchan; + + return write_hw_mux_reg (); +} + + +// map software mux value to hw mux value +// +// Software mux value: +// +// 3 2 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +-------+-------+-------+-------+-------+-------+-------+-------+ +// | Q3 | I3 | Q2 | I2 | Q1 | I1 | Q0 | I0 | +// +-------+-------+-------+-------+-------+-------+-------+-------+ +// +// Each 4-bit I field is either 0,1,2,3 +// Each 4-bit Q field is either 0,1,2,3 or 0xf (input is const zero) +// All Q's must be 0xf or none of them may be 0xf +// +// +// Hardware mux value: +// +// 3 2 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +-----------------------+-------+-------+-------+-------+-+-----+ +// | must be zero | Q3| I3| Q2| I2| Q1| I1| Q0| I0|Z| NCH | +// +-----------------------+-------+-------+-------+-------+-+-----+ + + +static bool +map_sw_mux_to_hw_mux (int sw_mux, int *hw_mux_ptr) +{ + // confirm that all I's are either 0,1,2,3 + + for (int i = 0; i < 8; i += 2){ + int t = (sw_mux >> (4 * i)) & 0xf; + if (!(0 <= t && t <= 3)) + return false; + } + + // confirm that all Q's are either 0,1,2,3 or 0xf + + for (int i = 1; i < 8; i += 2){ + int t = (sw_mux >> (4 * i)) & 0xf; + if (!(t == 0xf || (0 <= t && t <= 3))) + return false; + } + + // confirm that all Q inputs are 0xf (const zero input), + // or none of them are 0xf + + int q_and = 1; + int q_or = 0; + + for (int i = 0; i < 4; i++){ + int qx_is_0xf = ((sw_mux >> (8 * i + 4)) & 0xf) == 0xf; + q_and &= qx_is_0xf; + q_or |= qx_is_0xf; + } + + if (q_and || !q_or){ // OK + int hw_mux_value = 0; + + for (int i = 0; i < 8; i++){ + int t = (sw_mux >> (4 * i)) & 0x3; + hw_mux_value |= t << (2 * i + 4); + } + + if (q_and) + hw_mux_value |= 0x8; // all Q's zero + + *hw_mux_ptr = hw_mux_value; + return true; + } + else + return false; +} + +bool +usrp_standard_rx::set_mux (int mux) +{ + if (!map_sw_mux_to_hw_mux (mux, &d_hw_mux)) + return false; + + // fprintf (stderr, "sw_mux = 0x%08x hw_mux = 0x%08x\n", mux, d_hw_mux); + + d_sw_mux = mux; + return write_hw_mux_reg (); +} + +bool +usrp_standard_rx::write_hw_mux_reg () +{ + bool s = disable_rx (); + bool ok = _write_fpga_reg (FR_RX_MUX, d_hw_mux | d_nchan); + restore_rx (s); + return ok; +} + +int +usrp_standard_rx::determine_rx_mux_value(const usrp_subdev_spec &ss) +{ + /* + Determine appropriate Rx mux value as a function of the subdevice choosen and the + characteristics of the respective daughterboard. + + @param u: instance of USRP source + @param subdev_spec: return value from subdev option parser. + @type subdev_spec: (side, subdev), where side is 0 or 1 and subdev is 0 or 1 + @returns: the Rx mux value + + Figure out which A/D's to connect to the DDC. + + Each daughterboard consists of 1 or 2 subdevices. (At this time, + all but the Basic Rx have a single subdevice. The Basic Rx + has two independent channels, treated as separate subdevices). + subdevice 0 of a daughterboard may use 1 or 2 A/D's. We determine this + by checking the is_quadrature() method. If subdevice 0 uses only a single + A/D, it's possible that the daughterboard has a second subdevice, subdevice 1, + and it uses the second A/D. + + If the card uses only a single A/D, we wire a zero into the DDC Q input. + + (side, 0) says connect only the A/D's used by subdevice 0 to the DDC. + (side, 1) says connect only the A/D's used by subdevice 1 to the DDC. + */ + + struct truth_table_element + { + int d_side; + int d_uses; + bool d_swap_iq; + unsigned int d_mux_val; + + truth_table_element(int side, unsigned int uses, bool swap_iq, unsigned int mux_val=0) + : d_side(side), d_uses(uses), d_swap_iq(swap_iq), d_mux_val(mux_val){} + + bool operator==(const truth_table_element &in) + { + return (d_side == in.d_side && d_uses == in.d_uses && d_swap_iq == in.d_swap_iq); + } + + unsigned int mux_val() { return d_mux_val; } + }; + + + if (!is_valid(ss)) + throw std::invalid_argument("subdev_spec"); + + + // This is a tuple of length 1 or 2 containing the subdevice + // classes for the selected side. + std::vector db = this->db(ss.side); + + unsigned int uses; + + // compute bitmasks of used A/D's + + if(db[ss.subdev]->is_quadrature()) + uses = 0x3; // uses A/D 0 and 1 + else if (ss.subdev == 0) + uses = 0x1; // uses A/D 0 only + else if(ss.subdev == 1) + uses = 0x2; // uses A/D 1 only + else + uses = 0x0; // uses no A/D (doesn't exist) + + if(uses == 0){ + throw std::runtime_error("Determine RX Mux Error"); + } + + bool swap_iq = db[ss.subdev]->i_and_q_swapped(); + + truth_table_element truth_table[8] = { + // (side, uses, swap_iq) : mux_val + truth_table_element(0, 0x1, false, 0xf0f0f0f0), + truth_table_element(0, 0x2, false, 0xf0f0f0f1), + truth_table_element(0, 0x3, false, 0x00000010), + truth_table_element(0, 0x3, true, 0x00000001), + truth_table_element(1, 0x1, false, 0xf0f0f0f2), + truth_table_element(1, 0x2, false, 0xf0f0f0f3), + truth_table_element(1, 0x3, false, 0x00000032), + truth_table_element(1, 0x3, true, 0x00000023) + }; + size_t nelements = sizeof(truth_table)/sizeof(truth_table[0]); + + truth_table_element target(ss.side, uses, swap_iq, 0); + + size_t i; + for(i = 0; i < nelements; i++){ + if (truth_table[i] == target) + return truth_table[i].mux_val(); + } + throw std::runtime_error("internal error"); +} + +int +usrp_standard_rx::determine_rx_mux_value(const usrp_subdev_spec &ss_a, const usrp_subdev_spec &ss_b) +{ + std::vector db_a = this->db(ss_a.side); + std::vector db_b = this->db(ss_b.side); + if (db_a[ss_a.subdev]->is_quadrature() != db_b[ss_b.subdev]->is_quadrature()){ + throw std::runtime_error("Cannot compute dual mux when mixing quadrature and non-quadrature subdevices"); + } + int mux_a = determine_rx_mux_value(ss_a); + int mux_b = determine_rx_mux_value(ss_b); + //move the lower byte of the mux b into the second byte of the mux a + return ((mux_b & 0xff) << 8) | (mux_a & 0xffff00ff); +} + +bool +usrp_standard_rx::set_rx_freq (int channel, double freq) +{ + if (channel < 0 || channel > MAX_CHAN) + return false; + + unsigned int v = + compute_freq_control_word_fpga (adc_rate(), + freq, &d_rx_freq[channel], + d_verbose); + + return _write_fpga_reg (FR_RX_FREQ_0 + channel, v); +} + +unsigned int +usrp_standard_rx::decim_rate () const { return d_decim_rate; } + +int +usrp_standard_rx::nchannels () const { return d_nchan; } + +int +usrp_standard_rx::mux () const { return d_sw_mux; } + +double +usrp_standard_rx::rx_freq (int channel) const +{ + if (channel < 0 || channel >= MAX_CHAN) + return 0; + + return d_rx_freq[channel]; +} + +bool +usrp_standard_rx::set_fpga_mode (int mode) +{ + return _write_fpga_reg (FR_MODE, mode); +} + +bool +usrp_standard_rx::set_ddc_phase(int channel, int phase) +{ + if (channel < 0 || channel >= MAX_CHAN) + return false; + + return _write_fpga_reg(FR_RX_PHASE_0 + channel, phase); +} + + +// To avoid quiet failures, check for things that our code cares about. + +static bool +rx_format_is_valid(unsigned int format) +{ + int width = usrp_standard_rx::format_width(format); + int want_q = usrp_standard_rx::format_want_q(format); + + if (!(width == 8 || width == 16)) // FIXME add other widths when valid + return false; + + if (!want_q) // FIXME remove check when the rest of the code can handle I only + return false; + + return true; +} + +bool +usrp_standard_rx::set_format(unsigned int format) +{ + if (!rx_format_is_valid(format)) + return false; + + return _write_fpga_reg(FR_RX_FORMAT, format); +} + +unsigned int +usrp_standard_rx::format() const +{ + return d_fpga_shadows[FR_RX_FORMAT]; +} + +// ---------------------------------------------------------------- + +unsigned int +usrp_standard_rx::make_format(int width, int shift, bool want_q, bool bypass_halfband) +{ + unsigned int format = + (((width << bmFR_RX_FORMAT_WIDTH_SHIFT) & bmFR_RX_FORMAT_WIDTH_MASK) + | ((shift << bmFR_RX_FORMAT_SHIFT_SHIFT) & bmFR_RX_FORMAT_SHIFT_MASK)); + + if (want_q) + format |= bmFR_RX_FORMAT_WANT_Q; + if (bypass_halfband) + format |= bmFR_RX_FORMAT_BYPASS_HB; + + return format; +} + +int +usrp_standard_rx::format_width(unsigned int format) +{ + return (format & bmFR_RX_FORMAT_WIDTH_MASK) >> bmFR_RX_FORMAT_WIDTH_SHIFT; +} + +int +usrp_standard_rx::format_shift(unsigned int format) +{ + return (format & bmFR_RX_FORMAT_SHIFT_MASK) >> bmFR_RX_FORMAT_SHIFT_SHIFT; +} + +bool +usrp_standard_rx::format_want_q(unsigned int format) +{ + return (format & bmFR_RX_FORMAT_WANT_Q) != 0; +} + +bool +usrp_standard_rx::format_bypass_halfband(unsigned int format) +{ + return (format & bmFR_RX_FORMAT_BYPASS_HB) != 0; +} + +bool +usrp_standard_rx::tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result) +{ + ddc_control dxc(this, chan); + return tune_a_helper(db, target_freq, converter_rate(), dxc, result); +} + + +////////////////////////////////////////////////////////////////// + + +// tx data is timed to CLKOUT1 (64 MHz) +// interpolate 4x +// fine modulator enabled + + +static unsigned char tx_regs_use_nco[] = { + REG_TX_IF, (TX_IF_USE_CLKOUT1 + | TX_IF_I_FIRST + | TX_IF_2S_COMP + | TX_IF_INTERLEAVED), + REG_TX_DIGITAL, (TX_DIGITAL_2_DATA_PATHS + | TX_DIGITAL_INTERPOLATE_4X) +}; + + +static int +real_tx_mux_value (int mux, int nchan) +{ + if (mux != -1) + return mux; + + switch (nchan){ + case 1: + return 0x0098; + case 2: + return 0xba98; + default: + assert (0); + } +} + +usrp_standard_tx::usrp_standard_tx (int which_board, + unsigned int interp_rate, + int nchan, int mux, + int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) + : usrp_basic_tx (which_board, fusb_block_size, fusb_nblocks, fpga_filename, firmware_filename), + usrp_standard_common(this), + d_sw_mux (0x8), d_hw_mux (0x81) +{ + if (!usrp_9862_write_many_all (d_udh, tx_regs_use_nco, sizeof (tx_regs_use_nco))){ + fprintf (stderr, "usrp_standard_tx: failed to init AD9862 TX regs\n"); + throw std::runtime_error ("usrp_standard_tx::ctor"); + } + if (!set_nchannels (nchan)){ + fprintf (stderr, "usrp_standard_tx: set_nchannels failed\n"); + throw std::runtime_error ("usrp_standard_tx::ctor"); + } + if (!set_interp_rate (interp_rate)){ + fprintf (stderr, "usrp_standard_tx: set_interp_rate failed\n"); + throw std::runtime_error ("usrp_standard_tx::ctor"); + } + if (!set_mux (real_tx_mux_value (mux, nchan))){ + fprintf (stderr, "usrp_standard_tx: set_mux failed\n"); + throw std::runtime_error ("usrp_standard_tx::ctor"); + } + + for (int i = 0; i < MAX_CHAN; i++){ + d_tx_modulator_shadow[i] = (TX_MODULATOR_DISABLE_NCO + | TX_MODULATOR_COARSE_MODULATION_NONE); + d_coarse_mod[i] = CM_OFF; + set_tx_freq (i, 0); + } +} + +usrp_standard_tx::~usrp_standard_tx () +{ + // fprintf(stderr, "\nusrp_standard_tx: dtor\n"); +} + +bool +usrp_standard_tx::start () +{ + if (!usrp_basic_tx::start ()) + return false; + + // add our code here + + return true; +} + +bool +usrp_standard_tx::stop () +{ + bool ok = usrp_basic_tx::stop (); + + // add our code here + + return ok; +} + +usrp_standard_tx_sptr +usrp_standard_tx::make (int which_board, + unsigned int interp_rate, + int nchan, int mux, + int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) +{ + try { + usrp_standard_tx_sptr u = + usrp_standard_tx_sptr(new usrp_standard_tx(which_board, interp_rate, nchan, mux, + fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename)); + u->init_db(u); + return u; + } + catch (...){ + return usrp_standard_tx_sptr(); + } +} + +bool +usrp_standard_tx::set_interp_rate (unsigned int rate) +{ + // fprintf (stderr, "usrp_standard_tx::set_interp_rate\n"); + + if ((rate & 0x3) || rate < 4 || rate > 512){ + fprintf (stderr, "usrp_standard_tx::set_interp_rate: rate must be in [4, 512] and a multiple of 4.\n"); + return false; + } + + d_interp_rate = rate; + set_usb_data_rate ((dac_rate () / rate * nchannels ()) + * (2 * sizeof (short))); + + // We're using the interp by 4 feature of the 9862 so that we can + // use its fine modulator. Thus, we reduce the FPGA's interpolation rate + // by a factor of 4. + + bool s = disable_tx (); + bool ok = _write_fpga_reg (FR_INTERP_RATE, d_interp_rate/4 - 1); + restore_tx (s); + return ok; +} + +bool +usrp_standard_tx::set_nchannels (int nchan) +{ + if (!(nchan == 1 || nchan == 2)) + return false; + + if (nchan > nducs()) + return false; + + d_nchan = nchan; + return write_hw_mux_reg (); +} + +bool +usrp_standard_tx::set_mux (int mux) +{ + d_sw_mux = mux; + d_hw_mux = mux << 4; + return write_hw_mux_reg (); +} + +bool +usrp_standard_tx::write_hw_mux_reg () +{ + bool s = disable_tx (); + bool ok = _write_fpga_reg (FR_TX_MUX, d_hw_mux | d_nchan); + restore_tx (s); + return ok; +} + +int +usrp_standard_tx::determine_tx_mux_value(const usrp_subdev_spec &ss) +{ + /* + Determine appropriate Tx mux value as a function of the subdevice choosen. + + @param u: instance of USRP source + @param subdev_spec: return value from subdev option parser. + @type subdev_spec: (side, subdev), where side is 0 or 1 and subdev is 0 + @returns: the Rx mux value + + This is simpler than the rx case. Either you want to talk + to side A or side B. If you want to talk to both sides at once, + determine the value manually. + */ + + if (!is_valid(ss)) + throw std::invalid_argument("subdev_spec"); + + std::vector db = this->db(ss.side); + + if(db[ss.subdev]->i_and_q_swapped()) { + unsigned int mask[2] = {0x0089, 0x8900}; + return mask[ss.side]; + } + else { + unsigned int mask[2] = {0x0098, 0x9800}; + return mask[ss.side]; + } +} + +int +usrp_standard_tx::determine_tx_mux_value(const usrp_subdev_spec &ss_a, const usrp_subdev_spec &ss_b) +{ + if (ss_a.side == ss_b.side && ss_a.subdev == ss_b.subdev){ + throw std::runtime_error("Cannot compute dual mux, repeated subdevice"); + } + int mux_a = determine_tx_mux_value(ss_a); + //Get the mux b: + // DAC0 becomes DAC2 + // DAC1 becomes DAC3 + unsigned int mask[2] = {0x0022, 0x2200}; + int mux_b = determine_tx_mux_value(ss_b) + mask[ss_b.side]; + return mux_b | mux_a; +} + +#ifdef USE_FPGA_TX_CORDIC + +bool +usrp_standard_tx::set_tx_freq (int channel, double freq) +{ + if (channel < 0 || channel >= MAX_CHAN) + return false; + + // This assumes we're running the 4x on-chip interpolator. + + unsigned int v = + compute_freq_control_word_fpga (dac_rate () / 4, + freq, &d_tx_freq[channel], + d_verbose); + + return _write_fpga_reg (FR_TX_FREQ_0 + channel, v); +} + + +#else + +bool +usrp_standard_tx::set_tx_freq (int channel, double freq) +{ + if (channel < 0 || channel >= MAX_CHAN) + return false; + + // split freq into fine and coarse components + + coarse_mod_t cm; + double coarse; + + assert (dac_rate () == 128000000); + + if (freq < -44e6) // too low + return false; + else if (freq < -24e6){ // [-44, -24) + cm = CM_NEG_FDAC_OVER_4; + coarse = -dac_rate () / 4; + } + else if (freq < -8e6){ // [-24, -8) + cm = CM_NEG_FDAC_OVER_8; + coarse = -dac_rate () / 8; + } + else if (freq < 8e6){ // [-8, 8) + cm = CM_OFF; + coarse = 0; + } + else if (freq < 24e6){ // [8, 24) + cm = CM_POS_FDAC_OVER_8; + coarse = dac_rate () / 8; + } + else if (freq <= 44e6){ // [24, 44] + cm = CM_POS_FDAC_OVER_4; + coarse = dac_rate () / 4; + } + else // too high + return false; + + + set_coarse_modulator (channel, cm); // set bits in d_tx_modulator_shadow + + double fine = freq - coarse; + + + // Compute fine tuning word... + // This assumes we're running the 4x on-chip interpolator. + // (This is required to use the fine modulator.) + + unsigned int v = + compute_freq_control_word_9862 (dac_rate () / 4, + fine, &d_tx_freq[channel], d_verbose); + + d_tx_freq[channel] += coarse; // adjust actual + + unsigned char high, mid, low; + + high = (v >> 16) & 0xff; + mid = (v >> 8) & 0xff; + low = (v >> 0) & 0xff; + + bool ok = true; + + // write the fine tuning word + ok &= _write_9862 (channel, REG_TX_NCO_FTW_23_16, high); + ok &= _write_9862 (channel, REG_TX_NCO_FTW_15_8, mid); + ok &= _write_9862 (channel, REG_TX_NCO_FTW_7_0, low); + + + d_tx_modulator_shadow[channel] |= TX_MODULATOR_ENABLE_NCO; + + if (fine < 0) + d_tx_modulator_shadow[channel] |= TX_MODULATOR_NEG_FINE_TUNE; + else + d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_NEG_FINE_TUNE; + + ok &=_write_9862 (channel, REG_TX_MODULATOR, d_tx_modulator_shadow[channel]); + + return ok; +} +#endif + +bool +usrp_standard_tx::set_coarse_modulator (int channel, coarse_mod_t cm) +{ + if (channel < 0 || channel >= MAX_CHAN) + return false; + + switch (cm){ + case CM_NEG_FDAC_OVER_4: + d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; + d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_4; + d_tx_modulator_shadow[channel] |= TX_MODULATOR_NEG_COARSE_TUNE; + break; + + case CM_NEG_FDAC_OVER_8: + d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; + d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_8; + d_tx_modulator_shadow[channel] |= TX_MODULATOR_NEG_COARSE_TUNE; + break; + + case CM_OFF: + d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; + break; + + case CM_POS_FDAC_OVER_8: + d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; + d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_8; + break; + + case CM_POS_FDAC_OVER_4: + d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; + d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_4; + break; + + default: + return false; + } + + d_coarse_mod[channel] = cm; + return true; +} + +unsigned int +usrp_standard_tx::interp_rate () const { return d_interp_rate; } + +int +usrp_standard_tx::nchannels () const { return d_nchan; } + +int +usrp_standard_tx::mux () const { return d_sw_mux; } + +double +usrp_standard_tx::tx_freq (int channel) const +{ + if (channel < 0 || channel >= MAX_CHAN) + return 0; + + return d_tx_freq[channel]; +} + +usrp_standard_tx::coarse_mod_t +usrp_standard_tx::coarse_modulator (int channel) const +{ + if (channel < 0 || channel >= MAX_CHAN) + return CM_OFF; + + return d_coarse_mod[channel]; +} + +bool +usrp_standard_tx::tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result) +{ + duc_control dxc(this, chan); + return tune_a_helper(db, target_freq, converter_rate(), dxc, result); +} diff --git a/usrp/host/lib/legacy/usrp_standard.h b/usrp/host/lib/legacy/usrp_standard.h new file mode 100644 index 00000000..734fff4b --- /dev/null +++ b/usrp/host/lib/legacy/usrp_standard.h @@ -0,0 +1,452 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,2008 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. + */ + +#ifndef INCLUDED_USRP_STANDARD_H +#define INCLUDED_USRP_STANDARD_H + +#include +#include +#include + +class usrp_standard_tx; +class usrp_standard_rx; + +typedef boost::shared_ptr usrp_standard_tx_sptr; +typedef boost::shared_ptr usrp_standard_rx_sptr; + +/*! + * \ingroup usrp + */ +class usrp_standard_common +{ + int d_fpga_caps; // capability register val + +protected: + usrp_standard_common(usrp_basic *parent); + +public: + /*! + *\brief does the FPGA implement the final Rx half-band filter? + * If it doesn't, the maximum decimation factor with proper gain + * is 1/2 of what it would otherwise be. + */ + bool has_rx_halfband() const; + + /*! + * \brief number of digital downconverters implemented in the FPGA + * This will be 0, 1, 2 or 4. + */ + int nddcs() const; + + /*! + *\brief does the FPGA implement the initial Tx half-band filter? + */ + bool has_tx_halfband() const; + + /*! + * \brief number of digital upconverters implemented in the FPGA + * This will be 0, 1, or 2. + */ + int nducs() const; + + /*! + * \brief Calculate the frequency to use for setting the digital up or down converter. + * + * \param target_freq is the desired RF frequency (Hz). + * \param baseband_freq is the RF frequency that corresponds to DC in the IF coming from the d'board. + * \param fs is the sampling frequency. + * \param[out] dxc_freq the frequency to program into the DDC (or DUC). + * \param[out] inverted is true if we're operating in an inverted Nyquist zone. + */ + static void calc_dxc_freq(double target_freq, double baseband_freq, double fs, + double *dxc_freq, bool *inverted); +}; + +/*! + * \brief The C++ interface the receive side of the USRP + * \ingroup usrp + * + * This is the recommended interface to USRP receive functionality + * for applications that use the USRP but not GNU Radio. + */ +class usrp_standard_rx : public usrp_basic_rx, public usrp_standard_common +{ + private: + static const int MAX_CHAN = 4; + unsigned int d_decim_rate; + int d_nchan; + int d_sw_mux; + int d_hw_mux; + double d_rx_freq[MAX_CHAN]; + + protected: + usrp_standard_rx (int which_board, + unsigned int decim_rate, + int nchan = 1, + int mux = -1, + int mode = 0, + int fusb_block_size = 0, + int fusb_nblocks = 0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); // throws if trouble + + bool write_hw_mux_reg (); + + public: + + enum { + FPGA_MODE_NORMAL = 0x00, + FPGA_MODE_LOOPBACK = 0x01, + FPGA_MODE_COUNTING = 0x02, + FPGA_MODE_COUNTING_32BIT = 0x04 + }; + + ~usrp_standard_rx (); + + /*! + * \brief invokes constructor, returns shared_ptr or shared_ptr equivalent of 0 if trouble + * + * \param which_board Which USRP board on usb (not particularly useful; use 0) + * \param decim_rate decimation factor + * \param nchan number of channels + * \param mux Rx mux setting, \sa set_mux + * \param mode mode + * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. + * Use zero for a reasonable default. + * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. + * \param fpga_filename Name of rbf file to load + * \param firmware_filename Name of ihx file to load + */ + static usrp_standard_rx_sptr make(int which_board, + unsigned int decim_rate, + int nchan = 1, + int mux = -1, + int mode = 0, + int fusb_block_size = 0, + int fusb_nblocks = 0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); + /*! + * \brief Set decimator rate. \p rate MUST BE EVEN and in [8, 256]. + * + * The final complex sample rate across the USB is + * adc_freq () / decim_rate () * nchannels () + */ + bool set_decim_rate (unsigned int rate); + + /*! + * \brief Set number of active channels. \p nchannels must be 1, 2 or 4. + * + * The final complex sample rate across the USB is + * adc_freq () / decim_rate () * nchannels () + */ + bool set_nchannels (int nchannels); + + /*! + * \brief Set input mux configuration. + * + * This determines which ADC (or constant zero) is connected to + * each DDC input. There are 4 DDCs. Each has two inputs. + * + *
+   * Mux value:
+   *
+   *    3                   2                   1                       
+   *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   * +-------+-------+-------+-------+-------+-------+-------+-------+
+   * |   Q3  |   I3  |   Q2  |   I2  |   Q1  |   I1  |   Q0  |   I0  |
+   * +-------+-------+-------+-------+-------+-------+-------+-------+
+   *
+   * Each 4-bit I field is either 0,1,2,3
+   * Each 4-bit Q field is either 0,1,2,3 or 0xf (input is const zero)
+   * All Q's must be 0xf or none of them may be 0xf
+   * 
+ */ + bool set_mux (int mux); + + /*! + * Determine the appropriate Rx mux value as a function of the subdevice choosen + * and the characteristics of the respective daughterboard. + */ + int determine_rx_mux_value(const usrp_subdev_spec &ss); + int determine_rx_mux_value(const usrp_subdev_spec &ss_a, const usrp_subdev_spec &ss_b); + + /*! + * \brief set the frequency of the digital down converter. + * + * \p channel must be in the range [0,3]. \p freq is the center + * frequency in Hz. \p freq may be either negative or postive. + * The frequency specified is quantized. Use rx_freq to retrieve + * the actual value used. + */ + bool set_rx_freq (int channel, double freq); + + /*! + * \brief set fpga mode + */ + bool set_fpga_mode (int mode); + + /*! + * \brief Set the digital down converter phase register. + * + * \param channel which ddc channel [0, 3] + * \param phase 32-bit integer phase value. + */ + bool set_ddc_phase(int channel, int phase); + + /*! + * \brief Specify Rx data format. + * + * \param format format specifier + * + * Rx data format control register + * + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-----------------------------------------+-+-+---------+-------+ + * | Reserved (Must be zero) |B|Q| WIDTH | SHIFT | + * +-----------------------------------------+-+-+---------+-------+ + * + * SHIFT specifies arithmetic right shift [0, 15] + * WIDTH specifies bit-width of I & Q samples across the USB [1, 16] (not all valid) + * Q if set deliver both I & Q, else just I + * B if set bypass half-band filter. + * + * Right now the acceptable values are: + * + * B Q WIDTH SHIFT + * 0 1 16 0 + * 0 1 8 8 + * + * More valid combos to come. + * + * Default value is 0x00000300 16-bits, 0 shift, deliver both I & Q. + */ + bool set_format(unsigned int format); + + static unsigned int make_format(int width=16, int shift=0, + bool want_q=true, bool bypass_halfband=false); + static int format_width(unsigned int format); + static int format_shift(unsigned int format); + static bool format_want_q(unsigned int format); + static bool format_bypass_halfband(unsigned int format); + + /*! + * \brief High-level "tune" method. Works for the single channel case. + * + * This method adjusts both the daughterboard LO and the DDC so that + * target_freq ends up at DC in the complex baseband samples. + * + * \param chan which DDC channel we're controlling (almost always 0). + * \param db the daughterboard we're controlling. + * \param target_freq the RF frequency we want at DC in the complex baseband. + * \param[out] result details how the hardware was configured. + * + * \returns true iff everything was successful. + */ + bool tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result); + + + // ACCESSORS + unsigned int decim_rate () const; + double rx_freq (int channel) const; + int nchannels () const; + int mux () const; + unsigned int format () const; + + // called in base class to derived class order + bool start (); + bool stop (); +}; + +// ---------------------------------------------------------------- + +/*! + * \brief The C++ interface the transmit side of the USRP + * \ingroup usrp + * + * This is the recommended interface to USRP transmit functionality + * for applications that use the USRP but not GNU Radio. + * + * Uses digital upconverter (coarse & fine modulators) in AD9862... + */ +class usrp_standard_tx : public usrp_basic_tx, public usrp_standard_common +{ + public: + enum coarse_mod_t { + CM_NEG_FDAC_OVER_4, // -32 MHz + CM_NEG_FDAC_OVER_8, // -16 MHz + CM_OFF, + CM_POS_FDAC_OVER_8, // +16 MHz + CM_POS_FDAC_OVER_4 // +32 MHz + }; + + protected: + static const int MAX_CHAN = 2; + unsigned int d_interp_rate; + int d_nchan; + int d_sw_mux; + int d_hw_mux; + double d_tx_freq[MAX_CHAN]; + coarse_mod_t d_coarse_mod[MAX_CHAN]; + unsigned char d_tx_modulator_shadow[MAX_CHAN]; + + virtual bool set_coarse_modulator (int channel, coarse_mod_t cm); + usrp_standard_tx::coarse_mod_t coarse_modulator (int channel) const; + + protected: + usrp_standard_tx (int which_board, + unsigned int interp_rate, + int nchan = 1, + int mux = -1, + int fusb_block_size = 0, + int fusb_nblocks = 0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); // throws if trouble + + bool write_hw_mux_reg (); + + public: + ~usrp_standard_tx (); + + /*! + * \brief invokes constructor, returns shared_ptr or shared_ptr equivalent of 0 if trouble + * + * \param which_board Which USRP board on usb (not particularly useful; use 0) + * \param interp_rate interpolation factor + * \param nchan number of channels + * \param mux Tx mux setting, \sa set_mux + * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. + * Use zero for a reasonable default. + * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. + * \param fpga_filename Name of rbf file to load + * \param firmware_filename Name of ihx file to load + */ + static usrp_standard_tx_sptr make(int which_board, + unsigned int interp_rate, + int nchan = 1, + int mux = -1, + int fusb_block_size = 0, + int fusb_nblocks = 0, + const std::string fpga_filename = "", + const std::string firmware_filename = "" + ); + + /*! + * \brief Set interpolator rate. \p rate must be in [4, 512] and a multiple of 4. + * + * The final complex sample rate across the USB is + * dac_freq () / interp_rate () * nchannels () + */ + virtual bool set_interp_rate (unsigned int rate); + + /*! + * \brief Set number of active channels. \p nchannels must be 1 or 2. + * + * The final complex sample rate across the USB is + * dac_freq () / decim_rate () * nchannels () + */ + bool set_nchannels (int nchannels); + + /*! + * \brief Set output mux configuration. + * + *
+   *     3                   2                   1                       
+   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   *  +-------------------------------+-------+-------+-------+-------+
+   *  |                               | DAC3  | DAC2  | DAC1  |  DAC0 |
+   *  +-------------------------------+-------+-------+-------+-------+
+   * 
+   *  There are two interpolators with complex inputs and outputs.
+   *  There are four DACs.
+   * 
+   *  Each 4-bit DACx field specifies the source for the DAC and
+   *  whether or not that DAC is enabled.  Each subfield is coded
+   *  like this: 
+   * 
+   *     3 2 1 0
+   *    +-+-----+
+   *    |E|  N  |
+   *    +-+-----+
+   * 
+   *  Where E is set if the DAC is enabled, and N specifies which
+   *  interpolator output is connected to this DAC.
+   * 
+   *   N   which interp output
+   *  ---  -------------------
+   *   0   chan 0 I
+   *   1   chan 0 Q
+   *   2   chan 1 I
+   *   3   chan 1 Q
+   * 
+ */ + bool set_mux (int mux); + + /*! + * Determine the appropriate Tx mux value as a function of the subdevice choosen + * and the characteristics of the respective daughterboard. + */ + int determine_tx_mux_value(const usrp_subdev_spec &ss); + int determine_tx_mux_value(const usrp_subdev_spec &ss_a, const usrp_subdev_spec &ss_b); + + /*! + * \brief set the frequency of the digital up converter. + * + * \p channel must be in the range [0,1]. \p freq is the center + * frequency in Hz. It must be in the range [-44M, 44M]. + * The frequency specified is quantized. Use tx_freq to retrieve + * the actual value used. + */ + virtual bool set_tx_freq (int channel, double freq); // chan: [0,1] + + // ACCESSORS + unsigned int interp_rate () const; + double tx_freq (int channel) const; + int nchannels () const; + int mux () const; + + /*! + * \brief High-level "tune" method. Works for the single channel case. + * + * This method adjusts both the daughterboard LO and the DUC so that + * DC in the complex baseband samples ends up at RF target_freq. + * + * \param chan which DUC channel we're controlling (usually == which_side). + * \param db the daughterboard we're controlling. + * \param target_freq the RF frequency we want our baseband translated to. + * \param[out] result details how the hardware was configured. + * + * \returns true iff everything was successful. + */ + bool tune(int chan, db_base_sptr db, double target_freq, usrp_tune_result *result); + + + // called in base class to derived class order + bool start (); + bool stop (); +}; + +#endif /* INCLUDED_USRP_STANDARD_H */ diff --git a/usrp/host/lib/legacy/usrp_subdev_spec.h b/usrp/host/lib/legacy/usrp_subdev_spec.h new file mode 100644 index 00000000..e841ff83 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_subdev_spec.h @@ -0,0 +1,50 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_USRP_SUBDEV_SPEC_H +#define INCLUDED_USRP_SUBDEV_SPEC_H + +/*! + * \brief specify a daughterboard and subdevice on a daughterboard. + * + * In the USRP1, there are two sides, A and B. + * + * A daughterboard generally implements a single subdevice, but may in + * general implement any number of subdevices. At this time, all daughterboards + * with the exception of the Basic Rx and LF Rx implement a single subdevice. + * + * The Basic Rx and LF Rx implement 2 subdevices (soon 3). Subdevice + * 0 routes input RX-A to the DDC I input and routes a constant zero + * to the DDC Q input. Similarly, subdevice 1 routes input RX-B to + * the DDC I input and routes a constant zero to the DDC Q + * input. Subdevice 2 (when implemented) will route RX-A to the DDC I + * input and RX-B to the DDC Q input. + */ + +struct usrp_subdev_spec { + unsigned int side; // 0 -> A; 1 -> B + unsigned int subdev; // which subdevice (usually zero) + + usrp_subdev_spec(unsigned int _side = 0, unsigned int _subdev = 0) + : side(_side), subdev(_subdev) {} +}; + +#endif /* INCLUDED_USRP_SUBDEV_SPEC_H */ diff --git a/usrp/host/lib/legacy/usrp_tune_result.h b/usrp/host/lib/legacy/usrp_tune_result.h new file mode 100644 index 00000000..200541a3 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_tune_result.h @@ -0,0 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_USRP_TUNE_RESULT_H +#define INCLUDED_USRP_TUNE_RESULT_H + +class usrp_tune_result +{ +public: + // RF frequency that corresponds to DC in the IF + double baseband_freq; + + // frequency programmed into the DDC/DUC + double dxc_freq; + + // residual frequency (typically < 0.01 Hz) + double residual_freq; + + // is the spectrum inverted? + bool inverted; + + usrp_tune_result(double baseband=0, double dxc=0, double residual=0, bool _inverted=false) + : baseband_freq(baseband), dxc_freq(dxc), + residual_freq(residual), inverted(_inverted) {} +}; + +#endif /* INCLUDED_USRP_TUNE_RESULT_H */ diff --git a/usrp/host/lib/mld_threads.h b/usrp/host/lib/mld_threads.h deleted file mode 100644 index 1653e83e..00000000 --- a/usrp/host/lib/mld_threads.h +++ /dev/null @@ -1,257 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio. - * - * Primary Author: Michael Dickens, NCIP Lab, University of Notre Dame - * - * 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. - */ - -#ifndef _INCLUDED_MLD_THREADS_H_ -#define _INCLUDED_MLD_THREADS_H_ - -/* classes which allow for either pthreads or omni_threads */ - -#ifdef _USE_OMNI_THREADS_ -#include -#else -#include -#endif - -#include - -#define __INLINE__ inline - -class mld_condition_t; - -class mld_mutex_t { -#ifdef _USE_OMNI_THREADS_ - typedef omni_mutex l_mutex, *l_mutex_ptr; -#else - typedef pthread_mutex_t l_mutex, *l_mutex_ptr; -#endif - - friend class mld_condition_t; - -private: - l_mutex_ptr d_mutex; - -protected: - inline l_mutex_ptr mutex () { return (d_mutex); }; - -public: - __INLINE__ mld_mutex_t () { -#ifdef _USE_OMNI_THREADS_ - d_mutex = new omni_mutex (); -#else - d_mutex = (l_mutex_ptr) new l_mutex; - int l_ret = pthread_mutex_init (d_mutex, NULL); - if (l_ret != 0) { - fprintf (stderr, "Error %d creating mutex.\n", l_ret); - throw std::runtime_error ("mld_mutex_t::mld_mutex_t()\n"); - } -#endif - }; - - __INLINE__ ~mld_mutex_t () { - unlock (); -#ifndef _USE_OMNI_THREADS_ - int l_ret = pthread_mutex_destroy (d_mutex); - if (l_ret != 0) { - fprintf (stderr, "mld_mutex_t::~mld_mutex_t(): " - "Error %d destroying mutex.\n", l_ret); - } -#endif - delete d_mutex; - d_mutex = NULL; - }; - - __INLINE__ void lock () { -#ifdef _USE_OMNI_THREADS_ - d_mutex->lock (); -#else - int l_ret = pthread_mutex_lock (d_mutex); - if (l_ret != 0) { - fprintf (stderr, "mld_mutex_t::lock(): " - "Error %d locking mutex.\n", l_ret); - } -#endif - }; - - __INLINE__ void unlock () { -#ifdef _USE_OMNI_THREADS_ - d_mutex->unlock (); -#else - int l_ret = pthread_mutex_unlock (d_mutex); - if (l_ret != 0) { - fprintf (stderr, "mld_mutex_t::unlock(): " - "Error %d locking mutex.\n", l_ret); - } -#endif - }; - - __INLINE__ bool trylock () { -#ifdef _USE_OMNI_THREADS_ - int l_ret = d_mutex->trylock (); -#else - int l_ret = pthread_mutex_unlock (d_mutex); -#endif - return (l_ret == 0 ? true : false); - }; - - inline void acquire () { lock(); }; - inline void release () { unlock(); }; - inline void wait () { lock(); }; - inline void post () { unlock(); }; -}; - -typedef mld_mutex_t mld_mutex, *mld_mutex_ptr; - -class mld_condition_t { -#ifdef _USE_OMNI_THREADS_ - typedef omni_condition l_condition, *l_condition_ptr; -#else - typedef pthread_cond_t l_condition, *l_condition_ptr; -#endif - -private: - l_condition_ptr d_condition; - mld_mutex_ptr d_mutex; - bool d_waiting; - -public: - __INLINE__ mld_condition_t () { - d_waiting = false; - d_mutex = new mld_mutex (); -#ifdef _USE_OMNI_THREADS_ - d_condition = new omni_condition (d_mutex->mutex ()); -#else - d_condition = (l_condition_ptr) new l_condition; - int l_ret = pthread_cond_init (d_condition, NULL); - if (l_ret != 0) { - fprintf (stderr, "Error %d creating condition.\n", l_ret); - throw std::runtime_error ("mld_condition_t::mld_condition_t()\n"); - } -#endif - }; - - __INLINE__ ~mld_condition_t () { - signal (); -#ifndef _USE_OMNI_THREADS_ - int l_ret = pthread_cond_destroy (d_condition); - if (l_ret != 0) { - fprintf (stderr, "mld_condition_t::mld_condition_t(): " - "Error %d destroying condition.\n", l_ret); - } -#endif - delete d_condition; - d_condition = NULL; - delete d_mutex; - d_mutex = NULL; - }; - - __INLINE__ void signal () { - if (d_waiting == true) { -#ifdef _USE_OMNI_THREADS_ - d_condition->signal (); -#else - int l_ret = pthread_cond_signal (d_condition); - if (l_ret != 0) { - fprintf (stderr, "mld_condition_t::signal(): " - "Error %d.\n", l_ret); - } -#endif - d_waiting = false; - } - }; - - __INLINE__ void wait () { - if (d_waiting == false) { - d_waiting = true; -#ifdef _USE_OMNI_THREADS_ - d_condition->wait (); -#else - int l_ret = pthread_cond_wait (d_condition, d_mutex->mutex ()); - if (l_ret != 0) { - fprintf (stderr, "mld_condition_t::wait(): " - "Error %d.\n", l_ret); - } -#endif - } - }; -}; - -typedef mld_condition_t mld_condition, *mld_condition_ptr; - -class mld_thread_t { -#ifdef _USE_OMNI_THREADS_ - typedef omni_thread l_thread, *l_thread_ptr; -#else - typedef pthread_t l_thread, *l_thread_ptr; -#endif - -private: -#ifndef _USE_OMNI_THREADS_ - l_thread d_thread; - void (*d_start_routine)(void*); - void *d_arg; -#else - l_thread_ptr d_thread; -#endif - -#ifndef _USE_OMNI_THREADS_ - static void* local_start_routine (void *arg) { - mld_thread_t* This = (mld_thread_t*) arg; - (*(This->d_start_routine))(This->d_arg); - return (NULL); - }; -#endif - -public: - __INLINE__ mld_thread_t (void (*start_routine)(void *), void *arg) { -#ifdef _USE_OMNI_THREADS_ - d_thread = new omni_thread (start_routine, arg); - d_thread->start (); -#else - d_start_routine = start_routine; - d_arg = arg; - int l_ret = pthread_create (&d_thread, NULL, local_start_routine, this); - if (l_ret != 0) { - fprintf (stderr, "Error %d creating thread.\n", l_ret); - throw std::runtime_error ("mld_thread_t::mld_thread_t()\n"); - } -#endif - }; - - __INLINE__ ~mld_thread_t () { -#ifdef _USE_OMNI_THREADS_ -// delete d_thread; - d_thread = NULL; -#else - int l_ret = pthread_detach (d_thread); - if (l_ret != 0) { - fprintf (stderr, "Error %d detaching thread.\n", l_ret); - throw std::runtime_error ("mld_thread_t::~mld_thread_t()\n"); - } -#endif - }; -}; - -typedef mld_thread_t mld_thread, *mld_thread_ptr; - -#endif /* _INCLUDED_MLD_THREADS_H_ */ diff --git a/usrp/host/lib/std_paths.h.in b/usrp/host/lib/std_paths.h.in deleted file mode 100644 index 9c26cfa2..00000000 --- a/usrp/host/lib/std_paths.h.in +++ /dev/null @@ -1,27 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 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. - */ - -static char *std_paths[] = { - "@prefix@/share/usrp", - "/usr/local/share/usrp", - 0 -}; diff --git a/usrp/host/lib/usrp_basic.cc b/usrp/host/lib/usrp_basic.cc deleted file mode 100644 index 8bb4a191..00000000 --- a/usrp/host/lib/usrp_basic.cc +++ /dev/null @@ -1,1242 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "usrp_basic.h" -#include "usrp_prims.h" -#include "usrp_interfaces.h" -#include "fpga_regs_common.h" -#include "fusb.h" -#include -#include -#include -#include -#include - -using namespace ad9862; - -#define NELEM(x) (sizeof (x) / sizeof (x[0])) - -// These set the buffer size used for each end point using the fast -// usb interface. The kernel ends up locking down this much memory. - -static const int FUSB_BUFFER_SIZE = fusb_sysconfig::default_buffer_size(); -static const int FUSB_BLOCK_SIZE = fusb_sysconfig::max_block_size(); -static const int FUSB_NBLOCKS = FUSB_BUFFER_SIZE / FUSB_BLOCK_SIZE; - - -static const double POLLING_INTERVAL = 0.1; // seconds - -//////////////////////////////////////////////////////////////// - -static struct usb_dev_handle * -open_rx_interface (struct usb_device *dev) -{ - struct usb_dev_handle *udh = usrp_open_rx_interface (dev); - if (udh == 0){ - fprintf (stderr, "usrp_basic_rx: can't open rx interface\n"); - usb_strerror (); - } - return udh; -} - -static struct usb_dev_handle * -open_tx_interface (struct usb_device *dev) -{ - struct usb_dev_handle *udh = usrp_open_tx_interface (dev); - if (udh == 0){ - fprintf (stderr, "usrp_basic_tx: can't open tx interface\n"); - usb_strerror (); - } - return udh; -} - - -////////////////////////////////////////////////////////////////// -// -// usrp_basic -// -//////////////////////////////////////////////////////////////// - - -// Given: -// CLKIN = 64 MHz -// CLKSEL pin = high -// -// These settings give us: -// CLKOUT1 = CLKIN = 64 MHz -// CLKOUT2 = CLKIN = 64 MHz -// ADC is clocked at 64 MHz -// DAC is clocked at 128 MHz - -static unsigned char common_regs[] = { - REG_GENERAL, 0, - REG_DLL, (DLL_DISABLE_INTERNAL_XTAL_OSC - | DLL_MULT_2X - | DLL_FAST), - REG_CLKOUT, CLKOUT2_EQ_DLL_OVER_2, - REG_AUX_ADC_CLK, AUX_ADC_CLK_CLK_OVER_4 -}; - - -usrp_basic::usrp_basic (int which_board, - struct usb_dev_handle * - open_interface (struct usb_device *dev), - const std::string fpga_filename, - const std::string firmware_filename) - : d_udh (0), - d_usb_data_rate (16000000), // SWAG, see below - d_bytes_per_poll ((int) (POLLING_INTERVAL * d_usb_data_rate)), - d_verbose (false) -{ - /* - * SWAG: Scientific Wild Ass Guess. - * - * d_usb_data_rate is used only to determine how often to poll for over- and under-runs. - * We defualt it to 1/2 of our best case. Classes derived from usrp_basic (e.g., - * usrp_standard_tx and usrp_standard_rx) call set_usb_data_rate() to tell us the - * actual rate. This doesn't change our throughput, that's determined by the signal - * processing code in the FPGA (which we know nothing about), and the system limits - * determined by libusb, fusb_*, and the underlying drivers. - */ - memset (d_fpga_shadows, 0, sizeof (d_fpga_shadows)); - - usrp_one_time_init (); - - if (!usrp_load_standard_bits (which_board, false, fpga_filename, firmware_filename)) - throw std::runtime_error ("usrp_basic/usrp_load_standard_bits"); - - struct usb_device *dev = usrp_find_device (which_board); - if (dev == 0){ - fprintf (stderr, "usrp_basic: can't find usrp[%d]\n", which_board); - throw std::runtime_error ("usrp_basic/usrp_find_device"); - } - - if (!(usrp_usrp_p(dev) && usrp_hw_rev(dev) >= 1)){ - fprintf (stderr, "usrp_basic: sorry, this code only works with USRP revs >= 1\n"); - throw std::runtime_error ("usrp_basic/bad_rev"); - } - - if ((d_udh = open_interface (dev)) == 0) - throw std::runtime_error ("usrp_basic/open_interface"); - - // initialize registers that are common to rx and tx - - if (!usrp_9862_write_many_all (d_udh, common_regs, sizeof (common_regs))){ - fprintf (stderr, "usrp_basic: failed to init common AD9862 regs\n"); - throw std::runtime_error ("usrp_basic/init_9862"); - } - - _write_fpga_reg (FR_MODE, 0); // ensure we're in normal mode - _write_fpga_reg (FR_DEBUG_EN, 0); // disable debug outputs -} - -usrp_basic::~usrp_basic () -{ - if (d_udh) - usb_close (d_udh); -} - -bool -usrp_basic::start () -{ - return true; // nop -} - -bool -usrp_basic::stop () -{ - return true; // nop -} - -void -usrp_basic::set_usb_data_rate (int usb_data_rate) -{ - d_usb_data_rate = usb_data_rate; - d_bytes_per_poll = (int) (usb_data_rate * POLLING_INTERVAL); -} - -bool -usrp_basic::write_aux_dac (int slot, int which_dac, int value) -{ - return usrp_write_aux_dac (d_udh, slot, which_dac, value); -} - -bool -usrp_basic::read_aux_adc (int slot, int which_adc, int *value) -{ - return usrp_read_aux_adc (d_udh, slot, which_adc, value); -} - -int -usrp_basic::read_aux_adc (int slot, int which_adc) -{ - int value; - if (!read_aux_adc (slot, which_adc, &value)) - return READ_FAILED; - - return value; -} - -bool -usrp_basic::write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf) -{ - return usrp_eeprom_write (d_udh, i2c_addr, eeprom_offset, buf.data (), buf.size ()); -} - -std::string -usrp_basic::read_eeprom (int i2c_addr, int eeprom_offset, int len) -{ - if (len <= 0) - return ""; - - char buf[len]; - - if (!usrp_eeprom_read (d_udh, i2c_addr, eeprom_offset, buf, len)) - return ""; - - return std::string (buf, len); -} - -bool -usrp_basic::write_i2c (int i2c_addr, const std::string buf) -{ - return usrp_i2c_write (d_udh, i2c_addr, buf.data (), buf.size ()); -} - -std::string -usrp_basic::read_i2c (int i2c_addr, int len) -{ - if (len <= 0) - return ""; - - char buf[len]; - - if (!usrp_i2c_read (d_udh, i2c_addr, buf, len)) - return ""; - - return std::string (buf, len); -} - -std::string -usrp_basic::serial_number() -{ - return usrp_serial_number(d_udh); -} - -// ---------------------------------------------------------------- - -bool -usrp_basic::set_adc_offset (int which, int offset) -{ - if (which < 0 || which > 3) - return false; - - return _write_fpga_reg (FR_ADC_OFFSET_0 + which, offset); -} - -bool -usrp_basic::set_dac_offset (int which, int offset, int offset_pin) -{ - if (which < 0 || which > 3) - return false; - - int which_codec = which >> 1; - int tx_a = (which & 0x1) == 0; - int lo = ((offset & 0x3) << 6) | (offset_pin & 0x1); - int hi = (offset >> 2); - bool ok; - - if (tx_a){ - ok = _write_9862 (which_codec, REG_TX_A_OFFSET_LO, lo); - ok &= _write_9862 (which_codec, REG_TX_A_OFFSET_HI, hi); - } - else { - ok = _write_9862 (which_codec, REG_TX_B_OFFSET_LO, lo); - ok &= _write_9862 (which_codec, REG_TX_B_OFFSET_HI, hi); - } - return ok; -} - -bool -usrp_basic::set_adc_buffer_bypass (int which, bool bypass) -{ - if (which < 0 || which > 3) - return false; - - int codec = which >> 1; - int reg = (which & 1) == 0 ? REG_RX_A : REG_RX_B; - - unsigned char cur_rx; - unsigned char cur_pwr_dn; - - // If the input buffer is bypassed, we need to power it down too. - - bool ok = _read_9862 (codec, reg, &cur_rx); - ok &= _read_9862 (codec, REG_RX_PWR_DN, &cur_pwr_dn); - if (!ok) - return false; - - if (bypass){ - cur_rx |= RX_X_BYPASS_INPUT_BUFFER; - cur_pwr_dn |= ((which & 1) == 0) ? RX_PWR_DN_BUF_A : RX_PWR_DN_BUF_B; - } - else { - cur_rx &= ~RX_X_BYPASS_INPUT_BUFFER; - cur_pwr_dn &= ~(((which & 1) == 0) ? RX_PWR_DN_BUF_A : RX_PWR_DN_BUF_B); - } - - ok &= _write_9862 (codec, reg, cur_rx); - ok &= _write_9862 (codec, REG_RX_PWR_DN, cur_pwr_dn); - return ok; -} - -// ---------------------------------------------------------------- - -bool -usrp_basic::_write_fpga_reg (int regno, int value) -{ - if (d_verbose){ - fprintf (stdout, "_write_fpga_reg(%3d, 0x%08x)\n", regno, value); - fflush (stdout); - } - - if (regno >= 0 && regno < MAX_REGS) - d_fpga_shadows[regno] = value; - - return usrp_write_fpga_reg (d_udh, regno, value); -} - -bool -usrp_basic::_write_fpga_reg_masked (int regno, int value, int mask) -{ - //Only use this for registers who actually use a mask in the verilog firmware, like FR_RX_MASTER_SLAVE - //value is a 16 bits value and mask is a 16 bits mask - if (d_verbose){ - fprintf (stdout, "_write_fpga_reg_masked(%3d, 0x%04x,0x%04x)\n", regno, value, mask); - fflush (stdout); - } - - if (regno >= 0 && regno < MAX_REGS) - d_fpga_shadows[regno] = value; - - return usrp_write_fpga_reg (d_udh, regno, (value & 0xffff) | ((mask & 0xffff)<<16)); -} - - -bool -usrp_basic::_read_fpga_reg (int regno, int *value) -{ - return usrp_read_fpga_reg (d_udh, regno, value); -} - -int -usrp_basic::_read_fpga_reg (int regno) -{ - int value; - if (!_read_fpga_reg (regno, &value)) - return READ_FAILED; - return value; -} - -bool -usrp_basic::_write_9862 (int which_codec, int regno, unsigned char value) -{ - if (0 && d_verbose){ - // FIXME really want to enable logging in usrp_prims:usrp_9862_write - fprintf(stdout, "_write_9862(codec = %d, regno = %2d, val = 0x%02x)\n", which_codec, regno, value); - fflush(stdout); - } - - return usrp_9862_write (d_udh, which_codec, regno, value); -} - - -bool -usrp_basic::_read_9862 (int which_codec, int regno, unsigned char *value) const -{ - return usrp_9862_read (d_udh, which_codec, regno, value); -} - -int -usrp_basic::_read_9862 (int which_codec, int regno) const -{ - unsigned char value; - if (!_read_9862 (which_codec, regno, &value)) - return READ_FAILED; - return value; -} - -bool -usrp_basic::_write_spi (int optional_header, int enables, int format, std::string buf) -{ - return usrp_spi_write (d_udh, optional_header, enables, format, - buf.data(), buf.size()); -} - -std::string -usrp_basic::_read_spi (int optional_header, int enables, int format, int len) -{ - if (len <= 0) - return ""; - - char buf[len]; - - if (!usrp_spi_read (d_udh, optional_header, enables, format, buf, len)) - return ""; - - return std::string (buf, len); -} - - -bool -usrp_basic::_set_led (int which, bool on) -{ - return usrp_set_led (d_udh, which, on); -} - -//////////////////////////////////////////////////////////////// -// -// usrp_basic_rx -// -//////////////////////////////////////////////////////////////// - -static unsigned char rx_init_regs[] = { - REG_RX_PWR_DN, 0, - REG_RX_A, 0, // minimum gain = 0x00 (max gain = 0x14) - REG_RX_B, 0, // minimum gain = 0x00 (max gain = 0x14) - REG_RX_MISC, (RX_MISC_HS_DUTY_CYCLE | RX_MISC_CLK_DUTY), - REG_RX_IF, (RX_IF_USE_CLKOUT1 - | RX_IF_2S_COMP), - REG_RX_DIGITAL, (RX_DIGITAL_2_CHAN) -}; - - -usrp_basic_rx::usrp_basic_rx (int which_board, int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) - : usrp_basic (which_board, open_rx_interface, fpga_filename, firmware_filename), - d_devhandle (0), d_ephandle (0), - d_bytes_seen (0), d_first_read (true), - d_rx_enable (false) -{ - // initialize rx specific registers - - if (!usrp_9862_write_many_all (d_udh, rx_init_regs, sizeof (rx_init_regs))){ - fprintf (stderr, "usrp_basic_rx: failed to init AD9862 RX regs\n"); - throw std::runtime_error ("usrp_basic_rx/init_9862"); - } - - if (0){ - // FIXME power down 2nd codec rx path - usrp_9862_write (d_udh, 1, REG_RX_PWR_DN, 0x1); // power down everything - } - - // Reset the rx path and leave it disabled. - set_rx_enable (false); - usrp_set_fpga_rx_reset (d_udh, true); - usrp_set_fpga_rx_reset (d_udh, false); - - set_fpga_rx_sample_rate_divisor (2); // usually correct - - set_dc_offset_cl_enable(0xf, 0xf); // enable DC offset removal control loops - - probe_rx_slots (false); - - // check fusb buffering parameters - - if (fusb_block_size < 0 || fusb_block_size > FUSB_BLOCK_SIZE) - throw std::out_of_range ("usrp_basic_rx: invalid fusb_block_size"); - - if (fusb_nblocks < 0) - throw std::out_of_range ("usrp_basic_rx: invalid fusb_nblocks"); - - if (fusb_block_size == 0) - fusb_block_size = fusb_sysconfig::default_block_size(); - - if (fusb_nblocks == 0) - fusb_nblocks = std::max (1, FUSB_BUFFER_SIZE / fusb_block_size); - - d_devhandle = fusb_sysconfig::make_devhandle (d_udh); - d_ephandle = d_devhandle->make_ephandle (USRP_RX_ENDPOINT, true, - fusb_block_size, fusb_nblocks); - - _write_fpga_reg(FR_ATR_MASK_1, 0); // zero Rx side Auto Transmit/Receive regs - _write_fpga_reg(FR_ATR_TXVAL_1, 0); - _write_fpga_reg(FR_ATR_RXVAL_1, 0); - _write_fpga_reg(FR_ATR_MASK_3, 0); - _write_fpga_reg(FR_ATR_TXVAL_3, 0); - _write_fpga_reg(FR_ATR_RXVAL_3, 0); -} - -static unsigned char rx_fini_regs[] = { - REG_RX_PWR_DN, 0x1 // power down everything -}; - -usrp_basic_rx::~usrp_basic_rx () -{ - if (!set_rx_enable (false)){ - fprintf (stderr, "usrp_basic_rx: set_fpga_rx_enable failed\n"); - usb_strerror (); - } - - d_ephandle->stop (); - delete d_ephandle; - delete d_devhandle; - - if (!usrp_9862_write_many_all (d_udh, rx_fini_regs, sizeof (rx_fini_regs))){ - fprintf (stderr, "usrp_basic_rx: failed to fini AD9862 RX regs\n"); - } -} - - -bool -usrp_basic_rx::start () -{ - if (!usrp_basic::start ()) // invoke parent's method - return false; - - // fire off reads before asserting rx_enable - - if (!d_ephandle->start ()){ - fprintf (stderr, "usrp_basic_rx: failed to start end point streaming"); - usb_strerror (); - return false; - } - - if (!set_rx_enable (true)){ - fprintf (stderr, "usrp_basic_rx: set_rx_enable failed\n"); - usb_strerror (); - return false; - } - - return true; -} - -bool -usrp_basic_rx::stop () -{ - bool ok = usrp_basic::stop(); - - if (!set_rx_enable(false)){ - fprintf (stderr, "usrp_basic_rx: set_rx_enable(false) failed\n"); - usb_strerror (); - ok = false; - } - - if (!d_ephandle->stop()){ - fprintf (stderr, "usrp_basic_rx: failed to stop end point streaming"); - usb_strerror (); - ok = false; - } - - return ok; -} - -usrp_basic_rx * -usrp_basic_rx::make (int which_board, int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename) -{ - usrp_basic_rx *u = 0; - - try { - u = new usrp_basic_rx (which_board, fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename); - return u; - } - catch (...){ - delete u; - return 0; - } - - return u; -} - -bool -usrp_basic_rx::set_fpga_rx_sample_rate_divisor (unsigned int div) -{ - return _write_fpga_reg (FR_RX_SAMPLE_RATE_DIV, div - 1); -} - - -/* - * \brief read data from the D/A's via the FPGA. - * \p len must be a multiple of 512 bytes. - * - * \returns the number of bytes read, or -1 on error. - * - * If overrun is non-NULL it will be set true iff an RX overrun is detected. - */ -int -usrp_basic_rx::read (void *buf, int len, bool *overrun) -{ - int r; - - if (overrun) - *overrun = false; - - if (len < 0 || (len % 512) != 0){ - fprintf (stderr, "usrp_basic_rx::read: invalid length = %d\n", len); - return -1; - } - - r = d_ephandle->read (buf, len); - if (r > 0) - d_bytes_seen += r; - - /* - * In many cases, the FPGA reports an rx overrun right after we - * enable the Rx path. If this is our first read, check for the - * overrun to clear the condition, then ignore the result. - */ - if (0 && d_first_read){ // FIXME - d_first_read = false; - bool bogus_overrun; - usrp_check_rx_overrun (d_udh, &bogus_overrun); - } - - if (overrun != 0 && d_bytes_seen >= d_bytes_per_poll){ - d_bytes_seen = 0; - if (!usrp_check_rx_overrun (d_udh, overrun)){ - fprintf (stderr, "usrp_basic_rx: usrp_check_rx_overrun failed\n"); - usb_strerror (); - } - } - - return r; -} - -bool -usrp_basic_rx::set_rx_enable (bool on) -{ - d_rx_enable = on; - return usrp_set_fpga_rx_enable (d_udh, on); -} - -// conditional disable, return prev state -bool -usrp_basic_rx::disable_rx () -{ - bool enabled = rx_enable (); - if (enabled) - set_rx_enable (false); - return enabled; -} - -// conditional set -void -usrp_basic_rx::restore_rx (bool on) -{ - if (on != rx_enable ()) - set_rx_enable (on); -} - -bool -usrp_basic_rx::set_pga (int which, double gain) -{ - if (which < 0 || which > 3) - return false; - - gain = std::max (pga_min (), gain); - gain = std::min (pga_max (), gain); - - int codec = which >> 1; - int reg = (which & 1) == 0 ? REG_RX_A : REG_RX_B; - - // read current value to get input buffer bypass flag. - unsigned char cur_rx; - if (!_read_9862 (codec, reg, &cur_rx)) - return false; - - int int_gain = (int) rint ((gain - pga_min ()) / pga_db_per_step()); - - cur_rx = (cur_rx & RX_X_BYPASS_INPUT_BUFFER) | (int_gain & 0x7f); - return _write_9862 (codec, reg, cur_rx); -} - -double -usrp_basic_rx::pga (int which) const -{ - if (which < 0 || which > 3) - return READ_FAILED; - - int codec = which >> 1; - int reg = (which & 1) == 0 ? REG_RX_A : REG_RX_B; - unsigned char v; - bool ok = _read_9862 (codec, reg, &v); - if (!ok) - return READ_FAILED; - - return (pga_db_per_step() * (v & 0x1f)) + pga_min(); -} - -static int -slot_id_to_oe_reg (int slot_id) -{ - static int reg[4] = { FR_OE_0, FR_OE_1, FR_OE_2, FR_OE_3 }; - assert (0 <= slot_id && slot_id < 4); - return reg[slot_id]; -} - -static int -slot_id_to_io_reg (int slot_id) -{ - static int reg[4] = { FR_IO_0, FR_IO_1, FR_IO_2, FR_IO_3 }; - assert (0 <= slot_id && slot_id < 4); - return reg[slot_id]; -} - -void -usrp_basic_rx::probe_rx_slots (bool verbose) -{ - struct usrp_dboard_eeprom eeprom; - static int slot_id_map[2] = { SLOT_RX_A, SLOT_RX_B }; - static const char *slot_name[2] = { "RX d'board A", "RX d'board B" }; - - for (int i = 0; i < 2; i++){ - int slot_id = slot_id_map [i]; - const char *msg = 0; - usrp_dbeeprom_status_t s = usrp_read_dboard_eeprom (d_udh, slot_id, &eeprom); - - switch (s){ - case UDBE_OK: - d_dbid[i] = eeprom.id; - msg = usrp_dbid_to_string (eeprom.id).c_str (); - set_adc_offset (2*i+0, eeprom.offset[0]); - set_adc_offset (2*i+1, eeprom.offset[1]); - _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | eeprom.oe); - _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); - break; - - case UDBE_NO_EEPROM: - d_dbid[i] = -1; - msg = ""; - _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); - _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); - break; - - case UDBE_INVALID_EEPROM: - d_dbid[i] = -2; - msg = "Invalid EEPROM contents"; - _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); - _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); - break; - - case UDBE_BAD_SLOT: - default: - assert (0); - } - - if (verbose){ - fflush (stdout); - fprintf (stderr, "%s: %s\n", slot_name[i], msg); - } - } -} - -bool -usrp_basic_rx::_write_oe (int which_dboard, int value, int mask) -{ - if (! (0 <= which_dboard && which_dboard <= 1)) - return false; - - return _write_fpga_reg (slot_id_to_oe_reg (dboard_to_slot (which_dboard)), - (mask << 16) | (value & 0xffff)); -} - -bool -usrp_basic_rx::write_io (int which_dboard, int value, int mask) -{ - if (! (0 <= which_dboard && which_dboard <= 1)) - return false; - - return _write_fpga_reg (slot_id_to_io_reg (dboard_to_slot (which_dboard)), - (mask << 16) | (value & 0xffff)); -} - -bool -usrp_basic_rx::read_io (int which_dboard, int *value) -{ - if (! (0 <= which_dboard && which_dboard <= 1)) - return false; - - int t; - int reg = which_dboard + 1; // FIXME, *very* magic number (fix in serial_io.v) - bool ok = _read_fpga_reg (reg, &t); - if (!ok) - return false; - - *value = (t >> 16) & 0xffff; // FIXME, more magic - return true; -} - -int -usrp_basic_rx::read_io (int which_dboard) -{ - int value; - if (!read_io (which_dboard, &value)) - return READ_FAILED; - return value; -} - -bool -usrp_basic_rx::write_aux_dac (int which_dboard, int which_dac, int value) -{ - return usrp_basic::write_aux_dac (dboard_to_slot (which_dboard), - which_dac, value); -} - -bool -usrp_basic_rx::read_aux_adc (int which_dboard, int which_adc, int *value) -{ - return usrp_basic::read_aux_adc (dboard_to_slot (which_dboard), - which_adc, value); -} - -int -usrp_basic_rx::read_aux_adc (int which_dboard, int which_adc) -{ - return usrp_basic::read_aux_adc (dboard_to_slot (which_dboard), which_adc); -} - -int -usrp_basic_rx::block_size () const { return d_ephandle->block_size(); } - -bool -usrp_basic_rx::set_dc_offset_cl_enable(int bits, int mask) -{ - return _write_fpga_reg(FR_DC_OFFSET_CL_EN, - (d_fpga_shadows[FR_DC_OFFSET_CL_EN] & ~mask) | (bits & mask)); -} - -//////////////////////////////////////////////////////////////// -// -// usrp_basic_tx -// -//////////////////////////////////////////////////////////////// - - -// -// DAC input rate 64 MHz interleaved for a total input rate of 128 MHz -// DAC input is latched on rising edge of CLKOUT2 -// NCO is disabled -// interpolate 2x -// coarse modulator disabled -// - -static unsigned char tx_init_regs[] = { - REG_TX_PWR_DN, 0, - REG_TX_A_OFFSET_LO, 0, - REG_TX_A_OFFSET_HI, 0, - REG_TX_B_OFFSET_LO, 0, - REG_TX_B_OFFSET_HI, 0, - REG_TX_A_GAIN, (TX_X_GAIN_COARSE_FULL | 0), - REG_TX_B_GAIN, (TX_X_GAIN_COARSE_FULL | 0), - REG_TX_PGA, 0xff, // maximum gain (0 dB) - REG_TX_MISC, 0, - REG_TX_IF, (TX_IF_USE_CLKOUT1 - | TX_IF_I_FIRST - | TX_IF_INV_TX_SYNC - | TX_IF_2S_COMP - | TX_IF_INTERLEAVED), - REG_TX_DIGITAL, (TX_DIGITAL_2_DATA_PATHS - | TX_DIGITAL_INTERPOLATE_4X), - REG_TX_MODULATOR, (TX_MODULATOR_DISABLE_NCO - | TX_MODULATOR_COARSE_MODULATION_NONE), - REG_TX_NCO_FTW_7_0, 0, - REG_TX_NCO_FTW_15_8, 0, - REG_TX_NCO_FTW_23_16, 0 -}; - -usrp_basic_tx::usrp_basic_tx (int which_board, int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename) - : usrp_basic (which_board, open_tx_interface, fpga_filename, firmware_filename), - d_devhandle (0), d_ephandle (0), - d_bytes_seen (0), d_first_write (true), - d_tx_enable (false) -{ - if (!usrp_9862_write_many_all (d_udh, tx_init_regs, sizeof (tx_init_regs))){ - fprintf (stderr, "usrp_basic_tx: failed to init AD9862 TX regs\n"); - throw std::runtime_error ("usrp_basic_tx/init_9862"); - } - - if (0){ - // FIXME power down 2nd codec tx path - usrp_9862_write (d_udh, 1, REG_TX_PWR_DN, - (TX_PWR_DN_TX_DIGITAL - | TX_PWR_DN_TX_ANALOG_BOTH)); - } - - // Reset the tx path and leave it disabled. - set_tx_enable (false); - usrp_set_fpga_tx_reset (d_udh, true); - usrp_set_fpga_tx_reset (d_udh, false); - - set_fpga_tx_sample_rate_divisor (4); // we're using interp x4 - - probe_tx_slots (false); - - // check fusb buffering parameters - - if (fusb_block_size < 0 || fusb_block_size > FUSB_BLOCK_SIZE) - throw std::out_of_range ("usrp_basic_rx: invalid fusb_block_size"); - - if (fusb_nblocks < 0) - throw std::out_of_range ("usrp_basic_rx: invalid fusb_nblocks"); - - if (fusb_block_size == 0) - fusb_block_size = FUSB_BLOCK_SIZE; - - if (fusb_nblocks == 0) - fusb_nblocks = std::max (1, FUSB_BUFFER_SIZE / fusb_block_size); - - d_devhandle = fusb_sysconfig::make_devhandle (d_udh); - d_ephandle = d_devhandle->make_ephandle (USRP_TX_ENDPOINT, false, - fusb_block_size, fusb_nblocks); - - _write_fpga_reg(FR_ATR_MASK_0, 0); // zero Tx side Auto Transmit/Receive regs - _write_fpga_reg(FR_ATR_TXVAL_0, 0); - _write_fpga_reg(FR_ATR_RXVAL_0, 0); - _write_fpga_reg(FR_ATR_MASK_2, 0); - _write_fpga_reg(FR_ATR_TXVAL_2, 0); - _write_fpga_reg(FR_ATR_RXVAL_2, 0); -} - - -static unsigned char tx_fini_regs[] = { - REG_TX_PWR_DN, (TX_PWR_DN_TX_DIGITAL - | TX_PWR_DN_TX_ANALOG_BOTH), - REG_TX_MODULATOR, (TX_MODULATOR_DISABLE_NCO - | TX_MODULATOR_COARSE_MODULATION_NONE) -}; - -usrp_basic_tx::~usrp_basic_tx () -{ - d_ephandle->stop (); - delete d_ephandle; - delete d_devhandle; - - if (!usrp_9862_write_many_all (d_udh, tx_fini_regs, sizeof (tx_fini_regs))){ - fprintf (stderr, "usrp_basic_tx: failed to fini AD9862 TX regs\n"); - } -} - -bool -usrp_basic_tx::start () -{ - if (!usrp_basic::start ()) - return false; - - if (!set_tx_enable (true)){ - fprintf (stderr, "usrp_basic_tx: set_tx_enable failed\n"); - usb_strerror (); - return false; - } - - if (!d_ephandle->start ()){ - fprintf (stderr, "usrp_basic_tx: failed to start end point streaming"); - usb_strerror (); - return false; - } - - return true; -} - -bool -usrp_basic_tx::stop () -{ - bool ok = usrp_basic::stop (); - - if (!d_ephandle->stop ()){ - fprintf (stderr, "usrp_basic_tx: failed to stop end point streaming"); - usb_strerror (); - ok = false; - } - - if (!set_tx_enable (false)){ - fprintf (stderr, "usrp_basic_tx: set_tx_enable(false) failed\n"); - usb_strerror (); - ok = false; - } - - return ok; -} - -usrp_basic_tx * -usrp_basic_tx::make (int which_board, int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename) -{ - usrp_basic_tx *u = 0; - - try { - u = new usrp_basic_tx (which_board, fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename); - return u; - } - catch (...){ - delete u; - return 0; - } - - return u; -} - -bool -usrp_basic_tx::set_fpga_tx_sample_rate_divisor (unsigned int div) -{ - return _write_fpga_reg (FR_TX_SAMPLE_RATE_DIV, div - 1); -} - -/*! - * \brief Write data to the A/D's via the FPGA. - * - * \p len must be a multiple of 512 bytes. - * \returns number of bytes written or -1 on error. - * - * if \p underrun is non-NULL, it will be set to true iff - * a transmit underrun condition is detected. - */ -int -usrp_basic_tx::write (const void *buf, int len, bool *underrun) -{ - int r; - - if (underrun) - *underrun = false; - - if (len < 0 || (len % 512) != 0){ - fprintf (stderr, "usrp_basic_tx::write: invalid length = %d\n", len); - return -1; - } - - r = d_ephandle->write (buf, len); - if (r > 0) - d_bytes_seen += r; - - /* - * In many cases, the FPGA reports an tx underrun right after we - * enable the Tx path. If this is our first write, check for the - * underrun to clear the condition, then ignore the result. - */ - if (d_first_write && d_bytes_seen >= 4 * FUSB_BLOCK_SIZE){ - d_first_write = false; - bool bogus_underrun; - usrp_check_tx_underrun (d_udh, &bogus_underrun); - } - - if (underrun != 0 && d_bytes_seen >= d_bytes_per_poll){ - d_bytes_seen = 0; - if (!usrp_check_tx_underrun (d_udh, underrun)){ - fprintf (stderr, "usrp_basic_tx: usrp_check_tx_underrun failed\n"); - usb_strerror (); - } - } - - return r; -} - -void -usrp_basic_tx::wait_for_completion () -{ - d_ephandle->wait_for_completion (); -} - -bool -usrp_basic_tx::set_tx_enable (bool on) -{ - d_tx_enable = on; - // fprintf (stderr, "set_tx_enable %d\n", on); - return usrp_set_fpga_tx_enable (d_udh, on); -} - -// conditional disable, return prev state -bool -usrp_basic_tx::disable_tx () -{ - bool enabled = tx_enable (); - if (enabled) - set_tx_enable (false); - return enabled; -} - -// conditional set -void -usrp_basic_tx::restore_tx (bool on) -{ - if (on != tx_enable ()) - set_tx_enable (on); -} - -bool -usrp_basic_tx::set_pga (int which, double gain) -{ - if (which < 0 || which > 3) - return false; - - gain = std::max (pga_min (), gain); - gain = std::min (pga_max (), gain); - - int codec = which >> 1; // 0 and 1 are same, as are 2 and 3 - - int int_gain = (int) rint ((gain - pga_min ()) / pga_db_per_step()); - - return _write_9862 (codec, REG_TX_PGA, int_gain); -} - -double -usrp_basic_tx::pga (int which) const -{ - if (which < 0 || which > 3) - return READ_FAILED; - - int codec = which >> 1; - unsigned char v; - bool ok = _read_9862 (codec, REG_TX_PGA, &v); - if (!ok) - return READ_FAILED; - - return (pga_db_per_step() * v) + pga_min(); -} - -void -usrp_basic_tx::probe_tx_slots (bool verbose) -{ - struct usrp_dboard_eeprom eeprom; - static int slot_id_map[2] = { SLOT_TX_A, SLOT_TX_B }; - static const char *slot_name[2] = { "TX d'board A", "TX d'board B" }; - - for (int i = 0; i < 2; i++){ - int slot_id = slot_id_map [i]; - const char *msg = 0; - usrp_dbeeprom_status_t s = usrp_read_dboard_eeprom (d_udh, slot_id, &eeprom); - - switch (s){ - case UDBE_OK: - d_dbid[i] = eeprom.id; - msg = usrp_dbid_to_string (eeprom.id).c_str (); - // FIXME, figure out interpretation of dc offset for TX d'boards - // offset = (eeprom.offset[1] << 16) | (eeprom.offset[0] & 0xffff); - _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | eeprom.oe); - _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); - break; - - case UDBE_NO_EEPROM: - d_dbid[i] = -1; - msg = ""; - _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); - _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); - break; - - case UDBE_INVALID_EEPROM: - d_dbid[i] = -2; - msg = "Invalid EEPROM contents"; - _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); - _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); - break; - - case UDBE_BAD_SLOT: - default: - assert (0); - } - - if (verbose){ - fflush (stdout); - fprintf (stderr, "%s: %s\n", slot_name[i], msg); - } - } -} - -bool -usrp_basic_tx::_write_oe (int which_dboard, int value, int mask) -{ - if (! (0 <= which_dboard && which_dboard <= 1)) - return false; - - return _write_fpga_reg (slot_id_to_oe_reg (dboard_to_slot (which_dboard)), - (mask << 16) | (value & 0xffff)); -} - -bool -usrp_basic_tx::write_io (int which_dboard, int value, int mask) -{ - if (! (0 <= which_dboard && which_dboard <= 1)) - return false; - - return _write_fpga_reg (slot_id_to_io_reg (dboard_to_slot (which_dboard)), - (mask << 16) | (value & 0xffff)); -} - -bool -usrp_basic_tx::read_io (int which_dboard, int *value) -{ - if (! (0 <= which_dboard && which_dboard <= 1)) - return false; - - int t; - int reg = which_dboard + 1; // FIXME, *very* magic number (fix in serial_io.v) - bool ok = _read_fpga_reg (reg, &t); - if (!ok) - return false; - - *value = t & 0xffff; // FIXME, more magic - return true; -} - -int -usrp_basic_tx::read_io (int which_dboard) -{ - int value; - if (!read_io (which_dboard, &value)) - return READ_FAILED; - return value; -} - -bool -usrp_basic_tx::write_aux_dac (int which_dboard, int which_dac, int value) -{ - return usrp_basic::write_aux_dac (dboard_to_slot (which_dboard), - which_dac, value); -} - -bool -usrp_basic_tx::read_aux_adc (int which_dboard, int which_adc, int *value) -{ - return usrp_basic::read_aux_adc (dboard_to_slot (which_dboard), - which_adc, value); -} - -int -usrp_basic_tx::read_aux_adc (int which_dboard, int which_adc) -{ - return usrp_basic::read_aux_adc (dboard_to_slot (which_dboard), which_adc); -} - -int -usrp_basic_tx::block_size () const { return d_ephandle->block_size(); } - diff --git a/usrp/host/lib/usrp_basic.h b/usrp/host/lib/usrp_basic.h deleted file mode 100644 index 395a1dac..00000000 --- a/usrp/host/lib/usrp_basic.h +++ /dev/null @@ -1,776 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,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. - */ - -/* - * ---------------------------------------------------------------------- - * Mid level interface to the Universal Software Radio Peripheral (Rev 1) - * - * These classes implement the basic functionality for talking to the - * USRP. They try to be as independent of the signal processing code - * in FPGA as possible. They implement access to the low level - * peripherals on the board, provide a common way for reading and - * writing registers in the FPGA, and provide the high speed interface - * to streaming data across the USB. - * - * It is expected that subclasses will be derived that provide - * access to the functionality to a particular FPGA configuration. - * ---------------------------------------------------------------------- - */ - -#ifndef INCLUDED_USRP_BASIC_H -#define INCLUDED_USRP_BASIC_H - -#include -#include - -struct usb_dev_handle; -class fusb_devhandle; -class fusb_ephandle; - -/*! - * \brief base class for usrp operations - */ -class usrp_basic -{ -private: - // NOT IMPLEMENTED - usrp_basic (const usrp_basic &rhs); // no copy constructor - usrp_basic &operator= (const usrp_basic &rhs); // no assignment operator - - -protected: - struct usb_dev_handle *d_udh; - int d_usb_data_rate; // bytes/sec - int d_bytes_per_poll; // how often to poll for overruns - bool d_verbose; - - static const int MAX_REGS = 128; - unsigned int d_fpga_shadows[MAX_REGS]; - - usrp_basic (int which_board, - struct usb_dev_handle *open_interface (struct usb_device *dev), - const std::string fpga_filename = "", - const std::string firmware_filename = ""); - - /*! - * \brief advise usrp_basic of usb data rate (bytes/sec) - * - * N.B., this doesn't tweak any hardware. Derived classes - * should call this to inform us of the data rate whenever it's - * first set or if it changes. - * - * \param usb_data_rate bytes/sec - */ - void set_usb_data_rate (int usb_data_rate); - - /*! - * \brief Write auxiliary digital to analog converter. - * - * \param slot Which Tx or Rx slot to write. - * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. - * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. - * \param which_dac [0,3] RX slots must use only 0 and 1. TX slots must use only 2 and 3. - * \param value [0,4095] - * \returns true iff successful - */ - bool write_aux_dac (int slot, int which_dac, int value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param slot 2-bit slot number. E.g., SLOT_TX_A - * \param which_adc [0,1] - * \param value return 12-bit value [0,4095] - * \returns true iff successful - */ - bool read_aux_adc (int slot, int which_adc, int *value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param slot 2-bit slot number. E.g., SLOT_TX_A - * \param which_adc [0,1] - * \returns value in the range [0,4095] if successful, else READ_FAILED. - */ - int read_aux_adc (int slot, int which_adc); - -public: - virtual ~usrp_basic (); - - /*! - * \brief return frequency of master oscillator on USRP - */ - long fpga_master_clock_freq () const { return 64000000; } - - /*! - * \returns usb data rate in bytes/sec - */ - int usb_data_rate () const { return d_usb_data_rate; } - - void set_verbose (bool on) { d_verbose = on; } - - //! magic value used on alternate register read interfaces - static const int READ_FAILED = -99999; - - /*! - * \brief Write EEPROM on motherboard or any daughterboard. - * \param i2c_addr I2C bus address of EEPROM - * \param eeprom_offset byte offset in EEPROM to begin writing - * \param buf the data to write - * \returns true iff sucessful - */ - bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); - - /*! - * \brief Read EEPROM on motherboard or any daughterboard. - * \param i2c_addr I2C bus address of EEPROM - * \param eeprom_offset byte offset in EEPROM to begin reading - * \param len number of bytes to read - * \returns the data read if successful, else a zero length string. - */ - std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); - - /*! - * \brief Write to I2C peripheral - * \param i2c_addr I2C bus address (7-bits) - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of of 64 bytes. - */ - bool write_i2c (int i2c_addr, const std::string buf); - - /*! - * \brief Read from I2C peripheral - * \param i2c_addr I2C bus address (7-bits) - * \param len number of bytes to read - * \returns the data read if successful, else a zero length string. - * Reads are limited to a maximum of 64 bytes. - */ - std::string read_i2c (int i2c_addr, int len); - - /*! - * \brief Set ADC offset correction - * \param which which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... - * \param offset 16-bit value to subtract from raw ADC input. - */ - bool set_adc_offset (int which, int offset); - - /*! - * \brief Set DAC offset correction - * \param which which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... - * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). - * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; - * If 1 offset applied to +ve differential pin. - */ - bool set_dac_offset (int which, int offset, int offset_pin); - - /*! - * \brief Control ADC input buffer - * \param which which ADC[0,3] - * \param bypass if non-zero, bypass input buffer and connect input - * directly to switched cap SHA input of RxPGA. - */ - bool set_adc_buffer_bypass (int which, bool bypass); - - - /*! - * \brief return the usrp's serial number. - * - * \returns non-zero length string iff successful. - */ - std::string serial_number(); - - // ---------------------------------------------------------------- - // Low level implementation routines. - // You probably shouldn't be using these... - // - - bool _set_led (int which, bool on); - - /*! - * \brief Write FPGA register. - * \param regno 7-bit register number - * \param value 32-bit value - * \returns true iff successful - */ - bool _write_fpga_reg (int regno, int value); //< 7-bit regno, 32-bit value - - /*! - * \brief Read FPGA register. - * \param regno 7-bit register number - * \param value 32-bit value - * \returns true iff successful - */ - bool _read_fpga_reg (int regno, int *value); //< 7-bit regno, 32-bit value - - /*! - * \brief Read FPGA register. - * \param regno 7-bit register number - * \returns register value if successful, else READ_FAILED - */ - int _read_fpga_reg (int regno); - - - /*! - * \brief Write FPGA register with mask. - * \param regno 7-bit register number - * \param value 16-bit value - * \param mask 16-bit value - * \returns true if successful - * Only use this for registers who actually implement a mask in the verilog firmware, like FR_RX_MASTER_SLAVE - */ - bool _write_fpga_reg_masked (int regno, int value, int mask); - - /*! - * \brief Write AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \param value 8-bit value - * \returns true iff successful - */ - bool _write_9862 (int which_codec, int regno, unsigned char value); - - /*! - * \brief Read AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \param value 8-bit value - * \returns true iff successful - */ - bool _read_9862 (int which_codec, int regno, unsigned char *value) const; - - /*! - * \brief Read AD9862 register. - * \param which_codec 0 or 1 - * \param regno 6-bit register number - * \returns register value if successful, else READ_FAILED - */ - int _read_9862 (int which_codec, int regno) const; - - /*! - * \brief Write data to SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripherals to write. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param buf the data to write - * \returns true iff successful - * Writes are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they are - * written to the peripheral immediately prior to writing \p buf. - */ - bool _write_spi (int optional_header, int enables, int format, std::string buf); - - /* - * \brief Read data from SPI bus peripheral. - * - * \param optional_header 0,1 or 2 bytes to write before buf. - * \param enables bitmask of peripheral to read. See usrp_spi_defs.h - * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* - * \param len number of bytes to read. Must be in [0,64]. - * \returns the data read if sucessful, else a zero length string. - * - * Reads are limited to a maximum of 64 bytes. - * - * If \p format specifies that optional_header bytes are present, they - * are written to the peripheral first. Then \p len bytes are read from - * the peripheral and returned. - */ - std::string _read_spi (int optional_header, int enables, int format, int len); - - /*! - * \brief Start data transfers. - * Called in base class to derived class order. - */ - bool start (); - - /*! - * \brief Stop data transfers. - * Called in base class to derived class order. - */ - bool stop (); -}; - - /*! - * \brief class for accessing the receive side of the USRP - */ -class usrp_basic_rx : public usrp_basic -{ -private: - fusb_devhandle *d_devhandle; - fusb_ephandle *d_ephandle; - int d_bytes_seen; // how many bytes we've seen - bool d_first_read; - bool d_rx_enable; - -protected: - int d_dbid[2]; // Rx daughterboard ID's - - /*! - * \param which_board Which USRP board on usb (not particularly useful; use 0) - * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. - * Use zero for a reasonable default. - * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. - */ - usrp_basic_rx (int which_board, - int fusb_block_size=0, - int fusb_nblocks=0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); // throws if trouble - - bool set_rx_enable (bool on); - bool rx_enable () const { return d_rx_enable; } - - bool disable_rx (); // conditional disable, return prev state - void restore_rx (bool on); // conditional set - - void probe_rx_slots (bool verbose); - int dboard_to_slot (int dboard) { return (dboard << 1) | 1; } - -public: - ~usrp_basic_rx (); - - /*! - * \brief invokes constructor, returns instance or 0 if trouble - * - * \param which_board Which USRP board on usb (not particularly useful; use 0) - * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. - * Use zero for a reasonable default. - * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. - */ - static usrp_basic_rx *make (int which_board, - int fusb_block_size=0, - int fusb_nblocks=0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); - - // MANIPULATORS - - /*! - * \brief tell the fpga the rate rx samples are coming from the A/D's - * - * div = fpga_master_clock_freq () / sample_rate - * - * sample_rate is determined by a myriad of registers - * in the 9862. That's why you have to tell us, so - * we can tell the fpga. - */ - bool set_fpga_rx_sample_rate_divisor (unsigned int div); - - /*! - * \brief read data from the D/A's via the FPGA. - * \p len must be a multiple of 512 bytes. - * - * \returns the number of bytes read, or -1 on error. - * - * If overrun is non-NULL it will be set true iff an RX overrun is detected. - */ - int read (void *buf, int len, bool *overrun); - - // ACCESSORS - - //! sampling rate of A/D converter - virtual long converter_rate() const { return fpga_master_clock_freq(); } // 64M - long adc_rate() const { return converter_rate(); } - long adc_freq() const { return converter_rate(); } //!< deprecated method name - - /*! - * \brief Return daughterboard ID for given Rx daughterboard slot [0,1]. - * - * \param which_dboard [0,1] which Rx daughterboard - * - * \return daughterboard id >= 0 if successful - * \return -1 if no daugherboard - * \return -2 if invalid EEPROM on daughterboard - */ - int daughterboard_id (int which_dboard) const { return d_dbid[which_dboard & 0x1]; } - - // ---------------------------------------------------------------- - // routines for controlling the Programmable Gain Amplifier - /*! - * \brief Set Programmable Gain Amplifier (PGA) - * - * \param which which A/D [0,3] - * \param gain_in_db gain value (linear in dB) - * - * gain is rounded to closest setting supported by hardware. - * - * \returns true iff sucessful. - * - * \sa pga_min(), pga_max(), pga_db_per_step() - */ - bool set_pga (int which, double gain_in_db); - - /*! - * \brief Return programmable gain amplifier gain setting in dB. - * - * \param which which A/D [0,3] - */ - double pga (int which) const; - - /*! - * \brief Return minimum legal PGA gain in dB. - */ - double pga_min () const { return 0.0; } - - /*! - * \brief Return maximum legal PGA gain in dB. - */ - double pga_max () const { return 20.0; } - - /*! - * \brief Return hardware step size of PGA (linear in dB). - */ - double pga_db_per_step () const { return 20.0 / 20; } - - /*! - * \brief Write direction register (output enables) for pins that go to daughterboard. - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - * - * Each d'board has 16-bits of general purpose i/o. - * Setting the bit makes it an output from the FPGA to the d'board. - * - * This register is initialized based on a value stored in the - * d'board EEPROM. In general, you shouldn't be using this routine - * without a very good reason. Using this method incorrectly will - * kill your USRP motherboard and/or daughterboard. - */ - bool _write_oe (int which_dboard, int value, int mask); - - /*! - * \brief Write daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - */ - bool write_io (int which_dboard, int value, int mask); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value output - */ - bool read_io (int which_dboard, int *value); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \returns register value if successful, else READ_FAILED - */ - int read_io (int which_dboard); - - /*! - * \brief Write auxiliary digital to analog converter. - * - * \param which_dboard [0,1] which d'board - * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. - * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. - * \param which_dac [2,3] TX slots must use only 2 and 3. - * \param value [0,4095] - * \returns true iff successful - */ - bool write_aux_dac (int which_board, int which_dac, int value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param which_dboard [0,1] which d'board - * \param which_adc [0,1] - * \param value return 12-bit value [0,4095] - * \returns true iff successful - */ - bool read_aux_adc (int which_dboard, int which_adc, int *value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param which_dboard [0,1] which d'board - * \param which_adc [0,1] - * \returns value in the range [0,4095] if successful, else READ_FAILED. - */ - int read_aux_adc (int which_dboard, int which_adc); - - /*! - * \brief returns current fusb block size - */ - int block_size() const; - - /*! - * \brief Enable/disable automatic DC offset removal control loop in FPGA - * - * \param bits which control loops to enable - * \param mask which \p bits to pay attention to - * - * If the corresponding bit is set, enable the automatic DC - * offset correction control loop. - * - *
-   * The 4 low bits are significant:
-   *
-   *   ADC0 = (1 << 0)
-   *   ADC1 = (1 << 1)
-   *   ADC2 = (1 << 2)
-   *   ADC3 = (1 << 3)
-   * 
- * - * By default the control loop is enabled on all ADC's. - */ - bool set_dc_offset_cl_enable(int bits, int mask); - - // called in base class to derived class order - bool start (); - bool stop (); -}; - - /*! - * \brief class for accessing the transmit side of the USRP - */ -class usrp_basic_tx : public usrp_basic -{ -private: - fusb_devhandle *d_devhandle; - fusb_ephandle *d_ephandle; - int d_bytes_seen; // how many bytes we've seen - bool d_first_write; - bool d_tx_enable; - - protected: - int d_dbid[2]; // Tx daughterboard ID's - - /*! - * \param which_board Which USRP board on usb (not particularly useful; use 0) - * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. - * Use zero for a reasonable default. - * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. - */ - usrp_basic_tx (int which_board, - int fusb_block_size=0, - int fusb_nblocks=0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); // throws if trouble - - bool set_tx_enable (bool on); - bool tx_enable () const { return d_tx_enable; } - - bool disable_tx (); // conditional disable, return prev state - void restore_tx (bool on); // conditional set - - void probe_tx_slots (bool verbose); - int dboard_to_slot (int dboard) { return (dboard << 1) | 0; } - -public: - - ~usrp_basic_tx (); - - /*! - * \brief invokes constructor, returns instance or 0 if trouble - * - * \param which_board Which USRP board on usb (not particularly useful; use 0) - * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. - * Use zero for a reasonable default. - * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. - */ - static usrp_basic_tx *make (int which_board, int fusb_block_size=0, int fusb_nblocks=0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); - - // MANIPULATORS - - /*! - * \brief tell the fpga the rate tx samples are going to the D/A's - * - * div = fpga_master_clock_freq () * 2 - * - * sample_rate is determined by a myriad of registers - * in the 9862. That's why you have to tell us, so - * we can tell the fpga. - */ - bool set_fpga_tx_sample_rate_divisor (unsigned int div); - - /*! - * \brief Write data to the A/D's via the FPGA. - * - * \p len must be a multiple of 512 bytes. - * \returns number of bytes written or -1 on error. - * - * if \p underrun is non-NULL, it will be set to true iff - * a transmit underrun condition is detected. - */ - int write (const void *buf, int len, bool *underrun); - - /* - * Block until all outstanding writes have completed. - * This is typically used to assist with benchmarking - */ - void wait_for_completion (); - - // ACCESSORS - - //! sampling rate of D/A converter - virtual long converter_rate() const { return fpga_master_clock_freq () * 2; } // 128M - long dac_rate() const { return converter_rate(); } - long dac_freq() const { return converter_rate(); } //!< deprecated method name - - /*! - * \brief Return daughterboard ID for given Tx daughterboard slot [0,1]. - * - * \return daughterboard id >= 0 if successful - * \return -1 if no daugherboard - * \return -2 if invalid EEPROM on daughterboard - */ - int daughterboard_id (int which_dboard) const { return d_dbid[which_dboard & 0x1]; } - - // ---------------------------------------------------------------- - // routines for controlling the Programmable Gain Amplifier - /*! - * \brief Set Programmable Gain Amplifier (PGA) - * - * \param which which D/A [0,3] - * \param gain_in_db gain value (linear in dB) - * - * gain is rounded to closest setting supported by hardware. - * Note that DAC 0 and DAC 1 share a gain setting as do DAC 2 and DAC 3. - * Setting DAC 0 affects DAC 1 and vice versa. Same with DAC 2 and DAC 3. - * - * \returns true iff sucessful. - * - * \sa pga_min(), pga_max(), pga_db_per_step() - */ - bool set_pga (int which, double gain_in_db); - - /*! - * \brief Return programmable gain amplifier gain in dB. - * - * \param which which D/A [0,3] - */ - double pga (int which) const; - - /*! - * \brief Return minimum legal PGA gain in dB. - */ - double pga_min () const { return -20.0; } - - /*! - * \brief Return maximum legal PGA gain in dB. - */ - double pga_max () const { return 0.0; } - - /*! - * \brief Return hardware step size of PGA (linear in dB). - */ - double pga_db_per_step () const { return 20.0/255; } - - /*! - * \brief Write direction register (output enables) for pins that go to daughterboard. - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - * - * Each d'board has 16-bits of general purpose i/o. - * Setting the bit makes it an output from the FPGA to the d'board. - * - * This register is initialized based on a value stored in the - * d'board EEPROM. In general, you shouldn't be using this routine - * without a very good reason. Using this method incorrectly will - * kill your USRP motherboard and/or daughterboard. - */ - bool _write_oe (int which_dboard, int value, int mask); - - /*! - * \brief Write daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value value to write into register - * \param mask which bits of value to write into reg - */ - bool write_io (int which_dboard, int value, int mask); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \param value return value - */ - bool read_io (int which_dboard, int *value); - - /*! - * \brief Read daughterboard i/o pin value - * - * \param which_dboard [0,1] which d'board - * \returns register value if successful, else READ_FAILED - */ - int read_io (int which_dboard); - - /*! - * \brief Write auxiliary digital to analog converter. - * - * \param which_dboard [0,1] which d'board - * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. - * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. - * \param which_dac [2,3] TX slots must use only 2 and 3. - * \param value [0,4095] - * \returns true iff successful - */ - bool write_aux_dac (int which_board, int which_dac, int value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param which_dboard [0,1] which d'board - * \param which_adc [0,1] - * \param value return 12-bit value [0,4095] - * \returns true iff successful - */ - bool read_aux_adc (int which_dboard, int which_adc, int *value); - - /*! - * \brief Read auxiliary analog to digital converter. - * - * \param which_dboard [0,1] which d'board - * \param which_adc [0,1] - * \returns value in the range [0,4095] if successful, else READ_FAILED. - */ - int read_aux_adc (int which_dboard, int which_adc); - - /*! - * \brief returns current fusb block size - */ - int block_size() const; - - // called in base class to derived class order - bool start (); - bool stop (); -}; - -#endif diff --git a/usrp/host/lib/usrp_bytesex.h b/usrp/host/lib/usrp_bytesex.h deleted file mode 100644 index 3f6567a0..00000000 --- a/usrp/host/lib/usrp_bytesex.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ -#ifndef INCLUDED_USRP_BYTESEX_H -#define INCLUDED_USRP_BYTESEX_H - -/*! - * \brief routines for convertering between host and usrp byte order - * - * Prior to including this file, the user must include "config.h" - * which will or won't define WORDS_BIGENDIAN based on the - * result of the AC_C_BIGENDIAN autoconf test. - */ - -#ifdef HAVE_BYTESWAP_H -#include -#else -static inline unsigned short int -bswap_16 (unsigned short int x) -{ - return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)); -} -#endif - - -#ifdef WORDS_BIGENDIAN - -static inline short int -host_to_usrp_short (short int x) -{ - return bswap_16 (x); -} - -static inline short int -usrp_to_host_short (short int x) -{ - return bswap_16 (x); -} - -#else - -static inline short int -host_to_usrp_short (short int x) -{ - return x; -} - -static inline short int -usrp_to_host_short (unsigned short int x) -{ - return x; -} - -#endif - -#endif /* INCLUDED_USRP_BYTESEX_H */ diff --git a/usrp/host/lib/usrp_dbid.cc b/usrp/host/lib/usrp_dbid.cc deleted file mode 100644 index ba6ac1eb..00000000 --- a/usrp/host/lib/usrp_dbid.cc +++ /dev/null @@ -1,96 +0,0 @@ -// -// Machine generated by gen_usrp_dbid.py from usrp_dbid.dat -// Do not edit by hand. All edits will be overwritten. -// - -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include -#include -#include - -#define NELEM(x) sizeof(x)/sizeof(x[0]) - -static struct { - unsigned short dbid; - const char *name; -} dbid_map[] = { - { USRP_DBID_BASIC_TX, "Basic Tx" }, - { USRP_DBID_BASIC_RX, "Basic Rx" }, - { USRP_DBID_DBS_RX, "DBS Rx" }, - { USRP_DBID_TV_RX, "TV Rx" }, - { USRP_DBID_FLEX_400_RX, "Flex 400 Rx" }, - { USRP_DBID_FLEX_900_RX, "Flex 900 Rx" }, - { USRP_DBID_FLEX_1200_RX, "Flex 1200 Rx" }, - { USRP_DBID_FLEX_2400_RX, "Flex 2400 Rx" }, - { USRP_DBID_FLEX_400_TX, "Flex 400 Tx" }, - { USRP_DBID_FLEX_900_TX, "Flex 900 Tx" }, - { USRP_DBID_FLEX_1200_TX, "Flex 1200 Tx" }, - { USRP_DBID_FLEX_2400_TX, "Flex 2400 Tx" }, - { USRP_DBID_TV_RX_REV_2, "TV Rx Rev 2" }, - { USRP_DBID_DBS_RX_REV_2_1, "DBS Rx Rev 2_1" }, - { USRP_DBID_LF_TX, "LF Tx" }, - { USRP_DBID_LF_RX, "LF Rx" }, - { USRP_DBID_FLEX_400_RX_MIMO_A, "Flex 400 Rx MIMO A" }, - { USRP_DBID_FLEX_900_RX_MIMO_A, "Flex 900 Rx MIMO A" }, - { USRP_DBID_FLEX_1200_RX_MIMO_A, "Flex 1200 Rx MIMO A" }, - { USRP_DBID_FLEX_2400_RX_MIMO_A, "Flex 2400 Rx MIMO A" }, - { USRP_DBID_FLEX_400_TX_MIMO_A, "Flex 400 Tx MIMO A" }, - { USRP_DBID_FLEX_900_TX_MIMO_A, "Flex 900 Tx MIMO A" }, - { USRP_DBID_FLEX_1200_TX_MIMO_A, "Flex 1200 Tx MIMO A" }, - { USRP_DBID_FLEX_2400_TX_MIMO_A, "Flex 2400 Tx MIMO A" }, - { USRP_DBID_FLEX_400_RX_MIMO_B, "Flex 400 Rx MIMO B" }, - { USRP_DBID_FLEX_900_RX_MIMO_B, "Flex 900 Rx MIMO B" }, - { USRP_DBID_FLEX_1200_RX_MIMO_B, "Flex 1200 Rx MIMO B" }, - { USRP_DBID_FLEX_2400_RX_MIMO_B, "Flex 2400 Rx MIMO B" }, - { USRP_DBID_FLEX_400_TX_MIMO_B, "Flex 400 Tx MIMO B" }, - { USRP_DBID_FLEX_900_TX_MIMO_B, "Flex 900 Tx MIMO B" }, - { USRP_DBID_FLEX_1200_TX_MIMO_B, "Flex 1200 Tx MIMO B" }, - { USRP_DBID_FLEX_2400_TX_MIMO_B, "Flex 2400 Tx MIMO B" }, - { USRP_DBID_FLEX_1800_RX, "Flex 1800 Rx" }, - { USRP_DBID_FLEX_1800_TX, "Flex 1800 Tx" }, - { USRP_DBID_FLEX_1800_RX_MIMO_A, "Flex 1800 Rx MIMO A" }, - { USRP_DBID_FLEX_1800_TX_MIMO_A, "Flex 1800 Tx MIMO A" }, - { USRP_DBID_FLEX_1800_RX_MIMO_B, "Flex 1800 Rx MIMO B" }, - { USRP_DBID_FLEX_1800_TX_MIMO_B, "Flex 1800 Tx MIMO B" }, - { USRP_DBID_TV_RX_REV_3, "TV Rx Rev 3" }, - { USRP_DBID_EXPERIMENTAL_TX, "Experimental Tx" }, - { USRP_DBID_EXPERIMENTAL_RX, "Experimental Rx" }, -}; - -const std::string -usrp_dbid_to_string (int dbid) -{ - if (dbid == -1) - return ""; - - if (dbid == -2) - return ""; - - for (unsigned i = 0; i < NELEM (dbid_map); i++) - if (dbid == dbid_map[i].dbid) - return dbid_map[i].name; - - char tmp[64]; - snprintf (tmp, sizeof (tmp), "Unknown (0x%04x)", dbid); - return tmp; -} diff --git a/usrp/host/lib/usrp_dbid.dat b/usrp/host/lib/usrp_dbid.dat deleted file mode 100644 index 036f00fa..00000000 --- a/usrp/host/lib/usrp_dbid.dat +++ /dev/null @@ -1,74 +0,0 @@ -# -# Copyright 2005 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. -# - -# This file is used to generate usrp_dbid.h, usrp_dbid.cc and usrp_dbid.py - -"Basic Tx" 0x0000 -"Basic Rx" 0x0001 -"DBS Rx" 0x0002 -"TV Rx" 0x0003 - -"Flex 400 Rx" 0x0004 -"Flex 900 Rx" 0x0005 -"Flex 1200 Rx" 0x0006 -"Flex 2400 Rx" 0x0007 - -"Flex 400 Tx" 0x0008 -"Flex 900 Tx" 0x0009 -"Flex 1200 Tx" 0x000a -"Flex 2400 Tx" 0x000b - -"TV Rx Rev 2" 0x000c -"DBS Rx Rev 2_1" 0x000d - -"LF Tx" 0x000e -"LF Rx" 0x000f - -"Flex 400 Rx MIMO A" 0x0014 -"Flex 900 Rx MIMO A" 0x0015 -"Flex 1200 Rx MIMO A" 0x0016 -"Flex 2400 Rx MIMO A" 0x0017 - -"Flex 400 Tx MIMO A" 0x0018 -"Flex 900 Tx MIMO A" 0x0019 -"Flex 1200 Tx MIMO A" 0x001a -"Flex 2400 Tx MIMO A" 0x001b - -"Flex 400 Rx MIMO B" 0x0024 -"Flex 900 Rx MIMO B" 0x0025 -"Flex 1200 Rx MIMO B" 0x0026 -"Flex 2400 Rx MIMO B" 0x0027 - -"Flex 400 Tx MIMO B" 0x0028 -"Flex 900 Tx MIMO B" 0x0029 -"Flex 1200 Tx MIMO B" 0x002a -"Flex 2400 Tx MIMO B" 0x002b - -"Flex 1800 Rx" 0x0030 -"Flex 1800 Tx" 0x0031 -"Flex 1800 Rx MIMO A" 0x0032 -"Flex 1800 Tx MIMO A" 0x0033 -"Flex 1800 Rx MIMO B" 0x0034 -"Flex 1800 Tx MIMO B" 0x0035 - -"TV Rx Rev 3" 0x0040 - -"Experimental Tx" 0xfffe -"Experimental Rx" 0xffff diff --git a/usrp/host/lib/usrp_dbid.h b/usrp/host/lib/usrp_dbid.h deleted file mode 100644 index d34cc3d3..00000000 --- a/usrp/host/lib/usrp_dbid.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// Machine generated by gen_usrp_dbid.py from usrp_dbid.dat -// Do not edit by hand. All edits will be overwritten. -// - -// -// USRP Daughterboard ID's -// - -#ifndef INCLUDED_USRP_DBID_H -#define INCLUDED_USRP_DBID_H - -#define USRP_DBID_BASIC_TX 0x0000 -#define USRP_DBID_BASIC_RX 0x0001 -#define USRP_DBID_DBS_RX 0x0002 -#define USRP_DBID_TV_RX 0x0003 -#define USRP_DBID_FLEX_400_RX 0x0004 -#define USRP_DBID_FLEX_900_RX 0x0005 -#define USRP_DBID_FLEX_1200_RX 0x0006 -#define USRP_DBID_FLEX_2400_RX 0x0007 -#define USRP_DBID_FLEX_400_TX 0x0008 -#define USRP_DBID_FLEX_900_TX 0x0009 -#define USRP_DBID_FLEX_1200_TX 0x000a -#define USRP_DBID_FLEX_2400_TX 0x000b -#define USRP_DBID_TV_RX_REV_2 0x000c -#define USRP_DBID_DBS_RX_REV_2_1 0x000d -#define USRP_DBID_LF_TX 0x000e -#define USRP_DBID_LF_RX 0x000f -#define USRP_DBID_FLEX_400_RX_MIMO_A 0x0014 -#define USRP_DBID_FLEX_900_RX_MIMO_A 0x0015 -#define USRP_DBID_FLEX_1200_RX_MIMO_A 0x0016 -#define USRP_DBID_FLEX_2400_RX_MIMO_A 0x0017 -#define USRP_DBID_FLEX_400_TX_MIMO_A 0x0018 -#define USRP_DBID_FLEX_900_TX_MIMO_A 0x0019 -#define USRP_DBID_FLEX_1200_TX_MIMO_A 0x001a -#define USRP_DBID_FLEX_2400_TX_MIMO_A 0x001b -#define USRP_DBID_FLEX_400_RX_MIMO_B 0x0024 -#define USRP_DBID_FLEX_900_RX_MIMO_B 0x0025 -#define USRP_DBID_FLEX_1200_RX_MIMO_B 0x0026 -#define USRP_DBID_FLEX_2400_RX_MIMO_B 0x0027 -#define USRP_DBID_FLEX_400_TX_MIMO_B 0x0028 -#define USRP_DBID_FLEX_900_TX_MIMO_B 0x0029 -#define USRP_DBID_FLEX_1200_TX_MIMO_B 0x002a -#define USRP_DBID_FLEX_2400_TX_MIMO_B 0x002b -#define USRP_DBID_FLEX_1800_RX 0x0030 -#define USRP_DBID_FLEX_1800_TX 0x0031 -#define USRP_DBID_FLEX_1800_RX_MIMO_A 0x0032 -#define USRP_DBID_FLEX_1800_TX_MIMO_A 0x0033 -#define USRP_DBID_FLEX_1800_RX_MIMO_B 0x0034 -#define USRP_DBID_FLEX_1800_TX_MIMO_B 0x0035 -#define USRP_DBID_TV_RX_REV_3 0x0040 -#define USRP_DBID_EXPERIMENTAL_TX 0xfffe -#define USRP_DBID_EXPERIMENTAL_RX 0xffff - -#endif /* INCLUDED_USRP_DBID_H */ diff --git a/usrp/host/lib/usrp_dbid.py b/usrp/host/lib/usrp_dbid.py deleted file mode 100644 index 179a5712..00000000 --- a/usrp/host/lib/usrp_dbid.py +++ /dev/null @@ -1,50 +0,0 @@ -# -# Machine generated by gen_usrp_dbid.py from usrp_dbid.dat -# Do not edit by hand. All edits will be overwritten. -# - -# -# USRP Daughterboard ID's -# - -BASIC_TX = 0x0000 -BASIC_RX = 0x0001 -DBS_RX = 0x0002 -TV_RX = 0x0003 -FLEX_400_RX = 0x0004 -FLEX_900_RX = 0x0005 -FLEX_1200_RX = 0x0006 -FLEX_2400_RX = 0x0007 -FLEX_400_TX = 0x0008 -FLEX_900_TX = 0x0009 -FLEX_1200_TX = 0x000a -FLEX_2400_TX = 0x000b -TV_RX_REV_2 = 0x000c -DBS_RX_REV_2_1 = 0x000d -LF_TX = 0x000e -LF_RX = 0x000f -FLEX_400_RX_MIMO_A = 0x0014 -FLEX_900_RX_MIMO_A = 0x0015 -FLEX_1200_RX_MIMO_A = 0x0016 -FLEX_2400_RX_MIMO_A = 0x0017 -FLEX_400_TX_MIMO_A = 0x0018 -FLEX_900_TX_MIMO_A = 0x0019 -FLEX_1200_TX_MIMO_A = 0x001a -FLEX_2400_TX_MIMO_A = 0x001b -FLEX_400_RX_MIMO_B = 0x0024 -FLEX_900_RX_MIMO_B = 0x0025 -FLEX_1200_RX_MIMO_B = 0x0026 -FLEX_2400_RX_MIMO_B = 0x0027 -FLEX_400_TX_MIMO_B = 0x0028 -FLEX_900_TX_MIMO_B = 0x0029 -FLEX_1200_TX_MIMO_B = 0x002a -FLEX_2400_TX_MIMO_B = 0x002b -FLEX_1800_RX = 0x0030 -FLEX_1800_TX = 0x0031 -FLEX_1800_RX_MIMO_A = 0x0032 -FLEX_1800_TX_MIMO_A = 0x0033 -FLEX_1800_RX_MIMO_B = 0x0034 -FLEX_1800_TX_MIMO_B = 0x0035 -TV_RX_REV_3 = 0x0040 -EXPERIMENTAL_TX = 0xfffe -EXPERIMENTAL_RX = 0xffff diff --git a/usrp/host/lib/usrp_local_sighandler.cc b/usrp/host/lib/usrp_local_sighandler.cc deleted file mode 100644 index b87a7656..00000000 --- a/usrp/host/lib/usrp_local_sighandler.cc +++ /dev/null @@ -1,190 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -/* - * This is actually the same as gr_local_signhandler, but with a different name. - * We don't have a common library to put this in, so... - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -usrp_local_sighandler::usrp_local_sighandler (int signum, - void (*new_handler)(int)) - : d_signum (signum) -{ -#ifdef HAVE_SIGACTION - struct sigaction new_action; - memset (&new_action, 0, sizeof (new_action)); - - new_action.sa_handler = new_handler; - sigemptyset (&new_action.sa_mask); - new_action.sa_flags = 0; - - if (sigaction (d_signum, &new_action, &d_old_action) < 0){ - perror ("sigaction (install new)"); - throw std::runtime_error ("sigaction"); - } -#endif -} - -usrp_local_sighandler::~usrp_local_sighandler () -{ -#ifdef HAVE_SIGACTION - if (sigaction (d_signum, &d_old_action, 0) < 0){ - perror ("sigaction (restore old)"); - throw std::runtime_error ("sigaction"); - } -#endif -} - -void -usrp_local_sighandler::throw_signal(int signum) throw(usrp_signal) -{ - throw usrp_signal (signum); -} - -/* - * Semi-hideous way to may a signal number into a signal name - */ - -#define SIGNAME(x) case x: return #x - -std::string -usrp_signal::name () const -{ - char tmp[128]; - - switch (signal ()){ -#ifdef SIGHUP - SIGNAME (SIGHUP); -#endif -#ifdef SIGINT - SIGNAME (SIGINT); -#endif -#ifdef SIGQUIT - SIGNAME (SIGQUIT); -#endif -#ifdef SIGILL - SIGNAME (SIGILL); -#endif -#ifdef SIGTRAP - SIGNAME (SIGTRAP); -#endif -#ifdef SIGABRT - SIGNAME (SIGABRT); -#endif -#ifdef SIGBUS - SIGNAME (SIGBUS); -#endif -#ifdef SIGFPE - SIGNAME (SIGFPE); -#endif -#ifdef SIGKILL - SIGNAME (SIGKILL); -#endif -#ifdef SIGUSR1 - SIGNAME (SIGUSR1); -#endif -#ifdef SIGSEGV - SIGNAME (SIGSEGV); -#endif -#ifdef SIGUSR2 - SIGNAME (SIGUSR2); -#endif -#ifdef SIGPIPE - SIGNAME (SIGPIPE); -#endif -#ifdef SIGALRM - SIGNAME (SIGALRM); -#endif -#ifdef SIGTERM - SIGNAME (SIGTERM); -#endif -#ifdef SIGSTKFLT - SIGNAME (SIGSTKFLT); -#endif -#ifdef SIGCHLD - SIGNAME (SIGCHLD); -#endif -#ifdef SIGCONT - SIGNAME (SIGCONT); -#endif -#ifdef SIGSTOP - SIGNAME (SIGSTOP); -#endif -#ifdef SIGTSTP - SIGNAME (SIGTSTP); -#endif -#ifdef SIGTTIN - SIGNAME (SIGTTIN); -#endif -#ifdef SIGTTOU - SIGNAME (SIGTTOU); -#endif -#ifdef SIGURG - SIGNAME (SIGURG); -#endif -#ifdef SIGXCPU - SIGNAME (SIGXCPU); -#endif -#ifdef SIGXFSZ - SIGNAME (SIGXFSZ); -#endif -#ifdef SIGVTALRM - SIGNAME (SIGVTALRM); -#endif -#ifdef SIGPROF - SIGNAME (SIGPROF); -#endif -#ifdef SIGWINCH - SIGNAME (SIGWINCH); -#endif -#ifdef SIGIO - SIGNAME (SIGIO); -#endif -#ifdef SIGPWR - SIGNAME (SIGPWR); -#endif -#ifdef SIGSYS - SIGNAME (SIGSYS); -#endif - default: -#if defined (HAVE_SNPRINTF) -#if defined (SIGRTMIN) && defined (SIGRTMAX) - if (signal () >= SIGRTMIN && signal () <= SIGRTMAX){ - snprintf (tmp, sizeof (tmp), "SIGRTMIN + %d", signal ()); - return tmp; - } -#endif - snprintf (tmp, sizeof (tmp), "SIGNAL %d", signal ()); - return tmp; -#else - return "Unknown signal"; -#endif - } -} diff --git a/usrp/host/lib/usrp_prims.cc b/usrp/host/lib/usrp_prims.cc deleted file mode 100644 index 8fe87a72..00000000 --- a/usrp/host/lib/usrp_prims.cc +++ /dev/null @@ -1,1356 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,2004,2006 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "usrp_prims.h" -#include "usrp_commands.h" -#include "usrp_ids.h" -#include "usrp_i2c_addr.h" -#include "fpga_regs_common.h" -#include "fpga_regs_standard.h" -#include -#include -#include -#include -#include -#include -#include -#include // FIXME should check with autoconf (nanosleep) -#include -#include -#include - -extern "C" { -#include "md5.h" -}; - -#define VERBOSE 0 - -using namespace ad9862; - -static const int FIRMWARE_HASH_SLOT = 0; -static const int FPGA_HASH_SLOT = 1; - -static const int hash_slot_addr[2] = { - USRP_HASH_SLOT_0_ADDR, - USRP_HASH_SLOT_1_ADDR -}; - -static char *default_firmware_filename = "std.ihx"; -static char *default_fpga_filename = "std_2rxhb_2tx.rbf"; - -#include "std_paths.h" - -static char * -find_file (const char *filename, int hw_rev) -{ - char **sp = std_paths; - static char path[1000]; - char *s; - - s = getenv("USRP_PATH"); - if (s) { - snprintf (path, sizeof (path), "%s/rev%d/%s", s, hw_rev, filename); - if (access (path, R_OK) == 0) - return path; - } - - while (*sp){ - snprintf (path, sizeof (path), "%s/rev%d/%s", *sp, hw_rev, filename); - if (access (path, R_OK) == 0) - return path; - sp++; - } - return 0; -} - -static const char * -get_proto_filename(const std::string user_filename, const char *env_var, const char *def) -{ - if (user_filename.length() != 0) - return user_filename.c_str(); - - char *s = getenv(env_var); - if (s && *s) - return s; - - return def; -} - - -static void power_down_9862s (struct usb_dev_handle *udh); - -void -usrp_one_time_init () -{ - static bool first = true; - - if (first){ - first = false; - usb_init (); // usb library init - usb_find_busses (); - usb_find_devices (); - } -} - -void -usrp_rescan () -{ - usb_find_busses (); - usb_find_devices (); -} - - -// ---------------------------------------------------------------- -// Danger, big, fragile KLUDGE. The problem is that we want to be -// able to get from a usb_dev_handle back to a usb_device, and the -// right way to do this is buried in a non-installed include file. - -static struct usb_device * -dev_handle_to_dev (usb_dev_handle *udh) -{ - struct usb_dev_handle_kludge { - int fd; - struct usb_bus *bus; - struct usb_device *device; - }; - - return ((struct usb_dev_handle_kludge *) udh)->device; -} - -// ---------------------------------------------------------------- - -/* - * q must be a real USRP, not an FX2. Return its hardware rev number. - */ -int -usrp_hw_rev (struct usb_device *q) -{ - return q->descriptor.bcdDevice & 0x00FF; -} - -/* - * q must be a real USRP, not an FX2. Return true if it's configured. - */ -static bool -_usrp_configured_p (struct usb_device *q) -{ - return (q->descriptor.bcdDevice & 0xFF00) != 0; -} - -bool -usrp_usrp_p (struct usb_device *q) -{ - return (q->descriptor.idVendor == USB_VID_FSF - && q->descriptor.idProduct == USB_PID_FSF_USRP); -} - -bool -usrp_fx2_p (struct usb_device *q) -{ - return (q->descriptor.idVendor == USB_VID_CYPRESS - && q->descriptor.idProduct == USB_PID_CYPRESS_FX2); -} - -bool -usrp_usrp0_p (struct usb_device *q) -{ - return usrp_usrp_p (q) && usrp_hw_rev (q) == 0; -} - -bool -usrp_usrp1_p (struct usb_device *q) -{ - return usrp_usrp_p (q) && usrp_hw_rev (q) == 1; -} - -bool -usrp_usrp2_p (struct usb_device *q) -{ - return usrp_usrp_p (q) && usrp_hw_rev (q) == 2; -} - - -bool -usrp_unconfigured_usrp_p (struct usb_device *q) -{ - return usrp_usrp_p (q) && !_usrp_configured_p (q); -} - -bool -usrp_configured_usrp_p (struct usb_device *q) -{ - return usrp_usrp_p (q) && _usrp_configured_p (q); -} - -// ---------------------------------------------------------------- - -struct usb_device * -usrp_find_device (int nth, bool fx2_ok_p) -{ - struct usb_bus *p; - struct usb_device *q; - int n_found = 0; - - usrp_one_time_init (); - - p = usb_get_busses(); - while (p != NULL){ - q = p->devices; - while (q != NULL){ - if (usrp_usrp_p (q) || (fx2_ok_p && usrp_fx2_p (q))){ - if (n_found == nth) // return this one - return q; - n_found++; // keep looking - } - q = q->next; - } - p = p->next; - } - return 0; // not found -} - -static struct usb_dev_handle * -usrp_open_interface (struct usb_device *dev, int interface, int altinterface) -{ - struct usb_dev_handle *udh = usb_open (dev); - if (udh == 0) - return 0; - - if (dev != dev_handle_to_dev (udh)){ - fprintf (stderr, "%s:%d: internal error!\n", __FILE__, __LINE__); - abort (); - } - -#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) - // There's no get get_configuration function, and with some of the newer kernels - // setting the configuration, even if to the same value, hoses any other processes - // that have it open. Hence we opt to not set it at all (We've only - // got a single configuration anyway). This may hose the win32 stuff... - - // Appears to be required for libusb-win32 and Cygwin -- dew 09/20/06 - if (usb_set_configuration (udh, 1) < 0){ - /* - * Ignore this error. - * - * Seems that something changed in drivers/usb/core/devio.c:proc_setconfig such that - * it returns -EBUSY if _any_ of the interfaces of a device are open. - * We've only got a single configuration, so setting it doesn't even seem - * like it should be required. - */ - } -#endif - - if (usb_claim_interface (udh, interface) < 0){ - fprintf (stderr, "%s:usb_claim_interface: failed interface %d\n", __FUNCTION__,interface); - fprintf (stderr, "%s\n", usb_strerror()); - usb_close (udh); - return 0; - } - - if (usb_set_altinterface (udh, altinterface) < 0){ - fprintf (stderr, "%s:usb_set_alt_interface: failed\n", __FUNCTION__); - fprintf (stderr, "%s\n", usb_strerror()); - usb_release_interface (udh, interface); - usb_close (udh); - return 0; - } - - return udh; -} - -struct usb_dev_handle * -usrp_open_cmd_interface (struct usb_device *dev) -{ - return usrp_open_interface (dev, USRP_CMD_INTERFACE, USRP_CMD_ALTINTERFACE); -} - -struct usb_dev_handle * -usrp_open_rx_interface (struct usb_device *dev) -{ - return usrp_open_interface (dev, USRP_RX_INTERFACE, USRP_RX_ALTINTERFACE); -} - -struct usb_dev_handle * -usrp_open_tx_interface (struct usb_device *dev) -{ - return usrp_open_interface (dev, USRP_TX_INTERFACE, USRP_TX_ALTINTERFACE); -} - -bool -usrp_close_interface (struct usb_dev_handle *udh) -{ - // we're assuming that closing an interface automatically releases it. - return usb_close (udh) == 0; -} - -// ---------------------------------------------------------------- -// write internal ram using Cypress vendor extension - -static bool -write_internal_ram (struct usb_dev_handle *udh, unsigned char *buf, - int start_addr, size_t len) -{ - int addr; - int n; - int a; - int quanta = MAX_EP0_PKTSIZE; - - for (addr = start_addr; addr < start_addr + (int) len; addr += quanta){ - n = len + start_addr - addr; - if (n > quanta) - n = quanta; - - a = usb_control_msg (udh, 0x40, 0xA0, - addr, 0, (char *)(buf + (addr - start_addr)), n, 1000); - - if (a < 0){ - fprintf(stderr,"write_internal_ram failed: %s\n", usb_strerror()); - return false; - } - } - return true; -} - -// ---------------------------------------------------------------- -// whack the CPUCS register using the upload RAM vendor extension - -static bool -reset_cpu (struct usb_dev_handle *udh, bool reset_p) -{ - unsigned char v; - - if (reset_p) - v = 1; // hold processor in reset - else - v = 0; // release reset - - return write_internal_ram (udh, &v, 0xE600, 1); -} - -// ---------------------------------------------------------------- -// Load intel format file into cypress FX2 (8051) - -static bool -_usrp_load_firmware (struct usb_dev_handle *udh, const char *filename, - unsigned char hash[USRP_HASH_SIZE]) -{ - FILE *f = fopen (filename, "ra"); - if (f == 0){ - perror (filename); - return false; - } - - if (!reset_cpu (udh, true)) // hold CPU in reset while loading firmware - goto fail; - - - char s[1024]; - int length; - int addr; - int type; - unsigned char data[256]; - unsigned char checksum, a; - unsigned int b; - int i; - - while (!feof(f)){ - fgets(s, sizeof (s), f); /* we should not use more than 263 bytes normally */ - if(s[0]!=':'){ - fprintf(stderr,"%s: invalid line: \"%s\"\n", filename, s); - goto fail; - } - sscanf(s+1, "%02x", &length); - sscanf(s+3, "%04x", &addr); - sscanf(s+7, "%02x", &type); - - if(type==0){ - - a=length+(addr &0xff)+(addr>>8)+type; - for(i=0;i 0){ - if (write_cmd (udh, VRQ_FPGA_LOAD, 0, FL_XFER, buf, n) != n) - goto fail; - } - - if (write_cmd (udh, VRQ_FPGA_LOAD, 0, FL_END, 0, 0) != 0) - goto fail; - - fclose (fp); - - if (!usrp_set_hash (udh, FPGA_HASH_SLOT, hash)) - fprintf (stderr, "usrp: failed to write fpga hash slot\n"); - - // On the rev1 USRP, the {tx,rx}_{enable,reset} bits are - // controlled over the serial bus, and hence aren't observed until - // we've got a good fpga bitstream loaded. - - usrp_set_fpga_reset (udh, 0); // fpga out of master reset - - // now these commands will work - - ok &= usrp_set_fpga_tx_enable (udh, 0); - ok &= usrp_set_fpga_rx_enable (udh, 0); - - ok &= usrp_set_fpga_tx_reset (udh, 1); // reset tx and rx paths - ok &= usrp_set_fpga_rx_reset (udh, 1); - ok &= usrp_set_fpga_tx_reset (udh, 0); // reset tx and rx paths - ok &= usrp_set_fpga_rx_reset (udh, 0); - - if (!ok) - fprintf (stderr, "usrp: failed to reset tx and/or rx path\n"); - - // Manually reset all regs except master control to zero. - // FIXME may want to remove this when we rework FPGA reset strategy. - // In the mean while, this gets us reproducible behavior. - for (int i = 0; i < FR_USER_0; i++){ - if (i == FR_MASTER_CTRL) - continue; - usrp_write_fpga_reg(udh, i, 0); - } - - power_down_9862s (udh); // on the rev1, power these down! - usrp_set_led (udh, 1, 0); // led 1 off - - return true; - - fail: - power_down_9862s (udh); // on the rev1, power these down! - fclose (fp); - return false; -} - -// ---------------------------------------------------------------- - -bool -usrp_set_led (struct usb_dev_handle *udh, int which, bool on) -{ - int r = write_cmd (udh, VRQ_SET_LED, on, which, 0, 0); - - return r == 0; -} - -bool -usrp_set_hash (struct usb_dev_handle *udh, int which, - const unsigned char hash[USRP_HASH_SIZE]) -{ - which &= 1; - - // we use the Cypress firmware down load command to jam it in. - int r = usb_control_msg (udh, 0x40, 0xa0, hash_slot_addr[which], 0, - (char *) hash, USRP_HASH_SIZE, 1000); - return r == USRP_HASH_SIZE; -} - -bool -usrp_get_hash (struct usb_dev_handle *udh, int which, - unsigned char hash[USRP_HASH_SIZE]) -{ - which &= 1; - - // we use the Cypress firmware upload command to fetch it. - int r = usb_control_msg (udh, 0xc0, 0xa0, hash_slot_addr[which], 0, - (char *) hash, USRP_HASH_SIZE, 1000); - return r == USRP_HASH_SIZE; -} - -static bool -usrp_set_switch (struct usb_dev_handle *udh, int cmd_byte, bool on) -{ - return write_cmd (udh, cmd_byte, on, 0, 0, 0) == 0; -} - - -static bool -usrp1_fpga_write (struct usb_dev_handle *udh, - int regno, int value) -{ - // on the rev1 usrp, we use the generic spi_write interface - - unsigned char buf[4]; - - buf[0] = (value >> 24) & 0xff; // MSB first - buf[1] = (value >> 16) & 0xff; - buf[2] = (value >> 8) & 0xff; - buf[3] = (value >> 0) & 0xff; - - return usrp_spi_write (udh, 0x00 | (regno & 0x7f), - SPI_ENABLE_FPGA, - SPI_FMT_MSB | SPI_FMT_HDR_1, - buf, sizeof (buf)); -} - -static bool -usrp1_fpga_read (struct usb_dev_handle *udh, - int regno, int *value) -{ - *value = 0; - unsigned char buf[4]; - - bool ok = usrp_spi_read (udh, 0x80 | (regno & 0x7f), - SPI_ENABLE_FPGA, - SPI_FMT_MSB | SPI_FMT_HDR_1, - buf, sizeof (buf)); - - if (ok) - *value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; - - return ok; -} - - -bool -usrp_write_fpga_reg (struct usb_dev_handle *udh, int reg, int value) -{ - switch (usrp_hw_rev (dev_handle_to_dev (udh))){ - case 0: // not supported ;) - abort(); - - default: - return usrp1_fpga_write (udh, reg, value); - } -} - -bool -usrp_read_fpga_reg (struct usb_dev_handle *udh, int reg, int *value) -{ - switch (usrp_hw_rev (dev_handle_to_dev (udh))){ - case 0: // not supported ;) - abort(); - - default: - return usrp1_fpga_read (udh, reg, value); - } -} - -bool -usrp_set_fpga_reset (struct usb_dev_handle *udh, bool on) -{ - return usrp_set_switch (udh, VRQ_FPGA_SET_RESET, on); -} - -bool -usrp_set_fpga_tx_enable (struct usb_dev_handle *udh, bool on) -{ - return usrp_set_switch (udh, VRQ_FPGA_SET_TX_ENABLE, on); -} - -bool -usrp_set_fpga_rx_enable (struct usb_dev_handle *udh, bool on) -{ - return usrp_set_switch (udh, VRQ_FPGA_SET_RX_ENABLE, on); -} - -bool -usrp_set_fpga_tx_reset (struct usb_dev_handle *udh, bool on) -{ - return usrp_set_switch (udh, VRQ_FPGA_SET_TX_RESET, on); -} - -bool -usrp_set_fpga_rx_reset (struct usb_dev_handle *udh, bool on) -{ - return usrp_set_switch (udh, VRQ_FPGA_SET_RX_RESET, on); -} - - -// ---------------------------------------------------------------- -// conditional load stuff - -static bool -compute_hash (const char *filename, unsigned char hash[USRP_HASH_SIZE]) -{ - assert (USRP_HASH_SIZE == 16); - memset (hash, 0, USRP_HASH_SIZE); - - FILE *fp = fopen (filename, "rb"); - if (fp == 0){ - perror (filename); - return false; - } - int r = md5_stream (fp, hash); - fclose (fp); - - return r == 0; -} - -static usrp_load_status_t -usrp_conditionally_load_something (struct usb_dev_handle *udh, - const char *filename, - bool force, - int slot, - bool loader (struct usb_dev_handle *, - const char *, - unsigned char [USRP_HASH_SIZE])) -{ - unsigned char file_hash[USRP_HASH_SIZE]; - unsigned char usrp_hash[USRP_HASH_SIZE]; - - if (access (filename, R_OK) != 0){ - perror (filename); - return ULS_ERROR; - } - - if (!compute_hash (filename, file_hash)) - return ULS_ERROR; - - if (!force - && usrp_get_hash (udh, slot, usrp_hash) - && memcmp (file_hash, usrp_hash, USRP_HASH_SIZE) == 0) - return ULS_ALREADY_LOADED; - - bool r = loader (udh, filename, file_hash); - - if (!r) - return ULS_ERROR; - - return ULS_OK; -} - -usrp_load_status_t -usrp_load_firmware (struct usb_dev_handle *udh, - const char *filename, - bool force) -{ - return usrp_conditionally_load_something (udh, filename, force, - FIRMWARE_HASH_SLOT, - _usrp_load_firmware); -} - -usrp_load_status_t -usrp_load_fpga (struct usb_dev_handle *udh, - const char *filename, - bool force) -{ - return usrp_conditionally_load_something (udh, filename, force, - FPGA_HASH_SLOT, - _usrp_load_fpga); -} - -static usb_dev_handle * -open_nth_cmd_interface (int nth) -{ - struct usb_device *udev = usrp_find_device (nth); - if (udev == 0){ - fprintf (stderr, "usrp: failed to find usrp[%d]\n", nth); - return 0; - } - - struct usb_dev_handle *udh; - - udh = usrp_open_cmd_interface (udev); - if (udh == 0){ - // FIXME this could be because somebody else has it open. - // We should delay and retry... - fprintf (stderr, "open_nth_cmd_interface: open_cmd_interface failed\n"); - usb_strerror (); - return 0; - } - - return udh; - } - -static bool -our_nanosleep (const struct timespec *delay) -{ - struct timespec new_delay = *delay; - struct timespec remainder; - - while (1){ - int r = nanosleep (&new_delay, &remainder); - if (r == 0) - return true; - if (errno == EINTR) - new_delay = remainder; - else { - perror ("nanosleep"); - return false; - } - } -} - -static bool -mdelay (int millisecs) -{ - struct timespec ts; - ts.tv_sec = millisecs / 1000; - ts.tv_nsec = (millisecs - (1000 * ts.tv_sec)) * 1000000; - return our_nanosleep (&ts); -} - -usrp_load_status_t -usrp_load_firmware_nth (int nth, const char *filename, bool force){ - struct usb_dev_handle *udh = open_nth_cmd_interface (nth); - if (udh == 0) - return ULS_ERROR; - - usrp_load_status_t s = usrp_load_firmware (udh, filename, force); - usrp_close_interface (udh); - - switch (s){ - - case ULS_ALREADY_LOADED: // nothing changed... - return ULS_ALREADY_LOADED; - break; - - case ULS_OK: - // we loaded firmware successfully. - - // It's highly likely that the board will renumerate (simulate a - // disconnect/reconnect sequence), invalidating our current - // handle. - - // FIXME. Turn this into a loop that rescans until we refind ourselves - - struct timespec t; // delay for 1 second - t.tv_sec = 2; - t.tv_nsec = 0; - our_nanosleep (&t); - - usb_find_busses (); // rescan busses and devices - usb_find_devices (); - - return ULS_OK; - - default: - case ULS_ERROR: // some kind of problem - return ULS_ERROR; - } -} - -static void -load_status_msg (usrp_load_status_t s, const char *type, const char *filename) -{ - char *e = getenv("USRP_VERBOSE"); - bool verbose = e != 0; - - switch (s){ - case ULS_ERROR: - fprintf (stderr, "usrp: failed to load %s %s.\n", type, filename); - break; - - case ULS_ALREADY_LOADED: - if (verbose) - fprintf (stderr, "usrp: %s %s already loaded.\n", type, filename); - break; - - case ULS_OK: - if (verbose) - fprintf (stderr, "usrp: %s %s loaded successfully.\n", type, filename); - break; - } -} - -bool -usrp_load_standard_bits (int nth, bool force, - const std::string fpga_filename, - const std::string firmware_filename) -{ - usrp_load_status_t s; - const char *filename; - const char *proto_filename; - int hw_rev; - - // first, figure out what hardware rev we're dealing with - { - struct usb_device *udev = usrp_find_device (nth); - if (udev == 0){ - fprintf (stderr, "usrp: failed to find usrp[%d]\n", nth); - return false; - } - hw_rev = usrp_hw_rev (udev); - } - - // start by loading the firmware - - proto_filename = get_proto_filename(firmware_filename, "USRP_FIRMWARE", - default_firmware_filename); - filename = find_file(proto_filename, hw_rev); - if (filename == 0){ - fprintf (stderr, "Can't find firmware: %s\n", proto_filename); - return false; - } - - s = usrp_load_firmware_nth (nth, filename, force); - load_status_msg (s, "firmware", filename); - - if (s == ULS_ERROR) - return false; - - // if we actually loaded firmware, we must reload fpga ... - if (s == ULS_OK) - force = true; - - // now move on to the fpga configuration bitstream - - proto_filename = get_proto_filename(fpga_filename, "USRP_FPGA", - default_fpga_filename); - filename = find_file (proto_filename, hw_rev); - if (filename == 0){ - fprintf (stderr, "Can't find fpga bitstream: %s\n", proto_filename); - return false; - } - - struct usb_dev_handle *udh = open_nth_cmd_interface (nth); - if (udh == 0) - return false; - - s = usrp_load_fpga (udh, filename, force); - usrp_close_interface (udh); - load_status_msg (s, "fpga bitstream", filename); - - if (s == ULS_ERROR) - return false; - - return true; -} - -bool -_usrp_get_status (struct usb_dev_handle *udh, int which, bool *trouble) -{ - unsigned char status; - *trouble = true; - - if (write_cmd (udh, VRQ_GET_STATUS, 0, which, - &status, sizeof (status)) != sizeof (status)) - return false; - - *trouble = status; - return true; -} - -bool -usrp_check_rx_overrun (struct usb_dev_handle *udh, bool *overrun_p) -{ - return _usrp_get_status (udh, GS_RX_OVERRUN, overrun_p); -} - -bool -usrp_check_tx_underrun (struct usb_dev_handle *udh, bool *underrun_p) -{ - return _usrp_get_status (udh, GS_TX_UNDERRUN, underrun_p); -} - - -bool -usrp_i2c_write (struct usb_dev_handle *udh, int i2c_addr, - const void *buf, int len) -{ - if (len < 1 || len > MAX_EP0_PKTSIZE) - return false; - - return write_cmd (udh, VRQ_I2C_WRITE, i2c_addr, 0, - (unsigned char *) buf, len) == len; -} - - -bool -usrp_i2c_read (struct usb_dev_handle *udh, int i2c_addr, - void *buf, int len) -{ - if (len < 1 || len > MAX_EP0_PKTSIZE) - return false; - - return write_cmd (udh, VRQ_I2C_READ, i2c_addr, 0, - (unsigned char *) buf, len) == len; -} - -bool -usrp_spi_write (struct usb_dev_handle *udh, - int optional_header, int enables, int format, - const void *buf, int len) -{ - if (len < 0 || len > MAX_EP0_PKTSIZE) - return false; - - return write_cmd (udh, VRQ_SPI_WRITE, - optional_header, - ((enables & 0xff) << 8) | (format & 0xff), - (unsigned char *) buf, len) == len; -} - - -bool -usrp_spi_read (struct usb_dev_handle *udh, - int optional_header, int enables, int format, - void *buf, int len) -{ - if (len < 0 || len > MAX_EP0_PKTSIZE) - return false; - - return write_cmd (udh, VRQ_SPI_READ, - optional_header, - ((enables & 0xff) << 8) | (format & 0xff), - (unsigned char *) buf, len) == len; -} - -bool -usrp_9862_write (struct usb_dev_handle *udh, int which_codec, - int regno, int value) -{ - if (0) - fprintf (stderr, "usrp_9862_write which = %d, reg = %2d, val = %3d (0x%02x)\n", - which_codec, regno, value, value); - - unsigned char buf[1]; - - buf[0] = value; - - return usrp_spi_write (udh, 0x00 | (regno & 0x3f), - which_codec == 0 ? SPI_ENABLE_CODEC_A : SPI_ENABLE_CODEC_B, - SPI_FMT_MSB | SPI_FMT_HDR_1, - buf, 1); -} - -bool -usrp_9862_read (struct usb_dev_handle *udh, int which_codec, - int regno, unsigned char *value) -{ - return usrp_spi_read (udh, 0x80 | (regno & 0x3f), - which_codec == 0 ? SPI_ENABLE_CODEC_A : SPI_ENABLE_CODEC_B, - SPI_FMT_MSB | SPI_FMT_HDR_1, - value, 1); -} - -bool -usrp_9862_write_many (struct usb_dev_handle *udh, - int which_codec, - const unsigned char *buf, - int len) -{ - if (len & 0x1) - return false; // must be even - - bool result = true; - - while (len > 0){ - result &= usrp_9862_write (udh, which_codec, buf[0], buf[1]); - len -= 2; - buf += 2; - } - - return result; -} - - -bool -usrp_9862_write_many_all (struct usb_dev_handle *udh, - const unsigned char *buf, int len) -{ - // FIXME handle 2/2 and 4/4 versions - - bool result; - result = usrp_9862_write_many (udh, 0, buf, len); - result &= usrp_9862_write_many (udh, 1, buf, len); - return result; -} - -static void -power_down_9862s (struct usb_dev_handle *udh) -{ - static const unsigned char regs[] = { - REG_RX_PWR_DN, 0x01, // everything - REG_TX_PWR_DN, 0x0f, // pwr dn digital and analog_both - REG_TX_MODULATOR, 0x00 // coarse & fine modulators disabled - }; - - switch (usrp_hw_rev (dev_handle_to_dev (udh))){ - case 0: - break; - - default: - usrp_9862_write_many_all (udh, regs, sizeof (regs)); - break; - } -} - - - -static const int EEPROM_PAGESIZE = 16; - -bool -usrp_eeprom_write (struct usb_dev_handle *udh, int i2c_addr, - int eeprom_offset, const void *buf, int len) -{ - unsigned char cmd[2]; - const unsigned char *p = (unsigned char *) buf; - - // The simplest thing that could possibly work: - // all writes are single byte writes. - // - // We could speed this up using the page write feature, - // but we write so infrequently, why bother... - - while (len-- > 0){ - cmd[0] = eeprom_offset++; - cmd[1] = *p++; - bool r = usrp_i2c_write (udh, i2c_addr, cmd, sizeof (cmd)); - mdelay (10); // delay 10ms worst case write time - if (!r) - return false; - } - - return true; -} - -bool -usrp_eeprom_read (struct usb_dev_handle *udh, int i2c_addr, - int eeprom_offset, void *buf, int len) -{ - unsigned char *p = (unsigned char *) buf; - - // We setup a random read by first doing a "zero byte write". - // Writes carry an address. Reads use an implicit address. - - unsigned char cmd[1]; - cmd[0] = eeprom_offset; - if (!usrp_i2c_write (udh, i2c_addr, cmd, sizeof (cmd))) - return false; - - while (len > 0){ - int n = std::min (len, MAX_EP0_PKTSIZE); - if (!usrp_i2c_read (udh, i2c_addr, p, n)) - return false; - len -= n; - p += n; - } - return true; -} - -// ---------------------------------------------------------------- - -static bool -slot_to_codec (int slot, int *which_codec) -{ - *which_codec = 0; - - switch (slot){ - case SLOT_TX_A: - case SLOT_RX_A: - *which_codec = 0; - break; - - case SLOT_TX_B: - case SLOT_RX_B: - *which_codec = 1; - break; - - default: - fprintf (stderr, "usrp_prims:slot_to_codec: invalid slot = %d\n", slot); - return false; - } - return true; -} - -static bool -tx_slot_p (int slot) -{ - switch (slot){ - case SLOT_TX_A: - case SLOT_TX_B: - return true; - - default: - return false; - } -} - -bool -usrp_write_aux_dac (struct usb_dev_handle *udh, int slot, - int which_dac, int value) -{ - int which_codec; - - if (!slot_to_codec (slot, &which_codec)) - return false; - - if (!(0 <= which_dac && which_dac < 4)){ - fprintf (stderr, "usrp_write_aux_dac: invalid dac = %d\n", which_dac); - return false; - } - - value &= 0x0fff; // mask to 12-bits - - if (which_dac == 3){ - // dac 3 is really 12-bits. Use value as is. - bool r = true; - r &= usrp_9862_write (udh, which_codec, 43, (value >> 4)); // most sig - r &= usrp_9862_write (udh, which_codec, 42, (value & 0xf) << 4); // least sig - return r; - } - else { - // dac 0, 1, and 2 are really 8 bits. - value = value >> 4; // shift value appropriately - return usrp_9862_write (udh, which_codec, 36 + which_dac, value); - } -} - - -bool -usrp_read_aux_adc (struct usb_dev_handle *udh, int slot, - int which_adc, int *value) -{ - *value = 0; - int which_codec; - - if (!slot_to_codec (slot, &which_codec)) - return false; - - if (!(0 <= which_codec && which_codec < 2)){ - fprintf (stderr, "usrp_read_aux_adc: invalid adc = %d\n", which_adc); - return false; - } - - unsigned char aux_adc_control = - AUX_ADC_CTRL_REFSEL_A // on chip reference - | AUX_ADC_CTRL_REFSEL_B; // on chip reference - - int rd_reg = 26; // base address of two regs to read for result - - // program the ADC mux bits - if (tx_slot_p (slot)) - aux_adc_control |= AUX_ADC_CTRL_SELECT_A2 | AUX_ADC_CTRL_SELECT_B2; - else { - rd_reg += 2; - aux_adc_control |= AUX_ADC_CTRL_SELECT_A1 | AUX_ADC_CTRL_SELECT_B1; - } - - // I'm not sure if we can set the mux and issue a start conversion - // in the same cycle, so let's do them one at a time. - - usrp_9862_write (udh, which_codec, 34, aux_adc_control); - - if (which_adc == 0) - aux_adc_control |= AUX_ADC_CTRL_START_A; - else { - rd_reg += 4; - aux_adc_control |= AUX_ADC_CTRL_START_B; - } - - // start the conversion - usrp_9862_write (udh, which_codec, 34, aux_adc_control); - - // read the 10-bit result back - unsigned char v_lo = 0; - unsigned char v_hi = 0; - bool r = usrp_9862_read (udh, which_codec, rd_reg, &v_lo); - r &= usrp_9862_read (udh, which_codec, rd_reg + 1, &v_hi); - - if (r) - *value = ((v_hi << 2) | ((v_lo >> 6) & 0x3)) << 2; // format as 12-bit - - return r; -} - -// ---------------------------------------------------------------- - -static int slot_to_i2c_addr (int slot) -{ - switch (slot){ - case SLOT_TX_A: return I2C_ADDR_TX_A; - case SLOT_RX_A: return I2C_ADDR_RX_A; - case SLOT_TX_B: return I2C_ADDR_TX_B; - case SLOT_RX_B: return I2C_ADDR_RX_B; - default: return -1; - } -} - -static void -set_chksum (unsigned char *buf) -{ - int sum = 0; - unsigned int i; - for (i = 0; i < DB_EEPROM_CLEN - 1; i++) - sum += buf[i]; - buf[i] = -sum; -} - -static usrp_dbeeprom_status_t -read_dboard_eeprom (struct usb_dev_handle *udh, - int slot_id, unsigned char *buf) -{ - int i2c_addr = slot_to_i2c_addr (slot_id); - if (i2c_addr == -1) - return UDBE_BAD_SLOT; - - if (!usrp_eeprom_read (udh, i2c_addr, 0, buf, DB_EEPROM_CLEN)) - return UDBE_NO_EEPROM; - - if (buf[DB_EEPROM_MAGIC] != DB_EEPROM_MAGIC_VALUE) - return UDBE_INVALID_EEPROM; - - int sum = 0; - for (unsigned int i = 0; i < DB_EEPROM_CLEN; i++) - sum += buf[i]; - - if ((sum & 0xff) != 0) - return UDBE_INVALID_EEPROM; - - return UDBE_OK; -} - -usrp_dbeeprom_status_t -usrp_read_dboard_eeprom (struct usb_dev_handle *udh, - int slot_id, usrp_dboard_eeprom *eeprom) -{ - unsigned char buf[DB_EEPROM_CLEN]; - - memset (eeprom, 0, sizeof (*eeprom)); - - usrp_dbeeprom_status_t s = read_dboard_eeprom (udh, slot_id, buf); - if (s != UDBE_OK) - return s; - - eeprom->id = (buf[DB_EEPROM_ID_MSB] << 8) | buf[DB_EEPROM_ID_LSB]; - eeprom->oe = (buf[DB_EEPROM_OE_MSB] << 8) | buf[DB_EEPROM_OE_LSB]; - eeprom->offset[0] = (buf[DB_EEPROM_OFFSET_0_MSB] << 8) | buf[DB_EEPROM_OFFSET_0_LSB]; - eeprom->offset[1] = (buf[DB_EEPROM_OFFSET_1_MSB] << 8) | buf[DB_EEPROM_OFFSET_1_LSB]; - - return UDBE_OK; -} - -bool -usrp_write_dboard_offsets (struct usb_dev_handle *udh, int slot_id, - short offset0, short offset1) -{ - unsigned char buf[DB_EEPROM_CLEN]; - - usrp_dbeeprom_status_t s = read_dboard_eeprom (udh, slot_id, buf); - if (s != UDBE_OK) - return false; - - buf[DB_EEPROM_OFFSET_0_LSB] = (offset0 >> 0) & 0xff; - buf[DB_EEPROM_OFFSET_0_MSB] = (offset0 >> 8) & 0xff; - buf[DB_EEPROM_OFFSET_1_LSB] = (offset1 >> 0) & 0xff; - buf[DB_EEPROM_OFFSET_1_MSB] = (offset1 >> 8) & 0xff; - set_chksum (buf); - - return usrp_eeprom_write (udh, slot_to_i2c_addr (slot_id), - 0, buf, sizeof (buf)); -} - -std::string -usrp_serial_number(struct usb_dev_handle *udh) -{ - unsigned char iserial = usb_device(udh)->descriptor.iSerialNumber; - if (iserial == 0) - return ""; - - char buf[1024]; - if (usb_get_string_simple(udh, iserial, buf, sizeof(buf)) < 0) - return ""; - - return buf; -} diff --git a/usrp/host/lib/usrp_standard.cc b/usrp/host/lib/usrp_standard.cc deleted file mode 100644 index 9032874d..00000000 --- a/usrp/host/lib/usrp_standard.cc +++ /dev/null @@ -1,831 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#include - -#include "usrp_prims.h" -#include "fpga_regs_common.h" -#include "fpga_regs_standard.h" -#include -#include -#include -#include - - -static const int OLD_CAPS_VAL = 0xaa55ff77; -static const int DEFAULT_CAPS_VAL = ((2 << bmFR_RB_CAPS_NDUC_SHIFT) - | (2 << bmFR_RB_CAPS_NDDC_SHIFT) - | bmFR_RB_CAPS_RX_HAS_HALFBAND); - -// #define USE_FPGA_TX_CORDIC - - -using namespace ad9862; - -#define NELEM(x) (sizeof (x) / sizeof (x[0])) - - -static unsigned int -compute_freq_control_word_fpga (double master_freq, double target_freq, - double *actual_freq, bool verbose) -{ - static const int NBITS = 14; - - int v = (int) rint (target_freq / master_freq * pow (2.0, 32.0)); - - if (0) - v = (v >> (32 - NBITS)) << (32 - NBITS); // keep only top NBITS - - *actual_freq = v * master_freq / pow (2.0, 32.0); - - if (verbose) - fprintf (stderr, - "compute_freq_control_word_fpga: target = %g actual = %g delta = %g\n", - target_freq, *actual_freq, *actual_freq - target_freq); - - return (unsigned int) v; -} - -// The 9862 uses an unsigned 24-bit frequency tuning word and -// a separate register to control the sign. - -static unsigned int -compute_freq_control_word_9862 (double master_freq, double target_freq, - double *actual_freq, bool verbose) -{ - double sign = 1.0; - - if (target_freq < 0) - sign = -1.0; - - int v = (int) rint (fabs (target_freq) / master_freq * pow (2.0, 24.0)); - *actual_freq = v * master_freq / pow (2.0, 24.0) * sign; - - if (verbose) - fprintf (stderr, - "compute_freq_control_word_9862: target = %g actual = %g delta = %g v = %8d\n", - target_freq, *actual_freq, *actual_freq - target_freq, v); - - return (unsigned int) v; -} - -// ---------------------------------------------------------------- - -usrp_standard_common::usrp_standard_common(usrp_basic *parent) -{ - // read new FPGA capability register - if (!parent->_read_fpga_reg(FR_RB_CAPS, &d_fpga_caps)){ - fprintf (stderr, "usrp_standard_common: failed to read FPGA cap register.\n"); - throw std::runtime_error ("usrp_standard_common::ctor"); - } - // If we don't have the cap register, set the value to what it would - // have had if we did have one ;) - if (d_fpga_caps == OLD_CAPS_VAL) - d_fpga_caps = DEFAULT_CAPS_VAL; - - if (0){ - fprintf(stdout, "has_rx_halfband = %d\n", has_rx_halfband()); - fprintf(stdout, "nddcs = %d\n", nddcs()); - fprintf(stdout, "has_tx_halfband = %d\n", has_tx_halfband()); - fprintf(stdout, "nducs = %d\n", nducs()); - } -} - -bool -usrp_standard_common::has_rx_halfband() const -{ - return (d_fpga_caps & bmFR_RB_CAPS_RX_HAS_HALFBAND) ? true : false; -} - -int -usrp_standard_common::nddcs() const -{ - return (d_fpga_caps & bmFR_RB_CAPS_NDDC_MASK) >> bmFR_RB_CAPS_NDDC_SHIFT; -} - -bool -usrp_standard_common::has_tx_halfband() const -{ - return (d_fpga_caps & bmFR_RB_CAPS_TX_HAS_HALFBAND) ? true : false; -} - -int -usrp_standard_common::nducs() const -{ - return (d_fpga_caps & bmFR_RB_CAPS_NDUC_MASK) >> bmFR_RB_CAPS_NDUC_SHIFT; -} - -// ---------------------------------------------------------------- - -static int -real_rx_mux_value (int mux, int nchan) -{ - if (mux != -1) - return mux; - - return 0x32103210; -} - -usrp_standard_rx::usrp_standard_rx (int which_board, - unsigned int decim_rate, - int nchan, int mux, int mode, - int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) - : usrp_basic_rx (which_board, fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename), - usrp_standard_common(this), - d_nchan (1), d_sw_mux (0x0), d_hw_mux (0x0) -{ - if (!set_format(make_format())){ - fprintf (stderr, "usrp_standard_rx: set_format failed\n"); - throw std::runtime_error ("usrp_standard_rx::ctor"); - } - if (!set_nchannels (nchan)){ - fprintf (stderr, "usrp_standard_rx: set_nchannels failed\n"); - throw std::runtime_error ("usrp_standard_rx::ctor"); - } - if (!set_decim_rate (decim_rate)){ - fprintf (stderr, "usrp_standard_rx: set_decim_rate failed\n"); - throw std::runtime_error ("usrp_standard_rx::ctor"); - } - if (!set_mux (real_rx_mux_value (mux, nchan))){ - fprintf (stderr, "usrp_standard_rx: set_mux failed\n"); - throw std::runtime_error ("usrp_standard_rx::ctor"); - } - if (!set_fpga_mode (mode)){ - fprintf (stderr, "usrp_standard_rx: set_fpga_mode failed\n"); - throw std::runtime_error ("usrp_standard_rx::ctor"); - } - - for (int i = 0; i < MAX_CHAN; i++){ - set_rx_freq(i, 0); - set_ddc_phase(i, 0); - } -} - -usrp_standard_rx::~usrp_standard_rx () -{ - // fprintf(stderr, "\nusrp_standard_rx: dtor\n"); -} - -bool -usrp_standard_rx::start () -{ - if (!usrp_basic_rx::start ()) - return false; - - // add our code here - - return true; -} - -bool -usrp_standard_rx::stop () -{ - bool ok = usrp_basic_rx::stop (); - - // add our code here - - return ok; -} - -usrp_standard_rx * -usrp_standard_rx::make (int which_board, - unsigned int decim_rate, - int nchan, int mux, int mode, - int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) -{ - usrp_standard_rx *u = 0; - - try { - u = new usrp_standard_rx (which_board, decim_rate, - nchan, mux, mode, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename); - return u; - } - catch (...){ - delete u; - return 0; - } - - return u; -} - -bool -usrp_standard_rx::set_decim_rate(unsigned int rate) -{ - if ((rate & 0x1) || rate < 4 || rate > 256){ - fprintf (stderr, "usrp_standard_rx::set_decim_rate: rate must be EVEN and in [4, 256]\n"); - return false; - } - - d_decim_rate = rate; - set_usb_data_rate ((adc_rate () / rate * nchannels ()) - * (2 * sizeof (short))); - - bool s = disable_rx (); - int v = has_rx_halfband() ? d_decim_rate/2 - 1 : d_decim_rate - 1; - bool ok = _write_fpga_reg (FR_DECIM_RATE, v); - restore_rx (s); - return ok; -} - -bool usrp_standard_rx::set_nchannels (int nchan) -{ - if (!(nchan == 1 || nchan == 2 || nchan == 4)) - return false; - - if (nchan > nddcs()) - return false; - - d_nchan = nchan; - - return write_hw_mux_reg (); -} - - -// map software mux value to hw mux value -// -// Software mux value: -// -// 3 2 1 -// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -// +-------+-------+-------+-------+-------+-------+-------+-------+ -// | Q3 | I3 | Q2 | I2 | Q1 | I1 | Q0 | I0 | -// +-------+-------+-------+-------+-------+-------+-------+-------+ -// -// Each 4-bit I field is either 0,1,2,3 -// Each 4-bit Q field is either 0,1,2,3 or 0xf (input is const zero) -// All Q's must be 0xf or none of them may be 0xf -// -// -// Hardware mux value: -// -// 3 2 1 -// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -// +-----------------------+-------+-------+-------+-------+-+-----+ -// | must be zero | Q3| I3| Q2| I2| Q1| I1| Q0| I0|Z| NCH | -// +-----------------------+-------+-------+-------+-------+-+-----+ - - -static bool -map_sw_mux_to_hw_mux (int sw_mux, int *hw_mux_ptr) -{ - // confirm that all I's are either 0,1,2,3 - - for (int i = 0; i < 8; i += 2){ - int t = (sw_mux >> (4 * i)) & 0xf; - if (!(0 <= t && t <= 3)) - return false; - } - - // confirm that all Q's are either 0,1,2,3 or 0xf - - for (int i = 1; i < 8; i += 2){ - int t = (sw_mux >> (4 * i)) & 0xf; - if (!(t == 0xf || (0 <= t && t <= 3))) - return false; - } - - // confirm that all Q inputs are 0xf (const zero input), - // or none of them are 0xf - - int q_and = 1; - int q_or = 0; - - for (int i = 0; i < 4; i++){ - int qx_is_0xf = ((sw_mux >> (8 * i + 4)) & 0xf) == 0xf; - q_and &= qx_is_0xf; - q_or |= qx_is_0xf; - } - - if (q_and || !q_or){ // OK - int hw_mux_value = 0; - - for (int i = 0; i < 8; i++){ - int t = (sw_mux >> (4 * i)) & 0x3; - hw_mux_value |= t << (2 * i + 4); - } - - if (q_and) - hw_mux_value |= 0x8; // all Q's zero - - *hw_mux_ptr = hw_mux_value; - return true; - } - else - return false; -} - -bool -usrp_standard_rx::set_mux (int mux) -{ - if (!map_sw_mux_to_hw_mux (mux, &d_hw_mux)) - return false; - - // fprintf (stderr, "sw_mux = 0x%08x hw_mux = 0x%08x\n", mux, d_hw_mux); - - d_sw_mux = mux; - return write_hw_mux_reg (); -} - -bool -usrp_standard_rx::write_hw_mux_reg () -{ - bool s = disable_rx (); - bool ok = _write_fpga_reg (FR_RX_MUX, d_hw_mux | d_nchan); - restore_rx (s); - return ok; -} - - -bool -usrp_standard_rx::set_rx_freq (int channel, double freq) -{ - if (channel < 0 || channel > MAX_CHAN) - return false; - - unsigned int v = - compute_freq_control_word_fpga (adc_freq(), - freq, &d_rx_freq[channel], - d_verbose); - - return _write_fpga_reg (FR_RX_FREQ_0 + channel, v); -} - -unsigned int -usrp_standard_rx::decim_rate () const { return d_decim_rate; } - -int -usrp_standard_rx::nchannels () const { return d_nchan; } - -int -usrp_standard_rx::mux () const { return d_sw_mux; } - -double -usrp_standard_rx::rx_freq (int channel) const -{ - if (channel < 0 || channel >= MAX_CHAN) - return 0; - - return d_rx_freq[channel]; -} - -bool -usrp_standard_rx::set_fpga_mode (int mode) -{ - return _write_fpga_reg (FR_MODE, mode); -} - -bool -usrp_standard_rx::set_ddc_phase(int channel, int phase) -{ - if (channel < 0 || channel >= MAX_CHAN) - return false; - - return _write_fpga_reg(FR_RX_PHASE_0 + channel, phase); -} - - -// To avoid quiet failures, check for things that our code cares about. - -static bool -rx_format_is_valid(unsigned int format) -{ - int width = usrp_standard_rx::format_width(format); - int want_q = usrp_standard_rx::format_want_q(format); - - if (!(width == 8 || width == 16)) // FIXME add other widths when valid - return false; - - if (!want_q) // FIXME remove check when the rest of the code can handle I only - return false; - - return true; -} - -bool -usrp_standard_rx::set_format(unsigned int format) -{ - if (!rx_format_is_valid(format)) - return false; - - return _write_fpga_reg(FR_RX_FORMAT, format); -} - -unsigned int -usrp_standard_rx::format() const -{ - return d_fpga_shadows[FR_RX_FORMAT]; -} - -// ---------------------------------------------------------------- - -unsigned int -usrp_standard_rx::make_format(int width, int shift, bool want_q, bool bypass_halfband) -{ - unsigned int format = - (((width << bmFR_RX_FORMAT_WIDTH_SHIFT) & bmFR_RX_FORMAT_WIDTH_MASK) - | (shift << bmFR_RX_FORMAT_SHIFT_SHIFT) & bmFR_RX_FORMAT_SHIFT_MASK); - - if (want_q) - format |= bmFR_RX_FORMAT_WANT_Q; - if (bypass_halfband) - format |= bmFR_RX_FORMAT_BYPASS_HB; - - return format; -} - -int -usrp_standard_rx::format_width(unsigned int format) -{ - return (format & bmFR_RX_FORMAT_WIDTH_MASK) >> bmFR_RX_FORMAT_WIDTH_SHIFT; -} - -int -usrp_standard_rx::format_shift(unsigned int format) -{ - return (format & bmFR_RX_FORMAT_SHIFT_MASK) >> bmFR_RX_FORMAT_SHIFT_SHIFT; -} - -bool -usrp_standard_rx::format_want_q(unsigned int format) -{ - return (format & bmFR_RX_FORMAT_WANT_Q) != 0; -} - -bool -usrp_standard_rx::format_bypass_halfband(unsigned int format) -{ - return (format & bmFR_RX_FORMAT_BYPASS_HB) != 0; -} - -////////////////////////////////////////////////////////////////// - - -// tx data is timed to CLKOUT1 (64 MHz) -// interpolate 4x -// fine modulator enabled - - -static unsigned char tx_regs_use_nco[] = { - REG_TX_IF, (TX_IF_USE_CLKOUT1 - | TX_IF_I_FIRST - | TX_IF_2S_COMP - | TX_IF_INTERLEAVED), - REG_TX_DIGITAL, (TX_DIGITAL_2_DATA_PATHS - | TX_DIGITAL_INTERPOLATE_4X) -}; - - -static int -real_tx_mux_value (int mux, int nchan) -{ - if (mux != -1) - return mux; - - switch (nchan){ - case 1: - return 0x0098; - case 2: - return 0xba98; - default: - assert (0); - } -} - -usrp_standard_tx::usrp_standard_tx (int which_board, - unsigned int interp_rate, - int nchan, int mux, - int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) - : usrp_basic_tx (which_board, fusb_block_size, fusb_nblocks, fpga_filename, firmware_filename), - usrp_standard_common(this), - d_sw_mux (0x8), d_hw_mux (0x81) -{ - if (!usrp_9862_write_many_all (d_udh, tx_regs_use_nco, sizeof (tx_regs_use_nco))){ - fprintf (stderr, "usrp_standard_tx: failed to init AD9862 TX regs\n"); - throw std::runtime_error ("usrp_standard_tx::ctor"); - } - if (!set_nchannels (nchan)){ - fprintf (stderr, "usrp_standard_tx: set_nchannels failed\n"); - throw std::runtime_error ("usrp_standard_tx::ctor"); - } - if (!set_interp_rate (interp_rate)){ - fprintf (stderr, "usrp_standard_tx: set_interp_rate failed\n"); - throw std::runtime_error ("usrp_standard_tx::ctor"); - } - if (!set_mux (real_tx_mux_value (mux, nchan))){ - fprintf (stderr, "usrp_standard_tx: set_mux failed\n"); - throw std::runtime_error ("usrp_standard_tx::ctor"); - } - - for (int i = 0; i < MAX_CHAN; i++){ - d_tx_modulator_shadow[i] = (TX_MODULATOR_DISABLE_NCO - | TX_MODULATOR_COARSE_MODULATION_NONE); - d_coarse_mod[i] = CM_OFF; - set_tx_freq (i, 0); - } -} - -usrp_standard_tx::~usrp_standard_tx () -{ - // fprintf(stderr, "\nusrp_standard_tx: dtor\n"); -} - -bool -usrp_standard_tx::start () -{ - if (!usrp_basic_tx::start ()) - return false; - - // add our code here - - return true; -} - -bool -usrp_standard_tx::stop () -{ - bool ok = usrp_basic_tx::stop (); - - // add our code here - - return ok; -} - -usrp_standard_tx * -usrp_standard_tx::make (int which_board, - unsigned int interp_rate, - int nchan, int mux, - int fusb_block_size, int fusb_nblocks, - const std::string fpga_filename, - const std::string firmware_filename - ) -{ - usrp_standard_tx *u = 0; - - try { - u = new usrp_standard_tx (which_board, interp_rate, nchan, mux, - fusb_block_size, fusb_nblocks, - fpga_filename, firmware_filename); - return u; - } - catch (...){ - delete u; - return 0; - } - - return u; -} - -bool -usrp_standard_tx::set_interp_rate (unsigned int rate) -{ - // fprintf (stderr, "usrp_standard_tx::set_interp_rate\n"); - - if ((rate & 0x3) || rate < 4 || rate > 512){ - fprintf (stderr, "usrp_standard_tx::set_interp_rate: rate must be in [4, 512] and a multiple of 4.\n"); - return false; - } - - d_interp_rate = rate; - set_usb_data_rate ((dac_rate () / rate * nchannels ()) - * (2 * sizeof (short))); - - // We're using the interp by 4 feature of the 9862 so that we can - // use its fine modulator. Thus, we reduce the FPGA's interpolation rate - // by a factor of 4. - - bool s = disable_tx (); - bool ok = _write_fpga_reg (FR_INTERP_RATE, d_interp_rate/4 - 1); - restore_tx (s); - return ok; -} - -bool -usrp_standard_tx::set_nchannels (int nchan) -{ - if (!(nchan == 1 || nchan == 2)) - return false; - - if (nchan > nducs()) - return false; - - d_nchan = nchan; - return write_hw_mux_reg (); -} - -bool -usrp_standard_tx::set_mux (int mux) -{ - d_sw_mux = mux; - d_hw_mux = mux << 4; - return write_hw_mux_reg (); -} - -bool -usrp_standard_tx::write_hw_mux_reg () -{ - bool s = disable_tx (); - bool ok = _write_fpga_reg (FR_TX_MUX, d_hw_mux | d_nchan); - restore_tx (s); - return ok; -} - -#ifdef USE_FPGA_TX_CORDIC - -bool -usrp_standard_tx::set_tx_freq (int channel, double freq) -{ - if (channel < 0 || channel >= MAX_CHAN) - return false; - - // This assumes we're running the 4x on-chip interpolator. - - unsigned int v = - compute_freq_control_word_fpga (dac_freq () / 4, - freq, &d_tx_freq[channel], - d_verbose); - - return _write_fpga_reg (FR_TX_FREQ_0 + channel, v); -} - - -#else - -bool -usrp_standard_tx::set_tx_freq (int channel, double freq) -{ - if (channel < 0 || channel >= MAX_CHAN) - return false; - - // split freq into fine and coarse components - - coarse_mod_t cm; - double coarse; - - assert (dac_freq () == 128000000); - - if (freq < -44e6) // too low - return false; - else if (freq < -24e6){ // [-44, -24) - cm = CM_NEG_FDAC_OVER_4; - coarse = -dac_freq () / 4; - } - else if (freq < -8e6){ // [-24, -8) - cm = CM_NEG_FDAC_OVER_8; - coarse = -dac_freq () / 8; - } - else if (freq < 8e6){ // [-8, 8) - cm = CM_OFF; - coarse = 0; - } - else if (freq < 24e6){ // [8, 24) - cm = CM_POS_FDAC_OVER_8; - coarse = dac_freq () / 8; - } - else if (freq <= 44e6){ // [24, 44] - cm = CM_POS_FDAC_OVER_4; - coarse = dac_freq () / 4; - } - else // too high - return false; - - - set_coarse_modulator (channel, cm); // set bits in d_tx_modulator_shadow - - double fine = freq - coarse; - - - // Compute fine tuning word... - // This assumes we're running the 4x on-chip interpolator. - // (This is required to use the fine modulator.) - - unsigned int v = - compute_freq_control_word_9862 (dac_freq () / 4, - fine, &d_tx_freq[channel], d_verbose); - - d_tx_freq[channel] += coarse; // adjust actual - - unsigned char high, mid, low; - - high = (v >> 16) & 0xff; - mid = (v >> 8) & 0xff; - low = (v >> 0) & 0xff; - - bool ok = true; - - // write the fine tuning word - ok &= _write_9862 (channel, REG_TX_NCO_FTW_23_16, high); - ok &= _write_9862 (channel, REG_TX_NCO_FTW_15_8, mid); - ok &= _write_9862 (channel, REG_TX_NCO_FTW_7_0, low); - - - d_tx_modulator_shadow[channel] |= TX_MODULATOR_ENABLE_NCO; - - if (fine < 0) - d_tx_modulator_shadow[channel] |= TX_MODULATOR_NEG_FINE_TUNE; - else - d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_NEG_FINE_TUNE; - - ok &=_write_9862 (channel, REG_TX_MODULATOR, d_tx_modulator_shadow[channel]); - - return ok; -} -#endif - -bool -usrp_standard_tx::set_coarse_modulator (int channel, coarse_mod_t cm) -{ - if (channel < 0 || channel >= MAX_CHAN) - return false; - - switch (cm){ - case CM_NEG_FDAC_OVER_4: - d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; - d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_4; - d_tx_modulator_shadow[channel] |= TX_MODULATOR_NEG_COARSE_TUNE; - break; - - case CM_NEG_FDAC_OVER_8: - d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; - d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_8; - d_tx_modulator_shadow[channel] |= TX_MODULATOR_NEG_COARSE_TUNE; - break; - - case CM_OFF: - d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; - break; - - case CM_POS_FDAC_OVER_8: - d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; - d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_8; - break; - - case CM_POS_FDAC_OVER_4: - d_tx_modulator_shadow[channel] &= ~TX_MODULATOR_CM_MASK; - d_tx_modulator_shadow[channel] |= TX_MODULATOR_COARSE_MODULATION_F_OVER_4; - break; - - default: - return false; - } - - d_coarse_mod[channel] = cm; - return true; -} - -unsigned int -usrp_standard_tx::interp_rate () const { return d_interp_rate; } - -int -usrp_standard_tx::nchannels () const { return d_nchan; } - -int -usrp_standard_tx::mux () const { return d_sw_mux; } - -double -usrp_standard_tx::tx_freq (int channel) const -{ - if (channel < 0 || channel >= MAX_CHAN) - return 0; - - return d_tx_freq[channel]; -} - -usrp_standard_tx::coarse_mod_t -usrp_standard_tx::coarse_modulator (int channel) const -{ - if (channel < 0 || channel >= MAX_CHAN) - return CM_OFF; - - return d_coarse_mod[channel]; -} diff --git a/usrp/host/lib/usrp_standard.h b/usrp/host/lib/usrp_standard.h deleted file mode 100644 index 93a8aa56..00000000 --- a/usrp/host/lib/usrp_standard.h +++ /dev/null @@ -1,366 +0,0 @@ -/* -*- c++ -*- */ -/* - * 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. - */ - -#ifndef INCLUDED_USRP_STANDARD_H -#define INCLUDED_USRP_STANDARD_H - -#include - -class usrp_standard_common -{ - int d_fpga_caps; // capability register val - -protected: - usrp_standard_common(usrp_basic *parent); - -public: - /*! - *\brief does the FPGA implement the final Rx half-band filter? - * If it doesn't, the maximum decimation factor with proper gain - * is 1/2 of what it would otherwise be. - */ - bool has_rx_halfband() const; - - /*! - * \brief number of digital downconverters implemented in the FPGA - * This will be 0, 1, 2 or 4. - */ - int nddcs() const; - - /*! - *\brief does the FPGA implement the initial Tx half-band filter? - */ - bool has_tx_halfband() const; - - /*! - * \brief number of digital upconverters implemented in the FPGA - * This will be 0, 1, or 2. - */ - int nducs() const; -}; - -/*! - * \brief standard usrp RX class. - * - * Assumes digital down converter in FPGA - */ -class usrp_standard_rx : public usrp_basic_rx, usrp_standard_common -{ - private: - static const int MAX_CHAN = 4; - unsigned int d_decim_rate; - int d_nchan; - int d_sw_mux; - int d_hw_mux; - double d_rx_freq[MAX_CHAN]; - - protected: - usrp_standard_rx (int which_board, - unsigned int decim_rate, - int nchan = 1, - int mux = -1, - int mode = 0, - int fusb_block_size = 0, - int fusb_nblocks = 0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); // throws if trouble - - bool write_hw_mux_reg (); - - public: - - enum { - FPGA_MODE_NORMAL = 0x00, - FPGA_MODE_LOOPBACK = 0x01, - FPGA_MODE_COUNTING = 0x02, - FPGA_MODE_COUNTING_32BIT = 0x04 - }; - - ~usrp_standard_rx (); - - /*! - * \brief invokes constructor, returns instance or 0 if trouble - * - * \param which_board Which USRP board on usb (not particularly useful; use 0) - * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. - * Use zero for a reasonable default. - * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. - */ - static usrp_standard_rx *make (int which_board, - unsigned int decim_rate, - int nchan = 1, - int mux = -1, - int mode = 0, - int fusb_block_size = 0, - int fusb_nblocks = 0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); - /*! - * \brief Set decimator rate. \p rate MUST BE EVEN and in [8, 256]. - * - * The final complex sample rate across the USB is - * adc_freq () / decim_rate () * nchannels () - */ - bool set_decim_rate (unsigned int rate); - - /*! - * \brief Set number of active channels. \p nchannels must be 1, 2 or 4. - * - * The final complex sample rate across the USB is - * adc_freq () / decim_rate () * nchannels () - */ - bool set_nchannels (int nchannels); - - /*! - * \brief Set input mux configuration. - * - * This determines which ADC (or constant zero) is connected to - * each DDC input. There are 4 DDCs. Each has two inputs. - * - *
-   * Mux value:
-   *
-   *    3                   2                   1                       
-   *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
-   * +-------+-------+-------+-------+-------+-------+-------+-------+
-   * |   Q3  |   I3  |   Q2  |   I2  |   Q1  |   I1  |   Q0  |   I0  |
-   * +-------+-------+-------+-------+-------+-------+-------+-------+
-   *
-   * Each 4-bit I field is either 0,1,2,3
-   * Each 4-bit Q field is either 0,1,2,3 or 0xf (input is const zero)
-   * All Q's must be 0xf or none of them may be 0xf
-   * 
- */ - bool set_mux (int mux); - - /*! - * \brief set the frequency of the digital down converter. - * - * \p channel must be in the range [0,3]. \p freq is the center - * frequency in Hz. \p freq may be either negative or postive. - * The frequency specified is quantized. Use rx_freq to retrieve - * the actual value used. - */ - bool set_rx_freq (int channel, double freq); - - /*! - * \brief set fpga mode - */ - bool set_fpga_mode (int mode); - - /*! - * \brief Set the digital down converter phase register. - * - * \param channel which ddc channel [0, 3] - * \param phase 32-bit integer phase value. - */ - bool set_ddc_phase(int channel, int phase); - - /*! - * \brief Specify Rx data format. - * - * \param format format specifier - * - * Rx data format control register - * - * 3 2 1 - * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 - * +-----------------------------------------+-+-+---------+-------+ - * | Reserved (Must be zero) |B|Q| WIDTH | SHIFT | - * +-----------------------------------------+-+-+---------+-------+ - * - * SHIFT specifies arithmetic right shift [0, 15] - * WIDTH specifies bit-width of I & Q samples across the USB [1, 16] (not all valid) - * Q if set deliver both I & Q, else just I - * B if set bypass half-band filter. - * - * Right now the acceptable values are: - * - * B Q WIDTH SHIFT - * 0 1 16 0 - * 0 1 8 8 - * - * More valid combos to come. - * - * Default value is 0x00000300 16-bits, 0 shift, deliver both I & Q. - */ - bool set_format(unsigned int format); - - static unsigned int make_format(int width=16, int shift=0, - bool want_q=true, bool bypass_halfband=false); - static int format_width(unsigned int format); - static int format_shift(unsigned int format); - static bool format_want_q(unsigned int format); - static bool format_bypass_halfband(unsigned int format); - - // ACCESSORS - unsigned int decim_rate () const; - double rx_freq (int channel) const; - int nchannels () const; - int mux () const; - unsigned int format () const; - - // called in base class to derived class order - bool start (); - bool stop (); -}; - -// ---------------------------------------------------------------- - -/*! - * \brief standard usrp TX class. - * - * Uses digital upconverter (coarse & fine modulators) in AD9862... - */ -class usrp_standard_tx : public usrp_basic_tx, usrp_standard_common -{ - public: - enum coarse_mod_t { - CM_NEG_FDAC_OVER_4, // -32 MHz - CM_NEG_FDAC_OVER_8, // -16 MHz - CM_OFF, - CM_POS_FDAC_OVER_8, // +16 MHz - CM_POS_FDAC_OVER_4 // +32 MHz - }; - - protected: - static const int MAX_CHAN = 2; - unsigned int d_interp_rate; - int d_nchan; - int d_sw_mux; - int d_hw_mux; - double d_tx_freq[MAX_CHAN]; - coarse_mod_t d_coarse_mod[MAX_CHAN]; - unsigned char d_tx_modulator_shadow[MAX_CHAN]; - - virtual bool set_coarse_modulator (int channel, coarse_mod_t cm); - usrp_standard_tx::coarse_mod_t coarse_modulator (int channel) const; - - protected: - usrp_standard_tx (int which_board, - unsigned int interp_rate, - int nchan = 1, - int mux = -1, - int fusb_block_size = 0, - int fusb_nblocks = 0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); // throws if trouble - - bool write_hw_mux_reg (); - - public: - ~usrp_standard_tx (); - - /*! - * \brief invokes constructor, returns instance or 0 if trouble - * - * \param which_board Which USRP board on usb (not particularly useful; use 0) - * \param fusb_block_size fast usb xfer block size. Must be a multiple of 512. - * Use zero for a reasonable default. - * \param fusb_nblocks number of fast usb URBs to allocate. Use zero for a reasonable default. - */ - static usrp_standard_tx *make (int which_board, - unsigned int interp_rate, - int nchan = 1, - int mux = -1, - int fusb_block_size = 0, - int fusb_nblocks = 0, - const std::string fpga_filename = "", - const std::string firmware_filename = "" - ); - - /*! - * \brief Set interpolator rate. \p rate must be in [4, 512] and a multiple of 4. - * - * The final complex sample rate across the USB is - * dac_freq () / interp_rate () * nchannels () - */ - virtual bool set_interp_rate (unsigned int rate); - - /*! - * \brief Set number of active channels. \p nchannels must be 1 or 2. - * - * The final complex sample rate across the USB is - * dac_freq () / decim_rate () * nchannels () - */ - bool set_nchannels (int nchannels); - - /*! - * \brief Set output mux configuration. - * - *
-   *     3                   2                   1                       
-   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
-   *  +-------------------------------+-------+-------+-------+-------+
-   *  |                               | DAC3  | DAC2  | DAC1  |  DAC0 |
-   *  +-------------------------------+-------+-------+-------+-------+
-   * 
-   *  There are two interpolators with complex inputs and outputs.
-   *  There are four DACs.
-   * 
-   *  Each 4-bit DACx field specifies the source for the DAC and
-   *  whether or not that DAC is enabled.  Each subfield is coded
-   *  like this: 
-   * 
-   *     3 2 1 0
-   *    +-+-----+
-   *    |E|  N  |
-   *    +-+-----+
-   * 
-   *  Where E is set if the DAC is enabled, and N specifies which
-   *  interpolator output is connected to this DAC.
-   * 
-   *   N   which interp output
-   *  ---  -------------------
-   *   0   chan 0 I
-   *   1   chan 0 Q
-   *   2   chan 1 I
-   *   3   chan 1 Q
-   * 
- */ - bool set_mux (int mux); - - /*! - * \brief set the frequency of the digital up converter. - * - * \p channel must be in the range [0,1]. \p freq is the center - * frequency in Hz. It must be in the range [-44M, 44M]. - * The frequency specified is quantized. Use tx_freq to retrieve - * the actual value used. - */ - virtual bool set_tx_freq (int channel, double freq); // chan: [0,1] - - // ACCESSORS - unsigned int interp_rate () const; - double tx_freq (int channel) const; - int nchannels () const; - int mux () const; - - // called in base class to derived class order - bool start (); - bool stop (); -}; - -#endif /* INCLUDED_USRP_STANDARD_H */ diff --git a/usrp/host/misc/Makefile.am b/usrp/host/misc/Makefile.am index c201735c..45c940f6 100644 --- a/usrp/host/misc/Makefile.am +++ b/usrp/host/misc/Makefile.am @@ -19,6 +19,8 @@ # Boston, MA 02110-1301, USA. # +include $(top_srcdir)/Makefile.common + EXTRA_DIST = \ getopt.c getopt.h \ gettimeofday.c \ diff --git a/usrp/host/misc/Makefile.in b/usrp/host/misc/Makefile.in index b7006d3a..08669954 100644 --- a/usrp/host/misc/Makefile.in +++ b/usrp/host/misc/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -35,15 +35,33 @@ # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -58,29 +76,40 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common getopt.c gettimeofday.c \ + mkstemp.c tempname.c usleep.c subdir = usrp/host/misc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in getopt.c \ - gettimeofday.c mkstemp.c tempname.c usleep.c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -89,15 +118,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -114,25 +163,27 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libmisc_la_DEPENDENCIES = @LTLIBOBJS@ am_libmisc_la_OBJECTS = bug_work_around_8.lo libmisc_la_OBJECTS = $(am_libmisc_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libmisc_la_SOURCES) DIST_SOURCES = $(libmisc_la_SOURCES) ETAGS = etags @@ -141,10 +192,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -152,9 +202,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -162,6 +219,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -174,73 +233,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -250,49 +302,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -300,15 +392,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -318,16 +553,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -336,12 +589,132 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT EXTRA_DIST = \ getopt.c getopt.h \ gettimeofday.c \ @@ -355,12 +728,12 @@ all: all-am .SUFFIXES: .SUFFIXES: .c .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -394,7 +767,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libmisc.la: $(libmisc_la_OBJECTS) $(libmisc_la_DEPENDENCIES) - $(CXXLINK) $(libmisc_la_LDFLAGS) $(libmisc_la_OBJECTS) $(libmisc_la_LIBADD) $(LIBS) + $(CXXLINK) $(libmisc_la_OBJECTS) $(libmisc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -410,43 +783,43 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bug_work_around_8.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -457,17 +830,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -479,8 +848,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -490,13 +859,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -510,22 +878,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -536,6 +903,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) @@ -555,6 +925,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -573,7 +944,7 @@ distclean: distclean-am -rm -rf $(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -587,12 +958,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -613,20 +992,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am + clean-libtool clean-noinstLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/host/misc/getopt.c b/usrp/host/misc/getopt.c index 75be3307..34eeaa6a 100644 --- a/usrp/host/misc/getopt.c +++ b/usrp/host/misc/getopt.c @@ -52,6 +52,7 @@ char *alloca (); #endif #include +#include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C diff --git a/usrp/host/swig/Makefile.am b/usrp/host/swig/Makefile.am index 95fd1c75..6af452b0 100644 --- a/usrp/host/swig/Makefile.am +++ b/usrp/host/swig/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001,2003,2004,2006 Free Software Foundation, Inc. +# Copyright 2001,2003,2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,64 +21,42 @@ include $(top_srcdir)/Makefile.common -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/usrp_prims +AM_CPPFLAGS = \ + $(USRP_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + -I$(srcdir) \ + $(WITH_INCLUDES) -ourpythondir = $(pythondir) -ourlibdir = $(pyexecdir) +################################# +# SWIG interface and library -INCLUDES = $(USRP_INCLUDES) \ - $(PYTHON_CPPFLAGS) \ - -I$(srcdir) +TOP_SWIG_IFILES = \ + usrp_prims.i -LOCAL_IFILES = \ - prims.i +# Install so that they end up available as: +# import usrpm.usrp_prims +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrp_prims_pythondir_category = \ + usrpm +# additional arguments to the SWIG command +usrp_prims_swig_args = \ + $(USRP_INCLUDES) -ALL_IFILES = \ - $(LOCAL_IFILES) +# additional libraries for linking with the SWIG-generated library +usrp_prims_la_swig_libadd = \ + $(USRP_LA) +# additional Python files to be installed along with the SWIG-generated one +usrp_prims_python = \ + __init__.py \ + usrp_fpga_regs.py -EXTRA_DIST = \ - $(LOCAL_IFILES) +include $(top_srcdir)/Makefile.swig +# add some of the variables generated inside the Makefile.swig.gen +BUILT_SOURCES = $(swig_built_sources) -BUILT_SOURCES = \ - prims.cc \ - usrp_prims.py - - -ourpython_PYTHON = \ - __init__.py \ - usrp_fpga_regs.py \ - usrp_prims.py - - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(INCLUDES) - - -ourlib_LTLIBRARIES = \ - _usrp_prims.la - -_usrp_prims_la_SOURCES = \ - prims.cc - - -noinst_HEADERS = - -_usrp_prims_la_LIBADD = $(top_builddir)/usrp/host/lib/libusrp.la -lstdc++ $(PYTHON_LDFLAGS) -_usrp_prims_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version - - -prims.cc usrp_prims.py : prims.i ../../firmware/include/fpga_regs_common.h ../../firmware/include/fpga_regs_standard.h - $(SWIG) $(SWIGPYTHONARGS) -module usrp_prims -o prims.cc prims.i - - -MOSTLYCLEANFILES = \ - prims.cc usrp_prims.py *~ *.pyc - -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done - +# Do not distribute the output of SWIG +no_dist_files = $(swig_built_sources) diff --git a/usrp/host/swig/Makefile.in b/usrp/host/swig/Makefile.in index 16e40d6a..f5370d43 100644 --- a/usrp/host/swig/Makefile.in +++ b/usrp/host/swig/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001,2003,2004,2006 Free Software Foundation, Inc. +# Copyright 2001,2003,2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -57,16 +57,58 @@ # Boston, MA 02110-1301, USA. # +# -*- 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 -*- +# +# 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 usrp_prims.i + -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -81,30 +123,41 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(noinst_HEADERS) $(ourpython_PYTHON) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/Makefile.common +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.swig.gen $(top_srcdir)/Makefile.common \ + $(top_srcdir)/Makefile.swig $(usrp_prims_python_PYTHON) \ + $(usrp_prims_swiginclude_HEADERS) subdir = usrp/host/swig ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -113,15 +166,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -140,40 +213,48 @@ am__vpath_adj = case $$p in \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" -ourlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__installdirs = "$(DESTDIR)$(usrp_prims_pylibdir)" \ + "$(DESTDIR)$(usrp_prims_pythondir)" \ + "$(DESTDIR)$(usrp_prims_swigincludedir)" +usrp_prims_pylibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(usrp_prims_pylib_LTLIBRARIES) am__DEPENDENCIES_1 = -_usrp_prims_la_DEPENDENCIES = \ - $(top_builddir)/usrp/host/lib/libusrp.la $(am__DEPENDENCIES_1) -am__usrp_prims_la_OBJECTS = prims.lo +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +_usrp_prims_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +am__usrp_prims_la_OBJECTS = _usrp_prims_la-usrp_prims.lo _usrp_prims_la_OBJECTS = $(am__usrp_prims_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +_usrp_prims_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(_usrp_prims_la_CXXFLAGS) $(CXXFLAGS) \ + $(_usrp_prims_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(_usrp_prims_la_SOURCES) DIST_SOURCES = $(_usrp_prims_la_SOURCES) -ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +usrp_prims_pythonPYTHON_INSTALL = $(INSTALL_DATA) py_compile = $(top_srcdir)/py-compile -HEADERS = $(noinst_HEADERS) +usrp_prims_swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(usrp_prims_swiginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -181,9 +262,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -191,6 +279,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -203,73 +293,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -279,49 +362,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -329,15 +452,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -347,16 +613,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -365,114 +649,242 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/usrp_prims-generate-* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT $(DEPDIR)/*.S* +AM_CPPFLAGS = \ + $(USRP_INCLUDES) \ + $(PYTHON_CPPFLAGS) \ + -I$(srcdir) \ + $(WITH_INCLUDES) + + +################################# +# SWIG interface and library +TOP_SWIG_IFILES = \ + usrp_prims.i + + +# Install so that they end up available as: +# import usrpm.usrp_prims +# This ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrp_prims_pythondir_category = \ + usrpm + + +# additional arguments to the SWIG command +usrp_prims_swig_args = \ + $(USRP_INCLUDES) + + +# additional libraries for linking with the SWIG-generated library +usrp_prims_la_swig_libadd = \ + $(USRP_LA) + + +# additional Python files to be installed along with the SWIG-generated one +usrp_prims_python = \ + __init__.py \ + usrp_fpga_regs.py + +SWIG_PYTHON_FLAGS = \ + -fvirtual \ + -python \ + -modern \ + -keyword \ + -w511 \ + -outdir . + +STD_SWIG_PYTHON_ARGS = \ + $(SWIG_PYTHON_FLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(WITH_SWIG_INCLUDES) \ + $(WITH_INCLUDES) + +STD_SWIG_LA_LD_FLAGS = \ + $(PYTHON_LDFLAGS) \ + -module \ + -avoid-version \ + $(NO_UNDEFINED) + +STD_SWIG_LA_LIB_ADD = \ + -lstdc++ + +STD_SWIG_CXX_FLAGS = @swig_CXXFLAGS@ +SUFFIXES = .i +swig_built_sources = usrp_prims.py usrp_prims.cc +usrp_prims_pythondir = $(pythondir)/$(usrp_prims_pythondir_category) +usrp_prims_pylibdir = $(pyexecdir)/$(usrp_prims_pylibdir_category) +usrp_prims_swigincludedir = $(swigincludedir) +usrp_prims_swiginclude_HEADERS = \ + usrp_prims.i \ + $(usrp_prims_swiginclude_headers) + +usrp_prims_pylib_LTLIBRARIES = \ + _usrp_prims.la -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/usrp_prims -ourpythondir = $(pythondir) -ourlibdir = $(pyexecdir) -INCLUDES = $(USRP_INCLUDES) \ - $(PYTHON_CPPFLAGS) \ - -I$(srcdir) - -LOCAL_IFILES = \ - prims.i - -ALL_IFILES = \ - $(LOCAL_IFILES) +_usrp_prims_la_SOURCES = \ + usrp_prims.cc \ + $(usrp_prims_la_swig_sources) -EXTRA_DIST = \ - $(LOCAL_IFILES) +_usrp_prims_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(usrp_prims_la_swig_libadd) -BUILT_SOURCES = \ - prims.cc \ - usrp_prims.py +_usrp_prims_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(usrp_prims_la_swig_ldflags) -ourpython_PYTHON = \ - __init__.py \ - usrp_fpga_regs.py \ - usrp_prims.py +_usrp_prims_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(usrp_prims_la_swig_cxxflags) -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(INCLUDES) -ourlib_LTLIBRARIES = \ - _usrp_prims.la +usrp_prims_python_PYTHON = \ + usrp_prims.py \ + $(usrp_prims_python) -_usrp_prims_la_SOURCES = \ - prims.cc -noinst_HEADERS = -_usrp_prims_la_LIBADD = $(top_builddir)/usrp/host/lib/libusrp.la -lstdc++ $(PYTHON_LDFLAGS) -_usrp_prims_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -MOSTLYCLEANFILES = \ - prims.cc usrp_prims.py *~ *.pyc +# 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) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) +.SUFFIXES: .i .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.swig $(srcdir)/Makefile.swig.gen $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -496,35 +908,35 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) +install-usrp_prims_pylibLTLIBRARIES: $(usrp_prims_pylib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(usrp_prims_pylibdir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_prims_pylibdir)" + @list='$(usrp_prims_pylib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usrp_prims_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(usrp_prims_pylibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usrp_prims_pylibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(usrp_prims_pylibdir)/$$f"; \ else :; fi; \ done -uninstall-ourlibLTLIBRARIES: +uninstall-usrp_prims_pylibLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(usrp_prims_pylib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(usrp_prims_pylibdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(usrp_prims_pylibdir)/$$p"; \ done -clean-ourlibLTLIBRARIES: - -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) - @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ +clean-usrp_prims_pylibLTLIBRARIES: + -test -z "$(usrp_prims_pylib_LTLIBRARIES)" || rm -f $(usrp_prims_pylib_LTLIBRARIES) + @list='$(usrp_prims_pylib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _usrp_prims.la: $(_usrp_prims_la_OBJECTS) $(_usrp_prims_la_DEPENDENCIES) - $(CXXLINK) -rpath $(ourlibdir) $(_usrp_prims_la_LDFLAGS) $(_usrp_prims_la_OBJECTS) $(_usrp_prims_la_LIBADD) $(LIBS) + $(_usrp_prims_la_LINK) -rpath $(usrp_prims_pylibdir) $(_usrp_prims_la_OBJECTS) $(_usrp_prims_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -532,65 +944,85 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prims.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_usrp_prims_la-usrp_prims.Plo@am__quote@ .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< +_usrp_prims_la-usrp_prims.lo: usrp_prims.cc +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_usrp_prims_la_CXXFLAGS) $(CXXFLAGS) -MT _usrp_prims_la-usrp_prims.lo -MD -MP -MF $(DEPDIR)/_usrp_prims_la-usrp_prims.Tpo -c -o _usrp_prims_la-usrp_prims.lo `test -f 'usrp_prims.cc' || echo '$(srcdir)/'`usrp_prims.cc +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/_usrp_prims_la-usrp_prims.Tpo $(DEPDIR)/_usrp_prims_la-usrp_prims.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='usrp_prims.cc' object='_usrp_prims_la-usrp_prims.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_usrp_prims_la_CXXFLAGS) $(CXXFLAGS) -c -o _usrp_prims_la-usrp_prims.lo `test -f 'usrp_prims.cc' || echo '$(srcdir)/'`usrp_prims.cc + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-ourpythonPYTHON: $(ourpython_PYTHON) +install-usrp_prims_pythonPYTHON: $(usrp_prims_python_PYTHON) @$(NORMAL_INSTALL) - test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + test -z "$(usrp_prims_pythondir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_prims_pythondir)" + @list='$(usrp_prims_python_PYTHON)'; dlist=''; for p in $$list; do\ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ f=$(am__strip_dir) \ dlist="$$dlist $$f"; \ - echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ - $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + echo " $(usrp_prims_pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(usrp_prims_pythondir)/$$f'"; \ + $(usrp_prims_pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(usrp_prims_pythondir)/$$f"; \ else :; fi; \ done; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(usrp_prims_pythondir)" $$dlist; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(usrp_prims_pythondir)" $$dlist; \ fi; \ else :; fi -uninstall-ourpythonPYTHON: +uninstall-usrp_prims_pythonPYTHON: @$(NORMAL_UNINSTALL) - @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + @list='$(usrp_prims_python_PYTHON)'; dlist=''; for p in $$list; do\ f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + rm -f "$(DESTDIR)$(usrp_prims_pythondir)/$$f"; \ + rm -f "$(DESTDIR)$(usrp_prims_pythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(usrp_prims_pythondir)/$${f}o"; \ + done +install-usrp_prims_swigincludeHEADERS: $(usrp_prims_swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(usrp_prims_swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(usrp_prims_swigincludedir)" + @list='$(usrp_prims_swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(usrp_prims_swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(usrp_prims_swigincludedir)/$$f'"; \ + $(usrp_prims_swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(usrp_prims_swigincludedir)/$$f"; \ + done + +uninstall-usrp_prims_swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(usrp_prims_swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(usrp_prims_swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(usrp_prims_swigincludedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -598,8 +1030,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -611,8 +1043,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -622,13 +1054,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -642,23 +1073,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -677,8 +1106,8 @@ check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: - for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(usrp_prims_pylibdir)" "$(DESTDIR)$(usrp_prims_pythondir)" "$(DESTDIR)$(usrp_prims_swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -709,14 +1138,14 @@ maintainer-clean-generic: -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am -clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ - mostlyclean-am +clean-am: clean-generic clean-libtool \ + clean-usrp_prims_pylibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -728,14 +1157,24 @@ info: info-am info-am: -install-data-am: install-ourlibLTLIBRARIES install-ourpythonPYTHON +install-data-am: install-usrp_prims_pylibLTLIBRARIES \ + install-usrp_prims_pythonPYTHON \ + install-usrp_prims_swigincludeHEADERS + +install-dvi: install-dvi-am install-exec-am: +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -756,31 +1195,112 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am uninstall-ourlibLTLIBRARIES \ - uninstall-ourpythonPYTHON +uninstall-am: uninstall-usrp_prims_pylibLTLIBRARIES \ + uninstall-usrp_prims_pythonPYTHON \ + uninstall-usrp_prims_swigincludeHEADERS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-ourlibLTLIBRARIES ctags dist-hook \ - distclean distclean-compile distclean-generic \ + clean-libtool clean-usrp_prims_pylibLTLIBRARIES ctags \ + dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-ourlibLTLIBRARIES \ - install-ourpythonPYTHON install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip \ + install-usrp_prims_pylibLTLIBRARIES \ + install-usrp_prims_pythonPYTHON \ + install-usrp_prims_swigincludeHEADERS installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am \ - uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON + tags uninstall uninstall-am \ + uninstall-usrp_prims_pylibLTLIBRARIES \ + uninstall-usrp_prims_pythonPYTHON \ + uninstall-usrp_prims_swigincludeHEADERS -prims.cc usrp_prims.py : prims.i ../../firmware/include/fpga_regs_common.h ../../firmware/include/fpga_regs_standard.h - $(SWIG) $(SWIGPYTHONARGS) -module usrp_prims -o prims.cc prims.i +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) -# Don't distribute output of swig +# Don't distribute the files defined in the variable 'no_dist_files' dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +generate-makefile-swig $(srcdir)/Makefile.swig.gen: $(top_srcdir)/Makefile.swig.gen.t + @do_recreate=0; \ + if test -f $(srcdir)/Makefile.swig.gen; then \ + if $(RM) $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + else \ + if touch $(srcdir)/Makefile.swig.gen 2>/dev/null; then \ + do_recreate=1; \ + fi; \ + fi; \ + if test "$$do_recreate" == "1"; then \ + echo "Regenerating $(srcdir)/Makefile.swig.gen"; \ + for TFILE in $(TOP_SWIG_IFILES); do \ + TNAME=`python -c "import os.path as op; (dN, fN) = op.split ('$$TFILE'); (fbN, fE) = op.splitext (fN); print fbN;"`; \ + $(SED) -e 's|@NAME@|'$$TNAME'|g;' < $(top_srcdir)/Makefile.swig.gen.t >> $(srcdir)/Makefile.swig.gen; \ + echo "" >> $(srcdir)/Makefile.swig.gen; \ + done; \ + else \ + echo "Cannot recreate $(srcdir)/Makefile.swig.gen because the directory or file is write-protected."; \ + exit -1; \ + fi; + +usrp_prims_pythondir_category ?= gnuradio/usrp_prims +usrp_prims_pylibdir_category ?= $(usrp_prims_pythondir_category) + +usrp_prims.h usrp_prims.py usrp_prims.cc: usrp_prims.i + trap 'rm -rf $(DEPDIR)/usrp_prims-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/usrp_prims-generate-lock 2>/dev/null; then \ + rm -f $(DEPDIR)/usrp_prims-generate-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/usrp_prims-generate-stamp WHAT=$<; \ + rmdir $(DEPDIR)/usrp_prims-generate-lock; \ + else \ + while test -d $(DEPDIR)/usrp_prims-generate-lock; do \ + sleep 1; \ + done; \ + test -f $(DEPDIR)/usrp_prims-generate-stamp; \ + exit $$?; \ + fi; + +$(DEPDIR)/usrp_prims-generate-stamp: + 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; + $(RM) $(DEPDIR)/usrp_prims.d + cp $(DEPDIR)/usrp_prims.Std $(DEPDIR)/usrp_prims.d + echo "" >> $(DEPDIR)/usrp_prims.d + $(SED) -e '1d;s, \\,,g;s, ,,g' < $(DEPDIR)/usrp_prims.Std | \ + awk '{ printf "%s:\n\n", $$0 }' >> $(DEPDIR)/usrp_prims.d + $(RM) $(DEPDIR)/usrp_prims.Std + touch $(DEPDIR)/usrp_prims-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)/usrp_prims.d@am__quote@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/host/swig/Makefile.swig.gen b/usrp/host/swig/Makefile.swig.gen new file mode 100644 index 00000000..00de3e42 --- /dev/null +++ b/usrp/host/swig/Makefile.swig.gen @@ -0,0 +1,259 @@ +# -*- 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 usrp_prims.i + +## Default install locations for these files: +## +## Default location for the Python directory is: +## ${prefix}/lib/python${python_version}/site-packages/[category]/usrp_prims +## Default location for the Python exec directory is: +## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/usrp_prims +## +## 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. + +usrp_prims_pythondir_category ?= gnuradio/usrp_prims +usrp_prims_pylibdir_category ?= $(usrp_prims_pythondir_category) +usrp_prims_pythondir = $(pythondir)/$(usrp_prims_pythondir_category) +usrp_prims_pylibdir = $(pyexecdir)/$(usrp_prims_pylibdir_category) + +## SWIG headers are always installed into the same directory. + +usrp_prims_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)/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 . + +usrp_prims_swiginclude_HEADERS = \ + usrp_prims.i \ + $(usrp_prims_swiginclude_headers) + +usrp_prims_pylib_LTLIBRARIES = \ + _usrp_prims.la + +_usrp_prims_la_SOURCES = \ + usrp_prims.cc \ + $(usrp_prims_la_swig_sources) + +_usrp_prims_la_LIBADD = \ + $(STD_SWIG_LA_LIB_ADD) \ + $(usrp_prims_la_swig_libadd) + +_usrp_prims_la_LDFLAGS = \ + $(STD_SWIG_LA_LD_FLAGS) \ + $(usrp_prims_la_swig_ldflags) + +_usrp_prims_la_CXXFLAGS = \ + $(STD_SWIG_CXX_FLAGS) \ + $(usrp_prims_la_swig_cxxflags) + +usrp_prims_python_PYTHON = \ + usrp_prims.py \ + $(usrp_prims_python) + +## Entry rule for running SWIG + +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; + +$(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 + +# 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)/usrp_prims.d@am__quote@ + diff --git a/usrp/host/swig/usrp_fpga_regs.py b/usrp/host/swig/usrp_fpga_regs.py index c7604894..b116d7b7 100644 --- a/usrp/host/swig/usrp_fpga_regs.py +++ b/usrp/host/swig/usrp_fpga_regs.py @@ -19,7 +19,7 @@ # Boston, MA 02110-1301, USA. # -import usrp_prims +from usrpm import usrp_prims # Copy everything that starts with FR_ or bmFR_ from the usrp_prims # name space into our name space. This is effectively a python binding for diff --git a/usrp/host/swig/prims.i b/usrp/host/swig/usrp_prims.i similarity index 100% rename from usrp/host/swig/prims.i rename to usrp/host/swig/usrp_prims.i diff --git a/usrp/usrp.pc.in b/usrp/usrp.pc.in index 49d27e7d..77430ea4 100644 --- a/usrp/usrp.pc.in +++ b/usrp/usrp.pc.in @@ -4,8 +4,8 @@ libdir=@libdir@ includedir=@includedir@ Name: usrp -Description: Universal Software Radio Peripheral -Requires: +Description: USRP Client Side C++ interface +Requires: libusb @usrp_darwin_omnithread_pc_requires@ Version: @VERSION@ -Libs: -L${libdir} -lusrp -lusb +Libs: -L${libdir} -lusrp Cflags: -I${includedir} @DEFINES@ diff --git a/usrp2/Makefile.am b/usrp2/Makefile.am new file mode 100644 index 00000000..9813f38c --- /dev/null +++ b/usrp2/Makefile.am @@ -0,0 +1,23 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = host firmware diff --git a/usrp2/Makefile.in b/usrp2/Makefile.in new file mode 100644 index 00000000..1ae0611e --- /dev/null +++ b/usrp2/Makefile.in @@ -0,0 +1,1029 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = usrp2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = host firmware +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/firmware/AUTHORS b/usrp2/firmware/AUTHORS new file mode 100644 index 00000000..6bd41174 --- /dev/null +++ b/usrp2/firmware/AUTHORS @@ -0,0 +1,2 @@ +Eric Blossom +Matt Ettus diff --git a/usrp2/firmware/COPYING b/usrp2/firmware/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/usrp2/firmware/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 of the License, 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 program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/usrp2/firmware/ChangeLog b/usrp2/firmware/ChangeLog new file mode 100644 index 00000000..3154fc43 --- /dev/null +++ b/usrp2/firmware/ChangeLog @@ -0,0 +1,22 @@ +# +# Copyright 2007 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. +# + +Please use the trac interface to see what's changed. +http://gnuradio.org/trac/timeline diff --git a/usrp2/firmware/INSTALL b/usrp2/firmware/INSTALL new file mode 100644 index 00000000..5458714e --- /dev/null +++ b/usrp2/firmware/INSTALL @@ -0,0 +1,234 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006 Free Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/usrp2/firmware/Makefile.am b/usrp2/firmware/Makefile.am new file mode 100644 index 00000000..62b2d5ba --- /dev/null +++ b/usrp2/firmware/Makefile.am @@ -0,0 +1,34 @@ +# +# Copyright 2007,2008 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 3 of the License, 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 program. If not, see . +# + +ACLOCAL_AMFLAGS = -I config + +include $(top_srcdir)/Makefile.common + +EXTRA_DIST = \ + bootstrap \ + configure \ + configure.gnu + + +SUBDIRS = config + +if BUILDING_USRP2_FIRMWARE +SUBDIRS += include lib apps +endif + + diff --git a/usrp2/firmware/Makefile.common b/usrp2/firmware/Makefile.common new file mode 100644 index 00000000..d4557620 --- /dev/null +++ b/usrp2/firmware/Makefile.common @@ -0,0 +1,59 @@ +# -*- Makefile -*- +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + +STD_INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib + +#HAL_IO = -DHAL_IO_USES_DBOARD_PINS +HAL_IO = -DHAL_IO_USES_UART + +AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES) + +STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float + +AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift +#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384 + + +#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024 +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) +AM_LDFLAGS = -Wl,-Map -Wl,$@.map -Wl,-defsym -Wl,_STACK_SIZE=3072 +#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048 + + +%.bin : % + mb-objcopy -O binary $< $@ + +%.dump : % + mb-objdump -DSC $< > $@ + +%.rom : %.bin + hexdump -v -e'1/1 "%.2X\n"' $< > $@ + + +.PRECIOUS : %.bin + + +BINS = $(noinst_PROGRAMS:=.bin) +ROMS = $(noinst_PROGRAMS:=.rom) +DUMPS = $(noinst_PROGRAMS:=.dump) + +noinst_DATA = $(BINS) $(ROMS) $(DUMPS) + +CLEANFILES = $(ROMS) $(DUMPS) $(BINS) diff --git a/usrp2/firmware/Makefile.in b/usrp2/firmware/Makefile.in new file mode 100644 index 00000000..12a2596c --- /dev/null +++ b/usrp2/firmware/Makefile.in @@ -0,0 +1,698 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/Makefile.common $(top_srcdir)/configure AUTHORS \ + COPYING ChangeLog INSTALL NEWS config.guess config.sub depcomp \ + install-sh missing +@BUILDING_USRP2_FIRMWARE_TRUE@am__append_1 = include lib apps +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_usrp2_firmware.m4 \ + $(top_srcdir)/config/grc_usrp2_stub.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +DATA = $(noinst_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = config include lib apps +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MB_GCC = @MB_GCC@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +build_dirs = @build_dirs@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp2_firmware_INCLUDEDIR = @usrp2_firmware_INCLUDEDIR@ +usrp2_firmware_INCLUDES = @usrp2_firmware_INCLUDES@ +usrp2_firmware_LA = @usrp2_firmware_LA@ +usrp2_firmware_LDFLAG = @usrp2_firmware_LDFLAG@ +usrp2_firmware_LIBDIRPATH = @usrp2_firmware_LIBDIRPATH@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +ACLOCAL_AMFLAGS = -I config +STD_INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib + +#HAL_IO = -DHAL_IO_USES_DBOARD_PINS +HAL_IO = -DHAL_IO_USES_UART +AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES) +STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float +AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift +#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384 + +#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024 +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) +AM_LDFLAGS = -Wl,-Map -Wl,$@.map -Wl,-defsym -Wl,_STACK_SIZE=3072 +BINS = $(noinst_PROGRAMS:=.bin) +ROMS = $(noinst_PROGRAMS:=.rom) +DUMPS = $(noinst_PROGRAMS:=.dump) +noinst_DATA = $(BINS) $(ROMS) $(DUMPS) +CLEANFILES = $(ROMS) $(DUMPS) $(BINS) +EXTRA_DIST = \ + bootstrap \ + configure \ + configure.gnu + +SUBDIRS = config $(am__append_1) +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ + cd $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d $(distdir) || mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \ + distclean-generic distclean-hdr distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + +#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048 + +%.bin : % + mb-objcopy -O binary $< $@ + +%.dump : % + mb-objdump -DSC $< > $@ + +%.rom : %.bin + hexdump -v -e'1/1 "%.2X\n"' $< > $@ + +.PRECIOUS : %.bin +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/firmware/NEWS b/usrp2/firmware/NEWS new file mode 100644 index 00000000..e69de29b diff --git a/usrp2/firmware/README b/usrp2/firmware/README new file mode 100644 index 00000000..61d5ec4f --- /dev/null +++ b/usrp2/firmware/README @@ -0,0 +1,5 @@ +Stay tuned for additional info as it becomes available ... + + $ ./bootstrap + $ ./configure.gnu + $ make diff --git a/usrp2/firmware/aclocal.m4 b/usrp2/firmware/aclocal.m4 new file mode 100644 index 00000000..17ecb02a --- /dev/null +++ b/usrp2/firmware/aclocal.m4 @@ -0,0 +1,916 @@ +# generated automatically by aclocal 1.10.2 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, +[m4_warning([this file was generated for autoconf 2.63. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10.2], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.10.2])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Figure out how to run the assembler. -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 13 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.60])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([config/grc_build.m4]) +m4_include([config/grc_usrp2_firmware.m4]) +m4_include([config/grc_usrp2_stub.m4]) diff --git a/usrp2/firmware/apps/Makefile.am b/usrp2/firmware/apps/Makefile.am new file mode 100644 index 00000000..b809039d --- /dev/null +++ b/usrp2/firmware/apps/Makefile.am @@ -0,0 +1,76 @@ +# +# Copyright 2007,2008 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 3 of the License, 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 program. If not, see . +# + +include $(top_srcdir)/Makefile.common + +LDADD = ../lib/libu2fw.a + +noinst_PROGRAMS = \ + blink_leds \ + blink_leds2 \ + buf_ram_test \ + burn_dbsrx_eeprom \ + can_i_sub \ + echo \ + eth_serdes \ + gen_eth_packets \ + hello \ + ibs_rx_test \ + ibs_tx_test \ + rcv_eth_packets \ + read_dbids \ + set_hw_rev \ + test1 \ + test_db_spi \ + test_i2c \ + test_sd \ + test_ram \ + test_phy_comm \ + test_lsadc \ + test_lsdac \ + timer_test \ + tx_standalone \ + txrx \ + factory_test \ + burnrev30 \ + burnrev31 \ + burnrev40 \ + serdes_txrx \ + sd_gentest \ + sd_bounce \ + mimo_tx \ + mimo_tx_slave + + + +# tx_drop_SOURCES = tx_drop.c app_common.c +# tx_drop_rate_limited_SOURCES = tx_drop_rate_limited.c app_common.c +# tx_drop2_SOURCES = tx_drop2.c app_common.c +txrx_SOURCES = txrx.c app_common_v2.c +factory_test_SOURCES = factory_test.c app_common_v2.c +eth_serdes_SOURCES = eth_serdes.c app_passthru_v2.c +serdes_txrx_SOURCES = serdes_txrx.c app_common_v2.c +mimo_tx_SOURCES = mimo_tx.c mimo_app_common_v2.c +mimo_tx_slave_SOURCES = mimo_tx_slave.c app_common_v2.c + +noinst_HEADERS = \ + app_common_v2.h \ + app_passthru_v2.h \ + mimo_app_common_v2.h + + +MOSTLYCLEANFILES = *.map diff --git a/usrp2/firmware/apps/Makefile.in b/usrp2/firmware/apps/Makefile.in new file mode 100644 index 00000000..ee8c5b42 --- /dev/null +++ b/usrp2/firmware/apps/Makefile.in @@ -0,0 +1,796 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +noinst_PROGRAMS = blink_leds$(EXEEXT) blink_leds2$(EXEEXT) \ + buf_ram_test$(EXEEXT) burn_dbsrx_eeprom$(EXEEXT) \ + can_i_sub$(EXEEXT) echo$(EXEEXT) eth_serdes$(EXEEXT) \ + gen_eth_packets$(EXEEXT) hello$(EXEEXT) ibs_rx_test$(EXEEXT) \ + ibs_tx_test$(EXEEXT) rcv_eth_packets$(EXEEXT) \ + read_dbids$(EXEEXT) set_hw_rev$(EXEEXT) test1$(EXEEXT) \ + test_db_spi$(EXEEXT) test_i2c$(EXEEXT) test_sd$(EXEEXT) \ + test_ram$(EXEEXT) test_phy_comm$(EXEEXT) test_lsadc$(EXEEXT) \ + test_lsdac$(EXEEXT) timer_test$(EXEEXT) tx_standalone$(EXEEXT) \ + txrx$(EXEEXT) factory_test$(EXEEXT) burnrev30$(EXEEXT) \ + burnrev31$(EXEEXT) burnrev40$(EXEEXT) serdes_txrx$(EXEEXT) \ + sd_gentest$(EXEEXT) sd_bounce$(EXEEXT) mimo_tx$(EXEEXT) \ + mimo_tx_slave$(EXEEXT) +subdir = apps +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_usrp2_firmware.m4 \ + $(top_srcdir)/config/grc_usrp2_stub.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +blink_leds_SOURCES = blink_leds.c +blink_leds_OBJECTS = blink_leds.$(OBJEXT) +blink_leds_LDADD = $(LDADD) +blink_leds_DEPENDENCIES = ../lib/libu2fw.a +blink_leds2_SOURCES = blink_leds2.c +blink_leds2_OBJECTS = blink_leds2.$(OBJEXT) +blink_leds2_LDADD = $(LDADD) +blink_leds2_DEPENDENCIES = ../lib/libu2fw.a +buf_ram_test_SOURCES = buf_ram_test.c +buf_ram_test_OBJECTS = buf_ram_test.$(OBJEXT) +buf_ram_test_LDADD = $(LDADD) +buf_ram_test_DEPENDENCIES = ../lib/libu2fw.a +burn_dbsrx_eeprom_SOURCES = burn_dbsrx_eeprom.c +burn_dbsrx_eeprom_OBJECTS = burn_dbsrx_eeprom.$(OBJEXT) +burn_dbsrx_eeprom_LDADD = $(LDADD) +burn_dbsrx_eeprom_DEPENDENCIES = ../lib/libu2fw.a +burnrev30_SOURCES = burnrev30.c +burnrev30_OBJECTS = burnrev30.$(OBJEXT) +burnrev30_LDADD = $(LDADD) +burnrev30_DEPENDENCIES = ../lib/libu2fw.a +burnrev31_SOURCES = burnrev31.c +burnrev31_OBJECTS = burnrev31.$(OBJEXT) +burnrev31_LDADD = $(LDADD) +burnrev31_DEPENDENCIES = ../lib/libu2fw.a +burnrev40_SOURCES = burnrev40.c +burnrev40_OBJECTS = burnrev40.$(OBJEXT) +burnrev40_LDADD = $(LDADD) +burnrev40_DEPENDENCIES = ../lib/libu2fw.a +can_i_sub_SOURCES = can_i_sub.c +can_i_sub_OBJECTS = can_i_sub.$(OBJEXT) +can_i_sub_LDADD = $(LDADD) +can_i_sub_DEPENDENCIES = ../lib/libu2fw.a +echo_SOURCES = echo.c +echo_OBJECTS = echo.$(OBJEXT) +echo_LDADD = $(LDADD) +echo_DEPENDENCIES = ../lib/libu2fw.a +am_eth_serdes_OBJECTS = eth_serdes.$(OBJEXT) app_passthru_v2.$(OBJEXT) +eth_serdes_OBJECTS = $(am_eth_serdes_OBJECTS) +eth_serdes_LDADD = $(LDADD) +eth_serdes_DEPENDENCIES = ../lib/libu2fw.a +am_factory_test_OBJECTS = factory_test.$(OBJEXT) \ + app_common_v2.$(OBJEXT) +factory_test_OBJECTS = $(am_factory_test_OBJECTS) +factory_test_LDADD = $(LDADD) +factory_test_DEPENDENCIES = ../lib/libu2fw.a +gen_eth_packets_SOURCES = gen_eth_packets.c +gen_eth_packets_OBJECTS = gen_eth_packets.$(OBJEXT) +gen_eth_packets_LDADD = $(LDADD) +gen_eth_packets_DEPENDENCIES = ../lib/libu2fw.a +hello_SOURCES = hello.c +hello_OBJECTS = hello.$(OBJEXT) +hello_LDADD = $(LDADD) +hello_DEPENDENCIES = ../lib/libu2fw.a +ibs_rx_test_SOURCES = ibs_rx_test.c +ibs_rx_test_OBJECTS = ibs_rx_test.$(OBJEXT) +ibs_rx_test_LDADD = $(LDADD) +ibs_rx_test_DEPENDENCIES = ../lib/libu2fw.a +ibs_tx_test_SOURCES = ibs_tx_test.c +ibs_tx_test_OBJECTS = ibs_tx_test.$(OBJEXT) +ibs_tx_test_LDADD = $(LDADD) +ibs_tx_test_DEPENDENCIES = ../lib/libu2fw.a +am_mimo_tx_OBJECTS = mimo_tx.$(OBJEXT) mimo_app_common_v2.$(OBJEXT) +mimo_tx_OBJECTS = $(am_mimo_tx_OBJECTS) +mimo_tx_LDADD = $(LDADD) +mimo_tx_DEPENDENCIES = ../lib/libu2fw.a +am_mimo_tx_slave_OBJECTS = mimo_tx_slave.$(OBJEXT) \ + app_common_v2.$(OBJEXT) +mimo_tx_slave_OBJECTS = $(am_mimo_tx_slave_OBJECTS) +mimo_tx_slave_LDADD = $(LDADD) +mimo_tx_slave_DEPENDENCIES = ../lib/libu2fw.a +rcv_eth_packets_SOURCES = rcv_eth_packets.c +rcv_eth_packets_OBJECTS = rcv_eth_packets.$(OBJEXT) +rcv_eth_packets_LDADD = $(LDADD) +rcv_eth_packets_DEPENDENCIES = ../lib/libu2fw.a +read_dbids_SOURCES = read_dbids.c +read_dbids_OBJECTS = read_dbids.$(OBJEXT) +read_dbids_LDADD = $(LDADD) +read_dbids_DEPENDENCIES = ../lib/libu2fw.a +sd_bounce_SOURCES = sd_bounce.c +sd_bounce_OBJECTS = sd_bounce.$(OBJEXT) +sd_bounce_LDADD = $(LDADD) +sd_bounce_DEPENDENCIES = ../lib/libu2fw.a +sd_gentest_SOURCES = sd_gentest.c +sd_gentest_OBJECTS = sd_gentest.$(OBJEXT) +sd_gentest_LDADD = $(LDADD) +sd_gentest_DEPENDENCIES = ../lib/libu2fw.a +am_serdes_txrx_OBJECTS = serdes_txrx.$(OBJEXT) app_common_v2.$(OBJEXT) +serdes_txrx_OBJECTS = $(am_serdes_txrx_OBJECTS) +serdes_txrx_LDADD = $(LDADD) +serdes_txrx_DEPENDENCIES = ../lib/libu2fw.a +set_hw_rev_SOURCES = set_hw_rev.c +set_hw_rev_OBJECTS = set_hw_rev.$(OBJEXT) +set_hw_rev_LDADD = $(LDADD) +set_hw_rev_DEPENDENCIES = ../lib/libu2fw.a +test1_SOURCES = test1.c +test1_OBJECTS = test1.$(OBJEXT) +test1_LDADD = $(LDADD) +test1_DEPENDENCIES = ../lib/libu2fw.a +test_db_spi_SOURCES = test_db_spi.c +test_db_spi_OBJECTS = test_db_spi.$(OBJEXT) +test_db_spi_LDADD = $(LDADD) +test_db_spi_DEPENDENCIES = ../lib/libu2fw.a +test_i2c_SOURCES = test_i2c.c +test_i2c_OBJECTS = test_i2c.$(OBJEXT) +test_i2c_LDADD = $(LDADD) +test_i2c_DEPENDENCIES = ../lib/libu2fw.a +test_lsadc_SOURCES = test_lsadc.c +test_lsadc_OBJECTS = test_lsadc.$(OBJEXT) +test_lsadc_LDADD = $(LDADD) +test_lsadc_DEPENDENCIES = ../lib/libu2fw.a +test_lsdac_SOURCES = test_lsdac.c +test_lsdac_OBJECTS = test_lsdac.$(OBJEXT) +test_lsdac_LDADD = $(LDADD) +test_lsdac_DEPENDENCIES = ../lib/libu2fw.a +test_phy_comm_SOURCES = test_phy_comm.c +test_phy_comm_OBJECTS = test_phy_comm.$(OBJEXT) +test_phy_comm_LDADD = $(LDADD) +test_phy_comm_DEPENDENCIES = ../lib/libu2fw.a +test_ram_SOURCES = test_ram.c +test_ram_OBJECTS = test_ram.$(OBJEXT) +test_ram_LDADD = $(LDADD) +test_ram_DEPENDENCIES = ../lib/libu2fw.a +test_sd_SOURCES = test_sd.c +test_sd_OBJECTS = test_sd.$(OBJEXT) +test_sd_LDADD = $(LDADD) +test_sd_DEPENDENCIES = ../lib/libu2fw.a +timer_test_SOURCES = timer_test.c +timer_test_OBJECTS = timer_test.$(OBJEXT) +timer_test_LDADD = $(LDADD) +timer_test_DEPENDENCIES = ../lib/libu2fw.a +tx_standalone_SOURCES = tx_standalone.c +tx_standalone_OBJECTS = tx_standalone.$(OBJEXT) +tx_standalone_LDADD = $(LDADD) +tx_standalone_DEPENDENCIES = ../lib/libu2fw.a +am_txrx_OBJECTS = txrx.$(OBJEXT) app_common_v2.$(OBJEXT) +txrx_OBJECTS = $(am_txrx_OBJECTS) +txrx_LDADD = $(LDADD) +txrx_DEPENDENCIES = ../lib/libu2fw.a +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = blink_leds.c blink_leds2.c buf_ram_test.c \ + burn_dbsrx_eeprom.c burnrev30.c burnrev31.c burnrev40.c \ + can_i_sub.c echo.c $(eth_serdes_SOURCES) \ + $(factory_test_SOURCES) gen_eth_packets.c hello.c \ + ibs_rx_test.c ibs_tx_test.c $(mimo_tx_SOURCES) \ + $(mimo_tx_slave_SOURCES) rcv_eth_packets.c read_dbids.c \ + sd_bounce.c sd_gentest.c $(serdes_txrx_SOURCES) set_hw_rev.c \ + test1.c test_db_spi.c test_i2c.c test_lsadc.c test_lsdac.c \ + test_phy_comm.c test_ram.c test_sd.c timer_test.c \ + tx_standalone.c $(txrx_SOURCES) +DIST_SOURCES = blink_leds.c blink_leds2.c buf_ram_test.c \ + burn_dbsrx_eeprom.c burnrev30.c burnrev31.c burnrev40.c \ + can_i_sub.c echo.c $(eth_serdes_SOURCES) \ + $(factory_test_SOURCES) gen_eth_packets.c hello.c \ + ibs_rx_test.c ibs_tx_test.c $(mimo_tx_SOURCES) \ + $(mimo_tx_slave_SOURCES) rcv_eth_packets.c read_dbids.c \ + sd_bounce.c sd_gentest.c $(serdes_txrx_SOURCES) set_hw_rev.c \ + test1.c test_db_spi.c test_i2c.c test_lsadc.c test_lsdac.c \ + test_phy_comm.c test_ram.c test_sd.c timer_test.c \ + tx_standalone.c $(txrx_SOURCES) +DATA = $(noinst_DATA) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MB_GCC = @MB_GCC@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +build_dirs = @build_dirs@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp2_firmware_INCLUDEDIR = @usrp2_firmware_INCLUDEDIR@ +usrp2_firmware_INCLUDES = @usrp2_firmware_INCLUDES@ +usrp2_firmware_LA = @usrp2_firmware_LA@ +usrp2_firmware_LDFLAG = @usrp2_firmware_LDFLAG@ +usrp2_firmware_LIBDIRPATH = @usrp2_firmware_LIBDIRPATH@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +STD_INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib + +#HAL_IO = -DHAL_IO_USES_DBOARD_PINS +HAL_IO = -DHAL_IO_USES_UART +AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES) +STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float +AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift +#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384 + +#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024 +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) +AM_LDFLAGS = -Wl,-Map -Wl,$@.map -Wl,-defsym -Wl,_STACK_SIZE=3072 +BINS = $(noinst_PROGRAMS:=.bin) +ROMS = $(noinst_PROGRAMS:=.rom) +DUMPS = $(noinst_PROGRAMS:=.dump) +noinst_DATA = $(BINS) $(ROMS) $(DUMPS) +CLEANFILES = $(ROMS) $(DUMPS) $(BINS) +LDADD = ../lib/libu2fw.a + +# tx_drop_SOURCES = tx_drop.c app_common.c +# tx_drop_rate_limited_SOURCES = tx_drop_rate_limited.c app_common.c +# tx_drop2_SOURCES = tx_drop2.c app_common.c +txrx_SOURCES = txrx.c app_common_v2.c +factory_test_SOURCES = factory_test.c app_common_v2.c +eth_serdes_SOURCES = eth_serdes.c app_passthru_v2.c +serdes_txrx_SOURCES = serdes_txrx.c app_common_v2.c +mimo_tx_SOURCES = mimo_tx.c mimo_app_common_v2.c +mimo_tx_slave_SOURCES = mimo_tx_slave.c app_common_v2.c +noinst_HEADERS = \ + app_common_v2.h \ + app_passthru_v2.h \ + mimo_app_common_v2.h + +MOSTLYCLEANFILES = *.map +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu apps/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu apps/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +blink_leds$(EXEEXT): $(blink_leds_OBJECTS) $(blink_leds_DEPENDENCIES) + @rm -f blink_leds$(EXEEXT) + $(LINK) $(blink_leds_OBJECTS) $(blink_leds_LDADD) $(LIBS) +blink_leds2$(EXEEXT): $(blink_leds2_OBJECTS) $(blink_leds2_DEPENDENCIES) + @rm -f blink_leds2$(EXEEXT) + $(LINK) $(blink_leds2_OBJECTS) $(blink_leds2_LDADD) $(LIBS) +buf_ram_test$(EXEEXT): $(buf_ram_test_OBJECTS) $(buf_ram_test_DEPENDENCIES) + @rm -f buf_ram_test$(EXEEXT) + $(LINK) $(buf_ram_test_OBJECTS) $(buf_ram_test_LDADD) $(LIBS) +burn_dbsrx_eeprom$(EXEEXT): $(burn_dbsrx_eeprom_OBJECTS) $(burn_dbsrx_eeprom_DEPENDENCIES) + @rm -f burn_dbsrx_eeprom$(EXEEXT) + $(LINK) $(burn_dbsrx_eeprom_OBJECTS) $(burn_dbsrx_eeprom_LDADD) $(LIBS) +burnrev30$(EXEEXT): $(burnrev30_OBJECTS) $(burnrev30_DEPENDENCIES) + @rm -f burnrev30$(EXEEXT) + $(LINK) $(burnrev30_OBJECTS) $(burnrev30_LDADD) $(LIBS) +burnrev31$(EXEEXT): $(burnrev31_OBJECTS) $(burnrev31_DEPENDENCIES) + @rm -f burnrev31$(EXEEXT) + $(LINK) $(burnrev31_OBJECTS) $(burnrev31_LDADD) $(LIBS) +burnrev40$(EXEEXT): $(burnrev40_OBJECTS) $(burnrev40_DEPENDENCIES) + @rm -f burnrev40$(EXEEXT) + $(LINK) $(burnrev40_OBJECTS) $(burnrev40_LDADD) $(LIBS) +can_i_sub$(EXEEXT): $(can_i_sub_OBJECTS) $(can_i_sub_DEPENDENCIES) + @rm -f can_i_sub$(EXEEXT) + $(LINK) $(can_i_sub_OBJECTS) $(can_i_sub_LDADD) $(LIBS) +echo$(EXEEXT): $(echo_OBJECTS) $(echo_DEPENDENCIES) + @rm -f echo$(EXEEXT) + $(LINK) $(echo_OBJECTS) $(echo_LDADD) $(LIBS) +eth_serdes$(EXEEXT): $(eth_serdes_OBJECTS) $(eth_serdes_DEPENDENCIES) + @rm -f eth_serdes$(EXEEXT) + $(LINK) $(eth_serdes_OBJECTS) $(eth_serdes_LDADD) $(LIBS) +factory_test$(EXEEXT): $(factory_test_OBJECTS) $(factory_test_DEPENDENCIES) + @rm -f factory_test$(EXEEXT) + $(LINK) $(factory_test_OBJECTS) $(factory_test_LDADD) $(LIBS) +gen_eth_packets$(EXEEXT): $(gen_eth_packets_OBJECTS) $(gen_eth_packets_DEPENDENCIES) + @rm -f gen_eth_packets$(EXEEXT) + $(LINK) $(gen_eth_packets_OBJECTS) $(gen_eth_packets_LDADD) $(LIBS) +hello$(EXEEXT): $(hello_OBJECTS) $(hello_DEPENDENCIES) + @rm -f hello$(EXEEXT) + $(LINK) $(hello_OBJECTS) $(hello_LDADD) $(LIBS) +ibs_rx_test$(EXEEXT): $(ibs_rx_test_OBJECTS) $(ibs_rx_test_DEPENDENCIES) + @rm -f ibs_rx_test$(EXEEXT) + $(LINK) $(ibs_rx_test_OBJECTS) $(ibs_rx_test_LDADD) $(LIBS) +ibs_tx_test$(EXEEXT): $(ibs_tx_test_OBJECTS) $(ibs_tx_test_DEPENDENCIES) + @rm -f ibs_tx_test$(EXEEXT) + $(LINK) $(ibs_tx_test_OBJECTS) $(ibs_tx_test_LDADD) $(LIBS) +mimo_tx$(EXEEXT): $(mimo_tx_OBJECTS) $(mimo_tx_DEPENDENCIES) + @rm -f mimo_tx$(EXEEXT) + $(LINK) $(mimo_tx_OBJECTS) $(mimo_tx_LDADD) $(LIBS) +mimo_tx_slave$(EXEEXT): $(mimo_tx_slave_OBJECTS) $(mimo_tx_slave_DEPENDENCIES) + @rm -f mimo_tx_slave$(EXEEXT) + $(LINK) $(mimo_tx_slave_OBJECTS) $(mimo_tx_slave_LDADD) $(LIBS) +rcv_eth_packets$(EXEEXT): $(rcv_eth_packets_OBJECTS) $(rcv_eth_packets_DEPENDENCIES) + @rm -f rcv_eth_packets$(EXEEXT) + $(LINK) $(rcv_eth_packets_OBJECTS) $(rcv_eth_packets_LDADD) $(LIBS) +read_dbids$(EXEEXT): $(read_dbids_OBJECTS) $(read_dbids_DEPENDENCIES) + @rm -f read_dbids$(EXEEXT) + $(LINK) $(read_dbids_OBJECTS) $(read_dbids_LDADD) $(LIBS) +sd_bounce$(EXEEXT): $(sd_bounce_OBJECTS) $(sd_bounce_DEPENDENCIES) + @rm -f sd_bounce$(EXEEXT) + $(LINK) $(sd_bounce_OBJECTS) $(sd_bounce_LDADD) $(LIBS) +sd_gentest$(EXEEXT): $(sd_gentest_OBJECTS) $(sd_gentest_DEPENDENCIES) + @rm -f sd_gentest$(EXEEXT) + $(LINK) $(sd_gentest_OBJECTS) $(sd_gentest_LDADD) $(LIBS) +serdes_txrx$(EXEEXT): $(serdes_txrx_OBJECTS) $(serdes_txrx_DEPENDENCIES) + @rm -f serdes_txrx$(EXEEXT) + $(LINK) $(serdes_txrx_OBJECTS) $(serdes_txrx_LDADD) $(LIBS) +set_hw_rev$(EXEEXT): $(set_hw_rev_OBJECTS) $(set_hw_rev_DEPENDENCIES) + @rm -f set_hw_rev$(EXEEXT) + $(LINK) $(set_hw_rev_OBJECTS) $(set_hw_rev_LDADD) $(LIBS) +test1$(EXEEXT): $(test1_OBJECTS) $(test1_DEPENDENCIES) + @rm -f test1$(EXEEXT) + $(LINK) $(test1_OBJECTS) $(test1_LDADD) $(LIBS) +test_db_spi$(EXEEXT): $(test_db_spi_OBJECTS) $(test_db_spi_DEPENDENCIES) + @rm -f test_db_spi$(EXEEXT) + $(LINK) $(test_db_spi_OBJECTS) $(test_db_spi_LDADD) $(LIBS) +test_i2c$(EXEEXT): $(test_i2c_OBJECTS) $(test_i2c_DEPENDENCIES) + @rm -f test_i2c$(EXEEXT) + $(LINK) $(test_i2c_OBJECTS) $(test_i2c_LDADD) $(LIBS) +test_lsadc$(EXEEXT): $(test_lsadc_OBJECTS) $(test_lsadc_DEPENDENCIES) + @rm -f test_lsadc$(EXEEXT) + $(LINK) $(test_lsadc_OBJECTS) $(test_lsadc_LDADD) $(LIBS) +test_lsdac$(EXEEXT): $(test_lsdac_OBJECTS) $(test_lsdac_DEPENDENCIES) + @rm -f test_lsdac$(EXEEXT) + $(LINK) $(test_lsdac_OBJECTS) $(test_lsdac_LDADD) $(LIBS) +test_phy_comm$(EXEEXT): $(test_phy_comm_OBJECTS) $(test_phy_comm_DEPENDENCIES) + @rm -f test_phy_comm$(EXEEXT) + $(LINK) $(test_phy_comm_OBJECTS) $(test_phy_comm_LDADD) $(LIBS) +test_ram$(EXEEXT): $(test_ram_OBJECTS) $(test_ram_DEPENDENCIES) + @rm -f test_ram$(EXEEXT) + $(LINK) $(test_ram_OBJECTS) $(test_ram_LDADD) $(LIBS) +test_sd$(EXEEXT): $(test_sd_OBJECTS) $(test_sd_DEPENDENCIES) + @rm -f test_sd$(EXEEXT) + $(LINK) $(test_sd_OBJECTS) $(test_sd_LDADD) $(LIBS) +timer_test$(EXEEXT): $(timer_test_OBJECTS) $(timer_test_DEPENDENCIES) + @rm -f timer_test$(EXEEXT) + $(LINK) $(timer_test_OBJECTS) $(timer_test_LDADD) $(LIBS) +tx_standalone$(EXEEXT): $(tx_standalone_OBJECTS) $(tx_standalone_DEPENDENCIES) + @rm -f tx_standalone$(EXEEXT) + $(LINK) $(tx_standalone_OBJECTS) $(tx_standalone_LDADD) $(LIBS) +txrx$(EXEEXT): $(txrx_OBJECTS) $(txrx_DEPENDENCIES) + @rm -f txrx$(EXEEXT) + $(LINK) $(txrx_OBJECTS) $(txrx_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app_common_v2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app_passthru_v2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blink_leds.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blink_leds2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buf_ram_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burn_dbsrx_eeprom.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burnrev30.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burnrev31.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/burnrev40.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/can_i_sub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/echo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eth_serdes.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/factory_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_eth_packets.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hello.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ibs_rx_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ibs_tx_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mimo_app_common_v2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mimo_tx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mimo_tx_slave.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rcv_eth_packets.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read_dbids.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd_bounce.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd_gentest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serdes_txrx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_hw_rev.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_db_spi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_i2c.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lsadc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lsdac.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_phy_comm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ram.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_standalone.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/txrx.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(DATA) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-noinstPROGRAMS ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + +#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048 + +%.bin : % + mb-objcopy -O binary $< $@ + +%.dump : % + mb-objdump -DSC $< > $@ + +%.rom : %.bin + hexdump -v -e'1/1 "%.2X\n"' $< > $@ + +.PRECIOUS : %.bin +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/firmware/apps/app_common_v2.c b/usrp2/firmware/apps/app_common_v2.c new file mode 100644 index 00000000..6d9606d4 --- /dev/null +++ b/usrp2/firmware/apps/app_common_v2.c @@ -0,0 +1,670 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "app_common_v2.h" +#include "buffer_pool.h" +#include "memcpy_wa.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "print_rmon_regs.h" +#include "db.h" +#include "db_base.h" +#include "clocks.h" +#include "u2_init.h" +#include + +volatile bool link_is_up = false; // eth handler sets this +int cpu_tx_buf_dest_port = PORT_ETH; + +// If this is non-zero, this dbsm could be writing to the ethernet +dbsm_t *ac_could_be_sending_to_eth; + +static unsigned char exp_seqno __attribute__((unused)) = 0; + +static inline bool +sync_to_pps(const op_generic_t *p) +{ + timesync_regs->sync_on_next_pps = 1; + //putstr("SYNC to PPS\n"); + return true; +} + +static bool +sync_every_pps(const op_generic_t *p) +{ + if (p->ok) + timesync_regs->tick_control |= TSC_TRIGGER_EVERYPPS; + else + timesync_regs->tick_control &= ~TSC_TRIGGER_EVERYPPS; + + return true; +} + +static inline bool +config_mimo_cmd(const op_config_mimo_t *p) +{ + clocks_mimo_config(p->flags); + return true; +} + +void +set_reply_hdr(u2_eth_packet_t *reply_pkt, u2_eth_packet_t const *cmd_pkt) +{ + reply_pkt->ehdr.dst = cmd_pkt->ehdr.src; + reply_pkt->ehdr.ethertype = U2_ETHERTYPE; + reply_pkt->thdr.flags = 0; + reply_pkt->thdr.fifo_status = 0; // written by protocol engine + reply_pkt->thdr.seqno = 0; // written by protocol engine + reply_pkt->thdr.ack = 0; // written by protocol engine + u2p_set_word0(&reply_pkt->fixed, 0, CONTROL_CHAN); + reply_pkt->fixed.timestamp = timer_regs->time; +} + +static void +send_reply(unsigned char *reply, size_t reply_len) +{ + if (reply_len < 64) + reply_len = 64; + + // wait for buffer to become idle + hal_set_leds(0x4, 0x4); + while((buffer_pool_status->status & BPS_IDLE(CPU_TX_BUF)) == 0) + ; + hal_set_leds(0x0, 0x4); + + // copy reply into CPU_TX_BUF + memcpy_wa(buffer_ram(CPU_TX_BUF), reply, reply_len); + + // wait until nobody else is sending to the ethernet + if (ac_could_be_sending_to_eth){ + hal_set_leds(0x8, 0x8); + dbsm_wait_for_opening(ac_could_be_sending_to_eth); + hal_set_leds(0x0, 0x8); + } + + if (0){ + printf("sending_reply to port %d, len = %d\n", cpu_tx_buf_dest_port, (int)reply_len); + print_buffer(buffer_ram(CPU_TX_BUF), reply_len/4); + } + + // fire it off + bp_send_from_buf(CPU_TX_BUF, cpu_tx_buf_dest_port, 1, 0, reply_len/4); + + // wait for it to complete (not long, it's a small pkt) + while((buffer_pool_status->status & (BPS_DONE(CPU_TX_BUF) | BPS_ERROR(CPU_TX_BUF))) == 0) + ; + + bp_clear_buf(CPU_TX_BUF); +} + + +static size_t +op_id_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_id_reply_t *r = (op_id_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) // no room + return 0; + + // Build reply subpacket + + r->opcode = OP_ID_REPLY; + r->len = sizeof(op_id_reply_t); + r->rid = p->rid; + r->addr = *ethernet_mac_addr(); + r->hw_rev = (u2_hw_rev_major << 8) | u2_hw_rev_minor; + // r->fpga_md5sum = ; // FIXME + // r->sw_md5sum = ; // FIXME + + return r->len; +} + + +static size_t +config_tx_v2_cmd(const op_config_tx_v2_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_config_tx_reply_v2_t *r = (op_config_tx_reply_v2_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + struct tune_result tune_result; + memset(&tune_result, 0, sizeof(tune_result)); + + bool ok = true; + + if (p->valid & CFGV_GAIN){ + ok &= db_set_gain(tx_dboard, p->gain); + } + + if (p->valid & CFGV_FREQ){ + bool was_streaming = is_streaming(); + if (was_streaming) + stop_rx_cmd(); + + u2_fxpt_freq_t f = u2_fxpt_freq_from_hilo(p->freq_hi, p->freq_lo); + bool tune_ok = db_tune(tx_dboard, f, &tune_result); + ok &= tune_ok; + print_tune_result("Tx", tune_ok, f, &tune_result); + + if (was_streaming) + restart_streaming(); + } + + if (p->valid & CFGV_INTERP_DECIM){ + int interp = p->interp; + int hb1 = 0; + int hb2 = 0; + + if (!(interp & 1)){ + hb2 = 1; + interp = interp >> 1; + } + + if (!(interp & 1)){ + hb1 = 1; + interp = interp >> 1; + } + + if (interp < MIN_CIC_INTERP || interp > MAX_CIC_INTERP) + ok = false; + else { + dsp_tx_regs->interp_rate = (hb1<<9) | (hb2<<8) | interp; + // printf("Interp: %d, register %d\n", p->interp, (hb1<<9) | (hb2<<8) | interp); + } + } + + if (p->valid & CFGV_SCALE_IQ){ + dsp_tx_regs->scale_iq = p->scale_iq; + } + + // Build reply subpacket + + r->opcode = OP_CONFIG_TX_REPLY_V2; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = ok; + r->inverted = tune_result.inverted; + r->baseband_freq_hi = u2_fxpt_freq_hi(tune_result.baseband_freq); + r->baseband_freq_lo = u2_fxpt_freq_lo(tune_result.baseband_freq); + r->duc_freq_hi = u2_fxpt_freq_hi(tune_result.dxc_freq); + r->duc_freq_lo = u2_fxpt_freq_lo(tune_result.dxc_freq); + r->residual_freq_hi = u2_fxpt_freq_hi(tune_result.residual_freq); + r->residual_freq_lo = u2_fxpt_freq_lo(tune_result.residual_freq); + return r->len; +} + +static size_t +config_rx_v2_cmd(const op_config_rx_v2_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_config_rx_reply_v2_t *r = (op_config_rx_reply_v2_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + struct tune_result tune_result; + memset(&tune_result, 0, sizeof(tune_result)); + + bool ok = true; + + if (p->valid & CFGV_GAIN){ + ok &= db_set_gain(rx_dboard, p->gain); + } + + if (p->valid & CFGV_FREQ){ + bool was_streaming = is_streaming(); + if (was_streaming) + stop_rx_cmd(); + + u2_fxpt_freq_t f = u2_fxpt_freq_from_hilo(p->freq_hi, p->freq_lo); + bool tune_ok = db_tune(rx_dboard, f, &tune_result); + ok &= tune_ok; + print_tune_result("Rx", tune_ok, f, &tune_result); + + if (was_streaming) + restart_streaming(); + } + + if (p->valid & CFGV_INTERP_DECIM){ + int decim = p->decim; + int hb1 = 0; + int hb2 = 0; + + if(!(decim & 1)) { + hb2 = 1; + decim = decim >> 1; + } + + if(!(decim & 1)) { + hb1 = 1; + decim = decim >> 1; + } + + if (decim < MIN_CIC_DECIM || decim > MAX_CIC_DECIM) + ok = false; + else { + dsp_rx_regs->decim_rate = (hb1<<9) | (hb2<<8) | decim; + // printf("Decim: %d, register %d\n", p->decim, (hb1<<9) | (hb2<<8) | decim); + } + } + + if (p->valid & CFGV_SCALE_IQ){ + dsp_rx_regs->scale_iq = p->scale_iq; + } + + // Build reply subpacket + + r->opcode = OP_CONFIG_RX_REPLY_V2; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = ok; + r->inverted = tune_result.inverted; + r->baseband_freq_hi = u2_fxpt_freq_hi(tune_result.baseband_freq); + r->baseband_freq_lo = u2_fxpt_freq_lo(tune_result.baseband_freq); + r->ddc_freq_hi = u2_fxpt_freq_hi(tune_result.dxc_freq); + r->ddc_freq_lo = u2_fxpt_freq_lo(tune_result.dxc_freq); + r->residual_freq_hi = u2_fxpt_freq_hi(tune_result.residual_freq); + r->residual_freq_lo = u2_fxpt_freq_lo(tune_result.residual_freq); + + return r->len; +} + +static size_t +read_time_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_read_time_reply_t *r = (op_read_time_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_READ_TIME_REPLY; + r->len = sizeof(*r); + r->rid = p->rid; + r->time = timer_regs->time; + + return r->len; +} + +static void +fill_db_info(u2_db_info_t *p, const struct db_base *db) +{ + p->dbid = db->dbid; + p->freq_min_hi = u2_fxpt_freq_hi(db->freq_min); + p->freq_min_lo = u2_fxpt_freq_lo(db->freq_min); + p->freq_max_hi = u2_fxpt_freq_hi(db->freq_max); + p->freq_max_lo = u2_fxpt_freq_lo(db->freq_max); + p->gain_min = db->gain_min; + p->gain_max = db->gain_max; + p->gain_step_size = db->gain_step_size; +} + +static size_t +dboard_info_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_dboard_info_reply_t *r = (op_dboard_info_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_DBOARD_INFO_REPLY; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = true; + + fill_db_info(&r->tx_db_info, tx_dboard); + fill_db_info(&r->rx_db_info, rx_dboard); + + return r->len; +} + +static size_t +peek_cmd(const op_peek_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + + //putstr("peek: addr="); puthex32(p->addr); + //printf(" bytes=%u\n", p->bytes); + + if ((reply_payload_space < (sizeof(*r) + p->bytes)) || + p->bytes > MAX_SUBPKT_LEN - sizeof(op_generic_t)) { + putstr("peek: insufficient reply packet space\n"); + return 0; // FIXME do partial read? + } + + r->opcode = OP_PEEK_REPLY; + r->len = sizeof(*r)+p->bytes; + r->rid = p->rid; + r->ok = true; + + memcpy_wa(reply_payload+sizeof(*r), (void *)p->addr, p->bytes); + + return r->len; +} + +static bool +poke_cmd(const op_poke_t *p) +{ + int bytes = p->len - sizeof(*p); + //putstr("poke: addr="); puthex32(p->addr); + //printf(" bytes=%u\n", bytes); + + uint8_t *src = (uint8_t *)p + sizeof(*p); + memcpy_wa((void *)p->addr, src, bytes); + + return true; +} + +static bool +set_lo_offset_cmd(const op_freq_t *p) +{ + u2_fxpt_freq_t f = u2_fxpt_freq_from_hilo(p->freq_hi, p->freq_lo); + if (p->opcode == OP_SET_TX_LO_OFFSET) + return db_set_lo_offset(tx_dboard, f); + else + return db_set_lo_offset(rx_dboard, f); +} + +static size_t +gpio_read_cmd(const op_gpio_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_gpio_read_reply_t *r = (op_gpio_read_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) // no room + return 0; + + // Build reply subpacket + + r->opcode = OP_GPIO_READ_REPLY; + r->len = sizeof(op_gpio_read_reply_t); + r->rid = p->rid; + r->ok = true; + r->mbz = 0; + r->value = hal_gpio_read(p->bank); + + return r->len; +} + +static size_t +generic_reply(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space, + bool ok) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = p->opcode | OP_REPLY_BIT; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = ok; + + return r->len; +} + +static size_t +add_eop(void *reply_payload, size_t reply_payload_space) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_EOP; + r->len = sizeof(*r); + r->rid = 0; + r->ok = 0; + + return r->len; +} + +void +handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len) +{ + unsigned char reply[sizeof(u2_eth_packet_t) + 4 * sizeof(u2_subpkt_t)] _AL4; + unsigned char *reply_payload = &reply[sizeof(u2_eth_packet_t)]; + int reply_payload_space = sizeof(reply) - sizeof(u2_eth_packet_t); + + // initialize reply + memset(reply, 0, sizeof(reply)); + set_reply_hdr((u2_eth_packet_t *) reply, pkt); + + // point to beginning of payload (subpackets) + unsigned char *payload = ((unsigned char *) pkt) + sizeof(u2_eth_packet_t); + int payload_len = len - sizeof(u2_eth_packet_t); + + size_t subpktlen = 0; + bool ok = false; + + while (payload_len >= sizeof(op_generic_t)){ + const op_generic_t *gp = (const op_generic_t *) payload; + subpktlen = 0; + + // printf("\nopcode = %d\n", gp->opcode); + + switch(gp->opcode){ + case OP_EOP: // end of subpackets + goto end_of_subpackets; + + case OP_ID: + subpktlen = op_id_cmd(gp, reply_payload, reply_payload_space); + break; + + case OP_CONFIG_TX_V2: + subpktlen = config_tx_v2_cmd((op_config_tx_v2_t *) payload, reply_payload, reply_payload_space); + break; + + case OP_CONFIG_RX_V2: + subpktlen = config_rx_v2_cmd((op_config_rx_v2_t *) payload, reply_payload, reply_payload_space); + break; + + case OP_START_RX_STREAMING: + start_rx_streaming_cmd(&pkt->ehdr.src, (op_start_rx_streaming_t *) payload); + ok = true; + goto generic_reply; + + case OP_STOP_RX: + stop_rx_cmd(); + ok = true; + goto generic_reply; + + case OP_BURN_MAC_ADDR: + ok = ethernet_set_mac_addr(&((op_burn_mac_addr_t *)payload)->addr); + goto generic_reply; + + case OP_CONFIG_MIMO: + ok = config_mimo_cmd((op_config_mimo_t *) payload); + goto generic_reply; + + case OP_READ_TIME: + subpktlen = read_time_cmd(gp, reply_payload, reply_payload_space); + break; + + case OP_DBOARD_INFO: + subpktlen = dboard_info_cmd(gp, reply_payload, reply_payload_space); + break; + + case OP_SYNC_TO_PPS: + sync_to_pps((op_generic_t *) payload); + ok = true; + goto generic_reply; + + case OP_PEEK: + subpktlen = peek_cmd((op_peek_t *)payload, reply_payload, reply_payload_space); + break; + + case OP_POKE: + ok = poke_cmd((op_poke_t *)payload); + goto generic_reply; + + case OP_SET_TX_LO_OFFSET: + case OP_SET_RX_LO_OFFSET: + ok = set_lo_offset_cmd((op_freq_t *)payload); + goto generic_reply; + + case OP_RESET_DB: + db_init(); + ok = true; + goto generic_reply; + + case OP_SYNC_EVERY_PPS: + ok = sync_every_pps((op_generic_t *) payload); + goto generic_reply; + + case OP_GPIO_SET_DDR: + ok = true; + hal_gpio_set_ddr(((op_gpio_t *)payload)->bank, + ((op_gpio_t *)payload)->value, + ((op_gpio_t *)payload)->mask); + goto generic_reply; + + case OP_GPIO_SET_SELS: + ok = true; + hal_gpio_set_sels(((op_gpio_set_sels_t *)payload)->bank, + (char *)(&((op_gpio_set_sels_t *)payload)->sels)); + goto generic_reply; + + case OP_GPIO_READ: + subpktlen = gpio_read_cmd((op_gpio_t *) payload, reply_payload, reply_payload_space); + break; + + case OP_GPIO_WRITE: + ok = true; + hal_gpio_write(((op_gpio_t *)payload)->bank, + ((op_gpio_t *)payload)->value, + ((op_gpio_t *)payload)->mask); + goto generic_reply; + + case OP_GPIO_STREAM: + ok = true; + dsp_rx_regs->gpio_stream_enable = (uint32_t)((op_gpio_t *)payload)->value; + goto generic_reply; + + // Add new opcode handlers here + + generic_reply: + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, ok); + break; + + default: + printf("app_common_v2: unhandled opcode = %d\n", gp->opcode); + break; + } + + int t = (gp->len + 3) & ~3; // bump to a multiple of 4 + payload += t; + payload_len -= t; + + subpktlen = (subpktlen + 3) & ~3; // bump to a multiple of 4 + reply_payload += subpktlen; + reply_payload_space -= subpktlen; + } + + end_of_subpackets: + + // add the EOP marker + subpktlen = add_eop(reply_payload, reply_payload_space); + subpktlen = (subpktlen + 3) & ~3; // bump to a multiple of 4 + reply_payload += subpktlen; + reply_payload_space -= subpktlen; + + send_reply(reply, reply_payload - reply); +} + + +/* + * Called when an ethernet packet is received. + * Return true if we handled it here, otherwise + * it'll be passed on to the DSP Tx pipe + */ +bool +eth_pkt_inspector(dbsm_t *sm, int bufno) +{ + u2_eth_packet_t *pkt = (u2_eth_packet_t *) buffer_ram(bufno); + size_t byte_len = (buffer_pool_status->last_line[bufno] - 3) * 4; + + //static size_t last_len = 0; + + // hal_toggle_leds(0x1); + + // inspect rcvd frame and figure out what do do. + + if (pkt->ehdr.ethertype != U2_ETHERTYPE) + return true; // ignore, probably bogus PAUSE frame from MAC + + int chan = u2p_chan(&pkt->fixed); + + switch (chan){ + case CONTROL_CHAN: + handle_control_chan_frame(pkt, byte_len); + return true; // we handled the packet + break; + + case 0: + default: +#if 0 + if (last_len != 0){ + if (byte_len != last_len){ + printf("Len: %d last: %d\n", byte_len, last_len); + } + } + last_len = byte_len; + + if((pkt->thdr.seqno) == exp_seqno){ + exp_seqno++; + //putchar('.'); + } + else { + // putchar('S'); + //printf("S%d %d ",exp_seqno,pkt->thdr.seqno); + exp_seqno = pkt->thdr.seqno + 1; + } +#endif + return false; // pass it on to Tx DSP + break; + } +} + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + link_is_up = speed != 0; + hal_set_leds(link_is_up ? LED_RJ45 : 0x0, LED_RJ45); + printf("\neth link changed: speed = %d\n", speed); +} + + +void +print_tune_result(char *msg, bool tune_ok, + u2_fxpt_freq_t target_freq, struct tune_result *r) +{ +#if 0 + printf("db_tune %s %s\n", msg, tune_ok ? "true" : "false"); + putstr(" target_freq "); print_fxpt_freq(target_freq); newline(); + putstr(" baseband_freq "); print_fxpt_freq(r->baseband_freq); newline(); + putstr(" dxc_freq "); print_fxpt_freq(r->dxc_freq); newline(); + putstr(" residual_freq "); print_fxpt_freq(r->residual_freq); newline(); + printf(" inverted %s\n", r->inverted ? "true" : "false"); +#endif +} diff --git a/usrp2/firmware/apps/app_common_v2.h b/usrp2/firmware/apps/app_common_v2.h new file mode 100644 index 00000000..5058661a --- /dev/null +++ b/usrp2/firmware/apps/app_common_v2.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_APP_COMMON_H +#define INCLUDED_APP_COMMON_H + +#include "bool.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "memory_map.h" +#include "hal_io.h" +#include +#include + +#define CPU_TX_BUF 7 // cpu -> eth + +#define _AL4 __attribute__((aligned (4))) + +extern volatile bool link_is_up; // eth handler sets this + +// If there's a dbsm that sends to the ethernet, put it's address here +extern dbsm_t *ac_could_be_sending_to_eth; + +extern int cpu_tx_buf_dest_port; + +void set_reply_hdr(u2_eth_packet_t *reply_pkt, u2_eth_packet_t const *cmd_pkt); + +/* + * Called when an ethernet packet is received. + * Return true if we handled it here, otherwise + * it'll be passed on to the DSP Tx pipe + */ +bool eth_pkt_inspector(dbsm_t *sm, int bufno); + +void link_changed_callback(int speed); + +void +print_tune_result(char *msg, bool tune_ok, + u2_fxpt_freq_t target_freq, struct tune_result *r); + + +void start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p); +void stop_rx_cmd(void); +void restart_streaming(void); +bool is_streaming(void); + +void handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len); + +#endif /* INCLUDED_APP_COMMON_H */ diff --git a/usrp2/firmware/apps/app_passthru_v2.c b/usrp2/firmware/apps/app_passthru_v2.c new file mode 100644 index 00000000..660bcd77 --- /dev/null +++ b/usrp2/firmware/apps/app_passthru_v2.c @@ -0,0 +1,250 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "app_passthru_v2.h" +#include "buffer_pool.h" +#include "memcpy_wa.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "print_rmon_regs.h" +#include "db.h" +#include "clocks.h" +#include + +volatile bool link_is_up = false; // eth handler sets this + + +// If this is non-zero, this dbsm could be writing to the ethernet +dbsm_t *ac_could_be_sending_to_eth; + +//static unsigned char exp_seqno = 0; + +void +set_reply_hdr(u2_eth_packet_t *reply_pkt, u2_eth_packet_t const *cmd_pkt) +{ + reply_pkt->ehdr.dst = cmd_pkt->ehdr.src; + reply_pkt->ehdr.ethertype = U2_ETHERTYPE; + reply_pkt->thdr.flags = 0; + reply_pkt->thdr.fifo_status = 0; // written by protocol engine + reply_pkt->thdr.seqno = 0; // written by protocol engine + reply_pkt->thdr.ack = 0; // written by protocol engine + u2p_set_word0(&reply_pkt->fixed, 0, CONTROL_CHAN); + reply_pkt->fixed.timestamp = timer_regs->time; +} + +static void +send_reply(unsigned char *reply, size_t reply_len) +{ + if (reply_len < 64) + reply_len = 64; + + // wait for buffer to become idle + hal_set_leds(0x4, 0x4); + while((buffer_pool_status->status & BPS_IDLE(CPU_TX_BUF)) == 0) + ; + hal_set_leds(0x0, 0x4); + + // copy reply into CPU_TX_BUF + memcpy_wa(buffer_ram(CPU_TX_BUF), reply, reply_len); + + // wait until nobody else is sending to the ethernet + if (ac_could_be_sending_to_eth){ + hal_set_leds(0x8, 0x8); + dbsm_wait_for_opening(ac_could_be_sending_to_eth); + hal_set_leds(0x0, 0x8); + } + + // fire it off + bp_send_from_buf(CPU_TX_BUF, PORT_ETH, 1, 0, reply_len/4); + + // wait for it to complete (not long, it's a small pkt) + while((buffer_pool_status->status & (BPS_DONE(CPU_TX_BUF) | BPS_ERROR(CPU_TX_BUF))) == 0) + ; + + bp_clear_buf(CPU_TX_BUF); +} + + +static size_t +op_id_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_id_reply_t *r = (op_id_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) // no room + return 0; + + // Build reply subpacket + + r->opcode = OP_ID_REPLY; + r->len = sizeof(op_id_reply_t); + r->rid = p->rid; + r->addr = *ethernet_mac_addr(); + r->hw_rev = 0x0000; // FIXME + // r->fpga_md5sum = ; // FIXME + // r->sw_md5sum = ; // FIXME + + // FIXME Add d'board info, including dbid, min/max gain, min/max freq + + return r->len; +} + +static size_t +add_eop(void *reply_payload, size_t reply_payload_space) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_EOP; + r->len = sizeof(*r); + r->rid = 0; + r->ok = 0; + + return r->len; +} + +bool +handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len) +{ + unsigned char reply[sizeof(u2_eth_packet_t) + 4 * sizeof(u2_subpkt_t)] _AL4; + unsigned char *reply_payload = &reply[sizeof(u2_eth_packet_t)]; + int reply_payload_space = sizeof(reply) - sizeof(u2_eth_packet_t); + + bool handled_it = false; + + // initialize reply + memset(reply, 0, sizeof(reply)); + set_reply_hdr((u2_eth_packet_t *) reply, pkt); + + // point to beginning of payload (subpackets) + unsigned char *payload = ((unsigned char *) pkt) + sizeof(u2_eth_packet_t); + int payload_len = len - sizeof(u2_eth_packet_t); + + size_t subpktlen = 0; + + while (payload_len >= sizeof(op_generic_t)){ + const op_generic_t *gp = (const op_generic_t *) payload; + subpktlen = 0; + + switch(gp->opcode){ + case OP_EOP: // end of subpackets + goto end_of_subpackets; + + case OP_ID: + subpktlen = op_id_cmd(gp, reply_payload, reply_payload_space); + handled_it = true; + break; + + default: + if (0){ + printf("\npassing on %d\n", gp->opcode); + } + break; + } + + int t = (gp->len + 3) & ~3; // bump to a multiple of 4 + payload += t; + payload_len -= t; + + subpktlen = (subpktlen + 3) & ~3; // bump to a multiple of 4 + reply_payload += subpktlen; + reply_payload_space -= subpktlen; + } + + end_of_subpackets: + + if (handled_it){ + // add the EOP marker + subpktlen = add_eop(reply_payload, reply_payload_space); + subpktlen = (subpktlen + 3) & ~3; // bump to a multiple of 4 + reply_payload += subpktlen; + reply_payload_space -= subpktlen; + + send_reply(reply, reply_payload - reply); + } + + return handled_it; +} + + +/* + * Called when an ethernet packet is received. + * Return true if we handled it here, otherwise + * it'll be passed on to the DSP Tx pipe + */ +bool +eth_pkt_inspector(dbsm_t *sm, int bufno) +{ + u2_eth_packet_t *pkt = (u2_eth_packet_t *) buffer_ram(bufno); + size_t byte_len = (buffer_pool_status->last_line[bufno] - 3) * 4; + + //static size_t last_len = 0; + + // hal_toggle_leds(0x1); + + // inspect rcvd frame and figure out what do do. + + if (pkt->ehdr.ethertype != U2_ETHERTYPE) + return true; // ignore, probably bogus PAUSE frame from MAC + + int chan = u2p_chan(&pkt->fixed); + + switch (chan){ + case CONTROL_CHAN: + return handle_control_chan_frame(pkt, byte_len); + break; + + case 0: + default: +#if 0 + if (last_len != 0){ + if (byte_len != last_len){ + printf("Len: %d last: %d\n", byte_len, last_len); + } + } + last_len = byte_len; + + if((pkt->thdr.seqno) == exp_seqno){ + exp_seqno++; + //putchar('.'); + } + else { + // putchar('S'); + //printf("S%d %d ",exp_seqno,pkt->thdr.seqno); + exp_seqno = pkt->thdr.seqno + 1; + } +#endif + return false; // pass it on to Tx DSP + break; + } +} + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + link_is_up = speed != 0; + hal_set_leds(link_is_up ? LED_RJ45 : 0x0, LED_RJ45); + printf("\neth link changed: speed = %d\n", speed); +} diff --git a/usrp2/firmware/apps/app_passthru_v2.h b/usrp2/firmware/apps/app_passthru_v2.h new file mode 100644 index 00000000..419997ff --- /dev/null +++ b/usrp2/firmware/apps/app_passthru_v2.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_APP_COMMON_H +#define INCLUDED_APP_COMMON_H + +#include "bool.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "memory_map.h" +#include "hal_io.h" +#include +#include + +#define CPU_TX_BUF 7 // cpu -> eth + +#define _AL4 __attribute__((aligned (4))) + +extern volatile bool link_is_up; // eth handler sets this + + +// If there's a dbsm that sends to the ethernet, put it's address here +extern dbsm_t *ac_could_be_sending_to_eth; + + +void set_reply_hdr(u2_eth_packet_t *reply_pkt, u2_eth_packet_t const *cmd_pkt); + +/* + * Called when an ethernet packet is received. + * Return true if we handled it here, otherwise + * it'll be passed on to the DSP Tx pipe + */ +bool eth_pkt_inspector(dbsm_t *sm, int bufno); + +void link_changed_callback(int speed); + +bool handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len); + +#endif /* INCLUDED_APP_COMMON_H */ diff --git a/usrp2/firmware/apps/blink_leds.c b/usrp2/firmware/apps/blink_leds.c new file mode 100644 index 00000000..682ca8db --- /dev/null +++ b/usrp2/firmware/apps/blink_leds.c @@ -0,0 +1,40 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "hal_io.h" +#include "nonstdio.h" + +int +main(void) +{ + int counter = 0; + + u2_init(); + + putstr("blink_leds\n"); + while(1){ + output_regs->leds = (counter++ & 0x3); + } + + return 0; +} diff --git a/usrp2/firmware/apps/blink_leds2.c b/usrp2/firmware/apps/blink_leds2.c new file mode 100644 index 00000000..d4bd89a1 --- /dev/null +++ b/usrp2/firmware/apps/blink_leds2.c @@ -0,0 +1,53 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "hal_io.h" +#include "pic.h" +#include "nonstdio.h" + +//#define DELTA_T (MASTER_CLK_RATE/2) // 0.5s (10ns per tick) +#define DELTA_T 5000 // 5 us (10ns per tick) + + +void +timer_handler(unsigned irq) +{ + hal_set_timeout(DELTA_T); // schedule next timeout + hal_toggle_leds(0x2); +} + +int +main(void) +{ + u2_init(); + + putstr("blink_leds2\n"); + pic_register_handler(IRQ_TIMER, timer_handler); + hal_set_timeout(DELTA_T); // schedule next timeout + + while(1){ + hal_toggle_leds(0x1); + } + + return 0; +} diff --git a/usrp2/firmware/apps/buf_ram_test.c b/usrp2/firmware/apps/buf_ram_test.c new file mode 100644 index 00000000..e639166a --- /dev/null +++ b/usrp2/firmware/apps/buf_ram_test.c @@ -0,0 +1,89 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "u2_init.h" +#include "memory_map.h" +#include "bool.h" +#include "nonstdio.h" +#include "hal_io.h" +#include "mdelay.h" + + +static void +write_bufs(void) +{ + int i, n; + int counter = 0; + + for (n = 0; n < NBUFFERS; n++){ + volatile int *p = buffer_ram(n); + for (i = 0; i < BP_NLINES; i++) + p[i] = counter++; + } +} + +// return number of errors detected +static int +check_bufs(void) +{ + int i, n; + int counter = 0; + int nerrors = 0; + + for (n = 0; n < NBUFFERS; n++){ + volatile int *p = buffer_ram(n); + for (i = 0; i < BP_NLINES; i++, counter++){ + int rd = p[i]; + if (rd != counter){ + putchar('b'); + putchar(n + '0'); + putchar('['); + puthex16(i); + putstr("] exp: "); + puthex32(counter); + putstr(" got: "); + puthex32_nl(rd); + nerrors++; + } + } + } + return nerrors; +} + + +int +main(void) +{ + u2_init(); + + output_regs->leds = 0; + + write_bufs(); + int nerrors = check_bufs(); + + if (nerrors == 0){ + output_regs->leds = 0x3; // leds on -> PASS + putstr("PASS\n"); + } + else { + output_regs->leds = 0x0; // leds off -> FAIL + putstr("FAIL\n"); + } + + hal_finish(); + return 0; +} diff --git a/usrp2/firmware/apps/burn_dbsrx_eeprom.c b/usrp2/firmware/apps/burn_dbsrx_eeprom.c new file mode 100644 index 00000000..cbfb37be --- /dev/null +++ b/usrp2/firmware/apps/burn_dbsrx_eeprom.c @@ -0,0 +1,106 @@ +/* -*- c++ -*- */ +/* + * Copyright 2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "i2c.h" +#include "usrp2_i2c_addr.h" +#include "mdelay.h" +#include "hal_io.h" +#include "nonstdio.h" +#include "bool.h" + + + +int read_dboard_eeprom(int i2c_addr); + + +#define USRP_DBID_DBS_RX 0x0002 +#define USRP_DBID_DBS_RX_WITH_CLOCK_MOD 0x000d + +const char dbs_rx_rev2_eeprom[] = { + 0xdb, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18 +}; + +#define LED_VALS (LED_A | LED_B | LED_C | LED_D) +#define LED_MASK (LED_A | LED_B | LED_C | LED_D) + +int +main(void) +{ + u2_init(); + + puts("\nburn_dbsrx_eeprom\n"); + + hal_set_leds(0, ~0); // all off + + int i2c_addr = I2C_ADDR_RX_A; + int dbid = read_dboard_eeprom(i2c_addr); + bool ok; + const char *msg = 0; + + switch (dbid){ + case -1: + msg = "No RX daughterboard found"; + goto bad; + + case -2: + msg = "Invalid RX EEPROM contents"; + goto bad; + + case USRP_DBID_DBS_RX_WITH_CLOCK_MOD: + msg = "RX Daughterboard already reports being a DBS RX w/ CLOCK_MOD"; + goto good; + + case USRP_DBID_DBS_RX: + // Says it's a DBS_RX, attempt to burn the EEPROM + ok = eeprom_write(i2c_addr, 0, + dbs_rx_rev2_eeprom, sizeof(dbs_rx_rev2_eeprom)); + if (ok){ + msg = "Successfully programmed db as DBS RX Rev 2.1"; + goto good; + } + else { + msg = "Failed to write daugherboard eeprom"; + goto bad; + } + + default: + msg = "Daughterboard is not a DBS RX; ignored"; + goto bad; + } + + good: + puts(msg); + hal_set_leds(LED_VALS, LED_MASK); + while (1) + ; + + bad: + puts(msg); + while(1){ + hal_toggle_leds(LED_VALS); + mdelay(50); + } +} diff --git a/usrp2/firmware/apps/burnrev30.c b/usrp2/firmware/apps/burnrev30.c new file mode 100644 index 00000000..e91c35c0 --- /dev/null +++ b/usrp2/firmware/apps/burnrev30.c @@ -0,0 +1,162 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include +#include +#include +#include +#include +#include +#include "sd.h" +#include "mdelay.h" + +#define HW_REV_MAJOR 3 +#define HW_REV_MINOR 0 + +int test_ram() +{ + int i,j,k; + output_regs->ram_page = 1<<10; + + extram[0] = 0xDEADBEEF; + extram[1] = 0xF00D1234; + extram[7] = 0x76543210; + + output_regs->ram_page = 2<<10; + extram[7] = 0x55555555; + extram[1] = 0xaaaaaaaa; + extram[0] = 0xeeeeeeee; + + output_regs->ram_page = 1<<10; + + i = extram[0]; + k = extram[1]; + j = extram[7]; + + if((i != 0xDEADBEEF)||(j!=0x76543210)||(k!=0xF00D1234)) { + puts("RAM FAIL1!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + + output_regs->ram_page = 2<<10; + + j = extram[7]; + k = extram[1]; + i = extram[0]; + + if((i != 0xeeeeeeee)||(j!=0x55555555)||(k!=0xaaaaaaaa)) { + puts("RAM FAIL2!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + return 1; +} + +int test_sd() +{ + int i = sd_init(); + if(i==0) { + puts("FAILED INIT of Card\n"); + return 0; + } + + unsigned char buf[512]; + i = sd_read_block(2048,buf); + if(i == 0) { + puts("READ Command Rejected\n"); + return 0; + } + if((buf[0]==0xb8)&&(buf[1]==0x08)&&(buf[2]==0x00)&&(buf[3]==0x50)) + ; + else { + puts("Read bad data from SD Card\n"); + return 0; + } + return 1; +} + +int +main(void) +{ + u2_init(); + + putstr("\nFactory Test, Board Rev 3.0\n"); + + bool ok = true; + unsigned char maj = HW_REV_MAJOR; + unsigned char min = HW_REV_MINOR; + ok = eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_MSB, &maj, 1); + ok &= eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_LSB, &min, 1); + + putstr("\nset_hw_rev\n"); + if (ok) + printf("OK: set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + else { + printf("FAILED to set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + hal_finish(); + return 0; + } + + if(test_sd()) + puts("SD OK\n"); + else { + puts("SD FAIL\n"); + //hal_finish(); + //return 0; + } + if(test_ram()) + puts("RAM OK\n"); + else { + puts("RAM FAIL\n"); + hal_finish(); + return 0; + } + + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + clocks_mimo_config(MC_WE_LOCK_TO_SMA); + + while (!clocks_lock_detect()) { + puts("No Lock"); + mdelay(1000); + } + puts("Clock Locked\n"); + +} diff --git a/usrp2/firmware/apps/burnrev31.c b/usrp2/firmware/apps/burnrev31.c new file mode 100644 index 00000000..2a58bdfe --- /dev/null +++ b/usrp2/firmware/apps/burnrev31.c @@ -0,0 +1,162 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include +#include +#include +#include +#include +#include +#include "sd.h" +#include "mdelay.h" + +#define HW_REV_MAJOR 3 +#define HW_REV_MINOR 1 + +int test_ram() +{ + int i,j,k; + output_regs->ram_page = 1<<10; + + extram[0] = 0xDEADBEEF; + extram[1] = 0xF00D1234; + extram[7] = 0x76543210; + + output_regs->ram_page = 2<<10; + extram[7] = 0x55555555; + extram[1] = 0xaaaaaaaa; + extram[0] = 0xeeeeeeee; + + output_regs->ram_page = 1<<10; + + i = extram[0]; + k = extram[1]; + j = extram[7]; + + if((i != 0xDEADBEEF)||(j!=0x76543210)||(k!=0xF00D1234)) { + puts("RAM FAIL1!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + + output_regs->ram_page = 2<<10; + + j = extram[7]; + k = extram[1]; + i = extram[0]; + + if((i != 0xeeeeeeee)||(j!=0x55555555)||(k!=0xaaaaaaaa)) { + puts("RAM FAIL2!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + return 1; +} + +int test_sd() +{ + int i = sd_init(); + if(i==0) { + puts("FAILED INIT of Card\n"); + return 0; + } + + unsigned char buf[512]; + i = sd_read_block(2048,buf); + if(i == 0) { + puts("READ Command Rejected\n"); + return 0; + } + if((buf[0]==0xb8)&&(buf[1]==0x08)&&(buf[2]==0x00)&&(buf[3]==0x50)) + ; + else { + puts("Read bad data from SD Card\n"); + return 0; + } + return 1; +} + +int +main(void) +{ + u2_init(); + + putstr("\nFactory Test, Board Rev 3.1\n"); + + bool ok = true; + unsigned char maj = HW_REV_MAJOR; + unsigned char min = HW_REV_MINOR; + ok = eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_MSB, &maj, 1); + ok &= eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_LSB, &min, 1); + + putstr("\nset_hw_rev\n"); + if (ok) + printf("OK: set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + else { + printf("FAILED to set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + hal_finish(); + return 0; + } + + if(test_sd()) + puts("SD OK\n"); + else { + puts("SD FAIL\n"); + //hal_finish(); + //return 0; + } + if(test_ram()) + puts("RAM OK\n"); + else { + puts("RAM FAIL\n"); + hal_finish(); + return 0; + } + + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + clocks_mimo_config(MC_WE_LOCK_TO_SMA); + + while (!clocks_lock_detect()) { + puts("No Lock"); + mdelay(1000); + } + puts("Clock Locked\n"); + +} diff --git a/usrp2/firmware/apps/burnrev40.c b/usrp2/firmware/apps/burnrev40.c new file mode 100644 index 00000000..5197f535 --- /dev/null +++ b/usrp2/firmware/apps/burnrev40.c @@ -0,0 +1,162 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include +#include +#include +#include +#include +#include +#include "sd.h" +#include "mdelay.h" + +#define HW_REV_MAJOR 4 +#define HW_REV_MINOR 0 + +int test_ram() +{ + int i,j,k; + output_regs->ram_page = 1<<10; + + extram[0] = 0xDEADBEEF; + extram[1] = 0xF00D1234; + extram[7] = 0x76543210; + + output_regs->ram_page = 2<<10; + extram[7] = 0x55555555; + extram[1] = 0xaaaaaaaa; + extram[0] = 0xeeeeeeee; + + output_regs->ram_page = 1<<10; + + i = extram[0]; + k = extram[1]; + j = extram[7]; + + if((i != 0xDEADBEEF)||(j!=0x76543210)||(k!=0xF00D1234)) { + puts("RAM FAIL1!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + + output_regs->ram_page = 2<<10; + + j = extram[7]; + k = extram[1]; + i = extram[0]; + + if((i != 0xeeeeeeee)||(j!=0x55555555)||(k!=0xaaaaaaaa)) { + puts("RAM FAIL2!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + return 1; +} + +int test_sd() +{ + int i = sd_init(); + if(i==0) { + puts("FAILED INIT of Card\n"); + return 0; + } + + unsigned char buf[512]; + i = sd_read_block(2048,buf); + if(i == 0) { + puts("READ Command Rejected\n"); + return 0; + } + if((buf[0]==0xb8)&&(buf[1]==0x08)&&(buf[2]==0x00)&&(buf[3]==0x50)) + ; + else { + puts("Read bad data from SD Card\n"); + return 0; + } + return 1; +} + +int +main(void) +{ + u2_init(); + + putstr("\nFactory Test, Board Rev 4.0\n"); + + bool ok = true; + unsigned char maj = HW_REV_MAJOR; + unsigned char min = HW_REV_MINOR; + ok = eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_MSB, &maj, 1); + ok &= eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_LSB, &min, 1); + + putstr("\nset_hw_rev\n"); + if (ok) + printf("OK: set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + else { + printf("FAILED to set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + hal_finish(); + return 0; + } + + if(test_sd()) + puts("SD OK\n"); + else { + puts("SD FAIL\n"); + //hal_finish(); + //return 0; + } + if(test_ram()) + puts("RAM OK\n"); + else { + puts("RAM FAIL\n"); + hal_finish(); + return 0; + } + + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + clocks_mimo_config(MC_WE_LOCK_TO_SMA); + + while (!clocks_lock_detect()) { + puts("No Lock"); + mdelay(1000); + } + puts("Clock Locked\n"); + +} diff --git a/usrp2/firmware/apps/can_i_sub.c b/usrp2/firmware/apps/can_i_sub.c new file mode 100644 index 00000000..ed49791f --- /dev/null +++ b/usrp2/firmware/apps/can_i_sub.c @@ -0,0 +1,25 @@ +#include +#include + +//typedef long long int64_t; + + +int64_t sub(int64_t a, int64_t b); +void print(int64_t d); + +int main(void) +{ + u2_init(); + + int64_t d = sub(462550990848000LL, 462028800000000LL); + print_uint64(d); + newline(); + return 0; +} + +int64_t sub(int64_t a, int64_t b) +{ + return a - b; +} + + diff --git a/usrp2/firmware/apps/echo.c b/usrp2/firmware/apps/echo.c new file mode 100644 index 00000000..89108ee8 --- /dev/null +++ b/usrp2/firmware/apps/echo.c @@ -0,0 +1,34 @@ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include "u2_init.h" +#include "stdio.h" + +int +main(void) +{ + u2_init(); + + puts("\n>>> echo <<<"); + + while (1){ + int ch = getchar(); + putchar(ch); + } + + return 0; +} diff --git a/usrp2/firmware/apps/eth_serdes.c b/usrp2/firmware/apps/eth_serdes.c new file mode 100644 index 00000000..0286f0c1 --- /dev/null +++ b/usrp2/firmware/apps/eth_serdes.c @@ -0,0 +1,233 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_passthru_v2.h" +#include "memcpy_wa.h" +#include "clocks.h" +#include +#include +#include + + +#define FW_SETS_SEQNO 1 // define to 0 or 1 (FIXME must be 1 for now) + +#if (FW_SETS_SEQNO) +static int fw_seqno __attribute__((unused)); // used when f/w is filling in sequence numbers +#endif + + +/* + * Full duplex Tx and Rx between ethernet and serdes + * + * Buffer 1 is used by the cpu to send frames to the host. + * Buffers 2 and 3 are used to double-buffer the DSP Rx to eth flow + * Buffers 4 and 5 are used to double-buffer the eth to DSP Tx eth flow + */ +//#define CPU_RX_BUF 0 // eth -> cpu + +#define DSP_RX_BUF_0 2 // serdes -> eth (double buffer) +#define DSP_RX_BUF_1 3 // serdes -> eth +#define DSP_TX_BUF_0 4 // eth -> serdes (double buffer) +#define DSP_TX_BUF_1 5 // eth -> serdes + +/* + * ================================================================ + * configure serdes double buffering state machine (eth -> serdes) + * ================================================================ + */ + + +// Receive from ethernet +buf_cmd_args_t dsp_tx_recv_args = { + PORT_ETH, + 0, + BP_LAST_LINE +}; + +// send to serdes +buf_cmd_args_t dsp_tx_send_args = { + PORT_SERDES, + 0, + 0 // filled in from last_line register +}; + +dbsm_t dsp_tx_sm; // the state machine + +/* + * ==================================================================== + * configure serdes RX double buffering state machine (serdes -> eth) + * ==================================================================== + */ + +// receive from serdes +buf_cmd_args_t dsp_rx_recv_args = { + PORT_SERDES, + 0, + BP_LAST_LINE +}; + +// send to ETH +buf_cmd_args_t dsp_rx_send_args = { + PORT_ETH, + 0, // starts with ethernet header in line 0 + 0, // filled in from list_line register +}; + +dbsm_t dsp_rx_sm; // the state machine + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +// ---------------------------------------------------------------- + + +#if (FW_SETS_SEQNO) +/* + * Debugging ONLY. This will be handled by the tx_protocol_engine. + * + * This is called when the DSP Rx chain has filled in a packet. + * We set and increment the seqno, then return false, indicating + * that we didn't handle the packet. A bit of a kludge + * but it should work. + */ + +bool +fw_sets_seqno_inspector(dbsm_t *sm, int buf_this) // returns false +{ +#if 0 + uint32_t *p = buffer_ram(buf_this); + uint32_t last_line = buffer_pool_status->last_line[buf_this] - sm->last_line_adj; + printf("fw_sets_seqno_inspector: buf_this = %d, last_line = %d\n", + buf_this, last_line); + + print_buffer(p, (last_line + 1)); +#endif + +#if 0 + uint32_t *p = buffer_ram(buf_this); + uint32_t seqno = fw_seqno++; + + // KLUDGE all kinds of nasty magic numbers and embedded knowledge + uint32_t t = p[4]; + t = (t & 0xffff00ff) | ((seqno & 0xff) << 8); + p[4] = t; +#endif + + return false; // we didn't handle the packet +} +#endif + + +inline static void +buffer_irq_handler(unsigned irq) +{ + uint32_t status = buffer_pool_status->status; + + if (0 && (status & ~BPS_IDLE_ALL)){ + putstr("status = "); + puthex32_nl(status); + } + + dbsm_process_status(&dsp_tx_sm, status); + dbsm_process_status(&dsp_rx_sm, status); +} + +int +main(void) +{ + u2_init(); + + output_regs->led_src = 0x3; // h/w controls bottom two bits + clocks_enable_test_clk(true, 1); + + putstr("\neth <-> serdes\n"); + + ethernet_register_link_changed_callback(link_changed_callback); + ethernet_init(); + + // clocks_mimo_config(MC_WE_LOCK_TO_SMA | MC_PROVIDE_CLK_TO_MIMO); + clocks_mimo_config(MC_WE_DONT_LOCK | MC_PROVIDE_CLK_TO_MIMO); + +#if 0 + // make bit 15 of Tx gpio's be a s/w output + hal_gpio_set_sel(GPIO_TX_BANK, 15, 's'); + hal_gpio_set_ddr(GPIO_TX_BANK, 0x8000, 0x8000); +#endif + +#if 1 + output_regs->debug_mux_ctrl = 1; + hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + hal_gpio_set_ddr(GPIO_TX_BANK, 0xffff, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0xffff, 0xffff); +#endif + + + // initialize double buffering state machine for ethernet -> serdes + + dbsm_init(&dsp_tx_sm, DSP_TX_BUF_0, + &dsp_tx_recv_args, &dsp_tx_send_args, + eth_pkt_inspector); + + + // initialize double buffering state machine for serdes -> ethernet + + if (FW_SETS_SEQNO){ + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + fw_sets_seqno_inspector); + } + else { + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + } + + // tell app_common that this dbsm could be sending to the ethernet + ac_could_be_sending_to_eth = &dsp_rx_sm; + + + // kick off the state machines + dbsm_start(&dsp_tx_sm); + dbsm_start(&dsp_rx_sm); + + //int which = 0; + + while(1){ + // hal_gpio_write(GPIO_TX_BANK, which, 0x8000); + // which ^= 0x8000; + + buffer_irq_handler(0); + } +} diff --git a/usrp2/firmware/apps/factory_test.c b/usrp2/firmware/apps/factory_test.c new file mode 100644 index 00000000..b4b44dbd --- /dev/null +++ b/usrp2/firmware/apps/factory_test.c @@ -0,0 +1,437 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include +#include +#include +#include +#include +#include +#include "sd.h" + +#define FW_SETS_SEQNO 1 // define to 0 or 1 (FIXME must be 1 for now) + +#if (FW_SETS_SEQNO) +static int fw_seqno; // used when f/w is filling in sequence numbers +#endif + + +/* + * Full duplex Tx and Rx between ethernet and DSP pipelines + * + * Buffer 1 is used by the cpu to send frames to the host. + * Buffers 2 and 3 are used to double-buffer the DSP Rx to eth flow + * Buffers 4 and 5 are used to double-buffer the eth to DSP Tx eth flow + */ +//#define CPU_RX_BUF 0 // eth -> cpu + +#define DSP_RX_BUF_0 2 // dsp rx -> eth (double buffer) +#define DSP_RX_BUF_1 3 // dsp rx -> eth +#define DSP_TX_BUF_0 4 // eth -> dsp tx (double buffer) +#define DSP_TX_BUF_1 5 // eth -> dsp tx + +/* + * ================================================================ + * configure DSP TX double buffering state machine (eth -> dsp) + * ================================================================ + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 2 lines (word0 + timestamp) +// DSP Tx reads word0 (flags) + timestamp followed by samples + +#define DSP_TX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4) + +// Receive from ethernet +buf_cmd_args_t dsp_tx_recv_args = { + PORT_ETH, + 0, + BP_LAST_LINE +}; + +// send to DSP Tx +buf_cmd_args_t dsp_tx_send_args = { + PORT_DSP, + DSP_TX_FIRST_LINE, // starts just past transport header + 0 // filled in from last_line register +}; + +dbsm_t dsp_tx_sm; // the state machine + +/* + * ================================================================ + * configure DSP RX double buffering state machine (dsp -> eth) + * ================================================================ + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 1 line (word0) +// DSP Rx writes timestamp followed by nlines_per_frame of samples +#define DSP_RX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4 + 1) + +// receive from DSP +buf_cmd_args_t dsp_rx_recv_args = { + PORT_DSP, + DSP_RX_FIRST_LINE, + BP_LAST_LINE +}; + +// send to ETH +buf_cmd_args_t dsp_rx_send_args = { + PORT_ETH, + 0, // starts with ethernet header in line 0 + 0, // filled in from list_line register +}; + +dbsm_t dsp_rx_sm; // the state machine + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +// variables for streaming mode + +static bool streaming_p = false; +static unsigned int streaming_items_per_frame = 0; +static int streaming_frame_count = 0; +#define FRAMES_PER_CMD 1000 + +bool is_streaming(void){ return streaming_p; } + +// ---------------------------------------------------------------- + + +void +restart_streaming(void) +{ + // setup RX DSP regs + dsp_rx_regs->clear_state = 1; // reset + + streaming_p = true; + streaming_frame_count = FRAMES_PER_CMD; + + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); // set "chain" bit + + // kick off the state machine + dbsm_start(&dsp_rx_sm); + + dsp_rx_regs->rx_time = 0; // enqueue first of two commands + + // make sure this one and the rest have the "now" and "chain" bits set. + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); + + dsp_rx_regs->rx_time = 0; // enqueue second command +} + +void +start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p) +{ + host_mac_addr = *host; // remember who we're sending to + + /* + * Construct ethernet header and word0 and preload into two buffers + */ + u2_eth_packet_t pkt; + memset(&pkt, 0, sizeof(pkt)); + pkt.ehdr.dst = *host; + pkt.ehdr.ethertype = U2_ETHERTYPE; + u2p_set_word0(&pkt.fixed, 0, 0); + // DSP RX will fill in timestamp + + memcpy_wa(buffer_ram(DSP_RX_BUF_0), &pkt, sizeof(pkt)); + memcpy_wa(buffer_ram(DSP_RX_BUF_1), &pkt, sizeof(pkt)); + + + if (FW_SETS_SEQNO) + fw_seqno = 0; + + streaming_items_per_frame = p->items_per_frame; + restart_streaming(); +} + + +void +stop_rx_cmd(void) +{ + streaming_p = false; + dsp_rx_regs->clear_state = 1; // flush cmd queue + bp_clear_buf(DSP_RX_BUF_0); + bp_clear_buf(DSP_RX_BUF_1); +} + + +static void +setup_tx() +{ + dsp_tx_regs->clear_state = 1; + bp_clear_buf(DSP_TX_BUF_0); + bp_clear_buf(DSP_TX_BUF_1); + + int tx_scale = 256; + int interp = 32; + + // setup some defaults + + dsp_tx_regs->freq = 0; + dsp_tx_regs->scale_iq = (tx_scale << 16) | tx_scale; + dsp_tx_regs->interp_rate = interp; +} + + +#if (FW_SETS_SEQNO) +/* + * Debugging ONLY. This will be handled by the tx_protocol_engine. + * + * This is called when the DSP Rx chain has filled in a packet. + * We set and increment the seqno, then return false, indicating + * that we didn't handle the packet. A bit of a kludge + * but it should work. + */ +bool +fw_sets_seqno_inspector(dbsm_t *sm, int buf_this) // returns false +{ + uint32_t *p = buffer_ram(buf_this); + uint32_t seqno = fw_seqno++; + + // KLUDGE all kinds of nasty magic numbers and embedded knowledge + uint32_t t = p[4]; + t = (t & 0xffff00ff) | ((seqno & 0xff) << 8); + p[4] = t; + + // queue up another rx command when required + if (streaming_p && --streaming_frame_count == 0){ + streaming_frame_count = FRAMES_PER_CMD; + dsp_rx_regs->rx_time = 0; + } + + return false; // we didn't handle the packet +} +#endif + + +inline static void +buffer_irq_handler(unsigned irq) +{ + uint32_t status = buffer_pool_status->status; + + dbsm_process_status(&dsp_tx_sm, status); + dbsm_process_status(&dsp_rx_sm, status); +} + +int test_ram() +{ + int i,j,k; + output_regs->ram_page = 1<<10; + + extram[0] = 0xDEADBEEF; + extram[1] = 0xF00D1234; + extram[7] = 0x76543210; + + output_regs->ram_page = 2<<10; + extram[7] = 0x55555555; + extram[1] = 0xaaaaaaaa; + extram[0] = 0xeeeeeeee; + + output_regs->ram_page = 1<<10; + + i = extram[0]; + k = extram[1]; + j = extram[7]; + + if((i != 0xDEADBEEF)||(j!=0x76543210)||(k!=0xF00D1234)) { + puts("RAM FAIL1!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + + output_regs->ram_page = 2<<10; + + j = extram[7]; + k = extram[1]; + i = extram[0]; + + if((i != 0xeeeeeeee)||(j!=0x55555555)||(k!=0xaaaaaaaa)) { + puts("RAM FAIL2!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + return 1; +} + +int test_sd() +{ + int i = sd_init(); + if(i==0) { + puts("FAILED INIT of Card\n"); + return 0; + } + + unsigned char buf[512]; + i = sd_read_block(2048,buf); + if(i == 0) { + puts("READ Command Rejected\n"); + return 0; + } + if((buf[0]==0xb8)&&(buf[1]==0x08)&&(buf[2]==0x00)&&(buf[3]==0x50)) + ; + else { + puts("Read bad data from SD Card\n"); + return 0; + } + return 1; +} + +int +main(void) +{ + u2_init(); + + putstr("\nFactory Test\n"); + + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + if(test_sd()) + puts("SD OK\n"); + else { + puts("SD FAIL\n"); + // hal_finish(); + //return 0; + } + if(test_ram()) + puts("RAM OK\n"); + else { + puts("RAM FAIL\n"); + hal_finish(); + return 0; + } + + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + output_regs->led_src = 0x7; // make bottom 3 controlled by HW + + ethernet_register_link_changed_callback(link_changed_callback); + ethernet_init(); + + clocks_enable_tx_dboard(true,1); + clocks_mimo_config(MC_WE_LOCK_TO_SMA); +#if 0 + // make bit 15 of Tx gpio's be a s/w output + hal_gpio_set_sel(GPIO_TX_BANK, 15, 's'); + hal_gpio_set_ddr(GPIO_TX_BANK, 0x8000, 0x8000); +#endif + + output_regs->debug_mux_ctrl = 1; +#if 0 + hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + hal_gpio_set_ddr(GPIO_TX_BANK, 0xffff, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0xffff, 0xffff); +#endif + + + // initialize double buffering state machine for ethernet -> DSP Tx + + dbsm_init(&dsp_tx_sm, DSP_TX_BUF_0, + &dsp_tx_recv_args, &dsp_tx_send_args, + eth_pkt_inspector); + + + // initialize double buffering state machine for DSP RX -> Ethernet + + if (FW_SETS_SEQNO){ + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + fw_sets_seqno_inspector); + } + else { + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + } + + // tell app_common that this dbsm could be sending to the ethernet + ac_could_be_sending_to_eth = &dsp_rx_sm; + + + // program tx registers + setup_tx(); + + // kick off the state machine + dbsm_start(&dsp_tx_sm); + + //int which = 0; + + while(1){ + // hal_gpio_write(GPIO_TX_BANK, which, 0x8000); + // which ^= 0x8000; + + buffer_irq_handler(0); + + int pending = pic_regs->pending; // poll for under or overrun + + if (pending & PIC_UNDERRUN_INT){ + dbsm_handle_tx_underrun(&dsp_tx_sm); + pic_regs->pending = PIC_UNDERRUN_INT; // clear interrupt + putchar('U'); + } + + if (pending & PIC_OVERRUN_INT){ + dbsm_handle_rx_overrun(&dsp_rx_sm); + pic_regs->pending = PIC_OVERRUN_INT; // clear pending interrupt + + // FIXME Figure out how to handle this robustly. + // Any buffers that are emptying should be allowed to drain... + + if (streaming_p){ + // restart_streaming(); + // FIXME report error + } + else { + // FIXME report error + } + putchar('O'); + } + } +} diff --git a/usrp2/firmware/apps/gen_eth_packets.c b/usrp2/firmware/apps/gen_eth_packets.c new file mode 100644 index 00000000..ce1e8160 --- /dev/null +++ b/usrp2/firmware/apps/gen_eth_packets.c @@ -0,0 +1,181 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "memcpy_wa.h" +#include "print_rmon_regs.h" +#include +#include +#include + + +// ---------------------------------------------------------------- + +static u2_mac_addr_t dst_mac_addr = + {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}; + +// ---------------------------------------------------------------- + +// #define PACKET_SIZE 1500 // bytes +// #define ETH_DATA_RATE 1000000 // 1MB/s +// #define ETH_PACKET_RATE (ETH_DATA_RATE/PACKET_SIZE) // 13,3333 pkts/s + +// static int timer_delta = MASTER_CLK_RATE/ETH_PACKET_RATE; // ticks between interrupts + +static int timer_delta = (int)(MASTER_CLK_RATE * 1e-3); // tick at 1 kHz +static int sim_timer_delta = (int)(MASTER_CLK_RATE * 100e-6); // tick at 10 kHz + +static volatile bool send_packet_now = false; // timer handler sets this +static volatile bool link_is_up = false; // eth handler sets this + +int packet_number = 0; + + +#define CPU_TX_BUF 0 // cpu xmits ethernet frames from here +#define CPU_RX_BUF 1 // receive ethernet frames here + +// ---------------------------------------------------------------- + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + link_is_up = speed == 0 ? false : true; + hal_set_leds(link_is_up ? 0x2 : 0x0, 0x2); + printf("\neth link changed: speed = %d\n", speed); +} + +void +timer_irq_handler(unsigned irq) +{ + hal_set_timeout(timer_delta); // schedule next timeout + send_packet_now = 1; +} + + +static void +init_packet(int *buf, const u2_eth_packet_t *pkt, int bufnum) +{ + int i = 0; + int mark = ((bufnum & 0xff) << 24) | 0x005A0000; + + for (i = 0; i < BP_NLINES; i++){ + buf[i] = mark | i; + mark ^= 0x00FF0000; + } + + // copy header into buffer + memcpy_wa(buf, pkt, sizeof(*pkt)); +} + +static void +init_packets(void) +{ + u2_eth_packet_t pkt __attribute__((aligned (4))); + + memset(&pkt, 0, sizeof(pkt)); + + pkt.ehdr.dst = dst_mac_addr; + // src address filled in by mac + + pkt.ehdr.ethertype = U2_ETHERTYPE; + pkt.fixed.word0 = 0x01234567; + pkt.fixed.timestamp = 0xffffffff; + + // init just the one we're using + init_packet((void *)buffer_ram(CPU_TX_BUF), &pkt, CPU_TX_BUF); +} + +int +main(void) +{ + int npackets_sent = 0; + + u2_init(); + + // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output + //hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + //hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + + putstr("\ngen_eth_packets\n"); + + hal_set_leds(0x0, 0x3); + + init_packets(); + + pic_register_handler(IRQ_TIMER, timer_irq_handler); + + if (hwconfig_simulation_p()) + timer_delta = sim_timer_delta; + + hal_set_timeout(timer_delta); + + ethernet_register_link_changed_callback(link_changed_callback); + ethernet_init(); + + if (hwconfig_simulation_p()){ + eth_mac->speed = 4; // hardcode mac speed to 1000 + link_is_up = true; + } + + // fire off a receive from the ethernet + bp_receive_to_buf(CPU_RX_BUF, PORT_ETH, 1, 0, BP_LAST_LINE); + + while(1){ + uint32_t status = buffer_pool_status->status; + + if (status & (BPS_DONE(CPU_RX_BUF) | BPS_ERROR(CPU_RX_BUF))){ + bp_clear_buf(CPU_RX_BUF); + // ignore incoming ethernet packets; they were looped back in sim + bp_receive_to_buf(CPU_RX_BUF, PORT_ETH, 1, 0, BP_LAST_LINE); + } + + if (status & (BPS_DONE(CPU_TX_BUF) | BPS_ERROR(CPU_TX_BUF))){ + bp_clear_buf(CPU_TX_BUF); + npackets_sent++; + if ((npackets_sent & 0xF) == 0) // print after every 16 packets + print_rmon_regs(); + } + + if (link_is_up && send_packet_now && (status & BPS_IDLE(CPU_TX_BUF))){ + send_packet_now = false; + + // kick off the next packet + // FIXME set packet number in packet + + bp_send_from_buf(CPU_TX_BUF, PORT_ETH, 1, 0, 255); // 1KB total + hal_toggle_leds(0x1); + } + } + + hal_finish(); + return 1; +} diff --git a/usrp2/firmware/apps/hello.c b/usrp2/firmware/apps/hello.c new file mode 100644 index 00000000..bce84309 --- /dev/null +++ b/usrp2/firmware/apps/hello.c @@ -0,0 +1,30 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "u2_init.h" +#include "stdio.h" + +int +main(void) +{ + u2_init(); + + puts("Hello World"); + puts("Goodbye World"); + + return 0; +} diff --git a/usrp2/firmware/apps/ibs_rx_test.c b/usrp2/firmware/apps/ibs_rx_test.c new file mode 100644 index 00000000..bdc04747 --- /dev/null +++ b/usrp2/firmware/apps/ibs_rx_test.c @@ -0,0 +1,82 @@ +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "nonstdio.h" + +#define PORT 2 // ethernet = 2, serdes = 0 +int dsp_rx_buf, dsp_tx_buf, serdes_rx_buf, serdes_tx_buf; +int dsp_rx_idle, dsp_tx_idle, serdes_rx_idle, serdes_tx_idle; + +int buffer_state[4]; + +static void __attribute__((unused)) +wait_until_status_nonzero(void) +{ + while (buffer_pool_status->status == 0) + ; +} + +int +main(void) +{ + int i; + + u2_init(); + + output_regs->adc_ctrl = 0x0A; + + dsp_rx_regs->freq = 0; + dsp_rx_regs->scale_iq = (1 << 16) | 1; + dsp_rx_regs->decim_rate = 8; + + volatile unsigned int *buffer0 = buffer_ram(0); + volatile unsigned int *buffer1 = buffer_ram(1); + volatile unsigned int *buffer2 = buffer_ram(2); + + putstr("Starting RX\n"); + bp_clear_buf(0); + bp_receive_to_buf(0, 1, 1, 0, 99); + + dsp_rx_regs->rx_command = (50 << 9) | 100; // Numlines, lines per frame + dsp_rx_regs->rx_time = 0x2000; + + dsp_rx_regs->rx_command = (137 << 9) | 50; // Numlines, lines per frame + dsp_rx_regs->rx_time = 0x2200; + + while (buffer_pool_status->status == 0) + ; + bp_clear_buf(0); + bp_clear_buf(1); + bp_receive_to_buf(1, 1, 1, 0, 99); + while (buffer_pool_status->status == 0) + ; + bp_clear_buf(2); + bp_receive_to_buf(2, 1, 1, 0, 99); + while (buffer_pool_status->status == 0) + ; + + for(i=0;i<100;i++) { + puthex(i); + putstr(" "); + puthex_nl(buffer0[i]); + } + for(i=0;i<60;i++) { + puthex(i); + putstr(" "); + puthex_nl(buffer1[i]); + } + for(i=0;i<60;i++) { + puthex(i); + putstr(" "); + puthex_nl(buffer2[i]); + } + //while(timer_regs -> time < 0x6000) + // {} + + putstr("Done\n"); + hal_finish(); + + return 1; +} diff --git a/usrp2/firmware/apps/ibs_tx_test.c b/usrp2/firmware/apps/ibs_tx_test.c new file mode 100644 index 00000000..ff9446d9 --- /dev/null +++ b/usrp2/firmware/apps/ibs_tx_test.c @@ -0,0 +1,160 @@ +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "nonstdio.h" + +// Globals +#define EMPTY 0 +#define FILLING 1 +#define FULL 2 +#define EMPTYING 3 + +#define PORT 2 // ethernet = 2, serdes = 0 +int dsp_rx_buf, dsp_tx_buf, serdes_rx_buf, serdes_tx_buf; +int dsp_rx_idle, dsp_tx_idle, serdes_rx_idle, serdes_tx_idle; + +int buffer_state[4]; + +static void +wait_until_status_nonzero(void) +{ + while (buffer_pool_status->status == 0) + ; +} + +int +main(void) +{ + int i; + + u2_init(); + + dsp_tx_regs->freq = 0; + dsp_tx_regs->scale_iq = (1 << 16) | 1; + dsp_tx_regs->interp_rate = 8; + + // Write data to be sent into the first buffer + volatile unsigned int *buffer0 = buffer_ram(0); + volatile unsigned int *buffer1 = buffer_ram(1); + + + putstr("Starting to fill in RAM\n"); + for(i=0;i<512;i++) + buffer0[i] = i; + putstr("Filled in RAM\n"); + + buffer0[0] = 7; // start and end of buffer, send immediately + buffer0[1] = 0x0000; // start time + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + while(timer_regs -> time < 0x6000) + {} + + buffer0[0] = 3; // start and end of buffer + buffer0[1] = 0x8000; // start time + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + while(timer_regs -> time < 0x8400) + {} + + buffer0[0] = 3; // start and end of buffer + buffer0[1] = 0x8800; // start time + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + while(timer_regs -> time < 0x9000) + {} + + buffer0[0] = 0x2; // not last + buffer0[1] = 0x9100; // start time + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + buffer0[0] = 0x1; // last + buffer0[1] = 0x0000; // start time + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + + + buffer0[0] = 0x3; // first and last + buffer0[1] = 0x8000; // Time in the past + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + + /* + buffer0[0] = 0x2; // not last + buffer0[1] = 0x9600; // start time + bp_clear_buf(0); + bp_send_from_buf(0, 1, 1, 0, 9); + while (buffer_pool_status->status == 0) + ; + */ + + while(timer_regs -> time < 0xa000) + {} + + putstr("Done\n"); + + while(1) + {} + hal_finish(); + + // Send a bunch, let them pile up in FIFO + bp_send_from_buf(0, 2, 1, 21, 80); wait_until_status_nonzero(); + bp_clear_buf(0); + putstr("First add'l TX done\n"); + bp_send_from_buf(0, 2, 1, 81, 288); wait_until_status_nonzero(); + bp_clear_buf(0); + bp_send_from_buf(0, 2, 1, 289, 292); wait_until_status_nonzero(); + bp_clear_buf(0); + bp_send_from_buf(0, 2, 1, 293, 326); wait_until_status_nonzero(); + bp_clear_buf(0); + bp_send_from_buf(0, 2, 1, 327, 399); wait_until_status_nonzero(); + bp_clear_buf(0); + bp_send_from_buf(0, 2, 1, 400, 511); wait_until_status_nonzero(); + bp_clear_buf(0); + putstr("All add'l TX done\n"); + + bp_receive_to_buf(1, 2, 1, 21, 80); wait_until_status_nonzero(); + bp_clear_buf(1); + putstr("First add'l RX done\n"); + bp_receive_to_buf(1, 2, 1, 81, 288); wait_until_status_nonzero(); + bp_clear_buf(1); + bp_receive_to_buf(1, 2, 1, 289, 292); wait_until_status_nonzero(); + bp_clear_buf(1); + bp_receive_to_buf(1, 2, 1, 293, 326); wait_until_status_nonzero(); + bp_clear_buf(1); + bp_receive_to_buf(1, 2, 1, 327, 399); wait_until_status_nonzero(); + bp_clear_buf(1); + bp_receive_to_buf(1, 2, 1, 400, 511); wait_until_status_nonzero(); + bp_clear_buf(1); + putstr("All add'l RX done\n"); + + for(i=0;i<512;i++) + if(buffer0[i] != buffer1[i]) { + putstr("ERROR at location: "); + puthex_nl(i); + putstr("Value sent: "); + puthex_nl(buffer0[i]); + putstr("Value rcvd: "); + puthex_nl(buffer1[i]); + //break; + } + + putstr("Done Testing\n"); + + hal_finish(); + return 1; +} diff --git a/usrp2/firmware/apps/mimo_app_common_v2.c b/usrp2/firmware/apps/mimo_app_common_v2.c new file mode 100644 index 00000000..e5ab55fa --- /dev/null +++ b/usrp2/firmware/apps/mimo_app_common_v2.c @@ -0,0 +1,581 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mimo_app_common_v2.h" +#include "buffer_pool.h" +#include "memcpy_wa.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "print_rmon_regs.h" +#include "db.h" +#include "db_base.h" +#include "clocks.h" +#include "u2_init.h" +#include + +volatile bool link_is_up = false; // eth handler sets this +int cpu_tx_buf_dest_port = PORT_ETH; + +// If this is non-zero, this dbsm could be writing to the ethernet +dbsm_t *ac_could_be_sending_to_eth; + +static unsigned char exp_seqno __attribute__((unused)) = 0; + +void abort(void); + +static bool +burn_mac_addr(const op_burn_mac_addr_t *p) +{ + return ethernet_set_mac_addr(&p->addr); +} + +static bool +sync_to_pps(const op_generic_t *p) +{ + timesync_regs->sync_on_next_pps = 1; + putstr("SYNC to PPS\n"); + return true; +} + +static bool +config_mimo_cmd(const op_config_mimo_t *p) +{ + clocks_mimo_config(p->flags); + return true; +} + +void +set_reply_hdr(u2_eth_packet_t *reply_pkt, u2_eth_packet_t const *cmd_pkt) +{ + reply_pkt->ehdr.dst = cmd_pkt->ehdr.src; + reply_pkt->ehdr.ethertype = U2_ETHERTYPE; + reply_pkt->thdr.flags = 0; + reply_pkt->thdr.fifo_status = 0; // written by protocol engine + reply_pkt->thdr.seqno = 0; // written by protocol engine + reply_pkt->thdr.ack = 0; // written by protocol engine + u2p_set_word0(&reply_pkt->fixed, 0, CONTROL_CHAN); + reply_pkt->fixed.timestamp = timer_regs->time; +} + +static void +send_reply(unsigned char *reply, size_t reply_len) +{ + if (reply_len < 64) + reply_len = 64; + + // wait for buffer to become idle + hal_set_leds(0x4, 0x4); + while((buffer_pool_status->status & BPS_IDLE(CPU_TX_BUF)) == 0) + ; + hal_set_leds(0x0, 0x4); + + // copy reply into CPU_TX_BUF + memcpy_wa(buffer_ram(CPU_TX_BUF), reply, reply_len); + + // wait until nobody else is sending to the ethernet + if (ac_could_be_sending_to_eth){ + hal_set_leds(0x8, 0x8); + dbsm_wait_for_opening(ac_could_be_sending_to_eth); + hal_set_leds(0x0, 0x8); + } + + if (0){ + printf("sending_reply to port %d, len = %d\n", cpu_tx_buf_dest_port, (int)reply_len); + print_buffer(buffer_ram(CPU_TX_BUF), reply_len/4); + } + + // fire it off + bp_send_from_buf(CPU_TX_BUF, cpu_tx_buf_dest_port, 1, 0, reply_len/4); + + // wait for it to complete (not long, it's a small pkt) + while((buffer_pool_status->status & (BPS_DONE(CPU_TX_BUF) | BPS_ERROR(CPU_TX_BUF))) == 0) + ; + + bp_clear_buf(CPU_TX_BUF); +} + + +static size_t +op_id_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_id_reply_t *r = (op_id_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) // no room + return 0; + + // Build reply subpacket + + r->opcode = OP_ID_REPLY; + r->len = sizeof(op_id_reply_t); + r->rid = p->rid; + r->addr = *ethernet_mac_addr(); + r->hw_rev = (u2_hw_rev_major << 8) | u2_hw_rev_minor; + // r->fpga_md5sum = ; // FIXME + // r->sw_md5sum = ; // FIXME + + return r->len; +} + + +static size_t +config_tx_v2_cmd(const op_config_tx_v2_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_config_tx_reply_v2_t *r = (op_config_tx_reply_v2_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + struct tune_result tune_result; + memset(&tune_result, 0, sizeof(tune_result)); + + bool ok = true; + +#if 0 + if (p->valid & CFGV_GAIN){ + ok &= db_set_gain(tx_dboard, p->gain); + } + + if (p->valid & CFGV_FREQ){ + bool was_streaming = is_streaming(); + if (was_streaming) + stop_rx_cmd(); + + u2_fxpt_freq_t f = u2_fxpt_freq_from_hilo(p->freq_hi, p->freq_lo); + bool tune_ok = db_tune(tx_dboard, f, &tune_result); + ok &= tune_ok; + print_tune_result("Tx", tune_ok, f, &tune_result); + + if (was_streaming) + restart_streaming(); + } + + if (p->valid & CFGV_INTERP_DECIM){ + int interp = p->interp; + int hb1 = 0; + int hb2 = 0; + + if (!(interp & 1)){ + hb2 = 1; + interp = interp >> 1; + } + + if (!(interp & 1)){ + hb1 = 1; + interp = interp >> 1; + } + + if (interp < MIN_CIC_INTERP || interp > MAX_CIC_INTERP) + ok = false; + else { + dsp_tx_regs->interp_rate = (hb1<<9) | (hb2<<8) | interp; + // printf("Interp: %d, register %d\n", p->interp, (hb1<<9) | (hb2<<8) | interp); + } + } + + if (p->valid & CFGV_SCALE_IQ){ + dsp_tx_regs->scale_iq = p->scale_iq; + } +#endif + + // Build reply subpacket + + r->opcode = OP_CONFIG_TX_REPLY_V2; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = ok; + r->inverted = tune_result.inverted; + r->baseband_freq_hi = u2_fxpt_freq_hi(tune_result.baseband_freq); + r->baseband_freq_lo = u2_fxpt_freq_lo(tune_result.baseband_freq); + r->duc_freq_hi = u2_fxpt_freq_hi(tune_result.dxc_freq); + r->duc_freq_lo = u2_fxpt_freq_lo(tune_result.dxc_freq); + r->residual_freq_hi = u2_fxpt_freq_hi(tune_result.residual_freq); + r->residual_freq_lo = u2_fxpt_freq_lo(tune_result.residual_freq); + return r->len; +} + +static size_t +config_rx_v2_cmd(const op_config_rx_v2_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_config_rx_reply_v2_t *r = (op_config_rx_reply_v2_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + struct tune_result tune_result; + memset(&tune_result, 0, sizeof(tune_result)); + + bool ok = true; + + if (p->valid & CFGV_GAIN){ + ok &= db_set_gain(rx_dboard, p->gain); + } + + if (p->valid & CFGV_FREQ){ + bool was_streaming = is_streaming(); + if (was_streaming) + stop_rx_cmd(); + + u2_fxpt_freq_t f = u2_fxpt_freq_from_hilo(p->freq_hi, p->freq_lo); + bool tune_ok = db_tune(rx_dboard, f, &tune_result); + ok &= tune_ok; + print_tune_result("Rx", tune_ok, f, &tune_result); + + if (was_streaming) + restart_streaming(); + } + + if (p->valid & CFGV_INTERP_DECIM){ + int decim = p->decim; + int hb1 = 0; + int hb2 = 0; + + if(!(decim & 1)) { + hb2 = 1; + decim = decim >> 1; + } + + if(!(decim & 1)) { + hb1 = 1; + decim = decim >> 1; + } + + if (decim < MIN_CIC_DECIM || decim > MAX_CIC_DECIM) + ok = false; + else { + dsp_rx_regs->decim_rate = (hb1<<9) | (hb2<<8) | decim; + // printf("Decim: %d, register %d\n", p->decim, (hb1<<9) | (hb2<<8) | decim); + } + } + + if (p->valid & CFGV_SCALE_IQ){ + dsp_rx_regs->scale_iq = p->scale_iq; + } + + // Build reply subpacket + + r->opcode = OP_CONFIG_RX_REPLY_V2; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = ok; + r->inverted = tune_result.inverted; + r->baseband_freq_hi = u2_fxpt_freq_hi(tune_result.baseband_freq); + r->baseband_freq_lo = u2_fxpt_freq_lo(tune_result.baseband_freq); + r->ddc_freq_hi = u2_fxpt_freq_hi(tune_result.dxc_freq); + r->ddc_freq_lo = u2_fxpt_freq_lo(tune_result.dxc_freq); + r->residual_freq_hi = u2_fxpt_freq_hi(tune_result.residual_freq); + r->residual_freq_lo = u2_fxpt_freq_lo(tune_result.residual_freq); + + return r->len; +} + +static size_t +read_time_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_read_time_reply_t *r = (op_read_time_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_READ_TIME_REPLY; + r->len = sizeof(*r); + r->rid = p->rid; + r->time = timer_regs->time; + + return r->len; +} + +static void +fill_db_info(u2_db_info_t *p, const struct db_base *db) +{ + p->dbid = db->dbid; + p->freq_min_hi = u2_fxpt_freq_hi(db->freq_min); + p->freq_min_lo = u2_fxpt_freq_lo(db->freq_min); + p->freq_max_hi = u2_fxpt_freq_hi(db->freq_max); + p->freq_max_lo = u2_fxpt_freq_lo(db->freq_max); + p->gain_min = db->gain_min; + p->gain_max = db->gain_max; + p->gain_step_size = db->gain_step_size; +} + +static size_t +dboard_info_cmd(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_dboard_info_reply_t *r = (op_dboard_info_reply_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_DBOARD_INFO_REPLY; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = true; + + fill_db_info(&r->tx_db_info, tx_dboard); + fill_db_info(&r->rx_db_info, rx_dboard); + + return r->len; +} + +static size_t +peek_cmd(const op_peek_t *p, + void *reply_payload, size_t reply_payload_space) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + + putstr("peek: addr="); puthex32(p->addr); + printf(" bytes=%u\n", p->bytes); + + if ((reply_payload_space < (sizeof(*r) + p->bytes)) || + p->bytes > MAX_SUBPKT_LEN - sizeof(op_generic_t)) { + putstr("peek: insufficient reply packet space\n"); + return 0; // FIXME do partial read? + } + + r->opcode = OP_PEEK_REPLY; + r->len = sizeof(*r)+p->bytes; + r->rid = p->rid; + r->ok = true; + + memcpy_wa(reply_payload+sizeof(*r), (void *)p->addr, p->bytes); + + return r->len; +} + +static bool +poke_cmd(const op_poke_t *p) +{ + int bytes = p->len - sizeof(*p); + putstr("poke: addr="); puthex32(p->addr); + printf(" bytes=%u\n", bytes); + + uint8_t *src = (uint8_t *)p + sizeof(*p); + memcpy_wa((void *)p->addr, src, bytes); + + return true; +} + +static size_t +generic_reply(const op_generic_t *p, + void *reply_payload, size_t reply_payload_space, + bool ok) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = p->opcode | OP_REPLY_BIT; + r->len = sizeof(*r); + r->rid = p->rid; + r->ok = ok; + + return r->len; +} + +static size_t +add_eop(void *reply_payload, size_t reply_payload_space) +{ + op_generic_t *r = (op_generic_t *) reply_payload; + if (reply_payload_space < sizeof(*r)) + return 0; // no room + + r->opcode = OP_EOP; + r->len = sizeof(*r); + r->rid = 0; + r->ok = 0; + + return r->len; +} + +void +handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len) +{ + unsigned char reply[sizeof(u2_eth_packet_t) + 4 * sizeof(u2_subpkt_t)] _AL4; + unsigned char *reply_payload = &reply[sizeof(u2_eth_packet_t)]; + int reply_payload_space = sizeof(reply) - sizeof(u2_eth_packet_t); + + // initialize reply + memset(reply, 0, sizeof(reply)); + set_reply_hdr((u2_eth_packet_t *) reply, pkt); + + // point to beginning of payload (subpackets) + unsigned char *payload = ((unsigned char *) pkt) + sizeof(u2_eth_packet_t); + int payload_len = len - sizeof(u2_eth_packet_t); + + size_t subpktlen = 0; + + while (payload_len >= sizeof(op_generic_t)){ + const op_generic_t *gp = (const op_generic_t *) payload; + subpktlen = 0; + + // printf("\nopcode = %d\n", gp->opcode); + + switch(gp->opcode){ + case OP_EOP: // end of subpackets + goto end_of_subpackets; + + case OP_ID: + subpktlen = op_id_cmd(gp, reply_payload, reply_payload_space); + break; + + case OP_CONFIG_TX_V2: + subpktlen = config_tx_v2_cmd((op_config_tx_v2_t *) payload, + reply_payload, reply_payload_space); + break; + + case OP_CONFIG_RX_V2: + subpktlen = config_rx_v2_cmd((op_config_rx_v2_t *) payload, + reply_payload, reply_payload_space); + break; + + case OP_START_RX_STREAMING: + start_rx_streaming_cmd(&pkt->ehdr.src, (op_start_rx_streaming_t *) payload); + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, true); + break; + + case OP_STOP_RX: + stop_rx_cmd(); + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, true); + break; + + case OP_BURN_MAC_ADDR: + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, + burn_mac_addr((op_burn_mac_addr_t *) payload)); + break; + + case OP_CONFIG_MIMO: + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, + config_mimo_cmd((op_config_mimo_t *) payload)); + break; + + case OP_READ_TIME: + subpktlen = read_time_cmd(gp, reply_payload, reply_payload_space); + break; + + case OP_DBOARD_INFO: + subpktlen = dboard_info_cmd(gp, reply_payload, reply_payload_space); + break; + + case OP_SYNC_TO_PPS: + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, + sync_to_pps((op_generic_t *) payload)); + break; + + case OP_PEEK: + subpktlen = peek_cmd((op_peek_t *)payload, reply_payload, reply_payload_space); + break; + + case OP_POKE: + subpktlen = generic_reply(gp, reply_payload, reply_payload_space, + poke_cmd((op_poke_t *)payload)); + break; + + default: + printf("app_common_v2: unhandled opcode = %d\n", gp->opcode); + break; + } + + int t = (gp->len + 3) & ~3; // bump to a multiple of 4 + payload += t; + payload_len -= t; + + subpktlen = (subpktlen + 3) & ~3; // bump to a multiple of 4 + reply_payload += subpktlen; + reply_payload_space -= subpktlen; + } + + end_of_subpackets: + + // add the EOP marker + subpktlen = add_eop(reply_payload, reply_payload_space); + subpktlen = (subpktlen + 3) & ~3; // bump to a multiple of 4 + reply_payload += subpktlen; + reply_payload_space -= subpktlen; + + send_reply(reply, reply_payload - reply); +} + + +/* + * Called when an ethernet packet is received. + * Return true if we handled it here, otherwise + * it'll be passed on to the DSP Tx pipe + */ +int +eth_pkt_inspector(bsm12_t *sm, int bufno) +{ + u2_eth_packet_t *pkt = (u2_eth_packet_t *) buffer_ram(bufno); + size_t byte_len = (buffer_pool_status->last_line[bufno] - 3) * 4; + + //static size_t last_len = 0; + + // hal_toggle_leds(0x1); + + // inspect rcvd frame and figure out what do do. + + if (pkt->ehdr.ethertype != U2_ETHERTYPE) + return true; // ignore, probably bogus PAUSE frame from MAC + + int chan = u2p_chan(&pkt->fixed); + + switch (chan){ + case CONTROL_CHAN: + handle_control_chan_frame(pkt, byte_len); + return -1; + break; + + case 0: + return 0; // pass it off to DSP TX + + case 1: + return 1; // pass it off to SERDES TX + + default: + abort(); + break; + } +} + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + link_is_up = speed != 0; + hal_set_leds(link_is_up ? LED_RJ45 : 0x0, LED_RJ45); + printf("\neth link changed: speed = %d\n", speed); +} + + +void +print_tune_result(char *msg, bool tune_ok, + u2_fxpt_freq_t target_freq, struct tune_result *r) +{ +#if 0 + printf("db_tune %s %s\n", msg, tune_ok ? "true" : "false"); + putstr(" target_freq "); print_fxpt_freq(target_freq); newline(); + putstr(" baseband_freq "); print_fxpt_freq(r->baseband_freq); newline(); + putstr(" dxc_freq "); print_fxpt_freq(r->dxc_freq); newline(); + putstr(" residual_freq "); print_fxpt_freq(r->residual_freq); newline(); + printf(" inverted %s\n", r->inverted ? "true" : "false"); +#endif +} diff --git a/usrp2/firmware/apps/mimo_app_common_v2.h b/usrp2/firmware/apps/mimo_app_common_v2.h new file mode 100644 index 00000000..7bb5b728 --- /dev/null +++ b/usrp2/firmware/apps/mimo_app_common_v2.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_APP_COMMON_H +#define INCLUDED_APP_COMMON_H + +#include "bool.h" +#include "usrp2_eth_packet.h" +#include "bsm12.h" +#include "memory_map.h" +#include "hal_io.h" +#include +#include + +#define CPU_TX_BUF 7 // cpu -> eth + +#define _AL4 __attribute__((aligned (4))) + +extern volatile bool link_is_up; // eth handler sets this + +// If there's a dbsm that sends to the ethernet, put it's address here +extern dbsm_t *ac_could_be_sending_to_eth; + +extern int cpu_tx_buf_dest_port; + +void set_reply_hdr(u2_eth_packet_t *reply_pkt, u2_eth_packet_t const *cmd_pkt); + +/* + * Called when an ethernet packet is received. + */ +int eth_pkt_inspector(bsm12_t *sm, int bufno); + + +void link_changed_callback(int speed); + +void +print_tune_result(char *msg, bool tune_ok, + u2_fxpt_freq_t target_freq, struct tune_result *r); + + +void start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p); +void stop_rx_cmd(void); +void restart_streaming(void); +bool is_streaming(void); + +void handle_control_chan_frame(u2_eth_packet_t *pkt, size_t len); + +#endif /* INCLUDED_APP_COMMON_H */ diff --git a/usrp2/firmware/apps/mimo_tx.c b/usrp2/firmware/apps/mimo_tx.c new file mode 100644 index 00000000..730433bf --- /dev/null +++ b/usrp2/firmware/apps/mimo_tx.c @@ -0,0 +1,362 @@ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +/* + * This is a down and dirty test program that confirms that the we can + * coherently transmit different signals to two USRP2s connected via a + * mimo cable. This code runs in the USRP2 connected to the ethernet. + * The other USRP runs mimo_tx_slave. The host runs test_mimo_tx. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "bsm12.h" +#include "mimo_app_common_v2.h" +#include "memcpy_wa.h" +#include +#include +#include +#include "clocks.h" + +#define FW_SETS_SEQNO 1 // define to 0 or 1 (FIXME must be 1 for now) + +#if (FW_SETS_SEQNO) +static int fw_seqno; // used when f/w is filling in sequence numbers +#endif + + +/* + * Experimental code to transmit packets to DSP Tx and SERDES + * + * Hard wire the Tx config so we don't have to deal with control stuff yet. + */ + +#define BUF_BSM12_0 4 +#define BUF_BSM12_1 5 +#define BUF_BSM12_2 6 + +//#define CPU_TX_BUF 7 // cpu -> eth + +// 4 lines of ethernet hdr + 1 line transport hdr + 2 lines (word0 + timestamp) +// DSP Tx reads word0 (flags) + timestamp followed by samples + +#define DSP_TX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4) + +// Receive from ethernet +buf_cmd_args_t bsm12_recv_args = { + PORT_ETH, + 0, + BP_LAST_LINE +}; + +// send to DSP Tx +buf_cmd_args_t bsm12_send0_args = { + PORT_DSP, + DSP_TX_FIRST_LINE, // starts just past transport header + 0 // filled in from last_line register +}; + +// send to SERDES +buf_cmd_args_t bsm12_send1_args = { + PORT_SERDES, + 0, // starts just past transport header + 0 // filled in from last_line register +}; + +bsm12_t bsm12_sm; // the state machine + +#if 0 +/* + * ================================================================ + * configure DSP RX double buffering state machine (dsp -> eth) + * ================================================================ + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 1 line (word0) +// DSP Rx writes timestamp followed by nlines_per_frame of samples +#define DSP_RX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4 + 1) + +// receive from DSP +buf_cmd_args_t dsp_rx_recv_args = { + PORT_DSP, + DSP_RX_FIRST_LINE, + BP_LAST_LINE +}; + +// send to ETH +buf_cmd_args_t dsp_rx_send_args = { + PORT_ETH, + 0, // starts with ethernet header in line 0 + 0, // filled in from list_line register +}; + +dbsm_t dsp_rx_sm; // the state machine +#endif + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +// variables for streaming mode + +static bool streaming_p = false; +static unsigned int streaming_items_per_frame = 0; +static int streaming_frame_count = 0; +#define FRAMES_PER_CMD 1000 + +bool is_streaming(void){ return streaming_p; } + + +// ---------------------------------------------------------------- + + +void +restart_streaming(void) +{ +#if 0 + // setup RX DSP regs + dsp_rx_regs->clear_state = 1; // reset + + streaming_p = true; + streaming_frame_count = FRAMES_PER_CMD; + + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); // set "chain" bit + + // kick off the state machine + dbsm_start(&dsp_rx_sm); + + dsp_rx_regs->rx_time = 0; // enqueue first of two commands + + // make sure this one and the rest have the "now" and "chain" bits set. + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); + + dsp_rx_regs->rx_time = 0; // enqueue second command +#endif +} + +void +start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p) +{ +#if 0 + host_mac_addr = *host; // remember who we're sending to + + /* + * Construct ethernet header and word0 and preload into two buffers + */ + u2_eth_packet_t pkt; + memset(&pkt, 0, sizeof(pkt)); + pkt.ehdr.dst = *host; + pkt.ehdr.ethertype = U2_ETHERTYPE; + u2p_set_word0(&pkt.fixed, 0, 0); + // DSP RX will fill in timestamp + + memcpy_wa(buffer_ram(DSP_RX_BUF_0), &pkt, sizeof(pkt)); + memcpy_wa(buffer_ram(DSP_RX_BUF_1), &pkt, sizeof(pkt)); + + + if (FW_SETS_SEQNO) + fw_seqno = 0; + + streaming_items_per_frame = p->items_per_frame; + restart_streaming(); +#endif +} + + +void +stop_rx_cmd(void) +{ +#if 0 + streaming_p = false; + dsp_rx_regs->clear_state = 1; // flush cmd queue + bp_clear_buf(DSP_RX_BUF_0); + bp_clear_buf(DSP_RX_BUF_1); +#endif +} + + +static void +setup_tx() +{ + dsp_tx_regs->clear_state = 1; + + int tx_scale = 2500; + int interp = 8; // * 4 + + // setup some defaults + + dsp_tx_regs->freq = 429496730; // 10MHz + dsp_tx_regs->scale_iq = (tx_scale << 16) | tx_scale; + dsp_tx_regs->interp_rate = (1 << 9) | (1 << 8) | interp; +} + + +#if 0 +#if (FW_SETS_SEQNO) +/* + * Debugging ONLY. This will be handled by the tx_protocol_engine. + * + * This is called when the DSP Rx chain has filled in a packet. + * We set and increment the seqno, then return false, indicating + * that we didn't handle the packet. A bit of a kludge + * but it should work. + */ +int +fw_sets_seqno_inspector(bsm12_t *sm, int buf_this) +{ + uint32_t *p = buffer_ram(buf_this); + uint32_t seqno = fw_seqno++; + + // KLUDGE all kinds of nasty magic numbers and embedded knowledge + uint32_t t = p[4]; + t = (t & 0xffff00ff) | ((seqno & 0xff) << 8); + p[4] = t; + + // queue up another rx command when required + if (streaming_p && --streaming_frame_count == 0){ + streaming_frame_count = FRAMES_PER_CMD; + dsp_rx_regs->rx_time = 0; + } + + return false; // we didn't handle the packet +} +#endif +#endif + + +inline static void +buffer_irq_handler(unsigned irq) +{ + uint32_t status = buffer_pool_status->status; + + bsm12_process_status(&bsm12_sm, status); +} + +int +main(void) +{ + u2_init(); + + putstr("\nMIMO Tx\n"); + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + ethernet_register_link_changed_callback(link_changed_callback); + ethernet_init(); + + clocks_mimo_config(MC_WE_DONT_LOCK | MC_PROVIDE_CLK_TO_MIMO); + +#if 0 + // make bit 15 of Tx gpio's be a s/w output + hal_gpio_set_sel(GPIO_TX_BANK, 15, 's'); + hal_gpio_set_ddr(GPIO_TX_BANK, 0x8000, 0x8000); +#endif + + output_regs->debug_mux_ctrl = 1; +#if 0 + hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + hal_gpio_set_ddr(GPIO_TX_BANK, 0xffff, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0xffff, 0xffff); +#endif + + + // initialize double buffering state machine for ethernet -> DSP Tx + + bsm12_init(&bsm12_sm, BUF_BSM12_0, + &bsm12_recv_args, &bsm12_send0_args, &bsm12_send1_args, + eth_pkt_inspector); + + +#if 0 + // initialize double buffering state machine for DSP RX -> Ethernet + + if (FW_SETS_SEQNO){ + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + fw_sets_seqno_inspector); + } + else { + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + } + + // tell app_common that this dbsm could be sending to the ethernet + ac_could_be_sending_to_eth = &dsp_rx_sm; +#endif + + + // program tx registers + setup_tx(); + + // kick off the state machine + bsm12_start(&bsm12_sm); + + //int which = 0; + + while(1){ + // hal_gpio_write(GPIO_TX_BANK, which, 0x8000); + // which ^= 0x8000; + + buffer_irq_handler(0); + + int pending = pic_regs->pending; // poll for under or overrun + + if (pending & PIC_UNDERRUN_INT){ + // dbsm_handle_tx_underrun(&dsp_tx_sm); + pic_regs->pending = PIC_UNDERRUN_INT; // clear interrupt + putchar('U'); + } + + if (pending & PIC_OVERRUN_INT){ + // dbsm_handle_rx_overrun(&dsp_rx_sm); + pic_regs->pending = PIC_OVERRUN_INT; // clear pending interrupt + + // FIXME Figure out how to handle this robustly. + // Any buffers that are emptying should be allowed to drain... + + if (streaming_p){ + // restart_streaming(); + // FIXME report error + } + else { + // FIXME report error + } + putchar('O'); + } + } +} diff --git a/usrp2/firmware/apps/mimo_tx_slave.c b/usrp2/firmware/apps/mimo_tx_slave.c new file mode 100644 index 00000000..df7ddf9c --- /dev/null +++ b/usrp2/firmware/apps/mimo_tx_slave.c @@ -0,0 +1,375 @@ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +/* + * This is a down and dirty test program that confirms that the we can + * coherently transmit different signals to two USRP2s connected via a + * mimo cable. This code runs in the USRP2 NOT connected to the + * ethernet. The USRP connected to the ethernet runs mimo_tx. The + * host runs test_mimo_tx. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include "clocks.h" +#include +#include +#include + + +#define FW_SETS_SEQNO 1 // define to 0 or 1 (FIXME must be 1 for now) + +#if (FW_SETS_SEQNO) +static int fw_seqno; // used when f/w is filling in sequence numbers +#endif + + +/* + * Full duplex Tx and Rx between serdes and DSP pipelines + * + * Buffer 1 is used by the cpu to send frames to the host. + * Buffers 2 and 3 are used to double-buffer the DSP Rx to serdes flow + * Buffers 4 and 5 are used to double-buffer the serdes to DSP Tx flow + */ +//#define CPU_RX_BUF 0 // eth -> cpu + +#define DSP_RX_BUF_0 2 // dsp rx -> serdes (double buffer) +#define DSP_RX_BUF_1 3 // dsp rx -> serdes +#define DSP_TX_BUF_0 4 // serdes -> dsp tx (double buffer) +#define DSP_TX_BUF_1 5 // serdes -> dsp tx + +/* + * ================================================================== + * configure DSP TX double buffering state machine (serdes -> dsp) + * ================================================================== + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 2 lines (word0 + timestamp) +// DSP Tx reads word0 (flags) + timestamp followed by samples + +#define DSP_TX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4) + +// Receive from serdes +buf_cmd_args_t dsp_tx_recv_args = { + PORT_SERDES, + 0, + BP_LAST_LINE +}; + +// send to DSP Tx +buf_cmd_args_t dsp_tx_send_args = { + PORT_DSP, + DSP_TX_FIRST_LINE, // starts just past transport header + 0 // filled in from last_line register +}; + +dbsm_t dsp_tx_sm; // the state machine + +/* + * ================================================================= + * configure DSP RX double buffering state machine (dsp -> serdes) + * ================================================================= + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 1 line (word0) +// DSP Rx writes timestamp followed by nlines_per_frame of samples +#define DSP_RX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4 + 1) + +// receive from DSP +buf_cmd_args_t dsp_rx_recv_args = { + PORT_DSP, + DSP_RX_FIRST_LINE, + BP_LAST_LINE +}; + +// send to serdes +buf_cmd_args_t dsp_rx_send_args = { + PORT_SERDES, + 0, // starts with ethernet header in line 0 + 0, // filled in from list_line register +}; + +dbsm_t dsp_rx_sm; // the state machine + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +// variables for streaming mode + +static bool streaming_p = false; +static unsigned int streaming_items_per_frame = 0; +static int streaming_frame_count = 0; +#define FRAMES_PER_CMD 1000 + +bool is_streaming(void){ return streaming_p; } + +// ---------------------------------------------------------------- + + +void +restart_streaming(void) +{ + // setup RX DSP regs + dsp_rx_regs->clear_state = 1; // reset + + streaming_p = true; + streaming_frame_count = FRAMES_PER_CMD; + + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); // set "chain" bit + + // kick off the state machine + dbsm_start(&dsp_rx_sm); + + dsp_rx_regs->rx_time = 0; // enqueue first of two commands + + // make sure this one and the rest have the "now" and "chain" bits set. + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); + + dsp_rx_regs->rx_time = 0; // enqueue second command +} + +void +start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p) +{ + host_mac_addr = *host; // remember who we're sending to + + /* + * Construct ethernet header and word0 and preload into two buffers + */ + u2_eth_packet_t pkt; + memset(&pkt, 0, sizeof(pkt)); + pkt.ehdr.dst = *host; + pkt.ehdr.ethertype = U2_ETHERTYPE; + u2p_set_word0(&pkt.fixed, 0, 0); + // DSP RX will fill in timestamp + + memcpy_wa(buffer_ram(DSP_RX_BUF_0), &pkt, sizeof(pkt)); + memcpy_wa(buffer_ram(DSP_RX_BUF_1), &pkt, sizeof(pkt)); + + + if (FW_SETS_SEQNO) + fw_seqno = 0; + + streaming_items_per_frame = p->items_per_frame; + restart_streaming(); +} + + +void +stop_rx_cmd(void) +{ + streaming_p = false; + dsp_rx_regs->clear_state = 1; // flush cmd queue + bp_clear_buf(DSP_RX_BUF_0); + bp_clear_buf(DSP_RX_BUF_1); +} + + +static void +setup_tx() +{ + dsp_tx_regs->clear_state = 1; + bp_clear_buf(DSP_TX_BUF_0); + bp_clear_buf(DSP_TX_BUF_1); + + int tx_scale = 2500; + int interp = 8; // * 4 + + // setup some defaults + + dsp_tx_regs->freq = 429496730; // 10MHz + dsp_tx_regs->scale_iq = (tx_scale << 16) | tx_scale; + dsp_tx_regs->interp_rate = (1 << 9) | (1 << 8) | interp; +} + + +#if (FW_SETS_SEQNO) +/* + * Debugging ONLY. This will be handled by the tx_protocol_engine. + * + * This is called when the DSP Rx chain has filled in a packet. + * We set and increment the seqno, then return false, indicating + * that we didn't handle the packet. A bit of a kludge + * but it should work. + */ +bool +fw_sets_seqno_inspector(dbsm_t *sm, int buf_this) // returns false +{ + uint32_t *p = buffer_ram(buf_this); + uint32_t seqno = fw_seqno++; + + // KLUDGE all kinds of nasty magic numbers and embedded knowledge + uint32_t t = p[4]; + t = (t & 0xffff00ff) | ((seqno & 0xff) << 8); + p[4] = t; + + // queue up another rx command when required + if (streaming_p && --streaming_frame_count == 0){ + streaming_frame_count = FRAMES_PER_CMD; + dsp_rx_regs->rx_time = 0; + } + + return false; // we didn't handle the packet +} +#endif + + +inline static void +buffer_irq_handler(unsigned irq) +{ + // hal_toggle_leds(LED_A); + + uint32_t status = buffer_pool_status->status; + + if (0 && (status & ~BPS_IDLE_ALL)){ + putstr("status = "); + puthex32_nl(status); + } + + dbsm_process_status(&dsp_tx_sm, status); + dbsm_process_status(&dsp_rx_sm, status); +} + +int +main(void) +{ + u2_init(); + + output_regs->led_src = 0x3; // h/w controls bottom two bits + clocks_enable_test_clk(true, 1); + + putstr("\nMIMO Tx Slave\n"); + + cpu_tx_buf_dest_port = PORT_SERDES; + + // ethernet_register_link_changed_callback(link_changed_callback); + // ethernet_init(); + + clocks_mimo_config(MC_WE_LOCK_TO_MIMO); + + // puts("post clocks_mimo_config"); + +#if 0 + // make bit 15 of Tx gpio's be a s/w output + hal_gpio_set_sel(GPIO_TX_BANK, 15, 's'); + hal_gpio_set_ddr(GPIO_TX_BANK, 0x8000, 0x8000); +#endif + +#if 0 + output_regs->debug_mux_ctrl = 1; + hal_gpio_set_sels(GPIO_TX_BANK, "0000000000000000"); + hal_gpio_set_sels(GPIO_RX_BANK, "0000000000000000"); + hal_gpio_set_ddr(GPIO_TX_BANK, 0xffff, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0xffff, 0xffff); +#endif + + + // initialize double buffering state machine for ethernet -> DSP Tx + + dbsm_init(&dsp_tx_sm, DSP_TX_BUF_0, + &dsp_tx_recv_args, &dsp_tx_send_args, + eth_pkt_inspector); + + + //output_regs->flush_icache = 1; + + // initialize double buffering state machine for DSP RX -> Ethernet + + if (FW_SETS_SEQNO){ + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + fw_sets_seqno_inspector); + } + else { + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + } + + // puts("post dbsm_init's"); + + // tell app_common that this dbsm could be sending to the ethernet + ac_could_be_sending_to_eth = &dsp_rx_sm; + + + // program tx registers + setup_tx(); + + // puts("post setup_tx"); + + // kick off the state machine + dbsm_start(&dsp_tx_sm); + + // puts("post dbsm_start"); + + //int which = 0; + + while(1){ + // hal_gpio_write(GPIO_TX_BANK, which, 0x8000); + // which ^= 0x8000; + + buffer_irq_handler(0); + + int pending = pic_regs->pending; // poll for under or overrun + + if (pending & PIC_UNDERRUN_INT){ + dbsm_handle_tx_underrun(&dsp_tx_sm); + pic_regs->pending = PIC_UNDERRUN_INT; // clear interrupt + putchar('U'); + } + + if (pending & PIC_OVERRUN_INT){ + dbsm_handle_rx_overrun(&dsp_rx_sm); + pic_regs->pending = PIC_OVERRUN_INT; // clear pending interrupt + + // FIXME Figure out how to handle this robustly. + // Any buffers that are emptying should be allowed to drain... + + if (streaming_p){ + // restart_streaming(); + // FIXME report error + } + else { + // FIXME report error + } + putchar('O'); + } + } +} diff --git a/usrp2/firmware/apps/rcv_eth_packets.c b/usrp2/firmware/apps/rcv_eth_packets.c new file mode 100644 index 00000000..92e41d92 --- /dev/null +++ b/usrp2/firmware/apps/rcv_eth_packets.c @@ -0,0 +1,233 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "memcpy_wa.h" +#include +#include + + +// ---------------------------------------------------------------- + +static u2_mac_addr_t dst_mac_addr = + {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}; + + +// ---------------------------------------------------------------- + +#define PACKET_SIZE 1500 // bytes +#define ETH_DATA_RATE 1000000 // 1MB/s +#define ETH_PACKET_RATE (ETH_DATA_RATE/PACKET_SIZE) // 13,3333 pkts/s + +#define TIMER_RATE 100000000 // 100 MHz clock + +static int timer_delta = TIMER_RATE/ETH_PACKET_RATE; // ticks between interrupts + +static volatile bool send_packet_now = false; // timer handler sets this +static volatile bool link_is_up = false; // eth handler sets this + +int packet_number = 0; + +// ---------------------------------------------------------------- + +// debugging output on tx pins +#define LS_MASK 0xE0000 +#define LS_1000 0x80000 +#define LS_100 0x40000 +#define LS_10 0x20000 + + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + int v = 0; + switch(speed){ + case 10: + v = LS_10; + link_is_up = true; + break; + + case 100: + v = LS_100; + link_is_up = true; + break; + + case 1000: + v = LS_100; + link_is_up = true; + break; + + default: + v = 0; + link_is_up = false; + break; + } + + //hal_gpio_set_tx(v, LS_MASK); /* set debug bits on d'board */ + + putstr("\neth link changed: speed = "); + puthex16_nl(speed); +} + +void +timer_irq_handler(unsigned irq) +{ + hal_set_timeout(timer_delta); // schedule next timeout + send_packet_now = 1; +} + + +void +buffer_irq_handler(unsigned irq) +{ + // FIXME +} + +static void +init_packet(int *buf, const u2_eth_packet_t *pkt, int bufnum) +{ + int i = 0; + int mark = ((bufnum & 0xff) << 24) | 0x005A0000; + + for (i = 0; i < BP_NLINES; i++){ + buf[i] = mark | i; + mark ^= 0x00FF0000; + } + + // copy header into buffer + memcpy_wa(buf, pkt, sizeof(*pkt)); +} + +static void +init_packets(void) +{ + int i; + + u2_eth_packet_t pkt __attribute__((aligned (4))); + + pkt.ehdr.dst = dst_mac_addr; + // src filled in by mac + pkt.ehdr.ethertype = U2_ETHERTYPE; + + // fill ALL buffers for debugging + for (i = 0; i < 8; i++) + init_packet((void *)buffer_ram(i), &pkt, i); +} + +int +main(void) +{ + u2_init(); + + int prev_leds = -1; + int new_leds = 0x00; + output_regs->leds = 0x00; + + int peak_hold_count = 0; + + // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output + //hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + //hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + + putstr("\nrcv_eth_packets\n"); + + init_packets(); + + // pic_register_handler(IRQ_BUFFER, buffer_irq_handler); // poll for now + + // FIXME turn off timer since I don't think MTS and MFS instructions are implemented + // pic_register_handler(IRQ_TIMER, timer_irq_handler); + // hal_set_timeout(timer_delta); + + ethernet_register_link_changed_callback(link_changed_callback); + + ethernet_init(); + + //eth_mac->speed = 4; // FIXME hardcode mac speed to 1000 + + // kick off a receive + bp_receive_to_buf(2, PORT_ETH, 1, 0, 511); + + while(1){ + // u2_eth_packet_t pkt; + + new_leds = 0; + if (link_is_up) + new_leds = 0x2; + + if ((buffer_pool_status->status & (BPS_DONE_2|BPS_ERROR_2)) != 0){ + // we've got a packet! + +#if 0 + // copy to stack buffer so we can byte address it + memcpy_wa(&pkt, (void *)buffer_ram(2), sizeof(pkt)); + + putstr("Rx: src: "); + print_mac_addr(pkt.ehdr.dst_addr); + putstr(" dst: "); + print_mac_addr(pkt.ehdr.src_addr); + putstr(" ethtype: "); + puthex16(pkt.ehdr.ethertype); + putstr(" len: "); + int len = (buffer_pool_status->last_line[2] + 1) * 4; + puthex16_nl(len); +#else + volatile int *bp = buffer_ram(2); + int i; + for (i = 0; i < 16; i++){ + puthex8(i); + putchar(':'); + puthex32_nl(bp[i]); + } +#endif + + // kick off next receive + bp_clear_buf(2); + bp_receive_to_buf(2, PORT_ETH, 1, 0, 511); + + peak_hold_count = 2048 * 10; + } + + if (peak_hold_count > 0){ + peak_hold_count--; + new_leds |= 0x1; + } + + if (new_leds != prev_leds){ + prev_leds = new_leds; + output_regs->leds = new_leds; + } + } + + hal_finish(); + return 1; +} diff --git a/usrp2/firmware/apps/read_dbids.c b/usrp2/firmware/apps/read_dbids.c new file mode 100644 index 00000000..4caabd88 --- /dev/null +++ b/usrp2/firmware/apps/read_dbids.c @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include +#include + + +int main(void) +{ + u2_init(); + + puts("\nread_dbids"); + + unsigned char dbid_tx[2]; + unsigned char dbid_rx[2]; + bool ok; + + ok = eeprom_read(I2C_ADDR_TX_A, 1, dbid_tx, 2); + if (!ok){ + puts("failed to read Tx Daugherboard EEPROM"); + } + else { + putstr("Tx Daugherboard ID: "); + puthex8(dbid_tx[1]); // MSB + puthex8(dbid_tx[0]); // LSB + newline(); + } + + ok = eeprom_read(I2C_ADDR_RX_A, 1, dbid_rx, 2); + if (!ok){ + puts("failed to read Rx Daugherboard EEPROM"); + } + else { + putstr("Rx Daugherboard ID: "); + puthex8(dbid_rx[1]); // MSB + puthex8(dbid_rx[0]); // LSB + newline(); + } + + return 0; +} diff --git a/usrp2/firmware/apps/sd_bounce.c b/usrp2/firmware/apps/sd_bounce.c new file mode 100644 index 00000000..30e3e3fc --- /dev/null +++ b/usrp2/firmware/apps/sd_bounce.c @@ -0,0 +1,153 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +/* + * Loopback SERDES to SERDES + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "nonstdio.h" +#include "memset_wa.h" +#include +#include +#include +#include +#include + + + +// ---------------------------------------------------------------- + +#define SERDES_RX_BUF_0 0 +#define SERDES_RX_BUF_1 1 + +/* + * ================================================================ + * configure SD RX double buffering state machine + * ================================================================ + */ + +// receive from SERDES +buf_cmd_args_t sd_recv_args = { + PORT_SERDES, + 0, + BP_LAST_LINE +}; + +// send to SERDES +buf_cmd_args_t sd_send_args = { + PORT_SERDES, + 0, // starts with packet in line 0 + 0, // filled in from list_line register +}; + +dbsm_t sd_sm; // the state machine + + + + +// ---------------------------------------------------------------- + +#if 0 +static bool +check_packet(int *buf, int nlines) +{ + bool ok = true; + int i = 0; + for (i = 0; i < nlines; i++){ + int expected = ((2*i + 0) << 16) | (2*i+1); + if (buf[i] != expected){ + ok = false; + printf("buf[%d] = 0x%x expected = 0x%x\n", i, buf[i], expected); + } + } + return ok; +} + +static void +zero_buffer(int bufno) +{ + memset_wa(buffer_ram(bufno), 0, BP_NLINES * 4); +} +#endif + + +bool +sd_rx_inspector(dbsm_t *sm, int buf_this) +{ + hal_toggle_leds(0x2); + +#if 0 + int last_line = buffer_pool_status->last_line[buf_this]; + bool ok = check_packet(buffer_ram(buf_this), last_line); + static int good = 0; + static int bad = 0; + + if (ok) + good++; + else + bad++; + + if(good+bad == 10000) { + printf("Good %d\tBad %d\n",good,bad); + good = 0; + bad = 0; + } +#endif + + return false; +} + + +inline static void +buffer_irq_handler(void) +{ + uint32_t status = buffer_pool_status->status; + dbsm_process_status(&sd_sm, status); +} + + +int +main(void) +{ + u2_init(); + + putstr("\nsd_bounce\n"); + + // Get our clock from the mimo interface + clocks_mimo_config(MC_WE_LOCK_TO_MIMO); + + dbsm_init(&sd_sm, SERDES_RX_BUF_0, + &sd_recv_args, &sd_send_args, + sd_rx_inspector); + + // kick off the state machine + dbsm_start(&sd_sm); + + while(1){ + buffer_irq_handler(); + } +} diff --git a/usrp2/firmware/apps/sd_gentest.c b/usrp2/firmware/apps/sd_gentest.c new file mode 100644 index 00000000..4824f03f --- /dev/null +++ b/usrp2/firmware/apps/sd_gentest.c @@ -0,0 +1,269 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "nonstdio.h" +#include "memset_wa.h" +#include +#include +#include +#include +#include + +// ---------------------------------------------------------------- + +int packet_number = 0; +volatile bool send_packet_now = 0; + +#define SERDES_TX_BUF 0 +#define SERDES_RX_BUF 1 + + +#define NLINES_PER_PKT 380 + + +// ---------------------------------------------------------------- + +//static int timer_delta = (int)(MASTER_CLK_RATE * 100e-6); +static int timer_delta = 1000000; // .01 second + +void +timer_irq_handler(unsigned irq) +{ + hal_set_timeout(timer_delta); // schedule next timeout + send_packet_now = true; +} + + +static void +init_packet(int *buf) +{ + int i = 0; + for (i = 0; i < BP_NLINES; i++){ + buf[i] = ((2*i + 0) << 16) | (2*i+1); + } +} + +static bool +check_packet(int *buf, int nlines) +{ + bool ok = true; + int i = 0; + for (i = 0; i < nlines; i++){ + int expected = ((2*i + 0) << 16) | (2*i+1); + if (buf[i] != expected){ + ok = false; + printf("buf[%d] = 0x%x expected = 0x%x\n", i, buf[i], expected); + } + } + return ok; +} + +static void +zero_buffer(int bufno) +{ + memset_wa(buffer_ram(bufno), 0, BP_NLINES * 4); +} + +static void +init_packets(void) +{ + // init just the one we're using + init_packet(buffer_ram(SERDES_TX_BUF)); +} + +int +main(void) +{ + u2_init(); + + // We're free running and provide clock to the MIMO interface + clocks_mimo_config(MC_WE_DONT_LOCK | MC_PROVIDE_CLK_TO_MIMO); + + + // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output + // output_regs->debug_mux_ctrl = 1; + // hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + // hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + + putstr("\nsd_gentest\n"); + + // Set up serdes (already enabled) + //output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN | SERDES_LOOPEN); + //output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN); + + init_packets(); + + // pic_register_handler(IRQ_TIMER, timer_irq_handler); + + //if (hwconfig_simulation_p()) + // timer_delta = sim_timer_delta; + + // start a receive from sd + zero_buffer(SERDES_RX_BUF); + bp_receive_to_buf(SERDES_RX_BUF, PORT_SERDES, 1, 0, BP_LAST_LINE); + + // fire off the first packet + bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT); + hal_set_timeout(timer_delta); + int ready_to_send = 0; + + int counter __attribute__((unused)) = 0; + int sent = 1; + int txerr = 0; + int rxerr = 0; + int rcvd = 0; + int rxcrc = 0; + int sent_acc = 0; + int txerr_acc = 0; + int rxerr_acc = 0; + int rcvd_acc = 0; + int rxcrc_acc = 0; + +#define EXPECTING_PKT() ((counter & 0x1) == 0) +#define SEND_PKT() ((counter & 0x1) != 0) + + bool got_packet = false; + + while(1){ + uint32_t status = buffer_pool_status->status; + + if (status & (BPS_DONE(SERDES_RX_BUF))){ + bp_clear_buf(SERDES_RX_BUF); + got_packet = true; + + //hal_toggle_leds(0x2); + + // check packet + int last_line = buffer_pool_status->last_line[SERDES_RX_BUF]-1; + bool ok = check_packet(buffer_ram(SERDES_RX_BUF), last_line); + + if (ok) { + rcvd++; + //putchar('r'); + } + else { + rcvd++; + rxcrc++; + //putchar('P'); + } + // start a receive from sd + zero_buffer(SERDES_RX_BUF); + bp_receive_to_buf(SERDES_RX_BUF, PORT_SERDES, 1, 0, BP_LAST_LINE); + } + + if (status & (BPS_ERROR(SERDES_RX_BUF))){ + bp_clear_buf(SERDES_RX_BUF); + got_packet = true; + rcvd++; + rxerr++; + //putchar('E'); + + // start a receive from sd + zero_buffer(SERDES_RX_BUF); + bp_receive_to_buf(SERDES_RX_BUF, PORT_SERDES, 1, 0, BP_LAST_LINE); + } + + if (status & (BPS_DONE(SERDES_TX_BUF))){ + bp_clear_buf(SERDES_TX_BUF); + //putchar('t'); + bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT); + //mdelay(1); + int i; + for (i = 0; i < 50; i++){ + asm volatile ("or r0, r0, r0\n\ + or r0, r0, r0\n \ + or r0, r0, r0\n \ + or r0, r0, r0\n \ + or r0, r0, r0\n \ + or r0, r0, r0\n \ + or r0, r0, r0\n"); + } + sent ++; + ready_to_send = 1; + //hal_toggle_leds(0x1); + } + + if (status & BPS_ERROR(SERDES_TX_BUF)){ + bp_clear_buf(SERDES_TX_BUF); + sent++; + txerr++; + ready_to_send = 1; + //putchar('X'); + } + + if(sent >=1000) { + printf("Status\tSENT %d\tTXERR %d\t",sent,txerr); + printf("RX %d\tERR %d\tCRC %d\tMISSED %d\n",rcvd, rxerr, rxcrc, sent-rcvd); + sent_acc += sent; sent = 0; + txerr_acc += txerr; txerr = 0; + rcvd_acc += rcvd; rcvd = 0; + rxerr_acc += rxerr; rxerr = 0; + rxcrc_acc += rxcrc; rxcrc = 0; + } + + if(sent_acc >=10000) { + printf("\nOverall\tSENT %d\tTXERR %d\t",sent_acc,txerr_acc); + printf("RX %d\tERR %d\tCRC %d\tMISSED %d\n\n",rcvd_acc, rxerr_acc, rxcrc_acc, sent_acc-rcvd_acc); + sent_acc = 0; + txerr_acc = 0; + rcvd_acc = 0; + rxerr_acc = 0; + rxcrc_acc = 0; + } +#if 0 + int pending = pic_regs->pending; + if (pending & PIC_TIMER_INT){ + hal_set_timeout(timer_delta); + + /* + if (EXPECTING_PKT()){ + if (!got_packet) + putchar('T'); + got_packet = false; + } + + if (SEND_PKT()){ + if (status & BPS_IDLE(SERDES_TX_BUF)) + bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT); + } + counter++; + */ + + putchar('T'); + if(ready_to_send) { + bp_send_from_buf(SERDES_TX_BUF, PORT_SERDES, 1, 0, NLINES_PER_PKT); + counter++; + ready_to_send = 0; + } + + pic_regs->pending = PIC_TIMER_INT; // clear pending interrupt + } +#endif + } + + return 0; +} diff --git a/usrp2/firmware/apps/serdes_txrx.c b/usrp2/firmware/apps/serdes_txrx.c new file mode 100644 index 00000000..1becc205 --- /dev/null +++ b/usrp2/firmware/apps/serdes_txrx.c @@ -0,0 +1,367 @@ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include "clocks.h" +#include +#include +#include + + +#define FW_SETS_SEQNO 1 // define to 0 or 1 (FIXME must be 1 for now) + +#if (FW_SETS_SEQNO) +static int fw_seqno; // used when f/w is filling in sequence numbers +#endif + + +/* + * Full duplex Tx and Rx between serdes and DSP pipelines + * + * Buffer 1 is used by the cpu to send frames to the host. + * Buffers 2 and 3 are used to double-buffer the DSP Rx to serdes flow + * Buffers 4 and 5 are used to double-buffer the serdes to DSP Tx flow + */ +//#define CPU_RX_BUF 0 // eth -> cpu + +#define DSP_RX_BUF_0 2 // dsp rx -> serdes (double buffer) +#define DSP_RX_BUF_1 3 // dsp rx -> serdes +#define DSP_TX_BUF_0 4 // serdes -> dsp tx (double buffer) +#define DSP_TX_BUF_1 5 // serdes -> dsp tx + +/* + * ================================================================== + * configure DSP TX double buffering state machine (serdes -> dsp) + * ================================================================== + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 2 lines (word0 + timestamp) +// DSP Tx reads word0 (flags) + timestamp followed by samples + +#define DSP_TX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4) + +// Receive from serdes +buf_cmd_args_t dsp_tx_recv_args = { + PORT_SERDES, + 0, + BP_LAST_LINE +}; + +// send to DSP Tx +buf_cmd_args_t dsp_tx_send_args = { + PORT_DSP, + DSP_TX_FIRST_LINE, // starts just past transport header + 0 // filled in from last_line register +}; + +dbsm_t dsp_tx_sm; // the state machine + +/* + * ================================================================= + * configure DSP RX double buffering state machine (dsp -> serdes) + * ================================================================= + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 1 line (word0) +// DSP Rx writes timestamp followed by nlines_per_frame of samples +#define DSP_RX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4 + 1) + +// receive from DSP +buf_cmd_args_t dsp_rx_recv_args = { + PORT_DSP, + DSP_RX_FIRST_LINE, + BP_LAST_LINE +}; + +// send to serdes +buf_cmd_args_t dsp_rx_send_args = { + PORT_SERDES, + 0, // starts with ethernet header in line 0 + 0, // filled in from list_line register +}; + +dbsm_t dsp_rx_sm; // the state machine + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +// variables for streaming mode + +static bool streaming_p = false; +static unsigned int streaming_items_per_frame = 0; +static int streaming_frame_count = 0; +#define FRAMES_PER_CMD 1000 + +bool is_streaming(void){ return streaming_p; } + +// ---------------------------------------------------------------- + + +void +restart_streaming(void) +{ + // setup RX DSP regs + dsp_rx_regs->clear_state = 1; // reset + + streaming_p = true; + streaming_frame_count = FRAMES_PER_CMD; + + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); // set "chain" bit + + // kick off the state machine + dbsm_start(&dsp_rx_sm); + + dsp_rx_regs->rx_time = 0; // enqueue first of two commands + + // make sure this one and the rest have the "now" and "chain" bits set. + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); + + dsp_rx_regs->rx_time = 0; // enqueue second command +} + +void +start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p) +{ + host_mac_addr = *host; // remember who we're sending to + + /* + * Construct ethernet header and word0 and preload into two buffers + */ + u2_eth_packet_t pkt; + memset(&pkt, 0, sizeof(pkt)); + pkt.ehdr.dst = *host; + pkt.ehdr.ethertype = U2_ETHERTYPE; + u2p_set_word0(&pkt.fixed, 0, 0); + // DSP RX will fill in timestamp + + memcpy_wa(buffer_ram(DSP_RX_BUF_0), &pkt, sizeof(pkt)); + memcpy_wa(buffer_ram(DSP_RX_BUF_1), &pkt, sizeof(pkt)); + + + if (FW_SETS_SEQNO) + fw_seqno = 0; + + streaming_items_per_frame = p->items_per_frame; + restart_streaming(); +} + + +void +stop_rx_cmd(void) +{ + streaming_p = false; + dsp_rx_regs->clear_state = 1; // flush cmd queue + bp_clear_buf(DSP_RX_BUF_0); + bp_clear_buf(DSP_RX_BUF_1); +} + + +static void +setup_tx() +{ + dsp_tx_regs->clear_state = 1; + bp_clear_buf(DSP_TX_BUF_0); + bp_clear_buf(DSP_TX_BUF_1); + + int tx_scale = 256; + int interp = 32; + + // setup some defaults + + dsp_tx_regs->freq = 0; + dsp_tx_regs->scale_iq = (tx_scale << 16) | tx_scale; + dsp_tx_regs->interp_rate = interp; +} + + +#if (FW_SETS_SEQNO) +/* + * Debugging ONLY. This will be handled by the tx_protocol_engine. + * + * This is called when the DSP Rx chain has filled in a packet. + * We set and increment the seqno, then return false, indicating + * that we didn't handle the packet. A bit of a kludge + * but it should work. + */ +bool +fw_sets_seqno_inspector(dbsm_t *sm, int buf_this) // returns false +{ + uint32_t *p = buffer_ram(buf_this); + uint32_t seqno = fw_seqno++; + + // KLUDGE all kinds of nasty magic numbers and embedded knowledge + uint32_t t = p[4]; + t = (t & 0xffff00ff) | ((seqno & 0xff) << 8); + p[4] = t; + + // queue up another rx command when required + if (streaming_p && --streaming_frame_count == 0){ + streaming_frame_count = FRAMES_PER_CMD; + dsp_rx_regs->rx_time = 0; + } + + return false; // we didn't handle the packet +} +#endif + + +inline static void +buffer_irq_handler(unsigned irq) +{ + // hal_toggle_leds(LED_A); + + uint32_t status = buffer_pool_status->status; + + if (0 && (status & ~BPS_IDLE_ALL)){ + putstr("status = "); + puthex32_nl(status); + } + + dbsm_process_status(&dsp_tx_sm, status); + dbsm_process_status(&dsp_rx_sm, status); +} + +int +main(void) +{ + u2_init(); + + output_regs->led_src = 0x3; // h/w controls bottom two bits + clocks_enable_test_clk(true, 1); + + putstr("\nSERDES TxRx\n"); + + cpu_tx_buf_dest_port = PORT_SERDES; + + // ethernet_register_link_changed_callback(link_changed_callback); + // ethernet_init(); + + clocks_mimo_config(MC_WE_LOCK_TO_MIMO); + + // puts("post clocks_mimo_config"); + +#if 0 + // make bit 15 of Tx gpio's be a s/w output + hal_gpio_set_sel(GPIO_TX_BANK, 15, 's'); + hal_gpio_set_ddr(GPIO_TX_BANK, 0x8000, 0x8000); +#endif + +#if 0 + output_regs->debug_mux_ctrl = 1; + hal_gpio_set_sels(GPIO_TX_BANK, "0000000000000000"); + hal_gpio_set_sels(GPIO_RX_BANK, "0000000000000000"); + hal_gpio_set_ddr(GPIO_TX_BANK, 0xffff, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0xffff, 0xffff); +#endif + + + // initialize double buffering state machine for ethernet -> DSP Tx + + dbsm_init(&dsp_tx_sm, DSP_TX_BUF_0, + &dsp_tx_recv_args, &dsp_tx_send_args, + eth_pkt_inspector); + + + //output_regs->flush_icache = 1; + + // initialize double buffering state machine for DSP RX -> Ethernet + + if (FW_SETS_SEQNO){ + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + fw_sets_seqno_inspector); + } + else { + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + } + + // puts("post dbsm_init's"); + + // tell app_common that this dbsm could be sending to the ethernet + ac_could_be_sending_to_eth = &dsp_rx_sm; + + + // program tx registers + setup_tx(); + + // puts("post setup_tx"); + + // kick off the state machine + dbsm_start(&dsp_tx_sm); + + // puts("post dbsm_start"); + + //int which = 0; + + while(1){ + // hal_gpio_write(GPIO_TX_BANK, which, 0x8000); + // which ^= 0x8000; + + buffer_irq_handler(0); + + int pending = pic_regs->pending; // poll for under or overrun + + if (pending & PIC_UNDERRUN_INT){ + dbsm_handle_tx_underrun(&dsp_tx_sm); + pic_regs->pending = PIC_UNDERRUN_INT; // clear interrupt + putchar('U'); + } + + if (pending & PIC_OVERRUN_INT){ + dbsm_handle_rx_overrun(&dsp_rx_sm); + pic_regs->pending = PIC_OVERRUN_INT; // clear pending interrupt + + // FIXME Figure out how to handle this robustly. + // Any buffers that are emptying should be allowed to drain... + + if (streaming_p){ + // restart_streaming(); + // FIXME report error + } + else { + // FIXME report error + } + putchar('O'); + } + } +} diff --git a/usrp2/firmware/apps/set_hw_rev.c b/usrp2/firmware/apps/set_hw_rev.c new file mode 100644 index 00000000..d4ac8ff8 --- /dev/null +++ b/usrp2/firmware/apps/set_hw_rev.c @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#include +#include +#include +#include + +#define HW_REV_MAJOR 0 +#define HW_REV_MINOR 3 + +int +main(void) +{ + u2_init(); + + putstr("\nset_hw_rev\n"); + + bool ok = true; + unsigned char maj = HW_REV_MAJOR; + unsigned char min = HW_REV_MINOR; + ok = eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_MSB, &maj, 1); + ok &= eeprom_write(I2C_ADDR_MBOARD, MBOARD_REV_LSB, &min, 1); + + if (ok) + printf("OK: set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + else + printf("FAILED to set h/w rev to %d.%d\n", HW_REV_MAJOR, HW_REV_MINOR); + + return 0; +} diff --git a/usrp2/firmware/apps/test1.c b/usrp2/firmware/apps/test1.c new file mode 100644 index 00000000..c3cc3be5 --- /dev/null +++ b/usrp2/firmware/apps/test1.c @@ -0,0 +1,282 @@ +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "nonstdio.h" + +// Globals +#define EMPTY 0 +#define FILLING 1 +#define FULL 2 +#define EMPTYING 3 + +#define PORT 2 // ethernet = 2, serdes = 0 +int dsp_rx_buf, dsp_tx_buf, serdes_rx_buf, serdes_tx_buf; +int dsp_rx_idle, dsp_tx_idle, serdes_rx_idle, serdes_tx_idle; + +int buffer_state[4]; + + +void double_buffering(int port); + +// +// We register this in the secondary interrupt vector. +// It's called on buffer manager interrupts +// +void +buffer_irq_handler(unsigned irq) +{ + double_buffering(PORT); +} + +int +main(void) +{ + int i; + + u2_init(); + + // Control LEDs + output_regs->leds = 0x02; + + // Turn on ADCs + output_regs->adc_ctrl = 0x0A; + + // Set up TX Chain + dsp_tx_regs->freq = 0; + dsp_tx_regs->scale_iq = (1 << 16) | 1; + dsp_tx_regs->interp_rate = 8; + + // Set up RX Chain + dsp_rx_regs->freq = 0; + dsp_rx_regs->scale_iq = (1 << 16) | 1; + dsp_rx_regs->decim_rate = 8; + + // Set up buffer control, using only 4 for now + for(i=0;i<4;i++) + buffer_state[i] = EMPTY; + + // Set up DSP RX + buffer_state[0] = FILLING; + serdes_tx_idle = 1; + bp_receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 0, use 500 lines + + //dsp_rx_regs->run_rx = 1; // Start DSP_RX + putstr("Done DSP RX setup\n"); + + // Set up serdes RX + buffer_state[2] = FILLING; + dsp_tx_idle = 1; + bp_receive_to_buf(2, PORT, 1, 5, 504); + + while (buffer_pool_status->status == 0) // wait for completion of DSP RX + ; + + putstr("Done DSP TX setup\n"); + //dsp_tx_regs->run_tx = 1; + + // register interrupt handler + pic_register_handler(IRQ_BUFFER, buffer_irq_handler); + + while (1) + ; + + hal_finish(); + return 1; +} + +void +double_buffering(int port) { + unsigned int localstatus = buffer_pool_status->status; + + if(localstatus & BPS_DONE_0) { + bp_clear_buf(0); + if(buffer_state[0] == FILLING) { + buffer_state[0] = FULL; + if(buffer_state[1] == EMPTY) { + bp_receive_to_buf(1, 1, 1, 10, 509); // DSP_RX to buffer 1, use 500 lines + buffer_state[1] = FILLING; + } + else + dsp_rx_idle = 1; + if(serdes_tx_idle) { + serdes_tx_idle = 0; + bp_send_from_buf(0, port, 1, 10, 509); // SERDES_TX from buffer 0 + buffer_state[0] = EMPTYING; + } + } + else { // buffer was emptying + buffer_state[0] = EMPTY; + if(dsp_rx_idle) { + dsp_rx_idle = 0; + bp_receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 0, use 500 lines + buffer_state[0] = FILLING; + } + if(buffer_state[1] == FULL) { + bp_send_from_buf(1, port, 1, 10, 509); // SERDES_TX from buffer 1 + buffer_state[1] = EMPTYING; + } + else + serdes_tx_idle = 1; + } + putstr("Int Proc'ed 0\n"); + } + if(localstatus & BPS_DONE_1) { + bp_clear_buf(1); + if(buffer_state[1] == FILLING) { + buffer_state[1] = FULL; + if(buffer_state[0] == EMPTY) { + bp_receive_to_buf(0, 1, 1, 10, 509); // DSP_RX to buffer 1, use 500 lines + buffer_state[0] = FILLING; + } + else + dsp_rx_idle = 1; + if(serdes_tx_idle) { + serdes_tx_idle = 0; + bp_send_from_buf(1, port, 1, 10, 509); // SERDES_TX from buffer 1 + buffer_state[1] = EMPTYING; + } + } + else { // buffer was emptying + buffer_state[1] = EMPTY; + if(dsp_rx_idle) { + dsp_rx_idle = 0; + bp_receive_to_buf(1, 1, 1, 10, 509); // DSP_RX to buffer 1, use 500 lines + buffer_state[1] = FILLING; + } + if(buffer_state[0] == FULL) { + bp_send_from_buf(0, port, 1, 10, 509); // SERDES_TX from buffer 0 + buffer_state[0] = EMPTYING; + } + else + serdes_tx_idle = 1; + } + putstr("Int Proc'ed 1\n"); + } + if(localstatus & BPS_DONE_2) { + bp_clear_buf(2); + if(buffer_state[2] == FILLING) { + buffer_state[2] = FULL; + if(buffer_state[3] == EMPTY) { + bp_receive_to_buf(3, port, 1, 5, 504); // SERDES_RX to buffer 3, use 500 lines + buffer_state[3] = FILLING; + } + else + serdes_rx_idle = 1; + if(dsp_tx_idle) { + dsp_tx_idle = 0; + bp_send_from_buf(2, 1, 1, 5, 504); // DSP_TX from buffer 2 + buffer_state[2] = EMPTYING; + } + } + else { // buffer was emptying + buffer_state[2] = EMPTY; + if(serdes_rx_idle) { + serdes_rx_idle = 0; + bp_receive_to_buf(2, port, 1, 5, 504); // SERDES_RX to buffer 2 + buffer_state[2] = FILLING; + } + if(buffer_state[3] == FULL) { + bp_send_from_buf(3, 1, 1, 5, 504); // DSP_TX from buffer 3 + buffer_state[3] = EMPTYING; + } + else + dsp_tx_idle = 1; + } + putstr("Int Proc'ed 2\n"); + } + if(localstatus & BPS_DONE_3) { + bp_clear_buf(3); + if(buffer_state[3] == FILLING) { + buffer_state[3] = FULL; + if(buffer_state[2] == EMPTY) { + bp_receive_to_buf(2, port, 1, 5, 504); // SERDES_RX to buffer 2, use 500 lines + buffer_state[2] = FILLING; + } + else + serdes_rx_idle = 1; + if(dsp_tx_idle) { + dsp_tx_idle = 0; + bp_send_from_buf(3, 1, 1, 5, 504); // DSP_TX from buffer 3 + buffer_state[3] = EMPTYING; + } + } + else { // buffer was emptying + buffer_state[3] = EMPTY; + if(serdes_rx_idle) { + serdes_rx_idle = 0; + bp_receive_to_buf(3, port, 1, 5, 504); // SERDES_RX to buffer 3 + buffer_state[3] = FILLING; + } + if(buffer_state[2] == FULL) { + bp_send_from_buf(2, 1, 1, 5, 504); // DSP_TX from buffer 2 + buffer_state[2] = EMPTYING; + } + else + dsp_tx_idle = 1; + } + putstr("Int Proc'ed 3\n"); + } +} + +// Spare Code + +#if 0 + // Set up LSDAC + int i = 0; + while(1) { + int command = (3 << 19) | (0 << 16) | (i & 0xffff); + spi_transact(SPI_TXONLY, SPI_SS_TX_DAC, command, 24, 1); // negate TX phase + i++; + } +#endif + +#if 0 + // Write to buffer 0 + int *buf = (int *)(BUFFER_BASE + BUFFER_0); + puthex_nl((int)buf); + + for(i=0;i. + */ + +#include +#include +#include +#include + +int +main(void) +{ + u2_init(); + + puts("\ntest_db_spi"); + + while(1){ + spi_transact(SPI_TXONLY, SPI_SS_RX_DB, 0xCC33, 16, SPIF_PUSH_FALL); + spi_transact(SPI_TXONLY, SPI_SS_TX_DB, 0x33CC, 16, SPIF_PUSH_FALL); + } +} diff --git a/usrp2/firmware/apps/test_i2c.c b/usrp2/firmware/apps/test_i2c.c new file mode 100644 index 00000000..f349ead8 --- /dev/null +++ b/usrp2/firmware/apps/test_i2c.c @@ -0,0 +1,108 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include /* FIXME */ +#include +#include +#include +#include + + + +#define ASSERT_TRUE(x) \ + do { \ + if (!(x)){ \ + printf("ASSERT_TRUE failed on line %d\n", __LINE__); \ + nerrors++; \ + } \ + } while(0) + +#define ASSERT_FALSE(x) \ + do { \ + if (x){ \ + printf("ASSERT_FALSE failed on line %d\n", __LINE__); \ + nerrors++; \ + } \ + } while(0) + + +#define BUFSIZE 128 + +int +main(void) +{ + int i; + bool ok; + int nerrors = 0; + uint8_t buf[BUFSIZE]; + int not_dev_addr = 0x35; // no device with this address on the i2c bus. + int offset; + int len; + + u2_init(); + + puts("test_i2c\n"); + + // try writing a non-existent device + buf[0] = 0xA5; + ok = i2c_write(not_dev_addr, buf, 1); + ASSERT_FALSE(ok); + + // try read from non-existent device + buf[0] = 0; + ok = i2c_read(not_dev_addr, buf, 1); + ASSERT_FALSE(ok); + + // try writing eeprom + offset = 31; + len = 8; + memset(buf, 0, sizeof(buf)); + for (i = 0; i < len; i++) + buf[i] = i; + ok = eeprom_write(I2C_ADDR_MBOARD, offset, buf, len); + ASSERT_TRUE(ok); + + // now try to read it back + offset = 31; + len = 8; + memset(buf, 0, sizeof(buf)); + ok = eeprom_read(I2C_ADDR_MBOARD, offset, buf, len); + ASSERT_TRUE(ok); + + // check result + for (i = 0; i < len; i++){ + if (buf[i] != i){ + printf("buf[%d] = %d, should be %d\n", i, buf[i], i); + nerrors++; + } + } + + if (nerrors == 0){ + output_regs->leds = 0x3; + puts("PASSED\n"); + } + else { + output_regs->leds = 0x0; + puts("FAILED\n"); + } + + hal_finish(); + return 0; +} + diff --git a/usrp2/firmware/apps/test_lsadc.c b/usrp2/firmware/apps/test_lsadc.c new file mode 100644 index 00000000..5fda29cd --- /dev/null +++ b/usrp2/firmware/apps/test_lsadc.c @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include +#include + +int +main(void) +{ + u2_init(); + + puts("\ntest_lsadc"); + + uint32_t r; + + unsigned int up_counter = 0; + + while (1){ + unsigned int v; + v = up_counter; + + lsdac_write_rx(0, v << 0); + lsdac_write_rx(2, v << 1); + +#if 1 + r = lsadc_read_rx(0); + lsdac_write_rx(1, r & 0x0fff); + //puthex32_nl(r); +#endif + +#if 1 + r = lsadc_read_rx(1); + lsdac_write_rx(3, r & 0x0fff); + //puthex32_nl(r); +#endif + + up_counter++; + } +} diff --git a/usrp2/firmware/apps/test_lsdac.c b/usrp2/firmware/apps/test_lsdac.c new file mode 100644 index 00000000..8c1bf333 --- /dev/null +++ b/usrp2/firmware/apps/test_lsdac.c @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include + +int +main(void) +{ + u2_init(); + + puts("\ntest_lsdac"); + + unsigned int up_counter = 0; + unsigned int dn_counter = 0; + + while(1){ + unsigned int v; + v = up_counter; + lsdac_write_rx(0, v << 0); + lsdac_write_rx(1, v << 1); + lsdac_write_rx(2, v << 2); + lsdac_write_rx(3, v << 3); + + v = up_counter; + lsdac_write_tx(0, v << 0); + lsdac_write_tx(1, v << 1); + lsdac_write_tx(2, v << 2); + lsdac_write_tx(3, v << 3); + + up_counter++; + dn_counter--; + } +} diff --git a/usrp2/firmware/apps/test_phy_comm.c b/usrp2/firmware/apps/test_phy_comm.c new file mode 100644 index 00000000..7242c6fc --- /dev/null +++ b/usrp2/firmware/apps/test_phy_comm.c @@ -0,0 +1,113 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +// check communication with ethernet PHY chip + +#include "u2_init.h" +#include "memory_map.h" +#include "hal_io.h" +#include "ethernet.h" +#include "pic.h" +#include "nonstdio.h" + + +#define DELTA_T 12500000 // .125s (10ns per tick) +//#define DELTA_T 10000 + +// debugging output on tx pins +#define LS_MASK 0xE0000 +#define LS_1000 0x80000 +#define LS_100 0x40000 +#define LS_10 0x20000 + + + +#define U2_ETHERTYPE 0xBEEF + + +static volatile int led_link_up_flag = 0; + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + int v = 0; + switch(speed){ + case 10: + v = LS_10; + led_link_up_flag = 0x2; + break; + + case 100: + v = LS_100; + led_link_up_flag = 0x2; + break; + + case 1000: + v = LS_100; + led_link_up_flag = 0x2; + break; + + default: + v = 0; + led_link_up_flag = 0; + break; + } + + //hal_gpio_set_tx(v, LS_MASK); /* set debug bits on d'board */ + + putstr("\neth link changed: speed = "); + puthex_nl(speed); +} + +void +timer_handler(unsigned irq) +{ + static int led_counter = 0; + + hal_set_timeout(DELTA_T); // schedule next timeout + output_regs->leds = (led_counter++ & 0x1) | led_link_up_flag; +} + +int +main(void) +{ + u2_init(); + + putstr("\n test_phy_comm\n"); + + pic_register_handler(IRQ_TIMER, timer_handler); + hal_set_timeout(DELTA_T); // schedule timeout + + // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output + //hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + //hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + + ethernet_register_link_changed_callback(link_changed_callback); + + output_regs->phy_ctrl = 1; /* reset the eth PHY */ + output_regs->phy_ctrl = 0; + + ethernet_init(); + + while(1) + ; + + return 0; +} diff --git a/usrp2/firmware/apps/test_ram.c b/usrp2/firmware/apps/test_ram.c new file mode 100644 index 00000000..77ee693f --- /dev/null +++ b/usrp2/firmware/apps/test_ram.c @@ -0,0 +1,105 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include /* FIXME */ +#include +#include +#include +#include +#include + +#define ASSERT_TRUE(x) \ + do { \ + if (!(x)){ \ + printf("ASSERT_TRUE failed on line %d\n", __LINE__); \ + nerrors++; \ + } \ + } while(0) + +#define ASSERT_FALSE(x) \ + do { \ + if (x){ \ + printf("ASSERT_FALSE failed on line %d\n", __LINE__); \ + nerrors++; \ + } \ + } while(0) + + +#define BUFSIZE 128 + +int test_ram() +{ + int i,j,k; + output_regs->ram_page = 1<<10; + + extram[0] = 0xDEADBEEF; + extram[1] = 0xF00D1234; + extram[7] = 0x76543210; + + output_regs->ram_page = 2<<10; + extram[7] = 0x55555555; + extram[1] = 0xaaaaaaaa; + extram[0] = 0xeeeeeeee; + + output_regs->ram_page = 1<<10; + + i = extram[0]; + k = extram[1]; + j = extram[7]; + + if((i != 0xDEADBEEF)||(j!=0x76543210)||(k!=0xF00D1234)) { + puts("RAM FAIL1!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + + output_regs->ram_page = 2<<10; + + j = extram[7]; + k = extram[1]; + i = extram[0]; + + if((i != 0xeeeeeeee)||(j!=0x55555555)||(k!=0xaaaaaaaa)) { + puts("RAM FAIL2!\n"); + puthex32_nl(i); + puthex32_nl(j); + puthex32_nl(k); + return 0; + } + return 1; +} + +int +main(void) +{ + + u2_init(); + puts("\ntest_ram\n"); + int success = test_ram(); + if(success) + puts("RAM Passed Tests\n"); + else + puts("RAM Failed\n"); + + hal_finish(); + return 0; +} + diff --git a/usrp2/firmware/apps/test_sd.c b/usrp2/firmware/apps/test_sd.c new file mode 100644 index 00000000..494432d7 --- /dev/null +++ b/usrp2/firmware/apps/test_sd.c @@ -0,0 +1,81 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include /* FIXME */ +#include +#include +#include +#include + + +#define ASSERT_TRUE(x) \ + do { \ + if (!(x)){ \ + printf("ASSERT_TRUE failed on line %d\n", __LINE__); \ + nerrors++; \ + } \ + } while(0) + +#define ASSERT_FALSE(x) \ + do { \ + if (x){ \ + printf("ASSERT_FALSE failed on line %d\n", __LINE__); \ + nerrors++; \ + } \ + } while(0) + + +#define BUFSIZE 128 + +int +main(void) +{ + int i; + unsigned char buf[512]; + + u2_init(); + + puts("\ntest_sd\n"); + + + i = sd_init(); + if(i) + puts("Successfully Init'ed Card\n"); + else + puts("FAILED INIT of Card\n"); + + i = sd_read_block(2048,buf); + if(i) { + puts("READ Command accepted\n"); + for(i=0;i<512;i++) + if((i&15) == 15) + puthex8_nl(buf[i]); + else { + puthex8(buf[i]); + putchar(' '); + } + } + else + puts("READ Command Rejected\n"); + + puts("Done"); + hal_finish(); + return 0; +} + diff --git a/usrp2/firmware/apps/timer_test.c b/usrp2/firmware/apps/timer_test.c new file mode 100644 index 00000000..7c1e4644 --- /dev/null +++ b/usrp2/firmware/apps/timer_test.c @@ -0,0 +1,59 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "u2_init.h" +#include "memory_map.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "nonstdio.h" + + +#define DELTA_T 500 // 5 us (10ns per tick) + + +void +timer_handler(unsigned irq) +{ + int t = timer_regs->time; + timer_regs->time = t + DELTA_T; + + putstr("Tick: "); + puthex_nl(t); +} + +int +main(void) +{ + u2_init(); + + // setup timer + + putstr("Setting up timer\n"); + pic_register_handler(IRQ_TIMER, timer_handler); + + int t = timer_regs->time; + timer_regs->time = t + DELTA_T; + + while (1) + ; + + putstr("Done Testing\n"); + + hal_finish(); + return 1; +} diff --git a/usrp2/firmware/apps/tx_standalone.c b/usrp2/firmware/apps/tx_standalone.c new file mode 100644 index 00000000..25ba8fd4 --- /dev/null +++ b/usrp2/firmware/apps/tx_standalone.c @@ -0,0 +1,338 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "memcpy_wa.h" +#include "dbsm.h" +#include +#include +#include + +#define _AL4 __attribute__((aligned (4))) + +#define USE_BUFFER_INTERRUPT 0 // 0 or 1 + + +static int timer_delta = MASTER_CLK_RATE/1000; // tick at 1kHz + +/* + * This program can respond to queries from the host + * and stream rx samples. + * + * Buffer 1 is used by the cpu to send frames to the host. + * Buffers 2 and 3 are used to double-buffer the DSP Rx to eth flow + * Buffers 4 and 5 are used to double-buffer the eth to DSP Tx eth flow + */ +//#define CPU_RX_BUF 0 // eth -> cpu +#define CPU_TX_BUF 1 // cpu -> eth + +#define DSP_RX_BUF_0 2 // dsp rx -> eth (double buffer) +#define DSP_RX_BUF_1 3 // dsp rx -> eth +#define DSP_TX_BUF_0 4 // eth -> dsp tx (double buffer) +#define DSP_TX_BUF_1 5 // eth -> dsp tx + + +/* + * ================================================================ + * configure DSP RX double buffering state machine + * ================================================================ + */ + + +// 4 lines of ethernet hdr + 1 line (word0) +// DSP Rx writes timestamp followed by nlines_per_frame of samples +#define DSP_RX_FIRST_LINE 5 +#define DSP_RX_SAMPLES_PER_FRAME 128 +#define DSP_RX_EXTRA_LINES 1 // writes timestamp + +// Receive from DSP Rx +buf_cmd_args_t dsp_rx_recv_args = { + PORT_DSP, + DSP_RX_FIRST_LINE, + BP_LAST_LINE +}; + +// send to ethernet +buf_cmd_args_t dsp_rx_send_args = { + PORT_ETH, + 0, // starts with ethernet header in line 0 + 0, // filled in from last_line register +}; + +dbsm_t dsp_rx_sm; // the state machine + +/* + * ================================================================ + * configure DSP TX double buffering state machine + * ================================================================ + */ + +// 4 lines of ethernet hdr + 2 lines (word0 + timestamp) +// DSP Tx reads word0 (flags) + timestamp followed by samples + +#define DSP_TX_FIRST_LINE 4 +#define DSP_TX_SAMPLES_PER_FRAME 250 // not used except w/ debugging +#define DSP_TX_EXTRA_LINES 2 // reads word0 + timestamp + +// Receive from ethernet +buf_cmd_args_t dsp_tx_recv_args = { + PORT_ETH, + 0, + BP_LAST_LINE +}; + +// send to DSP Tx +buf_cmd_args_t dsp_tx_send_args = { + PORT_DSP, + DSP_TX_FIRST_LINE, // starts just past ethernet header + 0 // filled in from last_line register +}; + +dbsm_t dsp_tx_sm; // the state machine + +/* + * send constant buffer to DSP TX + */ +static inline void +SEND_CONST_TO_DSP_TX(void) +{ + bp_send_from_buf(DSP_TX_BUF_0, PORT_DSP, 1, + DSP_TX_FIRST_LINE, + DSP_TX_FIRST_LINE + DSP_TX_EXTRA_LINES + DSP_TX_SAMPLES_PER_FRAME - 1); +} + +// ---------------------------------------------------------------- + + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +void link_changed_callback(int speed); +static volatile bool link_is_up = false; // eth handler sets this + + +void +timer_irq_handler(unsigned irq) +{ + hal_set_timeout(timer_delta); // schedule next timeout +} + +// Tx DSP underrun +void +underrun_irq_handler(unsigned irq) +{ + dsp_tx_regs->clear_state = 1; + bp_clear_buf(DSP_TX_BUF_0); + bp_clear_buf(DSP_TX_BUF_1); + dbsm_stop(&dsp_tx_sm); + + // FIXME anything else? + + putstr("\nirq: underrun\n"); +} + +// Rx DSP overrun +void +overrun_irq_handler(unsigned irq) +{ + dsp_rx_regs->clear_state = 1; + bp_clear_buf(DSP_RX_BUF_0); + bp_clear_buf(DSP_RX_BUF_1); + dbsm_stop(&dsp_rx_sm); + + // FIXME anything else? + + putstr("\nirq: overrun\n"); +} + +static void +start_tx_transfers(void) +{ + bp_clear_buf(DSP_TX_BUF_0); // FIXME, really goes in state machine + bp_clear_buf(DSP_TX_BUF_1); + + // fill everything with a constant 32k + 0j + + uint32_t const_sample = (32000 << 16) | 0; + int i; + for (i = 0; i < BP_NLINES; i++){ + buffer_ram(DSP_TX_BUF_0)[i] = const_sample; + buffer_ram(DSP_TX_BUF_1)[i] = const_sample; + } + + /* + * Construct ethernet header and word0 and preload into two buffers + */ + u2_eth_packet_t pkt; + memset(&pkt, 0, sizeof(pkt)); + //pkt.ehdr.dst = *host; + pkt.ehdr.ethertype = U2_ETHERTYPE; + u2p_set_word0(&pkt.fixed, + U2P_TX_IMMEDIATE | U2P_TX_START_OF_BURST, 0); + u2p_set_timestamp(&pkt.fixed, T_NOW); + + memcpy_wa(buffer_ram(DSP_TX_BUF_0), &pkt, sizeof(pkt)); + memcpy_wa(buffer_ram(DSP_TX_BUF_1), &pkt, sizeof(pkt)); + + + int tx_scale = 256; + + // setup Tx DSP regs + dsp_tx_regs->clear_state = 1; // reset + dsp_tx_regs->freq = 408021893; // 9.5 MHz [2**32 * fc/fsample] + dsp_tx_regs->scale_iq = (tx_scale << 16) | tx_scale; + dsp_tx_regs->interp_rate = 32; + + // kick off the state machine + // dbsm_start(&dsp_rx_sm); + + SEND_CONST_TO_DSP_TX(); // send constant buffer to DSP TX +} + + +void +buffer_irq_handler(unsigned irq) +{ + uint32_t status = buffer_pool_status->status; + + if (0){ + putstr("irq: "); + puthex32(status); + putchar('\n'); + } + + if (status & BPS_ERROR_ALL){ + // FIXME rare path, handle error conditions + } + + if (status & BPS_DONE(DSP_TX_BUF_0)){ + bp_clear_buf(DSP_TX_BUF_0); + SEND_CONST_TO_DSP_TX(); + hal_toggle_leds(0x1); + } + +} + +int +main(void) +{ + u2_init(); + + // setup tx gpio bits for GPIOM_FPGA_1 -- fpga debug output + //hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + //hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + + putstr("\ntx_only\n"); + + // Control LEDs + hal_set_leds(0x0, 0x3); + + if (USE_BUFFER_INTERRUPT) + pic_register_handler(IRQ_BUFFER, buffer_irq_handler); + + pic_register_handler(IRQ_OVERRUN, overrun_irq_handler); + pic_register_handler(IRQ_UNDERRUN, underrun_irq_handler); + + //pic_register_handler(IRQ_TIMER, timer_irq_handler); + //hal_set_timeout(timer_delta); + + ethernet_register_link_changed_callback(link_changed_callback); + + ethernet_init(); + + // initialize double buffering state machine for DSP RX -> Ethernet + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + + // setup receive from ETH + // bp_receive_to_buf(CPU_RX_BUF, PORT_ETH, 1, 0, BP_LAST_LINE); + +#if 0 + if (hwconfig_simulation_p()){ + // If we're simulating, pretend that we got a start command from the host + u2_mac_addr_t host = {{ 0x00, 0x0A, 0xE4, 0x3E, 0xD2, 0xD5 }}; + start_rx_cmd(&host); + } +#endif + + start_tx_transfers(); // send constant buffers to DSP TX + + while(1){ + if (!USE_BUFFER_INTERRUPT) + buffer_irq_handler(0); + } +} + +// ---------------------------------------------------------------- + +// debugging output on tx pins +#define LS_MASK 0xE0000 +#define LS_1000 0x80000 +#define LS_100 0x40000 +#define LS_10 0x20000 + +/* + * Called when eth phy state changes (w/ interrupts disabled) + */ +void +link_changed_callback(int speed) +{ + int v = 0; + switch(speed){ + case 10: + v = LS_10; + link_is_up = true; + break; + + case 100: + v = LS_100; + link_is_up = true; + break; + + case 1000: + v = LS_100; + link_is_up = true; + break; + + default: + v = 0; + link_is_up = false; + break; + } + + //hal_gpio_set_tx(v, LS_MASK); /* set debug bits on d'board */ + + // hal_set_leds(link_is_up ? 0x2 : 0x0, 0x2); + + printf("\neth link changed: speed = %d\n", speed); +} diff --git a/usrp2/firmware/apps/txrx.c b/usrp2/firmware/apps/txrx.c new file mode 100644 index 00000000..730ee66c --- /dev/null +++ b/usrp2/firmware/apps/txrx.c @@ -0,0 +1,346 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "hal_io.h" +#include "buffer_pool.h" +#include "pic.h" +#include "bool.h" +#include "ethernet.h" +#include "nonstdio.h" +#include "usrp2_eth_packet.h" +#include "dbsm.h" +#include "app_common_v2.h" +#include "memcpy_wa.h" +#include +#include +#include +#include "clocks.h" + +#define FW_SETS_SEQNO 1 // define to 0 or 1 (FIXME must be 1 for now) + +#if (FW_SETS_SEQNO) +static int fw_seqno; // used when f/w is filling in sequence numbers +#endif + + +/* + * Full duplex Tx and Rx between ethernet and DSP pipelines + * + * Buffer 1 is used by the cpu to send frames to the host. + * Buffers 2 and 3 are used to double-buffer the DSP Rx to eth flow + * Buffers 4 and 5 are used to double-buffer the eth to DSP Tx eth flow + */ +//#define CPU_RX_BUF 0 // eth -> cpu + +#define DSP_RX_BUF_0 2 // dsp rx -> eth (double buffer) +#define DSP_RX_BUF_1 3 // dsp rx -> eth +#define DSP_TX_BUF_0 4 // eth -> dsp tx (double buffer) +#define DSP_TX_BUF_1 5 // eth -> dsp tx + +/* + * ================================================================ + * configure DSP TX double buffering state machine (eth -> dsp) + * ================================================================ + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 2 lines (word0 + timestamp) +// DSP Tx reads word0 (flags) + timestamp followed by samples + +#define DSP_TX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4) + +// Receive from ethernet +buf_cmd_args_t dsp_tx_recv_args = { + PORT_ETH, + 0, + BP_LAST_LINE +}; + +// send to DSP Tx +buf_cmd_args_t dsp_tx_send_args = { + PORT_DSP, + DSP_TX_FIRST_LINE, // starts just past transport header + 0 // filled in from last_line register +}; + +dbsm_t dsp_tx_sm; // the state machine + +/* + * ================================================================ + * configure DSP RX double buffering state machine (dsp -> eth) + * ================================================================ + */ + +// 4 lines of ethernet hdr + 1 line transport hdr + 1 line (word0) +// DSP Rx writes timestamp followed by nlines_per_frame of samples +#define DSP_RX_FIRST_LINE ((sizeof(u2_eth_hdr_t) + sizeof(u2_transport_hdr_t))/4 + 1) + +// receive from DSP +buf_cmd_args_t dsp_rx_recv_args = { + PORT_DSP, + DSP_RX_FIRST_LINE, + BP_LAST_LINE +}; + +// send to ETH +buf_cmd_args_t dsp_rx_send_args = { + PORT_ETH, + 0, // starts with ethernet header in line 0 + 0, // filled in from list_line register +}; + +dbsm_t dsp_rx_sm; // the state machine + + +// The mac address of the host we're sending to. +u2_mac_addr_t host_mac_addr; + + +// variables for streaming mode + +static bool streaming_p = false; +static unsigned int streaming_items_per_frame = 0; +static int streaming_frame_count = 0; +#define FRAMES_PER_CMD 1000 + +bool is_streaming(void){ return streaming_p; } + + +// ---------------------------------------------------------------- + + +void +restart_streaming(void) +{ + // setup RX DSP regs + dsp_rx_regs->clear_state = 1; // reset + + streaming_p = true; + streaming_frame_count = FRAMES_PER_CMD; + + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); // set "chain" bit + + // kick off the state machine + dbsm_start(&dsp_rx_sm); + + dsp_rx_regs->rx_time = 0; // enqueue first of two commands + + // make sure this one and the rest have the "now" and "chain" bits set. + dsp_rx_regs->rx_command = + MK_RX_CMD(FRAMES_PER_CMD * streaming_items_per_frame, + streaming_items_per_frame, + 1, 1); + + dsp_rx_regs->rx_time = 0; // enqueue second command +} + +void +start_rx_streaming_cmd(const u2_mac_addr_t *host, op_start_rx_streaming_t *p) +{ + host_mac_addr = *host; // remember who we're sending to + + /* + * Construct ethernet header and word0 and preload into two buffers + */ + u2_eth_packet_t pkt; + memset(&pkt, 0, sizeof(pkt)); + pkt.ehdr.dst = *host; + pkt.ehdr.ethertype = U2_ETHERTYPE; + u2p_set_word0(&pkt.fixed, 0, 0); + // DSP RX will fill in timestamp + + memcpy_wa(buffer_ram(DSP_RX_BUF_0), &pkt, sizeof(pkt)); + memcpy_wa(buffer_ram(DSP_RX_BUF_1), &pkt, sizeof(pkt)); + + + if (FW_SETS_SEQNO) + fw_seqno = 0; + + streaming_items_per_frame = p->items_per_frame; + restart_streaming(); +} + + +void +stop_rx_cmd(void) +{ + streaming_p = false; + dsp_rx_regs->clear_state = 1; // flush cmd queue + bp_clear_buf(DSP_RX_BUF_0); + bp_clear_buf(DSP_RX_BUF_1); +} + + +static void +setup_tx() +{ + dsp_tx_regs->clear_state = 1; + bp_clear_buf(DSP_TX_BUF_0); + bp_clear_buf(DSP_TX_BUF_1); + + int tx_scale = 256; + int interp = 32; + + // setup some defaults + + dsp_tx_regs->freq = 0; + dsp_tx_regs->scale_iq = (tx_scale << 16) | tx_scale; + dsp_tx_regs->interp_rate = interp; +} + + +#if (FW_SETS_SEQNO) +/* + * Debugging ONLY. This will be handled by the tx_protocol_engine. + * + * This is called when the DSP Rx chain has filled in a packet. + * We set and increment the seqno, then return false, indicating + * that we didn't handle the packet. A bit of a kludge + * but it should work. + */ +bool +fw_sets_seqno_inspector(dbsm_t *sm, int buf_this) // returns false +{ + uint32_t *p = buffer_ram(buf_this); + uint32_t seqno = fw_seqno++; + + // KLUDGE all kinds of nasty magic numbers and embedded knowledge + uint32_t t = p[4]; + t = (t & 0xffff00ff) | ((seqno & 0xff) << 8); + p[4] = t; + + // queue up another rx command when required + if (streaming_p && --streaming_frame_count == 0){ + streaming_frame_count = FRAMES_PER_CMD; + dsp_rx_regs->rx_time = 0; + } + + return false; // we didn't handle the packet +} +#endif + + +inline static void +buffer_irq_handler(unsigned irq) +{ + uint32_t status = buffer_pool_status->status; + + dbsm_process_status(&dsp_tx_sm, status); + dbsm_process_status(&dsp_rx_sm, status); +} + +int +main(void) +{ + u2_init(); + + putstr("\nTxRx\n"); + print_mac_addr(ethernet_mac_addr()->addr); + newline(); + + ethernet_register_link_changed_callback(link_changed_callback); + ethernet_init(); + + +#if 0 + // make bit 15 of Tx gpio's be a s/w output + hal_gpio_set_sel(GPIO_TX_BANK, 15, 's'); + hal_gpio_set_ddr(GPIO_TX_BANK, 0x8000, 0x8000); +#endif + + output_regs->debug_mux_ctrl = 1; +#if 0 + hal_gpio_set_sels(GPIO_TX_BANK, "1111111111111111"); + hal_gpio_set_sels(GPIO_RX_BANK, "1111111111111111"); + hal_gpio_set_ddr(GPIO_TX_BANK, 0xffff, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0xffff, 0xffff); +#endif + + + // initialize double buffering state machine for ethernet -> DSP Tx + + dbsm_init(&dsp_tx_sm, DSP_TX_BUF_0, + &dsp_tx_recv_args, &dsp_tx_send_args, + eth_pkt_inspector); + + + // initialize double buffering state machine for DSP RX -> Ethernet + + if (FW_SETS_SEQNO){ + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + fw_sets_seqno_inspector); + } + else { + dbsm_init(&dsp_rx_sm, DSP_RX_BUF_0, + &dsp_rx_recv_args, &dsp_rx_send_args, + dbsm_nop_inspector); + } + + // tell app_common that this dbsm could be sending to the ethernet + ac_could_be_sending_to_eth = &dsp_rx_sm; + + + // program tx registers + setup_tx(); + + // kick off the state machine + dbsm_start(&dsp_tx_sm); + + //int which = 0; + + while(1){ + // hal_gpio_write(GPIO_TX_BANK, which, 0x8000); + // which ^= 0x8000; + + buffer_irq_handler(0); + + int pending = pic_regs->pending; // poll for under or overrun + + if (pending & PIC_UNDERRUN_INT){ + dbsm_handle_tx_underrun(&dsp_tx_sm); + pic_regs->pending = PIC_UNDERRUN_INT; // clear interrupt + putchar('U'); + } + + if (pending & PIC_OVERRUN_INT){ + dbsm_handle_rx_overrun(&dsp_rx_sm); + pic_regs->pending = PIC_OVERRUN_INT; // clear pending interrupt + + // FIXME Figure out how to handle this robustly. + // Any buffers that are emptying should be allowed to drain... + + if (streaming_p){ + // restart_streaming(); + // FIXME report error + } + else { + // FIXME report error + } + putchar('O'); + } + } +} diff --git a/usrp2/firmware/bootstrap b/usrp2/firmware/bootstrap new file mode 100755 index 00000000..4106d474 --- /dev/null +++ b/usrp2/firmware/bootstrap @@ -0,0 +1,30 @@ +#!/bin/sh + +# Copyright 2001,2005 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. + + +rm -fr config.cache autom4te*.cache + +aclocal -I config +autoconf +autoheader +# libtoolize --automake +automake --add-missing -Wno-portability + diff --git a/usrp2/firmware/config.guess b/usrp2/firmware/config.guess new file mode 100644 index 00000000..278f9e9e --- /dev/null +++ b/usrp2/firmware/config.guess @@ -0,0 +1,1516 @@ +#! /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 Free Software Foundation, +# Inc. + +timestamp='2007-07-22' + +# 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 +# the Free Software Foundation; either version 2 of the License, 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 program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +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 +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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +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 +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +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" 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) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + 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 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa:Linux:*:*) + echo xtensa-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/usrp2/firmware/config.h.in b/usrp2/firmware/config.h.in new file mode 100644 index 00000000..3559d07e --- /dev/null +++ b/usrp2/firmware/config.h.in @@ -0,0 +1,76 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_BYTESWAP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif diff --git a/usrp2/firmware/config.sub b/usrp2/firmware/config.sub new file mode 100644 index 00000000..1761d8bd --- /dev/null +++ b/usrp2/firmware/config.sub @@ -0,0 +1,1626 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, +# Inc. + +timestamp='2007-06-28' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 +# the Free Software Foundation; either version 2 of the License, 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 program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +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." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# 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-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/usrp2/firmware/config/Makefile.am b/usrp2/firmware/config/Makefile.am new file mode 100644 index 00000000..06b15c68 --- /dev/null +++ b/usrp2/firmware/config/Makefile.am @@ -0,0 +1,33 @@ +# +# Copyright 2008 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +include $(top_srcdir)/Makefile.common + +# Install m4 macros in this directory +m4datadir = $(datadir)/aclocal + +# List your m4 macros here +m4macros = \ + grc_build.m4 \ + grc_usrp2_stub.m4 \ + grc_usrp2_firmware.m4 + +EXTRA_DIST = $(m4macros) diff --git a/usrp2/firmware/config/Makefile.in b/usrp2/firmware/config/Makefile.in new file mode 100644 index 00000000..42b6d9c1 --- /dev/null +++ b/usrp2/firmware/config/Makefile.in @@ -0,0 +1,400 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 -*- +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = config +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_usrp2_firmware.m4 \ + $(top_srcdir)/config/grc_usrp2_stub.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DATA = $(noinst_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MB_GCC = @MB_GCC@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +build_dirs = @build_dirs@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp2_firmware_INCLUDEDIR = @usrp2_firmware_INCLUDEDIR@ +usrp2_firmware_INCLUDES = @usrp2_firmware_INCLUDES@ +usrp2_firmware_LA = @usrp2_firmware_LA@ +usrp2_firmware_LDFLAG = @usrp2_firmware_LDFLAG@ +usrp2_firmware_LIBDIRPATH = @usrp2_firmware_LIBDIRPATH@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +STD_INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib + +#HAL_IO = -DHAL_IO_USES_DBOARD_PINS +HAL_IO = -DHAL_IO_USES_UART +AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES) +STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float +AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift +#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384 + +#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024 +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) +AM_LDFLAGS = -Wl,-Map -Wl,$@.map -Wl,-defsym -Wl,_STACK_SIZE=3072 +BINS = $(noinst_PROGRAMS:=.bin) +ROMS = $(noinst_PROGRAMS:=.rom) +DUMPS = $(noinst_PROGRAMS:=.dump) +noinst_DATA = $(BINS) $(ROMS) $(DUMPS) +CLEANFILES = $(ROMS) $(DUMPS) $(BINS) + +# Install m4 macros in this directory +m4datadir = $(datadir)/aclocal + +# List your m4 macros here +m4macros = \ + grc_build.m4 \ + grc_usrp2_stub.m4 \ + grc_usrp2_firmware.m4 + +EXTRA_DIST = $(m4macros) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu config/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu config/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am + +#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048 + +%.bin : % + mb-objcopy -O binary $< $@ + +%.dump : % + mb-objdump -DSC $< > $@ + +%.rom : %.bin + hexdump -v -e'1/1 "%.2X\n"' $< > $@ + +.PRECIOUS : %.bin +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/firmware/config/grc_build.m4 b/usrp2/firmware/config/grc_build.m4 new file mode 100644 index 00000000..bf33d0da --- /dev/null +++ b/usrp2/firmware/config/grc_build.m4 @@ -0,0 +1,287 @@ +dnl Copyright 2006,2008 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 Create --enable-foo argument for named component, create variables as needed +dnl $1 is component name +AC_DEFUN([GRC_ENABLE], [ + _GRC_ENABLE($1,m4_bpatsubst($1,-,_)) +]) +dnl $2 is the '_'d component name +dnl on exit variable enable_$2 will be set to [yes|no]; +dnl passed will be [yes|no] (same as enable_$2) + +AC_DEFUN([_GRC_ENABLE],[ + passed=yes + AC_ARG_ENABLE([$1], + AC_HELP_STRING([--enable-$1], + [Stop if $1 fails configuration]), + [],[ + [enable_]$2=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + ]) +]) +dnl Component specific configuration +dnl The order of the GR_ macros determines the order of compilation +dnl For -any- checks on $enable_all_components +dnl use the following guildlines: +dnl yes : --enable-all-components was specified, so error out if any +dnl components do not pass configuration checks. +dnl no : --disable-all-components was specified, so try to build the +dnl --enable'd components, and error out if any do not pass +dnl configuration checks. +dnl "" : this option was not specified on the command line; try to +dnl build all components that are not --with'd, but don't +dnl error out if any component does not pass configuration checks. +dnl +dnl For each --enable-foo component, if that flag is not specified on +dnl the command line, the related variable $enable_foo will be set to +dnl $enable_all_components . + +dnl Create --with-foo argument for named compoment, create variables as needed +dnl $1 is component name +dnl $2 is what to do on success +dnl $3 is the PKG_CONFIG name; if not given, then $1 +AC_DEFUN([GRC_WITH], [ + if test [x]$3 = x; then + pc_comp_name="$1" + else + pc_comp_name="$3" + fi + _GRC_WITH($1,[$2],${pc_comp_name},m4_bpatsubst($1,-,_)) +]) +dnl $3 is the pkg-config component name +dnl $4 is the '_'d component name +dnl on exit variable passed will be [yes|no|with]: +dnl yes: if --enable-$1 and/or --enable-all-components was specified, +dnl but --with was not; +dnl with: if --with-$1 was specified, and passed checks; +dnl no: all other conditions +AC_DEFUN([_GRC_WITH],[ + AC_ARG_WITH([$1], + AC_HELP_STRING([--with-$1@<:@=PATH@:>@], + [Use package $1 if installed in PATH (if specified) or PKG_CONFIG_PATH (if PATH not specified); stop if $1 not found]), + [if test "x$withval" != "xyes"; then + [with_]$4[_val]=$withval + [with_]$4=yes + fi], + []) + if test x$[with_]$4 = xyes; then + if test x$[enable_]$4 = xyes; then + AC_MSG_ERROR([Component $1: Cannot use both --enable and --with]) + else + _GRC_WITH_PKG_CONFIG_CHECK($1,$3,$4) + ifelse([$2], , :, [$2]) + fi + fi +]) + +dnl Use 'pkgconfig' to check for a package +dnl $1 is the --with component name +dnl $2 is the pkg-config component name, if provided; otherwise use $1 for this +dnl on success, resulting INCLUDES, INCLUDEDIR, LA, and LIBDIRPATH variables +dnl will be set; on failure, will exit with an error. +AC_DEFUN([GRC_WITH_PKG_CONFIG_CHECK], [ + if test [x]$2 = x; then + pc_comp_name="$1" + else + pc_comp_name="$2" + fi + _GRC_WITH_PKG_CONFIG_CHECK($1,${pc_comp_name},m4_bpatsubst($1,-,_)) +]) +dnl $2 is the pkg-config component name +dnl $3 is the '_'d component name +AC_DEFUN([_GRC_WITH_PKG_CONFIG_CHECK],[ + dnl save PKG_CONFIG_PATH, restore at the end + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + + dnl create the PKG_CONFIG_PATH, via this component arg, if provided; + dnl else use the environment PKG_CONFIG_PATH + l_PKG_CONFIG_PATH=$[with_]$3[_val] + if test "x$l_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH + + dnl verify that the file exists; if not, no point in continuing + if ! test -r ${l_PKG_CONFIG_PATH}/$2[.pc]; then + AC_MSG_ERROR([Component $1: PKGCONFIG cannot find info for $2, with provided PKG_CONFIG_PATH = @<:@ $l_PKG_CONFIG_PATH @:>@ .]) + fi + fi + + dnl do the check; error out if not found + PKG_CHECK_EXISTS($2, [passed=with; check1=yes], [ + check1=no + dnl pkg-config returned an error; this might be that the .pc + dnl file was not valid, or the Requires: were not met. + dnl If the arg was provided and the input PKG_CONFIG_PATH , then try + dnl again appending the whole PKG_CONFIG_PATH. + if test "x$l_PKG_CONFIG_PATH" != "x"; then + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + PKG_CHECK_EXISTS($2, passed=with, passed=no) + fi + fi + if test $passed != with; then + AC_MSG_ERROR([Component $1: PKGCONFIG cannot find info for $2, with PKG_CONFIG_PATH = @<:@ $PKG_CONFIG_PATH @:>@ .]) + fi + dnl pkg-config Requires are now met; save the new PKG_CONFIG_PATH + s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH + ]) + + dnl if PKG_CHECK_EXISTS returned, then this component's .pc file was + dnl found in the provided 'arg' PKG_CONFIG_PATH; + dnl retrieve various parameters + $3[_INCLUDES]=`$PKG_CONFIG --cflags-only-I $2` + $3[_LA]=`$PKG_CONFIG --libs $2` + $3[_INCLUDEDIR]=`$PKG_CONFIG --variable=includedir $2` + + if test x$check1 = xyes; then + dnl prepend the args PKG_CONFIG_PATH to the saved one, if the + dnl saved version was not empty + if test "x$s_PKG_CONFIG_PATH" != "x"; then + export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH} + fi + fi +]) + +dnl Check the $prefix versus the --with libdirpath for this component +dnl $1 is the prefix +dnl $2 is the --with component name +dnl $3 is the --with component library path +AC_DEFUN([GRC_PREFIX_LDFLAGS],[ + $2[_LIBDIRPATH]=$3 + dnl create LDFLAGS for this --with, if different from the provided $prefix + if test [x]$1[/lib] != [x]$3; then + $2[_LDFLAG]=[-L]$3 + else + $2[_LDFLAG]= + fi +]) + +dnl Check to make sure this dependency is fulfilled for this component +dnl $1 is the component's name +dnl $2 is the component dependency name +dnl On input and exit, $passed will be: +dnl with : if --with passed muster +dnl yes : if --enable passed muster +dnl no : otherwise +dnl If trying --with, will error-out if any dependency was not --with'd +AC_DEFUN([GRC_CHECK_DEPENDENCY],[ +dnl f0=[enable_]m4_bpatsubst($1,-,_) +dnl f1=[$enable_]m4_bpatsubst($1,-,_) +dnl echo +dnl echo "$1 : Checking Dependency $2" +dnl echo "$1 : enable_all_components is '$enable_all_components'" +dnl echo "$1 : $f0 is '$f1'" +dnl echo "$1 : passed is '$passed'" +dnl echo + if test $passed != no; then + if test $passed = yes; then + dnl make sure this dependency was not skipped + if test [x$]m4_bpatsubst($2,-,_)[_skipped] = xyes; then + AC_MSG_RESULT([Component $1 requires $2, which is not being built or specified via pre-installed files.]) + passed=no + fi + else + dnl make sure this dependency was --with'd only; not --enable'd + if test [x$]m4_bpatsubst($2,-,_)[_with] = xno; then + AC_MSG_ERROR([Component $1 requires $2 to be included as --with-$1@<:@=arg@:>@]) + fi + fi + fi +]) + +dnl Check to make sure GUILE is available +dnl $1 is the component name +AC_DEFUN([GRC_CHECK_GUILE],[ + if test x"$GUILE" = x; then + AC_MSG_RESULT([Component $1 requires guile, which was not found.]) + passed=no + fi +]) + +dnl Add the specified "with" list; clear the provided variable +dnl $1 is the component name +dnl $2 is the path list name suffix +dnl $3 is the separator (for paths, ":"; for includes " ") +AC_DEFUN([GRC_ADD_TO_LIST],[ + if test "x${$1[_]$2}" != "x"; then + if test "x$[with_]$2" = "x"; then + [with_]$2="${$1[_]$2}" + else + [with_]$2="${$1[_]$2}"$3"$[with_]$2" + fi + $1[_]$2= + fi +]) + +dnl Conditionally build named component. +dnl $1 is component name +dnl $2 is executed if configuration passes and build is desired +AC_DEFUN([GRC_BUILD_CONDITIONAL],[ + _GRC_BUILD_CONDITIONAL($1, $2, m4_bpatsubst($1,-,_)) +]) +dnl $3=m4_bpatsubst($1,-,_) +dnl Use $passed=no to indicate configuration failure; +dnl Use $passed=with to indicate the use of pre-installed libraries and headers; +dnl Any other value of $passed, including blank, assumes success; +dnl Defines $3_with=[yes|no] depending on if $passed=with or not (respectively) +dnl Defines $3_skipped=[yes|no] depending on if $passed=no or not (respectively) +AC_DEFUN([_GRC_BUILD_CONDITIONAL],[ + $3[_with]=no + if test $passed = no; then + if test x$[enable_]$3 = xyes; then + AC_MSG_ERROR([Component $1 has errors; stopping.]) + else + AC_MSG_RESULT([Not building component $1.]) + fi + else + if test $passed = with; then + with_dirs="$with_dirs $1" + GRC_ADD_TO_LIST($3, INCLUDES, " ") + GRC_ADD_TO_LIST($3, SWIG_INCLUDES, " ") + GRC_ADD_TO_LIST($3, PYDIRPATH, ":") + GRC_ADD_TO_LIST($3, SWIGDIRPATH, ":") + GRC_ADD_TO_LIST($3, LIBDIRPATH, ":") + AC_MSG_RESULT([Component $1 will be included from a pre-installed library and includes.]) + $3[_with]=yes + else + $3[_LDFLAG]= + if test x$[enable_]$3 != xno; then + ifelse([$2], , :, [$2]) + build_dirs="$build_dirs $1" + AC_MSG_RESULT([Component $1 passed configuration checks; building.]) + else + passed=no + AC_MSG_RESULT([Component $1 passed configuration checks; but not building.]) + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs $1" + $3[_skipped]=yes + else + $3[_skipped]=no + fi + AC_SUBST($3[_INCLUDES]) + AC_SUBST($3[_LA]) + AC_SUBST($3[_INCLUDEDIR]) + AC_SUBST($3[_LIBDIRPATH]) + AC_SUBST($3[_LDFLAG]) +]) diff --git a/usrp2/firmware/config/grc_usrp2_firmware.m4 b/usrp2/firmware/config/grc_usrp2_firmware.m4 new file mode 100644 index 00000000..7f1f9a79 --- /dev/null +++ b/usrp2/firmware/config/grc_usrp2_firmware.m4 @@ -0,0 +1,70 @@ +dnl Copyright 2008 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_USRP2_FIRMWARE],[ + dnl we use --enable-usrp2-firmware to enable this + GRC_ENABLE(usrp2-firmware) + + GRC_CHECK_DEPENDENCY(usrp2-firmware, usrp2) + + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AM_PROG_AS]) + AC_REQUIRE([AC_PROG_RANLIB]) + + + AC_CHECK_HEADERS(arpa/inet.h netinet/in.h byteswap.h) + AC_C_BIGENDIAN + + dnl If execution gets to here, $passed will be: + dnl with : if the --with code didn't error out + dnl yes : if the --enable code passed muster and all dependencies are met + dnl no : otherwise + if test $passed = yes; then + + dnl Only do firmware if mb-gcc can be found + AC_CHECK_PROG([MB_GCC],[mb-gcc],[yes],[no]) + if test $MB_GCC = no; then + AC_MSG_RESULT([usrp2 firmware requires mb-gcc. Not found]) + passed=no + fi + fi + if test $passed != with; then + dnl how and where to find INCLUDES and LA + dnl USRP2_INCLUDES="-I\${abs_top_srcdir}/usrp2/host/include \ + dnl -I\${abs_top_srcdir}/usrp2/firmware/include" + dnl USRP2_LA="\${abs_top_builddir}/usrp2/host/lib/libusrp2.la" + : + fi + + dnl Include the usrp2 INCLUDES and LA + dnl AC_SUBST(USRP2_INCLUDES) + dnl AC_SUBST(USRP2_LA) + + AC_CONFIG_FILES([ \ + apps/Makefile \ + include/Makefile \ + lib/Makefile \ + ]) + + dnl Slightly non-standard: we handle this with an AM_CONDITIONAL + AM_CONDITIONAL(BUILDING_USRP2_FIRMWARE, [test $passed = yes && test "$enable_usrp2_firmware" != no]) + + GRC_BUILD_CONDITIONAL(usrp2-firmware) +]) diff --git a/usrp2/firmware/config/grc_usrp2_stub.m4 b/usrp2/firmware/config/grc_usrp2_stub.m4 new file mode 100644 index 00000000..57aa86c0 --- /dev/null +++ b/usrp2/firmware/config/grc_usrp2_stub.m4 @@ -0,0 +1,23 @@ +dnl Copyright 2008 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_USRP2_STUB],[ + GRC_ENABLE(usrp2) + GRC_BUILD_CONDITIONAL(usrp2) +]) diff --git a/usrp2/firmware/configure b/usrp2/firmware/configure new file mode 100755 index 00000000..65d946a8 --- /dev/null +++ b/usrp2/firmware/configure @@ -0,0 +1,6739 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.63. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="lib/u2_init.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +LIBOBJS +with_LIBDIRPATH +with_SWIGDIRPATH +with_PYDIRPATH +with_SWIG_INCLUDES +with_INCLUDES +abs_top_builddir +abs_top_srcdir +with_dirs +skipped_dirs +build_dirs +usrp2_firmware_LDFLAG +usrp2_firmware_LIBDIRPATH +usrp2_firmware_INCLUDEDIR +usrp2_firmware_LA +usrp2_firmware_INCLUDES +BUILDING_USRP2_FIRMWARE_FALSE +BUILDING_USRP2_FIRMWARE_TRUE +MB_GCC +EGREP +GREP +RANLIB +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +usrp2_LDFLAG +usrp2_LIBDIRPATH +usrp2_INCLUDEDIR +usrp2_LA +usrp2_INCLUDES +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_all_components +enable_usrp2 +enable_usrp2_firmware +enable_dependency_tracking +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CCAS +CCASFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-all-components Build all configurable components (default), or stop on failed dependencies + + --enable-usrp2 Stop if usrp2 fails configuration + --enable-usrp2-firmware Stop if usrp2-firmware fails configuration + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.63 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers config.h" + +ac_aux_dir= +for ac_dir in . "$srcdir"/.; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in . \"$srcdir\"/." >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + + +am__api_version='1.10' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +$as_echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=usrp2-firmware + VERSION=0.0svn + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + + +# Check whether --enable-all-components was given. +if test "${enable_all_components+set}" = set; then + enableval=$enable_all_components; +fi + + +#build_dirs="config" +build_dirs= + + + + passed=yes + # Check whether --enable-usrp2 was given. +if test "${enable_usrp2+set}" = set; then + enableval=$enable_usrp2; +else + + enable_usrp2=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + +fi + + + + + + usrp2_with=no + if test $passed = no; then + if test x$enable_usrp2 = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component usrp2 has errors; stopping." >&5 +$as_echo "$as_me: error: Component usrp2 has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component usrp2." >&5 +$as_echo "Not building component usrp2." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs usrp2" + + if test "x${usrp2_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${usrp2_INCLUDES}" + else + with_INCLUDES="${usrp2_INCLUDES}"" ""$with_INCLUDES" + fi + usrp2_INCLUDES= + fi + + + if test "x${usrp2_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${usrp2_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${usrp2_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + usrp2_SWIG_INCLUDES= + fi + + + if test "x${usrp2_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${usrp2_PYDIRPATH}" + else + with_PYDIRPATH="${usrp2_PYDIRPATH}"":""$with_PYDIRPATH" + fi + usrp2_PYDIRPATH= + fi + + + if test "x${usrp2_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${usrp2_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${usrp2_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + usrp2_SWIGDIRPATH= + fi + + + if test "x${usrp2_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${usrp2_LIBDIRPATH}" + else + with_LIBDIRPATH="${usrp2_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + usrp2_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component usrp2 will be included from a pre-installed library and includes." >&5 +$as_echo "Component usrp2 will be included from a pre-installed library and includes." >&6; } + usrp2_with=yes + else + usrp2_LDFLAG= + if test x$enable_usrp2 != xno; then + : + build_dirs="$build_dirs usrp2" + { $as_echo "$as_me:$LINENO: result: Component usrp2 passed configuration checks; building." >&5 +$as_echo "Component usrp2 passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component usrp2 passed configuration checks; but not building." >&5 +$as_echo "Component usrp2 passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs usrp2" + usrp2_skipped=yes + else + usrp2_skipped=no + fi + + + + + + + + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + passed=yes + # Check whether --enable-usrp2-firmware was given. +if test "${enable_usrp2_firmware+set}" = set; then + enableval=$enable_usrp2_firmware; +else + + enable_usrp2_firmware=$enable_all_components + if test x$enable_all_components = xno; then + passed=no + fi + +fi + + + + + + if test $passed != no; then + if test $passed = yes; then + if test x$usrp2_skipped = xyes; then + { $as_echo "$as_me:$LINENO: result: Component usrp2-firmware requires usrp2, which is not being built or specified via pre-installed files." >&5 +$as_echo "Component usrp2-firmware requires usrp2, which is not being built or specified via pre-installed files." >&6; } + passed=no + fi + else + if test x$usrp2_with = xno; then + { { $as_echo "$as_me:$LINENO: error: Component usrp2-firmware requires usrp2 to be included as --with-usrp2-firmware[=arg]" >&5 +$as_echo "$as_me: error: Component usrp2-firmware requires usrp2 to be included as --with-usrp2-firmware[=arg]" >&2;} + { (exit 1); exit 1; }; } + fi + fi + fi + + + + + + + + + + + +for ac_header in arpa/inet.h netinet/in.h byteswap.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + # Check for potential -arch flags. It is not universal unless + # there are some -arch flags. Note that *ppc* also matches + # ppc64. This check is also rather less than ideal. + case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( + *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; + esac +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + cat >>confdefs.h <<\_ACEOF +#define WORDS_BIGENDIAN 1 +_ACEOF +;; #( + no) + ;; #( + universal) + +cat >>confdefs.h <<\_ACEOF +#define AC_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + ;; #( + *) + { { $as_echo "$as_me:$LINENO: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +$as_echo "$as_me: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; + esac + + + if test $passed = yes; then + + # Extract the first word of "mb-gcc", so it can be a program name with args. +set dummy mb-gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_MB_GCC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$MB_GCC"; then + ac_cv_prog_MB_GCC="$MB_GCC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MB_GCC="yes" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_MB_GCC" && ac_cv_prog_MB_GCC="no" +fi +fi +MB_GCC=$ac_cv_prog_MB_GCC +if test -n "$MB_GCC"; then + { $as_echo "$as_me:$LINENO: result: $MB_GCC" >&5 +$as_echo "$MB_GCC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test $MB_GCC = no; then + { $as_echo "$as_me:$LINENO: result: usrp2 firmware requires mb-gcc. Not found" >&5 +$as_echo "usrp2 firmware requires mb-gcc. Not found" >&6; } + passed=no + fi + fi + if test $passed != with; then + : + fi + + + ac_config_files="$ac_config_files apps/Makefile include/Makefile lib/Makefile" + + + if test $passed = yes && test "$enable_usrp2_firmware" != no; then + BUILDING_USRP2_FIRMWARE_TRUE= + BUILDING_USRP2_FIRMWARE_FALSE='#' +else + BUILDING_USRP2_FIRMWARE_TRUE='#' + BUILDING_USRP2_FIRMWARE_FALSE= +fi + + + + + usrp2_firmware_with=no + if test $passed = no; then + if test x$enable_usrp2_firmware = xyes; then + { { $as_echo "$as_me:$LINENO: error: Component usrp2-firmware has errors; stopping." >&5 +$as_echo "$as_me: error: Component usrp2-firmware has errors; stopping." >&2;} + { (exit 1); exit 1; }; } + else + { $as_echo "$as_me:$LINENO: result: Not building component usrp2-firmware." >&5 +$as_echo "Not building component usrp2-firmware." >&6; } + fi + else + if test $passed = with; then + with_dirs="$with_dirs usrp2-firmware" + + if test "x${usrp2_firmware_INCLUDES}" != "x"; then + if test "x$with_INCLUDES" = "x"; then + with_INCLUDES="${usrp2_firmware_INCLUDES}" + else + with_INCLUDES="${usrp2_firmware_INCLUDES}"" ""$with_INCLUDES" + fi + usrp2_firmware_INCLUDES= + fi + + + if test "x${usrp2_firmware_SWIG_INCLUDES}" != "x"; then + if test "x$with_SWIG_INCLUDES" = "x"; then + with_SWIG_INCLUDES="${usrp2_firmware_SWIG_INCLUDES}" + else + with_SWIG_INCLUDES="${usrp2_firmware_SWIG_INCLUDES}"" ""$with_SWIG_INCLUDES" + fi + usrp2_firmware_SWIG_INCLUDES= + fi + + + if test "x${usrp2_firmware_PYDIRPATH}" != "x"; then + if test "x$with_PYDIRPATH" = "x"; then + with_PYDIRPATH="${usrp2_firmware_PYDIRPATH}" + else + with_PYDIRPATH="${usrp2_firmware_PYDIRPATH}"":""$with_PYDIRPATH" + fi + usrp2_firmware_PYDIRPATH= + fi + + + if test "x${usrp2_firmware_SWIGDIRPATH}" != "x"; then + if test "x$with_SWIGDIRPATH" = "x"; then + with_SWIGDIRPATH="${usrp2_firmware_SWIGDIRPATH}" + else + with_SWIGDIRPATH="${usrp2_firmware_SWIGDIRPATH}"":""$with_SWIGDIRPATH" + fi + usrp2_firmware_SWIGDIRPATH= + fi + + + if test "x${usrp2_firmware_LIBDIRPATH}" != "x"; then + if test "x$with_LIBDIRPATH" = "x"; then + with_LIBDIRPATH="${usrp2_firmware_LIBDIRPATH}" + else + with_LIBDIRPATH="${usrp2_firmware_LIBDIRPATH}"":""$with_LIBDIRPATH" + fi + usrp2_firmware_LIBDIRPATH= + fi + + { $as_echo "$as_me:$LINENO: result: Component usrp2-firmware will be included from a pre-installed library and includes." >&5 +$as_echo "Component usrp2-firmware will be included from a pre-installed library and includes." >&6; } + usrp2_firmware_with=yes + else + usrp2_firmware_LDFLAG= + if test x$enable_usrp2_firmware != xno; then + : + build_dirs="$build_dirs usrp2-firmware" + { $as_echo "$as_me:$LINENO: result: Component usrp2-firmware passed configuration checks; building." >&5 +$as_echo "Component usrp2-firmware passed configuration checks; building." >&6; } + else + passed=no + { $as_echo "$as_me:$LINENO: result: Component usrp2-firmware passed configuration checks; but not building." >&5 +$as_echo "Component usrp2-firmware passed configuration checks; but not building." >&6; } + fi + fi + fi + if test $passed = no; then + skipped_dirs="$skipped_dirs usrp2-firmware" + usrp2_firmware_skipped=yes + else + usrp2_firmware_skipped=no + fi + + + + + + + + + + +# Each component is now either to be built, was skipped, will be +# included from pre-installed libraries and includes, or failed +# dependencies. +build_dirs=$build_dirs + +skipped_dirs=$skipped_dirs + +with_dirs=$with_dirs + + +# fix for older autotools that don't define "abs_top_YYY" by default + + + +# 'with' variables - the pre-installed libraries, includes, and paths +# - must always come last in the lists, so they require special +# treatment. + + + + + + +ac_config_files="$ac_config_files Makefile config/Makefile" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +if test -z "${BUILDING_USRP2_FIRMWARE_TRUE}" && test -z "${BUILDING_USRP2_FIRMWARE_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"BUILDING_USRP2_FIRMWARE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"BUILDING_USRP2_FIRMWARE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "apps/Makefile") CONFIG_FILES="$CONFIG_FILES apps/Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "config/Makefile") CONFIG_FILES="$CONFIG_FILES config/Makefile" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# +# trim usrp2 out of dirs; we only use it as a controlling dependency +# +t= +for d in $build_dirs +do + if test $d != usrp2; then + if test -z "$t"; then + t="$d" + else + t="$t $d" + fi + fi +done +build_dirs=$t + +t= +for d in $skipped_dirs +do + if test $d != usrp2; then + if test -z "$t"; then + t="$d" + else + t="$t $d" + fi + fi +done +skipped_dirs=$t + +t= +for d in $with_dirs +do + if test $d != usrp2; then + if test -z "$t"; then + t="$d" + else + t="$t $d" + fi + fi +done +with_dirs=$t + +if test "$build_dirs" != ""; then + echo + echo "*********************************************************************" + echo The following GNU Radio components have been successfully configured: + echo + for dir in $build_dirs + do + echo $dir + done + echo + echo You my now run the 'make' command to build these components. + echo +fi + +if test "$skipped_dirs" != ""; then + echo "*********************************************************************" + echo The following components were skipped either because you asked not + echo to build them or they didn\'t pass configuration checks: + echo + for dir in $skipped_dirs + do + echo $dir + done + echo + echo These components will not be built. + echo +fi +if test "$with_dirs" != ""; then + echo "*********************************************************************" + echo The following components will be included from pre-installed + echo libraries and includes: + echo + for dir in $with_dirs + do + echo $dir + done + echo + echo These components will not be built. + echo +fi diff --git a/usrp2/firmware/configure.ac b/usrp2/firmware/configure.ac new file mode 100644 index 00000000..f3ff0cd8 --- /dev/null +++ b/usrp2/firmware/configure.ac @@ -0,0 +1,162 @@ +dnl +dnl Copyright 2007,2008 Free Software Foundation, Inc. +dnl +dnl This program 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 of the License, or +dnl (at your option) any later version. +dnl +dnl This program 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 this program. If not, see . +dnl + +AC_INIT +AC_PREREQ(2.57) +AM_CONFIG_HEADER(config.h) +AC_CONFIG_AUX_DIR([.]) +AC_CONFIG_SRCDIR([lib/u2_init.c]) + +AM_INIT_AUTOMAKE(usrp2-firmware,0.0svn) + +dnl Component specific configuration +dnl The order of the GR_ macros determines the order of compilation +dnl For -any- checks on $enable_all_components +dnl use the following guidelines: +dnl yes : --enable-all-components was specified, so error out if any +dnl components do not pass configuration checks. +dnl no : --disable-all-components was specified, so try to build the +dnl --enable'd components, and error out if any do not pass +dnl configuration checks. +dnl "" : this option was not specified on the command line; try to +dnl build all components that are not --with'd, but don't +dnl error out if any component does not pass configuration checks. +dnl +dnl For each --enable-foo component, if that flag is not specified on +dnl the command line, the related variable $enable_foo will be set to +dnl $enable_all_components . + +AC_ARG_ENABLE( + [all-components], + [ --enable-all-components Build all configurable components (default), or stop on failed dependencies] +) + +#build_dirs="config" +build_dirs= +GRC_USRP2_STUB +GRC_USRP2_FIRMWARE + + +# Each component is now either to be built, was skipped, will be +# included from pre-installed libraries and includes, or failed +# dependencies. +AC_SUBST([build_dirs], [$build_dirs]) +AC_SUBST([skipped_dirs], [$skipped_dirs]) +AC_SUBST([with_dirs], [$with_dirs]) + +# fix for older autotools that don't define "abs_top_YYY" by default +AC_SUBST(abs_top_srcdir) +AC_SUBST(abs_top_builddir) + +# 'with' variables - the pre-installed libraries, includes, and paths +# - must always come last in the lists, so they require special +# treatment. +AC_SUBST(with_INCLUDES) +AC_SUBST(with_SWIG_INCLUDES) +AC_SUBST(with_PYDIRPATH) +AC_SUBST(with_SWIGDIRPATH) +AC_SUBST(with_LIBDIRPATH) + +AC_CONFIG_FILES([ \ + Makefile \ + config/Makefile \ +]) + +AC_OUTPUT + +# +# trim usrp2 out of dirs; we only use it as a controlling dependency +# +t= +for d in $build_dirs +do + if test $d != usrp2; then + if test -z "$t"; then + t="$d" + else + t="$t $d" + fi + fi +done +build_dirs=$t + +t= +for d in $skipped_dirs +do + if test $d != usrp2; then + if test -z "$t"; then + t="$d" + else + t="$t $d" + fi + fi +done +skipped_dirs=$t + +t= +for d in $with_dirs +do + if test $d != usrp2; then + if test -z "$t"; then + t="$d" + else + t="$t $d" + fi + fi +done +with_dirs=$t + +if test "$build_dirs" != ""; then + echo + echo "*********************************************************************" + echo The following GNU Radio components have been successfully configured: + echo + for dir in $build_dirs + do + echo $dir + done + echo + echo You my now run the 'make' command to build these components. + echo +fi + +if test "$skipped_dirs" != ""; then + echo "*********************************************************************" + echo The following components were skipped either because you asked not + echo to build them or they didn\'t pass configuration checks: + echo + for dir in $skipped_dirs + do + echo $dir + done + echo + echo These components will not be built. + echo +fi +if test "$with_dirs" != ""; then + echo "*********************************************************************" + echo The following components will be included from pre-installed + echo libraries and includes: + echo + for dir in $with_dirs + do + echo $dir + done + echo + echo These components will not be built. + echo +fi diff --git a/usrp2/firmware/configure.gnu b/usrp2/firmware/configure.gnu new file mode 100755 index 00000000..60d6d2a7 --- /dev/null +++ b/usrp2/firmware/configure.gnu @@ -0,0 +1,34 @@ +#!/bin/sh +# +# wrapper to setup cross-compilation of firmware +# + +for v in CC CPP CXX AS AR NM RANLIB STRIP F77 CFLAGS CXXFLAGS CPPFLAGS LDFLAGS +do + unset $v +done + +args= +for t in "$@" +do + case "$t" in + (CC=*) ;; + (CPP=*) ;; + (CXX=*) ;; + (AR=*) ;; + (AS=*) ;; + (NM=*) ;; + (RANLIB=*) ;; + (STRIP=*) ;; + (F77=*) ;; + (FFLAGS=*) ;; + (CFLAGS=*) ;; + (CXXFLAGS=*) ;; + (CPPFLAGS=*) ;; + (LDFLAGS=*) ;; + (*) args="$args $t" ;; + esac +done + + +`dirname $0`/configure CFLAGS='-O2' $args --host=mb diff --git a/usrp2/firmware/depcomp b/usrp2/firmware/depcomp new file mode 100755 index 00000000..e5f9736c --- /dev/null +++ b/usrp2/firmware/depcomp @@ -0,0 +1,589 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2007-03-29.01 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 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 program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/usrp2/firmware/include/Makefile.am b/usrp2/firmware/include/Makefile.am new file mode 100644 index 00000000..a5e33919 --- /dev/null +++ b/usrp2/firmware/include/Makefile.am @@ -0,0 +1,27 @@ +# +# Copyright 2008 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 3 of the License, 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 program. If not, see . +# + +include $(top_srcdir)/Makefile.common + +noinst_HEADERS = \ + usrp2_cdefs.h \ + usrp2_eth_packet.h \ + usrp2_fpga_regs.h \ + usrp2_i2c_addr.h \ + usrp2_mac_addr.h \ + usrp2_mimo_config.h \ + usrp2_types.h diff --git a/usrp2/firmware/include/Makefile.in b/usrp2/firmware/include/Makefile.in new file mode 100644 index 00000000..47c0fc1f --- /dev/null +++ b/usrp2/firmware/include/Makefile.in @@ -0,0 +1,440 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_usrp2_firmware.m4 \ + $(top_srcdir)/config/grc_usrp2_stub.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DATA = $(noinst_DATA) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MB_GCC = @MB_GCC@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +build_dirs = @build_dirs@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp2_firmware_INCLUDEDIR = @usrp2_firmware_INCLUDEDIR@ +usrp2_firmware_INCLUDES = @usrp2_firmware_INCLUDES@ +usrp2_firmware_LA = @usrp2_firmware_LA@ +usrp2_firmware_LDFLAG = @usrp2_firmware_LDFLAG@ +usrp2_firmware_LIBDIRPATH = @usrp2_firmware_LIBDIRPATH@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +STD_INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib + +#HAL_IO = -DHAL_IO_USES_DBOARD_PINS +HAL_IO = -DHAL_IO_USES_UART +AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES) +STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float +AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift +#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384 + +#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024 +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) +AM_LDFLAGS = -Wl,-Map -Wl,$@.map -Wl,-defsym -Wl,_STACK_SIZE=3072 +BINS = $(noinst_PROGRAMS:=.bin) +ROMS = $(noinst_PROGRAMS:=.rom) +DUMPS = $(noinst_PROGRAMS:=.dump) +noinst_DATA = $(BINS) $(ROMS) $(DUMPS) +CLEANFILES = $(ROMS) $(DUMPS) $(BINS) +noinst_HEADERS = \ + usrp2_cdefs.h \ + usrp2_eth_packet.h \ + usrp2_fpga_regs.h \ + usrp2_i2c_addr.h \ + usrp2_mac_addr.h \ + usrp2_mimo_config.h \ + usrp2_types.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu include/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + ctags distclean distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags uninstall uninstall-am + +#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048 + +%.bin : % + mb-objcopy -O binary $< $@ + +%.dump : % + mb-objdump -DSC $< > $@ + +%.rom : %.bin + hexdump -v -e'1/1 "%.2X\n"' $< > $@ + +.PRECIOUS : %.bin +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/firmware/include/usrp2_cdefs.h b/usrp2/firmware/include/usrp2_cdefs.h new file mode 100644 index 00000000..71395cda --- /dev/null +++ b/usrp2/firmware/include/usrp2_cdefs.h @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_USRP2_CDEFS_H +#define INCLUDED_USRP2_CDEFS_H + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __U2_BEGIN_DECLS extern "C" { +# define __U2_END_DECLS } +#else +# define __U2_BEGIN_DECLS +# define __U2_END_DECLS +#endif + +#endif /* INCLUDED_USRP2_CDEFS_H */ diff --git a/usrp2/firmware/include/usrp2_eth_packet.h b/usrp2/firmware/include/usrp2_eth_packet.h new file mode 100644 index 00000000..b0123c58 --- /dev/null +++ b/usrp2/firmware/include/usrp2_eth_packet.h @@ -0,0 +1,495 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_ETH_PACKET_H +#define INCLUDED_USRP2_ETH_PACKET_H + +#include "usrp2_cdefs.h" +#include "usrp2_bytesex.h" +#include "usrp2_mac_addr.h" +#include "usrp2_mimo_config.h" + +__U2_BEGIN_DECLS + +#define U2_ETHERTYPE 0xBEEF // used in our frames +#define MAC_CTRL_ETHERTYPE 0x8808 // used in PAUSE frames + +/* + * All these data structures are BIG-ENDIAN on the wire + */ + +// FIXME gcc specific. Really ought to come from compiler.h +#define _AL4 __attribute__((aligned (4))) + +/* + * \brief The classic 14-byte ethernet header + */ +typedef struct { + u2_mac_addr_t dst; + u2_mac_addr_t src; + uint16_t ethertype; +} __attribute__((packed)) u2_eth_hdr_t; + +/*! + * \brief USRP2 transport header + * + * This enables host->usrp2 flow control and dropped packet detection. + */ +typedef struct { + uint16_t flags; // MBZ, may be used for channel in future + uint16_t fifo_status; // free space in Rx fifo in 32-bit lines + uint8_t seqno; // sequence number of this packet + uint8_t ack; // sequence number of next packet expected +} __attribute__((packed)) u2_transport_hdr_t; + + +/* + * The fixed payload header of a USRP2 ethernet packet... + * + * Basically there's 1 word of flags and routing info, and 1 word + * of timestamp that specifies when the data was received, or + * when it should be transmitted. The data samples follow immediately. + * + * Transmit packets (from host to U2) + * + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Chan | mbz |I|S|E| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Timestamp | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + * Received packets (from U2 to host) + * + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Chan | mbz | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Timestamp | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * mbz == must be zero + */ + +typedef struct { + uint32_t word0; // flags etc + uint32_t timestamp; // time of rx or tx (100 MHz) +} u2_fixed_hdr_t; + + +#define U2P_CHAN_MASK 0x1f +#define U2P_CHAN_SHIFT 27 + +#define U2P_TX_IMMEDIATE 0x00000004 // send samples NOW, else at timestamp +#define U2P_TX_START_OF_BURST 0x00000002 // this frame is the start of a burst +#define U2P_TX_END_OF_BURST 0x00000001 // this frame is the end of a burst + +#define U2P_ALL_FLAGS 0x00000007 + +#define CONTROL_CHAN 0x1f + +static inline int +u2p_chan(u2_fixed_hdr_t *p) +{ + return (ntohl(p->word0) >> U2P_CHAN_SHIFT) & U2P_CHAN_MASK; +} + +inline static uint32_t +u2p_word0(u2_fixed_hdr_t *p) +{ + return ntohl(p->word0); +} + +inline static uint32_t +u2p_timestamp(u2_fixed_hdr_t *p) +{ + return ntohl(p->timestamp); +} + +inline static void +u2p_set_word0(u2_fixed_hdr_t *p, int flags, int chan) +{ + p->word0 = htonl((flags & U2P_ALL_FLAGS) + | ((chan & U2P_CHAN_MASK) << U2P_CHAN_SHIFT)); +} + +inline static void +u2p_set_timestamp(u2_fixed_hdr_t *p, uint32_t ts) +{ + p->timestamp = htonl(ts); +} + +/*! + * \brief consolidated packet: ethernet header + transport header + fixed header + */ +typedef struct { + u2_eth_hdr_t ehdr; + u2_transport_hdr_t thdr; + u2_fixed_hdr_t fixed; +} u2_eth_packet_t; + +/* + * full load of samples: + * ethernet header + transport header + fixed header + maximum number of samples. + * sizeof(u2_eth_samples_t) == 1512 + * (payload is 1498 bytes, two bytes shorter than 1500 byte MTU) + */ + +#define U2_MAX_SAMPLES 371 +#define U2_MIN_SAMPLES 9 + +typedef struct { + u2_eth_packet_t hdrs; + uint32_t samples[U2_MAX_SAMPLES]; +} u2_eth_samples_t; + +/* + * Opcodes for control channel + * + * Reply opcodes are the same as the request opcode with the OP_REPLY_BIT set (0x80). + */ +#define OP_REPLY_BIT 0x80 + +#define OP_EOP 0 // marks last subpacket in packet + +#define OP_ID 1 +#define OP_ID_REPLY (OP_ID | OP_REPLY_BIT) +#define OP_BURN_MAC_ADDR 2 +#define OP_BURN_MAC_ADDR_REPLY (OP_BURN_MAC_ADDR | OP_REPLY_BIT) +#define OP_READ_TIME 3 // What time is it? (100 MHz counter) +#define OP_READ_TIME_REPLY (OP_READ_TIME | OP_REPLY_BIT) +#define OP_CONFIG_RX_V2 4 +#define OP_CONFIG_RX_REPLY_V2 (OP_CONFIG_RX_V2 | OP_REPLY_BIT) +#define OP_CONFIG_TX_V2 5 +#define OP_CONFIG_TX_REPLY_V2 (OP_CONFIG_TX_V2 | OP_REPLY_BIT) +#define OP_START_RX_STREAMING 6 +#define OP_START_RX_STREAMING_REPLY (OP_START_RX_STREAMING | OP_REPLY_BIT) +#define OP_STOP_RX 7 +#define OP_STOP_RX_REPLY (OP_STOP_RX | OP_REPLY_BIT) +#define OP_CONFIG_MIMO 8 +#define OP_CONFIG_MIMO_REPLY (OP_CONFIG_MIMO | OP_REPLY_BIT) +#define OP_DBOARD_INFO 9 +#define OP_DBOARD_INFO_REPLY (OP_DBOARD_INFO | OP_REPLY_BIT) +#define OP_SYNC_TO_PPS 10 +#define OP_SYNC_TO_PPS_REPLY (OP_SYNC_TO_PPS | OP_REPLY_BIT) +#define OP_PEEK 11 +#define OP_PEEK_REPLY (OP_PEEK | OP_REPLY_BIT) +#define OP_POKE 12 +#define OP_POKE_REPLY (OP_POKE | OP_REPLY_BIT) +#define OP_SET_TX_LO_OFFSET 13 +#define OP_SET_TX_LO_OFFSET_REPLY (OP_SET_TX_LO_OFFSET | OP_REPLY_BIT) +#define OP_SET_RX_LO_OFFSET 14 +#define OP_SET_RX_LO_OFFSET_REPLY (OP_SET_RX_LO_OFFSET | OP_REPLY_BIT) +#define OP_RESET_DB 15 +#define OP_RESET_DB_REPLY (OP_RESET_DB | OP_REPLY_BIT) +#define OP_SYNC_EVERY_PPS 16 +#define OP_SYNC_EVERY_PPS_REPLY (OP_SYNC_EVERY_PPS | OP_REPLY_BIT) +#define OP_GPIO_SET_DDR 17 +#define OP_GPIO_SET_DDR_REPLY (OP_GPIO_SET_DDR | OP_REPLY_BIT) +#define OP_GPIO_SET_SELS 18 +#define OP_GPIO_SET_SELS_REPLY (OP_GPIO_SET_SELS | OP_REPLY_BIT) +#define OP_GPIO_READ 19 +#define OP_GPIO_READ_REPLY (OP_GPIO_READ | OP_REPLY_BIT) +#define OP_GPIO_WRITE 20 +#define OP_GPIO_WRITE_REPLY (OP_GPIO_WRITE | OP_REPLY_BIT) +#define OP_GPIO_STREAM 21 +#define OP_GPIO_STREAM_REPLY (OP_GPIO_STREAM | OP_REPLY_BIT) + +/* + * All subpackets are a multiple of 4 bytes long. + * All subpackets start with an 8-bit opcode, an 8-bit len and an 8-bit rid. + */ +#define MAX_SUBPKT_LEN 252 + +/*! + * \brief Generic request and reply packet + * + * Used by: + * OP_EOP, OP_BURN_MAC_ADDR_REPLY, OP_START_RX_STREAMING_REPLY, + * OP_STOP_RX_REPLY, OP_DBOARD_INFO, OP_SYNC_TO_PPS + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t ok; // bool +} _AL4 op_generic_t; + +/*! + * \brief Reply info from a USRP2 + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + u2_mac_addr_t addr; + uint16_t hw_rev; + uint8_t fpga_md5sum[16]; + uint8_t sw_md5sum[16]; +} _AL4 op_id_reply_t; + +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + uint32_t items_per_frame; // # of 32-bit data items; MTU=1500: [9,371] +} _AL4 op_start_rx_streaming_t; + +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + u2_mac_addr_t addr; +} _AL4 op_burn_mac_addr_t; + +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + uint32_t time; +} _AL4 op_read_time_reply_t; + + +/*! + * \brief Configure receiver + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + // bitmask indicating which of the following fields are valid + uint16_t valid; + uint16_t gain; // fxpt_db (Q9.7) + uint32_t freq_hi; // high 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t freq_lo; // low 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t decim; // desired decimation factor (NOT -1) + uint32_t scale_iq; // (scale_i << 16) | scale_q [16.0 format] +} _AL4 op_config_rx_v2_t; + +// bitmask for "valid" field. If the bit is set, there's +// meaningful data in the corresonding field. + +#define CFGV_GAIN 0x0001 // gain field is valid +#define CFGV_FREQ 0x0002 // target_freq field is valid +#define CFGV_INTERP_DECIM 0x0004 // interp or decim is valid +#define CFGV_SCALE_IQ 0x0008 // scale_iq is valid + +/*! + * \brief Reply to receiver configuration + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + + uint16_t ok; // config was successful (bool) + uint16_t inverted; // spectrum is inverted (bool) + + // RF frequency that corresponds to DC in the IF (fxpt_freq) + uint32_t baseband_freq_hi; + uint32_t baseband_freq_lo; + // DDC frequency (fxpt_freq) + uint32_t ddc_freq_hi; + uint32_t ddc_freq_lo; + // residual frequency (fxpt_freq) + uint32_t residual_freq_hi; + uint32_t residual_freq_lo; + +} _AL4 op_config_rx_reply_v2_t; + +/*! + * \brief Configure transmitter + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + + // bitmask indicating which of the following fields are valid + uint16_t valid; + uint16_t gain; // fxpt_db (Q9.7) + uint32_t freq_hi; // high 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t freq_lo; // low 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t interp; // desired interpolation factor (NOT -1) + uint32_t scale_iq; // (scale_i << 16) | scale_q [16.0 format] +} _AL4 op_config_tx_v2_t; + +/*! + * \brief Reply to configure transmitter + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + + uint16_t ok; // config was successful (bool) + uint16_t inverted; // spectrum is inverted (bool) + + // RF frequency that corresponds to DC in the IF (fxpt_freq) + uint32_t baseband_freq_hi; + uint32_t baseband_freq_lo; + // DUC frequency (fxpt_freq) + uint32_t duc_freq_hi; + uint32_t duc_freq_lo; + // residual frequency (fxpt_freq) + uint32_t residual_freq_hi; + uint32_t residual_freq_lo; + +} _AL4 op_config_tx_reply_v2_t; + +/*! + * \brief Configure MIMO clocking, etc (uses generic reply) + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t flags; // from usrp_mimo_config.h +} op_config_mimo_t; + + +/*! + * \brief High-level information about daughterboards + */ +typedef struct { + int32_t dbid; //< d'board ID (-1 none, -2 invalid eeprom) + uint32_t freq_min_hi; //< high 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t freq_min_lo; //< low 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t freq_max_hi; //< high 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t freq_max_lo; //< low 32-bits of 64-bit fxpt_freq (Q44.20) + uint16_t gain_min; //< min gain that can be set. fxpt_db (Q9.7) + uint16_t gain_max; //< max gain that can be set. fxpt_db (Q9.7) + uint16_t gain_step_size; //< fxpt_db (Q9.7) +} u2_db_info_t; + + +/*! + * \brief Reply to d'board info request + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t ok; // request was successful (bool) + + u2_db_info_t tx_db_info; + u2_db_info_t rx_db_info; +} _AL4 op_dboard_info_reply_t; + +/*! + * \brief Read from Wishbone memory + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + uint32_t addr; + uint32_t bytes; +} _AL4 op_peek_t; + +/*! + * \brief Write to Wishbone memory + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + uint32_t addr; + // Words follow here +} _AL4 op_poke_t; + +/* + * Common structure for commands with a single frequency param + * (e.g., set_*_lo_offset, set_*_bw) + */ +typedef struct { + uint8_t opcode; + uint8_t len; + uint8_t rid; + uint8_t mbz; + uint32_t freq_hi; //< high 32-bits of 64-bit fxpt_freq (Q44.20) + uint32_t freq_lo; //< low 32-bits of 64-bit fxpt_freq (Q44.20) +} _AL4 op_freq_t; + +/* + * Structures for commands in GPIO system + */ +typedef struct { + uint8_t opcode; // OP_GPIO_SET_DDR, OP_GPIO_WRITE, OP_GPIO_STREAM + uint8_t len; + uint8_t rid; + uint8_t bank; + uint16_t value; + uint16_t mask; +} _AL4 op_gpio_t; + +typedef struct { + uint8_t opcode; // OP_GPIO_SET_SELS + uint8_t len; + uint8_t rid; + uint8_t bank; + uint8_t sels[16]; +} _AL4 op_gpio_set_sels_t; + +typedef struct { + uint8_t opcode; // OP_GPIO_READ_REPLY + uint8_t len; + uint8_t rid; + uint8_t ok; + uint16_t mbz; + uint16_t value; +} _AL4 op_gpio_read_reply_t; + +/* + * ================================================================ + * union of all of subpacket types + * ================================================================ + */ +typedef union { + + op_generic_t op_generic; + op_id_reply_t op_id_reply; + op_start_rx_streaming_t op_start_rx_streaming; + op_burn_mac_addr_t op_burn_mac_addr; + op_read_time_reply_t op_read_time_reply; + op_config_rx_v2_t op_config_rx_v2; + op_config_rx_reply_v2_t op_config_rx_reply_v2; + op_config_tx_v2_t op_config_tx_v2; + op_config_tx_reply_v2_t op_config_tx_reply_v2; + op_config_mimo_t op_config_mimo; + op_peek_t op_peek; + op_poke_t op_poke; + op_freq_t op_freq; + op_gpio_t op_gpio; + op_gpio_set_sels_t op_gpio_set_sels; + op_gpio_read_reply_t op_gpio_read_reply; + +} u2_subpkt_t; + + +__U2_END_DECLS + +#endif /* INCLUDED_USRP2_ETH_PACKET_H */ diff --git a/usrp2/firmware/include/usrp2_fpga_regs.h b/usrp2/firmware/include/usrp2_fpga_regs.h new file mode 100644 index 00000000..b0f83df6 --- /dev/null +++ b/usrp2/firmware/include/usrp2_fpga_regs.h @@ -0,0 +1,80 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_FPGA_REGS_H +#define INCLUDED_USSRP2_FPGA_REGS_H + +#include "usrp2_cdefs.h" + +__U2_BEGIN_DECLS + +// ---------------------------------------------------------------- + +#define DSP_CORE_TX_BASE 128 + +// DUC center frequency tuning word (phase increment) +#define FR_TX_FREQ_0 (0 + DSP_CORE_TX_BASE) + +// I & Q output scaling, 16.0 format ((I_SCALE << 16) | Q_SCALE) +#define FR_TX_SCALE_0 (1 + DSP_CORE_TX_BASE) + +// Tx interpolation rate (set to 1 less than desired rate) +#define FR_TX_INTERP_RATE_0 (2 + DSP_CORE_TX_BASE) + +// Write 1 (actually anything) to clear tx state +#define FR_TX_CLEAR_STATE_0 (3 + DSP_CORE_TX_BASE) + +// ---------------------------------------------------------------- + +#define DSP_CORE_RX_BASE 160 + +// DDC center frequency tuning word (phase increment) +#define FR_RX_FREQ_0 (0 + DSP_CORE_RX_BASE) + +// I & Q input scaling, 16.0 format ((I_SCALE << 16) | Q_SCALE) +#define FR_RX_SCALE_0 (1 + DSP_CORE_RX_BASE) + +// Rx decimation rate (set to 1 less than desired rate) +#define FR_RX_DECIM_RATE_0 (2 + DSP_CORE_RX_BASE) + +// The next two registers concatenated are the Rx command register. +// +// Writing FR_RX_TIME_TO_RX_0 writes the concatenated value into the +// cmd queue. Thus, if you're writing both, be sure to write +// FR_RX_QTY_0 first. +// +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | Timestamp | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +#define FR_RX_TIME_TO_RX (3 + DSP_CORE_RX_BASE) + +// 23-bits 9-bits +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | number_of_lines | lines_per_frame | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +#define FR_RX_QTY_0 (4 + DSP_CORE_RX_BASE) + +// write a 1 (anything actually) to clear the overrun +#define FR_RX_CLR_OVERRUN_0 (5 + DSP_CORE_RX_BASE) + + +__U2_END_DECLS + +#endif /* INCLUDED_USRP2_FPGA_REGS_H */ diff --git a/usrp2/firmware/include/usrp2_i2c_addr.h b/usrp2/firmware/include/usrp2_i2c_addr.h new file mode 100644 index 00000000..f2599690 --- /dev/null +++ b/usrp2/firmware/include/usrp2_i2c_addr.h @@ -0,0 +1,82 @@ +/* -*- c++ -*- */ +/* + * Copyright 2004,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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_I2C_ADDR_H +#define INCLUDED_USRP2_I2C_ADDR_H + +#include "usrp2_cdefs.h" + +__U2_BEGIN_DECLS + +// I2C addresses + +#define I2C_DEV_EEPROM 0x50 // 24LC02[45]: 7-bits 1010xxx + +#define I2C_ADDR_MBOARD (I2C_DEV_EEPROM | 0x0) +#define I2C_ADDR_TX_A (I2C_DEV_EEPROM | 0x4) +#define I2C_ADDR_RX_A (I2C_DEV_EEPROM | 0x5) + + +// format of USRP2 motherboard rom +// 00: 0x00 h/w rev (LSB) +// 01: 0x00 h/w rev (MSB) +// 02: 0x00 MAC addr 0 +// 03: 0x50 MAC addr 1 +// 04: 0xC2 MAC addr 2 +// 05: 0x85 MAC addr 3 +// 06: 0x3. MAC addr 4 +// 07: 0x.. MAC addr 5 + +#define MBOARD_REV_LSB 0x00 +#define MBOARD_REV_MSB 0x01 +#define MBOARD_MAC_ADDR 0x02 + + +// format of daughterboard EEPROM +// 00: 0xDB code for ``I'm a daughterboard'' +// 01: .. Daughterboard ID (LSB) +// 02: .. Daughterboard ID (MSB) +// 03: .. io bits 7-0 direction (bit set if it's an output from m'board) +// 04: .. io bits 15-8 direction (bit set if it's an output from m'board) +// 05: .. ADC0 DC offset correction (LSB) +// 06: .. ADC0 DC offset correction (MSB) +// 07: .. ADC1 DC offset correction (LSB) +// 08: .. ADC1 DC offset correction (MSB) +// ... +// 1f: .. negative of the sum of bytes [0x00, 0x1e] + +#define DB_EEPROM_MAGIC 0x00 +#define DB_EEPROM_MAGIC_VALUE 0xDB +#define DB_EEPROM_ID_LSB 0x01 +#define DB_EEPROM_ID_MSB 0x02 +#define DB_EEPROM_OE_LSB 0x03 +#define DB_EEPROM_OE_MSB 0x04 +#define DB_EEPROM_OFFSET_0_LSB 0x05 // offset correction for ADC or DAC 0 +#define DB_EEPROM_OFFSET_0_MSB 0x06 +#define DB_EEPROM_OFFSET_1_LSB 0x07 // offset correction for ADC or DAC 1 +#define DB_EEPROM_OFFSET_1_MSB 0x08 +#define DB_EEPROM_CHKSUM 0x1f + +#define DB_EEPROM_CLEN 0x20 // length of common portion of eeprom + +#define DB_EEPROM_CUSTOM_BASE DB_EEPROM_CLEN // first avail offset for + // daughterboard specific use +__U2_END_DECLS + +#endif /* INCLUDED_USRP2_I2C_ADDR_H */ + diff --git a/usrp2/firmware/include/usrp2_mac_addr.h b/usrp2/firmware/include/usrp2_mac_addr.h new file mode 100644 index 00000000..da5a69f5 --- /dev/null +++ b/usrp2/firmware/include/usrp2_mac_addr.h @@ -0,0 +1,28 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_MAC_ADDR_H +#define INCLUDED_USRP2_MAC_ADDR_H + +#include + +typedef struct { + uint8_t addr[6]; +} u2_mac_addr_t; + +#endif /* INCLUDED_USRP2_MAC_ADDR_H */ diff --git a/usrp2/firmware/include/usrp2_mimo_config.h b/usrp2/firmware/include/usrp2_mimo_config.h new file mode 100644 index 00000000..12967519 --- /dev/null +++ b/usrp2/firmware/include/usrp2_mimo_config.h @@ -0,0 +1,46 @@ +/* -*- c -*- */ +/* + * Copyright 2008 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 INCLUDED_USRP2_MIMO_CONFIG_H +#define INCLUDED_USRP2_MIMO_CONFIG_H + +#define _MC_WE_LOCK 0x0001 +#define _MC_MIMO_CLK_INPUT 0x0002 // else SMA input + +/* + * Derived masks (use these): + * + * We get our input from 1 of three places: + * Our free running oscilator, our SMA connector, or from the MIMO connector + */ +#define MC_WE_DONT_LOCK 0x0000 +#define MC_WE_LOCK_TO_SMA (_MC_WE_LOCK | 0) +#define MC_WE_LOCK_TO_MIMO (_MC_WE_LOCK | _MC_MIMO_CLK_INPUT) + +/* + * Independent of the source of the clock, we may or may not drive our + * clock onto the mimo connector. Note that there are dedicated clock + * signals in each direction, so disaster doesn't occurs if we're + * unnecessarily providing clock. + */ +#define MC_PROVIDE_CLK_TO_MIMO 0x0004 + + +#endif /* INCLUDED_USRP2_MIMO_CONFIG_H */ diff --git a/usrp2/firmware/include/usrp2_types.h b/usrp2/firmware/include/usrp2_types.h new file mode 100644 index 00000000..dd2bcf1e --- /dev/null +++ b/usrp2/firmware/include/usrp2_types.h @@ -0,0 +1,112 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_USRP2_TYPES_H +#define INCLUDED_USRP2_TYPES_H + +#include +#include + +__U2_BEGIN_DECLS + +/*! + * \brief Fixed point representation of a frequency in Hertz (VITA-49 compatible) + * + * 64-bit two's complement, with the radix point 20 bits up from the bottom. + * Q44.20 format (20 bits to the right of the radix point) + * + * Values range from +/- 8.79 terahertz with a resolution of 0.95 microhertz. + */ +typedef int64_t u2_fxpt_freq_t; + +#define U2_FPF_RP 20 // location of radix point in u2_fxpt_freq_t + +// macro so we can init structs at compile time +#define U2_DOUBLE_TO_FXPT_FREQ(f) (int64_t)((f) * (1LL << U2_FPF_RP)) + +static inline u2_fxpt_freq_t +u2_double_to_fxpt_freq(double f) +{ + return U2_DOUBLE_TO_FXPT_FREQ(f); +} + +static inline int +u2_fxpt_freq_round_to_int(u2_fxpt_freq_t fx) +{ + return (int)((fx+(1<<(U2_FPF_RP-1)))>>U2_FPF_RP); +} + +static inline double +u2_fxpt_freq_to_double(u2_fxpt_freq_t fx) +{ + return ((double) fx) * 1.0/(1 << U2_FPF_RP); +} + +static inline uint32_t +u2_fxpt_freq_hi(u2_fxpt_freq_t f) +{ + return ((f >> 32) & 0xffffffff); +} + +static inline uint32_t +u2_fxpt_freq_lo(u2_fxpt_freq_t f) +{ + return (f & 0xffffffff); +} + +static inline u2_fxpt_freq_t +u2_fxpt_freq_from_hilo(uint32_t hi, uint32_t lo) +{ + return (((u2_fxpt_freq_t) hi) << 32) | lo; +} + +/*! + * \brief Fixed point representation of a gain in dB (VITA-49 compatible) + * + * 16-bit two's complement, with the radix point 7 bits up from the bottom. + * Q9.7 format (7 bits to the right of the radix point) + */ +typedef int16_t u2_fxpt_gain_t; + +#define U2_FPG_RP 7 // location of radix point in u2_fxpt_gain_t + +// macro so we can init structs at compile time +#define U2_DOUBLE_TO_FXPT_GAIN(g) (int16_t)((g) * (1 << U2_FPG_RP)) + +static inline u2_fxpt_gain_t +u2_double_to_fxpt_gain(double g) +{ + return U2_DOUBLE_TO_FXPT_GAIN(g); +} + +static inline float +u2_fxpt_gain_to_double(u2_fxpt_gain_t fx) +{ + return ((double) fx) * 1.0/(1 << U2_FPG_RP); +} + +static inline int +u2_fxpt_gain_round_to_int(u2_fxpt_gain_t fx) +{ + return (int)((fx+(1<<(U2_FPG_RP-1)))>>U2_FPG_RP); +} + + +__U2_END_DECLS + + +#endif /* INCLUDED_USRP2_TYPES_H */ diff --git a/usrp2/firmware/install-sh b/usrp2/firmware/install-sh new file mode 100755 index 00000000..a5897de6 --- /dev/null +++ b/usrp2/firmware/install-sh @@ -0,0 +1,519 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-12-25.00 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/usrp2/firmware/lib/Makefile.am b/usrp2/firmware/lib/Makefile.am new file mode 100644 index 00000000..37c74c91 --- /dev/null +++ b/usrp2/firmware/lib/Makefile.am @@ -0,0 +1,99 @@ +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + +include $(top_srcdir)/Makefile.common + +noinst_LIBRARIES = \ + libu2fw.a + + +libu2fw_a_SOURCES = \ + abort.c \ + ad9510.c \ + ad9777.c \ + bsm12.c \ + buffer_pool.c \ + clocks.c \ + db_basic.c \ + db_dbsrx.c \ + db_init.c \ + db_rfx.c \ + db_tvrx.c \ + db_xcvr2450.c \ + dbsm.c \ + eeprom.c \ + ethernet.c \ + eth_mac.c \ + _exit.c \ + exit.c \ + hal_io.c \ + hal_uart.c \ + i2c.c \ + lsadc.c \ + lsdac.c \ + mdelay.c \ + memcpy_wa.c \ + memset_wa.c \ + nonstdio.c \ + pic.c \ + print_mac_addr.c \ + print_rmon_regs.c \ + print_fxpt.c \ + print_buffer.c \ + printf.c \ + sd.c \ + spi.c \ + u2_init.c + + +noinst_HEADERS = \ + ad9510.h \ + ad9777.h \ + ad9777_regs.h \ + bool.h \ + bsm12.h \ + buffer_pool.h \ + clocks.h \ + db.h \ + db_base.h \ + dbsm.h \ + eth_mac.h \ + eth_mac_regs.h \ + eth_phy.h \ + ethernet.h \ + hal_io.h \ + hal_uart.h \ + i2c.h \ + lsadc.h \ + lsdac.h \ + mdelay.h \ + memcpy_wa.h \ + memory_map.h \ + memset_wa.h \ + nonstdio.h \ + pic.h \ + print_rmon_regs.h \ + sd.h \ + spi.h \ + stdint.h \ + stdio.h \ + u2_init.h \ + usrp2_bytesex.h \ + wb16550.h + +EXTRA_DIST = \ + microblaze.ld diff --git a/usrp2/firmware/lib/Makefile.in b/usrp2/firmware/lib/Makefile.in new file mode 100644 index 00000000..19b89282 --- /dev/null +++ b/usrp2/firmware/lib/Makefile.in @@ -0,0 +1,607 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 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 3 of the License, 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 program. If not, see . +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_usrp2_firmware.m4 \ + $(top_srcdir)/config/grc_usrp2_stub.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libu2fw_a_AR = $(AR) $(ARFLAGS) +libu2fw_a_LIBADD = +am_libu2fw_a_OBJECTS = abort.$(OBJEXT) ad9510.$(OBJEXT) \ + ad9777.$(OBJEXT) bsm12.$(OBJEXT) buffer_pool.$(OBJEXT) \ + clocks.$(OBJEXT) db_basic.$(OBJEXT) db_dbsrx.$(OBJEXT) \ + db_init.$(OBJEXT) db_rfx.$(OBJEXT) db_tvrx.$(OBJEXT) \ + db_xcvr2450.$(OBJEXT) dbsm.$(OBJEXT) eeprom.$(OBJEXT) \ + ethernet.$(OBJEXT) eth_mac.$(OBJEXT) _exit.$(OBJEXT) \ + exit.$(OBJEXT) hal_io.$(OBJEXT) hal_uart.$(OBJEXT) \ + i2c.$(OBJEXT) lsadc.$(OBJEXT) lsdac.$(OBJEXT) mdelay.$(OBJEXT) \ + memcpy_wa.$(OBJEXT) memset_wa.$(OBJEXT) nonstdio.$(OBJEXT) \ + pic.$(OBJEXT) print_mac_addr.$(OBJEXT) \ + print_rmon_regs.$(OBJEXT) print_fxpt.$(OBJEXT) \ + print_buffer.$(OBJEXT) printf.$(OBJEXT) sd.$(OBJEXT) \ + spi.$(OBJEXT) u2_init.$(OBJEXT) +libu2fw_a_OBJECTS = $(am_libu2fw_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libu2fw_a_SOURCES) +DIST_SOURCES = $(libu2fw_a_SOURCES) +DATA = $(noinst_DATA) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MB_GCC = @MB_GCC@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +build_dirs = @build_dirs@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp2_firmware_INCLUDEDIR = @usrp2_firmware_INCLUDEDIR@ +usrp2_firmware_INCLUDES = @usrp2_firmware_INCLUDES@ +usrp2_firmware_LA = @usrp2_firmware_LA@ +usrp2_firmware_LDFLAG = @usrp2_firmware_LDFLAG@ +usrp2_firmware_LIBDIRPATH = @usrp2_firmware_LIBDIRPATH@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +STD_INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib + +#HAL_IO = -DHAL_IO_USES_DBOARD_PINS +HAL_IO = -DHAL_IO_USES_UART +AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES) +STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float +AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift +#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384 + +#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024 +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map +#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) +AM_LDFLAGS = -Wl,-Map -Wl,$@.map -Wl,-defsym -Wl,_STACK_SIZE=3072 +BINS = $(noinst_PROGRAMS:=.bin) +ROMS = $(noinst_PROGRAMS:=.rom) +DUMPS = $(noinst_PROGRAMS:=.dump) +noinst_DATA = $(BINS) $(ROMS) $(DUMPS) +CLEANFILES = $(ROMS) $(DUMPS) $(BINS) +noinst_LIBRARIES = \ + libu2fw.a + +libu2fw_a_SOURCES = \ + abort.c \ + ad9510.c \ + ad9777.c \ + bsm12.c \ + buffer_pool.c \ + clocks.c \ + db_basic.c \ + db_dbsrx.c \ + db_init.c \ + db_rfx.c \ + db_tvrx.c \ + db_xcvr2450.c \ + dbsm.c \ + eeprom.c \ + ethernet.c \ + eth_mac.c \ + _exit.c \ + exit.c \ + hal_io.c \ + hal_uart.c \ + i2c.c \ + lsadc.c \ + lsdac.c \ + mdelay.c \ + memcpy_wa.c \ + memset_wa.c \ + nonstdio.c \ + pic.c \ + print_mac_addr.c \ + print_rmon_regs.c \ + print_fxpt.c \ + print_buffer.c \ + printf.c \ + sd.c \ + spi.c \ + u2_init.c + +noinst_HEADERS = \ + ad9510.h \ + ad9777.h \ + ad9777_regs.h \ + bool.h \ + bsm12.h \ + buffer_pool.h \ + clocks.h \ + db.h \ + db_base.h \ + dbsm.h \ + eth_mac.h \ + eth_mac_regs.h \ + eth_phy.h \ + ethernet.h \ + hal_io.h \ + hal_uart.h \ + i2c.h \ + lsadc.h \ + lsdac.h \ + mdelay.h \ + memcpy_wa.h \ + memory_map.h \ + memset_wa.h \ + nonstdio.h \ + pic.h \ + print_rmon_regs.h \ + sd.h \ + spi.h \ + stdint.h \ + stdio.h \ + u2_init.h \ + usrp2_bytesex.h \ + wb16550.h + +EXTRA_DIST = \ + microblaze.ld + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu lib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libu2fw.a: $(libu2fw_a_OBJECTS) $(libu2fw_a_DEPENDENCIES) + -rm -f libu2fw.a + $(libu2fw_a_AR) libu2fw.a $(libu2fw_a_OBJECTS) $(libu2fw_a_LIBADD) + $(RANLIB) libu2fw.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ad9510.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ad9777.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsm12.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer_pool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clocks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_basic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_dbsrx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_rfx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_tvrx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_xcvr2450.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbsm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eeprom.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eth_mac.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ethernet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hal_io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hal_uart.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i2c.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lsadc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lsdac.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdelay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memcpy_wa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memset_wa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonstdio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_buffer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_fxpt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_mac_addr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_rmon_regs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/u2_init.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(DATA) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + +#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048 + +%.bin : % + mb-objcopy -O binary $< $@ + +%.dump : % + mb-objdump -DSC $< > $@ + +%.rom : %.bin + hexdump -v -e'1/1 "%.2X\n"' $< > $@ + +.PRECIOUS : %.bin +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/firmware/lib/_exit.c b/usrp2/firmware/lib/_exit.c new file mode 100644 index 00000000..9b40ab2e --- /dev/null +++ b/usrp2/firmware/lib/_exit.c @@ -0,0 +1,27 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +/* + * Stub so we can compile using 3.4 based mb-gcc + */ +void +_exit(int status) +{ + while (1) + ; +} diff --git a/usrp2/firmware/lib/abort.c b/usrp2/firmware/lib/abort.c new file mode 100644 index 00000000..d1d70939 --- /dev/null +++ b/usrp2/firmware/lib/abort.c @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include + +extern void _exit(int status); + +void +abort(void) +{ + putstr("\n\nabort\n"); + // FIXME loop blinking leds + _exit(-1); +} diff --git a/usrp2/firmware/lib/ad9510.c b/usrp2/firmware/lib/ad9510.c new file mode 100644 index 00000000..4d3acb65 --- /dev/null +++ b/usrp2/firmware/lib/ad9510.c @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include "ad9510.h" +#include "spi.h" +#include + +#define RD (1 << 15) +#define WR (0 << 15) + +void +ad9510_write_reg(int regno, uint8_t value) +{ + uint32_t inst = WR | (regno & 0xff); + uint32_t v = (inst << 8) | (value & 0xff); + spi_transact(SPI_TXONLY, SPI_SS_AD9510, v, 24, SPIF_PUSH_FALL); +} + +int +ad9510_read_reg(int regno) +{ + uint32_t inst = RD | (regno & 0xff); + uint32_t v = (inst << 8) | 0; + uint32_t r = spi_transact(SPI_TXRX, SPI_SS_AD9510, v, 24, + SPIF_PUSH_FALL | SPIF_LATCH_FALL); + return r & 0xff; +} diff --git a/usrp2/firmware/lib/ad9510.h b/usrp2/firmware/lib/ad9510.h new file mode 100644 index 00000000..a395e522 --- /dev/null +++ b/usrp2/firmware/lib/ad9510.h @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_AD9510_H +#define INCLUDED_AD9510_H + +#include + +/* + * Analog Device AD9510 1.2 GHz Clock Distribution IC w/ PLL + */ + +void ad9510_write_reg(int regno, uint8_t value); +int ad9510_read_reg(int regno); + +#endif /* INCLUDED_AD9510_H */ diff --git a/usrp2/firmware/lib/ad9777.c b/usrp2/firmware/lib/ad9777.c new file mode 100644 index 00000000..734ccd7e --- /dev/null +++ b/usrp2/firmware/lib/ad9777.c @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "ad9777.h" +#include "memory_map.h" +#include "spi.h" + +#define IB_RD 0x80 +#define IB_WR 0x00 +#define IB_XFER_1 0x00 +#define IB_XFER_2 0x20 +#define IB_XFER_3 0x40 +#define IB_XFER_4 0x60 +#define IB_ADDR_MASK 0x1f + +void +ad9777_write_reg(int regno, uint8_t value) +{ + uint8_t instr = IB_WR | IB_XFER_1 | (regno & IB_ADDR_MASK); + spi_transact(SPI_TXONLY, SPI_SS_AD9777, + (instr << 8) | (value & 0xff), 16, SPIF_PUSH_FALL); +} + +int +ad9777_read_reg(int regno) +{ + uint8_t instr = IB_RD | IB_XFER_1 | (regno & IB_ADDR_MASK); + uint32_t r = spi_transact(SPI_TXRX, SPI_SS_AD9777, + (instr << 8) | 0, 16, + SPIF_PUSH_FALL | SPIF_LATCH_RISE); + return r & 0xff; +} diff --git a/usrp2/firmware/lib/ad9777.h b/usrp2/firmware/lib/ad9777.h new file mode 100644 index 00000000..d4d10491 --- /dev/null +++ b/usrp2/firmware/lib/ad9777.h @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_AD9777_H +#define INCLUDED_AD9777_H + +#include +#include "ad9777_regs.h" + +/* + * Analog Devices AD9777 16-bit, 160 MS/s, Dual Interpolating TxDAC + */ + +void ad9777_write_reg(int regno, uint8_t value); +int ad9777_read_reg(int regno); + +#endif /* INCLUDED_AD9777_H */ diff --git a/usrp2/firmware/lib/ad9777_regs.h b/usrp2/firmware/lib/ad9777_regs.h new file mode 100644 index 00000000..de2936c1 --- /dev/null +++ b/usrp2/firmware/lib/ad9777_regs.h @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_AD9777_REGS_H +#define INCLUDED_AD9777_REGS_H + +#define R0_SW_RESET (1 << 5) +#define R0_SLEEP (1 << 4) +#define R0_POWER_DN (1 << 3) +#define R0_1R (1 << 2) +#define R0_2R (0 << 2) +#define R0_PLL_LOCKED (1 << 1) + +#define R1_INTERP_1X 0x00 +#define R1_INTERP_2X 0x40 +#define R1_INTERP_4X 0x80 +#define R1_INTERP_8X 0xC0 +#define R1_MOD_NONE 0x00 +#define R1_MOD_FS_2 0x10 // Fs/2 +#define R1_MOD_FS_4 0x20 // Fs/4 +#define R1_MOD_FS_8 0x30 // Fs/8 +#define R1_ZERO_STUFF (1 << 3) // N.B., doubles output rate +#define R1_REAL_MIX (1 << 2) +#define R1_CMPLX_MIX (0 << 2) +#define R1_POS_EXP (1 << 1) // exp(+jwt) +#define R1_NEG_EXP (0 << 1) // exp(-jwt) +#define R1_DATACLK_OUT (1 << 0) + +#define R2_2S_COMP (0 << 7) +#define R2_2PORT_MODE (0 << 6) +#define R2_1PORT_MODE (1 << 6) + +#define R3_PLL_DIV_1 0x00 +#define R3_PLL_DIV_2 0x01 +#define R3_PLL_DIV_4 0x02 +#define R3_PLL_DIV_8 0x03 + +#define R4_PLL_ON (1 << 7) +#define R4_CP_MANUAL (1 << 6) +#define R4_CP_AUTO (0 << 6) +#define R4_CP_50uA (0x00 | R4_CP_MANUAL) +#define R4_CP_100uA (0x01 | R4_CP_MANUAL) +#define R4_CP_200uA (0x02 | R4_CP_MANUAL) +#define R4_CP_400uA (0x03 | R4_CP_MANUAL) +#define R4_CP_800uA (0x07 | R4_CP_MANUAL) + +#define R5_I_FINE_GAIN(g) (g) // 8-bits +#define R6_I_COARSE_GAIN(g) ((g) & 0xf) // low 4-bits + +#define R9_Q_FINE_GAIN(g) (g) // 8-bits +#define R10_Q_COARSE_GAIN(g) ((g) & 0xf) // low 4-bits + + +// FIXME more registers for offset and gain control... + + +#endif /* INCLUDED_AD9777_REGS_H */ diff --git a/usrp2/firmware/lib/bool.h b/usrp2/firmware/lib/bool.h new file mode 100644 index 00000000..36f472d4 --- /dev/null +++ b/usrp2/firmware/lib/bool.h @@ -0,0 +1,26 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_BOOL_H +#define INCLUDED_BOOL_H + +typedef int bool; +#define true 1 +#define false 0 + +#endif /* INCLUDED_BOOL_H */ diff --git a/usrp2/firmware/lib/bsm12.c b/usrp2/firmware/lib/bsm12.c new file mode 100644 index 00000000..c996e649 --- /dev/null +++ b/usrp2/firmware/lib/bsm12.c @@ -0,0 +1,319 @@ +/* -*- c++ -*- */ +/* + * Copyright 2009 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 3 of the License, 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 program. If not, see . + */ + +/* + * buffer state machine: 1 input to two outputs + * + * Typically used to read packets from the ethernet and then after inspecting, + * handle the packet in firmware or pass it on to 1 of the 2 buffer destinations. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "bsm12.h" +#include "memory_map.h" +#include "buffer_pool.h" +#include "bool.h" +#include "nonstdio.h" +#include + +typedef enum { + BS_EMPTY, + BS_FILLING, + BS_FULL, + BS_EMPTYING, +} buffer_state_t; + +static buffer_state_t buffer_state[NBUFFERS]; +static uint32_t last_send_ctrl[NBUFFERS]; +static int8_t buffer_target[NBUFFERS]; // -1, 0 or 1. +static uint8_t buffer_dst[NBUFFERS]; // 0 or 1. Valid only when BF_EMPTYING + +#define ST_IDLE (-1) + +void +bsm12_init(bsm12_t *sm, int buf0, + const buf_cmd_args_t *recv, + const buf_cmd_args_t *send0, + const buf_cmd_args_t *send1, + bsm12_inspector_t inspect) +{ + if (buf0 & 0x3) // precondition: buf0 % 4 == 0 + abort(); + + sm->buf0 = buf0; + sm->running = false; + sm->recv_args = *recv; + sm->send_args[0] = *send0; + sm->send_args[1] = *send1; + + sm->rx_state = ST_IDLE; + sm->tx_state[0] = ST_IDLE; + sm->tx_state[1] = ST_IDLE; + + sm->inspect = inspect; + + sm->bps_error = BPS_ERROR(buf0 + 0) | BPS_ERROR(buf0 + 1) | BPS_ERROR(buf0 + 2); + sm->bps_done = BPS_DONE(buf0 + 0) | BPS_DONE(buf0 + 1) | BPS_DONE(buf0 + 2); + sm->bps_error_or_done = sm->bps_error | sm->bps_done; + + // How much to adjust the last_line register. + // It's 1 for everything but the ethernet. + sm->last_line_adj = recv->port == PORT_ETH ? 3 : 1; + + buffer_state[sm->buf0 + 0] = BS_EMPTY; + buffer_state[sm->buf0 + 1] = BS_EMPTY; + buffer_state[sm->buf0 + 2] = BS_EMPTY; + + buffer_target[sm->buf0 + 0] = -1; + buffer_target[sm->buf0 + 1] = -1; + buffer_target[sm->buf0 + 2] = -1; + + for (int i = 0; i < NBUFFERS; i++) + sm->next_buf[i] = buf0; + + sm->next_buf[buf0 + 0] = buf0 + 1; + sm->next_buf[buf0 + 1] = buf0 + 2; + sm->next_buf[buf0 + 2] = buf0 + 0; + + for (int i = 0; i < 3; i++){ + sm->precomputed_receive_to_buf_ctrl_word[i] = + (BPC_READ + | BPC_BUFFER(sm->buf0 + i) + | BPC_PORT(sm->recv_args.port) + | BPC_STEP(1) + | BPC_FIRST_LINE(sm->recv_args.first_line) + | BPC_LAST_LINE(sm->recv_args.last_line)); + + for (int j = 0; j < 2; j++){ + sm->precomputed_send_from_buf_ctrl_word[i][j] = + (BPC_WRITE + | BPC_BUFFER(sm->buf0 + i) + | BPC_PORT(sm->send_args[j].port) + | BPC_STEP(1) + | BPC_FIRST_LINE(sm->send_args[j].first_line) + | BPC_LAST_LINE(0)); // last line filled in at runtime + } + } +} + +static inline void +bsm12_receive_to_buf(bsm12_t *sm, int bufno) +{ + buffer_pool_ctrl->ctrl = sm->precomputed_receive_to_buf_ctrl_word[bufno & 0x3]; +} + +static inline void +bsm12_send_from_buf(bsm12_t *sm, int bufno, int dst_idx) +{ + dst_idx &= 0x1; + + uint32_t t = + (sm->precomputed_send_from_buf_ctrl_word[bufno & 0x3][dst_idx] + | BPC_LAST_LINE(buffer_pool_status->last_line[bufno] - sm->last_line_adj)); + + buffer_pool_ctrl->ctrl = t; + last_send_ctrl[bufno] = t; + buffer_dst[bufno] = dst_idx; +} + +static inline void +bsm12_resend_from_buf(bsm12_t *sm, int bufno) +{ + buffer_pool_ctrl->ctrl = last_send_ctrl[bufno]; +} + +void +bsm12_start(bsm12_t *sm) +{ + sm->running = true; + + buffer_state[sm->buf0 + 0] = BS_EMPTY; + buffer_state[sm->buf0 + 1] = BS_EMPTY; + buffer_state[sm->buf0 + 2] = BS_EMPTY; + + buffer_target[sm->buf0 + 0] = -1; + buffer_target[sm->buf0 + 1] = -1; + buffer_target[sm->buf0 + 2] = -1; + + bp_clear_buf(sm->buf0 + 0); + bp_clear_buf(sm->buf0 + 1); + bp_clear_buf(sm->buf0 + 2); + + sm->rx_state = 0; + sm->tx_state[0] = ST_IDLE; + sm->tx_state[1] = ST_IDLE; + bsm12_receive_to_buf(sm, sm->buf0); + buffer_state[sm->buf0] = BS_FILLING; +} + +void +bsm12_stop(bsm12_t *sm) +{ + sm->running = false; + bp_clear_buf(sm->buf0 + 0); + bp_clear_buf(sm->buf0 + 1); + bp_clear_buf(sm->buf0 + 2); + buffer_state[sm->buf0 + 0] = BS_EMPTY; + buffer_state[sm->buf0 + 1] = BS_EMPTY; + buffer_state[sm->buf0 + 2] = BS_EMPTY; +} + +static void bsm12_process_helper(bsm12_t *sm, int buf_this); +static void bsm12_error_helper(bsm12_t *sm, int buf_this); + +void +bsm12_process_status(bsm12_t *sm, uint32_t status) +{ + // anything for us? + if ((status & sm->bps_error_or_done) == 0 || !sm->running) + return; + + if (status & sm->bps_error){ + // Most likely an ethernet Rx error. We just restart the transfer. + if (status & (BPS_ERROR(sm->buf0 + 0))) + bsm12_error_helper(sm, sm->buf0 + 0); + + if (status & (BPS_ERROR(sm->buf0 + 1))) + bsm12_error_helper(sm, sm->buf0 + 1); + + if (status & (BPS_ERROR(sm->buf0 + 2))) + bsm12_error_helper(sm, sm->buf0 + 2); + } + + if (status & BPS_DONE(sm->buf0 + 0)) + bsm12_process_helper(sm, sm->buf0 + 0); + + if (status & BPS_DONE(sm->buf0 + 1)) + bsm12_process_helper(sm, sm->buf0 + 1); + + if (status & BPS_DONE(sm->buf0 + 2)) + bsm12_process_helper(sm, sm->buf0 + 2); +} + + static void +bsm12_process_helper(bsm12_t *sm, int buf_this) +{ + bp_clear_buf(buf_this); + + if (buffer_state[buf_this] == BS_FILLING){ + + buffer_state[buf_this] = BS_FULL; + buffer_target[buf_this] = -1; + + // + // where does this packet go? + // + int dst = sm->inspect(sm, buf_this); + if (dst == -1){ + // + // f/w handled the packet; refill the buffer + // + bsm12_receive_to_buf(sm, buf_this); + buffer_state[buf_this] = BS_FILLING; + buffer_target[buf_this] = -1; + sm->rx_state = buf_this & 0x3; + } + else { // goes to dst 0 or 1 + // + // If the next buffer is empty, start a receive on it + // + int t = sm->next_buf[buf_this]; + if (buffer_state[t] == BS_EMPTY){ + bsm12_receive_to_buf(sm, t); + buffer_state[t] = BS_FILLING; + buffer_target[t] = -1; + sm->rx_state = t & 0x3; + } + else + sm->rx_state = ST_IDLE; + + // + // If the destination is idle, start the xfer, othewise remember it + // + if (sm->tx_state[dst] == ST_IDLE){ + bsm12_send_from_buf(sm, buf_this, dst); + sm->tx_state[dst] = buf_this & 0x3; + buffer_state[buf_this] = BS_EMPTYING; + buffer_target[buf_this] = -1; + } + else { + buffer_target[buf_this] = dst; + } + } + } + + else { // BS_EMPTYING + + buffer_state[buf_this] = BS_EMPTY; + buffer_target[buf_this] = -1; + + if (sm->rx_state == ST_IDLE){ // fire off another receive + sm->rx_state = buf_this & 0x3; + bsm12_receive_to_buf(sm, buf_this); + buffer_state[buf_this] = BS_FILLING; + buffer_target[buf_this] = -1; + } + + int dst = buffer_dst[buf_this]; // the dst we were emptying into + // is the next buffer full and for us? + int t = sm->next_buf[buf_this]; + if (buffer_target[t] == dst){ // yes, + bsm12_send_from_buf(sm, t, dst); // send it + buffer_state[t] = BS_EMPTYING; + buffer_target[t] = -1; + sm->tx_state[dst] = t & 0x3; + } + // how about the one after that? + else if (buffer_target[t=sm->next_buf[t]] == dst){ // yes, + bsm12_send_from_buf(sm, t, dst); // send it + buffer_state[t] = BS_EMPTYING; + buffer_target[t] = -1; + sm->tx_state[dst] = t & 0x3; + } + else { + sm->tx_state[dst] = ST_IDLE; + } + } +} + +static void +bsm12_error_helper(bsm12_t *sm, int buf_this) +{ + bp_clear_buf(buf_this); // clears ERROR flag + + if (buffer_state[buf_this] == BS_FILLING){ + bsm12_receive_to_buf(sm, buf_this); // restart the xfer + } + else { // buffer was emptying + bsm12_resend_from_buf(sm, buf_this); // restart the xfer + } +} + + +void +bsm12_handle_tx_underrun(bsm12_t *sm) +{ +} + +void +bsm12_handle_rx_overrun(bsm12_t *sm) +{ +} diff --git a/usrp2/firmware/lib/bsm12.h b/usrp2/firmware/lib/bsm12.h new file mode 100644 index 00000000..b8e576b7 --- /dev/null +++ b/usrp2/firmware/lib/bsm12.h @@ -0,0 +1,83 @@ +/* -*- c++ -*- */ +/* + * Copyright 2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_BSM12_H +#define INCLUDED_BSM12_H + +#include "dbsm.h" +#include "memory_map.h" + +/*! + * buffer state machine: 1 input to two outputs + * + * Typically used to read packets from the ethernet and then after inspecting, + * handle the packet in firmware or pass it on to 1 of the 2 buffer destinations. + */ + +struct _bsm12; +typedef struct _bsm12 bsm12_t; + +/*! + * Pointer to function that does packet inspection. + * + * \param sm the state machine + * \param buf_this the index of the buffer to inspect and/or pass on + * + * Returns -1, 0 or 1. If it returns -1, it means that the s/w + * handled that packet, and that it should NOT be passed on to one of + * the buffer endpoints. 0 indicates the first endpoint, 1 the second endpoint. + */ +typedef int (*bsm12_inspector_t)(bsm12_t *sm, int buf_this); + + +/*! + * buffer state machine: 1 input to two outputs + */ +struct _bsm12 +{ + uint8_t buf0; // This machine uses buf0, buf0+1 and buf0+2. buf0 % 4 == 0. + uint8_t running; + int8_t rx_state; // -1, 0, 1, 2 which buffer we're receiving into + int8_t tx_state[2]; // -1, 0, 1, 2 which buffer we're sending from + buf_cmd_args_t recv_args; + buf_cmd_args_t send_args[2]; + bsm12_inspector_t inspect; + int last_line_adj; + uint32_t bps_error; + uint32_t bps_done; + uint32_t bps_error_or_done; + uint8_t next_buf[NBUFFERS]; + uint32_t precomputed_receive_to_buf_ctrl_word[3]; + uint32_t precomputed_send_from_buf_ctrl_word[4][2]; // really only 3, not 4 + // (easier addr comp) +}; + +void bsm12_init(bsm12_t *sm, int buf0, + const buf_cmd_args_t *recv, + const buf_cmd_args_t *send0, + const buf_cmd_args_t *send1, + bsm12_inspector_t inspect); + +void bsm12_start(bsm12_t *sm); +void bsm12_stop(bsm12_t *sm); +void bsm12_process_status(bsm12_t *sm, uint32_t status); +void bsm12_handle_tx_underrun(bsm12_t *sm); +void bsm12_handle_rx_overrun(bsm12_t *sm); + + +#endif /* INCLUDED_BSM12_H */ diff --git a/usrp2/firmware/lib/buffer_pool.c b/usrp2/firmware/lib/buffer_pool.c new file mode 100644 index 00000000..77e7c521 --- /dev/null +++ b/usrp2/firmware/lib/buffer_pool.c @@ -0,0 +1,72 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "memory_map.h" +#include "buffer_pool.h" +#include "hal_io.h" + +void +bp_init(void) +{ + int i; + bp_disable_port(PORT_SERDES); + bp_disable_port(PORT_DSP); + bp_disable_port(PORT_ETH); + bp_disable_port(PORT_RAM); + + for (i = 0; i < NBUFFERS; i++) + bp_clear_buf(i); +} + +#ifndef INLINE_BUFFER_POOL + +void +bp_clear_buf(int bufnum) +{ + buffer_pool_ctrl->ctrl = BPC_BUFFER(bufnum) | BPC_PORT_NIL | BPC_CLR; +} + +void +bp_disable_port(int portnum) +{ + // disable buffer connections to this port + buffer_pool_ctrl->ctrl = BPC_BUFFER_NIL | BPC_PORT(portnum); +} + +void +bp_receive_to_buf(int bufnum, int port, int step, int fl, int ll) +{ + buffer_pool_ctrl->ctrl = (BPC_READ + | BPC_BUFFER(bufnum) + | BPC_PORT(port) + | BPC_STEP(step) + | BPC_FIRST_LINE(fl) + | BPC_LAST_LINE(ll)); +} + +void +bp_send_from_buf(int bufnum, int port, int step, int fl, int ll) +{ + buffer_pool_ctrl->ctrl = (BPC_WRITE + | BPC_BUFFER(bufnum) + | BPC_PORT(port) + | BPC_STEP(step) + | BPC_FIRST_LINE(fl) + | BPC_LAST_LINE(ll)); +} + +#endif diff --git a/usrp2/firmware/lib/buffer_pool.h b/usrp2/firmware/lib/buffer_pool.h new file mode 100644 index 00000000..145b20f8 --- /dev/null +++ b/usrp2/firmware/lib/buffer_pool.h @@ -0,0 +1,75 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_BUFFER_POOL_H +#define INCLUDED_BUFFER_POOL_H + +#include "memory_map.h" + +// Buffer Pool Management + + +// define to have common buffer operations inlined +#define INLINE_BUFFER_POOL 1 + +void bp_init(void); + +#ifndef INLINE_BUFFER_POOL + +void bp_clear_buf(int bufnum); +void bp_disable_port(int portnum); +void bp_receive_to_buf(int bufnum, int port, int step, int fl, int ll); +void bp_send_from_buf(int bufnum, int port, int step, int fl, int ll); + +#else + +static inline void +bp_clear_buf(int bufnum) +{ + buffer_pool_ctrl->ctrl = BPC_BUFFER(bufnum) | BPC_PORT_NIL | BPC_CLR; +} + +static inline void +bp_disable_port(int portnum) +{ + // disable buffer connections to this port + buffer_pool_ctrl->ctrl = BPC_BUFFER_NIL | BPC_PORT(portnum); +} + +static inline void +bp_receive_to_buf(int bufnum, int port, int step, int fl, int ll) +{ + buffer_pool_ctrl->ctrl = (BPC_READ + | BPC_BUFFER(bufnum) + | BPC_PORT(port) + | BPC_STEP(step) + | BPC_FIRST_LINE(fl) + | BPC_LAST_LINE(ll)); +} + +static inline void +bp_send_from_buf(int bufnum, int port, int step, int fl, int ll) +{ + buffer_pool_ctrl->ctrl = (BPC_WRITE + | BPC_BUFFER(bufnum) + | BPC_PORT(port) + | BPC_STEP(step) + | BPC_FIRST_LINE(fl) + | BPC_LAST_LINE(ll)); +} +#endif +#endif diff --git a/usrp2/firmware/lib/clocks.c b/usrp2/firmware/lib/clocks.c new file mode 100644 index 00000000..0dbf3f90 --- /dev/null +++ b/usrp2/firmware/lib/clocks.c @@ -0,0 +1,243 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +#include "memory_map.h" +#include "ad9510.h" +#include "spi.h" +#include "u2_init.h" +#include "nonstdio.h" + +void +clocks_init(void) +{ + // Set up basic clocking functions in AD9510 + ad9510_write_reg(0x45, 0x00); // CLK2 drives distribution + + clocks_enable_fpga_clk(true, 1); + + spi_wait(); + + // Set up PLL for 10 MHz reference + // Reg 4, A counter, Don't Care + ad9510_write_reg(0x05, 0x00); // Reg 5, B counter MSBs, 0 + ad9510_write_reg(0x06, 0x05); // Reg 6, B counter LSBs, 5 + // Reg 7, Loss of reference detect, doesn't work yet, 0 + ad9510_write_reg(0x5A, 0x01); // Update Regs + + + // FIXME, probably need interface to this... + timesync_regs->tick_control = 4; + + // Primary clock configuration + clocks_mimo_config(MC_WE_DONT_LOCK); + + // Set up other clocks + clocks_enable_test_clk(false, 0); + clocks_enable_tx_dboard(false, 0); + clocks_enable_rx_dboard(false, 0); + clocks_enable_eth_phyclk(false, 0); + + // Enable clock to ADCs and DACs + clocks_enable_dac_clk(true, 1); + clocks_enable_adc_clk(true, 1); +} + + +void +clocks_mimo_config(int flags) +{ + if (flags & _MC_WE_LOCK){ + // Reg 8, Charge pump on, dig lock det, positive PFD, 47 + ad9510_write_reg(0x08, 0x47); + } + else { + // Reg 8, Charge pump off, dig lock det, positive PFD + ad9510_write_reg(0x08, 0x00); + } + + // Reg 9, Charge pump current, 0x40=3mA, 0x00=650uA + ad9510_write_reg(0x09, 0x00); + // Reg A, Prescaler of 2, everything normal 04 + ad9510_write_reg(0x0A, 0x04); + // Reg B, R Div MSBs, 0 + ad9510_write_reg(0x0B, 0x00); + // Reg C, R Div LSBs, 1 + ad9510_write_reg(0x0C, 0x01); + // Reg D, Antibacklash, Digital lock det, 0 + + ad9510_write_reg(0x5A, 0x01); // Update Regs + + spi_wait(); + + // Allow for clock switchover + + if (flags & _MC_WE_LOCK){ // WE LOCK + if (flags & _MC_MIMO_CLK_INPUT) { + // Turn on ref output and choose the MIMO connector + output_regs->clk_ctrl = 0x15; + } + else { + // turn on ref output and choose the SMA + output_regs->clk_ctrl = 0x1C; + } + } + else { // WE DONT LOCK + // Disable both ext clk inputs + output_regs->clk_ctrl = 0x10; + } + + // Do we drive a clock onto the MIMO connector? + if (flags & MC_PROVIDE_CLK_TO_MIMO) + clocks_enable_clkexp_out(true,10); + else + clocks_enable_clkexp_out(false,0); +} + +bool +clocks_lock_detect() +{ + if(pic_regs->pending & PIC_CLKSTATUS) + return true; + return false; +} + +int inline +clocks_gen_div(int divisor) +{ + int L,H; + L = (divisor>>1)-1; + H = divisor-L-2; + return (L<<4)|H; +} + +#define CLOCK_OUT_EN 0x08 +#define CLOCK_OUT_DIS_CMOS 0x01 +#define CLOCK_OUT_DIS_PECL 0x02 +#define CLOCK_DIV_DIS 0x80 +#define CLOCK_DIV_EN 0x00 + +#define CLOCK_MODE_PECL 1 +#define CLOCK_MODE_LVDS 2 +#define CLOCK_MODE_CMOS 3 + +void +clocks_enable_XXX_clk(bool enable, int divisor, int reg_en, int reg_div, int mode) +{ + int enable_word, div_word, div_en_word; + + switch(mode) { + case CLOCK_MODE_PECL : + enable_word = enable ? 0x08 : 0x0A; + break; + case CLOCK_MODE_LVDS : + enable_word = enable ? 0x02 : 0x03; + break; + case CLOCK_MODE_CMOS : + enable_word = enable ? 0x08 : 0x09; + break; + } + if(enable && (divisor>1)) { + div_word = clocks_gen_div(divisor); + div_en_word = CLOCK_DIV_EN; + } + else { + div_word = 0; + div_en_word = CLOCK_DIV_DIS; + } + + ad9510_write_reg(reg_en,enable_word); // Output en/dis + ad9510_write_reg(reg_div,div_word); // Set divisor + ad9510_write_reg(reg_div+1,div_en_word); // Enable or Bypass Divider + ad9510_write_reg(0x5A, 0x01); // Update Regs +} + +// Clock 0 +void +clocks_enable_test_clk(bool enable, int divisor) +{ + clocks_enable_XXX_clk(enable,divisor,0x3C,0x48,CLOCK_MODE_PECL); +} + +// Clock 1 +void +clocks_enable_fpga_clk(bool enable, int divisor) +{ + clocks_enable_XXX_clk(enable,divisor,0x3D,0x4A,CLOCK_MODE_PECL); +} + +// Clock 2 on Rev 3, Clock 5 on Rev 4 +void +clocks_enable_clkexp_out(bool enable, int divisor) +{ + if(u2_hw_rev_major == 3) + clocks_enable_XXX_clk(enable,divisor,0x3E,0x4C,CLOCK_MODE_PECL); + else if(u2_hw_rev_major == 4) { + ad9510_write_reg(0x34,0x00); // Turn on fine delay + ad9510_write_reg(0x35,0x00); // Set Full Scale to nearly 10ns + ad9510_write_reg(0x36,0x1c); // Set fine delay. 0x20 is midscale + clocks_enable_XXX_clk(enable,divisor,0x41,0x52,CLOCK_MODE_LVDS); + + } + else + putstr("ERR: Invalid Rev\n"); +} + +// Clock 5 on Rev 3, none (was 2) on Rev 4 +void +clocks_enable_eth_phyclk(bool enable, int divisor) +{ + if(u2_hw_rev_major == 3) + clocks_enable_XXX_clk(enable,divisor,0x41,0x52,CLOCK_MODE_LVDS); + else if(u2_hw_rev_major == 4) + clocks_enable_XXX_clk(enable,divisor,0x3E,0x4C,CLOCK_MODE_PECL); + else + putstr("ERR: Invalid Rev\n"); +} + +// Clock 3 +void +clocks_enable_dac_clk(bool enable, int divisor) +{ + clocks_enable_XXX_clk(enable,divisor,0x3F,0x4E,CLOCK_MODE_PECL); +} + +// Clock 4 +void +clocks_enable_adc_clk(bool enable, int divisor) +{ + clocks_enable_XXX_clk(enable,divisor,0x40,0x50,CLOCK_MODE_LVDS); +} + +// Clock 6 +void +clocks_enable_tx_dboard(bool enable, int divisor) +{ + clocks_enable_XXX_clk(enable,divisor,0x42,0x54,CLOCK_MODE_CMOS); +} + +// Clock 7 +void +clocks_enable_rx_dboard(bool enable, int divisor) +{ + clocks_enable_XXX_clk(enable,divisor,0x43,0x56,CLOCK_MODE_CMOS); +} diff --git a/usrp2/firmware/lib/clocks.h b/usrp2/firmware/lib/clocks.h new file mode 100644 index 00000000..39a0893c --- /dev/null +++ b/usrp2/firmware/lib/clocks.h @@ -0,0 +1,93 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_CLOCKS_H +#define INCLUDED_CLOCKS_H + +/* + * Routines to configure our multitude of clocks + */ + +#include +#include + + +/*! + * One time call to initialize all clocks to a reasonable state. We + * come out of here using our free running 100MHz oscilator and not + * providing a clock to the MIMO connector (CMC_WE_DONT_LOCK) + */ +void clocks_init(void); + + +/*! + * \brief MIMO clock configuration. + * + * Configure our master clock source, and whether or not we drive a + * clock onto the mimo connector. See MC_flags in usrp2_mimo_config.h. + */ +void clocks_mimo_config(int flags); + +/*! + * \brief Lock Detect -- Return True if our PLL is locked + */ +bool clocks_lock_detect(); + +/*! + * \brief Enable or disable test clock (extra clock signal) + */ +void clocks_enable_test_clk(bool enable, int divisor); + +/*! + * \brief Enable or disable fpga clock. Disabling would wedge and require a power cycle. + */ +void clocks_enable_fpga_clk(bool enable, int divisor); + +/*! + * \brief Enable or disable clock output sent to MIMO connector + */ +void clocks_enable_clkexp_out(bool enable, int divisor); + +/*! + * \brief Enable or disable ethernet phyclk, should always be disabled + */ +void clocks_enable_eth_phyclk(bool enable, int divisor); + +/*! + * \brief Enable or disable clock to DAC + */ +void clocks_enable_dac_clk(bool enable, int divisor); + +/*! + * \brief Enable or disable clock to ADC + */ +void clocks_enable_adc_clk(bool enable, int divisor); + +/*! + * \brief Enable or disable clock to Rx daughterboard + */ +void clocks_enable_rx_dboard(bool enable, int divisor); + + +/*! + * \brief Enable or disable clock to Tx daughterboard + */ +void clocks_enable_tx_dboard(bool enable, int divisor); + + +#endif /* INCLUDED_CLOCKS_H */ diff --git a/usrp2/firmware/lib/db.h b/usrp2/firmware/lib/db.h new file mode 100644 index 00000000..cec96026 --- /dev/null +++ b/usrp2/firmware/lib/db.h @@ -0,0 +1,104 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +/* + * Interface to daughterboard code + */ + +#ifndef INCLUDED_DB_H +#define INCLUDED_DB_H + +#include + + +struct db_base; + +/* pointers to daughterboard structures */ +extern struct db_base *tx_dboard; +extern struct db_base *rx_dboard; + + +//! Intermediate tuning information + +struct tune_result +{ + //! The RF frequency that corresponds to DC in the IF from the daughterboard + u2_fxpt_freq_t baseband_freq; + + //! The DDC/DUC frequency used to down/up convert to/from the target frequency + u2_fxpt_freq_t dxc_freq; + + //! Any differerence btwn target and actual (typically < 0.01 Hz) + u2_fxpt_freq_t residual_freq; + + //! Is the complex baseband spectrum inverted + bool inverted; +}; + + +/*! + * \brief One-time init at powerup + * + * Sets rx_dboard, tx_dboard and initializes daughterboards. + */ +void +db_init(void); + +/*! + * \brief Set daughterboard LO offset frequency. + * + * \param[in] db is the daughterboard instance + * \param[in] offset is the amount to add to tuning requests + * \param[out] success or failure + */ +bool +db_set_lo_offset(struct db_base *db, u2_fxpt_freq_t offset); + +/*! + * \brief Two stage tuning. Given target_freq, tune LO and DDC/DUC + * + * \param[in] db is the daughterboard instance + * \param[in] target_freq is the freq to translate the complex baseband to/from. + * \param[out] result provides details of the resulting configuration. + * + */ +bool +db_tune(struct db_base *db, u2_fxpt_freq_t target_freq, struct tune_result *result); + + +/* + * Set only the DDC frequency + */ +bool +db_set_ddc_freq(u2_fxpt_freq_t dxc_freq, u2_fxpt_freq_t *actual_dxc_freq); + +/* + * Set only the DUC frequency + */ +bool +db_set_duc_freq(u2_fxpt_freq_t dxc_freq, u2_fxpt_freq_t *actual_dxc_freq); + + +/*! + * \brief Set gain + */ +bool +db_set_gain(struct db_base *db, u2_fxpt_gain_t gain); + + +#endif /* INCLUDED_DB_H */ diff --git a/usrp2/firmware/lib/db_base.h b/usrp2/firmware/lib/db_base.h new file mode 100644 index 00000000..2ccfbf50 --- /dev/null +++ b/usrp2/firmware/lib/db_base.h @@ -0,0 +1,69 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_DB_BASE_H +#define INCLUDED_DB_BASE_H + +#include +#include + +/*! + * \brief "base class" for firmware version of daughterboard code + */ +struct db_base { + uint16_t dbid; //< daughterboard ID + + uint16_t is_tx : 1; //< is this a transmit db? + uint16_t is_quadrature : 1; + uint16_t i_and_q_swapped : 1; + uint16_t spectrum_inverted : 1; + + uint16_t output_enables; //< bitmask of which pins should be outputs from FPGA + uint16_t used_pins; //< bitmask of pins used by the daughterboard + + u2_fxpt_freq_t freq_min; //< min freq that can be set (Hz) + u2_fxpt_freq_t freq_max; //< max freq that can be set (Hz) + + u2_fxpt_gain_t gain_min; //< min gain that can be set (dB) + u2_fxpt_gain_t gain_max; //< max gain that can be set (dB) + u2_fxpt_gain_t gain_step_size; //< (dB) + + u2_fxpt_freq_t default_lo_offset; //< offset to add to tune frequency, reset value + u2_fxpt_freq_t current_lo_offset; //< current value of lo_offset + + /* + * Auto T/R control values + */ + uint32_t atr_mask; //< which bits to control + uint32_t atr_txval; //< value to use when transmitting + uint32_t atr_rxval; //< value to use when receiving + + //! delay in clk ticks from when Tx fifo gets data to when T/R switches + // uint32_t atr_tx_delay; + + //! delay in clk ticks from when Tx fifo goes empty to when T/R switches + // uint32_t atr_rx_delay; + + bool (*init)(struct db_base *); + bool (*set_freq)(struct db_base *, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc); + bool (*set_gain)(struct db_base *, u2_fxpt_gain_t gain); + bool (*set_tx_enable)(struct db_base *, bool on); +}; + + +#endif /* INCLUDED_DB_BASE_H */ diff --git a/usrp2/firmware/lib/db_basic.c b/usrp2/firmware/lib/db_basic.c new file mode 100644 index 00000000..2bd4ebfb --- /dev/null +++ b/usrp2/firmware/lib/db_basic.c @@ -0,0 +1,161 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + + +#include + +bool db_basic_init(struct db_base *db); +bool db_basic_set_freq(struct db_base *db, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc); +bool db_basic_set_gain(struct db_base *db, u2_fxpt_gain_t gain); +bool db_basic_set_tx_enable(struct db_base *, bool on); + +struct db_basic { + struct db_base base; +}; + + +struct db_basic db_basic_tx = { + .base.dbid = 0x0000, + .base.is_tx = true, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(-90e9), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(90e9), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.atr_mask = 0, + .base.atr_txval = 0, + .base.atr_rxval = 0, + //.base.atr_tx_delay = 0, + //.base.atr_rx_delay = 0, + + .base.init = db_basic_init, + .base.set_freq = db_basic_set_freq, + .base.set_gain = db_basic_set_gain, + .base.set_tx_enable = db_basic_set_tx_enable, +}; + +struct db_basic db_basic_rx = { + .base.dbid = 0x0001, + .base.is_tx = false, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(-90e9), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(90e9), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.is_quadrature = false, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.atr_mask = 0, + .base.atr_txval = 0, + .base.atr_rxval = 0, + //.base.atr_tx_delay = 0, + //.base.atr_rx_delay = 0, + + .base.init = db_basic_init, + .base.set_freq = db_basic_set_freq, + .base.set_gain = db_basic_set_gain, + .base.set_tx_enable = db_basic_set_tx_enable, +}; + +struct db_basic db_lf_tx = { + .base.dbid = 0x000e, + .base.is_tx = true, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(-32e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(32e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.atr_mask = 0, + .base.atr_txval = 0, + .base.atr_rxval = 0, + //.base.atr_tx_delay = 0, + //.base.atr_rx_delay = 0, + + .base.init = db_basic_init, + .base.set_freq = db_basic_set_freq, + .base.set_gain = db_basic_set_gain, + .base.set_tx_enable = db_basic_set_tx_enable, +}; + +struct db_basic db_lf_rx = { + .base.dbid = 0x000f, + .base.is_tx = false, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(32e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.is_quadrature = false, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.atr_mask = 0, + .base.atr_txval = 0, + .base.atr_rxval = 0, + //.base.atr_tx_delay = 0, + //.base.atr_rx_delay = 0, + + .base.init = db_basic_init, + .base.set_freq = db_basic_set_freq, + .base.set_gain = db_basic_set_gain, + .base.set_tx_enable = db_basic_set_tx_enable, +}; + + +bool +db_basic_init(struct db_base *db) +{ + return true; +} + +bool +db_basic_set_freq(struct db_base *db, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc) +{ + *dc = 0; + return true; +} + +bool +db_basic_set_gain(struct db_base *db, u2_fxpt_gain_t gain) +{ + return true; +} + +bool +db_basic_set_tx_enable(struct db_base *db, bool on) +{ + return true; +} + diff --git a/usrp2/firmware/lib/db_dbsrx.c b/usrp2/firmware/lib/db_dbsrx.c new file mode 100644 index 00000000..2174a6cd --- /dev/null +++ b/usrp2/firmware/lib/db_dbsrx.c @@ -0,0 +1,395 @@ +/* -*- c++ -*- */ +/* + * Copyright 2009 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#define min(X,Y) ((X) < (Y) ? (X) : (Y)) +#define max(X,Y) ((X) > (Y) ? (X) : (Y)) +#define abs(X) ((X) < (0) ? ((-1)*(X)) : (X)) + +#define I2C_ADDR 0x67 +#define REFCLK_DIVISOR 25 // Gives a 4 MHz clock +#define REFCLK_FREQ U2_DOUBLE_TO_FXPT_FREQ(MASTER_CLK_RATE/REFCLK_DIVISOR) +#define REFCLK_FREQ_INT u2_fxpt_freq_round_to_int(REFCLK_FREQ) + +#define VMAXGAIN .75 +#define VMINGAIN 2.6 +#define RFGAINMAX 60 +#define BBGAINMAX 24 +#define DACFULLSCALE 3.3 + +bool db_dbsrx_init(struct db_base *db); +bool db_dbsrx_set_freq(struct db_base *db, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc); +bool db_dbsrx_set_gain(struct db_base *db, u2_fxpt_gain_t gain); + +struct db_dbsrx_common { + int d_n; + int d_div2; + int d_osc; + int d_cp; + int d_r_reg; + int d_fdac; + int d_m; + int d_dl; + int d_ade; + int d_adl; + int d_gc2; + int d_diag; +}; + +struct db_dbsrx_dummy { + struct db_base base; + struct db_dbsrx_common common; +}; + +struct db_dbsrx { + struct db_base base; + struct db_dbsrx_common common; +}; + +struct db_dbsrx db_dbsrx = { + .base.dbid = 0x000d, + .base.is_tx = false, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(500e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(2.6e9), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(RFGAINMAX+BBGAINMAX), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(1), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = db_dbsrx_init, + .base.set_freq = db_dbsrx_set_freq, + .base.set_gain = db_dbsrx_set_gain, + .base.set_tx_enable = 0, + .base.atr_mask = 0x0000, + .base.atr_txval = 0, + .base.atr_rxval = 0, + //.base.atr_tx_delay = + //.base.atr_rx_delay = + .common.d_n = 950, + .common.d_div2 = 0, + .common.d_osc = 5, + .common.d_cp = 3, + .common.d_r_reg = 1, + .common.d_fdac = 127, + .common.d_m = 2, + .common.d_dl = 1, + .common.d_ade = 0, + .common.d_adl = 0, + .common.d_gc2 = 31, + .common.d_diag = 0, +}; + +bool +db_dbsrx_init(struct db_base *dbb){ + struct db_dbsrx_dummy *db = (struct db_dbsrx_dummy *) dbb; + db->base.set_gain(dbb, (db->base.gain_max + db->base.gain_min)/2); + clocks_enable_rx_dboard(true, REFCLK_DIVISOR); // Gives 4 MHz clock + + return true; +} + +/************************************************** + * Registers + **************************************************/ +static int +_read_adc (void){ + unsigned char readback[2]; + i2c_read(I2C_ADDR, readback, 2*sizeof(unsigned char)); + int adc_val = (readback[0] >> 2)&7; + //printf("READBACK[0] %d, [1] %d\n",readback[0],readback[1]); + //printf("ADC: %d\n",adc_val); + return adc_val; +} + +static void +_write_reg (int regno, int v){ + //regno is in [0,5], v is value to write to register""" + unsigned char args[2]; + args[0] = (unsigned char)regno; + args[1] = (unsigned char)v; + i2c_write(I2C_ADDR, args, 2*sizeof(unsigned char)); + //printf("Reg %d, Val %x\n",regno,v); +} + +static void _send_reg_0(struct db_dbsrx_dummy *db){ + _write_reg(0,(db->common.d_div2<<7) + (db->common.d_n>>8)); +} + +static void _send_reg_1(struct db_dbsrx_dummy *db){ + _write_reg(1,db->common.d_n & 255); +} + +static void _send_reg_2(struct db_dbsrx_dummy *db){ + _write_reg(2,db->common.d_osc + (db->common.d_cp<<3) + (db->common.d_r_reg<<5)); +} + +static void _send_reg_3(struct db_dbsrx_dummy *db){ + _write_reg(3,db->common.d_fdac); +} + +static void _send_reg_4(struct db_dbsrx_dummy *db){ + _write_reg(4,db->common.d_m + (db->common.d_dl<<5) + (db->common.d_ade<<6) + (db->common.d_adl<<7)); +} + +static void _send_reg_5(struct db_dbsrx_dummy *db){ + _write_reg(5,db->common.d_gc2 + (db->common.d_diag<<5)); +} + +/************************************************** + * Helpers for setting the freq + **************************************************/ +static void +_set_div2(struct db_dbsrx_dummy *db, int div2){ + db->common.d_div2 = div2; + _send_reg_0(db); +} + +// FIXME How do we handle ADE and ADL properly? +static void +_set_ade(struct db_dbsrx_dummy *db, int ade){ + db->common.d_ade = ade; + _send_reg_4(db); +} + +static void +_set_r(struct db_dbsrx_dummy *db, int r){ + db->common.d_r_reg = r; + _send_reg_2(db); +} + +static void +_set_n(struct db_dbsrx_dummy *db, int n){ + db->common.d_n = n; + _send_reg_0(db); + _send_reg_1(db); +} + +static void +_set_osc(struct db_dbsrx_dummy *db, int osc){ + db->common.d_osc = osc; + _send_reg_2(db); +} + +static void +_set_cp(struct db_dbsrx_dummy *db, int cp){ + db->common.d_cp = cp; + _send_reg_2(db); +} + +/************************************************** + * Set the freq + **************************************************/ + + +bool +db_dbsrx_set_freq(struct db_base *dbb, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc){ + struct db_dbsrx_dummy *db = (struct db_dbsrx_dummy *) dbb; + + if(!(freq>=db->base.freq_min && freq<=db->base.freq_max)) { + return false; + } + + u2_fxpt_freq_t vcofreq; + if(freq < U2_DOUBLE_TO_FXPT_FREQ(1150e6)) { + _set_div2(db, 0); + vcofreq = 4 * freq; + } + else { + _set_div2(db, 1); + vcofreq = 2 * freq; + } + + _set_ade(db, 1); + int rmin = max(2, u2_fxpt_freq_round_to_int(REFCLK_FREQ/2e6)); //TODO? remove max() + //int rmax = min(128, u2_fxpt_freq_round_to_int(REFCLK_FREQ/500e3)); //TODO? remove min() + int n = 0; + u2_fxpt_freq_t best_delta = U2_DOUBLE_TO_FXPT_FREQ(10e6); + u2_fxpt_freq_t delta; + + int r_reg = 0; + while ((r_reg<7) && ((2<= 7) { + return false; + } + else { + vco = vco + 1; + } + } + _set_osc(db, vco); + } + + if(adc_val == 1 || adc_val == 2) { + _set_cp(db, 1); + } + else if(adc_val == 3 || adc_val == 4) { + _set_cp(db, 2); + } + else { + _set_cp(db, 3); + } + //printf("Final VCO choice %d\n",vco); + + *dc = db->common.d_n * REFCLK_FREQ / (2<common.d_r_reg); + return true; + +} + +/************************************************** + * Helpers for setting the gain + **************************************************/ + +static void +_set_gc2(struct db_dbsrx_dummy *db, int gc2){ + db->common.d_gc2 = gc2; + _send_reg_5(db); +} + +/************************************************** + * Set the gain + **************************************************/ +bool +db_dbsrx_set_gain(struct db_base *dbb, u2_fxpt_gain_t gain){ + struct db_dbsrx_dummy *db = (struct db_dbsrx_dummy *) dbb; + + u2_fxpt_gain_t rfgain, bbgain; + + if(!(gain >= db->base.gain_min && gain <= db->base.gain_max)) { + return false; + } + + if(gain < U2_DOUBLE_TO_FXPT_GAIN(RFGAINMAX)) { + rfgain = gain; + bbgain = 0; + } + else { + rfgain = U2_DOUBLE_TO_FXPT_GAIN(RFGAINMAX); + bbgain = gain - U2_DOUBLE_TO_FXPT_GAIN(RFGAINMAX); + } + + int rf_gain_slope_q8 = 256 * 4096 * (VMAXGAIN-VMINGAIN) / RFGAINMAX / DACFULLSCALE; + int rf_gain_offset_q8 = 128 * 256 * 4096 * VMINGAIN / DACFULLSCALE; + + int rfdac = (rfgain*rf_gain_slope_q8 + rf_gain_offset_q8)>>15; + + //printf("Set RF Gain %d, %d\n",rfgain,rfdac); + lsdac_write_rx(1,rfdac); + + // Set GC2 + int bb_gain_slope_q8 = 256*(0-31)/(BBGAINMAX-0); + + int gc2 = u2_fxpt_gain_round_to_int((bb_gain_slope_q8 * bbgain)>>8) + 31; + //printf("Set BB Gain: %d, gc2 %d\n",bbgain,gc2); + + _set_gc2(db, gc2); + + return true; +} + +/************************************************** + * Helpers for setting the bw + **************************************************/ +static void +_set_m(struct db_dbsrx_dummy *db, int m){ + db->common.d_m = m; + _send_reg_4(db); +} + +static void +_set_fdac(struct db_dbsrx_dummy *db, int fdac){ + db->common.d_fdac = fdac; + _send_reg_3(db); +} diff --git a/usrp2/firmware/lib/db_init.c b/usrp2/firmware/lib/db_init.c new file mode 100644 index 00000000..925a34f3 --- /dev/null +++ b/usrp2/firmware/lib/db_init.c @@ -0,0 +1,426 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +struct db_base *tx_dboard; // the tx daughterboard that's installed +struct db_base *rx_dboard; // the rx daughterboard that's installed + +extern struct db_base db_basic_tx; +extern struct db_base db_basic_rx; +extern struct db_base db_lf_tx; +extern struct db_base db_lf_rx; +extern struct db_base db_rfx_400_tx; +extern struct db_base db_rfx_400_rx; +extern struct db_base db_rfx_900_tx; +extern struct db_base db_rfx_900_rx; +extern struct db_base db_rfx_1200_tx; +extern struct db_base db_rfx_1200_rx; +extern struct db_base db_rfx_1800_tx; +extern struct db_base db_rfx_1800_rx; +extern struct db_base db_rfx_2400_tx; +extern struct db_base db_rfx_2400_rx; +extern struct db_base db_tvrx1; +extern struct db_base db_tvrx2; +extern struct db_base db_tvrx3; +extern struct db_base db_dbsrx; + +extern struct db_base db_xcvr2450_tx; +extern struct db_base db_xcvr2450_rx; + +struct db_base *all_dboards[] = { + &db_basic_tx, + &db_basic_rx, + &db_lf_tx, + &db_lf_rx, + &db_rfx_400_tx, + &db_rfx_400_rx, + &db_rfx_900_tx, + &db_rfx_900_rx, + &db_rfx_1200_tx, + &db_rfx_1200_rx, + &db_rfx_1800_tx, + &db_rfx_1800_rx, + &db_rfx_2400_tx, + &db_rfx_2400_rx, + &db_tvrx1, + &db_tvrx2, + &db_tvrx3, + &db_dbsrx, + &db_xcvr2450_tx, + &db_xcvr2450_rx, + 0 +}; + + +typedef enum { UDBE_OK, UDBE_NO_EEPROM, UDBE_INVALID_EEPROM } usrp_dbeeprom_status_t; + +static usrp_dbeeprom_status_t +read_raw_dboard_eeprom (unsigned char *buf, int i2c_addr) +{ + if (!eeprom_read (i2c_addr, 0, buf, DB_EEPROM_CLEN)) + return UDBE_NO_EEPROM; + + if (buf[DB_EEPROM_MAGIC] != DB_EEPROM_MAGIC_VALUE) + return UDBE_INVALID_EEPROM; + + int sum = 0; + unsigned int i; + for (i = 0; i < DB_EEPROM_CLEN; i++) + sum += buf[i]; + + if ((sum & 0xff) != 0) + return UDBE_INVALID_EEPROM; + + return UDBE_OK; +} + + +/* + * Return DBID, -1 or -2 + */ +int +read_dboard_eeprom(int i2c_addr) +{ + unsigned char buf[DB_EEPROM_CLEN]; + + usrp_dbeeprom_status_t s = read_raw_dboard_eeprom (buf, i2c_addr); + + //printf("\nread_raw_dboard_eeprom: %d\n", s); + + switch (s){ + case UDBE_OK: + return (buf[DB_EEPROM_ID_MSB] << 8) | buf[DB_EEPROM_ID_LSB]; + + case UDBE_NO_EEPROM: + default: + return -1; + + case UDBE_INVALID_EEPROM: + return -2; + } +} + + +static struct db_base * +lookup_dbid(int dbid) +{ + if (dbid < 0) + return 0; + + int i; + for (i = 0; all_dboards[i]; i++) + if (all_dboards[i]->dbid == dbid) + return all_dboards[i]; + + return 0; +} + +static struct db_base * +lookup_dboard(int i2c_addr, struct db_base *default_db, char *msg) +{ + struct db_base *db; + int dbid = read_dboard_eeprom(i2c_addr); + + // FIXME removing this printf has the system hang if there are two d'boards + // installed. (I think the problem is in i2c_read/write or the way + // I kludge the zero-byte write to set the read address in eeprom_read.) + printf("%s dbid: 0x%x\n", msg, dbid); + + if (dbid < 0){ // there was some kind of problem. Treat as Basic Tx + return default_db; + } + else if ((db = lookup_dbid(dbid)) == 0){ + printf("No daugherboard code for dbid = 0x%x\n", dbid); + return default_db; + } + return db; +} + +void +set_atr_regs(int bank, struct db_base *db) +{ + uint32_t val[4]; + int shift; + int mask; + int i; + + val[ATR_IDLE] = db->atr_rxval; + val[ATR_RX] = db->atr_rxval; + val[ATR_TX] = db->atr_txval; + val[ATR_FULL] = db->atr_txval; + + if (bank == GPIO_TX_BANK){ + mask = 0xffff0000; + shift = 16; + } + else { + mask = 0x0000ffff; + shift = 0; + } + + for (i = 0; i < 4; i++){ + int t = (atr_regs->v[i] & ~mask) | ((val[i] << shift) & mask); + //printf("atr_regs[%d] = 0x%x\n", i, t); + atr_regs->v[i] = t; + } +} + +static void +set_gpio_mode(int bank, struct db_base *db) +{ + int i; + + hal_gpio_set_ddr(bank, db->output_enables, 0xffff); + set_atr_regs(bank, db); + + for (i = 0; i < 16; i++){ + if (db->used_pins & (1 << i)){ + // set to either GPIO_SEL_SW or GPIO_SEL_ATR + hal_gpio_set_sel(bank, i, (db->atr_mask & (1 << i)) ? 'a' : 's'); + } + } +} + +static int __attribute__((unused)) +determine_tx_mux_value(struct db_base *db) +{ + if (db->i_and_q_swapped) + return 0x01; + else + return 0x10; +} + +static int +determine_rx_mux_value(struct db_base *db) +{ +#define ADC0 0x0 +#define ADC1 0x1 +#define ZERO 0x2 + + static int truth_table[8] = { + /* swap_iq, uses */ + /* 0, 0x0 */ (ZERO << 2) | ZERO, // N/A + /* 0, 0x1 */ (ZERO << 2) | ADC0, + /* 0, 0x2 */ (ZERO << 2) | ADC1, + /* 0, 0x3 */ (ADC1 << 2) | ADC0, + /* 1, 0x0 */ (ZERO << 2) | ZERO, // N/A + /* 1, 0x1 */ (ZERO << 2) | ADC0, + /* 1, 0x2 */ (ZERO << 2) | ADC1, + /* 1, 0x3 */ (ADC0 << 2) | ADC1, + }; + + int subdev0_uses; + int subdev1_uses; + int uses; + + if (db->is_quadrature) + subdev0_uses = 0x3; // uses A/D 0 and 1 + else + subdev0_uses = 0x1; // uses A/D 0 only + + // FIXME second subdev on Basic Rx, LF RX + // if subdev2 exists + // subdev1_uses = 0x2; + subdev1_uses = 0; + + uses = subdev0_uses; + + int swap_iq = db->i_and_q_swapped & 0x1; + int index = (swap_iq << 2) | uses; + + return truth_table[index]; +} + + +void +db_init(void) +{ + int m; + + tx_dboard = lookup_dboard(I2C_ADDR_TX_A, &db_basic_tx, "Tx"); + //printf("db_init: tx dbid = 0x%x\n", tx_dboard->dbid); + set_gpio_mode(GPIO_TX_BANK, tx_dboard); + tx_dboard->init(tx_dboard); + m = determine_tx_mux_value(tx_dboard); + dsp_tx_regs->tx_mux = m; + //printf("tx_mux = 0x%x\n", m); + tx_dboard->current_lo_offset = tx_dboard->default_lo_offset; + + rx_dboard = lookup_dboard(I2C_ADDR_RX_A, &db_basic_rx, "Rx"); + //printf("db_init: rx dbid = 0x%x\n", rx_dboard->dbid); + set_gpio_mode(GPIO_RX_BANK, rx_dboard); + rx_dboard->init(rx_dboard); + m = determine_rx_mux_value(rx_dboard); + dsp_rx_regs->rx_mux = m; + //printf("rx_mux = 0x%x\n", m); + rx_dboard->current_lo_offset = rx_dboard->default_lo_offset; +} + +/*! + * Calculate the frequency to use for setting the digital down converter. + * + * \param[in] target_freq desired RF frequency (Hz) + * \param[in] baseband_freq the RF frequency that corresponds to DC in the IF. + * + * \param[out] dxc_freq is the value for the ddc + * \param[out] inverted is true if we're operating in an inverted Nyquist zone. +*/ +void +calc_dxc_freq(u2_fxpt_freq_t target_freq, u2_fxpt_freq_t baseband_freq, + u2_fxpt_freq_t *dxc_freq, bool *inverted) +{ + u2_fxpt_freq_t fs = U2_DOUBLE_TO_FXPT_FREQ(100e6); // converter sample rate + u2_fxpt_freq_t delta = target_freq - baseband_freq; + +#if 0 + printf("calc_dxc_freq\n"); + printf(" fs = "); print_fxpt_freq(fs); newline(); + printf(" target = "); print_fxpt_freq(target_freq); newline(); + printf(" baseband = "); print_fxpt_freq(baseband_freq); newline(); + printf(" delta = "); print_fxpt_freq(delta); newline(); +#endif + + if (delta >= 0){ + while (delta > fs) + delta -= fs; + if (delta <= fs/2){ // non-inverted region + *dxc_freq = -delta; + *inverted = false; + } + else { // inverted region + *dxc_freq = delta - fs; + *inverted = true; + } + } + else { + while (delta < -fs) + delta += fs; + if (delta >= -fs/2){ // non-inverted region + *dxc_freq = -delta; + *inverted = false; + } + else { // inverted region + *dxc_freq = delta + fs; + *inverted = true; + } + } +} + +bool +db_set_lo_offset(struct db_base *db, u2_fxpt_freq_t offset) +{ + db->current_lo_offset = offset; + return true; +} + +bool +db_tune(struct db_base *db, u2_fxpt_freq_t target_freq, struct tune_result *result) +{ + memset(result, 0, sizeof(*result)); + bool inverted = false; + u2_fxpt_freq_t dxc_freq; + u2_fxpt_freq_t actual_dxc_freq; + + // Ask the d'board to tune as closely as it can to target_freq+lo_offset + bool ok = db->set_freq(db, target_freq+db->current_lo_offset, &result->baseband_freq); + + // Calculate the DDC setting that will downconvert the baseband from the + // daughterboard to our target frequency. + calc_dxc_freq(target_freq, result->baseband_freq, &dxc_freq, &inverted); + + // If the spectrum is inverted, and the daughterboard doesn't do + // quadrature downconversion, we can fix the inversion by flipping the + // sign of the dxc_freq... (This only happens using the basic_rx board) + + if (db->spectrum_inverted) + inverted = !inverted; + + if (inverted && !db->is_quadrature){ + dxc_freq = -dxc_freq; + inverted = !inverted; + } + + if (db->is_tx){ + dxc_freq = -dxc_freq; // down conversion versus up conversion + ok &= db_set_duc_freq(dxc_freq, &actual_dxc_freq); + } + else { + ok &= db_set_ddc_freq(dxc_freq, &actual_dxc_freq); + } + + result->dxc_freq = dxc_freq; + result->residual_freq = dxc_freq - actual_dxc_freq; + result->inverted = inverted; + return ok; +} + +static int32_t +compute_freq_control_word(u2_fxpt_freq_t target_freq, u2_fxpt_freq_t *actual_freq) +{ + // If we were using floating point, we'd calculate + // master = 100e6; + // v = (int) rint(target_freq / master_freq) * pow(2.0, 32.0); + + //printf("compute_freq_control_word\n"); + //printf(" target_freq = "); print_fxpt_freq(target_freq); newline(); + + int32_t master_freq = 100000000; // 100M + + int32_t v = ((target_freq << 12)) / master_freq; + //printf(" fcw = %d\n", v); + + *actual_freq = (v * (int64_t) master_freq) >> 12; + + //printf(" actual = "); print_fxpt_freq(*actual_freq); newline(); + + return v; +} + + +bool +db_set_ddc_freq(u2_fxpt_freq_t dxc_freq, u2_fxpt_freq_t *actual_dxc_freq) +{ + int32_t v = compute_freq_control_word(dxc_freq, actual_dxc_freq); + dsp_rx_regs->freq = v; + return true; +} + +bool +db_set_duc_freq(u2_fxpt_freq_t dxc_freq, u2_fxpt_freq_t *actual_dxc_freq) +{ + int32_t v = compute_freq_control_word(dxc_freq, actual_dxc_freq); + dsp_tx_regs->freq = v; + return true; +} + +bool +db_set_gain(struct db_base *db, u2_fxpt_gain_t gain) +{ + return db->set_gain(db, gain); +} diff --git a/usrp2/firmware/lib/db_rfx.c b/usrp2/firmware/lib/db_rfx.c new file mode 100644 index 00000000..2f950016 --- /dev/null +++ b/usrp2/firmware/lib/db_rfx.c @@ -0,0 +1,590 @@ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + + +bool rfx_init_rx(struct db_base *db); +bool rfx_init_tx(struct db_base *db); +bool rfx_set_freq(struct db_base *db, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc); +bool rfx_set_gain_rx(struct db_base *db, u2_fxpt_gain_t gain); +bool rfx_set_gain_tx(struct db_base *db, u2_fxpt_gain_t gain); +bool rfx_set_tx_enable(struct db_base *, bool on); + +// Control Latch Defines +#define P 0 // Prescalar value for setting in regs, must match the next line... +#define PRESCALER 8 // Presacalar value for computations +#define PD 0 // Power down, 0 = normal operation +#define PL 0 // PLL power output +#define MTLD 1 // Mute till lock detect +#define CPGAIN 0 // Charge pump gain, use setting 1, also in N-reg +#define CP3S 0 // Charge pump tri-state, 0 = normal operation +#define PDP 1 // Phase detector polarity +#define MUXOUT 1 // Digital lock detect, active high +#define CR 0 // normal operation +#define PC 1 // core power + +// N Latch Defines +#define DIVSEL 0 // N Counter always operates on full rate +#define N_RSV 0 + +// R Latch Defines +#define R_RSV 0 +#define R_BSC 3 +#define R_TMB 0 +#define R_LDP 1 +#define R_ABP 0 +#define R_DIV 16 + +#define phdet_freq (U2_DOUBLE_TO_FXPT_FREQ(100e6/R_DIV)) + +// IO Pin functions +#define POWER_UP (1 << 7) // Low enables power supply +#define ANT_SW (1 << 6) // On TX DB, 0 = TX, 1 = RX, on RX DB 0 = main ant, 1 = RX2 +#define MIX_EN (1 << 5) // Enable appropriate mixer +#define LOCKDET_MASK (1 << 2) // Input pin + +struct db_rfx_common { + // RFX common stuff + unsigned char DIV2; + unsigned char CP1; + unsigned char CP2; + int freq_mult; + int spi_mask; +}; + +struct db_rfx_dummy { + struct db_base base; + struct db_rfx_common common; +}; + + +struct db_rfx_400_rx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_400_tx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_900_rx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_900_tx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_1200_rx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_1200_tx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_1800_rx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_1800_tx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_2400_rx { + struct db_base base; + struct db_rfx_common common; +}; + +struct db_rfx_2400_tx { + struct db_base base; + struct db_rfx_common common; +}; + + +/* + * The class instances + */ +struct db_rfx_400_rx db_rfx_400_rx = { + .base.dbid = 0x0024, + .base.is_tx = false, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(400e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(500e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(45), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0.022), + .base.is_quadrature = true, + .base.i_and_q_swapped = true, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = rfx_init_rx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_rx, + .base.set_tx_enable = 0, + .base.atr_mask = 0x00E0, + .base.atr_txval = POWER_UP, + .base.atr_rxval = POWER_UP|MIX_EN, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 0, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_RX_DB, + .common.freq_mult = 2 +}; + + +struct db_rfx_400_tx db_rfx_400_tx = { + .base.dbid = 0x0028, + .base.is_tx = true, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(400e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(500e6), + //.base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(xxx), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(12.5e6), + .base.init = rfx_init_tx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_tx, + .base.set_tx_enable = rfx_set_tx_enable, + .base.atr_mask = 0x00E0, + .base.atr_txval = POWER_UP|MIX_EN, + .base.atr_rxval = POWER_UP|ANT_SW, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 1, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_TX_DB, + .common.freq_mult = 2 +}; + +struct db_rfx_900_rx db_rfx_900_rx = { + .base.dbid = 0x0025, + .base.is_tx = false, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(800e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(1000e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(70), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0.034), + .base.is_quadrature = true, + .base.i_and_q_swapped = true, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = rfx_init_rx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_rx, + .base.set_tx_enable = 0, + .base.atr_mask = 0x00E0, + .base.atr_txval = 0, + .base.atr_rxval = MIX_EN, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 1, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_RX_DB, + .common.freq_mult = 2 +}; + + +struct db_rfx_900_tx db_rfx_900_tx = { + .base.dbid = 0x0029, + .base.is_tx = true, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(800e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(1000e6), + //.base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(xxx), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(12.5e6), + .base.init = rfx_init_tx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_tx, + .base.set_tx_enable = rfx_set_tx_enable, + .base.atr_mask = 0x00E0, + .base.atr_txval = MIX_EN, + .base.atr_rxval = ANT_SW, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 1, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_TX_DB, + .common.freq_mult = 2 +}; + +struct db_rfx_1200_rx db_rfx_1200_rx = { + .base.dbid = 0x0026, + .base.is_tx = false, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(1150e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(1350e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(70), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0.034), + .base.is_quadrature = true, + .base.i_and_q_swapped = true, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = rfx_init_rx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_rx, + .base.set_tx_enable = 0, + .base.atr_mask = 0x00E0, + .base.atr_txval = 0, + .base.atr_rxval = MIX_EN, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 1, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_RX_DB, + .common.freq_mult = 2 +}; + + +struct db_rfx_1200_tx db_rfx_1200_tx = { + .base.dbid = 0x002a, + .base.is_tx = true, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(1150e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(1350e6), + //.base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(xxx), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(12.5e6), + .base.init = rfx_init_tx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_tx, + .base.set_tx_enable = rfx_set_tx_enable, + .base.atr_mask = 0x00E0, + .base.atr_txval = MIX_EN, + .base.atr_rxval = ANT_SW, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 1, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_TX_DB, + .common.freq_mult = 2 +}; + +struct db_rfx_1800_rx db_rfx_1800_rx = { + .base.dbid = 0x0034, + .base.is_tx = false, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(1600e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(2000e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(70), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0.034), + .base.is_quadrature = true, + .base.i_and_q_swapped = true, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = rfx_init_rx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_rx, + .base.set_tx_enable = 0, + .base.atr_mask = 0x00E0, + .base.atr_txval = 0, + .base.atr_rxval = MIX_EN, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 0, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_RX_DB, + .common.freq_mult = 1 +}; + + +struct db_rfx_1800_tx db_rfx_1800_tx = { + .base.dbid = 0x0035, + .base.is_tx = true, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(1600e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(2000e6), + //.base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(xxx), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(12.5e6), + .base.init = rfx_init_tx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_tx, + .base.set_tx_enable = rfx_set_tx_enable, + .base.atr_mask = 0x00E0, + .base.atr_txval = MIX_EN, + .base.atr_rxval = ANT_SW, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 0, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_TX_DB, + .common.freq_mult = 1 +}; + + +struct db_rfx_2400_rx db_rfx_2400_rx = { + .base.dbid = 0x0027, + .base.is_tx = false, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(2300e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(2700e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(70), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(0.034), + .base.is_quadrature = true, + .base.i_and_q_swapped = true, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = rfx_init_rx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_rx, + .base.set_tx_enable = 0, + .base.atr_mask = 0x00E0, + .base.atr_txval = 0, + .base.atr_rxval = MIX_EN, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 0, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_RX_DB, + .common.freq_mult = 1 +}; + + +struct db_rfx_2400_tx db_rfx_2400_tx = { + .base.dbid = 0x002b, + .base.is_tx = true, + .base.output_enables = 0x00E0, + .base.used_pins = 0x00FF, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(2300e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(2700e6), + //.base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(xxx), + //.base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(xxx), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(12.5e6), + .base.init = rfx_init_tx, + .base.set_freq = rfx_set_freq, + .base.set_gain = rfx_set_gain_tx, + .base.set_tx_enable = rfx_set_tx_enable, + .base.atr_mask = 0x00E0, + .base.atr_txval = MIX_EN, + .base.atr_rxval = ANT_SW, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.DIV2 = 0, + .common.CP1 = 7, + .common.CP2 = 7, + .common.spi_mask = SPI_SS_TX_DB, + .common.freq_mult = 1 +}; + + +bool +rfx_init_tx(struct db_base *dbb) +{ + //struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; + clocks_enable_tx_dboard(true, 0); + + // Set the freq now to get the one time 10ms delay out of the way. + u2_fxpt_freq_t dc; + dbb->set_freq(dbb, dbb->freq_min, &dc); + return true; +} + +bool +rfx_init_rx(struct db_base *dbb) +{ + //struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; + clocks_enable_rx_dboard(true, 0); + + // test gain + dbb->set_gain(dbb,U2_DOUBLE_TO_FXPT_GAIN(45.0)); + + // Set the freq now to get the one time 10ms delay out of the way. + u2_fxpt_freq_t dc; + dbb->set_freq(dbb, dbb->freq_min, &dc); + + return true; +} + +bool +rfx_set_freq(struct db_base *dbb, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc) +{ + static unsigned char first = true; + + *dc = 0; + struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; + u2_fxpt_freq_t desired_n = (U2_DOUBLE_TO_FXPT_FREQ(1.0)*db->common.freq_mult*freq)/phdet_freq; + int N_DIV = u2_fxpt_freq_round_to_int(desired_n); + int B = N_DIV/PRESCALER; + int A = N_DIV - PRESCALER*B; + + if(Bcommon.DIV2<<22)|(CPGAIN<<21)|(B<<8)|(N_RSV<<7)|(A<<2)|2; + int C = (P<<22)|(PD<<20)|(db->common.CP2<<17)|(db->common.CP1<<14)|(PL<<12)| + (MTLD<<11)|(CPGAIN<<10)|(CP3S<<9)|(PDP<<8)|(MUXOUT<<5)|(CR<<4)|(PC<<2)|0; + + spi_transact(SPI_TXONLY,db->common.spi_mask,R,24,SPIF_PUSH_FALL); + spi_transact(SPI_TXONLY,db->common.spi_mask,C,24,SPIF_PUSH_FALL); + if (first){ + first = false; + mdelay(10); + } + spi_transact(SPI_TXONLY,db->common.spi_mask,N,24,SPIF_PUSH_FALL); + + //printf("A = %d, B = %d, N_DIV = %d\n",A, B, N_DIV); + *dc = (N_DIV * phdet_freq) / db->common.freq_mult; + return true; +} + +bool +rfx_set_gain_tx(struct db_base *dbb, u2_fxpt_gain_t gain) +{ + // There is no analog gain control on TX + return true; +} + +bool +rfx_set_gain_rx(struct db_base *dbb, u2_fxpt_gain_t gain) +{ + struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; + + int offset_q8 = (int)(1.2/3.3*4096*(1<<15)); + int range_q15 = (int)(-1.0*4096/3.3*256*128); + int slope_q8 = range_q15/db->base.gain_max; + + int dacword = ((slope_q8 * gain) + offset_q8)>>15; + //printf("DACWORD %d\n",dacword); + lsdac_write_rx(1,dacword); + return true; +} + + +bool +rfx_set_tx_enable(struct db_base *dbb, bool on) +{ + struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; + + // FIXME + + return false; +} + +bool +rfx_lock_detect(struct db_base *dbb) +{ + struct db_rfx_dummy *db = (struct db_rfx_dummy *) dbb; + int pins; + pins = hal_gpio_read( db->base.is_tx ? GPIO_TX_BANK : GPIO_RX_BANK ); + if(pins & LOCKDET_MASK) + return true; + return false; +} + +/* + def select_rx_antenna(self, which_antenna): + """ + Specify which antenna port to use for reception. + @param which_antenna: either 'TX/RX' or 'RX2' + """ + if which_antenna in (0, 'TX/RX'): + self._u.write_io(self._which, 0, RX2_RX1N) + elif which_antenna in (1, 'RX2'): + self._u.write_io(self._which, RX2_RX1N, RX2_RX1N) + else: + raise ValueError, "which_antenna must be either 'TX/RX' or 'RX2'" + + def set_gain(self, gain): + """ + Set the gain. + + @param gain: gain in decibels + @returns True/False + """ + maxgain = self.gain_range()[1] - self._u.pga_max() + mingain = self.gain_range()[0] + if gain > maxgain: + pga_gain = gain-maxgain + assert pga_gain <= self._u.pga_max() + agc_gain = maxgain + else: + pga_gain = 0 + agc_gain = gain + V_maxgain = .2 + V_mingain = 1.2 + V_fullscale = 3.3 + dac_value = (agc_gain*(V_maxgain-V_mingain)/(maxgain-mingain) + V_mingain)*4096/V_fullscale + assert dac_value>=0 and dac_value<4096 + return self._u.write_aux_dac(self._which, 0, int(dac_value)) and \ + self._set_pga(int(pga_gain)) + + def gain_range(self): + return (self._u.pga_min(), self._u.pga_max() + 70, 0.05) -- For 900-2400 + return (self._u.pga_min(), self._u.pga_max() + 45, 0.035) -- For 400 + +*/ diff --git a/usrp2/firmware/lib/db_tvrx.c b/usrp2/firmware/lib/db_tvrx.c new file mode 100644 index 00000000..ba70b640 --- /dev/null +++ b/usrp2/firmware/lib/db_tvrx.c @@ -0,0 +1,242 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +bool tvrx_init(struct db_base *db); +bool tvrx_set_freq(struct db_base *db, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc); +bool tvrx_set_gain(struct db_base *db, u2_fxpt_gain_t gain); + +#define I2C_ADDR 0x60 +#define ref_freq (U2_DOUBLE_TO_FXPT_FREQ(4e6)/640*8) + +#define ref_div 640 /* choices are 640, 512, 1024 */ + +#if (ref_div == 640) +#define ref_div_byte 0 +#else +#if (ref_div == 512) +#define ref_div_byte 0x6 +#else +#define ref_div_byte 0x2 +#endif +#endif + +#define fast_tuning 0x40 + +#define control_byte_1 (0x88|fast_tuning|ref_div_byte) + + +struct db_tvrx_common { + // TVRX common stuff + u2_fxpt_freq_t first_if; + u2_fxpt_freq_t second_if; +}; + +struct db_tvrx_dummy { + struct db_base base; + struct db_tvrx_common common; +}; + +struct db_tvrx1 { + struct db_base base; + struct db_tvrx_common common; +}; + +struct db_tvrx2 { + struct db_base base; + struct db_tvrx_common common; +}; + +struct db_tvrx3 { + struct db_base base; + struct db_tvrx_common common; +}; + +/* The class instances */ +struct db_tvrx1 db_tvrx1 = { + .base.dbid = 0x0003, + .base.is_tx = false, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(50e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(860e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(95), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(1), + .base.is_quadrature = false, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = tvrx_init, + .base.set_freq = tvrx_set_freq, + .base.set_gain = tvrx_set_gain, + .base.set_tx_enable = 0, + .base.atr_mask = 0x0000, + .base.atr_txval = 0, + .base.atr_rxval = 0, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.first_if = U2_DOUBLE_TO_FXPT_FREQ(43.75e6), + .common.second_if = U2_DOUBLE_TO_FXPT_FREQ(5.75e6), +}; + +struct db_tvrx2 db_tvrx2 = { + .base.dbid = 0x000c, + .base.is_tx = false, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(50e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(860e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(95), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(1), + .base.is_quadrature = false, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = true, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = tvrx_init, + .base.set_freq = tvrx_set_freq, + .base.set_gain = tvrx_set_gain, + .base.set_tx_enable = 0, + .base.atr_mask = 0x0000, + .base.atr_txval = 0, + .base.atr_rxval = 0, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.first_if = U2_DOUBLE_TO_FXPT_FREQ(44e6), + .common.second_if = U2_DOUBLE_TO_FXPT_FREQ(44e6), +}; + +struct db_tvrx3 db_tvrx3 = { + .base.dbid = 0x0040, + .base.is_tx = false, + .base.output_enables = 0x0000, + .base.used_pins = 0x0000, + .base.freq_min = U2_DOUBLE_TO_FXPT_FREQ(50e6), + .base.freq_max = U2_DOUBLE_TO_FXPT_FREQ(860e6), + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(95), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(1), + .base.is_quadrature = false, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = true, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = tvrx_init, + .base.set_freq = tvrx_set_freq, + .base.set_gain = tvrx_set_gain, + .base.set_tx_enable = 0, + .base.atr_mask = 0x0000, + .base.atr_txval = 0, + .base.atr_rxval = 0, + // .base.atr_tx_delay = + // .base.atr_rx_delay = + .common.first_if = U2_DOUBLE_TO_FXPT_FREQ(44e6), + .common.second_if = U2_DOUBLE_TO_FXPT_FREQ(44e6), +}; + +bool +tvrx_init(struct db_base *dbb) +{ + struct db_tvrx_dummy *db = (struct db_tvrx_dummy *) dbb; + db->base.set_gain(dbb,U2_DOUBLE_TO_FXPT_GAIN(94.0)); + return true; +} + +bool +tvrx_set_freq(struct db_base *dbb, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc) +{ + *dc = 0; + if (freq < dbb->freq_min || freq > dbb->freq_max) + return false; + + struct db_tvrx_dummy *db = (struct db_tvrx_dummy *) dbb; + + u2_fxpt_freq_t target_lo_freq = freq + db->common.first_if; + int N_DIV = u2_fxpt_freq_round_to_int(((1LL<<20) * target_lo_freq)/ref_freq); + + u2_fxpt_freq_t actual_lo_freq = ref_freq * N_DIV; + u2_fxpt_freq_t actual_freq = actual_lo_freq - db->common.first_if; + if(N_DIV > 32767) + return false; + + if (0) + printf("N_DIV = %d, actual_freq = %d, actual_lo_freq = %d\n", + N_DIV, u2_fxpt_freq_round_to_int(actual_freq), + u2_fxpt_freq_round_to_int(actual_lo_freq)); + + unsigned char buf[4]; + buf[0] = (N_DIV>>8) & 0xff; + buf[1] = N_DIV & 0xff; + buf[2] = control_byte_1; + buf[3] = (freq < U2_DOUBLE_TO_FXPT_FREQ(158e6)) ? 0xa8 : // VHF LOW + (freq < U2_DOUBLE_TO_FXPT_FREQ(464e6)) ? 0x98 : // VHF HIGH + 0x38; // UHF + + *dc = actual_freq - db->common.second_if; + return i2c_write(I2C_ADDR,buf,4); +} + +bool +tvrx_set_gain(struct db_base *dbb, u2_fxpt_gain_t gain) +{ + //struct db_tvrx_dummy *db = (struct db_tvrx_dummy *) dbb; + int rfgain; + int ifgain; + if(gain>U2_DOUBLE_TO_FXPT_GAIN(95.0)) + return false; + if(gain<0) + return false; + + if(gain>U2_DOUBLE_TO_FXPT_GAIN(60.0)) { + rfgain = U2_DOUBLE_TO_FXPT_GAIN(60.0); + ifgain = gain-U2_DOUBLE_TO_FXPT_GAIN(60.0); + } else { + rfgain = gain; + ifgain = 0; + } + + int rf_slope_q8 = 256 * 4096 * 2.5 / 60.0 / 1.22 / 3.3; + int rf_offset_q8 = 128 * 256 * 4096 * 1.25 / 1.22 / 3.3; + int if_slope_q8 = 256 * 4096 * 2.25 / 35.0 / 1.22 / 3.3; + int if_offset_q8 = 128 * 256 * 4096 * 1.4 / 1.22 / 3.3; + + + int rfdac = (rfgain*rf_slope_q8 + rf_offset_q8)>>15; + int ifdac = (ifgain*if_slope_q8 + if_offset_q8)>>15; + lsdac_write_rx(0,rfdac); + lsdac_write_rx(1,ifdac); + + if (0) + printf("Setting gain %d, rf %d, if %d\n",gain,rfdac,ifdac); + + return true; +} + + +bool +tvrx_lock_detect(struct db_base *dbb) +{ + // struct db_tvrx_dummy *db = (struct db_tvrx_dummy *) dbb; + return true; +} diff --git a/usrp2/firmware/lib/db_xcvr2450.c b/usrp2/firmware/lib/db_xcvr2450.c new file mode 100644 index 00000000..ffdf8d66 --- /dev/null +++ b/usrp2/firmware/lib/db_xcvr2450.c @@ -0,0 +1,496 @@ +/* + * Copyright 2009 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 3 of the License, 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 program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +void set_atr_regs(int bank, struct db_base *db); //FIXME I need to be in a header + +// RX IO Pins +#define LOCKDET (1 << 15) // This is an INPUT!!! +#define EN (1 << 14) +#define RX_EN (1 << 13) // 1 = RX on, 0 = RX off +#define RX_HP (1 << 12) +#define B1 (1 << 11) +#define B2 (1 << 10) +#define B3 (1 << 9) +#define B4 (1 << 8) +#define B5 (1 << 7) +#define B6 (1 << 6) +#define B7 (1 << 5) +#define RX_OE_MASK EN|RX_EN|RX_HP|B1|B2|B3|B4|B5|B6|B7 +#define RX_SAFE_IO EN +#define RX_ATR_MASK EN|RX_EN|RX_HP + +// TX IO Pins +#define HB_PA_OFF (1 << 15) // 5GHz PA, 1 = off, 0 = on +#define LB_PA_OFF (1 << 14) // 2.4GHz PA, 1 = off, 0 = on +#define ANTSEL_TX1_RX2 (1 << 13) // 1 = Ant 1 to TX, Ant 2 to RX +#define ANTSEL_TX2_RX1 (1 << 12) // 1 = Ant 2 to TX, Ant 1 to RX +#define TX_EN (1 << 11) // 1 = TX on, 0 = TX off +#define AD9515DIV (1 << 4) // 1 = Div by 3, 0 = Div by 2 +#define TX_OE_MASK HB_PA_OFF|LB_PA_OFF|ANTSEL_TX1_RX2|ANTSEL_TX2_RX1|TX_EN|AD9515DIV +#define TX_SAFE_IO HB_PA_OFF|LB_PA_OFF|ANTSEL_TX1_RX2|AD9515DIV +#define TX_ATR_MASK HB_PA_OFF|LB_PA_OFF|ANTSEL_TX1_RX2|ANTSEL_TX2_RX1|TX_EN|AD9515DIV + +#define LB_FREQ_MIN U2_DOUBLE_TO_FXPT_FREQ(2.3e9) +#define LB_FREQ_MAX U2_DOUBLE_TO_FXPT_FREQ(2.6e9) +#define HB_FREQ_MIN U2_DOUBLE_TO_FXPT_FREQ(4.8e9) +#define HB_FREQ_MAX U2_DOUBLE_TO_FXPT_FREQ(6.1e9) +#define MASTER_REF_CLK_DIV 1 +#define N_DIV_MIN_Q16 (131 << 16) + +bool xcvr2450_init(struct db_base *db); +bool xcvr2450_set_freq(struct db_base *db, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc); +bool xcvr2450_set_gain_rx(struct db_base *db, u2_fxpt_gain_t gain); +bool xcvr2450_set_gain_tx(struct db_base *db, u2_fxpt_gain_t gain); +bool xcvr2450_set_tx_enable(struct db_base *db, bool on); + +struct db_xcvr2450_common { + int d_mimo, d_int_div, d_frac_div, d_highband, d_five_gig; + int d_cp_current, d_ref_div, d_rssi_hbw; + int d_txlpf_bw, d_rxlpf_bw, d_rxlpf_fine, d_rxvga_ser; + int d_rssi_range, d_rssi_mode, d_rssi_mux; + int d_rx_hp_pin, d_rx_hpf, d_rx_ant; + int d_tx_ant, d_txvga_ser, d_tx_driver_lin; + int d_tx_vga_lin, d_tx_upconv_lin, d_tx_bb_gain; + int d_pabias_delay, d_pabias; + int d_rx_rf_gain, d_rx_bb_gain, d_txgain; + int d_ad9515_div; + int d_tx_enb; +}; + +struct db_xcvr2450_dummy { + struct db_base base; + struct db_xcvr2450_common *common; +}; + +struct db_xcvr2450_rx { + struct db_base base; + struct db_xcvr2450_common *common; +}; + +struct db_xcvr2450_tx { + struct db_base base; + struct db_xcvr2450_common *common; +}; + +/* + * shared common between rx and tx db + */ +struct db_xcvr2450_common db_xcvr2450_common = { + /* set sane defaults */ + .d_mimo = 1, // 0 = OFF, 1 = ON + .d_int_div = 192, // 128 = min, 255 = max + .d_frac_div = 0, // 0 = min, 65535 = max + .d_highband = 0, // 0 = freq <= 5.4e9, 1 = freq > 5.4e9 + .d_five_gig = 0, // 0 = freq <= 3.e9, 1 = freq > 3e9 + .d_cp_current = 0, // 0 = 2mA, 1 = 4mA + .d_ref_div = 1, // 1 to 7 + .d_rssi_hbw = 0, // 0 = 2 MHz, 1 = 6 MHz + .d_txlpf_bw = 1, // 1 = 12 MHz, 2 = 18 MHz, 3 = 24 MHz + .d_rxlpf_bw = 1, // 0 = 7.5 MHz, 1 = 9.5 MHz, 2 = 14 MHz, 3 = 18 MHz + .d_rxlpf_fine = 2, // 0 = 90%, 1 = 95%, 2 = 100%, 3 = 105%, 4 = 110% + .d_rxvga_ser = 1, // 0 = RXVGA controlled by B7:1, 1=controlled serially + .d_rssi_range = 1, // 0 = low range (datasheet typo), 1=high range (0.5V - 2.0V) + .d_rssi_mode = 1, // 0 = enable follows RXHP, 1 = enabled + .d_rssi_mux = 0, // 0 = RSSI, 1 = TEMP + .d_rx_hp_pin = 0, // 0 = Fc set by rx_hpf, 1 = 600 KHz + .d_rx_hpf = 0, // 0 = 100Hz, 1 = 30KHz + .d_rx_ant = 0, // 0 = Ant. #1, 1 = Ant. #2 + .d_tx_ant = 0, // 0 = Ant. #1, 1 = Ant. #2 + .d_txvga_ser = 1, // 0 = TXVGA controlled by B6:1, 1=controlled serially + .d_tx_driver_lin = 2, // 0=50% (worst linearity), 1=63%, 2=78%, 3=100% (best lin) + .d_tx_vga_lin = 2, // 0=50% (worst linearity), 1=63%, 2=78%, 3=100% (best lin) + .d_tx_upconv_lin = 2, // 0=50% (worst linearity), 1=63%, 2=78%, 3=100% (best lin) + .d_tx_bb_gain = 3, // 0=maxgain-5dB, 1=max-3dB, 2=max-1.5dB, 3=max + .d_pabias_delay = 15, // 0 = 0, 15 = 7uS + .d_pabias = 0, // 0 = 0 uA, 63 = 315uA + .d_rx_rf_gain = 0, // 0 = 0dB, 1 = 0dB, 2 = 15dB, 3 = 30dB + .d_rx_bb_gain = 16, // 0 = min, 31 = max (0 - 62 dB) + .d_txgain = 63, // 0 = min, 63 = max + .d_tx_enb = 1, // 0 = disabled, 1 = enabled +}; + +/* + * The class instances + */ +struct db_xcvr2450_rx db_xcvr2450_rx = { + .base.dbid = 0x0061, + .base.is_tx = false, + .base.output_enables = RX_OE_MASK, + .base.used_pins = 0xFFFF, + .base.freq_min = LB_FREQ_MIN, + .base.freq_max = HB_FREQ_MAX, + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(92), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(1), + .base.is_quadrature = true, + .base.i_and_q_swapped = false, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = xcvr2450_init, + .base.set_freq = xcvr2450_set_freq, + .base.set_gain = xcvr2450_set_gain_rx, + .base.atr_mask = RX_ATR_MASK, + .base.atr_txval = 0x0, + .base.atr_rxval = 0x0, + .common = &db_xcvr2450_common, +}; + +struct db_xcvr2450_tx db_xcvr2450_tx = { + .base.dbid = 0x0060, + .base.is_tx = true, + .base.output_enables = TX_OE_MASK, + .base.used_pins = 0xFFFF, + .base.freq_min = LB_FREQ_MIN, + .base.freq_max = HB_FREQ_MAX, + .base.gain_min = U2_DOUBLE_TO_FXPT_GAIN(0), + .base.gain_max = U2_DOUBLE_TO_FXPT_GAIN(30), + .base.gain_step_size = U2_DOUBLE_TO_FXPT_GAIN(30.0/63.0), + .base.is_quadrature = true, + .base.i_and_q_swapped = true, + .base.spectrum_inverted = false, + .base.default_lo_offset = U2_DOUBLE_TO_FXPT_FREQ(0), + .base.init = xcvr2450_init, + .base.set_freq = xcvr2450_set_freq, + .base.set_gain = xcvr2450_set_gain_tx, + .base.set_tx_enable = xcvr2450_set_tx_enable, + .base.atr_mask = TX_ATR_MASK, + .base.atr_txval = 0x0, + .base.atr_rxval = 0x0, + .common = &db_xcvr2450_common, +}; + +/************************************************** + * Set Registers + **************************************************/ +static void +send_reg(int v){ + // Send 24 bits, it keeps last 18 clocked in + spi_transact(SPI_TXONLY,SPI_SS_RX_DB,v,24,SPIF_PUSH_FALL); + //printf("xcvr2450: Setting reg %d to %x\n", (v&15), v); +} + +static void +set_reg_standby(struct db_xcvr2450_dummy *db){ + int reg_standby = ( + (db->common->d_mimo<<17) | + (1<<16) | + (1<<6) | + (1<<5) | + (1<<4) | 2); + send_reg(reg_standby); +} + +static void +set_reg_int_divider(struct db_xcvr2450_dummy *db){ + int reg_int_divider = (( + (db->common->d_frac_div & 0x03)<<16) | + (db->common->d_int_div<<4) | 3); + send_reg(reg_int_divider); +} + +static void +set_reg_frac_divider(struct db_xcvr2450_dummy *db){ + int reg_frac_divider = ((db->common->d_frac_div & 0xfffc)<<2) | 4; + send_reg(reg_frac_divider); +} + +static void +set_reg_bandselpll(struct db_xcvr2450_dummy *db){ + int reg_bandselpll = ((db->common->d_mimo<<17) | + (1<<16) | + (1<<15) | + (0<<11) | //this bit gets toggled + (db->common->d_highband<<10) | + (db->common->d_cp_current<<9) | + (db->common->d_ref_div<<5) | + (db->common->d_five_gig<<4) | 5); + send_reg(reg_bandselpll); + reg_bandselpll = ((db->common->d_mimo<<17) | + (1<<16) | + (1<<15) | + (1<<11) | + (db->common->d_highband<<10) | + (db->common->d_cp_current<<9) | + (db->common->d_ref_div<<5) | + (db->common->d_five_gig<<4) | 5); + send_reg(reg_bandselpll); +} + +static void +set_reg_cal(struct db_xcvr2450_dummy *db){ + // FIXME do calibration + int reg_cal = ( + (1<<14) | 6); + send_reg(reg_cal); +} + +static void +set_reg_lpf(struct db_xcvr2450_dummy *db){ + int reg_lpf = ( + (db->common->d_rssi_hbw<<15) | + (db->common->d_txlpf_bw<<10) | + (db->common->d_rxlpf_bw<<9) | + (db->common->d_rxlpf_fine<<4) | 7); + send_reg(reg_lpf); +} + +static void +set_reg_rxrssi_ctrl(struct db_xcvr2450_dummy *db){ + int reg_rxrssi_ctrl = ( + (db->common->d_rxvga_ser<<16) | + (db->common->d_rssi_range<<15) | + (db->common->d_rssi_mode<<14) | + (db->common->d_rssi_mux<<12) | + (1<<9) | + (db->common->d_rx_hpf<<6) | + (1<<4) | 8); + send_reg(reg_rxrssi_ctrl); +} + +static void +set_reg_txlin_gain(struct db_xcvr2450_dummy *db){ + int reg_txlin_gain = ( + (db->common->d_txvga_ser<<14) | + (db->common->d_tx_driver_lin<<12) | + (db->common->d_tx_vga_lin<<10) | + (db->common->d_tx_upconv_lin<<6) | + (db->common->d_tx_bb_gain<<4) | 9); + send_reg(reg_txlin_gain); +} + +static void +set_reg_pabias(struct db_xcvr2450_dummy *db){ + int reg_pabias = ( + (db->common->d_pabias_delay<<10) | + (db->common->d_pabias<<4) | 10); + send_reg(reg_pabias); +} + +static void +set_reg_rxgain(struct db_xcvr2450_dummy *db){ + int reg_rxgain = ( + (db->common->d_rx_rf_gain<<9) | + (db->common->d_rx_bb_gain<<4) | 11); + send_reg(reg_rxgain); +} + +static void +set_reg_txgain(struct db_xcvr2450_dummy *db){ + int reg_txgain = ( + (db->common->d_txgain<<4) | 12); + send_reg(reg_txgain); +} + +/************************************************** + * GPIO + **************************************************/ +static void +set_gpio(struct db_xcvr2450_dummy *db){ + //set tx/rx gpio pins for auto tr + int tx_enb_sel = (db->common->d_tx_enb)? TX_EN:0; + int ad9515_sel = (db->common->d_ad9515_div == 3)? AD9515DIV:0; + int rx_hp = (db->common->d_rx_hp_pin)? RX_HP:0; + int tx_antsel = (db->common->d_tx_ant)? ANTSEL_TX2_RX1:ANTSEL_TX1_RX2; + int rx_antsel = (db->common->d_rx_ant)? ANTSEL_TX2_RX1:ANTSEL_TX1_RX2; + int tx_pa_sel = (db->common->d_five_gig)? LB_PA_OFF:HB_PA_OFF; + + /* FIXME better way to set rx and tx val for RX and TX banks */ + /* set rx bank */ + db->base.atr_rxval = EN|rx_hp|RX_EN; + db->base.atr_txval = EN|rx_hp; + set_atr_regs(GPIO_RX_BANK, (struct db_base *)db); + /* set tx bank */ + db->base.atr_rxval = HB_PA_OFF|LB_PA_OFF|rx_antsel|ad9515_sel; + db->base.atr_txval = tx_pa_sel|tx_antsel|tx_enb_sel|ad9515_sel; + set_atr_regs(GPIO_TX_BANK, (struct db_base *)db); +} + +/************************************************** + * Init for TX and RX + **************************************************/ +bool +xcvr2450_init(struct db_base *dbb){ + struct db_xcvr2450_dummy *db = (struct db_xcvr2450_dummy *) dbb; + /* Initialize chipset */ + clocks_enable_tx_dboard(true, MASTER_REF_CLK_DIV); + set_gpio(db); + set_reg_standby(db); + set_reg_bandselpll(db); + set_reg_cal(db); + set_reg_lpf(db); + set_reg_rxrssi_ctrl(db); + set_reg_txlin_gain(db); + set_reg_pabias(db); + set_reg_rxgain(db); + set_reg_txgain(db); + //u2_fxpt_freq_t dc; + //db->base.set_freq(dbb, U2_DOUBLE_TO_FXPT_FREQ(2.434e9), &dc); + return true; +} + +/************************************************** + * Lock detect + **************************************************/ +static bool +lock_detect(){ + //true when the VCO/PLL lock detect bit is set. + if(hal_gpio_read(GPIO_RX_BANK) & LOCKDET) { + return true; + } + else { // Give it a second chance + mdelay(1); + if(hal_gpio_read(GPIO_RX_BANK) & LOCKDET) + return true; + else + return false; + } +} + +/************************************************** + * Set the freq + **************************************************/ +bool +xcvr2450_set_freq(struct db_base *dbb, u2_fxpt_freq_t freq, u2_fxpt_freq_t *dc){ + unsigned int scaler, div_factor, actual_div_q16; + struct db_xcvr2450_dummy *db = (struct db_xcvr2450_dummy *) dbb; + /* determine if the freq range is in low or high band */ + if (freq >= LB_FREQ_MIN && freq <= LB_FREQ_MAX) { + db->common->d_five_gig = 0; + scaler = 3; + //printf("2.4-GHZ\n"); + } else if (freq >= HB_FREQ_MIN && freq <= HB_FREQ_MAX) { + db->common->d_five_gig = 1; + scaler = 5; + //printf("5-GHZ\n"); + } else { + printf("Out of range\n"); + return false; + } + /* set the highband bit */ + if(freq > U2_DOUBLE_TO_FXPT_FREQ(5.408e9)) { + db->common->d_highband = 1; + //printf("5-HB\n"); + } + else { + db->common->d_highband = 0; + //printf("5-LB\n"); + } + unsigned int loop_iter = 0; + do { /* set the dividers so that the n divider is above the practical minimum */ + switch(loop_iter){ + case 0: + db->common->d_ad9515_div = 3; + db->common->d_ref_div = 1; + break; + case 1: + db->common->d_ad9515_div = 2; + db->common->d_ref_div = 2; + break; + default: + db->common->d_ad9515_div = 3; + db->common->d_ref_div = loop_iter; + } + loop_iter++; + div_factor = db->common->d_ref_div*db->common->d_ad9515_div*4*MASTER_REF_CLK_DIV; + actual_div_q16 = ((freq*div_factor)/(scaler*MASTER_CLK_RATE)) >> (U2_FPF_RP-16); + } while (actual_div_q16 < N_DIV_MIN_Q16); + /* calculate the divisors */ + db->common->d_int_div = actual_div_q16 >> 16; + db->common->d_frac_div = actual_div_q16 & 0xffff; //isolate lower 16 bits + /* calculate the dc freq */ + *dc = ((((u2_fxpt_freq_t)MASTER_CLK_RATE)*actual_div_q16*scaler) / div_factor) << (U2_FPF_RP-16); + /*printf("scaler %d, div(int) %u, div_factor %d, ad9515_div %u, ref_div %u\n", + scaler, db->common->d_int_div, div_factor, db->common->d_ad9515_div, db->common->d_ref_div); + printf("actual div %u, Target Freq %uKHz, Actual Freq %uKHz\n", + actual_div_q16, u2_fxpt_freq_round_to_int(freq/1000), u2_fxpt_freq_round_to_int(*dc/1000)); + */ + set_gpio(db); + set_reg_int_divider(db); + set_reg_frac_divider(db); + set_reg_bandselpll(db); + + bool ok = lock_detect(); + if(!ok){ + printf("Fail lock detect %uKHz\n", u2_fxpt_freq_round_to_int(freq/1000)); + } + return ok; +} + +/************************************************** + * Set RX Gain + **************************************************/ +bool +xcvr2450_set_gain_rx(struct db_base *dbb, u2_fxpt_gain_t gain){ + struct db_xcvr2450_dummy *db = (struct db_xcvr2450_dummy *) dbb; + //ensure gain is within range + if(!(gain >= db->base.gain_min && gain <= db->base.gain_max)) { + return false; + } + // Split the gain between RF and baseband + // This is experimental, not prescribed + if(gain < U2_DOUBLE_TO_FXPT_GAIN(30.0)) { + db->common->d_rx_rf_gain = 0; // 0 dB RF gain + db->common->d_rx_bb_gain = u2_fxpt_gain_round_to_int(gain/2); + } + else if(gain >= U2_DOUBLE_TO_FXPT_GAIN(30.0) && gain < U2_DOUBLE_TO_FXPT_GAIN(61.0)) { + db->common->d_rx_rf_gain = 2; // 15 dB RF gain + db->common->d_rx_bb_gain = u2_fxpt_gain_round_to_int((gain-U2_DOUBLE_TO_FXPT_GAIN(15.0))/2); + } + else if(gain >= U2_DOUBLE_TO_FXPT_GAIN(61.0)) { + db->common->d_rx_rf_gain = 3; // 30.5 dB RF gain + db->common->d_rx_bb_gain = u2_fxpt_gain_round_to_int((gain-U2_DOUBLE_TO_FXPT_GAIN(30.5))/2); + } + //printf("RX RF Gain %u, RX BB Gain %u\n", db->common->d_rx_rf_gain, db->common->d_rx_bb_gain); + set_reg_rxgain(db); + return true; +} + +/************************************************** + * Set TX Gain + **************************************************/ +bool +xcvr2450_set_gain_tx(struct db_base *dbb, u2_fxpt_gain_t gain){ + struct db_xcvr2450_dummy *db = (struct db_xcvr2450_dummy *) dbb; + //ensure gain in within range + if(!(gain >= db->base.gain_min && gain <= db->base.gain_max)) { + return false; + } + //scale for register and set + db->common->d_txgain = (gain*63)/db->base.gain_max; + //printf("TX Gain %u, TX Reg %u\n", u2_fxpt_gain_round_to_int(gain), db->common->d_txgain); + set_reg_txgain(db); + return true; +} + +/************************************************** + * Set TX Enable + **************************************************/ +bool +xcvr2450_set_tx_enable(struct db_base *dbb, bool on){ + struct db_xcvr2450_dummy *db = (struct db_xcvr2450_dummy *) dbb; + db->common->d_tx_enb = on; + set_gpio(db); + return true; +} diff --git a/usrp2/firmware/lib/dbsm.c b/usrp2/firmware/lib/dbsm.c new file mode 100644 index 00000000..8f774d91 --- /dev/null +++ b/usrp2/firmware/lib/dbsm.c @@ -0,0 +1,296 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +/* + * Double Buffering State Machine + */ + +#include "dbsm.h" +#include "memory_map.h" +#include "buffer_pool.h" +#include "bool.h" +#include "nonstdio.h" +#include + +typedef enum { + BS_EMPTY, + BS_FILLING, + BS_FULL, + BS_EMPTYING, +} buffer_state_t; + +static buffer_state_t buffer_state[NBUFFERS]; + +bool +dbsm_nop_inspector(dbsm_t *sm, int buf_this) +{ + return false; +} + +void +dbsm_init(dbsm_t *sm, int buf0, + const buf_cmd_args_t *recv, const buf_cmd_args_t *send, + inspector_t inspect) +{ + if (buf0 & 0x1) // must be even + abort(); + + sm->buf0 = buf0; + sm->running = false; + sm->recv_args = *recv; + sm->send_args = *send; + + sm->rx_idle = true; + sm->tx_idle = true; + + sm->inspect = inspect; + + // How much to adjust the last_line register. + // It's 1 for everything but the ethernet. + sm->last_line_adj = recv->port == PORT_ETH ? 3 : 1; + + buffer_state[sm->buf0] = BS_EMPTY; + buffer_state[sm->buf0 ^ 1] = BS_EMPTY; + + sm->precomputed_receive_to_buf_ctrl_word[0] = + (BPC_READ + | BPC_BUFFER(sm->buf0) + | BPC_PORT(sm->recv_args.port) + | BPC_STEP(1) + | BPC_FIRST_LINE(sm->recv_args.first_line) + | BPC_LAST_LINE(sm->recv_args.last_line)); + + sm->precomputed_receive_to_buf_ctrl_word[1] = + (BPC_READ + | BPC_BUFFER(sm->buf0 ^ 1) + | BPC_PORT(sm->recv_args.port) + | BPC_STEP(1) + | BPC_FIRST_LINE(sm->recv_args.first_line) + | BPC_LAST_LINE(sm->recv_args.last_line)); + + sm->precomputed_send_from_buf_ctrl_word[0] = + (BPC_WRITE + | BPC_BUFFER(sm->buf0) + | BPC_PORT(sm->send_args.port) + | BPC_STEP(1) + | BPC_FIRST_LINE(sm->send_args.first_line) + | BPC_LAST_LINE(0)); // last line filled in at runtime + + sm->precomputed_send_from_buf_ctrl_word[1] = + (BPC_WRITE + | BPC_BUFFER(sm->buf0 ^ 1) + | BPC_PORT(sm->send_args.port) + | BPC_STEP(1) + | BPC_FIRST_LINE(sm->send_args.first_line) + | BPC_LAST_LINE(0)); // last line filled in at runtime + +} + +static inline void +dbsm_receive_to_buf(dbsm_t *sm, int bufno) +{ + buffer_pool_ctrl->ctrl = sm->precomputed_receive_to_buf_ctrl_word[bufno & 1]; +} + +static inline void +dbsm_send_from_buf(dbsm_t *sm, int bufno) +{ + buffer_pool_ctrl->ctrl = + (sm->precomputed_send_from_buf_ctrl_word[bufno & 1] + | BPC_LAST_LINE(buffer_pool_status->last_line[bufno] - sm->last_line_adj)); +} + +void +dbsm_start(dbsm_t *sm) +{ + // printf("dbsm_start: buf0 = %d, recv_port = %d\n", sm->buf0, sm->recv_args.port); + + sm->running = true; + + buffer_state[sm->buf0] = BS_EMPTY; + buffer_state[sm->buf0 ^ 1] = BS_EMPTY; + + bp_clear_buf(sm->buf0); + bp_clear_buf(sm->buf0 ^ 1); + + sm->tx_idle = true; + sm->rx_idle = false; + dbsm_receive_to_buf(sm, sm->buf0); + buffer_state[sm->buf0] = BS_FILLING; + +} + + +void +dbsm_stop(dbsm_t *sm) +{ + sm->running = false; + bp_clear_buf(sm->buf0); + bp_clear_buf(sm->buf0 ^ 1); + buffer_state[sm->buf0] = BS_EMPTY; + buffer_state[sm->buf0 ^ 1] = BS_EMPTY; +} + +static void dbsm_process_helper(dbsm_t *sm, int buf_this); +static void dbsm_error_helper(dbsm_t *sm, int buf_this); + +void +dbsm_process_status(dbsm_t *sm, uint32_t status) +{ + if (!sm->running) + return; + + if (status & (BPS_ERROR(sm->buf0) | BPS_ERROR(sm->buf0 ^ 1))){ + putchar('E'); + // Most likely an ethernet Rx error. We just restart the transfer. + if (status & (BPS_ERROR(sm->buf0))) + dbsm_error_helper(sm, sm->buf0); + + if (status & (BPS_ERROR(sm->buf0 ^ 1))) + dbsm_error_helper(sm, sm->buf0 ^ 1); + } + + if (status & BPS_DONE(sm->buf0)) + dbsm_process_helper(sm, sm->buf0); + + if (status & BPS_DONE(sm->buf0 ^ 1)) + dbsm_process_helper(sm, sm->buf0 ^ 1); +} + +static void +dbsm_process_helper(dbsm_t *sm, int buf_this) +{ + int buf_other = buf_this ^ 1; + + bp_clear_buf(buf_this); + + if (buffer_state[buf_this] == BS_FILLING){ + buffer_state[buf_this] = BS_FULL; + // + // does s/w handle this packet? + // + if (sm->inspect(sm, buf_this)){ + // s/w handled the packet; refill the buffer + dbsm_receive_to_buf(sm, buf_this); + buffer_state[buf_this] = BS_FILLING; + } + + else { // s/w didn't handle this; pass it on + + if(buffer_state[buf_other] == BS_EMPTY){ + dbsm_receive_to_buf(sm, buf_other); + buffer_state[buf_other] = BS_FILLING; + } + else + sm->rx_idle = true; + + if (sm->tx_idle){ + sm->tx_idle = false; + dbsm_send_from_buf(sm, buf_this); + buffer_state[buf_this] = BS_EMPTYING; + } + } + } + else { // buffer was emptying + buffer_state[buf_this] = BS_EMPTY; + if (sm->rx_idle){ + sm->rx_idle = false; + dbsm_receive_to_buf(sm, buf_this); + buffer_state[buf_this] = BS_FILLING; + } + if (buffer_state[buf_other] == BS_FULL){ + dbsm_send_from_buf(sm, buf_other); + buffer_state[buf_other] = BS_EMPTYING; + } + else + sm->tx_idle = true; + } +} + +static void +dbsm_error_helper(dbsm_t *sm, int buf_this) +{ + bp_clear_buf(buf_this); // clears ERROR flag + + if (buffer_state[buf_this] == BS_FILLING){ + dbsm_receive_to_buf(sm, buf_this); // restart the xfer + } + else { // buffer was emptying + dbsm_send_from_buf(sm, buf_this); // restart the xfer + } +} + +/* + * Handle DSP Tx underrun + */ +void +dbsm_handle_tx_underrun(dbsm_t *sm) +{ + // clear the DSP Tx state machine + dsp_tx_regs->clear_state = 1; + + // If there's a buffer that's empyting, clear it & flush xfer + + if (buffer_state[sm->buf0] == BS_EMPTYING){ + bp_clear_buf(sm->buf0); + dsp_tx_regs->clear_state = 1; // flush partial packet + // drop frame in progress on ground. Pretend it finished + dbsm_process_helper(sm, sm->buf0); + } + else if (buffer_state[sm->buf0 ^ 1] == BS_EMPTYING){ + bp_clear_buf(sm->buf0 ^ 1); + dsp_tx_regs->clear_state = 1; // flush partial packet + // drop frame in progress on ground. Pretend it finished + dbsm_process_helper(sm, sm->buf0 ^ 1); + } +} + +/* + * Handle DSP Rx overrun + */ +void +dbsm_handle_rx_overrun(dbsm_t *sm) +{ + dsp_rx_regs->clear_state = 1; + + // If there's a buffer that's filling, clear it. + // Any restart will be the job of the caller. + + if (buffer_state[sm->buf0] == BS_FILLING) + bp_clear_buf(sm->buf0); + + if (buffer_state[sm->buf0 ^1] == BS_FILLING) + bp_clear_buf(sm->buf0 ^ 1); +} + +void +dbsm_wait_for_opening(dbsm_t *sm) +{ + if (buffer_state[sm->buf0] == BS_EMPTYING){ + // wait for xfer to complete + int mask = BPS_DONE(sm->buf0) | BPS_ERROR(sm->buf0) | BPS_IDLE(sm->buf0); + while ((buffer_pool_status->status & mask) == 0) + ; + } + else if (buffer_state[sm->buf0 ^ 1] == BS_EMPTYING){ + // wait for xfer to complete + int mask = BPS_DONE(sm->buf0 ^ 1) | BPS_ERROR(sm->buf0 ^ 1) | BPS_IDLE(sm->buf0 ^ 1); + while ((buffer_pool_status->status & mask) == 0) + ; + } +} diff --git a/usrp2/firmware/lib/dbsm.h b/usrp2/firmware/lib/dbsm.h new file mode 100644 index 00000000..3a64bf0d --- /dev/null +++ b/usrp2/firmware/lib/dbsm.h @@ -0,0 +1,90 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_DBSM_H +#define INCLUDED_DBSM_H + +/* + * Double Buffering State Machine + */ + +#include +#include "bool.h" + +struct _dbsm; +typedef struct _dbsm dbsm_t; + +/* + * pointer to function that does packet inspection. + * + * If one of these returns true, it means that the s/w + * handled that packet, and that it should NOT be passed + * on to the normal destination port. + */ +typedef bool (*inspector_t)(dbsm_t *sm, int buf_this); + +bool dbsm_nop_inspector(dbsm_t *sm, int buf_this); // returns false + + +typedef struct +{ + uint16_t port; + uint16_t first_line; + uint16_t last_line; +} buf_cmd_args_t; + +/*! + * double buffer state machine + */ +struct _dbsm +{ + uint8_t buf0; // Must be even. This machine uses buf0 and buf0+1 + uint8_t running; + uint8_t rx_idle; + uint8_t tx_idle; + buf_cmd_args_t recv_args; + buf_cmd_args_t send_args; + inspector_t inspect; + uint32_t precomputed_receive_to_buf_ctrl_word[2]; + uint32_t precomputed_send_from_buf_ctrl_word[2]; + int last_line_adj; +}; + +void dbsm_init(dbsm_t *sm, int buf0, + const buf_cmd_args_t *recv, const buf_cmd_args_t *send, + inspector_t inspect); + +void dbsm_start(dbsm_t *sm); +void dbsm_stop(dbsm_t *sm); +void dbsm_process_status(dbsm_t *sm, uint32_t status); +void dbsm_handle_tx_underrun(dbsm_t *sm); +void dbsm_handle_rx_overrun(dbsm_t *sm); + +/* + * The cpu calls this when it want to ensure that it can send a buffer + * to the same destination being used by this state machine. + * + * If neither buffer is EMPTYING it returns immediately. If a buffer + * is EMPYTING, it waits for the h/w to transition to the DONE or + * ERROR state. + * + * When this function returns, the caller queues it's buffer and busy + * waits for it to complete. + */ +void dbsm_wait_for_opening(dbsm_t *sm); + +#endif /* INCLUDED_DBSM_H */ diff --git a/usrp2/firmware/lib/eeprom.c b/usrp2/firmware/lib/eeprom.c new file mode 100644 index 00000000..b12ffe08 --- /dev/null +++ b/usrp2/firmware/lib/eeprom.c @@ -0,0 +1,69 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "i2c.h" +#include "mdelay.h" + +static const int EEPROM_PAGESIZE = 16; + +bool +eeprom_write (int i2c_addr, int eeprom_offset, const void *buf, int len) +{ + unsigned char cmd[2]; + const unsigned char *p = (unsigned char *) buf; + + // The simplest thing that could possibly work: + // all writes are single byte writes. + // + // We could speed this up using the page write feature, + // but we write so infrequently, why bother... + + while (len-- > 0){ + cmd[0] = eeprom_offset++; + cmd[1] = *p++; + bool r = i2c_write (i2c_addr, cmd, sizeof (cmd)); + mdelay (10); // delay 10ms worst case write time + if (!r) + return false; + } + return true; +} + +bool +eeprom_read (int i2c_addr, int eeprom_offset, void *buf, int len) +{ + unsigned char *p = (unsigned char *) buf; + + // We setup a random read by first doing a "zero byte write". + // Writes carry an address. Reads use an implicit address. + + unsigned char cmd[1]; + cmd[0] = eeprom_offset; + if (!i2c_write (i2c_addr, cmd, sizeof (cmd))) + return false; + + while (len > 0){ + // int n = std::min (len, MAX_EP0_PKTSIZE); + int n = len; + if (!i2c_read (i2c_addr, p, n)) + return false; + len -= n; + p += n; + } + return true; +} + diff --git a/usrp2/firmware/lib/eth_mac.c b/usrp2/firmware/lib/eth_mac.c new file mode 100644 index 00000000..5fadaf40 --- /dev/null +++ b/usrp2/firmware/lib/eth_mac.c @@ -0,0 +1,136 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "eth_mac.h" +#include "memory_map.h" +#include "bool.h" +#include "eth_phy.h" // for simulation constants +#include "mdelay.h" + + +#define PHY_ADDR 1 + +void +eth_mac_set_addr(const u2_mac_addr_t *src) +{ + int i; + + // tell mac our source address and enable automatic insertion on Tx. + eth_mac->mac_tx_add_prom_wr = 0; // just in case + for (i = 0; i < 6; i++){ + eth_mac->mac_tx_add_prom_add = i; + eth_mac->mac_tx_add_prom_data = src->addr[i]; + eth_mac->mac_tx_add_prom_wr = 1; + mdelay(1); + eth_mac->mac_tx_add_prom_wr = 0; + mdelay(1); + } + eth_mac->mac_tx_add_en = 1; // overwrite pkt src addr field with this stuff + + // set up receive destination address filter + eth_mac->mac_rx_add_prom_wr = 0; // just in case + for (i = 0; i < 6; i++){ + eth_mac->mac_rx_add_prom_add = i; + eth_mac->mac_rx_add_prom_data = src->addr[i]; + eth_mac->mac_rx_add_prom_wr = 1; + mdelay(1); + eth_mac->mac_rx_add_prom_wr = 0; + mdelay(1); + } + // eth_mac->mac_rx_add_chk_en = 1; // FIXME enable when everything's working +} + + +void +eth_mac_init(const u2_mac_addr_t *src) +{ + eth_mac->miimoder = 25; // divider from CPU clock (50MHz/25 = 2MHz) + + eth_mac_set_addr(src); + + // set rx flow control high and low water marks + // unsigned int lwmark = (2*2048 + 64)/4; // 2 * 2048-byte frames + 1 * 64-byte pause frame + // eth_mac->fc_hwmark = lwmark + 2048/4; // plus a 2048-byte frame + + eth_mac->fc_lwmark = 600; // there are currently 2047 lines in the fifo + eth_mac->fc_hwmark = 1200; + eth_mac->fc_padtime = 1700; // how long before flow control runs out do we + // request a re-pause. Units of 8ns (bytes) + + //eth_mac->tx_pause_en = 0; // pay attn to pause frames sent to us + //eth_mac->pause_quanta_set = 38; // a bit more than 1 max frame 16kb/512 + fudge + //eth_mac->pause_frame_send_en = 0; // enable sending pause frames +} + +int +eth_mac_read_rmon(int addr) +{ + int t; + + eth_mac->rmon_rd_addr = addr; + eth_mac->rmon_rd_apply = 1; + while(eth_mac->rmon_rd_grant == 0) + ; + + t = eth_mac->rmon_rd_dout; + eth_mac->rmon_rd_apply = 0; + return t; +} + +int +eth_mac_miim_read(int addr) +{ + if (hwconfig_simulation_p()){ + switch(addr){ + case PHY_LINK_AN: + return LANSR_MASTER | LANSR_LINK_GOOD | LANSR_SPEED_1000; + default: + return 0; + } + } + + int phy_addr = PHY_ADDR; + eth_mac->miiaddress = ((addr & 0x1f) << 8) | phy_addr; + eth_mac->miicommand = MIIC_RSTAT; + + while((eth_mac->miistatus & MIIS_BUSY) != 0) + ; + + return eth_mac->miirx_data; +} + +void +eth_mac_miim_write(int addr, int value) +{ + int phy_addr = PHY_ADDR; + eth_mac->miiaddress = ((addr & 0x1f) << 8) | phy_addr; + eth_mac->miitx_data = value; + eth_mac->miicommand = MIIC_WCTRLDATA; + + while((eth_mac->miistatus & MIIS_BUSY) != 0) + ; +} + +int +eth_mac_miim_read_status(void) +{ + if (hwconfig_simulation_p()) + return 0; + + return eth_mac->miistatus; +} diff --git a/usrp2/firmware/lib/eth_mac.h b/usrp2/firmware/lib/eth_mac.h new file mode 100644 index 00000000..291994c5 --- /dev/null +++ b/usrp2/firmware/lib/eth_mac.h @@ -0,0 +1,32 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_ETH_MAC_H +#define INCLUDED_ETH_MAC_H + +#include "usrp2_mac_addr.h" + +void eth_mac_init(const u2_mac_addr_t *src); + +void eth_mac_set_addr(const u2_mac_addr_t *src); +int eth_mac_read_rmon(int addr); +int eth_mac_miim_read(int addr); +void eth_mac_miim_write(int addr, int value); +int eth_mac_miim_read_status(void); + +#endif /* INCLUDED_ETH_MAC_H */ diff --git a/usrp2/firmware/lib/eth_mac_regs.h b/usrp2/firmware/lib/eth_mac_regs.h new file mode 100644 index 00000000..8daab937 --- /dev/null +++ b/usrp2/firmware/lib/eth_mac_regs.h @@ -0,0 +1,98 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_ETH_MAC_REGS_H +#define INCLUDED_ETH_MAC_REGS_H + +/* + * See opencores.org 10_100_1000 Mbps Tri-mode Ethernet MAC Specification + * + * In reality, these are 16-bit regs, but are assigned + * on 32-bit boundaries. Because we're little endian, + * declaring them "int" works. + */ +typedef struct { + volatile int tx_hwmark; + volatile int tx_lwmark; + + //! if set, send pause frames automatically + volatile int pause_frame_send_en; + + //! quanta value for pause frame in units of 512 bit times. + volatile int pause_quanta_set; + + volatile int ifg_set; + volatile int full_duplex; + volatile int max_retry; + volatile int mac_tx_add_en; + volatile int mac_tx_add_prom_data; + volatile int mac_tx_add_prom_add; + volatile int mac_tx_add_prom_wr; + + //! if set, other end can pause us (i.e., we pay attention to pause frames) + volatile int tx_pause_en; + + // Flow Control high and low water marks + //! when space available (in 32-bit lines) > hwmark, send un-pause frame + volatile int fc_hwmark; + + //! when space avail (in 32-bit lines) < lwmark, send pause frame + volatile int fc_lwmark; + + volatile int mac_rx_add_chk_en; + volatile int mac_rx_add_prom_data; + volatile int mac_rx_add_prom_add; + volatile int mac_rx_add_prom_wr; + volatile int broadcast_filter_en; + volatile int broadcast_bucket_depth; + volatile int broadcast_bucket_interval; + volatile int rx_append_crc; + volatile int rx_hwmark; + volatile int rx_lwmark; + volatile int crc_chk_en; + volatile int rx_ifg_set; + volatile int rx_max_length; + volatile int rx_min_length; + volatile int rmon_rd_addr; // performance counter access + volatile int rmon_rd_apply; + volatile int rmon_rd_grant; // READONLY + volatile int rmon_rd_dout; // READONLY + volatile int dummy; // READONLY + volatile int line_loop_en; + volatile int speed; + volatile int miimoder; + volatile int miicommand; + volatile int miiaddress; + volatile int miitx_data; + volatile int miirx_data; + volatile int miistatus; + volatile int fc_padtime; +} eth_mac_regs_t; + +// miicommand register +#define MIIC_SCANSSTAT (1 << 0) // Scan status +#define MIIC_RSTAT (1 << 1) // Read status +#define MIIC_WCTRLDATA (1 << 2) // Write control data + +// miistatus register +#define MIIS_LINKFAIL (1 << 0) // The link failed +#define MIIS_BUSY (1 << 1) // The MII is busy (operation in progress) +#define MIIS_NVALID (1 << 2) // The data in the status register is invalid + // This it is only valid when the scan status is active. + +#endif /* INCLUDED_ETH_MAC_REGS_H */ diff --git a/usrp2/firmware/lib/eth_phy.h b/usrp2/firmware/lib/eth_phy.h new file mode 100644 index 00000000..6c16f97b --- /dev/null +++ b/usrp2/firmware/lib/eth_phy.h @@ -0,0 +1,219 @@ +/* -*- c -*- */ +/* + * Copyright 2007 Free Software Foundation, Inc. + * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. + * + * 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 3 of the License, 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 program. If not, see . + */ + +/* Much of this was extracted from the Linux e1000_hw.h file */ + +#ifndef INCLUDED_ETH_PHY_H +#define INCLUDED_ETH_PHY_H + +/* PHY 1000 MII Register/Bit Definitions */ +/* PHY Registers defined by IEEE */ + +#define PHY_CTRL 0x00 /* Control Register */ +#define PHY_STATUS 0x01 /* Status Regiser */ +#define PHY_ID1 0x02 /* Phy Id Reg (word 1) */ +#define PHY_ID2 0x03 /* Phy Id Reg (word 2) */ +#define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */ +#define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */ +#define PHY_AUTONEG_EXP 0x06 /* Autoneg Expansion Reg */ +#define PHY_NEXT_PAGE_TX 0x07 /* Next Page TX */ +#define PHY_LP_NEXT_PAGE 0x08 /* Link Partner Next Page */ +#define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Reg */ +#define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */ +#define PHY_EXT_STATUS 0x0F /* Extended Status Reg */ + +/* PHY 1000 MII Register additions in DP83856 */ +/* The part implements 0x00 thru 0x1f; we use these. */ + +#define PHY_LINK_AN 0x11 /* Link and Auto Negotiation Status Reg */ +#define PHY_INT_STATUS 0x14 /* Interupt Status Reg (RO) */ +#define PHY_INT_MASK 0x15 /* Interrupt Mask Reg (RW) */ +#define PHY_INT_CLEAR 0x17 /* Interrupt Clear Reg (RW) */ + + +/* Bit definitions for some of the registers above */ + +/* PHY Control Register (PHY_CTRL) */ +#define MII_CR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */ +#define MII_CR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */ +#define MII_CR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */ +#define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */ +#define MII_CR_ISOLATE 0x0400 /* Isolate PHY from MII */ +#define MII_CR_POWER_DOWN 0x0800 /* Power down */ +#define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */ +#define MII_CR_SPEED_SELECT_LSB 0x2000 /* bits 6,13: 10=1000, 01=100, 00=10 */ +#define MII_CR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */ +#define MII_CR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */ + +/* PHY Status Register (PHY_STATUS) */ +#define MII_SR_EXTENDED_CAPS 0x0001 /* Extended register capabilities */ +#define MII_SR_JABBER_DETECT 0x0002 /* Jabber Detected */ +#define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */ +#define MII_SR_AUTONEG_CAPS 0x0008 /* Auto Neg Capable */ +#define MII_SR_REMOTE_FAULT 0x0010 /* Remote Fault Detect */ +#define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */ +#define MII_SR_PREAMBLE_SUPPRESS 0x0040 /* Preamble may be suppressed */ +#define MII_SR_EXTENDED_STATUS 0x0100 /* Ext. status info in Reg 0x0F */ +#define MII_SR_100T2_HD_CAPS 0x0200 /* 100T2 Half Duplex Capable */ +#define MII_SR_100T2_FD_CAPS 0x0400 /* 100T2 Full Duplex Capable */ +#define MII_SR_10T_HD_CAPS 0x0800 /* 10T Half Duplex Capable */ +#define MII_SR_10T_FD_CAPS 0x1000 /* 10T Full Duplex Capable */ +#define MII_SR_100X_HD_CAPS 0x2000 /* 100X Half Duplex Capable */ +#define MII_SR_100X_FD_CAPS 0x4000 /* 100X Full Duplex Capable */ +#define MII_SR_100T4_CAPS 0x8000 /* 100T4 Capable */ + +/* Autoneg Advertisement Register (PHY_AUTONEG_ADV) */ +#define NWAY_AR_SELECTOR_FIELD 0x0001 /* indicates IEEE 802.3 CSMA/CD */ +#define NWAY_AR_10T_HD_CAPS 0x0020 /* 10T Half Duplex Capable */ +#define NWAY_AR_10T_FD_CAPS 0x0040 /* 10T Full Duplex Capable */ +#define NWAY_AR_100TX_HD_CAPS 0x0080 /* 100TX Half Duplex Capable */ +#define NWAY_AR_100TX_FD_CAPS 0x0100 /* 100TX Full Duplex Capable */ +#define NWAY_AR_100T4_CAPS 0x0200 /* 100T4 Capable */ +#define NWAY_AR_PAUSE 0x0400 /* Pause operation desired */ +#define NWAY_AR_ASM_DIR 0x0800 /* Asymmetric Pause Direction bit */ +#define NWAY_AR_REMOTE_FAULT 0x2000 /* Remote Fault detected */ +#define NWAY_AR_NEXT_PAGE 0x8000 /* Next Page ability supported */ + +/* Link Partner Ability Register (Base Page) (PHY_LP_ABILITY) */ +#define NWAY_LPAR_SELECTOR_FIELD 0x0000 /* LP protocol selector field */ +#define NWAY_LPAR_10T_HD_CAPS 0x0020 /* LP is 10T Half Duplex Capable */ +#define NWAY_LPAR_10T_FD_CAPS 0x0040 /* LP is 10T Full Duplex Capable */ +#define NWAY_LPAR_100TX_HD_CAPS 0x0080 /* LP is 100TX Half Duplex Capable */ +#define NWAY_LPAR_100TX_FD_CAPS 0x0100 /* LP is 100TX Full Duplex Capable */ +#define NWAY_LPAR_100T4_CAPS 0x0200 /* LP is 100T4 Capable */ +#define NWAY_LPAR_PAUSE 0x0400 /* LP Pause operation desired */ +#define NWAY_LPAR_ASM_DIR 0x0800 /* LP Asymmetric Pause Direction bit */ +#define NWAY_LPAR_REMOTE_FAULT 0x2000 /* LP has detected Remote Fault */ +#define NWAY_LPAR_ACKNOWLEDGE 0x4000 /* LP has rx'd link code word */ +#define NWAY_LPAR_NEXT_PAGE 0x8000 /* Next Page ability supported */ + +/* Autoneg Expansion Register (PHY_AUTONEG_EXP) */ +#define NWAY_ER_LP_NWAY_CAPS 0x0001 /* LP has Auto Neg Capability */ +#define NWAY_ER_PAGE_RXD 0x0002 /* LP is 10T Half Duplex Capable */ +#define NWAY_ER_NEXT_PAGE_CAPS 0x0004 /* LP is 10T Full Duplex Capable */ +#define NWAY_ER_LP_NEXT_PAGE_CAPS 0x0008 /* LP is 100TX Half Duplex Capable */ +#define NWAY_ER_PAR_DETECT_FAULT 0x0010 /* LP is 100TX Full Duplex Capable */ + +/* Next Page TX Register (PHY_NEXT_PAGE_TX) */ +#define NPTX_MSG_CODE_FIELD 0x0001 /* NP msg code or unformatted data */ +#define NPTX_TOGGLE 0x0800 /* Toggles between exchanges + * of different NP + */ +#define NPTX_ACKNOWLDGE2 0x1000 /* 1 = will comply with msg + * 0 = cannot comply with msg + */ +#define NPTX_MSG_PAGE 0x2000 /* formatted(1)/unformatted(0) pg */ +#define NPTX_NEXT_PAGE 0x8000 /* 1 = addition NP will follow + * 0 = sending last NP + */ + +/* Link Partner Next Page Register (PHY_LP_NEXT_PAGE) */ +#define LP_RNPR_MSG_CODE_FIELD 0x0001 /* NP msg code or unformatted data */ +#define LP_RNPR_TOGGLE 0x0800 /* Toggles between exchanges + * of different NP + */ +#define LP_RNPR_ACKNOWLDGE2 0x1000 /* 1 = will comply with msg + * 0 = cannot comply with msg + */ +#define LP_RNPR_MSG_PAGE 0x2000 /* formatted(1)/unformatted(0) pg */ +#define LP_RNPR_ACKNOWLDGE 0x4000 /* 1 = ACK / 0 = NO ACK */ +#define LP_RNPR_NEXT_PAGE 0x8000 /* 1 = addition NP will follow + * 0 = sending last NP + */ + +/* 1000BASE-T Control Register (PHY_1000T_CTRL) */ +#define CR_1000T_ASYM_PAUSE 0x0080 /* Advertise asymmetric pause bit */ +#define CR_1000T_HD_CAPS 0x0100 /* Advertise 1000T HD capability */ +#define CR_1000T_FD_CAPS 0x0200 /* Advertise 1000T FD capability */ +#define CR_1000T_REPEATER_DTE 0x0400 /* 1=Repeater/switch device port */ + /* 0=DTE device */ +#define CR_1000T_MS_VALUE 0x0800 /* 1=Configure PHY as Master */ + /* 0=Configure PHY as Slave */ +#define CR_1000T_MS_ENABLE 0x1000 /* 1=Master/Slave manual config value */ + /* 0=Automatic Master/Slave config */ +#define CR_1000T_TEST_MODE_NORMAL 0x0000 /* Normal Operation */ +#define CR_1000T_TEST_MODE_1 0x2000 /* Transmit Waveform test */ +#define CR_1000T_TEST_MODE_2 0x4000 /* Master Transmit Jitter test */ +#define CR_1000T_TEST_MODE_3 0x6000 /* Slave Transmit Jitter test */ +#define CR_1000T_TEST_MODE_4 0x8000 /* Transmitter Distortion test */ + +/* 1000BASE-T Status Register (PHY_1000T_STATUS) */ +#define SR_1000T_IDLE_ERROR_CNT 0x00FF /* Num idle errors since last read */ +#define SR_1000T_ASYM_PAUSE_DIR 0x0100 /* LP asymmetric pause direction bit */ +#define SR_1000T_LP_HD_CAPS 0x0400 /* LP is 1000T HD capable */ +#define SR_1000T_LP_FD_CAPS 0x0800 /* LP is 1000T FD capable */ +#define SR_1000T_REMOTE_RX_STATUS 0x1000 /* Remote receiver OK */ +#define SR_1000T_LOCAL_RX_STATUS 0x2000 /* Local receiver OK */ +#define SR_1000T_MS_CONFIG_RES 0x4000 /* 1=Local TX is Master, 0=Slave */ +#define SR_1000T_MS_CONFIG_FAULT 0x8000 /* Master/Slave config fault */ +#define SR_1000T_REMOTE_RX_STATUS_SHIFT 12 +#define SR_1000T_LOCAL_RX_STATUS_SHIFT 13 +#define SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT 5 +#define FFE_IDLE_ERR_COUNT_TIMEOUT_20 20 +#define FFE_IDLE_ERR_COUNT_TIMEOUT_100 100 + +/* Extended Status Register (PHY_EXT_STATUS) */ +#define IEEE_ESR_1000T_HD_CAPS 0x1000 /* 1000T HD capable */ +#define IEEE_ESR_1000T_FD_CAPS 0x2000 /* 1000T FD capable */ +#define IEEE_ESR_1000X_HD_CAPS 0x4000 /* 1000X HD capable */ +#define IEEE_ESR_1000X_FD_CAPS 0x8000 /* 1000X FD capable */ + +#define PHY_TX_POLARITY_MASK 0x0100 /* register 10h bit 8 (polarity bit) */ +#define PHY_TX_NORMAL_POLARITY 0 /* register 10h bit 8 (normal polarity) */ + +#define AUTO_POLARITY_DISABLE 0x0010 /* register 11h bit 4 */ + /* (0=enable, 1=disable) */ + +/* Link and Auto Negotiation Status Reg (PHY_LINK_AN) [READ-ONLY] */ +#define LANSR_MASTER 0x0001 /* 1=PHY is currently in master mode */ +#define LANSR_FULL_DUPLEX 0x0002 /* 1=PHY is currently full duplex */ +#define LANSR_LINK_GOOD 0x0004 /* 1=a good link is established */ +#define LANSR_SPEED_MASK 0x0018 +#define LANSR_SPEED_10 0x0000 /* 10Mb/s */ +#define LANSR_SPEED_100 0x0008 /* 100Mb/s */ +#define LANSR_SPEED_1000 0x0010 /* 1000Mb/s */ +#define LANSR_SPEED_RSRVD 0x0018 /* reserved */ +#define LANSR_NON_COMP_MODE 0x0020 /* 1=detects only in non-compliant mode */ +#define LANSR_DEEP_LOOPBACK 0x0040 /* 1=the PHY operates in deep loopback mode */ +#define LANSR_SHALLOW_LOOPBACK 0x0080 /* 1=the PHY operates in shallow loopback mode */ +#define LANSR_RSRVD_8 0x0100 /* reserved */ +#define LANSR_FIFO_ERR 0x0200 /* 1=FIFO error occurred */ +#define LANSR_MDIX_XOVER 0x0400 /* 1=PHY's MDI is in cross-over mode */ +#define LANSR_RSRVD_11 0x0800 /* resevered */ +#define LANSR_TP_POLARITY_REV 0xf000 /* Twisted pair polarity status A:D([15:12]) 1=reversed */ + +/* Interrupt status, mask and clear regs (PHY_INT_{STATUS,MASK,CLEAR}) */ +#define PHY_INT_RSRVD_0 0x0001 /* reserved */ +#define PHY_INT_RSRVD_1 0x0002 /* reserved */ +#define PHY_INT_RSRVD_2 0x0004 /* reserved */ +#define PHY_INT_REM_FLT_CNG 0x0008 /* Remote Fault Changed */ +#define PHY_INT_AN_CMPL 0x0010 /* Auto-negotiation completion */ +#define PHY_INT_NXT_PG_RCVD 0x0020 /* Next Page Received */ +#define PHY_INT_JABBER_CNG 0x0040 /* Jabber Changed */ +#define PHY_INT_NO_LINK 0x0080 /* No link after auto-negotiation */ +#define PHY_INT_NO_HCD 0x0100 /* AN couldn't determine highest common denominator */ +#define PHY_INT_MAS_SLA_ERR 0x0200 /* Master / Slave Error: couldn't resolve */ +#define PHY_INT_PRL_DET_FLT 0x0400 /* Parallel detection fault */ +#define PHY_INT_POL_CNG 0x0800 /* Polarity of any channel changed */ +#define PHY_INT_MDIX_CNG 0x1000 /* MDIX changed. A pair swap occurred. */ +#define PHY_INT_DPLX_CNG 0x2000 /* Duplex changed */ +#define PHY_INT_LNK_CNG 0x4000 /* Link changed (asserted when a link is established or broken) */ +#define PHY_INT_SPD_CNG 0x8000 /* Speed changed */ + +#endif /* INCLUDED_ETH_PHY_H */ diff --git a/usrp2/firmware/lib/ethernet.c b/usrp2/firmware/lib/ethernet.c new file mode 100644 index 00000000..d1928704 --- /dev/null +++ b/usrp2/firmware/lib/ethernet.c @@ -0,0 +1,340 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "ethernet.h" +#include "memory_map.h" +#include "eth_phy.h" +#include "eth_mac.h" +#include "eth_mac_regs.h" +#include "pic.h" +#include "hal_io.h" +#include "nonstdio.h" +#include "bool.h" +#include "i2c.h" +#include "usrp2_i2c_addr.h" + + +#define VERBOSE 0 + +static ethernet_t ed_state; +static ethernet_link_changed_callback_t ed_callback = 0; + +void +ethernet_register_link_changed_callback(ethernet_link_changed_callback_t new_callback) +{ + ed_callback = new_callback; +} + + +static void +ed_set_mac_speed(int speed) +{ + switch(speed){ + case 10: + eth_mac->speed = 1; + break; + case 100: + eth_mac->speed = 2; + break; + case 1000: + eth_mac->speed = 4; + break; + default: + break; + } +} + +static void +ed_link_up(int speed) +{ + // putstr("ed_link_up: "); puthex16_nl(speed); + + ed_set_mac_speed(speed); + + if (ed_callback) // fire link changed callback + (*ed_callback)(speed); +} + +static void +ed_link_down(void) +{ + // putstr("ed_link_down\n"); + + if (ed_callback) // fire link changed callback + (*ed_callback)(0); +} + + +static void +ed_link_speed_change(int speed) +{ + ed_link_down(); + ed_link_up(speed); +} + +static void +print_flow_control(int flow_control) +{ + static const char *flow_control_msg[4] = { + "NONE", "WE_TX", "WE_RX", "SYMMETRIC" + }; + putstr("ethernet flow control: "); + puts(flow_control_msg[flow_control & 0x3]); +} + +static void +check_flow_control_resolution(void) +{ + static const unsigned char table[16] = { + // index = {local_asm, local_pause, partner_asm, partner_pause} + FC_NONE, FC_NONE, FC_NONE, FC_NONE, + FC_NONE, FC_SYMM, FC_NONE, FC_SYMM, + FC_NONE, FC_NONE, FC_NONE, FC_WE_TX, + FC_NONE, FC_SYMM, FC_WE_RX, FC_SYMM + }; + + int us = eth_mac_miim_read(PHY_AUTONEG_ADV); + int lp = eth_mac_miim_read(PHY_LP_ABILITY); + int index = (((us >> 10) & 0x3) << 2) | ((lp >> 10) & 0x3); + ed_state.flow_control = table[index]; + + if (1) + print_flow_control(ed_state.flow_control); +} + +/* + * Read the PHY state register to determine link state and speed + */ +static void +ed_check_phy_state(void) +{ + int lansr = eth_mac_miim_read(PHY_LINK_AN); + eth_link_state_t new_state = LS_UNKNOWN; + int new_speed = S_UNKNOWN; + + if (VERBOSE){ + putstr("LANSR: "); + puthex16_nl(lansr); + } + + if (lansr & LANSR_LINK_GOOD){ // link's up + if (VERBOSE) + puts(" LINK_GOOD"); + + new_state = LS_UP; + switch (lansr & LANSR_SPEED_MASK){ + case LANSR_SPEED_10: + new_speed = 10; + break; + + case LANSR_SPEED_100: + new_speed = 100; + break; + + case LANSR_SPEED_1000: + new_speed = 1000; + break; + + default: + new_speed = S_UNKNOWN; + break; + } + + check_flow_control_resolution(); + } + else { // link's down + if (VERBOSE) + puts(" NOT LINK_GOOD"); + + new_state = LS_DOWN; + new_speed = S_UNKNOWN; + } + + if (new_state != ed_state.link_state){ + ed_state.link_state = new_state; // remember new state + if (new_state == LS_UP) + ed_link_up(new_speed); + else if (new_state == LS_DOWN) + ed_link_down(); + } + else if (new_state == LS_UP && new_speed != ed_state.link_speed){ + ed_state.link_speed = new_speed; // remember new speed + ed_link_speed_change(new_speed); + } +} + +/* + * This is fired when the ethernet PHY state changes + */ +static void +eth_phy_irq_handler(unsigned irq) +{ + ed_check_phy_state(); + eth_mac_miim_write(PHY_INT_CLEAR, ~0); // clear all ints +} + +void +ethernet_init(void) +{ + eth_mac_init(ethernet_mac_addr()); + + ed_state.link_state = LS_UNKNOWN; + ed_state.link_speed = S_UNKNOWN; + + // initialize MAC registers + eth_mac->tx_hwmark = 0x1e; + eth_mac->tx_lwmark = 0x19; + + eth_mac->crc_chk_en = 1; + eth_mac->rx_max_length = 2048; + + // configure PAUSE frame stuff + eth_mac->tx_pause_en = 1; // pay attn to pause frames sent to us + + eth_mac->pause_quanta_set = 38; // a bit more than 1 max frame 16kb/512 + fudge + eth_mac->pause_frame_send_en = 1; // enable sending pause frames + + + // setup PHY to interrupt on changes + + unsigned mask = + (PHY_INT_AN_CMPL // auto-neg completed + | PHY_INT_NO_LINK // no link after auto-neg + | PHY_INT_NO_HCD // no highest common denominator + | PHY_INT_MAS_SLA_ERR // couldn't resolve master/slave + | PHY_INT_PRL_DET_FLT // parallel detection fault + | PHY_INT_LNK_CNG // link established or broken + | PHY_INT_SPD_CNG // speed changed + ); + + eth_mac_miim_write(PHY_INT_CLEAR, ~0); // clear all pending interrupts + eth_mac_miim_write(PHY_INT_MASK, mask); // enable the ones we want + + pic_register_handler(IRQ_PHY, eth_phy_irq_handler); + + // Advertise our flow control configuation. + // + // We and the link partner each specify two bits in the base page + // related to autoconfiguration: NWAY_AR_PAUSE and NWAY_AR_ASM_DIR. + // The bits say what a device is "willing" to do, not what may actually + // happen as a result of the negotiation. There are 4 cases: + // + // PAUSE ASM_DIR + // + // 0 0 I have no flow control capability. + // + // 1 0 I both assert and respond to flow control. + // + // 0 1 I assert flow control, but cannot respond. That is, + // I want to be able to send PAUSE frames, but will ignore any + // you send to me. (This is our configuration.) + // + // 1 1 I can both assert and respond to flow control AND I am willing + // to operate symmetrically OR asymmetrically in EITHER direction. + // (We hope the link partner advertises this, otherwise we don't + // get what we want.) + + int t = eth_mac_miim_read(PHY_AUTONEG_ADV); + t &= ~(NWAY_AR_PAUSE | NWAY_AR_ASM_DIR); + t |= NWAY_AR_ASM_DIR; + + // Say we can't to 10BASE-T or 100BASE-TX, half or full duplex + t &= ~(NWAY_AR_10T_HD_CAPS | NWAY_AR_10T_FD_CAPS | NWAY_AR_100TX_HD_CAPS | NWAY_AR_100TX_FD_CAPS); + + eth_mac_miim_write(PHY_AUTONEG_ADV, t); + + // Restart autonegotation. + // We want to ensure that we're advertising our PAUSE capabilities. + t = eth_mac_miim_read(PHY_CTRL); + eth_mac_miim_write(PHY_CTRL, t | MII_CR_RESTART_AUTO_NEG); +} + +static bool +unprogrammed(const u2_mac_addr_t *t) +{ + int i; + bool all_zeros = true; + bool all_ones = true; + for (i = 0; i < 6; i++){ + all_zeros &= t->addr[i] == 0x00; + all_ones &= t->addr[i] == 0xff; + } + return all_ones | all_zeros; +} + +static int8_t src_addr_initialized = false; +static u2_mac_addr_t src_addr = {{ + 0x00, 0x50, 0xC2, 0x85, 0x3f, 0xff + }}; + +const u2_mac_addr_t * +ethernet_mac_addr(void) +{ + if (!src_addr_initialized){ // fetch from eeprom + src_addr_initialized = true; + + // if we're simulating, don't read the EEPROM model, it's REALLY slow + if (hwconfig_simulation_p()) + return &src_addr; + + u2_mac_addr_t tmp; + bool ok = eeprom_read(I2C_ADDR_MBOARD, MBOARD_MAC_ADDR, &tmp.addr[0], 6); + if (!ok || unprogrammed(&tmp)){ + // use the default + } + else + src_addr = tmp; + } + + return &src_addr; +} + +bool +ethernet_set_mac_addr(const u2_mac_addr_t *t) +{ + bool ok = eeprom_write(I2C_ADDR_MBOARD, MBOARD_MAC_ADDR, &t->addr[0], 6); + if (ok){ + src_addr = *t; + src_addr_initialized = true; + eth_mac_set_addr(t); + } + + return ok; +} + +int +ethernet_check_errors(void) +{ + // these registers are reset when read + + int r = 0; + if (eth_mac_read_rmon(0x05) != 0) + r |= RME_RX_CRC; + if (eth_mac_read_rmon(0x06) != 0) + r |= RME_RX_FIFO_FULL; + if (eth_mac_read_rmon(0x07) != 0) + r |= RME_RX_2SHORT_2LONG; + + if (eth_mac_read_rmon(0x25) != 0) + r |= RME_TX_JAM_DROP; + if (eth_mac_read_rmon(0x26) != 0) + r |= RME_TX_FIFO_UNDER; + if (eth_mac_read_rmon(0x27) != 0) + r |= RME_TX_FIFO_OVER; + + return r; +} diff --git a/usrp2/firmware/lib/ethernet.h b/usrp2/firmware/lib/ethernet.h new file mode 100644 index 00000000..aaed05d4 --- /dev/null +++ b/usrp2/firmware/lib/ethernet.h @@ -0,0 +1,82 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_ETHERNET_H +#define INCLUDED_ETHERNET_H + +#include "usrp2_mac_addr.h" +#include "bool.h" + +typedef void (*ethernet_link_changed_callback_t)(int speed); + + +/*! + * \brief one time call to initialize ethernet + */ +void ethernet_init(void); + +/*! + * \brief Specify the function to call on link state changes. + * + * When the link comes up, speed is the link speed in Mbit/s. + * When the link goes down, speed is 0. + */ +void ethernet_register_link_changed_callback(ethernet_link_changed_callback_t cb); + +/*! + * \returns ethernet MAC address + */ +const u2_mac_addr_t *ethernet_mac_addr(void); + +/*! + * \brief write mac address to eeprom and begin using it + */ +bool ethernet_set_mac_addr(const u2_mac_addr_t *t); + + +/* + * \brief read RMON regs and return error mask + */ +int ethernet_check_errors(void); + +#define RME_RX_CRC 0x0001 +#define RME_RX_FIFO_FULL 0x0002 +#define RME_RX_2SHORT_2LONG 0x0004 + +#define RME_TX_JAM_DROP 0x0010 +#define RME_TX_FIFO_UNDER 0x0020 +#define RME_TX_FIFO_OVER 0x0040 + + +typedef enum { LS_UNKNOWN, LS_DOWN, LS_UP } eth_link_state_t; + +// flow control bitmasks +#define FC_NONE 0x0 +#define FC_WE_TX 0x1 // we send PAUSE frames +#define FC_WE_RX 0x2 // we honor received PAUSE frames +#define FC_SYMM (FC_WE_TX | FC_WE_RX) + +#define S_UNKNOWN (-1) // unknown link speed + +typedef struct { + eth_link_state_t link_state; + int link_speed; // in Mb/s + int flow_control; +} ethernet_t; + +#endif /* INCLUDED_ETHERNET_H */ diff --git a/usrp2/firmware/lib/exit.c b/usrp2/firmware/lib/exit.c new file mode 100644 index 00000000..95a3bf4d --- /dev/null +++ b/usrp2/firmware/lib/exit.c @@ -0,0 +1,28 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +extern void _exit(int status); + +void +exit(int status) +{ + _exit(status); +} diff --git a/usrp2/firmware/lib/hal_io.c b/usrp2/firmware/lib/hal_io.c new file mode 100644 index 00000000..1a370687 --- /dev/null +++ b/usrp2/firmware/lib/hal_io.c @@ -0,0 +1,323 @@ +/* -*- c -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +// conditionalized on HAL_IO_USES_DBOARD_PINS && HAL_IO_USES_UART + +#include "hal_io.h" +#include "memory_map.h" +#include "hal_uart.h" +#include "bool.h" +#include +#include +//#include + +/* + * ======================================================================== + * GPIOS + * ======================================================================== + */ +void +hal_gpio_set_ddr(int bank, int value, int mask) +{ + bank &= 0x1; + + if (bank == GPIO_TX_BANK){ // tx in top half + value <<= 16; + mask <<= 16; + } + else { + value &= 0xffff; + mask &= 0xffff; + } + + int ei = hal_disable_ints(); + gpio_base->ddr = (gpio_base->ddr & ~mask) | (value & mask); + hal_restore_ints(ei); +} + +static bool +code_to_int(char code, int *val) +{ + switch(code){ + case 's': *val = GPIO_SEL_SW; return true; + case 'a': *val = GPIO_SEL_ATR; return true; + case '0': *val = GPIO_SEL_DEBUG_0; return true; + case '1': *val = GPIO_SEL_DEBUG_1; return true; + case '.': + default: + return false; + } +} + +void +hal_gpio_set_sel(int bank, int bitno, char code) +{ + bank &= 0x1; + int t; + + if (!code_to_int(code, &t)) + return; + + int val = t << (2 * bitno); + int mask = 0x3 << (2 * bitno); + + volatile uint32_t *sel = bank == GPIO_TX_BANK ? &gpio_base->tx_sel : &gpio_base->rx_sel; + int ei = hal_disable_ints(); + int v = (*sel & ~mask) | (val & mask); + *sel = v; + hal_restore_ints(ei); + + if (0) + printf("hal_gpio_set_sel(bank=%d, bitno=%d, code=%c) *sel = 0x%x\n", + bank, bitno, code, v); +} + +void +hal_gpio_set_sels(int bank, char *codes) +{ + //assert(strlen(codes) == 16); + + int val = 0; + int mask = 0; + int i; + + for (i = 15; i >= 0; i--){ + val <<= 2; + mask <<= 2; + int t; + if (code_to_int(codes[i], &t)){ + val |= t; + mask |= 0x3; + } + } + + volatile uint32_t *sel = bank == GPIO_TX_BANK ? &gpio_base->tx_sel : &gpio_base->rx_sel; + int ei = hal_disable_ints(); + *sel = (*sel & ~mask) | (val & mask); + hal_restore_ints(ei); +} + + +/*! + * \brief write \p value to gpio pins specified by \p mask. + */ +void +hal_gpio_write(int bank, int value, int mask) +{ + static uint32_t _gpio_io_shadow; + + bank &= 0x1; + + if (bank == GPIO_TX_BANK){ // tx in top half + value <<= 16; + mask <<= 16; + } + else { + value &= 0xffff; + mask &= 0xffff; + } + + //int ei = hal_disable_ints(); + _gpio_io_shadow = (_gpio_io_shadow & ~mask) | (value & mask); + gpio_base->io = _gpio_io_shadow; + //hal_restore_ints(ei); +} + + +/*! + * \brief read GPIO bits + */ +int +hal_gpio_read(int bank) +{ + bank &= 0x1; + int r = gpio_base->io; + if (bank == GPIO_TX_BANK) + r >>= 16; + + return r & 0xffff; +} + +/* + * ======================================================================== + * leds + * ======================================================================== + */ + +static unsigned long leds_shadow = 0; +static unsigned long led_src_shadow = 0; + +void +hal_set_leds(int value, int mask) +{ + int ei = hal_disable_ints(); + leds_shadow = (leds_shadow & ~mask) | (value & mask); + output_regs->leds = leds_shadow; + hal_restore_ints(ei); +} + +// Allow hardware control over leds. 1 = hardware, 0 = software +void +hal_set_led_src(int value, int mask) +{ + int ei = hal_disable_ints(); + led_src_shadow = (led_src_shadow & ~mask) | (value & mask); + output_regs->led_src = led_src_shadow; + hal_restore_ints(ei); +} + +void +hal_toggle_leds(int mask) +{ + int ei = hal_disable_ints(); + leds_shadow ^= mask; + output_regs->leds = leds_shadow; + hal_restore_ints(ei); +} + + +// ================================================================ +// primitives +// ================================================================ + +#if defined(HAL_IO_USES_DBOARD_PINS) +// +// Does i/o using high 9-bits of rx daughterboard pins. +// +// 1 1 1 1 1 1 +// 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | char |W| | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// +// Asserts W when writing char +// + +#define W 0x0080 + +void +hal_io_init(void) +{ + // make high 9 bits of tx daughterboard outputs + hal_gpio_set_rx_mode(15, 7, GPIOM_OUTPUT); + + // and set them to zero + hal_gpio_set_rx(0x0000, 0xff80); +} + +void +hal_finish(void) +{ + volatile unsigned long *p = (unsigned long *) 0xC2F0; + *p = 0; +} + +// %c +inline int +putchar(int ch) +{ + hal_gpio_set_rx((s << 8) | W, 0xff80); + hal_gpio_set_rx(0, 0xff80); + return ch; +} + +#elif defined(HAL_IO_USES_UART) + +void +hal_io_init(void) +{ + hal_uart_init(); +} + +void +hal_finish(void) +{ +} + +// %c +inline int +putchar(int ch) +{ + hal_uart_putc(ch); + return ch; +} + +int +getchar(void) +{ + return hal_uart_getc(); +} + +#else // nop all i/o + +void +hal_io_init(void) +{ +} + +void +hal_finish(void) +{ +} + +// %c +inline int +putchar(int ch) +{ + return ch; +} + +int +getchar(void) +{ + return EOF; +} + +#endif + +// ================================================================ +// (slightly) higher level functions +// +// These are here so we can inline the calls to putchar. +// The rest of the stuff was moved to nonstdio.c +// ================================================================ + +// \n +inline void +newline(void) +{ + putchar('\n'); +} + +int +putstr(const char *s) +{ + while (*s) + putchar(*s++); + + return 0; +} + +int +puts(const char *s) +{ + putstr(s); + putchar('\n'); + return 0; +} diff --git a/usrp2/firmware/lib/hal_io.h b/usrp2/firmware/lib/hal_io.h new file mode 100644 index 00000000..b6ae35b7 --- /dev/null +++ b/usrp2/firmware/lib/hal_io.h @@ -0,0 +1,169 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_HAL_IO_H +#define INCLUDED_HAL_IO_H + +#include "memory_map.h" + +void hal_io_init(void); +void hal_finish(); + + +/* + * ------------------------------------------------------------------------ + * The GPIO pins are organized into two banks of 16-bits. + * Bank 0 goes to the Tx daughterboard, Bank 1 goes to the Rx daughterboard. + * + * Each pin may be configured as an input or an output from the FPGA. + * For output pins, there are four signals which may be routed to the + * pin. The four signals are the value written by s/w, the output of + * the ATR controller, or two different sources of debug info from the + * FPGA fabric. + * ------------------------------------------------------------------------ + */ + +#define GPIO_TX_BANK 0 // pins that connect to the Tx daughterboard +#define GPIO_RX_BANK 1 // pins that connect to the Rx daughterboard + + +/*! + * \brief Set the data direction for GPIO pins + * + * If the bit is set, it's an output from the FPGA. + * \param value is a 16-bit bitmask of values + * \param mask is a 16-bit bitmask of which bits to effect. + */ +void hal_gpio_set_ddr(int bank, int value, int mask); + +/*! + * \brief Select the source of the signal for an output pin. + * + * \param code is is one of 's', 'a', '0', '1' + * where 's' selects software output, 'a' selects ATR output, '0' selects + * debug 0, '1' selects debug 1. + */ +void hal_gpio_set_sel(int bank, int bitno, char code); + +/*! + * \brief Select the source of the signal for the output pins. + * + * \param codes is is a string of 16 characters composed of '.', 's', + * 'a', '0', or '1' where '.' means "don't change", 's' selects + * software output, 'a' selects ATR output, '0' selects debug 0, '1' + * selects debug 1. + */ +void hal_gpio_set_sels(int bank, char *codes); + + +/*! + * \brief write \p value to gpio pins specified by \p mask. + */ +void hal_gpio_write(int bank, int value, int mask); + +/*! + * \brief read GPIO bits + */ +int hal_gpio_read(int bank); + + +/* + * ------------------------------------------------------------------------ + * control the leds + * + * Low 4-bits are the general purpose leds on the board + * The next bit is the led on the ethernet connector + * ------------------------------------------------------------------------ + */ + +void hal_set_leds(int value, int mask); +void hal_set_led_src(int value, int mask); +void hal_toggle_leds(int mask); + +/* + * ------------------------------------------------------------------------ + * simple timeouts + * ------------------------------------------------------------------------ + */ + + + +static inline void +hal_set_timeout(int delta_ticks) +{ + int t = timer_regs->time + delta_ticks; + if (t == 0) // kills timer + t = 1; + timer_regs->time = t; +} + +/* + * ------------------------------------------------------------------------ + * interrupt enable/disable + * ------------------------------------------------------------------------ + */ + +/*! + * \brief Disable interrupts and return previous interrupt enable state. + * [Microblaze specific] + */ +static inline int +hal_disable_ints(void) +{ + int result, t0; + + asm volatile("mfs %0, rmsr \n\ + andni %1, %0, 0x2 \n\ + mts rmsr, %1" + : "=r" (result), "=r" (t0)); + return result; +} + +/*! + * \brief Enable interrupts and return previous interrupt enable state. + * [Microblaze specific] + */ +static inline int +hal_enable_ints(void) +{ + int result, t0; + + asm volatile("mfs %0, rmsr \n\ + ori %1, %0, 0x2 \n\ + mts rmsr, %1" + : "=r" (result), "=r" (t0)); + return result; +} + +/*! + * \brief Set interrupt enable state to \p prev_state. + * [Microblaze specific] + */ +static inline void +hal_restore_ints(int prev_state) +{ + int t0, t1; + asm volatile("andi %0, %2, 0x2 \n\ + mfs %1, rmsr \n\ + andni %1, %1, 0x2 \n\ + or %1, %1, %0 \n\ + mts rmsr, %1" + : "=r" (t0), "=r"(t1) : "r" (prev_state)); +} + +#endif /* INCLUDED_HAL_IO_H */ diff --git a/usrp2/firmware/lib/hal_uart.c b/usrp2/firmware/lib/hal_uart.c new file mode 100644 index 00000000..75b12b43 --- /dev/null +++ b/usrp2/firmware/lib/hal_uart.c @@ -0,0 +1,77 @@ +/* -*- c -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#include "hal_uart.h" +#include "hal_io.h" +#include "memory_map.h" + +// First pass, no interrupts + +// Replaced with divisors.py which generates best divisor +//#define CALC_DIVISOR(rate) (WISHBONE_CLK_RATE / ((rate) * 16)) + +#define NSPEEDS 6 +#define MAX_WB_DIV 4 + +static const uint16_t +divisor_table[MAX_WB_DIV+1][NSPEEDS] = { + { 2, 2, 2, 2, 2, 2}, // 0: can't happen + { 651, 326, 163, 109, 54, 27 }, // 1: 100 MHz + { 326, 163, 81, 54, 27, 14 }, // 2: 50 MHz + { 217, 109, 54, 36, 18, 9 }, // 3: 33.3333 MHz + { 163, 81, 41, 27, 14, 7 }, // 4: 25 MHz +}; + +#define u uart_regs + +void +hal_uart_init(void) +{ + u->clkdiv = 217; // 230400 bps +} + +void +hal_uart_putc(int ch) +{ + if (ch == '\n') // FIXME for now map \n -> \r\n + hal_uart_putc('\r'); + + while (u->txlevel == 0) // wait for fifo to have space + ; + + u->txchar = ch; +} + +void +hal_uart_putc_nowait(int ch) +{ + if (ch == '\n') // FIXME for now map \n -> \r\n + hal_uart_putc('\r'); + + if(u->txlevel) // If fifo has space + u->txchar = ch; +} + +int +hal_uart_getc(void) +{ + while ((u->rxlevel) == 0) // wait for data to be ready + ; + + return u->rxchar; +} diff --git a/usrp2/firmware/lib/hal_uart.h b/usrp2/firmware/lib/hal_uart.h new file mode 100644 index 00000000..2ddfa625 --- /dev/null +++ b/usrp2/firmware/lib/hal_uart.h @@ -0,0 +1,68 @@ +/* -*- c -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_HAL_UART_H +#define INCLUDED_HAL_UART_H + + +/*! + * \brief one-time call to init + */ +void hal_uart_init(void); + +typedef enum { + US_9600, + US_19200, + US_38400, + US_57600, + US_115200, + US_230400, +} hal_uart_speed_t; + +typedef struct { + hal_uart_speed_t speed; +} hal_uart_config_t; + +/*! + * \brief Set uart parameters + * Default is 115,200 bps, 8N1. + */ +void hal_uart_set_config(const hal_uart_config_t *c); + +/*! + * \brief Get uart configuation. + */ +void hal_uart_get_config(hal_uart_config_t *c); + +/*! + * \brief Enqueue \p ch for output over serial port + */ +void hal_uart_putc(int ch); + +/*! + * \brief Enqueue \p ch for output over serial port, silent fail if queue is full + */ +void hal_uart_putc_nowait(int ch); + +/* + * \brief Blocking read of next char from serial port + */ +int hal_uart_getc(void); + + +#endif /* INCLUDED_HAL_UART_H */ diff --git a/usrp2/firmware/lib/i2c.c b/usrp2/firmware/lib/i2c.c new file mode 100644 index 00000000..3f738733 --- /dev/null +++ b/usrp2/firmware/lib/i2c.c @@ -0,0 +1,127 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "i2c.h" +#include "memory_map.h" +#include "stdint.h" + +#define MAX_WB_DIV 4 // maximum wishbone divisor (from 100 MHz MASTER_CLK) + +// prescaler divisor values for 100 kHz I2C [uses 5 * SCLK internally] + +#define PRESCALER(wb_div) (((MASTER_CLK_RATE/(wb_div)) / (5 * 100000)) - 1) + +static uint16_t prescaler_values[MAX_WB_DIV+1] = { + 0xffff, // 0: can't happen + PRESCALER(1), // 1: 100 MHz + PRESCALER(2), // 2: 50 MHz + PRESCALER(3), // 3: 33.333 MHz + PRESCALER(4), // 4: 25 MHz +}; + +void +i2c_init(void) +{ + i2c_regs->ctrl = 0; // disable core + + // setup prescaler depending on wishbone divisor + int wb_div = hwconfig_wishbone_divisor(); + if (wb_div > MAX_WB_DIV) + wb_div = MAX_WB_DIV; + + i2c_regs->prescaler_lo = prescaler_values[wb_div] & 0xff; + i2c_regs->prescaler_hi = (prescaler_values[wb_div] >> 8) & 0xff; + + i2c_regs->ctrl = I2C_CTRL_EN; // enable core + + // FIXME interrupt driven? +} + +static inline void +wait_for_xfer(void) +{ + while (i2c_regs->cmd_status & I2C_ST_TIP) // wait for xfer to complete + ; +} + +static inline bool +wait_chk_ack(void) +{ + wait_for_xfer(); + + if ((i2c_regs->cmd_status & I2C_ST_RXACK) != 0){ // target NAK'd + return false; + } + return true; +} + +bool +i2c_read (unsigned char i2c_addr, unsigned char *buf, unsigned int len) +{ + if (len == 0) // reading zero bytes always works + return true; + + while (i2c_regs->cmd_status & I2C_ST_BUSY) + ; + + i2c_regs->data = (i2c_addr << 1) | 1; // 7 bit address and read bit (1) + // generate START and write addr + i2c_regs->cmd_status = I2C_CMD_WR | I2C_CMD_START; + if (!wait_chk_ack()) + goto fail; + + for (; len > 0; buf++, len--){ + i2c_regs->cmd_status = I2C_CMD_RD | (len == 1 ? (I2C_CMD_NACK | I2C_CMD_STOP) : 0); + wait_for_xfer(); + *buf = i2c_regs->data; + } + return true; + + fail: + i2c_regs->cmd_status = I2C_CMD_STOP; // generate STOP + return false; +} + + +bool +i2c_write(unsigned char i2c_addr, const unsigned char *buf, unsigned int len) +{ + while (i2c_regs->cmd_status & I2C_ST_BUSY) + ; + + i2c_regs->data = (i2c_addr << 1) | 0; // 7 bit address and write bit (0) + + // generate START and write addr (and maybe STOP) + i2c_regs->cmd_status = I2C_CMD_WR | I2C_CMD_START | (len == 0 ? I2C_CMD_STOP : 0); + if (!wait_chk_ack()) + goto fail; + + for (; len > 0; buf++, len--){ + i2c_regs->data = *buf; + i2c_regs->cmd_status = I2C_CMD_WR | (len == 1 ? I2C_CMD_STOP : 0); + if (!wait_chk_ack()) + goto fail; + } + return true; + + fail: + i2c_regs->cmd_status = I2C_CMD_STOP; // generate STOP + return false; +} + + diff --git a/usrp2/firmware/lib/i2c.h b/usrp2/firmware/lib/i2c.h new file mode 100644 index 00000000..ad1e4159 --- /dev/null +++ b/usrp2/firmware/lib/i2c.h @@ -0,0 +1,39 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_I2C_H +#define INCLUDED_I2C_H + +#include "bool.h" + +void i2c_init(void); +bool i2c_read (unsigned char i2c_addr, unsigned char *buf, unsigned int len); +bool i2c_write(unsigned char i2c_addr, const unsigned char *buf, unsigned int len); + + +// Write 24LC024 / 24LC025 EEPROM on motherboard or daughterboard. +// Which EEPROM is determined by i2c_addr. See i2c_addr.h + +bool eeprom_write (int i2c_addr, int eeprom_offset, const void *buf, int len); + +// Read 24LC024 / 24LC025 EEPROM on motherboard or daughterboard. +// Which EEPROM is determined by i2c_addr. See i2c_addr.h + +bool eeprom_read (int i2c_addr, int eeprom_offset, void *buf, int len); + +#endif /* INCLUDED_I2C_H */ diff --git a/usrp2/firmware/lib/lsadc.c b/usrp2/firmware/lib/lsadc.c new file mode 100644 index 00000000..7983552e --- /dev/null +++ b/usrp2/firmware/lib/lsadc.c @@ -0,0 +1,73 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include "lsadc.h" +#include "spi.h" +#include "memory_map.h" + + +// AD9712 or AD7922 1 MS/s, 10-/12-bit ADCs + +//#define SPI_SS_DEBUG SPI_SS_RX_DB +#define SPI_SS_DEBUG 0 + + +void +lsadc_init(void) +{ + // nop +} + +/* + * The ADC's are pipelined. That is, you have to tell them + * which of the two inputs you want one cycle ahead of time. + * We could optimize and keep track of which one we used last + * time, but for simplicity we'll always tell it which + * one we want. This takes 2 16-bit xfers, one to set the + * input and one to read the one we want. + */ + +int +_lsadc_read(int which_adc, int slave_select) +{ + uint32_t r; + int channel = which_adc & 0x1; + + // Set CHN and STY equal to channel number. We don't want "daisy chain mode" + uint16_t cmd = (channel << 13) | (channel << 12); + + spi_transact(SPI_TXONLY, slave_select | SPI_SS_DEBUG, + cmd, 16, SPIF_PUSH_RISE | SPIF_LATCH_RISE); + + r = spi_transact(SPI_TXRX, slave_select | SPI_SS_DEBUG, + cmd, 16, SPIF_PUSH_RISE | SPIF_LATCH_RISE); + + return r & 0x0fff; +} + +int +lsadc_read_rx(int which_adc) +{ + return _lsadc_read(which_adc, SPI_SS_RX_ADC); +} + +int +lsadc_read_tx(int which_adc) +{ + return _lsadc_read(which_adc, SPI_SS_TX_ADC); +} diff --git a/usrp2/firmware/lib/lsadc.h b/usrp2/firmware/lib/lsadc.h new file mode 100644 index 00000000..319f34d9 --- /dev/null +++ b/usrp2/firmware/lib/lsadc.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_LSADC_H +#define INCLUDED_LSADC_H + +#include "memory_map.h" + +/*! + * \brief One time call to initialize low-speed ADCs. + */ +void lsadc_init(void); + +/*! + * \brief Read one of the low-speed Rx daughterboard ADCs. + * \param which_adc in [0, 1] + * + * \returns 12-bit value in [0,4095] + */ +int lsadc_read_rx(int which_adc); + +/*! + * \brief Read one of the low-speed Tx daughterboard ADCs. + * \param which_adc in [0, 1] + * + * \returns 12-bit value in [0,4095] + */ +int lsadc_read_tx(int which_adc); + + +#endif /* INCLUDED_LSADC_H */ diff --git a/usrp2/firmware/lib/lsdac.c b/usrp2/firmware/lib/lsdac.c new file mode 100644 index 00000000..6bc2e5cb --- /dev/null +++ b/usrp2/firmware/lib/lsdac.c @@ -0,0 +1,68 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include "lsdac.h" +#include "spi.h" +#include "memory_map.h" + +// AD5624, AD5623 + +#define CMD(x) ((x) << 19) +#define CMD_WR_INPUT_N CMD(0) // write input N +#define CMD_UP_DAC_N CMD(1) // update DAC N from input reg +#define CMD_WR_INPUT_N_LDAC CMD(2) // write input N, update all +#define CMD_WR_UP_DAC_N CMD(3) // write and update N +#define CMD_WR_PWR_CONFIG CMD(4) // write power up/down config reg +#define CMD_SW_RESET CMD(5) // force s/w reset +#define CMD_WR_LDAC_CFG CMD(6) // write LDAC config reg +#define CMD_WR_INT_REF_CFG CMD(7) // write internal ref cfg reg (AD5623R only) + + +//#define SPI_SS_DEBUG SPI_SS_TX_DB +#define SPI_SS_DEBUG 0 + +inline static void +_write_rx(uint32_t v) +{ + spi_transact(SPI_TXONLY, SPI_SS_RX_DAC | SPI_SS_DEBUG, v, 24, SPIF_PUSH_RISE); +} + +inline static void +_write_tx(uint32_t v) +{ + spi_transact(SPI_TXONLY, SPI_SS_TX_DAC | SPI_SS_DEBUG, v, 24, SPIF_PUSH_RISE); +} + +void +lsdac_init(void) +{ + _write_tx(CMD_SW_RESET | 0x1); // power-on reset + _write_rx(CMD_SW_RESET | 0x1); // power-on reset +} + +void +lsdac_write_rx(int which_dac, int value) +{ + _write_rx(CMD_WR_UP_DAC_N | ((which_dac & 0x7) << 16) | ((value << 4) & 0xffff)); +} + +void +lsdac_write_tx(int which_dac, int value) +{ + _write_tx(CMD_WR_UP_DAC_N | ((which_dac & 0x7) << 16) | ((value << 4) & 0xffff)); +} diff --git a/usrp2/firmware/lib/lsdac.h b/usrp2/firmware/lib/lsdac.h new file mode 100644 index 00000000..9cad917e --- /dev/null +++ b/usrp2/firmware/lib/lsdac.h @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_LSDAC_H +#define INCLUDED_LSDAC_H + +#include "memory_map.h" + +/*! + * \brief One time call to initialize low-speed DACs. + */ +void lsdac_init(void); + +/*! + * \brief Write one of the low-speed Rx daughterboard DACs. + * \param which_dac in [0, 3] + * \param unsigned 12-bit value in [0, 4095] + * + * value maps linearly to output voltage from 0 to 3.3V + */ +void lsdac_write_rx(int which_dac, int value); + +/*! + * \brief Write one of the low-speed Tx daughterboard DACs. + * \param which_dac in [0, 3] + * \param unsigned 12-bit value in [0, 4095] + * + * value maps linearly to output voltage from 0 to 3.3V + */ +void lsdac_write_tx(int which_dac, int value); + + +#endif /* INCLUDED_LSDAC_H */ diff --git a/usrp2/firmware/lib/mdelay.c b/usrp2/firmware/lib/mdelay.c new file mode 100644 index 00000000..c8c119b1 --- /dev/null +++ b/usrp2/firmware/lib/mdelay.c @@ -0,0 +1,73 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "mdelay.h" +#include "memory_map.h" + +// Delay about one millisecond. +// +// Need 33,333 cycles at 33 MHz. +// Each time around the loop is 10 cycles +// + +#define LOOPCNT(wb_div) (MASTER_CLK_RATE/(wb_div) / 10000) + +inline static void +delay_1ms(int loop_count) +{ + int i; + for (i = 0; i < loop_count; i++){ + asm volatile ("or r0, r0, r0\n\ + or r0, r0, r0\n\ + or r0, r0, r0\n\ + or r0, r0, r0\n\ + or r0, r0, r0\n\ + or r0, r0, r0\n\ + or r0, r0, r0\n"); + } +} + +// delay about ms milliseconds +void +mdelay(int ms) +{ + static int loop_count = -1; + + if (hwconfig_simulation_p()) + return; + + if (loop_count < 0){ + // set correct loop_count + static unsigned short lc[8] = { + 0, + LOOPCNT(1), + LOOPCNT(2), + LOOPCNT(3), + LOOPCNT(4), + LOOPCNT(5), + LOOPCNT(6), + LOOPCNT(7) + }; + + loop_count = lc[hwconfig_wishbone_divisor() & 0x7]; + } + + int i; + for (i = 0; i < ms; i++) + delay_1ms(loop_count); +} diff --git a/usrp2/firmware/lib/mdelay.h b/usrp2/firmware/lib/mdelay.h new file mode 100644 index 00000000..226bbb3f --- /dev/null +++ b/usrp2/firmware/lib/mdelay.h @@ -0,0 +1,29 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_MDELAY_H +#define INCLUDED_MDELAY_H + +/*! + * \brief Delay about ms milliseconds + * + * If simulating, _very_ short delay + */ +void mdelay(int ms); + +#endif /* INCLUDED_MDELAY_H */ diff --git a/usrp2/firmware/lib/memcpy_wa.c b/usrp2/firmware/lib/memcpy_wa.c new file mode 100644 index 00000000..ef20efaa --- /dev/null +++ b/usrp2/firmware/lib/memcpy_wa.c @@ -0,0 +1,42 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "memcpy_wa.h" +#include +#include + +/* + * For copying to/from non-byte-adressable memory, such as + * the buffers. dst, src, and nbytes must all satisfy (x % 4 == 0) + */ +void +memcpy_wa(void *dst, const void *src, size_t nbytes) +{ + if (((intptr_t) dst & 0x3) + || ((intptr_t) src & 0x3) + || (nbytes & 0x3)) + exit(1); /* die! */ + + int *dp = (int *) dst; + int *sp = (int *) src; + unsigned nw = nbytes/4; + + unsigned i; + for (i = 0; i < nw; i++) + dp[i] = sp[i]; +} diff --git a/usrp2/firmware/lib/memcpy_wa.h b/usrp2/firmware/lib/memcpy_wa.h new file mode 100644 index 00000000..072fc148 --- /dev/null +++ b/usrp2/firmware/lib/memcpy_wa.h @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_MEMCPY_WA_H +#define INCLUDED_MEMCPY_WA_H + +#include + +/* + * For copying to/from non-byte-adressable memory, such as + * the buffers. dst, src, and nbytes must all satisfy (x % 4 == 0) + */ +void memcpy_wa(void *dst, const void *src, size_t nbytes); + +#endif /* INCLUDED_MEMCPY_WA_H */ + + diff --git a/usrp2/firmware/lib/memory_map.h b/usrp2/firmware/lib/memory_map.h new file mode 100644 index 00000000..78a4330d --- /dev/null +++ b/usrp2/firmware/lib/memory_map.h @@ -0,0 +1,719 @@ +/* -*- c -*- */ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +/* Overall Memory Map + * 0000-7FFF 32K RAM space (16K on 1500, 24K on 2000, 32K on DSP) + * 8000-BFFF 16K Buffer Pool + * C000-FFFF 16K Peripherals + */ + + +#ifndef INCLUDED_MEMORY_MAP_H +#define INCLUDED_MEMORY_MAP_H + +#include + + +#define MASTER_CLK_RATE 100000000 // 100 MHz + + +//////////////////////////////////////////////////////////////// +// +// Memory map for embedded wishbone bus +// +//////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////// +// Main RAM, Slave 0 + +#define RAM_BASE 0x0000 + +//////////////////////////////////////////////////////////////// +// Buffer Pool RAM, Slave 1 +// +// The buffers themselves are located in Slave 1, Buffer Pool RAM. +// The status registers are in Slave 5, Buffer Pool Status. +// The control register is in Slave 7, Settings Bus. + +#define BUFFER_POOL_RAM_BASE 0x8000 + +#define NBUFFERS 8 +#define BP_NLINES 0x0200 // number of 32-bit lines in a buffer +#define BP_LAST_LINE (BP_NLINES - 1) // last line in a buffer + +#define buffer_pool_ram \ + ((uint32_t *) BUFFER_POOL_RAM_BASE) + +#define buffer_ram(n) (&buffer_pool_ram[(n) * BP_NLINES]) + + +///////////////////////////////////////////////////// +// SPI Core, Slave 2. See core docs for more info +#define SPI_BASE 0xC000 // Base address (16-bit) + +typedef struct { + volatile uint32_t txrx0; + volatile uint32_t txrx1; + volatile uint32_t txrx2; + volatile uint32_t txrx3; + volatile uint32_t ctrl; + volatile uint32_t div; + volatile uint32_t ss; +} spi_regs_t; + +#define spi_regs ((spi_regs_t *) SPI_BASE) + + +// Masks for controlling different peripherals +#define SPI_SS_AD9510 1 +#define SPI_SS_AD9777 2 +#define SPI_SS_RX_DAC 4 +#define SPI_SS_RX_ADC 8 +#define SPI_SS_RX_DB 16 +#define SPI_SS_TX_DAC 32 +#define SPI_SS_TX_ADC 64 +#define SPI_SS_TX_DB 128 + +// Masks for different parts of CTRL reg +#define SPI_CTRL_ASS (1<<13) +#define SPI_CTRL_IE (1<<12) +#define SPI_CTRL_LSB (1<<11) +#define SPI_CTRL_TXNEG (1<<10) +#define SPI_CTRL_RXNEG (1<< 9) +#define SPI_CTRL_GO_BSY (1<< 8) +#define SPI_CTRL_CHAR_LEN_MASK 0x7F + +//////////////////////////////////////////////// +// I2C, Slave 3 +// See Wishbone I2C-Master Core Specification. + +#define I2C_BASE 0xC400 + +typedef struct { + volatile uint32_t prescaler_lo; // r/w + volatile uint32_t prescaler_hi; // r/w + volatile uint32_t ctrl; // r/w + volatile uint32_t data; // wr = transmit reg; rd = receive reg + volatile uint32_t cmd_status; // wr = command reg; rd = status reg +} i2c_regs_t; + +#define i2c_regs ((i2c_regs_t *) I2C_BASE) + +#define I2C_CTRL_EN (1 << 7) // core enable +#define I2C_CTRL_IE (1 << 6) // interrupt enable + +// +// STA, STO, RD, WR, and IACK bits are cleared automatically +// +#define I2C_CMD_START (1 << 7) // generate (repeated) start condition +#define I2C_CMD_STOP (1 << 6) // generate stop condition +#define I2C_CMD_RD (1 << 5) // read from slave +#define I2C_CMD_WR (1 << 4) // write to slave +#define I2C_CMD_NACK (1 << 3) // when a rcvr, send ACK (ACK=0) or NACK (ACK=1) +#define I2C_CMD_RSVD_2 (1 << 2) // reserved +#define I2C_CMD_RSVD_1 (1 << 1) // reserved +#define I2C_CMD_IACK (1 << 0) // set to clear pending interrupt + +#define I2C_ST_RXACK (1 << 7) // Received acknowledgement from slave (1 = NAK, 0 = ACK) +#define I2C_ST_BUSY (1 << 6) // 1 after START signal detected; 0 after STOP signal detected +#define I2C_ST_AL (1 << 5) // Arbitration lost. 1 when core lost arbitration +#define I2C_ST_RSVD_4 (1 << 4) // reserved +#define I2C_ST_RSVD_3 (1 << 3) // reserved +#define I2C_ST_RSVD_2 (1 << 2) // reserved +#define I2C_ST_TIP (1 << 1) // Transfer-in-progress +#define I2C_ST_IP (1 << 0) // Interrupt pending + + +//////////////////////////////////////////////// +// GPIO, Slave 4 +// +// These go to the daughterboard i/o pins + +#define GPIO_BASE 0xC800 + +typedef struct { + volatile uint32_t io; // tx data in high 16, rx in low 16 + volatile uint32_t ddr; // 32 bits, 1 means output. tx in high 16, rx in low 16 + volatile uint32_t tx_sel; // 16 2-bit fields select which source goes to TX DB + volatile uint32_t rx_sel; // 16 2-bit fields select which source goes to RX DB +} gpio_regs_t; + +// each 2-bit sel field is layed out this way +#define GPIO_SEL_SW 0 // if pin is an output, set by software in the io reg +#define GPIO_SEL_ATR 1 // if pin is an output, set by ATR logic +#define GPIO_SEL_DEBUG_0 2 // if pin is an output, debug lines from FPGA fabric +#define GPIO_SEL_DEBUG_1 3 // if pin is an output, debug lines from FPGA fabric + +#define gpio_base ((gpio_regs_t *) GPIO_BASE) + +/////////////////////////////////////////////////// +// Buffer Pool Status, Slave 5 +// +// The buffers themselves are located in Slave 1, Buffer Pool RAM. +// The status registers are in Slave 5, Buffer Pool Status. +// The control register is in Slave 7, Settings Bus. + +#define BUFFER_POOL_STATUS_BASE 0xCC00 + +typedef struct { + volatile uint32_t last_line[NBUFFERS]; // last line xfer'd in buffer + volatile uint32_t status; // error and done flags + volatile uint32_t hw_config; // see below +} buffer_pool_status_t; + +#define buffer_pool_status ((buffer_pool_status_t *) BUFFER_POOL_STATUS_BASE) + +/* + * Buffer n's xfer is done. + * Clear this bit by issuing bp_clear_buf(n) + */ +#define BPS_DONE(n) (0x00000001 << (n)) +#define BPS_DONE_0 BPS_DONE(0) +#define BPS_DONE_1 BPS_DONE(1) +#define BPS_DONE_2 BPS_DONE(2) +#define BPS_DONE_3 BPS_DONE(3) +#define BPS_DONE_4 BPS_DONE(4) +#define BPS_DONE_5 BPS_DONE(5) +#define BPS_DONE_6 BPS_DONE(6) +#define BPS_DONE_7 BPS_DONE(7) + +/* + * Buffer n's xfer had an error. + * Clear this bit by issuing bp_clear_buf(n) + */ +#define BPS_ERROR(n) (0x00000100 << (n)) +#define BPS_ERROR_0 BPS_ERROR(0) +#define BPS_ERROR_1 BPS_ERROR(1) +#define BPS_ERROR_2 BPS_ERROR(2) +#define BPS_ERROR_3 BPS_ERROR(3) +#define BPS_ERROR_4 BPS_ERROR(4) +#define BPS_ERROR_5 BPS_ERROR(5) +#define BPS_ERROR_6 BPS_ERROR(6) +#define BPS_ERROR_7 BPS_ERROR(7) + +/* + * Buffer n is idle. A buffer is idle if it's not + * DONE, ERROR, or processing a transaction. If it's + * IDLE, it's safe to start a new transaction. + * + * Clear this bit by starting a xfer with + * bp_send_from_buf or bp_receive_to_buf. + */ +#define BPS_IDLE(n) (0x00010000 << (n)) +#define BPS_IDLE_0 BPS_IDLE(0) +#define BPS_IDLE_1 BPS_IDLE(1) +#define BPS_IDLE_2 BPS_IDLE(2) +#define BPS_IDLE_3 BPS_IDLE(3) +#define BPS_IDLE_4 BPS_IDLE(4) +#define BPS_IDLE_5 BPS_IDLE(5) +#define BPS_IDLE_6 BPS_IDLE(6) +#define BPS_IDLE_7 BPS_IDLE(7) + +/* + * Buffer n has a "slow path" packet in it. + * This bit is orthogonal to the bits above and indicates that + * the FPGA ethernet rx protocol engine has identified this packet + * as one requiring firmware intervention. + */ +#define BPS_SLOWPATH(n) (0x01000000 << (n)) +#define BPS_SLOWPATH_0 BPS_SLOWPATH(0) +#define BPS_SLOWPATH_1 BPS_SLOWPATH(1) +#define BPS_SLOWPATH_2 BPS_SLOWPATH(2) +#define BPS_SLOWPATH_3 BPS_SLOWPATH(3) +#define BPS_SLOWPATH_4 BPS_SLOWPATH(4) +#define BPS_SLOWPATH_5 BPS_SLOWPATH(5) +#define BPS_SLOWPATH_6 BPS_SLOWPATH(6) +#define BPS_SLOWPATH_7 BPS_SLOWPATH(7) + + +#define BPS_DONE_ALL 0x000000ff // mask of all dones +#define BPS_ERROR_ALL 0x0000ff00 // mask of all errors +#define BPS_IDLE_ALL 0x00ff0000 // mask of all idles +#define BPS_SLOWPATH_ALL 0xff000000 // mask of all slowpaths + +// The hw_config register + +#define HWC_SIMULATION 0x80000000 +#define HWC_WB_CLK_DIV_MASK 0x0000000f + +/*! + * \brief return non-zero if we're running under the simulator + */ +inline static int +hwconfig_simulation_p(void) +{ + return buffer_pool_status->hw_config & HWC_SIMULATION; +} + +/*! + * \brief Return Wishbone Clock divisor. + * The processor runs at the Wishbone Clock rate which is MASTER_CLK_RATE / divisor. + */ +inline static int +hwconfig_wishbone_divisor(void) +{ + return buffer_pool_status->hw_config & HWC_WB_CLK_DIV_MASK; +} + +/////////////////////////////////////////////////// +// Ethernet Core, Slave 6 + +#define ETH_BASE 0xD000 + +#include "eth_mac_regs.h" + +#define eth_mac ((eth_mac_regs_t *) ETH_BASE) + +//////////////////////////////////////////////////// +// Settings Bus, Slave #7, Not Byte Addressable! +// +// Output-only from processor point-of-view. +// 1KB of address space (== 256 32-bit write-only regs) + + +#define MISC_OUTPUT_BASE 0xD400 +#define TX_PROTOCOL_ENGINE_BASE 0xD480 +#define RX_PROTOCOL_ENGINE_BASE 0xD4C0 +#define BUFFER_POOL_CTRL_BASE 0xD500 +#define DSP_TX_BASE 0xD600 +#define DSP_RX_BASE 0xD680 + +#define LAST_SETTING_REG 0xD7FC // last valid setting register + +// --- buffer pool control regs --- + +typedef struct { + volatile uint32_t ctrl; +} buffer_pool_ctrl_t; + +// buffer pool ports + +#define PORT_SERDES 0 // serial/deserializer +#define PORT_DSP 1 // DSP tx or rx pipeline +#define PORT_ETH 2 // ethernet tx or rx +#define PORT_RAM 3 // RAM tx or rx + +// the buffer pool ctrl register fields + +#define BPC_BUFFER(n) (((n) & 0xf) << 28) +#define BPC_BUFFER_MASK BPC_BUFFER(~0) +#define BPC_BUFFER_0 BPC_BUFFER(0) +#define BPC_BUFFER_1 BPC_BUFFER(1) +#define BPC_BUFFER_2 BPC_BUFFER(2) +#define BPC_BUFFER_3 BPC_BUFFER(3) +#define BPC_BUFFER_4 BPC_BUFFER(4) +#define BPC_BUFFER_5 BPC_BUFFER(5) +#define BPC_BUFFER_6 BPC_BUFFER(6) +#define BPC_BUFFER_7 BPC_BUFFER(7) +#define BPC_BUFFER_NIL BPC_BUFFER(0x8) // disable + +#define BPC_PORT(n) (((n) & 0x7) << 25) +#define BPC_PORT_MASK BPC_PORT(~0) +#define BPC_PORT_SERDES BPC_PORT(PORT_SERDES) +#define BPC_PORT_DSP BPC_PORT(PORT_DSP) +#define BPC_PORT_ETH BPC_PORT(PORT_ETH) +#define BPC_PORT_RAM BPC_PORT(PORT_RAM) +#define BPC_PORT_NIL BPC_PORT(0x4) // disable + +#define BPC_CLR (1 << 24) // mutually excl commands +#define BPC_READ (1 << 23) +#define BPC_WRITE (1 << 22) + +#define BPC_STEP(step) (((step) & 0xf) << 18) +#define BPC_STEP_MASK BPC_STEP(~0) +#define BPC_LAST_LINE(line) (((line) & 0x1ff) << 9) +#define BPC_LAST_LINE_MASK BPC_LAST_LINE(~0) +#define BPC_FIRST_LINE(line) (((line) & 0x1ff) << 0) +#define BPC_FIRST_LINE_MASK BPC_FIRST_LINE(~0) + +#define buffer_pool_ctrl ((buffer_pool_ctrl_t *) BUFFER_POOL_CTRL_BASE) + +// --- misc outputs --- + +typedef struct { + volatile uint32_t clk_ctrl; + volatile uint32_t serdes_ctrl; + volatile uint32_t adc_ctrl; + volatile uint32_t leds; + volatile uint32_t phy_ctrl; // LSB is reset line to eth phy + volatile uint32_t debug_mux_ctrl; + volatile uint32_t ram_page; // FIXME should go somewhere else... + volatile uint32_t flush_icache; // Flush the icache + volatile uint32_t led_src; // HW or SW control for LEDs +} output_regs_t; + +#define SERDES_ENABLE 8 +#define SERDES_PRBSEN 4 +#define SERDES_LOOPEN 2 +#define SERDES_RXEN 1 + +#define ADC_CTRL_ON 0x0F +#define ADC_CTRL_OFF 0x00 + +// crazy order that matches the labels on the case + +#define LED_A (1 << 4) +#define LED_B (1 << 1) +#define LED_C (1 << 3) +#define LED_D (1 << 0) +#define LED_E (1 << 2) +// LED_F // controlled by CPLD +#define LED_RJ45 (1 << 5) + +#define output_regs ((output_regs_t *) MISC_OUTPUT_BASE) + +// --- dsp tx regs --- + +#define MIN_CIC_INTERP 1 +#define MAX_CIC_INTERP 128 + +typedef struct { + volatile int32_t freq; + volatile uint32_t scale_iq; // {scale_i,scale_q} + volatile uint32_t interp_rate; + volatile uint32_t clear_state; // clears out state machine, fifos, + // NOT freq, scale, interp + /*! + * \brief output mux configuration. + * + *
+   *     3                   2                   1                       
+   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   *  +-------------------------------+-------+-------+-------+-------+
+   *  |                                               | DAC1  |  DAC0 |
+   *  +-------------------------------+-------+-------+-------+-------+
+   * 
+   *  There are N DUCs (1 now) with complex inputs and outputs.
+   *  There are two DACs.
+   * 
+   *  Each 4-bit DACx field specifies the source for the DAC
+   *  Each subfield is coded like this: 
+   * 
+   *     3 2 1 0
+   *    +-------+
+   *    |   N   |
+   *    +-------+
+   * 
+   *  N specifies which DUC output is connected to this DAC.
+   * 
+   *   N   which interp output
+   *  ---  -------------------
+   *   0   DUC 0 I
+   *   1   DUC 0 Q
+   *   2   DUC 1 I
+   *   3   DUC 1 Q
+   *   F   All Zeros
+   *   
+   * The default value is 0x10
+   * 
+ */ + volatile uint32_t tx_mux; + +} dsp_tx_regs_t; + +#define dsp_tx_regs ((dsp_tx_regs_t *) DSP_TX_BASE) + +// --- dsp rx regs --- + +#define T_NOW (-1) + +#define MIN_CIC_DECIM 1 +#define MAX_CIC_DECIM 128 + +typedef struct { + volatile int32_t freq; + volatile uint32_t scale_iq; // {scale_i,scale_q} + volatile uint32_t decim_rate; + volatile uint32_t rx_time; // when to begin reception + volatile uint32_t rx_command; // {now, chain, num_lines(21), lines_per_frame(9) + volatile uint32_t clear_state; // clears out state machine, fifos, + // cmd queue, NOT freq, scale, decim + volatile uint32_t dcoffset_i; // Bit 31 high sets fixed offset mode, using lower 14 bits, + // otherwise it is automatic + volatile uint32_t dcoffset_q; // Bit 31 high sets fixed offset mode, using lower 14 bits + + /*! + * \brief input mux configuration. + * + * This determines which ADC (or constant zero) is connected to + * each DDC input. There are N DDCs (1 now). Each has two inputs. + * + *
+   * Mux value:
+   *
+   *    3                   2                   1                       
+   *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   * +-------+-------+-------+-------+-------+-------+-------+-------+
+   * |                                                       |Q0 |I0 |
+   * +-------+-------+-------+-------+-------+-------+-------+-------+
+   *
+   * Each 2-bit I field is either 00 (A/D A), 01 (A/D B) or 1X (const zero)
+   * Each 2-bit Q field is either 00 (A/D A), 01 (A/D B) or 1X (const zero)
+   *
+   * The default value is 0x4
+   * 
+ */ + volatile uint32_t rx_mux; // called adc_mux in dsp_core_rx.v + + /*! + * \brief Streaming GPIO configuration + * + * This determines whether the LSBs of I and Q samples come from the DSP + * pipeline or from the io_rx GPIO pins. To stream GPIO, one must first + * set the GPIO data direction register to have io_rx[15] and/or io_rx[14] + * configured as inputs. The GPIO pins will be sampled at the time the + * remainder of the DSP sample is strobed into the RX sample FIFO. There + * will be a decimation-dependent fixed time offset between the GPIO + * sample stream and the associated RF samples. + * + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * | MBZ |Q|I| + * +-------+-------+-------+-------+-------+-------+-------+-------+ + * + * I 0=LSB comes from DSP pipeline (default) + * 1=LSB comes from io_rx[15] + * + * Q 0=LSB comes from DSP pipeline (default) + * 1=LSB comes from io_rx[14] + */ + volatile uint32_t gpio_stream_enable; + +} dsp_rx_regs_t; + +#define dsp_rx_regs ((dsp_rx_regs_t *) DSP_RX_BASE) + +#define MK_RX_CMD(num_lines, lines_per_frame, now, chain) \ + (((num_lines) << 9) | ((lines_per_frame) & 0x1ff) \ + | (((now) & 0x1) << 31) | (((chain) & 0x1) << 30)) + +/* + * --- ethernet tx protocol engine regs (write only) --- + * + * These registers control the transmit portion of the ethernet + * protocol engine (out of USRP2). The protocol engine handles fifo + * status and sequence number insertion in outgoing packets, and + * automagically generates status packets when required to inform the + * host of changes in fifo availability. + * + * All outgoing packets have their fifo_status field set to the number + * of 32-bit lines of fifo available in the ethernet Rx fifo (see + * usrp2_eth_packet.h). Seqno's are set if FIXME, else 0. + * + * FIXME clean this up once we know how it's supposed to behave. + */ + +typedef struct { + volatile uint32_t flags; // not yet fully defined (channel?) + volatile uint32_t mac_dst0123; // 4 bytes of destination mac addr + volatile uint32_t mac_dst45src01; // 2 bytes of dest mac addr; 2 bytes of src mac addr + volatile uint32_t mac_src2345; // 4 bytes of destination mac addr + volatile uint32_t seqno; // Write to init seqno. It autoincs on match +} tx_proto_engine_regs_t; + +#define tx_proto_engine ((tx_proto_engine_regs_t *) TX_PROTOCOL_ENGINE_BASE) + +/* + * --- ethernet rx protocol engine regs (write only) --- + * + * These registers control the receive portion of the ethernet + * protocol engine (into USRP2). The protocol engine offloads common + * packet inspection operations so that firmware has less to do on + * "fast path" packets. + * + * The registers define conditions which must be matched for a packet + * to be considered a "fast path" packet. If a received packet + * matches the src and dst mac address, ethertype, flags field, and + * expected seqno number it is considered a "fast path" packet, and + * the expected seqno is updated. If the packet fails to satisfy any + * of the above conditions it's a "slow path" packet, and the + * corresponding SLOWPATH flag will be set buffer_status register. + */ + +typedef struct { + volatile uint32_t flags; // not yet fully defined (channel?) + volatile uint32_t mac_dst0123; // 4 bytes of destination mac addr + volatile uint32_t mac_dst45src01; // 2 bytes of dest mac addr; 2 bytes of src mac addr + volatile uint32_t mac_src2345; // 4 bytes of destination mac addr + volatile uint32_t ethertype_pad; // ethertype in high 16-bits +} rx_proto_engine_regs_t; + +#define rx_proto_engine ((rx_proto_engine_regs_t *) RX_PROTOCOL_ENGINE_BASE) + + + +/////////////////////////////////////////////////// +// Simple Programmable Interrupt Controller, Slave 8 + +#define PIC_BASE 0xD800 + +// Interrupt request lines +// Bit numbers (LSB == 0) that correpond to interrupts into PIC + +#define IRQ_BUFFER 0 // buffer manager +#define IRQ_TIMER 1 +#define IRQ_SPI 2 +#define IRQ_I2C 3 +#define IRQ_PHY 4 // ethernet PHY +#define IRQ_UNDERRUN 5 +#define IRQ_OVERRUN 6 +#define IRQ_PPS 7 // pulse per second +#define IRQ_UART_RX 8 +#define IRQ_UART_TX 9 +#define IRQ_SERDES 10 +#define IRQ_CLKSTATUS 11 + +#define IRQ_TO_MASK(x) (1 << (x)) + +#define PIC_BUFFER_INT IRQ_TO_MASK(IRQ_BUFFER) +#define PIC_TIMER_INT IRQ_TO_MASK(IRQ_TIMER) +#define PIC_SPI_INT IRQ_TO_MASK(IRQ_SPI) +#define PIC_I2C_INT IRQ_TO_MASK(IRQ_I2C) +#define PIC_PHY_INT IRQ_TO_MASK(IRQ_PHY) +#define PIC_UNDERRUN_INT IRQ_TO_MASK(IRQ_UNDERRUN) +#define PIC_OVERRUN_INT IRQ_TO_MASK(IRQ_OVERRUN) +#define PIC_PPS_INT IRQ_TO_MASK(IRQ_PPS) +#define PIC_UART_RX_INT IRQ_TO_MASK(IRQ_UART_RX) +#define PIC_UART_TX_INT IRQ_TO_MASK(IRQ_UART_TX) +#define PIC_SERDES IRQ_TO_MASK(IRQ_SERDES) +#define PIC_CLKSTATUS IRQ_TO_MASK(IRQ_CLKSTATUS) + +typedef struct { + volatile uint32_t edge_enable; // mask: 1 -> edge triggered, 0 -> level + volatile uint32_t polarity; // mask: 1 -> rising edge + volatile uint32_t mask; // mask: 1 -> disabled + volatile uint32_t pending; // mask: 1 -> pending; write 1's to clear pending ints +} pic_regs_t; + +#define pic_regs ((pic_regs_t *) PIC_BASE) + +/////////////////////////////////////////////////// +// Timer, Slave 9 + +#define TIMER_BASE 0xDC00 + +typedef struct { + volatile uint32_t time; // R: current, W: set time to interrupt +} timer_regs_t; + +#define timer_regs ((timer_regs_t *) TIMER_BASE) + +/////////////////////////////////////////////////// +// UART, Slave 10 + +#define UART_BASE 0xE000 + +typedef struct { + // All elements are 8 bits except for clkdiv (16), but we use uint32 to make + // the hardware for decoding easier + volatile uint32_t clkdiv; // Set to 50e6 divided by baud rate (no x16 factor) + volatile uint32_t txlevel; // Number of spaces in the FIFO for writes + volatile uint32_t rxlevel; // Number of available elements in the FIFO for reads + volatile uint32_t txchar; // Write characters to be sent here + volatile uint32_t rxchar; // Read received characters here +} uart_regs_t; + +#define uart_regs ((uart_regs_t *) UART_BASE) + +/////////////////////////////////////////////////// +// ATR Controller, Slave 11 + +#define ATR_BASE 0xE400 + +typedef struct { + volatile uint32_t v[16]; +} atr_regs_t; + +#define ATR_IDLE 0x0 // indicies into v +#define ATR_TX 0x1 +#define ATR_RX 0x2 +#define ATR_FULL 0x3 + +#define atr_regs ((atr_regs_t *) ATR_BASE) + +/////////////////////////////////////////////////// +// Time Sync Controller, Slave 12 +#define TIMESYNC_BASE 0xE800 + +typedef struct { + /*! + * \brief Time sync configuration. + * + *
+   *
+   *    3                   2                   1                       
+   *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   * +-----------------------------------------------------+-+-+-+-+-+
+   * |                                                     |T|G|X|I|S|
+   * +-----------------------------------------------------+-+-+-+-+-+
+   *
+   * S - Tick source (0 = free run, 1 = pps, default=0)
+   * I - Tick interrupt enable (not implemented)
+   * X - Use external sync source (default=1)
+   * G - PPS edge selection (0=negedge, 1=posedge, default=0)
+   * T - Trigger sync every pps edge (default=0)
+   *
+   * 
+ */ + volatile uint32_t tick_control; + volatile uint32_t tick_interval; + volatile uint32_t delta_time; + volatile uint32_t sync_on_next_pps; +} timesync_regs_t; + +#define timesync_regs ((timesync_regs_t *) TIMESYNC_BASE) + +#define TSC_SOURCE_PPS (1 << 0) +//#define TSC_SOURCE_FREE_RUN (0 << 0) +#define TSC_IENABLE (1 << 1) +#define TSC_EXTSYNC (1 << 2) +#define TSC_PPSEDGE_POS (1 << 3) +//#define TSC_PPSEDGE_NEG (0 << 3) +#define TSC_TRIGGER_EVERYPPS (1 << 4) +//#define TSC_TRIGGER_ONCE (0 << 4) + +/////////////////////////////////////////////////// +// SD Card SPI interface, Slave 13 +// All regs are 8 bits wide, but are accessed as if they are 32 bits + +#define SDSPI_BASE 0xEC00 + +typedef struct { + volatile uint32_t status; // Write a 1 or 0 for controlling CS + volatile uint32_t clkdiv; + volatile uint32_t send_dat; + volatile uint32_t receive_dat; +} sdspi_regs_t; + +#define sdspi_regs ((sdspi_regs_t *) SDSPI_BASE) + +/////////////////////////////////////////////////// +// External RAM interface, Slave 14 +// Pages are 1K. Page is 10 bits, set by a control register +// output_regs->ram_page + +#define EXTRAM_BASE 0xF000 +#define extram ((volatile uint32_t *) EXTRAM_BASE) + + +/////////////////////////////////////////////////// + +#endif + diff --git a/usrp2/firmware/lib/memset_wa.c b/usrp2/firmware/lib/memset_wa.c new file mode 100644 index 00000000..da5da21a --- /dev/null +++ b/usrp2/firmware/lib/memset_wa.c @@ -0,0 +1,45 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#include "memset_wa.h" +#include +#include + +/* + * For setting non-byte-adressable memory, such as + * the buffers. dst and nbytes must all satisfy (x % 4 == 0) + */ +void * +memset_wa(void *dst, int c, size_t nbytes) +{ + if (((intptr_t) dst & 0x3) + || (nbytes & 0x3)) + exit(1); /* die! */ + + int *dp = (int *) dst; + + c &= 0xff; + int v = (c << 24) | (c << 16) | (c << 8) | c; + unsigned nw = nbytes/4; + + unsigned i; + for (i = 0; i < nw; i++) + dp[i] = v; + + return dst; +} diff --git a/usrp2/firmware/lib/memset_wa.h b/usrp2/firmware/lib/memset_wa.h new file mode 100644 index 00000000..46d903d5 --- /dev/null +++ b/usrp2/firmware/lib/memset_wa.h @@ -0,0 +1,27 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_MEMSET_WA_H +#define INCLUDED_MEMSET_WA_H + +#include + +void *memset_wa(void *s, int c, size_t n); + + +#endif /* INCLUDED_MEMSET_WA_H */ diff --git a/usrp2/firmware/lib/microblaze.ld b/usrp2/firmware/lib/microblaze.ld new file mode 100644 index 00000000..ef816cf2 --- /dev/null +++ b/usrp2/firmware/lib/microblaze.ld @@ -0,0 +1,163 @@ +OUTPUT_FORMAT("elf32-microblaze", "", "") +/* SEARCH_DIR(/home/jwilliams/tmp/microblaze-toolchain-sources/release/lin/microblaze//lib);*/ + +ENTRY(_start) + +MEMORY { + flatmem : ORIGIN = 0x0, LENGTH = 0x00008000 /* 32KB */ +} + +SECTIONS +{ + _TEXT_START_ADDR = DEFINED(_TEXT_START_ADDR) ? _TEXT_START_ADDR : 0x50; + .vectors.reset 0x0 : { *(.vectors.reset) } > flatmem + .vectors.sw_exception 0x8 : { *(.vectors.sw_exception) } > flatmem + .vectors.interrupt 0x10 : { *(.vectors.interrupt) } > flatmem + .vectors.hw_exception 0x20 : { *(.vectors.hw_exception) } >flatmem + . = _TEXT_START_ADDR; + _ftext = .; + .text : { + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) + } > flatmem + _etext = .; + .init : { KEEP (*(.init)) } > flatmem =0 + .fini : { KEEP (*(.fini)) } > flatmem =0 + PROVIDE (__CTOR_LIST__ = .); + PROVIDE (___CTOR_LIST__ = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } > flatmem + PROVIDE (__CTOR_END__ = .); + PROVIDE (___CTOR_END__ = .); + PROVIDE (__DTOR_LIST__ = .); + PROVIDE (___DTOR_LIST__ = .); + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } > flatmem + PROVIDE (__DTOR_END__ = .); + PROVIDE (___DTOR_END__ = .); + . = ALIGN(4); + _frodata = . ; + .rodata : { + *(.rodata) + *(.gnu.linkonce.r.*) + CONSTRUCTORS; /* Is this needed? */ + } > flatmem + _erodata = .; + /* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */ + /* Note that .sdata2 and .sbss2 must be contiguous */ + . = ALIGN(8); + _ssrw = .; + .sdata2 : { + *(.sdata2) + *(.gnu.linkonce.s2.*) + } > flatmem + . = ALIGN(4); + .sbss2 : { + PROVIDE (__sbss2_start = .); + *(.sbss2) + *(.gnu.linkonce.sb2.*) + PROVIDE (__sbss2_end = .); + } > flatmem + . = ALIGN(8); + _essrw = .; + _ssrw_size = _essrw - _ssrw; + PROVIDE (_SDA2_BASE_ = _ssrw + (_ssrw_size / 2 )); + . = ALIGN(4); + _fdata = .; + .data : { + *(.data) + *(.gnu.linkonce.d.*) + CONSTRUCTORS; /* Is this needed? */ + } > flatmem + _edata = . ; + /* Added to handle pic code */ + .got : { + *(.got) + } > flatmem + .got1 : { + *(.got1) + } > flatmem + .got2 : { + *(.got2) + } > flatmem + /* Added by Sathya to handle C++ exceptions */ + .eh_frame : { + *(.eh_frame) + } > flatmem + .jcr : { + *(.jcr) + } > flatmem + .gcc_except_table : { + *(.gcc_except_table) + } > flatmem + /* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */ + /* Note that .sdata and .sbss must be contiguous */ + . = ALIGN(8); + _ssro = .; + .sdata : { + *(.sdata) + *(.gnu.linkonce.s.*) + } > flatmem + . = ALIGN(4); + .sbss : { + PROVIDE (__sbss_start = .); + *(.sbss) + *(.gnu.linkonce.sb.*) + PROVIDE (__sbss_end = .); + } > flatmem + . = ALIGN(8); + _essro = .; + _ssro_size = _essro - _ssro; + PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 )); + . = ALIGN(4); + _fbss = .; + .bss : { + PROVIDE (__bss_start = .); + *(.bss) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(4); + PROVIDE (__bss_end = .); + _heap = .; + _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x0; + _STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x800; + . += _HEAP_SIZE; + _heap_end = .; + . += _STACK_SIZE; + . = ALIGN(8); + _stack = .; + _end = .; + } > flatmem + .tdata : { + *(.tdata) + *(.gnu.linkonce.td.*) + } > flatmem + .tbss : { + *(.tbss) + *(.gnu.linkonce.tb.*) + } > flatmem +} diff --git a/usrp2/firmware/lib/nonstdio.c b/usrp2/firmware/lib/nonstdio.c new file mode 100644 index 00000000..1c991afe --- /dev/null +++ b/usrp2/firmware/lib/nonstdio.c @@ -0,0 +1,80 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include + +static const char hex[16] = "0123456789ABCDEF"; + +// %x +void +puthex4(unsigned long x) +{ + putchar(hex[x & 0xf]); +} + +// %02x +void +puthex8(unsigned long x) +{ + putchar(hex[(x >> 4) & 0xf]); + putchar(hex[x & 0xf]); +} + +// %04x +void +puthex16(unsigned long x) +{ + puthex8(x >> 8); + puthex8(x); +} + +// %08x +void +puthex32(unsigned long x) +{ + puthex16(x >> 16); + puthex16(x); +} + +void +puthex4_nl(unsigned long x) +{ + puthex4(x); + newline(); +} + +void +puthex8_nl(unsigned long x) +{ + puthex8(x); + newline(); +} + +void +puthex16_nl(unsigned long x) +{ + puthex16(x); + newline(); +} + +void +puthex32_nl(unsigned long x) +{ + puthex32(x); + newline(); +} diff --git a/usrp2/firmware/lib/nonstdio.h b/usrp2/firmware/lib/nonstdio.h new file mode 100644 index 00000000..3fd9e39b --- /dev/null +++ b/usrp2/firmware/lib/nonstdio.h @@ -0,0 +1,46 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_NONSTDIO_H +#define INCLUDED_NONSTDIO_H + +#include +#include +#include + +void putstr(const char *s); // cf puts, no added newline +void puthex4(unsigned long x); // output 1 hex digit +void puthex8(unsigned long x); // output 2 hex digits +void puthex16(unsigned long x); // output 4 hex digits +void puthex32(unsigned long x); // output 8 hex digits +void puthex4_nl(unsigned long x); // ... followed by newline +void puthex8_nl(unsigned long x); +void puthex16_nl(unsigned long x); +void puthex32_nl(unsigned long x); +#define puthex puthex32 +#define puthex_nl puthex32_nl +void newline(); // putchar('\n') + +void print_mac_addr(const unsigned char addr[6]); +void print_fxpt_freq(u2_fxpt_freq_t v); +void print_fxpt_gain(u2_fxpt_gain_t v); +void print_uint64(uint64_t v); + +void print_buffer(uint32_t *buf, size_t n); + +#endif /* INCLUDED_NONSTDIO_H */ diff --git a/usrp2/firmware/lib/pic.c b/usrp2/firmware/lib/pic.c new file mode 100644 index 00000000..592a07ae --- /dev/null +++ b/usrp2/firmware/lib/pic.c @@ -0,0 +1,94 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "pic.h" +#include "hal_io.h" +#include "memory_map.h" + + +#define NVECTORS 8 + +/* + * Our secondary interrupt vector. + */ +irq_handler_t pic_vector[NVECTORS] = { + nop_handler, + nop_handler, + nop_handler, + nop_handler, + nop_handler, + nop_handler, + nop_handler, + nop_handler +}; + + +void +pic_init(void) +{ + // uP is level triggered + + pic_regs->mask = ~0; // mask all interrupts + pic_regs->edge_enable = PIC_TIMER_INT | PIC_PHY_INT; + pic_regs->polarity = ~0 & ~PIC_PHY_INT; // rising edge + pic_regs->pending = ~0; // clear all pending ints +} + +/* + * This magic gets pic_interrupt_handler wired into the + * system interrupt handler with the appropriate prologue and + * epilogue. + */ +void pic_interrupt_handler() __attribute__ ((interrupt_handler)); + +void pic_interrupt_handler() +{ + // pending and not masked interrupts + int live = pic_regs->pending & ~pic_regs->mask; + + // FIXME loop while there are interrupts to service. + // That will reduce our overhead. + + // handle the first one set + int i; + int mask; + for (i=0, mask=1; i < NVECTORS; i++, mask <<= 1){ + if (mask & live){ // handle this one + // puthex_nl(i); + (*pic_vector[i])(i); + pic_regs->pending = mask; // clear pending interrupt + return; + } + } +} + +void +pic_register_handler(unsigned irq, irq_handler_t handler) +{ + if (irq >= NVECTORS) + return; + pic_vector[irq] = handler; + + pic_regs->mask &= ~IRQ_TO_MASK(irq); +} + +void +nop_handler(unsigned irq) +{ + // nop +} diff --git a/usrp2/firmware/lib/pic.h b/usrp2/firmware/lib/pic.h new file mode 100644 index 00000000..68918f9a --- /dev/null +++ b/usrp2/firmware/lib/pic.h @@ -0,0 +1,35 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_PIC_H +#define INCLUDED_PIC_H + +typedef void (*irq_handler_t)(unsigned irq); + +void pic_init(void); +void pic_register_handler(unsigned irq, irq_handler_t handler); + +void nop_handler(unsigned irq); // default handler does nothing + +// FIXME inline assembler +int pic_disable_interrupts(); +int pic_enable_interrupts(); +void pic_restore_interrupts(int prev_status); + + +#endif /* INCLUDED_PIC_H */ diff --git a/usrp2/firmware/lib/print_buffer.c b/usrp2/firmware/lib/print_buffer.c new file mode 100644 index 00000000..9f9104bb --- /dev/null +++ b/usrp2/firmware/lib/print_buffer.c @@ -0,0 +1,36 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#include + +void +print_buffer(uint32_t *buf, size_t n) +{ + size_t i; + for (i = 0; i < n; i++){ + if (i % 4 == 0) + puthex16(i * 4); + + putchar(' '); + puthex32(buf[i]); + if (i % 4 == 3) + newline(); + } + + newline(); +} + diff --git a/usrp2/firmware/lib/print_fxpt.c b/usrp2/firmware/lib/print_fxpt.c new file mode 100644 index 00000000..185bbc51 --- /dev/null +++ b/usrp2/firmware/lib/print_fxpt.c @@ -0,0 +1,83 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#include + +/* + * print uint64_t + */ +void +print_uint64(uint64_t u) +{ + const char *_hex = "0123456789ABCDEF"; + if (u >= 10) + print_uint64(u/10); + putchar(_hex[u%10]); +} + +static void +print_thousandths(int thousandths) +{ + putchar('.'); + if (thousandths < 100) + putchar('0'); + if (thousandths < 10) + putchar('0'); + printf("%d", thousandths); +} + + +void +print_fxpt_freq(u2_fxpt_freq_t v) +{ + if (v < 0){ + v = -v; + putchar('-'); + } + + int64_t int_part = v >> 20; + int32_t frac_part = v & ((1 << 20) - 1); + +#if 0 + // would work, if we had it + printf("%lld.%03d", int_part, (frac_part * 1000) >> 20); +#else + print_uint64(int_part); + print_thousandths((frac_part * 1000) >> 20); +#endif +} + +void +print_fxpt_gain(u2_fxpt_gain_t v) +{ + if (v < 0){ + v = -v; + putchar('-'); + } + + int32_t int_part = v >> 7; + int32_t frac_part = v & ((1 << 7) - 1); + +#if 0 + // would work, if we had it + printf("%d.%03d", int_part, (frac_part * 1000) >> 7); +#else + printf("%d", int_part); + print_thousandths((frac_part * 1000) >> 7); +#endif +} + diff --git a/usrp2/firmware/lib/print_mac_addr.c b/usrp2/firmware/lib/print_mac_addr.c new file mode 100644 index 00000000..838fd614 --- /dev/null +++ b/usrp2/firmware/lib/print_mac_addr.c @@ -0,0 +1,30 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ +#include "nonstdio.h" + +void +print_mac_addr(const unsigned char addr[6]) +{ + puthex8(addr[0]); putchar(':'); + puthex8(addr[1]); putchar(':'); + puthex8(addr[2]); putchar(':'); + puthex8(addr[3]); putchar(':'); + puthex8(addr[4]); putchar(':'); + puthex8(addr[5]); +} + diff --git a/usrp2/firmware/lib/print_rmon_regs.c b/usrp2/firmware/lib/print_rmon_regs.c new file mode 100644 index 00000000..6d998690 --- /dev/null +++ b/usrp2/firmware/lib/print_rmon_regs.c @@ -0,0 +1,44 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "print_rmon_regs.h" +#include "eth_mac.h" +#include "nonstdio.h" + +void +print_rmon_regs(void) +{ + int i; + for (i=0; i <= 0x10; i++){ + putstr("RMON[0x"); + puthex8(i); + putstr("] = "); + printf("%d\n", eth_mac_read_rmon(i)); + } + + for (i=0x20; i <= 0x30; i++){ + putstr("RMON[0x"); + puthex8(i); + putstr("] = "); + printf("%d\n", eth_mac_read_rmon(i)); + } +} diff --git a/usrp2/firmware/lib/print_rmon_regs.h b/usrp2/firmware/lib/print_rmon_regs.h new file mode 100644 index 00000000..44e52da8 --- /dev/null +++ b/usrp2/firmware/lib/print_rmon_regs.h @@ -0,0 +1,24 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_PRINT_RMON_REGS_H +#define INCLUDED_PRINT_RMON_REGS_H + +void print_rmon_regs(void); + +#endif /* INCLUDED_PRINT_RMON_REGS_H */ diff --git a/usrp2/firmware/lib/printf.c b/usrp2/firmware/lib/printf.c new file mode 100644 index 00000000..45bd57cb --- /dev/null +++ b/usrp2/firmware/lib/printf.c @@ -0,0 +1,134 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +/* + * Based on code from the SDCC z80 library ;) + */ + +#include +#include + +static void +_printn(unsigned u, unsigned base, char issigned, + void (*emitter)(char, void *), void *pData) +{ + const char *_hex = "0123456789ABCDEF"; + if (issigned && ((int)u < 0)) { + (*emitter)('-', pData); + u = (unsigned)-((int)u); + } + if (u >= base) + _printn(u/base, base, 0, emitter, pData); + (*emitter)(_hex[u%base], pData); +} + +static void +_printf(const char *format, void (*emitter)(char, void *), + void *pData, va_list va) +{ + while (*format) { + if (*format != '%') + (*emitter)(*format, pData); + else { + switch (*++format) { + case 0: /* hit end of format string */ + return; + case 'c': + { + char c = (char)va_arg(va, int); + (*emitter)(c, pData); + break; + } + case 'u': + { + unsigned u = va_arg(va, unsigned); + _printn(u, 10, 0, emitter, pData); + break; + } + case 'd': + { + unsigned u = va_arg(va, unsigned); + _printn(u, 10, 1, emitter, pData); + break; + } + case 'x': + case 'p': + { + unsigned u = va_arg(va, unsigned); + _printn(u, 16, 0, emitter, pData); + break; + } + case 's': + { + char *s = va_arg(va, char *); + while (*s) { + (*emitter)(*s, pData); + s++; + } + break; + } + } + } + format++; + } +} + +static void +_char_emitter(char c, void *pData __attribute__((unused))) +{ + putchar(c); +} + +int +printf(const char *format, ...) +{ + va_list va; + va_start(va, format); + + _printf(format, _char_emitter, NULL, va); + + va_end(va); + + // wrong return value... + return 0; +} + + +#if 0 + +// Totally dangerous. Don't use +static void +_buf_emitter(char c, void *pData) +{ + *((*((char **)pData)))++ = c; +} + +int sprintf(char *pInto, const char *format, ...) +{ + va_list va; + va_start(va, format); + + _printf(format, _buf_emitter, &pInto, va); + *pInto++ = '\0'; + + va_end(va); + + // FIXME wrong return value + return 0; +} +#endif diff --git a/usrp2/firmware/lib/sd.c b/usrp2/firmware/lib/sd.c new file mode 100644 index 00000000..d000b28a --- /dev/null +++ b/usrp2/firmware/lib/sd.c @@ -0,0 +1,197 @@ +/* -*- c -*- */ +/* + * Copyright 2008 Ettus Research LLC + * + * 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 3 of the License, 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 program. If not, see . + */ + +#include "sd.h" +#include "memory_map.h" +#include "stdint.h" +#include "stdio.h" + +static inline void +sd_packarg(unsigned char *argument,unsigned int value) +{ + argument[3] = (unsigned char)(value >> 24); + argument[2] = (unsigned char)(value >> 16); + argument[1] = (unsigned char)(value >> 8); + argument[0] = (unsigned char)(value); +} + +int +sd_init(void) +{ + unsigned char response[5]; + unsigned char argument[4]; + int i,j; + + for(i=0;i<4;i++) + argument[i] = 0; + + // Set clock to less than 400 kHz to start out + sdspi_regs->clkdiv = 128; + + // Delay at least 74 cycles + sd_assert_cs(); + for(i = 0; i < 100; i++) + sd_send_byte(SD_IDLE); + sd_deassert_cs(); + + // Initialization Sequence -- CMD0 CMD55 ACMD41 CMD58 + // Put card in idle state + if(sd_send_command(SD_CMD0,SD_CMD0_R,response,argument)==0) + return 0; // Something went wrong in command + + j = 0; + do { + j++; + if(sd_send_command(SD_CMD55,SD_CMD55_R,response,argument)==1) + sd_send_command(SD_ACMD41,SD_ACMD41_R,response,argument); + else + j = SD_IDLE_WAIT_MAX; + } + while(((response[0] & SD_MSK_IDLE) == SD_MSK_IDLE) && (j < SD_IDLE_WAIT_MAX)); + + if(j>= SD_IDLE_WAIT_MAX) // IDLE timeout exceeded, card asleep + return 0; + + // CMD58 reads the SD card capabilities + if(sd_send_command(SD_CMD58,SD_CMD58_R,response,argument)==0) + return 0; // CMD58 FAIL + + if((response[2] & SD_MSK_OCR_33) != SD_MSK_OCR_33) + return 0; // Card doesn't do 3.3V + + //printf("OCR = %x %x %x %x\n",response[0],response[1],response[2],response[3]); + + // Set blocklen here + sd_packarg(argument,SD_BLOCKLEN); + if(sd_send_command(SD_CMD16,SD_CMD16_R,response,argument)==0) + return 0; // Set Blocklen failed + + // Reset back to high speed + sdspi_regs->clkdiv = 4; + //puts("finished init\n"); + return 1; +} + +int sd_send_command(unsigned char cmd,unsigned char response_type, + unsigned char *response,unsigned char *argument) +{ + int i; + char response_length; + unsigned char tmp; + + sd_assert_cs(); + sd_send_byte((cmd & 0x3F) | 0x40); + for(i=3;i>=0;i--) + sd_send_byte(argument[i]); + sd_send_byte(SD_CRC); // Always the same + + response_length = 0; + switch(response_type) + { + case SD_R1: + case SD_R1B: + response_length = 1; + break; + case SD_R2: + response_length = 2; + break; + case SD_R3: + response_length = 5; + break; + default: + break; + } + + // Wait for a response, which will have a 0 start bit + i = 0; + do + { + tmp = sd_rcv_byte(); + i++; + } + while(((tmp & 0x80) != 0) && i < SD_CMD_TIMEOUT); + + if(i>= SD_CMD_TIMEOUT) + { + sd_deassert_cs(); + //puts("cmd send timeout\n"); + return 0; + } + + for(i=response_length-1; i>=0; i--) + { + response[i] = tmp; + tmp = sd_rcv_byte(); + } + i = 0; + if(response_type == SD_R1B) + { + do + { + i++; + tmp = sd_rcv_byte(); + } + while(tmp != SD_IDLE); + sd_send_byte(SD_IDLE); + } + + //puts("send cmd success\n"); + sd_deassert_cs(); + return 1; +} + +int +sd_read_block (unsigned int blockaddr, unsigned char *buf) +{ + unsigned char response[5]; + unsigned char argument[4]; + unsigned int i = 0; + unsigned char tmp; + + blockaddr <<= SD_BLOCKLEN_NBITS; + sd_packarg(argument,blockaddr); + if(sd_send_command(SD_CMD17,SD_CMD17_R,response,argument)==0) + return 0; //Failed READ; + if(response[0] != 0) + return 0; //Misaligned READ + + sd_assert_cs(); + i = 0; + do + { + tmp = sd_rcv_byte(); + i++; + } + while((tmp == 0xFF) && (i < SD_RD_TIMEOUT)); + if((i>= SD_RD_TIMEOUT) ||((tmp & SD_MSK_TOK_DATAERROR) == 0)) + { + sd_send_byte(SD_IDLE); // Send a dummy before quitting + return 0; // Data ERROR + } + for(i=0;i. + */ + +#ifndef INCLUDED_SD_H +#define INCLUDED_SD_H + +#include "memory_map.h" + +#define SD_READY 1 +#define SD_IDLE_WAIT_MAX 100 +#define SD_CMD_TIMEOUT 100 +#define SD_RD_TIMEOUT 1000 + +#define SD_CMD0 0 +#define SD_CMD1 1 +#define SD_CMD9 9 +#define SD_CMD10 10 +#define SD_CMD12 12 +#define SD_CMD13 13 +#define SD_CMD16 16 +#define SD_CMD17 17 +#define SD_CMD18 18 +#define SD_CMD24 24 +#define SD_CMD25 25 +#define SD_CMD27 27 +#define SD_CMD28 28 +#define SD_CMD29 29 +#define SD_CMD30 30 +#define SD_CMD32 32 +#define SD_CMD33 33 +#define SD_CMD38 38 +#define SD_CMD55 55 +#define SD_CMD58 58 +#define SD_CMD59 59 +#define SD_ACMD41 41 +#define SD_IDLE 0xFF +#define SD_CRC 0x95 + +#define SD_R1 1 +#define SD_R1B 2 +#define SD_R2 3 +#define SD_R3 4 + +#define SD_CMD0_R SD_R1 +#define SD_CMD16_R SD_R1 +#define SD_CMD17_R SD_R1 +#define SD_CMD55_R SD_R1 +#define SD_ACMD41_R SD_R1 +#define SD_CMD58_R SD_R3 + +#define SD_BLOCKLEN 512 +#define SD_BLOCKLEN_NBITS 9 + +#define SD_MSK_IDLE 0x01 +#define SD_MSK_OCR_33 0xC0 +#define SD_MSK_TOK_DATAERROR 0xE0 + + +int sd_init(void); + +static inline void +sd_assert_cs(void) +{ + // Wait for idle before doing anything + while(sdspi_regs->status != SD_READY) + ; + sdspi_regs->status = 1; +} + +static inline void +sd_deassert_cs(void) +{ + // Wait for idle before doing anything + while(sdspi_regs->status != SD_READY) + ; + sdspi_regs->status = 0; +} + +static inline char +sd_rcv_byte(void) +{ + // Wait for idle before doing anything + while(sdspi_regs->status != SD_READY) + ; + sdspi_regs->send_dat = SD_IDLE; + while(sdspi_regs->status != SD_READY) + ; + return sdspi_regs-> receive_dat; +} + +static inline void +sd_send_byte(char dat) +{ + // Wait for idle before doing anything + while(sdspi_regs->status != SD_READY) + ; // Wait for status = 1 (ready) + sdspi_regs->send_dat = dat; +} + + +int sd_send_command(unsigned char cmd,unsigned char response_type, + unsigned char *response,unsigned char *argument); + +int sd_read_block (unsigned int blockaddr, unsigned char *buf); +int sd_write_block(unsigned int blockaddr, const unsigned char *buf); + +#endif /* INCLUDED_SD_H */ diff --git a/usrp2/firmware/lib/spi.c b/usrp2/firmware/lib/spi.c new file mode 100644 index 00000000..937397df --- /dev/null +++ b/usrp2/firmware/lib/spi.c @@ -0,0 +1,61 @@ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#include "spi.h" +#include "memory_map.h" + +void +spi_init(void) +{ + /* + * f_sclk = f_wb / ((div + 1) * 2) + */ + spi_regs->div = 1; // 0 = Div by 2 (25 MHz); 1 = Div-by-4 (12.5 MHz) +} + +void +spi_wait(void) +{ + while (spi_regs->ctrl & SPI_CTRL_GO_BSY) + ; +} + +uint32_t +spi_transact(bool readback, int slave, uint32_t data, int length, uint32_t flags) +{ + flags &= (SPI_CTRL_TXNEG | SPI_CTRL_RXNEG); + int ctrl = SPI_CTRL_ASS | (SPI_CTRL_CHAR_LEN_MASK & length) | flags; + + spi_wait(); + + // Tell it which SPI slave device to access + spi_regs->ss = slave & 0xff; + + // Data we will send + spi_regs->txrx0 = data; + + // Run it -- write once and rewrite with GO set + spi_regs->ctrl = ctrl; + spi_regs->ctrl = ctrl | SPI_CTRL_GO_BSY; + + if(readback) { + spi_wait(); + return spi_regs->txrx0; + } + else + return 0; +} diff --git a/usrp2/firmware/lib/spi.h b/usrp2/firmware/lib/spi.h new file mode 100644 index 00000000..0914d6c3 --- /dev/null +++ b/usrp2/firmware/lib/spi.h @@ -0,0 +1,52 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_SPI_H +#define INCLUDED_SPI_H + +#include +#include + +/*! + * \brief One time call to initialize SPI + */ +void spi_init(void); + +/*! + * \brief Wait for last SPI transaction to complete. + * Unless you need to know it completed, it's not necessary to call this. + */ +void spi_wait(void); + +#define SPI_TXONLY false // readback: no +#define SPI_TXRX true // readback: yes + +/* + * Flags for spi_transact + */ +#define SPIF_PUSH_RISE 0 // push tx data on rising edge of SCLK +#define SPIF_PUSH_FALL SPI_CTRL_TXNEG // push tx data on falling edge of SCLK +#define SPIF_LATCH_RISE 0 // latch rx data on rising edge of SCLK +#define SPIF_LATCH_FALL SPI_CTRL_RXNEG // latch rx data on falling edge of SCLK + + +uint32_t +spi_transact(bool readback, int slave, uint32_t data, int length, uint32_t flags); + + +#endif /* INCLUDED_SPI_H */ diff --git a/usrp2/firmware/lib/stdint.h b/usrp2/firmware/lib/stdint.h new file mode 100644 index 00000000..b5a8611a --- /dev/null +++ b/usrp2/firmware/lib/stdint.h @@ -0,0 +1,34 @@ +/* -*- c -*- */ +/* + * Copyright 2007,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_STDINT_H +#define INCLUDED_STDINT_H + +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; + +typedef int intptr_t; +typedef unsigned int uintptr_t; + +#endif /* INCLUDED_STDINT_H */ diff --git a/usrp2/firmware/lib/stdio.h b/usrp2/firmware/lib/stdio.h new file mode 100644 index 00000000..12a7ed0b --- /dev/null +++ b/usrp2/firmware/lib/stdio.h @@ -0,0 +1,38 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_STDIO_H +#define INCLUDED_STDIO_H + +// very trimmed down stdio.h See also nonstdio.h + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef EOF +#define EOF (-1) +#endif + +int putchar(int c); +int puts(const char *s); +int printf(const char *format, ...); + +int getchar(void); + +#endif /* INCLUDED_STDIO_H */ diff --git a/usrp2/firmware/lib/u2_init.c b/usrp2/firmware/lib/u2_init.c new file mode 100644 index 00000000..9a1eb165 --- /dev/null +++ b/usrp2/firmware/lib/u2_init.c @@ -0,0 +1,130 @@ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include "u2_init.h" +#include "memory_map.h" +#include "spi.h" +#include "pic.h" +#include "hal_io.h" +#include "lsadc.h" +#include "lsdac.h" +#include "buffer_pool.h" +#include "hal_uart.h" +#include "i2c.h" +#include "bool.h" +#include "mdelay.h" +#include "ad9777.h" +#include "clocks.h" +#include "db.h" +#include "usrp2_i2c_addr.h" + +//#include "nonstdio.h" + +unsigned char u2_hw_rev_major; +unsigned char u2_hw_rev_minor; + +static inline void +get_hw_rev(void) +{ + bool ok = eeprom_read(I2C_ADDR_MBOARD, MBOARD_REV_LSB, &u2_hw_rev_minor, 1); + ok &= eeprom_read(I2C_ADDR_MBOARD, MBOARD_REV_MSB, &u2_hw_rev_major, 1); +} + +/* + * We ought to arrange for this to be called before main, but for now, + * we require that the user's main call u2_init as the first thing... + */ +bool +u2_init(void) +{ + // Set GPIOs to inputs, disable GPIO streaming + hal_gpio_set_ddr(GPIO_TX_BANK, 0x0000, 0xffff); + hal_gpio_set_ddr(GPIO_RX_BANK, 0x0000, 0xffff); + + hal_gpio_write(GPIO_TX_BANK, 0x0000, 0xffff); // init s/w output value to zero + hal_gpio_write(GPIO_RX_BANK, 0x0000, 0xffff); + + dsp_rx_regs->gpio_stream_enable = 0; // I, Q LSBs come from DSP + + hal_io_init(); + + // init spi, so that we can switch over to the high-speed clock + spi_init(); + + // init i2c so we can read our rev + i2c_init(); + get_hw_rev(); + + // set up the default clocks + clocks_init(); + + // clocks_enable_test_clk(true,1); + + // Enable ADCs + output_regs->adc_ctrl = ADC_CTRL_ON; + + // Set up AD9777 DAC + ad9777_write_reg(0, R0_1R); + ad9777_write_reg(1, R1_INTERP_4X | R1_REAL_MIX); + ad9777_write_reg(2, 0); + ad9777_write_reg(3, R3_PLL_DIV_1); + ad9777_write_reg(4, R4_PLL_ON | R4_CP_AUTO); + ad9777_write_reg(5, R5_I_FINE_GAIN(0)); + ad9777_write_reg(6, R6_I_COARSE_GAIN(0xf)); + ad9777_write_reg(7, 0); // I dac offset + ad9777_write_reg(8, 0); + ad9777_write_reg(9, R9_Q_FINE_GAIN(0)); + ad9777_write_reg(10, R10_Q_COARSE_GAIN(0xf)); + ad9777_write_reg(11, 0); // Q dac offset + ad9777_write_reg(12, 0); + + // Initial values for tx and rx mux registers + dsp_tx_regs->tx_mux = 0x10; + dsp_rx_regs->rx_mux = 0x44444444; + + // Set up serdes + output_regs->serdes_ctrl = (SERDES_ENABLE | SERDES_RXEN); + + pic_init(); // progammable interrupt controller + bp_init(); // buffer pool + lsadc_init(); // low-speed ADCs + lsdac_init(); // low-speed DACs + db_init(); // daughterboard init + + hal_enable_ints(); + + // flash all leds to let us know board is alive + hal_set_leds(0x0, 0x1f); + mdelay(100); + hal_set_leds(0x1f, 0x1f); + mdelay(100); + hal_set_leds(0x1, 0x1f); // Leave the first one on + +#if 0 + // test register readback + int rr, vv; + vv = ad9777_read_reg(0); + printf("ad9777 reg[0] = 0x%x\n", vv); + + for (rr = 0x04; rr <= 0x0d; rr++){ + vv = ad9510_read_reg(rr); + printf("ad9510 reg[0x%x] = 0x%x\n", rr, vv); + } +#endif + + return true; +} diff --git a/usrp2/firmware/lib/u2_init.h b/usrp2/firmware/lib/u2_init.h new file mode 100644 index 00000000..91654dac --- /dev/null +++ b/usrp2/firmware/lib/u2_init.h @@ -0,0 +1,29 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_U2_INIT_H +#define INCLUDED_U2_INIT_H + +extern unsigned char u2_hw_rev_major; +extern unsigned char u2_hw_rev_minor; + +/*! + * one-time init + */ +int u2_init(void); + +#endif /* INCLUDED_U2_INIT_H */ diff --git a/usrp2/firmware/lib/usrp2_bytesex.h b/usrp2/firmware/lib/usrp2_bytesex.h new file mode 100644 index 00000000..2b74f2a0 --- /dev/null +++ b/usrp2/firmware/lib/usrp2_bytesex.h @@ -0,0 +1,66 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_USRP2_BYTESEX_H +#define INCLUDED_USRP2_BYTESEX_H + +// The USRP2 speaks big-endian... +// Use the standard include files or provide substitutions for +// htons and friends + +#if defined(HAVE_ARPA_INET_H) +#include +#elif defined(HAVE_NETINET_IN_H) +#include +#else +#include + +#ifdef WORDS_BIGENDIAN // nothing to do... + +static inline uint32_t htonl(uint32_t x){ return x; } +static inline uint16_t htons(uint16_t x){ return x; } +static inline uint32_t ntohl(uint32_t x){ return x; } +static inline uint16_t ntohs(uint16_t x){ return x; } + +#else + +#ifdef HAVE_BYTESWAP_H +#include +#else + +static inline uint16_t +bswap_16 (uint16_t x) +{ + return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)); +} + +static inline uint32_t +bswap_32 (uint32_t x) +{ + return ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \ + | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)); +} +#endif + +static inline uint32_t htonl(uint32_t x){ return bswap_32(x); } +static inline uint16_t htons(uint16_t x){ return bswap_16(x); } +static inline uint32_t ntohl(uint32_t x){ return bswap_32(x); } +static inline uint16_t ntohs(uint16_t x){ return bswap_16(x); } + +#endif +#endif +#endif /* INCLUDED_USRP2_BYTESEX_H */ diff --git a/usrp2/firmware/lib/wb16550.h b/usrp2/firmware/lib/wb16550.h new file mode 100644 index 00000000..7522f443 --- /dev/null +++ b/usrp2/firmware/lib/wb16550.h @@ -0,0 +1,98 @@ +/* -*- c -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + + +// Wishbone National Semiconductor 16550A compatible UART + +#ifndef INCLUDED_WB16550_H +#define INCLUDED_WB16550_H + +#include + +typedef struct { + volatile uint8_t data; // 0 r/w: r: rx fifo, w: tx fifo (if DLAB: LSB of divisor) + volatile uint8_t ier; // 1 r/w: Interrupt Enable Register (if DLAB: MSB of divisor) + volatile uint8_t iir_fcr; // 2 r/w: r: Interrupt ID Register, + // w: Fifo Control Register + volatile uint8_t lcr; // 3 r/w: Line Control Register + volatile uint8_t mcr; // 4 w: Modem Control Register + volatile uint8_t lsr; // 5 r: Line Status Register + volatile uint8_t msr; // 6 r: Modem Status Register + +} wb16550_reg_t; + +#define UART_IER_RDI 0x01 // Enable received data interrupt +#define UART_IER_THRI 0x02 // Enable transmitter holding reg empty int. +#define UART_IER_RLSI 0x04 // Enable receiver line status interrupt +#define UART_IER_MSI 0x08 // Enable modem status interrupt + +#define UART_IIR_NO_INT 0x01 // No interrupts pending +#define UART_IIR_ID_MASK 0x06 // Mask for interrupt ID +#define UART_IIR_MSI 0x00 // Modem status interrupt +#define UART_IIR_THRI 0x02 // Tx holding register empty int +#define UART_IIR_RDI 0x04 // Rx data available int +#define UART_IIR_RLSI 0x06 // Receiver line status int + +#define UART_FCR_ENABLE_FIFO 0x01 // ignore, always enabled +#define UART_FCR_CLEAR_RCVR 0x02 // Clear the RCVR FIFO +#define UART_FCR_CLEAR_XMIT 0x04 // Clear the XMIT FIFO +#define UART_FCR_TRIGGER_MASK 0xC0 // Mask for FIFO trigger range +#define UART_FCR_TRIGGER_1 0x00 // Rx fifo trigger level: 1 byte +#define UART_FCR_TRIGGER_4 0x40 // Rx fifo trigger level: 4 bytes +#define UART_FCR_TRIGGER_8 0x80 // Rx fifo trigger level: 8 bytes +#define UART_FCR_TRIGGER_14 0xC0 // Rx fifo trigger level: 14 bytes + +#define UART_LCR_DLAB 0x80 // Divisor latch access bit +#define UART_LCR_SBC 0x40 // Set break control +#define UART_LCR_SPAR 0x20 // Stick parity +#define UART_LCR_EPAR 0x10 // Even parity select +#define UART_LCR_PARITY 0x08 // Parity Enable +#define UART_LCR_STOP 0x04 // Stop bits: 0=1 bit, 1=2 bits +#define UART_LCR_WLEN5 0x00 // Wordlength: 5 bits +#define UART_LCR_WLEN6 0x01 // Wordlength: 6 bits +#define UART_LCR_WLEN7 0x02 // Wordlength: 7 bits +#define UART_LCR_WLEN8 0x03 // Wordlength: 8 bits + +#define UART_MCR_LOOP 0x10 // Enable loopback test mode +#define UART_MCR_OUT2n 0x08 // Out2 complement (loopback mode) +#define UART_MCR_OUT1n 0x04 // Out1 complement (loopback mode) +#define UART_MCR_RTSn 0x02 // RTS complement +#define UART_MCR_DTRn 0x01 // DTR complement + +#define UART_LSR_TEMT 0x40 // Transmitter empty +#define UART_LSR_THRE 0x20 // Transmit-hold-register empty +#define UART_LSR_BI 0x10 // Break interrupt indicator +#define UART_LSR_FE 0x08 // Frame error indicator +#define UART_LSR_PE 0x04 // Parity error indicator +#define UART_LSR_OE 0x02 // Overrun error indicator +#define UART_LSR_DR 0x01 // Receiver data ready +#define UART_LSR_BRK_ERROR_BITS 0x1E // BI, FE, PE, OE bits +#define UART_LSR_ERROR 0x80 // At least 1 PE, FE or BI are in the fifo + +#define UART_MSR_DCD 0x80 // Data Carrier Detect +#define UART_MSR_RI 0x40 // Ring Indicator +#define UART_MSR_DSR 0x20 // Data Set Ready +#define UART_MSR_CTS 0x10 // Clear to Send +#define UART_MSR_DDCD 0x08 // Delta DCD +#define UART_MSR_TERI 0x04 // Trailing edge ring indicator +#define UART_MSR_DDSR 0x02 // Delta DSR +#define UART_MSR_DCTS 0x01 // Delta CTS +#define UART_MSR_ANY_DELTA 0x0F // Any of the delta bits! + + +#endif // INCLUDED_WB16550_H diff --git a/usrp2/firmware/missing b/usrp2/firmware/missing new file mode 100755 index 00000000..1c8ff704 --- /dev/null +++ b/usrp2/firmware/missing @@ -0,0 +1,367 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2006-05-10.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# 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 program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case $1 in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $1 in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/usrp2/host/Makefile.am b/usrp2/host/Makefile.am new file mode 100644 index 00000000..b6e30b5f --- /dev/null +++ b/usrp2/host/Makefile.am @@ -0,0 +1,29 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = usrp2.pc + +EXTRA_DIST = \ + usrp2.pc.in + +SUBDIRS = include lib apps diff --git a/usrp2/host/Makefile.in b/usrp2/host/Makefile.in new file mode 100644 index 00000000..c84e88ea --- /dev/null +++ b/usrp2/host/Makefile.in @@ -0,0 +1,1067 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/usrp2.pc.in $(top_srcdir)/Makefile.common +subdir = usrp2/host +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = usrp2.pc +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = usrp2.pc +EXTRA_DIST = \ + usrp2.pc.in + +SUBDIRS = include lib apps +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp2/host/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp2/host/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +usrp2.pc: $(top_builddir)/config.status $(srcdir)/usrp2.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-pkgconfigDATA + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/host/apps/Makefile.am b/usrp2/host/apps/Makefile.am new file mode 100644 index 00000000..db766019 --- /dev/null +++ b/usrp2/host/apps/Makefile.am @@ -0,0 +1,48 @@ +# +# Copyright 2007, 2008 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 3 of the License, 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 program. If not, see . +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = \ + $(USRP2_INCLUDES) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(CPPUNIT_INCLUDES) \ + $(GRUEL_INCLUDES) + +LDADD = \ + $(USRP2_LA) \ + $(GRUEL_LA) \ + $(OMNITHREAD_LA) + +bin_PROGRAMS = \ + find_usrps \ + usrp2_burn_mac_addr + +noinst_PROGRAMS = \ + gen_const \ + rx_streaming_samples \ + tx_samples \ + test_mimo_tx \ + gpio + +find_usrps_SOURCES = find_usrps.cc +usrp2_burn_mac_addr_SOURCES = usrp2_burn_mac_addr.cc +rx_streaming_samples_SOURCES = rx_streaming_samples.cc +gen_const_SOURCES = gen_const.cc +tx_samples_SOURCES = tx_samples.cc +test_mimo_tx_SOURCES = test_mimo_tx.cc +gpio_SOURCES = gpio.cc diff --git a/usrp2/host/apps/Makefile.in b/usrp2/host/apps/Makefile.in new file mode 100644 index 00000000..52591587 --- /dev/null +++ b/usrp2/host/apps/Makefile.in @@ -0,0 +1,1091 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007, 2008 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +bin_PROGRAMS = find_usrps$(EXEEXT) usrp2_burn_mac_addr$(EXEEXT) +noinst_PROGRAMS = gen_const$(EXEEXT) rx_streaming_samples$(EXEEXT) \ + tx_samples$(EXEEXT) test_mimo_tx$(EXEEXT) gpio$(EXEEXT) +subdir = usrp2/host/apps +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) +am_find_usrps_OBJECTS = find_usrps.$(OBJEXT) +find_usrps_OBJECTS = $(am_find_usrps_OBJECTS) +find_usrps_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +find_usrps_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_gen_const_OBJECTS = gen_const.$(OBJEXT) +gen_const_OBJECTS = $(am_gen_const_OBJECTS) +gen_const_LDADD = $(LDADD) +gen_const_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_gpio_OBJECTS = gpio.$(OBJEXT) +gpio_OBJECTS = $(am_gpio_OBJECTS) +gpio_LDADD = $(LDADD) +gpio_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_rx_streaming_samples_OBJECTS = rx_streaming_samples.$(OBJEXT) +rx_streaming_samples_OBJECTS = $(am_rx_streaming_samples_OBJECTS) +rx_streaming_samples_LDADD = $(LDADD) +rx_streaming_samples_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_test_mimo_tx_OBJECTS = test_mimo_tx.$(OBJEXT) +test_mimo_tx_OBJECTS = $(am_test_mimo_tx_OBJECTS) +test_mimo_tx_LDADD = $(LDADD) +test_mimo_tx_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_tx_samples_OBJECTS = tx_samples.$(OBJEXT) +tx_samples_OBJECTS = $(am_tx_samples_OBJECTS) +tx_samples_LDADD = $(LDADD) +tx_samples_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_usrp2_burn_mac_addr_OBJECTS = usrp2_burn_mac_addr.$(OBJEXT) +usrp2_burn_mac_addr_OBJECTS = $(am_usrp2_burn_mac_addr_OBJECTS) +usrp2_burn_mac_addr_LDADD = $(LDADD) +usrp2_burn_mac_addr_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(find_usrps_SOURCES) $(gen_const_SOURCES) $(gpio_SOURCES) \ + $(rx_streaming_samples_SOURCES) $(test_mimo_tx_SOURCES) \ + $(tx_samples_SOURCES) $(usrp2_burn_mac_addr_SOURCES) +DIST_SOURCES = $(find_usrps_SOURCES) $(gen_const_SOURCES) \ + $(gpio_SOURCES) $(rx_streaming_samples_SOURCES) \ + $(test_mimo_tx_SOURCES) $(tx_samples_SOURCES) \ + $(usrp2_burn_mac_addr_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = \ + $(USRP2_INCLUDES) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(CPPUNIT_INCLUDES) \ + $(GRUEL_INCLUDES) + +LDADD = \ + $(USRP2_LA) \ + $(GRUEL_LA) \ + $(OMNITHREAD_LA) + +find_usrps_SOURCES = find_usrps.cc +usrp2_burn_mac_addr_SOURCES = usrp2_burn_mac_addr.cc +rx_streaming_samples_SOURCES = rx_streaming_samples.cc +gen_const_SOURCES = gen_const.cc +tx_samples_SOURCES = tx_samples.cc +test_mimo_tx_SOURCES = test_mimo_tx.cc +gpio_SOURCES = gpio.cc +all: all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp2/host/apps/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp2/host/apps/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +find_usrps$(EXEEXT): $(find_usrps_OBJECTS) $(find_usrps_DEPENDENCIES) + @rm -f find_usrps$(EXEEXT) + $(CXXLINK) $(find_usrps_OBJECTS) $(find_usrps_LDADD) $(LIBS) +gen_const$(EXEEXT): $(gen_const_OBJECTS) $(gen_const_DEPENDENCIES) + @rm -f gen_const$(EXEEXT) + $(CXXLINK) $(gen_const_OBJECTS) $(gen_const_LDADD) $(LIBS) +gpio$(EXEEXT): $(gpio_OBJECTS) $(gpio_DEPENDENCIES) + @rm -f gpio$(EXEEXT) + $(CXXLINK) $(gpio_OBJECTS) $(gpio_LDADD) $(LIBS) +rx_streaming_samples$(EXEEXT): $(rx_streaming_samples_OBJECTS) $(rx_streaming_samples_DEPENDENCIES) + @rm -f rx_streaming_samples$(EXEEXT) + $(CXXLINK) $(rx_streaming_samples_OBJECTS) $(rx_streaming_samples_LDADD) $(LIBS) +test_mimo_tx$(EXEEXT): $(test_mimo_tx_OBJECTS) $(test_mimo_tx_DEPENDENCIES) + @rm -f test_mimo_tx$(EXEEXT) + $(CXXLINK) $(test_mimo_tx_OBJECTS) $(test_mimo_tx_LDADD) $(LIBS) +tx_samples$(EXEEXT): $(tx_samples_OBJECTS) $(tx_samples_DEPENDENCIES) + @rm -f tx_samples$(EXEEXT) + $(CXXLINK) $(tx_samples_OBJECTS) $(tx_samples_LDADD) $(LIBS) +usrp2_burn_mac_addr$(EXEEXT): $(usrp2_burn_mac_addr_OBJECTS) $(usrp2_burn_mac_addr_DEPENDENCIES) + @rm -f usrp2_burn_mac_addr$(EXEEXT) + $(CXXLINK) $(usrp2_burn_mac_addr_OBJECTS) $(usrp2_burn_mac_addr_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_usrps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gen_const.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_streaming_samples.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mimo_tx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_samples.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_burn_mac_addr.Po@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool clean-noinstPROGRAMS ctags \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/host/apps/find_usrps.cc b/usrp2/host/apps/find_usrps.cc new file mode 100644 index 00000000..ff6b4ab7 --- /dev/null +++ b/usrp2/host/apps/find_usrps.cc @@ -0,0 +1,71 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +static void +usage(const char *progname) +{ + fprintf(stderr, "usage: %s [-e ethN]\n", + progname); +} + +int +main(int argc, char **argv) +{ + int ch; + const char *interface = "eth0"; + + while ((ch = getopt(argc, argv, "he:")) != EOF){ + switch (ch){ + case 'e': + interface = optarg; + break; + + case 'h': + default: + usage(argv[0]); + exit(1); + } + } + + if (argc - optind != 0){ + usage(argv[0]); + exit(1); + } + + usrp2::props_vector_t r = usrp2::find(interface); + + for (size_t i = 0; i < r.size(); i++){ + std::cout << r[i] << std::endl; + } + + if (r.size() == 0){ + std::cerr << "No USRP2 found.\n"; + return 1; + } + + return 0; +} diff --git a/usrp2/host/apps/gen_const.cc b/usrp2/host/apps/gen_const.cc new file mode 100644 index 00000000..d2c36ebb --- /dev/null +++ b/usrp2/host/apps/gen_const.cc @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +int +main(int argc, char **argv) +{ + if (argc != 3){ + fprintf(stderr, "usage: %s i-val q-val\n", argv[0]); + return 1; + } + + int i_val = strtol(argv[1], 0, 0); + int q_val = strtol(argv[2], 0, 0); + + static const int NSAMPLES = 16384; + + uint32_t sample[NSAMPLES]; + sample[0] = ((i_val & 0xffff) << 16) | (q_val & 0xffff); + for (int i = 1; i < NSAMPLES; i++) + sample[i] = sample[0]; + + while(1){ + write(1, sample, sizeof(sample)); + } +} diff --git a/usrp2/host/apps/gpio.cc b/usrp2/host/apps/gpio.cc new file mode 100644 index 00000000..2fee7e76 --- /dev/null +++ b/usrp2/host/apps/gpio.cc @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +int +main(int argc, char **argv) +{ + usrp2::usrp2::sptr u2 = usrp2::usrp2::make("eth0"); + + // Set io_tx[15] as FPGA output + u2->set_gpio_ddr(usrp2::GPIO_TX_BANK, 0x8000, 0x8000); + + // Set io_tx[15] under host sofware control + u2->set_gpio_sels(usrp2::GPIO_TX_BANK, "s..............."); + + // Write pins + uint16_t v = 0x8765; + u2->write_gpio(usrp2::GPIO_TX_BANK, v, 0x8000); + + // Read back + v = 0; + u2->read_gpio(usrp2::GPIO_TX_BANK, &v); + printf("TX GPIO read: %04X\n", v); + return 0; +} diff --git a/usrp2/host/apps/rx_streaming_samples.cc b/usrp2/host/apps/rx_streaming_samples.cc new file mode 100644 index 00000000..8479ae1b --- /dev/null +++ b/usrp2/host/apps/rx_streaming_samples.cc @@ -0,0 +1,373 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static volatile bool signaled = false; + +static void +sig_handler(int sig) +{ + signaled = true; +} + +static void +install_sig_handler(int signum, + void (*new_handler)(int)) +{ + struct sigaction new_action; + memset (&new_action, 0, sizeof (new_action)); + + new_action.sa_handler = new_handler; + sigemptyset (&new_action.sa_mask); + new_action.sa_flags = 0; + + if (sigaction (signum, &new_action, 0) < 0){ + perror ("sigaction (install new)"); + throw std::runtime_error ("sigaction"); + } +} + +// ------------------------------------------------------------------------ + +// FIXME make this a template + +class file_writer_16sc : public usrp2::rx_nop_handler +{ + FILE *d_fp; + std::string d_filename; + +public: + + file_writer_16sc(const std::string &filename, uint64_t max_samples) + : usrp2::rx_nop_handler(max_samples), d_filename(filename) + { + d_fp = fopen(filename.c_str(), "wb"); + if (d_fp == 0){ + perror(filename.c_str()); + throw std::invalid_argument(filename); + } + } + + ~file_writer_16sc(); + + bool + operator()(const uint32_t *items, size_t nitems, const usrp2::rx_metadata *metadata) + { + bool ok = rx_nop_handler::operator()(items, nitems, metadata); + + size_t host_nitems = nitems; + std::complex host_items[host_nitems]; + + usrp2::copy_u2_16sc_to_host_16sc(nitems, items, host_items); + + size_t n = 0; + while (n < host_nitems){ + size_t r = fwrite(&host_items[n], sizeof(host_items[0]), host_nitems - n, d_fp); + n += r; + if (r == 0){ // out of space? + d_err = true; + perror(d_filename.c_str()); + ok = false; + break; + } + } + + return ok; + } +}; + +file_writer_16sc::~file_writer_16sc() +{ + fclose(d_fp); +} + +// ------------------------------------------------------------------------ + +class file_writer_32fc : public usrp2::rx_nop_handler +{ + FILE *d_fp; + std::string d_filename; + +public: + + file_writer_32fc(const std::string &filename, uint64_t max_samples) + : usrp2::rx_nop_handler(max_samples), d_filename(filename) + { + d_fp = fopen(filename.c_str(), "wb"); + if (d_fp == 0){ + perror(filename.c_str()); + throw std::invalid_argument(filename); + } + } + + ~file_writer_32fc(); + + bool + operator()(const uint32_t *items, size_t nitems, const usrp2::rx_metadata *metadata) + { + bool ok = rx_nop_handler::operator()(items, nitems, metadata); + + size_t host_nitems = nitems; + std::complex host_items[host_nitems]; + + usrp2::copy_u2_16sc_to_host_32fc(nitems, items, host_items); + + size_t n = 0; + while (n < host_nitems){ + size_t r = fwrite(&host_items[n], sizeof(host_items[0]), host_nitems - n, d_fp); + n += r; + if (r == 0){ // out of space? + d_err = true; + perror(d_filename.c_str()); + ok = false; + break; + } + } + + return ok; + } +}; + +file_writer_32fc::~file_writer_32fc() +{ + fclose(d_fp); +} + +// ------------------------------------------------------------------------ + +static void +usage(const char *progname) +{ + const char *p = strrchr(progname, '/'); // drop leading directory path + if (p) + p++; + + if (strncmp(p, "lt-", 3) == 0) // drop lt- libtool prefix + p += 3; + + fprintf(stderr, "Usage: %s [options]\n\n", p); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -h show this message and exit\n"); + fprintf(stderr, " -e ETH_INTERFACE specify ethernet interface [default=eth0]\n"); + fprintf(stderr, " -m MAC_ADDR mac address of USRP2 HH:HH [default=first one found]\n"); + fprintf(stderr, " -f FREQUENCY specify receive center frequency in Hz [default=0.0]\n"); + fprintf(stderr, " -d DECIM specify receive decimation rate [default=5]\n"); + fprintf(stderr, " -g GAIN specify receive daughterboard gain [default=0]\n"); + fprintf(stderr, " -N NSAMPLES specify number of samples to receive [default=infinite]\n"); + fprintf(stderr, " -o OUTPUT_FILENAME specify file to receive samples [default=none]\n"); + fprintf(stderr, " -s write complex [default=complex]\n"); + fprintf(stderr, " -v verbose output\n"); +} + +int +main(int argc, char **argv) +{ + // options and their defaults + const char *interface = "eth0"; + const char *mac_addr_str = ""; + double rx_freq = 0.0; + int rx_decim = 5; + double rx_gain = 0.0; + uint64_t nsamples = 0; + bool output_shorts = false; + char *output_filename = 0; + bool verbose = false; + + int ch; + + while ((ch = getopt(argc, argv, "he:m:f:d:g:N:o:sv")) != EOF){ + double tmp; + switch (ch){ + + case 'e': + interface = optarg; + break; + + case 'm': + mac_addr_str = optarg; + break; + + case 'f': + if (!strtod_si(optarg, &rx_freq)) { + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + exit(1); + } + break; + + case 'g': + if (!strtod_si(optarg, &rx_gain)) { + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + exit(1); + } + break; + + case 'd': + rx_decim = strtol(optarg, 0, 0); + if (rx_decim < 4 or rx_decim > 512) { + std::cerr << "invalid decimation rate: " << optarg << std::endl; + usage(argv[0]); + exit(1); + } + break; + + case 'N': + if (!strtod_si(optarg, &tmp)) { + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + exit(1); + } + nsamples = static_cast(tmp); + break; + + case 's': + output_shorts = true; + break; + + case 'o': + output_filename = optarg; + break; + + case 'v': + verbose = true; + break; + + case 'h': + default: + usage(argv[0]); + exit(1); + } + } + + + install_sig_handler(SIGINT, sig_handler); + + usrp2::rx_nop_handler::sptr handler; + + if (output_filename){ + if (output_shorts) + handler = usrp2::rx_nop_handler::sptr(new file_writer_16sc(output_filename, nsamples)); + else + handler = usrp2::rx_nop_handler::sptr(new file_writer_32fc(output_filename, nsamples)); + } + else + handler = usrp2::rx_nop_handler::sptr(new usrp2::rx_nop_handler(nsamples)); + + gruel::rt_status_t rt = gruel::enable_realtime_scheduling(); + if (rt != gruel::RT_OK) + std::cerr << "Failed to enable realtime scheduling" << std::endl; + + usrp2::usrp2::sptr u2 = usrp2::usrp2::make(interface, mac_addr_str); + + // FIXME in case it was left running... + if (!u2->stop_rx_streaming()){ + fprintf(stderr, "stop_rx_streaming failed\n"); + } + + if (!u2->set_rx_gain(rx_gain)){ + fprintf(stderr, "set_rx_gain(%f) failed\n", rx_gain); + exit(1); + } + + usrp2::tune_result tr; + if (!u2->set_rx_center_freq(rx_freq, &tr)){ + fprintf(stderr, "set_rx_center_freq(%g) failed\n", rx_freq); + exit(1); + } + + if (verbose){ + printf("USRP2 MAC address: %s\n\n", u2->mac_addr().c_str()); + printf("Daughterboard configuration:\n"); + printf(" baseband_freq=%f\n", tr.baseband_freq); + printf(" ddc_freq=%f\n", tr.dxc_freq); + printf(" residual_freq=%f\n", tr.residual_freq); + printf(" inverted=%s\n\n", tr.spectrum_inverted ? "yes" : "no"); + } + + if (!u2->set_rx_decim(rx_decim)) { + fprintf(stderr, "set_rx_decim(%d) failed\n", rx_decim); + exit(1); + } + + if (verbose) + printf("USRP2 using decimation rate of %d\n", rx_decim); + + if (!u2->start_rx_streaming(0)){ + fprintf(stderr, "start_rx_streaming failed\n"); + exit(1); + } + + if (verbose) { + if (nsamples > 0) + printf("Receiving %zd samples\n\n", nsamples); + else + printf("Receiving infinite samples\n\n"); + } + + struct timeval start, end; + gettimeofday(&start, 0); + + while (!signaled && + !handler->has_errored_p() && + !handler->has_finished_p()) { + bool ok = u2->rx_samples(0, handler.get()); + if (!ok){ + fprintf(stderr, "u2->rx_samples failed\n"); + return 1; + } + } + + gettimeofday(&end, 0); + long n_usecs = end.tv_usec-start.tv_usec; + long n_secs = end.tv_sec-start.tv_sec; + double elapsed = (double)n_secs + (double)n_usecs*1e-6; + double mbs = handler->nsamples()*sizeof(uint32_t)/elapsed/1e6; + double pps = handler->nframes()/elapsed; + + u2->stop_rx_streaming(); + + if (verbose){ + printf("\nCopy handler called %li times.\n", handler->nframes()); + printf("Copy handler called with %li bytes.\n\n", handler->nsamples()*sizeof(uint32_t)); + printf("Elapsed time was %5.3f seconds.\n", elapsed); + printf("Packet rate was %1.0f pkts/sec.\n", pps); + printf("Approximate throughput was %5.2f MB/sec.\n", mbs); + printf("Total instances of overruns was %d.\n", u2->rx_overruns()); + printf("Total missing frames was %d.\n", u2->rx_missing()); + } + + return 0; +} diff --git a/usrp2/host/apps/test_mimo_tx.cc b/usrp2/host/apps/test_mimo_tx.cc new file mode 100644 index 00000000..f52bfd58 --- /dev/null +++ b/usrp2/host/apps/test_mimo_tx.cc @@ -0,0 +1,311 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008,2009 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 3 of the License, 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 program. If not, see . + */ + +/* + * This is a down and dirty test program that confirms that the we can + * coherently transmit different signals to two USRP2s connected via a + * mimo cable. It ignores most of its command line arguments, and + * requires that special purpose firmware be installed in the two + * USRP2s. The one connected to the ethernet must be running + * mimo_tx.bin The other must be running mimo_tx_slave.bin. + * + * Don't use this as a model for how s/w should be written :-) + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +typedef std::complex fcomplex; + +static volatile bool signaled = false; + +void +gen_and_send(usrp2::usrp2::sptr u2, int chan, + double *ph, double ph_incr, int nsamples); + + +static void +sig_handler(int sig) +{ + signaled = true; +} + +static void +install_sig_handler(int signum, + void (*new_handler)(int)) +{ + struct sigaction new_action; + memset (&new_action, 0, sizeof (new_action)); + + new_action.sa_handler = new_handler; + sigemptyset (&new_action.sa_mask); + new_action.sa_flags = 0; + + if (sigaction (signum, &new_action, 0) < 0){ + perror ("sigaction (install new)"); + throw std::runtime_error ("sigaction"); + } +} + + +static const char * +prettify_progname(const char *progname) // that's probably almost a word ;) +{ + const char *p = strrchr(progname, '/'); // drop leading directory path + if (p) + p++; + + if (strncmp(p, "lt-", 3) == 0) // drop lt- libtool prefix + p += 3; + + return p; +} + +static void +usage(const char *progname) +{ + fprintf(stderr, "Usage: %s [options]\n\n", prettify_progname(progname)); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -h show this message and exit\n"); + fprintf(stderr, " -e ETH_INTERFACE specify ethernet interface [default=eth0]\n"); + fprintf(stderr, " -m MAC_ADDR mac address of USRP2 HH:HH [default=first one found]\n"); + fprintf(stderr, " -I INPUT_FILE set input filename [default=stdin]\n"); + fprintf(stderr, " -r repeat. When EOF of input file is reached, seek to beginning\n"); + fprintf(stderr, " -f FREQ set frequency to FREQ [default=0]\n"); + fprintf(stderr, " -i INTERP set interpolation rate to INTERP [default=32]\n"); + fprintf(stderr, " -g gain set tx gain\n"); + fprintf(stderr, " -S SCALE fpga scaling factor for I & Q [default=256]\n"); +} + +#define GAIN_NOT_SET (-1000) +#define MAX_SAMPLES (371) + +int +main(int argc, char **argv) +{ + const char *interface = "eth0"; + const char *input_filename = 0; + bool repeat = false; + const char *mac_addr_str = ""; + double freq = 0; + int32_t interp = 32; + int32_t samples_per_frame = MAX_SAMPLES; + int32_t scale = -1; + double gain = GAIN_NOT_SET; + + int ch; + double tmp; + + + while ((ch = getopt(argc, argv, "he:m:I:rf:i:S:F:g:")) != EOF){ + switch (ch){ + + case 'e': + interface = optarg; + break; + + case 'm': + mac_addr_str = optarg; +#if 0 + if (!usrp2_basic::parse_mac_addr(optarg, &mac_addr)){ + std::cerr << "invalid mac addr: " << optarg << std::endl; + usage(argv[0]); + return 1; + } +#endif + break; + + case 'I': + input_filename = optarg; + break; + + case 'r': + repeat = true; + break; + + case 'f': + if (!strtod_si(optarg, &freq)){ + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + return 1; + } + break; + + case 'F': + samples_per_frame = strtol(optarg, 0, 0); + break; + + case 'i': + interp = strtol(optarg, 0, 0); + break; + + case 'S': + if (!strtod_si(optarg, &tmp)){ + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + return 1; + } + scale = static_cast(tmp); + break; + + case 'h': + default: + usage(argv[0]); + return 1; + } + } + + + if (argc - optind != 0){ + usage(argv[0]); + return 1; + } + + if (samples_per_frame < 9 || samples_per_frame > MAX_SAMPLES){ + std::cerr << prettify_progname(argv[0]) + << ": samples_per_frame is out of range. " + << "Must be in [9, " << MAX_SAMPLES << "].\n"; + usage(argv[0]); + return 1; + } + + + FILE *fp = 0; + if (input_filename == 0) + fp = stdin; + else { + fp = fopen(input_filename, "rb"); + if (fp == 0){ + perror(input_filename); + return 1; + } + } + + install_sig_handler(SIGINT, sig_handler); + + + gruel::rt_status_t rt = gruel::enable_realtime_scheduling(); + if (rt != gruel::RT_OK) + std::cerr << "Failed to enable realtime scheduling" << std::endl; + + + usrp2::usrp2::sptr u2 = usrp2::usrp2::make(interface, mac_addr_str); + +#if 0 + if (gain != GAIN_NOT_SET){ + if (!u2->set_tx_gain(gain)){ + std::cerr << "set_tx_gain failed\n"; + return 1; + } + } + + usrp2::tune_result tr; + if (!u2->set_tx_center_freq(freq, &tr)){ + fprintf(stderr, "set_tx_center_freq(%g) failed\n", freq); + return 1; + } + + printf("Daughterboard configuration:\n"); + printf(" baseband_freq=%f\n", tr.baseband_freq); + printf(" duc_freq=%f\n", tr.dxc_freq); + printf(" residual_freq=%f\n", tr.residual_freq); + printf(" inverted=%s\n\n", tr.spectrum_inverted ? "yes" : "no"); + + if (!u2->set_tx_interp(interp)){ + fprintf(stderr, "set_tx_interp(%d) failed\n", interp); + return 1; + } + + if (scale != -1){ + if (!u2->set_tx_scale_iq(scale, scale)){ + std::cerr << "set_tx_scale_iq failed\n"; + return 1; + } + } +#endif + + double baseband_rate = 100e6 / 32; + + double ph0 = 0; + double ph1 = 0; + + double ph0_incr = 7.5e3/baseband_rate * 2 * M_PI; + double ph1_incr = 7.5e3/baseband_rate * 2 * M_PI; + + while (!signaled){ + + gen_and_send(u2, 0, &ph0, ph0_incr, samples_per_frame); + gen_and_send(u2, 1, &ph1, ph1_incr, samples_per_frame); + + } + + return 0; +} + +void +gen_and_send(usrp2::usrp2::sptr u2, int chan, + double *ph_ptr, double ph_incr, int nsamples) +{ + double ph = *ph_ptr; + + std::complex buf[MAX_SAMPLES]; + + usrp2::tx_metadata md; + md.timestamp = -1; + md.start_of_burst = 1; + md.send_now = 1; + + float ampl; + + if (chan == 0) + ampl = 0.5; + else + ampl = 0.75; + + + for (int i = 0; i < nsamples; i++){ +#if 0 + float s, c; + sincosf((float) ph, &s, &c); + buf[i] = std::complex(s * ampl, c * ampl); + ph += ph_incr; +#else + buf[i] = std::complex(ampl, 0); +#endif + } + + if (!u2->tx_32fc(chan, buf, nsamples, &md)){ + fprintf(stderr, "tx_32fc failed\n"); + } + + ph = fmod(ph, 2*M_PI); + *ph_ptr = ph; +} diff --git a/usrp2/host/apps/tx_samples.cc b/usrp2/host/apps/tx_samples.cc new file mode 100644 index 00000000..5c3728fb --- /dev/null +++ b/usrp2/host/apps/tx_samples.cc @@ -0,0 +1,265 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +typedef std::complex fcomplex; + +static volatile bool signaled = false; + +static void +sig_handler(int sig) +{ + signaled = true; +} + +static void +install_sig_handler(int signum, + void (*new_handler)(int)) +{ + struct sigaction new_action; + memset (&new_action, 0, sizeof (new_action)); + + new_action.sa_handler = new_handler; + sigemptyset (&new_action.sa_mask); + new_action.sa_flags = 0; + + if (sigaction (signum, &new_action, 0) < 0){ + perror ("sigaction (install new)"); + throw std::runtime_error ("sigaction"); + } +} + + +static const char * +prettify_progname(const char *progname) // that's probably almost a word ;) +{ + const char *p = strrchr(progname, '/'); // drop leading directory path + if (p) + p++; + + if (strncmp(p, "lt-", 3) == 0) // drop lt- libtool prefix + p += 3; + + return p; +} + +static void +usage(const char *progname) +{ + fprintf(stderr, "Usage: %s [options]\n\n", prettify_progname(progname)); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -h show this message and exit\n"); + fprintf(stderr, " -e ETH_INTERFACE specify ethernet interface [default=eth0]\n"); + fprintf(stderr, " -m MAC_ADDR mac address of USRP2 HH:HH [default=first one found]\n"); + fprintf(stderr, " -I INPUT_FILE set input filename [default=stdin]\n"); + fprintf(stderr, " -r repeat. When EOF of input file is reached, seek to beginning\n"); + fprintf(stderr, " -f FREQ set frequency to FREQ [default=0]\n"); + fprintf(stderr, " -i INTERP set interpolation rate to INTERP [default=32]\n"); + fprintf(stderr, " -g gain set tx gain\n"); + fprintf(stderr, " -S SCALE fpga scaling factor for I & Q [default=256]\n"); +} + +#define GAIN_NOT_SET (-1000) +#define MAX_SAMPLES (371) + +int +main(int argc, char **argv) +{ + const char *interface = "eth0"; + const char *input_filename = 0; + bool repeat = false; + const char *mac_addr_str = ""; + double freq = 0; + int32_t interp = 32; + int32_t samples_per_frame = MAX_SAMPLES; + int32_t scale = -1; + double gain = GAIN_NOT_SET; + + int ch; + double tmp; + + + while ((ch = getopt(argc, argv, "he:m:I:rf:i:S:F:g:")) != EOF){ + switch (ch){ + + case 'e': + interface = optarg; + break; + + case 'm': + mac_addr_str = optarg; +#if 0 + if (!usrp2_basic::parse_mac_addr(optarg, &mac_addr)){ + std::cerr << "invalid mac addr: " << optarg << std::endl; + usage(argv[0]); + return 1; + } +#endif + break; + + case 'I': + input_filename = optarg; + break; + + case 'r': + repeat = true; + break; + + case 'f': + if (!strtod_si(optarg, &freq)){ + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + return 1; + } + break; + + case 'F': + samples_per_frame = strtol(optarg, 0, 0); + break; + + case 'i': + interp = strtol(optarg, 0, 0); + break; + + case 'S': + if (!strtod_si(optarg, &tmp)){ + std::cerr << "invalid number: " << optarg << std::endl; + usage(argv[0]); + return 1; + } + scale = static_cast(tmp); + break; + + case 'h': + default: + usage(argv[0]); + return 1; + } + } + + + if (argc - optind != 0){ + usage(argv[0]); + return 1; + } + + if (samples_per_frame < 9 || samples_per_frame > MAX_SAMPLES){ + std::cerr << prettify_progname(argv[0]) + << ": samples_per_frame is out of range. " + << "Must be in [9, " << MAX_SAMPLES << "].\n"; + usage(argv[0]); + return 1; + } + + + FILE *fp = 0; + if (input_filename == 0) + fp = stdin; + else { + fp = fopen(input_filename, "rb"); + if (fp == 0){ + perror(input_filename); + return 1; + } + } + + install_sig_handler(SIGINT, sig_handler); + + + gruel::rt_status_t rt = gruel::enable_realtime_scheduling(); + if (rt != gruel::RT_OK) + std::cerr << "Failed to enable realtime scheduling" << std::endl; + + + usrp2::usrp2::sptr u2 = usrp2::usrp2::make(interface, mac_addr_str); + + if (gain != GAIN_NOT_SET){ + if (!u2->set_tx_gain(gain)){ + std::cerr << "set_tx_gain failed\n"; + return 1; + } + } + + usrp2::tune_result tr; + if (!u2->set_tx_center_freq(freq, &tr)){ + fprintf(stderr, "set_tx_center_freq(%g) failed\n", freq); + return 1; + } + + printf("Daughterboard configuration:\n"); + printf(" baseband_freq=%f\n", tr.baseband_freq); + printf(" duc_freq=%f\n", tr.dxc_freq); + printf(" residual_freq=%f\n", tr.residual_freq); + printf(" inverted=%s\n\n", tr.spectrum_inverted ? "yes" : "no"); + + if (!u2->set_tx_interp(interp)){ + fprintf(stderr, "set_tx_interp(%d) failed\n", interp); + return 1; + } + + if (scale != -1){ + if (!u2->set_tx_scale_iq(scale, scale)){ + std::cerr << "set_tx_scale_iq failed\n"; + return 1; + } + } + + usrp2::tx_metadata md; + md.timestamp = -1; + md.start_of_burst = 1; + md.send_now = 1; + + while (!signaled){ + + std::complex samples[MAX_SAMPLES]; + + int r = fread(samples, sizeof(uint32_t), samples_per_frame, fp); + + // fprintf(stderr, "fread -> %d\n", r); + + if (r == 0){ + if (!repeat) + break; + if (fseek(fp, 0, SEEK_SET) == -1) + break; + } + + // FIXME if r < 9, pad to 9 for minimum packet size constraint + + if (!u2->tx_16sc(0, samples, r, &md)){ + fprintf(stderr, "tx_complex_int16 failed\n"); + break; + } + } + + return 0; +} diff --git a/usrp2/host/apps/usrp2_burn_mac_addr.cc b/usrp2/host/apps/usrp2_burn_mac_addr.cc new file mode 100644 index 00000000..6ee76c13 --- /dev/null +++ b/usrp2/host/apps/usrp2_burn_mac_addr.cc @@ -0,0 +1,176 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + + +static volatile bool signaled = false; + +static void +sig_handler(int sig) +{ + signaled = true; +} + +static void +install_sig_handler(int signum, + void (*new_handler)(int)) +{ + struct sigaction new_action; + memset (&new_action, 0, sizeof (new_action)); + + new_action.sa_handler = new_handler; + sigemptyset (&new_action.sa_mask); + new_action.sa_flags = 0; + + if (sigaction (signum, &new_action, 0) < 0){ + perror ("sigaction (install new)"); + throw std::runtime_error ("sigaction"); + } +} + + +static void +usage(const char *progname) +{ + fprintf(stderr, "usage: %s [-e ethN] [-m old_mac_addr] new_mac_addr\n", + progname); + fprintf(stderr, " old_mac_addr defaults to 00:50:c2:85:3f:ff\n"); + fprintf(stderr, " new_mac_address must be HH:HH or HH:HH:HH:HH:HH:HH\n"); +} + +static bool +check_mac_addr_syntax(const std::string &s) +{ + unsigned char addr[6]; + + addr[0] = 0x00; // Matt's IAB + addr[1] = 0x50; + addr[2] = 0xC2; + addr[3] = 0x85; + addr[4] = 0x30; + addr[5] = 0x00; + + int len = s.size(); + + switch (len){ + + case 5: + return sscanf(s.c_str(), "%hhx:%hhx", &addr[4], &addr[5]) == 2; + + case 17: + return sscanf(s.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", + &addr[0], &addr[1], &addr[2], + &addr[3], &addr[4], &addr[5]) == 6; + default: + return false; + } + + return true; +} + + +int +main(int argc, char **argv) +{ + int ch; + const char *interface = "eth0"; + const char *old_mac_addr = "00:50:c2:85:3f:ff"; + const char *new_mac_addr = 0; + + while ((ch = getopt(argc, argv, "he:m:")) != EOF){ + switch (ch){ + case 'e': + interface = optarg; + break; + + case 'm': + old_mac_addr = optarg; + break; + + case 'h': + default: + usage(argv[0]); + exit(1); + } + } + + if (argc - optind != 1){ + usage(argv[0]); + exit(1); + } + + new_mac_addr = argv[optind]; + + if (!check_mac_addr_syntax(old_mac_addr)){ + fprintf(stderr, "invalid mac address: %s\n", old_mac_addr); + exit(1); + } + if (!check_mac_addr_syntax(new_mac_addr)){ + fprintf(stderr, "invalid mac address: %s\n", new_mac_addr); + exit(1); + } + + install_sig_handler(SIGINT, sig_handler); + + usrp2::usrp2::sptr u2; + + try { + u2 = usrp2::usrp2::make(interface, old_mac_addr); + } + catch (std::exception const &e){ + std::cerr << e.what() << std::endl; + return 1; + } + + if (!u2->burn_mac_addr(new_mac_addr)){ + std::cerr << "Failed to burn mac address: " + << new_mac_addr << std::endl; + return 1; + } + + u2.reset(); // close + + // wait 250 ms + struct timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 250000000; + nanosleep(&ts, 0); + + try { + u2 = usrp2::usrp2::make(interface, new_mac_addr); + } + catch (std::exception const &e){ + std::cerr << "Failed to connect to USRP2 using new addr: " + << new_mac_addr << std::endl; + std::cerr << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/usrp2/host/include/Makefile.am b/usrp2/host/include/Makefile.am new file mode 100644 index 00000000..e2f7282b --- /dev/null +++ b/usrp2/host/include/Makefile.am @@ -0,0 +1,23 @@ +# +# Copyright 2008 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. +# + +include $(top_srcdir)/Makefile.common + +SUBDIRS = usrp2 diff --git a/usrp2/host/include/Makefile.in b/usrp2/host/include/Makefile.in new file mode 100644 index 00000000..ec5bce25 --- /dev/null +++ b/usrp2/host/include/Makefile.in @@ -0,0 +1,1029 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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. +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common +subdir = usrp2/host/include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = usrp2 +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp2/host/include/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp2/host/include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/host/include/usrp2/Makefile.am b/usrp2/host/include/usrp2/Makefile.am new file mode 100644 index 00000000..08fdcde3 --- /dev/null +++ b/usrp2/host/include/usrp2/Makefile.am @@ -0,0 +1,35 @@ +# +# Copyright 2008 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 3 of the License, 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 program. If not, see . +# + +include $(top_srcdir)/Makefile.common + +INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) + +usrp2includedir = $(includedir)/usrp2 + +usrp2include_HEADERS = \ + copiers.h \ + copy_handler.h \ + data_handler.h \ + metadata.h \ + mimo_config.h \ + rx_nop_handler.h \ + rx_sample_handler.h \ + strtod_si.h \ + tune_result.h \ + usrp2.h \ + usrp2_cdefs.h diff --git a/usrp2/host/include/usrp2/Makefile.in b/usrp2/host/include/usrp2/Makefile.in new file mode 100644 index 00000000..d6702542 --- /dev/null +++ b/usrp2/host/include/usrp2/Makefile.in @@ -0,0 +1,958 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2008 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common $(usrp2include_HEADERS) +subdir = usrp2/host/include/usrp2 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(usrp2includedir)" +usrp2includeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(usrp2include_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(CPPUNIT_INCLUDES) +usrp2includedir = $(includedir)/usrp2 +usrp2include_HEADERS = \ + copiers.h \ + copy_handler.h \ + data_handler.h \ + metadata.h \ + mimo_config.h \ + rx_nop_handler.h \ + rx_sample_handler.h \ + strtod_si.h \ + tune_result.h \ + usrp2.h \ + usrp2_cdefs.h + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp2/host/include/usrp2/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp2/host/include/usrp2/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-usrp2includeHEADERS: $(usrp2include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(usrp2includedir)" || $(MKDIR_P) "$(DESTDIR)$(usrp2includedir)" + @list='$(usrp2include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(usrp2includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(usrp2includedir)/$$f'"; \ + $(usrp2includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(usrp2includedir)/$$f"; \ + done + +uninstall-usrp2includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(usrp2include_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(usrp2includedir)/$$f'"; \ + rm -f "$(DESTDIR)$(usrp2includedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(usrp2includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-usrp2includeHEADERS + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-usrp2includeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip \ + install-usrp2includeHEADERS installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags uninstall uninstall-am \ + uninstall-usrp2includeHEADERS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/host/include/usrp2/copiers.h b/usrp2/host/include/usrp2/copiers.h new file mode 100644 index 00000000..e98126f6 --- /dev/null +++ b/usrp2/host/include/usrp2/copiers.h @@ -0,0 +1,63 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_COPIERS_H +#define INCLUDED_USRP2_COPIERS_H + +#include +#include + +namespace usrp2 { + + // FIXME we may want to rework this, but this will get us on the air + + /* + * ---------------------------------------------------------------- + * Copy and convert from USRP2 wire format to host format + * ---------------------------------------------------------------- + */ + + void + copy_u2_16sc_to_host_16sc(size_t nitems, + const uint32_t *items, + std::complex *host_items); + + void + copy_u2_16sc_to_host_32fc(size_t nitems, + const uint32_t *items, + std::complex *host_items); + + /* + * ---------------------------------------------------------------- + * Copy and convert from host format to USRP2 wire format + * ---------------------------------------------------------------- + */ + + void + copy_host_16sc_to_u2_16sc(size_t nitems, + const std::complex *host_items, + uint32_t *items); + + void + copy_host_32fc_to_u2_16sc(size_t nitems, + const std::complex *host_items, + uint32_t *items); +} + + +#endif /* INCLUDED_USRP2_COPIERS_H */ diff --git a/usrp2/host/include/usrp2/copy_handler.h b/usrp2/host/include/usrp2/copy_handler.h new file mode 100644 index 00000000..aef14cac --- /dev/null +++ b/usrp2/host/include/usrp2/copy_handler.h @@ -0,0 +1,51 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_COPY_HANDLER_H +#define INCLUDED_COPY_HANDLER_H + +#include +#include + +namespace usrp2 { + + class copy_handler : public data_handler, boost::noncopyable + { + uint8_t *d_dest; // next write pointer + size_t d_space; // space left in destination buffer + size_t d_bytes; // total bytes copied + size_t d_times; // number of times invoked + + public: + copy_handler(void *dest, size_t len); + ~copy_handler(); + + virtual data_handler::result operator()(const void *base, size_t len); + + size_t bytes() const { return d_bytes; } + size_t times() const { return d_times; } + + static const size_t MIN_COPY_LEN = 1484; // FIXME: calculate eth packet - thdr + bool full() const { return d_space < MIN_COPY_LEN; } + }; + +} // namespace usrp2 + +#endif /* INCLUDED_COPY_HANDLER_H */ diff --git a/usrp2/host/include/usrp2/data_handler.h b/usrp2/host/include/usrp2/data_handler.h new file mode 100644 index 00000000..7317b38a --- /dev/null +++ b/usrp2/host/include/usrp2/data_handler.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_DATA_HANDLER_H +#define INCLUDED_DATA_HANDLER_H + +#include +#include + +namespace usrp2 { + + /*! + * \brief Abstract function object called to handle received data blocks. + */ + class data_handler + { + public: + + enum result_bits { + RELEASE = 0x0000, //< OK to release data (opposite of KEEP) + KEEP = 0x0001, //< do not discard data + DONE = 0x0002, //< do not call this object again + }; + + typedef int result; //< bitmask of result_bits + + /*! + * \param base points to the beginning of the data + * \param len is the length in bytes of the data + * \returns bitmask composed of DONE, KEEP + */ + virtual result operator()(const void *base, size_t len) = 0; + virtual ~data_handler(); + }; + +} // namespace usrp2 + +#endif /* INCLUDED_DATA_HANDLER_H */ diff --git a/usrp2/host/include/usrp2/metadata.h b/usrp2/host/include/usrp2/metadata.h new file mode 100644 index 00000000..8a95c385 --- /dev/null +++ b/usrp2/host/include/usrp2/metadata.h @@ -0,0 +1,62 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_USRP2_METADATA_H +#define INCLUDED_USRP2_METADATA_H + +#include + +namespace usrp2 { + + //! type of the timestamp returned from the USRP2 FPGA + typedef uint32_t fpga_timestamp; + + /*! + * \brief metadata associated with received frames + * \ingroup usrp2 + */ + struct rx_metadata { + uint32_t word0; //< debugging, extensions + fpga_timestamp timestamp; //< time that first sample of frame was received + unsigned int start_of_burst : 1; //< this frame is the start of a burst + unsigned int end_of_burst : 1; //< this frame is the end of a burst + unsigned int rx_overrun : 1; //< An Rx overrun occurred in the FPGA + // rssi + // agc_mode + + rx_metadata() : + word0(0), timestamp(0), start_of_burst(0), end_of_burst(0), rx_overrun(0) {} + }; + + /*! + * \brief metadata associated with transmitted frames + * \ingroup usrp2 + */ + struct tx_metadata { + fpga_timestamp timestamp; //< time to transmit first sample of frame + unsigned int send_now : 1; //< ignore timestamp, send now + unsigned int start_of_burst : 1; //< this frame is the start of a burst + unsigned int end_of_burst : 1; //< this frame is the end of a burst + // ... + + tx_metadata() : + timestamp(0), send_now(0), start_of_burst(0), end_of_burst(0) {} + }; + +}; // usrp2 + +#endif /* INCLUDED_USRP2_METADATA_H */ diff --git a/usrp2/host/include/usrp2/mimo_config.h b/usrp2/host/include/usrp2/mimo_config.h new file mode 100644 index 00000000..a1e038f7 --- /dev/null +++ b/usrp2/host/include/usrp2/mimo_config.h @@ -0,0 +1,50 @@ +/* -*- c -*- */ +/* + * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef INCLUDED_USRP2_MIMO_CONFIG_H +#define INCLUDED_USRP2_MIMO_CONFIG_H + +// FIXME: This duplicates the firmware usrp2_mimo_config.h file + +namespace usrp2 { + + static const int _MC_WE_LOCK = 0x0001; + static const int _MC_MIMO_CLK_INPUT = 0x0002; // else SMA input + + /* + * Derived masks (use these): + * + * We get our input from 1 of three places: + * Our free running oscilator, our SMA connector, or from the MIMO connector + */ + static const int MC_WE_DONT_LOCK = 0x0000; + static const int MC_WE_LOCK_TO_SMA = (_MC_WE_LOCK | 0); + static const int MC_WE_LOCK_TO_MIMO = (_MC_WE_LOCK | _MC_MIMO_CLK_INPUT); + + /* + * Independent of the source of the clock, we may or may not drive our + * clock onto the mimo connector. Note that there are dedicated clock + * signals in each direction, so disaster doesn't occurs if we're + * unnecessarily providing clock. + */ + static const int MC_PROVIDE_CLK_TO_MIMO = 0x0004; +} + +#endif /* INCLUDED_USRP2_MIMO_CONFIG_H */ diff --git a/usrp2/host/include/usrp2/rx_nop_handler.h b/usrp2/host/include/usrp2/rx_nop_handler.h new file mode 100644 index 00000000..68a254f3 --- /dev/null +++ b/usrp2/host/include/usrp2/rx_nop_handler.h @@ -0,0 +1,130 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_RX_NOP_HANDLER_H +#define INCLUDED_RX_NOP_HANDLER_H + +#include +#include + +/*! + * \ingroup usrp2 + * + * Base class for receive handlers that must copy into potentially limited + * range destination buffers. + * + * Maintains counters for number of items copied, times invoked, and test + * for whether maximum has been reached. + * + * Derived classes should override the () operator, but call this + * parent class method at some point at the start of their own operations. + */ + +namespace usrp2 { + + class rx_nop_handler : public rx_sample_handler + { + uint64_t d_max_samples; + uint64_t d_max_quantum; + uint64_t d_nsamples; + uint64_t d_nframes; + + protected: + bool d_err; + + public: + + // Shared pointer to an instance of this class + typedef boost::shared_ptr sptr; + + /*! + * Constructor + * + * \param max_samples Maximum number of samples to copy. Use zero for no maximum. + * \param max_quantum Maximum number of samples required to accept in one call. + * Use 0 to indicate no maximum. + */ + rx_nop_handler(uint64_t max_samples, uint64_t max_quantum=0) + : d_max_samples(max_samples), d_max_quantum(max_quantum), + d_nsamples(0), d_nframes(0), d_err(false) {} + + /*! + * Destructor. Derived classes must implement their own, non-inline destructor. + */ + virtual ~rx_nop_handler(); + + /*! + * \brief Returns number of frames this copier was called with + */ + uint64_t nframes() const { return d_nframes; } + + /*! + * \brief Returns actual number of samples copied + */ + uint64_t nsamples() const { return d_nsamples; } + + /*! + * \brief Returns maximum number of samples that will be copied + */ + uint64_t max_samples() const { return d_max_samples; } + + /*! + * Returns true if an error has occurred. Derived classes must set d_err to true + * when an error occurs in the () operator + */ + bool has_errored_p() const { return d_err; } + + /*! + * \brief Returns true if this instance has reached the maximum number of samples + */ + bool has_finished_p() const + { return d_max_samples == 0 ? false : d_nsamples >= d_max_samples-d_max_quantum; } + + + /*! + * Function operator invoked by USRP2 RX API. Derived classes must override this method + * but then invoke it at the start of their processing. This operator will always be + * called at least once. + * + * \param items points to the first 32-bit word of uninterpreted sample data in the frame. + * \param nitems is the number of entries in the frame in units of uint32_t's. + * \param metadata is the additional per frame data provided by the USRP2 FPGA. + * + * \p items points to the raw sample data received off of the ethernet. The data is + * packed into big-endian 32-bit unsigned ints for transport, but the actual format + * of the data is dependent on the current configuration of the USRP2. The most common + * format is 16-bit I & Q, with I in the top of the 32-bit word. + * + * \returns true if the object wants to be called again with new data; + * false if no additional data is wanted. + */ + virtual bool operator()(const uint32_t *items, size_t nitems, const rx_metadata *metadata) + { + // printf("W0: %08x TS: %08x\n", metadata->word0, metadata->timestamp); + // printf("I0: %08x\n", items[0]); + + d_nsamples += nitems; + d_nframes++; + + return !has_finished_p(); + } + }; + +} /* namespace usrp2 */ + +#endif /* INCLUDED_RX_NOP_HANDLER */ diff --git a/usrp2/host/include/usrp2/rx_sample_handler.h b/usrp2/host/include/usrp2/rx_sample_handler.h new file mode 100644 index 00000000..a7fb7b64 --- /dev/null +++ b/usrp2/host/include/usrp2/rx_sample_handler.h @@ -0,0 +1,59 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_USRP2_RX_SAMPLE_HANDLER_H +#define INCLUDED_USRP2_RX_SAMPLE_HANDLER_H + +#include +#include + + +namespace usrp2 { + + /*! + * \brief Abstract function object called to handle received data blocks. + * \ingroup usrp2 + * + * An object derived from this class is passed to usrp2::rx_samples + * to process the received frames of samples. + */ + class rx_sample_handler { + public: + virtual ~rx_sample_handler(); + + /*! + * \param items points to the first 32-bit word of uninterpreted sample data in the frame. + * \param nitems is the number of entries in the frame in units of uint32_t's. + * \param metadata is the additional per frame data provided by the USRP2 FPGA. + * + * \p items points to the raw sample data received off of the ethernet. The data is + * packed into big-endian 32-bit unsigned ints for transport, but the actual format + * of the data is dependent on the current configuration of the USRP2. The most common + * format is 16-bit I & Q, with I in the top of the 32-bit word. + * + * This is the general purpose, low level interface and relies on other functions + * to handle all required endian-swapping and format conversion. \sa FIXME. + * + * \returns true if the object wants to be called again with new data; + * false if no additional data is wanted. + */ + virtual bool operator()(const uint32_t *items, size_t nitems, const rx_metadata *metadata) = 0; + }; + +}; + +#endif /* INCLUDED_RX_SAMPLE_HANDLER_H */ diff --git a/usrp2/host/include/usrp2/strtod_si.h b/usrp2/host/include/usrp2/strtod_si.h new file mode 100644 index 00000000..0a0f5a62 --- /dev/null +++ b/usrp2/host/include/usrp2/strtod_si.h @@ -0,0 +1,39 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_STRTOD_SI_H +#define INCLUDED_STRTOD_SI_H + +#include "usrp2_cdefs.h" +__U2_BEGIN_DECLS + + +/*! + * \brief convert string at s to double honoring any trailing SI suffixes + * + * \param[in] s is the string to convert + * \param[out] result is the converted value + * \returns non-zero iff conversion was successful. + */ +int strtod_si(const char *s, double *result); + +__U2_END_DECLS + + +#endif /* INCLUDED_STRTOD_SI_H */ + diff --git a/usrp2/host/include/usrp2/tune_result.h b/usrp2/host/include/usrp2/tune_result.h new file mode 100644 index 00000000..9fe6539d --- /dev/null +++ b/usrp2/host/include/usrp2/tune_result.h @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_TUNE_RESULT_H +#define INCLUDED_USRP2_TUNE_RESULT_H + +namespace usrp2 { + + /* + * \ingroup usrp2 + */ + class tune_result + { + public: + // RF frequency that corresponds to DC in the IF + double baseband_freq; + + // frequency programmed into the DDC/DUC + double dxc_freq; + + // residual frequency (typically < 0.01 Hz) + double residual_freq; + + // is the spectrum inverted? + bool spectrum_inverted; + + tune_result(double baseband=0, double dxc=0, double residual=0, bool inverted=false) + : baseband_freq(baseband), dxc_freq(dxc), + residual_freq(residual), spectrum_inverted(inverted) {} + }; + +} // namespace usrp2 + +#endif /* INCLUDED_USRP2_TUNE_RESULT_H */ diff --git a/usrp2/host/include/usrp2/usrp2.h b/usrp2/host/include/usrp2/usrp2.h new file mode 100644 index 00000000..7a612f94 --- /dev/null +++ b/usrp2/host/include/usrp2/usrp2.h @@ -0,0 +1,600 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_H +#define INCLUDED_USRP2_H + +#include +#include +#include +#include +#include +#include +#include + +/* + * N.B., The interfaces described here are still in flux. + * + * We will keep all the code in the tree up-to-date with regard to changes + * here, but reserve the right to change this on a whim. + */ + +namespace usrp2 { + + /*! + * Structure to hold properties of USRP2 hardware devices. + * + */ + struct props + { + std::string addr; + uint16_t hw_rev; + uint8_t fpga_md5sum[16]; + uint8_t sw_md5sum[16]; + }; + + typedef std::vector props_vector_t; + + /*! + * \brief Search the ethernet for all USRP2s or for a specific USRP2. + * + * \param ifc is the name of the OS ethernet interface (e.g., "eth0") + * \param mac_addr is the MAC address of the desired USRP2, or "" to search for all. + * mac_addr must be either a zero length string, "", or must be of the form + * "01:02:03:04:05:06" or "05:06". + * + * \returns a vector of properties, 1 entry for each matching USRP2 found. + */ + props_vector_t find(const std::string &ifc, const std::string &mac_addr=""); + + class tune_result; + + // FIXME: get from firmware include + static const int GPIO_TX_BANK = 0; + static const int GPIO_RX_BANK = 1; + + /*! + * \brief standard C++ interface to USRP2 + * \ingroup usrp2 + */ + class usrp2 : boost::noncopyable + { + public: + static const unsigned int MAX_CHAN = 30; + + /*! + * Shared pointer to this class + */ + typedef boost::shared_ptr sptr; + + /*! + * Static function to return an instance of usrp2 as a shared pointer + * + * \param ifc Network interface name, e.g., "eth0" + * \param addr Network mac address, e.g., "01:23:45:67:89:ab", "89:ab" or "". + * If \p addr is HH:HH, it's treated as if it were 00:50:c2:85:HH:HH + * "" will autoselect a USRP2 if there is only a single one on the local ethernet. + * \param rx_bufsize is the length in bytes of the kernel networking buffer to allocate. + */ + static sptr make(const std::string &ifc, const std::string &addr="", size_t rx_bufsize=0); + + /*! + * Class destructor + */ + ~usrp2(); + + /*! + * Returns the MAC address associated with this USRP + */ + std::string mac_addr(); + + /*! + * Returns the GbE interface name associated with this USRP + */ + std::string interface_name(); + + /* + * ---------------------------------------------------------------- + * Rx configuration and control + * ---------------------------------------------------------------- + */ + + /*! + * Set receiver gain + * \param gain in dB (more or less) + */ + bool set_rx_gain(double gain); + + //! return minimum Rx gain + double rx_gain_min(); + + //! return maximum Rx gain + double rx_gain_max(); + + //! return Rx gain db_per_step + double rx_gain_db_per_step(); + + /*! + * \brief Set receive daughterboard LO offset frequency + */ + bool set_rx_lo_offset(double frequency); + + /*! + * Set receiver center frequency + */ + bool set_rx_center_freq(double frequency, tune_result *result); + + //! return minimum Rx center frequency + double rx_freq_min(); + + //! return maximum Rx center frequency + double rx_freq_max(); + + /*! + * Set receiver sample rate decimation + */ + bool set_rx_decim(int decimation_factor); + + //! Return current decimation factor + int rx_decim(); + + /*! + * Set receiver IQ magnitude scaling + */ + bool set_rx_scale_iq(int scale_i, int scale_q); + + /*! + * Set received sample format + * + * domain: complex or real + * type: floating, fixed point, or raw + * depth: bits per sample + * + * Sets format over the wire for samples from USRP2. + */ + // bool set_rx_format(...); + + /*! + * Start streaming receive mode. USRP2 will send a continuous stream of + * DSP pipeline samples to host. Call rx_samples(...) to access. + * + * \param channel Stream channel number (0-30) + * \param items_per_frame Number of 32-bit items per frame. + */ + bool start_rx_streaming(unsigned int channel=0, unsigned int items_per_frame=0); + + /*! + * Stop streaming receive mode. + */ + bool stop_rx_streaming(unsigned int channel=0); + + /*! + * \brief Receive data from the specified channel + * This method is used to receive all data: streaming or discrete. + */ + bool rx_samples(unsigned int channel, rx_sample_handler *handler); + + /*! + * Returns number of times receive overruns have occurred + */ + unsigned int rx_overruns(); + + /*! + * Returns total number of missing frames from overruns. + */ + unsigned int rx_missing(); + + /* + * ---------------------------------------------------------------- + * Tx configuration and control + * ---------------------------------------------------------------- + */ + + /*! + * Set transmitter gain + */ + bool set_tx_gain(double gain); + + //! return minimum Tx gain + double tx_gain_min(); + + //! return maximum Tx gain + double tx_gain_max(); + + //! return Tx gain db_per_step + double tx_gain_db_per_step(); + + /* + * \brief Set transmit daughterboard LO offset frequency + */ + bool set_tx_lo_offset(double frequency); + + /*! + * Set transmitter center frequency + */ + bool set_tx_center_freq(double frequency, tune_result *result); + + //! return minimum Tx center frequency + double tx_freq_min(); + + //! return maximum Tx center frequency + double tx_freq_max(); + + /*! + * Set transmitter sample rate interpolation + */ + bool set_tx_interp(int interpolation_factor); + + //! Return current interpolation factor + int tx_interp(); + + /* + * \brief Calculate default scale_iq for given interpolation rate + */ + void default_tx_scale_iq(int interpolation_factor, int *scale_i, int *scale_q); + + /*! + * Set transmit IQ magnitude scaling + */ + bool set_tx_scale_iq(int scale_i, int scale_q); + + /*! + * Set transmit sample format + * + * domain: complex or real + * type: floating, fixed point, or raw + * depth: bits per sample + * + * Sets format over the wire for samples to USRP2. + */ + // bool set_tx_format(...); + + /*! + * \brief transmit complex samples to USRP2 + * + * \param channel specifies the channel to send them to + * \param samples are the samples to transmit. They should be in the range [-1.0, +1.0] + * \param nsamples is the number of samples to transmit + * \param metadata provides the timestamp and flags + * + * The complex samples are converted to the appropriate + * "on the wire" representation, depending on the current USRP2 + * configuration. Typically, this is big-endian 16-bit I & Q. + */ + bool tx_32fc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata); + + /*! + * \brief transmit complex samples to USRP2 + * + * \param channel specifies the channel to send them to + * \param samples are the samples to transmit + * \param nsamples is the number of samples to transmit + * \param metadata provides the timestamp and flags + * + * The complex samples are converted to the appropriate + * "on the wire" representation, depending on the current USRP2 + * configuration. Typically, this is big-endian 16-bit I & Q. + */ + bool tx_16sc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata); + + /*! + * \brief transmit raw uint32_t data items to USRP2 + * + * The caller is responsible for ensuring that the items are + * formatted appropriately for the USRP2 and its configuration. + * This method is used primarily by the system itself. Users + * should call tx_32fc or tx_16sc instead. + * + * \param channel specifies the channel to send them to + * \param items are the data items to transmit + * \param nitems is the number of items to transmit + * \param metadata provides the timestamp and flags + */ + bool tx_raw(unsigned int channel, + const uint32_t *items, + size_t nitems, + const tx_metadata *metadata); + + /* + * ---------------------------------------------------------------- + * miscellaneous methods + * ---------------------------------------------------------------- + */ + + /*! + * \brief MIMO configuration + * + * \param flags from usrp2_mimo_config.h + * + *
+     *   one of these:
+     *
+     *     MC_WE_DONT_LOCK
+     *     MC_WE_LOCK_TO_SMA
+     *     MC_WE_LOCK_TO_MIMO
+     *
+     *   and optionally this:
+     *
+     *     MC_PROVIDE_CLK_TO_MIMO
+     * 
+ */ + bool config_mimo(int flags); + + + //! Get frequency of master oscillator in Hz + bool fpga_master_clock_freq(long *freq); + + // Get Sampling rate of A/D converter in Hz + bool adc_rate(long *rate); + + // Get Sampling rate of D/A converter in Hz + bool dac_rate(long *rate); + + /*! + * \brief Get Tx daughterboard ID + * + * \param[out] dbid returns the daughterboard id. + * + * daughterboard id >= 0 if successful, -1 if no daugherboard installed, + * -2 if invalid EEPROM on daughterboard. + */ + bool tx_daughterboard_id(int *dbid); + + /*! + * \brief Get Rx daughterboard ID + * + * \param[out] dbid returns the daughterboard id. + * + * daughterboard id >= 0 if successful, -1 if no daugherboard installed, + * -2 if invalid EEPROM on daughterboard. + */ + bool rx_daughterboard_id(int *dbid); + + /* + * ---------------------------------------------------------------- + * Low level methods + * ---------------------------------------------------------------- + */ + + /*! + * Burn new mac address into EEPROM on USRP2 + * + * \param new_addr Network mac address, e.g., "01:23:45:67:89:ab" or "89:ab". + * If \p addr is HH:HH, it's treated as if it were 00:50:c2:85:HH:HH + */ + bool burn_mac_addr(const std::string &new_addr); + + /*! + * Reset master time to 0 at next PPS edge + */ + bool sync_to_pps(); + + /*! + * Reset master time to 0 at every PPS edge + */ + bool sync_every_pps(bool enable); + + /*! + * Read memory from Wishbone bus as 32-bit words. Handles endian swapping if needed. + * + * \param addr 32-bit aligned address. Only the lower 16-bits are significant. + * \param words Number of 32-bit words + * + * \returns Vector of 32-bit read values + * + * WARNING: Attempts to read memory from addresses that do not correspond to RAM or + * memory-mapped peripherals may cause the USRP2 to hang, requiring a power cycle. + * + */ + std::vector peek32(uint32_t addr, uint32_t words); + + /*! + * Write memory to Wishbone bus as 32-bit words. Handles endian swapping if needed. + * + * \param addr 32-bit aligned address. Only the lower 16-bits are significant + * \param data Vector of 32-bit values to write. + * + * \returns true iff successful + * + * WARNING: Attempts to read memory from addresses that do not correspond to RAM or + * memory-mapped peripherals may cause the USRP2 to hang, requiring a power cycle. + * + */ + bool poke32(uint32_t addr, const std::vector &data); + + /*! + * Set daughterboard GPIO data direction register. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param value 16-bits, 0=FPGA input, 1=FPGA output + * \param mask 16-bits, 0=ignore, 1=set + * + * \returns true iff successful + * + * WARNING: Improper usage of this function may result in damage to the USRP2 + * + */ + bool set_gpio_ddr(int bank, uint16_t value, uint16_t mask); + + /*! + * Set daughterboard GPIO output selection register. For those GPIO pins that + * are configured as outputs in the DDR, this settings configures the source + * of the pin value. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param sels Exactly 16 character MSB->LSB string. For each position: + * '.' = ignore this bit, i.e., leave current value + * 'a' = Output ATR value + * 's' = Output host software controlled value + * '0' = Output FPGA debug bus 0 value + * '1' = Output FPGA debug bus 1 value + * + * \returns true iff successful + * + * WARNING: Improper usage of this function may result in damage to the USRP2 + * + */ + bool set_gpio_sels(int bank, std::string sels); + + /*! + * Set daughterboard GPIO pin values. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param value 16 bits, 0=low, 1=high + * \param mask 16 bits, 0=ignore, 1=set + * + * \returns true iff successful + * + * WARNING: Improper usage of this function may result in damage to the USRP2 + * + */ + bool write_gpio(int bank, uint16_t value, uint16_t mask); + + /*! + * Read daughterboard GPIO pin values + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param value pointer to uint16_t to hold read results + * + * \returns true iff successful + * + */ + bool read_gpio(int bank, uint16_t *value); + + /*! + * Set GPIO streaming mode + * + * Individually enables streaming GPIO pins through LSBs of DSP + * samples. + * + * On receive, io_rx[15] replaces I[0], io_rx[14] replaces Q[0] + * On transmit, I[0] maps to io_tx[15], Q[0] maps to io_tx[14] + * (Transmit streaming is not yet implemented.) + * + * The selected GPIO pins must have been set as inputs or outputs + * and, for transmit, set to software control. + * + * When enabled, the replaced DSP sample LSBs become 0. + * + * \param bank GPIO_TX_BANK or GPIO_RX_BANK + * \param enable enable[0] controls I channel LSB + * enable[1] controls Q channel LSB + * + * \returns true iff successful + * + * WARNING: Improper usage of this function may result in damage to the USRP2 + * + */ + bool enable_gpio_streaming(int bank, int enable); + +#if 0 // not yet implemented + /*! + * \brief Write EEPROM on motherboard or any daughterboard. + * \param i2c_addr I2C bus address of EEPROM + * \param eeprom_offset byte offset in EEPROM to begin writing + * \param buf the data to write + * \returns true iff sucessful + */ + bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string &buf); + + /*! + * \brief Read EEPROM on motherboard or any daughterboard. + * \param i2c_addr I2C bus address of EEPROM + * \param eeprom_offset byte offset in EEPROM to begin reading + * \param len number of bytes to read + * \returns the data read if successful, else a zero length string. + */ + std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); + + /*! + * \brief Write to I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param buf the data to write + * \returns true iff successful + * Writes are limited to a maximum of of 64 bytes. + */ + bool write_i2c (int i2c_addr, const std::string &buf); + + /*! + * \brief Read from I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param len number of bytes to read + * \returns the data read if successful, else a zero length string. + * Reads are limited to a maximum of 64 bytes. + */ + std::string read_i2c (int i2c_addr, int len); + + /*! + * \brief Write data to SPI bus peripheral. + * + * \param optional_header 0,1 or 2 bytes to write before buf. + * \param enables bitmask of peripherals to write. See usrp_spi_defs.h + * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* + * \param buf the data to write + * \returns true iff successful + * Writes are limited to a maximum of 64 bytes. + * + * If \p format specifies that optional_header bytes are present, they are + * written to the peripheral immediately prior to writing \p buf. + */ + bool write_spi (int optional_header, int enables, int format, const std::string &buf); + + /* + * \brief Read data from SPI bus peripheral. + * + * \param optional_header 0,1 or 2 bytes to write before buf. + * \param enables bitmask of peripheral to read. See usrp_spi_defs.h + * \param format transaction format. See usrp_spi_defs.h SPI_FMT_* + * \param len number of bytes to read. Must be in [0,64]. + * \returns the data read if sucessful, else a zero length string. + * + * Reads are limited to a maximum of 64 bytes. + * + * If \p format specifies that optional_header bytes are present, they + * are written to the peripheral first. Then \p len bytes are read from + * the peripheral and returned. + */ + std::string read_spi (int optional_header, int enables, int format, int len); +#endif + + + class impl; // implementation details + + private: + // Static function to retrieve or create usrp2 instance + static sptr find_existing_or_make_new(const std::string &ifc, props *p, size_t rx_bufsize); + + // Only class members can instantiate this class + usrp2(const std::string &ifc, props *p, size_t rx_bufsize); + + // All private state is held in opaque pointer + std::auto_ptr d_impl; + }; + +}; + +std::ostream& operator<<(std::ostream &os, const usrp2::props &x); + + +#endif /* INCLUDED_USRP2_H */ diff --git a/usrp2/host/include/usrp2/usrp2_cdefs.h b/usrp2/host/include/usrp2/usrp2_cdefs.h new file mode 100644 index 00000000..71395cda --- /dev/null +++ b/usrp2/host/include/usrp2/usrp2_cdefs.h @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007 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 INCLUDED_USRP2_CDEFS_H +#define INCLUDED_USRP2_CDEFS_H + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __U2_BEGIN_DECLS extern "C" { +# define __U2_END_DECLS } +#else +# define __U2_BEGIN_DECLS +# define __U2_END_DECLS +#endif + +#endif /* INCLUDED_USRP2_CDEFS_H */ diff --git a/usrp2/host/lib/Makefile.am b/usrp2/host/lib/Makefile.am new file mode 100644 index 00000000..772cf144 --- /dev/null +++ b/usrp2/host/lib/Makefile.am @@ -0,0 +1,67 @@ +# +# Copyright 2007,2008 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 3 of the License, 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 program. If not, see . +# + +include $(top_srcdir)/Makefile.common + +AM_CPPFLAGS = \ + $(USRP2_INCLUDES) \ + $(BOOST_CPPFLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(CPPUNIT_INCLUDES) \ + $(GRUEL_INCLUDES) + +bin_PROGRAMS = usrp2_socket_opener +usrp2_socket_opener_SOURCES = usrp2_socket_opener.cc + +lib_LTLIBRARIES = \ + libusrp2.la + +libusrp2_la_SOURCES = \ + control.cc \ + copiers.cc \ + copy_handler.cc \ + data_handler.cc \ + eth_buffer.cc \ + ethernet.cc \ + find.cc \ + open_usrp2_socket.cc \ + pktfilter.cc \ + ring.cc \ + rx_nop_handler.cc \ + rx_sample_handler.cc \ + strtod_si.c \ + usrp2.cc \ + usrp2_impl.cc \ + usrp2_thread.cc + +libusrp2_la_LIBADD = \ + $(OMNITHREAD_LA) \ + $(GRUEL_LA) \ + $(BOOST_LDFLAGS) $(BOOST_THREAD_LIB) + +# Private headers not needed for above the API development +noinst_HEADERS = \ + control.h \ + eth_buffer.h \ + eth_common.h \ + ethernet.h \ + open_usrp2_socket.h \ + pktfilter.h \ + ring.h \ + usrp2_bytesex.h \ + usrp2_impl.h \ + usrp2_thread.h diff --git a/usrp2/host/lib/Makefile.in b/usrp2/host/lib/Makefile.in new file mode 100644 index 00000000..570bd602 --- /dev/null +++ b/usrp2/host/lib/Makefile.in @@ -0,0 +1,1148 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright 2007,2008 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 3 of the License, 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 program. If not, see . +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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. +# + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/Makefile.common +bin_PROGRAMS = usrp2_socket_opener$(EXEEXT) +subdir = usrp2/host/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +libusrp2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libusrp2_la_OBJECTS = control.lo copiers.lo copy_handler.lo \ + data_handler.lo eth_buffer.lo ethernet.lo find.lo \ + open_usrp2_socket.lo pktfilter.lo ring.lo rx_nop_handler.lo \ + rx_sample_handler.lo strtod_si.lo usrp2.lo usrp2_impl.lo \ + usrp2_thread.lo +libusrp2_la_OBJECTS = $(am_libusrp2_la_OBJECTS) +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_usrp2_socket_opener_OBJECTS = usrp2_socket_opener.$(OBJEXT) +usrp2_socket_opener_OBJECTS = $(am_usrp2_socket_opener_OBJECTS) +usrp2_socket_opener_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libusrp2_la_SOURCES) $(usrp2_socket_opener_SOURCES) +DIST_SOURCES = $(libusrp2_la_SOURCES) $(usrp2_socket_opener_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = \ + $(USRP2_INCLUDES) \ + $(BOOST_CPPFLAGS) \ + $(STD_DEFINES_AND_INCLUDES) \ + $(CPPUNIT_INCLUDES) \ + $(GRUEL_INCLUDES) + +usrp2_socket_opener_SOURCES = usrp2_socket_opener.cc +lib_LTLIBRARIES = \ + libusrp2.la + +libusrp2_la_SOURCES = \ + control.cc \ + copiers.cc \ + copy_handler.cc \ + data_handler.cc \ + eth_buffer.cc \ + ethernet.cc \ + find.cc \ + open_usrp2_socket.cc \ + pktfilter.cc \ + ring.cc \ + rx_nop_handler.cc \ + rx_sample_handler.cc \ + strtod_si.c \ + usrp2.cc \ + usrp2_impl.cc \ + usrp2_thread.cc + +libusrp2_la_LIBADD = \ + $(OMNITHREAD_LA) \ + $(GRUEL_LA) \ + $(BOOST_LDFLAGS) $(BOOST_THREAD_LIB) + + +# Private headers not needed for above the API development +noinst_HEADERS = \ + control.h \ + eth_buffer.h \ + eth_common.h \ + ethernet.h \ + open_usrp2_socket.h \ + pktfilter.h \ + ring.h \ + usrp2_bytesex.h \ + usrp2_impl.h \ + usrp2_thread.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp2/host/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp2/host/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libusrp2.la: $(libusrp2_la_OBJECTS) $(libusrp2_la_DEPENDENCIES) + $(CXXLINK) -rpath $(libdir) $(libusrp2_la_OBJECTS) $(libusrp2_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +usrp2_socket_opener$(EXEEXT): $(usrp2_socket_opener_OBJECTS) $(usrp2_socket_opener_DEPENDENCIES) + @rm -f usrp2_socket_opener$(EXEEXT) + $(CXXLINK) $(usrp2_socket_opener_OBJECTS) $(usrp2_socket_opener_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/control.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copiers.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eth_buffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ethernet.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open_usrp2_socket.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pktfilter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ring.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_nop_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_sample_handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtod_si.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_impl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_socket_opener.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp2_thread.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-libLTLIBRARIES + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp2/host/lib/control.cc b/usrp2/host/lib/control.cc new file mode 100644 index 00000000..4b8597c6 --- /dev/null +++ b/usrp2/host/lib/control.cc @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include "control.h" +#include + +namespace usrp2 { + + pending_reply::pending_reply(unsigned int rid, void *buffer, size_t len) + : d_rid(rid), d_mutex(), d_cond(&d_mutex), d_buffer(buffer), d_len(len) + { + } + + pending_reply::~pending_reply() + { + signal(); // Needed? + } + + int + pending_reply::wait(double secs) + { + omni_mutex_lock l(d_mutex); + omni_time abs_timeout = omni_time::time(omni_time(secs)); + return d_cond.timedwait(abs_timeout.d_secs, abs_timeout.d_nsecs); + } + + void + pending_reply::signal() + { + d_cond.signal(); + } + +} // namespace usrp2 + diff --git a/usrp2/host/lib/control.h b/usrp2/host/lib/control.h new file mode 100644 index 00000000..9adc1618 --- /dev/null +++ b/usrp2/host/lib/control.h @@ -0,0 +1,168 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_CONTROL_H +#define INCLUDED_CONTROL_H + +#include +#include + +namespace usrp2 { + + struct op_generic_cmd { + u2_eth_packet_t h; + op_generic_t op; + op_generic_t eop; + }; + + /*! + * OP_CONFIG_RX_V2 command packet + */ + struct op_config_rx_v2_cmd + { + u2_eth_packet_t h; + op_config_rx_v2_t op; + op_generic_t eop; + }; + + struct op_start_rx_streaming_cmd + { + u2_eth_packet_t h; + op_start_rx_streaming_t op; + op_generic_t eop; + }; + + struct op_stop_rx_cmd { + u2_eth_packet_t h; + op_generic_t op; + op_generic_t eop; + }; + + struct op_config_tx_v2_cmd + { + u2_eth_packet_t h; + op_config_tx_v2_t op; + op_generic_t eop; + }; + + struct op_config_mimo_cmd + { + u2_eth_packet_t h; + op_config_mimo_t op; + op_generic_t eop; + }; + + struct op_burn_mac_addr_cmd + { + u2_eth_packet_t h; + op_burn_mac_addr_t op; + op_generic_t eop; + }; + + struct op_dboard_info_cmd { + u2_eth_packet_t h; + op_generic_t op; + op_generic_t eop; + }; + + struct op_peek_cmd { + u2_eth_packet_t h; + op_peek_t op; + op_generic_t eop; + }; + + struct op_poke_cmd { + u2_eth_packet_t h; + op_poke_t op; + // words to write go here + // eop must be dynamically written here + }; + + struct op_freq_cmd { + u2_eth_packet_t h; + op_freq_t op; + op_generic_t eop; + }; + + struct op_gpio_cmd { + u2_eth_packet_t h; + op_gpio_t op; + op_generic_t eop; + }; + + struct op_gpio_set_sels_cmd { + u2_eth_packet_t h; + op_gpio_set_sels_t op; + op_generic_t eop; + }; + + /*! + * Control mechanism to allow API calls to block waiting for reply packets + */ + class pending_reply + { + private: + unsigned int d_rid; + omni_mutex d_mutex; + omni_condition d_cond; + void *d_buffer; + size_t d_len; + + public: + /*! + * Construct a pending reply from the reply ID, response packet + * buffer, and buffer length. + */ + pending_reply(unsigned int rid, void *buffer, size_t len); + + /*! + * Destructor. Signals creating thread. + */ + ~pending_reply(); + + /*! + * Block, waiting for reply packet. + * Returns: 1 = ok, reply packet in buffer + * 0 = timeout + */ + int wait(double secs); + + /*! + * Allows creating thread to resume after copying reply into buffer + */ + void signal(); + + /*! + * Retrieve pending reply ID + */ + unsigned int rid() const { return d_rid; } + + /*! + * Retrieve destination buffer address + */ + void *buffer() const { return d_buffer; } + + /*! + * Retrieve destination buffer length + */ + size_t len() const { return d_len; } + }; + +} // namespace usrp2 + +#endif /* INCLUDED_CONTROL_H */ diff --git a/usrp2/host/lib/copiers.cc b/usrp2/host/lib/copiers.cc new file mode 100644 index 00000000..52c66f61 --- /dev/null +++ b/usrp2/host/lib/copiers.cc @@ -0,0 +1,133 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +// FIXME need gruel::not_implemented + +namespace usrp2 { + + /* + * N.B., in all of these, uint32_t *items is NOT 32-bit aligned! + * FIXME Needs fix for non-x86 machines. + */ + + /* + * ---------------------------------------------------------------- + * Copy and convert from USRP2 wire format to host format + * ---------------------------------------------------------------- + */ + void + copy_u2_16sc_to_host_16sc(size_t nitems, + const uint32_t *items, + std::complex *host_items) + { +#ifdef WORDS_BIGENDIAN + + assert(sizeof(items[0]) == sizeof(host_items[0])); + memcpy(host_items, items, nitems * sizeof(items[0])); + +#else + + // FIXME SIMD welcome here + + for (size_t i = 0; i < nitems; i++){ + uint32_t t = ntohx(items[i]); + //printf("%9d\n", items[i]); + host_items[i] = std::complex((t >> 16), t & 0xffff); + } + +#endif + } + + + /* + * endian swap if required and map [-32768, 32767] -> [1.0, +1.0) + */ + void + copy_u2_16sc_to_host_32fc(size_t nitems, + const uint32_t *items, + std::complex *host_items) + { + for (size_t i = 0; i < nitems; i++){ + uint32_t t = ntohx(items[i]); + int16_t re = (t >> 16) & 0xffff; + int16_t im = (t & 0xffff); + host_items[i] = std::complex(re * 1.0/32768, im * 1.0/32768); + } + } + + /* + * ---------------------------------------------------------------- + * Copy and convert from host format to USRP2 wire format + * ---------------------------------------------------------------- + */ + void + copy_host_16sc_to_u2_16sc(size_t nitems, + const std::complex *host_items, + uint32_t *items) + { +#ifdef WORDS_BIGENDIAN + + assert(sizeof(items[0]) == sizeof(host_items[0])); + memcpy(items, host_items, nitems * sizeof(items[0])); + +#else + + // FIXME SIMD welcome here + + for (size_t i = 0; i < nitems; i++){ + items[i] = htonl((host_items[i].real() << 16) | (host_items[i].imag() & 0xffff)); + } + +#endif + } + + + static inline int16_t + clip_and_scale(float x) + { + return static_cast(rintf(gr_branchless_clip(x, 1.0) * 32767.0)); + } + + void + copy_host_32fc_to_u2_16sc(size_t nitems, + const std::complex *host_items, + uint32_t *items) + { + for (size_t i = 0; i < nitems; i++){ + int16_t re = clip_and_scale(host_items[i].real()); + int16_t im = clip_and_scale(host_items[i].imag()); + + items[i] = htonl((re << 16) | (im & 0xffff)); + } + } + +} diff --git a/usrp2/host/lib/copy_handler.cc b/usrp2/host/lib/copy_handler.cc new file mode 100644 index 00000000..92759084 --- /dev/null +++ b/usrp2/host/lib/copy_handler.cc @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +namespace usrp2 { + + copy_handler::copy_handler(void *dest, size_t len) + : d_dest((uint8_t *)dest), d_space(len), d_bytes(0), d_times(0) + { + } + + copy_handler::~copy_handler() + { + // NOP + } + + data_handler::result + copy_handler::operator()(const void *base, size_t len) + { + if (len > d_space) + return KEEP|DONE; // can't do anything, retry later + + memcpy(&d_dest[d_bytes], base, len); + d_space -= len; + d_bytes += len; + d_times++; + + if (d_space < MIN_COPY_LEN) + return DONE; // don't call me anymore + + return 0; + } + +} // namespace usrp2 + diff --git a/usrp2/host/lib/data_handler.cc b/usrp2/host/lib/data_handler.cc new file mode 100644 index 00000000..ba912368 --- /dev/null +++ b/usrp2/host/lib/data_handler.cc @@ -0,0 +1,32 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#include + +namespace usrp2 { + + data_handler::~data_handler() + { + // default nop destructor + } + +} + diff --git a/usrp2/host/lib/eth_buffer.cc b/usrp2/host/lib/eth_buffer.cc new file mode 100644 index 00000000..bd37061f --- /dev/null +++ b/usrp2/host/lib/eth_buffer.cc @@ -0,0 +1,275 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,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 this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "eth_buffer.h" +#include "ethernet.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define ETH_BUFFER_DEBUG 0 // define to 0 or 1 +#if ETH_BUFFER_DEBUG +#define DEBUG_LOG(x) ::write(2, (x), 1) +#else +#define DEBUG_LOG(X) +#endif + +#define DEFAULT_MEM_SIZE 25e6 // ~0.25s @ 100 MB/s +#define MAX_MEM_SIZE 1000e6 // ~10.00s @ 100 MB/s. +#define MAX_SLAB_SIZE 131072 // 128 KB (FIXME fish out of /proc/slabinfo) +#define MAX_PKT_SIZE 1512 // we don't do jumbo frames + +namespace usrp2 { + + eth_buffer::eth_buffer(size_t rx_bufsize) + : d_fd(0), d_using_tpring(false), d_buflen(0), d_buf(0), d_frame_nr(0), + d_frame_size(0), d_head(0), d_ring(0), d_ethernet(new ethernet()) + { + if (rx_bufsize == 0) + d_buflen = (size_t)DEFAULT_MEM_SIZE; + else + d_buflen = std::min((size_t)MAX_MEM_SIZE, rx_bufsize); + + memset(d_mac, 0, sizeof(d_mac)); + } + + eth_buffer::~eth_buffer() + { + close(); + } + + bool + eth_buffer::open(const std::string &ifname, int protocol) + { + if (!d_ethernet->open(ifname, protocol)) { + std::cerr << "eth_buffer: unable to open interface " + << ifname << std::endl; + return false; + } + + d_fd = d_ethernet->fd(); + memcpy(d_mac, d_ethernet->mac(), sizeof(d_mac)); + + struct tpacket_req req; + size_t page_size = getpagesize(); + + // Calculate minimum power-of-two aligned size for frames + req.tp_frame_size = + (unsigned int)rint(pow(2, ceil(log2(TPACKET_ALIGN(TPACKET_HDRLEN)+TPACKET_ALIGN(MAX_PKT_SIZE))))); + d_frame_size = req.tp_frame_size; + + // Calculate minimum contiguous pages needed to enclose a frame + int npages = (page_size > req.tp_frame_size) ? 1 : ((req.tp_frame_size+page_size-1)/page_size); + req.tp_block_size = page_size << (int)ceil(log2(npages)); + + // Calculate number of blocks + req.tp_block_nr = (int)(d_buflen/req.tp_block_size); + + + // Recalculate buffer length + d_buflen = req.tp_block_nr*req.tp_block_size; + + // Finally, calculate total number of frames. Since frames, blocks, + // and pages are all power-of-two aligned, frames are contiguous + req.tp_frame_nr = d_buflen/req.tp_frame_size; + d_frame_nr = req.tp_frame_nr; + +#if 0 + if (ETH_BUFFER_DEBUG) + std::cerr << "eth_buffer:" + << " frame_size=" << req.tp_frame_size + << " block_size=" << req.tp_block_size + << " block_nr=" << req.tp_block_nr + << " frame_nr=" << req.tp_frame_nr + << " buflen=" << d_buflen + << std::endl; +#endif + + // Try to get kernel shared memory buffer + if (setsockopt(d_fd, SOL_PACKET, PACKET_RX_RING, (void *)&req, sizeof(req))) { + perror("eth_buffer: setsockopt"); + d_using_tpring = false; + if (!(d_buf = (uint8_t *)malloc(d_buflen))) { + std::cerr << "eth_buffer: failed to allocate packet memory" << std::endl; + return false; + } + + std::cerr << "eth_buffer: using malloc'd memory for buffer" << std::endl; + } + else { + d_using_tpring = true; + void *p = mmap(0, d_buflen, PROT_READ|PROT_WRITE, MAP_SHARED, d_fd, 0); + if (p == MAP_FAILED){ + perror("eth_buffer: mmap"); + return false; + } + d_buf = (uint8_t *) p; + + if (ETH_BUFFER_DEBUG) + std::cerr << "eth_buffer: using kernel shared mem for buffer" << std::endl; + } + + // Initialize our pointers into the packet ring + d_ring = std::vector(req.tp_frame_nr); + for (unsigned int i=0; i < req.tp_frame_nr; i++) { + d_ring[i] = (uint8_t *)(d_buf+i*req.tp_frame_size); + } + + // If not using kernel ring, instantiate select/read thread here + + return true; + } + + bool + eth_buffer::close() + { + // if we have background thread, stop it here + + if (!d_using_tpring && d_buf) + free(d_buf); + + return d_ethernet->close(); + } + + bool + eth_buffer::attach_pktfilter(pktfilter *pf) + { + return d_ethernet->attach_pktfilter(pf); + } + + inline bool + eth_buffer::frame_available() + { + return (((tpacket_hdr *)d_ring[d_head])->tp_status != TP_STATUS_KERNEL); + } + + eth_buffer::result + eth_buffer::rx_frames(data_handler *f, int timeout_in_ms) + { + DEBUG_LOG("\n"); + + while (!frame_available()) { + if (timeout_in_ms == 0) { + DEBUG_LOG("w"); + return EB_WOULD_BLOCK; + } + + struct pollfd pfd; + pfd.fd = d_fd; + pfd.revents = 0; + pfd.events = POLLIN; + + DEBUG_LOG("P"); + + int pres = poll(&pfd, 1, timeout_in_ms); + if (pres == -1) { + perror("poll"); + return EB_ERROR; + } + + if (pres == 0) { + DEBUG_LOG("t"); + return EB_TIMED_OUT; + } + } + + // Iterate through available packets + while (frame_available()) { + // Get start of ethernet frame and length + tpacket_hdr *hdr = (tpacket_hdr *)d_ring[d_head]; + void *base = (uint8_t *)hdr+hdr->tp_mac; + size_t len = hdr->tp_len; + + // FYI, (base % 4 == 2) Not what we want given the current FPGA + // code. This means that our uint32_t samples are not 4-byte + // aligned. We'll have to deal with it downstream. + + if (0) + fprintf(stderr, "eth_buffer: base = %p tp_mac = %3d tp_net = %3d\n", + base, hdr->tp_mac, hdr->tp_net); + + // Invoke data handler + data_handler::result r = (*f)(base, len); + if (!(r & data_handler::KEEP)) + hdr->tp_status = TP_STATUS_KERNEL; // mark it free + + inc_head(); + + if (r & data_handler::DONE) + break; + } + + DEBUG_LOG("|"); + return EB_OK; + } + + eth_buffer::result + eth_buffer::tx_frame(const void *base, size_t len, int flags) + { + DEBUG_LOG("T"); + + if (flags & EF_DONTWAIT) // FIXME: implement flags + throw std::runtime_error("tx_frame: EF_DONTWAIT not implemented"); + + int res = d_ethernet->write_packet(base, len); + if (res < 0 || (unsigned int)res != len) + return EB_ERROR; + + return EB_OK; + } + + eth_buffer::result + eth_buffer::tx_framev(const eth_iovec *iov, int iovcnt, int flags) + { + DEBUG_LOG("T"); + + if (flags & EF_DONTWAIT) // FIXME: implement flags + throw std::runtime_error("tx_frame: EF_DONTWAIT not implemented"); + + int res = d_ethernet->write_packetv(iov, iovcnt); + if (res < 0) + return EB_ERROR; + + return EB_OK; + } + + void + eth_buffer::release_frame(void *base) + { + // Get d_frame_size aligned header + tpacket_hdr *hdr = (tpacket_hdr *)((intptr_t)base & ~(d_frame_size-1)); + hdr->tp_status = TP_STATUS_KERNEL; // mark it free + } + +} // namespace usrp2 diff --git a/usrp2/host/lib/eth_buffer.h b/usrp2/host/lib/eth_buffer.h new file mode 100644 index 00000000..8dee9a4a --- /dev/null +++ b/usrp2/host/lib/eth_buffer.h @@ -0,0 +1,198 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_USRP2_ETH_BUFFER_H +#define INCLUDED_USRP2_ETH_BUFFER_H + +#include "pktfilter.h" +#include +#include +#include +#include +#include + +namespace usrp2 { + + class ethernet; + class data_handler; + + /*! + * \brief high-performance interface to send and receive raw + * ethernet frames with out-of-order retirement of received frames. + * + * On many systems it should be possible to implement this on top of libpcap + * + * \internal + */ + class eth_buffer : boost::noncopyable + { + + int d_fd; // socket file descriptor + uint8_t d_mac[6]; // our mac address + bool d_using_tpring; // using kernel mapped packet ring + size_t d_buflen; // length of our buffer + uint8_t *d_buf; // packet ring + unsigned int d_frame_nr; // max frames on ring + size_t d_frame_size; // frame storage size + unsigned int d_head; // pointer to next frame + + std::vector d_ring; // pointers into buffer + std::auto_ptr d_ethernet; // our underlying interface + + bool frame_available(); + + void inc_head() + { + if (d_head + 1 >= d_frame_nr) + d_head = 0; + else + d_head = d_head + 1; + } + + + public: + + enum result { + EB_OK, //< everything's fine + EB_ERROR, //< A non-recoverable error occurred + EB_WOULD_BLOCK, //< A timeout of 0 was specified and nothing was ready + EB_TIMED_OUT, //< The timeout expired before anything was ready + }; + + static const unsigned int MAX_PKTLEN = 1512; + static const unsigned int MIN_PKTLEN = 64; + + /*! + * \param rx_bufsize is a hint as to the number of bytes of memory + * to allocate for received ethernet frames (0 -> reasonable default) + */ + eth_buffer(size_t rx_bufsize = 0); + ~eth_buffer(); + + /*! + * \brief open the specified interface + * + * \param ifname ethernet interface name, e.g., "eth0" + * \param protocol is the ethertype protocol number in network order. + * Use 0 to receive all protocols. + */ + bool open(const std::string &ifname, int protocol); + + /*! + * \brief close the interface + */ + bool close(); + + /*! + * \brief attach packet filter to socket to restrict which packets read sees. + * \param pf the packet filter + */ + bool attach_pktfilter(pktfilter *pf); + + /*! + * \brief return 6 byte string containing our MAC address + */ + const uint8_t *mac() const { return d_mac; } + + /*! + * \brief Call \p f for each frame in the receive buffer. + * \param f is the frame data handler + * \param timeout (in ms) controls behavior when there are no frames to read + * + * If \p timeout is 0, rx_frames will not wait for frames if none are + * available, and f will not be invoked. If \p timeout is -1 (the + * default), rx_frames will block indefinitely until frames are + * available. If \p timeout is positive, it indicates the number of + * milliseconds to wait for a frame to become available. Once the + * timeout has expired, rx_frames will return, f never having been + * invoked. + * + * \p f will be called on each ethernet frame that is available. + * \p f returns a bit mask with one of the following set or cleared: + * + * data_handler::KEEP - hold onto the frame and present it again during + * the next call to rx_frames, otherwise discard it + * + * data_handler::DONE - return from rx_frames now even though more frames + * might be available; otherwise continue if more + * frames are ready. + * + * The idea of holding onto a frame for the next iteration allows + * the caller to scan the received packet stream for particular + * classes of frames (such as command replies) leaving the rest + * intact. On the next call all kept frames, followed by any new + * frames received, will be presented in order to \p f. + * See usrp2.cc for an example of the pattern. + * + * \returns EB_OK if at least one frame was received + * \returns EB_WOULD_BLOCK if \p timeout is 0 and the call would have blocked + * \returns EB_TIMED_OUT if timeout occurred + * \returns EB_ERROR if there was an unrecoverable error. + */ + result rx_frames(data_handler *f, int timeout=-1); + + /* + * \brief Release frame from buffer + * + * Call to release a frame previously held by a data_handler::KEEP. + * The pointer may be offset from the base of the frame up to its length. + */ + void release_frame(void *p); + + /* + * \brief Write an ethernet frame to the interface. + * + * \param base points to the beginning of the frame (the 14-byte ethernet header). + * \param len is the length of the frame in bytes. + * \param flags is 0 or the bitwise-or of values from eth_flags + * + * The frame must begin with a 14-byte ethernet header. + * + * \returns EB_OK if the frame was successfully enqueued. + * \returns EB_WOULD_BLOCK if flags contains EF_DONT_WAIT and the call would have blocked. + * \returns EB_ERROR if there was an unrecoverable error. + */ + result tx_frame(const void *base, size_t len, int flags=0); + + /* + * \brief Write an ethernet frame to the interface using scatter/gather. + * + * \param iov points to an array of iovec structs + * \param iovcnt is the number of entries + * \param flags is 0 or the bitwise-or of values from eth_flags + * + * The frame must begin with a 14-byte ethernet header. + * + * \returns EB_OK if the frame was successfully enqueued. + * \returns EB_WOULD_BLOCK if flags contains EF_DONT_WAIT and the call would have blocked. + * \returns EB_ERROR if there was an unrecoverable error. + */ + result tx_framev(const eth_iovec *iov, int iovcnt, int flags=0); + + /* + * \brief Returns maximum possible number of frames in buffer + */ + unsigned int max_frames() const { return d_frame_nr; } + + }; + +}; // namespace usrp2 + +#endif /* INCLUDED_USRP2_ETH_BUFFER_H */ diff --git a/usrp2/host/lib/eth_common.h b/usrp2/host/lib/eth_common.h new file mode 100644 index 00000000..7c9feaa2 --- /dev/null +++ b/usrp2/host/lib/eth_common.h @@ -0,0 +1,38 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_USRP2_ETH_COMMON_H +#define INCLUDED_USRP2_ETH_COMMON_H + +#include // FIXME autoconf this + +namespace usrp2 { + + enum eth_flags { + EF_DONTWAIT = 0x0001, + }; + + typedef struct iovec eth_iovec; // FIXME autoconf this + +} // namespace usrp2 + + +#endif /* INCLUDED_USRP2_ETH_COMMON_H */ diff --git a/usrp2/host/lib/ethernet.cc b/usrp2/host/lib/ethernet.cc new file mode 100644 index 00000000..e51680b2 --- /dev/null +++ b/usrp2/host/lib/ethernet.cc @@ -0,0 +1,230 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "eth_buffer.h" +#include "ethernet.h" +#include "pktfilter.h" +#include + +#include +#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include // packet filter + +namespace usrp2 { + + static int + open_packet_socket (std::string ifname, int protocol) + { +#if 0 + if (protocol == 0) + protocol = htons(ETH_P_ALL); + + int fd = socket (PF_PACKET, SOCK_RAW, protocol); +#else + int fd = usrp2::open_usrp2_socket(); +#endif + + if (fd == -1){ + fprintf (stderr, "%s: socket: %s\n", ifname.c_str(), strerror (errno)); + return -1; + } + + // get interface index + struct ifreq ifr; + memset (&ifr, 0, sizeof(ifr)); + strncpy (ifr.ifr_name, ifname.c_str(), sizeof (ifr.ifr_name)); + int res = ioctl (fd, SIOCGIFINDEX, &ifr); + if (res != 0){ + ::close (fd); + fprintf (stderr, "%s: SIOCGIFINDEX: %s\n", ifname.c_str(), strerror(errno)); + return -1; + } + int ifindex = ifr.ifr_ifindex; + + // bind to the specified interface + sockaddr_ll sa; + memset (&sa, 0, sizeof (sa)); + sa.sll_family = AF_PACKET; + sa.sll_protocol = protocol; + sa.sll_ifindex = ifindex; + res = bind (fd, (struct sockaddr *)&sa, sizeof (sa)); + if (res != 0){ + ::close (fd); + fprintf (stderr, "%s: bind: %s\n", ifname.c_str(), strerror(errno)); + return -1; + } + return fd; + } + + static void + extract_mac_addr (unsigned char *mac, const unsigned char *hwaddr) + { + int i; + for (i = 0; i < 6; i++) + mac[i] = 0xff; + + i = 0; + for (int j = 0; j < 14; j++){ + if (hwaddr[j] != 0xff){ + mac[i++] = hwaddr[j]; + if (i == 6) + return; + } + } + } + + static bool + get_mac_addr (std::string ifname, int fd, unsigned char *mac) + { + struct ifreq ifr; + memset (&ifr, 0, sizeof(ifr)); + strncpy (ifr.ifr_name, ifname.c_str(), sizeof (ifr.ifr_name)); + int res = ioctl (fd, SIOCGIFHWADDR, &ifr); + if (res != 0){ + fprintf (stderr, "%s: SIOCGIFHWADDR: %s\n", ifname.c_str(), strerror(errno)); + return false; + } + else { + if (0){ + for (unsigned i = 0; i < sizeof (ifr.ifr_hwaddr.sa_data); i++) + fprintf (stderr, "%02x", ifr.ifr_hwaddr.sa_data[i]); + fprintf (stderr, "\n"); + } + } + extract_mac_addr (mac, (unsigned char *)ifr.ifr_hwaddr.sa_data); + return true; + } + + ethernet::ethernet () + { + d_fd = -1; + memset (d_mac, 0, sizeof (d_mac)); + } + + ethernet::~ethernet () + { + close (); + } + + bool + ethernet::open (std::string ifname, int protocol) + { + if (d_fd != -1){ + fprintf (stderr, "ethernet: already open\n"); + return false; + } + if ((d_fd = open_packet_socket (ifname, protocol)) == -1){ + return false; + } + get_mac_addr (ifname, d_fd, d_mac); + return true; + } + + bool + ethernet::close () + { + if (d_fd >= 0){ + ::close (d_fd); + d_fd = -1; + } + return true; + } + + int + ethernet::read_packet (void *buf, int buflen) + { + int len = recvfrom (d_fd, buf, buflen, 0, (sockaddr *) 0, 0); + return len; + } + + int + ethernet::read_packet_dont_block (void *buf, int buflen) + { + int len = recvfrom (d_fd, buf, buflen, MSG_DONTWAIT, 0, 0); + if (len == -1 && errno == EAGAIN) + return 0; + + return len; + } + + int + ethernet::write_packet (const void *buf, int buflen) + { + int retval = send (d_fd, buf, buflen, 0); + if (retval < 0){ + if (errno == EINTR) + return write_packet (buf, buflen); + + perror ("ethernet:write_packet: send"); + return -1; + } + return retval; + } + + int + ethernet::write_packetv(const eth_iovec *iov, size_t iovlen) + { + struct msghdr mh; + memset(&mh, 0, sizeof(mh)); + mh.msg_iov = const_cast(iov); + mh.msg_iovlen = iovlen; + + int retval = sendmsg(d_fd, &mh, 0); + if (retval < 0){ + if (errno == EINTR) + return write_packetv(iov, iovlen); + + perror("ethernet:write_packetv: send"); + return -1; + } + return retval; + } + + bool + ethernet::attach_pktfilter (pktfilter *pf) + { + struct sock_fprog filter; + filter.len = pf->d_len; + filter.filter = pf->d_inst; + + int r = setsockopt (d_fd, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof (filter)); + if (r < 0){ + perror ("ethernet:attach: SO_ATTACH_FILTER"); + return false; + } + return true; + } + +} // namespace usrp2 diff --git a/usrp2/host/lib/ethernet.h b/usrp2/host/lib/ethernet.h new file mode 100644 index 00000000..24624f44 --- /dev/null +++ b/usrp2/host/lib/ethernet.h @@ -0,0 +1,124 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_ETHERNET_H +#define INCLUDED_USRP2_ETHERNET_H + +#include +#include +#include + +namespace usrp2 { + + class pktfilter; + + /*! + * \brief Read and write ethernet frames. + * + * This provides a low level interface to hardware that communicates + * via raw (non-IP) ethernet frames. + */ + class ethernet { + int d_fd; + uint8_t d_mac[6]; + + public: + ethernet (); + ~ethernet (); + + static const int MAX_PKTLEN = 1512; + static const int MIN_PKTLEN = 64; + + /*! + * \param ifname ethernet interface name, e.g., "eth0" + * \param protocol is the ethertype protocol number in network order. + * Use 0 to receive all protocols. + */ + bool open (std::string ifname, int protocol); + + bool close (); + + /*! + * \brief attach packet filter to socket to restrict which packets read sees. + * \param pf the packet filter + */ + bool attach_pktfilter (pktfilter *pf); + + /*! + * \brief return 6 byte string containing our MAC address + */ + const uint8_t *mac () const { return d_mac; } + + /*! + * \brief Return file descriptor associated with socket. + */ + int fd () const { return d_fd; } + + /*! + * \brief Read packet from interface. + * + * \param buf where to put the packet + * \param buflen maximum length of packet in bytes (should be >= 1528) + * + * \returns number of bytes read or -1 if trouble. + * + * Returned packet includes 14-byte ethhdr + */ + int read_packet (void *buf, int buflen); + + /*! + * \brief Read packet from interface, but don't block waiting + * + * \param buf where to put the packet + * \param buflen maximum length of packet in bytes (should be >= 1528) + * + * \returns number of bytes read, -1 if trouble or 0 if nothing available. + * + * Returned packet includes 14-byte ethhdr + */ + int read_packet_dont_block (void *buf, int buflen); + + /* + * \brief Write ethernet packet to interface. + * + * \param buf the packet to write + * \param buflen length of packet in bytes + * + * \returns number of bytes written or -1 if trouble. + * + * Packet must begin with 14-byte ethhdr, but does not include the FCS. + */ + int write_packet (const void *buf, int buflen); + + /* + * \brief Write ethernet packet to interface. + * + * \param iov scatter/gather array + * \param iovlen number of elements in iov + * + * \returns number of bytes written or -1 if trouble. + * + * Packet must begin with 14-byte ethhdr, but does not include the FCS. + */ + int write_packetv (const eth_iovec *iov, size_t iovlen); + + }; + +} // namespace usrp2 + +#endif /* INCLUDED_USRP2_ETHERNET_H */ diff --git a/usrp2/host/lib/find.cc b/usrp2/host/lib/find.cc new file mode 100644 index 00000000..d1df47fc --- /dev/null +++ b/usrp2/host/lib/find.cc @@ -0,0 +1,182 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include "ethernet.h" +#include "pktfilter.h" +#include +#include +#include +#include + +#define FIND_DEBUG 0 + + +// FIXME move to gruel + +static struct timeval +time_duration_to_timeval(boost::posix_time::time_duration delta) +{ + long total_us = delta.total_microseconds(); + if (total_us < 0) + throw std::invalid_argument("duration_to_time: delta is negative"); + + struct timeval tv; + tv.tv_sec = total_us / 1000000; + tv.tv_usec = total_us % 1000000; + return tv; +} + + +namespace usrp2 { + + static props + reply_to_props(const op_id_reply_t *r) + { + const uint8_t *mac = (const uint8_t *)&r->addr; + char addr_buf[128]; + snprintf(addr_buf, sizeof(addr_buf), "%02x:%02x:%02x:%02x:%02x:%02x", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + + props p; + p.addr = std::string(addr_buf); + p.hw_rev = ntohs(r->hw_rev); + memcpy(p.fpga_md5sum, r->fpga_md5sum, sizeof(p.fpga_md5sum)); + memcpy(p.sw_md5sum, r->sw_md5sum, sizeof(p.sw_md5sum)); + return p; + } + + static void + read_replies(ethernet *enet, struct timeval timeout, + const std::string &target_addr, props_vector_t &result) + { + struct reply { + u2_eth_packet_t h; + op_id_reply_t op_id_reply; + }; + + uint8_t pktbuf[ethernet::MAX_PKTLEN]; + memset(pktbuf, 0, sizeof(pktbuf)); + + fd_set read_fds; + FD_ZERO(&read_fds); + FD_SET(enet->fd(), &read_fds); + + select(enet->fd()+1, &read_fds, 0, 0, &timeout); + while(1) { + memset(pktbuf, 0, sizeof(pktbuf)); + int len = enet->read_packet_dont_block(pktbuf, sizeof(pktbuf)); + if (len < 0){ + perror("usrp2_basic: read_packet_dont_block"); + return; + } + if (len == 0) + break; + + reply *rp = (reply *)pktbuf; + if (u2p_chan(&rp->h.fixed) != CONTROL_CHAN) // ignore + continue; + if (rp->op_id_reply.opcode != OP_ID_REPLY) // ignore + continue; + + props p = reply_to_props(&rp->op_id_reply); + if (FIND_DEBUG) + std::cerr << "usrp2::find: response from " << p.addr << std::endl; + + if ((target_addr == "") || (target_addr == p.addr)) + result.push_back(p); + } + } + + props_vector_t + find(const std::string &ifc, const std::string &addr) + { + if (FIND_DEBUG) { + std::cerr << "usrp2::find: Searching interface " << ifc << " for " + << (addr == "" ? "all USRP2s" : addr) + << std::endl; + } + + props_vector_t result; + struct command { + u2_eth_packet_t h; + op_generic_t op_id; + }; + + std::auto_ptr enet(new ethernet()); + + if (!enet->open(ifc, htons(U2_ETHERTYPE))) + return result; + + std::auto_ptr pf(pktfilter::make_ethertype_inbound(U2_ETHERTYPE, enet->mac())); + if (!enet->attach_pktfilter(pf.get())) + return result; + + static u2_mac_addr_t broadcast_mac_addr = + {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}; + + uint8_t pktbuf[ethernet::MAX_PKTLEN]; + memset(pktbuf, 0, sizeof(pktbuf)); + + command *c = (command *)pktbuf; + c->h.ehdr.ethertype = htons(U2_ETHERTYPE); + c->h.ehdr.dst = broadcast_mac_addr; + memcpy(&c->h.ehdr.src, enet->mac(), 6); + c->h.thdr.flags = 0; + c->h.thdr.seqno = 0; + c->h.thdr.ack = 0; + u2p_set_word0(&c->h.fixed, 0, CONTROL_CHAN); + u2p_set_timestamp(&c->h.fixed, -1); + c->op_id.opcode = OP_ID; + c->op_id.len = sizeof(c->op_id); + int len = std::max((size_t) ethernet::MIN_PKTLEN, sizeof(command)); + if (enet->write_packet(c, len) != len) + return result; + + if (FIND_DEBUG) + std::cerr << "usrp2::find: broadcast ID command" << std::endl; + + /* + * Gather all responses that occur within 50ms + */ + boost::posix_time::ptime start(boost::posix_time::microsec_clock::universal_time()); + boost::posix_time::ptime limit(start + boost::posix_time::milliseconds(50)); + boost::posix_time::ptime now; + + while (1){ + now = boost::posix_time::microsec_clock::universal_time(); + if (now >= limit) + break; + + boost::posix_time::time_duration delta(limit - now); + struct timeval timeout = time_duration_to_timeval(delta); + + read_replies(enet.get(), timeout, addr, result); + } + return result; + } + +} // namespace usrp2 + diff --git a/usrp2/host/lib/open_usrp2_socket.cc b/usrp2/host/lib/open_usrp2_socket.cc new file mode 100644 index 00000000..cd729205 --- /dev/null +++ b/usrp2/host/lib/open_usrp2_socket.cc @@ -0,0 +1,130 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +static const char *helper = "usrp2_socket_opener"; + +static ssize_t +read_fd(int fd, void *ptr, size_t nbytes, int *recvfd) +{ + struct msghdr msg; + struct iovec iov[1]; + ssize_t n; + +#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL + union { + struct cmsghdr cm; + char control[CMSG_SPACE(sizeof (int))]; + } control_un; + struct cmsghdr *cmptr; + + msg.msg_control = control_un.control; + msg.msg_controllen = sizeof(control_un.control); +#else + int newfd; + + msg.msg_accrights = (char *) &newfd; + msg.msg_accrightslen = sizeof(int); +#endif + + msg.msg_name = NULL; + msg.msg_namelen = 0; + + iov[0].iov_base = ptr; + iov[0].iov_len = nbytes; + msg.msg_iov = iov; + msg.msg_iovlen = 1; + + if ((n = recvmsg(fd, &msg, 0)) <= 0) + return n; + +#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL + if ((cmptr = CMSG_FIRSTHDR(&msg)) != NULL + && cmptr->cmsg_len == CMSG_LEN(sizeof(int))){ + if (cmptr->cmsg_level != SOL_SOCKET){ + fprintf(stderr, "read_fd: control level != SOL_SOCKET\n"); + return -1; + } + if (cmptr->cmsg_type != SCM_RIGHTS){ + fprintf(stderr, "read_fd: control type != SCM_RIGHTS\n"); + return -1; + } + *recvfd = *((int *) CMSG_DATA(cmptr)); + } else + *recvfd = -1; /* descriptor was not passed */ +#else + if (msg.msg_accrightslen == sizeof(int)) + *recvfd = newfd; + else + *recvfd = -1; /* descriptor was not passed */ +#endif + + return n; +} + +int +usrp2::open_usrp2_socket() +{ + int fd = -1, sockfd[2], status; + pid_t childpid; + char c, argsockfd[10]; + + if (socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd) != 0){ + perror("socketpair"); + return -1; + } + + if ((childpid = fork()) == 0) { /* child process */ + close(sockfd[0]); + snprintf(argsockfd, sizeof(argsockfd), "%d", sockfd[1]); + execlp(helper, helper, argsockfd, (char *) NULL); + std::string msg("execlp: couldn't exec " + std::string(helper)); + perror(msg.c_str()); + close(sockfd[0]); + close(sockfd[1]); + return -1; + } + + /* parent process - wait for the child to terminate */ + close(sockfd[1]); /* close the end we don't use */ + + waitpid(childpid, &status, 0); + if (!WIFEXITED(status)){ + fprintf(stderr, "child did not terminate\n"); + return -1; + } + if ((status = WEXITSTATUS(status)) == 0) + read_fd(sockfd[0], &c, 1, &fd); + else { + errno = status; /* bogus: set errno value from child's status */ + fd = -1; + } + + close(sockfd[0]); + return (fd); +} diff --git a/usrp2/host/lib/open_usrp2_socket.h b/usrp2/host/lib/open_usrp2_socket.h new file mode 100644 index 00000000..d42440ea --- /dev/null +++ b/usrp2/host/lib/open_usrp2_socket.h @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ +#ifndef INCLUDED_OPEN_USRP2_SOCKET_H +#define INCLUDED_OPEN_USRP2_SOCKET_H + +namespace usrp2 { + + /*! + * Return the result of executing: + * + * int fd = socket(PF_PACKET, SOCK_RAW, htons(0xBEEF)); + * + * Doing it in a way that we don't need to be running as root. + */ + int open_usrp2_socket(); +}; + + +#endif /* INCLUDED_OPEN_USRP2_SOCKET_H */ diff --git a/usrp2/host/lib/pktfilter.cc b/usrp2/host/lib/pktfilter.cc new file mode 100644 index 00000000..1ccf9044 --- /dev/null +++ b/usrp2/host/lib/pktfilter.cc @@ -0,0 +1,187 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "pktfilter.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // packet filter + +namespace usrp2 { + + /* + * This is all based on the Berkeley Packet Filter (BPF) as implemented on Linux. + * + * The BPF allows you to run an interpreted program (a filter) in the + * kernel that sorts through the packets looking for ones you are + * interested in. This eliminates the overhead of passing all of the + * networking packets up into user space for filtering there. + * + * For documentation on this see + * /usr/src/linux/Documentation/networking/filter.txt, The BSD + * Berkeley Packet Filter manual page, and "The BSD Packet Filter: A + * New Architecture for User-level Packet Capture", by Steven McCanne + * and Van Jacobson. + */ + + pktfilter::pktfilter () + : d_len (0), d_inst (0) + { + // NOP + } + + pktfilter::~pktfilter () + { + delete [] d_inst; + } + + inline static sock_filter + make_stmt (__u16 code, __u32 k) + { + sock_filter f; + f.code = code; + f.jt = 0; + f.jf = 0; + f.k = k; + return f; + } + + inline static sock_filter + make_jump (__u16 code, __u32 k, __u8 jt, __u8 jf) + { + sock_filter f; + f.code = code; + f.jt = jt; + f.jf = jf; + f.k = k; + return f; + } + + /* + * Return a filter that harvests packets with the specified ethertype. + */ + pktfilter * + pktfilter::make_ethertype (unsigned short ethertype) + { + static const int MAX_LEN = 20; + sock_filter *inst = new sock_filter [MAX_LEN]; + pktfilter *pf = new pktfilter (); + + // nothing quite like coding in assembly without the benefit of an assembler ;-) + + // ignore packets that don't have the right ethertype + + int i = 0; + inst[i++] = make_stmt (BPF_LD|BPF_H|BPF_ABS, 12); // load ethertype + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, ethertype, 1, 0); + inst[i++] = make_stmt (BPF_RET|BPF_K, 0); // return 0 (ignore packet) + inst[i++] = make_stmt (BPF_RET|BPF_K, (unsigned) -1); // return whole packet + + assert (i <= MAX_LEN); + + pf->d_inst = inst; + pf->d_len = i; + + return pf; + } + + /* + * Return a filter that harvests inbound packets with the specified ethertype. + * \param ethertype the ethertype we're looking for + * \param our_mac our ethernet MAC address so we can avoid pkts we sent + */ + pktfilter * + pktfilter::make_ethertype_inbound (unsigned short ethertype, const unsigned char *our_mac) + { + static const int MAX_LEN = 20; + sock_filter *inst = new sock_filter [MAX_LEN]; + pktfilter *pf = new pktfilter (); + + __u16 smac_hi = (our_mac[0] << 8) | our_mac[1]; + __u32 smac_lo = (our_mac[2] << 24) | (our_mac[3] << 16) | (our_mac[4] << 8) | our_mac[5]; + + // nothing quite like coding in assembly without the benefit of an assembler ;-) + + // ignore packets that have a different ethertype + // and packets that have a source mac address == our_mac (packets we sent) + + int i = 0; + inst[i++] = make_stmt (BPF_LD|BPF_H|BPF_ABS, 12); // load ethertype + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, ethertype, 0, 5); + inst[i++] = make_stmt (BPF_LD|BPF_W|BPF_ABS, 8); // load low 32-bit of src mac + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, smac_lo, 0, 2); + inst[i++] = make_stmt (BPF_LD|BPF_H|BPF_ABS, 6); // load high 16-bits of src mac + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, smac_hi, 1, 0); + inst[i++] = make_stmt (BPF_RET|BPF_K, (unsigned) -1); // return whole packet + inst[i++] = make_stmt (BPF_RET|BPF_K, 0); // return 0 (ignore packet) + + assert (i <= MAX_LEN); + + pf->d_inst = inst; + pf->d_len = i; + + return pf; + } + /* + * Return a filter that harvests inbound packets with the specified ethertype and target USRP2 MAC address. + * \param ethertype the ethertype we're looking for + * \param usrp_mac our target USRP2 MAC address + */ + pktfilter * + pktfilter::make_ethertype_inbound_target (unsigned short ethertype, const unsigned char *usrp_mac) + { + static const int MAX_LEN = 20; + sock_filter *inst = new sock_filter [MAX_LEN]; + pktfilter *pf = new pktfilter (); + + __u16 tmac_hi = (usrp_mac[0] << 8) | usrp_mac[1]; + __u32 tmac_lo = (usrp_mac[2] << 24) | (usrp_mac[3] << 16) | (usrp_mac[4] << 8) | usrp_mac[5]; + + // ignore packets that have a different ethertype + // and only return packets that have a source mac address == usrp_mac + + int i = 0; + inst[i++] = make_stmt (BPF_LD|BPF_H|BPF_ABS, 12); // load ethertype + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, ethertype, 0, 5); + inst[i++] = make_stmt (BPF_LD|BPF_W|BPF_ABS, 8); // load low 32-bit of src mac + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, tmac_lo, 0, 3); + inst[i++] = make_stmt (BPF_LD|BPF_H|BPF_ABS, 6); // load high 16-bits of src mac + inst[i++] = make_jump (BPF_JMP|BPF_JEQ|BPF_K, tmac_hi, 0, 1); + inst[i++] = make_stmt (BPF_RET|BPF_K, (unsigned) -1); // return whole packet + inst[i++] = make_stmt (BPF_RET|BPF_K, 0); // return 0 (ignore packet) + + assert (i <= MAX_LEN); + + pf->d_inst = inst; + pf->d_len = i; + + return pf; + } + +} // namespace usrp2 diff --git a/usrp2/host/lib/pktfilter.h b/usrp2/host/lib/pktfilter.h new file mode 100644 index 00000000..09937ae3 --- /dev/null +++ b/usrp2/host/lib/pktfilter.h @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005,2007,2008 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_PKTFILTER_H +#define INCLUDED_USRP2_PKTFILTER_H + +struct sock_filter; + +namespace usrp2 { + + /* + * \brief Compile programs for the Berkeley Packet Filter + */ + class pktfilter { + public: + + unsigned d_len; // # of instructions + struct sock_filter *d_inst; // the instructions + + pktfilter (); + ~pktfilter (); + + /*! + * \brief Return a filter that harvests packets with the specified ethertype. + * \param ethertype the ethertype we're looking for. + */ + static pktfilter *make_ethertype (unsigned short ethertype); + + /*! + * \brief Return a filter that harvests inbound packets with the specified ethertype. + * \param ethertype the ethertype we're looking for + * \param our_mac our MAC address so we can avoid pkts we sent + */ + static pktfilter *make_ethertype_inbound (unsigned short ethertype, + const unsigned char *our_mac); + + /*! + * \brief Return a filter that harvests inbound packets with the specified ethertype + * and source MAC address + * \param ethertype the ethertype we're looking for + * \param usrp_mac the source MAC address + */ + static pktfilter *make_ethertype_inbound_target (unsigned short ethertype, + const unsigned char *usrp_mac); + }; + +} // namespace usrp2 + +#endif /* INCLUDED_USRP2_PKTFILTER_H */ diff --git a/usrp2/host/lib/ring.cc b/usrp2/host/lib/ring.cc new file mode 100644 index 00000000..3c45821f --- /dev/null +++ b/usrp2/host/lib/ring.cc @@ -0,0 +1,78 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "ring.h" + +namespace usrp2 { + + ring::ring(unsigned int entries) + : d_max(entries), d_read_ind(0), d_write_ind(0), d_ring(entries), + d_mutex(), d_not_empty(&d_mutex) + { + for (unsigned int i = 0; i < entries; i++) { + d_ring[i].d_base = 0; + d_ring[i].d_len = 0; + } + } + + void + ring::wait_for_not_empty() + { + omni_mutex_lock l(d_mutex); + while (empty()) + d_not_empty.wait(); + } + + bool + ring::enqueue(void *p, size_t len) + { + omni_mutex_lock l(d_mutex); + if (full()) + return false; + + d_ring[d_write_ind].d_len = len; + d_ring[d_write_ind].d_base = p; + + inc_write_ind(); + d_not_empty.signal(); + return true; + } + + bool + ring::dequeue(void **p, size_t *len) + { + omni_mutex_lock l(d_mutex); + if (empty()) + return false; + + *p = d_ring[d_read_ind].d_base; + *len = d_ring[d_read_ind].d_len; + + inc_read_ind(); + return true; + } + +} // namespace usrp2 + diff --git a/usrp2/host/lib/ring.h b/usrp2/host/lib/ring.h new file mode 100644 index 00000000..19ae9ae9 --- /dev/null +++ b/usrp2/host/lib/ring.h @@ -0,0 +1,83 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_RING_H +#define INCLUDED_RING_H + +#include +#include +#include +#include + +namespace usrp2 { + + class ring; + typedef boost::shared_ptr ring_sptr; + + class ring + { + private: + + size_t d_max; + size_t d_read_ind; + size_t d_write_ind; + + struct ring_desc + { + void *d_base; + size_t d_len; + }; + std::vector d_ring; + + omni_mutex d_mutex; + omni_condition d_not_empty; + + void inc_read_ind() + { + if (d_read_ind + 1 >= d_max) + d_read_ind = 0; + else + d_read_ind = d_read_ind + 1; + } + + void inc_write_ind() + { + if (d_write_ind + 1 >= d_max) + d_write_ind = 0; + else + d_write_ind = d_write_ind + 1; + } + + bool empty() const { return d_read_ind == d_write_ind; } + bool full() const { return (d_write_ind+1)%d_max == d_read_ind; } + + public: + + ring(unsigned int entries); + + void wait_for_not_empty(); + + bool enqueue(void *p, size_t len); + bool dequeue(void **p, size_t *len); + }; + +} // namespace usrp2 + +#endif /* INCLUDED_RING_H */ diff --git a/usrp2/host/lib/rx_nop_handler.cc b/usrp2/host/lib/rx_nop_handler.cc new file mode 100644 index 00000000..96c9164a --- /dev/null +++ b/usrp2/host/lib/rx_nop_handler.cc @@ -0,0 +1,35 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +namespace usrp2 { + + rx_nop_handler::~rx_nop_handler() + { + } + +} // namespace usrp2 + diff --git a/usrp2/host/lib/rx_sample_handler.cc b/usrp2/host/lib/rx_sample_handler.cc new file mode 100644 index 00000000..4521025c --- /dev/null +++ b/usrp2/host/lib/rx_sample_handler.cc @@ -0,0 +1,27 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include + +usrp2::rx_sample_handler::~rx_sample_handler() +{ + // nop +} diff --git a/usrp2/host/lib/strtod_si.c b/usrp2/host/lib/strtod_si.c new file mode 100644 index 00000000..5e5deb2b --- /dev/null +++ b/usrp2/host/lib/strtod_si.c @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 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 3 of the License, 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 program. If not, see . + */ + +#include +#include + +#define true 1 +#define false 0 + +int +strtod_si(const char *s, double *result) +{ + *result = 0; + + char *endptr; + double r = strtod(s, &endptr); + if (s == endptr) + return false; + + switch (*endptr){ + case 'p': r *= 1e-12; break; + case 'n': r *= 1e-9; break; + case 'u': r *= 1e-6; break; + case 'm': r *= 1e-3; break; + case 'k': r *= 1e3; break; + case 'M': r *= 1e6; break; + case 'G': r *= 1e9; break; + case 'T': r *= 1e12; break; + default: + // ignore. FIXME could be more robust + break; + } + + *result = r; + return true; +} + + diff --git a/usrp2/host/lib/usrp2.cc b/usrp2/host/lib/usrp2.cc new file mode 100644 index 00000000..a2a9ecc1 --- /dev/null +++ b/usrp2/host/lib/usrp2.cc @@ -0,0 +1,482 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include "usrp2_impl.h" +#include +#include +#include +#include +#include +#include + +namespace usrp2 { + + // --- Table of weak pointers to usrps we know about --- + + // (Could be cleaned up and turned into a template) + + struct usrp_table_entry { + // inteface + normalized mac addr ("eth0:01:23:45:67:89:ab") + std::string key; + boost::weak_ptr value; + + usrp_table_entry(const std::string &_key, boost::weak_ptr _value) + : key(_key), value(_value) {} + }; + + typedef std::vector usrp_table; + + static boost::mutex s_table_mutex; + static usrp_table s_table; + + usrp2::sptr + usrp2::find_existing_or_make_new(const std::string &ifc, props *pr, size_t rx_bufsize) + { + std::string key = ifc + ":" + pr->addr; + + boost::mutex::scoped_lock guard(s_table_mutex); + + for (usrp_table::iterator p = s_table.begin(); p != s_table.end();){ + if (p->value.expired()) // weak pointer is now dead + p = s_table.erase(p); // erase it + else { + if (key == p->key) // found it + return usrp2::sptr(p->value); + else + ++p; // keep looking + } + } + + // We don't have the USRP2 we're looking for + + // create a new one and stick it in the table. + usrp2::sptr r(new usrp2::usrp2(ifc, pr, rx_bufsize)); + usrp_table_entry t(key, r); + s_table.push_back(t); + + return r; + } + + // --- end of table code --- + + static bool + parse_mac_addr(const std::string &s, std::string &ns) + { + u2_mac_addr_t p; + + p.addr[0] = 0x00; // Matt's IAB + p.addr[1] = 0x50; + p.addr[2] = 0xC2; + p.addr[3] = 0x85; + p.addr[4] = 0x30; + p.addr[5] = 0x00; + + int len = s.size(); + switch (len) { + + case 5: + if (sscanf(s.c_str(), "%hhx:%hhx", &p.addr[4], &p.addr[5]) != 2) + return false; + break; + + case 17: + if (sscanf(s.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", + &p.addr[0], &p.addr[1], &p.addr[2], + &p.addr[3], &p.addr[4], &p.addr[5]) != 6) + return false; + break; + + default: + return false; + } + + char buf[128]; + snprintf(buf, sizeof(buf), + "%02x:%02x:%02x:%02x:%02x:%02x", + p.addr[0],p.addr[1],p.addr[2], + p.addr[3],p.addr[4],p.addr[5]); + ns = std::string(buf); + return true; + } + + usrp2::sptr + usrp2::make(const std::string &ifc, const std::string &addr, size_t rx_bufsize) + { + std::string naddr = ""; + if (addr != "" && !parse_mac_addr(addr, naddr)) + throw std::runtime_error("Invalid MAC address"); + + props_vector_t u2s = find(ifc, naddr); + int n = u2s.size(); + + if (n == 0) { + if (addr == "") + throw std::runtime_error("No USRPs found on interface " + ifc); + else + throw std::runtime_error("No USRP found with addr " + addr + " on interface " + ifc); + } + + if (n > 1) + throw std::runtime_error("Multiple USRPs found on interface; must select by MAC address."); + + return find_existing_or_make_new(ifc, &u2s[0], rx_bufsize); + } + + // Private constructor. Sole function is to create an impl. + usrp2::usrp2(const std::string &ifc, props *p, size_t rx_bufsize) + : d_impl(new usrp2::impl(ifc, p, rx_bufsize)) + { + // NOP + } + + // Public class destructor. d_impl will auto-delete. + usrp2::~usrp2() + { + // NOP + } + + std::string + usrp2::mac_addr() + { + return d_impl->mac_addr(); + } + + std::string + usrp2::interface_name() + { + return d_impl->interface_name(); + } + + // Receive + + bool + usrp2::set_rx_gain(double gain) + { + return d_impl->set_rx_gain(gain); + } + + double + usrp2::rx_gain_min() + { + return d_impl->rx_gain_min(); + } + + double + usrp2::rx_gain_max() + { + return d_impl->rx_gain_max(); + } + + double + usrp2::rx_gain_db_per_step() + { + return d_impl->rx_gain_db_per_step(); + } + + bool + usrp2::set_rx_lo_offset(double frequency) + { + return d_impl->set_rx_lo_offset(frequency); + } + + bool + usrp2::set_rx_center_freq(double frequency, tune_result *result) + { + return d_impl->set_rx_center_freq(frequency, result); + } + + double + usrp2::rx_freq_min() + { + return d_impl->rx_freq_min(); + } + + double + usrp2::rx_freq_max() + { + return d_impl->rx_freq_max(); + } + + bool + usrp2::set_rx_decim(int decimation_factor) + { + return d_impl->set_rx_decim(decimation_factor); + } + + int + usrp2::rx_decim() + { + return d_impl->rx_decim(); + } + + bool + usrp2::set_rx_scale_iq(int scale_i, int scale_q) + { + return d_impl->set_rx_scale_iq(scale_i, scale_q); + } + + bool + usrp2::start_rx_streaming(unsigned int channel, unsigned int items_per_frame) + { + return d_impl->start_rx_streaming(channel, items_per_frame); + } + + bool + usrp2::rx_samples(unsigned int channel, rx_sample_handler *handler) + { + return d_impl->rx_samples(channel, handler); + } + + bool + usrp2::stop_rx_streaming(unsigned int channel) + { + return d_impl->stop_rx_streaming(channel); + } + + unsigned int + usrp2::rx_overruns() + { + return d_impl->rx_overruns(); + } + + unsigned int + usrp2::rx_missing() + { + return d_impl->rx_missing(); + } + + // Transmit + + bool + usrp2::set_tx_gain(double gain) + { + return d_impl->set_tx_gain(gain); + } + + double + usrp2::tx_gain_min() + { + return d_impl->tx_gain_min(); + } + + double + usrp2::tx_gain_max() + { + return d_impl->tx_gain_max(); + } + + double + usrp2::tx_gain_db_per_step() + { + return d_impl->tx_gain_db_per_step(); + } + + bool + usrp2::set_tx_lo_offset(double frequency) + { + return d_impl->set_tx_lo_offset(frequency); + } + + bool + usrp2::set_tx_center_freq(double frequency, tune_result *result) + { + return d_impl->set_tx_center_freq(frequency, result); + } + + double + usrp2::tx_freq_min() + { + return d_impl->tx_freq_min(); + } + + double + usrp2::tx_freq_max() + { + return d_impl->tx_freq_max(); + } + + + bool + usrp2::set_tx_interp(int interpolation_factor) + { + return d_impl->set_tx_interp(interpolation_factor); + } + + int + usrp2::tx_interp() + { + return d_impl->tx_interp(); + } + + void + usrp2::default_tx_scale_iq(int interpolation_factor, int *scale_i, int *scale_q) + { + d_impl->default_tx_scale_iq(interpolation_factor, scale_i, scale_q); + } + + bool + usrp2::set_tx_scale_iq(int scale_i, int scale_q) + { + return d_impl->set_tx_scale_iq(scale_i, scale_q); + } + + bool + usrp2::tx_32fc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata) + { + return d_impl->tx_32fc(channel, samples, nsamples, metadata); + } + + bool + usrp2::tx_16sc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata) + { + return d_impl->tx_16sc(channel, samples, nsamples, metadata); + } + + bool + usrp2::tx_raw(unsigned int channel, + const uint32_t *items, + size_t nitems, + const tx_metadata *metadata) + { + return d_impl->tx_raw(channel, items, nitems, metadata); + } + + // miscellaneous methods + + bool + usrp2::config_mimo(int flags) + { + return d_impl->config_mimo(flags); + } + + bool + usrp2::fpga_master_clock_freq(long *freq) + { + return d_impl->fpga_master_clock_freq(freq); + } + + bool + usrp2::adc_rate(long *rate) + { + return d_impl->adc_rate(rate); + } + + bool + usrp2::dac_rate(long *rate) + { + return d_impl->dac_rate(rate); + } + + bool + usrp2::tx_daughterboard_id(int *dbid) + { + return d_impl->tx_daughterboard_id(dbid); + } + + bool + usrp2::rx_daughterboard_id(int *dbid) + { + return d_impl->rx_daughterboard_id(dbid); + } + + + // low level methods + + bool + usrp2::burn_mac_addr(const std::string &new_addr) + { + return d_impl->burn_mac_addr(new_addr); + } + + bool + usrp2::sync_to_pps() + { + return d_impl->sync_to_pps(); + } + + bool + usrp2::sync_every_pps(bool enable) + { + return d_impl->sync_every_pps(enable); + } + + std::vector + usrp2::peek32(uint32_t addr, uint32_t words) + { + return d_impl->peek32(addr, words); + } + + bool + usrp2::poke32(uint32_t addr, const std::vector &data) + { + return d_impl->poke32(addr, data); + } + + bool + usrp2::set_gpio_ddr(int bank, uint16_t value, uint16_t mask) + { + return d_impl->set_gpio_ddr(bank, value, mask); + } + + bool + usrp2::set_gpio_sels(int bank, std::string src) + { + return d_impl->set_gpio_sels(bank, src); + } + + bool + usrp2::write_gpio(int bank, uint16_t value, uint16_t mask) + { + return d_impl->write_gpio(bank, value, mask); + } + + bool + usrp2::read_gpio(int bank, uint16_t *value) + { + return d_impl->read_gpio(bank, value); + } + + bool + usrp2::enable_gpio_streaming(int bank, int enable) + { + return d_impl->enable_gpio_streaming(bank, enable); + } + +} // namespace usrp2 + +std::ostream& operator<<(std::ostream &os, const usrp2::props &x) +{ + os << x.addr; + + char buf[128]; + snprintf(buf, sizeof(buf)," hw_rev = 0x%04x", x.hw_rev); + + os << buf; + return os; +} diff --git a/usrp2/host/lib/usrp2_bytesex.h b/usrp2/host/lib/usrp2_bytesex.h new file mode 100644 index 00000000..4f63d079 --- /dev/null +++ b/usrp2/host/lib/usrp2_bytesex.h @@ -0,0 +1,19 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#include diff --git a/usrp2/host/lib/usrp2_impl.cc b/usrp2/host/lib/usrp2_impl.cc new file mode 100644 index 00000000..1ecfd734 --- /dev/null +++ b/usrp2/host/lib/usrp2_impl.cc @@ -0,0 +1,1453 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include "usrp2_impl.h" +#include "usrp2_thread.h" +#include "eth_buffer.h" +#include "pktfilter.h" +#include "control.h" +#include "ring.h" +#include +#include +#include +#include +#include +#include + +#define USRP2_IMPL_DEBUG 0 +#if USRP2_IMPL_DEBUG +#define DEBUG_LOG(x) ::write(2, x, 1) +#else +#define DEBUG_LOG(x) +#endif + +static const int DEFAULT_RX_SCALE = 1024; + +namespace usrp2 { + + static const double DEF_CMD_TIMEOUT = 0.1; + + std::string + opcode_to_string(int opcode) + { + switch(opcode){ + case OP_EOP: return "OP_EOP"; + case OP_ID: return "OP_ID"; + case OP_ID_REPLY: return "OP_ID_REPLY"; + case OP_BURN_MAC_ADDR: return "OP_BURN_MAC_ADDR"; + case OP_READ_TIME: return "OP_READ_TIME"; + case OP_READ_TIME_REPLY: return "OP_READ_TIME_REPLY"; + case OP_CONFIG_RX_V2: return "OP_CONFIG_RX_V2"; + case OP_CONFIG_RX_REPLY_V2: return "OP_CONFIG_RX_REPLY_V2"; + case OP_CONFIG_TX_V2: return "OP_CONFIG_TX_V2"; + case OP_CONFIG_TX_REPLY_V2: return "OP_CONFIG_TX_REPLY_V2"; + case OP_START_RX_STREAMING: return "OP_START_RX_STREAMING"; + case OP_STOP_RX: return "OP_STOP_RX"; + case OP_CONFIG_MIMO: return "OP_CONFIG_MIMO"; + case OP_DBOARD_INFO: return "OP_DBOARD_INFO"; + case OP_DBOARD_INFO_REPLY: return "OP_DBOARD_INFO_REPLY"; + case OP_SYNC_TO_PPS: return "OP_SYNC_TO_PPS"; + case OP_PEEK: return "OP_PEEK"; + case OP_PEEK_REPLY: return "OP_PEEK_REPLY"; + case OP_SET_TX_LO_OFFSET: return "OP_SET_TX_LO_OFFSET"; + case OP_SET_TX_LO_OFFSET_REPLY: return "OP_SET_TX_LO_OFFSET_REPLY"; + case OP_SET_RX_LO_OFFSET: return "OP_SET_RX_LO_OFFSET"; + case OP_SET_RX_LO_OFFSET_REPLY: return "OP_SET_RX_LO_OFFSET_REPLY"; + case OP_SYNC_EVERY_PPS: return "OP_SYNC_EVERY_PPS"; + case OP_SYNC_EVERY_PPS_REPLY: return "OP_SYNC_EVERY_PPS_REPLY"; + + default: + char buf[64]; + snprintf(buf, sizeof(buf), "", opcode); + return buf; + } + } + + + /*! + * \param p points to fixed header + * \param payload_len_in_bytes is length of the fixed hdr and the payload + * \param[out] items is set to point to the first uint32 item in the payload + * \param[out] nitems is set to the number of uint32 items in the payload + * \param[out] md is filled in with the parsed metadata from the frame. + */ + static bool + parse_rx_metadata(void *p, size_t payload_len_in_bytes, + uint32_t **items, size_t *nitems_in_uint32s, rx_metadata *md) + { + if (payload_len_in_bytes < sizeof(u2_fixed_hdr_t)) // invalid format + return false; + + // FIXME deal with the fact that (p % 4) == 2 + //assert((((uintptr_t) p) % 4) == 0); // must be 4-byte aligned + + u2_fixed_hdr_t *fh = static_cast(p); + + // FIXME unaligned loads! + md->word0 = u2p_word0(fh); + md->timestamp = u2p_timestamp(fh); + + // FIXME when we've got more info + // md->start_of_burst = (md->word0 & XXX) != 0; + // md->end_of_burst = (md->word0 & XXX) != 0; + // md->rx_overrun = (md->word0 & XXX) != 0; + md->start_of_burst = 0; + md->end_of_burst = 0; + md->rx_overrun = 0; + + *items = (uint32_t *)(&fh[1]); + size_t nbytes = payload_len_in_bytes - sizeof(u2_fixed_hdr_t); + assert((nbytes % sizeof(uint32_t)) == 0); + *nitems_in_uint32s = nbytes / sizeof(uint32_t); + + return true; + } + + + usrp2::impl::impl(const std::string &ifc, props *p, size_t rx_bufsize) + : d_eth_buf(new eth_buffer(rx_bufsize)), d_interface_name(ifc), d_pf(0), d_bg_thread(0), + d_bg_running(false), d_rx_seqno(-1), d_tx_seqno(0), d_next_rid(0), + d_num_rx_frames(0), d_num_rx_missing(0), d_num_rx_overruns(0), d_num_rx_bytes(0), + d_num_enqueued(0), d_enqueued_mutex(), d_bg_pending_cond(&d_enqueued_mutex), + d_channel_rings(NCHANS), d_tx_interp(0), d_rx_decim(0) + { + if (!d_eth_buf->open(ifc, htons(U2_ETHERTYPE))) + throw std::runtime_error("Unable to register USRP2 protocol"); + + d_addr = p->addr; + + // Create a packet filter for U2_ETHERTYPE packets sourced from target USRP2 + u2_mac_addr_t usrp_mac; + parse_mac_addr(d_addr, &usrp_mac); + d_pf = pktfilter::make_ethertype_inbound_target(U2_ETHERTYPE, (const unsigned char*)&(usrp_mac.addr)); + if (!d_pf || !d_eth_buf->attach_pktfilter(d_pf)) + throw std::runtime_error("Unable to attach packet filter."); + + if (USRP2_IMPL_DEBUG) + std::cerr << "usrp2 constructor: using USRP2 at " << d_addr << std::endl; + + memset(d_pending_replies, 0, sizeof(d_pending_replies)); + + d_bg_thread = new usrp2_thread(this); + d_bg_thread->start(); + + // In case the USRP2 was left streaming RX + // FIXME: only one channel right now + stop_rx_streaming(0); + + if (!dboard_info()) // we're hosed + throw std::runtime_error("Unable to retrieve daughterboard info"); + + if (0){ + int dbid; + + tx_daughterboard_id(&dbid); + fprintf(stderr, "Tx dboard 0x%x\n", dbid); + fprintf(stderr, " freq_min = %g\n", tx_freq_min()); + fprintf(stderr, " freq_max = %g\n", tx_freq_max()); + fprintf(stderr, " gain_min = %g\n", tx_gain_min()); + fprintf(stderr, " gain_max = %g\n", tx_gain_max()); + fprintf(stderr, " gain_db_per_step = %g\n", tx_gain_db_per_step()); + + rx_daughterboard_id(&dbid); + fprintf(stderr, "Rx dboard 0x%x\n", dbid); + fprintf(stderr, " freq_min = %g\n", rx_freq_min()); + fprintf(stderr, " freq_max = %g\n", rx_freq_max()); + fprintf(stderr, " gain_min = %g\n", rx_gain_min()); + fprintf(stderr, " gain_max = %g\n", rx_gain_max()); + fprintf(stderr, " gain_db_per_step = %g\n", rx_gain_db_per_step()); + } + + // Ensure any custom values in hardware are cleared + if (!reset_db()) + std::cerr << "usrp2::ctor reset_db failed\n"; + + // default gains to mid point + if (!set_tx_gain((tx_gain_min() + tx_gain_max()) / 2)) + std::cerr << "usrp2::ctor set_tx_gain failed\n"; + + if (!set_rx_gain((rx_gain_min() + rx_gain_max()) / 2)) + std::cerr << "usrp2::ctor set_rx_gain failed\n"; + + // default interp and decim + if (!set_tx_interp(12)) + std::cerr << "usrp2::ctor set_tx_interp failed\n"; + + if (!set_rx_decim(12)) + std::cerr << "usrp2::ctor set_rx_decim failed\n"; + + // set workable defaults for scaling + if (!set_rx_scale_iq(DEFAULT_RX_SCALE, DEFAULT_RX_SCALE)) + std::cerr << "usrp2::ctor set_rx_scale_iq failed\n"; + } + + usrp2::impl::~impl() + { + stop_bg(); + d_bg_thread = 0; // thread class deletes itself + delete d_pf; + d_eth_buf->close(); + delete d_eth_buf; + + if (USRP2_IMPL_DEBUG) { + std::cerr << std::endl + << "usrp2 destructor: received " << d_num_rx_frames + << " frames, with " << d_num_rx_missing << " lost (" + << (d_num_rx_frames == 0 ? 0 : (int)(100.0*d_num_rx_missing/d_num_rx_frames)) + << "%), totaling " << d_num_rx_bytes + << " bytes" << std::endl; + } + } + + bool + usrp2::impl::parse_mac_addr(const std::string &s, u2_mac_addr_t *p) + { + p->addr[0] = 0x00; // Matt's IAB + p->addr[1] = 0x50; + p->addr[2] = 0xC2; + p->addr[3] = 0x85; + p->addr[4] = 0x30; + p->addr[5] = 0x00; + + int len = s.size(); + + switch (len){ + + case 5: + return sscanf(s.c_str(), "%hhx:%hhx", &p->addr[4], &p->addr[5]) == 2; + + case 17: + return sscanf(s.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", + &p->addr[0], &p->addr[1], &p->addr[2], + &p->addr[3], &p->addr[4], &p->addr[5]) == 6; + default: + return false; + } + } + + void + usrp2::impl::init_et_hdrs(u2_eth_packet_t *p, const std::string &dst) + { + p->ehdr.ethertype = htons(U2_ETHERTYPE); + parse_mac_addr(dst, &p->ehdr.dst); + memcpy(&p->ehdr.src, d_eth_buf->mac(), 6); + p->thdr.flags = 0; // FIXME transport header values? + p->thdr.seqno = d_tx_seqno++; + p->thdr.ack = 0; + } + + void + usrp2::impl::init_etf_hdrs(u2_eth_packet_t *p, const std::string &dst, + int word0_flags, int chan, uint32_t timestamp) + { + init_et_hdrs(p, dst); + u2p_set_word0(&p->fixed, word0_flags, chan); + u2p_set_timestamp(&p->fixed, timestamp); + + if (chan == CONTROL_CHAN) { // no sequence numbers, back it out + p->thdr.seqno = 0; + d_tx_seqno--; + } + } + + void + usrp2::impl::init_config_rx_v2_cmd(op_config_rx_v2_cmd *cmd) + { + memset(cmd, 0, sizeof(*cmd)); + init_etf_hdrs(&cmd->h, d_addr, 0, CONTROL_CHAN, -1); + cmd->op.opcode = OP_CONFIG_RX_V2; + cmd->op.len = sizeof(cmd->op); + cmd->op.rid = d_next_rid++; + cmd->eop.opcode = OP_EOP; + cmd->eop.len = sizeof(cmd->eop); + } + + void + usrp2::impl::init_config_tx_v2_cmd(op_config_tx_v2_cmd *cmd) + { + memset(cmd, 0, sizeof(*cmd)); + init_etf_hdrs(&cmd->h, d_addr, 0, CONTROL_CHAN, -1); + cmd->op.opcode = OP_CONFIG_TX_V2; + cmd->op.len = sizeof(cmd->op); + cmd->op.rid = d_next_rid++; + cmd->eop.opcode = OP_EOP; + cmd->eop.len = sizeof(cmd->eop); + } + + bool + usrp2::impl::transmit_cmd(void *cmd, size_t len, pending_reply *p, double secs) + { + if (p) + d_pending_replies[p->rid()] = p; + + // Transmit command + if (d_eth_buf->tx_frame(cmd, len) != eth_buffer::EB_OK) { + d_pending_replies[p->rid()] = 0; + return false; + } + + int res = 1; + if (p) + res = p->wait(secs); + + d_pending_replies[p->rid()] = 0; + return res == 1; + } + + // ---------------------------------------------------------------- + // Background loop: received packet demuxing + // ---------------------------------------------------------------- + + void + usrp2::impl::stop_bg() + { + d_bg_running = false; + d_bg_pending_cond.signal(); + + void *dummy_status; + d_bg_thread->join(&dummy_status); + } + + void + usrp2::impl::bg_loop() + { + d_bg_running = true; + while(d_bg_running) { + DEBUG_LOG(":"); + // Receive available frames from ethernet buffer. Handler will + // process control frames, enqueue data packets in channel + // rings, and signal blocked API threads + int res = d_eth_buf->rx_frames(this, 100); // FIXME magic timeout + if (res == eth_buffer::EB_ERROR) + break; + + // Wait for user API thread(s) to process all enqueued packets. + // The channel ring thread that decrements d_num_enqueued to zero + // will signal this thread to continue. + { + omni_mutex_lock l(d_enqueued_mutex); + while(d_num_enqueued > 0 && d_bg_running) + d_bg_pending_cond.wait(); + } + } + d_bg_running = false; + } + + // + // passed to eth_buffer::rx_frames + // + data_handler::result + usrp2::impl::operator()(const void *base, size_t len) + { + u2_eth_samples_t *pkt = (u2_eth_samples_t *)base; + + // FIXME unaligned load! + int chan = u2p_chan(&pkt->hdrs.fixed); + + if (chan == CONTROL_CHAN) { // control packets + DEBUG_LOG("c"); + return handle_control_packet(base, len); + } + else { // data packets + return handle_data_packet(base, len); + } + + // not reached + } + + data_handler::result + usrp2::impl::handle_control_packet(const void *base, size_t len) + { + // point to beginning of payload (subpackets) + unsigned char *p = (unsigned char *)base + sizeof(u2_eth_packet_t); + + // FIXME (p % 4) == 2. Not good. Must watch for unaligned loads. + + // FIXME iterate over payload, handling more than a single subpacket. + + int opcode = p[0]; + unsigned int oplen = p[1]; + unsigned int rid = p[2]; + + pending_reply *rp = d_pending_replies[rid]; + if (rp) { + unsigned int buflen = rp->len(); + if (oplen != buflen) { + std::cerr << "usrp2: mismatched command reply length (expected: " + << buflen << " got: " << oplen << "). " + << "op = " << opcode_to_string(opcode) << std::endl; + } + + // Copy reply into caller's buffer + memcpy(rp->buffer(), p, std::min(oplen, buflen)); + rp->signal(); + d_pending_replies[rid] = 0; + return data_handler::RELEASE; + } + + // TODO: handle unsolicited, USRP2 initiated, or late replies + DEBUG_LOG("l"); + return data_handler::RELEASE; + } + + data_handler::result + usrp2::impl::handle_data_packet(const void *base, size_t len) + { + u2_eth_samples_t *pkt = (u2_eth_samples_t *)base; + d_num_rx_frames++; + d_num_rx_bytes += len; + + /* --- FIXME start of fake transport layer handler --- */ + + if (d_rx_seqno != -1) { + int expected_seqno = (d_rx_seqno + 1) & 0xFF; + int seqno = pkt->hdrs.thdr.seqno; + + if (seqno != expected_seqno) { + ::write(2, "S", 1); // missing sequence number + int missing = seqno - expected_seqno; + if (missing < 0) + missing += 256; + + d_num_rx_overruns++; + d_num_rx_missing += missing; + } + } + + d_rx_seqno = pkt->hdrs.thdr.seqno; + + /* --- end of fake transport layer handler --- */ + + // FIXME unaligned load! + unsigned int chan = u2p_chan(&pkt->hdrs.fixed); + + { + omni_mutex_lock l(d_channel_rings_mutex); + + if (!d_channel_rings[chan]) { + DEBUG_LOG("!"); + return data_handler::RELEASE; // discard packet, no channel handler + } + + // Strip off ethernet header and transport header and enqueue the rest + + size_t offset = offsetof(u2_eth_samples_t, hdrs.fixed); + if (d_channel_rings[chan]->enqueue(&pkt->hdrs.fixed, len-offset)) { + inc_enqueued(); + DEBUG_LOG("+"); + return data_handler::KEEP; // channel ring runner will mark frame done + } + else { + DEBUG_LOG("!"); + return data_handler::RELEASE; // discard, no room in channel ring + } + return data_handler::RELEASE; + } + } + + + // ---------------------------------------------------------------- + // Receive + // ---------------------------------------------------------------- + + bool + usrp2::impl::set_rx_gain(double gain) + { + op_config_rx_v2_cmd cmd; + op_config_rx_reply_v2_t reply; + + init_config_rx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_GAIN); + cmd.op.gain = htons(u2_double_to_fxpt_gain(gain)); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool + usrp2::impl::set_rx_lo_offset(double frequency) + { + op_freq_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_SET_RX_LO_OFFSET; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + + u2_fxpt_freq_t fxpt = u2_double_to_fxpt_freq(frequency); + cmd.op.freq_hi = htonl(u2_fxpt_freq_hi(fxpt)); + cmd.op.freq_lo = htonl(u2_fxpt_freq_lo(fxpt)); + + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool + usrp2::impl::set_rx_center_freq(double frequency, tune_result *result) + { + op_config_rx_v2_cmd cmd; + op_config_rx_reply_v2_t reply; + + init_config_rx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_FREQ); + u2_fxpt_freq_t fxpt = u2_double_to_fxpt_freq(frequency); + cmd.op.freq_hi = htonl(u2_fxpt_freq_hi(fxpt)); + cmd.op.freq_lo = htonl(u2_fxpt_freq_lo(fxpt)); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + if (result && success) { + result->baseband_freq = + u2_fxpt_freq_to_double( + u2_fxpt_freq_from_hilo(ntohl(reply.baseband_freq_hi), + ntohl(reply.baseband_freq_lo))); + + result->dxc_freq = + u2_fxpt_freq_to_double( + u2_fxpt_freq_from_hilo(ntohl(reply.ddc_freq_hi), + ntohl(reply.ddc_freq_lo))); + + result->residual_freq = + u2_fxpt_freq_to_double( + u2_fxpt_freq_from_hilo(ntohl(reply.residual_freq_hi), + ntohl(reply.residual_freq_lo))); + + result->spectrum_inverted = (bool)(ntohx(reply.inverted) == 1); + } + + return success; + } + + bool + usrp2::impl::set_rx_decim(int decimation_factor) + { + op_config_rx_v2_cmd cmd; + op_config_rx_reply_v2_t reply; + + init_config_rx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_INTERP_DECIM); + cmd.op.decim = htonl(decimation_factor); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + if (success) + d_rx_decim = decimation_factor; + return success; + } + + bool + usrp2::impl::set_rx_scale_iq(int scale_i, int scale_q) + { + op_config_rx_v2_cmd cmd; + op_config_rx_reply_v2_t reply; + + init_config_rx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_SCALE_IQ); + cmd.op.scale_iq = htonl(((scale_i & 0xffff) << 16) | (scale_q & 0xffff)); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool + usrp2::impl::start_rx_streaming(unsigned int channel, unsigned int items_per_frame) + { + if (channel > MAX_CHAN) { + std::cerr << "usrp2: invalid channel number (" << channel + << ")" << std::endl; + return false; + } + + if (channel > 0) { // until firmware supports multiple streams + std::cerr << "usrp2: channel " << channel + << " not implemented" << std::endl; + return false; + } + + { + omni_mutex_lock l(d_channel_rings_mutex); + if (d_channel_rings[channel]) { + std::cerr << "usrp2: channel " << channel + << " already streaming" << std::endl; + return false; + } + + if (items_per_frame == 0) + items_per_frame = U2_MAX_SAMPLES; // minimize overhead + + op_start_rx_streaming_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_START_RX_STREAMING; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.items_per_frame = htonl(items_per_frame); + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + bool success = false; + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + success = transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT); + success = success && (ntohx(reply.ok) == 1); + + if (success) + d_channel_rings[channel] = ring_sptr(new ring(d_eth_buf->max_frames())); + + return success; + } + } + + bool + usrp2::impl::stop_rx_streaming(unsigned int channel) + { + if (channel > MAX_CHAN) { + std::cerr << "usrp2: invalid channel number (" << channel + << ")" << std::endl; + return false; + } + + if (channel > 0) { // until firmware supports multiple streams + std::cerr << "usrp2: channel " << channel + << " not implemented" << std::endl; + return false; + } + + op_stop_rx_cmd cmd; + op_generic_t reply; + + { + omni_mutex_lock l(d_channel_rings_mutex); + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_STOP_RX; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + bool success = false; + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + success = transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT); + success = success && (ntohx(reply.ok) == 1); + d_channel_rings[channel].reset(); + return success; + } + } + + bool + usrp2::impl::rx_samples(unsigned int channel, rx_sample_handler *handler) + { + if (channel > MAX_CHAN) { + std::cerr << "usrp2: invalid channel (" << channel + << " )" << std::endl; + return false; + } + + if (channel > 0) { + std::cerr << "usrp2: channel " << channel + << " not implemented" << std::endl; + return false; + } + + ring_sptr rp = d_channel_rings[channel]; + if (!rp){ + std::cerr << "usrp2: channel " << channel + << " not receiving" << std::endl; + return false; + } + + // Wait for frames available in channel ring + DEBUG_LOG("W"); + rp->wait_for_not_empty(); + DEBUG_LOG("s"); + + // Iterate through frames and present to user + void *p; + size_t frame_len_in_bytes; + while (rp->dequeue(&p, &frame_len_in_bytes)) { + uint32_t *items; // points to beginning of data items + size_t nitems_in_uint32s; + rx_metadata md; + if (!parse_rx_metadata(p, frame_len_in_bytes, &items, &nitems_in_uint32s, &md)) + return false; + + bool want_more = (*handler)(items, nitems_in_uint32s, &md); + d_eth_buf->release_frame(p); + DEBUG_LOG("-"); + dec_enqueued(); + + if (!want_more) + break; + } + return true; + } + + // ---------------------------------------------------------------- + // Transmit + // ---------------------------------------------------------------- + + bool + usrp2::impl::set_tx_gain(double gain) + { + op_config_tx_v2_cmd cmd; + op_config_tx_reply_v2_t reply; + + init_config_tx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_GAIN); + cmd.op.gain = htons(u2_double_to_fxpt_gain(gain)); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool + usrp2::impl::set_tx_lo_offset(double frequency) + { + op_freq_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_SET_TX_LO_OFFSET; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + + u2_fxpt_freq_t fxpt = u2_double_to_fxpt_freq(frequency); + cmd.op.freq_hi = htonl(u2_fxpt_freq_hi(fxpt)); + cmd.op.freq_lo = htonl(u2_fxpt_freq_lo(fxpt)); + + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool + usrp2::impl::set_tx_center_freq(double frequency, tune_result *result) + { + op_config_tx_v2_cmd cmd; + op_config_tx_reply_v2_t reply; + + init_config_tx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_FREQ); + u2_fxpt_freq_t fxpt = u2_double_to_fxpt_freq(frequency); + cmd.op.freq_hi = htonl(u2_fxpt_freq_hi(fxpt)); + cmd.op.freq_lo = htonl(u2_fxpt_freq_lo(fxpt)); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + if (result && success) { + result->baseband_freq = + u2_fxpt_freq_to_double( + u2_fxpt_freq_from_hilo(ntohl(reply.baseband_freq_hi), + ntohl(reply.baseband_freq_lo))); + + result->dxc_freq = + u2_fxpt_freq_to_double( + u2_fxpt_freq_from_hilo(ntohl(reply.duc_freq_hi), + ntohl(reply.duc_freq_lo))); + + result->residual_freq = + u2_fxpt_freq_to_double( + u2_fxpt_freq_from_hilo(ntohl(reply.residual_freq_hi), + ntohl(reply.residual_freq_lo))); + + result->spectrum_inverted = (bool)(ntohx(reply.inverted) == 1); + } + + return success; + } + + bool + usrp2::impl::set_tx_interp(int interpolation_factor) + { + op_config_tx_v2_cmd cmd; + op_config_tx_reply_v2_t reply; + + init_config_tx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_INTERP_DECIM); + cmd.op.interp = htonl(interpolation_factor); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + if (success) { + d_tx_interp = interpolation_factor; + + // Auto-set TX scaling based on interpolation rate + int scale_i, scale_q; + default_tx_scale_iq(d_tx_interp, &scale_i, &scale_q); + return set_tx_scale_iq(scale_i, scale_q); + } + + return success; + } + + void + usrp2::impl::default_tx_scale_iq(int interpolation_factor, int *scale_i, int *scale_q) + { + // Calculate CIC interpolation (i.e., without halfband interpolators) + int i = interpolation_factor; + if (i > 128) + i = i >> 1; + if (i > 128) + i = i >> 1; + + // Calculate dsp_core_tx gain absent scale multipliers + float gain = (1.65*i*i*i)/(4096*pow(2, ceil(log2(i*i*i)))); + + // Calculate closest multiplier constant to reverse gain + int scale = (int)rint(1.0/gain); + // fprintf(stderr, "if=%i i=%i gain=%f scale=%i\n", interpolation_factor, i, gain, scale); + + // Both I and Q are identical in this case + if (scale_i) + *scale_i = scale; + if (scale_q) + *scale_q = scale; + } + + bool + usrp2::impl::set_tx_scale_iq(int scale_i, int scale_q) + { + op_config_tx_v2_cmd cmd; + op_config_tx_reply_v2_t reply; + + init_config_tx_v2_cmd(&cmd); + cmd.op.valid = htons(CFGV_SCALE_IQ); + cmd.op.scale_iq = htonl(((scale_i & 0xffff) << 16) | (scale_q & 0xffff)); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool + usrp2::impl::tx_32fc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata) + { + uint32_t items[nsamples]; + copy_host_32fc_to_u2_16sc(nsamples, samples, items); + return tx_raw(channel, items, nsamples, metadata); + } + + bool + usrp2::impl::tx_16sc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata) + { +#ifdef WORDS_BIGENDIAN + + // Already binary equivalent to 16-bit I/Q on the wire. + // No conversion required. + + assert(sizeof(samples[0]) == sizeof(uint32_t)); + return tx_raw(channel, (const uint32_t *) samples, nsamples, metadata); + +#else + + uint32_t items[nsamples]; + copy_host_16sc_to_u2_16sc(nsamples, samples, items); + return tx_raw(channel, items, nsamples, metadata); + +#endif + } + + bool + usrp2::impl::tx_raw(unsigned int channel, + const uint32_t *items, + size_t nitems, + const tx_metadata *metadata) + { + if (nitems == 0) + return true; + + // FIXME can't deal with nitems < U2_MIN_SAMPLES (will be fixed in VRT) + // FIXME need to check the MTU instead of assuming 1500 bytes + + // fragment as necessary then fire away + + size_t nframes = (nitems + U2_MAX_SAMPLES - 1) / U2_MAX_SAMPLES; + size_t last_frame = nframes - 1; + u2_eth_packet_t hdrs; + + size_t n = 0; + for (size_t fn = 0; fn < nframes; fn++){ + uint32_t timestamp = 0; + uint32_t flags = 0; + + if (fn == 0){ + timestamp = metadata->timestamp; + if (metadata->send_now) + flags |= U2P_TX_IMMEDIATE; + if (metadata->start_of_burst) + flags |= U2P_TX_START_OF_BURST; + } + if (fn > 0){ + flags |= U2P_TX_IMMEDIATE; + } + if (fn == last_frame){ + if (metadata->end_of_burst) + flags |= U2P_TX_END_OF_BURST; + } + + init_etf_hdrs(&hdrs, d_addr, flags, channel, timestamp); + + // Avoid short packet by splitting last two packets if reqd + size_t i; + if ((nitems - n) > U2_MAX_SAMPLES && (nitems - n) < (U2_MAX_SAMPLES + U2_MIN_SAMPLES)) + i = (nitems - n) / 2; + else + i = std::min((size_t) U2_MAX_SAMPLES, nitems - n); + + eth_iovec iov[2]; + iov[0].iov_base = &hdrs; + iov[0].iov_len = sizeof(hdrs); + iov[1].iov_base = const_cast(&items[n]); + iov[1].iov_len = i * sizeof(uint32_t); + + size_t total = iov[0].iov_len + iov[1].iov_len; + if (total < 64) + fprintf(stderr, "usrp2::tx_raw: FIXME: short packet: %zd items (%zd bytes)\n", i, total); + + if (d_eth_buf->tx_framev(iov, 2) != eth_buffer::EB_OK){ + return false; + } + + n += i; + } + + return true; + } + + // ---------------------------------------------------------------- + // misc commands + // ---------------------------------------------------------------- + + bool + usrp2::impl::config_mimo(int flags) + { + op_config_mimo_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_CONFIG_MIMO; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.flags = flags; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + return ntohx(reply.ok) == 1; + } + + bool + usrp2::impl::fpga_master_clock_freq(long *freq) + { + *freq = 100000000L; // 100 MHz + return true; + } + + bool + usrp2::impl::adc_rate(long *rate) + { + return fpga_master_clock_freq(rate); + } + + bool + usrp2::impl::dac_rate(long *rate) + { + return fpga_master_clock_freq(rate); + } + + bool + usrp2::impl::tx_daughterboard_id(int *dbid) + { + *dbid = d_tx_db_info.dbid; + return true; + } + + bool + usrp2::impl::rx_daughterboard_id(int *dbid) + { + *dbid = d_rx_db_info.dbid; + return true; + } + + + // ---------------------------------------------------------------- + // low-level commands + // ---------------------------------------------------------------- + + bool + usrp2::impl::burn_mac_addr(const std::string &new_addr) + { + op_burn_mac_addr_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_BURN_MAC_ADDR; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + if (!parse_mac_addr(new_addr, &cmd.op.addr)) + return false; + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, 4*DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + static void + fill_dboard_info(db_info *dst, const u2_db_info_t *src) + { + dst->dbid = ntohl(src->dbid); + + dst->freq_min = + u2_fxpt_freq_to_double(u2_fxpt_freq_from_hilo(ntohl(src->freq_min_hi), + ntohl(src->freq_min_lo))); + dst->freq_max = + u2_fxpt_freq_to_double(u2_fxpt_freq_from_hilo(ntohl(src->freq_max_hi), + ntohl(src->freq_max_lo))); + + dst->gain_min = u2_fxpt_gain_to_double(ntohs(src->gain_min)); + dst->gain_max = u2_fxpt_gain_to_double(ntohs(src->gain_max)); + dst->gain_step_size = u2_fxpt_gain_to_double(ntohs(src->gain_step_size)); + } + + bool + usrp2::impl::dboard_info() + { + op_dboard_info_cmd cmd; + op_dboard_info_reply_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_DBOARD_INFO; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + if (success){ + fill_dboard_info(&d_tx_db_info, &reply.tx_db_info); + fill_dboard_info(&d_rx_db_info, &reply.rx_db_info); + } + return success; + } + + + bool + usrp2::impl::sync_to_pps() + { + op_generic_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_SYNC_TO_PPS; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + return ntohx(reply.ok) == 1; + } + + bool + usrp2::impl::sync_every_pps(bool enable) + { + op_generic_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_SYNC_EVERY_PPS; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.ok = enable ? 1 : 0; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + return ntohx(reply.ok) == 1; + } + + std::vector + usrp2::impl::peek32(uint32_t addr, uint32_t words) + { + std::vector result; // zero sized on error return + // fprintf(stderr, "usrp2::peek: addr=%08X words=%u\n", addr, words); + + if (addr % 4 != 0) { + fprintf(stderr, "usrp2::peek: addr (=%08X) must be 32-bit word aligned\n", addr); + return result; + } + + if (words == 0) + return result; + + op_peek_cmd cmd; + op_generic_t *reply; + + int wlen = sizeof(uint32_t); + int rlen = sizeof(op_generic_t); + size_t bytes = words*wlen; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_PEEK; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + cmd.op.addr = htonl(addr); + cmd.op.bytes = htonl(bytes); + + reply = (op_generic_t *)malloc(rlen+bytes); + pending_reply p(cmd.op.rid, reply, rlen+bytes); + if (transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) { + uint32_t nwords = (reply->len-rlen)/sizeof(uint32_t); + uint32_t *data = (uint32_t *)(reply+rlen/wlen); + for (unsigned int i = 0; i < nwords; i++) + result.push_back(ntohl(data[i])); + } + + free(reply); + return result; + } + + bool + usrp2::impl::poke32(uint32_t addr, const std::vector &data) + { + if (addr % 4 != 0) { + fprintf(stderr, "usrp2::poke32: addr (=%08X) must be 32-bit word aligned\n", addr); + return false; + } + + int plen = sizeof(op_poke_cmd); + int wlen = sizeof(uint32_t); + int max_words = (MAX_SUBPKT_LEN-plen)/wlen; + int words = data.size(); + + if (words > max_words) { + fprintf(stderr, "usrp2::poke32: write size (=%u) exceeds maximum of %u words\n", + words, max_words); + return false; + } + + //fprintf(stderr, "usrp2::poke32: addr=%08X words=%u\n", addr, words); + + if (words == 0) + return true; // NOP + + op_poke_cmd *cmd; + op_generic_t *eop; + + // Allocate, clear, and initialize command packet + int bytes = words*wlen; + int l = plen+bytes+sizeof(*eop); // op_poke_cmd+data+eop + cmd = (op_poke_cmd *)malloc(l); + //fprintf(stderr, "cmd=%p l=%i\n", cmd, l); + memset(cmd, 0, l); + init_etf_hdrs(&cmd->h, d_addr, 0, CONTROL_CHAN, -1); + cmd->op.opcode = OP_POKE; + cmd->op.len = sizeof(cmd->op)+bytes; + cmd->op.rid = d_next_rid++; + cmd->op.addr = htonl(addr); + + // Copy data from vector into packet space + uint32_t *dest = (uint32_t *)((uint8_t *)cmd+plen); + for (int i = 0; i < words; i++) { + //fprintf(stderr, "%03i@%p\n", i, dest); + *dest++ = htonl(data[i]); + } + + // Write end-of-packet subpacket + eop = (op_generic_t *)dest; + eop->opcode = OP_EOP; + eop->len = sizeof(*eop); + //fprintf(stderr, "eop=%p len=%i\n", eop, eop->len); + + // Send command to device and retrieve reply + bool ok = false; + op_generic_t reply; + pending_reply p(cmd->op.rid, &reply, sizeof(reply)); + if (transmit_cmd(cmd, l, &p, DEF_CMD_TIMEOUT)) + ok = (ntohx(reply.ok) == 1); + + free(cmd); + return ok; + } + + bool + usrp2::impl::reset_db() + { + op_generic_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_RESET_DB; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool usrp2::impl::set_gpio_ddr(int bank, uint16_t value, uint16_t mask) + { + if (bank != GPIO_TX_BANK && bank != GPIO_RX_BANK) { + fprintf(stderr, "set_gpio_ddr: bank must be one of GPIO_RX_BANK or GPIO_TX_BANK\n"); + return false; + } + + op_gpio_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_GPIO_SET_DDR; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.bank = static_cast(bank); + cmd.op.value = htons(value); + cmd.op.mask = htons(mask); + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool usrp2::impl::set_gpio_sels(int bank, std::string sels) + { + if (bank != GPIO_TX_BANK && bank != GPIO_RX_BANK) { + fprintf(stderr, "set_gpio_ddr: bank must be one of GPIO_RX_BANK or GPIO_TX_BANK\n"); + return false; + } + + if (sels.size() != 16) { + fprintf(stderr, "set_gpio_sels: sels must be exactly 16 bytes\n"); + return false; + } + + op_gpio_set_sels_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_GPIO_SET_SELS; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.bank = static_cast(bank); + memcpy(&cmd.op.sels, sels.c_str(), 16); + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool usrp2::impl::write_gpio(int bank, uint16_t value, uint16_t mask) + { + if (bank != GPIO_TX_BANK && bank != GPIO_RX_BANK) { + fprintf(stderr, "set_gpio_ddr: bank must be one of GPIO_RX_BANK or GPIO_TX_BANK\n"); + return false; + } + + op_gpio_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_GPIO_WRITE; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.bank = static_cast(bank); + cmd.op.value = htons(value); + cmd.op.mask = htons(mask); + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + + bool usrp2::impl::read_gpio(int bank, uint16_t *value) + { + if (bank != GPIO_TX_BANK && bank != GPIO_RX_BANK) { + fprintf(stderr, "set_gpio_ddr: bank must be one of GPIO_RX_BANK or GPIO_TX_BANK\n"); + return false; + } + + op_gpio_cmd cmd; + op_gpio_read_reply_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_GPIO_READ; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.bank = static_cast(bank); + cmd.op.value = 0; // not used + cmd.op.mask = 0; // not used + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + if (success && (value != NULL)) + *value = ntohs(reply.value); + + return success; + } + + bool usrp2::impl::enable_gpio_streaming(int bank, int enable) + { + if (bank != GPIO_RX_BANK) { + fprintf(stderr, "enable_gpio_streaming: only RX streaming is currently implemented\n"); + return false; + } + + if ((enable & ~0x03) != 0) { + fprintf(stderr, "enable_gpio_streaming: invalid enable format\n"); + return false; + } + + op_gpio_cmd cmd; + op_generic_t reply; + + memset(&cmd, 0, sizeof(cmd)); + init_etf_hdrs(&cmd.h, d_addr, 0, CONTROL_CHAN, -1); + cmd.op.opcode = OP_GPIO_STREAM; + cmd.op.len = sizeof(cmd.op); + cmd.op.rid = d_next_rid++; + cmd.op.bank = static_cast(bank); + cmd.op.value = htons((uint16_t)enable); + cmd.op.mask = 0; // not used + cmd.eop.opcode = OP_EOP; + cmd.eop.len = sizeof(cmd.eop); + + pending_reply p(cmd.op.rid, &reply, sizeof(reply)); + if (!transmit_cmd(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) + return false; + + bool success = (ntohx(reply.ok) == 1); + return success; + } + +} // namespace usrp2 diff --git a/usrp2/host/lib/usrp2_impl.h b/usrp2/host/lib/usrp2_impl.h new file mode 100644 index 00000000..ec96f3a7 --- /dev/null +++ b/usrp2/host/lib/usrp2_impl.h @@ -0,0 +1,198 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008,2009 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 3 of the License, 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 program. If not, see . + */ + +#ifndef INCLUDED_USRP2_IMPL_H +#define INCLUDED_USRP2_IMPL_H + +#include +#include +#include +#include +#include "control.h" +#include "ring.h" +#include + +#define MAX_SUBPKT_LEN 252 + +namespace usrp2 { + + class eth_buffer; + class pktfilter; + class usrp2_thread; + class usrp2_tune_result; + class pending_reply; + class ring; + + //! High-level d'board info + struct db_info { + int dbid; + double freq_min; // Hz + double freq_max; // Hz + double gain_min; // dB + double gain_max; // dB + double gain_step_size; // dB + + db_info() : dbid(-1), freq_min(0), freq_max(0), + gain_min(0), gain_max(0), gain_step_size(0) {} + }; + + class usrp2::impl : private data_handler + { + static const size_t NRIDS = 256; + static const size_t NCHANS = 32; + + eth_buffer *d_eth_buf; + std::string d_interface_name; + pktfilter *d_pf; + std::string d_addr; // FIXME: use u2_mac_addr_t instead + usrp2_thread *d_bg_thread; + volatile bool d_bg_running; // TODO: multistate if needed + + int d_rx_seqno; + int d_tx_seqno; + int d_next_rid; + unsigned int d_num_rx_frames; + unsigned int d_num_rx_missing; + unsigned int d_num_rx_overruns; + unsigned int d_num_rx_bytes; + + unsigned int d_num_enqueued; + omni_mutex d_enqueued_mutex; + omni_condition d_bg_pending_cond; + + // all pending_replies are stack allocated, thus no possibility of leaking these + pending_reply *d_pending_replies[NRIDS]; // indexed by 8-bit reply id + + std::vector d_channel_rings; // indexed by 5-bit channel number + omni_mutex d_channel_rings_mutex; + + db_info d_tx_db_info; + db_info d_rx_db_info; + + int d_tx_interp; // shadow tx interp + int d_rx_decim; // shadow rx decim + + void inc_enqueued() { + omni_mutex_lock l(d_enqueued_mutex); + d_num_enqueued++; + } + + void dec_enqueued() { + omni_mutex_lock l(d_enqueued_mutex); + if (--d_num_enqueued == 0) + d_bg_pending_cond.signal(); + } + + static bool parse_mac_addr(const std::string &s, u2_mac_addr_t *p); + void init_et_hdrs(u2_eth_packet_t *p, const std::string &dst); + void init_etf_hdrs(u2_eth_packet_t *p, const std::string &dst, + int word0_flags, int chan, uint32_t timestamp); + void stop_bg(); + void init_config_rx_v2_cmd(op_config_rx_v2_cmd *cmd); + void init_config_tx_v2_cmd(op_config_tx_v2_cmd *cmd); + bool transmit_cmd(void *cmd, size_t len, pending_reply *p, double secs=0.0); + virtual data_handler::result operator()(const void *base, size_t len); + data_handler::result handle_control_packet(const void *base, size_t len); + data_handler::result handle_data_packet(const void *base, size_t len); + bool dboard_info(); + bool reset_db(); + + public: + impl(const std::string &ifc, props *p, size_t rx_bufsize); + ~impl(); + + void bg_loop(); + + std::string mac_addr() const { return d_addr; } // FIXME: convert from u2_mac_addr_t + std::string interface_name() const { return d_interface_name; } + + // Rx + + bool set_rx_gain(double gain); + double rx_gain_min() { return d_rx_db_info.gain_min; } + double rx_gain_max() { return d_rx_db_info.gain_max; } + double rx_gain_db_per_step() { return d_rx_db_info.gain_step_size; } + bool set_rx_lo_offset(double frequency); + bool set_rx_center_freq(double frequency, tune_result *result); + double rx_freq_min() { return d_rx_db_info.freq_min; } + double rx_freq_max() { return d_rx_db_info.freq_max; } + bool set_rx_decim(int decimation_factor); + int rx_decim() { return d_rx_decim; } + bool set_rx_scale_iq(int scale_i, int scale_q); + bool set_gpio_ddr(int bank, uint16_t value, uint16_t mask); + bool set_gpio_sels(int bank, std::string src); + bool enable_gpio_streaming(int bank, int enable); + bool write_gpio(int bank, uint16_t value, uint16_t mask); + bool read_gpio(int bank, uint16_t *value); + bool start_rx_streaming(unsigned int channel, unsigned int items_per_frame); + bool rx_samples(unsigned int channel, rx_sample_handler *handler); + bool stop_rx_streaming(unsigned int channel); + unsigned int rx_overruns() const { return d_num_rx_overruns; } + unsigned int rx_missing() const { return d_num_rx_missing; } + + // Tx + + bool set_tx_gain(double gain); + double tx_gain_min() { return d_tx_db_info.gain_min; } + double tx_gain_max() { return d_tx_db_info.gain_max; } + double tx_gain_db_per_step() { return d_tx_db_info.gain_step_size; } + bool set_tx_lo_offset(double frequency); + bool set_tx_center_freq(double frequency, tune_result *result); + double tx_freq_min() { return d_tx_db_info.freq_min; } + double tx_freq_max() { return d_tx_db_info.freq_max; } + bool set_tx_interp(int interpolation_factor); + int tx_interp() { return d_tx_interp; } + void default_tx_scale_iq(int interpolation_factor, int *scale_i, int *scale_q); + bool set_tx_scale_iq(int scale_i, int scale_q); + + bool tx_32fc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata); + + bool tx_16sc(unsigned int channel, + const std::complex *samples, + size_t nsamples, + const tx_metadata *metadata); + + bool tx_raw(unsigned int channel, + const uint32_t *items, + size_t nitems, + const tx_metadata *metadata); + + // misc + + bool config_mimo(int flags); + bool fpga_master_clock_freq(long *freq); + bool adc_rate(long *rate); + bool dac_rate(long *rate); + bool tx_daughterboard_id(int *dbid); + bool rx_daughterboard_id(int *dbid); + + // low level + + bool burn_mac_addr(const std::string &new_addr); + bool sync_to_pps(); + bool sync_every_pps(bool enable); + std::vector peek32(uint32_t addr, uint32_t words); + bool poke32(uint32_t addr, const std::vector &data); + }; + +} // namespace usrp2 + +#endif /* INCLUDED_USRP2_IMPL_H */ diff --git a/usrp2/host/lib/usrp2_socket_opener.cc b/usrp2/host/lib/usrp2_socket_opener.cc new file mode 100644 index 00000000..27d3935e --- /dev/null +++ b/usrp2/host/lib/usrp2_socket_opener.cc @@ -0,0 +1,143 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +/*! + * setuid root program that opens a socket using (PF_PACKET, SOCK_RAW, + * htons(0xBEEF)), and sends the resulting file descriptor by way of + * of the file descriptor specified as the first command line argument. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_ARPA_INET_H +#include +#elif defined(HAVE_NETINET_IN_H) +#include +#endif + + +ssize_t +write_fd(int fd, const void *ptr, size_t nbytes, int sendfd) +{ + struct msghdr msg; + struct iovec iov[1]; + +#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL + union { + struct cmsghdr cm; + char control[CMSG_SPACE(sizeof(int))]; + } control_un; + struct cmsghdr *cmptr; + + msg.msg_control = control_un.control; + msg.msg_controllen = sizeof(control_un.control); + + cmptr = CMSG_FIRSTHDR(&msg); + cmptr->cmsg_len = CMSG_LEN(sizeof(int)); + cmptr->cmsg_level = SOL_SOCKET; + cmptr->cmsg_type = SCM_RIGHTS; + *((int *) CMSG_DATA(cmptr)) = sendfd; +#else + msg.msg_accrights = (char *) &sendfd; + msg.msg_accrightslen = sizeof(int); +#endif + + msg.msg_name = NULL; + msg.msg_namelen = 0; + + iov[0].iov_base = const_cast(ptr); + iov[0].iov_len = nbytes; + msg.msg_iov = iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +bool +reset_eids() +{ + if (setgid(getgid()) < 0){ + perror("setguid"); + return false; + } + + if (setuid(getuid()) < 0){ + perror("setuid"); + return false; + } + + return true; +} + + +static void +usage() +{ + fprintf(stderr, "usage: usrp2_socket_opener file-descriptor\n"); + exit(1); +} + +int +main(int argc, char **argv) +{ + if (argc != 2) + usage(); + + char *endptr; + int unix_domain_fd = strtol(argv[1], &endptr, 0); + if (*endptr != 0) + usage(); + + // FIXME get client credentials from unix_domain_fd using SCM_CREDENTIALS + + // open the raw socket + int socket_fd = socket(PF_PACKET, SOCK_RAW, htons(0xBEEF)); + if (socket_fd == -1){ + perror("socket(PF_PACKET, SOCK_RAW, htons(0xBEEF))"); + // printf("errno = %d\n", errno); + if (errno == EACCES || errno == ESPIPE){ + fprintf(stderr, "usrp2_socket_opener must be setuid root to open the socket using SOCK_RAW.\n"); + fprintf(stderr, "Running as root, please execute: \n"); + fprintf(stderr, " # chown root:usrp usrp2_socket_opener\n"); + fprintf(stderr, " # chmod 04750 usrp2_socket_opener\n"); + } + exit(2); + } + + // drop privs + if (!reset_eids()){ + fprintf(stderr, "Can't drop root permissions\n"); + exit(3); + } + + if (write_fd(unix_domain_fd, "", 1, socket_fd) != 1){ + perror("write_fd"); + exit(4); + } + + return 0; +} diff --git a/usrp2/host/lib/usrp2_thread.cc b/usrp2/host/lib/usrp2_thread.cc new file mode 100644 index 00000000..d1477039 --- /dev/null +++ b/usrp2/host/lib/usrp2_thread.cc @@ -0,0 +1,64 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 3 of the License, 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 program. If not, see . + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "usrp2_thread.h" +#include "usrp2_impl.h" +#include +#include +#include + +#define USRP2_THREAD_DEBUG 1 + +namespace usrp2 { + + usrp2_thread::usrp2_thread(usrp2::impl *u2) : + omni_thread(NULL, PRIORITY_HIGH), + d_u2(u2) + { + } + + usrp2_thread::~usrp2_thread() + { + // we don't own this, just forget it + d_u2 = 0; + } + + void + usrp2_thread::start() + { + start_undetached(); + } + + void * + usrp2_thread::run_undetached(void *arg) + { + if (gruel::enable_realtime_scheduling(gruel::sys_pri::usrp2_backend()) != gruel::RT_OK) + std::cerr << "usrp2: failed to enable realtime scheduling" << std::endl; + + // This is the first code to run in the new thread context. + d_u2->bg_loop(); + + return 0; + } + +} // namespace usrp2 + diff --git a/usrp2/host/lib/usrp2_thread.h b/usrp2/host/lib/usrp2_thread.h new file mode 100644 index 00000000..12723e94 --- /dev/null +++ b/usrp2/host/lib/usrp2_thread.h @@ -0,0 +1,47 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifndef INCLUDED_USRP2_THREAD_H +#define INCLUDED_USRP2_THREAD_H + +#include +#include + +namespace usrp2 { + + class usrp2_thread : public omni_thread + { + private: + usrp2::impl *d_u2; + + public: + usrp2_thread(usrp2::impl *u2); + ~usrp2_thread(); + + void start(); + + virtual void *run_undetached(void *arg); + }; + +} // namespace usrp2 + +#endif /* INCLUDED_USRP2_THREAD_H */ diff --git a/usrp2/host/usrp2.pc.in b/usrp2/host/usrp2.pc.in new file mode 100644 index 00000000..eaef5f41 --- /dev/null +++ b/usrp2/host/usrp2.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: usrp2 +Description: Universal Software Radio Peripheral 2 +Requires: gnuradio-omnithread gruel +Version: @VERSION@ +Libs: -L${libdir} -lusrp2 +Cflags: -I${includedir} @DEFINES@ -- 2.30.2

fb+mvhC>Q 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 literal 174171 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 MImd=?{69_q6JsQkQ2+n{ diff --git a/usrp/fpga/sdr_lib/atr_delay.v b/usrp/fpga/sdr_lib/atr_delay.v new file mode 100644 index 00000000..bbba9e29 --- /dev/null +++ b/usrp/fpga/sdr_lib/atr_delay.v @@ -0,0 +1,83 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2007 Corgan Enterprises LLC +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +module atr_delay(clk_i,rst_i,ena_i,tx_empty_i,tx_delay_i,rx_delay_i,atr_tx_o); + input clk_i; + input rst_i; + input ena_i; + input tx_empty_i; + input [11:0] tx_delay_i; + input [11:0] rx_delay_i; + output atr_tx_o; + + reg [3:0] state; + reg [11:0] count; + + `define ST_RX_DELAY 4'b0001 + `define ST_RX 4'b0010 + `define ST_TX_DELAY 4'b0100 + `define ST_TX 4'b1000 + + always @(posedge clk_i) + if (rst_i | ~ena_i) + begin + state <= `ST_RX; + count <= 12'b0; + end + else + case (state) + `ST_RX: + if (!tx_empty_i) + begin + state <= `ST_TX_DELAY; + count <= tx_delay_i; + end + + `ST_TX_DELAY: + if (count == 0) + state <= `ST_TX; + else + count <= count - 1; + + `ST_TX: + if (tx_empty_i) + begin + state <= `ST_RX_DELAY; + count <= rx_delay_i; + end + + `ST_RX_DELAY: + if (count == 0) + state <= `ST_RX; + else + count <= count - 1; + + default: // Error + begin + state <= `ST_RX; + count <= 0; + end + endcase + + assign atr_tx_o = (state == `ST_TX) | (state == `ST_RX_DELAY); + +endmodule // atr_delay + diff --git a/usrp/fpga/sdr_lib/cic_dec_shifter.v b/usrp/fpga/sdr_lib/cic_dec_shifter.v new file mode 100644 index 00000000..a213303c --- /dev/null +++ b/usrp/fpga/sdr_lib/cic_dec_shifter.v @@ -0,0 +1,100 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + + +// NOTE This only works for N=4, max decim rate of 128 +// NOTE signal "rate" is ONE LESS THAN the actual rate + +module cic_dec_shifter(rate,signal_in,signal_out); + parameter bw = 16; + parameter maxbitgain = 28; + + input [7:0] rate; + input wire [bw+maxbitgain-1:0] signal_in; + output reg [bw-1:0] signal_out; + + function [4:0] bitgain; + input [7:0] rate; + case(rate) + // Exact Cases -- N*log2(rate) + 8'd4 : bitgain = 8; + 8'd8 : bitgain = 12; + 8'd16 : bitgain = 16; + 8'd32 : bitgain = 20; + 8'd64 : bitgain = 24; + 8'd128 : bitgain = 28; + + // Nearest without overflow -- ceil(N*log2(rate)) + 8'd5 : bitgain = 10; + 8'd6 : bitgain = 11; + 8'd7 : bitgain = 12; + 8'd9 : bitgain = 13; + 8'd10,8'd11 : bitgain = 14; + 8'd12,8'd13 : bitgain = 15; + 8'd14,8'd15 : bitgain = 16; + 8'd17,8'd18,8'd19 : bitgain = 17; + 8'd20,8'd21,8'd22 : bitgain = 18; + 8'd23,8'd24,8'd25,8'd26 : bitgain = 19; + 8'd27,8'd28,8'd29,8'd30,8'd31 : bitgain = 20; + 8'd33,8'd34,8'd35,8'd36,8'd37,8'd38 : bitgain = 21; + 8'd39,8'd40,8'd41,8'd42,8'd43,8'd44,8'd45 : bitgain = 22; + 8'd46,8'd47,8'd48,8'd49,8'd50,8'd51,8'd52,8'd53 : bitgain = 23; + 8'd54,8'd55,8'd56,8'd57,8'd58,8'd59,8'd60,8'd61,8'd62,8'd63 : bitgain = 24; + 8'd65,8'd66,8'd67,8'd68,8'd69,8'd70,8'd71,8'd72,8'd73,8'd74,8'd75,8'd76 : bitgain = 25; + 8'd77,8'd78,8'd79,8'd80,8'd81,8'd82,8'd83,8'd84,8'd85,8'd86,8'd87,8'd88,8'd89,8'd90 : bitgain = 26; + 8'd91,8'd92,8'd93,8'd94,8'd95,8'd96,8'd97,8'd98,8'd99,8'd100,8'd101,8'd102,8'd103,8'd104,8'd105,8'd106,8'd107 : bitgain = 27; + default : bitgain = 28; + endcase // case(rate) + endfunction // bitgain + + wire [4:0] shift = bitgain(rate+1); + + // We should be able to do this, but can't .... + // assign signal_out = signal_in[shift+bw-1:shift]; + + always @* + case(shift) + 5'd8 : signal_out = signal_in[8+bw-1:8]; + 5'd10 : signal_out = signal_in[10+bw-1:10]; + 5'd11 : signal_out = signal_in[11+bw-1:11]; + 5'd12 : signal_out = signal_in[12+bw-1:12]; + 5'd13 : signal_out = signal_in[13+bw-1:13]; + 5'd14 : signal_out = signal_in[14+bw-1:14]; + 5'd15 : signal_out = signal_in[15+bw-1:15]; + 5'd16 : signal_out = signal_in[16+bw-1:16]; + 5'd17 : signal_out = signal_in[17+bw-1:17]; + 5'd18 : signal_out = signal_in[18+bw-1:18]; + 5'd19 : signal_out = signal_in[19+bw-1:19]; + 5'd20 : signal_out = signal_in[20+bw-1:20]; + 5'd21 : signal_out = signal_in[21+bw-1:21]; + 5'd22 : signal_out = signal_in[22+bw-1:22]; + 5'd23 : signal_out = signal_in[23+bw-1:23]; + 5'd24 : signal_out = signal_in[24+bw-1:24]; + 5'd25 : signal_out = signal_in[25+bw-1:25]; + 5'd26 : signal_out = signal_in[26+bw-1:26]; + 5'd27 : signal_out = signal_in[27+bw-1:27]; + 5'd28 : signal_out = signal_in[28+bw-1:28]; + + default : signal_out = signal_in[28+bw-1:28]; + endcase // case(shift) + +endmodule // cic_dec_shifter + diff --git a/usrp/fpga/sdr_lib/cic_decim.v b/usrp/fpga/sdr_lib/cic_decim.v index d7e5310b..8c44f006 100755 --- a/usrp/fpga/sdr_lib/cic_decim.v +++ b/usrp/fpga/sdr_lib/cic_decim.v @@ -24,7 +24,7 @@ module cic_decim ( clock,reset,enable,rate,strobe_in,strobe_out,signal_in,signal_out); parameter bw = 16; parameter N = 4; - parameter log2_of_max_rate = 8; + parameter log2_of_max_rate = 7; parameter maxbitgain = N * log2_of_max_rate; input clock; @@ -35,7 +35,8 @@ module cic_decim input [bw-1:0] signal_in; output [bw-1:0] signal_out; reg [bw-1:0] signal_out; - + wire [bw-1:0] signal_out_unreg; + wire [bw+maxbitgain-1:0] signal_in_ext; reg [bw+maxbitgain-1:0] integrator [0:N-1]; reg [bw+maxbitgain-1:0] differentiator [0:N-1]; @@ -82,25 +83,11 @@ module cic_decim wire [bw+maxbitgain-1:0] signal_out_unnorm = pipeline[N-1]; - // Output Scaling to same width as input - function [2:0] log_ceil; - input [7:0] val; - log_ceil = val[6] ? 3'd7 : val[5] ? 3'd6 : val[4] ? 3'd5 : - val[3] ? 3'd4 : val[2] ? 3'd3 : val[1] ? 3'd2 : 3'd1; - endfunction // log_ceil - - wire [2:0] shift = log_ceil(rate); - - always @* - case(shift) - 3'd2 : signal_out = signal_out_unnorm[2*N+bw-1:2*N]; // Decim by 4 - 3'd3 : signal_out = signal_out_unnorm[3*N+bw-1:3*N]; - 3'd4 : signal_out = signal_out_unnorm[4*N+bw-1:4*N]; - 3'd5 : signal_out = signal_out_unnorm[5*N+bw-1:5*N]; - 3'd6 : signal_out = signal_out_unnorm[6*N+bw-1:6*N]; - 3'd7 : signal_out = signal_out_unnorm[7*N+bw-1:7*N]; - default : signal_out = signal_out_unnorm[7*N+bw-1:7*N]; - endcase // case(shift) + cic_dec_shifter #(bw) + cic_dec_shifter(rate,signal_out_unnorm,signal_out_unreg); + + always @(posedge clock) + signal_out <= #1 signal_out_unreg; endmodule // cic_decim diff --git a/usrp/fpga/sdr_lib/cic_int_shifter.v b/usrp/fpga/sdr_lib/cic_int_shifter.v index fd928373..a8a3276f 100644 --- a/usrp/fpga/sdr_lib/cic_int_shifter.v +++ b/usrp/fpga/sdr_lib/cic_int_shifter.v @@ -20,37 +20,34 @@ // +// NOTE This only works for N=4, max interp rate of 128 +// NOTE signal "rate" is ONE LESS THAN the actual rate + module cic_int_shifter(rate,signal_in,signal_out); parameter bw = 16; - parameter N = 4; - parameter log2_of_max_rate = 7; - parameter maxbitgain = (N-1)*log2_of_max_rate; + parameter maxbitgain = 21; input [7:0] rate; input wire [bw+maxbitgain-1:0] signal_in; output reg [bw-1:0] signal_out; - function [2:0] log_ceil; - input [7:0] val; - log_ceil = val[6] ? 3'd7 : val[5] ? 3'd6 : val[4] ? 3'd5 : - val[3] ? 3'd4 : val[2] ? 3'd3 : val[1] ? 3'd2 : 3'd1; - endfunction // log_ceil - function [4:0] bitgain; input [7:0] rate; case(rate) - 8'd4 : bitgain = 2*(N-1); - 8'd8 : bitgain = 3*(N-1); - 8'd16 : bitgain = 4*(N-1); - 8'd32 : bitgain = 5*(N-1); - 8'd64 : bitgain = 6*(N-1); - 8'd128 : bitgain = 7*(N-1); + // Exact Cases + 8'd4 : bitgain = 6; + 8'd8 : bitgain = 9; + 8'd16 : bitgain = 12; + 8'd32 : bitgain = 15; + 8'd64 : bitgain = 18; + 8'd128 : bitgain = 21; + // Nearest without overflow 8'd5 : bitgain = 7; 8'd6 : bitgain = 8; 8'd7 : bitgain = 9; 8'd9,8'd10 : bitgain = 10; - 8'd12 : bitgain = 11; + 8'd11,8'd12 : bitgain = 11; 8'd13,8'd14,8'd15 : bitgain = 12; 8'd17,8'd18,8'd19,8'd20 : bitgain = 13; 8'd21,8'd22,8'd23,8'd24,8'd25 : bitgain = 14; @@ -90,7 +87,6 @@ module cic_int_shifter(rate,signal_in,signal_out); 5'd19 : signal_out = signal_in[19+bw-1:19]; 5'd20 : signal_out = signal_in[20+bw-1:20]; - default : signal_out = signal_in[21+bw-1:21]; endcase // case(shift) diff --git a/usrp/fpga/sdr_lib/cic_interp.v b/usrp/fpga/sdr_lib/cic_interp.v index 0dd62162..32d10686 100755 --- a/usrp/fpga/sdr_lib/cic_interp.v +++ b/usrp/fpga/sdr_lib/cic_interp.v @@ -45,11 +45,12 @@ module cic_interp(clock,reset,enable,rate,strobe_in,strobe_out,signal_in,signal_ sign_extend #(bw,bw+maxbitgain) ext_input (.in(signal_in),.out(signal_in_ext)); - + + wire clear_me = reset | ~enable; //FIXME Note that this section has pipe and diff reversed // It still works, but is confusing always @(posedge clock) - if(reset) + if(clear_me) for(i=0;i USB) + // USB Read Side of FIFO + always @(negedge usbclk) + have_pkt_rdy <= (rxfifolevel >= 256); // 257 Bug Fix - reg [8:0] read_count; + reg [8:0] read_count; always @(negedge usbclk) if(bus_reset) - read_count <= #1 9'd0; - else if(RD & ~read_count[8]) - read_count <= #1 read_count + 9'd1; + read_count <= 0; + else if(RD) + read_count <= read_count + 1; else - read_count <= #1 RD ? read_count : 9'b0; + read_count <= 0; - // Detect overrun + // FIFO + wire ch0_in, ch0_out, iq_out; + assign ch0_in = (phase == 1); + + fifo_4k_18 rxfifo + ( // DSP Write Side + .data ( {ch0_in, phase[0], fifodata} ), + .wrreq (~rx_full & (phase != 0)), + .wrclk ( rxclk ), + .wrfull ( rx_full ), + .wrempty ( ), + .wrusedw ( ), + // USB Read Side + .q ( {ch0_out,iq_out,usbdata} ), + .rdreq ( RD & ~read_count[8] ), + .rdclk ( ~usbclk ), + .rdfull ( ), + .rdempty ( ), + .rdusedw ( rxfifolevel ), + // Async, shared + .aclr ( reset ) ); + + // DSP Write Side of FIFO + reg [15:0] ch_0_reg; + reg [15:0] ch_1_reg; + reg [15:0] ch_2_reg; + reg [15:0] ch_3_reg; + reg [15:0] ch_4_reg; + reg [15:0] ch_5_reg; + reg [15:0] ch_6_reg; + reg [15:0] ch_7_reg; + always @(posedge rxclk) - if(reset) - rx_overrun <= 1'b0; - else if(rxstrobe & (store_next != 0)) - rx_overrun <= 1'b1; - else if(clear_status) - rx_overrun <= 1'b0; + if (rxstrobe) + begin + ch_0_reg <= ch_0; + ch_1_reg <= ch_1; + ch_2_reg <= ch_2; + ch_3_reg <= ch_3; + ch_4_reg <= ch_4; + ch_5_reg <= ch_5; + ch_6_reg <= ch_6; + ch_7_reg <= ch_7; + end - reg [3:0] store_next; + reg [3:0] phase; always @(posedge rxclk) if(reset) - store_next <= #1 4'd0; - else if(rxstrobe & (store_next == 0)) - store_next <= #1 4'd1; - else if(~rx_full & (store_next == channels)) - store_next <= #1 4'd0; - else if(~rx_full & (bitwidth == 5'd8) & (store_next == (channels>>1))) - store_next <= #1 4'd0; - else if(~rx_full & (store_next != 0)) - store_next <= #1 store_next + 4'd1; - + phase <= 4'd0; + else if(phase == 0) + begin + if(rxstrobe) + phase <= 4'd1; + end + else if(~rx_full) + if(phase == ((bitwidth == 5'd8) ? (channels>>1) : channels)) + phase <= 4'd0; + else + phase <= phase + 4'd1; + assign fifodata = (bitwidth == 5'd8) ? fifodata_8 : fifodata_16; - + assign fifodata_8 = {round_8(top),round_8(bottom)}; reg [15:0] top,bottom; - + function [7:0] round_8; input [15:0] in_val; - + round_8 = in_val[15:8] + (in_val[15] & |in_val[7:0]); endfunction // round_8 always @* - case(store_next) + case(phase) 4'd1 : begin - bottom = ch_0; - top = ch_1; + bottom = ch_0_reg; + top = ch_1_reg; end 4'd2 : begin - bottom = ch_2; - top = ch_3; + bottom = ch_2_reg; + top = ch_3_reg; end 4'd3 : begin - bottom = ch_4; - top = ch_5; + bottom = ch_4_reg; + top = ch_5_reg; end 4'd4 : begin - bottom = ch_6; - top = ch_7; + bottom = ch_6_reg; + top = ch_7_reg; end default : begin top = 16'hFFFF; bottom = 16'hFFFF; end - endcase // case(store_next) + endcase // case(phase) always @* - case(store_next) - 4'd1 : fifodata_16 = ch_0; - 4'd2 : fifodata_16 = ch_1; - 4'd3 : fifodata_16 = ch_2; - 4'd4 : fifodata_16 = ch_3; - 4'd5 : fifodata_16 = ch_4; - 4'd6 : fifodata_16 = ch_5; - 4'd7 : fifodata_16 = ch_6; - 4'd8 : fifodata_16 = ch_7; + case(phase) + 4'd1 : fifodata_16 = ch_0_reg; + 4'd2 : fifodata_16 = ch_1_reg; + 4'd3 : fifodata_16 = ch_2_reg; + 4'd4 : fifodata_16 = ch_3_reg; + 4'd5 : fifodata_16 = ch_4_reg; + 4'd6 : fifodata_16 = ch_5_reg; + 4'd7 : fifodata_16 = ch_6_reg; + 4'd8 : fifodata_16 = ch_7_reg; default : fifodata_16 = 16'hFFFF; - endcase // case(store_next) + endcase // case(phase) - fifo_4k rxfifo - ( .data ( fifodata ), - .wrreq (~rx_full & (store_next != 0)), - .wrclk ( rxclk ), + // Detect overrun + reg clear_status_dsp, rx_overrun_dsp; + always @(posedge rxclk) + clear_status_dsp <= clear_status; - .q ( usbdata ), - .rdreq ( RD & ~read_count[8] ), - .rdclk ( ~usbclk ), - - .aclr ( reset ), // This one is asynchronous, so we can use either reset - - .rdempty ( rx_empty ), - .rdusedw ( rxfifolevel ), - .wrfull ( rx_full ), - .wrusedw ( ) - ); + always @(negedge usbclk) + rx_overrun <= rx_overrun_dsp; + + always @(posedge rxclk) + if(reset) + rx_overrun_dsp <= 1'b0; + else if(rxstrobe & (phase != 0)) + rx_overrun_dsp <= 1'b1; + else if(clear_status_dsp) + rx_overrun_dsp <= 1'b0; + + // Debug bus + // + // 15:0 rxclk domain => TXA 15:0 + // 31:16 usbclk domain => RXA 15:0 - assign have_pkt_rdy = (rxfifolevel >= 256); + assign debugbus[0] = reset; + assign debugbus[1] = reset_regs; + assign debugbus[2] = rxstrobe; + assign debugbus[6:3] = channels; + assign debugbus[7] = rx_full; + assign debugbus[11:8] = phase; + assign debugbus[12] = ch0_in; + assign debugbus[13] = clear_status_dsp; + assign debugbus[14] = rx_overrun_dsp; + assign debugbus[15] = rxclk; - // Debugging Aids - assign debugbus[0] = RD; - assign debugbus[1] = rx_overrun; - assign debugbus[2] = read_count[8]; - assign debugbus[3] = rx_full; - assign debugbus[4] = rxstrobe; - assign debugbus[5] = usbclk; - assign debugbus[6] = have_pkt_rdy; - assign debugbus[10:7] = store_next; - //assign debugbus[15:11] = rxfifolevel[4:0]; - assign debugbus[15:11] = bitwidth; + assign debugbus[16] = bus_reset; + assign debugbus[17] = RD; + assign debugbus[18] = have_pkt_rdy; + assign debugbus[19] = rx_overrun; + assign debugbus[20] = read_count[0]; + assign debugbus[21] = read_count[8]; + assign debugbus[22] = ch0_out; + assign debugbus[23] = iq_out; + assign debugbus[24] = clear_status; + assign debugbus[30:25] = 0; + assign debugbus[31] = usbclk; endmodule // rx_buffer diff --git a/usrp/fpga/sdr_lib/rx_chain.v b/usrp/fpga/sdr_lib/rx_chain.v index 73c0c26e..bc4336e4 100644 --- a/usrp/fpga/sdr_lib/rx_chain.v +++ b/usrp/fpga/sdr_lib/rx_chain.v @@ -21,7 +21,8 @@ // Following defines conditionally include RX path circuitry -`include "usrp_std.vh" +`include "config.vh" // resolved relative to project root + module rx_chain (input clock, input reset, diff --git a/usrp/fpga/sdr_lib/strobe_gen.v b/usrp/fpga/sdr_lib/strobe_gen.v index a27dda8d..ba1a8ab2 100644 --- a/usrp/fpga/sdr_lib/strobe_gen.v +++ b/usrp/fpga/sdr_lib/strobe_gen.v @@ -19,11 +19,13 @@ // Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA // + + module strobe_gen ( input clock, input reset, input enable, - input [7:0] rate, + input [7:0] rate, // Rate should be 1 LESS THAN your desired divide ratio input strobe_in, output wire strobe ); diff --git a/usrp/fpga/sdr_lib/tx_buffer.v b/usrp/fpga/sdr_lib/tx_buffer.v index 63202c9d..58642229 100644 --- a/usrp/fpga/sdr_lib/tx_buffer.v +++ b/usrp/fpga/sdr_lib/tx_buffer.v @@ -24,115 +24,147 @@ // Fifo has 1024 or 2048 lines module tx_buffer - ( input usbclk, + ( // USB Side + input usbclk, input bus_reset, // Used here for the 257-Hack to fix the FX2 bug - input reset, // standard DSP-side reset input [15:0] usbdata, input wire WR, - output wire have_space, + output reg have_space, output reg tx_underrun, + input clear_status, + + // DSP Side + input txclk, + input reset, // standard DSP-side reset input wire [3:0] channels, output reg [15:0] tx_i_0, output reg [15:0] tx_q_0, output reg [15:0] tx_i_1, output reg [15:0] tx_q_1, - output reg [15:0] tx_i_2, - output reg [15:0] tx_q_2, - output reg [15:0] tx_i_3, - output reg [15:0] tx_q_3, - input txclk, input txstrobe, - input clear_status, output wire tx_empty, - output [11:0] debugbus + output [31:0] debugbus ); - wire [11:0] txfifolevel; - reg [8:0] write_count; - wire tx_full; - wire [15:0] fifodata; - wire rdreq; - - reg [3:0] load_next; - - // DAC Side of FIFO - assign rdreq = ((load_next != channels) & !tx_empty); + wire [11:0] txfifolevel; + wire [15:0] fifodata; + wire rdreq; + reg [3:0] phase; + wire sop_f, iq_f; + reg sop; + + // USB Side of FIFO + reg [15:0] usbdata_reg; + reg wr_reg; + reg [8:0] write_count; + always @(posedge usbclk) + have_space <= (txfifolevel < (4092-256)); // be extra conservative + + always @(posedge usbclk) + begin + wr_reg <= WR; + usbdata_reg <= usbdata; + end + + always @(posedge usbclk) + if(bus_reset) + write_count <= 0; + else if(wr_reg) + write_count <= write_count + 1; + else + write_count <= 0; + + always @(posedge usbclk) + sop <= WR & ~wr_reg; // Edge detect + + // FIFO + fifo_4k_18 txfifo + ( // USB Write Side + .data ( {sop,write_count[0],usbdata_reg} ), + .wrreq ( wr_reg & ~write_count[8] ), + .wrclk ( usbclk ), + .wrfull ( ), + .wrempty ( ), + .wrusedw ( txfifolevel ), + // DSP Read Side + .q ( {sop_f, iq_f, fifodata} ), + .rdreq ( rdreq ), + .rdclk ( txclk ), + .rdfull ( ), + .rdempty ( tx_empty ), + .rdusedw ( ), + // Async, shared + .aclr ( reset ) ); + + // DAC Side of FIFO always @(posedge txclk) if(reset) begin - {tx_i_0,tx_q_0,tx_i_1,tx_q_1,tx_i_2,tx_q_2,tx_i_3,tx_q_3} - <= #1 128'h0; - load_next <= #1 4'd0; + {tx_i_0,tx_q_0,tx_i_1,tx_q_1} <= 64'h0; + phase <= 4'd0; + end + else if(phase == channels) + begin + if(txstrobe) + phase <= 4'd0; end else - if(load_next != channels) - begin - load_next <= #1 load_next + 4'd1; - case(load_next) - 4'd0 : tx_i_0 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd1 : tx_q_0 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd2 : tx_i_1 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd3 : tx_q_1 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd4 : tx_i_2 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd5 : tx_q_2 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd6 : tx_i_3 <= #1 tx_empty ? 16'd0 : fifodata; - 4'd7 : tx_q_3 <= #1 tx_empty ? 16'd0 : fifodata; - endcase // case(load_next) - end // if (load_next != channels) - else if(txstrobe & (load_next == channels)) + if(~tx_empty) begin - load_next <= #1 4'd0; + case(phase) + 4'd0 : tx_i_0 <= fifodata; + 4'd1 : tx_q_0 <= fifodata; + 4'd2 : tx_i_1 <= fifodata; + 4'd3 : tx_q_1 <= fifodata; + endcase // case(phase) + phase <= phase + 4'd1; end - - // USB Side of FIFO - assign have_space = (txfifolevel <= (4095-256)); + + assign rdreq = ((phase != channels) & ~tx_empty); + + // Detect Underruns, cross clock domains + reg clear_status_dsp, tx_underrun_dsp; + always @(posedge txclk) + clear_status_dsp <= clear_status; always @(posedge usbclk) - if(bus_reset) // Use bus reset because this is on usbclk - write_count <= #1 0; - else if(WR & ~write_count[8]) - write_count <= #1 write_count + 9'd1; - else - write_count <= #1 WR ? write_count : 9'b0; - - // Detect Underruns + tx_underrun <= tx_underrun_dsp; + always @(posedge txclk) if(reset) - tx_underrun <= 1'b0; - else if(txstrobe & (load_next != channels)) - tx_underrun <= 1'b1; - else if(clear_status) - tx_underrun <= 1'b0; + tx_underrun_dsp <= 1'b0; + else if(txstrobe & (phase != channels)) + tx_underrun_dsp <= 1'b1; + else if(clear_status_dsp) + tx_underrun_dsp <= 1'b0; - // FIFO - fifo_4k txfifo - ( .data ( usbdata ), - .wrreq ( WR & ~write_count[8] ), - .wrclk ( usbclk ), - - .q ( fifodata ), - .rdreq ( rdreq ), - .rdclk ( txclk ), - - .aclr ( reset ), // asynch, so we can use either - - .rdempty ( tx_empty ), - .rdusedw ( ), - .wrfull ( tx_full ), - .wrusedw ( txfifolevel ) - ); - - // Debugging Aids - assign debugbus[0] = WR; - assign debugbus[1] = have_space; - assign debugbus[2] = tx_empty; - assign debugbus[3] = tx_full; - assign debugbus[4] = tx_underrun; - assign debugbus[5] = write_count[8]; - assign debugbus[6] = txstrobe; - assign debugbus[7] = rdreq; - assign debugbus[11:8] = load_next; + // TX debug bus + // + // 15:0 txclk domain => TXA [15:0] + // 31:16 usbclk domain => RXA [15:0] + assign debugbus[0] = reset; + assign debugbus[1] = txstrobe; + assign debugbus[2] = rdreq; + assign debugbus[6:3] = phase; + assign debugbus[7] = tx_empty; + assign debugbus[8] = tx_underrun_dsp; + assign debugbus[9] = iq_f; + assign debugbus[10] = sop_f; + assign debugbus[14:11] = 0; + assign debugbus[15] = txclk; + + assign debugbus[16] = bus_reset; + assign debugbus[17] = WR; + assign debugbus[18] = wr_reg; + assign debugbus[19] = have_space; + assign debugbus[20] = write_count[8]; + assign debugbus[21] = write_count[0]; + assign debugbus[22] = sop; + assign debugbus[23] = tx_underrun; + assign debugbus[30:24] = 0; + assign debugbus[31] = usbclk; + endmodule // tx_buffer diff --git a/usrp/fpga/toplevel/include/common_config_1rxhb_1tx.vh b/usrp/fpga/toplevel/include/common_config_1rxhb_1tx.vh new file mode 100644 index 00000000..fb2e915b --- /dev/null +++ b/usrp/fpga/toplevel/include/common_config_1rxhb_1tx.vh @@ -0,0 +1,61 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built + `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] + `define TX_SINGLE +//`define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* receive circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + + `define RX_SINGLE +//`define RX_DUAL +//`define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter + `define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter + `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/include/common_config_2rx_0tx.vh b/usrp/fpga/toplevel/include/common_config_2rx_0tx.vh new file mode 100644 index 00000000..c97c5a32 --- /dev/null +++ b/usrp/fpga/toplevel/include/common_config_2rx_0tx.vh @@ -0,0 +1,61 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006 Matt Ettus +// Copyright (C) 2006 Martin Dudok van Heel +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built +// `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] +//`define TX_SINGLE +//`define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* receive circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + +//`define RX_SINGLE +`define RX_DUAL +//`define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter +//`define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter + `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/include/common_config_2rxhb_0tx.vh b/usrp/fpga/toplevel/include/common_config_2rxhb_0tx.vh new file mode 100644 index 00000000..459268b6 --- /dev/null +++ b/usrp/fpga/toplevel/include/common_config_2rxhb_0tx.vh @@ -0,0 +1,61 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006 Matt Ettus +// Copyright (C) 2006 Martin Dudok van Heel +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built +// `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] +//`define TX_SINGLE +//`define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* transmit circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + +//`define RX_SINGLE + `define RX_DUAL +//`define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter + `define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter + `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/include/common_config_2rxhb_2tx.vh b/usrp/fpga/toplevel/include/common_config_2rxhb_2tx.vh new file mode 100644 index 00000000..ecf0fa03 --- /dev/null +++ b/usrp/fpga/toplevel/include/common_config_2rxhb_2tx.vh @@ -0,0 +1,61 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built + `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] +//`define TX_SINGLE + `define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* receive circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + +//`define RX_SINGLE + `define RX_DUAL +//`define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter + `define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter + `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/include/common_config_4rx_0tx.vh b/usrp/fpga/toplevel/include/common_config_4rx_0tx.vh new file mode 100644 index 00000000..49841957 --- /dev/null +++ b/usrp/fpga/toplevel/include/common_config_4rx_0tx.vh @@ -0,0 +1,61 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ------------------------------------------------------------ +// If TX_ON is not defined, there is *no* transmit circuitry built +// `define TX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD +// to respectively enable 1, 2 or 4 transmit channels. +// [Please note that only TX_SINGLE and TX_DUAL are currently valid] +//`define TX_SINGLE +//`define TX_DUAL +//`define TX_QUAD + +// ------------------------------------------------------------ +// Define TX_HB_ON to enable the transmit halfband filter +// [Not implemented] +//`define TX_HB_ON + +// ------------------------------------------------------------ +// IF RX_ON is not defined, there is *no* receive circuitry built + `define RX_ON + +// ------------------------------------------------------------ +// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD +// to respectively define 1, 2 or 4 receive channels. + +//`define RX_SINGLE +//`define RX_DUAL + `define RX_QUAD + +// ------------------------------------------------------------ +// Define RX_HB_ON to enable the receive halfband filter +//`define RX_HB_ON + +// ------------------------------------------------------------ +// Define RX_NCO_ON to enable the receive Numerical Controlled Osc + `define RX_NCO_ON + +// ------------------------------------------------------------ +// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter + `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/include/common_config_bottom.vh b/usrp/fpga/toplevel/include/common_config_bottom.vh new file mode 100644 index 00000000..3129798a --- /dev/null +++ b/usrp/fpga/toplevel/include/common_config_bottom.vh @@ -0,0 +1,104 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ==================================================================== +// This is the common tail for standard configuation +// ==================================================================== +// +// >>>> DO NOT EDIT BELOW HERE <<<< +// +// N.B., *all* the remainder of the code should be conditionalized +// only in terms of: +// +// TX_ON, TX_EN_0, TX_EN_1, TX_EN_2, TX_EN_3, TX_CAP_NCHAN, TX_CAP_HB, +// RX_ON, RX_EN_0, RX_EN_1, RX_EN_2, RX_EN_3, RX_CAP_NCHAN, RX_CAP_HB, +// RX_NCO_ON, RX_CIC_ON +// ==================================================================== + +`ifdef TX_ON + + `ifdef TX_SINGLE + `define TX_EN_0 + `define TX_CAP_NCHAN 3'd1 + `endif + + `ifdef TX_DUAL + `define TX_EN_0 + `define TX_EN_1 + `define TX_CAP_NCHAN 3'd2 + `endif + + `ifdef TX_QUAD + `define TX_EN_0 + `define TX_EN_1 + `define TX_EN_2 + `define TX_EN_3 + `define TX_CAP_NCHAN 3'd4 + `endif + + `ifdef TX_HB_ON + `define TX_CAP_HB 1 + `else + `define TX_CAP_HB 0 + `endif + +`else // !ifdef TX_ON + + `define TX_CAP_NCHAN 3'd0 + `define TX_CAP_HB 0 + +`endif // !ifdef TX_ON + +// -------------------------------------------------------------------- + +`ifdef RX_ON + + `ifdef RX_SINGLE + `define RX_EN_0 + `define RX_CAP_NCHAN 3'd1 + `endif + + `ifdef RX_DUAL + `define RX_EN_0 + `define RX_EN_1 + `define RX_CAP_NCHAN 3'd2 + `endif + + `ifdef RX_QUAD + `define RX_EN_0 + `define RX_EN_1 + `define RX_EN_2 + `define RX_EN_3 + `define RX_CAP_NCHAN 3'd4 + `endif + + `ifdef RX_HB_ON + `define RX_CAP_HB 1 + `else + `define RX_CAP_HB 0 + `endif + +`else // !ifdef RX_ON + + `define RX_CAP_NCHAN 3'd0 + `define RX_CAP_HB 0 + +`endif // !ifdef RX_ON diff --git a/usrp/fpga/toplevel/usrp_inband_usb/config.vh b/usrp/fpga/toplevel/usrp_inband_usb/config.vh new file mode 100644 index 00000000..007a529e --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/config.vh @@ -0,0 +1,53 @@ + // -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ==================================================================== +// User control over what parts get included +// +// >>>> EDIT ONLY THIS SECTION <<<< +// Uncomment only ONE configuration +// ==================================================================== + +// ==================================================================== +// FIXME drive configuration selection from the command line and/or gui +// ==================================================================== + +// Uncomment this for 1 rx channel (w/ halfband) & 1 transmit channel + `include "../include/common_config_1rxhb_1tx.vh" + +// Uncomment this for 2 rx channels (w/ halfband) & 2 transmit channels +// `include "../include/common_config_2rxhb_2tx.vh" + +// Uncomment this for 4 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_4rx_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/ halfband) & 0 transmit channels +//`include "../include/common_config_2rxhb_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_2rx_0tx.vh" + +// Add other "known to fit" configurations here... + +// ==================================================================== +// Now include the common footer +// ==================================================================== + `include "../include/common_config_bottom.vh" diff --git a/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.csf b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.csf new file mode 100644 index 00000000..c10cff92 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.csf @@ -0,0 +1,444 @@ +COMPILER_SETTINGS +{ + IO_PLACEMENT_OPTIMIZATION = OFF; + ENABLE_DRC_SETTINGS = OFF; + PHYSICAL_SYNTHESIS_REGISTER_RETIMING = OFF; + PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION = OFF; + PHYSICAL_SYNTHESIS_COMBO_LOGIC = OFF; + DRC_FANOUT_EXCEEDING = 30; + DRC_REPORT_FANOUT_EXCEEDING = OFF; + DRC_TOP_FANOUT = 50; + DRC_REPORT_TOP_FANOUT = OFF; + RUN_DRC_DURING_COMPILATION = OFF; + ADV_NETLIST_OPT_RETIME_CORE_AND_IO = ON; + ADV_NETLIST_OPT_SYNTH_USE_FITTER_INFO = OFF; + ADV_NETLIST_OPT_SYNTH_GATE_RETIME = OFF; + ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP = OFF; + SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES = OFF; + MERGE_HEX_FILE = OFF; + TRUE_WYSIWYG_FLOW = OFF; + SEED = 1; + FINAL_PLACEMENT_OPTIMIZATION = AUTOMATICALLY; + FAMILY = Cyclone; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "LOWER TO 1ESB UPPER TO 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_OUTPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA1 = "DPRAM0 TO 1 DPRAM1 TO 2"; + DPRAM_32BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_8BIT_16BIT_SINGLE_PORT_MODE_INPUT_EPXA1 = "MEGALAB COLUMN 1"; + DPRAM_DUAL_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_OTHER_SIGNALS_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DEEP_MODE_OTHER_SIGNALS_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_SINGLE_PORT_MODE_OUTPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4ESB"; + DPRAM_WIDE_MODE_OUTPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4ESB"; + DPRAM_DEEP_MODE_OUTPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_DUAL_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_SINGLE_PORT_MODE_INPUT_EPXA4_10 = "DPRAM0 TO 3 DPRAM1 TO 4"; + DPRAM_WIDE_MODE_INPUT_EPXA4_10 = "LOWER TO 3 UPPER TO 4"; + DPRAM_DEEP_MODE_INPUT_EPXA4_10 = "MEGALAB COLUMN 3"; + DPRAM_OTHER_SIGNALS_EPXA4_10 = "DEFAULT OTHER ROUTING OPTIONS"; + DPRAM_OUTPUT_EPXA4_10 = "DEFAULT OUTPUT ROUTING OPTIONS"; + DPRAM_INPUT_EPXA4_10 = "DEFAULT INPUT ROUTING OPTIONS"; + STRIPE_TO_PLD_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PLD_TO_STRIPE_INTERRUPTS_EPXA4_10 = "MEGALAB COLUMN 2"; + PROCESSOR_DEBUG_EXTENSIONS_EPXA4_10 = "MEGALAB COLUMN 2"; + STRIPE_TO_PLD_BRIDGE_EPXA4_10 = "MEGALAB COLUMN 1"; + FAST_FIT_COMPILATION = OFF; + SIGNALPROBE_DURING_NORMAL_COMPILATION = OFF; + OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING = ON; + OPTIMIZE_TIMING = "NORMAL COMPILATION"; + OPTIMIZE_HOLD_TIMING = OFF; + COMPILATION_LEVEL = FULL; + SAVE_DISK_SPACE = OFF; + SPEED_DISK_USAGE_TRADEOFF = NORMAL; + LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT = OFF; + SIGNALPROBE_ALLOW_OVERUSE = OFF; + FOCUS_ENTITY_NAME = |usrp_inband_usb; + ROUTING_BACK_ANNOTATION_MODE = OFF; + INC_PLC_MODE = OFF; + FIT_ONLY_ONE_ATTEMPT = OFF; +} +DEFAULT_DEVICE_OPTIONS +{ + GENERATE_CONFIG_HEXOUT_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_JBC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_SVF_FILE = OFF; + RESERVE_PIN = "AS INPUT TRI-STATED"; + RESERVE_ALL_UNUSED_PINS = "AS OUTPUT DRIVING GROUND"; + HEXOUT_FILE_COUNT_DIRECTION = UP; + HEXOUT_FILE_START_ADDRESS = 0; + GENERATE_HEX_FILE = OFF; + GENERATE_RBF_FILE = OFF; + GENERATE_TTF_FILE = OFF; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + APEX20K_CONFIGURATION_DEVICE = AUTO; + USE_CONFIGURATION_DEVICE = ON; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + AUTO_RESTART_CONFIGURATION = OFF; + ENABLE_VREFB_PIN = OFF; + ENABLE_VREFA_PIN = OFF; + SECURITY_BIT = OFF; + USER_START_UP_CLOCK = OFF; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "ACTIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_UPDATE_MODE = STANDARD; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + ENABLE_JTAG_BST_SUPPORT = OFF; + CONFIGURATION_CLOCK_DIVISOR = 1; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CLOCK_SOURCE = INTERNAL; + COMPRESSION_MODE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; +} +AUTO_SLD_HUB_ENTITY +{ + AUTO_INSERT_SLD_HUB_ENTITY = ENABLE; + HUB_INSTANCE_NAME = SLD_HUB_INST; + HUB_ENTITY_NAME = SLD_HUB; +} +SIGNALTAP_LOGIC_ANALYZER_SETTINGS +{ + ENABLE_SIGNALTAP = Off; + AUTO_ENABLE_SMART_COMPILE = On; +} +CHIP(usrp_inband_usb) +{ + DEVICE = EP1C12Q240C8; + DEVICE_FILTER_PACKAGE = "ANY QFP"; + DEVICE_FILTER_PIN_COUNT = 240; + DEVICE_FILTER_SPEED_GRADE = ANY; + AUTO_RESTART_CONFIGURATION = OFF; + RELEASE_CLEARS_BEFORE_TRI_STATES = OFF; + USER_START_UP_CLOCK = OFF; + ENABLE_DEVICE_WIDE_RESET = OFF; + ENABLE_DEVICE_WIDE_OE = OFF; + ENABLE_INIT_DONE_OUTPUT = OFF; + FLEX10K_ENABLE_LOCK_OUTPUT = OFF; + ENABLE_JTAG_BST_SUPPORT = OFF; + MAX7000_ENABLE_JTAG_BST_SUPPORT = ON; + APEX20K_JTAG_USER_CODE = FFFFFFFF; + MERCURY_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_JTAG_USER_CODE = 7F; + MAX7000_JTAG_USER_CODE = FFFFFFFF; + MAX7000S_JTAG_USER_CODE = FFFF; + STRATIX_JTAG_USER_CODE = FFFFFFFF; + APEX20K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + MERCURY_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX6K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + FLEX10K_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + EXCALIBUR_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + APEXII_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + STRATIX_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + CYCLONE_CONFIGURATION_SCHEME = "PASSIVE SERIAL"; + USE_CONFIGURATION_DEVICE = OFF; + APEX20K_CONFIGURATION_DEVICE = AUTO; + MERCURY_CONFIGURATION_DEVICE = AUTO; + FLEX6K_CONFIGURATION_DEVICE = AUTO; + FLEX10K_CONFIGURATION_DEVICE = AUTO; + EXCALIBUR_CONFIGURATION_DEVICE = AUTO; + STRATIX_CONFIGURATION_DEVICE = AUTO; + CYCLONE_CONFIGURATION_DEVICE = AUTO; + STRATIX_UPDATE_MODE = STANDARD; + APEX20K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + MERCURY_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + STRATIX_CONFIG_DEVICE_JTAG_USER_CODE = FFFFFFFF; + AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE = ON; + DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE = OFF; + COMPRESSION_MODE = OFF; + ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = OFF; + FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE = ON; + EPROM_USE_CHECKSUM_AS_USERCODE = OFF; + USE_CHECKSUM_AS_USERCODE = OFF; + MAX7000_USE_CHECKSUM_AS_USERCODE = OFF; + GENERATE_TTF_FILE = OFF; + GENERATE_RBF_FILE = ON; + GENERATE_HEX_FILE = OFF; + SECURITY_BIT = OFF; + ENABLE_VREFA_PIN = OFF; + ENABLE_VREFB_PIN = OFF; + GENERATE_SVF_FILE = OFF; + GENERATE_ISC_FILE = OFF; + GENERATE_JAM_FILE = OFF; + GENERATE_JBC_FILE = OFF; + GENERATE_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_SVF_FILE = OFF; + GENERATE_CONFIG_ISC_FILE = OFF; + GENERATE_CONFIG_JAM_FILE = OFF; + GENERATE_CONFIG_JBC_FILE = OFF; + GENERATE_CONFIG_JBC_FILE_COMPRESSED = ON; + GENERATE_CONFIG_HEXOUT_FILE = OFF; + ON_CHIP_BITSTREAM_DECOMPRESSION = OFF; + BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE = OFF; + HEXOUT_FILE_START_ADDRESS = 0; + HEXOUT_FILE_COUNT_DIRECTION = UP; + RESERVE_ALL_UNUSED_PINS = "AS INPUT TRI-STATED"; + STRATIX_DEVICE_IO_STANDARD = LVTTL; + CLOCK_SOURCE = INTERNAL; + CONFIGURATION_CLOCK_FREQUENCY = "10 MHZ"; + CONFIGURATION_CLOCK_DIVISOR = 1; + RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_RDYNBUSY_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_DATA0_AFTER_CONFIGURATION = "AS INPUT TRI-STATED"; + RESERVE_NCEO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + RESERVE_ASDO_AFTER_CONFIGURATION = "USE AS REGULAR IO"; + SCLK : LOCATION = Pin_101; + SDI : LOCATION = Pin_100; + SEN : LOCATION = Pin_98; + SLD : LOCATION = Pin_95; + adc1_data[0] : LOCATION = Pin_5; + adc1_data[10] : LOCATION = Pin_235; + adc1_data[11] : LOCATION = Pin_234; + adc1_data[1] : LOCATION = Pin_4; + adc1_data[2] : LOCATION = Pin_3; + adc1_data[3] : LOCATION = Pin_2; + adc1_data[4] : LOCATION = Pin_1; + adc1_data[4] : IO_STANDARD = LVTTL; + adc1_data[5] : LOCATION = Pin_240; + adc1_data[6] : LOCATION = Pin_239; + adc1_data[7] : LOCATION = Pin_238; + adc1_data[8] : LOCATION = Pin_237; + adc1_data[9] : LOCATION = Pin_236; + adc2_data[0] : LOCATION = Pin_20; + adc2_data[10] : LOCATION = Pin_8; + adc2_data[11] : LOCATION = Pin_7; + adc2_data[1] : LOCATION = Pin_19; + adc2_data[2] : LOCATION = Pin_18; + adc2_data[3] : LOCATION = Pin_17; + adc2_data[4] : LOCATION = Pin_16; + adc2_data[5] : LOCATION = Pin_15; + adc2_data[6] : LOCATION = Pin_14; + adc2_data[7] : LOCATION = Pin_13; + adc2_data[8] : LOCATION = Pin_12; + adc2_data[9] : LOCATION = Pin_11; + adc3_data[0] : LOCATION = Pin_200; + adc3_data[10] : LOCATION = Pin_184; + adc3_data[11] : LOCATION = Pin_183; + adc3_data[1] : LOCATION = Pin_197; + adc3_data[2] : LOCATION = Pin_196; + adc3_data[3] : LOCATION = Pin_195; + adc3_data[4] : LOCATION = Pin_194; + adc3_data[5] : LOCATION = Pin_193; + adc3_data[6] : LOCATION = Pin_188; + adc3_data[7] : LOCATION = Pin_187; + adc3_data[8] : LOCATION = Pin_186; + adc3_data[9] : LOCATION = Pin_185; + adc4_data[0] : LOCATION = Pin_222; + adc4_data[10] : LOCATION = Pin_203; + adc4_data[11] : LOCATION = Pin_202; + adc4_data[1] : LOCATION = Pin_219; + adc4_data[2] : LOCATION = Pin_217; + adc4_data[3] : LOCATION = Pin_216; + adc4_data[4] : LOCATION = Pin_215; + adc4_data[5] : LOCATION = Pin_214; + adc4_data[6] : LOCATION = Pin_213; + adc4_data[7] : LOCATION = Pin_208; + adc4_data[8] : LOCATION = Pin_207; + adc4_data[9] : LOCATION = Pin_206; + adc_oeb[0] : LOCATION = Pin_228; + adc_oeb[1] : LOCATION = Pin_21; + adc_oeb[2] : LOCATION = Pin_181; + adc_oeb[3] : LOCATION = Pin_218; + adc_otr[0] : LOCATION = Pin_233; + adc_otr[1] : LOCATION = Pin_6; + adc_otr[2] : LOCATION = Pin_182; + adc_otr[3] : LOCATION = Pin_201; + adclk0 : LOCATION = Pin_224; + adclk1 : LOCATION = Pin_226; + clk0 : LOCATION = Pin_28; + clk0 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk0 : IO_STANDARD = LVTTL; + clk1 : LOCATION = Pin_29; + clk1 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk1 : IO_STANDARD = LVTTL; + clk3 : LOCATION = Pin_152; + clk3 : RESERVE_PIN = "AS INPUT TRI-STATED"; + clk3 : IO_STANDARD = LVTTL; + clk_120mhz : LOCATION = Pin_153; + clk_120mhz : IO_STANDARD = LVTTL; + clk_out : LOCATION = Pin_63; + clk_out : IO_STANDARD = LVTTL; + dac1_data[0] : LOCATION = Pin_165; + dac1_data[10] : LOCATION = Pin_177; + dac1_data[11] : LOCATION = Pin_178; + dac1_data[12] : LOCATION = Pin_179; + dac1_data[13] : LOCATION = Pin_180; + dac1_data[1] : LOCATION = Pin_166; + dac1_data[2] : LOCATION = Pin_167; + dac1_data[3] : LOCATION = Pin_168; + dac1_data[4] : LOCATION = Pin_169; + dac1_data[5] : LOCATION = Pin_170; + dac1_data[6] : LOCATION = Pin_173; + dac1_data[7] : LOCATION = Pin_174; + dac1_data[8] : LOCATION = Pin_175; + dac1_data[9] : LOCATION = Pin_176; + dac2_data[0] : LOCATION = Pin_159; + dac2_data[10] : LOCATION = Pin_163; + dac2_data[11] : LOCATION = Pin_139; + dac2_data[12] : LOCATION = Pin_164; + dac2_data[13] : LOCATION = Pin_138; + dac2_data[1] : LOCATION = Pin_158; + dac2_data[2] : LOCATION = Pin_160; + dac2_data[3] : LOCATION = Pin_156; + dac2_data[4] : LOCATION = Pin_161; + dac2_data[5] : LOCATION = Pin_144; + dac2_data[6] : LOCATION = Pin_162; + dac2_data[7] : LOCATION = Pin_141; + dac2_data[8] : LOCATION = Pin_143; + dac2_data[9] : LOCATION = Pin_140; + dac3_data[0] : LOCATION = Pin_122; + dac3_data[10] : LOCATION = Pin_134; + dac3_data[11] : LOCATION = Pin_135; + dac3_data[12] : LOCATION = Pin_136; + dac3_data[13] : LOCATION = Pin_137; + dac3_data[1] : LOCATION = Pin_123; + dac3_data[2] : LOCATION = Pin_124; + dac3_data[3] : LOCATION = Pin_125; + dac3_data[4] : LOCATION = Pin_126; + dac3_data[5] : LOCATION = Pin_127; + dac3_data[6] : LOCATION = Pin_128; + dac3_data[7] : LOCATION = Pin_131; + dac3_data[8] : LOCATION = Pin_132; + dac3_data[9] : LOCATION = Pin_133; + dac4_data[0] : LOCATION = Pin_104; + dac4_data[10] : LOCATION = Pin_118; + dac4_data[11] : LOCATION = Pin_119; + dac4_data[12] : LOCATION = Pin_120; + dac4_data[13] : LOCATION = Pin_121; + dac4_data[1] : LOCATION = Pin_105; + dac4_data[2] : LOCATION = Pin_106; + dac4_data[3] : LOCATION = Pin_107; + dac4_data[4] : LOCATION = Pin_108; + dac4_data[5] : LOCATION = Pin_113; + dac4_data[6] : LOCATION = Pin_114; + dac4_data[7] : LOCATION = Pin_115; + dac4_data[8] : LOCATION = Pin_116; + dac4_data[9] : LOCATION = Pin_117; + enable_rx : LOCATION = Pin_88; + enable_tx : LOCATION = Pin_93; + gndbus[0] : LOCATION = Pin_223; + gndbus[0] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[0] : IO_STANDARD = LVTTL; + gndbus[1] : LOCATION = Pin_225; + gndbus[1] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[1] : IO_STANDARD = LVTTL; + gndbus[2] : LOCATION = Pin_227; + gndbus[2] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[2] : IO_STANDARD = LVTTL; + gndbus[3] : LOCATION = Pin_62; + gndbus[3] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[3] : IO_STANDARD = LVTTL; + gndbus[4] : LOCATION = Pin_64; + gndbus[4] : RESERVE_PIN = "AS INPUT TRI-STATED"; + gndbus[4] : IO_STANDARD = LVTTL; + misc_pins[0] : LOCATION = Pin_87; + misc_pins[0] : IO_STANDARD = LVTTL; + misc_pins[10] : LOCATION = Pin_76; + misc_pins[10] : IO_STANDARD = LVTTL; + misc_pins[11] : LOCATION = Pin_74; + misc_pins[11] : IO_STANDARD = LVTTL; + misc_pins[1] : LOCATION = Pin_86; + misc_pins[1] : IO_STANDARD = LVTTL; + misc_pins[2] : LOCATION = Pin_85; + misc_pins[2] : IO_STANDARD = LVTTL; + misc_pins[3] : LOCATION = Pin_84; + misc_pins[3] : IO_STANDARD = LVTTL; + misc_pins[4] : LOCATION = Pin_83; + misc_pins[4] : IO_STANDARD = LVTTL; + misc_pins[5] : LOCATION = Pin_82; + misc_pins[5] : IO_STANDARD = LVTTL; + misc_pins[6] : LOCATION = Pin_79; + misc_pins[6] : IO_STANDARD = LVTTL; + misc_pins[7] : LOCATION = Pin_78; + misc_pins[7] : IO_STANDARD = LVTTL; + misc_pins[8] : LOCATION = Pin_77; + misc_pins[8] : IO_STANDARD = LVTTL; + misc_pins[9] : LOCATION = Pin_75; + misc_pins[9] : IO_STANDARD = LVTTL; + reset : LOCATION = Pin_94; + usbclk : LOCATION = Pin_55; + usbctl[0] : LOCATION = Pin_56; + usbctl[1] : LOCATION = Pin_54; + usbctl[2] : LOCATION = Pin_53; + usbctl[3] : LOCATION = Pin_58; + usbctl[4] : LOCATION = Pin_57; + usbctl[5] : LOCATION = Pin_44; + usbdata[0] : LOCATION = Pin_73; + usbdata[10] : LOCATION = Pin_41; + usbdata[11] : LOCATION = Pin_39; + usbdata[12] : LOCATION = Pin_38; + usbdata[12] : IO_STANDARD = LVTTL; + usbdata[13] : LOCATION = Pin_37; + usbdata[14] : LOCATION = Pin_24; + usbdata[15] : LOCATION = Pin_23; + usbdata[1] : LOCATION = Pin_68; + usbdata[2] : LOCATION = Pin_67; + usbdata[3] : LOCATION = Pin_66; + usbdata[4] : LOCATION = Pin_65; + usbdata[5] : LOCATION = Pin_61; + usbdata[6] : LOCATION = Pin_60; + usbdata[7] : LOCATION = Pin_59; + usbdata[8] : LOCATION = Pin_43; + usbdata[9] : LOCATION = Pin_42; + usbrdy[0] : LOCATION = Pin_45; + usbrdy[1] : LOCATION = Pin_46; + usbrdy[2] : LOCATION = Pin_47; + usbrdy[3] : LOCATION = Pin_48; + usbrdy[4] : LOCATION = Pin_49; + usbrdy[5] : LOCATION = Pin_50; + clear_status : LOCATION = Pin_99; +} diff --git a/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.esf b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.esf new file mode 100644 index 00000000..6079e979 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.esf @@ -0,0 +1,14 @@ +SIMULATOR_SETTINGS +{ + ESTIMATE_POWER_CONSUMPTION = OFF; + GLITCH_INTERVAL = 1NS; + GLITCH_DETECTION = OFF; + SIMULATION_COVERAGE = ON; + CHECK_OUTPUTS = OFF; + SETUP_HOLD_DETECTION = OFF; + POWER_ESTIMATION_START_TIME = "0 NS"; + ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS = ON; + SIMULATION_MODE = TIMING; + START_TIME = 0NS; + USE_COMPILER_SETTINGS = usrp_inband_usb; +} diff --git a/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.psf b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.psf new file mode 100644 index 00000000..85276ecc --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.psf @@ -0,0 +1,312 @@ +DEFAULT_DESIGN_ASSISTANT_SETTINGS +{ + HCPY_ALOAD_SIGNALS = OFF; + HCPY_VREF_PINS = OFF; + HCPY_CAT = OFF; + HCPY_ILLEGAL_HC_DEV_PKG = OFF; + ACLK_RULE_IMSZER_ADOMAIN = OFF; + ACLK_RULE_SZER_BTW_ACLK_DOMAIN = OFF; + ACLK_RULE_NO_SZER_ACLK_DOMAIN = OFF; + ACLK_CAT = OFF; + SIGNALRACE_RULE_ASYNCHPIN_SYNCH_CLKPIN = OFF; + SIGNALRACE_CAT = OFF; + NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED = OFF; + NONSYNCHSTRUCT_RULE_SRLATCH = OFF; + NONSYNCHSTRUCT_RULE_DLATCH = OFF; + NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR = OFF; + NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN = OFF; + NONSYNCHSTRUCT_RULE_RIPPLE_CLK = OFF; + NONSYNCHSTRUCT_RULE_DELAY_CHAIN = OFF; + NONSYNCHSTRUCT_RULE_REG_LOOP = OFF; + NONSYNCHSTRUCT_RULE_COMBLOOP = OFF; + NONSYNCHSTRUCT_CAT = OFF; + NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE = OFF; + TIMING_RULE_COIN_CLKEDGE = OFF; + TIMING_RULE_SHIFT_REG = OFF; + TIMING_RULE_HIGH_FANOUTS = OFF; + TIMING_CAT = OFF; + RESET_RULE_ALL = OFF; + RESET_RULE_IMSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_UNSYNCH_ASYNCH_DOMAIN = OFF; + RESET_RULE_REG_ASNYCH = OFF; + RESET_RULE_COMB_ASYNCH_RESET = OFF; + RESET_RULE_IMSYNCH_EXRESET = OFF; + RESET_RULE_UNSYNCH_EXRESET = OFF; + RESET_RULE_INPINS_RESETNET = OFF; + RESET_CAT = OFF; + CLK_RULE_ALL = OFF; + CLK_RULE_MIX_EDGES = OFF; + CLK_RULE_CLKNET_CLKSPINES = OFF; + CLK_RULE_INPINS_CLKNET = OFF; + CLK_RULE_GATING_SCHEME = OFF; + CLK_RULE_INV_CLOCK = OFF; + CLK_RULE_COMB_CLOCK = OFF; + CLK_CAT = OFF; + HCPY_EXCEED_USER_IO_USAGE = OFF; + HCPY_EXCEED_RAM_USAGE = OFF; + NONSYNCHSTRUCT_RULE_ASYN_RAM = OFF; + SIGNALRACE_RULE_TRISTATE = OFF; + ASSG_RULE_MISSING_TIMING = OFF; + ASSG_RULE_MISSING_FMAX = OFF; + ASSG_CAT = OFF; +} +SYNTHESIS_FITTING_SETTINGS +{ + AUTO_SHIFT_REGISTER_RECOGNITION = ON; + AUTO_DSP_RECOGNITION = ON; + AUTO_RAM_RECOGNITION = ON; + REMOVE_DUPLICATE_LOGIC = ON; + AUTO_TURBO_BIT = ON; + AUTO_MERGE_PLLS = ON; + AUTO_OPEN_DRAIN_PINS = ON; + AUTO_PARALLEL_EXPANDERS = ON; + AUTO_FAST_OUTPUT_ENABLE_REGISTERS = OFF; + AUTO_FAST_OUTPUT_REGISTERS = OFF; + AUTO_FAST_INPUT_REGISTERS = OFF; + AUTO_CASCADE_CHAINS = ON; + AUTO_CARRY_CHAINS = ON; + AUTO_DELAY_CHAINS = ON; + MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH = 4; + PARALLEL_EXPANDER_CHAIN_LENGTH = 16; + CASCADE_CHAIN_LENGTH = 2; + STRATIX_CARRY_CHAIN_LENGTH = 70; + MERCURY_CARRY_CHAIN_LENGTH = 48; + FLEX10K_CARRY_CHAIN_LENGTH = 32; + FLEX6K_CARRY_CHAIN_LENGTH = 32; + CARRY_CHAIN_LENGTH = 48; + CARRY_OUT_PINS_LCELL_INSERT = ON; + NORMAL_LCELL_INSERT = ON; + AUTO_LCELL_INSERTION = ON; + ALLOW_XOR_GATE_USAGE = ON; + AUTO_PACKED_REGISTERS_STRATIX = NORMAL; + AUTO_PACKED_REGISTERS = OFF; + AUTO_PACKED_REG_CYCLONE = NORMAL; + FLEX10K_OPTIMIZATION_TECHNIQUE = AREA; + FLEX6K_OPTIMIZATION_TECHNIQUE = AREA; + MERCURY_OPTIMIZATION_TECHNIQUE = AREA; + APEX20K_OPTIMIZATION_TECHNIQUE = SPEED; + MAX7000_OPTIMIZATION_TECHNIQUE = SPEED; + STRATIX_OPTIMIZATION_TECHNIQUE = SPEED; + CYCLONE_OPTIMIZATION_TECHNIQUE = AREA; + FLEX10K_TECHNOLOGY_MAPPER = LUT; + FLEX6K_TECHNOLOGY_MAPPER = LUT; + MERCURY_TECHNOLOGY_MAPPER = LUT; + APEX20K_TECHNOLOGY_MAPPER = LUT; + MAX7000_TECHNOLOGY_MAPPER = "PRODUCT TERM"; + STRATIX_TECHNOLOGY_MAPPER = LUT; + AUTO_IMPLEMENT_IN_ROM = OFF; + AUTO_GLOBAL_MEMORY_CONTROLS = OFF; + AUTO_GLOBAL_REGISTER_CONTROLS = ON; + AUTO_GLOBAL_OE = ON; + AUTO_GLOBAL_CLOCK = ON; + USE_LPM_FOR_AHDL_OPERATORS = ON; + LIMIT_AHDL_INTEGERS_TO_32_BITS = OFF; + ENABLE_BUS_HOLD_CIRCUITRY = OFF; + WEAK_PULL_UP_RESISTOR = OFF; + TURBO_BIT = ON; + MAX7000_IGNORE_SOFT_BUFFERS = OFF; + IGNORE_SOFT_BUFFERS = ON; + MAX7000_IGNORE_LCELL_BUFFERS = AUTO; + IGNORE_LCELL_BUFFERS = OFF; + IGNORE_ROW_GLOBAL_BUFFERS = OFF; + IGNORE_GLOBAL_BUFFERS = OFF; + IGNORE_CASCADE_BUFFERS = OFF; + IGNORE_CARRY_BUFFERS = OFF; + REMOVE_DUPLICATE_REGISTERS = ON; + REMOVE_REDUNDANT_LOGIC_CELLS = OFF; + ALLOW_POWER_UP_DONT_CARE = ON; + PCI_IO = OFF; + NOT_GATE_PUSH_BACK = ON; + SLOW_SLEW_RATE = OFF; + DSP_BLOCK_BALANCING = AUTO; + STATE_MACHINE_PROCESSING = AUTO; +} +DEFAULT_HARDCOPY_SETTINGS +{ + HARDCOPY_EXTERNAL_CLOCK_JITTER = "0.0 NS"; +} +DEFAULT_TIMING_REQUIREMENTS +{ + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + RUN_ALL_TIMING_ANALYSES = ON; + IGNORE_CLOCK_SETTINGS = OFF; + DEFAULT_HOLD_MULTICYCLE = "SAME AS MULTICYCLE"; + CUT_OFF_IO_PIN_FEEDBACK = ON; + CUT_OFF_CLEAR_AND_PRESET_PATHS = ON; + CUT_OFF_READ_DURING_WRITE_PATHS = ON; + CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS = ON; + DO_MIN_ANALYSIS = ON; + DO_MIN_TIMING = OFF; + NUMBER_OF_PATHS_TO_REPORT = 200; + NUMBER_OF_DESTINATION_TO_REPORT = 10; + NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT = 10; + MAX_SCC_SIZE = 50; +} +HDL_SETTINGS +{ + VERILOG_INPUT_VERSION = VERILOG_2001; + ENABLE_IP_DEBUG = OFF; + VHDL_INPUT_VERSION = VHDL93; + VHDL_SHOW_LMF_MAPPING_MESSAGES = OFF; +} +PROJECT_INFO(usrp_inband_usb) +{ + ORIGINAL_QUARTUS_VERSION = 3.0; + PROJECT_CREATION_TIME_DATE = "00:14:04 JULY 13, 2003"; + LAST_QUARTUS_VERSION = 3.0; + SHOW_REGISTRATION_MESSAGE = ON; + USER_LIBRARIES = "e:\usrp\fpga\megacells"; +} +THIRD_PARTY_EDA_TOOLS(usrp_inband_usb) +{ + EDA_DESIGN_ENTRY_SYNTHESIS_TOOL = ""; + EDA_SIMULATION_TOOL = ""; + EDA_TIMING_ANALYSIS_TOOL = ""; + EDA_BOARD_DESIGN_TOOL = ""; + EDA_FORMAL_VERIFICATION_TOOL = ""; + EDA_RESYNTHESIS_TOOL = ""; +} +EDA_TOOL_SETTINGS(eda_design_synthesis) +{ + EDA_INPUT_GND_NAME = GND; + EDA_INPUT_VCC_NAME = VCC; + EDA_SHOW_LMF_MAPPING_MESSAGES = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_INPUT_DATA_FORMAT = EDIF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_simulation) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_timing_analysis) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + EDA_LAUNCH_CMD_LINE_TOOL = OFF; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_board_design) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_formal_verification) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + RESYNTHESIS_RETIMING = FULL; +} +EDA_TOOL_SETTINGS(eda_palace) +{ + EDA_INCLUDE_VHDL_CONFIGURATION_DECLARATION = OFF; + EDA_TRUNCATE_LONG_HIERARCHY_PATHS = OFF; + EDA_MAINTAIN_DESIGN_HIERARCHY = OFF; + EDA_WRITE_DEVICE_CONTROL_PORTS = OFF; + EDA_GENERATE_FUNCTIONAL_NETLIST = OFF; + EDA_FLATTEN_BUSES = OFF; + EDA_MAP_ILLEGAL_CHARACTERS = OFF; + EDA_EXCALIBUR_ATOMS_AS_SINGLE_STRIPE = OFF; + EDA_RUN_TOOL_AUTOMATICALLY = OFF; + EDA_OUTPUT_DATA_FORMAT = NONE; + RESYNTHESIS_RETIMING = FULL; + RESYNTHESIS_PHYSICAL_SYNTHESIS = NORMAL; + RESYNTHESIS_OPTIMIZATION_EFFORT = NORMAL; + USE_GENERATED_PHYSICAL_CONSTRAINTS = ON; +} +CLOCK(clk_120mhz) +{ + FMAX_REQUIREMENT = "120.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(usbclk) +{ + FMAX_REQUIREMENT = "48.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(SCLK) +{ + FMAX_REQUIREMENT = "1.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk0) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} +CLOCK(adclk1) +{ + FMAX_REQUIREMENT = "60.0 MHz"; + INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS = OFF; + DUTY_CYCLE = 50; + DIVIDE_BASE_CLOCK_PERIOD_BY = 1; + MULTIPLY_BASE_CLOCK_PERIOD_BY = 1; + INVERT_BASE_CLOCK = OFF; +} diff --git a/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qpf b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qpf new file mode 100644 index 00000000..f6220e32 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qpf @@ -0,0 +1,29 @@ +# Copyright (C) 1991-2004 Altera Corporation +# Any megafunction design, and related netlist (encrypted or decrypted), +# support information, device programming or simulation file, and any other +# associated documentation or information provided by Altera or a partner +# under Altera's Megafunction Partnership Program may be used only +# to program PLD devices (but not masked PLD devices) from Altera. Any +# other use of such megafunction design, netlist, support information, +# device programming or simulation file, or any other related documentation +# or information is prohibited for any other purpose, including, but not +# limited to modification, reverse engineering, de-compiling, or use with +# any other silicon devices, unless such use is explicitly licensed under +# a separate agreement with Altera or a megafunction partner. Title to the +# intellectual property, including patents, copyrights, trademarks, trade +# secrets, or maskworks, embodied in any such megafunction design, netlist, +# support information, device programming or simulation file, or any other +# related documentation or information provided by Altera or a megafunction +# partner, remains with Altera, the megafunction partner, or their respective +# licensors. No other licenses, including any licenses needed under any third +# party's intellectual property, are provided herein. + + + +QUARTUS_VERSION = "4.0" +DATE = "17:10:11 December 20, 2004" + + +# Active Revisions + +PROJECT_REVISION = "usrp_inband_usb" diff --git a/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qsf b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qsf new file mode 100644 index 00000000..ae0807f6 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.qsf @@ -0,0 +1,423 @@ +# Copyright (C) 1991-2005 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. + + +# The default values for assignments are stored in the file +# usrp_inband_usb_assignment_defaults.qdf +# If this file doesn't exist, and for assignments not listed, see file +# assignment_defaults.qdf + +# Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 3.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "00:14:04 JULY 13, 2003" +set_global_assignment -name LAST_QUARTUS_VERSION "7.2 SP2" + +# Pin & Location Assignments +# ========================== +set_global_assignment -name RESERVE_PIN "AS INPUT TRI-STATED" +set_location_assignment PIN_29 -to SCLK +set_location_assignment PIN_117 -to SDI +set_location_assignment PIN_28 -to usbclk +set_location_assignment PIN_107 -to usbctl[0] +set_location_assignment PIN_106 -to usbctl[1] +set_location_assignment PIN_105 -to usbctl[2] +set_location_assignment PIN_100 -to usbdata[0] +set_location_assignment PIN_84 -to usbdata[10] +set_location_assignment PIN_83 -to usbdata[11] +set_location_assignment PIN_82 -to usbdata[12] +set_location_assignment PIN_79 -to usbdata[13] +set_location_assignment PIN_78 -to usbdata[14] +set_location_assignment PIN_77 -to usbdata[15] +set_location_assignment PIN_99 -to usbdata[1] +set_location_assignment PIN_98 -to usbdata[2] +set_location_assignment PIN_95 -to usbdata[3] +set_location_assignment PIN_94 -to usbdata[4] +set_location_assignment PIN_93 -to usbdata[5] +set_location_assignment PIN_88 -to usbdata[6] +set_location_assignment PIN_87 -to usbdata[7] +set_location_assignment PIN_86 -to usbdata[8] +set_location_assignment PIN_85 -to usbdata[9] +set_location_assignment PIN_104 -to usbrdy[0] +set_location_assignment PIN_101 -to usbrdy[1] +set_location_assignment PIN_76 -to FX2_1 +set_location_assignment PIN_75 -to FX2_2 +set_location_assignment PIN_74 -to FX2_3 +set_location_assignment PIN_116 -to io_rx_a[0] +set_location_assignment PIN_115 -to io_rx_a[1] +set_location_assignment PIN_114 -to io_rx_a[2] +set_location_assignment PIN_113 -to io_rx_a[3] +set_location_assignment PIN_108 -to io_rx_a[4] +set_location_assignment PIN_195 -to io_rx_a[5] +set_location_assignment PIN_196 -to io_rx_a[6] +set_location_assignment PIN_197 -to io_rx_a[7] +set_location_assignment PIN_200 -to io_rx_a[8] +set_location_assignment PIN_201 -to io_rx_a[9] +set_location_assignment PIN_202 -to io_rx_a[10] +set_location_assignment PIN_203 -to io_rx_a[11] +set_location_assignment PIN_206 -to io_rx_a[12] +set_location_assignment PIN_207 -to io_rx_a[13] +set_location_assignment PIN_208 -to io_rx_a[14] +set_location_assignment PIN_214 -to io_rx_b[0] +set_location_assignment PIN_215 -to io_rx_b[1] +set_location_assignment PIN_216 -to io_rx_b[2] +set_location_assignment PIN_217 -to io_rx_b[3] +set_location_assignment PIN_218 -to io_rx_b[4] +set_location_assignment PIN_219 -to io_rx_b[5] +set_location_assignment PIN_222 -to io_rx_b[6] +set_location_assignment PIN_223 -to io_rx_b[7] +set_location_assignment PIN_224 -to io_rx_b[8] +set_location_assignment PIN_225 -to io_rx_b[9] +set_location_assignment PIN_226 -to io_rx_b[10] +set_location_assignment PIN_227 -to io_rx_b[11] +set_location_assignment PIN_228 -to io_rx_b[12] +set_location_assignment PIN_233 -to io_rx_b[13] +set_location_assignment PIN_234 -to io_rx_b[14] +set_location_assignment PIN_175 -to io_tx_a[0] +set_location_assignment PIN_176 -to io_tx_a[1] +set_location_assignment PIN_177 -to io_tx_a[2] +set_location_assignment PIN_178 -to io_tx_a[3] +set_location_assignment PIN_179 -to io_tx_a[4] +set_location_assignment PIN_180 -to io_tx_a[5] +set_location_assignment PIN_181 -to io_tx_a[6] +set_location_assignment PIN_182 -to io_tx_a[7] +set_location_assignment PIN_183 -to io_tx_a[8] +set_location_assignment PIN_184 -to io_tx_a[9] +set_location_assignment PIN_185 -to io_tx_a[10] +set_location_assignment PIN_186 -to io_tx_a[11] +set_location_assignment PIN_187 -to io_tx_a[12] +set_location_assignment PIN_188 -to io_tx_a[13] +set_location_assignment PIN_193 -to io_tx_a[14] +set_location_assignment PIN_73 -to io_tx_b[0] +set_location_assignment PIN_68 -to io_tx_b[1] +set_location_assignment PIN_67 -to io_tx_b[2] +set_location_assignment PIN_66 -to io_tx_b[3] +set_location_assignment PIN_65 -to io_tx_b[4] +set_location_assignment PIN_64 -to io_tx_b[5] +set_location_assignment PIN_63 -to io_tx_b[6] +set_location_assignment PIN_62 -to io_tx_b[7] +set_location_assignment PIN_61 -to io_tx_b[8] +set_location_assignment PIN_60 -to io_tx_b[9] +set_location_assignment PIN_59 -to io_tx_b[10] +set_location_assignment PIN_58 -to io_tx_b[11] +set_location_assignment PIN_57 -to io_tx_b[12] +set_location_assignment PIN_56 -to io_tx_b[13] +set_location_assignment PIN_55 -to io_tx_b[14] +set_location_assignment PIN_152 -to master_clk +set_location_assignment PIN_144 -to rx_a_a[0] +set_location_assignment PIN_143 -to rx_a_a[1] +set_location_assignment PIN_141 -to rx_a_a[2] +set_location_assignment PIN_140 -to rx_a_a[3] +set_location_assignment PIN_139 -to rx_a_a[4] +set_location_assignment PIN_138 -to rx_a_a[5] +set_location_assignment PIN_137 -to rx_a_a[6] +set_location_assignment PIN_136 -to rx_a_a[7] +set_location_assignment PIN_135 -to rx_a_a[8] +set_location_assignment PIN_134 -to rx_a_a[9] +set_location_assignment PIN_133 -to rx_a_a[10] +set_location_assignment PIN_132 -to rx_a_a[11] +set_location_assignment PIN_23 -to rx_a_b[0] +set_location_assignment PIN_21 -to rx_a_b[1] +set_location_assignment PIN_20 -to rx_a_b[2] +set_location_assignment PIN_19 -to rx_a_b[3] +set_location_assignment PIN_18 -to rx_a_b[4] +set_location_assignment PIN_17 -to rx_a_b[5] +set_location_assignment PIN_16 -to rx_a_b[6] +set_location_assignment PIN_15 -to rx_a_b[7] +set_location_assignment PIN_14 -to rx_a_b[8] +set_location_assignment PIN_13 -to rx_a_b[9] +set_location_assignment PIN_12 -to rx_a_b[10] +set_location_assignment PIN_11 -to rx_a_b[11] +set_location_assignment PIN_131 -to rx_b_a[0] +set_location_assignment PIN_128 -to rx_b_a[1] +set_location_assignment PIN_127 -to rx_b_a[2] +set_location_assignment PIN_126 -to rx_b_a[3] +set_location_assignment PIN_125 -to rx_b_a[4] +set_location_assignment PIN_124 -to rx_b_a[5] +set_location_assignment PIN_123 -to rx_b_a[6] +set_location_assignment PIN_122 -to rx_b_a[7] +set_location_assignment PIN_121 -to rx_b_a[8] +set_location_assignment PIN_120 -to rx_b_a[9] +set_location_assignment PIN_119 -to rx_b_a[10] +set_location_assignment PIN_118 -to rx_b_a[11] +set_location_assignment PIN_8 -to rx_b_b[0] +set_location_assignment PIN_7 -to rx_b_b[1] +set_location_assignment PIN_6 -to rx_b_b[2] +set_location_assignment PIN_5 -to rx_b_b[3] +set_location_assignment PIN_4 -to rx_b_b[4] +set_location_assignment PIN_3 -to rx_b_b[5] +set_location_assignment PIN_2 -to rx_b_b[6] +set_location_assignment PIN_240 -to rx_b_b[7] +set_location_assignment PIN_239 -to rx_b_b[8] +set_location_assignment PIN_238 -to rx_b_b[9] +set_location_assignment PIN_237 -to rx_b_b[10] +set_location_assignment PIN_236 -to rx_b_b[11] +set_location_assignment PIN_156 -to SDO +set_location_assignment PIN_153 -to SEN_FPGA +set_location_assignment PIN_159 -to tx_a[0] +set_location_assignment PIN_160 -to tx_a[1] +set_location_assignment PIN_161 -to tx_a[2] +set_location_assignment PIN_162 -to tx_a[3] +set_location_assignment PIN_163 -to tx_a[4] +set_location_assignment PIN_164 -to tx_a[5] +set_location_assignment PIN_165 -to tx_a[6] +set_location_assignment PIN_166 -to tx_a[7] +set_location_assignment PIN_167 -to tx_a[8] +set_location_assignment PIN_168 -to tx_a[9] +set_location_assignment PIN_169 -to tx_a[10] +set_location_assignment PIN_170 -to tx_a[11] +set_location_assignment PIN_173 -to tx_a[12] +set_location_assignment PIN_174 -to tx_a[13] +set_location_assignment PIN_38 -to tx_b[0] +set_location_assignment PIN_39 -to tx_b[1] +set_location_assignment PIN_41 -to tx_b[2] +set_location_assignment PIN_42 -to tx_b[3] +set_location_assignment PIN_43 -to tx_b[4] +set_location_assignment PIN_44 -to tx_b[5] +set_location_assignment PIN_45 -to tx_b[6] +set_location_assignment PIN_46 -to tx_b[7] +set_location_assignment PIN_47 -to tx_b[8] +set_location_assignment PIN_48 -to tx_b[9] +set_location_assignment PIN_49 -to tx_b[10] +set_location_assignment PIN_50 -to tx_b[11] +set_location_assignment PIN_53 -to tx_b[12] +set_location_assignment PIN_54 -to tx_b[13] +set_location_assignment PIN_158 -to TXSYNC_A +set_location_assignment PIN_37 -to TXSYNC_B +set_location_assignment PIN_235 -to io_rx_b[15] +set_location_assignment PIN_24 -to io_tx_b[15] +set_location_assignment PIN_213 -to io_rx_a[15] +set_location_assignment PIN_194 -to io_tx_a[15] +set_location_assignment PIN_1 -to MYSTERY_SIGNAL + +# Timing Assignments +# ================== +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name SAVE_DISK_SPACE OFF +set_global_assignment -name DEVICE_FILTER_PACKAGE "ANY QFP" +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 240 +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name FAMILY Cyclone +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE BALANCED +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name TOP_LEVEL_ENTITY usrp_inband_usb +set_global_assignment -name VHDL_SHOW_LMF_MAPPING_MESSAGES OFF +set_global_assignment -name USER_LIBRARIES "e:\\usrp\\fpga\\megacells" +set_global_assignment -name AUTO_ENABLE_SMART_COMPILE ON + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP1C12Q240C8 +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" +set_global_assignment -name OPTIMIZE_HOLD_TIMING OFF +set_global_assignment -name OPTIMIZE_TIMING "NORMAL COMPILATION" +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING OFF +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT NORMAL +set_global_assignment -name INC_PLC_MODE OFF +set_global_assignment -name ROUTING_BACK_ANNOTATION_MODE OFF +set_instance_assignment -name IO_STANDARD LVTTL -to usbdata[12] +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD LVTTL +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 + +# Timing Analysis Assignments +# =========================== +set_global_assignment -name MAX_SCC_SIZE 50 + +# EDA Netlist Writer Assignments +# ============================== +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" + +# Assembler Assignments +# ===================== +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "AS INPUT TRI-STATED" +set_global_assignment -name AUTO_RESTART_CONFIGURATION OFF + +# Simulator Assignments +# ===================== +set_global_assignment -name START_TIME "0 ns" +set_global_assignment -name GLITCH_INTERVAL "1 ns" + +# Design Assistant Assignments +# ============================ +set_global_assignment -name DRC_REPORT_TOP_FANOUT OFF +set_global_assignment -name DRC_REPORT_FANOUT_EXCEEDING OFF +set_global_assignment -name ASSG_CAT OFF +set_global_assignment -name ASSG_RULE_MISSING_FMAX OFF +set_global_assignment -name ASSG_RULE_MISSING_TIMING OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_ASYN_RAM OFF +set_global_assignment -name CLK_CAT OFF +set_global_assignment -name CLK_RULE_COMB_CLOCK OFF +set_global_assignment -name CLK_RULE_INV_CLOCK OFF +set_global_assignment -name CLK_RULE_GATING_SCHEME OFF +set_global_assignment -name CLK_RULE_INPINS_CLKNET OFF +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES OFF +set_global_assignment -name CLK_RULE_MIX_EDGES OFF +set_global_assignment -name RESET_CAT OFF +set_global_assignment -name RESET_RULE_INPINS_RESETNET OFF +set_global_assignment -name RESET_RULE_UNSYNCH_EXRESET OFF +set_global_assignment -name RESET_RULE_IMSYNCH_EXRESET OFF +set_global_assignment -name RESET_RULE_COMB_ASYNCH_RESET OFF +set_global_assignment -name RESET_RULE_UNSYNCH_ASYNCH_DOMAIN OFF +set_global_assignment -name RESET_RULE_IMSYNCH_ASYNCH_DOMAIN OFF +set_global_assignment -name TIMING_CAT OFF +set_global_assignment -name TIMING_RULE_SHIFT_REG OFF +set_global_assignment -name TIMING_RULE_COIN_CLKEDGE OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_COMB_DRIVES_RAM_WE OFF +set_global_assignment -name NONSYNCHSTRUCT_CAT OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_COMBLOOP OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_REG_LOOP OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_DELAY_CHAIN OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_RIPPLE_CLK OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_ILLEGAL_PULSE_GEN OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_MULTI_VIBRATOR OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_SRLATCH OFF +set_global_assignment -name NONSYNCHSTRUCT_RULE_LATCH_UNIDENTIFIED OFF +set_global_assignment -name SIGNALRACE_CAT OFF +set_global_assignment -name ACLK_CAT OFF +set_global_assignment -name ACLK_RULE_NO_SZER_ACLK_DOMAIN OFF +set_global_assignment -name ACLK_RULE_SZER_BTW_ACLK_DOMAIN OFF +set_global_assignment -name ACLK_RULE_IMSZER_ADOMAIN OFF +set_global_assignment -name HCPY_CAT OFF +set_global_assignment -name HCPY_VREF_PINS OFF + +# SignalTap II Assignments +# ======================== +set_global_assignment -name HUB_ENTITY_NAME SLD_HUB +set_global_assignment -name HUB_INSTANCE_NAME SLD_HUB_INST +set_global_assignment -name ENABLE_SIGNALTAP OFF + +# LogicLock Region Assignments +# ============================ +set_global_assignment -name LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT OFF + +# ----------------- +# start CLOCK(SCLK) + + # Timing Assignments + # ================== +set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK +set_global_assignment -name FMAX_REQUIREMENT "1 MHz" -section_id SCLK +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id SCLK + +# end CLOCK(SCLK) +# --------------- + +# ----------------------- +# start CLOCK(master_clk) + + # Timing Assignments + # ================== +set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk +set_global_assignment -name FMAX_REQUIREMENT "64 MHz" -section_id master_clk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id master_clk + +# end CLOCK(master_clk) +# --------------------- + +# ------------------- +# start CLOCK(usbclk) + + # Timing Assignments + # ================== +set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk +set_global_assignment -name FMAX_REQUIREMENT "48 MHz" -section_id usbclk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id usbclk + +# end CLOCK(usbclk) +# ----------------- + +# ---------------------- +# start ENTITY(usrp_inband_usb) + + # Timing Assignments + # ================== +set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK +set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk +set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk + +# end ENTITY(usrp_inband_usb) +# -------------------- + + +set_instance_assignment -name PARTITION_HIERARCHY no_file_for_top_partition -to | -section_id Top +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN "100 ps" +set_global_assignment -name VERILOG_FILE ../../megacells/fifo_4kx16_dc.v +set_global_assignment -name VERILOG_FILE ../../megacells/fifo_1kx16.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/channel_demux.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/tx_packer.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/cmd_reader.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/packet_builder.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/rx_buffer_inband.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/atr_delay.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/tx_buffer_inband.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/chan_fifo_reader.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cic_dec_shifter.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/rssi.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/ram16.v +set_global_assignment -name VERILOG_FILE ../../megacells/fifo_4k.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/acc.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/mult.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/ram16_2sum.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/coeff_rom.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/halfband_decim.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/mac.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/tx_chain.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/rx_dcoffset.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/adc_interface.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/io_pins.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/setting_reg.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/bidir_reg.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cic_int_shifter.v +set_global_assignment -name VERILOG_FILE ../../megacells/clk_doubler.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/rx_chain.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/gen_sync.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/master_control.v +set_global_assignment -name VERILOG_FILE ../../megacells/fifo_2k.v +set_global_assignment -name VERILOG_FILE ../../megacells/bustri.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/rx_buffer.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/tx_buffer.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/phase_acc.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cic_interp.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cic_decim.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cordic_stage.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cordic.v +set_global_assignment -name VERILOG_FILE usrp_inband_usb.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/clk_divider.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/serial_io.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/strobe_gen.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/sign_extend.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/channel_ram.v +set_global_assignment -name VERILOG_FILE ../../inband_lib/register_io.v +set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region" +set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region" \ No newline at end of file diff --git a/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.v b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.v new file mode 100644 index 00000000..79f0dfa4 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_inband_usb/usrp_inband_usb.v @@ -0,0 +1,428 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2003,2004 Matt Ettus +// Copyright 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// +`define TX_IN_BAND +`define RX_IN_BAND + +`include "config.vh" +`include "../../../firmware/include/fpga_regs_common.v" +`include "../../../firmware/include/fpga_regs_standard.v" + +module usrp_inband_usb +(output MYSTERY_SIGNAL, + input master_clk, + input SCLK, + input SDI, + inout SDO, + input SEN_FPGA, + + input FX2_1, + output FX2_2, + output FX2_3, + + input wire [11:0] rx_a_a, + input wire [11:0] rx_b_a, + input wire [11:0] rx_a_b, + input wire [11:0] rx_b_b, + + output wire [13:0] tx_a, + output wire [13:0] tx_b, + + output wire TXSYNC_A, + output wire TXSYNC_B, + + // USB interface + input usbclk, + input wire [2:0] usbctl, + output wire [1:0] usbrdy, + inout [15:0] usbdata, // NB Careful, inout + + // These are the general purpose i/o's that go to the daughterboard slots + inout wire [15:0] io_tx_a, + inout wire [15:0] io_tx_b, + inout wire [15:0] io_rx_a, + inout wire [15:0] io_rx_b + ); + wire [15:0] debugdata,debugctrl; + assign MYSTERY_SIGNAL = 1'b0; + + wire clk64,clk128; + + wire WR = usbctl[0]; + wire RD = usbctl[1]; + wire OE = usbctl[2]; + + wire have_space, have_pkt_rdy; + assign usbrdy[0] = have_space; + assign usbrdy[1] = have_pkt_rdy; + + wire rx_overrun; + wire clear_status = FX2_1; + assign FX2_2 = rx_overrun; + assign FX2_3 = (tx_underrun == 0); + + wire [15:0] usbdata_out; + + wire [3:0] dac0mux,dac1mux,dac2mux,dac3mux; + + wire tx_realsignals; + wire [3:0] rx_numchan; + wire [2:0] tx_numchan; + + wire [7:0] interp_rate, decim_rate; + wire [15:0] tx_debugbus, rx_debugbus; + + wire enable_tx, enable_rx; + wire tx_dsp_reset, rx_dsp_reset, tx_bus_reset, rx_bus_reset; + wire [7:0] settings; + + // Tri-state bus macro + bustri bustri( .data(usbdata_out),.enabledt(OE),.tridata(usbdata) ); + + wire [15:0] ch0tx,ch1tx,ch2tx,ch3tx; //,ch4tx,ch5tx,ch6tx,ch7tx; + wire [15:0] ch0rx,ch1rx,ch2rx,ch3rx,ch4rx,ch5rx,ch6rx,ch7rx; + + // TX + wire [15:0] i_out_0,i_out_1,q_out_0,q_out_1; + wire [15:0] bb_tx_i0,bb_tx_q0,bb_tx_i1,bb_tx_q1; // bb_tx_i2,bb_tx_q2,bb_tx_i3,bb_tx_q3; + + wire strobe_interp, tx_sample_strobe; + wire tx_empty; + + wire serial_strobe; + wire [6:0] serial_addr; + wire [31:0] serial_data; + + reg [15:0] debug_counter; + reg [15:0] loopback_i_0,loopback_q_0; + + + //Connection RX inband <-> TX inband + wire rx_WR; + wire [15:0] rx_databus; + wire rx_WR_done; + wire rx_WR_enabled; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Transmit Side +`ifdef TX_ON + assign bb_tx_i0 = ch0tx; + assign bb_tx_q0 = ch1tx; + assign bb_tx_i1 = ch2tx; + assign bb_tx_q1 = ch3tx; + +wire [1:0] tx_underrun; + +`ifdef TX_IN_BAND + tx_buffer_inband tx_buffer + ( .usbclk(usbclk),.bus_reset(tx_bus_reset),.reset(tx_dsp_reset), + .usbdata(usbdata),.WR(WR),.have_space(have_space), + .tx_underrun(tx_underrun),.channels({tx_numchan,1'b0}), + .tx_i_0(ch0tx),.tx_q_0(ch1tx), + .tx_i_1(ch2tx),.tx_q_1(ch3tx), + .tx_i_2(),.tx_q_2(), + .tx_i_3(),.tx_q_3(), + .txclk(clk64),.txstrobe(strobe_interp), + .clear_status(clear_status), + .tx_empty(tx_empty), + .rx_WR(rx_WR), + .rx_databus(rx_databus), + .rx_WR_done(rx_WR_done), + .rx_WR_enabled(rx_WR_enabled), + .reg_addr(reg_addr), + .reg_data_out(reg_data_out), + .reg_data_in(reg_data_in), + .reg_io_enable(reg_io_enable), + .debugbus(rx_debugbus), + .rssi_0(rssi_0), .rssi_1(rssi_1), .rssi_2(rssi_2), + .rssi_3(rssi_3), .threshhold(rssi_threshhold), .rssi_wait(rssi_wait), + .stop(stop), .stop_time(stop_time)); + + `ifdef TX_DUAL + defparam tx_buffer.NUM_CHAN=2; + `endif + +`else + tx_buffer tx_buffer + ( .usbclk(usbclk),.bus_reset(tx_bus_reset),.reset(tx_dsp_reset), + .usbdata(usbdata),.WR(WR),.have_space(have_space),.tx_underrun(tx_underrun), + .channels({tx_numchan,1'b0}), + .tx_i_0(ch0tx),.tx_q_0(ch1tx), + .tx_i_1(ch2tx),.tx_q_1(ch3tx), + .tx_i_2(),.tx_q_2(), + .tx_i_3(),.tx_q_3(), + .txclk(clk64),.txstrobe(strobe_interp), + .clear_status(clear_status), + .tx_empty(tx_empty)); +`endif + + `ifdef TX_EN_0 + tx_chain tx_chain_0 + ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + .interp_rate(interp_rate),.sample_strobe(tx_sample_strobe), + .interpolator_strobe(strobe_interp),.freq(), + .i_in(bb_tx_i0),.q_in(bb_tx_q0),.i_out(i_out_0),.q_out(q_out_0) ); + `else + assign i_out_0=16'd0; + assign q_out_0=16'd0; + `endif + + `ifdef TX_EN_1 + tx_chain tx_chain_1 + ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), + .interp_rate(interp_rate),.sample_strobe(tx_sample_strobe), + .interpolator_strobe(strobe_interp),.freq(), + .i_in(bb_tx_i1),.q_in(bb_tx_q1),.i_out(i_out_1),.q_out(q_out_1) ); + `else + assign i_out_1=16'd0; + assign q_out_1=16'd0; + `endif + + setting_reg #(`FR_TX_MUX) + sr_txmux(.clock(clk64),.reset(tx_dsp_reset),.strobe(serial_strobe),.addr(serial_addr),.in(serial_data), + .out({dac3mux,dac2mux,dac1mux,dac0mux,tx_realsignals,tx_numchan})); + + wire [15:0] tx_a_a = dac0mux[3] ? (dac0mux[1] ? (dac0mux[0] ? q_out_1 : i_out_1) : (dac0mux[0] ? q_out_0 : i_out_0)) : 16'b0; + wire [15:0] tx_b_a = dac1mux[3] ? (dac1mux[1] ? (dac1mux[0] ? q_out_1 : i_out_1) : (dac1mux[0] ? q_out_0 : i_out_0)) : 16'b0; + wire [15:0] tx_a_b = dac2mux[3] ? (dac2mux[1] ? (dac2mux[0] ? q_out_1 : i_out_1) : (dac2mux[0] ? q_out_0 : i_out_0)) : 16'b0; + wire [15:0] tx_b_b = dac3mux[3] ? (dac3mux[1] ? (dac3mux[0] ? q_out_1 : i_out_1) : (dac3mux[0] ? q_out_0 : i_out_0)) : 16'b0; + + wire txsync = tx_sample_strobe; + assign TXSYNC_A = txsync; + assign TXSYNC_B = txsync; + + assign tx_a = txsync ? tx_b_a[15:2] : tx_a_a[15:2]; + assign tx_b = txsync ? tx_b_b[15:2] : tx_a_b[15:2]; +`endif // `ifdef TX_ON + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Receive Side +`ifdef RX_ON + wire rx_sample_strobe,strobe_decim,hb_strobe; + wire [15:0] bb_rx_i0,bb_rx_q0,bb_rx_i1,bb_rx_q1, + bb_rx_i2,bb_rx_q2,bb_rx_i3,bb_rx_q3; + + wire loopback = settings[0]; + wire counter = settings[1]; + + always @(posedge clk64) + if(rx_dsp_reset) + debug_counter <= #1 16'd0; + else if(~enable_rx) + debug_counter <= #1 16'd0; + else if(hb_strobe) + debug_counter <=#1 debug_counter + 16'd2; + + always @(posedge clk64) + if(strobe_interp) + begin + loopback_i_0 <= #1 ch0tx; + loopback_q_0 <= #1 ch1tx; + end + + assign ch0rx = counter ? debug_counter : loopback ? loopback_i_0 : bb_rx_i0; + assign ch1rx = counter ? debug_counter + 16'd1 : loopback ? loopback_q_0 : bb_rx_q0; + assign ch2rx = bb_rx_i1; + assign ch3rx = bb_rx_q1; + assign ch4rx = bb_rx_i2; + assign ch5rx = bb_rx_q2; + assign ch6rx = bb_rx_i3; + assign ch7rx = bb_rx_q3; + + wire [15:0] ddc0_in_i,ddc0_in_q,ddc1_in_i,ddc1_in_q,ddc2_in_i,ddc2_in_q,ddc3_in_i,ddc3_in_q; + wire [31:0] rssi_0,rssi_1,rssi_2,rssi_3; + adc_interface adc_interface(.clock(clk64),.reset(rx_dsp_reset),.enable(1'b1), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .rx_a_a(rx_a_a),.rx_b_a(rx_b_a),.rx_a_b(rx_a_b),.rx_b_b(rx_b_b), + .rssi_0(rssi_0),.rssi_1(rssi_1),.rssi_2(rssi_2),.rssi_3(rssi_3), + .ddc0_in_i(ddc0_in_i),.ddc0_in_q(ddc0_in_q), + .ddc1_in_i(ddc1_in_i),.ddc1_in_q(ddc1_in_q), + .ddc2_in_i(ddc2_in_i),.ddc2_in_q(ddc2_in_q), + .ddc3_in_i(ddc3_in_i),.ddc3_in_q(ddc3_in_q),.rx_numchan(rx_numchan)); + `ifdef RX_IN_BAND + rx_buffer_inband rx_buffer + ( .usbclk(usbclk),.bus_reset(rx_bus_reset),.reset(rx_dsp_reset), + .reset_regs(rx_dsp_reset), + .usbdata(usbdata_out),.RD(RD),.have_pkt_rdy(have_pkt_rdy),.rx_overrun(rx_overrun), + .channels(rx_numchan), + .ch_0(ch0rx),.ch_1(ch1rx), + .ch_2(ch2rx),.ch_3(ch3rx), + .ch_4(ch4rx),.ch_5(ch5rx), + .ch_6(ch6rx),.ch_7(ch7rx), + .rxclk(clk64),.rxstrobe(hb_strobe), + .clear_status(clear_status), + .rx_WR(rx_WR), + .rx_databus(rx_databus), + .rx_WR_done(rx_WR_done), + .rx_WR_enabled(rx_WR_enabled), + .debugbus(tx_debugbus), + .rssi_0(rssi_0), .rssi_1(rssi_1), .rssi_2(rssi_2), .rssi_3(rssi_3), + .tx_underrun(tx_underrun)); + + `ifdef RX_DUAL + defparam rx_buffer.NUM_CHAN=2; + `endif + + `else + rx_buffer rx_buffer + ( .usbclk(usbclk),.bus_reset(rx_bus_reset),.reset(rx_dsp_reset), + .reset_regs(rx_dsp_reset), + .usbdata(usbdata_out),.RD(RD),.have_pkt_rdy(have_pkt_rdy),.rx_overrun(rx_overrun), + .channels(rx_numchan), + .ch_0(ch0rx),.ch_1(ch1rx), + .ch_2(ch2rx),.ch_3(ch3rx), + .ch_4(ch4rx),.ch_5(ch5rx), + .ch_6(ch6rx),.ch_7(ch7rx), + .rxclk(clk64),.rxstrobe(hb_strobe), + .clear_status(clear_status), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe)); + `endif + + `ifdef RX_EN_0 + rx_chain #(`FR_RX_FREQ_0,`FR_RX_PHASE_0) rx_chain_0 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(hb_strobe), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc0_in_i),.q_in(ddc0_in_q),.i_out(bb_rx_i0),.q_out(bb_rx_q0),.debugdata(debugdata),.debugctrl(debugctrl)); + `else + assign bb_rx_i0=16'd0; + assign bb_rx_q0=16'd0; + `endif + + `ifdef RX_EN_1 + rx_chain #(`FR_RX_FREQ_1,`FR_RX_PHASE_1) rx_chain_1 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc1_in_i),.q_in(ddc1_in_q),.i_out(bb_rx_i1),.q_out(bb_rx_q1)); + `else + assign bb_rx_i1=16'd0; + assign bb_rx_q1=16'd0; + `endif + + `ifdef RX_EN_2 + rx_chain #(`FR_RX_FREQ_2,`FR_RX_PHASE_2) rx_chain_2 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc2_in_i),.q_in(ddc2_in_q),.i_out(bb_rx_i2),.q_out(bb_rx_q2)); + `else + assign bb_rx_i2=16'd0; + assign bb_rx_q2=16'd0; + `endif + + `ifdef RX_EN_3 + rx_chain #(`FR_RX_FREQ_3,`FR_RX_PHASE_3) rx_chain_3 + ( .clock(clk64),.reset(1'b0),.enable(enable_rx), + .decim_rate(decim_rate),.sample_strobe(rx_sample_strobe),.decimator_strobe(strobe_decim),.hb_strobe(), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .i_in(ddc3_in_i),.q_in(ddc3_in_q),.i_out(bb_rx_i3),.q_out(bb_rx_q3)); + `else + assign bb_rx_i3=16'd0; + assign bb_rx_q3=16'd0; + `endif + +`endif // `ifdef RX_ON + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Control Functions + + wire [31:0] capabilities; + assign capabilities[7] = `TX_CAP_HB; + assign capabilities[6:4] = `TX_CAP_NCHAN; + assign capabilities[3] = `RX_CAP_HB; + assign capabilities[2:0] = `RX_CAP_NCHAN; + + serial_io serial_io + ( .master_clk(clk64),.serial_clock(SCLK),.serial_data_in(SDI), + .enable(SEN_FPGA),.reset(1'b0),.serial_data_out(SDO), + .serial_addr(addr_db),.serial_data(data_db),.serial_strobe(strobe_db), + .readback_0({io_rx_a,io_tx_a}),.readback_1({io_rx_b,io_tx_b}),.readback_2(capabilities),.readback_3(32'hf0f0931a), + .readback_4(rssi_0),.readback_5(rssi_1),.readback_6(rssi_2),.readback_7(rssi_3) + ); + + wire [6:0] reg_addr; + wire [31:0] reg_data_out; + wire [31:0] reg_data_in; + wire [1:0] reg_io_enable; + wire [31:0] rssi_threshhold; + wire [31:0] rssi_wait; + wire [6:0] addr_wr; + wire [31:0] data_wr; + wire strobe_wr; + wire [6:0] addr_db; + wire [31:0] data_db; + wire strobe_db; + assign serial_strobe = strobe_db | strobe_wr; + assign serial_addr = (strobe_db)? (addr_db) : (addr_wr); + assign serial_data = (strobe_db)? (data_db) : (data_wr); + //assign serial_strobe = strobe_wr; + //assign serial_data = data_wr; + //assign serial_addr = addr_wr; + + register_io register_control + (.clk(clk64),.reset(1'b0),.enable(reg_io_enable),.addr(reg_addr),.datain(reg_data_in), + .dataout(reg_data_out), .addr_wr(addr_wr), .data_wr(data_wr), .strobe_wr(strobe_wr), + .rssi_0(rssi_0), .rssi_1(rssi_1), .rssi_2(rssi_2), + .rssi_3(rssi_3), .threshhold(rssi_threshhold), .rssi_wait(rssi_wait), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3), + .debug_en(debug_en), .misc(settings), + .txmux({dac3mux,dac2mux,dac1mux,dac0mux,tx_realsignals,tx_numchan})); + + + //implementing freeze mode + reg [15:0] timestop; + wire stop; + wire [15:0] stop_time; + assign clk64 = (timestop == 0) ? master_clk : 0; + always @(posedge master_clk) + if (timestop[15:0] != 0) + timestop <= timestop - 16'd1; + else if (stop) + timestop <= stop_time; + + + wire [15:0] reg_0,reg_1,reg_2,reg_3; + master_control master_control + ( .master_clk(clk64),.usbclk(usbclk), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe), + .tx_bus_reset(tx_bus_reset),.rx_bus_reset(rx_bus_reset), + .tx_dsp_reset(tx_dsp_reset),.rx_dsp_reset(rx_dsp_reset), + .enable_tx(enable_tx),.enable_rx(enable_rx), + .interp_rate(interp_rate),.decim_rate(decim_rate), + .tx_sample_strobe(tx_sample_strobe),.strobe_interp(strobe_interp), + .rx_sample_strobe(rx_sample_strobe),.strobe_decim(strobe_decim), + .tx_empty(tx_empty), + //.debug_0(rx_a_a),.debug_1(ddc0_in_i), + .debug_0(rx_debugbus),.debug_1(ddc0_in_i), + .debug_2({rx_sample_strobe,strobe_decim,serial_strobe,serial_addr}),.debug_3({rx_dsp_reset,tx_dsp_reset,rx_bus_reset,tx_bus_reset,enable_rx,tx_underrun,rx_overrun,decim_rate}), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3) ); + + io_pins io_pins + (.io_0(io_tx_a),.io_1(io_rx_a),.io_2(io_tx_b),.io_3(io_rx_b), + .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3), + .clock(clk64),.rx_reset(rx_dsp_reset),.tx_reset(tx_dsp_reset), + .serial_addr(serial_addr),.serial_data(serial_data),.serial_strobe(serial_strobe)); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Misc Settings + setting_reg #(`FR_MODE) sr_misc(.clock(clk64),.reset(rx_dsp_reset),.strobe(serial_strobe),.addr(serial_addr),.in(serial_data),.out(settings)); + +endmodule // usrp_inband_usb diff --git a/usrp/fpga/toplevel/usrp_multi/config.vh b/usrp/fpga/toplevel/usrp_multi/config.vh new file mode 100644 index 00000000..07011bd4 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_multi/config.vh @@ -0,0 +1,62 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// Copyright (C) 2006 Martin Dudok van Heel +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ==================================================================== +// User control over what parts get included +// +// >>>> EDIT ONLY THIS SECTION <<<< +// Uncomment only ONE configuration +// ==================================================================== + +// ==================================================================== +// FIXME drive configuration selection from the command line and/or gui +// ==================================================================== + +`define MULTI_ON // enable multi usrp configuration + +// Uncomment this for 1 rx channel (w/ halfband) & 1 transmit channel +//`include "../include/common_config_1rxhb_1tx.vh" + +// Uncomment this for multi with 2 rx channels (w/ halfband) & 2 transmit channels +`include "../include/common_config_2rxhb_2tx.vh" + +// Uncomment this for multi with 4 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_4rx_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/ halfband) & 0 transmit channels +//`include "../include/common_config_2rxhb_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_2rx_0tx.vh" + + +// Add other "known to fit" configurations here... + +// ==================================================================== +// Now include the common footer +// ==================================================================== + +`ifdef MULTI_ON + `define COUNTER_32BIT_ON +`endif + +`include "../include/common_config_bottom.vh" diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi.qsf b/usrp/fpga/toplevel/usrp_multi/usrp_multi.qsf index e45c683a..9f0efbd8 100644 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi.qsf +++ b/usrp/fpga/toplevel/usrp_multi/usrp_multi.qsf @@ -27,7 +27,7 @@ # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 3.0 set_global_assignment -name PROJECT_CREATION_TIME_DATE "00:14:04 JULY 13, 2003" -set_global_assignment -name LAST_QUARTUS_VERSION "5.1 SP1" +set_global_assignment -name LAST_QUARTUS_VERSION 6.1 # Pin & Location Assignments # ========================== @@ -223,7 +223,7 @@ set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE SPEED set_global_assignment -name TOP_LEVEL_ENTITY usrp_multi set_global_assignment -name VHDL_SHOW_LMF_MAPPING_MESSAGES OFF set_global_assignment -name USER_LIBRARIES "H:\\usrp-for2.7\\fpga\\megacells" -set_global_assignment -name AUTO_ENABLE_SMART_COMPILE On +set_global_assignment -name AUTO_ENABLE_SMART_COMPILE ON # Fitter Assignments # ================== @@ -314,7 +314,7 @@ set_global_assignment -name HCPY_VREF_PINS OFF # ======================== set_global_assignment -name HUB_ENTITY_NAME SLD_HUB set_global_assignment -name HUB_INSTANCE_NAME SLD_HUB_INST -set_global_assignment -name ENABLE_SIGNALTAP Off +set_global_assignment -name ENABLE_SIGNALTAP OFF # LogicLock Region Assignments # ============================ @@ -326,8 +326,8 @@ set_global_assignment -name LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT OFF # Timing Assignments # ================== set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK - set_global_assignment -name FMAX_REQUIREMENT "1.0 MHz" -section_id SCLK - set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id SCLK +set_global_assignment -name FMAX_REQUIREMENT "1 MHz" -section_id SCLK +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id SCLK # end CLOCK(SCLK) # --------------- @@ -338,8 +338,8 @@ set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK # Timing Assignments # ================== set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk - set_global_assignment -name FMAX_REQUIREMENT "64.0 MHz" -section_id master_clk - set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id master_clk +set_global_assignment -name FMAX_REQUIREMENT "64 MHz" -section_id master_clk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id master_clk # end CLOCK(master_clk) # --------------------- @@ -350,8 +350,8 @@ set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk # Timing Assignments # ================== set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk - set_global_assignment -name FMAX_REQUIREMENT "48.0 MHz" -section_id usbclk - set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id usbclk +set_global_assignment -name FMAX_REQUIREMENT "48 MHz" -section_id usbclk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id usbclk # end CLOCK(usbclk) # ----------------- @@ -361,18 +361,18 @@ set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk # Timing Assignments # ================== - set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK - set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk - set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk +set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK +set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk +set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk # end ENTITY(usrp_multi) # -------------------- +set_global_assignment -name VERILOG_FILE ../../sdr_lib/rssi.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/setting_reg_masked.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/master_control_multi.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/ram16.v -set_global_assignment -name VERILOG_FILE usrp_multi.vh set_global_assignment -name VERILOG_FILE ../../megacells/fifo_4k.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/acc.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/mult.v diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi.v b/usrp/fpga/toplevel/usrp_multi/usrp_multi.v index e3706d71..ce484fc1 100644 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi.v +++ b/usrp/fpga/toplevel/usrp_multi/usrp_multi.v @@ -28,7 +28,7 @@ // Uncomment the following to include optional circuitry -`include "usrp_multi.vh" +`include "config.vh" `include "../../../firmware/include/fpga_regs_common.v" `include "../../../firmware/include/fpga_regs_standard.v" diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi.vh b/usrp/fpga/toplevel/usrp_multi/usrp_multi.vh deleted file mode 100644 index fb5dc8d1..00000000 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi.vh +++ /dev/null @@ -1,141 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// Copyright (C) 2006 Martin Dudok van Heel -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// - -// ==================================================================== -// User control over what parts get included -// -// >>>> EDIT ONLY THIS SECTION <<<< -// Uncomment only ONE configuration -// ==================================================================== - -// ==== Multi usrp configurations ==== -// Uncomment this for multi with 2 rx channels (w/ halfband) & 2 transmit channels -`include "usrp_multi_config_2rxhb_2tx.vh" - -// Uncomment this for multi with 4 rx channels (w/o halfband) & 0 transmit channels -//`include "usrp_multi_config_4rx_0tx.vh" - -// Uncomment this for multi with 2 rx channels (w/ halfband) & 0 transmit channels -//`include "usrp_multi_config_2rxhb_0tx.vh" - -// Uncomment this for multi with 2 rx channels (w/o halfband) & 0 transmit channels -//`include "usrp_multi_config_2rx_0tx.vh" - -// ==== Standard configurations (no multi support) ==== -// Uncomment this for standard with 2 rx channels (w/ halfband) & 2 transmit channels -// `include "../usrp_std/usrp_std_config_2rxhb_2tx.vh" - -// Uncomment this for standard with 4 rx channels (w/o halfband) & 0 transmit channels -//`include "../usrp_std/usrp_std_config_4rx_0tx.vh" - -// Add other "known to fit" configurations here... - -// ==================================================================== -// -// >>>> DO NOT EDIT BELOW HERE <<<< -// -// [The stuff from here down is derived from the stuff included above] -// -// N.B., *all* the remainder of the code should be conditionalized -// only in terms of: -// -// TX_ON, TX_EN_0, TX_EN_1, TX_EN_2, TX_EN_3, TX_CAP_NCHAN, TX_CAP_HB, -// RX_ON, RX_EN_0, RX_EN_1, RX_EN_2, RX_EN_3, RX_CAP_NCHAN, RX_CAP_HB, -// RX_NCO_ON, RX_CIC_ON -// ==================================================================== -`ifdef MULTI_ON - `define COUNTER_32BIT_ON -`endif - -`ifdef TX_ON - - `ifdef TX_SINGLE - `define TX_EN_0 - `define TX_CAP_NCHAN 3'd1 - `endif - - `ifdef TX_DUAL - `define TX_EN_0 - `define TX_EN_1 - `define TX_CAP_NCHAN 3'd2 - `endif - - `ifdef TX_QUAD - `define TX_EN_0 - `define TX_EN_1 - `define TX_EN_2 - `define TX_EN_3 - `define TX_CAP_NCHAN 3'd4 - `endif - - `ifdef TX_HB_ON - `define TX_CAP_HB 1 - `else - `define TX_CAP_HB 0 - `endif - -`else // !ifdef TX_ON - - `define TX_CAP_NCHAN 3'd0 - `define TX_CAP_HB 0 - -`endif // !ifdef TX_ON - -// -------------------------------------------------------------------- - -`ifdef RX_ON - - `ifdef RX_SINGLE - `define RX_EN_0 - `define RX_CAP_NCHAN 3'd1 - `endif - - `ifdef RX_DUAL - `define RX_EN_0 - `define RX_EN_1 - `ifdef MULTI_ON - `define RX_CAP_NCHAN 3'd4 - `else - `define RX_CAP_NCHAN 3'd2 - `endif - `endif - - `ifdef RX_QUAD - `define RX_EN_0 - `define RX_EN_1 - `define RX_EN_2 - `define RX_EN_3 - `define RX_CAP_NCHAN 3'd4 - `endif - - `ifdef RX_HB_ON - `define RX_CAP_HB 1 - `else - `define RX_CAP_HB 0 - `endif - -`else // !ifdef RX_ON - - `define RX_CAP_NCHAN 3'd0 - `define RX_CAP_HB 0 - -`endif // !ifdef RX_ON diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh b/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh deleted file mode 100644 index 3c471463..00000000 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rx_0tx.vh +++ /dev/null @@ -1,62 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// Copyright (C) 2006 Martin Dudok van Heel -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// -`define MULTI_ON -// ------------------------------------------------------------ -// If TX_ON is not defined, there is *no* transmit circuitry built -// `define TX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD -// to respectively enable 1, 2 or 4 transmit channels. -// [Please note that only TX_DUAL is currently valid] -//`define TX_SINGLE -//`define TX_DUAL -//`define TX_QUAD - -// ------------------------------------------------------------ -// Define TX_HB_ON to enable the transmit halfband filter -// [Not implemented] -//`define TX_HB_ON - -// ------------------------------------------------------------ -// IF RX_ON is not defined, there is *no* transmit circuitry built - `define RX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD -// to respectively define 1, 2 or 4 receive channels. - -//`define RX_SINGLE -`define RX_DUAL -//`define RX_QUAD - -// ------------------------------------------------------------ -// Define RX_HB_ON to enable the receive halfband filter -//`define RX_HB_ON - -// ------------------------------------------------------------ -// Define RX_NCO_ON to enable the receive Numerical Controlled Osc - `define RX_NCO_ON - -// ------------------------------------------------------------ -// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter - `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh b/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh deleted file mode 100644 index 43ed8e63..00000000 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_0tx.vh +++ /dev/null @@ -1,62 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// Copyright (C) 2006 Martin Dudok van Heel -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// -`define MULTI_ON -// ------------------------------------------------------------ -// If TX_ON is not defined, there is *no* transmit circuitry built -// `define TX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD -// to respectively enable 1, 2 or 4 transmit channels. -// [Please note that only TX_DUAL is currently valid] -//`define TX_SINGLE -//`define TX_DUAL -//`define TX_QUAD - -// ------------------------------------------------------------ -// Define TX_HB_ON to enable the transmit halfband filter -// [Not implemented] -//`define TX_HB_ON - -// ------------------------------------------------------------ -// IF RX_ON is not defined, there is *no* transmit circuitry built - `define RX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD -// to respectively define 1, 2 or 4 receive channels. - -//`define RX_SINGLE - `define RX_DUAL -//`define RX_QUAD - -// ------------------------------------------------------------ -// Define RX_HB_ON to enable the receive halfband filter - `define RX_HB_ON - -// ------------------------------------------------------------ -// Define RX_NCO_ON to enable the receive Numerical Controlled Osc - `define RX_NCO_ON - -// ------------------------------------------------------------ -// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter - `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh b/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh deleted file mode 100644 index 9ec92a4e..00000000 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_2rxhb_2tx.vh +++ /dev/null @@ -1,62 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// Copyright (C) 2006 Martin Dudok van Heel -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// -`define MULTI_ON -// ------------------------------------------------------------ -// If TX_ON is not defined, there is *no* transmit circuitry built - `define TX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD -// to respectively enable 1, 2 or 4 transmit channels. -// [Please note that only TX_DUAL is currently valid] -//`define TX_SINGLE - `define TX_DUAL -//`define TX_QUAD - -// ------------------------------------------------------------ -// Define TX_HB_ON to enable the transmit halfband filter -// [Not implemented] -//`define TX_HB_ON - -// ------------------------------------------------------------ -// IF RX_ON is not defined, there is *no* transmit circuitry built - `define RX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD -// to respectively define 1, 2 or 4 receive channels. - -//`define RX_SINGLE - `define RX_DUAL -//`define RX_QUAD - -// ------------------------------------------------------------ -// Define RX_HB_ON to enable the receive halfband filter - `define RX_HB_ON - -// ------------------------------------------------------------ -// Define RX_NCO_ON to enable the receive Numerical Controlled Osc - `define RX_NCO_ON - -// ------------------------------------------------------------ -// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter - `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh b/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh deleted file mode 100644 index 42549bef..00000000 --- a/usrp/fpga/toplevel/usrp_multi/usrp_multi_config_4rx_0tx.vh +++ /dev/null @@ -1,62 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// Copyright (C) 2006 Martin Dudok van Heel -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// -`define MULTI_ON -// ------------------------------------------------------------ -// If TX_ON is not defined, there is *no* transmit circuitry built -// `define TX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD -// to respectively enable 1, 2 or 4 transmit channels. -// [Please note that only TX_DUAL is currently valid] -//`define TX_SINGLE -//`define TX_DUAL -//`define TX_QUAD - -// ------------------------------------------------------------ -// Define TX_HB_ON to enable the transmit halfband filter -// [Not implemented] -//`define TX_HB_ON - -// ------------------------------------------------------------ -// IF RX_ON is not defined, there is *no* transmit circuitry built - `define RX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD -// to respectively define 1, 2 or 4 receive channels. - -//`define RX_SINGLE -//`define RX_DUAL - `define RX_QUAD - -// ------------------------------------------------------------ -// Define RX_HB_ON to enable the receive halfband filter -//`define RX_HB_ON - -// ------------------------------------------------------------ -// Define RX_NCO_ON to enable the receive Numerical Controlled Osc - `define RX_NCO_ON - -// ------------------------------------------------------------ -// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter - `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/usrp_multi/usrp_std.vh b/usrp/fpga/toplevel/usrp_multi/usrp_std.vh deleted file mode 100644 index 2732a199..00000000 --- a/usrp/fpga/toplevel/usrp_multi/usrp_std.vh +++ /dev/null @@ -1,29 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Martin Dudok van Heel -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// - -// ==================================================================== -// Do not remove or edit this file. -// This is a redirect to usrp_multi.vh -// This is needed because some common source files have a -// hardcoded `include "usrp_std.vh" -// ==================================================================== - -`include "usrp_multi.vh" diff --git a/usrp/fpga/toplevel/usrp_std/config.vh b/usrp/fpga/toplevel/usrp_std/config.vh new file mode 100644 index 00000000..f1f8ec40 --- /dev/null +++ b/usrp/fpga/toplevel/usrp_std/config.vh @@ -0,0 +1,53 @@ +// -*- verilog -*- +// +// USRP - Universal Software Radio Peripheral +// +// Copyright (C) 2006,2007 Matt Ettus +// +// 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 of the License, 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 program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +// + +// ==================================================================== +// User control over what parts get included +// +// >>>> EDIT ONLY THIS SECTION <<<< +// Uncomment only ONE configuration +// ==================================================================== + +// ==================================================================== +// FIXME drive configuration selection from the command line and/or gui +// ==================================================================== + +// Uncomment this for 1 rx channel (w/ halfband) & 1 transmit channel +//`include "../include/common_config_1rxhb_1tx.vh" + +// Uncomment this for 2 rx channels (w/ halfband) & 2 transmit channels + `include "../include/common_config_2rxhb_2tx.vh" + +// Uncomment this for 4 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_4rx_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/ halfband) & 0 transmit channels +//`include "../include/common_config_2rxhb_0tx.vh" + +// Uncomment this for multi with 2 rx channels (w/o halfband) & 0 transmit channels +//`include "../include/common_config_2rx_0tx.vh" + +// Add other "known to fit" configurations here... + +// ==================================================================== +// Now include the common footer +// ==================================================================== + `include "../include/common_config_bottom.vh" diff --git a/usrp/fpga/toplevel/usrp_std/usrp_std.qsf b/usrp/fpga/toplevel/usrp_std/usrp_std.qsf index 8297f0f7..e0bac489 100644 --- a/usrp/fpga/toplevel/usrp_std/usrp_std.qsf +++ b/usrp/fpga/toplevel/usrp_std/usrp_std.qsf @@ -27,7 +27,7 @@ # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 3.0 set_global_assignment -name PROJECT_CREATION_TIME_DATE "00:14:04 JULY 13, 2003" -set_global_assignment -name LAST_QUARTUS_VERSION 6.1 +set_global_assignment -name LAST_QUARTUS_VERSION "7.1 SP1" # Pin & Location Assignments # ========================== @@ -223,7 +223,7 @@ set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE SPEED set_global_assignment -name TOP_LEVEL_ENTITY usrp_std set_global_assignment -name VHDL_SHOW_LMF_MAPPING_MESSAGES OFF set_global_assignment -name USER_LIBRARIES "e:\\usrp\\fpga\\megacells" -set_global_assignment -name AUTO_ENABLE_SMART_COMPILE On +set_global_assignment -name AUTO_ENABLE_SMART_COMPILE ON # Fitter Assignments # ================== @@ -314,7 +314,7 @@ set_global_assignment -name HCPY_VREF_PINS OFF # ======================== set_global_assignment -name HUB_ENTITY_NAME SLD_HUB set_global_assignment -name HUB_INSTANCE_NAME SLD_HUB_INST -set_global_assignment -name ENABLE_SIGNALTAP Off +set_global_assignment -name ENABLE_SIGNALTAP OFF # LogicLock Region Assignments # ============================ @@ -326,8 +326,8 @@ set_global_assignment -name LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT OFF # Timing Assignments # ================== set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK - set_global_assignment -name FMAX_REQUIREMENT "1.0 MHz" -section_id SCLK - set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id SCLK +set_global_assignment -name FMAX_REQUIREMENT "1 MHz" -section_id SCLK +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id SCLK # end CLOCK(SCLK) # --------------- @@ -338,8 +338,8 @@ set_global_assignment -name DUTY_CYCLE 50 -section_id SCLK # Timing Assignments # ================== set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk - set_global_assignment -name FMAX_REQUIREMENT "64.0 MHz" -section_id master_clk - set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id master_clk +set_global_assignment -name FMAX_REQUIREMENT "64 MHz" -section_id master_clk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id master_clk # end CLOCK(master_clk) # --------------------- @@ -350,8 +350,8 @@ set_global_assignment -name DUTY_CYCLE 50 -section_id master_clk # Timing Assignments # ================== set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk - set_global_assignment -name FMAX_REQUIREMENT "48.0 MHz" -section_id usbclk - set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id usbclk +set_global_assignment -name FMAX_REQUIREMENT "48 MHz" -section_id usbclk +set_global_assignment -name INCLUDE_EXTERNAL_PIN_DELAYS_IN_FMAX_CALCULATIONS OFF -section_id usbclk # end CLOCK(usbclk) # ----------------- @@ -361,16 +361,20 @@ set_global_assignment -name DUTY_CYCLE 50 -section_id usbclk # Timing Assignments # ================== - set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK - set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk - set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk +set_instance_assignment -name CLOCK_SETTINGS SCLK -to SCLK +set_instance_assignment -name CLOCK_SETTINGS usbclk -to usbclk +set_instance_assignment -name CLOCK_SETTINGS master_clk -to master_clk # end ENTITY(usrp_std) # -------------------- +set_instance_assignment -name PARTITION_HIERARCHY no_file_for_top_partition -to | -section_id Top +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name VERILOG_FILE ../../megacells/fifo_4k_18.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/atr_delay.v +set_global_assignment -name VERILOG_FILE ../../sdr_lib/cic_dec_shifter.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/rssi.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/ram16.v -set_global_assignment -name VERILOG_FILE usrp_std.vh set_global_assignment -name VERILOG_FILE ../../megacells/fifo_4k.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/acc.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/mult.v @@ -378,7 +382,6 @@ set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/ram16_2sum.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/coeff_rom.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/halfband_decim.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/mac.v -set_global_assignment -name VERILOG_FILE ../../sdr_lib/hb/coeff_ram.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/tx_chain.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/rx_dcoffset.v set_global_assignment -name VERILOG_FILE ../../sdr_lib/adc_interface.v diff --git a/usrp/fpga/toplevel/usrp_std/usrp_std.v b/usrp/fpga/toplevel/usrp_std/usrp_std.v index ea556d70..8b29a9c2 100644 --- a/usrp/fpga/toplevel/usrp_std/usrp_std.v +++ b/usrp/fpga/toplevel/usrp_std/usrp_std.v @@ -27,7 +27,7 @@ // Uncomment the following to include optional circuitry -`include "usrp_std.vh" +`include "config.vh" `include "../../../firmware/include/fpga_regs_common.v" `include "../../../firmware/include/fpga_regs_standard.v" @@ -93,7 +93,7 @@ module usrp_std wire [2:0] tx_numchan; wire [7:0] interp_rate, decim_rate; - wire [15:0] tx_debugbus, rx_debugbus; + wire [31:0] tx_debugbus, rx_debugbus; wire enable_tx, enable_rx; wire tx_dsp_reset, rx_dsp_reset, tx_bus_reset, rx_bus_reset; @@ -124,35 +124,44 @@ module usrp_std //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Transmit Side `ifdef TX_ON - assign bb_tx_i0 = ch0tx; + assign bb_tx_i0 = ch0tx; assign bb_tx_q0 = ch1tx; assign bb_tx_i1 = ch2tx; assign bb_tx_q1 = ch3tx; tx_buffer tx_buffer - ( .usbclk(usbclk),.bus_reset(tx_bus_reset),.reset(tx_dsp_reset), - .usbdata(usbdata),.WR(WR),.have_space(have_space),.tx_underrun(tx_underrun), + ( .usbclk(usbclk), .bus_reset(tx_bus_reset), + .usbdata(usbdata),.WR(WR), .have_space(have_space), + .tx_underrun(tx_underrun), .clear_status(clear_status), + .txclk(clk64), .reset(tx_dsp_reset), .channels({tx_numchan,1'b0}), .tx_i_0(ch0tx),.tx_q_0(ch1tx), .tx_i_1(ch2tx),.tx_q_1(ch3tx), - .tx_i_2(),.tx_q_2(), - .tx_i_3(),.tx_q_3(), - .txclk(clk64),.txstrobe(strobe_interp), - .clear_status(clear_status), + .txstrobe(strobe_interp), .tx_empty(tx_empty), .debugbus(tx_debugbus) ); - + + `ifdef TX_EN_0 tx_chain tx_chain_0 ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), .interp_rate(interp_rate),.sample_strobe(tx_sample_strobe), .interpolator_strobe(strobe_interp),.freq(), .i_in(bb_tx_i0),.q_in(bb_tx_q0),.i_out(i_out_0),.q_out(q_out_0) ); + `else + assign i_out_0=16'd0; + assign q_out_0=16'd0; + `endif + `ifdef TX_EN_1 tx_chain tx_chain_1 ( .clock(clk64),.reset(tx_dsp_reset),.enable(enable_tx), .interp_rate(interp_rate),.sample_strobe(tx_sample_strobe), .interpolator_strobe(strobe_interp),.freq(), .i_in(bb_tx_i1),.q_in(bb_tx_q1),.i_out(i_out_1),.q_out(q_out_1) ); + `else + assign i_out_1=16'd0; + assign q_out_1=16'd0; + `endif setting_reg #(`FR_TX_MUX) sr_txmux(.clock(clk64),.reset(tx_dsp_reset),.strobe(serial_strobe),.addr(serial_addr),.in(serial_data), @@ -307,8 +316,8 @@ module usrp_std .rx_sample_strobe(rx_sample_strobe),.strobe_decim(strobe_decim), .tx_empty(tx_empty), //.debug_0(rx_a_a),.debug_1(ddc0_in_i), - .debug_0(rx_debugbus),.debug_1(ddc0_in_i), - .debug_2({rx_sample_strobe,strobe_decim,serial_strobe,serial_addr}),.debug_3({rx_dsp_reset,tx_dsp_reset,rx_bus_reset,tx_bus_reset,enable_rx,tx_underrun,rx_overrun,decim_rate}), + .debug_0(tx_debugbus[15:0]),.debug_1(tx_debugbus[31:16]), + .debug_2(rx_debugbus[15:0]),.debug_3(rx_debugbus[31:16]), .reg_0(reg_0),.reg_1(reg_1),.reg_2(reg_2),.reg_3(reg_3) ); io_pins io_pins diff --git a/usrp/fpga/toplevel/usrp_std/usrp_std.vh b/usrp/fpga/toplevel/usrp_std/usrp_std.vh deleted file mode 100644 index 5c239f75..00000000 --- a/usrp/fpga/toplevel/usrp_std/usrp_std.vh +++ /dev/null @@ -1,119 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// - -// ==================================================================== -// User control over what parts get included -// -// >>>> EDIT ONLY THIS SECTION <<<< -// -// ==================================================================== - -// Uncomment this for 2 rx channels (w/ halfband) & 2 transmit channels - `include "usrp_std_config_2rxhb_2tx.vh" - -// Uncomment this for 4 rx channels (w/o halfband) & 0 transmit channels -//`include "usrp_std_config_4rx_0tx.vh" - -// Add other "known to fit" configurations here... - -// ==================================================================== -// -// >>>> DO NOT EDIT BELOW HERE <<<< -// -// [The stuff from here down is derived from the stuff included above] -// -// N.B., *all* the remainder of the code should be conditionalized -// only in terms of: -// -// TX_ON, TX_EN_0, TX_EN_1, TX_EN_2, TX_EN_3, TX_CAP_NCHAN, TX_CAP_HB, -// RX_ON, RX_EN_0, RX_EN_1, RX_EN_2, RX_EN_3, RX_CAP_NCHAN, RX_CAP_HB, -// RX_NCO_ON, RX_CIC_ON -// ==================================================================== - -`ifdef TX_ON - - `ifdef TX_SINGLE - `define TX_EN_0 - `define TX_CAP_NCHAN 3'd1 - `endif - - `ifdef TX_DUAL - `define TX_EN_0 - `define TX_EN_1 - `define TX_CAP_NCHAN 3'd2 - `endif - - `ifdef TX_QUAD - `define TX_EN_0 - `define TX_EN_1 - `define TX_EN_2 - `define TX_EN_3 - `define TX_CAP_NCHAN 3'd4 - `endif - - `ifdef TX_HB_ON - `define TX_CAP_HB 1 - `else - `define TX_CAP_HB 0 - `endif - -`else // !ifdef TX_ON - - `define TX_CAP_NCHAN 3'd0 - `define TX_CAP_HB 0 - -`endif // !ifdef TX_ON - -// -------------------------------------------------------------------- - -`ifdef RX_ON - - `ifdef RX_SINGLE - `define RX_EN_0 - `define RX_CAP_NCHAN 3'd1 - `endif - - `ifdef RX_DUAL - `define RX_EN_0 - `define RX_EN_1 - `define RX_CAP_NCHAN 3'd2 - `endif - - `ifdef RX_QUAD - `define RX_EN_0 - `define RX_EN_1 - `define RX_EN_2 - `define RX_EN_3 - `define RX_CAP_NCHAN 3'd4 - `endif - - `ifdef RX_HB_ON - `define RX_CAP_HB 1 - `else - `define RX_CAP_HB 0 - `endif - -`else // !ifdef RX_ON - - `define RX_CAP_NCHAN 3'd0 - `define RX_CAP_HB 0 - -`endif // !ifdef RX_ON diff --git a/usrp/fpga/toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh b/usrp/fpga/toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh deleted file mode 100644 index fc30a541..00000000 --- a/usrp/fpga/toplevel/usrp_std/usrp_std_config_2rxhb_2tx.vh +++ /dev/null @@ -1,61 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// - -// ------------------------------------------------------------ -// If TX_ON is not defined, there is *no* transmit circuitry built - `define TX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD -// to respectively enable 1, 2 or 4 transmit channels. -// [Please note that only TX_DUAL is currently valid] -//`define TX_SINGLE - `define TX_DUAL -//`define TX_QUAD - -// ------------------------------------------------------------ -// Define TX_HB_ON to enable the transmit halfband filter -// [Not implemented] -//`define TX_HB_ON - -// ------------------------------------------------------------ -// IF RX_ON is not defined, there is *no* transmit circuitry built - `define RX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD -// to respectively define 1, 2 or 4 receive channels. - -//`define RX_SINGLE - `define RX_DUAL -//`define RX_QUAD - -// ------------------------------------------------------------ -// Define RX_HB_ON to enable the receive halfband filter - `define RX_HB_ON - -// ------------------------------------------------------------ -// Define RX_NCO_ON to enable the receive Numerical Controlled Osc - `define RX_NCO_ON - -// ------------------------------------------------------------ -// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter - `define RX_CIC_ON diff --git a/usrp/fpga/toplevel/usrp_std/usrp_std_config_4rx_0tx.vh b/usrp/fpga/toplevel/usrp_std/usrp_std_config_4rx_0tx.vh deleted file mode 100644 index e6a662a4..00000000 --- a/usrp/fpga/toplevel/usrp_std/usrp_std_config_4rx_0tx.vh +++ /dev/null @@ -1,61 +0,0 @@ -// -*- verilog -*- -// -// USRP - Universal Software Radio Peripheral -// -// Copyright (C) 2006 Matt Ettus -// -// 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 of the License, 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 program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA -// - -// ------------------------------------------------------------ -// If TX_ON is not defined, there is *no* transmit circuitry built -// `define TX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of TX_SINGLE, TX_DUAL and TX_QUAD -// to respectively enable 1, 2 or 4 transmit channels. -// [Please note that only TX_DUAL is currently valid] -//`define TX_SINGLE -//`define TX_DUAL -//`define TX_QUAD - -// ------------------------------------------------------------ -// Define TX_HB_ON to enable the transmit halfband filter -// [Not implemented] -//`define TX_HB_ON - -// ------------------------------------------------------------ -// IF RX_ON is not defined, there is *no* transmit circuitry built - `define RX_ON - -// ------------------------------------------------------------ -// Define 1 and only one of RX_SINGLE, RX_DUAL and RX_QUAD -// to respectively define 1, 2 or 4 receive channels. - -//`define RX_SINGLE -//`define RX_DUAL - `define RX_QUAD - -// ------------------------------------------------------------ -// Define RX_HB_ON to enable the receive halfband filter -//`define RX_HB_ON - -// ------------------------------------------------------------ -// Define RX_NCO_ON to enable the receive Numerical Controlled Osc - `define RX_NCO_ON - -// ------------------------------------------------------------ -// Define RX_CIC_ON to enable the receive Cascaded Integrator Comb filter - `define RX_CIC_ON diff --git a/usrp/host/Makefile.am b/usrp/host/Makefile.am index 9b72209c..ac9fd1a4 100644 --- a/usrp/host/Makefile.am +++ b/usrp/host/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2001 Free Software Foundation, Inc. +# Copyright 2001,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,4 +20,3 @@ # SUBDIRS = misc lib swig apps - diff --git a/usrp/host/Makefile.in b/usrp/host/Makefile.in index 0f8acf9c..f2792769 100644 --- a/usrp/host/Makefile.in +++ b/usrp/host/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2001 Free Software Foundation, Inc. +# Copyright 2001,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -34,15 +34,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -60,25 +56,35 @@ target_triplet = @target@ subdir = usrp/host DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -87,15 +93,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -112,10 +138,13 @@ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -123,10 +152,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -134,9 +162,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +179,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -156,73 +193,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -232,49 +262,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -282,15 +352,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -300,16 +513,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -318,12 +549,35 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ SUBDIRS = misc lib swig apps all: all-recursive @@ -332,8 +586,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -364,10 +618,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -399,8 +649,7 @@ $(RECURSIVE_TARGETS): $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -444,8 +693,8 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -470,8 +719,8 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -481,13 +730,12 @@ ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -501,22 +749,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -530,7 +777,7 @@ distdir: $(DISTFILES) list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -538,6 +785,8 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -577,8 +826,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -592,12 +840,20 @@ info-am: install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -616,22 +872,24 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/usrp/host/apps/Makefile.am b/usrp/host/apps/Makefile.am index 2085fd1c..b0c21d55 100644 --- a/usrp/host/apps/Makefile.am +++ b/usrp/host/apps/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2003,2006 Free Software Foundation, Inc. +# Copyright 2003,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,9 +21,8 @@ include $(top_srcdir)/Makefile.common -INCLUDES = $(USRP_INCLUDES) $(BOOST_CFLAGS) - -USRP_LIB = $(top_builddir)/usrp/host/lib/libusrp.la +AM_CPPFLAGS = $(USRP_INCLUDES) $(BOOST_CPPFLAGS) $(CPPUNIT_INCLUDES) \ + $(WITH_INCLUDES) bin_PROGRAMS = \ usrper \ @@ -35,7 +34,7 @@ noinst_PROGRAMS = \ test_usrp_standard_tx noinst_HEADERS = \ - time_stuff.h + time_stuff.h noinst_PYTHON = \ burn-db-eeprom \ @@ -45,13 +44,13 @@ noinst_PYTHON = \ check_order_quickly_SOURCES = check_order_quickly.cc test_usrp_standard_rx_SOURCES = test_usrp_standard_rx.cc time_stuff.c -test_usrp_standard_rx_LDADD = $(USRP_LIB) +test_usrp_standard_rx_LDADD = $(USRP_LA) test_usrp_standard_tx_SOURCES = test_usrp_standard_tx.cc time_stuff.c -test_usrp_standard_tx_LDADD = $(USRP_LIB) +test_usrp_standard_tx_LDADD = $(USRP_LA) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) usrper_SOURCES = usrper.cc -usrper_LDADD = $(USRP_LIB) +usrper_LDADD = $(USRP_LA) usrp_cal_dc_offset_SOURCES = usrp_cal_dc_offset.cc -usrp_cal_dc_offset_LDADD = $(USRP_LIB) +usrp_cal_dc_offset_LDADD = $(USRP_LA) diff --git a/usrp/host/apps/Makefile.in b/usrp/host/apps/Makefile.in index 52cf9805..800de1dd 100644 --- a/usrp/host/apps/Makefile.in +++ b/usrp/host/apps/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,7 +15,7 @@ @SET_MAKE@ # -# Copyright 2003,2006 Free Software Foundation, Inc. +# Copyright 2003,2006,2008 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -37,7 +37,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,15 +58,11 @@ # -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -88,25 +84,35 @@ noinst_PROGRAMS = check_order_quickly$(EXEEXT) \ test_usrp_standard_rx$(EXEEXT) test_usrp_standard_tx$(EXEEXT) subdir = usrp/host/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -115,15 +121,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -145,37 +171,40 @@ check_order_quickly_LDADD = $(LDADD) am_test_usrp_standard_rx_OBJECTS = test_usrp_standard_rx.$(OBJEXT) \ time_stuff.$(OBJEXT) test_usrp_standard_rx_OBJECTS = $(am_test_usrp_standard_rx_OBJECTS) -am__DEPENDENCIES_1 = $(top_builddir)/usrp/host/lib/libusrp.la +am__DEPENDENCIES_1 = test_usrp_standard_rx_DEPENDENCIES = $(am__DEPENDENCIES_1) am_test_usrp_standard_tx_OBJECTS = test_usrp_standard_tx.$(OBJEXT) \ time_stuff.$(OBJEXT) test_usrp_standard_tx_OBJECTS = $(am_test_usrp_standard_tx_OBJECTS) -test_usrp_standard_tx_DEPENDENCIES = $(am__DEPENDENCIES_1) +test_usrp_standard_tx_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_usrp_cal_dc_offset_OBJECTS = usrp_cal_dc_offset.$(OBJEXT) usrp_cal_dc_offset_OBJECTS = $(am_usrp_cal_dc_offset_OBJECTS) usrp_cal_dc_offset_DEPENDENCIES = $(am__DEPENDENCIES_1) am_usrper_OBJECTS = usrper.$(OBJEXT) usrper_OBJECTS = $(am_usrper_OBJECTS) usrper_DEPENDENCIES = $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(check_order_quickly_SOURCES) \ $(test_usrp_standard_rx_SOURCES) \ $(test_usrp_standard_tx_SOURCES) $(usrp_cal_dc_offset_SOURCES) \ @@ -192,10 +221,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -203,9 +231,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -213,6 +248,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -225,73 +262,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -301,49 +331,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -351,15 +421,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -369,16 +582,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -387,67 +618,137 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -INCLUDES = $(USRP_INCLUDES) $(BOOST_CFLAGS) -USRP_LIB = $(top_builddir)/usrp/host/lib/libusrp.la +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +AM_CPPFLAGS = $(USRP_INCLUDES) $(BOOST_CPPFLAGS) $(CPPUNIT_INCLUDES) \ + $(WITH_INCLUDES) + noinst_HEADERS = \ - time_stuff.h + time_stuff.h noinst_PYTHON = \ burn-db-eeprom \ @@ -455,13 +756,13 @@ noinst_PYTHON = \ check_order_quickly_SOURCES = check_order_quickly.cc test_usrp_standard_rx_SOURCES = test_usrp_standard_rx.cc time_stuff.c -test_usrp_standard_rx_LDADD = $(USRP_LIB) +test_usrp_standard_rx_LDADD = $(USRP_LA) test_usrp_standard_tx_SOURCES = test_usrp_standard_tx.cc time_stuff.c -test_usrp_standard_tx_LDADD = $(USRP_LIB) +test_usrp_standard_tx_LDADD = $(USRP_LA) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) usrper_SOURCES = usrper.cc -usrper_LDADD = $(USRP_LIB) +usrper_LDADD = $(USRP_LA) usrp_cal_dc_offset_SOURCES = usrp_cal_dc_offset.cc -usrp_cal_dc_offset_LDADD = $(USRP_LIB) +usrp_cal_dc_offset_LDADD = $(USRP_LA) all: all-am .SUFFIXES: @@ -470,8 +771,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -497,15 +798,15 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done @@ -532,19 +833,19 @@ clean-noinstPROGRAMS: done check_order_quickly$(EXEEXT): $(check_order_quickly_OBJECTS) $(check_order_quickly_DEPENDENCIES) @rm -f check_order_quickly$(EXEEXT) - $(CXXLINK) $(check_order_quickly_LDFLAGS) $(check_order_quickly_OBJECTS) $(check_order_quickly_LDADD) $(LIBS) + $(CXXLINK) $(check_order_quickly_OBJECTS) $(check_order_quickly_LDADD) $(LIBS) test_usrp_standard_rx$(EXEEXT): $(test_usrp_standard_rx_OBJECTS) $(test_usrp_standard_rx_DEPENDENCIES) @rm -f test_usrp_standard_rx$(EXEEXT) - $(CXXLINK) $(test_usrp_standard_rx_LDFLAGS) $(test_usrp_standard_rx_OBJECTS) $(test_usrp_standard_rx_LDADD) $(LIBS) + $(CXXLINK) $(test_usrp_standard_rx_OBJECTS) $(test_usrp_standard_rx_LDADD) $(LIBS) test_usrp_standard_tx$(EXEEXT): $(test_usrp_standard_tx_OBJECTS) $(test_usrp_standard_tx_DEPENDENCIES) @rm -f test_usrp_standard_tx$(EXEEXT) - $(CXXLINK) $(test_usrp_standard_tx_LDFLAGS) $(test_usrp_standard_tx_OBJECTS) $(test_usrp_standard_tx_LDADD) $(LIBS) + $(CXXLINK) $(test_usrp_standard_tx_OBJECTS) $(test_usrp_standard_tx_LDADD) $(LIBS) usrp_cal_dc_offset$(EXEEXT): $(usrp_cal_dc_offset_OBJECTS) $(usrp_cal_dc_offset_DEPENDENCIES) @rm -f usrp_cal_dc_offset$(EXEEXT) - $(CXXLINK) $(usrp_cal_dc_offset_LDFLAGS) $(usrp_cal_dc_offset_OBJECTS) $(usrp_cal_dc_offset_LDADD) $(LIBS) + $(CXXLINK) $(usrp_cal_dc_offset_OBJECTS) $(usrp_cal_dc_offset_LDADD) $(LIBS) usrper$(EXEEXT): $(usrper_OBJECTS) $(usrper_DEPENDENCIES) @rm -f usrper$(EXEEXT) - $(CXXLINK) $(usrper_LDFLAGS) $(usrper_OBJECTS) $(usrper_LDADD) $(LIBS) + $(CXXLINK) $(usrper_OBJECTS) $(usrper_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -560,43 +861,43 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrper.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< @@ -607,17 +908,13 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS @@ -629,8 +926,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -640,13 +937,12 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -660,23 +956,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -687,12 +981,15 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -709,6 +1006,7 @@ install-strip: `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: @@ -727,7 +1025,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -741,12 +1039,20 @@ info-am: install-data-am: +install-dvi: install-dvi-am + install-exec-am: install-binPROGRAMS +install-html: install-html-am + install-info: install-info-am install-man: +install-pdf: install-pdf-am + +install-ps: install-ps-am + installcheck-am: maintainer-clean: maintainer-clean-am @@ -767,21 +1073,34 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstPROGRAMS ctags \ - distclean distclean-compile distclean-generic \ + dist-hook distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-info-am + tags uninstall uninstall-am uninstall-binPROGRAMS + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/host/apps/burn-db-eeprom b/usrp/host/apps/burn-db-eeprom index 413ee926..e9ff9f5b 100755 --- a/usrp/host/apps/burn-db-eeprom +++ b/usrp/host/apps/burn-db-eeprom @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2005 Free Software Foundation, Inc. +# Copyright 2005,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,10 +20,10 @@ # Boston, MA 02110-1301, USA. # -from usrp_prims import * +from usrpm.usrp_prims import * from optparse import OptionParser import sys -from usrp_dbid import * +from usrpm.usrp_dbid import * i2c_addr_map = { 'TX_A' : 0x54, 'RX_A' : 0x55, 'TX_B' : 0x56, 'RX_B' : 0x57 } @@ -32,10 +32,12 @@ daughterboards = { 'basictx' : ((BASIC_TX, 0x0000), None), 'basicrx' : (None, (BASIC_RX, 0x0000)), 'dbsrx' : (None, (DBS_RX, 0x0000)), - 'dbsrx2' : (None, (DBS_RX_REV_2_1, 0x0000)), + 'dbsrx_clkmod' : (None, (DBS_RX_CLKMOD, 0x0000)), 'tvrx' : (None, (TV_RX, 0x0000)), 'tvrx2' : (None, (TV_RX_REV_2, 0x0000)), 'tvrx3' : (None, (TV_RX_REV_3, 0x0000)), + 'dtt754' : (None, (DTT754, 0x0000)), + 'dtt768' : (None, (DTT768, 0x0000)), 'rfx400' : ((FLEX_400_TX, 0x0000), (FLEX_400_RX, 0x0000)), 'rfx900' : ((FLEX_900_TX, 0x0000), (FLEX_900_RX, 0x0000)), 'rfx1200' : ((FLEX_1200_TX, 0x0000), (FLEX_1200_RX, 0x0000)), @@ -63,6 +65,8 @@ daughterboards = { 'rfx2400_mimo_b' : ((FLEX_2400_TX_MIMO_B, 0x0000), (FLEX_2400_RX_MIMO_B, 0x0000)), 'lftx' : ((LF_TX, 0x0000), None), 'lfrx' : (None, (LF_RX, 0x0000)), + 'wbx_lo' : ((WBX_LO_TX, 0x0000), (WBX_LO_RX, 0x0000)), + 'xcvr2450' : ((XCVR2450_TX, 0x0000), (XCVR2450_RX, 0x0000)), 'experimental_tx' : ((EXPERIMENTAL_TX, 0x0000), None), 'experimental_rx' : (None, (EXPERIMENTAL_RX, 0x0000)), } diff --git a/usrp/host/apps/burn-serial-number b/usrp/host/apps/burn-serial-number index 50e35290..f9a2a86a 100755 --- a/usrp/host/apps/burn-serial-number +++ b/usrp/host/apps/burn-serial-number @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2006 Free Software Foundation, Inc. +# Copyright 2006,2007 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -20,7 +20,7 @@ # Boston, MA 02110-1301, USA. # -from usrp_prims import * +from usrpm.usrp_prims import * from optparse import OptionParser import sys import time diff --git a/usrp/host/apps/test_usrp_standard_rx.cc b/usrp/host/apps/test_usrp_standard_rx.cc index 49f1f21b..4a47daa9 100644 --- a/usrp/host/apps/test_usrp_standard_rx.cc +++ b/usrp/host/apps/test_usrp_standard_rx.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003,2006 Free Software Foundation, Inc. + * Copyright 2003,2006,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -44,7 +44,7 @@ char *prog_name; -static bool test_input (usrp_standard_rx *urx, int max_bytes, FILE *fp); +static bool test_input (usrp_standard_rx_sptr urx, int max_bytes, FILE *fp); static void set_progname (char *path) @@ -189,7 +189,7 @@ main (int argc, char **argv) mode |= usrp_standard_rx::FPGA_MODE_COUNTING; - usrp_standard_rx *urx = + usrp_standard_rx_sptr urx = usrp_standard_rx::make (which_board, decim, 1, -1, mode, fusb_block_size, fusb_nblocks); @@ -214,14 +214,12 @@ main (int argc, char **argv) if (fp) fclose (fp); - delete urx; - return 0; } static bool -test_input (usrp_standard_rx *urx, int max_bytes, FILE *fp) +test_input (usrp_standard_rx_sptr urx, int max_bytes, FILE *fp) { int fd = -1; static const int BUFSIZE = urx->block_size(); diff --git a/usrp/host/apps/test_usrp_standard_tx.cc b/usrp/host/apps/test_usrp_standard_tx.cc index 6418c4ab..3cc20c44 100644 --- a/usrp/host/apps/test_usrp_standard_tx.cc +++ b/usrp/host/apps/test_usrp_standard_tx.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003,2004 Free Software Foundation, Inc. + * Copyright 2003,2004,2008,2009 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -24,6 +24,7 @@ #include "config.h" #endif +#include #include #include #include @@ -35,15 +36,44 @@ #include "time_stuff.h" #include "usrp_standard.h" #include "usrp_bytesex.h" +#include -#ifdef HAVE_SCHED_H -#include -#endif +enum { + GR_SIN_WAVE, + GR_CONST_WAVE +}; + +namespace po = boost::program_options; char *prog_name; -static bool test_output (usrp_standard_tx *utx, int max_bytes, double ampl, - bool dc_p, bool counting_p); +usrp_subdev_spec +str_to_subdev(std::string spec_str) +{ + usrp_subdev_spec spec; + if(spec_str == "A" || spec_str == "A:0" || spec_str == "0:0") { + spec.side = 0; + spec.subdev = 0; + } + else if(spec_str == "A:1" || spec_str == "0:1") { + spec.side = 0; + spec.subdev = 1; + } + else if(spec_str == "B" || spec_str == "B:0" || spec_str == "1:0") { + spec.side = 1; + spec.subdev = 0; + } + else if(spec_str == "B:1" || spec_str == "1:1") { + spec.side = 1; + spec.subdev = 1; + } + else { + throw std::range_error("Incorrect subdevice specifications.\n"); + } + + return spec; +} + static void set_progname (char *path) @@ -55,26 +85,6 @@ set_progname (char *path) prog_name = path; } -static void -usage () -{ - fprintf (stderr, - "usage: %s [-f] [-v] [-d] [-c] [-a ][-I ] [-F freq] [-D]\n", prog_name); - fprintf (stderr, " [-f] loop forever\n"); - fprintf (stderr, " [-M] how many Megabytes to transfer (default 128)\n"); - fprintf (stderr, " [-v] verbose\n"); - fprintf (stderr, " [-d] dump registers\n"); - // fprintf (stderr, " [-l] digital loopback in FPGA\n"); - fprintf (stderr, " [-c] Tx counting sequence\n"); - fprintf (stderr, " [-D] DC output\n"); - - fprintf (stderr, " [-B ] set fast usb block_size\n"); - fprintf (stderr, " [-N ] set fast usb nblocks\n"); - fprintf (stderr, " [-R] set real time scheduling: SCHED_FIFO; pri = midpoint\n"); - - exit (1); -} - static void die (const char *msg) { @@ -82,137 +92,154 @@ die (const char *msg) exit (1); } -static void -dump_codec_regs (usrp_basic *u, int which_codec, FILE *fp) -{ - for (int i = 0; i < 64; i++){ - unsigned char v; - u->_read_9862 (which_codec, i, &v); - fprintf (fp, "%2d: 0x%02x\n", i, v); - } - fflush (fp); -} -static void -do_dump_codec_regs (usrp_basic *u) +static bool +test_output (usrp_standard_tx_sptr utx, long long max_bytes, double ampl, int waveform) { - char name[100]; - strcpy (name, "regsXXXXXX"); - int fd = mkstemp (name); - if (fd == -1){ - perror (name); + const int BUFSIZE = utx->block_size(); + const int N = BUFSIZE/sizeof (short); + + short buf[N]; + long long nbytes = 0; + + // ---------------------------------------------------------------- + // one time initialization of the pattern we're going to transmit + + const int PERIOD = 65; // any value is valid + const int PATLEN = 2 * PERIOD; + short pattern[PATLEN]; + + for (int i = 0; i < PERIOD; i++){ + if (waveform == GR_CONST_WAVE){ + pattern[2*i+0] = host_to_usrp_short((short) ampl); + pattern[2*i+1] = host_to_usrp_short((short) 0); + } + else { + pattern[2*i+0] = host_to_usrp_short((short) (ampl * cos(2*M_PI * i / PERIOD))); + pattern[2*i+1] = host_to_usrp_short((short) (ampl * sin(2*M_PI * i / PERIOD))); + } } - else { - FILE *fp = fdopen (fd, "w"); - dump_codec_regs (u, 0, fp); - fclose (fp); + + // ---------------------------------------------------------------- + + double start_wall_time = get_elapsed_time (); + double start_cpu_time = get_cpu_usage (); + + bool underrun; + int nunderruns = 0; + int pi = 0; + + for (nbytes = 0; max_bytes == 0 || nbytes < max_bytes; nbytes += BUFSIZE){ + + for (int i = 0; i < N; i++){ + buf[i] = pattern[pi]; + pi++; + if (pi >= PATLEN) + pi = 0; + } + + int ret = utx->write (buf, sizeof (buf), &underrun); + if ((unsigned) ret != sizeof (buf)){ + fprintf (stderr, "test_output: error, ret = %d\n", ret); + } + + if (underrun){ + nunderruns++; + printf ("tx_underrun\n"); + //printf ("tx_underrun %9d %6d\n", nbytes, nbytes/BUFSIZE); + } } + + utx->wait_for_completion (); + + double stop_wall_time = get_elapsed_time (); + double stop_cpu_time = get_cpu_usage (); + + double delta_wall = stop_wall_time - start_wall_time; + double delta_cpu = stop_cpu_time - start_cpu_time; + + printf ("xfered %.3g bytes in %.3g seconds. %.4g bytes/sec. cpu time = %.3g\n", + (double) max_bytes, delta_wall, max_bytes / delta_wall, delta_cpu); + + printf ("%d underruns\n", nunderruns); + + return true; } int main (int argc, char **argv) { - bool verbose_p = false; - bool dump_regs_p = false; - bool dc_p = false; - // bool loopback_p = false; - bool counting_p = false; - int max_bytes = 128 * (1L << 20); - int ch; - int which_board = 0; - int interp = 16; // 32.0 MB/sec - double center_freq = 0; - double ampl = 10000; + int which = 0; // specify which USRP board + usrp_subdev_spec spec(0,0); // specify the d'board side + int interp = 16; // set the interpolation rate + double rf_freq = -1; // set the frequency + float amp = 10000; // set the amplitude of the output + float gain = -1; // set the d'board PGA gain + int waveform; int fusb_block_size = 0; int fusb_nblocks = 0; bool realtime_p = false; - + double nsamples = 32e6; set_progname (argv[0]); - while ((ch = getopt (argc, argv, "vfdcI:F:a:DM:B:N:R")) != EOF){ - switch (ch){ - case 'f': - max_bytes = 0; - break; - - case 'v': - verbose_p = true; - break; - - case 'd': - dump_regs_p = true; - break; - - case 'D': - dc_p = true; - break; - -#if 0 - case 'l': - loopback_p = true; - break; -#endif - - case 'c': - counting_p = true; - break; - - case 'I': - interp = strtol (optarg, 0, 0); - break; - - case 'F': - center_freq = strtod (optarg, 0); - break; - - case 'a': - ampl = strtod (optarg, 0); - break; - - case 'M': - max_bytes = strtol (optarg, 0, 0) * (1L << 20); - if (max_bytes < 0) max_bytes = 0; - break; - - case 'B': - fusb_block_size = strtol (optarg, 0, 0); - break; + po::options_description cmdconfig("Program options"); + cmdconfig.add_options() + ("help,h", "produce help message") + ("which,W", po::value(&which), "select which USRP board") + ("tx-subdev-spec,T", po::value(), "select USRP Tx side A or B") + ("rf-freq,f", po::value(), "set RF center frequency to FREQ") + ("interp,i", po::value(&interp), "set fgpa interpolation rate to INTERP") + + ("sine", "generate a complex sinusoid [default]") + ("const", "generate a constant output") + + //("waveform-freq,w", po::value(&wfreq), "set waveform frequency to FREQ") + ("amplitude,a", po::value(&), "set amplitude") + ("gain,g", po::value(&gain), "set output gain to GAIN [default=MAX]") + //("offset,o", po::value(&offset), "set waveform offset to OFFSET") + ("nsamples,N", po::value(&nsamples), "number of samples to send [default=32M]") + ; + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv). + options(cmdconfig).run(), vm); + po::notify(vm); + + if (vm.count("help")) { + std::cout << cmdconfig << "\n"; + return 1; + } + + if(vm.count("tx-subdev-spec")) { + std::string s = vm["tx-subdev-spec"].as(); + spec = str_to_subdev(s); + } - case 'N': - fusb_nblocks = strtol (optarg, 0, 0); - break; + if(vm.count("sine")) { + waveform = GR_SIN_WAVE; + } + else if(vm.count("const")) { + waveform = GR_CONST_WAVE; + } + else { + waveform = GR_SIN_WAVE; + } - case 'R': - realtime_p = true; - break; + printf("which: %d\n", which); + printf("interp: %d\n", interp); + printf("rf_freq: %g\n", rf_freq); + printf("amp: %f\n", amp); + printf("nsamples: %g\n", nsamples); - default: - usage (); - } - } -#ifdef HAVE_SCHED_SETSCHEDULER if (realtime_p){ - int policy = SCHED_FIFO; - int pri = (sched_get_priority_max (policy) - sched_get_priority_min (policy)) / 2; - int pid = 0; // this process - - struct sched_param param; - memset(¶m, 0, sizeof(param)); - param.sched_priority = pri; - int result = sched_setscheduler(pid, policy, ¶m); - if (result != 0){ - perror ("sched_setscheduler: failed to set real time priority"); - } - else - printf("SCHED_FIFO enabled with priority = %d\n", pri); + // FIXME } -#endif - usrp_standard_tx *utx; + usrp_standard_tx_sptr utx; - utx = usrp_standard_tx::make (which_board, + utx = usrp_standard_tx::make (which, interp, 1, // nchan -1, // mux @@ -221,99 +248,68 @@ main (int argc, char **argv) if (utx == 0) die ("usrp_standard_tx::make"); - - if (!utx->set_tx_freq (0, center_freq)) - die ("utx->set_tx_freq"); - - if (dump_regs_p) - do_dump_codec_regs (utx); - - - fflush (stdout); - fflush (stderr); - utx->start(); // start data xfers + // FIXME - test_output (utx, max_bytes, ampl, dc_p, counting_p); + db_base_sptr subdev = utx->selected_subdev(spec); + printf("Subdevice name is %s\n", subdev->name().c_str()); + printf("Subdevice freq range: (%g, %g)\n", + subdev->freq_min(), subdev->freq_max()); - delete utx; + unsigned int mux = utx->determine_tx_mux_value(spec); + printf("mux: %#08x\n", mux); + utx->set_mux(mux); - return 0; -} + if(gain == -1) + gain = subdev->gain_max(); + subdev->set_gain(gain); + float input_rate = utx->dac_rate() / utx->interp_rate(); + printf("baseband rate: %g\n", input_rate); -static bool -test_output (usrp_standard_tx *utx, int max_bytes, double ampl, - bool dc_p, bool counting_p) -{ - static const int BUFSIZE = utx->block_size(); - static const int N = BUFSIZE/sizeof (short); - - short buf[N]; - int nbytes = 0; - int counter = 0; + usrp_tune_result r; - static const int PERIOD = 65; // any value is valid - static const int PATLEN = 2 * PERIOD; - short pattern[PATLEN]; + if (rf_freq < 0) + rf_freq = (subdev->freq_min() + subdev->freq_max()) * 0.5; + double target_freq = rf_freq; + bool ok = utx->tune(subdev->which(), subdev, target_freq, &r); - for (int i = 0; i < PERIOD; i++){ - if (dc_p){ - pattern[2*i+0] = host_to_usrp_short ((short) ampl); - pattern[2*i+1] = host_to_usrp_short ((short) 0); - } - else { - pattern[2*i+0] = host_to_usrp_short ((short) (ampl * cos (2*M_PI * i / PERIOD))); - pattern[2*i+1] = host_to_usrp_short ((short) (ampl * sin (2*M_PI * i / PERIOD))); - } + if(!ok) { + throw std::runtime_error("Could not set frequency."); } - double start_wall_time = get_elapsed_time (); - double start_cpu_time = get_cpu_usage (); - - bool underrun; - int nunderruns = 0; - int pi = 0; + subdev->set_enable(true); + + printf("target_freq: %f\n", target_freq); + printf("ok: %s\n", ok ? "true" : "false"); + printf("r.baseband_freq: %f\n", r.baseband_freq); + printf("r.dxc_freq: %f\n", r.dxc_freq); + printf("r.residual_freq: %f\n", r.residual_freq); + printf("r.inverted: %d\n", r.inverted); - for (nbytes = 0; max_bytes == 0 || nbytes < max_bytes; nbytes += BUFSIZE){ - if (counting_p){ - for (int i = 0; i < N; i++) - buf[i] = host_to_usrp_short (counter++ & 0xffff); - } - else { - for (int i = 0; i < N; i++){ - buf[i] = pattern[pi]; - pi++; - if (pi >= PATLEN) - pi = 0; - } - } + fflush (stdout); + fflush (stderr); - int ret = utx->write (buf, sizeof (buf), &underrun); - if ((unsigned) ret != sizeof (buf)){ - fprintf (stderr, "test_output: error, ret = %d\n", ret); - } + utx->start(); // start data xfers - if (underrun){ - nunderruns++; - printf ("tx_underrun\n"); - //printf ("tx_underrun %9d %6d\n", nbytes, nbytes/BUFSIZE); - } - } + test_output (utx, (long long) nsamples, amp, waveform); - utx->wait_for_completion (); + return 0; +} - double stop_wall_time = get_elapsed_time (); - double stop_cpu_time = get_cpu_usage (); - double delta_wall = stop_wall_time - start_wall_time; - double delta_cpu = stop_cpu_time - start_cpu_time; +#if 0 + case 'B': + fusb_block_size = strtol (optarg, 0, 0); + break; - printf ("xfered %.3g bytes in %.3g seconds. %.4g bytes/sec. cpu time = %.3g\n", - (double) max_bytes, delta_wall, max_bytes / delta_wall, delta_cpu); + case 'N': + fusb_nblocks = strtol (optarg, 0, 0); + break; - printf ("%d underruns\n", nunderruns); + case 'R': + realtime_p = true; + break; - return true; -} +#endif diff --git a/usrp/host/apps/usrp_cal_dc_offset.cc b/usrp/host/apps/usrp_cal_dc_offset.cc index e836e1aa..5ebac12a 100644 --- a/usrp/host/apps/usrp_cal_dc_offset.cc +++ b/usrp/host/apps/usrp_cal_dc_offset.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2005 Free Software Foundation, Inc. + * Copyright 2005,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -43,7 +43,7 @@ char *prog_name; static void -run_cal(usrp_standard_rx *u, int which_side, int decim, bool verbose_p) +run_cal(usrp_standard_rx_sptr u, int which_side, int decim, bool verbose_p) { static const int BUFSIZE = u->block_size(); static const int N = BUFSIZE/sizeof (short); @@ -213,11 +213,11 @@ main (int argc, char **argv) usrp_local_sighandler sigquit (SIGQUIT, usrp_local_sighandler::throw_signal); #endif - usrp_standard_rx *urx = + usrp_standard_rx_sptr urx = usrp_standard_rx::make(which_board, decim, nchannels, mux, mode, fusb_block_size, fusb_nblocks); - if (urx == 0) + if (!urx) die("usrp_standard_rx::make"); try { @@ -236,7 +236,5 @@ main (int argc, char **argv) catch(...){ fprintf (stderr, "usrp_cal_dc_offset: caught something\n"); } - - delete urx; } diff --git a/usrp/host/apps/usrper.cc b/usrp/host/apps/usrper.cc index 88a438d5..3740022e 100644 --- a/usrp/host/apps/usrper.cc +++ b/usrp/host/apps/usrper.cc @@ -30,6 +30,7 @@ #include "usrp_prims.h" #include "usrp_spi_defs.h" +#include char *prog_name; @@ -70,12 +71,14 @@ usage () exit (1); } +#if 0 static void die (const char *msg) { fprintf (stderr, "%s (die): %s\n", prog_name, msg); exit (1); } +#endif static int hexval (char ch) diff --git a/usrp/host/lib/Makefile.am b/usrp/host/lib/Makefile.am index 0a28fb35..b6696b88 100644 --- a/usrp/host/lib/Makefile.am +++ b/usrp/host/lib/Makefile.am @@ -1,7 +1,7 @@ # # USRP - Universal Software Radio Peripheral # -# Copyright (C) 2003,2004,2006 Free Software Foundation, Inc. +# Copyright (C) 2003,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 @@ -20,133 +20,4 @@ include $(top_srcdir)/Makefile.common -INCLUDES = $(USRP_INCLUDES) - -lib_LTLIBRARIES = libusrp.la - - -EXTRA_DIST = \ - std_paths.h.in \ - usrp_dbid.dat - - -BUILT_SOURCES = \ - usrp_dbid.h \ - usrp_dbid.cc \ - usrp_dbid.py - - -# ---------------------------------------------------------------- -# FUSB_TECH is set at configure time by way of -# usrp/config/usrp_fusb_tech.m4. -# It indicates which fast usb strategy we should be building. -# We currently implement "generic", "darwin", "win32" and "linux" - - -generic_CODE = \ - fusb_generic.cc \ - fusb_sysconfig_generic.cc - -darwin_CODE = \ - fusb_darwin.cc \ - fusb_sysconfig_darwin.cc \ - README_OSX \ - circular_buffer.h \ - circular_linked_list.h \ - darwin_libusb.h \ - mld_threads.h - -win32_CODE = \ - fusb_win32.cc \ - fusb_sysconfig_win32.cc - -linux_CODE = \ - fusb_linux.cc \ - fusb_sysconfig_linux.cc - -ra_wb_CODE = \ - fusb_ra_wb.cc \ - fusb_sysconfig_ra_wb.cc - - -# -# include each _CODE entry here... -# -EXTRA_libusrp_la_SOURCES = \ - $(generic_CODE) \ - $(darwin_CODE) \ - $(win32_CODE) \ - $(linux_CODE) \ - $(ra_wb_CODE) - - -# work around automake deficiency -libusrp_la_common_SOURCES = \ - fusb.cc \ - md5.c \ - usrp_basic.cc \ - usrp_config.cc \ - usrp_dbid.cc \ - usrp_local_sighandler.cc \ - usrp_prims.cc \ - usrp_standard.cc - - -if FUSB_TECH_generic -libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(generic_CODE) -endif - -if FUSB_TECH_darwin -libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(darwin_CODE) -endif - -if FUSB_TECH_win32 -libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(win32_CODE) -endif - -if FUSB_TECH_linux -libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(linux_CODE) -endif - -if FUSB_TECH_ra_wb -libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(ra_wb_CODE) -endif - - -libusrp_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 -libusrp_la_LIBADD = $(USB_LIBS) ../misc/libmisc.la - -include_HEADERS = \ - usrp_basic.h \ - usrp_bytesex.h \ - usrp_config.h \ - usrp_dbid.h \ - usrp_prims.h \ - usrp_slots.h \ - usrp_standard.h - -noinst_HEADERS = \ - ad9862.h \ - fusb.h \ - fusb_darwin.h \ - fusb_win32.h \ - fusb_generic.h \ - fusb_linux.h \ - fusb_ra_wb.h \ - md5.h \ - rate_to_regval.h \ - usrp_local_sighandler.h - -python_PYTHON = \ - usrp_dbid.py - -noinst_PYTHON = \ - gen_usrp_dbid.py \ - check_data.py \ - dump_data.py - -usrp_dbid.py usrp_dbid.h usrp_dbid.cc: gen_usrp_dbid.py usrp_dbid.dat - PYTHONPATH=$(top_srcdir)/usrp/src srcdir=$(srcdir) $(PYTHON) $(srcdir)/gen_usrp_dbid.py $(srcdir)/usrp_dbid.dat - -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc +SUBDIRS = legacy diff --git a/usrp/host/lib/Makefile.in b/usrp/host/lib/Makefile.in index 67ec4846..7e2ef388 100644 --- a/usrp/host/lib/Makefile.in +++ b/usrp/host/lib/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.10.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,7 +17,7 @@ # # USRP - Universal Software Radio Peripheral # -# Copyright (C) 2003,2004,2006 Free Software Foundation, Inc. +# Copyright (C) 2003,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 @@ -36,7 +36,7 @@ # -*- Makefile -*- # -# Copyright 2004,2006,2007 Free Software Foundation, Inc. +# Copyright 2004,2006,2007,2008,2009 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -55,17 +55,11 @@ # the Free Software Foundation, Inc., 51 Franklin Street, # Boston, MA 02110-1301, USA. # - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -80,30 +74,39 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ - $(python_PYTHON) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/std_paths.h.in $(top_srcdir)/Makefile.common +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/Makefile.common subdir = usrp/host/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ $(top_srcdir)/config/cppunit.m4 \ - $(top_srcdir)/config/gr_boost.m4 \ $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ $(top_srcdir)/config/gr_check_shm_open.m4 \ $(top_srcdir)/config/gr_doxygen.m4 \ $(top_srcdir)/config/gr_fortran.m4 \ $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ $(top_srcdir)/config/gr_no_undefined.m4 \ $(top_srcdir)/config/gr_omnithread.m4 \ $(top_srcdir)/config/gr_pwin32.m4 \ $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ $(top_srcdir)/config/gr_scripting.m4 \ $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ $(top_srcdir)/config/gr_swig.m4 \ $(top_srcdir)/config/gr_sysv_shm.m4 \ - $(top_srcdir)/config/gr_x86_64.m4 \ $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ $(top_srcdir)/config/grc_gnuradio_core.m4 \ $(top_srcdir)/config/grc_gnuradio_examples.m4 \ $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ @@ -112,15 +115,35 @@ am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ $(top_srcdir)/config/grc_gr_audio_osx.m4 \ $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ $(top_srcdir)/config/grc_gr_trellis.m4 \ $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ $(top_srcdir)/config/grc_gr_video_sdl.m4 \ $(top_srcdir)/config/grc_gr_wxgui.m4 \ - $(top_srcdir)/config/grc_usrp.m4 $(top_srcdir)/config/lf_cc.m4 \ - $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ $(top_srcdir)/config/macosx_audiounit.m4 \ $(top_srcdir)/config/mkstemp.m4 \ $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ @@ -132,82 +155,28 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = std_paths.h -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pythondir)" \ - "$(DESTDIR)$(includedir)" -libLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = -libusrp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) ../misc/libmisc.la -am__libusrp_la_SOURCES_DIST = fusb.cc md5.c usrp_basic.cc \ - usrp_config.cc usrp_dbid.cc usrp_local_sighandler.cc \ - usrp_prims.cc usrp_standard.cc fusb_darwin.cc \ - fusb_sysconfig_darwin.cc README_OSX circular_buffer.h \ - circular_linked_list.h darwin_libusb.h mld_threads.h \ - fusb_generic.cc fusb_sysconfig_generic.cc fusb_linux.cc \ - fusb_sysconfig_linux.cc fusb_ra_wb.cc fusb_sysconfig_ra_wb.cc \ - fusb_win32.cc fusb_sysconfig_win32.cc -am__objects_1 = fusb.lo md5.lo usrp_basic.lo usrp_config.lo \ - usrp_dbid.lo usrp_local_sighandler.lo usrp_prims.lo \ - usrp_standard.lo -am__objects_2 = fusb_darwin.lo fusb_sysconfig_darwin.lo -am__objects_3 = fusb_generic.lo fusb_sysconfig_generic.lo -am__objects_4 = fusb_linux.lo fusb_sysconfig_linux.lo -am__objects_5 = fusb_ra_wb.lo fusb_sysconfig_ra_wb.lo -am__objects_6 = fusb_win32.lo fusb_sysconfig_win32.lo -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_FALSE@@FUSB_TECH_win32_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_FALSE@@FUSB_TECH_win32_TRUE@ $(am__objects_6) -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_TRUE@ $(am__objects_5) -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_TRUE@ $(am__objects_4) -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ -@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_TRUE@ $(am__objects_3) -@FUSB_TECH_darwin_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ -@FUSB_TECH_darwin_TRUE@ $(am__objects_2) -libusrp_la_OBJECTS = $(am_libusrp_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libusrp_la_SOURCES) $(EXTRA_libusrp_la_SOURCES) -DIST_SOURCES = $(am__libusrp_la_SOURCES_DIST) \ - $(EXTRA_libusrp_la_SOURCES) -pythonPYTHON_INSTALL = $(INSTALL_DATA) -py_compile = $(top_srcdir)/py-compile -includeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(include_HEADERS) $(noinst_HEADERS) +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ ALSA_LIBS = @ALSA_LIBS@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ @@ -215,9 +184,16 @@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ -BOOST_CFLAGS = @BOOST_CFLAGS@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ CC = @CC@ CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -225,6 +201,8 @@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ CPPUNIT_LIBS = @CPPUNIT_LIBS@ CXX = @CXX@ @@ -237,73 +215,66 @@ DEFINES = @DEFINES@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ -DOC_FALSE = @DOC_FALSE@ -DOC_TRUE = @DOC_TRUE@ DOT = @DOT@ DOXYGEN = @DOXYGEN@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ -ENABLE_FORTRAN_FALSE = @ENABLE_FORTRAN_FALSE@ -ENABLE_FORTRAN_TRUE = @ENABLE_FORTRAN_TRUE@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ FLIBS = @FLIBS@ FUSB_TECH = @FUSB_TECH@ -FUSB_TECH_darwin_FALSE = @FUSB_TECH_darwin_FALSE@ -FUSB_TECH_darwin_TRUE = @FUSB_TECH_darwin_TRUE@ -FUSB_TECH_generic_FALSE = @FUSB_TECH_generic_FALSE@ -FUSB_TECH_generic_TRUE = @FUSB_TECH_generic_TRUE@ -FUSB_TECH_linux_FALSE = @FUSB_TECH_linux_FALSE@ -FUSB_TECH_linux_TRUE = @FUSB_TECH_linux_TRUE@ -FUSB_TECH_ra_wb_FALSE = @FUSB_TECH_ra_wb_FALSE@ -FUSB_TECH_ra_wb_TRUE = @FUSB_TECH_ra_wb_TRUE@ -FUSB_TECH_win32_FALSE = @FUSB_TECH_win32_FALSE@ -FUSB_TECH_win32_TRUE = @FUSB_TECH_win32_TRUE@ GREP = @GREP@ -HAS_XMLTO_FALSE = @HAS_XMLTO_FALSE@ -HAS_XMLTO_TRUE = @HAS_XMLTO_TRUE@ -HAVE_CREATEFILEMAPPING_FALSE = @HAVE_CREATEFILEMAPPING_FALSE@ -HAVE_CREATEFILEMAPPING_TRUE = @HAVE_CREATEFILEMAPPING_TRUE@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPC_LIBS = @IPC_LIBS@ JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ JACK_LIBS = @JACK_LIBS@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MD_CPU = @MD_CPU@ -MD_CPU_generic_FALSE = @MD_CPU_generic_FALSE@ -MD_CPU_generic_TRUE = @MD_CPU_generic_TRUE@ -MD_CPU_x86_FALSE = @MD_CPU_x86_FALSE@ -MD_CPU_x86_TRUE = @MD_CPU_x86_TRUE@ MD_SUBCPU = @MD_SUBCPU@ -MD_SUBCPU_x86_64_FALSE = @MD_SUBCPU_x86_64_FALSE@ -MD_SUBCPU_x86_64_TRUE = @MD_SUBCPU_x86_64_TRUE@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ NO_UNDEFINED = @NO_UNDEFINED@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ -OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ -OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ -OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -313,49 +284,89 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ RANLIB = @RANLIB@ RM_PROG = @RM_PROG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ SDL_LIBS = @SDL_LIBS@ +SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ SWIG = @SWIG@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ VERSION = @VERSION@ WINAUDIO_LIBS = @WINAUDIO_LIBS@ XAS = @XAS@ XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ @@ -363,15 +374,158 @@ build_cpu = @build_cpu@ build_dirs = @build_dirs@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ dvidir = @dvidir@ enable_dot = @enable_dot@ enable_html_docs = @enable_html_docs@ enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -381,16 +535,34 @@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ @@ -399,178 +571,142 @@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ # includes grincludedir = $(includedir)/gnuradio -# swig includes +# swig includes swigincludedir = $(grincludedir)/swig -# Install this stuff in the appropriate subdirectory +# Install the gnuradio stuff in the appropriate subdirectory # This usually ends up at: # ${prefix}/lib/python${python_version}/site-packages/gnuradio grpythondir = $(pythondir)/gnuradio grpyexecdir = $(pyexecdir)/gnuradio -# swig flags -SWIGPYTHONFLAGS = -fvirtual -python -modern +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ # Where to find gnuradio include files in the current build tree # top_srcdir for original stuff, top_builddir for generated files -GNURADIO_INCLUDES = -I$(top_srcdir)/gnuradio-core/src/lib/runtime \ - -I$(top_srcdir)/gnuradio-core/src/lib/general \ - -I$(top_builddir)/gnuradio-core/src/lib/general \ - -I$(top_srcdir)/gnuradio-core/src/lib/filter \ - -I$(top_builddir)/gnuradio-core/src/lib/filter \ - -I$(top_srcdir)/gnuradio-core/src/lib/reed-solomon \ - -I$(top_srcdir)/gnuradio-core/src/lib/io \ - -I$(top_srcdir)/gnuradio-core/src/lib/g72x \ - -I$(top_srcdir)/gnuradio-core/src/lib/omnithread \ - -I$(top_srcdir)/gnuradio-core/src/lib/swig \ - -I$(top_builddir)/gnuradio-core/src/lib/swig \ - $(FFTW3F_CFLAGS) - +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ # How to link in GNU Radio core library from inside the tree -GNURADIO_CORE_LA = $(top_builddir)/gnuradio-core/src/lib/libgnuradio-core.la +GNURADIO_CORE_LA = @gnuradio_core_LA@ -# This is a dependency for many swig operations -GNURADIO_I = $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ # How to link in the USRP library from inside the tree -USRP_INCLUDES = -I$(top_srcdir)/usrp/host/lib \ - -I$(top_srcdir)/usrp/firmware/include +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ -USRP_LA = $(top_builddir)/usrp/host/lib/libusrp.la +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ -# This used to be set in configure.ac but is now defined here for all -# Makefiles when this fragment is included. -STD_DEFINES_AND_INCLUDES = $(DEFINES) $(GNURADIO_INCLUDES) $(BOOST_CFLAGS) +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool # Fix for BSD make not defining $(RM). We define it now in configure.ac # using AM_PATH_PROG, but now here have to add a -f to be like GNU make RM = $(RM_PROG) -f -INCLUDES = $(USRP_INCLUDES) -lib_LTLIBRARIES = libusrp.la -EXTRA_DIST = \ - std_paths.h.in \ - usrp_dbid.dat - -BUILT_SOURCES = \ - usrp_dbid.h \ - usrp_dbid.cc \ - usrp_dbid.py - - -# ---------------------------------------------------------------- -# FUSB_TECH is set at configure time by way of -# usrp/config/usrp_fusb_tech.m4. -# It indicates which fast usb strategy we should be building. -# We currently implement "generic", "darwin", "win32" and "linux" -generic_CODE = \ - fusb_generic.cc \ - fusb_sysconfig_generic.cc - -darwin_CODE = \ - fusb_darwin.cc \ - fusb_sysconfig_darwin.cc \ - README_OSX \ - circular_buffer.h \ - circular_linked_list.h \ - darwin_libusb.h \ - mld_threads.h - -win32_CODE = \ - fusb_win32.cc \ - fusb_sysconfig_win32.cc - -linux_CODE = \ - fusb_linux.cc \ - fusb_sysconfig_linux.cc - -ra_wb_CODE = \ - fusb_ra_wb.cc \ - fusb_sysconfig_ra_wb.cc +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) -# -# include each _CODE entry here... -# -EXTRA_libusrp_la_SOURCES = \ - $(generic_CODE) \ - $(darwin_CODE) \ - $(win32_CODE) \ - $(linux_CODE) \ - $(ra_wb_CODE) - - -# work around automake deficiency -libusrp_la_common_SOURCES = \ - fusb.cc \ - md5.c \ - usrp_basic.cc \ - usrp_config.cc \ - usrp_dbid.cc \ - usrp_local_sighandler.cc \ - usrp_prims.cc \ - usrp_standard.cc - -@FUSB_TECH_darwin_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(darwin_CODE) -@FUSB_TECH_generic_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(generic_CODE) -@FUSB_TECH_linux_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(linux_CODE) -@FUSB_TECH_ra_wb_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(ra_wb_CODE) -@FUSB_TECH_win32_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(win32_CODE) -libusrp_la_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 -libusrp_la_LIBADD = $(USB_LIBS) ../misc/libmisc.la -include_HEADERS = \ - usrp_basic.h \ - usrp_bytesex.h \ - usrp_config.h \ - usrp_dbid.h \ - usrp_prims.h \ - usrp_slots.h \ - usrp_standard.h - -noinst_HEADERS = \ - ad9862.h \ - fusb.h \ - fusb_darwin.h \ - fusb_win32.h \ - fusb_generic.h \ - fusb_linux.h \ - fusb_ra_wb.h \ - md5.h \ - rate_to_regval.h \ - usrp_local_sighandler.h - -python_PYTHON = \ - usrp_dbid.py - -noinst_PYTHON = \ - gen_usrp_dbid.py \ - check_data.py \ - dump_data.py - -MOSTLYCLEANFILES = \ - $(BUILT_SOURCES) *~ *.pyc - -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp *.loT +SUBDIRS = legacy +all: all-recursive .SUFFIXES: -.SUFFIXES: .c .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ @@ -594,104 +730,6 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -std_paths.h: $(top_builddir)/config.status $(srcdir)/std_paths.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libusrp.la: $(libusrp_la_OBJECTS) $(libusrp_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libusrp_la_LDFLAGS) $(libusrp_la_OBJECTS) $(libusrp_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_generic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_linux.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_ra_wb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_darwin.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_generic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_linux.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_ra_wb.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_win32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_win32.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_basic.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_config.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_dbid.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_local_sighandler.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_prims.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_standard.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -.cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo @@ -699,53 +737,74 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-pythonPYTHON: $(python_PYTHON) - @$(NORMAL_INSTALL) - test -z "$(pythondir)" || $(mkdir_p) "$(DESTDIR)$(pythondir)" - @list='$(python_PYTHON)'; dlist=''; for p in $$list; do\ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ - f=$(am__strip_dir) \ - dlist="$$dlist $$f"; \ - echo " $(pythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(pythondir)/$$f'"; \ - $(pythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(pythondir)/$$f"; \ - else :; fi; \ +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ done; \ - if test -n "$$dlist"; then \ - if test -z "$(DESTDIR)"; then \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(pythondir)" $$dlist; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ else \ - PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pythondir)" $$dlist; \ + local_target="$$target"; \ fi; \ - else :; fi - -uninstall-pythonPYTHON: - @$(NORMAL_UNINSTALL) - @list='$(python_PYTHON)'; dlist=''; for p in $$list; do\ - f=$(am__strip_dir) \ - rm -f "$(DESTDIR)$(pythondir)/$$f"; \ - rm -f "$(DESTDIR)$(pythondir)/$${f}c"; \ - rm -f "$(DESTDIR)$(pythondir)/$${f}o"; \ - done -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" - @list='$(include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ - $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ - rm -f "$(DESTDIR)$(includedir)/$$f"; \ +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -753,37 +812,49 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -797,23 +868,21 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/../../.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -824,24 +893,40 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done -check-am: all-am -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(includedir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-am +installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ @@ -858,77 +943,87 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am +clean: clean-recursive -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am +clean-am: clean-generic clean-libtool mostlyclean-am -distclean: distclean-am - -rm -rf ./$(DEPDIR) +distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags +distclean-am: clean-am distclean-generic distclean-tags -dvi: dvi-am +dvi: dvi-recursive dvi-am: -html: html-am +html: html-recursive -info: info-am +info: info-recursive info-am: -install-data-am: install-includeHEADERS install-pythonPYTHON +install-data-am: + +install-dvi: install-dvi-recursive -install-exec-am: install-libLTLIBRARIES +install-exec-am: -install-info: install-info-am +install-html: install-html-recursive + +install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) +maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-am +mostlyclean: mostlyclean-recursive -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool +mostlyclean-am: mostlyclean-generic mostlyclean-libtool -pdf: pdf-am +pdf: pdf-recursive pdf-am: -ps: ps-am +ps: ps-recursive ps-am: -uninstall-am: uninstall-includeHEADERS uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-pythonPYTHON - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-includeHEADERS install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-pythonPYTHON install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-includeHEADERS \ - uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-pythonPYTHON - - -usrp_dbid.py usrp_dbid.h usrp_dbid.cc: gen_usrp_dbid.py usrp_dbid.dat - PYTHONPATH=$(top_srcdir)/usrp/src srcdir=$(srcdir) $(PYTHON) $(srcdir)/gen_usrp_dbid.py $(srcdir)/usrp_dbid.dat +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive dist-hook distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/usrp/host/lib/README_OSX b/usrp/host/lib/README_OSX deleted file mode 100644 index 20230f12..00000000 --- a/usrp/host/lib/README_OSX +++ /dev/null @@ -1,63 +0,0 @@ -USRP Darwin Fast USB Changes -Version 0.2 of 2006-04-27 -Michael Dickens - -The files included in this archive are: - -circular_buffer.h -circular_linked_list.h -darwin_libusb.h -fusb_darwin.cc -fusb_darwin.h -mld_threads.h - -These files allow GNURadio code for Darwin / MaxOS X to talk to the -USRP via USB 2.0 at rates up to around 30 Mega-Bytes/sec (MBps), up -from 4-8 MBps without the changes. - -I implemented the buffering myself; there are probably GR buffers -available which would do the work but as this is "beta" software it's -a good place to start. Speed improvements are made by porting -LIBUSB's non-true async bulk read and write functions into USRP's -"fusb", and upgrading them to handle -true- async transfers. -Unfortunately, the easiest way to do this is to spawn a thread or 2 to -handle the "async" part of the transfers. This implementation uses -Darwin's pthreads to do the work for mutexes, conditions, and threads. -Previous implementations (0.1 and before) used "omni_threads" as -provided by gnuradio-core, which caused issues with compiling and -execution ... I'm glad that this is no longer the case. - -As far as I have tested, there is no way to improve the throughput to -32+ MBps without moving into Darwin's "port"s ... a kernel-level data -transport method with a user/application layer for USB-specific -functions. Unfortunately, Apple's documentation for these "port"s is -minimal; I have learned more from reading the Darwin source code -< http://darwinsource.opendarwin.org/ > than by reading Apple's -documents! This would also require -not- using LIBUSB, of which the -removal from the rest of the USRP code would be potentially tedious. - -If you run into issues either compiling or testing the USRP on -OSX, please send me a note. - -(1) Go through the bootstrap, configure, compile, and install as -usual (e.g. see < http://www.nd.edu/~mdickens/GNURadio/ > for my -usual). - -(2) from .../usrp/host/apps : run the scripts -++++++++++++++++ -./test_usrp_standard_tx -./test_usrp_standard_rx -++++++++++++++++ - -For -all- systems I've tested on thus far, both of these return -exactly 41 overruns / underruns, and -most- systems start out with a -stalled pipe. This stall comes in a usb_control funciton call to -LIBUSB; one would have to change the LIBUSB code to handle this issue. - -(3) from gr-build/gnuradio-examples/python/usrp : -++++++++++++++++ -./benchmark_usb.py -++++++++++++++++ - -(4) If you get to here, the try doing the FM receiver (gui or not). -If that sounds correct, then the USB is working. Yay! \ No newline at end of file diff --git a/usrp/host/lib/circular_buffer.h b/usrp/host/lib/circular_buffer.h deleted file mode 100644 index 3025d7b5..00000000 --- a/usrp/host/lib/circular_buffer.h +++ /dev/null @@ -1,325 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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. - */ - -#ifndef _CIRCULAR_BUFFER_H_ -#define _CIRCULAR_BUFFER_H_ - -#include "mld_threads.h" -#include - -#define DO_DEBUG 0 - -template class circular_buffer -{ -private: -// the buffer to use - T* d_buffer; - -// the following are in Items (type T) - UInt32 d_bufLen_I, d_readNdx_I, d_writeNdx_I; - UInt32 d_n_avail_write_I, d_n_avail_read_I; - -// stuff to control access to class internals - mld_mutex_ptr d_internal; - mld_condition_ptr d_readBlock, d_writeBlock; - -// booleans to decide how to control reading, writing, and aborting - bool d_doWriteBlock, d_doFullRead, d_doAbort; - - void delete_mutex_cond () { - if (d_internal) { - delete d_internal; - d_internal = NULL; - } - if (d_readBlock) { - delete d_readBlock; - d_readBlock = NULL; - } - if (d_writeBlock) { - delete d_writeBlock; - d_writeBlock = NULL; - } - }; - -public: - circular_buffer (UInt32 bufLen_I, - bool doWriteBlock = true, bool doFullRead = false) { - if (bufLen_I == 0) - throw std::runtime_error ("circular_buffer(): " - "Number of items to buffer must be > 0.\n"); - d_bufLen_I = bufLen_I; - d_buffer = (T*) new T[d_bufLen_I]; - d_doWriteBlock = doWriteBlock; - d_doFullRead = doFullRead; - d_internal = NULL; - d_readBlock = d_writeBlock = NULL; - reset (); -#if DO_DEBUG - fprintf (stderr, "c_b(): buf len (items) = %ld, " - "doWriteBlock = %s, doFullRead = %s\n", d_bufLen_I, - (d_doWriteBlock ? "true" : "false"), - (d_doFullRead ? "true" : "false")); -#endif - }; - - ~circular_buffer () { - delete_mutex_cond (); - delete [] d_buffer; - }; - - inline UInt32 n_avail_write_items () { - d_internal->lock (); - UInt32 retVal = d_n_avail_write_I; - d_internal->unlock (); - return (retVal); - }; - - inline UInt32 n_avail_read_items () { - d_internal->lock (); - UInt32 retVal = d_n_avail_read_I; - d_internal->unlock (); - return (retVal); - }; - - inline UInt32 buffer_length_items () {return (d_bufLen_I);}; - inline bool do_write_block () {return (d_doWriteBlock);}; - inline bool do_full_read () {return (d_doFullRead);}; - - void reset () { - d_doAbort = false; - bzero (d_buffer, d_bufLen_I * sizeof (T)); - d_readNdx_I = d_writeNdx_I = d_n_avail_read_I = 0; - d_n_avail_write_I = d_bufLen_I; - delete_mutex_cond (); - d_internal = new mld_mutex (); - d_readBlock = new mld_condition (); - d_writeBlock = new mld_condition (); - }; - -/* - * enqueue: add the given buffer of item-length to the queue, - * first-in-first-out (FIFO). - * - * inputs: - * buf: a pointer to the buffer holding the data - * - * bufLen_I: the buffer length in items (of the instantiated type) - * - * returns: - * -1: on overflow (write is not blocking, and data is being - * written faster than it is being read) - * 0: if nothing to do (0 length buffer) - * 1: if success - * 2: in the process of aborting, do doing nothing - * - * will throw runtime errors if inputs are improper: - * buffer pointer is NULL - * buffer length is larger than the instantiated buffer length - */ - - int enqueue (T* buf, UInt32 bufLen_I) { -#if DO_DEBUG - fprintf (stderr, "enqueue: buf = %X, bufLen = %ld.\n", - (unsigned int)buf, bufLen_I); -#endif - if (bufLen_I > d_bufLen_I) { - fprintf (stderr, "cannot add buffer longer (%ld" - ") than instantiated length (%ld" - ").\n", bufLen_I, d_bufLen_I); - throw std::runtime_error ("circular_buffer::enqueue()"); - } - - if (bufLen_I == 0) - return (0); - if (!buf) - throw std::runtime_error ("circular_buffer::enqueue(): " - "input buffer is NULL.\n"); - d_internal->lock (); - if (d_doAbort) { - d_internal->unlock (); - return (2); - } - if (bufLen_I > d_n_avail_write_I) { - if (d_doWriteBlock) { - while (bufLen_I > d_n_avail_write_I) { -#if DO_DEBUG - fprintf (stderr, "enqueue: #len > #a, waiting.\n"); -#endif - d_internal->unlock (); - d_writeBlock->wait (); - d_internal->lock (); - if (d_doAbort) { - d_internal->unlock (); -#if DO_DEBUG - fprintf (stderr, "enqueue: #len > #a, aborting.\n"); -#endif - return (2); - } -#if DO_DEBUG - fprintf (stderr, "enqueue: #len > #a, done waiting.\n"); -#endif - } - } else { - d_n_avail_read_I = d_bufLen_I - bufLen_I; - d_n_avail_write_I = bufLen_I; -#if DO_DEBUG - fprintf (stderr, "circular_buffer::enqueue: overflow\n"); -#endif - return (-1); - } - } - UInt32 n_now_I = d_bufLen_I - d_writeNdx_I, n_start_I = 0; - if (n_now_I > bufLen_I) - n_now_I = bufLen_I; - else if (n_now_I < bufLen_I) - n_start_I = bufLen_I - n_now_I; - bcopy (buf, &(d_buffer[d_writeNdx_I]), n_now_I * sizeof (T)); - if (n_start_I) { - bcopy (&(buf[n_now_I]), d_buffer, n_start_I * sizeof (T)); - d_writeNdx_I = n_start_I; - } else - d_writeNdx_I += n_now_I; - d_n_avail_read_I += bufLen_I; - d_n_avail_write_I -= bufLen_I; - d_readBlock->signal (); - d_internal->unlock (); - return (1); - }; - -/* - * dequeue: removes from the queue the number of items requested, or - * available, into the given buffer on a FIFO basis. - * - * inputs: - * buf: a pointer to the buffer into which to copy the data - * - * bufLen_I: pointer to the number of items to remove in items - * (of the instantiated type) - * - * returns: - * 0: if nothing to do (0 length buffer) - * 1: if success - * 2: in the process of aborting, do doing nothing - * - * will throw runtime errors if inputs are improper: - * buffer pointer is NULL - * buffer length pointer is NULL - * buffer length is larger than the instantiated buffer length - */ - - - int dequeue (T* buf, UInt32* bufLen_I) { -#if DO_DEBUG - fprintf (stderr, "dequeue: buf = %X, *bufLen = %ld.\n", - (unsigned int)buf, *bufLen_I); -#endif - if (!bufLen_I) - throw std::runtime_error ("circular_buffer::dequeue(): " - "input bufLen pointer is NULL.\n"); - if (!buf) - throw std::runtime_error ("circular_buffer::dequeue(): " - "input buffer pointer is NULL.\n"); - UInt32 l_bufLen_I = *bufLen_I; - if (l_bufLen_I == 0) - return (0); - if (l_bufLen_I > d_bufLen_I) { - fprintf (stderr, "cannot remove buffer longer (%ld" - ") than instantiated length (%ld" - ").\n", l_bufLen_I, d_bufLen_I); - throw std::runtime_error ("circular_buffer::dequeue()"); - } - - d_internal->lock (); - if (d_doAbort) { - d_internal->unlock (); - return (2); - } - if (d_doFullRead) { - while (d_n_avail_read_I < l_bufLen_I) { -#if DO_DEBUG - fprintf (stderr, "dequeue: #a < #len, waiting.\n"); -#endif - d_internal->unlock (); - d_readBlock->wait (); - d_internal->lock (); - if (d_doAbort) { - d_internal->unlock (); -#if DO_DEBUG - fprintf (stderr, "dequeue: #a < #len, aborting.\n"); -#endif - return (2); - } -#if DO_DEBUG - fprintf (stderr, "dequeue: #a < #len, done waiting.\n"); -#endif - } - } else { - while (d_n_avail_read_I == 0) { -#if DO_DEBUG - fprintf (stderr, "dequeue: #a == 0, waiting.\n"); -#endif - d_internal->unlock (); - d_readBlock->wait (); - d_internal->lock (); - if (d_doAbort) { - d_internal->unlock (); -#if DO_DEBUG - fprintf (stderr, "dequeue: #a == 0, aborting.\n"); -#endif - return (2); - } -#if DO_DEBUG - fprintf (stderr, "dequeue: #a == 0, done waiting.\n"); -#endif - } - } - if (l_bufLen_I > d_n_avail_read_I) - l_bufLen_I = d_n_avail_read_I; - UInt32 n_now_I = d_bufLen_I - d_readNdx_I, n_start_I = 0; - if (n_now_I > l_bufLen_I) - n_now_I = l_bufLen_I; - else if (n_now_I < l_bufLen_I) - n_start_I = l_bufLen_I - n_now_I; - bcopy (&(d_buffer[d_readNdx_I]), buf, n_now_I * sizeof (T)); - if (n_start_I) { - bcopy (d_buffer, &(buf[n_now_I]), n_start_I * sizeof (T)); - d_readNdx_I = n_start_I; - } else - d_readNdx_I += n_now_I; - *bufLen_I = l_bufLen_I; - d_n_avail_read_I -= l_bufLen_I; - d_n_avail_write_I += l_bufLen_I; - d_writeBlock->signal (); - d_internal->unlock (); - return (1); - }; - - void abort () { - d_internal->lock (); - d_doAbort = true; - d_writeBlock->signal (); - d_readBlock->signal (); - d_internal->unlock (); - }; -}; - -#endif /* _CIRCULAR_BUFFER_H_ */ diff --git a/usrp/host/lib/circular_linked_list.h b/usrp/host/lib/circular_linked_list.h deleted file mode 100644 index 38b1cdca..00000000 --- a/usrp/host/lib/circular_linked_list.h +++ /dev/null @@ -1,267 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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. - */ - -#ifndef _CIRCULAR_LINKED_LIST_H_ -#define _CIRCULAR_LINKED_LIST_H_ - -#include -#include - -#define __INLINE__ inline - -template class s_both; - -template class s_node -{ - typedef s_node* s_node_ptr; - -private: - T d_object; - bool d_available; - s_node_ptr d_prev, d_next; - s_both* d_both; - -public: - s_node (T l_object, - s_node_ptr l_prev = NULL, - s_node_ptr l_next = NULL) - : d_object (l_object), d_available (TRUE), d_prev (l_prev), - d_next (l_next), d_both (0) {}; - - __INLINE__ s_node (s_node_ptr l_prev, s_node_ptr l_next = NULL) { - s_node ((T) NULL, l_prev, l_next); }; - __INLINE__ s_node () { s_node (NULL, NULL, NULL); }; - __INLINE__ ~s_node () {}; - - void remove () { - d_prev->next (d_next); - d_next->prev (d_prev); - d_prev = d_next = this; - }; - - void insert_before (s_node_ptr l_next) { - if (l_next) { - s_node_ptr l_prev = l_next->prev (); - d_next = l_next; - d_prev = l_prev; - l_prev->next (this); - l_next->prev (this); - } else - d_next = d_prev = this; - }; - - void insert_after (s_node_ptr l_prev) { - if (l_prev) { - s_node_ptr l_next = l_prev->next (); - d_prev = l_prev; - d_next = l_next; - l_next->prev (this); - l_prev->next (this); - } else - d_prev = d_next = this; - }; - - __INLINE__ T object () { return (d_object); }; - __INLINE__ void object (T l_object) { d_object = l_object; }; - __INLINE__ bool available () { return (d_available); }; - __INLINE__ void set_available () { d_available = TRUE; }; - __INLINE__ void set_available (bool l_avail) { d_available = l_avail; }; - __INLINE__ void set_not_available () { d_available = FALSE; }; - __INLINE__ s_node_ptr next () { return (d_next); }; - __INLINE__ s_node_ptr prev () { return (d_prev); }; - __INLINE__ s_both* both () { return (d_both); }; - __INLINE__ void next (s_node_ptr l_next) { d_next = l_next; }; - __INLINE__ void prev (s_node_ptr l_prev) { d_prev = l_prev; }; - __INLINE__ void both (s_both* l_both) { d_both = l_both; }; -}; - -template class circular_linked_list { - typedef s_node* s_node_ptr; - -private: - s_node_ptr d_current, d_iterate, d_available, d_inUse; - UInt32 d_n_nodes, d_n_used; - mld_mutex_ptr d_internal; - mld_condition_ptr d_ioBlock; - -public: - circular_linked_list (UInt32 n_nodes) { - if (n_nodes == 0) - throw std::runtime_error ("circular_linked_list(): n_nodes == 0"); - - d_iterate = NULL; - d_n_nodes = n_nodes; - d_n_used = 0; - s_node_ptr l_prev, l_next; - d_inUse = d_current = l_next = l_prev = NULL; - - l_prev = new s_node (); - l_prev->set_available (); - l_prev->next (l_prev); - l_prev->prev (l_prev); - if (n_nodes > 1) { - l_next = new s_node (l_prev, l_prev); - l_next->set_available (); - l_next->next (l_prev); - l_next->prev (l_prev); - l_prev->next (l_next); - l_prev->prev (l_next); - if (n_nodes > 2) { - UInt32 n = n_nodes - 2; - while (n-- > 0) { - d_current = new s_node (l_prev, l_next); - d_current->set_available (); - d_current->prev (l_prev); - d_current->next (l_next); - l_prev->next (d_current); - l_next->prev (d_current); - l_next = d_current; - d_current = NULL; - } - } - } - d_available = d_current = l_prev; - d_internal = new mld_mutex (); - d_ioBlock = new mld_condition (); - }; - - ~circular_linked_list () { - iterate_start (); - s_node_ptr l_node = iterate_next (); - while (l_node) { - delete l_node; - l_node = iterate_next (); - } - delete d_internal; - d_internal = NULL; - delete d_ioBlock; - d_ioBlock = NULL; - d_available = d_inUse = d_iterate = d_current = NULL; - d_n_used = d_n_nodes = 0; - }; - - s_node_ptr find_next_available_node () { - d_internal->lock (); -// find an available node - s_node_ptr l_node = d_available; - while (! l_node) { - d_internal->unlock (); - d_ioBlock->wait (); - d_internal->lock (); - l_node = d_available; - } -// fprintf (stderr, "::f_n_a_n: #u = %ld, node = %p\n", num_used(), l_node); -// remove this one from the current available list - if (num_available () == 1) { -// last one, just set available to NULL - d_available = NULL; - } else - d_available = l_node->next (); - l_node->remove (); -// add is to the inUse list - if (! d_inUse) - d_inUse = l_node; - else - l_node->insert_before (d_inUse); - d_n_used++; - l_node->set_not_available (); - d_internal->unlock (); - return (l_node); - }; - - void make_node_available (s_node_ptr l_node) { - if (!l_node) return; - d_internal->lock (); -// fprintf (stderr, "::m_n_a: #u = %ld, node = %p\n", num_used(), l_node); -// remove this node from the inUse list - if (num_used () == 1) { -// last one, just set inUse to NULL - d_inUse = NULL; - } else - d_inUse = l_node->next (); - l_node->remove (); -// add this node to the available list - if (! d_available) - d_available = l_node; - else - l_node->insert_before (d_available); - d_n_used--; -// signal the condition when new data arrives - d_ioBlock->signal (); -// unlock the mutex for thread safety - d_internal->unlock (); - }; - - __INLINE__ void iterate_start () { d_iterate = d_current; }; - - s_node_ptr iterate_next () { -#if 0 -// lock the mutex for thread safety - d_internal->lock (); -#endif - s_node_ptr l_this = NULL; - if (d_iterate) { - l_this = d_iterate; - d_iterate = d_iterate->next (); - if (d_iterate == d_current) - d_iterate = NULL; - } -#if 0 -// unlock the mutex for thread safety - d_internal->unlock (); -#endif - return (l_this); - }; - - __INLINE__ T object () { return (d_current->d_object); }; - __INLINE__ void object (T l_object) { d_current->d_object = l_object; }; - __INLINE__ UInt32 num_nodes () { return (d_n_nodes); }; - __INLINE__ UInt32 num_used () { return (d_n_used); }; - __INLINE__ void num_used (UInt32 l_n_used) { d_n_used = l_n_used; }; - __INLINE__ UInt32 num_available () { return (d_n_nodes - d_n_used); }; - __INLINE__ void num_used_inc (void) { - if (d_n_used < d_n_nodes) ++d_n_used; - }; - __INLINE__ void num_used_dec (void) { - if (d_n_used != 0) --d_n_used; -// signal the condition that new data has arrived - d_ioBlock->signal (); - }; - __INLINE__ bool in_use () { return (d_n_used != 0); }; -}; - -template class s_both -{ -private: - s_node* d_node; - void* d_this; -public: - __INLINE__ s_both (s_node* l_node, void* l_this) - : d_node (l_node), d_this (l_this) {}; - __INLINE__ ~s_both () {}; - __INLINE__ s_node* node () { return (d_node); }; - __INLINE__ void* This () { return (d_this); }; - __INLINE__ void set (s_node* l_node, void* l_this) { - d_node = l_node; d_this = l_this;}; -}; - -#endif /* _CIRCULAR_LINKED_LIST_H_ */ diff --git a/usrp/host/lib/fusb_darwin.cc b/usrp/host/lib/fusb_darwin.cc deleted file mode 100644 index c6127e26..00000000 --- a/usrp/host/lib/fusb_darwin.cc +++ /dev/null @@ -1,499 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -// tell mld_threads to NOT use omni_threads, -// but rather Darwin's pthreads -#undef _USE_OMNI_THREADS_ - -#include -#include "fusb.h" -#include "fusb_darwin.h" -#include "darwin_libusb.h" - -static const int USB_TIMEOUT = 100; // in milliseconds -static const UInt8 NUM_QUEUE_ITEMS = 20; - -fusb_devhandle_darwin::fusb_devhandle_darwin (usb_dev_handle* udh) - : fusb_devhandle (udh) -{ - // that's it -} - -fusb_devhandle_darwin::~fusb_devhandle_darwin () -{ - // nop -} - -fusb_ephandle* -fusb_devhandle_darwin::make_ephandle (int endpoint, bool input_p, - int block_size, int nblocks) -{ - return new fusb_ephandle_darwin (this, endpoint, input_p, - block_size, nblocks); -} - -// ---------------------------------------------------------------- - -fusb_ephandle_darwin::fusb_ephandle_darwin (fusb_devhandle_darwin* dh, - int endpoint, bool input_p, - int block_size, int nblocks) - : fusb_ephandle (endpoint, input_p, block_size, nblocks), - d_devhandle (dh), d_pipeRef (0), d_transferType (0), - d_interfaceRef (0), d_interface (0), d_queue (0), - d_buffer (0), d_bufLenBytes (0) -{ - d_bufLenBytes = fusb_sysconfig::max_block_size(); - -// create circular buffer - d_buffer = new circular_buffer (NUM_QUEUE_ITEMS * d_bufLenBytes, - !d_input_p, d_input_p); - -// create the queue - d_queue = new circular_linked_list (NUM_QUEUE_ITEMS); - d_queue->iterate_start (); - s_node_ptr l_node = d_queue->iterate_next (); - while (l_node) { - l_node->both (new s_both (l_node, this)); - s_buffer_ptr l_buf = new s_buffer (d_bufLenBytes); - l_node->object (l_buf); - l_node = d_queue->iterate_next (); - l_buf = NULL; - } - - d_readRunning = new mld_mutex (); - d_runThreadRunning = new mld_mutex (); - d_runBlock = new mld_condition (); - d_readBlock = new mld_condition (); -} - -fusb_ephandle_darwin::~fusb_ephandle_darwin () -{ - stop (); - - d_queue->iterate_start (); - s_node_ptr l_node = d_queue->iterate_next (); - while (l_node) { - s_both_ptr l_both = l_node->both (); - delete l_both; - l_both = NULL; - l_node->both (NULL); - s_buffer_ptr l_buf = l_node->object (); - delete l_buf; - l_buf = NULL; - l_node->object (NULL); - l_node = d_queue->iterate_next (); - } - delete d_queue; - d_queue = NULL; - delete d_buffer; - d_buffer = NULL; - delete d_readRunning; - d_readRunning = NULL; - delete d_runThreadRunning; - d_runThreadRunning = NULL; - delete d_runBlock; - d_runBlock = NULL; - delete d_readBlock; - d_readBlock = NULL; -} - -bool -fusb_ephandle_darwin::start () -{ - UInt8 direction, number, interval; - UInt16 maxPacketSize; - -// reset circular buffer - d_buffer->reset (); - -// reset the queue - d_queue->num_used (0); - d_queue->iterate_start (); - s_node_ptr l_node = d_queue->iterate_next (); - while (l_node) { - l_node->both()->set (l_node, this); - l_node->object()->reset (); - l_node->set_available (); - l_node = d_queue->iterate_next (); - } - - d_pipeRef = d_transferType = 0; - - usb_dev_handle* dev = d_devhandle->get_usb_dev_handle (); - if (! dev) - USB_ERROR_STR (false, -ENXIO, "fusb_ephandle_darwin::start: " - "null device"); - - darwin_dev_handle* device = (darwin_dev_handle*) dev->impl_info; - if (! device) - USB_ERROR_STR (false, -ENOENT, "fusb_ephandle_darwin::start: " - "device not initialized"); - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::start: " - "dev = %p, device = %p\n", dev, device); - - d_interfaceRef = device->interface; - if (! d_interfaceRef) - USB_ERROR_STR (false, -EACCES, "fusb_ephandle_darwin::start: " - "interface used without being claimed"); - d_interface = *d_interfaceRef; - -// get read or write pipe info (depends on "d_input_p") - - if (usb_debug > 3) - fprintf (stderr, "fusb_ephandle_darwin::start " - "d_endpoint = %d, d_input_p = %s\n", - d_endpoint, d_input_p ? "TRUE" : "FALSE"); - - int l_endpoint = (d_input_p ? USB_ENDPOINT_IN : USB_ENDPOINT_OUT); - int pipeRef = ep_to_pipeRef (device, d_endpoint | l_endpoint); - if (pipeRef < 0) - USB_ERROR_STR (false, -EINVAL, "fusb_ephandle_darwin::start " - " invalid pipeRef.\n"); - - d_pipeRef = pipeRef; - d_interface->GetPipeProperties (d_interfaceRef, - d_pipeRef, - &direction, - &number, - &d_transferType, - &maxPacketSize, - &interval); - if (usb_debug == 3) - fprintf (stderr, "fusb_ephandle_darwin::start: %s: ep = 0x%02x, " - "pipeRef = %d, d_i = %p, d_iR = %p, if_dir = %d, if_# = %d, " - "if_int = %d, if_maxPS = %d\n", d_input_p ? "read" : "write", - d_endpoint, d_pipeRef, d_interface, d_interfaceRef, direction, - number, interval, maxPacketSize); - -// set global start boolean - d_started = true; - -// create the run thread, which allows OSX to process I/O separately - d_runThread = new mld_thread (run_thread, this); - -// wait until the threads are -really- going - d_runBlock->wait (); - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::start: %s started.\n", - d_input_p ? "read" : "write"); - - return (true); -} - -void -fusb_ephandle_darwin::run_thread (void* arg) -{ - fusb_ephandle_darwin* This = static_cast(arg); - mld_mutex_ptr l_runThreadRunning = This->d_runThreadRunning; - l_runThreadRunning->lock (); - - mld_mutex_ptr l_readRunning = This->d_readRunning; - mld_condition_ptr l_readBlock = This->d_readBlock; - - bool l_input_p = This->d_input_p; - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::run_thread: " - "starting for %s.\n", - l_input_p ? "read" : "write"); - - usb_interface_t** l_interfaceRef = This->d_interfaceRef; - usb_interface_t* l_interface = This->d_interface; - CFRunLoopSourceRef l_cfSource; - -// create async run loop - l_interface->CreateInterfaceAsyncEventSource (l_interfaceRef, &l_cfSource); - CFRunLoopAddSource (CFRunLoopGetCurrent (), l_cfSource, - kCFRunLoopDefaultMode); -// get run loop reference, to allow other threads to stop - This->d_CFRunLoopRef = CFRunLoopGetCurrent (); - - mld_thread_ptr l_rwThread = NULL; - - if (l_input_p) { - l_rwThread = new mld_thread (read_thread, arg); -// wait until the the rwThread is -really- going - l_readBlock->wait (); - } - -// now signal the run condition to release and finish ::start() - This->d_runBlock->signal (); - -// run the loop - CFRunLoopRun (); - - if (l_input_p) { -// wait for read_thread () to finish - l_readRunning->lock (); - l_readRunning->unlock (); - } - -// remove run loop stuff - CFRunLoopRemoveSource (CFRunLoopGetCurrent (), - l_cfSource, kCFRunLoopDefaultMode); - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::run_thread: finished for %s.\n", - l_input_p ? "read" : "write"); - - l_runThreadRunning->unlock (); -} - -void -fusb_ephandle_darwin::read_thread (void* arg) -{ - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::read_thread: starting.\n"); - - fusb_ephandle_darwin* This = static_cast(arg); - - mld_mutex_ptr l_readRunning = This->d_readRunning; - l_readRunning->lock (); - -// signal the read condition from run_thread() to continue - mld_condition_ptr l_readBlock = This->d_readBlock; - l_readBlock->signal (); - - s_queue_ptr l_queue = This->d_queue; - l_queue->iterate_start (); - s_node_ptr l_node = l_queue->iterate_next (); - while (l_node) { - This->read_issue (l_node->both ()); - l_node = l_queue->iterate_next (); - } - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::read_thread: finished.\n"); - - l_readRunning->unlock (); -} - -void -fusb_ephandle_darwin::read_issue (s_both_ptr l_both) -{ - if ((! l_both) || (! d_started)) - return; - -// set the node and buffer from the input "both" - s_node_ptr l_node = l_both->node (); - s_buffer_ptr l_buf = l_node->object (); - void* v_buffer = (void*) l_buf->buffer (); - -// read up to d_bufLenBytes - UInt32 bufLen = d_bufLenBytes; - l_buf->n_used (bufLen); - -// setup system call result - io_return_t result = kIOReturnSuccess; - - if (d_transferType == kUSBInterrupt) -/* This is an interrupt pipe. We can't specify a timeout. */ - result = d_interface->ReadPipeAsync - (d_interfaceRef, d_pipeRef, v_buffer, bufLen, - (IOAsyncCallback1) read_completed, (void*) l_both); - else - result = d_interface->ReadPipeAsyncTO - (d_interfaceRef, d_pipeRef, v_buffer, bufLen, 0, USB_TIMEOUT, - (IOAsyncCallback1) read_completed, (void*) l_both); - - if (result != kIOReturnSuccess) - USB_ERROR_STR_NO_RET (- darwin_to_errno (result), - "fusb_ephandle_darwin::read_issue " - "(ReadPipeAsync%s): %s", - d_transferType == kUSBInterrupt ? "" : "TO", - darwin_error_str (result)); -} - -void -fusb_ephandle_darwin::read_completed (void* refCon, - io_return_t result, - void* io_size) -{ - UInt32 l_size = (UInt32) io_size; - s_both_ptr l_both = static_cast(refCon); - fusb_ephandle_darwin* This = static_cast(l_both->This ()); - s_node_ptr l_node = l_both->node (); - circular_buffer* l_buffer = This->d_buffer; - s_buffer_ptr l_buf = l_node->object (); - UInt32 l_i_size = l_buf->n_used (); - - if (This->d_started && (l_i_size != l_size)) - fprintf (stderr, "fusb_ephandle_darwin::read_completed: " - "Expected %ld bytes; read %ld.\n", - l_i_size, l_size); - -// add this read to the transfer buffer - if (l_buffer->enqueue (l_buf->buffer (), l_size) == -1) { - fputs ("iU", stderr); - fflush (stderr); - } - -// set buffer's # data to 0 - l_buf->n_used (0); - -// issue another read for this "both" - This->read_issue (l_both); -} - -int -fusb_ephandle_darwin::read (void* buffer, int nbytes) -{ - UInt32 l_nbytes = (UInt32) nbytes; - d_buffer->dequeue ((char*) buffer, &l_nbytes); - return ((int) l_nbytes); -} - -int -fusb_ephandle_darwin::write (const void* buffer, int nbytes) -{ - UInt32 l_nbytes = (UInt32) nbytes; - - if (! d_started) return (0); - - while (l_nbytes != 0) { -// find out how much data to copy; limited to "d_bufLenBytes" per node - UInt32 t_nbytes = (l_nbytes > d_bufLenBytes) ? d_bufLenBytes : l_nbytes; - -// get next available node to write into; -// blocks internally if none available - s_node_ptr l_node = d_queue->find_next_available_node (); - -// copy the input into the node's buffer - s_buffer_ptr l_buf = l_node->object (); - l_buf->buffer ((char*) buffer, t_nbytes); - void* v_buffer = (void*) l_buf->buffer (); - -// setup callback parameter & system call return - s_both_ptr l_both = l_node->both (); - io_return_t result = kIOReturnSuccess; - - if (d_transferType == kUSBInterrupt) -/* This is an interrupt pipe ... can't specify a timeout. */ - result = d_interface->WritePipeAsync - (d_interfaceRef, d_pipeRef, v_buffer, l_nbytes, - (IOAsyncCallback1) write_completed, (void*) l_both); - else - result = d_interface->WritePipeAsyncTO - (d_interfaceRef, d_pipeRef, v_buffer, l_nbytes, 0, USB_TIMEOUT, - (IOAsyncCallback1) write_completed, (void*) l_both); - - if (result != kIOReturnSuccess) - USB_ERROR_STR (-1, - darwin_to_errno (result), - "fusb_ephandle_darwin::write_thread " - "(WritePipeAsync%s): %s", - d_transferType == kUSBInterrupt ? "" : "TO", - darwin_error_str (result)); - l_nbytes -= t_nbytes; - } - - return (nbytes); -} - -void -fusb_ephandle_darwin::write_completed (void* refCon, - io_return_t result, - void* io_size) -{ - s_both_ptr l_both = static_cast(refCon); - fusb_ephandle_darwin* This = static_cast(l_both->This ()); - UInt32 l_size = (UInt32) io_size; - s_node_ptr l_node = l_both->node (); - s_queue_ptr l_queue = This->d_queue; - s_buffer_ptr l_buf = l_node->object (); - UInt32 l_i_size = l_buf->n_used (); - - if (This->d_started && (l_i_size != l_size)) - fprintf (stderr, "fusb_ephandle_darwin::write_completed: " - "Expected %ld bytes written; wrote %ld.\n", - l_i_size, l_size); - -// set buffer's # data to 0 - l_buf->n_used (0); -// make the node available for reuse - l_queue->make_node_available (l_node); -} - -void -fusb_ephandle_darwin::abort () -{ - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::abort: starting.\n"); - - io_return_t result = d_interface->AbortPipe (d_interfaceRef, d_pipeRef); - - if (result != kIOReturnSuccess) - USB_ERROR_STR_NO_RET (- darwin_to_errno (result), - "fusb_ephandle_darwin::abort " - "(AbortPipe): %s", darwin_error_str (result)); - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::abort: finished.\n"); -} - -bool -fusb_ephandle_darwin::stop () -{ - if (! d_started) - return (true); - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::stop: stopping %s.\n", - d_input_p ? "read" : "write"); - - d_started = false; - -// abort any pending IO transfers - abort (); - -// wait for write transfer to finish - wait_for_completion (); - -// tell IO buffer to abort any waiting conditions - d_buffer->abort (); - -// stop the run loop - CFRunLoopStop (d_CFRunLoopRef); - -// wait for the runThread to stop - d_runThreadRunning->lock (); - d_runThreadRunning->unlock (); - - if (usb_debug) - fprintf (stderr, "fusb_ephandle_darwin::stop: %s stopped.\n", - d_input_p ? "read" : "write"); - - return (true); -} - -void -fusb_ephandle_darwin::wait_for_completion () -{ - if (d_queue) - while (d_queue->in_use ()) - usleep (1000); -} diff --git a/usrp/host/lib/fusb_linux.cc b/usrp/host/lib/fusb_linux.cc deleted file mode 100644 index 60687a14..00000000 --- a/usrp/host/lib/fusb_linux.cc +++ /dev/null @@ -1,686 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include // libusb header -#include -#ifdef HAVE_LINUX_COMPILER_H -#include -#endif -#include // interface to kernel portion of user mode usb driver -#include -#include -#include -#include -#include -#include - -#define MINIMIZE_TX_BUFFERING 1 // must be defined to 0 or 1 - - -static const int MAX_BLOCK_SIZE = fusb_sysconfig::max_block_size(); // hard limit -static const int DEFAULT_BLOCK_SIZE = MAX_BLOCK_SIZE; -static const int DEFAULT_BUFFER_SIZE = 4 * (1L << 20); // 4 MB / endpoint - - -// Totally evil and fragile extraction of file descriptor from -// guts of libusb. They don't install usbi.h, which is what we'd need -// to do this nicely. -// -// FIXME if everything breaks someday in the future, look here... - -static int -fd_from_usb_dev_handle (usb_dev_handle *udh) -{ - return *((int *) udh); -} - -inline static void -urb_set_ephandle (usbdevfs_urb *urb, fusb_ephandle_linux *handle) -{ - urb->usercontext = handle; -} - -inline static fusb_ephandle_linux * -urb_get_ephandle (usbdevfs_urb *urb) -{ - return (fusb_ephandle_linux *) urb->usercontext; -} - -// ------------------------------------------------------------------------ -// USB request block (urb) allocation -// ------------------------------------------------------------------------ - -static usbdevfs_urb * -alloc_urb (fusb_ephandle_linux *self, int buffer_length, int endpoint, - bool input_p, unsigned char *write_buffer) -{ - usbdevfs_urb *urb = new usbdevfs_urb; - memset (urb, 0, sizeof (*urb)); - - urb->buffer_length = buffer_length; - - // We allocate dedicated memory only for input buffers. - // For output buffers we reuse the same buffer (the kernel - // copies the data at submital time) - - if (input_p) - urb->buffer = new unsigned char [buffer_length]; - else - urb->buffer = write_buffer; - - // init common values - - urb->type = USBDEVFS_URB_TYPE_BULK; - urb->endpoint = (endpoint & 0x7f) | (input_p ? 0x80 : 0); - - // USBDEVFS_URB_QUEUE_BULK goes away in linux 2.5, but is needed if - // we are using a 2.4 usb-uhci host controller driver. This is - // unlikely since we're almost always going to be plugged into a - // high speed host controller (ehci) -#if 0 && defined (USBDEVFS_URB_QUEUE_BULK) - urb->flags = USBDEVFS_URB_QUEUE_BULK; -#endif - - urb->signr = 0; - urb_set_ephandle (urb, self); - - return urb; -} - -static void -free_urb (usbdevfs_urb *urb) -{ - // if this was an input urb, free the buffer - if (urb->endpoint & 0x80) - delete [] ((unsigned char *) urb->buffer); - - delete urb; -} - -// ------------------------------------------------------------------------ -// device handle -// ------------------------------------------------------------------------ - -fusb_devhandle_linux::fusb_devhandle_linux (usb_dev_handle *udh) - : fusb_devhandle (udh) -{ - // that's all -} - -fusb_devhandle_linux::~fusb_devhandle_linux () -{ - // if there are any pending requests, cancel them and free the urbs. - - std::list::reverse_iterator it; - - for (it = d_pending_rqsts.rbegin (); it != d_pending_rqsts.rend (); it++){ - _cancel_urb (*it); - free_urb (*it); - } -} - -fusb_ephandle * -fusb_devhandle_linux::make_ephandle (int endpoint, bool input_p, - int block_size, int nblocks) -{ - return new fusb_ephandle_linux (this, endpoint, input_p, - block_size, nblocks); -} - - -// Attempt to cancel all transactions associated with eph. - -void -fusb_devhandle_linux::_cancel_pending_rqsts (fusb_ephandle_linux *eph) -{ - std::list::reverse_iterator it; - - for (it = d_pending_rqsts.rbegin (); it != d_pending_rqsts.rend (); it++){ - if (urb_get_ephandle (*it) == eph) - _cancel_urb (*it); - } -} - -void -fusb_devhandle_linux::pending_add (usbdevfs_urb *urb) -{ - d_pending_rqsts.push_back (urb); -} - -usbdevfs_urb * -fusb_devhandle_linux::pending_get () -{ - if (d_pending_rqsts.empty ()) - return 0; - - usbdevfs_urb *urb = d_pending_rqsts.front (); - d_pending_rqsts.pop_front (); - return urb; -} - -bool -fusb_devhandle_linux::pending_remove (usbdevfs_urb *urb) -{ - std::list::iterator result = find (d_pending_rqsts.begin (), - d_pending_rqsts.end (), - urb); - if (result == d_pending_rqsts.end ()){ - fprintf (stderr, "fusb::pending_remove: failed to find urb in pending_rqsts: %p\n", urb); - return false; - } - d_pending_rqsts.erase (result); - return true; -} - -/* - * Submit the urb to the kernel. - * iff successful, the urb will be placed on the devhandle's pending list. - */ -bool -fusb_devhandle_linux::_submit_urb (usbdevfs_urb *urb) -{ - int ret; - - ret = ioctl (fd_from_usb_dev_handle (d_udh), USBDEVFS_SUBMITURB, urb); - if (ret < 0){ - perror ("fusb::_submit_urb"); - return false; - } - - pending_add (urb); - return true; -} - -/* - * Attempt to cancel the in pending or in-progress urb transaction. - * Return true iff transaction was sucessfully cancelled. - * - * Failure to cancel should not be considered a problem. This frequently - * occurs if the transaction has already completed in the kernel but hasn't - * yet been reaped by the user mode code. - * - * urbs which were cancelled have their status field set to -ENOENT when - * they are reaped. - */ -bool -fusb_devhandle_linux::_cancel_urb (usbdevfs_urb *urb) -{ - int ret = ioctl (fd_from_usb_dev_handle (d_udh), USBDEVFS_DISCARDURB, urb); - if (ret < 0){ - // perror ("fusb::_cancel_urb"); - return false; - } - return true; -} - -/* - * Check with the kernel and see if any of our outstanding requests - * have completed. For each completed transaction, remove it from the - * devhandle's pending list and append it to the completed list for - * the corresponding endpoint. - * - * If any transactions are reaped return true. - * - * If ok_to_block_p is true, then this will block until at least one - * transaction completes. - */ -bool -fusb_devhandle_linux::_reap (bool ok_to_block_p) -{ - int ret; - int nreaped = 0; - usbdevfs_urb *urb = 0; - - int fd = fd_from_usb_dev_handle (d_udh); - - // try to reap as many as possible without blocking... - - while ((ret = ioctl (fd, USBDEVFS_REAPURBNDELAY, &urb)) == 0){ - if (urb->status != 0 && urb->status != -ENOENT){ - fprintf (stderr, "_reap: usb->status = %d, actual_length = %5d\n", - urb->status, urb->actual_length); - } - pending_remove (urb); - urb_get_ephandle (urb)->completed_list_add (urb); - nreaped++; - } - - if (nreaped > 0) // if we got any, return w/o blocking - return true; - - if (!ok_to_block_p) - return false; - - ret = ioctl (fd, USBDEVFS_REAPURB, &urb); - if (ret < 0){ - perror ("fusb::_reap"); - return false; - } - - pending_remove (urb); - urb_get_ephandle (urb)->completed_list_add (urb); - return true; -} - -void -fusb_devhandle_linux::_wait_for_completion () -{ - while (!d_pending_rqsts.empty ()) - _reap (true); -} - // ------------------------------------------------------------------------ -// end point handle -// ------------------------------------------------------------------------ - -fusb_ephandle_linux::fusb_ephandle_linux (fusb_devhandle_linux *devhandle, - int endpoint, - bool input_p, - int block_size, int nblocks) - : fusb_ephandle (endpoint, input_p, block_size, nblocks), - d_devhandle (devhandle), - d_write_work_in_progress (0), d_write_buffer (0), - d_read_work_in_progress (0), d_read_buffer (0), d_read_buffer_end (0) -{ - - if (d_block_size < 0 || d_block_size > MAX_BLOCK_SIZE) - throw std::out_of_range ("fusb_ephandle_linux: block_size"); - - if (d_nblocks < 0) - throw std::out_of_range ("fusb_ephandle_linux: nblocks"); - - if (d_block_size == 0) - d_block_size = DEFAULT_BLOCK_SIZE; - - if (d_nblocks == 0) - d_nblocks = std::max (1, DEFAULT_BUFFER_SIZE / d_block_size); - - if (!d_input_p) - if (!MINIMIZE_TX_BUFFERING) - d_write_buffer = new unsigned char [d_block_size]; - - if (0) - fprintf(stderr, "fusb_ephandle_linux::ctor: d_block_size = %d d_nblocks = %d\n", - d_block_size, d_nblocks); - - // allocate urbs - - for (int i = 0; i < d_nblocks; i++) - d_free_list.push_back (alloc_urb (this, d_block_size, d_endpoint, - d_input_p, d_write_buffer)); -} - -fusb_ephandle_linux::~fusb_ephandle_linux () -{ - stop (); - - usbdevfs_urb *urb; - - while ((urb = free_list_get ()) != 0) - free_urb (urb); - - while ((urb = completed_list_get ()) != 0) - free_urb (urb); - - if (d_write_work_in_progress) - free_urb (d_write_work_in_progress); - - delete [] d_write_buffer; - - if (d_read_work_in_progress) - free_urb (d_read_work_in_progress); -} - -// ---------------------------------------------------------------- - -bool -fusb_ephandle_linux::start () -{ - if (d_started) - return true; // already running - - d_started = true; - - if (d_input_p){ // fire off all the reads - usbdevfs_urb *urb; - - int nerrors = 0; - while ((urb = free_list_get ()) != 0 && nerrors < d_nblocks){ - if (!submit_urb (urb)) - nerrors++; - } - } - - return true; -} - -// -// kill all i/o in progress. -// kill any completed but unprocessed transactions. -// -bool -fusb_ephandle_linux::stop () -{ - if (!d_started) - return true; - - d_devhandle->_cancel_pending_rqsts (this); - d_devhandle->_reap (false); - - - usbdevfs_urb *urb; - while ((urb = completed_list_get ()) != 0) - free_list_add (urb); - - if (d_write_work_in_progress){ - free_list_add (d_write_work_in_progress); - d_write_work_in_progress = 0; - } - - if (d_read_work_in_progress){ - free_list_add (d_read_work_in_progress); - d_read_work_in_progress = 0; - d_read_buffer = 0; - d_read_buffer_end = 0; - } - - if (d_free_list.size () != (unsigned) d_nblocks) - fprintf (stderr, "d_free_list.size () = %d, d_nblocks = %d\n", - d_free_list.size (), d_nblocks); - - assert (d_free_list.size () == (unsigned) d_nblocks); - - d_started = false; - return true; -} - -// ---------------------------------------------------------------- -// routines for writing -// ---------------------------------------------------------------- - -#if (MINIMIZE_TX_BUFFERING) - -int -fusb_ephandle_linux::write(const void *buffer, int nbytes) -{ - if (!d_started) - return -1; - - if (d_input_p) - return -1; - - assert(nbytes % 512 == 0); - - unsigned char *src = (unsigned char *) buffer; - - int n = 0; - while (n < nbytes){ - - usbdevfs_urb *urb = get_write_work_in_progress(); - assert(urb->actual_length == 0); - int m = std::min(nbytes - n, MAX_BLOCK_SIZE); - urb->buffer = src; - urb->buffer_length = m; - - n += m; - src += m; - - if (!submit_urb(urb)) - return -1; - - d_write_work_in_progress = 0; - } - - return n; -} - -#else - -int -fusb_ephandle_linux::write (const void *buffer, int nbytes) -{ - if (!d_started) - return -1; - - if (d_input_p) - return -1; - - unsigned char *src = (unsigned char *) buffer; - - int n = 0; - while (n < nbytes){ - - usbdevfs_urb *urb = get_write_work_in_progress (); - unsigned char *dst = (unsigned char *) urb->buffer; - int m = std::min (nbytes - n, urb->buffer_length - urb->actual_length); - - memcpy (&dst[urb->actual_length], &src[n], m); - urb->actual_length += m; - n += m; - - if (urb->actual_length == urb->buffer_length){ - if (!submit_urb (urb)) - return -1; - d_write_work_in_progress = 0; - } - } - - return n; -} - -#endif - -usbdevfs_urb * -fusb_ephandle_linux::get_write_work_in_progress () -{ - // if we've already got some work in progress, return it - - if (d_write_work_in_progress) - return d_write_work_in_progress; - - while (1){ - - reap_complete_writes (); - - usbdevfs_urb *urb = free_list_get (); - - if (urb != 0){ - assert (urb->actual_length == 0); - d_write_work_in_progress = urb; - return urb; - } - - // The free list is empty. Tell the device handle to reap. - // Anything it reaps for us will end up on our completed list. - - d_devhandle->_reap (true); - } -} - -void -fusb_ephandle_linux::reap_complete_writes () -{ - // take a look at the completed_list and xfer to free list after - // checking for errors. - - usbdevfs_urb *urb; - - while ((urb = completed_list_get ()) != 0){ - - // Check for any errors or short writes that were reported in the urb. - // The kernel sets status, actual_length and error_count. - // error_count is only used for ISO xfers. - // status is 0 if successful, else is an errno kind of thing - - if (urb->status != 0){ - fprintf (stderr, "fusb: (status %d) %s\n", urb->status, strerror (-urb->status)); - } - else if (urb->actual_length != urb->buffer_length){ - fprintf (stderr, "fusb: short write xfer: %d != %d\n", - urb->actual_length, urb->buffer_length); - } - - free_list_add (urb); - } -} - -void -fusb_ephandle_linux::wait_for_completion () -{ - d_devhandle->_wait_for_completion (); -} - -// ---------------------------------------------------------------- -// routines for reading -// ---------------------------------------------------------------- - -int -fusb_ephandle_linux::read (void *buffer, int nbytes) -{ - if (!d_started) - return -1; - - if (!d_input_p) - return -1; - - unsigned char *dst = (unsigned char *) buffer; - - int n = 0; - while (n < nbytes){ - - if (d_read_buffer >= d_read_buffer_end) - if (!reload_read_buffer ()) - return -1; - - int m = std::min (nbytes - n, (int) (d_read_buffer_end - d_read_buffer)); - - memcpy (&dst[n], d_read_buffer, m); - d_read_buffer += m; - n += m; - } - - return n; -} - -bool -fusb_ephandle_linux::reload_read_buffer () -{ - assert (d_read_buffer >= d_read_buffer_end); - - usbdevfs_urb *urb; - - if (d_read_work_in_progress){ - // We're done with this urb. Fire off a read to refill it. - urb = d_read_work_in_progress; - d_read_work_in_progress = 0; - d_read_buffer = 0; - d_read_buffer_end = 0; - urb->actual_length = 0; - if (!submit_urb (urb)) - return false; - } - - while (1){ - - while ((urb = completed_list_get ()) == 0) - d_devhandle->_reap (true); - - // check result of completed read - - if (urb->status != 0){ - // We've got a problem. - // Report the problem and resubmit. - fprintf (stderr, "fusb: (rd status %d) %s\n", urb->status, strerror (-urb->status)); - urb->actual_length = 0; - if (!submit_urb (urb)) - return false; - - continue; - } - - // we've got a happy urb, full of data... - - d_read_work_in_progress = urb; - d_read_buffer = (unsigned char *) urb->buffer; - d_read_buffer_end = d_read_buffer + urb->actual_length; - - return true; - } -} - -// ---------------------------------------------------------------- - -void -fusb_ephandle_linux::free_list_add (usbdevfs_urb *urb) -{ - assert (urb_get_ephandle (urb) == this); - urb->actual_length = 0; - d_free_list.push_back (urb); -} - -usbdevfs_urb * -fusb_ephandle_linux::free_list_get () -{ - if (d_free_list.empty ()) - return 0; - - usbdevfs_urb *urb = d_free_list.front (); - d_free_list.pop_front (); - return urb; -} - -void -fusb_ephandle_linux::completed_list_add (usbdevfs_urb *urb) -{ - assert (urb_get_ephandle (urb) == this); - d_completed_list.push_back (urb); -} - -usbdevfs_urb * -fusb_ephandle_linux::completed_list_get () -{ - if (d_completed_list.empty ()) - return 0; - - usbdevfs_urb *urb = d_completed_list.front (); - d_completed_list.pop_front (); - return urb; -} - -/* - * Submit the urb. If successful the urb ends up on the devhandle's - * pending list, otherwise, it's back on our free list. - */ -bool -fusb_ephandle_linux::submit_urb (usbdevfs_urb *urb) -{ - if (!d_devhandle->_submit_urb (urb)){ // FIXME record the problem somewhere - fprintf (stderr, "_submit_urb failed\n"); - free_list_add (urb); - return false; - } - return true; -} diff --git a/usrp/host/lib/fusb_win32.cc b/usrp/host/lib/fusb_win32.cc deleted file mode 100644 index eee37327..00000000 --- a/usrp/host/lib/fusb_win32.cc +++ /dev/null @@ -1,265 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2003,2005 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -static const int MAX_BLOCK_SIZE = fusb_sysconfig::max_block_size(); -static const int DEFAULT_BLOCK_SIZE = MAX_BLOCK_SIZE; -static const int DEFAULT_BUFFER_SIZE = 16 * (1L << 20); // 16 MB / endpoint - - -static const int USB_TIMEOUT = 1000; // in milliseconds - - -fusb_devhandle_win32::fusb_devhandle_win32 (usb_dev_handle *udh) - : fusb_devhandle (udh) -{ - // that's it -} - -fusb_devhandle_win32::~fusb_devhandle_win32 () -{ - // nop -} - -fusb_ephandle * -fusb_devhandle_win32::make_ephandle (int endpoint, bool input_p, - int block_size, int nblocks) -{ - return new fusb_ephandle_win32 (this, endpoint, input_p, - block_size, nblocks); -} - -// ---------------------------------------------------------------- - -fusb_ephandle_win32::fusb_ephandle_win32 (fusb_devhandle_win32 *dh, - int endpoint, bool input_p, - int block_size, int nblocks) - : fusb_ephandle (endpoint, input_p, block_size, nblocks), - d_devhandle (dh), d_input_leftover(0),d_output_short(0) -{ - if (d_block_size < 0 || d_block_size > MAX_BLOCK_SIZE) - throw std::out_of_range ("fusb_ephandle_win32: block_size"); - - if (d_nblocks < 0) - throw std::out_of_range ("fusb_ephandle_win32: nblocks"); - - if (d_block_size == 0) - d_block_size = DEFAULT_BLOCK_SIZE; - - if (d_nblocks == 0) - d_nblocks = std::max (1, DEFAULT_BUFFER_SIZE / d_block_size); - - d_buffer = new char [d_block_size*d_nblocks]; - d_context = new void * [d_nblocks]; - - // allocate contexts - - usb_dev_handle *dev = dh->get_usb_dev_handle (); - int i; - - if (d_input_p) - endpoint |= USB_ENDPOINT_IN; - - for (i=0; i 0) { - d_curr = (d_curr+1)%d_nblocks; - buf = &d_buffer[d_curr*d_block_size]; - - if (d_outstanding_write != d_nblocks) { - d_outstanding_write++; - } else { - retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT); - if (retval < 0) { - fprintf(stderr, "%s: usb_reap_async: %s\n", - __FUNCTION__, usb_strerror()); - return retval; - } - } - - int ncopy = std::min(bytes_to_write, d_block_size); - memcpy(buf, (void *) &(((char*)buffer)[a]), ncopy); - bytes_to_write -= ncopy; - a += ncopy; - - d_output_short = d_block_size - ncopy; - if (d_output_short == 0) - usb_submit_async(d_context[d_curr], buf, d_block_size); - } - - return retval < 0 ? retval : nbytes; -} - -int -fusb_ephandle_win32::read (void *buffer, int nbytes) -{ - int retval=0; - char *buf; - - if (!d_started) // doesn't matter here, but keeps semantics constant - return -1; - - if (!d_input_p) - return -1; - - int bytes_to_read = nbytes; - - int a=0; - if (d_input_leftover != 0) { - - buf = &d_buffer[d_curr*d_block_size + d_block_size - d_input_leftover]; - a = std::min(nbytes, d_input_leftover); - memcpy(buffer, buf, a); - bytes_to_read -= a; - d_input_leftover -= a; - - if (d_input_leftover == 0) - usb_submit_async(d_context[d_curr], - &d_buffer[d_curr*d_block_size], d_block_size); - } - - while (bytes_to_read > 0) { - - d_curr = (d_curr+1)%d_nblocks; - buf = &d_buffer[d_curr*d_block_size]; - - retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT); - if (retval < 0) - fprintf(stderr, "%s: usb_reap_async: %s\n", - __FUNCTION__, usb_strerror()); - - int ncopy = std::min(bytes_to_read, d_block_size); - memcpy((void *) &(((char*)buffer)[a]), buf, ncopy); - bytes_to_read -= ncopy; - a += ncopy; - - d_input_leftover = d_block_size - ncopy; - if (d_input_leftover == 0) - usb_submit_async(d_context[d_curr], buf, d_block_size); - } - - return retval < 0 ? retval : nbytes; -} - -void -fusb_ephandle_win32::wait_for_completion () -{ - int i; - - for (i=0; i_CODE entry here... +# +EXTRA_libusrp_la_SOURCES = \ + $(generic_CODE) \ + $(darwin_CODE) \ + $(win32_CODE) \ + $(linux_CODE) \ + $(ra_wb_CODE) + + +# work around automake deficiency +libusrp_la_common_SOURCES = \ + fusb.cc \ + md5.c \ + usrp_basic.cc \ + usrp_config.cc \ + usrp_dbid.cc \ + usrp_local_sighandler.cc \ + usrp_prims.cc \ + usrp_standard.cc \ + db_boards.cc \ + db_base.cc \ + db_basic.cc \ + db_tv_rx.cc \ + db_flexrf.cc \ + db_flexrf_mimo.cc \ + db_dbs_rx.cc \ + db_xcvr2450.cc \ + db_dtt754.cc \ + db_dtt768.cc \ + db_util.cc + +# db_wbx.cc + + +if FUSB_TECH_generic +libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(generic_CODE) +endif + +if FUSB_TECH_darwin +libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(darwin_CODE) +endif + +if FUSB_TECH_win32 +libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(win32_CODE) +endif + +if FUSB_TECH_linux +libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(linux_CODE) +endif + +if FUSB_TECH_ra_wb +libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(ra_wb_CODE) +endif + +include_HEADERS = \ + db_base.h \ + db_basic.h \ + db_dbs_rx.h \ + db_dtt754.h \ + db_dtt768.h \ + db_flexrf.h \ + db_flexrf_mimo.h \ + db_tv_rx.h \ + db_util.h \ + db_xcvr2450.h \ + usrp_basic.h \ + usrp_bytesex.h \ + usrp_config.h \ + usrp_dbid.h \ + usrp_prims.h \ + usrp_slots.h \ + usrp_standard.h \ + usrp_subdev_spec.h \ + usrp_tune_result.h + +noinst_HEADERS = \ + ad9862.h \ + db_base_impl.h \ + db_boards.h \ + db_wbx.h \ + fusb.h \ + fusb_darwin.h \ + fusb_generic.h \ + fusb_linux.h \ + fusb_ra_wb.h \ + fusb_win32.h \ + md5.h \ + rate_to_regval.h \ + usrp_local_sighandler.h + +usrppython_PYTHON = \ + usrp_dbid.py + +noinst_PYTHON = \ + gen_usrp_dbid.py \ + check_data.py \ + dump_data.py + +swiginclude_HEADERS = db_base.i + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(BUILT_SOURCES) +gen_sources_deps = gen_usrp_dbid.py usrp_dbid.dat +par_gen_command = PYTHONPATH=$(top_srcdir)/usrp/src srcdir=$(srcdir) $(PYTHON) $(srcdir)/gen_usrp_dbid.py $(srcdir)/usrp_dbid.dat +include $(top_srcdir)/Makefile.par.gen diff --git a/usrp/host/lib/legacy/Makefile.in b/usrp/host/lib/legacy/Makefile.in new file mode 100644 index 00000000..8cc967eb --- /dev/null +++ b/usrp/host/lib/legacy/Makefile.in @@ -0,0 +1,1380 @@ +# Makefile.in generated by automake 1.10.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# USRP - Universal Software Radio Peripheral +# +# Copyright (C) 2003,2004,2006,2007,2008,2009 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 3 of the License, 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 program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301 USA +# + +# -*- Makefile -*- +# +# Copyright 2004,2006,2007,2008,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 -*- +# +# 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. +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(include_HEADERS) $(noinst_HEADERS) $(noinst_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/std_paths.h.in $(swiginclude_HEADERS) \ + $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.par.gen \ + $(usrppython_PYTHON) +subdir = usrp/host/lib/legacy +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_cblas.m4 \ + $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/ax_boost_base.m4 \ + $(top_srcdir)/config/ax_boost_date_time.m4 \ + $(top_srcdir)/config/ax_boost_program_options.m4 \ + $(top_srcdir)/config/ax_boost_thread.m4 \ + $(top_srcdir)/config/cppunit.m4 \ + $(top_srcdir)/config/gr_check_createfilemapping.m4 \ + $(top_srcdir)/config/gr_check_memalign.m4 \ + $(top_srcdir)/config/gr_check_shm_open.m4 \ + $(top_srcdir)/config/gr_doxygen.m4 \ + $(top_srcdir)/config/gr_fortran.m4 \ + $(top_srcdir)/config/gr_gprof.m4 \ + $(top_srcdir)/config/gr_lib64.m4 \ + $(top_srcdir)/config/gr_libgnuradio_core_extra_ldflags.m4 \ + $(top_srcdir)/config/gr_no_undefined.m4 \ + $(top_srcdir)/config/gr_omnithread.m4 \ + $(top_srcdir)/config/gr_pwin32.m4 \ + $(top_srcdir)/config/gr_python.m4 \ + $(top_srcdir)/config/gr_qwt.m4 \ + $(top_srcdir)/config/gr_qwtplot3d.m4 \ + $(top_srcdir)/config/gr_scripting.m4 \ + $(top_srcdir)/config/gr_set_md_cpu.m4 \ + $(top_srcdir)/config/gr_subversion.m4 \ + $(top_srcdir)/config/gr_swig.m4 \ + $(top_srcdir)/config/gr_sysv_shm.m4 \ + $(top_srcdir)/config/grc_build.m4 \ + $(top_srcdir)/config/grc_docs.m4 \ + $(top_srcdir)/config/grc_gcell.m4 \ + $(top_srcdir)/config/grc_gnuradio_core.m4 \ + $(top_srcdir)/config/grc_gnuradio_examples.m4 \ + $(top_srcdir)/config/grc_gr_audio_alsa.m4 \ + $(top_srcdir)/config/grc_gr_audio_jack.m4 \ + $(top_srcdir)/config/grc_gr_audio_oss.m4 \ + $(top_srcdir)/config/grc_gr_audio_osx.m4 \ + $(top_srcdir)/config/grc_gr_audio_portaudio.m4 \ + $(top_srcdir)/config/grc_gr_audio_windows.m4 \ + $(top_srcdir)/config/grc_gr_cvsd_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_gcell.m4 \ + $(top_srcdir)/config/grc_gr_gpio.m4 \ + $(top_srcdir)/config/grc_gr_gsm_fr_vocoder.m4 \ + $(top_srcdir)/config/grc_gr_pager.m4 \ + $(top_srcdir)/config/grc_gr_qtgui.m4 \ + $(top_srcdir)/config/grc_gr_radar_mono.m4 \ + $(top_srcdir)/config/grc_gr_radio_astronomy.m4 \ + $(top_srcdir)/config/grc_gr_sounder.m4 \ + $(top_srcdir)/config/grc_gr_trellis.m4 \ + $(top_srcdir)/config/grc_gr_usrp.m4 \ + $(top_srcdir)/config/grc_gr_usrp2.m4 \ + $(top_srcdir)/config/grc_gr_utils.m4 \ + $(top_srcdir)/config/grc_gr_video_sdl.m4 \ + $(top_srcdir)/config/grc_gr_wxgui.m4 \ + $(top_srcdir)/config/grc_grc.m4 \ + $(top_srcdir)/config/grc_gruel.m4 \ + $(top_srcdir)/config/grc_mblock.m4 \ + $(top_srcdir)/config/grc_omnithread.m4 \ + $(top_srcdir)/config/grc_pmt.m4 \ + $(top_srcdir)/config/grc_usrp.m4 \ + $(top_srcdir)/config/grc_usrp2.m4 \ + $(top_srcdir)/config/lf_cc.m4 $(top_srcdir)/config/lf_cxx.m4 \ + $(top_srcdir)/config/lf_warnings.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/macosx_audiounit.m4 \ + $(top_srcdir)/config/mkstemp.m4 \ + $(top_srcdir)/config/onceonly.m4 $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/config/sdl.m4 \ + $(top_srcdir)/config/usrp_fusb_tech.m4 \ + $(top_srcdir)/config/usrp_libusb.m4 \ + $(top_srcdir)/config/usrp_sdcc.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = std_paths.h +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrppythondir)" \ + "$(DESTDIR)$(includedir)" "$(DESTDIR)$(swigincludedir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + ../../misc/libmisc.la +@FUSB_TECH_darwin_FALSE@libusrp_la_DEPENDENCIES = \ +@FUSB_TECH_darwin_FALSE@ $(am__DEPENDENCIES_2) +@FUSB_TECH_darwin_TRUE@libusrp_la_DEPENDENCIES = \ +@FUSB_TECH_darwin_TRUE@ $(am__DEPENDENCIES_2) \ +@FUSB_TECH_darwin_TRUE@ $(am__DEPENDENCIES_1) +am__libusrp_la_SOURCES_DIST = fusb.cc md5.c usrp_basic.cc \ + usrp_config.cc usrp_dbid.cc usrp_local_sighandler.cc \ + usrp_prims.cc usrp_standard.cc db_boards.cc db_base.cc \ + db_basic.cc db_tv_rx.cc db_flexrf.cc db_flexrf_mimo.cc \ + db_dbs_rx.cc db_xcvr2450.cc db_dtt754.cc db_dtt768.cc \ + db_util.cc fusb_darwin.cc fusb_sysconfig_darwin.cc README_OSX \ + circular_buffer.h circular_linked_list.h darwin_libusb.h \ + mld_threads.h fusb_generic.cc fusb_sysconfig_generic.cc \ + fusb_linux.cc fusb_sysconfig_linux.cc fusb_ra_wb.cc \ + fusb_sysconfig_ra_wb.cc fusb_win32.cc fusb_sysconfig_win32.cc +am__objects_1 = fusb.lo md5.lo usrp_basic.lo usrp_config.lo \ + usrp_dbid.lo usrp_local_sighandler.lo usrp_prims.lo \ + usrp_standard.lo db_boards.lo db_base.lo db_basic.lo \ + db_tv_rx.lo db_flexrf.lo db_flexrf_mimo.lo db_dbs_rx.lo \ + db_xcvr2450.lo db_dtt754.lo db_dtt768.lo db_util.lo +am__objects_2 = fusb_darwin.lo fusb_sysconfig_darwin.lo +am__objects_3 = fusb_generic.lo fusb_sysconfig_generic.lo +am__objects_4 = fusb_linux.lo fusb_sysconfig_linux.lo +am__objects_5 = fusb_ra_wb.lo fusb_sysconfig_ra_wb.lo +am__objects_6 = fusb_win32.lo fusb_sysconfig_win32.lo +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_FALSE@@FUSB_TECH_win32_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_FALSE@@FUSB_TECH_win32_TRUE@ $(am__objects_6) +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_FALSE@@FUSB_TECH_ra_wb_TRUE@ $(am__objects_5) +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_FALSE@@FUSB_TECH_linux_TRUE@ $(am__objects_4) +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ +@FUSB_TECH_darwin_FALSE@@FUSB_TECH_generic_TRUE@ $(am__objects_3) +@FUSB_TECH_darwin_TRUE@am_libusrp_la_OBJECTS = $(am__objects_1) \ +@FUSB_TECH_darwin_TRUE@ $(am__objects_2) +libusrp_la_OBJECTS = $(am_libusrp_la_OBJECTS) +libusrp_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libusrp_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libusrp_la_SOURCES) $(EXTRA_libusrp_la_SOURCES) +DIST_SOURCES = $(am__libusrp_la_SOURCES_DIST) \ + $(EXTRA_libusrp_la_SOURCES) +usrppythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +includeHEADERS_INSTALL = $(INSTALL_HEADER) +swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(include_HEADERS) $(noinst_HEADERS) $(swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_CPPFLAGS = @ALSA_CPPFLAGS@ +ALSA_INCLUDEDIR = @ALSA_INCLUDEDIR@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_CXXFLAGS = @BOOST_CXXFLAGS@ +BOOST_DATE_TIME_LIB = @BOOST_DATE_TIME_LIB@ +BOOST_LDFLAGS = @BOOST_LDFLAGS@ +BOOST_PROGRAM_OPTIONS_LIB = @BOOST_PROGRAM_OPTIONS_LIB@ +BOOST_THREAD_LIB = @BOOST_THREAD_LIB@ +CBLAS_LIBS = @CBLAS_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ +CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ +CPPUNIT_CPPFLAGS = @CPPUNIT_CPPFLAGS@ +CPPUNIT_INCLUDEDIR = @CPPUNIT_INCLUDEDIR@ +CPPUNIT_INCLUDES = @CPPUNIT_INCLUDES@ +CPPUNIT_LIBS = @CPPUNIT_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFINES = @DEFINES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOT = @DOT@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FFTW3F_CFLAGS = @FFTW3F_CFLAGS@ +FFTW3F_CPPFLAGS = @FFTW3F_CPPFLAGS@ +FFTW3F_INCLUDEDIR = @FFTW3F_INCLUDEDIR@ +FFTW3F_LIBS = @FFTW3F_LIBS@ +FGREP = @FGREP@ +FLIBS = @FLIBS@ +FUSB_TECH = @FUSB_TECH@ +GREP = @GREP@ +GR_ARCH_BIGENDIAN = @GR_ARCH_BIGENDIAN@ +GR_HAVE_ARPA_INET = @GR_HAVE_ARPA_INET@ +GR_HAVE_BYTESWAP = @GR_HAVE_BYTESWAP@ +GR_HAVE_NETINET_IN = @GR_HAVE_NETINET_IN@ +GSL_CFLAGS = @GSL_CFLAGS@ +GSL_CPPFLAGS = @GSL_CPPFLAGS@ +GSL_INCLUDEDIR = @GSL_INCLUDEDIR@ +GSL_LIBS = @GSL_LIBS@ +GUILE = @GUILE@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPC_LIBS = @IPC_LIBS@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_CPPFLAGS = @JACK_CPPFLAGS@ +JACK_INCLUDEDIR = @JACK_INCLUDEDIR@ +JACK_LIBS = @JACK_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGNURADIO_CORE_EXTRA_LDFLAGS = @LIBGNURADIO_CORE_EXTRA_LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MD_CPU = @MD_CPU@ +MD_SUBCPU = @MD_SUBCPU@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OSS_LIBS = @OSS_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PORTAUDIO_CFLAGS = @PORTAUDIO_CFLAGS@ +PORTAUDIO_CPPFLAGS = @PORTAUDIO_CPPFLAGS@ +PORTAUDIO_INCLUDEDIR = @PORTAUDIO_INCLUDEDIR@ +PORTAUDIO_LIBS = @PORTAUDIO_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHONW = @PYTHONW@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +QMAKE_INCLUDES = @QMAKE_INCLUDES@ +QTCORE_CFLAGS = @QTCORE_CFLAGS@ +QTCORE_CPPFLAGS = @QTCORE_CPPFLAGS@ +QTCORE_INCLUDEDIR = @QTCORE_INCLUDEDIR@ +QTCORE_LIBS = @QTCORE_LIBS@ +QTGUI_CFLAGS = @QTGUI_CFLAGS@ +QTGUI_CPPFLAGS = @QTGUI_CPPFLAGS@ +QTGUI_INCLUDEDIR = @QTGUI_INCLUDEDIR@ +QTGUI_LIBS = @QTGUI_LIBS@ +QTOPENGL_CFLAGS = @QTOPENGL_CFLAGS@ +QTOPENGL_CPPFLAGS = @QTOPENGL_CPPFLAGS@ +QTOPENGL_INCLUDEDIR = @QTOPENGL_INCLUDEDIR@ +QTOPENGL_LIBS = @QTOPENGL_LIBS@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LIBS = @QT_LIBS@ +QT_MOC_EXEC = @QT_MOC_EXEC@ +QT_UIC_EXEC = @QT_UIC_EXEC@ +QWTPLOT3D_CFLAGS = @QWTPLOT3D_CFLAGS@ +QWTPLOT3D_LIBS = @QWTPLOT3D_LIBS@ +QWT_CFLAGS = @QWT_CFLAGS@ +QWT_LIBS = @QWT_LIBS@ +RANLIB = @RANLIB@ +RM_PROG = @RM_PROG@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_CPPFLAGS = @SDL_CPPFLAGS@ +SDL_INCLUDEDIR = @SDL_INCLUDEDIR@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHM_OPEN_LIBS = @SHM_OPEN_LIBS@ +SPU_GCC_PROG = @SPU_GCC_PROG@ +STRIP = @STRIP@ +SVN = @SVN@ +SVNDATE = @SVNDATE@ +SVNVERSION = @SVNVERSION@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +USB_CFLAGS = @USB_CFLAGS@ +USB_CPPFLAGS = @USB_CPPFLAGS@ +USB_INCLUDEDIR = @USB_INCLUDEDIR@ +USB_LIBS = @USB_LIBS@ +USRP2_INCLUDES = @USRP2_INCLUDES@ +USRP2_LA = @USRP2_LA@ +VERSION = @VERSION@ +WINAUDIO_LIBS = @WINAUDIO_LIBS@ +XAS = @XAS@ +XCC = @XCC@ +XDG_UTILS = @XDG_UTILS@ +XMLTO = @XMLTO@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +autoconf_default_CFLAGS = @autoconf_default_CFLAGS@ +autoconf_default_CXXFLAGS = @autoconf_default_CXXFLAGS@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_dirs = @build_dirs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +docs_INCLUDEDIR = @docs_INCLUDEDIR@ +docs_INCLUDES = @docs_INCLUDES@ +docs_LA = @docs_LA@ +docs_LDFLAG = @docs_LDFLAG@ +docs_LIBDIRPATH = @docs_LIBDIRPATH@ +dvidir = @dvidir@ +enable_dot = @enable_dot@ +enable_html_docs = @enable_html_docs@ +enable_latex_docs = @enable_latex_docs@ +enable_xml_docs = @enable_xml_docs@ +exec_prefix = @exec_prefix@ +gcell_INCLUDEDIR = @gcell_INCLUDEDIR@ +gcell_INCLUDES = @gcell_INCLUDES@ +gcell_LA = @gcell_LA@ +gcell_LDFLAG = @gcell_LDFLAG@ +gcell_LIBDIRPATH = @gcell_LIBDIRPATH@ +gcell_spu_INCLUDES = @gcell_spu_INCLUDES@ +gcell_spu_LA = @gcell_spu_LA@ +generate_docs = @generate_docs@ +gnuradio_core_I = @gnuradio_core_I@ +gnuradio_core_INCLUDEDIR = @gnuradio_core_INCLUDEDIR@ +gnuradio_core_INCLUDES = @gnuradio_core_INCLUDES@ +gnuradio_core_LA = @gnuradio_core_LA@ +gnuradio_core_LDFLAG = @gnuradio_core_LDFLAG@ +gnuradio_core_LIBDIRPATH = @gnuradio_core_LIBDIRPATH@ +gnuradio_core_PYDIRPATH = @gnuradio_core_PYDIRPATH@ +gnuradio_core_SWIGDIRPATH = @gnuradio_core_SWIGDIRPATH@ +gnuradio_examples_INCLUDEDIR = @gnuradio_examples_INCLUDEDIR@ +gnuradio_examples_INCLUDES = @gnuradio_examples_INCLUDES@ +gnuradio_examples_LA = @gnuradio_examples_LA@ +gnuradio_examples_LDFLAG = @gnuradio_examples_LDFLAG@ +gnuradio_examples_LIBDIRPATH = @gnuradio_examples_LIBDIRPATH@ +gr_audio_alsa_INCLUDEDIR = @gr_audio_alsa_INCLUDEDIR@ +gr_audio_alsa_INCLUDES = @gr_audio_alsa_INCLUDES@ +gr_audio_alsa_LA = @gr_audio_alsa_LA@ +gr_audio_alsa_LDFLAG = @gr_audio_alsa_LDFLAG@ +gr_audio_alsa_LIBDIRPATH = @gr_audio_alsa_LIBDIRPATH@ +gr_audio_jack_INCLUDEDIR = @gr_audio_jack_INCLUDEDIR@ +gr_audio_jack_INCLUDES = @gr_audio_jack_INCLUDES@ +gr_audio_jack_LA = @gr_audio_jack_LA@ +gr_audio_jack_LDFLAG = @gr_audio_jack_LDFLAG@ +gr_audio_jack_LIBDIRPATH = @gr_audio_jack_LIBDIRPATH@ +gr_audio_oss_INCLUDEDIR = @gr_audio_oss_INCLUDEDIR@ +gr_audio_oss_INCLUDES = @gr_audio_oss_INCLUDES@ +gr_audio_oss_LA = @gr_audio_oss_LA@ +gr_audio_oss_LDFLAG = @gr_audio_oss_LDFLAG@ +gr_audio_oss_LIBDIRPATH = @gr_audio_oss_LIBDIRPATH@ +gr_audio_osx_INCLUDEDIR = @gr_audio_osx_INCLUDEDIR@ +gr_audio_osx_INCLUDES = @gr_audio_osx_INCLUDES@ +gr_audio_osx_LA = @gr_audio_osx_LA@ +gr_audio_osx_LDFLAG = @gr_audio_osx_LDFLAG@ +gr_audio_osx_LIBDIRPATH = @gr_audio_osx_LIBDIRPATH@ +gr_audio_portaudio_INCLUDEDIR = @gr_audio_portaudio_INCLUDEDIR@ +gr_audio_portaudio_INCLUDES = @gr_audio_portaudio_INCLUDES@ +gr_audio_portaudio_LA = @gr_audio_portaudio_LA@ +gr_audio_portaudio_LDFLAG = @gr_audio_portaudio_LDFLAG@ +gr_audio_portaudio_LIBDIRPATH = @gr_audio_portaudio_LIBDIRPATH@ +gr_audio_windows_INCLUDEDIR = @gr_audio_windows_INCLUDEDIR@ +gr_audio_windows_INCLUDES = @gr_audio_windows_INCLUDES@ +gr_audio_windows_LA = @gr_audio_windows_LA@ +gr_audio_windows_LDFLAG = @gr_audio_windows_LDFLAG@ +gr_audio_windows_LIBDIRPATH = @gr_audio_windows_LIBDIRPATH@ +gr_cvsd_vocoder_INCLUDEDIR = @gr_cvsd_vocoder_INCLUDEDIR@ +gr_cvsd_vocoder_INCLUDES = @gr_cvsd_vocoder_INCLUDES@ +gr_cvsd_vocoder_LA = @gr_cvsd_vocoder_LA@ +gr_cvsd_vocoder_LDFLAG = @gr_cvsd_vocoder_LDFLAG@ +gr_cvsd_vocoder_LIBDIRPATH = @gr_cvsd_vocoder_LIBDIRPATH@ +gr_gcell_INCLUDEDIR = @gr_gcell_INCLUDEDIR@ +gr_gcell_INCLUDES = @gr_gcell_INCLUDES@ +gr_gcell_LA = @gr_gcell_LA@ +gr_gcell_LDFLAG = @gr_gcell_LDFLAG@ +gr_gcell_LIBDIRPATH = @gr_gcell_LIBDIRPATH@ +gr_gpio_INCLUDEDIR = @gr_gpio_INCLUDEDIR@ +gr_gpio_INCLUDES = @gr_gpio_INCLUDES@ +gr_gpio_LA = @gr_gpio_LA@ +gr_gpio_LDFLAG = @gr_gpio_LDFLAG@ +gr_gpio_LIBDIRPATH = @gr_gpio_LIBDIRPATH@ +gr_gsm_fr_vocoder_INCLUDEDIR = @gr_gsm_fr_vocoder_INCLUDEDIR@ +gr_gsm_fr_vocoder_INCLUDES = @gr_gsm_fr_vocoder_INCLUDES@ +gr_gsm_fr_vocoder_LA = @gr_gsm_fr_vocoder_LA@ +gr_gsm_fr_vocoder_LDFLAG = @gr_gsm_fr_vocoder_LDFLAG@ +gr_gsm_fr_vocoder_LIBDIRPATH = @gr_gsm_fr_vocoder_LIBDIRPATH@ +gr_libdir_suffix = @gr_libdir_suffix@ +gr_pager_INCLUDEDIR = @gr_pager_INCLUDEDIR@ +gr_pager_INCLUDES = @gr_pager_INCLUDES@ +gr_pager_LA = @gr_pager_LA@ +gr_pager_LDFLAG = @gr_pager_LDFLAG@ +gr_pager_LIBDIRPATH = @gr_pager_LIBDIRPATH@ +gr_qtgui_INCLUDEDIR = @gr_qtgui_INCLUDEDIR@ +gr_qtgui_INCLUDES = @gr_qtgui_INCLUDES@ +gr_qtgui_LA = @gr_qtgui_LA@ +gr_qtgui_LDFLAG = @gr_qtgui_LDFLAG@ +gr_qtgui_LIBDIRPATH = @gr_qtgui_LIBDIRPATH@ +gr_radar_mono_INCLUDEDIR = @gr_radar_mono_INCLUDEDIR@ +gr_radar_mono_INCLUDES = @gr_radar_mono_INCLUDES@ +gr_radar_mono_LA = @gr_radar_mono_LA@ +gr_radar_mono_LDFLAG = @gr_radar_mono_LDFLAG@ +gr_radar_mono_LIBDIRPATH = @gr_radar_mono_LIBDIRPATH@ +gr_radio_astronomy_INCLUDEDIR = @gr_radio_astronomy_INCLUDEDIR@ +gr_radio_astronomy_INCLUDES = @gr_radio_astronomy_INCLUDES@ +gr_radio_astronomy_LA = @gr_radio_astronomy_LA@ +gr_radio_astronomy_LDFLAG = @gr_radio_astronomy_LDFLAG@ +gr_radio_astronomy_LIBDIRPATH = @gr_radio_astronomy_LIBDIRPATH@ +gr_sounder_INCLUDEDIR = @gr_sounder_INCLUDEDIR@ +gr_sounder_INCLUDES = @gr_sounder_INCLUDES@ +gr_sounder_LA = @gr_sounder_LA@ +gr_sounder_LDFLAG = @gr_sounder_LDFLAG@ +gr_sounder_LIBDIRPATH = @gr_sounder_LIBDIRPATH@ +gr_trellis_INCLUDEDIR = @gr_trellis_INCLUDEDIR@ +gr_trellis_INCLUDES = @gr_trellis_INCLUDES@ +gr_trellis_LA = @gr_trellis_LA@ +gr_trellis_LDFLAG = @gr_trellis_LDFLAG@ +gr_trellis_LIBDIRPATH = @gr_trellis_LIBDIRPATH@ +gr_usrp2_INCLUDEDIR = @gr_usrp2_INCLUDEDIR@ +gr_usrp2_INCLUDES = @gr_usrp2_INCLUDES@ +gr_usrp2_LA = @gr_usrp2_LA@ +gr_usrp2_LDFLAG = @gr_usrp2_LDFLAG@ +gr_usrp2_LIBDIRPATH = @gr_usrp2_LIBDIRPATH@ +gr_usrp_INCLUDEDIR = @gr_usrp_INCLUDEDIR@ +gr_usrp_INCLUDES = @gr_usrp_INCLUDES@ +gr_usrp_LA = @gr_usrp_LA@ +gr_usrp_LDFLAG = @gr_usrp_LDFLAG@ +gr_usrp_LIBDIRPATH = @gr_usrp_LIBDIRPATH@ +gr_utils_INCLUDEDIR = @gr_utils_INCLUDEDIR@ +gr_utils_INCLUDES = @gr_utils_INCLUDES@ +gr_utils_LA = @gr_utils_LA@ +gr_utils_LDFLAG = @gr_utils_LDFLAG@ +gr_utils_LIBDIRPATH = @gr_utils_LIBDIRPATH@ +gr_video_sdl_INCLUDEDIR = @gr_video_sdl_INCLUDEDIR@ +gr_video_sdl_INCLUDES = @gr_video_sdl_INCLUDES@ +gr_video_sdl_LA = @gr_video_sdl_LA@ +gr_video_sdl_LDFLAG = @gr_video_sdl_LDFLAG@ +gr_video_sdl_LIBDIRPATH = @gr_video_sdl_LIBDIRPATH@ +gr_wxgui_INCLUDEDIR = @gr_wxgui_INCLUDEDIR@ +gr_wxgui_INCLUDES = @gr_wxgui_INCLUDES@ +gr_wxgui_LA = @gr_wxgui_LA@ +gr_wxgui_LDFLAG = @gr_wxgui_LDFLAG@ +gr_wxgui_LIBDIRPATH = @gr_wxgui_LIBDIRPATH@ +grc_INCLUDEDIR = @grc_INCLUDEDIR@ +grc_INCLUDES = @grc_INCLUDES@ +grc_LA = @grc_LA@ +grc_LDFLAG = @grc_LDFLAG@ +grc_LIBDIRPATH = @grc_LIBDIRPATH@ +gruel_INCLUDEDIR = @gruel_INCLUDEDIR@ +gruel_INCLUDES = @gruel_INCLUDES@ +gruel_LA = @gruel_LA@ +gruel_LDFLAG = @gruel_LDFLAG@ +gruel_LIBDIRPATH = @gruel_LIBDIRPATH@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +lf_CFLAGS = @lf_CFLAGS@ +lf_CXXFLAGS = @lf_CXXFLAGS@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mblock_INCLUDEDIR = @mblock_INCLUDEDIR@ +mblock_INCLUDES = @mblock_INCLUDES@ +mblock_LA = @mblock_LA@ +mblock_LDFLAG = @mblock_LDFLAG@ +mblock_LIBDIRPATH = @mblock_LIBDIRPATH@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +omnithread_INCLUDEDIR = @omnithread_INCLUDEDIR@ +omnithread_INCLUDES = @omnithread_INCLUDES@ +omnithread_LA = @omnithread_LA@ +omnithread_LDFLAG = @omnithread_LDFLAG@ +omnithread_LIBDIRPATH = @omnithread_LIBDIRPATH@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +pmt_INCLUDEDIR = @pmt_INCLUDEDIR@ +pmt_INCLUDES = @pmt_INCLUDES@ +pmt_LA = @pmt_LA@ +pmt_LDFLAG = @pmt_LDFLAG@ +pmt_LIBDIRPATH = @pmt_LIBDIRPATH@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +skipped_dirs = @skipped_dirs@ +srcdir = @srcdir@ +subdirs = @subdirs@ +swig_CXXFLAGS = @swig_CXXFLAGS@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usrp2_INCLUDEDIR = @usrp2_INCLUDEDIR@ +usrp2_INCLUDES = @usrp2_INCLUDES@ +usrp2_LA = @usrp2_LA@ +usrp2_LDFLAG = @usrp2_LDFLAG@ +usrp2_LIBDIRPATH = @usrp2_LIBDIRPATH@ +usrp_INCLUDEDIR = @usrp_INCLUDEDIR@ +usrp_INCLUDES = @usrp_INCLUDES@ +usrp_LA = @usrp_LA@ +usrp_LDFLAG = @usrp_LDFLAG@ +usrp_LIBDIRPATH = @usrp_LIBDIRPATH@ +usrp_darwin_omnithread_pc_requires = @usrp_darwin_omnithread_pc_requires@ +with_INCLUDES = @with_INCLUDES@ +with_LIBDIRPATH = @with_LIBDIRPATH@ +with_PYDIRPATH = @with_PYDIRPATH@ +with_SWIGDIRPATH = @with_SWIGDIRPATH@ +with_SWIG_INCLUDES = @with_SWIG_INCLUDES@ +with_dirs = @with_dirs@ +AM_CFLAGS = @autoconf_default_CFLAGS@ @lf_CFLAGS@ +AM_CXXFLAGS = @autoconf_default_CXXFLAGS@ @lf_CXXFLAGS@ + +# includes +grincludedir = $(includedir)/gnuradio + +# swig includes +swigincludedir = $(grincludedir)/swig + +# Install the gnuradio stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +grpythondir = $(pythondir)/gnuradio +grpyexecdir = $(pyexecdir)/gnuradio + +# Install the non-gnuradio usrp stuff in the appropriate subdirectory +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/usrpm +usrppythondir = $(pythondir)/usrpm +usrppyexecdir = $(pyexecdir)/usrpm + +# gcell includes +gcellincludedir = $(includedir)/gcell +gcellspuincludedir = $(includedir)/gcell/spu + +# Cell spu libs +libspudir = $(libdir)spu + +# This used to be set in configure.ac but is now defined here for all +# Makefiles when this fragment is included. +STD_DEFINES_AND_INCLUDES = $(DEFINES) $(BOOST_CPPFLAGS) \ + $(OMNITHREAD_INCLUDES) $(GNURADIO_INCLUDES) $(GRUEL_INCLUDES) + + +# when including for compilation from pre-installed libraries and such, +# need to make sure those are put last on the compile command +WITH_INCLUDES = @with_INCLUDES@ +WITH_SWIG_INCLUDES = @with_SWIG_INCLUDES@ + +# How to link in the top-level omnithreads library from inside the tree +OMNITHREAD_INCLUDES = @omnithread_INCLUDES@ +OMNITHREAD_LA = @omnithread_LA@ + +# Where to find gnuradio include files in the current build tree +# top_srcdir for original stuff, top_builddir for generated files +GNURADIO_INCLUDES = @gnuradio_core_INCLUDES@ + +# How to link in GNU Radio core library from inside the tree +GNURADIO_CORE_LA = @gnuradio_core_LA@ + +# How to link in the USRP library from inside the tree +GRUEL_INCLUDES = @gruel_INCLUDES@ +GRUEL_LA = @gruel_LA@ + +# How to link in the USRP library from inside the tree +USRP_INCLUDES = @usrp_INCLUDES@ +USRP_LA = @usrp_LA@ + +# How to link in usrp-inband library from inside the tree +USRP_INBAND_INCLUDES = @usrp_inband_INCLUDES@ +USRP_INBAND_LA = @usrp_inband_LA@ + +# How to link the PMT library from inside the tree +PMT_INCLUDES = @pmt_INCLUDES@ +PMT_LA = @pmt_LA@ + +# How to link the mblock library from inside the tree +MBLOCK_INCLUDES = @mblock_INCLUDES@ +MBLOCK_LA = @mblock_LA@ + +# How to link the gcell library from inside the tree (the PPU part) +GCELL_INCLUDES = @gcell_INCLUDES@ +GCELL_LA = @gcell_LA@ + +# How to link the gcell library from inside the tree (the SPU part) +GCELL_SPU_INCLUDES = @gcell_spu_INCLUDES@ +GCELL_SPU_LA = @gcell_spu_LA@ + +# libtool aware wrapper for ppu-embedspu +GCELL_EMBEDSPU_LIBTOOL = @abs_top_srcdir@/gcell/lib/runtime/gcell-embedspu-libtool + +# Fix for BSD make not defining $(RM). We define it now in configure.ac +# using AM_PATH_PROG, but now here have to add a -f to be like GNU make +RM = $(RM_PROG) -f +RUN_GUILE = GUILE_LOAD_PATH="@abs_top_srcdir@/pmt/src/scheme:@abs_top_srcdir@/mblock/src/scheme" @GUILE@ -e main -s +COMPILE_MBH = $(RUN_GUILE) $(top_srcdir)/mblock/src/scheme/gnuradio/compile-mbh.scm + +# Base directory for example applications +exampledir = $(datadir)/gnuradio/examples +gr_docdir = $(docdir)-$(VERSION) + +# System configuration files +gr_sysconfdir = $(sysconfdir)/$(PACKAGE)/conf.d + +# Other common defines; use "+=" to add to these +STAMPS = $(DEPDIR)/stamp-sources-generate* +MOSTLYCLEANFILES = $(BUILT_SOURCES) $(STAMPS) *.pyc *.pyo *~ *.tmp \ + *.loT stamp-sources-generate +common_INCLUDES = $(USRP_INCLUDES) +lib_LTLIBRARIES = libusrp.la +libusrp_la_common_LDFLAGS = $(NO_UNDEFINED) -version-info 0:0:0 $(BOOST_LDFLAGS) +libusrp_la_common_LIBADD = \ + $(USB_LIBS) \ + $(BOOST_THREAD_LIB) \ + ../../misc/libmisc.la + +@FUSB_TECH_darwin_FALSE@AM_CPPFLAGS = $(common_INCLUDES) $(BOOST_CPPFLAGS) $(WITH_INCLUDES) + +# darwin fusb requires omnithreads +@FUSB_TECH_darwin_TRUE@AM_CPPFLAGS = $(common_INCLUDES) $(OMNITHREAD_INCLUDES) $(BOOST_CPPFLAGS) $(WITH_INCLUDES) +@FUSB_TECH_darwin_FALSE@libusrp_la_LIBADD = $(libusrp_la_common_LIBADD) +@FUSB_TECH_darwin_TRUE@libusrp_la_LIBADD = $(libusrp_la_common_LIBADD) $(OMNITHREAD_LA) +@FUSB_TECH_darwin_FALSE@libusrp_la_LDFLAGS = $(libusrp_la_common_LDFLAGS) +@FUSB_TECH_darwin_TRUE@libusrp_la_LDFLAGS = $(libusrp_la_common_LDFLAGS) -framework CoreFoundation +EXTRA_DIST = std_paths.h.in usrp_dbid.dat stamp-sources-generate +BUILT_SOURCES = \ + usrp_dbid.h \ + usrp_dbid.cc \ + usrp_dbid.py + + +# ---------------------------------------------------------------- +# FUSB_TECH is set at configure time by way of +# usrp/config/usrp_fusb_tech.m4. +# It indicates which fast usb strategy we should be building. +# We currently implement "generic", "darwin", "win32" and "linux" +generic_CODE = \ + fusb_generic.cc \ + fusb_sysconfig_generic.cc + +darwin_CODE = \ + fusb_darwin.cc \ + fusb_sysconfig_darwin.cc \ + README_OSX \ + circular_buffer.h \ + circular_linked_list.h \ + darwin_libusb.h \ + mld_threads.h + +win32_CODE = \ + fusb_win32.cc \ + fusb_sysconfig_win32.cc + +linux_CODE = \ + fusb_linux.cc \ + fusb_sysconfig_linux.cc + +ra_wb_CODE = \ + fusb_ra_wb.cc \ + fusb_sysconfig_ra_wb.cc + + +# +# include each _CODE entry here... +# +EXTRA_libusrp_la_SOURCES = \ + $(generic_CODE) \ + $(darwin_CODE) \ + $(win32_CODE) \ + $(linux_CODE) \ + $(ra_wb_CODE) + + +# work around automake deficiency +libusrp_la_common_SOURCES = \ + fusb.cc \ + md5.c \ + usrp_basic.cc \ + usrp_config.cc \ + usrp_dbid.cc \ + usrp_local_sighandler.cc \ + usrp_prims.cc \ + usrp_standard.cc \ + db_boards.cc \ + db_base.cc \ + db_basic.cc \ + db_tv_rx.cc \ + db_flexrf.cc \ + db_flexrf_mimo.cc \ + db_dbs_rx.cc \ + db_xcvr2450.cc \ + db_dtt754.cc \ + db_dtt768.cc \ + db_util.cc + +@FUSB_TECH_darwin_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(darwin_CODE) + +# db_wbx.cc +@FUSB_TECH_generic_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(generic_CODE) +@FUSB_TECH_linux_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(linux_CODE) +@FUSB_TECH_ra_wb_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(ra_wb_CODE) +@FUSB_TECH_win32_TRUE@libusrp_la_SOURCES = $(libusrp_la_common_SOURCES) $(win32_CODE) +include_HEADERS = \ + db_base.h \ + db_basic.h \ + db_dbs_rx.h \ + db_dtt754.h \ + db_dtt768.h \ + db_flexrf.h \ + db_flexrf_mimo.h \ + db_tv_rx.h \ + db_util.h \ + db_xcvr2450.h \ + usrp_basic.h \ + usrp_bytesex.h \ + usrp_config.h \ + usrp_dbid.h \ + usrp_prims.h \ + usrp_slots.h \ + usrp_standard.h \ + usrp_subdev_spec.h \ + usrp_tune_result.h + +noinst_HEADERS = \ + ad9862.h \ + db_base_impl.h \ + db_boards.h \ + db_wbx.h \ + fusb.h \ + fusb_darwin.h \ + fusb_generic.h \ + fusb_linux.h \ + fusb_ra_wb.h \ + fusb_win32.h \ + md5.h \ + rate_to_regval.h \ + usrp_local_sighandler.h + +usrppython_PYTHON = \ + usrp_dbid.py + +noinst_PYTHON = \ + gen_usrp_dbid.py \ + check_data.py \ + dump_data.py + +swiginclude_HEADERS = db_base.i + +# common way for generating sources from templates when using +# BUILT_SOURCES, using parallel build protection. +gen_sources = $(BUILT_SOURCES) +gen_sources_deps = gen_usrp_dbid.py usrp_dbid.dat +par_gen_command = PYTHONPATH=$(top_srcdir)/usrp/src srcdir=$(srcdir) $(PYTHON) $(srcdir)/gen_usrp_dbid.py $(srcdir)/usrp_dbid.dat +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(top_srcdir)/Makefile.par.gen $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu usrp/host/lib/legacy/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu usrp/host/lib/legacy/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +std_paths.h: $(top_builddir)/config.status $(srcdir)/std_paths.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libusrp.la: $(libusrp_la_OBJECTS) $(libusrp_la_DEPENDENCIES) + $(libusrp_la_LINK) -rpath $(libdir) $(libusrp_la_OBJECTS) $(libusrp_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_basic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_boards.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_dbs_rx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_dtt754.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_dtt768.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_flexrf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_flexrf_mimo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_tv_rx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db_xcvr2450.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_darwin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_linux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_ra_wb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_darwin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_linux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_ra_wb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_sysconfig_win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fusb_win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_basic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_config.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_dbid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_local_sighandler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_prims.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usrp_standard.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-usrppythonPYTHON: $(usrppython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(usrppythondir)" || $(MKDIR_P) "$(DESTDIR)$(usrppythondir)" + @list='$(usrppython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(usrppythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(usrppythondir)/$$f'"; \ + $(usrppythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(usrppythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(usrppythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(usrppythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-usrppythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(usrppython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(usrppythondir)/$$f"; \ + rm -f "$(DESTDIR)$(usrppythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(usrppythondir)/$${f}o"; \ + done +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ + $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ + rm -f "$(DESTDIR)$(includedir)/$$f"; \ + done +install-swigincludeHEADERS: $(swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(swigincludedir)" || $(MKDIR_P) "$(DESTDIR)$(swigincludedir)" + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ + $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +uninstall-swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrppythondir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(swigincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS install-swigincludeHEADERS \ + install-usrppythonPYTHON + +install-dvi: install-dvi-am + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ + uninstall-swigincludeHEADERS uninstall-usrppythonPYTHON + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags dist-hook distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-includeHEADERS install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-swigincludeHEADERS install-usrppythonPYTHON \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES uninstall-swigincludeHEADERS \ + uninstall-usrppythonPYTHON + + +# Base directory for documentation (docdir undefined in autoconf < 1.60) +docdir ?= $(datadir)/doc/$(PACKAGE) + +# Don't distribute the files defined in the variable 'no_dist_files' +dist-hook: + @for file in $(no_dist_files); do \ + echo $(RM) $(distdir)/$$file; \ + $(RM) $(distdir)/$$file; \ + done; + +STAMPS ?= +EXTRA_DIST ?= +MOSTLYCLEANFILES ?= + +stamp-sources-generate: $(gen_sources_deps) + @rm -f $(DEPDIR)/stamp-sources-generate-tmp + @touch $(DEPDIR)/stamp-sources-generate-tmp + $(par_gen_command) + @mv -f $(DEPDIR)/stamp-sources-generate-tmp $@ + +$(gen_sources): stamp-sources-generate + @if test -f $@; then :; else \ + trap 'rm -rf $(DEPDIR)/stamp-sources-generate-*' 1 2 13 15; \ + if mkdir $(DEPDIR)/stamp-sources-generate-lock 2>/dev/null; then \ + rm -f stamp-sources-generate; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-sources-generate; \ + rmdir $(DEPDIR)/stamp-sources-generate-lock; \ + else \ + while test -d $(DEPDIR)/stamp-sources-generate-lock; do sleep 1; done; \ + test -f stamp-sources-generate; exit $$?; \ + fi; \ + fi; +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/usrp/host/lib/legacy/README_OSX b/usrp/host/lib/legacy/README_OSX new file mode 100644 index 00000000..37026f25 --- /dev/null +++ b/usrp/host/lib/legacy/README_OSX @@ -0,0 +1,63 @@ +USRP Darwin Fast USB Changes +Version 0.2 of 2006-04-27 +Michael Dickens + +The files included in this archive are: + +circular_buffer.h +circular_linked_list.h +darwin_libusb.h +fusb_darwin.cc +fusb_darwin.h +mld_threads.h + +These files allow GNURadio code for Darwin / MaxOS X to talk to the +USRP via USB 2.0 at rates up to around 30 Mega-Bytes/sec (MBps), up +from 4-8 MBps without the changes. + +I implemented the buffering myself; there are probably GR buffers +available which would do the work but as this is "beta" software it's +a good place to start. Speed improvements are made by porting +LIBUSB's non-true async bulk read and write functions into USRP's +"fusb", and upgrading them to handle -true- async transfers. +Unfortunately, the easiest way to do this is to spawn a thread or 2 to +handle the "async" part of the transfers. This implementation uses +Darwin's pthreads to do the work for mutexes, conditions, and threads. +Previous implementations (0.1 and before) used "omni_threads" as +provided by gnuradio-core, which caused issues with compiling and +execution ... I'm glad that this is no longer the case. + +As far as I have tested, there is no way to improve the throughput to +32+ MBps without moving into Darwin's "port"s ... a kernel-level data +transport method with a user/application layer for USB-specific +functions. Unfortunately, Apple's documentation for these "port"s is +minimal; I have learned more from reading the Darwin source code +< http://darwinsource.opendarwin.org/ > than by reading Apple's +documents! This would also require -not- using LIBUSB, of which the +removal from the rest of the USRP code would be potentially tedious. + +If you run into issues either compiling or testing the USRP on +OSX, please send me a note. + +(1) Go through the bootstrap, configure, compile, and install as +usual (e.g. see < http://www.nd.edu/~mdickens/GNURadio/ > for my +usual). + +(2) from .../usrp/host/apps : run the scripts +++++++++++++++++ +./test_usrp_standard_tx +./test_usrp_standard_rx +++++++++++++++++ + +For -all- systems I've tested on thus far, both of these return +exactly 41 overruns / underruns, and -most- systems start out with a +stalled pipe. This stall comes in a usb_control function call to +LIBUSB; one would have to change the LIBUSB code to handle this issue. + +(3) from gr-build/gnuradio-examples/python/usrp : +++++++++++++++++ +./benchmark_usb.py +++++++++++++++++ + +(4) If you get to here, the try doing the FM receiver (gui or not). +If that sounds correct, then the USB is working. Yay! \ No newline at end of file diff --git a/usrp/host/lib/ad9862.h b/usrp/host/lib/legacy/ad9862.h similarity index 100% rename from usrp/host/lib/ad9862.h rename to usrp/host/lib/legacy/ad9862.h diff --git a/usrp/host/lib/check_data.py b/usrp/host/lib/legacy/check_data.py similarity index 100% rename from usrp/host/lib/check_data.py rename to usrp/host/lib/legacy/check_data.py diff --git a/usrp/host/lib/legacy/circular_buffer.h b/usrp/host/lib/legacy/circular_buffer.h new file mode 100644 index 00000000..8898e419 --- /dev/null +++ b/usrp/host/lib/legacy/circular_buffer.h @@ -0,0 +1,317 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef _CIRCULAR_BUFFER_H_ +#define _CIRCULAR_BUFFER_H_ + +#include "mld_threads.h" +#include + +#ifndef DO_DEBUG +#define DO_DEBUG 0 +#endif + +#if DO_DEBUG +#define DEBUG(X) do{X} while(0); +#else +#define DEBUG(X) do{} while(0); +#endif + +template class circular_buffer +{ +private: +// the buffer to use + T* d_buffer; + +// the following are in Items (type T) + UInt32 d_bufLen_I, d_readNdx_I, d_writeNdx_I; + UInt32 d_n_avail_write_I, d_n_avail_read_I; + +// stuff to control access to class internals + mld_mutex_ptr d_internal; + mld_condition_ptr d_readBlock, d_writeBlock; + +// booleans to decide how to control reading, writing, and aborting + bool d_doWriteBlock, d_doFullRead, d_doAbort; + + void delete_mutex_cond () { + if (d_internal) { + delete d_internal; + d_internal = NULL; + } + if (d_readBlock) { + delete d_readBlock; + d_readBlock = NULL; + } + if (d_writeBlock) { + delete d_writeBlock; + d_writeBlock = NULL; + } + }; + +public: + circular_buffer (UInt32 bufLen_I, + bool doWriteBlock = true, bool doFullRead = false) { + if (bufLen_I == 0) + throw std::runtime_error ("circular_buffer(): " + "Number of items to buffer must be > 0.\n"); + d_bufLen_I = bufLen_I; + d_buffer = (T*) new T[d_bufLen_I]; + d_doWriteBlock = doWriteBlock; + d_doFullRead = doFullRead; + d_internal = NULL; + d_readBlock = d_writeBlock = NULL; + reset (); + DEBUG (fprintf (stderr, "c_b(): buf len (items) = %ld, " + "doWriteBlock = %s, doFullRead = %s\n", d_bufLen_I, + (d_doWriteBlock ? "true" : "false"), + (d_doFullRead ? "true" : "false"));); + }; + + ~circular_buffer () { + delete_mutex_cond (); + delete [] d_buffer; + }; + + inline UInt32 n_avail_write_items () { + d_internal->lock (); + UInt32 retVal = d_n_avail_write_I; + d_internal->unlock (); + return (retVal); + }; + + inline UInt32 n_avail_read_items () { + d_internal->lock (); + UInt32 retVal = d_n_avail_read_I; + d_internal->unlock (); + return (retVal); + }; + + inline UInt32 buffer_length_items () {return (d_bufLen_I);}; + inline bool do_write_block () {return (d_doWriteBlock);}; + inline bool do_full_read () {return (d_doFullRead);}; + + void reset () { + d_doAbort = false; + bzero (d_buffer, d_bufLen_I * sizeof (T)); + d_readNdx_I = d_writeNdx_I = d_n_avail_read_I = 0; + d_n_avail_write_I = d_bufLen_I; + delete_mutex_cond (); + // create a mutex to handle contention of shared resources; + // any routine needed access to shared resources uses lock() + // before doing anything, then unlock() when finished. + d_internal = new mld_mutex (); + // link the internal mutex to the read and write conditions; + // when wait() is called, the internal mutex will automatically + // be unlock()'ed. Upon return (from a signal() to the condition), + // the internal mutex will be lock()'ed. + d_readBlock = new mld_condition (d_internal); + d_writeBlock = new mld_condition (d_internal); + }; + +/* + * enqueue: add the given buffer of item-length to the queue, + * first-in-first-out (FIFO). + * + * inputs: + * buf: a pointer to the buffer holding the data + * + * bufLen_I: the buffer length in items (of the instantiated type) + * + * returns: + * -1: on overflow (write is not blocking, and data is being + * written faster than it is being read) + * 0: if nothing to do (0 length buffer) + * 1: if success + * 2: in the process of aborting, do doing nothing + * + * will throw runtime errors if inputs are improper: + * buffer pointer is NULL + * buffer length is larger than the instantiated buffer length + */ + + int enqueue (T* buf, UInt32 bufLen_I) { + DEBUG (fprintf (stderr, "enqueue: buf = %X, bufLen = %ld, #av_wr = %ld, " + "#av_rd = %ld.\n", (unsigned int)buf, bufLen_I, + d_n_avail_write_I, d_n_avail_read_I);); + if (bufLen_I > d_bufLen_I) { + fprintf (stderr, "cannot add buffer longer (%ld" + ") than instantiated length (%ld" + ").\n", bufLen_I, d_bufLen_I); + throw std::runtime_error ("circular_buffer::enqueue()"); + } + + if (bufLen_I == 0) + return (0); + if (!buf) + throw std::runtime_error ("circular_buffer::enqueue(): " + "input buffer is NULL.\n"); + d_internal->lock (); + if (d_doAbort) { + d_internal->unlock (); + return (2); + } + // set the return value to 1: success; change if needed + int retval = 1; + if (bufLen_I > d_n_avail_write_I) { + if (d_doWriteBlock) { + while (bufLen_I > d_n_avail_write_I) { + DEBUG (fprintf (stderr, "enqueue: #len > #a, waiting.\n");); + // wait will automatically unlock() the internal mutex + d_writeBlock->wait (); + // and lock() it here. + if (d_doAbort) { + d_internal->unlock (); + DEBUG (fprintf (stderr, "enqueue: #len > #a, aborting.\n");); + return (2); + } + DEBUG (fprintf (stderr, "enqueue: #len > #a, done waiting.\n");); + } + } else { + d_n_avail_read_I = d_bufLen_I - bufLen_I; + d_n_avail_write_I = bufLen_I; + DEBUG (fprintf (stderr, "circular_buffer::enqueue: overflow\n");); + retval = -1; + } + } + UInt32 n_now_I = d_bufLen_I - d_writeNdx_I, n_start_I = 0; + if (n_now_I > bufLen_I) + n_now_I = bufLen_I; + else if (n_now_I < bufLen_I) + n_start_I = bufLen_I - n_now_I; + bcopy (buf, &(d_buffer[d_writeNdx_I]), n_now_I * sizeof (T)); + if (n_start_I) { + bcopy (&(buf[n_now_I]), d_buffer, n_start_I * sizeof (T)); + d_writeNdx_I = n_start_I; + } else + d_writeNdx_I += n_now_I; + d_n_avail_read_I += bufLen_I; + d_n_avail_write_I -= bufLen_I; + d_readBlock->signal (); + d_internal->unlock (); + return (retval); + }; + +/* + * dequeue: removes from the queue the number of items requested, or + * available, into the given buffer on a FIFO basis. + * + * inputs: + * buf: a pointer to the buffer into which to copy the data + * + * bufLen_I: pointer to the number of items to remove in items + * (of the instantiated type) + * + * returns: + * 0: if nothing to do (0 length buffer) + * 1: if success + * 2: in the process of aborting, do doing nothing + * + * will throw runtime errors if inputs are improper: + * buffer pointer is NULL + * buffer length pointer is NULL + * buffer length is larger than the instantiated buffer length + */ + + int dequeue (T* buf, UInt32* bufLen_I) { + DEBUG (fprintf (stderr, "dequeue: buf = %X, *bufLen = %ld, #av_wr = %ld, " + "#av_rd = %ld.\n", (unsigned int)buf, *bufLen_I, + d_n_avail_write_I, d_n_avail_read_I);); + if (!bufLen_I) + throw std::runtime_error ("circular_buffer::dequeue(): " + "input bufLen pointer is NULL.\n"); + if (!buf) + throw std::runtime_error ("circular_buffer::dequeue(): " + "input buffer pointer is NULL.\n"); + UInt32 l_bufLen_I = *bufLen_I; + if (l_bufLen_I == 0) + return (0); + if (l_bufLen_I > d_bufLen_I) { + fprintf (stderr, "cannot remove buffer longer (%ld" + ") than instantiated length (%ld" + ").\n", l_bufLen_I, d_bufLen_I); + throw std::runtime_error ("circular_buffer::dequeue()"); + } + + d_internal->lock (); + if (d_doAbort) { + d_internal->unlock (); + return (2); + } + if (d_doFullRead) { + while (d_n_avail_read_I < l_bufLen_I) { + DEBUG (fprintf (stderr, "dequeue: #a < #len, waiting.\n");); + // wait will automatically unlock() the internal mutex + d_readBlock->wait (); + // and lock() it here. + if (d_doAbort) { + d_internal->unlock (); + DEBUG (fprintf (stderr, "dequeue: #a < #len, aborting.\n");); + return (2); + } + DEBUG (fprintf (stderr, "dequeue: #a < #len, done waiting.\n");); + } + } else { + while (d_n_avail_read_I == 0) { + DEBUG (fprintf (stderr, "dequeue: #a == 0, waiting.\n");); + // wait will automatically unlock() the internal mutex + d_readBlock->wait (); + // and lock() it here. + if (d_doAbort) { + d_internal->unlock (); + DEBUG (fprintf (stderr, "dequeue: #a == 0, aborting.\n");); + return (2); + } + DEBUG (fprintf (stderr, "dequeue: #a == 0, done waiting.\n");); + } + } + if (l_bufLen_I > d_n_avail_read_I) + l_bufLen_I = d_n_avail_read_I; + UInt32 n_now_I = d_bufLen_I - d_readNdx_I, n_start_I = 0; + if (n_now_I > l_bufLen_I) + n_now_I = l_bufLen_I; + else if (n_now_I < l_bufLen_I) + n_start_I = l_bufLen_I - n_now_I; + bcopy (&(d_buffer[d_readNdx_I]), buf, n_now_I * sizeof (T)); + if (n_start_I) { + bcopy (d_buffer, &(buf[n_now_I]), n_start_I * sizeof (T)); + d_readNdx_I = n_start_I; + } else + d_readNdx_I += n_now_I; + *bufLen_I = l_bufLen_I; + d_n_avail_read_I -= l_bufLen_I; + d_n_avail_write_I += l_bufLen_I; + d_writeBlock->signal (); + d_internal->unlock (); + return (1); + }; + + void abort () { + d_internal->lock (); + d_doAbort = true; + d_writeBlock->signal (); + d_readBlock->signal (); + d_internal->unlock (); + }; +}; + +#endif /* _CIRCULAR_BUFFER_H_ */ diff --git a/usrp/host/lib/legacy/circular_linked_list.h b/usrp/host/lib/legacy/circular_linked_list.h new file mode 100644 index 00000000..e495d609 --- /dev/null +++ b/usrp/host/lib/legacy/circular_linked_list.h @@ -0,0 +1,284 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifndef _CIRCULAR_LINKED_LIST_H_ +#define _CIRCULAR_LINKED_LIST_H_ + +#include +#include + +#define __INLINE__ inline + +#ifndef DO_DEBUG +#define DO_DEBUG 0 +#endif + +#if DO_DEBUG +#define DEBUG(X) do{X} while(0); +#else +#define DEBUG(X) do{} while(0); +#endif + +template class s_both; + +template class s_node +{ + typedef s_node* s_node_ptr; + +private: + T d_object; + bool d_available; + s_node_ptr d_prev, d_next; + s_both* d_both; + +public: + s_node (T l_object, + s_node_ptr l_prev = NULL, + s_node_ptr l_next = NULL) + : d_object (l_object), d_available (TRUE), d_prev (l_prev), + d_next (l_next), d_both (0) {}; + + __INLINE__ s_node (s_node_ptr l_prev, s_node_ptr l_next = NULL) { + s_node ((T) NULL, l_prev, l_next); }; + __INLINE__ s_node () { s_node (NULL, NULL, NULL); }; + __INLINE__ ~s_node () {}; + + void remove () { + d_prev->next (d_next); + d_next->prev (d_prev); + d_prev = d_next = this; + }; + + void insert_before (s_node_ptr l_next) { + if (l_next) { + s_node_ptr l_prev = l_next->prev (); + d_next = l_next; + d_prev = l_prev; + l_prev->next (this); + l_next->prev (this); + } else + d_next = d_prev = this; + }; + + void insert_after (s_node_ptr l_prev) { + if (l_prev) { + s_node_ptr l_next = l_prev->next (); + d_prev = l_prev; + d_next = l_next; + l_next->prev (this); + l_prev->next (this); + } else + d_prev = d_next = this; + }; + + __INLINE__ T object () { return (d_object); }; + __INLINE__ void object (T l_object) { d_object = l_object; }; + __INLINE__ bool available () { return (d_available); }; + __INLINE__ void set_available () { d_available = TRUE; }; + __INLINE__ void set_available (bool l_avail) { d_available = l_avail; }; + __INLINE__ void set_not_available () { d_available = FALSE; }; + __INLINE__ s_node_ptr next () { return (d_next); }; + __INLINE__ s_node_ptr prev () { return (d_prev); }; + __INLINE__ s_both* both () { return (d_both); }; + __INLINE__ void next (s_node_ptr l_next) { d_next = l_next; }; + __INLINE__ void prev (s_node_ptr l_prev) { d_prev = l_prev; }; + __INLINE__ void both (s_both* l_both) { d_both = l_both; }; +}; + +template class circular_linked_list { + typedef s_node* s_node_ptr; + +private: + s_node_ptr d_current, d_iterate, d_available, d_inUse; + UInt32 d_n_nodes, d_n_used; + mld_mutex_ptr d_internal; + mld_condition_ptr d_ioBlock; + +public: + circular_linked_list (UInt32 n_nodes) { + if (n_nodes == 0) + throw std::runtime_error ("circular_linked_list(): n_nodes == 0"); + + d_iterate = NULL; + d_n_nodes = n_nodes; + d_n_used = 0; + s_node_ptr l_prev, l_next; + d_inUse = d_current = l_next = l_prev = NULL; + + l_prev = new s_node (); + l_prev->set_available (); + l_prev->next (l_prev); + l_prev->prev (l_prev); + if (n_nodes > 1) { + l_next = new s_node (l_prev, l_prev); + l_next->set_available (); + l_next->next (l_prev); + l_next->prev (l_prev); + l_prev->next (l_next); + l_prev->prev (l_next); + if (n_nodes > 2) { + UInt32 n = n_nodes - 2; + while (n-- > 0) { + d_current = new s_node (l_prev, l_next); + d_current->set_available (); + d_current->prev (l_prev); + d_current->next (l_next); + l_prev->next (d_current); + l_next->prev (d_current); + l_next = d_current; + d_current = NULL; + } + } + } + d_available = d_current = l_prev; + d_ioBlock = new mld_condition (); + d_internal = d_ioBlock->mutex (); + }; + + ~circular_linked_list () { + iterate_start (); + s_node_ptr l_node = iterate_next (); + while (l_node) { + delete l_node; + l_node = iterate_next (); + } + delete d_ioBlock; + d_ioBlock = NULL; + d_available = d_inUse = d_iterate = d_current = NULL; + d_n_used = d_n_nodes = 0; + }; + + s_node_ptr find_next_available_node () { + d_internal->lock (); +// find an available node + s_node_ptr l_node = d_available; + DEBUG (fprintf (stderr, "w ");); + while (! l_node) { + DEBUG (fprintf (stderr, "x\n");); + // the ioBlock condition will automatically unlock() d_internal + d_ioBlock->wait (); + // and lock() is here + DEBUG (fprintf (stderr, "y\n");); + l_node = d_available; + } + DEBUG (fprintf (stderr, "::f_n_a_n: #u = %ld, node = %p\n", + num_used(), l_node);); +// remove this one from the current available list + if (num_available () == 1) { +// last one, just set available to NULL + d_available = NULL; + } else + d_available = l_node->next (); + l_node->remove (); +// add is to the inUse list + if (! d_inUse) + d_inUse = l_node; + else + l_node->insert_before (d_inUse); + d_n_used++; + l_node->set_not_available (); + d_internal->unlock (); + return (l_node); + }; + + void make_node_available (s_node_ptr l_node) { + if (!l_node) return; + d_internal->lock (); + DEBUG (fprintf (stderr, "::m_n_a: #u = %ld, node = %p\n", + num_used(), l_node);); +// remove this node from the inUse list + if (num_used () == 1) { +// last one, just set inUse to NULL + d_inUse = NULL; + } else + d_inUse = l_node->next (); + l_node->remove (); +// add this node to the available list + if (! d_available) + d_available = l_node; + else + l_node->insert_before (d_available); + d_n_used--; + + DEBUG (fprintf (stderr, "s%ld ", d_n_used);); +// signal the condition when new data arrives + d_ioBlock->signal (); + DEBUG (fprintf (stderr, "t ");); + +// unlock the mutex for thread safety + d_internal->unlock (); + }; + + __INLINE__ void iterate_start () { d_iterate = d_current; }; + + s_node_ptr iterate_next () { +#if 0 +// lock the mutex for thread safety + d_internal->lock (); +#endif + s_node_ptr l_this = NULL; + if (d_iterate) { + l_this = d_iterate; + d_iterate = d_iterate->next (); + if (d_iterate == d_current) + d_iterate = NULL; + } +#if 0 +// unlock the mutex for thread safety + d_internal->unlock (); +#endif + return (l_this); + }; + + __INLINE__ T object () { return (d_current->d_object); }; + __INLINE__ void object (T l_object) { d_current->d_object = l_object; }; + __INLINE__ UInt32 num_nodes () { return (d_n_nodes); }; + __INLINE__ UInt32 num_used () { return (d_n_used); }; + __INLINE__ void num_used (UInt32 l_n_used) { d_n_used = l_n_used; }; + __INLINE__ UInt32 num_available () { return (d_n_nodes - d_n_used); }; + __INLINE__ void num_used_inc (void) { + if (d_n_used < d_n_nodes) ++d_n_used; + }; + __INLINE__ void num_used_dec (void) { + if (d_n_used != 0) --d_n_used; +// signal the condition that new data has arrived + d_ioBlock->signal (); + }; + __INLINE__ bool in_use () { return (d_n_used != 0); }; +}; + +template class s_both +{ +private: + s_node* d_node; + void* d_this; +public: + __INLINE__ s_both (s_node* l_node, void* l_this) + : d_node (l_node), d_this (l_this) {}; + __INLINE__ ~s_both () {}; + __INLINE__ s_node* node () { return (d_node); }; + __INLINE__ void* This () { return (d_this); }; + __INLINE__ void set (s_node* l_node, void* l_this) { + d_node = l_node; d_this = l_this;}; +}; + +#endif /* _CIRCULAR_LINKED_LIST_H_ */ diff --git a/usrp/host/lib/darwin_libusb.h b/usrp/host/lib/legacy/darwin_libusb.h similarity index 100% rename from usrp/host/lib/darwin_libusb.h rename to usrp/host/lib/legacy/darwin_libusb.h diff --git a/usrp/host/lib/legacy/db_base.cc b/usrp/host/lib/legacy/db_base.cc new file mode 100644 index 00000000..80c6d466 --- /dev/null +++ b/usrp/host/lib/legacy/db_base.cc @@ -0,0 +1,252 @@ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. +// + +#include +#include + +#if 0 +tune_result::tune_result(double baseband, double dxc, double residual, bool inv) + : ok(false), baseband_freq(baseband), dxc_freq(dxc), + residual_freq(residual), inverted(inv) +{ +} + +tune_result::~tune_result() +{ +} +#endif + + +/*****************************************************************************/ + +db_base::db_base(usrp_basic_sptr usrp, int which) + : d_is_shutdown(false), d_raw_usrp(usrp.get()), d_which(which), d_lo_offset(0.0) +{ +} + +db_base::~db_base() +{ + shutdown(); +} + +void +db_base::shutdown() +{ + if (!d_is_shutdown){ + d_is_shutdown = true; + // do whatever there is to do to shutdown + } +} + +int +db_base::dbid() +{ + return usrp()->daughterboard_id(d_which); +} + +std::string +db_base::name() +{ + return usrp_dbid_to_string(dbid()); +} + +std::string +db_base::side_and_name() +{ + if(d_which == 0) + return "A: " + name(); + else + return "B: " + name(); +} + +// Function to bypass ADC buffers. Any board which is DC-coupled +// should bypass the buffers + +bool +db_base::bypass_adc_buffers(bool bypass) +{ + //if(d_tx) { + // throw std::runtime_error("TX Board has no adc buffers\n"); + //} + + bool ok = true; + if(d_which==0) { + ok &= usrp()->set_adc_buffer_bypass(0, bypass); + ok &= usrp()->set_adc_buffer_bypass(1, bypass); + } + else { + ok &= usrp()->set_adc_buffer_bypass(2, bypass); + ok &= usrp()->set_adc_buffer_bypass(3, bypass); + } + return ok; +} + +bool +db_base::set_atr_mask(int v) +{ + // Set Auto T/R mask. + return usrp()->write_atr_mask(d_which, v); +} + +bool +db_base::set_atr_txval(int v) +{ + // Set Auto T/R register value to be used when transmitting. + return usrp()->write_atr_txval(d_which, v); +} + +bool +db_base::set_atr_rxval(int v) +{ + // Set Auto T/R register value to be used when receiving. + return usrp()->write_atr_rxval(d_which, v); +} + +bool +db_base::set_atr_tx_delay(int v) +{ + // Set Auto T/R delay (in clock ticks) from when Tx fifo gets data to + // when T/R switches. + return usrp()->write_atr_tx_delay(v); +} + +bool +db_base::set_atr_rx_delay(int v) +{ + // Set Auto T/R delay (in clock ticks) from when Tx fifo goes empty to + // when T/R switches. + return usrp()->write_atr_rx_delay(v); +} + +bool +db_base::i_and_q_swapped() +{ + // Return True if this is a quadrature device and (for RX) ADC 0 is Q + // or (for TX) DAC 0 is Q + return false; +} + +bool +db_base::spectrum_inverted() +{ + // Return True if the dboard gives an inverted spectrum + + return false; +} + +bool +db_base::set_enable(bool on) +{ + // For tx daughterboards, this controls the transmitter enable. + + return true; // default is nop +} + +bool +db_base::set_auto_tr(bool on) +{ + // Enable automatic Transmit/Receive switching (ATR). + // + // Should be overridden in subclasses that care. This will typically + // set the atr_mask, txval and rxval. + + return true; +} + +bool +db_base::set_lo_offset(double offset) +{ + // Set how much LO is offset from requested frequency + + d_lo_offset = offset; + return true; +} + +bool +db_base::select_rx_antenna(int which_antenna) +{ + // Specify which antenna port to use for reception. + // Should be overriden by daughterboards that care. + + return which_antenna == 0; +} + +bool +db_base::select_rx_antenna(const std::string &which_antenna) +{ + // Specify which antenna port to use for reception. + // Should be overriden by daughterboards that care. + + return which_antenna == ""; +} + + +// Reference Clock section +// +// Control whether a reference clock is sent to the daughterboards, +// and what frequency +// +// Bit 7 -- 1 turns on refclk, 0 allows IO use +// Bits 6:0 Divider value +// + +double +db_base::_refclk_freq() +{ + return usrp()->fpga_master_clock_freq() / _refclk_divisor(); +} + +void +db_base::_enable_refclk(bool enable) +{ + int CLOCK_OUT = 1; // Clock is on lowest bit + int REFCLK_ENABLE = 0x80; + int REFCLK_DIVISOR_MASK = 0x7f; + + if(enable) { + usrp()->_write_oe(d_which, CLOCK_OUT, CLOCK_OUT); // output enable + usrp()->write_refclk(d_which, (_refclk_divisor() & REFCLK_DIVISOR_MASK) | REFCLK_ENABLE); + } + else { + usrp()->write_refclk(d_which, 0); + } +} + +int +db_base::_refclk_divisor() +{ + // Return value to stick in REFCLK_DIVISOR register + throw std::runtime_error("_reflck_divisor() called from base class\n");; +} + +bool +db_base::set_bw(float bw) +{ + // Set baseband bandwidth (board specific) + // Should be overriden by boards that implement variable IF filtering (e.g., DBSRX) + return false; +} + +std::ostream &operator<<(std::ostream &os, db_base &x) +{ + os << x.side_and_name(); + return os; +} diff --git a/usrp/host/lib/legacy/db_base.h b/usrp/host/lib/legacy/db_base.h new file mode 100644 index 00000000..35470891 --- /dev/null +++ b/usrp/host/lib/legacy/db_base.h @@ -0,0 +1,119 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. +// + +#ifndef INCLUDED_DB_BASE_H +#define INCLUDED_DB_BASE_H + +#include +#include +#include +#include + +class db_base; +typedef boost::shared_ptr db_base_sptr; + +class usrp_basic; +typedef boost::shared_ptr usrp_basic_sptr; + +struct freq_result_t +{ + bool ok; + double baseband_freq; +}; + +/******************************************************************************/ + +/*! + * \brief Abstract base class for all USRP daughterboards + * \ingroup usrp + */ +class db_base +{ + protected: + bool d_is_shutdown; + usrp_basic *d_raw_usrp; + int d_which; + double d_lo_offset; + + void _enable_refclk(bool enable); + virtual double _refclk_freq(); + virtual int _refclk_divisor(); + + usrp_basic *usrp(){ + return d_raw_usrp; + } + + public: + db_base(boost::shared_ptr usrp, int which); + virtual ~db_base(); + + int dbid(); + std::string name(); + std::string side_and_name(); + int which() { return d_which; } + + bool bypass_adc_buffers(bool bypass); + bool set_atr_mask(int v); + bool set_atr_txval(int v); + bool set_atr_rxval(int v); + bool set_atr_tx_delay(int v); + bool set_atr_rx_delay(int v); + bool set_lo_offset(double offset); + double lo_offset() { return d_lo_offset; } + + + //////////////////////////////////////////////////////// + // derived classes should override the following methods + +protected: + friend class usrp_basic; + + /*! + * Called to shutdown daughterboard. Called from dtor and usrp_basic dtor. + * + * N.B., any class that overrides shutdown MUST call shutdown in its destructor. + */ + virtual void shutdown(); + + +public: + virtual float gain_min() = 0; + virtual float gain_max() = 0; + virtual float gain_db_per_step() = 0; + virtual double freq_min() = 0; + virtual double freq_max() = 0; + virtual struct freq_result_t set_freq(double target_freq) = 0; + virtual bool set_gain(float gain) = 0; + virtual bool is_quadrature() = 0; + virtual bool i_and_q_swapped(); + virtual bool spectrum_inverted(); + virtual bool set_enable(bool on); + virtual bool set_auto_tr(bool on); + virtual bool select_rx_antenna(int which_antenna); + virtual bool select_rx_antenna(const std::string &which_antenna); + virtual bool set_bw(float bw); +}; + + +std::ostream & operator<<(std::ostream &os, db_base &x); + +#endif /* INCLUDED_DB_BASE_H */ diff --git a/usrp/host/lib/legacy/db_base.i b/usrp/host/lib/legacy/db_base.i new file mode 100644 index 00000000..bd5483aa --- /dev/null +++ b/usrp/host/lib/legacy/db_base.i @@ -0,0 +1,102 @@ +/* -*- c++ -*- */ +// +// Copyright 2008,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. +// + + +%{ +#include "db_base.h" +%} + +%include + +class usrp_tune_result +{ +public: + usrp_tune_result(double baseband=0, double dxc=0, + double residual=0, bool inv=0); + ~usrp_tune_result(); + + double baseband_freq; + double dxc_freq; + double residual_freq; + bool inverted; +}; + +struct freq_result_t +{ + bool ok; + double baseband_freq; +}; + +class db_base +{ + private: + db_base(boost::shared_ptr usrp, int which); + + public: + virtual ~db_base(); + + int dbid(); + std::string name(); + std::string side_and_name(); + int which() { return d_which; } + + bool bypass_adc_buffers(bool bypass); + bool set_atr_mask(int v); + bool set_atr_txval(int v); + bool set_atr_rxval(int v); + bool set_atr_tx_delay(int v); + bool set_atr_rx_delay(int v); + bool set_lo_offset(double offset); + double lo_offset() { return d_lo_offset; } + + virtual float gain_min() = 0; + virtual float gain_max() = 0; + virtual float gain_db_per_step() = 0; + virtual double freq_min() = 0; + virtual double freq_max() = 0; + virtual struct freq_result_t set_freq(double target_freq) = 0; + virtual bool set_gain(float gain) = 0; + virtual bool is_quadrature() = 0; + virtual bool i_and_q_swapped(); + virtual bool spectrum_inverted(); + virtual bool set_enable(bool on); + virtual bool set_auto_tr(bool on); + virtual bool select_rx_antenna(int which_antenna); + virtual bool select_rx_antenna(const std::string &antenna); + virtual bool set_bw(float bw); +}; + +// Create templates for db's, vectors of db's, and vector of vectors of db's +typedef boost::shared_ptr db_base_sptr; +%template(db_base_sptr) boost::shared_ptr; +%template(db_base_sptr_vector) std::vector; +%template(db_base_sptr_vector_vector) std::vector >; + +// 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 +%pythoncode %{ + db_base_sptr.__repr__ = lambda self: "" % (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()) + +%} diff --git a/usrp/host/lib/legacy/db_base_impl.h b/usrp/host/lib/legacy/db_base_impl.h new file mode 100644 index 00000000..bb4d95d7 --- /dev/null +++ b/usrp/host/lib/legacy/db_base_impl.h @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_DB_BASE_IMPL_H +#define INCLUDED_DB_BASE_IMPL_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#endif /* INCLUDED_DB_BASE_IMPL_H */ diff --git a/usrp/host/lib/legacy/db_basic.cc b/usrp/host/lib/legacy/db_basic.cc new file mode 100644 index 00000000..4bafc939 --- /dev/null +++ b/usrp/host/lib/legacy/db_basic.cc @@ -0,0 +1,263 @@ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include + + +db_basic_tx::db_basic_tx(boost::shared_ptr usrp, int which) + : db_base(usrp, which) +{ + // Handler for Basic Tx daughterboards. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0 or 1 corresponding to TX_A or TX_B respectively + + set_gain((gain_min() + gain_max()) / 2); // initialize gain +} + +db_basic_tx::~db_basic_tx() +{ +} + +double +db_basic_tx::freq_min() +{ + return -90e9; +} + +double +db_basic_tx::freq_max() +{ + return 90e9; +} + +struct freq_result_t +db_basic_tx::set_freq(double target_freq) +{ + // Set the frequency. + // + // @param freq: target RF frequency in Hz + // @type freq: double + // + // @returns (ok, actual_baseband_freq) where: + // ok is True or False and indicates success or failure, + // actual_baseband_freq is the RF frequency that corresponds to DC in the IF. + + struct freq_result_t args = {false, 0}; + args.ok = true; + args.baseband_freq = 0.0; + return args; +} + +float +db_basic_tx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_basic_tx::gain_max() +{ + return usrp()->pga_max(); +} + +float +db_basic_tx::gain_db_per_step() +{ + return usrp()->pga_db_per_step(); +} + +bool +db_basic_tx::set_gain(float gain) +{ + // Set the gain. + // + // @param gain: gain in decibels + // @returns True/False + + bool ok = usrp()->set_pga(d_which * 2 + 0, gain); + ok = ok && usrp()->set_pga(d_which * 2 + 1, gain); + return ok; +} + +bool +db_basic_tx::is_quadrature() +{ + // Return True if this board requires both I & Q analog channels. + + return true; +} + + +/******************************************************************************/ + + +db_basic_rx::db_basic_rx(usrp_basic_sptr usrp, int which, int subdev) + : db_base(usrp, which) +{ + // Handler for Basic Rx daughterboards. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0 or 1 corresponding to TX_A or TX_B respectively + // @param subdev: which analog i/o channel: 0 or 1 + // @type subdev: int + + d_subdev = subdev; + + bypass_adc_buffers(true); + + if(0) { // Doing this would give us a different default than the historical values... + set_gain(float(gain_min() + gain_max()) / 2.0); // initialize gain + } +} + +db_basic_rx::~db_basic_rx() +{ +} + +double +db_basic_rx::freq_min() +{ + return -90e9; +} + +double +db_basic_rx::freq_max() +{ + return 90e9; +} + +struct freq_result_t +db_basic_rx::set_freq(double target_freq) +{ + // Set the frequency. + // + // @param freq: target RF frequency in Hz + // @type freq: double + // + // @returns (ok, actual_baseband_freq) where: + // ok is True or False and indicates success or failure, + // actual_baseband_freq is the RF frequency that corresponds to DC in the IF. + + struct freq_result_t args = {true, 0.0}; + return args; +} + +float +db_basic_rx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_basic_rx::gain_max() +{ + return usrp()->pga_max(); +} + +float +db_basic_rx::gain_db_per_step() +{ + return usrp()->pga_db_per_step(); +} + +bool +db_basic_rx::set_gain(float gain) +{ + // Set the gain. + // + // @param gain: gain in decibels + // @returns True/False + + return usrp()->set_pga(d_which * 2 + d_subdev, gain); +} + +bool +db_basic_rx::is_quadrature() +{ + // Return True if this board requires both I & Q analog channels. + + // This bit of info is useful when setting up the USRP Rx mux register. + + return (d_subdev == 2); +} + + + +/******************************************************************************/ + + +db_lf_tx::db_lf_tx(usrp_basic_sptr usrp, int which) + : db_basic_tx(usrp, which) +{ + // Handler for Low Freq Tx daughterboards. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively +} + +db_lf_tx::~db_lf_tx() +{ +} + +double +db_lf_tx::freq_min() +{ + return -32e6; +} + +double +db_lf_tx::freq_max() +{ + return 32e6; +} + +/******************************************************************************/ + + +db_lf_rx::db_lf_rx(usrp_basic_sptr usrp, int which, int subdev) + : db_basic_rx(usrp, which, subdev) +{ + // Handler for Low Freq Rx daughterboards. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively + // @param subdev: which analog i/o channel: 0 or 1 + // @type subdev: int +} + +db_lf_rx::~db_lf_rx() +{ +} + +double +db_lf_rx::freq_min() +{ + return 0.0; +} + +double +db_lf_rx::freq_max() +{ + return 32e6; +} + + diff --git a/usrp/host/lib/legacy/db_basic.h b/usrp/host/lib/legacy/db_basic.h new file mode 100644 index 00000000..4dd92b99 --- /dev/null +++ b/usrp/host/lib/legacy/db_basic.h @@ -0,0 +1,99 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_BASIC_H +#define DB_BASIC_H + +#include + + +/******************************************************************************/ + + +class db_basic_tx : public db_base +{ +public: + db_basic_tx(usrp_basic_sptr usrp, int which); + ~db_basic_tx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + double freq_min(); + double freq_max(); + struct freq_result_t set_freq(double target_freq); + bool set_gain(float gain); + bool is_quadrature(); +}; + + +/******************************************************************************/ + + +class db_basic_rx : public db_base +{ + public: + db_basic_rx(usrp_basic_sptr usrp, int which, int subdev); + ~db_basic_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + double freq_min(); + double freq_max(); + struct freq_result_t set_freq(double target_freq); + bool set_gain(float gain); + bool is_quadrature(); + +private: + int d_subdev; +}; + + +/******************************************************************************/ + + +class db_lf_rx : public db_basic_rx +{ + public: + db_lf_rx(usrp_basic_sptr usrp, int which, int subdev); + ~db_lf_rx(); + + double freq_min(); + double freq_max(); +}; + + +/******************************************************************************/ + + +class db_lf_tx : public db_basic_tx +{ + public: + db_lf_tx(usrp_basic_sptr usrp, int which); + ~db_lf_tx(); + + double freq_min(); + double freq_max(); +}; + + +#endif diff --git a/usrp/host/lib/legacy/db_boards.cc b/usrp/host/lib/legacy/db_boards.cc new file mode 100644 index 00000000..b537698b --- /dev/null +++ b/usrp/host/lib/legacy/db_boards.cc @@ -0,0 +1,218 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +std::vector +instantiate_dbs(int dbid, usrp_basic_sptr usrp, int which_side) +{ + std::vector db; + + switch(dbid) { + + case(USRP_DBID_BASIC_TX): + db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side))); + break; + + case(USRP_DBID_BASIC_RX): + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0))); + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1))); + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 2))); + break; + + case(USRP_DBID_LF_TX): + db.push_back(db_base_sptr(new db_lf_tx(usrp, which_side))); + break; + + case(USRP_DBID_LF_RX): + db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 0))); + db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 1))); + db.push_back(db_base_sptr(new db_lf_rx(usrp, which_side, 2))); + break; + + case(USRP_DBID_DBS_RX): + db.push_back(db_base_sptr(new db_dbs_rx(usrp, which_side))); + break; + + case(USRP_DBID_TV_RX): + db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 43.75e6, 5.75e6))); + break; + case(USRP_DBID_TV_RX_REV_2): + db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 44e6, 20e6))); + break; + case(USRP_DBID_TV_RX_REV_3): + db.push_back(db_base_sptr(new db_tv_rx(usrp, which_side, 44e6, 20e6))); + break; + + case(USRP_DBID_FLEX_2400_TX): + db.push_back(db_base_sptr(new db_flexrf_2400_tx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_2400_RX): + db.push_back(db_base_sptr(new db_flexrf_2400_rx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1200_TX): + db.push_back(db_base_sptr(new db_flexrf_1200_tx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1200_RX): + db.push_back(db_base_sptr(new db_flexrf_1200_rx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1800_TX): + db.push_back(db_base_sptr(new db_flexrf_1800_tx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1800_RX): + db.push_back(db_base_sptr(new db_flexrf_1800_rx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_900_TX): + db.push_back(db_base_sptr(new db_flexrf_900_tx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_900_RX): + db.push_back(db_base_sptr(new db_flexrf_900_rx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_400_TX): + db.push_back(db_base_sptr(new db_flexrf_400_tx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_400_RX): + db.push_back(db_base_sptr(new db_flexrf_400_rx(usrp, which_side))); + break; + case(USRP_DBID_FLEX_2400_TX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_2400_tx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_2400_RX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_2400_rx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1800_TX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_1800_tx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1800_RX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_1800_rx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1200_TX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_1200_tx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1200_RX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_1200_rx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_900_TX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_900_tx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_900_RX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_900_rx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_400_TX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_400_tx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_400_RX_MIMO_A): + db.push_back(db_base_sptr(new db_flexrf_400_rx_mimo_a(usrp, which_side))); + break; + case(USRP_DBID_FLEX_2400_TX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_2400_tx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_2400_RX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_2400_rx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1800_TX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_1800_tx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1800_RX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_1800_rx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1200_TX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_1200_tx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_1200_RX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_1200_rx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_900_TX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_900_tx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_900_RX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_900_rx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_400_TX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_400_tx_mimo_b(usrp, which_side))); + break; + case(USRP_DBID_FLEX_400_RX_MIMO_B): + db.push_back(db_base_sptr(new db_flexrf_400_rx_mimo_b(usrp, which_side))); + break; + + case(USRP_DBID_XCVR2450_TX): + db.push_back(db_base_sptr(new db_xcvr2450_tx(usrp, which_side))); + break; + case(USRP_DBID_XCVR2450_RX): + db.push_back(db_base_sptr(new db_xcvr2450_rx(usrp, which_side))); + break; + +#if 0 // FIXME wbx doesn't compile + case(USRP_DBID_WBX_LO_TX): + db.push_back(db_base_sptr(new db_wbx_lo_tx(usrp, which_side))); + break; + case(USRP_DBID_WBX_LO_RX): + db.push_back(db_base_sptr(new db_wbx_lo_rx(usrp, which_side))); + break; +#endif + + case(USRP_DBID_DTT754): + db.push_back(db_base_sptr(new db_dtt754(usrp, which_side))); + break; + case(USRP_DBID_DTT768): + db.push_back(db_base_sptr(new db_dtt768(usrp, which_side))); + break; + + case(-1): + if (boost::dynamic_pointer_cast(usrp)){ + db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side))); + } + else { + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0))); + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1))); + } + break; + + case(-2): + default: + if (boost::dynamic_pointer_cast(usrp)){ + fprintf(stderr, "\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a \"Basic Tx.\"\n"); + fprintf(stderr, "Warning: This is almost certainly wrong... Use appropriate burn-*-eeprom utility.\n\n"); + db.push_back(db_base_sptr(new db_basic_tx(usrp, which_side))); + } + else { + fprintf(stderr, "\n\aWarning: Treating daughterboard with invalid EEPROM contents as if it were a \"Basic Rx.\"\n"); + fprintf(stderr, "Warning: This is almost certainly wrong... Use appropriate burn-*-eeprom utility.\n\n"); + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 0))); + db.push_back(db_base_sptr(new db_basic_rx(usrp, which_side, 1))); + } + break; + } + + return db; +} diff --git a/usrp/host/lib/legacy/db_boards.h b/usrp/host/lib/legacy/db_boards.h new file mode 100644 index 00000000..037c4603 --- /dev/null +++ b/usrp/host/lib/legacy/db_boards.h @@ -0,0 +1,33 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. +// + +#ifndef DB_BOARDS_H +#define DB_BOARDS_H + +#include +#include + +std::vector instantiate_dbs(int dbid, usrp_basic_sptr usrp, int which_side); + +#endif + + diff --git a/usrp/host/lib/legacy/db_dbs_rx.cc b/usrp/host/lib/legacy/db_dbs_rx.cc new file mode 100644 index 00000000..6094f913 --- /dev/null +++ b/usrp/host/lib/legacy/db_dbs_rx.cc @@ -0,0 +1,497 @@ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include +#include +#include + + +/*****************************************************************************/ + + +db_dbs_rx::db_dbs_rx(usrp_basic_sptr _usrp, int which) + : db_base(_usrp, which) +{ + // Control DBS receiver based USRP daughterboard. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0, 1 corresponding to RX_A or RX_B respectively + + usrp()->_write_oe(d_which, 0x0001, 0x0001); + if(which == 0) { + d_i2c_addr = 0x67; + } + else { + d_i2c_addr = 0x65; + } + + d_n = 950; + d_div2 = 0; + d_osc = 5; + d_cp = 3; + d_r = 4; + d_r_int = 1; + d_fdac = 127; + d_m = 2; + d_dl = 0; + d_ade = 0; + d_adl = 0; + d_gc1 = 0; + d_gc2 = 31; + d_diag = 0; + + _enable_refclk(true); + + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain + + bypass_adc_buffers(true); +} + +db_dbs_rx::~db_dbs_rx() +{ + shutdown(); +} + +void +db_dbs_rx::shutdown() +{ + if (!d_is_shutdown){ + d_is_shutdown = true; + // do whatever there is to do to shutdown orderly + _enable_refclk(false); + } +} + +void +db_dbs_rx::_write_reg (int regno, int v) +{ + //regno is in [0,5], v is value to write to register""" + assert (0 <= regno && regno <= 5); + std::vector args(2); + args[0] = regno; + args[1] = v; + usrp()->write_i2c (d_i2c_addr, int_seq_to_str (args)); +} + +void +db_dbs_rx::_write_regs (int starting_regno, const std::vector &vals) +{ + // starting_regno is in [0,5], + // vals is a seq of integers to write to consecutive registers""" + + //FIXME + std::vector args; + args.push_back(starting_regno); + args.insert(args.end(), vals.begin(), vals.end()); + usrp()->write_i2c (d_i2c_addr, int_seq_to_str (args)); +} + +std::vector +db_dbs_rx::_read_status () +{ + //If successful, return list of two ints: [status_info, filter_DAC]""" + std::string s = usrp()->read_i2c (d_i2c_addr, 2); + if(s.size() != 2) { + std::vector ret(0); + return ret; + } + return str_to_int_seq (s); +} + +void +db_dbs_rx::_send_reg(int regno) +{ + assert(0 <= regno && regno <= 5); + if(regno == 0) + _write_reg(0,(d_div2<<7) + (d_n>>8)); + if(regno == 1) + _write_reg(1,d_n & 255); + if(regno == 2) + _write_reg(2,d_osc + (d_cp<<3) + (d_r_int<<5)); + if(regno == 3) + _write_reg(3,d_fdac); + if(regno == 4) + _write_reg(4,d_m + (d_dl<<5) + (d_ade<<6) + (d_adl<<7)); + if(regno == 5) + _write_reg(5,d_gc2 + (d_diag<<5)); +} + +// BW setting +void +db_dbs_rx::_set_m(int m) +{ + assert(m>0 && m<32); + d_m = m; + _send_reg(4); +} + +void +db_dbs_rx::_set_fdac(int fdac) +{ + assert(fdac>=0 && fdac<128); + d_fdac = fdac; + _send_reg(3); +} + +bool +db_dbs_rx::set_bw (float bw) +{ + if (bw < 1e6 || bw > 33e6) { + fprintf(stderr, "db_dbs_rx::set_bw: bw (=%f) must be between 1e6 and 33e6 inclusive\n", bw); + return false; + } + + // struct bw_t ret = {0, 0, 0}; + int m_max, m_min, m_test, fdac_test; + if(bw >= 4e6) + m_max = int(std::min(31, (int)floor(_refclk_freq()/1e6))); + else if(bw >= 2e6) // Outside of Specs! + m_max = int(std::min(31, (int)floor(_refclk_freq()/.5e6))); + else // Way outside of Specs! + m_max = int(std::min(31, (int)floor(_refclk_freq()/.25e6))); + + m_min = int(ceil(_refclk_freq()/2.5e6)); + m_test = m_max; + while(m_test >= m_min) { + fdac_test = static_cast(round(((bw * m_test / _refclk_freq())-4)/.145)); + if(fdac_test > 127) + m_test = m_test - 1; + else + break; + } + + if(m_test>=m_min && fdac_test>=0) { + _set_m(m_test); + _set_fdac(fdac_test); + + //ret.m = d_m; + //ret.fdac = d_fdac; + //ret.div = _refclk_freq()/d_m*(4+0.145*d_fdac); + } + else { + fprintf(stderr, "db_dbs_rx::set_bw: failed\n"); + return false; + } + + return true; +} + +// Gain setting +void +db_dbs_rx::_set_dl(int dl) +{ + assert(dl == 0 || dl == 1); + d_dl = dl; + _send_reg(4); +} + +void +db_dbs_rx::_set_gc2(int gc2) +{ + assert(gc2<32 && gc2>=0); + d_gc2 = gc2; + _send_reg(5); +} + +void +db_dbs_rx::_set_gc1(int gc1) +{ + assert(gc1>=0 && gc1<4096); + d_gc1 = gc1; + usrp()->write_aux_dac(d_which, 0, gc1); +} + +void +db_dbs_rx::_set_pga(int pga_gain) +{ + assert(pga_gain>=0 && pga_gain<=20); + if(d_which == 0) { + usrp()->set_pga (0, pga_gain); + usrp()->set_pga (1, pga_gain); + } + else { + usrp()->set_pga (2, pga_gain); + usrp()->set_pga (3, pga_gain); + } +} + +float +db_dbs_rx::gain_min() +{ + return 0; +} + +float +db_dbs_rx::gain_max() +{ + return 104; +} + +float +db_dbs_rx::gain_db_per_step() +{ + return 1; +} + +bool +db_dbs_rx::set_gain(float gain) +{ + // Set the gain. + // + // @param gain: gain in decibels + // @returns True/False + + if(!(gain>=0 && gain<105)) { + throw std::runtime_error("gain out of range\n"); + } + + int gc1=0, gc2=0, dl=0, pga=0; + + if(gain < 56) { + gc1 = int((-gain*1.85/56.0 + 2.6)*4096.0/3.3); + gain = 0; + } + else { + gc1 = 0; + gain -= 56; + } + + if(gain < 24) { + gc2 = static_cast(round(31.0 * (1-gain/24.0))); + gain = 0; + } + else { + gc2 = 0; + gain -=24; + } + + if(gain >= 4.58) { + dl = 1; + gain -= 4.58; + } + + pga = gain; + _set_gc1(gc1); + _set_gc2(gc2); + _set_dl(dl); + _set_pga(pga); + + return true; +} + +// Frequency setting +void +db_dbs_rx::_set_osc(int osc) +{ + assert(osc>=0 && osc<8); + d_osc = osc; + _send_reg(2); +} + +void +db_dbs_rx::_set_cp(int cp) +{ + assert(cp>=0 && cp<4); + d_cp = cp; + _send_reg(2); +} + +void +db_dbs_rx::_set_n(int n) +{ + assert(n>256 && n<32768); + d_n = n; + _send_reg(0); + _send_reg(1); +} + +void +db_dbs_rx::_set_div2(int div2) +{ + assert(div2 == 0 || div2 == 1); + d_div2 = div2; + _send_reg(0); +} + +void +db_dbs_rx::_set_r(int r) +{ + assert(r>=0 && r<128); + d_r = r; + d_r_int = static_cast(round(log10(r)/log10(2)) - 1); + _send_reg(2); +} + +// FIXME How do we handle ADE and ADL properly? +void +db_dbs_rx::_set_ade(int ade) +{ + assert(ade == 0 || ade == 1); + d_ade = ade; + _send_reg(4); +} + +double +db_dbs_rx::freq_min() +{ + return 500e6; +} + +double +db_dbs_rx::freq_max() +{ + return 2.6e9; +} + +struct freq_result_t +db_dbs_rx::set_freq(double freq) +{ + // Set the frequency. + // + // @param freq: target RF frequency in Hz + // @type freq: double + // + // @returns (ok, actual_baseband_freq) where: + // ok is True or False and indicates success or failure, + // actual_baseband_freq is RF frequency that corresponds to DC in the IF. + + freq_result_t args = {false, 0}; + + if(!(freq>=freq_min() && freq<=freq_max())) { + return args; + } + + double vcofreq; + if(freq<1150e6) { + _set_div2(0); + vcofreq = 4 * freq; + } + else { + _set_div2(1); + vcofreq = 2 * freq; + } + + _set_ade(1); + int rmin = std::max(2, (int)(_refclk_freq()/2e6)); + int rmax = std::min(128, (int)(_refclk_freq()/500e3)); + int r = 2; + int n = 0; + int best_r = 2; + int best_n = 0; + int best_delta = 10e6; + int delta; + + while(r <= rmax) { + n = static_cast(round(freq/(_refclk_freq()/r))); + if(r(round(best_n))); + + int vco; + if(vcofreq < 2433e6) + vco = 0; + else if(vcofreq < 2711e6) + vco=1; + else if(vcofreq < 3025e6) + vco=2; + else if(vcofreq < 3341e6) + vco=3; + else if(vcofreq < 3727e6) + vco=4; + else if(vcofreq < 4143e6) + vco=5; + else if(vcofreq < 4493e6) + vco=6; + else + vco=7; + + _set_osc(vco); + + // Set CP current + int adc_val = 0; + std::vector bytes(2); + while(adc_val == 0 || adc_val == 7) { + bytes = _read_status(); + adc_val = bytes[0] >> 2; + if(adc_val == 0) { + if(vco <= 0) { + return args; + } + else { + vco = vco - 1; + } + } + else if(adc_val == 7) { + if(vco >= 7) { + return args; + } + else { + vco = vco + 1; + } + } + _set_osc(vco); + } + + if(adc_val == 1 || adc_val == 2) { + _set_cp(1); + } + else if(adc_val == 3 || adc_val == 4) { + _set_cp(2); + } + else { + _set_cp(3); + } + + args.ok = true; + args.baseband_freq = d_n * _refclk_freq() / d_r; + return args; +} + +int +db_dbs_rx::_refclk_divisor() +{ + //Return value to stick in REFCLK_DIVISOR register + return 16; +} + +bool +db_dbs_rx::is_quadrature() +{ + // Return True if this board requires both I & Q analog channels. + return true; +} diff --git a/usrp/host/lib/legacy/db_dbs_rx.h b/usrp/host/lib/legacy/db_dbs_rx.h new file mode 100644 index 00000000..723771f1 --- /dev/null +++ b/usrp/host/lib/legacy/db_dbs_rx.h @@ -0,0 +1,83 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_DBS_RX_H +#define DB_DBS_RX_H + +#include +#include + +#if 0 +struct bw_t { + int m; + int fdac; + float div; +}; +#endif + +class db_dbs_rx : public db_base +{ +private: + int d_osc, d_cp, d_n, d_div2, d_r, d_r_int; + int d_fdac, d_m, d_dl, d_ade, d_adl, d_gc1, d_gc2, d_diag; + int d_i2c_addr; + + // Internal gain functions + void _write_reg(int regno, int v); + void _write_regs(int starting_regno, const std::vector &vals); + std::vector _read_status(); + void _send_reg(int regno); + void _set_m(int m); + void _set_fdac(int fdac); + void _set_dl(int dl); + void _set_gc2(int gc2); + void _set_gc1(int gc1); + void _set_pga(int pga_gain); + + // Internal frequency function + void _set_osc(int osc); + void _set_cp(int cp); + void _set_n(int n); + void _set_div2(int div2); + void _set_r(int r); + void _set_ade(int ade); + + int _refclk_divisor(); + +protected: + void shutdown(); + +public: + db_dbs_rx(usrp_basic_sptr usrp, int which); + ~db_dbs_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + double freq_min(); + double freq_max(); + struct freq_result_t set_freq(double freq); + bool set_gain(float gain); + bool is_quadrature(); + bool set_bw(float bw); +}; + +#endif diff --git a/usrp/host/lib/legacy/db_dtt754.cc b/usrp/host/lib/legacy/db_dtt754.cc new file mode 100644 index 00000000..4a6a1a29 --- /dev/null +++ b/usrp/host/lib/legacy/db_dtt754.cc @@ -0,0 +1,323 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include + +int +control_byte_1() +{ + int RS = 0; // 0 = 166.66kHz reference + int ATP = 7; // Disable internal AGC + return (0x80 | ATP<<3 | RS); +} + +int +control_byte_2() +{ + int STBY = 0; // powered on + int XTO = 1; // turn off xtal out, which we don't have + int ATC = 0; // not clear exactly, possibly speeds up or slows down AGC, which we are not using + + int c = 0xc2 | ATC<<5 | STBY<<4 | XTO; + return c; +} + +int +bandswitch_byte(float freq, float bw) +{ + int P5, CP, BS; + + if(bw>7.5e6) { + P5 = 1; + } + else { + P5 = 0; + } + + if(freq < 121e6) { + CP = 0; + BS = 1; + } + else if(freq < 141e6) { + CP = 1; + BS = 1; + } + else if(freq < 166e6) { + CP = 2; + BS = 1; + } + else if(freq < 182e6) { + CP = 3; + BS = 1; + } + else if(freq < 286e6) { + CP = 0; + BS = 2; + } + else if(freq < 386e6) { + CP = 1; + BS = 2; + } + else if(freq < 446e6) { + CP = 2; + BS = 2; + } + else if(freq < 466e6) { + CP = 3; + BS = 2; + } + else if(freq < 506e6) { + CP = 0; + BS = 8; + } + else if(freq < 761e6) { + CP = 1; + BS = 8; + } + else if(freq < 846e6) { + CP = 2; + BS = 8; + } + else { // limit is ~905 MHz + CP = 3; + BS = 8; + } + return (CP<<6 | P5 << 4 | BS); +} + +db_dtt754::db_dtt754(usrp_basic_sptr _usrp, int which) + : db_base(_usrp, which) +{ + /* + * Control custom DTT75403-based daughterboard. + * + * @param usrp: instance of usrp.source_c + * @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively + * @type which: int + */ + + // FIXME: DTT754 and DTT768 can probably inherit from a DTT class + + if(d_which == 0) { + d_i2c_addr = 0x60; + } + else { + d_i2c_addr = 0x62; + } + + d_bw = 7e6; + d_IF = 36e6; + + d_f_ref = 166.6666e3; + d_inverted = false; + + set_gain((gain_min() + gain_max()) / 2.0); + + bypass_adc_buffers(false); +} + +db_dtt754::~db_dtt754() +{ +} + +float +db_dtt754::gain_min() +{ + return 0; +} + +float +db_dtt754::gain_max() +{ + return 115; +} + +float +db_dtt754::gain_db_per_step() +{ + return 1; +} + +bool +db_dtt754::set_gain(float gain) +{ + assert(gain>=0 && gain<=115); + + float rfgain, ifgain, pgagain; + if(gain > 60) { + rfgain = 60; + gain = gain - 60; + } + else { + rfgain = gain; + gain = 0; + } + + if(gain > 35) { + ifgain = 35; + gain = gain - 35; + } + else { + ifgain = gain; + gain = 0; + } + pgagain = gain; + + _set_rfagc(rfgain); + _set_ifagc(ifgain); + _set_pga(pgagain); + + return true; // can't fail with the assert in place +} + +double +db_dtt754::freq_min() +{ + return 44e6; +} + +double +db_dtt754::freq_max() +{ + return 900e6; +} + +struct freq_result_t +db_dtt754::set_freq(double target_freq) +{ + /* + * @returns (ok, actual_baseband_freq) where: + * ok is True or False and indicates success or failure, + * actual_baseband_freq is the RF frequency that corresponds to DC in the IF. + */ + + freq_result_t ret = {false, 0.0}; + + if(target_freq < freq_min() || target_freq > freq_max()) { + return ret; + } + + double target_lo_freq = target_freq + d_IF; // High side mixing + + int divisor = (int)(0.5+(target_lo_freq / d_f_ref)); + double actual_lo_freq = d_f_ref*divisor; + + if((divisor & ~0x7fff) != 0) { // must be 15-bits or less + return ret; + } + + // build i2c command string + std::vector buf(5); + buf[0] = (divisor >> 8) & 0xff; // DB1 + buf[1] = divisor & 0xff; // DB2 + buf[2] = control_byte_1(); + buf[3] = bandswitch_byte(actual_lo_freq, d_bw); + buf[4] = control_byte_2(); + + bool ok = usrp()->write_i2c(d_i2c_addr, int_seq_to_str (buf)); + + d_freq = actual_lo_freq - d_IF; + + ret.ok = ok; + ret.baseband_freq = actual_lo_freq; + + return ret; + +} + +bool +db_dtt754::is_quadrature() +{ + /* + * Return True if this board requires both I & Q analog channels. + * + * This bit of info is useful when setting up the USRP Rx mux register. + */ + + return false; +} + +bool +db_dtt754::spectrum_inverted() +{ + /* + * The 43.75 MHz version is inverted + */ + + return d_inverted; +} + +bool +db_dtt754::set_bw(float bw) +{ + /* + * Choose the SAW filter bandwidth, either 7MHz or 8MHz) + */ + + d_bw = bw; + set_freq(d_freq); + + return true; // FIXME: propagate set_freq result +} + +void +db_dtt754::_set_rfagc(float gain) +{ + assert(gain <= 60 && gain >= 0); + // FIXME this has a 0.5V step between gain = 60 and gain = 59. + // Why are there two cases instead of a single linear case? + float voltage; + if(gain == 60) { + voltage = 4; + } + else { + voltage = gain/60.0 * 2.25 + 1.25; + } + + int dacword = (int)(4096*voltage/1.22/3.3); // 1.22 = opamp gain + + assert(dacword>=0 && dacword<4096); + usrp()->write_aux_dac(d_which, 1, dacword); +} + +void +db_dtt754::_set_ifagc(float gain) +{ + assert(gain <= 35 && gain >= 0); + float voltage = gain/35.0 * 2.1 + 1.4; + int dacword = (int)(4096*voltage/1.22/3.3); // 1.22 = opamp gain + + assert(dacword>=0 && dacword<4096); + usrp()->write_aux_dac(d_which, 0, dacword); +} + +void +db_dtt754::_set_pga(float pga_gain) +{ + assert(pga_gain >=0 && pga_gain <=20); + if(d_which == 0) { + usrp()->set_pga (0, pga_gain); + } + else { + usrp()->set_pga (2, pga_gain); + } +} diff --git a/usrp/host/lib/legacy/db_dtt754.h b/usrp/host/lib/legacy/db_dtt754.h new file mode 100644 index 00000000..0c104ac0 --- /dev/null +++ b/usrp/host/lib/legacy/db_dtt754.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_DTT754_H +#define DB_DTT754_H + +#include +#include + +class db_dtt754 : public db_base +{ +public: + db_dtt754(usrp_basic_sptr usrp, int which); + ~db_dtt754(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool set_gain(float gain); + + double freq_min(); + double freq_max(); + struct freq_result_t set_freq(double target_freq); + + bool is_quadrature(); + bool spectrum_inverted(); + bool set_bw(float bw); + +private: + void _set_rfagc(float gain); + void _set_ifagc(float gain); + void _set_pga(float pga_gain); + + int d_i2c_addr; + float d_bw, d_freq, d_IF, d_f_ref; + bool d_inverted; +}; + +#endif diff --git a/usrp/host/lib/legacy/db_dtt768.cc b/usrp/host/lib/legacy/db_dtt768.cc new file mode 100644 index 00000000..cae8b734 --- /dev/null +++ b/usrp/host/lib/legacy/db_dtt768.cc @@ -0,0 +1,296 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include + +int +control_byte_4() +{ + int C = 0; // Charge Pump Current, no info on how to choose + int R = 4; // 125 kHz fref + + // int ATP = 7; // Disable internal AGC + return (0x80 | C<<5 | R); +} + +int +control_byte_5(float freq, int agcmode = 1) +{ + if(agcmode) { + if(freq < 150e6) { + return 0x3B; + } + else if(freq < 420e6) { + return 0x7E; + } + else { + return 0xB7; + } + } + else { + if(freq < 150e6) { + return 0x39; + } + else if(freq < 420e6) { + return 0x7C; + } + else { + return 0xB5; + } + } +} + +int +control_byte_6() +{ + int ATC = 0; // AGC time constant = 100ms, 1 = 3S + int IFE = 1; // IF AGC amplifier enable + int AT = 0; // AGC control, ??? + + return (ATC << 5 | IFE << 4 | AT); +} + +int +control_byte_7() +{ + int SAS = 1; // SAW Digital mode + int AGD = 1; // AGC disable + int ADS = 0; // AGC detector into ADC converter + int T = 0; // Test mode, undocumented + return (SAS << 7 | AGD << 5 | ADS << 4 | T); +} + +db_dtt768::db_dtt768(usrp_basic_sptr _usrp, int which) + : db_base(_usrp, which) +{ + /* + * Control custom DTT76803-based daughterboard. + * + * @param usrp: instance of usrp.source_c + * @param which: which side: 0 or 1 corresponding to RX_A or RX_B respectively + * @type which: int + */ + + if(d_which == 0) { + d_i2c_addr = 0x60; + } + else { + d_i2c_addr = 0x62; + } + + d_IF = 44e6; + + d_f_ref = 125e3; + d_inverted = false; + + set_gain((gain_min() + gain_max()) / 2.0); + + bypass_adc_buffers(false); +} + +db_dtt768::~db_dtt768() +{ +} + +float +db_dtt768::gain_min() +{ + return 0; +} + +float +db_dtt768::gain_max() +{ + return 115; +} + +float +db_dtt768::gain_db_per_step() +{ + return 1; +} + +bool +db_dtt768::set_gain(float gain) +{ + assert(gain>=0 && gain<=115); + + float rfgain, ifgain, pgagain; + if(gain > 60) { + rfgain = 60; + gain = gain - 60; + } + else { + rfgain = gain; + gain = 0; + } + + if(gain > 35) { + ifgain = 35; + gain = gain - 35; + } + else { + ifgain = gain; + gain = 0; + } + pgagain = gain; + + _set_rfagc(rfgain); + _set_ifagc(ifgain); + _set_pga(pgagain); + + return true; +} + +double +db_dtt768::freq_min() +{ + return 44e6; +} + +double +db_dtt768::freq_max() +{ + return 900e6; +} + +struct freq_result_t +db_dtt768::set_freq(double target_freq) +{ + /* + * @returns (ok, actual_baseband_freq) where: + * ok is True or False and indicates success or failure, + * actual_baseband_freq is the RF frequency that corresponds to DC in the IF. + */ + + freq_result_t ret = {false, 0.0}; + + if(target_freq < freq_min() || target_freq > freq_max()) { + return ret; + } + + double target_lo_freq = target_freq + d_IF; // High side mixing + + int divisor = (int)(0.5+(target_lo_freq / d_f_ref)); + double actual_lo_freq = d_f_ref*divisor; + + if((divisor & ~0x7fff) != 0) { // must be 15-bits or less + return ret; + } + + // build i2c command string + std::vector buf(6); + buf[0] = (divisor >> 8) & 0xff; // DB1 + buf[1] = divisor & 0xff; // DB2 + buf[2] = control_byte_4(); + buf[3] = control_byte_5(target_freq); + buf[4] = control_byte_6(); + buf[5] = control_byte_7(); + + bool ok = usrp()->write_i2c(d_i2c_addr, int_seq_to_str (buf)); + + d_freq = actual_lo_freq - d_IF; + + ret.ok = ok; + ret.baseband_freq = actual_lo_freq; + + return ret; + +} + +bool +db_dtt768::is_quadrature() +{ + /* + * Return True if this board requires both I & Q analog channels. + * + * This bit of info is useful when setting up the USRP Rx mux register. + */ + + return false; +} + +bool +db_dtt768::spectrum_inverted() +{ + /* + * The 43.75 MHz version is inverted + */ + + return d_inverted; +} + +bool +db_dtt768::set_bw(float bw) +{ + /* + * Choose the SAW filter bandwidth, either 7MHz or 8MHz) + */ + + d_bw = bw; + set_freq(d_freq); + + return true; // FIXME: propagate set_freq result +} + +void +db_dtt768::_set_rfagc(float gain) +{ + assert(gain <= 60 && gain >= 0); + // FIXME this has a 0.5V step between gain = 60 and gain = 59. + // Why are there two cases instead of a single linear case? + float voltage; + if(gain == 60) { + voltage = 4; + } + else { + voltage = gain/60.0 * 2.25 + 1.25; + } + + int dacword = (int)(4096*voltage/1.22/3.3); // 1.22 = opamp gain + + assert(dacword>=0 && dacword<4096); + usrp()->write_aux_dac(d_which, 1, dacword); +} + +void +db_dtt768::_set_ifagc(float gain) +{ + assert(gain <= 35 && gain >= 0); + float voltage = gain/35.0 * 2.1 + 1.4; + int dacword = (int)(4096*voltage/1.22/3.3); // 1.22 = opamp gain + + assert(dacword>=0 && dacword<4096); + usrp()->write_aux_dac(d_which, 0, dacword); +} + +void +db_dtt768::_set_pga(float pga_gain) +{ + assert(pga_gain >=0 && pga_gain <=20); + if(d_which == 0) { + usrp()->set_pga (0, pga_gain); + } + else { + usrp()->set_pga (2, pga_gain); + } +} diff --git a/usrp/host/lib/legacy/db_dtt768.h b/usrp/host/lib/legacy/db_dtt768.h new file mode 100644 index 00000000..dd5a59ab --- /dev/null +++ b/usrp/host/lib/legacy/db_dtt768.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_DTT768_H +#define DB_DTT768_H + +#include +#include + +class db_dtt768 : public db_base +{ +public: + db_dtt768(usrp_basic_sptr usrp, int which); + ~db_dtt768(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool set_gain(float gain); + + double freq_min(); + double freq_max(); + struct freq_result_t set_freq(double target_freq); + + bool is_quadrature(); + bool spectrum_inverted(); + bool set_bw(float bw); + +private: + void _set_rfagc(float gain); + void _set_ifagc(float gain); + void _set_pga(float pga_gain); + + int d_i2c_addr; + float d_bw, d_freq, d_IF, d_f_ref; + bool d_inverted; +}; + +#endif diff --git a/usrp/host/lib/legacy/db_flexrf.cc b/usrp/host/lib/legacy/db_flexrf.cc new file mode 100644 index 00000000..662d9095 --- /dev/null +++ b/usrp/host/lib/legacy/db_flexrf.cc @@ -0,0 +1,1148 @@ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include + +// d'board i/o pin defs +// Tx and Rx have shared defs, but different i/o regs +#define AUX_RXAGC (1 << 8) +#define POWER_UP (1 << 7) // enables power supply +#define RX_TXN (1 << 6) // Tx only: T/R antenna switch for TX/RX port +#define RX2_RX1N (1 << 6) // Rx only: antenna switch between RX2 and TX/RX port +#define ENABLE (1 << 5) // enables mixer +#define AUX_SEN (1 << 4) +#define AUX_SCLK (1 << 3) +#define PLL_LOCK_DETECT (1 << 2) +#define AUX_SDO (1 << 1) +#define CLOCK_OUT (1 << 0) + +flexrf_base::flexrf_base(usrp_basic_sptr _usrp, int which, int _power_on) + : db_base(_usrp, which), d_power_on(_power_on) +{ + /* + @param usrp: instance of usrp.source_c + @param which: which side: 0 or 1 corresponding to side A or B respectively + @type which: int + */ + + d_first = true; + d_spi_format = SPI_FMT_MSB | SPI_FMT_HDR_0; + + usrp()->_write_oe(d_which, 0, 0xffff); // turn off all outputs + _enable_refclk(false); // disable refclk + + set_auto_tr(false); +} + +flexrf_base::~flexrf_base() +{ + delete d_common; +} + +void +flexrf_base::_write_all(int R, int control, int N) +{ + /* + Write R counter latch, control latch and N counter latch to VCO. + + Adds 10ms delay between writing control and N if this is first call. + This is the required power-up sequence. + + @param R: 24-bit R counter latch + @type R: int + @param control: 24-bit control latch + @type control: int + @param N: 24-bit N counter latch + @type N: int + */ + timespec t; + t.tv_sec = 0; + t.tv_nsec = 10000000; + + _write_R(R); + _write_control(control); + if(d_first) { + //time.sleep(0.010); + nanosleep(&t, NULL); + d_first = false; + } + _write_N(N); +} + +void +flexrf_base::_write_control(int control) +{ + _write_it((control & ~0x3) | 0); +} + +void +flexrf_base::_write_R(int R) +{ + _write_it((R & ~0x3) | 1); +} + +void +flexrf_base::_write_N(int N) +{ + _write_it((N & ~0x3) | 2); +} + +void +flexrf_base::_write_it(int v) +{ + char s[3]; + s[0] = (char)((v >> 16) & 0xff); + s[1] = (char)((v >> 8) & 0xff); + s[2] = (char)(v & 0xff); + std::string str(s, 3); + usrp()->_write_spi(0, d_spi_enable, d_spi_format, str); +} + +bool +flexrf_base::_lock_detect() +{ + /* + @returns: the value of the VCO/PLL lock detect bit. + @rtype: 0 or 1 + */ + if(usrp()->read_io(d_which) & PLL_LOCK_DETECT) { + return true; + } + else { // Give it a second chance + // FIXME: make portable sleep + timespec t; + t.tv_sec = 0; + t.tv_nsec = 100000000; + nanosleep(&t, NULL); + + if(usrp()->read_io(d_which) & PLL_LOCK_DETECT) { + return true; + } + else { + return false; + } + } +} + +bool +flexrf_base::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + /* + Determine values of R, control, and N registers, along with actual freq. + + @param freq: target frequency in Hz + @type freq: float + @returns: (R, control, N, actual_freq) + @rtype: tuple(int, int, int, float) + + Override this in derived classes. + */ + + //raise NotImplementedError; + throw std::runtime_error("_compute_regs called from flexrf_base\n"); +} + +int +flexrf_base::_compute_control_reg() +{ + return d_common->_compute_control_reg(); +} + +int +flexrf_base::_refclk_divisor() +{ + return d_common->_refclk_divisor(); +} + +double +flexrf_base::_refclk_freq() +{ + return 64e6/_refclk_divisor(); +} + +struct freq_result_t +flexrf_base::set_freq(double freq) +{ + /* + @returns (ok, actual_baseband_freq) where: + ok is True or False and indicates success or failure, + actual_baseband_freq is the RF frequency that corresponds to DC in the IF. + */ + + struct freq_result_t args = {false, 0}; + + // Offsetting the LO helps get the Tx carrier leakage out of the way. + // This also ensures that on Rx, we're not getting hosed by the + // FPGA's DC removal loop's time constant. We were seeing a + // problem when running with discontinuous transmission. + // Offsetting the LO made the problem go away. + freq += d_lo_offset; + + int R, control, N; + double actual_freq; + _compute_regs(freq, R, control, N, actual_freq); + + if(R==0) { + return args; + } + + _write_all(R, control, N); + args.ok = _lock_detect(); + args.baseband_freq = actual_freq; + return args; +} + +bool +flexrf_base::_set_pga(float pga_gain) +{ + if(d_which == 0) { + usrp()->set_pga(0, pga_gain); + usrp()->set_pga(1, pga_gain); + } + else { + usrp()->set_pga(2, pga_gain); + usrp()->set_pga(3, pga_gain); + } + return true; +} + +bool +flexrf_base::is_quadrature() +{ + /* + Return True if this board requires both I & Q analog channels. + + This bit of info is useful when setting up the USRP Rx mux register. + */ + return true; +} + +double +flexrf_base::freq_min() +{ + return d_common->freq_min(); +} + +double +flexrf_base::freq_max() +{ + return d_common->freq_max(); +} + +// ---------------------------------------------------------------- + +flexrf_base_tx::flexrf_base_tx(usrp_basic_sptr _usrp, int which, int _power_on) + : flexrf_base(_usrp, which, _power_on) +{ + /* + @param usrp: instance of usrp.sink_c + @param which: 0 or 1 corresponding to side TX_A or TX_B respectively. + */ + + if(which == 0) { + d_spi_enable = SPI_ENABLE_TX_A; + } + else { + d_spi_enable = SPI_ENABLE_TX_B; + } + + // power up the transmit side, but don't enable the mixer + usrp()->_write_oe(d_which,(POWER_UP|RX_TXN|ENABLE), 0xffff); + usrp()->write_io(d_which, (power_on()|RX_TXN), (POWER_UP|RX_TXN|ENABLE)); + set_lo_offset(4e6); + + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain +} + +flexrf_base_tx::~flexrf_base_tx() +{ + shutdown(); +} + + +void +flexrf_base_tx::shutdown() +{ + // fprintf(stderr, "flexrf_base_tx::shutdown d_is_shutdown = %d\n", d_is_shutdown); + + if (!d_is_shutdown){ + d_is_shutdown = true; + // do whatever there is to do to shutdown + + // Power down and leave the T/R switch in the R position + usrp()->write_io(d_which, (power_off()|RX_TXN), (POWER_UP|RX_TXN|ENABLE)); + + // Power down VCO/PLL + d_PD = 3; + + _write_control(_compute_control_reg()); + _enable_refclk(false); // turn off refclk + set_auto_tr(false); + } +} + +bool +flexrf_base_tx::set_auto_tr(bool on) +{ + bool ok = true; + if(on) { + ok &= set_atr_mask (RX_TXN | ENABLE); + ok &= set_atr_txval(0 | ENABLE); + ok &= set_atr_rxval(RX_TXN | 0); + } + else { + ok &= set_atr_mask (0); + ok &= set_atr_txval(0); + ok &= set_atr_rxval(0); + } + return ok; +} + +bool +flexrf_base_tx::set_enable(bool on) +{ + /* + Enable transmitter if on is true + */ + + int v; + int mask = RX_TXN | ENABLE; + if(on) { + v = ENABLE; + } + else { + v = RX_TXN; + } + return usrp()->write_io(d_which, v, mask); +} + +float +flexrf_base_tx::gain_min() +{ + return usrp()->pga_max(); +} + +float +flexrf_base_tx::gain_max() +{ + return usrp()->pga_max(); +} + +float +flexrf_base_tx::gain_db_per_step() +{ + return 1; +} + +bool +flexrf_base_tx::set_gain(float gain) +{ + /* + Set the gain. + + @param gain: gain in decibels + @returns True/False + */ + return _set_pga(usrp()->pga_max()); +} + + +/**************************************************************************/ + + +flexrf_base_rx::flexrf_base_rx(usrp_basic_sptr _usrp, int which, int _power_on) + : flexrf_base(_usrp, which, _power_on) +{ + /* + @param usrp: instance of usrp.source_c + @param which: 0 or 1 corresponding to side RX_A or RX_B respectively. + */ + + if(which == 0) { + d_spi_enable = SPI_ENABLE_RX_A; + } + else { + d_spi_enable = SPI_ENABLE_RX_B; + } + + usrp()->_write_oe(d_which, (POWER_UP|RX2_RX1N|ENABLE), 0xffff); + usrp()->write_io(d_which, (power_on()|RX2_RX1N|ENABLE), + (POWER_UP|RX2_RX1N|ENABLE)); + + // set up for RX on TX/RX port + select_rx_antenna("TX/RX"); + + bypass_adc_buffers(true); + + set_lo_offset(-4e6); +} + +flexrf_base_rx::~flexrf_base_rx() +{ + shutdown(); +} + +void +flexrf_base_rx::shutdown() +{ + // fprintf(stderr, "flexrf_base_rx::shutdown d_is_shutdown = %d\n", d_is_shutdown); + + if (!d_is_shutdown){ + d_is_shutdown = true; + // do whatever there is to do to shutdown + + // Power down + usrp()->common_write_io(C_RX, d_which, power_off(), (POWER_UP|ENABLE)); + + // Power down VCO/PLL + d_PD = 3; + + + // fprintf(stderr, "flexrf_base_rx::shutdown before _write_control\n"); + _write_control(_compute_control_reg()); + + // fprintf(stderr, "flexrf_base_rx::shutdown before _enable_refclk\n"); + _enable_refclk(false); // turn off refclk + + // fprintf(stderr, "flexrf_base_rx::shutdown before set_auto_tr\n"); + set_auto_tr(false); + + // fprintf(stderr, "flexrf_base_rx::shutdown after set_auto_tr\n"); + } +} + +bool +flexrf_base_rx::set_auto_tr(bool on) +{ + bool ok = true; + if(on) { + ok &= set_atr_mask (ENABLE); + ok &= set_atr_txval( 0); + ok &= set_atr_rxval(ENABLE); + } + else { + ok &= set_atr_mask (0); + ok &= set_atr_txval(0); + ok &= set_atr_rxval(0); + } + return true; +} + +bool +flexrf_base_rx::select_rx_antenna(int which_antenna) +{ + /* + Specify which antenna port to use for reception. + @param which_antenna: either 'TX/RX' or 'RX2' + */ + + if(which_antenna == 0) { + usrp()->write_io(d_which, 0,RX2_RX1N); + } + else if(which_antenna == 1) { + usrp()->write_io(d_which, RX2_RX1N, RX2_RX1N); + } + else { + return false; + // throw std::invalid_argument("which_antenna must be either 'TX/RX' or 'RX2'\n"); + } + return true; +} + +bool +flexrf_base_rx::select_rx_antenna(const std::string &which_antenna) +{ + /* + Specify which antenna port to use for reception. + @param which_antenna: either 'TX/RX' or 'RX2' + */ + + if(which_antenna == "TX/RX") { + usrp()->write_io(d_which, 0, RX2_RX1N); + } + else if(which_antenna == "RX2") { + usrp()->write_io(d_which, RX2_RX1N, RX2_RX1N); + } + else { + // throw std::invalid_argument("which_antenna must be either 'TX/RX' or 'RX2'\n"); + return false; + } + return true; +} + +bool +flexrf_base_rx::set_gain(float gain) +{ + /* + Set the gain. + + @param gain: gain in decibels + @returns True/False + */ + + // clamp gain + gain = std::max(gain_min(), std::min(gain, gain_max())); + + float pga_gain, agc_gain; + float V_maxgain, V_mingain, V_fullscale, dac_value; + + float maxgain = gain_max() - usrp()->pga_max(); + float mingain = gain_min(); + if(gain > maxgain) { + pga_gain = gain-maxgain; + assert(pga_gain <= usrp()->pga_max()); + agc_gain = maxgain; + } + else { + pga_gain = 0; + agc_gain = gain; + } + + V_maxgain = .2; + V_mingain = 1.2; + V_fullscale = 3.3; + dac_value = (agc_gain*(V_maxgain-V_mingain)/(maxgain-mingain) + V_mingain)*4096/V_fullscale; + + assert(dac_value>=0 && dac_value<4096); + + return (usrp()->write_aux_dac(d_which, 0, int(dac_value)) + && _set_pga(int(pga_gain))); +} + +// ---------------------------------------------------------------- + + +_AD4360_common::_AD4360_common() +{ + // R-Register Common Values + d_R_RSV = 0; // bits 23,22 + d_BSC = 3; // bits 21,20 Div by 8 to be safe + d_TEST = 0; // bit 19 + d_LDP = 1; // bit 18 + d_ABP = 0; // bit 17,16 3ns + + // N-Register Common Values + d_N_RSV = 0; // bit 7 + + // Control Register Common Values + d_PD = 0; // bits 21,20 Normal operation + d_PL = 0; // bits 13,12 11mA + d_MTLD = 1; // bit 11 enabled + d_CPG = 0; // bit 10 CP setting 1 + d_CP3S = 0; // bit 9 Normal + d_PDP = 1; // bit 8 Positive + d_MUXOUT = 1; // bits 7:5 Digital Lock Detect + d_CR = 0; // bit 4 Normal + d_PC = 1; // bits 3,2 Core power 10mA +} + +_AD4360_common::~_AD4360_common() +{ +} + +bool +_AD4360_common::_compute_regs(double refclk_freq, double freq, int &retR, + int &retcontrol, int &retN, double &retfreq) +{ + /* + Determine values of R, control, and N registers, along with actual freq. + + @param freq: target frequency in Hz + @type freq: float + @returns: (R, control, N, actual_freq) + @rtype: tuple(int, int, int, float) + */ + + // Band-specific N-Register Values + //float phdet_freq = _refclk_freq()/d_R_DIV; + double phdet_freq = refclk_freq/d_R_DIV; + double desired_n = round(freq*d_freq_mult/phdet_freq); + double actual_freq = desired_n * phdet_freq; + int B = floor(desired_n/_prescaler()); + int A = desired_n - _prescaler()*B; + d_B_DIV = int(B); // bits 20:8 + d_A_DIV = int(A); // bit 6:2 + + //assert db_B_DIV >= db_A_DIV + if(d_B_DIV < d_A_DIV) { + retR = 0; + retcontrol = 0; + retN = 0; + retfreq = 0; + return false; + } + + int R = (d_R_RSV<<22) | (d_BSC<<20) | (d_TEST<<19) | + (d_LDP<<18) | (d_ABP<<16) | (d_R_DIV<<2); + + int control = _compute_control_reg(); + + int N = (d_DIVSEL<<23) | (d_DIV2<<22) | (d_CPGAIN<<21) | + (d_B_DIV<<8) | (d_N_RSV<<7) | (d_A_DIV<<2); + + retR = R; + retcontrol = control; + retN = N; + retfreq = actual_freq/d_freq_mult; + return true; +} + +int +_AD4360_common::_compute_control_reg() +{ + int control = (d_P<<22) | (d_PD<<20) | (d_CP2<<17) | (d_CP1<<14) + | (d_PL<<12) | (d_MTLD<<11) | (d_CPG<<10) | (d_CP3S<<9) | (d_PDP<<8) + | (d_MUXOUT<<5) | (d_CR<<4) | (d_PC<<2); + + return control; +} + +int +_AD4360_common::_refclk_divisor() +{ + /* + Return value to stick in REFCLK_DIVISOR register + */ + return 1; +} + +int +_AD4360_common::_prescaler() +{ + if(d_P == 0) { + return 8; + } + else if(d_P == 1) { + return 16; + } + else { + return 32; + } +} + +//---------------------------------------------------------------------- + +_2400_common::_2400_common() + : _AD4360_common() +{ + // Band-specific R-Register Values + d_R_DIV = 16; // bits 15:2 + + // Band-specific C-Register values + d_P = 1; // bits 23,22 Div by 16/17 + d_CP2 = 7; // bits 19:17 + d_CP1 = 7; // bits 16:14 + + // Band specifc N-Register Values + d_DIVSEL = 0; // bit 23 + d_DIV2 = 0; // bit 22 + d_CPGAIN = 0; // bit 21 + d_freq_mult = 1; +} + +double +_2400_common::freq_min() +{ + return 2300e6; +} + +double +_2400_common::freq_max() +{ + return 2700e6; +} + +//---------------------------------------------------------------------- + +_1200_common::_1200_common() + : _AD4360_common() +{ + // Band-specific R-Register Values + d_R_DIV = 16; // bits 15:2 DIV by 16 for a 1 MHz phase detector freq + + // Band-specific C-Register values + d_P = 1; // bits 23,22 Div by 16/17 + d_CP2 = 7; // bits 19:17 1.25 mA + d_CP1 = 7; // bits 16:14 1.25 mA + + // Band specifc N-Register Values + d_DIVSEL = 0; // bit 23 + d_DIV2 = 1; // bit 22 + d_CPGAIN = 0; // bit 21 + d_freq_mult = 2; +} + +double +_1200_common::freq_min() +{ + return 1150e6; +} + +double +_1200_common::freq_max() +{ + return 1350e6; +} + +//------------------------------------------------------------------------- + +_1800_common::_1800_common() + : _AD4360_common() +{ + // Band-specific R-Register Values + d_R_DIV = 16; // bits 15:2 DIV by 16 for a 1 MHz phase detector freq + + // Band-specific C-Register values + d_P = 1; // bits 23,22 Div by 16/17 + d_CP2 = 7; // bits 19:17 1.25 mA + d_CP1 = 7; // bits 16:14 1.25 mA + + // Band specifc N-Register Values + d_DIVSEL = 0; // bit 23 + d_DIV2 = 0; // bit 22 + d_freq_mult = 1; + d_CPGAIN = 0; // bit 21 +} + +double +_1800_common::freq_min() +{ + return 1600e6; +} + +double +_1800_common::freq_max() +{ + return 2000e6; +} + +//------------------------------------------------------------------------- + +_900_common::_900_common() + : _AD4360_common() +{ + // Band-specific R-Register Values + d_R_DIV = 16; // bits 15:2 DIV by 16 for a 1 MHz phase detector freq + + // Band-specific C-Register values + d_P = 1; // bits 23,22 Div by 16/17 + d_CP2 = 7; // bits 19:17 1.25 mA + d_CP1 = 7; // bits 16:14 1.25 mA + + // Band specifc N-Register Values + d_DIVSEL = 0; // bit 23 + d_DIV2 = 1; // bit 22 + d_freq_mult = 2; + d_CPGAIN = 0; // bit 21 +} + +double +_900_common::freq_min() +{ + return 800e6; +} + +double +_900_common::freq_max() +{ + return 1000e6; +} + +//------------------------------------------------------------------------- + +_400_common::_400_common() + : _AD4360_common() +{ + // Band-specific R-Register Values + d_R_DIV = 16; // bits 15:2 + + // Band-specific C-Register values + d_P = 0; // bits 23,22 Div by 8/9 + d_CP2 = 7; // bits 19:17 1.25 mA + d_CP1 = 7; // bits 16:14 1.25 mA + + // Band specifc N-Register Values These are different for TX/RX + d_DIVSEL = 0; // bit 23 + d_freq_mult = 2; + + d_CPGAIN = 0; // bit 21 +} + +double +_400_common::freq_min() +{ + return 400e6; +} + +double +_400_common::freq_max() +{ + return 500e6; +} + +_400_tx::_400_tx() + : _400_common() +{ + d_DIV2 = 1; // bit 22 +} + +_400_rx::_400_rx() + : _400_common() +{ + d_DIV2 = 0; // bit 22 // RX side has built-in DIV2 in AD8348 +} + +//------------------------------------------------------------ + +db_flexrf_2400_tx::db_flexrf_2400_tx(usrp_basic_sptr usrp, int which) + : flexrf_base_tx(usrp, which) +{ + d_common = new _2400_common(); +} + +db_flexrf_2400_tx::~db_flexrf_2400_tx() +{ +} + +bool +db_flexrf_2400_tx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + + +db_flexrf_2400_rx::db_flexrf_2400_rx(usrp_basic_sptr usrp, int which) + : flexrf_base_rx(usrp, which) +{ + d_common = new _2400_common(); + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain +} + +db_flexrf_2400_rx::~db_flexrf_2400_rx() +{ +} + +float +db_flexrf_2400_rx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_flexrf_2400_rx::gain_max() +{ + return usrp()->pga_max()+70; +} + +float +db_flexrf_2400_rx::gain_db_per_step() +{ + return 0.05; +} + + +bool +db_flexrf_2400_rx::i_and_q_swapped() +{ + return true; +} + +bool +db_flexrf_2400_rx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + +//------------------------------------------------------------ + + +db_flexrf_1200_tx::db_flexrf_1200_tx(usrp_basic_sptr usrp, int which) + : flexrf_base_tx(usrp, which) +{ + d_common = new _1200_common(); +} + +db_flexrf_1200_tx::~db_flexrf_1200_tx() +{ +} + +bool +db_flexrf_1200_tx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + + + +db_flexrf_1200_rx::db_flexrf_1200_rx(usrp_basic_sptr usrp, int which) + : flexrf_base_rx(usrp, which) +{ + d_common = new _1200_common(); + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain +} + +db_flexrf_1200_rx::~db_flexrf_1200_rx() +{ +} + +float +db_flexrf_1200_rx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_flexrf_1200_rx::gain_max() +{ + return usrp()->pga_max()+70; +} + +float +db_flexrf_1200_rx::gain_db_per_step() +{ + return 0.05; +} + +bool +db_flexrf_1200_rx::i_and_q_swapped() +{ + return true; +} + +bool +db_flexrf_1200_rx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + +//------------------------------------------------------------ + + +db_flexrf_1800_tx::db_flexrf_1800_tx(usrp_basic_sptr usrp, int which) + : flexrf_base_tx(usrp, which) +{ + d_common = new _1800_common(); +} + +db_flexrf_1800_tx::~db_flexrf_1800_tx() +{ +} + +bool +db_flexrf_1800_tx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + + +db_flexrf_1800_rx::db_flexrf_1800_rx(usrp_basic_sptr usrp, int which) + : flexrf_base_rx(usrp, which) +{ + d_common = new _1800_common(); + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain +} + +db_flexrf_1800_rx::~db_flexrf_1800_rx() +{ +} + + +float +db_flexrf_1800_rx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_flexrf_1800_rx::gain_max() +{ + return usrp()->pga_max()+70; +} + +float +db_flexrf_1800_rx::gain_db_per_step() +{ + return 0.05; +} + +bool +db_flexrf_1800_rx::i_and_q_swapped() +{ + return true; +} + +bool +db_flexrf_1800_rx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + +//------------------------------------------------------------ + + +db_flexrf_900_tx::db_flexrf_900_tx(usrp_basic_sptr usrp, int which) + : flexrf_base_tx(usrp, which) +{ + d_common = new _900_common(); +} + +db_flexrf_900_tx::~db_flexrf_900_tx() +{ +} + +bool +db_flexrf_900_tx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + +db_flexrf_900_rx::db_flexrf_900_rx(usrp_basic_sptr usrp, int which) + : flexrf_base_rx(usrp, which) +{ + d_common = new _900_common(); + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain +} + +db_flexrf_900_rx::~db_flexrf_900_rx() +{ +} + +float +db_flexrf_900_rx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_flexrf_900_rx::gain_max() +{ + return usrp()->pga_max()+70; +} + +float +db_flexrf_900_rx::gain_db_per_step() +{ + return 0.05; +} + +bool +db_flexrf_900_rx::i_and_q_swapped() +{ + return true; +} + +bool +db_flexrf_900_rx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + +//------------------------------------------------------------ + + +db_flexrf_400_tx::db_flexrf_400_tx(usrp_basic_sptr usrp, int which) + : flexrf_base_tx(usrp, which, POWER_UP) +{ + d_common = new _400_tx(); +} + +db_flexrf_400_tx::~db_flexrf_400_tx() +{ +} + +bool +db_flexrf_400_tx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + + + +db_flexrf_400_rx::db_flexrf_400_rx(usrp_basic_sptr usrp, int which) + : flexrf_base_rx(usrp, which, POWER_UP) +{ + d_common = new _400_rx(); + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain +} + +db_flexrf_400_rx::~db_flexrf_400_rx() +{ +} + +float +db_flexrf_400_rx::gain_min() +{ + return usrp()->pga_min(); +} + +float +db_flexrf_400_rx::gain_max() +{ + return usrp()->pga_max()+45; +} + +float + +db_flexrf_400_rx::gain_db_per_step() +{ + return 0.035; +} + + +bool +db_flexrf_400_rx::i_and_q_swapped() +{ + return true; +} + +bool +db_flexrf_400_rx::_compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq) +{ + return d_common->_compute_regs(_refclk_freq(), freq, retR, + retcontrol, retN, retfreq); +} + diff --git a/usrp/host/lib/legacy/db_flexrf.h b/usrp/host/lib/legacy/db_flexrf.h new file mode 100644 index 00000000..b9ccfc3a --- /dev/null +++ b/usrp/host/lib/legacy/db_flexrf.h @@ -0,0 +1,355 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_FLEXRF_H +#define DB_FLEXRF_H + +#include +#include + +//debug_using_gui = true // Must be set to True or False +#define debug_using_gui false // Must be set to True or False + +class _AD4360_common; + +class flexrf_base : public db_base +{ +public: + flexrf_base(usrp_basic_sptr usrp, int which, int _power_on=0); + ~flexrf_base(); + + struct freq_result_t set_freq(double freq); + + bool is_quadrature(); + double freq_min(); + double freq_max(); + +protected: + void _write_all(int R, int control, int N); + void _write_control(int control); + void _write_R(int R); + void _write_N(int N); + void _write_it(int v); + bool _lock_detect(); + + virtual bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); + int _compute_control_reg(); + int _refclk_divisor(); + double _refclk_freq(); + + bool _set_pga(float pga_gain); + + int power_on() { return d_power_on; } + int power_off() { return 0; } + + bool d_first; + int d_spi_format; + int d_spi_enable; + int d_power_on; + int d_PD; + + _AD4360_common *d_common; +}; + +// ---------------------------------------------------------------- + +class flexrf_base_tx : public flexrf_base +{ +protected: + void shutdown(); + +public: + flexrf_base_tx(usrp_basic_sptr usrp, int which, int _power_on=0); + ~flexrf_base_tx(); + + // All RFX tx d'boards have fixed gain + float gain_min(); + float gain_max(); + float gain_db_per_step(); + + bool set_auto_tr(bool on); + bool set_enable(bool on); + bool set_gain(float gain); +}; + +class flexrf_base_rx : public flexrf_base +{ +protected: + void shutdown(); + +public: + flexrf_base_rx(usrp_basic_sptr usrp, int which, int _power_on=0); + ~flexrf_base_rx(); + + bool set_auto_tr(bool on); + bool select_rx_antenna(int which_antenna); + bool select_rx_antenna(const std::string &which_antenna); + bool set_gain(float gain); + +}; + +// ---------------------------------------------------------------- + + +class _AD4360_common +{ +public: + _AD4360_common(); + virtual ~_AD4360_common(); + + virtual double freq_min() = 0; + virtual double freq_max() = 0; + + bool _compute_regs(double refclk_freq, double freq, int &retR, + int &retcontrol, int &retN, double &retfreq); + int _compute_control_reg(); + virtual int _refclk_divisor(); + int _prescaler(); + + void R_DIV(int div) { d_R_DIV = div; } + +protected: + int d_R_RSV, d_BSC, d_TEST, d_LDP, d_ABP, d_N_RSV, d_PL, d_MTLD; + int d_CPG, d_CP3S, d_PDP, d_MUXOUT, d_CR, d_PC; + + // FIXME: d_PD might cause conflict from flexrf_base + int d_A_DIV, d_B_DIV, d_R_DIV, d_P, d_PD, d_CP2, d_CP1, d_DIVSEL; + int d_DIV2, d_CPGAIN, d_freq_mult; + +}; + +//---------------------------------------------------------------------- + +class _2400_common : public _AD4360_common +{ + public: + _2400_common(); + ~_2400_common() {} + + double freq_min(); + double freq_max(); +}; + +//---------------------------------------------------------------------- + +class _1200_common : public _AD4360_common +{ +public: + _1200_common(); + ~_1200_common() {} + + double freq_min(); + double freq_max(); +}; + +//------------------------------------------------------------------------- + +class _1800_common : public _AD4360_common +{ + public: + _1800_common(); + ~_1800_common() {} + + double freq_min(); + double freq_max(); +}; + +//------------------------------------------------------------------------- + +class _900_common : public _AD4360_common +{ +public: + _900_common(); + ~_900_common() {} + + double freq_min(); + double freq_max(); +}; + +//------------------------------------------------------------------------- + +class _400_common : public _AD4360_common +{ +public: + _400_common(); + ~_400_common() {} + + double freq_min(); + double freq_max(); +}; + +class _400_tx : public _400_common +{ +public: + _400_tx(); + ~_400_tx() {} +}; + +class _400_rx : public _400_common +{ +public: + _400_rx(); + ~_400_rx() {} +}; + +//------------------------------------------------------------ + +class db_flexrf_2400_tx : public flexrf_base_tx +{ + public: + db_flexrf_2400_tx(usrp_basic_sptr usrp, int which); + ~db_flexrf_2400_tx(); + + // Wrapper calls to d_common functions + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +class db_flexrf_2400_rx : public flexrf_base_rx +{ +public: + db_flexrf_2400_rx(usrp_basic_sptr usrp, int which); + ~db_flexrf_2400_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool i_and_q_swapped(); + + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +//------------------------------------------------------------ + +class db_flexrf_1200_tx : public flexrf_base_tx +{ +public: + db_flexrf_1200_tx(usrp_basic_sptr usrp, int which); + ~db_flexrf_1200_tx(); + + // Wrapper calls to d_common functions + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +class db_flexrf_1200_rx : public flexrf_base_rx +{ +public: + db_flexrf_1200_rx(usrp_basic_sptr usrp, int which); + ~db_flexrf_1200_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool i_and_q_swapped(); + + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +//------------------------------------------------------------ + +class db_flexrf_1800_tx : public flexrf_base_tx +{ + public: + db_flexrf_1800_tx(usrp_basic_sptr usrp, int which); + ~db_flexrf_1800_tx(); + + // Wrapper calls to d_common functions + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +class db_flexrf_1800_rx : public flexrf_base_rx +{ +public: + db_flexrf_1800_rx(usrp_basic_sptr usrp, int which); + ~db_flexrf_1800_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool i_and_q_swapped(); + + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +//------------------------------------------------------------ + +class db_flexrf_900_tx : public flexrf_base_tx +{ + public: + db_flexrf_900_tx(usrp_basic_sptr usrp, int which); + ~db_flexrf_900_tx(); + + // Wrapper calls to d_common functions + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +class db_flexrf_900_rx : public flexrf_base_rx +{ +public: + db_flexrf_900_rx(usrp_basic_sptr usrp, int which); + ~db_flexrf_900_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool i_and_q_swapped(); + + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + + +//------------------------------------------------------------ + +class db_flexrf_400_tx : public flexrf_base_tx +{ + public: + db_flexrf_400_tx(usrp_basic_sptr usrp, int which); + ~db_flexrf_400_tx(); + + // Wrapper calls to d_common functions + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +class db_flexrf_400_rx : public flexrf_base_rx +{ +public: + db_flexrf_400_rx(usrp_basic_sptr usrp, int which); + ~db_flexrf_400_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool i_and_q_swapped(); + + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); +}; + +#endif diff --git a/usrp/host/lib/legacy/db_flexrf_mimo.cc b/usrp/host/lib/legacy/db_flexrf_mimo.cc new file mode 100644 index 00000000..fd996bfa --- /dev/null +++ b/usrp/host/lib/legacy/db_flexrf_mimo.cc @@ -0,0 +1,276 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include + + +db_flexrf_2400_tx_mimo_a::db_flexrf_2400_tx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_2400_tx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_2400_tx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_2400_rx_mimo_a::db_flexrf_2400_rx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_2400_rx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_2400_rx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_2400_tx_mimo_b::db_flexrf_2400_tx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_2400_tx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_2400_tx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_2400_rx_mimo_b::db_flexrf_2400_rx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_2400_rx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_2400_rx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_1800_tx_mimo_a::db_flexrf_1800_tx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_1800_tx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_1800_tx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_1800_rx_mimo_a::db_flexrf_1800_rx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_1800_rx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_1800_rx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_1800_tx_mimo_b::db_flexrf_1800_tx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_1800_tx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_1800_tx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_1800_rx_mimo_b::db_flexrf_1800_rx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_1800_rx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_1800_rx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_1200_tx_mimo_a::db_flexrf_1200_tx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_1200_tx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_1200_tx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_1200_rx_mimo_a::db_flexrf_1200_rx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_1200_rx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_1200_rx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_1200_tx_mimo_b::db_flexrf_1200_tx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_1200_tx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_1200_tx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_1200_rx_mimo_b::db_flexrf_1200_rx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_1200_rx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_1200_rx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_900_tx_mimo_a::db_flexrf_900_tx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_900_tx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_900_tx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_900_rx_mimo_a::db_flexrf_900_rx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_900_rx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_900_rx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_900_tx_mimo_b::db_flexrf_900_tx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_900_tx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_900_tx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_900_rx_mimo_b::db_flexrf_900_rx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_900_rx(usrp, which) +{ + d_common->R_DIV(16); +} + +int db_flexrf_900_rx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_400_tx_mimo_a::db_flexrf_400_tx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_400_tx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_400_tx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_400_rx_mimo_a::db_flexrf_400_rx_mimo_a(usrp_basic_sptr usrp, int which) + : db_flexrf_400_rx(usrp, which) +{ + _enable_refclk(true); + d_common->R_DIV(1); +} + +int +db_flexrf_400_rx_mimo_a::_refclk_divisor() +{ + return 16; +} + +db_flexrf_400_tx_mimo_b::db_flexrf_400_tx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_400_tx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_400_tx_mimo_b::_refclk_divisor() +{ + return 1; +} + +db_flexrf_400_rx_mimo_b::db_flexrf_400_rx_mimo_b(usrp_basic_sptr usrp, int which) + : db_flexrf_400_rx(usrp, which) +{ + d_common->R_DIV(16); +} + +int +db_flexrf_400_rx_mimo_b::_refclk_divisor() +{ + return 1; +} diff --git a/usrp/host/lib/legacy/db_flexrf_mimo.h b/usrp/host/lib/legacy/db_flexrf_mimo.h new file mode 100644 index 00000000..aeff5325 --- /dev/null +++ b/usrp/host/lib/legacy/db_flexrf_mimo.h @@ -0,0 +1,163 @@ +/* + * Copyright 2008 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include + +class db_flexrf_2400_tx_mimo_a : public db_flexrf_2400_tx +{ + public: + db_flexrf_2400_tx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_2400_rx_mimo_a : public db_flexrf_2400_rx +{ + public: + db_flexrf_2400_rx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_2400_tx_mimo_b : public db_flexrf_2400_tx +{ + public: + db_flexrf_2400_tx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_2400_rx_mimo_b : public db_flexrf_2400_rx +{ + public: + db_flexrf_2400_rx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + + +class db_flexrf_1800_tx_mimo_a : public db_flexrf_1800_tx +{ + public: + db_flexrf_1800_tx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1800_rx_mimo_a : public db_flexrf_1800_rx +{ + public: + db_flexrf_1800_rx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1800_tx_mimo_b : public db_flexrf_1800_tx +{ + public: + db_flexrf_1800_tx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1800_rx_mimo_b : public db_flexrf_1800_rx +{ + public: + db_flexrf_1800_rx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1200_tx_mimo_a : public db_flexrf_1200_tx +{ + public: + db_flexrf_1200_tx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1200_rx_mimo_a : public db_flexrf_1200_rx +{ + public: + db_flexrf_1200_rx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1200_tx_mimo_b : public db_flexrf_1200_tx +{ + public: + db_flexrf_1200_tx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_1200_rx_mimo_b : public db_flexrf_1200_rx +{ + public: + db_flexrf_1200_rx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_900_tx_mimo_a : public db_flexrf_900_tx +{ + public: + db_flexrf_900_tx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_900_rx_mimo_a : public db_flexrf_900_rx +{ + public: + db_flexrf_900_rx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_900_tx_mimo_b : public db_flexrf_900_tx +{ + public: + db_flexrf_900_tx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_900_rx_mimo_b : public db_flexrf_900_rx +{ + public: + db_flexrf_900_rx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_400_tx_mimo_a : public db_flexrf_400_tx +{ + public: + db_flexrf_400_tx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_400_rx_mimo_a : public db_flexrf_400_rx +{ + public: + db_flexrf_400_rx_mimo_a(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_400_tx_mimo_b : public db_flexrf_400_tx +{ + public: + db_flexrf_400_tx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; + +class db_flexrf_400_rx_mimo_b : public db_flexrf_400_rx +{ + public: + db_flexrf_400_rx_mimo_b(usrp_basic_sptr usrp, int which); + int _refclk_divisor(); +}; diff --git a/usrp/host/lib/legacy/db_tv_rx.cc b/usrp/host/lib/legacy/db_tv_rx.cc new file mode 100644 index 00000000..803ebf86 --- /dev/null +++ b/usrp/host/lib/legacy/db_tv_rx.cc @@ -0,0 +1,274 @@ +// +// Copyright 2008 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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include + +/*****************************************************************************/ + +int +control_byte_1(bool fast_tuning_p, int reference_divisor) +{ + int c = 0x88; + if(fast_tuning_p) { + c |= 0x40; + } + + if(reference_divisor == 512) { + c |= 0x3 << 1; + } + else if(reference_divisor == 640) { + c |= 0x0 << 1; + } + else if(reference_divisor == 1024) { + c |= 0x1 << 1; + } + else { + assert(0); + } + + return c; +} + +int +control_byte_2(double target_freq, bool shutdown_tx_PGA) +{ + int c; + if(target_freq < 158e6) { // VHF low + c = 0xa0; + } + else if(target_freq < 464e6) { // VHF high + c = 0x90; + } + else { // UHF + c = 0x30; + } + + if(shutdown_tx_PGA) { + c |= 0x08; + } + + return c; +} + + +/*****************************************************************************/ + + +db_tv_rx::db_tv_rx(usrp_basic_sptr usrp, int which, + double first_IF, double second_IF) + : db_base(usrp, which) +{ + // Handler for Tv Rx daughterboards. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0, 1 corresponding to RX_A or RX_B respectively + + if(which == 0) { + d_i2c_addr = 0x60; + } + else { + d_i2c_addr = 0x61; + } + + d_first_IF = first_IF; + d_second_IF = second_IF; + d_reference_divisor = 640; + d_fast_tuning = false; + d_inverted = false; // FIXME get rid of this + + set_gain((gain_min() + gain_max()) / 2.0); // initialize gain + + bypass_adc_buffers(false); +} + +db_tv_rx::~db_tv_rx() +{ +} + +// Gain setting +void +db_tv_rx::_set_rfagc(float gain) +{ + float voltage; + + assert(gain <= 60 && gain >= 0); + // FIXME this has a 0.5V step between gain = 60 and gain = 59. + // Why are there two cases instead of a single linear case? + if(gain == 60) { + voltage = 4; + } + else { + voltage = gain/60.0 * 2.25 + 1.25; + } + int dacword = int(4096*voltage/1.22/3.3); // 1.22 = opamp gain + + assert(dacword>=0 && dacword<4096); + usrp()->write_aux_dac(d_which, 1, dacword); +} + +void +db_tv_rx::_set_ifagc(float gain) +{ + float voltage; + + assert(gain <= 35 && gain >= 0); + voltage = gain/35.0 * 2.1 + 1.4; + int dacword = int(4096*voltage/1.22/3.3); // 1.22 = opamp gain + + assert(dacword>=0 && dacword<4096); + usrp()->write_aux_dac(d_which, 0, dacword); +} + +void +db_tv_rx::_set_pga(float pga_gain) +{ + assert(pga_gain >=0 && pga_gain <=20); + if(d_which == 0) { + usrp()->set_pga(0, pga_gain); + } + else { + usrp()->set_pga (2, pga_gain); + } +} + +double +db_tv_rx::freq_min() +{ + return 50e6; +} + +double +db_tv_rx::freq_max() +{ + return 860e6; +} + +struct freq_result_t +db_tv_rx::set_freq(double target_freq) +{ + // Set the frequency. + // + // @param freq: target RF frequency in Hz + // @type freq: double + // + // @returns (ok, actual_baseband_freq) where: + // ok is True or False and indicates success or failure, + // actual_baseband_freq is RF frequency that corresponds to DC in the IF. + + freq_result_t args = {false, 0}; + + double fmin = freq_min(); + double fmax = freq_max(); + if((target_freq < fmin) || (target_freq > fmax)) { + return args; + } + + double target_lo_freq = target_freq + d_first_IF; // High side mixing + double f_ref = 4.0e6 / (double)(d_reference_divisor); // frequency steps + + int divisor = int((target_lo_freq + (f_ref * 4)) / (f_ref * 8)); + double actual_lo_freq = (f_ref * 8 * divisor); + double actual_freq = actual_lo_freq - d_first_IF; + + if((divisor & ~0x7fff) != 0) { // must be 15-bits or less + return args; + } + + // build i2c command string + std::vector buf(4); + buf[0] = (divisor >> 8) & 0xff; // DB1 + buf[1] = divisor & 0xff; // DB2 + buf[2] = control_byte_1(d_fast_tuning, d_reference_divisor); + buf[3] = control_byte_2(actual_freq, true); + + args.ok = usrp()->write_i2c(d_i2c_addr, int_seq_to_str (buf)); + args.baseband_freq = actual_freq - d_second_IF; + return args; +} + +float +db_tv_rx::gain_min() +{ + return 0; +} + +float +db_tv_rx::gain_max() +{ + return 115; +} + +float +db_tv_rx::gain_db_per_step() +{ + return 1; +} + +bool +db_tv_rx::set_gain(float gain) +{ + // Set the gain. + // + // @param gain: gain in decibels + // @returns True/False + + float rfgain, ifgain, pgagain; + + assert(gain>=0 && gain<=115); + if(gain>60) { + rfgain = 60; + gain = gain - 60; + } + else { + rfgain = gain; + gain = 0; + } + + if(gain > 35) { + ifgain = 35; + gain = gain - 35; + } + else { + ifgain = gain; + gain = 0; + } + + pgagain = gain; + _set_rfagc(rfgain); + _set_ifagc(ifgain); + _set_pga(pgagain); + + return true; +} + +bool +db_tv_rx::is_quadrature() +{ + // Return True if this board requires both I & Q analog channels. + return false; +} + +bool +db_tv_rx::spectrum_inverted() +{ + // The 43.75 MHz version is inverted + return d_inverted; +} diff --git a/usrp/host/lib/legacy/db_tv_rx.h b/usrp/host/lib/legacy/db_tv_rx.h new file mode 100644 index 00000000..ed916263 --- /dev/null +++ b/usrp/host/lib/legacy/db_tv_rx.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_TV_RX_H +#define DB_TV_RX_H + +#include + +class db_tv_rx : public db_base +{ +private: + void _set_rfagc(float gain); + void _set_ifagc(float gain); + void _set_pga(float pga_gain); + + int d_i2c_addr; + double d_first_IF, d_second_IF; + int d_reference_divisor; + bool d_fast_tuning; + bool d_inverted; + +public: + db_tv_rx(usrp_basic_sptr usrp, int which, + double first_IF, double second_IF); + ~db_tv_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + double freq_min(); + double freq_max(); + struct freq_result_t set_freq(double target_freq); + bool set_gain(float gain); + bool is_quadrature(); + bool spectrum_inverted(); +}; + +#endif diff --git a/usrp/host/lib/legacy/db_util.cc b/usrp/host/lib/legacy/db_util.cc new file mode 100644 index 00000000..4b46383b --- /dev/null +++ b/usrp/host/lib/legacy/db_util.cc @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include + +std::string +int_seq_to_str(std::vector &seq) +{ + //convert a sequence of integers into a string + + std::stringstream str; + std::vector::iterator i; + for(i = seq.begin(); i != seq.end(); i++) { + str << char((unsigned int)*i); + } + return str.str(); +} + +std::vector +str_to_int_seq(std::string str) +{ + //convert a string to a list of integers + std::vector seq; + std::vector::iterator sitr; + std::string::iterator i; + for(i=str.begin(); i != str.end(); i++) { + int a = (int)(*i); + seq.push_back(a); + } + return seq; +} + diff --git a/usrp/host/lib/legacy/db_util.h b/usrp/host/lib/legacy/db_util.h new file mode 100644 index 00000000..e07abb60 --- /dev/null +++ b/usrp/host/lib/legacy/db_util.h @@ -0,0 +1,31 @@ +/* -*- c++ -*- */ +/* + * Copyright 2008 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 INCLUDED_DB_UTIL_H +#define INCLUDED_DB_UTIL_H + +#include +#include + +std::string int_seq_to_str(std::vector &seq); +std::vector str_to_int_seq(std::string str); + +#endif /* INCLUDED_DB_UTIL_H */ diff --git a/usrp/host/lib/legacy/db_wbx.h b/usrp/host/lib/legacy/db_wbx.h new file mode 100644 index 00000000..3202d368 --- /dev/null +++ b/usrp/host/lib/legacy/db_wbx.h @@ -0,0 +1,221 @@ +/* -*- c++ -*- */ +// +// Copyright 2008 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 asversion 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. + +#ifndef DB_WBX_H +#define DB_WBX_H + +#include +#include + + +/* + A few comments about the WBX boards: + They are half-duplex. I.e., transmit and receive are mutually exclusive. + There is a single LO for both the Tx and Rx sides. + The the shared control signals are hung off of the Rx side. + The shared io controls are duplexed onto the Rx side pins. + The wbx_high d'board always needs to be in 'auto_tr_mode' +*/ + + +class wbx_base : public db_base +{ +protected: + void shutdown(); + + /* + * Abstract base class for all wbx boards. + * + * Derive board specific subclasses from db_wbx_base_{tx,rx} + */ + +public: + wbx_base(usrp_basic_sptr usrp, int which); + ~wbx_base(); + + struct freq_result_t set_freq(double freq); + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool set_gain(float gain); + bool is_quadrature(); + + +protected: + virtual bool _lock_detect(); + + // FIXME: After testing, replace these with usrp_basic::common_write_io/oe + bool _tx_write_oe(int value, int mask); + bool _rx_write_oe(int value, int mask); + bool _tx_write_io(int value, int mask); + bool _rx_write_io(int value, int mask); + virtual bool _rx_read_io(); + bool _tx_read_io(); + bool _compute_regs(double freq); + virtual double _refclk_freq(); + int _refclk_divisor(); + + bool _set_pga(float pga_gain); + + bool d_first; + int d_spi_format; + int d_spi_enable; + double d_lo_offset; +}; + + +/****************************************************************************/ + + +class wbx_base_tx : public wbx_base +{ +public: + wbx_base_tx(usrp_basic_sptr usrp, int which); + ~wbx_base_tx(); + + bool set_auto_tr(bool on); + bool set_enable(bool on); +}; + + +/****************************************************************************/ + + +class wbx_base_rx : public wbx_base +{ +public: + wbx_base_rx(usrp_basic_sptr usrp, int which); + ~wbx_base_rx(); + + bool set_auto_tr(bool on); + bool select_rx_antenna(int which_antenna); + bool select_rx_antenna(const std::string &which_antenna); + bool set_gain(float gain); + bool i_and_q_swapped(); +}; + + +/****************************************************************************/ + + +class _ADF410X_common +{ +public: + _ADF410X_common(); + virtual ~_ADF410X_common(); + + bool _compute_regs(double freq, int &retR, int &retcontrol, + int &retN, double &retfreq); + void _write_all(int R, int N, int control); + void _write_R(int R); + void _write_N(int N); + void _write_func(int func); + void _write_init(int init); + int _prescaler(); + virtual void _write_it(int v); + virtual double _refclk_freq(); + virtual bool _rx_write_io(int value, int mask); + virtual bool _lock_detect(); + +protected: + virtual usrp_basic* usrp(); + + int d_R_RSV, d_LDP, d_TEST, d_ABP; + int d_N_RSV, d_CP_GAIN; + int d_P, d_PD2, d_CP2, d_CP1, d_TC, d_FL; + int d_CP3S, d_PDP, d_MUXOUT, d_PD1, d_CR; + int d_R_DIV, d_A_DIV, d_B_DIV; + int d_freq_mult; + + int d_spi_format; + int d_spi_enable; +}; + + +/****************************************************************************/ + + +class _lo_common : public _ADF410X_common +{ +public: + _lo_common(); + ~_lo_common(); + + double freq_min(); + double freq_max(); + + void set_divider(int main_or_aux, int divisor); + void set_divider(const std::string &main_or_aux, int divisor); + + struct freq_result_t set_freq(double freq); + +protected: + int d_R_DIV, d_P, d_CP2, d_CP1; + int d_DIVSEL, d_DIV2, d_CPGAIN; + int d_div, d_aux_div, d_main_div; +}; + + +/****************************************************************************/ + + +class db_wbx_lo_tx : public _lo_common, public wbx_base_tx +{ +public: + db_wbx_lo_tx(usrp_basic_sptr usrp, int which); + ~db_wbx_lo_tx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool set_gain(float gain); + + double _refclk_freq(); + bool _rx_write_io(int value, int mask); + bool _lock_detect(); + +protected: + usrp_basic* usrp(); +}; + + +/****************************************************************************/ + + +class db_wbx_lo_rx : public _lo_common, public wbx_base_rx +{ +public: + db_wbx_lo_rx(usrp_basic_sptr usrp, int which); + ~db_wbx_lo_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + + double _refclk_freq(); + bool _rx_write_io(int value, int mask); + bool _lock_detect(); + +protected: + usrp_basic* usrp(); +}; + +#endif diff --git a/usrp/host/lib/legacy/db_xcvr2450.cc b/usrp/host/lib/legacy/db_xcvr2450.cc new file mode 100644 index 00000000..9ce3168e --- /dev/null +++ b/usrp/host/lib/legacy/db_xcvr2450.cc @@ -0,0 +1,791 @@ +// +// Copyright 2008,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 asversion 3, or (at your option) +// any later version. +// +// GNU Radio is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GNU Radio; see the file COPYING. If not, write to +// the Free Software Foundation, Inc., 51 Franklin Street, +// Boston, MA 02110-1301, USA. + +#include +#include +#include +#include +#include +#include + +#if 0 +#define LO_OFFSET 4.25e6 +#else +#define LO_OFFSET 0 +#define NO_LO_OFFSET +#endif + + +/* ------------------------------------------------------------------------ + * A few comments about the XCVR2450: + * + * It is half-duplex. I.e., transmit and receive are mutually exclusive. + * There is a single LO for both the Tx and Rx sides. + * For our purposes the board is always either receiving or transmitting. + * + * Each board is uniquely identified by the *USRP hardware* instance and side + * This dictionary holds a weak reference to existing board controller so it + * can be created or retrieved as needed. + */ + + + +// TX IO Pins +#define HB_PA_OFF (1 << 15) // 5GHz PA, 1 = off, 0 = on +#define LB_PA_OFF (1 << 14) // 2.4GHz PA, 1 = off, 0 = on +#define ANTSEL_TX1_RX2 (1 << 13) // 1 = Ant 1 to TX, Ant 2 to RX +#define ANTSEL_TX2_RX1 (1 << 12) // 1 = Ant 2 to TX, Ant 1 to RX +#define TX_EN (1 << 11) // 1 = TX on, 0 = TX off +#define AD9515DIV (1 << 4) // 1 = Div by 3, 0 = Div by 2 + +#define TX_OE_MASK HB_PA_OFF|LB_PA_OFF|ANTSEL_TX1_RX2|ANTSEL_TX2_RX1|TX_EN|AD9515DIV +#define TX_SAFE_IO HB_PA_OFF|LB_PA_OFF|ANTSEL_TX1_RX2|AD9515DIV + +// RX IO Pins +#define LOCKDET (1 << 15) // This is an INPUT!!! +#define EN (1 << 14) +#define RX_EN (1 << 13) // 1 = RX on, 0 = RX off +#define RX_HP (1 << 12) +#define RX_OE_MASK EN|RX_EN|RX_HP +#define RX_SAFE_IO EN + +struct xcvr2450_key { + std::string serial_no; + int which; + + bool operator==(const xcvr2450_key &x){ + return x.serial_no ==serial_no && x.which == which; + } +}; + +class xcvr2450 +{ +private: + usrp_basic *d_raw_usrp; + int d_which; + + bool d_is_shutdown; + int d_spi_format, d_spi_enable; + + int d_mimo, d_int_div, d_frac_div, d_highband, d_five_gig; + int d_cp_current, d_ref_div, d_rssi_hbw; + int d_txlpf_bw, d_rxlpf_bw, d_rxlpf_fine, d_rxvga_ser; + int d_rssi_range, d_rssi_mode, d_rssi_mux; + int d_rx_hp_pin, d_rx_hpf, d_rx_ant; + int d_tx_ant, d_txvga_ser, d_tx_driver_lin; + int d_tx_vga_lin, d_tx_upconv_lin, d_tx_bb_gain; + int d_pabias_delay, d_pabias, rx_rf_gain, rx_bb_gain, d_txgain; + int d_rx_rf_gain, d_rx_bb_gain; + + int d_reg_standby, d_reg_int_divider, d_reg_frac_divider, d_reg_bandselpll; + int d_reg_cal, dsend_reg, d_reg_lpf, d_reg_rxrssi_ctrl, d_reg_txlin_gain; + int d_reg_pabias, d_reg_rxgain, d_reg_txgain; + + int d_ad9515_div; + + void _set_rfagc(float gain); + void _set_ifagc(float gain); + void _set_pga(float pga_gain); + +public: + usrp_basic *usrp(){ + return d_raw_usrp; + } + + xcvr2450(usrp_basic_sptr usrp, int which); + ~xcvr2450(); + void shutdown(); + + void set_reg_standby(); + + // Integer-Divider Ratio (3) + void set_reg_int_divider(); + + // Fractional-Divider Ratio (4) + void set_reg_frac_divider(); + + // Band Select and PLL (5) + void set_reg_bandselpll(); + + // Calibration (6) + void set_reg_cal(); + + // Lowpass Filter (7) + void set_reg_lpf(); + + // Rx Control/RSSI (8) + void set_reg_rxrssi_ctrl(); + + // Tx Linearity/Baseband Gain (9) + void set_reg_txlin_gain(); + + // PA Bias DAC (10) + void set_reg_pabias(); + + // Rx Gain (11) + void set_reg_rxgain(); + + // Tx Gain (12) + void set_reg_txgain(); + + // Send register write to SPI + void send_reg(int v); + + void set_gpio(); + bool lock_detect(); + bool set_rx_gain(float gain); + bool set_tx_gain(float gain); + + struct freq_result_t set_freq(double target_freq); +}; + + +/*****************************************************************************/ + + +xcvr2450::xcvr2450(usrp_basic_sptr _usrp, int which) + : d_raw_usrp(_usrp.get()), d_which(which), d_is_shutdown(false) +{ + // Handler for Tv Rx daughterboards. + // + // @param usrp: instance of usrp.source_c + // @param which: which side: 0, 1 corresponding to RX_A or RX_B respectively + + // Use MSB with no header + d_spi_format = SPI_FMT_MSB | SPI_FMT_HDR_0; + + if(which == 0) { + d_spi_enable = SPI_ENABLE_RX_A; + } + else { + d_spi_enable = SPI_ENABLE_RX_B; + } + + // Sane defaults + d_mimo = 1; // 0 = OFF, 1 = ON + d_int_div = 192; // 128 = min, 255 = max + d_frac_div = 0; // 0 = min, 65535 = max + d_highband = 0; // 0 = freq <= 5.4e9, 1 = freq > 5.4e9 + d_five_gig = 0; // 0 = freq <= 3.e9, 1 = freq > 3e9 + d_cp_current = 1; // 0 = 2mA, 1 = 4mA + d_ref_div = 1; // 1 to 7 + d_rssi_hbw = 0; // 0 = 2 MHz, 1 = 6 MHz + d_txlpf_bw = 1; // 1 = 12 MHz, 2 = 18 MHz, 3 = 24 MHz + d_rxlpf_bw = 1; // 0 = 7.5 MHz, 1 = 9.5 MHz, 2 = 14 MHz, 3 = 18 MHz + d_rxlpf_fine = 2; // 0 = 90%, 1 = 95%, 2 = 100%, 3 = 105%, 4 = 110% + d_rxvga_ser = 1; // 0 = RXVGA controlled by B7:1, 1=controlled serially + d_rssi_range = 1; // 0 = low range (datasheet typo), 1=high range (0.5V - 2.0V) + d_rssi_mode = 1; // 0 = enable follows RXHP, 1 = enabled + d_rssi_mux = 0; // 0 = RSSI, 1 = TEMP + d_rx_hp_pin = 0; // 0 = Fc set by rx_hpf, 1 = 600 KHz + d_rx_hpf = 0; // 0 = 100Hz, 1 = 30KHz + d_rx_ant = 0; // 0 = Ant. #1, 1 = Ant. #2 + d_tx_ant = 0; // 0 = Ant. #1, 1 = Ant. #2 + d_txvga_ser = 1; // 0 = TXVGA controlled by B6:1, 1=controlled serially + d_tx_driver_lin = 2; // 0=50% (worst linearity), 1=63%, 2=78%, 3=100% (best lin) + d_tx_vga_lin = 2; // 0=50% (worst linearity), 1=63%, 2=78%, 3=100% (best lin) + d_tx_upconv_lin = 2; // 0=50% (worst linearity), 1=63%, 2=78%, 3=100% (best lin) + d_tx_bb_gain = 3; // 0=maxgain-5dB, 1=max-3dB, 2=max-1.5dB, 3=max + d_pabias_delay = 15; // 0 = 0, 15 = 7uS + d_pabias = 0; // 0 = 0 uA, 63 = 315uA + d_rx_rf_gain = 0; // 0 = 0dB, 1 = 0dB, 2 = 15dB, 3 = 30dB + d_rx_bb_gain = 16; // 0 = min, 31 = max (0 - 62 dB) + + d_txgain = 63; // 0 = min, 63 = max + + // Initialize GPIO and ATR + usrp()->common_write_io(C_TX, d_which, TX_SAFE_IO, TX_OE_MASK); + usrp()->_common_write_oe(C_TX, d_which, TX_OE_MASK, 0xffff); + usrp()->common_write_atr_txval(C_TX, d_which, TX_SAFE_IO); + usrp()->common_write_atr_rxval(C_TX, d_which, TX_SAFE_IO); + usrp()->common_write_atr_mask(C_TX, d_which, TX_OE_MASK); + + usrp()->common_write_io(C_RX, d_which, RX_SAFE_IO, RX_OE_MASK); + usrp()->_common_write_oe(C_RX, d_which, RX_OE_MASK, 0xffff); + usrp()->common_write_atr_txval(C_RX, d_which, RX_SAFE_IO); + usrp()->common_write_atr_rxval(C_RX, d_which, RX_SAFE_IO); + usrp()->common_write_atr_mask(C_RX, d_which, RX_OE_MASK); + + // Initialize chipset + // TODO: perform reset sequence to ensure power up defaults + set_reg_standby(); + set_reg_bandselpll(); + set_reg_cal(); + set_reg_lpf(); + set_reg_rxrssi_ctrl(); + set_reg_txlin_gain(); + set_reg_pabias(); + set_reg_rxgain(); + set_reg_txgain(); + //FIXME: set_freq(2.45e9); +} + +xcvr2450::~xcvr2450() +{ + //printf("xcvr2450::destructor\n"); + shutdown(); +} + +void +xcvr2450::shutdown() +{ + if (!d_is_shutdown){ + d_is_shutdown = true; + usrp()->common_write_atr_txval(C_TX, d_which, TX_SAFE_IO); + usrp()->common_write_atr_rxval(C_TX, d_which, TX_SAFE_IO); + usrp()->common_write_atr_txval(C_RX, d_which, RX_SAFE_IO); + usrp()->common_write_atr_rxval(C_RX, d_which, RX_SAFE_IO); + } +} + + +void +xcvr2450::set_reg_standby() +{ + d_reg_standby = ((d_mimo<<17) | + (1<<16) | + (1<<6) | + (1<<5) | + (1<<4) | 2); + send_reg(d_reg_standby); +} + +void +xcvr2450::set_reg_int_divider() +{ + d_reg_int_divider = (((d_frac_div & 0x03)<<16) | + (d_int_div<<4) | 3); + send_reg(d_reg_int_divider); +} + +void +xcvr2450::set_reg_frac_divider() +{ + d_reg_frac_divider = ((d_frac_div & 0xfffc)<<2) | 4; + send_reg(d_reg_frac_divider); +} + +void +xcvr2450::set_reg_bandselpll() +{ + d_reg_bandselpll = ((d_mimo<<17) | + (1<<16) | + (1<<15) | + (0<<11) | + (d_highband<<10) | + (d_cp_current<<9) | + (d_ref_div<<5) | + (d_five_gig<<4) | 5); + send_reg(d_reg_bandselpll); + d_reg_bandselpll = ((d_mimo<<17) | + (1<<16) | + (1<<15) | + (1<<11) | + (d_highband<<10) | + (d_cp_current<<9) | + (d_ref_div<<5) | + (d_five_gig<<4) | 5); + send_reg(d_reg_bandselpll); +} + +void +xcvr2450::set_reg_cal() +{ + // FIXME do calibration + d_reg_cal = (1<<14)|6; + send_reg(d_reg_cal); +} + +void +xcvr2450::set_reg_lpf() +{ + d_reg_lpf = ( + (d_rssi_hbw<<15) | + (d_txlpf_bw<<10) | + (d_rxlpf_bw<<9) | + (d_rxlpf_fine<<4) | 7); + send_reg(d_reg_lpf); +} + +void +xcvr2450::set_reg_rxrssi_ctrl() +{ + d_reg_rxrssi_ctrl = ((d_rxvga_ser<<16) | + (d_rssi_range<<15) | + (d_rssi_mode<<14) | + (d_rssi_mux<<12) | + (1<<9) | + (d_rx_hpf<<6) | + (1<<4) | 8); + send_reg(d_reg_rxrssi_ctrl); +} + +void +xcvr2450::set_reg_txlin_gain() +{ + d_reg_txlin_gain = ((d_txvga_ser<<14) | + (d_tx_driver_lin<<12) | + (d_tx_vga_lin<<10) | + (d_tx_upconv_lin<<6) | + (d_tx_bb_gain<<4) | 9); + send_reg(d_reg_txlin_gain); +} + +void +xcvr2450::set_reg_pabias() +{ + d_reg_pabias = ( + (d_pabias_delay<<10) | + (d_pabias<<4) | 10); + send_reg(d_reg_pabias); +} + +void +xcvr2450::set_reg_rxgain() +{ + d_reg_rxgain = ( + (d_rx_rf_gain<<9) | + (d_rx_bb_gain<<4) | 11); + send_reg(d_reg_rxgain); +} + +void +xcvr2450::set_reg_txgain() +{ + d_reg_txgain = (d_txgain<<4) | 12; + send_reg(d_reg_txgain); +} + +void +xcvr2450::send_reg(int v) +{ + // Send 24 bits, it keeps last 18 clocked in + char c[3]; + c[0] = (char)((v >> 16) & 0xff); + c[1] = (char)((v >> 8) & 0xff); + c[2] = (char)((v & 0xff)); + std::string s(c, 3); + + usrp()->_write_spi(0, d_spi_enable, d_spi_format, s); + //printf("xcvr2450: Setting reg %d to %X\n", (v&15), v); +} + +// ---------------------------------------------------------------- + +void +xcvr2450::set_gpio() +{ + // We calculate four values: + // + // io_rx_while_rx: what to drive onto io_rx_* when receiving + // io_rx_while_tx: what to drive onto io_rx_* when transmitting + // io_tx_while_rx: what to drive onto io_tx_* when receiving + // io_tx_while_tx: what to drive onto io_tx_* when transmitting + // + // B1-B7 is ignored as gain is set serially for now. + + int rx_hp, tx_antsel, rx_antsel, tx_pa_sel; + if(d_rx_hp_pin) + rx_hp = RX_HP; + else + rx_hp = 0; + + if(d_tx_ant) + tx_antsel = ANTSEL_TX2_RX1; + else + tx_antsel = ANTSEL_TX1_RX2; + + if(d_rx_ant) + rx_antsel = ANTSEL_TX2_RX1; + else + rx_antsel = ANTSEL_TX1_RX2; + + if(d_five_gig) + tx_pa_sel = LB_PA_OFF; + else + tx_pa_sel = HB_PA_OFF; + + // Reset GPIO and ATR + // FIXME: dont set io, oe, atr mask once basic code stops overriding our settings + usrp()->common_write_io(C_TX, d_which, TX_SAFE_IO, TX_OE_MASK); + usrp()->_common_write_oe(C_TX, d_which, TX_OE_MASK, 0xffff); + usrp()->common_write_atr_txval(C_TX, d_which, tx_pa_sel|tx_antsel|TX_EN|AD9515DIV); + usrp()->common_write_atr_rxval(C_TX, d_which, HB_PA_OFF|LB_PA_OFF|rx_antsel|AD9515DIV); + usrp()->common_write_atr_mask(C_TX, d_which, TX_OE_MASK); + + usrp()->common_write_io(C_RX, d_which, RX_SAFE_IO, RX_OE_MASK); + usrp()->_common_write_oe(C_RX, d_which, RX_OE_MASK, 0xffff); + usrp()->common_write_atr_txval(C_RX, d_which, EN|rx_hp); + usrp()->common_write_atr_rxval(C_RX, d_which, EN|rx_hp|RX_EN); + usrp()->common_write_atr_mask(C_RX, d_which, RX_OE_MASK); + + //printf("GPIO: RXRX=%04X RXTX=%04X TXRX=%04X TXTX=%04X\n", + // io_rx_while_rx, io_rx_while_tx, io_tx_while_rx, io_tx_while_tx); +} + + +struct freq_result_t +xcvr2450::set_freq(double target_freq) +{ + struct freq_result_t args = {false, 0}; + + double scaler; + + if(target_freq > 3e9) { + d_five_gig = 1; + d_ad9515_div = 3; + scaler = 4.0/5.0; + } + else { + d_five_gig = 0; + d_ad9515_div = 3; + scaler = 4.0/3.0; + } + + if(target_freq > 5.408e9) { + d_highband = 1; + } + else { + d_highband = 0; + } + + double vco_freq = target_freq*scaler; + double sys_clk = usrp()->fpga_master_clock_freq(); // Usually 64e6 + double ref_clk = sys_clk / d_ad9515_div; + + double phdet_freq = ref_clk/d_ref_div; + double div = vco_freq/phdet_freq; + d_int_div = int(floor(div)); + d_frac_div = int((div-d_int_div)*65536.0); + // double actual_freq = phdet_freq*(d_int_div+(d_frac_div/65536.0))/scaler; + + //printf("RF=%f VCO=%f R=%d PHD=%f DIV=%3.5f I=%3d F=%5d ACT=%f\n", + // target_freq, vco_freq, d_ref_div, phdet_freq, + // div, d_int_div, d_frac_div, actual_freq); + + set_gpio(); + set_reg_int_divider(); + set_reg_frac_divider(); + set_reg_bandselpll(); + + args.ok = lock_detect(); +#ifdef NO_LO_OFFSET + args.baseband_freq = target_freq; +#else + args.baseband_freq = actual_freq; +#endif + + if(!args.ok){ + printf("Fail %f\n", target_freq); + } + return args; +} + +bool +xcvr2450::lock_detect() +{ + /* + @returns: the value of the VCO/PLL lock detect bit. + @rtype: 0 or 1 + */ + if(usrp()->common_read_io(C_RX, d_which) & LOCKDET) { + return true; + } + else { // Give it a second chance + if(usrp()->common_read_io(C_RX, d_which) & LOCKDET) + return true; + else + return false; + } +} + +bool +xcvr2450::set_rx_gain(float gain) +{ + if(gain < 0.0) + gain = 0.0; + if(gain > 92.0) + gain = 92.0; + + // Split the gain between RF and baseband + // This is experimental, not prescribed + if(gain < 31.0) { + d_rx_rf_gain = 0; // 0 dB RF gain + rx_bb_gain = int(gain/2.0); + } + + if(gain >= 30.0 and gain < 60.5) { + d_rx_rf_gain = 2; // 15 dB RF gain + d_rx_bb_gain = int((gain-15.0)/2.0); + } + + if(gain >= 60.5) { + d_rx_rf_gain = 3; // 30.5 dB RF gain + d_rx_bb_gain = int((gain-30.5)/2.0); + } + + set_reg_rxgain(); + + return true; +} + +bool +xcvr2450::set_tx_gain(float gain) +{ + if(gain < 0.0) { + gain = 0.0; + } + if(gain > 30.0) { + gain = 30.0; + } + + d_txgain = int((gain/30.0)*63); + set_reg_txgain(); + + return true; +} + + +/*****************************************************************************/ + + +struct xcvr2450_table_entry { + xcvr2450_key key; + boost::weak_ptr value; + + xcvr2450_table_entry(const xcvr2450_key &_key, boost::weak_ptr _value) + : key(_key), value(_value) {} +}; + +typedef std::vector xcvr2450_table; + +static boost::mutex s_table_mutex; +static xcvr2450_table s_table; + +static xcvr2450_sptr +_get_or_make_xcvr2450(usrp_basic_sptr usrp, int which) +{ + xcvr2450_key key = {usrp->serial_number(), which}; + + boost::mutex::scoped_lock guard(s_table_mutex); + + for (xcvr2450_table::iterator p = s_table.begin(); p != s_table.end();){ + if (p->value.expired()) // weak pointer is now dead + p = s_table.erase(p); // erase it + else { + if (key == p->key){ // found it + return xcvr2450_sptr(p->value); + } + else + ++p; // keep looking + } + } + + // We don't have the xcvr2450 we're looking for + + // create a new one and stick it in the table. + xcvr2450_sptr r(new xcvr2450(usrp, which)); + xcvr2450_table_entry t(key, r); + s_table.push_back(t); + + return r; +} + + +/*****************************************************************************/ + + +db_xcvr2450_base::db_xcvr2450_base(usrp_basic_sptr usrp, int which) + : db_base(usrp, which) +{ + /* + * Abstract base class for all xcvr2450 boards. + * + * Derive board specific subclasses from db_xcvr2450_base_{tx,rx} + * + * @param usrp: instance of usrp.source_c + * @param which: which side: 0 or 1 corresponding to side A or B respectively + * @type which: int + */ + + d_xcvr = _get_or_make_xcvr2450(usrp, which); +} + +db_xcvr2450_base::~db_xcvr2450_base() +{ +} + +void +db_xcvr2450_base::shutdown_common() +{ + // If the usrp_basic in the xcvr2450 is the same as the usrp_basic + // in the daughterboard, shutdown the xcvr now (when only one of Tx + // and Rx is open, this is always true). + + if (d_xcvr->usrp() == usrp()){ + //std::cerr << "db_xcvr2450_base::shutdown_common: same -> shutting down\n"; + d_xcvr->shutdown(); + } + else { + //std::cerr << "db_xcvr2450_base::shutdown_common: different -> ignoring\n"; + } +} + +struct freq_result_t +db_xcvr2450_base::set_freq(double target_freq) +{ + /* + * @returns (ok, actual_baseband_freq) where: + * ok is True or False and indicates success or failure, + * actual_baseband_freq is the RF frequency that corresponds to DC in the IF. + */ + return d_xcvr->set_freq(target_freq+d_lo_offset); +} + +bool +db_xcvr2450_base::is_quadrature() +{ + /* + * Return True if this board requires both I & Q analog channels. + * + * This bit of info is useful when setting up the USRP Rx mux register. + */ + return true; +} + +double +db_xcvr2450_base::freq_min() +{ + return 2.4e9; +} + +double +db_xcvr2450_base::freq_max() +{ + return 6.0e9; +} + + +/******************************************************************************/ + + +db_xcvr2450_tx::db_xcvr2450_tx(usrp_basic_sptr usrp, int which) + : db_xcvr2450_base(usrp, which) +{ + set_lo_offset(LO_OFFSET); + //printf("db_xcvr2450_tx::db_xcvr2450_tx\n"); +} + +db_xcvr2450_tx::~db_xcvr2450_tx() +{ + shutdown(); +} + +void +db_xcvr2450_tx::shutdown() +{ + if (!d_is_shutdown){ + d_is_shutdown = true; + shutdown_common(); + } +} + +float +db_xcvr2450_tx::gain_min() +{ + return 0; +} + +float +db_xcvr2450_tx::gain_max() +{ + return 30; +} + +float +db_xcvr2450_tx::gain_db_per_step() +{ + return (30.0/63.0); +} + +bool +db_xcvr2450_tx::set_gain(float gain) +{ + return d_xcvr->set_tx_gain(gain); +} + +bool +db_xcvr2450_tx::i_and_q_swapped() +{ + return true; +} + + +/******************************************************************************/ + + +db_xcvr2450_rx::db_xcvr2450_rx(usrp_basic_sptr usrp, int which) + : db_xcvr2450_base(usrp, which) +{ + /* + * @param usrp: instance of usrp.source_c + * @param which: 0 or 1 corresponding to side RX_A or RX_B respectively. + */ + set_lo_offset(LO_OFFSET); + //printf("db_xcvr2450_rx:d_xcvr_2450_rx\n"); +} + +db_xcvr2450_rx::~db_xcvr2450_rx() +{ + shutdown(); +} + +void +db_xcvr2450_rx::shutdown() +{ + if (!d_is_shutdown){ + d_is_shutdown = true; + shutdown_common(); + } +} + +float +db_xcvr2450_rx::gain_min() +{ + return 0.0; +} + +float +db_xcvr2450_rx::gain_max() +{ + return 92.0; +} + +float +db_xcvr2450_rx::gain_db_per_step() +{ + return 1; +} + +bool +db_xcvr2450_rx::set_gain(float gain) +{ + return d_xcvr->set_rx_gain(gain); +} diff --git a/usrp/host/lib/legacy/db_xcvr2450.h b/usrp/host/lib/legacy/db_xcvr2450.h new file mode 100644 index 00000000..1f9dd7c2 --- /dev/null +++ b/usrp/host/lib/legacy/db_xcvr2450.h @@ -0,0 +1,92 @@ +/* -*- c++ -*- */ +// +// Copyright 2008,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 asversion 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. + +#ifndef DB_XCVR2450_H +#define DB_XCVR2450_H + +#include +#include + +class xcvr2450; +typedef boost::shared_ptr xcvr2450_sptr; + + +/******************************************************************************/ + + +class db_xcvr2450_base: public db_base +{ + /* + * Abstract base class for all xcvr2450 boards. + * + * Derive board specific subclasses from db_xcvr2450_base_{tx,rx} + */ +public: + db_xcvr2450_base(usrp_basic_sptr usrp, int which); + ~db_xcvr2450_base(); + struct freq_result_t set_freq(double target_freq); + bool is_quadrature(); + double freq_min(); + double freq_max(); + +protected: + xcvr2450_sptr d_xcvr; + void shutdown_common(); +}; + + +/******************************************************************************/ + + +class db_xcvr2450_tx : public db_xcvr2450_base +{ +protected: + void shutdown(); + +public: + db_xcvr2450_tx(usrp_basic_sptr usrp, int which); + ~db_xcvr2450_tx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool set_gain(float gain); + bool i_and_q_swapped(); +}; + +class db_xcvr2450_rx : public db_xcvr2450_base +{ +protected: + void shutdown(); + +public: + db_xcvr2450_rx(usrp_basic_sptr usrp, int which); + ~db_xcvr2450_rx(); + + float gain_min(); + float gain_max(); + float gain_db_per_step(); + bool set_gain(float gain); +}; + + + +#endif diff --git a/usrp/host/lib/dump_data.py b/usrp/host/lib/legacy/dump_data.py similarity index 100% rename from usrp/host/lib/dump_data.py rename to usrp/host/lib/legacy/dump_data.py diff --git a/usrp/host/lib/fusb.cc b/usrp/host/lib/legacy/fusb.cc similarity index 100% rename from usrp/host/lib/fusb.cc rename to usrp/host/lib/legacy/fusb.cc diff --git a/usrp/host/lib/fusb.h b/usrp/host/lib/legacy/fusb.h similarity index 100% rename from usrp/host/lib/fusb.h rename to usrp/host/lib/legacy/fusb.h diff --git a/usrp/host/lib/legacy/fusb_darwin.cc b/usrp/host/lib/legacy/fusb_darwin.cc new file mode 100644 index 00000000..737387b8 --- /dev/null +++ b/usrp/host/lib/legacy/fusb_darwin.cc @@ -0,0 +1,572 @@ +/* -*- c++ -*- */ +/* + * Copyright 2006 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +// tell mld_threads to NOT use omni_threads, +// but rather Darwin's pthreads +#define _USE_OMNI_THREADS_ +#define DO_DEBUG 0 + +#include +#include "fusb.h" +#include "fusb_darwin.h" +#include "darwin_libusb.h" + +static const int USB_TIMEOUT = 100; // in milliseconds +static const UInt8 NUM_QUEUE_ITEMS = 20; + +fusb_devhandle_darwin::fusb_devhandle_darwin (usb_dev_handle* udh) + : fusb_devhandle (udh) +{ + // that's it +} + +fusb_devhandle_darwin::~fusb_devhandle_darwin () +{ + // nop +} + +fusb_ephandle* +fusb_devhandle_darwin::make_ephandle (int endpoint, bool input_p, + int block_size, int nblocks) +{ + return new fusb_ephandle_darwin (this, endpoint, input_p, + block_size, nblocks); +} + +// ---------------------------------------------------------------- + +fusb_ephandle_darwin::fusb_ephandle_darwin (fusb_devhandle_darwin* dh, + int endpoint, bool input_p, + int block_size, int nblocks) + : fusb_ephandle (endpoint, input_p, block_size, nblocks), + d_devhandle (dh), d_pipeRef (0), d_transferType (0), + d_interfaceRef (0), d_interface (0), d_queue (0), + d_buffer (0), d_bufLenBytes (0) +{ + d_bufLenBytes = fusb_sysconfig::max_block_size(); + +// create circular buffer + d_buffer = new circular_buffer (NUM_QUEUE_ITEMS * d_bufLenBytes, + !d_input_p, d_input_p); + +// create the queue + d_queue = new circular_linked_list (NUM_QUEUE_ITEMS); + d_queue->iterate_start (); + s_node_ptr l_node = d_queue->iterate_next (); + while (l_node) { + l_node->both (new s_both (l_node, this)); + s_buffer_ptr l_buf = new s_buffer (d_bufLenBytes); + l_node->object (l_buf); + l_node = d_queue->iterate_next (); + l_buf = NULL; + } + + d_readRunning = new mld_mutex (); + d_runThreadRunning = new mld_mutex (); + d_runBlock = new mld_condition (); + d_readBlock = new mld_condition (); +} + +fusb_ephandle_darwin::~fusb_ephandle_darwin () +{ + stop (); + + d_queue->iterate_start (); + s_node_ptr l_node = d_queue->iterate_next (); + while (l_node) { + s_both_ptr l_both = l_node->both (); + delete l_both; + l_both = NULL; + l_node->both (NULL); + s_buffer_ptr l_buf = l_node->object (); + delete l_buf; + l_buf = NULL; + l_node->object (NULL); + l_node = d_queue->iterate_next (); + } + delete d_queue; + d_queue = NULL; + delete d_buffer; + d_buffer = NULL; + delete d_readRunning; + d_readRunning = NULL; + delete d_runThreadRunning; + d_runThreadRunning = NULL; + delete d_runBlock; + d_runBlock = NULL; + delete d_readBlock; + d_readBlock = NULL; +} + +bool +fusb_ephandle_darwin::start () +{ + UInt8 direction, number, interval; + UInt16 maxPacketSize; + +// reset circular buffer + d_buffer->reset (); + +// reset the queue + d_queue->num_used (0); + d_queue->iterate_start (); + s_node_ptr l_node = d_queue->iterate_next (); + while (l_node) { + l_node->both()->set (l_node, this); + l_node->object()->reset (); + l_node->set_available (); + l_node = d_queue->iterate_next (); + } + + d_pipeRef = d_transferType = 0; + + usb_dev_handle* dev = d_devhandle->get_usb_dev_handle (); + if (! dev) + USB_ERROR_STR (false, -ENXIO, "fusb_ephandle_darwin::start: " + "null device"); + + darwin_dev_handle* device = (darwin_dev_handle*) dev->impl_info; + if (! device) + USB_ERROR_STR (false, -ENOENT, "fusb_ephandle_darwin::start: " + "device not initialized"); + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::start: " + "dev = %p, device = %p\n", dev, device); + + d_interfaceRef = device->interface; + if (! d_interfaceRef) + USB_ERROR_STR (false, -EACCES, "fusb_ephandle_darwin::start: " + "interface used without being claimed"); + d_interface = *d_interfaceRef; + +// get read or write pipe info (depends on "d_input_p") + + if (usb_debug > 3) + fprintf (stderr, "fusb_ephandle_darwin::start " + "d_endpoint = %d, d_input_p = %s\n", + d_endpoint, d_input_p ? "TRUE" : "FALSE"); + + int l_endpoint = (d_input_p ? USB_ENDPOINT_IN : USB_ENDPOINT_OUT); + int pipeRef = ep_to_pipeRef (device, d_endpoint | l_endpoint); + if (pipeRef < 0) + USB_ERROR_STR (false, -EINVAL, "fusb_ephandle_darwin::start " + " invalid pipeRef.\n"); + + d_pipeRef = pipeRef; + d_interface->GetPipeProperties (d_interfaceRef, + d_pipeRef, + &direction, + &number, + &d_transferType, + &maxPacketSize, + &interval); + if (usb_debug == 3) + fprintf (stderr, "fusb_ephandle_darwin::start: %s: ep = 0x%02x, " + "pipeRef = %d, d_i = %p, d_iR = %p, if_dir = %d, if_# = %d, " + "if_int = %d, if_maxPS = %d\n", d_input_p ? "read" : "write", + d_endpoint, d_pipeRef, d_interface, d_interfaceRef, direction, + number, interval, maxPacketSize); + + // set global start boolean + d_started = true; + + // lock the runBlock mutex, before creating the run thread. + // this guarantees that we can control execution between these 2 threads + d_runBlock->mutex ()->lock (); + + // create the run thread, which allows OSX to process I/O separately + d_runThread = new mld_thread (run_thread, this); + + // wait until the run thread (and possibky read thread) are -really- + // going; this will unlock the mutex before waiting for a signal () + d_runBlock->wait (); + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::start: %s started.\n", + d_input_p ? "read" : "write"); + + return (true); +} + +void +fusb_ephandle_darwin::run_thread (void* arg) +{ + fusb_ephandle_darwin* This = static_cast(arg); + + // lock the run thread running mutex; if ::stop() is called, it will + // first abort() the pipe then wait for the run thread to finish, + // via a lock() on this mutex + mld_mutex_ptr l_runThreadRunning = This->d_runThreadRunning; + l_runThreadRunning->lock (); + + mld_mutex_ptr l_readRunning = This->d_readRunning; + mld_condition_ptr l_readBlock = This->d_readBlock; + mld_mutex_ptr l_readBlock_mutex = l_readBlock->mutex (); + + bool l_input_p = This->d_input_p; + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::run_thread: " + "starting for %s.\n", + l_input_p ? "read" : "write"); + + usb_interface_t** l_interfaceRef = This->d_interfaceRef; + usb_interface_t* l_interface = This->d_interface; + CFRunLoopSourceRef l_cfSource; + +// create async run loop + l_interface->CreateInterfaceAsyncEventSource (l_interfaceRef, &l_cfSource); + CFRunLoopAddSource (CFRunLoopGetCurrent (), l_cfSource, + kCFRunLoopDefaultMode); +// get run loop reference, to allow other threads to stop + This->d_CFRunLoopRef = CFRunLoopGetCurrent (); + + mld_thread_ptr l_rwThread = NULL; + + if (l_input_p) { + // lock the readBlock mutex, before creating the read thread. + // this guarantees that we can control execution between these 2 threads + l_readBlock_mutex->lock (); + // create the read thread, which just issues all of the starting + // async read commands, then returns + l_rwThread = new mld_thread (read_thread, arg); + // wait until the the read thread is -really- going; this will + // unlock the read block mutex before waiting for a signal () + l_readBlock->wait (); + } + + // now signal the run condition to release and finish ::start(). + + // lock the runBlock mutex first; this will force waiting until the + // ->wait() command is issued in ::start() + mld_mutex_ptr l_run_block_mutex = This->d_runBlock->mutex (); + l_run_block_mutex->lock (); + + // now that the lock is in place, signal the parent thread that + // things are running + This->d_runBlock->signal (); + + // release the run_block mutex, just in case + l_run_block_mutex->unlock (); + + // run the loop + CFRunLoopRun (); + + if (l_input_p) { + // wait for read_thread () to finish, if needed + l_readRunning->lock (); + l_readRunning->unlock (); + } + + // remove run loop stuff + CFRunLoopRemoveSource (CFRunLoopGetCurrent (), + l_cfSource, kCFRunLoopDefaultMode); + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::run_thread: finished for %s.\n", + l_input_p ? "read" : "write"); + + // release the run thread running mutex + l_runThreadRunning->unlock (); +} + +void +fusb_ephandle_darwin::read_thread (void* arg) +{ + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::read_thread: starting.\n"); + + fusb_ephandle_darwin* This = static_cast(arg); + + // before doing anything else, lock the read running mutex. this + // mutex does flow control between this thread and the run_thread + mld_mutex_ptr l_readRunning = This->d_readRunning; + l_readRunning->lock (); + + // signal the read condition from run_thread() to continue + + // lock the readBlock mutex first; this will force waiting until the + // ->wait() command is issued in ::run_thread() + mld_condition_ptr l_readBlock = This->d_readBlock; + mld_mutex_ptr l_read_block_mutex = l_readBlock->mutex (); + l_read_block_mutex->lock (); + + // now that the lock is in place, signal the parent thread that + // things are running here + l_readBlock->signal (); + + // release the run_block mutex, just in case + l_read_block_mutex->unlock (); + + // queue up all of the available read requests + s_queue_ptr l_queue = This->d_queue; + l_queue->iterate_start (); + s_node_ptr l_node = l_queue->iterate_next (); + while (l_node) { + This->read_issue (l_node->both ()); + l_node = l_queue->iterate_next (); + } + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::read_thread: finished.\n"); + + // release the read running mutex, to let the parent thread knows + // that this thread is finished + l_readRunning->unlock (); +} + +void +fusb_ephandle_darwin::read_issue (s_both_ptr l_both) +{ + if ((! l_both) || (! d_started)) { + if (usb_debug > 4) + fprintf (stderr, "fusb_ephandle_darwin::read_issue: Doing nothing; " + "l_both is %X; started is %s\n", (unsigned int) l_both, + d_started ? "TRUE" : "FALSE"); + return; + } + +// set the node and buffer from the input "both" + s_node_ptr l_node = l_both->node (); + s_buffer_ptr l_buf = l_node->object (); + void* v_buffer = (void*) l_buf->buffer (); + +// read up to d_bufLenBytes + UInt32 bufLen = d_bufLenBytes; + l_buf->n_used (bufLen); + +// setup system call result + io_return_t result = kIOReturnSuccess; + + if (d_transferType == kUSBInterrupt) +/* This is an interrupt pipe. We can't specify a timeout. */ + result = d_interface->ReadPipeAsync + (d_interfaceRef, d_pipeRef, v_buffer, bufLen, + (IOAsyncCallback1) read_completed, (void*) l_both); + else + result = d_interface->ReadPipeAsyncTO + (d_interfaceRef, d_pipeRef, v_buffer, bufLen, 0, USB_TIMEOUT, + (IOAsyncCallback1) read_completed, (void*) l_both); + + if (result != kIOReturnSuccess) + USB_ERROR_STR_NO_RET (- darwin_to_errno (result), + "fusb_ephandle_darwin::read_issue " + "(ReadPipeAsync%s): %s", + d_transferType == kUSBInterrupt ? "" : "TO", + darwin_error_str (result)); + else if (usb_debug > 4) + fprintf (stderr, "fusb_ephandle_darwin::read_issue: " + "Queued %X (%ld Bytes)\n", (unsigned int) l_both, bufLen); +} + +void +fusb_ephandle_darwin::read_completed (void* refCon, + io_return_t result, + void* io_size) +{ + UInt32 l_size = (UInt32) io_size; + s_both_ptr l_both = static_cast(refCon); + fusb_ephandle_darwin* This = static_cast(l_both->This ()); + s_node_ptr l_node = l_both->node (); + circular_buffer* l_buffer = This->d_buffer; + s_buffer_ptr l_buf = l_node->object (); + UInt32 l_i_size = l_buf->n_used (); + + if (This->d_started && (l_i_size != l_size)) + fprintf (stderr, "fusb_ephandle_darwin::read_completed: " + "Expected %ld bytes; read %ld.\n", + l_i_size, l_size); + else if (usb_debug > 4) + fprintf (stderr, "fusb_ephandle_darwin::read_completed: " + "Read %X (%ld bytes)\n", + (unsigned int) l_both, l_size); + +// add this read to the transfer buffer + if (l_buffer->enqueue (l_buf->buffer (), l_size) == -1) { + fputs ("iU", stderr); + fflush (stderr); + } + +// set buffer's # data to 0 + l_buf->n_used (0); + +// issue another read for this "both" + This->read_issue (l_both); +} + +int +fusb_ephandle_darwin::read (void* buffer, int nbytes) +{ + UInt32 l_nbytes = (UInt32) nbytes; + d_buffer->dequeue ((char*) buffer, &l_nbytes); + + if (usb_debug > 4) + fprintf (stderr, "fusb_ephandle_darwin::read: request for %d bytes, %ld bytes retrieved.\n", nbytes, l_nbytes); + + return ((int) l_nbytes); +} + +int +fusb_ephandle_darwin::write (const void* buffer, int nbytes) +{ + UInt32 l_nbytes = (UInt32) nbytes; + + if (! d_started) { + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::write: Not yet started.\n"); + + return (0); + } + + while (l_nbytes != 0) { +// find out how much data to copy; limited to "d_bufLenBytes" per node + UInt32 t_nbytes = (l_nbytes > d_bufLenBytes) ? d_bufLenBytes : l_nbytes; + +// get next available node to write into; +// blocks internally if none available + s_node_ptr l_node = d_queue->find_next_available_node (); + +// copy the input into the node's buffer + s_buffer_ptr l_buf = l_node->object (); + l_buf->buffer ((char*) buffer, t_nbytes); + void* v_buffer = (void*) l_buf->buffer (); + +// setup callback parameter & system call return + s_both_ptr l_both = l_node->both (); + io_return_t result = kIOReturnSuccess; + + if (d_transferType == kUSBInterrupt) +/* This is an interrupt pipe ... can't specify a timeout. */ + result = d_interface->WritePipeAsync + (d_interfaceRef, d_pipeRef, v_buffer, t_nbytes, + (IOAsyncCallback1) write_completed, (void*) l_both); + else + result = d_interface->WritePipeAsyncTO + (d_interfaceRef, d_pipeRef, v_buffer, t_nbytes, 0, USB_TIMEOUT, + (IOAsyncCallback1) write_completed, (void*) l_both); + + if (result != kIOReturnSuccess) + USB_ERROR_STR (-1, - darwin_to_errno (result), + "fusb_ephandle_darwin::write_thread " + "(WritePipeAsync%s): %s", + d_transferType == kUSBInterrupt ? "" : "TO", + darwin_error_str (result)); + else if (usb_debug > 4) { + fprintf (stderr, "fusb_ephandle_darwin::write_thread: " + "Queued %X (%ld Bytes)\n", (unsigned int) l_both, t_nbytes); + } + l_nbytes -= t_nbytes; + } + + return (nbytes); +} + +void +fusb_ephandle_darwin::write_completed (void* refCon, + io_return_t result, + void* io_size) +{ + s_both_ptr l_both = static_cast(refCon); + fusb_ephandle_darwin* This = static_cast(l_both->This ()); + UInt32 l_size = (UInt32) io_size; + s_node_ptr l_node = l_both->node (); + s_queue_ptr l_queue = This->d_queue; + s_buffer_ptr l_buf = l_node->object (); + UInt32 l_i_size = l_buf->n_used (); + + if (This->d_started && (l_i_size != l_size)) + fprintf (stderr, "fusb_ephandle_darwin::write_completed: " + "Expected %ld bytes written; wrote %ld.\n", + l_i_size, l_size); + else if (usb_debug > 4) + fprintf (stderr, "fusb_ephandle_darwin::write_completed: " + "Wrote %X (%ld Bytes)\n", (unsigned int) l_both, l_size); + +// set buffer's # data to 0 + l_buf->n_used (0); +// make the node available for reuse + l_queue->make_node_available (l_node); +} + +void +fusb_ephandle_darwin::abort () +{ + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::abort: starting.\n"); + + io_return_t result = d_interface->AbortPipe (d_interfaceRef, d_pipeRef); + + if (result != kIOReturnSuccess) + USB_ERROR_STR_NO_RET (- darwin_to_errno (result), + "fusb_ephandle_darwin::abort " + "(AbortPipe): %s", darwin_error_str (result)); + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::abort: finished.\n"); +} + +bool +fusb_ephandle_darwin::stop () +{ + if (! d_started) + return (true); + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::stop: stopping %s.\n", + d_input_p ? "read" : "write"); + + d_started = false; + +// abort any pending IO transfers + abort (); + +// wait for write transfer to finish + wait_for_completion (); + +// tell IO buffer to abort any waiting conditions + d_buffer->abort (); + +// stop the run loop + CFRunLoopStop (d_CFRunLoopRef); + +// wait for the runThread to stop + d_runThreadRunning->lock (); + d_runThreadRunning->unlock (); + + if (usb_debug) + fprintf (stderr, "fusb_ephandle_darwin::stop: %s stopped.\n", + d_input_p ? "read" : "write"); + + return (true); +} + +void +fusb_ephandle_darwin::wait_for_completion () +{ + if (d_queue) + while (d_queue->in_use ()) + usleep (1000); +} diff --git a/usrp/host/lib/fusb_darwin.h b/usrp/host/lib/legacy/fusb_darwin.h similarity index 100% rename from usrp/host/lib/fusb_darwin.h rename to usrp/host/lib/legacy/fusb_darwin.h diff --git a/usrp/host/lib/fusb_generic.cc b/usrp/host/lib/legacy/fusb_generic.cc similarity index 100% rename from usrp/host/lib/fusb_generic.cc rename to usrp/host/lib/legacy/fusb_generic.cc diff --git a/usrp/host/lib/fusb_generic.h b/usrp/host/lib/legacy/fusb_generic.h similarity index 100% rename from usrp/host/lib/fusb_generic.h rename to usrp/host/lib/legacy/fusb_generic.h diff --git a/usrp/host/lib/legacy/fusb_linux.cc b/usrp/host/lib/legacy/fusb_linux.cc new file mode 100644 index 00000000..6c484569 --- /dev/null +++ b/usrp/host/lib/legacy/fusb_linux.cc @@ -0,0 +1,692 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include // libusb header +#include +#ifdef HAVE_LINUX_COMPILER_H +#include +#endif +#include // interface to kernel portion of user mode usb driver +#include +#include +#include +#include +#include +#include +#include + +#define MINIMIZE_TX_BUFFERING 1 // must be defined to 0 or 1 + + +static const int MAX_BLOCK_SIZE = fusb_sysconfig::max_block_size(); // hard limit +static const int DEFAULT_BLOCK_SIZE = MAX_BLOCK_SIZE; +static const int DEFAULT_BUFFER_SIZE = 4 * (1L << 20); // 4 MB / endpoint + + +// Totally evil and fragile extraction of file descriptor from +// guts of libusb. They don't install usbi.h, which is what we'd need +// to do this nicely. +// +// FIXME if everything breaks someday in the future, look here... + +static int +fd_from_usb_dev_handle (usb_dev_handle *udh) +{ + return *((int *) udh); +} + +inline static void +urb_set_ephandle (usbdevfs_urb *urb, fusb_ephandle_linux *handle) +{ + urb->usercontext = handle; +} + +inline static fusb_ephandle_linux * +urb_get_ephandle (usbdevfs_urb *urb) +{ + return (fusb_ephandle_linux *) urb->usercontext; +} + +// ------------------------------------------------------------------------ +// USB request block (urb) allocation +// ------------------------------------------------------------------------ + +static usbdevfs_urb * +alloc_urb (fusb_ephandle_linux *self, int buffer_length, int endpoint, + bool input_p, unsigned char *write_buffer) +{ + usbdevfs_urb *urb = new usbdevfs_urb; + memset (urb, 0, sizeof (*urb)); + + urb->buffer_length = buffer_length; + + // We allocate dedicated memory only for input buffers. + // For output buffers we reuse the same buffer (the kernel + // copies the data at submital time) + + if (input_p) + urb->buffer = new unsigned char [buffer_length]; + else + urb->buffer = write_buffer; + + // init common values + + urb->type = USBDEVFS_URB_TYPE_BULK; + urb->endpoint = (endpoint & 0x7f) | (input_p ? 0x80 : 0); + + // USBDEVFS_URB_QUEUE_BULK goes away in linux 2.5, but is needed if + // we are using a 2.4 usb-uhci host controller driver. This is + // unlikely since we're almost always going to be plugged into a + // high speed host controller (ehci) +#if 0 && defined (USBDEVFS_URB_QUEUE_BULK) + urb->flags = USBDEVFS_URB_QUEUE_BULK; +#endif + + urb->signr = 0; + urb_set_ephandle (urb, self); + + return urb; +} + +static void +free_urb (usbdevfs_urb *urb) +{ + // if this was an input urb, free the buffer + if (urb->endpoint & 0x80) + delete [] ((unsigned char *) urb->buffer); + + delete urb; +} + +// ------------------------------------------------------------------------ +// device handle +// ------------------------------------------------------------------------ + +fusb_devhandle_linux::fusb_devhandle_linux (usb_dev_handle *udh) + : fusb_devhandle (udh) +{ + // that's all +} + +fusb_devhandle_linux::~fusb_devhandle_linux () +{ + // if there are any pending requests, cancel them and free the urbs. + + std::list::reverse_iterator it; + + for (it = d_pending_rqsts.rbegin (); it != d_pending_rqsts.rend (); it++){ + _cancel_urb (*it); + free_urb (*it); + } +} + +fusb_ephandle * +fusb_devhandle_linux::make_ephandle (int endpoint, bool input_p, + int block_size, int nblocks) +{ + return new fusb_ephandle_linux (this, endpoint, input_p, + block_size, nblocks); +} + + +// Attempt to cancel all transactions associated with eph. + +void +fusb_devhandle_linux::_cancel_pending_rqsts (fusb_ephandle_linux *eph) +{ + std::list::reverse_iterator it; + + for (it = d_pending_rqsts.rbegin (); it != d_pending_rqsts.rend (); it++){ + if (urb_get_ephandle (*it) == eph) + _cancel_urb (*it); + } +} + +void +fusb_devhandle_linux::pending_add (usbdevfs_urb *urb) +{ + d_pending_rqsts.push_back (urb); +} + +usbdevfs_urb * +fusb_devhandle_linux::pending_get () +{ + if (d_pending_rqsts.empty ()) + return 0; + + usbdevfs_urb *urb = d_pending_rqsts.front (); + d_pending_rqsts.pop_front (); + return urb; +} + +bool +fusb_devhandle_linux::pending_remove (usbdevfs_urb *urb) +{ + std::list::iterator result = find (d_pending_rqsts.begin (), + d_pending_rqsts.end (), + urb); + if (result == d_pending_rqsts.end ()){ + fprintf (stderr, "fusb::pending_remove: failed to find urb in pending_rqsts: %p\n", urb); + return false; + } + d_pending_rqsts.erase (result); + return true; +} + +/* + * Submit the urb to the kernel. + * iff successful, the urb will be placed on the devhandle's pending list. + */ +bool +fusb_devhandle_linux::_submit_urb (usbdevfs_urb *urb) +{ + int ret; + + ret = ioctl (fd_from_usb_dev_handle (d_udh), USBDEVFS_SUBMITURB, urb); + if (ret < 0){ + perror ("fusb::_submit_urb"); + return false; + } + + pending_add (urb); + return true; +} + +/* + * Attempt to cancel the in pending or in-progress urb transaction. + * Return true iff transaction was sucessfully cancelled. + * + * Failure to cancel should not be considered a problem. This frequently + * occurs if the transaction has already completed in the kernel but hasn't + * yet been reaped by the user mode code. + * + * urbs which were cancelled have their status field set to -ENOENT when + * they are reaped. + */ +bool +fusb_devhandle_linux::_cancel_urb (usbdevfs_urb *urb) +{ + int ret = ioctl (fd_from_usb_dev_handle (d_udh), USBDEVFS_DISCARDURB, urb); + if (ret < 0){ + // perror ("fusb::_cancel_urb"); + return false; + } + return true; +} + +/* + * Check with the kernel and see if any of our outstanding requests + * have completed. For each completed transaction, remove it from the + * devhandle's pending list and append it to the completed list for + * the corresponding endpoint. + * + * If any transactions are reaped return true. + * + * If ok_to_block_p is true, then this will block until at least one + * transaction completes or an unrecoverable error occurs. + */ +bool +fusb_devhandle_linux::_reap (bool ok_to_block_p) +{ + int ret; + int nreaped = 0; + usbdevfs_urb *urb = 0; + + int fd = fd_from_usb_dev_handle (d_udh); + + // try to reap as many as possible without blocking... + + while ((ret = ioctl (fd, USBDEVFS_REAPURBNDELAY, &urb)) == 0){ + if (urb->status != 0 && urb->status != -ENOENT){ + fprintf (stderr, "_reap: usb->status = %d, actual_length = %5d\n", + urb->status, urb->actual_length); + } + pending_remove (urb); + urb_get_ephandle (urb)->completed_list_add (urb); + nreaped++; + } + + if (nreaped > 0) // if we got any, return w/o blocking + return true; + + if (!ok_to_block_p) + return false; + + ret = ioctl (fd, USBDEVFS_REAPURB, &urb); + if (ret < 0){ + perror ("fusb::_reap"); + return false; + } + + pending_remove (urb); + urb_get_ephandle (urb)->completed_list_add (urb); + return true; +} + +void +fusb_devhandle_linux::_wait_for_completion () +{ + while (!d_pending_rqsts.empty ()) + if (!_reap(true)) + break; +} + // ------------------------------------------------------------------------ +// end point handle +// ------------------------------------------------------------------------ + +fusb_ephandle_linux::fusb_ephandle_linux (fusb_devhandle_linux *devhandle, + int endpoint, + bool input_p, + int block_size, int nblocks) + : fusb_ephandle (endpoint, input_p, block_size, nblocks), + d_devhandle (devhandle), + d_write_work_in_progress (0), d_write_buffer (0), + d_read_work_in_progress (0), d_read_buffer (0), d_read_buffer_end (0) +{ + + if (d_block_size < 0 || d_block_size > MAX_BLOCK_SIZE) + throw std::out_of_range ("fusb_ephandle_linux: block_size"); + + if (d_nblocks < 0) + throw std::out_of_range ("fusb_ephandle_linux: nblocks"); + + if (d_block_size == 0) + d_block_size = DEFAULT_BLOCK_SIZE; + + if (d_nblocks == 0) + d_nblocks = std::max (1, DEFAULT_BUFFER_SIZE / d_block_size); + + if (!d_input_p) + if (!MINIMIZE_TX_BUFFERING) + d_write_buffer = new unsigned char [d_block_size]; + + if (0) + fprintf(stderr, "fusb_ephandle_linux::ctor: d_block_size = %d d_nblocks = %d\n", + d_block_size, d_nblocks); + + // allocate urbs + + for (int i = 0; i < d_nblocks; i++) + d_free_list.push_back (alloc_urb (this, d_block_size, d_endpoint, + d_input_p, d_write_buffer)); +} + +fusb_ephandle_linux::~fusb_ephandle_linux () +{ + stop (); + + usbdevfs_urb *urb; + + while ((urb = free_list_get ()) != 0) + free_urb (urb); + + while ((urb = completed_list_get ()) != 0) + free_urb (urb); + + if (d_write_work_in_progress) + free_urb (d_write_work_in_progress); + + delete [] d_write_buffer; + + if (d_read_work_in_progress) + free_urb (d_read_work_in_progress); +} + +// ---------------------------------------------------------------- + +bool +fusb_ephandle_linux::start () +{ + if (d_started) + return true; // already running + + d_started = true; + + if (d_input_p){ // fire off all the reads + usbdevfs_urb *urb; + + int nerrors = 0; + while ((urb = free_list_get ()) != 0 && nerrors < d_nblocks){ + if (!submit_urb (urb)) + nerrors++; + } + } + + return true; +} + +// +// kill all i/o in progress. +// kill any completed but unprocessed transactions. +// +bool +fusb_ephandle_linux::stop () +{ + if (!d_started) + return true; + + if (d_write_work_in_progress){ + free_list_add (d_write_work_in_progress); + d_write_work_in_progress = 0; + } + + if (d_read_work_in_progress){ + free_list_add (d_read_work_in_progress); + d_read_work_in_progress = 0; + d_read_buffer = 0; + d_read_buffer_end = 0; + } + + d_devhandle->_cancel_pending_rqsts (this); + d_devhandle->_reap (false); + + while (1){ + usbdevfs_urb *urb; + while ((urb = completed_list_get ()) != 0) + free_list_add (urb); + + if (d_free_list.size () == (unsigned) d_nblocks) + break; + + if (!d_devhandle->_reap(true)) + break; + } + + d_started = false; + return true; +} + +// ---------------------------------------------------------------- +// routines for writing +// ---------------------------------------------------------------- + +#if (MINIMIZE_TX_BUFFERING) + +int +fusb_ephandle_linux::write(const void *buffer, int nbytes) +{ + if (!d_started) + return -1; + + if (d_input_p) + return -1; + + assert(nbytes % 512 == 0); + + unsigned char *src = (unsigned char *) buffer; + + int n = 0; + while (n < nbytes){ + + usbdevfs_urb *urb = get_write_work_in_progress(); + if (!urb) + return -1; + assert(urb->actual_length == 0); + int m = std::min(nbytes - n, MAX_BLOCK_SIZE); + urb->buffer = src; + urb->buffer_length = m; + + n += m; + src += m; + + if (!submit_urb(urb)) + return -1; + + d_write_work_in_progress = 0; + } + + return n; +} + +#else + +int +fusb_ephandle_linux::write (const void *buffer, int nbytes) +{ + if (!d_started) + return -1; + + if (d_input_p) + return -1; + + unsigned char *src = (unsigned char *) buffer; + + int n = 0; + while (n < nbytes){ + + usbdevfs_urb *urb = get_write_work_in_progress (); + if (!urb) + return -1; + unsigned char *dst = (unsigned char *) urb->buffer; + int m = std::min (nbytes - n, urb->buffer_length - urb->actual_length); + + memcpy (&dst[urb->actual_length], &src[n], m); + urb->actual_length += m; + n += m; + + if (urb->actual_length == urb->buffer_length){ + if (!submit_urb (urb)) + return -1; + d_write_work_in_progress = 0; + } + } + + return n; +} + +#endif + +usbdevfs_urb * +fusb_ephandle_linux::get_write_work_in_progress () +{ + // if we've already got some work in progress, return it + + if (d_write_work_in_progress) + return d_write_work_in_progress; + + while (1){ + + reap_complete_writes (); + + usbdevfs_urb *urb = free_list_get (); + + if (urb != 0){ + assert (urb->actual_length == 0); + d_write_work_in_progress = urb; + return urb; + } + + // The free list is empty. Tell the device handle to reap. + // Anything it reaps for us will end up on our completed list. + + if (!d_devhandle->_reap (true)) + return 0; + } +} + +void +fusb_ephandle_linux::reap_complete_writes () +{ + // take a look at the completed_list and xfer to free list after + // checking for errors. + + usbdevfs_urb *urb; + + while ((urb = completed_list_get ()) != 0){ + + // Check for any errors or short writes that were reported in the urb. + // The kernel sets status, actual_length and error_count. + // error_count is only used for ISO xfers. + // status is 0 if successful, else is an errno kind of thing + + if (urb->status != 0){ + fprintf (stderr, "fusb: (status %d) %s\n", urb->status, strerror (-urb->status)); + } + else if (urb->actual_length != urb->buffer_length){ + fprintf (stderr, "fusb: short write xfer: %d != %d\n", + urb->actual_length, urb->buffer_length); + } + + free_list_add (urb); + } +} + +void +fusb_ephandle_linux::wait_for_completion () +{ + d_devhandle->_wait_for_completion (); +} + +// ---------------------------------------------------------------- +// routines for reading +// ---------------------------------------------------------------- + +int +fusb_ephandle_linux::read (void *buffer, int nbytes) +{ + if (!d_started) + return -1; + + if (!d_input_p) + return -1; + + unsigned char *dst = (unsigned char *) buffer; + + int n = 0; + while (n < nbytes){ + + if (d_read_buffer >= d_read_buffer_end) + if (!reload_read_buffer ()) + return -1; + + int m = std::min (nbytes - n, (int) (d_read_buffer_end - d_read_buffer)); + + memcpy (&dst[n], d_read_buffer, m); + d_read_buffer += m; + n += m; + } + + return n; +} + +bool +fusb_ephandle_linux::reload_read_buffer () +{ + assert (d_read_buffer >= d_read_buffer_end); + + usbdevfs_urb *urb; + + if (d_read_work_in_progress){ + // We're done with this urb. Fire off a read to refill it. + urb = d_read_work_in_progress; + d_read_work_in_progress = 0; + d_read_buffer = 0; + d_read_buffer_end = 0; + urb->actual_length = 0; + if (!submit_urb (urb)) + return false; + } + + while (1){ + + while ((urb = completed_list_get ()) == 0) + if (!d_devhandle->_reap (true)) + return false; + + // check result of completed read + + if (urb->status != 0){ + // We've got a problem. Report it and fail. + fprintf (stderr, "fusb: (rd status %d) %s\n", urb->status, strerror (-urb->status)); + urb->actual_length = 0; + free_list_add (urb); + return false; + } + + // we've got a happy urb, full of data... + + d_read_work_in_progress = urb; + d_read_buffer = (unsigned char *) urb->buffer; + d_read_buffer_end = d_read_buffer + urb->actual_length; + + return true; + } +} + +// ---------------------------------------------------------------- + +void +fusb_ephandle_linux::free_list_add (usbdevfs_urb *urb) +{ + assert (urb_get_ephandle (urb) == this); + urb->actual_length = 0; + d_free_list.push_back (urb); +} + +usbdevfs_urb * +fusb_ephandle_linux::free_list_get () +{ + if (d_free_list.empty ()) + return 0; + + usbdevfs_urb *urb = d_free_list.front (); + d_free_list.pop_front (); + return urb; +} + +void +fusb_ephandle_linux::completed_list_add (usbdevfs_urb *urb) +{ + assert (urb_get_ephandle (urb) == this); + d_completed_list.push_back (urb); +} + +usbdevfs_urb * +fusb_ephandle_linux::completed_list_get () +{ + if (d_completed_list.empty ()) + return 0; + + usbdevfs_urb *urb = d_completed_list.front (); + d_completed_list.pop_front (); + return urb; +} + +/* + * Submit the urb. If successful the urb ends up on the devhandle's + * pending list, otherwise, it's back on our free list. + */ +bool +fusb_ephandle_linux::submit_urb (usbdevfs_urb *urb) +{ + if (!d_devhandle->_submit_urb (urb)){ // FIXME record the problem somewhere + fprintf (stderr, "_submit_urb failed\n"); + free_list_add (urb); + return false; + } + return true; +} diff --git a/usrp/host/lib/fusb_linux.h b/usrp/host/lib/legacy/fusb_linux.h similarity index 100% rename from usrp/host/lib/fusb_linux.h rename to usrp/host/lib/legacy/fusb_linux.h diff --git a/usrp/host/lib/fusb_ra_wb.cc b/usrp/host/lib/legacy/fusb_ra_wb.cc similarity index 100% rename from usrp/host/lib/fusb_ra_wb.cc rename to usrp/host/lib/legacy/fusb_ra_wb.cc diff --git a/usrp/host/lib/fusb_ra_wb.h b/usrp/host/lib/legacy/fusb_ra_wb.h similarity index 100% rename from usrp/host/lib/fusb_ra_wb.h rename to usrp/host/lib/legacy/fusb_ra_wb.h diff --git a/usrp/host/lib/fusb_sysconfig_darwin.cc b/usrp/host/lib/legacy/fusb_sysconfig_darwin.cc similarity index 100% rename from usrp/host/lib/fusb_sysconfig_darwin.cc rename to usrp/host/lib/legacy/fusb_sysconfig_darwin.cc diff --git a/usrp/host/lib/fusb_sysconfig_generic.cc b/usrp/host/lib/legacy/fusb_sysconfig_generic.cc similarity index 100% rename from usrp/host/lib/fusb_sysconfig_generic.cc rename to usrp/host/lib/legacy/fusb_sysconfig_generic.cc diff --git a/usrp/host/lib/fusb_sysconfig_linux.cc b/usrp/host/lib/legacy/fusb_sysconfig_linux.cc similarity index 100% rename from usrp/host/lib/fusb_sysconfig_linux.cc rename to usrp/host/lib/legacy/fusb_sysconfig_linux.cc diff --git a/usrp/host/lib/fusb_sysconfig_ra_wb.cc b/usrp/host/lib/legacy/fusb_sysconfig_ra_wb.cc similarity index 100% rename from usrp/host/lib/fusb_sysconfig_ra_wb.cc rename to usrp/host/lib/legacy/fusb_sysconfig_ra_wb.cc diff --git a/usrp/host/lib/fusb_sysconfig_win32.cc b/usrp/host/lib/legacy/fusb_sysconfig_win32.cc similarity index 100% rename from usrp/host/lib/fusb_sysconfig_win32.cc rename to usrp/host/lib/legacy/fusb_sysconfig_win32.cc diff --git a/usrp/host/lib/legacy/fusb_win32.cc b/usrp/host/lib/legacy/fusb_win32.cc new file mode 100644 index 00000000..8900576d --- /dev/null +++ b/usrp/host/lib/legacy/fusb_win32.cc @@ -0,0 +1,266 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003,2005 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include + +static const int MAX_BLOCK_SIZE = fusb_sysconfig::max_block_size(); +static const int DEFAULT_BLOCK_SIZE = MAX_BLOCK_SIZE; +static const int DEFAULT_BUFFER_SIZE = 16 * (1L << 20); // 16 MB / endpoint + + +static const int USB_TIMEOUT = 1000; // in milliseconds + + +fusb_devhandle_win32::fusb_devhandle_win32 (usb_dev_handle *udh) + : fusb_devhandle (udh) +{ + // that's it +} + +fusb_devhandle_win32::~fusb_devhandle_win32 () +{ + // nop +} + +fusb_ephandle * +fusb_devhandle_win32::make_ephandle (int endpoint, bool input_p, + int block_size, int nblocks) +{ + return new fusb_ephandle_win32 (this, endpoint, input_p, + block_size, nblocks); +} + +// ---------------------------------------------------------------- + +fusb_ephandle_win32::fusb_ephandle_win32 (fusb_devhandle_win32 *dh, + int endpoint, bool input_p, + int block_size, int nblocks) + : fusb_ephandle (endpoint, input_p, block_size, nblocks), + d_devhandle (dh), d_input_leftover(0),d_output_short(0) +{ + if (d_block_size < 0 || d_block_size > MAX_BLOCK_SIZE) + throw std::out_of_range ("fusb_ephandle_win32: block_size"); + + if (d_nblocks < 0) + throw std::out_of_range ("fusb_ephandle_win32: nblocks"); + + if (d_block_size == 0) + d_block_size = DEFAULT_BLOCK_SIZE; + + if (d_nblocks == 0) + d_nblocks = std::max (1, DEFAULT_BUFFER_SIZE / d_block_size); + + d_buffer = new char [d_block_size*d_nblocks]; + d_context = new void * [d_nblocks]; + + // allocate contexts + + usb_dev_handle *dev = dh->get_usb_dev_handle (); + int i; + + if (d_input_p) + endpoint |= USB_ENDPOINT_IN; + + for (i=0; i 0) { + d_curr = (d_curr+1)%d_nblocks; + buf = &d_buffer[d_curr*d_block_size]; + + if (d_outstanding_write != d_nblocks) { + d_outstanding_write++; + } else { + retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT); + if (retval < 0) { + fprintf(stderr, "%s: usb_reap_async: %s\n", + __FUNCTION__, usb_strerror()); + return retval; + } + } + + int ncopy = std::min(bytes_to_write, d_block_size); + memcpy(buf, (void *) &(((char*)buffer)[a]), ncopy); + bytes_to_write -= ncopy; + a += ncopy; + + d_output_short = d_block_size - ncopy; + if (d_output_short == 0) + usb_submit_async(d_context[d_curr], buf, d_block_size); + } + + return retval < 0 ? retval : nbytes; +} + +int +fusb_ephandle_win32::read (void *buffer, int nbytes) +{ + int retval=0; + char *buf; + + if (!d_started) // doesn't matter here, but keeps semantics constant + return -1; + + if (!d_input_p) + return -1; + + int bytes_to_read = nbytes; + + int a=0; + if (d_input_leftover != 0) { + + buf = &d_buffer[d_curr*d_block_size + d_block_size - d_input_leftover]; + a = std::min(nbytes, d_input_leftover); + memcpy(buffer, buf, a); + bytes_to_read -= a; + d_input_leftover -= a; + + if (d_input_leftover == 0) + usb_submit_async(d_context[d_curr], + &d_buffer[d_curr*d_block_size], d_block_size); + } + + while (bytes_to_read > 0) { + + d_curr = (d_curr+1)%d_nblocks; + buf = &d_buffer[d_curr*d_block_size]; + + retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT); + if (retval < 0) + fprintf(stderr, "%s: usb_reap_async: %s\n", + __FUNCTION__, usb_strerror()); + + int ncopy = std::min(bytes_to_read, d_block_size); + memcpy((void *) &(((char*)buffer)[a]), buf, ncopy); + bytes_to_read -= ncopy; + a += ncopy; + + d_input_leftover = d_block_size - ncopy; + if (d_input_leftover == 0) + usb_submit_async(d_context[d_curr], buf, d_block_size); + } + + return retval < 0 ? retval : nbytes; +} + +void +fusb_ephandle_win32::wait_for_completion () +{ + int i; + + for (i=0; i +#else +#include +#endif + +#include + +#define __INLINE__ inline + +#ifndef DO_DEBUG +#define DO_DEBUG 0 +#endif + +#if DO_DEBUG +#define DEBUG(X) do{X} while(0); +#else +#define DEBUG(X) do{} while(0); +#endif + +class mld_condition_t; + +class mld_mutex_t { +#ifdef _USE_OMNI_THREADS_ + typedef omni_mutex l_mutex, *l_mutex_ptr; +#else + typedef pthread_mutex_t l_mutex, *l_mutex_ptr; +#endif + + friend class mld_condition_t; + +private: + l_mutex_ptr d_mutex; + +protected: + inline l_mutex_ptr mutex () { return (d_mutex); }; + +public: + __INLINE__ mld_mutex_t () { +#ifdef _USE_OMNI_THREADS_ + d_mutex = new omni_mutex (); +#else + d_mutex = (l_mutex_ptr) new l_mutex; + int l_ret = pthread_mutex_init (d_mutex, NULL); + if (l_ret != 0) { + fprintf (stderr, "Error %d creating mutex.\n", l_ret); + throw std::runtime_error ("mld_mutex_t::mld_mutex_t()\n"); + } +#endif + }; + + __INLINE__ ~mld_mutex_t () { + unlock (); +#ifndef _USE_OMNI_THREADS_ + int l_ret = pthread_mutex_destroy (d_mutex); + if (l_ret != 0) { + fprintf (stderr, "mld_mutex_t::~mld_mutex_t(): " + "Error %d destroying mutex.\n", l_ret); + } +#endif + delete d_mutex; + d_mutex = NULL; + }; + + __INLINE__ void lock () { +#ifdef _USE_OMNI_THREADS_ + d_mutex->lock (); +#else + int l_ret = pthread_mutex_lock (d_mutex); + if (l_ret != 0) { + fprintf (stderr, "mld_mutex_t::lock(): " + "Error %d locking mutex.\n", l_ret); + } +#endif + }; + + __INLINE__ void unlock () { +#ifdef _USE_OMNI_THREADS_ + d_mutex->unlock (); +#else + int l_ret = pthread_mutex_unlock (d_mutex); + if (l_ret != 0) { + fprintf (stderr, "mld_mutex_t::unlock(): " + "Error %d locking mutex.\n", l_ret); + } +#endif + }; + + __INLINE__ bool trylock () { +#ifdef _USE_OMNI_THREADS_ + int l_ret = d_mutex->trylock (); +#else + int l_ret = pthread_mutex_unlock (d_mutex); +#endif + return (l_ret == 0 ? true : false); + }; + + inline void acquire () { lock(); }; + inline void release () { unlock(); }; + inline void wait () { lock(); }; + inline void post () { unlock(); }; +}; + +typedef mld_mutex_t mld_mutex, *mld_mutex_ptr; + +class mld_condition_t { +#ifdef _USE_OMNI_THREADS_ + typedef omni_condition l_condition, *l_condition_ptr; +#else + typedef pthread_cond_t l_condition, *l_condition_ptr; +#endif + +private: + l_condition_ptr d_condition; + mld_mutex_ptr d_mutex; + bool d_i_own_mutex; + +public: + __INLINE__ mld_condition_t (mld_mutex_ptr mutex = NULL) { + if (mutex) { + d_i_own_mutex = false; + d_mutex = mutex; + } else { + d_i_own_mutex = true; + d_mutex = new mld_mutex (); + } +#ifdef _USE_OMNI_THREADS_ + d_condition = new omni_condition (d_mutex->mutex ()); +#else + d_condition = (l_condition_ptr) new l_condition; + int l_ret = pthread_cond_init (d_condition, NULL); + if (l_ret != 0) { + fprintf (stderr, "Error %d creating condition.\n", l_ret); + throw std::runtime_error ("mld_condition_t::mld_condition_t()\n"); + } +#endif + }; + + __INLINE__ ~mld_condition_t () { + signal (); +#ifndef _USE_OMNI_THREADS_ + int l_ret = pthread_cond_destroy (d_condition); + if (l_ret != 0) { + fprintf (stderr, "mld_condition_t::mld_condition_t(): " + "Error %d destroying condition.\n", l_ret); + } +#endif + delete d_condition; + d_condition = NULL; + if (d_i_own_mutex) + delete d_mutex; + d_mutex = NULL; + }; + + __INLINE__ mld_mutex_ptr mutex () {return (d_mutex);}; + + __INLINE__ void signal () { + DEBUG (fprintf (stderr, "a ");); + +#ifdef _USE_OMNI_THREADS_ + d_condition->signal (); +#else + int l_ret = pthread_cond_signal (d_condition); + if (l_ret != 0) { + fprintf (stderr, "mld_condition_t::signal(): " + "Error %d.\n", l_ret); + } +#endif + DEBUG (fprintf (stderr, "b ");); + }; + + __INLINE__ void wait () { + DEBUG (fprintf (stderr, "c ");); +#ifdef _USE_OMNI_THREADS_ + d_condition->wait (); +#else + int l_ret = pthread_cond_wait (d_condition, d_mutex->mutex ()); + if (l_ret != 0) { + fprintf (stderr, "mld_condition_t::wait(): " + "Error %d.\n", l_ret); + } +#endif + DEBUG (fprintf (stderr, "d ");); + }; +}; + +typedef mld_condition_t mld_condition, *mld_condition_ptr; + +class mld_thread_t { +#ifdef _USE_OMNI_THREADS_ + typedef omni_thread l_thread, *l_thread_ptr; +#else + typedef pthread_t l_thread, *l_thread_ptr; +#endif + +private: +#ifndef _USE_OMNI_THREADS_ + l_thread d_thread; + void (*d_start_routine)(void*); + void *d_arg; +#else + l_thread_ptr d_thread; +#endif + +#ifndef _USE_OMNI_THREADS_ + static void* local_start_routine (void *arg) { + mld_thread_t* This = (mld_thread_t*) arg; + (*(This->d_start_routine))(This->d_arg); + return (NULL); + }; +#endif + +public: + __INLINE__ mld_thread_t (void (*start_routine)(void *), void *arg) { +#ifdef _USE_OMNI_THREADS_ + d_thread = new omni_thread (start_routine, arg); + d_thread->start (); +#else + d_start_routine = start_routine; + d_arg = arg; + int l_ret = pthread_create (&d_thread, NULL, local_start_routine, this); + if (l_ret != 0) { + fprintf (stderr, "Error %d creating thread.\n", l_ret); + throw std::runtime_error ("mld_thread_t::mld_thread_t()\n"); + } +#endif + }; + + __INLINE__ ~mld_thread_t () { +#ifdef _USE_OMNI_THREADS_ +// delete d_thread; + d_thread = NULL; +#else + int l_ret = pthread_detach (d_thread); + if (l_ret != 0) { + fprintf (stderr, "Error %d detaching thread.\n", l_ret); + throw std::runtime_error ("mld_thread_t::~mld_thread_t()\n"); + } +#endif + }; +}; + +typedef mld_thread_t mld_thread, *mld_thread_ptr; + +#endif /* _INCLUDED_MLD_THREADS_H_ */ diff --git a/usrp/host/lib/rate_to_regval.h b/usrp/host/lib/legacy/rate_to_regval.h similarity index 100% rename from usrp/host/lib/rate_to_regval.h rename to usrp/host/lib/legacy/rate_to_regval.h diff --git a/usrp/host/lib/legacy/stamp-sources-generate b/usrp/host/lib/legacy/stamp-sources-generate new file mode 100644 index 00000000..e69de29b diff --git a/usrp/host/lib/legacy/std_paths.h.in b/usrp/host/lib/legacy/std_paths.h.in new file mode 100644 index 00000000..e09499e0 --- /dev/null +++ b/usrp/host/lib/legacy/std_paths.h.in @@ -0,0 +1,27 @@ +/* -*- c++ -*- */ +/* + * Copyright 2005 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. + */ + +static const char *std_paths[] = { + "@prefix@/share/usrp", + "/usr/local/share/usrp", + 0 +}; diff --git a/usrp/host/lib/legacy/usrp_basic.cc b/usrp/host/lib/legacy/usrp_basic.cc new file mode 100644 index 00000000..295c62f8 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_basic.cc @@ -0,0 +1,1552 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003,2004,2008 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "usrp_basic.h" +#include "usrp_prims.h" +#include "usrp_interfaces.h" +#include "fpga_regs_common.h" +#include "fpga_regs_standard.h" +#include "fusb.h" +#include "db_boards.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace ad9862; + +#define NELEM(x) (sizeof (x) / sizeof (x[0])) + +// These set the buffer size used for each end point using the fast +// usb interface. The kernel ends up locking down this much memory. + +static const int FUSB_BUFFER_SIZE = fusb_sysconfig::default_buffer_size(); +static const int FUSB_BLOCK_SIZE = fusb_sysconfig::max_block_size(); +static const int FUSB_NBLOCKS = FUSB_BUFFER_SIZE / FUSB_BLOCK_SIZE; + + +static const double POLLING_INTERVAL = 0.1; // seconds + +//////////////////////////////////////////////////////////////// + +static struct usb_dev_handle * +open_rx_interface (struct usb_device *dev) +{ + struct usb_dev_handle *udh = usrp_open_rx_interface (dev); + if (udh == 0){ + fprintf (stderr, "usrp_basic_rx: can't open rx interface\n"); + usb_strerror (); + } + return udh; +} + +static struct usb_dev_handle * +open_tx_interface (struct usb_device *dev) +{ + struct usb_dev_handle *udh = usrp_open_tx_interface (dev); + if (udh == 0){ + fprintf (stderr, "usrp_basic_tx: can't open tx interface\n"); + usb_strerror (); + } + return udh; +} + + +////////////////////////////////////////////////////////////////// +// +// usrp_basic +// +//////////////////////////////////////////////////////////////// + + +// Given: +// CLKIN = 64 MHz +// CLKSEL pin = high +// +// These settings give us: +// CLKOUT1 = CLKIN = 64 MHz +// CLKOUT2 = CLKIN = 64 MHz +// ADC is clocked at 64 MHz +// DAC is clocked at 128 MHz + +static unsigned char common_regs[] = { + REG_GENERAL, 0, + REG_DLL, (DLL_DISABLE_INTERNAL_XTAL_OSC + | DLL_MULT_2X + | DLL_FAST), + REG_CLKOUT, CLKOUT2_EQ_DLL_OVER_2, + REG_AUX_ADC_CLK, AUX_ADC_CLK_CLK_OVER_4 +}; + + +usrp_basic::usrp_basic (int which_board, + struct usb_dev_handle * + open_interface (struct usb_device *dev), + const std::string fpga_filename, + const std::string firmware_filename) + : d_udh (0), + d_usb_data_rate (16000000), // SWAG, see below + d_bytes_per_poll ((int) (POLLING_INTERVAL * d_usb_data_rate)), + d_verbose (false), d_fpga_master_clock_freq(64000000), d_db(2) +{ + /* + * SWAG: Scientific Wild Ass Guess. + * + * d_usb_data_rate is used only to determine how often to poll for over- and under-runs. + * We defualt it to 1/2 of our best case. Classes derived from usrp_basic (e.g., + * usrp_standard_tx and usrp_standard_rx) call set_usb_data_rate() to tell us the + * actual rate. This doesn't change our throughput, that's determined by the signal + * processing code in the FPGA (which we know nothing about), and the system limits + * determined by libusb, fusb_*, and the underlying drivers. + */ + memset (d_fpga_shadows, 0, sizeof (d_fpga_shadows)); + + usrp_one_time_init (); + + if (!usrp_load_standard_bits (which_board, false, fpga_filename, firmware_filename)) + throw std::runtime_error ("usrp_basic/usrp_load_standard_bits"); + + struct usb_device *dev = usrp_find_device (which_board); + if (dev == 0){ + fprintf (stderr, "usrp_basic: can't find usrp[%d]\n", which_board); + throw std::runtime_error ("usrp_basic/usrp_find_device"); + } + + if (!(usrp_usrp_p(dev) && usrp_hw_rev(dev) >= 1)){ + fprintf (stderr, "usrp_basic: sorry, this code only works with USRP revs >= 1\n"); + throw std::runtime_error ("usrp_basic/bad_rev"); + } + + if ((d_udh = open_interface (dev)) == 0) + throw std::runtime_error ("usrp_basic/open_interface"); + + // initialize registers that are common to rx and tx + + if (!usrp_9862_write_many_all (d_udh, common_regs, sizeof (common_regs))){ + fprintf (stderr, "usrp_basic: failed to init common AD9862 regs\n"); + throw std::runtime_error ("usrp_basic/init_9862"); + } + + _write_fpga_reg (FR_MODE, 0); // ensure we're in normal mode + _write_fpga_reg (FR_DEBUG_EN, 0); // disable debug outputs +} + +void +usrp_basic::shutdown_daughterboards() +{ + // nuke d'boards before we close down USB in ~usrp_basic + // shutdown() will do any board shutdown while the USRP can still + // be talked to + for(size_t i = 0; i < d_db.size(); i++) + for(size_t j = 0; j < d_db[i].size(); j++) + d_db[i][j]->shutdown(); +} + +usrp_basic::~usrp_basic () +{ + // shutdown_daughterboards(); // call from ~usrp_basic_{tx,rx} + + d_db.resize(0); // forget db shared ptrs + + if (d_udh) + usb_close (d_udh); +} + +void +usrp_basic::init_db(usrp_basic_sptr u) +{ + if (u.get() != this) + throw std::invalid_argument("u is not this"); + + d_db[0] = instantiate_dbs(d_dbid[0], u, 0); + d_db[1] = instantiate_dbs(d_dbid[1], u, 1); +} + +std::vector +usrp_basic::db(int which_side) +{ + which_side &= 0x1; // clamp it to avoid any reporting any errors + return d_db[which_side]; +} + +bool +usrp_basic::is_valid(const usrp_subdev_spec &ss) +{ + if (ss.side < 0 || ss.side > 1) + return false; + + if (ss.subdev < 0 || ss.subdev >= d_db[ss.side].size()) + return false; + + return true; +} + +db_base_sptr +usrp_basic::selected_subdev(const usrp_subdev_spec &ss) +{ + if (!is_valid(ss)) + throw std::invalid_argument("invalid subdev_spec"); + + return d_db[ss.side][ss.subdev]; +} + +bool +usrp_basic::start () +{ + return true; // nop +} + +bool +usrp_basic::stop () +{ + return true; // nop +} + +void +usrp_basic::set_usb_data_rate (int usb_data_rate) +{ + d_usb_data_rate = usb_data_rate; + d_bytes_per_poll = (int) (usb_data_rate * POLLING_INTERVAL); +} + +bool +usrp_basic::_write_aux_dac (int slot, int which_dac, int value) +{ + return usrp_write_aux_dac (d_udh, slot, which_dac, value); +} + +bool +usrp_basic::_read_aux_adc (int slot, int which_adc, int *value) +{ + return usrp_read_aux_adc (d_udh, slot, which_adc, value); +} + +int +usrp_basic::_read_aux_adc (int slot, int which_adc) +{ + int value; + if (!_read_aux_adc (slot, which_adc, &value)) + return READ_FAILED; + + return value; +} + +bool +usrp_basic::write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf) +{ + return usrp_eeprom_write (d_udh, i2c_addr, eeprom_offset, buf.data (), buf.size ()); +} + +std::string +usrp_basic::read_eeprom (int i2c_addr, int eeprom_offset, int len) +{ + if (len <= 0) + return ""; + + char buf[len]; + + if (!usrp_eeprom_read (d_udh, i2c_addr, eeprom_offset, buf, len)) + return ""; + + return std::string (buf, len); +} + +bool +usrp_basic::write_i2c (int i2c_addr, const std::string buf) +{ + return usrp_i2c_write (d_udh, i2c_addr, buf.data (), buf.size ()); +} + +std::string +usrp_basic::read_i2c (int i2c_addr, int len) +{ + if (len <= 0) + return ""; + + char buf[len]; + + if (!usrp_i2c_read (d_udh, i2c_addr, buf, len)) + return ""; + + return std::string (buf, len); +} + +std::string +usrp_basic::serial_number() +{ + return usrp_serial_number(d_udh); +} + +// ---------------------------------------------------------------- + +bool +usrp_basic::set_adc_offset (int which_adc, int offset) +{ + if (which_adc < 0 || which_adc > 3) + return false; + + return _write_fpga_reg (FR_ADC_OFFSET_0 + which_adc, offset); +} + +bool +usrp_basic::set_dac_offset (int which_dac, int offset, int offset_pin) +{ + if (which_dac < 0 || which_dac > 3) + return false; + + int which_codec = which_dac >> 1; + int tx_a = (which_dac & 0x1) == 0; + int lo = ((offset & 0x3) << 6) | (offset_pin & 0x1); + int hi = (offset >> 2); + bool ok; + + if (tx_a){ + ok = _write_9862 (which_codec, REG_TX_A_OFFSET_LO, lo); + ok &= _write_9862 (which_codec, REG_TX_A_OFFSET_HI, hi); + } + else { + ok = _write_9862 (which_codec, REG_TX_B_OFFSET_LO, lo); + ok &= _write_9862 (which_codec, REG_TX_B_OFFSET_HI, hi); + } + return ok; +} + +bool +usrp_basic::set_adc_buffer_bypass (int which_adc, bool bypass) +{ + if (which_adc < 0 || which_adc > 3) + return false; + + int codec = which_adc >> 1; + int reg = (which_adc & 1) == 0 ? REG_RX_A : REG_RX_B; + + unsigned char cur_rx; + unsigned char cur_pwr_dn; + + // If the input buffer is bypassed, we need to power it down too. + + bool ok = _read_9862 (codec, reg, &cur_rx); + ok &= _read_9862 (codec, REG_RX_PWR_DN, &cur_pwr_dn); + if (!ok) + return false; + + if (bypass){ + cur_rx |= RX_X_BYPASS_INPUT_BUFFER; + cur_pwr_dn |= ((which_adc & 1) == 0) ? RX_PWR_DN_BUF_A : RX_PWR_DN_BUF_B; + } + else { + cur_rx &= ~RX_X_BYPASS_INPUT_BUFFER; + cur_pwr_dn &= ~(((which_adc & 1) == 0) ? RX_PWR_DN_BUF_A : RX_PWR_DN_BUF_B); + } + + ok &= _write_9862 (codec, reg, cur_rx); + ok &= _write_9862 (codec, REG_RX_PWR_DN, cur_pwr_dn); + return ok; +} + +bool +usrp_basic::set_dc_offset_cl_enable(int bits, int mask) +{ + return _write_fpga_reg(FR_DC_OFFSET_CL_EN, + (d_fpga_shadows[FR_DC_OFFSET_CL_EN] & ~mask) | (bits & mask)); +} + +// ---------------------------------------------------------------- + +bool +usrp_basic::_write_fpga_reg (int regno, int value) +{ + if (d_verbose){ + fprintf (stdout, "_write_fpga_reg(%3d, 0x%08x)\n", regno, value); + fflush (stdout); + } + + if (regno >= 0 && regno < MAX_REGS) + d_fpga_shadows[regno] = value; + + return usrp_write_fpga_reg (d_udh, regno, value); +} + +bool +usrp_basic::_write_fpga_reg_masked (int regno, int value, int mask) +{ + //Only use this for registers who actually use a mask in the verilog firmware, like FR_RX_MASTER_SLAVE + //value is a 16 bits value and mask is a 16 bits mask + if (d_verbose){ + fprintf (stdout, "_write_fpga_reg_masked(%3d, 0x%04x,0x%04x)\n", regno, value, mask); + fflush (stdout); + } + + if (regno >= 0 && regno < MAX_REGS) + d_fpga_shadows[regno] = value; + + return usrp_write_fpga_reg (d_udh, regno, (value & 0xffff) | ((mask & 0xffff)<<16)); +} + + +bool +usrp_basic::_read_fpga_reg (int regno, int *value) +{ + return usrp_read_fpga_reg (d_udh, regno, value); +} + +int +usrp_basic::_read_fpga_reg (int regno) +{ + int value; + if (!_read_fpga_reg (regno, &value)) + return READ_FAILED; + return value; +} + +bool +usrp_basic::_write_9862 (int which_codec, int regno, unsigned char value) +{ + if (0 && d_verbose){ + // FIXME really want to enable logging in usrp_prims:usrp_9862_write + fprintf(stdout, "_write_9862(codec = %d, regno = %2d, val = 0x%02x)\n", which_codec, regno, value); + fflush(stdout); + } + + return usrp_9862_write (d_udh, which_codec, regno, value); +} + + +bool +usrp_basic::_read_9862 (int which_codec, int regno, unsigned char *value) const +{ + return usrp_9862_read (d_udh, which_codec, regno, value); +} + +int +usrp_basic::_read_9862 (int which_codec, int regno) const +{ + unsigned char value; + if (!_read_9862 (which_codec, regno, &value)) + return READ_FAILED; + return value; +} + +bool +usrp_basic::_write_spi (int optional_header, int enables, int format, std::string buf) +{ + return usrp_spi_write (d_udh, optional_header, enables, format, + buf.data(), buf.size()); +} + +std::string +usrp_basic::_read_spi (int optional_header, int enables, int format, int len) +{ + if (len <= 0) + return ""; + + char buf[len]; + + if (!usrp_spi_read (d_udh, optional_header, enables, format, buf, len)) + return ""; + + return std::string (buf, len); +} + + +bool +usrp_basic::_set_led (int which_led, bool on) +{ + return usrp_set_led (d_udh, which_led, on); +} + +bool +usrp_basic::write_atr_tx_delay(int value) +{ + return _write_fpga_reg(FR_ATR_TX_DELAY, value); +} + +bool +usrp_basic::write_atr_rx_delay(int value) +{ + return _write_fpga_reg(FR_ATR_RX_DELAY, value); +} + +/* + * ---------------------------------------------------------------- + * Routines to access and control daughterboard specific i/o + * ---------------------------------------------------------------- + */ +static int +slot_id_to_oe_reg (int slot_id) +{ + static int reg[4] = { FR_OE_0, FR_OE_1, FR_OE_2, FR_OE_3 }; + assert (0 <= slot_id && slot_id < 4); + return reg[slot_id]; +} + +static int +slot_id_to_io_reg (int slot_id) +{ + static int reg[4] = { FR_IO_0, FR_IO_1, FR_IO_2, FR_IO_3 }; + assert (0 <= slot_id && slot_id < 4); + return reg[slot_id]; +} + +static int +slot_id_to_refclk_reg(int slot_id) +{ + static int reg[4] = { FR_TX_A_REFCLK, FR_RX_A_REFCLK, FR_TX_B_REFCLK, FR_RX_B_REFCLK }; + assert (0 <= slot_id && slot_id < 4); + return reg[slot_id]; +} + +static int +slot_id_to_atr_mask_reg(int slot_id) +{ + static int reg[4] = { FR_ATR_MASK_0, FR_ATR_MASK_1, FR_ATR_MASK_2, FR_ATR_MASK_3 }; + assert (0 <= slot_id && slot_id < 4); + return reg[slot_id]; +} + +static int +slot_id_to_atr_txval_reg(int slot_id) +{ + static int reg[4] = { FR_ATR_TXVAL_0, FR_ATR_TXVAL_1, FR_ATR_TXVAL_2, FR_ATR_TXVAL_3 }; + assert (0 <= slot_id && slot_id < 4); + return reg[slot_id]; +} + +static int +slot_id_to_atr_rxval_reg(int slot_id) +{ + static int reg[4] = { FR_ATR_RXVAL_0, FR_ATR_RXVAL_1, FR_ATR_RXVAL_2, FR_ATR_RXVAL_3 }; + assert (0 <= slot_id && slot_id < 4); + return reg[slot_id]; +} + +static int +to_slot(txrx_t txrx, int which_side) +{ + // TX_A = 0 + // RX_A = 1 + // TX_B = 2 + // RX_B = 3 + return ((which_side & 0x1) << 1) | ((txrx & 0x1) == C_RX); +} + +bool +usrp_basic::common_set_pga(txrx_t txrx, int which_amp, double gain) +{ + if (which_amp < 0 || which_amp > 3) + return false; + + gain = std::min(common_pga_max(txrx), + std::max(common_pga_min(txrx), gain)); + + int codec = which_amp >> 1; + int int_gain = (int) rint((gain - common_pga_min(txrx)) / common_pga_db_per_step(txrx)); + + if (txrx == C_TX){ // 0 and 1 are same, as are 2 and 3 + return _write_9862(codec, REG_TX_PGA, int_gain); + } + else { + int reg = (which_amp & 1) == 0 ? REG_RX_A : REG_RX_B; + + // read current value to get input buffer bypass flag. + unsigned char cur_rx; + if (!_read_9862(codec, reg, &cur_rx)) + return false; + + cur_rx = (cur_rx & RX_X_BYPASS_INPUT_BUFFER) | (int_gain & 0x7f); + return _write_9862(codec, reg, cur_rx); + } +} + +double +usrp_basic::common_pga(txrx_t txrx, int which_amp) const +{ + if (which_amp < 0 || which_amp > 3) + return READ_FAILED; + + if (txrx == C_TX){ + int codec = which_amp >> 1; + unsigned char v; + bool ok = _read_9862 (codec, REG_TX_PGA, &v); + if (!ok) + return READ_FAILED; + + return (pga_db_per_step() * v) + pga_min(); + } + else { + int codec = which_amp >> 1; + int reg = (which_amp & 1) == 0 ? REG_RX_A : REG_RX_B; + unsigned char v; + bool ok = _read_9862 (codec, reg, &v); + if (!ok) + return READ_FAILED; + + return (pga_db_per_step() * (v & 0x1f)) + pga_min(); + } +} + +double +usrp_basic::common_pga_min(txrx_t txrx) const +{ + if (txrx == C_TX) + return -20.0; + else + return 0.0; +} + +double +usrp_basic::common_pga_max(txrx_t txrx) const +{ + if (txrx == C_TX) + return 0.0; + else + return 20.0; +} + +double +usrp_basic::common_pga_db_per_step(txrx_t txrx) const +{ + if (txrx == C_TX) + return 20.0 / 255; + else + return 20.0 / 20; +} + +bool +usrp_basic::_common_write_oe(txrx_t txrx, int which_side, int value, int mask) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + return _write_fpga_reg(slot_id_to_oe_reg(to_slot(txrx, which_side)), + (mask << 16) | (value & 0xffff)); +} + +bool +usrp_basic::common_write_io(txrx_t txrx, int which_side, int value, int mask) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + return _write_fpga_reg(slot_id_to_io_reg(to_slot(txrx, which_side)), + (mask << 16) | (value & 0xffff)); +} + +bool +usrp_basic::common_read_io(txrx_t txrx, int which_side, int *value) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + int t; + int reg = which_side + 1; // FIXME, *very* magic number (fix in serial_io.v) + bool ok = _read_fpga_reg(reg, &t); + if (!ok) + return false; + + if (txrx == C_TX){ + *value = t & 0xffff; // FIXME, more magic + return true; + } + else { + *value = (t >> 16) & 0xffff; // FIXME, more magic + return true; + } +} + +int +usrp_basic::common_read_io(txrx_t txrx, int which_side) +{ + int value; + if (!common_read_io(txrx, which_side, &value)) + return READ_FAILED; + return value; +} + +bool +usrp_basic::common_write_refclk(txrx_t txrx, int which_side, int value) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + return _write_fpga_reg(slot_id_to_refclk_reg(to_slot(txrx, which_side)), + value); +} + +bool +usrp_basic::common_write_atr_mask(txrx_t txrx, int which_side, int value) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + return _write_fpga_reg(slot_id_to_atr_mask_reg(to_slot(txrx, which_side)), + value); +} + +bool +usrp_basic::common_write_atr_txval(txrx_t txrx, int which_side, int value) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + return _write_fpga_reg(slot_id_to_atr_txval_reg(to_slot(txrx, which_side)), + value); +} + +bool +usrp_basic::common_write_atr_rxval(txrx_t txrx, int which_side, int value) +{ + if (! (0 <= which_side && which_side <= 1)) + return false; + + return _write_fpga_reg(slot_id_to_atr_rxval_reg(to_slot(txrx, which_side)), + value); +} + +bool +usrp_basic::common_write_aux_dac(txrx_t txrx, int which_side, int which_dac, int value) +{ + return _write_aux_dac(to_slot(txrx, which_side), which_dac, value); +} + +bool +usrp_basic::common_read_aux_adc(txrx_t txrx, int which_side, int which_adc, int *value) +{ + return _read_aux_adc(to_slot(txrx, which_side), which_adc, value); +} + +int +usrp_basic::common_read_aux_adc(txrx_t txrx, int which_side, int which_adc) +{ + return _read_aux_adc(to_slot(txrx, which_side), which_adc); +} + + +//////////////////////////////////////////////////////////////// +// +// usrp_basic_rx +// +//////////////////////////////////////////////////////////////// + +static unsigned char rx_init_regs[] = { + REG_RX_PWR_DN, 0, + REG_RX_A, 0, // minimum gain = 0x00 (max gain = 0x14) + REG_RX_B, 0, // minimum gain = 0x00 (max gain = 0x14) + REG_RX_MISC, (RX_MISC_HS_DUTY_CYCLE | RX_MISC_CLK_DUTY), + REG_RX_IF, (RX_IF_USE_CLKOUT1 + | RX_IF_2S_COMP), + REG_RX_DIGITAL, (RX_DIGITAL_2_CHAN) +}; + + +usrp_basic_rx::usrp_basic_rx (int which_board, int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename + ) + : usrp_basic (which_board, open_rx_interface, fpga_filename, firmware_filename), + d_devhandle (0), d_ephandle (0), + d_bytes_seen (0), d_first_read (true), + d_rx_enable (false) +{ + // initialize rx specific registers + + if (!usrp_9862_write_many_all (d_udh, rx_init_regs, sizeof (rx_init_regs))){ + fprintf (stderr, "usrp_basic_rx: failed to init AD9862 RX regs\n"); + throw std::runtime_error ("usrp_basic_rx/init_9862"); + } + + if (0){ + // FIXME power down 2nd codec rx path + usrp_9862_write (d_udh, 1, REG_RX_PWR_DN, 0x1); // power down everything + } + + // Reset the rx path and leave it disabled. + set_rx_enable (false); + usrp_set_fpga_rx_reset (d_udh, true); + usrp_set_fpga_rx_reset (d_udh, false); + + set_fpga_rx_sample_rate_divisor (2); // usually correct + + set_dc_offset_cl_enable(0xf, 0xf); // enable DC offset removal control loops + + probe_rx_slots (false); + + //d_db[0] = instantiate_dbs(d_dbid[0], this, 0); + //d_db[1] = instantiate_dbs(d_dbid[1], this, 1); + + // check fusb buffering parameters + + if (fusb_block_size < 0 || fusb_block_size > FUSB_BLOCK_SIZE) + throw std::out_of_range ("usrp_basic_rx: invalid fusb_block_size"); + + if (fusb_nblocks < 0) + throw std::out_of_range ("usrp_basic_rx: invalid fusb_nblocks"); + + if (fusb_block_size == 0) + fusb_block_size = fusb_sysconfig::default_block_size(); + + if (fusb_nblocks == 0) + fusb_nblocks = std::max (1, FUSB_BUFFER_SIZE / fusb_block_size); + + d_devhandle = fusb_sysconfig::make_devhandle (d_udh); + d_ephandle = d_devhandle->make_ephandle (USRP_RX_ENDPOINT, true, + fusb_block_size, fusb_nblocks); + + write_atr_mask(0, 0); // zero Rx A Auto Transmit/Receive regs + write_atr_txval(0, 0); + write_atr_rxval(0, 0); + write_atr_mask(1, 0); // zero Rx B Auto Transmit/Receive regs + write_atr_txval(1, 0); + write_atr_rxval(1, 0); +} + +static unsigned char rx_fini_regs[] = { + REG_RX_PWR_DN, 0x1 // power down everything +}; + +usrp_basic_rx::~usrp_basic_rx () +{ + if (!set_rx_enable (false)){ + fprintf (stderr, "usrp_basic_rx: set_fpga_rx_enable failed\n"); + usb_strerror (); + } + + d_ephandle->stop (); + delete d_ephandle; + delete d_devhandle; + + if (!usrp_9862_write_many_all (d_udh, rx_fini_regs, sizeof (rx_fini_regs))){ + fprintf (stderr, "usrp_basic_rx: failed to fini AD9862 RX regs\n"); + } + + shutdown_daughterboards(); +} + + +bool +usrp_basic_rx::start () +{ + if (!usrp_basic::start ()) // invoke parent's method + return false; + + // fire off reads before asserting rx_enable + + if (!d_ephandle->start ()){ + fprintf (stderr, "usrp_basic_rx: failed to start end point streaming"); + usb_strerror (); + return false; + } + + if (!set_rx_enable (true)){ + fprintf (stderr, "usrp_basic_rx: set_rx_enable failed\n"); + usb_strerror (); + return false; + } + + return true; +} + +bool +usrp_basic_rx::stop () +{ + bool ok = usrp_basic::stop(); + + if (!set_rx_enable(false)){ + fprintf (stderr, "usrp_basic_rx: set_rx_enable(false) failed\n"); + usb_strerror (); + ok = false; + } + + if (!d_ephandle->stop()){ + fprintf (stderr, "usrp_basic_rx: failed to stop end point streaming"); + usb_strerror (); + ok = false; + } + + return ok; +} + +usrp_basic_rx * +usrp_basic_rx::make (int which_board, int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename) +{ + usrp_basic_rx *u = 0; + + try { + u = new usrp_basic_rx (which_board, fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename); + return u; + } + catch (...){ + delete u; + return 0; + } + + return u; +} + +bool +usrp_basic_rx::set_fpga_rx_sample_rate_divisor (unsigned int div) +{ + return _write_fpga_reg (FR_RX_SAMPLE_RATE_DIV, div - 1); +} + + +/* + * \brief read data from the D/A's via the FPGA. + * \p len must be a multiple of 512 bytes. + * + * \returns the number of bytes read, or -1 on error. + * + * If overrun is non-NULL it will be set true iff an RX overrun is detected. + */ +int +usrp_basic_rx::read (void *buf, int len, bool *overrun) +{ + int r; + + if (overrun) + *overrun = false; + + if (len < 0 || (len % 512) != 0){ + fprintf (stderr, "usrp_basic_rx::read: invalid length = %d\n", len); + return -1; + } + + r = d_ephandle->read (buf, len); + if (r > 0) + d_bytes_seen += r; + + /* + * In many cases, the FPGA reports an rx overrun right after we + * enable the Rx path. If this is our first read, check for the + * overrun to clear the condition, then ignore the result. + */ + if (0 && d_first_read){ // FIXME + d_first_read = false; + bool bogus_overrun; + usrp_check_rx_overrun (d_udh, &bogus_overrun); + } + + if (overrun != 0 && d_bytes_seen >= d_bytes_per_poll){ + d_bytes_seen = 0; + if (!usrp_check_rx_overrun (d_udh, overrun)){ + fprintf (stderr, "usrp_basic_rx: usrp_check_rx_overrun failed\n"); + usb_strerror (); + } + } + + return r; +} + +bool +usrp_basic_rx::set_rx_enable (bool on) +{ + d_rx_enable = on; + return usrp_set_fpga_rx_enable (d_udh, on); +} + +// conditional disable, return prev state +bool +usrp_basic_rx::disable_rx () +{ + bool enabled = rx_enable (); + if (enabled) + set_rx_enable (false); + return enabled; +} + +// conditional set +void +usrp_basic_rx::restore_rx (bool on) +{ + if (on != rx_enable ()) + set_rx_enable (on); +} + +void +usrp_basic_rx::probe_rx_slots (bool verbose) +{ + struct usrp_dboard_eeprom eeprom; + static int slot_id_map[2] = { SLOT_RX_A, SLOT_RX_B }; + static const char *slot_name[2] = { "RX d'board A", "RX d'board B" }; + + for (int i = 0; i < 2; i++){ + int slot_id = slot_id_map [i]; + const char *msg = 0; + usrp_dbeeprom_status_t s = usrp_read_dboard_eeprom (d_udh, slot_id, &eeprom); + + switch (s){ + case UDBE_OK: + d_dbid[i] = eeprom.id; + msg = usrp_dbid_to_string (eeprom.id).c_str (); + set_adc_offset (2*i+0, eeprom.offset[0]); + set_adc_offset (2*i+1, eeprom.offset[1]); + _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | eeprom.oe); + _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); + break; + + case UDBE_NO_EEPROM: + d_dbid[i] = -1; + msg = ""; + _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); + _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); + break; + + case UDBE_INVALID_EEPROM: + d_dbid[i] = -2; + msg = "Invalid EEPROM contents"; + _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); + _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); + break; + + case UDBE_BAD_SLOT: + default: + assert (0); + } + + if (verbose){ + fflush (stdout); + fprintf (stderr, "%s: %s\n", slot_name[i], msg); + } + } +} + +bool +usrp_basic_rx::set_pga (int which_amp, double gain) +{ + return common_set_pga(C_RX, which_amp, gain); +} + +double +usrp_basic_rx::pga(int which_amp) const +{ + return common_pga(C_RX, which_amp); +} + +double +usrp_basic_rx::pga_min() const +{ + return common_pga_min(C_RX); +} + +double +usrp_basic_rx::pga_max() const +{ + return common_pga_max(C_RX); +} + +double +usrp_basic_rx::pga_db_per_step() const +{ + return common_pga_db_per_step(C_RX); +} + +bool +usrp_basic_rx::_write_oe (int which_side, int value, int mask) +{ + return _common_write_oe(C_RX, which_side, value, mask); +} + +bool +usrp_basic_rx::write_io (int which_side, int value, int mask) +{ + return common_write_io(C_RX, which_side, value, mask); +} + +bool +usrp_basic_rx::read_io (int which_side, int *value) +{ + return common_read_io(C_RX, which_side, value); +} + +int +usrp_basic_rx::read_io (int which_side) +{ + return common_read_io(C_RX, which_side); +} + +bool +usrp_basic_rx::write_refclk(int which_side, int value) +{ + return common_write_refclk(C_RX, which_side, value); +} + +bool +usrp_basic_rx::write_atr_mask(int which_side, int value) +{ + return common_write_atr_mask(C_RX, which_side, value); +} + +bool +usrp_basic_rx::write_atr_txval(int which_side, int value) +{ + return common_write_atr_txval(C_RX, which_side, value); +} + +bool +usrp_basic_rx::write_atr_rxval(int which_side, int value) +{ + return common_write_atr_rxval(C_RX, which_side, value); +} + +bool +usrp_basic_rx::write_aux_dac (int which_side, int which_dac, int value) +{ + return common_write_aux_dac(C_RX, which_side, which_dac, value); +} + +bool +usrp_basic_rx::read_aux_adc (int which_side, int which_adc, int *value) +{ + return common_read_aux_adc(C_RX, which_side, which_adc, value); +} + +int +usrp_basic_rx::read_aux_adc (int which_side, int which_adc) +{ + return common_read_aux_adc(C_RX, which_side, which_adc); +} + +int +usrp_basic_rx::block_size () const { return d_ephandle->block_size(); } + +//////////////////////////////////////////////////////////////// +// +// usrp_basic_tx +// +//////////////////////////////////////////////////////////////// + + +// +// DAC input rate 64 MHz interleaved for a total input rate of 128 MHz +// DAC input is latched on rising edge of CLKOUT2 +// NCO is disabled +// interpolate 2x +// coarse modulator disabled +// + +static unsigned char tx_init_regs[] = { + REG_TX_PWR_DN, 0, + REG_TX_A_OFFSET_LO, 0, + REG_TX_A_OFFSET_HI, 0, + REG_TX_B_OFFSET_LO, 0, + REG_TX_B_OFFSET_HI, 0, + REG_TX_A_GAIN, (TX_X_GAIN_COARSE_FULL | 0), + REG_TX_B_GAIN, (TX_X_GAIN_COARSE_FULL | 0), + REG_TX_PGA, 0xff, // maximum gain (0 dB) + REG_TX_MISC, 0, + REG_TX_IF, (TX_IF_USE_CLKOUT1 + | TX_IF_I_FIRST + | TX_IF_INV_TX_SYNC + | TX_IF_2S_COMP + | TX_IF_INTERLEAVED), + REG_TX_DIGITAL, (TX_DIGITAL_2_DATA_PATHS + | TX_DIGITAL_INTERPOLATE_4X), + REG_TX_MODULATOR, (TX_MODULATOR_DISABLE_NCO + | TX_MODULATOR_COARSE_MODULATION_NONE), + REG_TX_NCO_FTW_7_0, 0, + REG_TX_NCO_FTW_15_8, 0, + REG_TX_NCO_FTW_23_16, 0 +}; + +usrp_basic_tx::usrp_basic_tx (int which_board, int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename) + : usrp_basic (which_board, open_tx_interface, fpga_filename, firmware_filename), + d_devhandle (0), d_ephandle (0), + d_bytes_seen (0), d_first_write (true), + d_tx_enable (false) +{ + if (!usrp_9862_write_many_all (d_udh, tx_init_regs, sizeof (tx_init_regs))){ + fprintf (stderr, "usrp_basic_tx: failed to init AD9862 TX regs\n"); + throw std::runtime_error ("usrp_basic_tx/init_9862"); + } + + if (0){ + // FIXME power down 2nd codec tx path + usrp_9862_write (d_udh, 1, REG_TX_PWR_DN, + (TX_PWR_DN_TX_DIGITAL + | TX_PWR_DN_TX_ANALOG_BOTH)); + } + + // Reset the tx path and leave it disabled. + set_tx_enable (false); + usrp_set_fpga_tx_reset (d_udh, true); + usrp_set_fpga_tx_reset (d_udh, false); + + set_fpga_tx_sample_rate_divisor (4); // we're using interp x4 + + probe_tx_slots (false); + + //d_db[0] = instantiate_dbs(d_dbid[0], this, 0); + //d_db[1] = instantiate_dbs(d_dbid[1], this, 1); + + // check fusb buffering parameters + + if (fusb_block_size < 0 || fusb_block_size > FUSB_BLOCK_SIZE) + throw std::out_of_range ("usrp_basic_rx: invalid fusb_block_size"); + + if (fusb_nblocks < 0) + throw std::out_of_range ("usrp_basic_rx: invalid fusb_nblocks"); + + if (fusb_block_size == 0) + fusb_block_size = FUSB_BLOCK_SIZE; + + if (fusb_nblocks == 0) + fusb_nblocks = std::max (1, FUSB_BUFFER_SIZE / fusb_block_size); + + d_devhandle = fusb_sysconfig::make_devhandle (d_udh); + d_ephandle = d_devhandle->make_ephandle (USRP_TX_ENDPOINT, false, + fusb_block_size, fusb_nblocks); + + write_atr_mask(0, 0); // zero Tx A Auto Transmit/Receive regs + write_atr_txval(0, 0); + write_atr_rxval(0, 0); + write_atr_mask(1, 0); // zero Tx B Auto Transmit/Receive regs + write_atr_txval(1, 0); + write_atr_rxval(1, 0); +} + + +static unsigned char tx_fini_regs[] = { + REG_TX_PWR_DN, (TX_PWR_DN_TX_DIGITAL + | TX_PWR_DN_TX_ANALOG_BOTH), + REG_TX_MODULATOR, (TX_MODULATOR_DISABLE_NCO + | TX_MODULATOR_COARSE_MODULATION_NONE) +}; + +usrp_basic_tx::~usrp_basic_tx () +{ + d_ephandle->stop (); + delete d_ephandle; + delete d_devhandle; + + if (!usrp_9862_write_many_all (d_udh, tx_fini_regs, sizeof (tx_fini_regs))){ + fprintf (stderr, "usrp_basic_tx: failed to fini AD9862 TX regs\n"); + } + + shutdown_daughterboards(); +} + +bool +usrp_basic_tx::start () +{ + if (!usrp_basic::start ()) + return false; + + if (!set_tx_enable (true)){ + fprintf (stderr, "usrp_basic_tx: set_tx_enable failed\n"); + usb_strerror (); + return false; + } + + if (!d_ephandle->start ()){ + fprintf (stderr, "usrp_basic_tx: failed to start end point streaming"); + usb_strerror (); + return false; + } + + return true; +} + +bool +usrp_basic_tx::stop () +{ + bool ok = usrp_basic::stop (); + + if (!d_ephandle->stop ()){ + fprintf (stderr, "usrp_basic_tx: failed to stop end point streaming"); + usb_strerror (); + ok = false; + } + + if (!set_tx_enable (false)){ + fprintf (stderr, "usrp_basic_tx: set_tx_enable(false) failed\n"); + usb_strerror (); + ok = false; + } + + return ok; +} + +usrp_basic_tx * +usrp_basic_tx::make (int which_board, int fusb_block_size, int fusb_nblocks, + const std::string fpga_filename, + const std::string firmware_filename) +{ + usrp_basic_tx *u = 0; + + try { + u = new usrp_basic_tx (which_board, fusb_block_size, fusb_nblocks, + fpga_filename, firmware_filename); + return u; + } + catch (...){ + delete u; + return 0; + } + + return u; +} + +bool +usrp_basic_tx::set_fpga_tx_sample_rate_divisor (unsigned int div) +{ + return _write_fpga_reg (FR_TX_SAMPLE_RATE_DIV, div - 1); +} + +/*! + * \brief Write data to the A/D's via the FPGA. + * + * \p len must be a multiple of 512 bytes. + * \returns number of bytes written or -1 on error. + * + * if \p underrun is non-NULL, it will be set to true iff + * a transmit underrun condition is detected. + */ +int +usrp_basic_tx::write (const void *buf, int len, bool *underrun) +{ + int r; + + if (underrun) + *underrun = false; + + if (len < 0 || (len % 512) != 0){ + fprintf (stderr, "usrp_basic_tx::write: invalid length = %d\n", len); + return -1; + } + + r = d_ephandle->write (buf, len); + if (r > 0) + d_bytes_seen += r; + + /* + * In many cases, the FPGA reports an tx underrun right after we + * enable the Tx path. If this is our first write, check for the + * underrun to clear the condition, then ignore the result. + */ + if (d_first_write && d_bytes_seen >= 4 * FUSB_BLOCK_SIZE){ + d_first_write = false; + bool bogus_underrun; + usrp_check_tx_underrun (d_udh, &bogus_underrun); + } + + if (underrun != 0 && d_bytes_seen >= d_bytes_per_poll){ + d_bytes_seen = 0; + if (!usrp_check_tx_underrun (d_udh, underrun)){ + fprintf (stderr, "usrp_basic_tx: usrp_check_tx_underrun failed\n"); + usb_strerror (); + } + } + + return r; +} + +void +usrp_basic_tx::wait_for_completion () +{ + d_ephandle->wait_for_completion (); +} + +bool +usrp_basic_tx::set_tx_enable (bool on) +{ + d_tx_enable = on; + // fprintf (stderr, "set_tx_enable %d\n", on); + return usrp_set_fpga_tx_enable (d_udh, on); +} + +// conditional disable, return prev state +bool +usrp_basic_tx::disable_tx () +{ + bool enabled = tx_enable (); + if (enabled) + set_tx_enable (false); + return enabled; +} + +// conditional set +void +usrp_basic_tx::restore_tx (bool on) +{ + if (on != tx_enable ()) + set_tx_enable (on); +} + +void +usrp_basic_tx::probe_tx_slots (bool verbose) +{ + struct usrp_dboard_eeprom eeprom; + static int slot_id_map[2] = { SLOT_TX_A, SLOT_TX_B }; + static const char *slot_name[2] = { "TX d'board A", "TX d'board B" }; + + for (int i = 0; i < 2; i++){ + int slot_id = slot_id_map [i]; + const char *msg = 0; + usrp_dbeeprom_status_t s = usrp_read_dboard_eeprom (d_udh, slot_id, &eeprom); + + switch (s){ + case UDBE_OK: + d_dbid[i] = eeprom.id; + msg = usrp_dbid_to_string (eeprom.id).c_str (); + // FIXME, figure out interpretation of dc offset for TX d'boards + // offset = (eeprom.offset[1] << 16) | (eeprom.offset[0] & 0xffff); + _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | eeprom.oe); + _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); + break; + + case UDBE_NO_EEPROM: + d_dbid[i] = -1; + msg = ""; + _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); + _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); + break; + + case UDBE_INVALID_EEPROM: + d_dbid[i] = -2; + msg = "Invalid EEPROM contents"; + _write_fpga_reg (slot_id_to_oe_reg(slot_id), (0xffff << 16) | 0x0000); + _write_fpga_reg (slot_id_to_io_reg(slot_id), (0xffff << 16) | 0x0000); + break; + + case UDBE_BAD_SLOT: + default: + assert (0); + } + + if (verbose){ + fflush (stdout); + fprintf (stderr, "%s: %s\n", slot_name[i], msg); + } + } +} + +bool +usrp_basic_tx::set_pga (int which_amp, double gain) +{ + return common_set_pga(C_TX, which_amp, gain); +} + +double +usrp_basic_tx::pga (int which_amp) const +{ + return common_pga(C_TX, which_amp); +} + +double +usrp_basic_tx::pga_min() const +{ + return common_pga_min(C_TX); +} + +double +usrp_basic_tx::pga_max() const +{ + return common_pga_max(C_TX); +} + +double +usrp_basic_tx::pga_db_per_step() const +{ + return common_pga_db_per_step(C_TX); +} + +bool +usrp_basic_tx::_write_oe (int which_side, int value, int mask) +{ + return _common_write_oe(C_TX, which_side, value, mask); +} + +bool +usrp_basic_tx::write_io (int which_side, int value, int mask) +{ + return common_write_io(C_TX, which_side, value, mask); +} + +bool +usrp_basic_tx::read_io (int which_side, int *value) +{ + return common_read_io(C_TX, which_side, value); +} + +int +usrp_basic_tx::read_io (int which_side) +{ + return common_read_io(C_TX, which_side); +} + +bool +usrp_basic_tx::write_refclk(int which_side, int value) +{ + return common_write_refclk(C_TX, which_side, value); +} + +bool +usrp_basic_tx::write_atr_mask(int which_side, int value) +{ + return common_write_atr_mask(C_TX, which_side, value); +} + +bool +usrp_basic_tx::write_atr_txval(int which_side, int value) +{ + return common_write_atr_txval(C_TX, which_side, value); +} + +bool +usrp_basic_tx::write_atr_rxval(int which_side, int value) +{ + return common_write_atr_rxval(C_TX, which_side, value); +} + +bool +usrp_basic_tx::write_aux_dac (int which_side, int which_dac, int value) +{ + return common_write_aux_dac(C_TX, which_side, which_dac, value); +} + +bool +usrp_basic_tx::read_aux_adc (int which_side, int which_adc, int *value) +{ + return common_read_aux_adc(C_TX, which_side, which_adc, value); +} + +int +usrp_basic_tx::read_aux_adc (int which_side, int which_adc) +{ + return common_read_aux_adc(C_TX, which_side, which_adc); +} + +int +usrp_basic_tx::block_size () const { return d_ephandle->block_size(); } + diff --git a/usrp/host/lib/legacy/usrp_basic.h b/usrp/host/lib/legacy/usrp_basic.h new file mode 100644 index 00000000..86c48635 --- /dev/null +++ b/usrp/host/lib/legacy/usrp_basic.h @@ -0,0 +1,991 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003,2004,2008 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. + */ + +/* + * ---------------------------------------------------------------------- + * Mid level interface to the Universal Software Radio Peripheral (Rev 1) + * + * These classes implement the basic functionality for talking to the + * USRP. They try to be as independent of the signal processing code + * in FPGA as possible. They implement access to the low level + * peripherals on the board, provide a common way for reading and + * writing registers in the FPGA, and provide the high speed interface + * to streaming data across the USB. + * + * It is expected that subclasses will be derived that provide + * access to the functionality to a particular FPGA configuration. + * ---------------------------------------------------------------------- + */ + +#ifndef INCLUDED_USRP_BASIC_H +#define INCLUDED_USRP_BASIC_H + +#include +#include +#include +#include +#include +#include + +struct usb_dev_handle; +class fusb_devhandle; +class fusb_ephandle; + +enum txrx_t { + C_RX = 0, + C_TX = 1 +}; + +/*! + * \brief abstract base class for usrp operations + * \ingroup usrp + */ +class usrp_basic : boost::noncopyable +{ +protected: + void shutdown_daughterboards(); + +protected: + struct usb_dev_handle *d_udh; + int d_usb_data_rate; // bytes/sec + int d_bytes_per_poll; // how often to poll for overruns + bool d_verbose; + long d_fpga_master_clock_freq; + + static const int MAX_REGS = 128; + unsigned int d_fpga_shadows[MAX_REGS]; + + int d_dbid[2]; // daughterboard ID's (side A, side B) + + /*! + * Shared pointers to subclasses of db_base. + * + * The outer vector is of length 2 (0 = side A, 1 = side B). The + * inner vectors are of length 1, 2 or 3 depending on the number of + * subdevices implemented by the daugherboard. At this time, only + * the Basic Rx and LF Rx implement more than 1 subdevice. + */ + std::vector< std::vector > d_db; + + //! One time call, made only only from usrp_standard_*::make after shared_ptr is created. + void init_db(usrp_basic_sptr u); + + + usrp_basic (int which_board, + struct usb_dev_handle *open_interface (struct usb_device *dev), + const std::string fpga_filename = "", + const std::string firmware_filename = ""); + + /*! + * \brief advise usrp_basic of usb data rate (bytes/sec) + * + * N.B., this doesn't tweak any hardware. Derived classes + * should call this to inform us of the data rate whenever it's + * first set or if it changes. + * + * \param usb_data_rate bytes/sec + */ + void set_usb_data_rate (int usb_data_rate); + + /*! + * \brief Write auxiliary digital to analog converter. + * + * \param slot Which Tx or Rx slot to write. + * N.B., SLOT_TX_A and SLOT_RX_A share the same AUX DAC's. + * SLOT_TX_B and SLOT_RX_B share the same AUX DAC's. + * \param which_dac [0,3] RX slots must use only 0 and 1. TX slots must use only 2 and 3. + * \param value [0,4095] + * \returns true iff successful + */ + bool _write_aux_dac (int slot, int which_dac, int value); + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param slot 2-bit slot number. E.g., SLOT_TX_A + * \param which_adc [0,1] + * \param value return 12-bit value [0,4095] + * \returns true iff successful + */ + bool _read_aux_adc (int slot, int which_adc, int *value); + + /*! + * \brief Read auxiliary analog to digital converter. + * + * \param slot 2-bit slot number. E.g., SLOT_TX_A + * \param which_adc [0,1] + * \returns value in the range [0,4095] if successful, else READ_FAILED. + */ + int _read_aux_adc (int slot, int which_adc); + + +public: + virtual ~usrp_basic (); + + + /*! + * Return a vector of vectors that contain shared pointers + * to the daughterboard instance(s) associated with the specified side. + * + * It is an error to use the returned objects after the usrp_basic + * object has been destroyed. + */ + std::vector > db() const { return d_db; } + + /*! + * Return a vector of size >= 1 that contains shared pointers + * to the daughterboard instance(s) associated with the specified side. + * + * \param which_side [0,1] which daughterboard + * + * It is an error to use the returned objects after the usrp_basic + * object has been destroyed. + */ + std::vector db(int which_side); + + /*! + * \brief is the subdev_spec valid? + */ + bool is_valid(const usrp_subdev_spec &ss); + + /*! + * \brief given a subdev_spec, return the corresponding daughterboard object. + * \throws std::invalid_ argument if ss is invalid. + * + * \param ss specifies the side and subdevice + */ + db_base_sptr selected_subdev(const usrp_subdev_spec &ss); + + /*! + * \brief return frequency of master oscillator on USRP + */ + long fpga_master_clock_freq () const { return d_fpga_master_clock_freq; } + + /*! + * Tell API that the master oscillator on the USRP is operating at a non-standard + * fixed frequency. This is only needed for custom USRP hardware modified to + * operate at a different frequency from the default factory configuration. This + * function must be called prior to any other API function. + * \param master_clock USRP2 FPGA master clock frequency in Hz (10..64 MHz) + */ + void set_fpga_master_clock_freq (long master_clock) { d_fpga_master_clock_freq = master_clock; } + + /*! + * \returns usb data rate in bytes/sec + */ + int usb_data_rate () const { return d_usb_data_rate; } + + void set_verbose (bool on) { d_verbose = on; } + + //! magic value used on alternate register read interfaces + static const int READ_FAILED = -99999; + + /*! + * \brief Write EEPROM on motherboard or any daughterboard. + * \param i2c_addr I2C bus address of EEPROM + * \param eeprom_offset byte offset in EEPROM to begin writing + * \param buf the data to write + * \returns true iff sucessful + */ + bool write_eeprom (int i2c_addr, int eeprom_offset, const std::string buf); + + /*! + * \brief Read EEPROM on motherboard or any daughterboard. + * \param i2c_addr I2C bus address of EEPROM + * \param eeprom_offset byte offset in EEPROM to begin reading + * \param len number of bytes to read + * \returns the data read if successful, else a zero length string. + */ + std::string read_eeprom (int i2c_addr, int eeprom_offset, int len); + + /*! + * \brief Write to I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param buf the data to write + * \returns true iff successful + * Writes are limited to a maximum of of 64 bytes. + */ + bool write_i2c (int i2c_addr, const std::string buf); + + /*! + * \brief Read from I2C peripheral + * \param i2c_addr I2C bus address (7-bits) + * \param len number of bytes to read + * \returns the data read if successful, else a zero length string. + * Reads are limited to a maximum of 64 bytes. + */ + std::string read_i2c (int i2c_addr, int len); + + /*! + * \brief Set ADC offset correction + * \param which_adc which ADC[0,3]: 0 = RX_A I, 1 = RX_A Q... + * \param offset 16-bit value to subtract from raw ADC input. + */ + bool set_adc_offset (int which_adc, int offset); + + /*! + * \brief Set DAC offset correction + * \param which_dac which DAC[0,3]: 0 = TX_A I, 1 = TX_A Q... + * \param offset 10-bit offset value (ambiguous format: See AD9862 datasheet). + * \param offset_pin 1-bit value. If 0 offset applied to -ve differential pin; + * If 1 offset applied to +ve differential pin. + */ + bool set_dac_offset (int which_dac, int offset, int offset_pin); + + /*! + * \brief Control ADC input buffer + * \param which_adc which ADC[0,3] + * \param bypass if non-zero, bypass input buffer and connect input + * directly to switched cap SHA input of RxPGA. + */ + bool set_adc_buffer_bypass (int which_adc, bool bypass); + + /*! + * \brief Enable/disable automatic DC offset removal control loop in FPGA + * + * \param bits which control loops to enable + * \param mask which \p bits to pay attention to + * + * If the corresponding bit is set, enable the automatic DC + * offset correction control loop. + * + *